3declare(strict_types=1);
57 private string $html_output_storage =
"";
65 private bool $droplets_ok =
false;
67 private array $adminTools = [];
99 if (
null === static::$instance)
106 switch( func_num_args() )
118 $auto_header = func_get_arg(2);
123 $auto_header = func_get_arg(2);
124 $auto_auth = func_get_arg(3);
132 return static::$instance;
149 bool $auto_header =
true,
150 bool $auto_auth =
true
153 global
$database, $MESSAGE, $section_id, $page_id;
155 parent::__construct();
157 static::$instance = $this;
159 $section_id = (isset ($_POST[
'section_id']) ? intval($_POST[
'section_id']) : 0);
160 if ($section_id == 0 )
162 $section_id = (isset ($_GET[
'section_id'])? intval($_GET[
'section_id']): 0);
165 $page_id = (isset ($_POST[
'page_id']) ? intval($_POST[
'page_id']) : 0);
168 $page_id = (isset ($_GET[
'page_id']) ? intval($_GET[
'page_id']) : 0);
174 if (is_null($this->oTWIG))
176 $this->oTWIG = lib_twig_box::getInstance();
177 $this->oTWIG->loader->prependPath(
THEME_PATH.
"/templates/",
"theme" );
184 if (
true === $auto_auth)
195 if ($auto_auth ===
true)
198 if ($this->is_authenticated() ===
false)
200 header(
'Location:' . ADMIN_URL .
'/login/index.php');
205 if (!$this->checkLepToken())
207 $pin_set = $this->database->get_one(
"SELECT `pin_set` FROM `".TABLE_PREFIX.
"users` WHERE `user_id` = '".$_SESSION[
'USER_ID'].
"' ");
210 $this->database->simple_query(
"UPDATE `" . TABLE_PREFIX .
"users` SET `pin_set` = 1 WHERE user_id = '" . $_SESSION[
'USER_ID'] .
"' ");
212 unset($_SESSION[
'USER_ID']);
213 header(
'Location:' . ADMIN_URL .
'/login/index.php');
224 die($MESSAGE[
'ADMIN_INSUFFICIENT_PRIVILEGES'].
" [007-002]");
228 die($MESSAGE[
'ADMIN_INSUFFICIENT_PRIVILEGES'].
" [007-001]");
235 $this->database->execute_query(
236 "SELECT `language` FROM `" . TABLE_PREFIX .
"users` WHERE `user_id` = '" . (
int) $this->getValue(
'user_id',
'integer',
'session') .
"'",
242 $user_language = (!isset($user_language[
'language']))
244 : substr($user_language[
'language'], 0,2)
248 $admin_folder = str_replace(LEPTON_PATH,
'', ADMIN_PATH);
249 if ((LANGUAGE != $user_language) && file_exists(LEPTON_PATH .
'/languages/' . $user_language .
'.php') && strpos($_SERVER[
'SCRIPT_NAME'], $admin_folder .
'/') !==
false)
252 $page_id_url = (isset($_GET[
'page_id'])) ?
'&page_id=' . (
int) $_GET[
'page_id'] :
'';
253 $section_id_url = (isset($_GET[
'section_id'])) ?
'§ion_id=' . (
int) $_GET[
'section_id'] :
'';
254 if (isset($_SERVER[
'QUERY_STRING']) && $_SERVER[
'QUERY_STRING'] !=
'')
256 header(
'Location: ' . $_SERVER[
'SCRIPT_NAME'] .
'?lang=' . $user_language . $page_id_url . $section_id_url .
'&' . $_SERVER[
'QUERY_STRING']);
260 header(
'Location: ' . $_SERVER[
'SCRIPT_NAME'] .
'?lang=' . $user_language . $page_id_url . $section_id_url);
266 if ($auto_header ===
true)
272 if(CRONJOB == 2 || CRONJOB == 3)
289 $type .=
'_permissions';
291 if ($name ===
'start')
297 if (
true === self::userHasAdminRights())
302 $aTemp = match (strtolower($type))
304 "system_permissions" => ($this->getValue(
'system_permissions',
'string',
'session') ?? []),
305 "module_permissions" => ($this->getValue(
'module_permissions',
'string',
'session') ?? []),
308 return in_array($name, $aTemp);
322 "SELECT `username`,`display_name` FROM `".TABLE_PREFIX.
"users` WHERE `user_id` = ".$user_id,
330 $user[
'display_name'] =
'Unknown';
331 $user[
'username'] =
'unknown';
346 $this->database->execute_query(
347 "SELECT * from ".TABLE_PREFIX.
"pages WHERE page_id = ".$page_id,
353 if (empty($aResults))
356 $this->
print_error($GLOBALS[
'MESSAGE'][
'PAGES_NOT_FOUND']);
373 $action_groups = $action.
'_groups';
375 $sGroups = $this->database->get_one(
"SELECT ".$action_groups.
" FROM ".TABLE_PREFIX.
"pages WHERE page_id = ".$page_id);
377 $aGroups = explode(
',',$sGroups);
379 $aUserPermissions = $this->getValue(
'groups_id',
'string',
'session',
',');
381 $in_group = !empty(array_intersect($aGroups,$aUserPermissions));
396 if (
true === self::userHasAdminRights())
401 $titleLower = strtolower(str_replace(
'_blank',
'', $title));
404 $system_permissions = $this->getValue(
'system_permissions',
'string_clean',
'session');
407 return (is_numeric(array_search($titleLower, $system_permissions)));
417 if (self::userHasAdminRights())
422 $lookFor = strtolower($what);
427 $terms = [
"groups",
"groups_view",
"groups_add",
"groups_modify",
"groups_delete"];
434 $terms = [
"groups_".$lookFor];
442 return !empty(array_intersect($terms, $_SESSION[
'SYSTEM_PERMISSIONS']));
454 if (self::userHasAdminRights())
459 $lookFor = strtolower($what);
464 $terms = [
"users",
"users_view",
"users_add",
"users_modify",
"users_delete"];
471 $terms = [
"users_".$lookFor];
479 return !empty(array_intersect($terms, $_SESSION[
'SYSTEM_PERMISSIONS']));
491 if (self::userHasAdminRights())
496 $lookFor = strtolower($what);
501 $terms = [
"pages",
"pages_settings",
"pages_view",
"pages_add",
"pages_modify",
"pages_delete"];
509 $terms = [
"pages_".$lookFor];
517 return !empty(array_intersect($terms, $_SESSION[
'SYSTEM_PERMISSIONS']));
533 $title = $this->database->get_one(
"SELECT `value` FROM `".TABLE_PREFIX.
"settings` WHERE `name`='website_title'");
535 $charset = (
true === defined(
'DEFAULT_CHARSET')) ? DEFAULT_CHARSET :
'utf-8';
539 $view_url = LEPTON_URL;
540 if (isset($_GET[
'page_id']))
543 $result = $this->database->get_one(
"SELECT `link` FROM `" . TABLE_PREFIX .
"pages` WHERE `page_id`= '" . (
int) addslashes($_GET[
'page_id']) .
"'");
544 if (!is_null($result))
546 $view_url .= PAGES_DIRECTORY.$result.PAGE_EXTENSION;
554 $backend_theme_version =
"";
555 if (defined(
'DEFAULT_THEME'))
557 $backend_theme_version = $this->database->get_one(
"SELECT `version` from `" . TABLE_PREFIX .
"addons` where `directory`='" . DEFAULT_THEME .
"'");
561 'SECTION_NAME' => $MENU[strtoupper($this->section_name)],
562 'WEBSITE_TITLE' => $title,
563 'BACKEND_TITLE' => BACKEND_TITLE,
564 'TEXT_ADMINISTRATION' => $TEXT[
'ADMINISTRATION'],
565 'CURRENT_USER' => $MESSAGE[
'START_CURRENT_USER'],
566 'DISPLAY_NAME' => $this->getValue(
'display_name',
'string',
'session'),
567 'CHARSET' => $charset,
568 'LANGUAGE' => strtolower(LANGUAGE),
569 'LEPTON_VERSION' => LEPTON_VERSION,
570 'SUBVERSION' => SUBVERSION,
571 'LEPTON_URL' => LEPTON_URL,
572 'ADMIN_URL' => ADMIN_URL,
573 'THEME_URL' => THEME_URL,
574 'TITLE_START' => $MENU[
'START'],
575 'TITLE_VIEW' => $MENU[
'VIEW'],
576 'TITLE_HELP' => $MENU[
'HELP'],
577 'TITLE_LOGOUT' => $MENU[
'LOGOUT'],
587 'URL_VIEW' => $view_url,
588 'URL_HELP' =>
' https://lepton-cms.org/',
590 'THEME_VERSION' => $backend_theme_version,
591 'THEME_NAME' => DEFAULT_THEME,
617 echo $this->oTWIG->render(
640 echo $this->oTWIG->render(
653 $this->html_output_storage = ob_get_clean();
654 if (
true === $this->droplets_ok)
656 evalDroplets($this->html_output_storage);
660 if ($this->is_authenticated() )
662 LEPTON_core::getInstance()->getProtectedFunctions($this->html_output_storage, $this);
665 echo $this->html_output_storage;
676 public function print_success(
string|array $message,
string $redirect =
'index.php',
bool $auto_footer =
true): void
683 if (
true === is_array($message))
685 $message = implode(
"<br />", $message);
690 'NEXT' => $TEXT[
'NEXT'],
691 'BACK' => $TEXT[
'BACK'],
692 'MESSAGE' => $message,
693 'THEME_URL' => THEME_URL,
694 'REDIRECT' => $redirect,
695 'REDIRECT_TIMER' => REDIRECT_TIMER
698 echo $this->oTWIG->render(
699 '@theme/success.lte',
703 if (
true === $auto_footer)
718 public function print_error(
string|array $message,
string $link =
'index.php',
bool $auto_footer =
true): void
724 if (
true === is_array($message))
726 $message = implode(
"<br />", $message);
730 'MESSAGE' => $message,
732 'BACK' => $TEXT[
'BACK'],
733 'THEME_URL' => THEME_URL
736 echo $this->oTWIG->render(
741 if (
true === $auto_footer && method_exists($this,
"print_footer"))
757 if (self::userHasAdminRights())
762 if (!isset($_SESSION[
'SYSTEM_PERMISSIONS']))
767 return (in_array($sPermissionName, $_SESSION[
'SYSTEM_PERMISSIONS']));
780 static::$instance =
null;
790 if (LEPTON_core::userHasAdminRights() ==
true)
795 if (empty($this->adminTools))
797 $aAllAdminToolsStorage = [];
798 $this->database->execute_query(
799 "SELECT `directory` FROM `".TABLE_PREFIX.
"addons` WHERE `function` = 'tool'",
801 $aAllAdminToolsStorage,
805 foreach ($aAllAdminToolsStorage as $tempTool)
807 $this->adminTools[] = $tempTool[
'directory'];
811 $aUserModules = LEPTON_core::getValue(
"module_permissions",
"array",
"session");
813 return !empty(array_intersect($aUserModules, $this->adminTools));
836 public static function displayMessage(
837 string $sType =
"success",
838 array|
string $aMessage = [],
839 string $sRedirect =
"",
840 int $iRedirectTime = -1,
841 string $sTemplateName =
"message.lte",
842 bool $bDirectOutput =
true
845 $oTwig = lib_twig_box::getInstance();
847 if (!is_array($aMessage))
849 $aMessage = [$aMessage];
852 if (empty($sRedirect))
857 if(stripos(
'leptoken=',$sRedirect) == 0)
859 $sRedirect.=
'&leptoken='.get_leptoken();
863 if (file_exists(LEPTON_PATH.
"/templates/".DEFAULT_THEME.
"/backend/backend/message.lte"))
866 $oTwig->registerPath(LEPTON_PATH.
"/templates/".DEFAULT_THEME.
"/backend/backend/",
"backend");
871 'message' => $aMessage,
872 'redirect' => $sRedirect,
873 'redirect_time' => $iRedirectTime
876 $sHTML_rendered = $oTwig->render(
877 "@backend/".$sTemplateName,
881 if ($bDirectOutput ==
true)
883 echo $sHTML_rendered;
887 return $sHTML_rendered;
static saveLastEditSection(int $iSectionID=0)
get_permission(string $name, string $type='system')
get_page_permission(int $page_id, string $action='admin')
__construct(string $section_name="Pages", string $section_permission='start', bool $auto_header=true, bool $auto_auth=true)
string $section_permission
print_error(string|array $message, string $link='index.php', bool $auto_footer=true)
getPagesPermissions(string $what)
static getUserPermission(string $sPermissionName="")
get_link_permission(string $title)
static get_user_details(int $user_id)
getUsersPermissions(string $what)
userHasAdminToolPermission()
print_success(string|array $message, string $redirect='index.php', bool $auto_footer=true)
getGroupsPermissions(string $what)
get_page_details(int $page_id)
static getInstance(array &$settings=[])
static include_files(array|string $file_names=[], bool $interrupt=true)