43 $base_url =
dbx()->get_remember_var(
'base_url', 0,
'dbx');
46 ?
'https://' :
'http://';
48 $host = preg_replace(
'/:\d+$/',
'', (
string) $host);
50 if ($host ===
'heserver') {
52 } elseif ($host ===
'localhost' || $host ===
'127.0.0.1') {
56 $port = (int) (
$_SERVER[
'SERVER_PORT'] ?? 0);
57 $xport = ($port && $port != 80 && $port != 443) ?
":$port" :
'';
58 $request_origin = $protocol . $host . $xport;
60 if ($base_url && $port != 4221) {
61 $cached = parse_url((
string) $base_url);
62 $cached_scheme = strtolower((
string) ($cached[
'scheme'] ??
''));
63 $cached_host = strtolower((
string) ($cached[
'host'] ??
''));
64 $cached_port = (int) ($cached[
'port'] ?? ($cached_scheme ===
'https' ? 443 : 80));
65 $request_port = $port ?: ($protocol ===
'https://' ? 443 : 80);
68 $cached_scheme !== rtrim($protocol,
':/') ||
69 $cached_host !== strtolower($host) ||
70 $cached_port !== $request_port
78 $base_url = $request_origin . rtrim($uri,
'/');
84 if (file_exists($base_href_file)) {
85 $base_url = trim(preg_replace(
'/[\x00-\x1F\x7F]/',
'', file_get_contents($base_href_file)));
90 $base_url = str_replace(
'\\',
'/', rtrim($base_url,
'\\'));
91 if (!in_array(substr($base_url, -1), [
'/',
'?'])) {
95 dbx()->set_remember_var(
'base_url', $base_url,
'dbx');
111 if ($modul ==
'dbx') {
118 $config[
'accessible_lng'] =
'de,en,es';
119 $config[
'default_color'] =
'blau';
120 $config[
'default_design_user'] =
'lda';
121 $config[
'default_design_admin'] =
'_admin';
126 $config[
'secure']=
'secure-key';
146 $url_components = parse_url($request);
149 if (isset($url_components[
'path'])) {
150 $uri = $url_components[
'path'];
154 if (isset($url_components[
'query'])) {
155 parse_str($url_components[
'query'], $query_params);
156 foreach ($query_params as $key => $value) {
157 $_GET[$key] = $value;
177 $url = trim(str_replace(
'&',
'&', (
string) $url));
180 $hashPos = strpos($url,
'#');
181 if ($hashPos !==
false) {
182 $fragment = substr($url, $hashPos);
183 $url = substr($url, 0, $hashPos);
189 if (substr($url, 0, 1) ===
'?') {
190 $query = substr($url, 1);
192 parse_str($query, $params);
197 'fragment' => $fragment,
202 foreach (array(
'?',
'&') as $delimiter) {
203 $pos = strpos($url, $delimiter);
204 if ($pos !==
false && ($delimPos ===
false || $pos < $delimPos)) {
209 if ($delimPos !==
false) {
210 $path = substr($url, 0, $delimPos);
211 $query = substr($url, $delimPos + 1);
213 parse_str($query, $params);
220 'permalink' => str_replace(
'\\',
'/', $path),
222 'fragment' => $fragment,
243 $permalink = str_replace(
'\\',
'/', trim((
string) $permalink));
244 $permalink = trim($permalink,
'/');
247 if ($permalink ===
'') {
248 if (empty($params)) {
249 return '?' . $fragment;
251 return '?' . http_build_query($params,
'',
'&', PHP_QUERY_RFC3986) . $fragment;
254 if (empty($params)) {
255 return $permalink . $fragment;
258 return $permalink .
'?' . http_build_query($params,
'',
'&', PHP_QUERY_RFC3986) . $fragment;
281 foreach ($params as $key => $value) {
282 $route[
'params'][(string) $key] = (
string) $value;
284 return $this->
build_route_url($route[
'permalink'], $route[
'params'], $route[
'fragment']);
295 if ($route[
'permalink'] ===
'') {
296 return empty($route[
'params'])
301 if (empty($route[
'params'])) {
302 return $route[
'permalink'] .
'?';
305 return $this->
build_route_url($route[
'permalink'], $route[
'params']) .
'&';
315 $requestUri =
$_SERVER[
'REQUEST_URI'] ??
'';
316 if ($requestUri ===
'') {
320 if ($baseUri ===
'') {
324 $path = parse_url($requestUri, PHP_URL_PATH) ??
'';
325 $path = str_replace(
'\\',
'/', $path);
326 $baseUri = str_replace(
'\\',
'/', $baseUri);
328 if ($baseUri !==
'/' && $baseUri !==
'' && strpos($path, $baseUri) === 0) {
329 $path = substr($path, strlen($baseUri));
332 $route = ltrim($path,
'/');
333 $query = parse_url($requestUri, PHP_URL_QUERY);
335 if ($query !==
null && $query !==
'') {
339 if (strpos($route,
'?') ===
false && strpos($route,
'&') ===
false) {
340 return $route .
'?' . $query;
342 return $route .
'&' . $query;
356 $remove = array_merge(
357 explode(
',', (
string) $unwanted),
361 foreach ($remove as $key) {
366 unset($params[$key]);
383 if ($permalink !==
'') {
384 $route[
'permalink'] = str_replace(
'\\',
'/', trim((
string) $permalink,
'/'));
387 return $this->
build_route_url($route[
'permalink'], $params, $route[
'fragment']);
396 return array(
'dbx_edit',
'dbx_design',
'dbx_color',
'dbx_lng');
408 return $this->
build_route_url($route[
'permalink'], $route[
'params'], $route[
'fragment']);
419 $path = str_replace(
'\\',
'/', (
string) $path);
425 if (preg_match(
'/^(.*)[?&]([a-zA-Z_][a-zA-Z0-9_]*)=([^\/&?#]+)$/', $path, $match)) {
427 $params[$match[2]] = rawurldecode($match[3]);
432 if (preg_match(
'/^(.*?)([a-zA-Z_][a-zA-Z0-9_]*)=([^\/&?#]+)$/', $path, $match)) {
433 if (preg_match(
'/^dbx_/', $match[2]) || strpos($match[2],
'_') !==
false) {
435 $params[$match[2]] = rawurldecode($match[3]);
441 return rtrim($path,
'-&?/');
451 $normalized = array();
453 if (!is_array($params)) {
457 foreach ($params as $key => $value) {
458 if ($key ===
'' || $value ===
null) {
461 if (is_array($value)) {
462 $normalized[(string) $key] = implode(
',', $value);
464 $normalized[(string) $key] = (
string) $value;
479 if (!empty(
$_SERVER[
'SCRIPT_NAME'])) {
483 elseif (!empty(
$_SERVER[
'PHP_SELF'])) {
487 elseif (!empty(
$_SERVER[
'REQUEST_URI'])) {
488 $uri = parse_url(
$_SERVER[
'REQUEST_URI'], PHP_URL_PATH);
497 if ($uri==
'\\') $uri=
'/';
498 $uri = str_replace(
'\\',
'/', $uri);
512 return $route[
'permalink'];
526 if (!empty($route[
'params'])) {
527 $_GET = array_merge($_GET, $route[
'params']);
556 $raw = file_get_contents(
'php://input');
557 $data = json_decode($raw,
true);
560 if (is_array($data)) {
561 $_POST = array_merge($_POST, $data);
566 $pvx=array(); $gvx=array();
570 if (isset($_POST[
'dbx_get'])) {
571 $get = $_POST[
'dbx_get'];
572 $get = ltrim($get,
'?');
573 parse_str($get, $gvx);
574 $_GET=array_merge($_GET, $gvx);
575 unset($_POST[
'dbx_get']);
578 if (isset($_POST[
'dbx_post'])) {
579 $post= $_POST[
'dbx_post'];
580 $post= ltrim($post,
'?');
581 parse_str($post, $pvx);
582 $_POST=array_merge($_POST, $pvx);
583 unset($_POST[
'dbx_post']);
610 if (!empty($route[
'params'])) {
611 $_GET = array_merge($route[
'params'], $_GET);
618 $self_url =$this->
get_self_url($permalink,
'dbx_ajax,dbx_window,dbx_target,dbx_go');
619 $go =
dbx()->get_request_var(
'dbx_go' ,0,
'parameter');
620 $ajax =
dbx()->get_request_var(
'dbx_ajax' ,0,
'int');
621 $window =
dbx()->get_request_var(
'dbx_window',0,
'int');
624 dbx()->debug(
"#SYS Self-url=($self_url) base-Url=($base_url) base_uri=($base_uri) Perma=($permalink)");
631 dbx()->set_system_var(
'dbx_permalink',$permalink);
632 dbx()->set_system_var(
'dbx_self_url' ,$self_url);
633 dbx()->set_system_var(
'dbx_base_url' ,$base_url);
634 dbx()->set_system_var(
'dbx_base_uri' ,$base_uri);
635 dbx()->set_system_var(
'dbx_window' ,$window);
636 dbx()->set_system_var(
'dbx_ajax' ,$ajax);
637 dbx()->set_system_var(
'dbx_go' ,$go);
650 $ext=strtolower($ext);
651 $extensions = [
'gif',
'jpg',
'png',
'jpeg',
'pdf',
'css',
'js',
'exe'];
653 return in_array($ext, $extensions) ? 1 : 0;
665 private function get_resource_file($permalink) {
666 $path = str_replace(
'\\',
'/', rawurldecode((
string) $permalink));
667 $path = ltrim($path,
'/');
669 if ($path ===
'' || strpos($path,
"\0") !==
false) {
673 $parts = explode(
'/', $path);
674 foreach ($parts as $part) {
675 if ($part ===
'..') {
685 $file = realpath(
$base . DIRECTORY_SEPARATOR . implode(DIRECTORY_SEPARATOR, $parts));
686 if (!$file || !is_file($file)) {
690 $baseCheck = rtrim(str_replace(
'\\',
'/', strtolower(
$base)),
'/') .
'/';
691 $fileCheck = str_replace(
'\\',
'/', strtolower($file));
693 if (strpos($fileCheck, $baseCheck) !== 0) {
706 private function get_resource_mime($ext) {
707 $ext = strtolower((
string) $ext);
710 'css' =>
'text/css; charset=UTF-8',
711 'js' =>
'application/javascript; charset=UTF-8',
712 'gif' =>
'image/gif',
713 'jpg' =>
'image/jpeg',
714 'jpeg' =>
'image/jpeg',
715 'png' =>
'image/png',
716 'pdf' =>
'application/pdf',
717 'exe' =>
'application/octet-stream',
720 return isset($types[$ext]) ? $types[$ext] :
'application/octet-stream';
730 private function send_resource_file($file, $ext) {
731 if (headers_sent()) {
735 header(
'Content-Type: ' . $this->get_resource_mime($ext));
736 header(
'X-Content-Type-Options: nosniff');
737 header(
'Cache-Control: public, max-age=3600');
757 dbx()->set_system_var(
'dbx_install' ,
$config[
'install']);
758 dbx()->set_system_var(
'dbx_construct',
$config[
'construct']);
759 If (!
$config[
'ok'])
dbx()->set_system_var(
'dbx_install',1);
774 $permalink=
dbx()->get_system_var(
'dbx_permalink',
'',
'parameter+/');
776 if ($permalink >
' ') {
777 $info = pathinfo($permalink);
778 if (isset($info[
'extension'])) $ext=$info[
'extension'];
779 $ext=strtolower($ext);
782 $resourceFile = $this->get_resource_file($permalink);
784 dbx()->debug(
"## resource exists, not missing ($permalink) file=($resourceFile)");
785 $this->send_resource_file($resourceFile, $ext);
789 dbx()->debug(
"## check missing ($permalink)");
791 $ok =
dbx()->log_missing($permalink);
792 dbx()->debug(
"#MISSING# ($permalink) Ext=($ext) ok=($ok)");
794 dbx()->debug(
'###EXIT###');
810 $design=
dbx()->get_remember_var(
'dbx_design',
'user' ,
'dbx');
811 $edit =
dbx()->get_remember_var(
'dbx_edit' ,0 ,
'dbx');
812 $lng =
dbx()->get_remember_var(
'dbx_lng' ,
'de' ,
'dbx');
813 $defaultColor =
dbx()->normalize_skin((
string)
dbx()->get_config(
'dbx',
'default_color',
'blau'));
814 $color =
dbx()->get_remember_var(
'dbx_color', $defaultColor,
'dbx');
817 $design=
dbx()->get_request_var(
'dbx_design',$design);
818 $edit =
dbx()->get_request_var(
'dbx_edit' ,$edit);
819 $lng =
dbx()->get_request_var(
'dbx_lng' ,$lng);
820 $color =
dbx()->normalize_skin((
string)
dbx()->get_request_var(
'dbx_color', $color));
823 dbx()->set_remember_var(
'dbx_design',$design,
'dbx');
824 dbx()->set_remember_var(
'dbx_edit' ,$edit ,
'dbx');
825 dbx()->set_remember_var(
'dbx_lng' ,$lng ,
'dbx');
826 dbx()->set_remember_var(
'dbx_color' ,$color ,
'dbx');
828 dbx()->set_system_var(
'dbx_design', $design);
829 dbx()->set_system_var(
'dbx_edit' , $edit);
830 dbx()->set_system_var(
'dbx_lng' , $lng);
831 dbx()->set_system_var(
'dbx_color' , $color);
832 dbx()->set_system_var(
'dbx_last_editor_tpl_paths', array());
841 private function get_content_permalink_mode(): string {
842 return
dbx()->get_content_permalink_mode();
850 private function get_content_root(): int {
851 $requestRoot =
dbx()->get_request_var(
'root',
'',
'int');
853 if ($requestRoot !==
'') {
854 return (
int) $requestRoot;
857 $configRoot =
dbx()->get_config(
'dbxContent',
'root');
858 if ($configRoot ===
'undef' || $configRoot ===
'') {
862 return (
int) $configRoot;
872 private function set_content_route(
int $cid,
string $source =
''): void {
877 $mode = $this->get_content_permalink_mode();
878 $root = $this->get_content_root();
880 dbx()->set_system_var(
'dbx_modul',
'dbxContent');
881 dbx()->set_system_var(
'dbx_cid', $cid);
882 dbx()->set_system_var(
'cid', $cid);
883 dbx()->set_system_var(
'dbx_content_route_cid', $cid);
884 $source = (string) $source;
885 $cacheableContentRoute = str_starts_with($source,
'permalink-');
886 dbx()->set_system_var(
'dbx_content_permalink_request', $cacheableContentRoute ? 1 : 0);
888 if ($mode ===
'cms') {
889 dbx()->set_system_var(
'dbx_run1',
'cms');
890 dbx()->set_system_var(
'dbx_run2',
'show');
891 dbx()->set_system_var(
'root',
$root);
893 dbx()->set_system_var(
'dbx_run1',
'show');
896 dbx()->debug(
"#PERMALINK set dbxContent mode=($mode) root=($root) cid=($cid) source=($source)");
904 private function get_home_content_cid(): int {
905 $this->load_content_cache_classes();
907 return \dbx\dbxContent\dbxContentHome::resolveCid();
915 private function load_content_cache_classes(): void {
916 dbx()->load_content_cache_classes();
934 $permalink=
dbx()->get_system_var(
'dbx_permalink');
935 dbx()->set_system_var(
'dbx_content_permalink_request', 0);
936 dbx()->set_system_var(
'dbx_content_route_cid', 0);
937 dbx()->debug(
"check perma ($permalink)");
939 if ($permalink ==
'undef') $permalink=
'';
940 if ($permalink ==
'/') $permalink=
'';
943 $lng=
dbx()->get_system_var(
'dbx_lng',
'de');
945 $modul =
dbx()->get_request_var(
'dbx_modul');
946 $action =
dbx()->get_request_var(
'dbx_run1');
947 $hasExplicitRoute = ($modul !==
'' && $action !==
'');
949 if ($hasExplicitRoute) {
950 dbx()->set_system_var(
'dbx_modul', $modul);
951 dbx()->set_system_var(
'dbx_run1', $action);
952 dbx()->set_system_var(
'dbx_run2',
dbx()->get_request_var(
'dbx_run2',
'',
'parameter'));
953 dbx()->set_system_var(
'root',
dbx()->get_request_var(
'root',
'',
'int'));
956 $requestCid = (int)
dbx()->get_request_var(
'cid', 0,
'int');
957 if (!$requestCid) $requestCid = (int)
dbx()->get_request_var(
'dbx_cid', 0,
'int');
959 if ($hasExplicitRoute) {
960 dbx()->set_system_var(
'dbx_cid', $requestCid);
961 dbx()->set_system_var(
'cid', $requestCid);
965 if ($requestCid > 0 && (!$modul || !$action || $modul ===
'dbxHome')) {
966 $this->set_content_route($requestCid,
'request-cid');
970 if (!$permalink && !$modul) $home=1;
971 if ( $modul==
'dbxHome') $home=1;
972 if ($permalink ===
'home' && !$modul) $home=1;
976 $homeCid = $this->get_home_content_cid();
978 $this->set_content_route($homeCid, ($permalink ===
'home') ?
'permalink-home' :
'dbxHome-config');
981 dbx()->set_system_var(
'dbx_modul' ,
'dbxHome');
982 dbx()->set_system_var(
'dbx_run1',
'run');
983 dbx()->set_system_var(
'dbx_design',
'user');
987 if ($permalink ==
'admin') {
988 dbx()->set_system_var(
'dbx_modul',
'dbxAdmin');
989 dbx()->set_system_var(
'dbx_run1',
'run');
990 dbx()->set_system_var(
'dbx_design',
'admin');
994 if ($permalink ===
'sitemap.xml' || $permalink ===
'sitemap') {
995 dbx()->set_system_var(
'dbx_modul',
'dbxContent');
996 dbx()->set_system_var(
'dbx_run1',
'sitemap');
1000 if ($permalink ===
'robots.txt') {
1001 dbx()->set_system_var(
'dbx_modul',
'dbxContent');
1002 dbx()->set_system_var(
'dbx_run1',
'robots');
1009 $check_perma=
dbx()->get_config(
'dbx',
'permalink');
1010 if ($permalink >
' ' && $check_perma) {
1012 dbx()->debug(
"##Permalink## ($permalink) Lng=($lng) check content#");
1013 $permalink=trim((
string)$permalink,
'/');
1015 $this->load_content_cache_classes();
1017 if (is_array($resolved) && (
int)($resolved[
'activ'] ?? 0) === 1) {
1018 $cid = (int)($resolved[
'cid'] ?? 0);
1020 $this->set_content_route($cid,
'permalink-content');
1025 dbx()->set_system_var(
'dbx_modul',
'dbxHome');
1026 dbx()->set_system_var(
'dbx_run1',
'run');
1027 dbx()->set_system_var(
'dbx_run2',
'');
1028 dbx()->set_system_var(
'dbx_design',
'user');
1029 dbx()->set_system_var(
'dbx_cid', 0);
1030 dbx()->set_system_var(
'cid', 0);
1031 dbx()->debug(
"#PERMALINK not found -> dbxHome permalink=($permalink)");
1042 $modul=
dbx()->get_system_var(
'dbx_modul');
1043 if (!
dbx()->is_modul($modul)) $modul=
'dbxHome';
1044 dbx()->set_system_var(
'dbx_modul',$modul);
1058 $admin =
dbx()->can(
'admin');
1060 $user_default =
$config[
'default_design_user'];
1061 $admin_default=
$config[
'default_design_admin'];
1062 $construct =
$config[
'construct'];
1063 $intro = (int) (
$config[
'intro'] ?? 0);
1064 $ok = (int) (
$config[
'ok'] ?? 0);
1066 $design =
dbx()->get_remember_var(
'dbx_design',$user_default,
'dbx');
1068 $page =
dbx()->get_system_var(
'dbx_page' ,
'default');
1069 $modul =
dbx()->get_system_var(
'dbx_modul');
1070 $admin_modul =
dbx()->has_text($modul,
'_admin');
1073 if (!
dbx()->is_design($design)) {
1076 if (!$admin && $design==
'admin') $design=
'user';
1077 if ( $admin && $admin_modul) $design=
'admin';
1081 $ajax = (int)
dbx()->get_system_var(
'dbx_ajax', 0,
'int');
1082 if ($intro && $ok && !$ajax) {
1083 $introShown = (int)
dbx()->get_session_var(
'intro_shown', 0,
'ui',
'dbx');
1084 $requestModul = trim((
string)
dbx()->get_request_var(
'dbx_modul',
'',
'parameter'));
1085 if (!$introShown && $requestModul ===
'') {
1086 $design = $user_default;
1089 dbx()->set_session_var(
'intro_shown', 1,
'ui',
'dbx');
1094 $design=$user_default;
1101 dbx()->set_system_var(
'dbx_install', 1);
1102 $modul =
'dbxSetup';
1103 $design =
'_install';
1105 dbx()->set_system_var(
'dbx_run1',
'install');
1108 if ($design==
'admin') $design=$admin_default;
1109 if ($design==
'user') $design=$user_default;
1111 dbx()->set_system_var(
'dbx_modul' ,$modul);
1112 dbx()->set_system_var(
'dbx_design' ,$design);
1113 dbx()->set_system_var(
'dbx_page' ,$page);
1114 $ajax=
dbx()->get_system_var(
'dbx_ajax',0);
1127 $lng_default =
$config[
'default_lng'];
1128 $lng_accessible=
$config[
'accessible_lng'];
1129 $lng=
dbx()->get_system_var(
'dbx_lng',
dbx()->get_remember_var(
'dbx_lng',$lng_default,
'dbx'));
1130 if ($lng != $lng_default) {
1132 if (!is_array($lng_accessible)) $lng_accessible = explode(
",", $lng_accessible);
1133 foreach ($lng_accessible as $no => $val) {
1134 if ($lng == $val) $ok=1;
1136 if (!$ok) $lng=$lng_default;
1138 dbx()->set_remember_var(
'dbx_lng',$lng,
'dbx');
1139 dbx()->set_system_var(
'dbx_lng', $lng);
1150 if (!$lng) $lng=
dbx()->get_system_var(
'dbx_lng',
'de');
1152 if (file_exists($dir_file)) {
1169 if (isset($_SESSION[
'dbx'][
'add_css'])) {
1170 $xcss=$_SESSION[
'dbx'][
'add_css'];
1171 if (is_array($xcss)) {
1172 foreach ($xcss as $no => $css) { $css_content.=$css.
"\n"; }
1175 $content = (str_replace(
'[dbx:add_css]',$css_content,$content));
1187 if (isset($_SESSION[
'dbx'][
'add_js'])) {
1188 $xjs=$_SESSION[
'dbx'][
'add_js'];
1189 if (is_array($xjs)) {
1190 foreach ($xjs as $no => $js) { $js_content.=$js.
"\n"; }
1193 $content = (str_replace(
'[dbx:add_js]',$js_content,$content));
1218 $oTPL =
dbx()->get_system_obj(
'dbxTPL');
1219 if (is_object($oTPL) && method_exists($oTPL,
'cleanup_optional_placeholders')) {
1220 $content = $oTPL->cleanup_optional_placeholders((
string)$content);
1223 if (isset($_SESSION[
'dbx'][
'norep'])) {
1224 $xnorep=$_SESSION[
'dbx'][
'norep'];
1225 if (is_array($xnorep)) {
1226 for($i=0; $i < 2; $i++) {
1227 foreach ($xnorep as $id => $norep) {
1229 $content = str_replace($xid,$norep,$content);
1241 if (isset($_SESSION[
'dbx'][
'record'][$fld])) {
1242 $value=$_SESSION[
'dbx'][
'record'][$fld];
1245 $value=$_SESSION[
'dbx'][
'record'];
1251 $ajax =
dbx()->get_system_var(
'dbx_ajax');
1252 $window=
dbx()->get_system_var(
'dbx_window');
1254 $design=
dbx()->get_system_var(
'dbx_activ_design',
dbx()->get_system_var(
'dbx_design'));
1255 $page =
dbx()->get_system_var(
'dbx_activ_page' ,
dbx()->get_system_var(
'dbx_page'));
1256 $lng =
dbx()->get_system_var(
'dbx_activ_lng' ,
dbx()->get_system_var(
'dbx_lng'));
1261 if ($window) $page=
'_window';
1262 $oTPL=
dbx()->get_system_obj(
'dbxTPL');
1263 $content=$oTPL->get_design_tpl($design,$page,$lng,
'htm',1);
1265 if (defined(
'dbxRunAsAdmin') && (
int) constant(
'dbxRunAsAdmin') === 1) {
1266 $admin_bypass_alert=$oTPL->get_tpl(
'dbx|alert-warning', array(
1267 'msg' =>
'Admin Bypass ist aktiv'
1269 $modul_content=$admin_bypass_alert.
'<br>'.$modul_content;
1272 $content = (str_replace(
"[dbx:content]",$modul_content,$content));
1274 $content=$modul_content;
1280 $edit = (int)
dbx()->get_system_var(
'dbx_edit', 0,
'int');
1282 if (($edit < 4 || $edit > 8) && $edit !== 9) {
1286 $all_files =
dbx()->get_editor_files();
1289 foreach ($all_files as $file) {
1290 if (!isset($file[
'kind'], $file[
'file'])) {
1294 if ($edit == 4 && $file[
'kind'] !==
'fd') {
1298 if ($edit == 5 && $file[
'kind'] !==
'dd') {
1302 if ($edit == 6 && $file[
'kind'] !==
'class') {
1306 if ($edit == 7 && $file[
'kind'] !==
'sysclass') {
1310 if ($edit == 8 && $file[
'kind'] !==
'config') {
1314 $key = $file[
'kind'] .
'|' . $file[
'file'];
1315 $files[$key] = $file;
1320 'files' => array_values($files),
1323 $json = json_encode($payload, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
1329 $data =
'<script type="application/json" class="dbx-editor-files-data">' .
1330 htmlspecialchars($json, ENT_NOQUOTES,
'UTF-8') .
1333 if (strpos($content,
'</body>') !==
false) {
1334 return str_replace(
'</body>', $data .
"\n</body>", $content);
1337 return $data . $content;
1340 private function render_editor_files_menu($edit, $files) {
1341 if (!is_array($files) || !count($files)) {
1345 $title =
'Editor Dateien';
1346 if ($edit == 4) $title =
'FD Dateien';
1347 if ($edit == 5) $title =
'DD Dateien';
1348 if ($edit == 6) $title =
'Modul PHP Dateien';
1349 if ($edit == 7) $title =
'myX SysClass Dateien';
1350 if ($edit == 8) $title =
'Config Dateien';
1351 if ($edit == 9) $title =
'Alle Editor Dateien';
1353 $html =
'<div id="dbxEditorFilesMenu" class="dbx-editor-files-menu" ';
1354 $html .=
'style="display:none;">';
1355 $html .=
'<button type="button" class="dbx-editor-files-count" title="' . htmlspecialchars($title, ENT_QUOTES,
'UTF-8') .
'" ';
1356 $html .=
'onclick="this.parentElement.classList.toggle(\'is-open\')" ';
1357 $html .=
'style="display:inline-flex;align-items:center;gap:6px;min-height:30px;padding:4px 8px;border:1px solid rgba(0,0,0,.18);border-radius:4px;background:#212529;color:#fff;box-shadow:0 4px 12px rgba(0,0,0,.18);">';
1358 $html .=
'<i class="bi bi-pencil-square"></i><span>' . count($files) .
'</span></button>';
1359 $html .=
'<div class="dbx-editor-files-list" style="max-height:min(520px,calc(100vh - 96px));overflow:auto;padding:8px;border:1px solid rgba(0,0,0,.16);border-radius:4px;background:#fff;color:#212529;box-shadow:0 10px 28px rgba(0,0,0,.2);">';
1360 $html .=
'<div class="dbx-editor-files-title" style="padding:4px 6px;font-weight:600;color:#495057;">' . htmlspecialchars($title, ENT_QUOTES,
'UTF-8') .
'</div>';
1362 foreach ($files as $file) {
1363 if (!isset($file[
'file'])) {
1367 $path = $file[
'file'];
1368 $kind = isset($file[
'kind']) ? (string)$file[
'kind'] :
'';
1369 $url = $this->editor_file_url($kind, $path);
1370 $label = $this->short_editor_file_label($path);
1372 $html .=
'<a href="' . htmlspecialchars($url, ENT_QUOTES,
'UTF-8') .
'" ';
1373 $html .=
'data-url="' . htmlspecialchars($url, ENT_QUOTES,
'UTF-8') .
'" data-title="' . htmlspecialchars($title, ENT_QUOTES,
'UTF-8') .
'" ';
1374 $html .=
'style="display:grid;grid-template-columns:22px minmax(0,1fr);align-items:center;gap:6px;padding:5px 6px;border-radius:4px;color:#212529;text-decoration:none;" class="dbx-win">';
1375 $html .=
'<i class="bi bi-filetype-php"></i>';
1376 $html .=
'<span style="overflow:hidden;text-overflow:ellipsis;white-space:nowrap;">' . htmlspecialchars($label, ENT_QUOTES,
'UTF-8') .
'</span>';
1386 private function short_editor_file_label($path) {
1387 $path = str_replace(
'\\',
'/', $path);
1388 $prefix =
'dbx/modules/';
1390 if (strpos($path, $prefix) === 0) {
1391 return substr($path, strlen($prefix));
1397 private function editor_file_url($kind, $path) {
1398 $kind = strtolower(trim((
string)$kind));
1399 $path = str_replace(
'\\',
'/', (
string)$path);
1401 if ($kind ===
'dd' && preg_match(
'#^dbx/modules/([^/]+)/dd/([^/]+)\.dd\.php$#', $path, $m)) {
1402 return '?dbx_modul=dbxAdmin&dbx_run1=edit_dd&modul=' . rawurlencode($m[1]) .
'&dd=' . rawurlencode($m[2]);
1405 if ($kind ===
'fd' && preg_match(
'#^dbx/modules/([^/]+)/fd/([^/]+)\.fd\.php$#', $path, $m)) {
1406 return '?dbx_modul=dbxAdmin&dbx_run1=edit_fd&modul=' . rawurlencode($m[1]) .
'&fd=' . rawurlencode($m[2]);
1409 return '?dbx_modul=dbxEditor&dbx_run1=edit&file=' . rawurlencode($path);
1416 $uid =
dbx()->user();
1417 $self =
dbx()->get_self_url();
1418 $design =
dbx()->get_system_var(
'dbx_design');
1419 $page =
dbx()->get_system_var(
'dbx_page');
1420 $lng =
dbx()->get_system_var(
'dbx_lng');
1421 $edit =
dbx()->get_system_var(
'dbx_edit');
1422 $color =
dbx()->get_system_var(
'dbx_color');
1423 $modul =
dbx()->get_system_var(
'dbx_modul');
1424 $action =
dbx()->get_system_var(
'dbx_run1');
1425 $api =
dbx()->get_system_var(
'dbx_api');
1426 $cid =
dbx()->get_system_var(
'dbx_cid',0);
1427 $run2 =
dbx()->get_system_var(
'dbx_run2',
'');
1428 $root =
dbx()->get_system_var(
'root',
'');
1429 $install=
dbx()->get_system_var(
'dbx_install',0);
1433 if ($api && $uid != 2)
dbx()->login(2);
1439 $access=
dbx()->can_modul($modul);
1441 $perma=
dbx()->get_system_var(
'dbx_permalink');
1442 if ( $perma && !$uid)
dbx()->set_remember_var(
'dbx_redir_after_login',$perma,
'dbx');
1443 if (!$perma && !$uid)
dbx()->set_remember_var(
'dbx_redir_after_login',
"?dbx_modul=$modul&dbx_run1=$action",
'dbx');
1445 $content=
'[modul=dbxLogin]dbx_run1=login[/modul]';
1449 dbx()->set_system_var(
'dbx_master_modul' , $modul);
1450 dbx()->set_system_var(
'dbx_master_action',$action);
1451 dbx()->set_system_var(
'dbx_activ_modul' , $modul);
1452 dbx()->set_system_var(
'dbx_activ_action' ,$action);
1454 $dbxModul=
dbx()->get_modul_obj($modul);
1455 $mid=
dbx()->get_system_var(
'dbx_activ_modul_id',0,
'*');
1457 dbx()->set_system_var(
'dbx_activ_modul_id',$mid);
1458 dbx()->set_modul_var(
'dbx_modul_id',$mid);
1459 dbx()->set_modul_var(
'dbx_modul' ,$modul);
1460 dbx()->set_modul_var(
'dbx_run1' ,$action);
1461 if ($run2 !==
'')
dbx()->set_modul_var(
'dbx_run2', $run2);
1462 dbx()->set_modul_var(
'dbx_cid' ,$cid);
1463 if ($cid)
dbx()->set_modul_var(
'cid', $cid);
1466 $content=
dbx()->run_owner($dbxModul);
1469 if ($api)
dbx()->set_system_var(
'dbx_page',
'api');
1474 $mid=
dbx()->get_system_var(
'dbx_activ_modul_id');
1475 $go =
dbx()->get_system_var(
'dbx_go',0,
'parameter');
1477 $js =
'$(document).ready(function() { ';
1478 $js.=
"dbxGoTo('$go');";
1481 $content.=
"<br><script>$js</script><div id=dbx_end></div>";
static resolve(string $permalink, string $lng='')
Loest genau einen Permalink direkt aus der Content-Tabelle auf.
Bereitet den aktuellen HTTP-Request fuer dbXapp vor.
get_is_resorce($ext)
Prueft, ob eine Dateiendung als direkt auslieferbare Ressource gilt.
normalize_self_url($url)
Bereinigt eine Self-/Menu-URL von Memory-Schaltern in Pfad und Query.
build_route_url($permalink, $params=array(), $fragment='')
Baut eine kanonische Route-URL aus Permalink, Query-Parametern und Fragment.
check_remember()
Uebernimmt persistente UI-/Systemwerte aus Remember in den Request.
check_lng()
Prueft und speichert die aktive Sprache.
check_modul()
Prueft das aktive Modul und setzt bei fehlendem Modul dbxHome.
translate($content, $lng='')
Wendet die globale dbx/translate.php auf Inhalt an.
memory_switch_params()
Liefert die Remember-/Memory-Schalter, die nicht in Permalinks haengen duerfen.
design_load($modul_content)
check_config()
Stellt die zentrale dbx-Konfiguration sicher.
get_base_uri()
Liefert das Basisverzeichnis des Entry Points als URI.
peel_glued_params_from_path($path, &$params=array())
Entfernt angeklebte Query-Parameter aus einem Permalink-Pfad.
check_missing()
Behandelt fehlende statische Ressourcen.
add_editor_files_data($content)
create_new_cfg($modul='dbx')
Erstellt eine minimale Default-Konfiguration fuer ein Modul.
check_request()
Normalisiert den aktuellen HTTP-Request fuer den Kernel.
get_session_rec($fld, $default='')
normalize_route_params($params)
Normalisiert Query-Parameter auf string-Werte.
append_route_params($url, $params=array())
Haengt Parameter an eine vorhandene Route-URL an.
setRequestUriToGet()
Spiegelt Query-Parameter aus REQUEST_URI nach $_GET.
add_norep($content)
Setzt geschuetzte norep-Platzhalter am Ende wieder ein.
get_base_url(string $uri)
Ermittelt die Basis-URL des Servers und gibt sie zurück.
strip_unwanted_route_params($params, $unwanted='')
Entfernt unerwuenschte Parameter aus einem Param-Array.
check_perma()
Loest Permalink, Home, Admin und explizite Modulrouten auf.
del_add_css($content)
Ersetzt [dbx:add_css] durch im Request gesammelte CSS-Fragmente.
get_permalink($uri)
Ermittelt den Permalink-Anteil hinter der Basis-URI.
parse_route_url($url)
Parst Permalink- und Standard-URLs in Pfad + Query-Parameter.
route_param_prefix($url)
Prefix fuer Template-Links wie {self}dbx_design=desktop.
check_design()
Bestimmt das aktive Design fuer den Request.
check_uri()
Zerlegt REQUEST_URI in Pfad und Query-Parameter.
out_filter($content)
Fuehrt den zentralen Ausgabe-Filter aus.
get_self_url($permalink, $unwanted)
Baut die aktuelle Self-URL ohne unerwuenschte DBX-Steuerparameter.
del_add_js($content)
Ersetzt [dbx:add_js] durch im Request gesammelte JS-Fragmente.
get_request_route_string($baseUri='')
Liefert den Routen-Teil des aktuellen Requests (Permalink + Query).
dbx_os_path_file($path_file)
dbx_get_base_dir($cut_Data=0)
DBX schema administration.