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)
273 if(CRONJOB == 2 || CRONJOB == 3)
290 $type .=
'_permissions';
292 if ($name ===
'start')
298 if (
true === self::userHasAdminRights())
303 $aTemp = match (strtolower($type))
305 "system_permissions" => ($this->getValue(
'system_permissions',
'string',
'session') ?? []),
306 "module_permissions" => ($this->getValue(
'module_permissions',
'string',
'session') ?? []),
309 return in_array($name, $aTemp);
323 "SELECT `username`,`display_name` FROM `".TABLE_PREFIX.
"users` WHERE `user_id` = ".$user_id,
331 $user[
'display_name'] =
'Unknown';
332 $user[
'username'] =
'unknown';
347 $this->database->execute_query(
348 "SELECT * from ".TABLE_PREFIX.
"pages WHERE page_id = ".$page_id,
354 if (empty($aResults))
357 $this->
print_error($GLOBALS[
'MESSAGE'][
'PAGES_NOT_FOUND']);
374 $action_groups = $action.
'_groups';
376 $sGroups = $this->database->get_one(
"SELECT ".$action_groups.
" FROM ".TABLE_PREFIX.
"pages WHERE page_id = ".$page_id);
378 $aGroups = explode(
',',$sGroups);
380 $aUserPermissions = $this->getValue(
'groups_id',
'string',
'session',
',');
382 $in_group = !empty(array_intersect($aGroups,$aUserPermissions));
397 if (
true === self::userHasAdminRights())
402 $titleLower = strtolower(str_replace(
'_blank',
'', $title));
405 $system_permissions = $this->getValue(
'system_permissions',
'string_clean',
'session');
408 return (is_numeric(array_search($titleLower, $system_permissions)));
418 if (self::userHasAdminRights())
423 $lookFor = strtolower($what);
428 $terms = [
"groups",
"groups_view",
"groups_add",
"groups_modify",
"groups_delete"];
435 $terms = [
"groups_".$lookFor];
443 return !empty(array_intersect($terms, $_SESSION[
'SYSTEM_PERMISSIONS']));
455 if (self::userHasAdminRights())
460 $lookFor = strtolower($what);
465 $terms = [
"users",
"users_view",
"users_add",
"users_modify",
"users_delete"];
472 $terms = [
"users_".$lookFor];
480 return !empty(array_intersect($terms, $_SESSION[
'SYSTEM_PERMISSIONS']));
492 if (self::userHasAdminRights())
497 $lookFor = strtolower($what);
502 $terms = [
"pages",
"pages_settings",
"pages_view",
"pages_add",
"pages_modify",
"pages_delete"];
510 $terms = [
"pages_".$lookFor];
518 return !empty(array_intersect($terms, $_SESSION[
'SYSTEM_PERMISSIONS']));
534 $title = $this->database->get_one(
"SELECT `value` FROM `".TABLE_PREFIX.
"settings` WHERE `name`='website_title'");
536 $charset = (
true === defined(
'DEFAULT_CHARSET')) ? DEFAULT_CHARSET :
'utf-8';
540 $view_url = LEPTON_URL;
541 if (isset($_GET[
'page_id']))
544 $result = $this->database->get_one(
"SELECT `link` FROM `" . TABLE_PREFIX .
"pages` WHERE `page_id`= '" . (
int) addslashes($_GET[
'page_id']) .
"'");
545 if (!is_null($result))
547 $view_url .= PAGES_DIRECTORY.$result.PAGE_EXTENSION;
555 $backend_theme_version =
"";
556 if (defined(
'DEFAULT_THEME'))
558 $backend_theme_version = $this->database->get_one(
"SELECT `version` from `" . TABLE_PREFIX .
"addons` where `directory`='" . DEFAULT_THEME .
"'");
562 'SECTION_NAME' => $MENU[strtoupper($this->section_name)],
563 'WEBSITE_TITLE' => $title,
564 'BACKEND_TITLE' => BACKEND_TITLE,
565 'TEXT_ADMINISTRATION' => $TEXT[
'ADMINISTRATION'],
566 'CURRENT_USER' => $MESSAGE[
'START_CURRENT_USER'],
567 'DISPLAY_NAME' => $this->getValue(
'display_name',
'string',
'session'),
568 'CHARSET' => $charset,
569 'LANGUAGE' => strtolower(LANGUAGE),
570 'LEPTON_VERSION' => LEPTON_VERSION,
571 'SUBVERSION' => SUBVERSION,
572 'LEPTON_URL' => LEPTON_URL,
573 'ADMIN_URL' => ADMIN_URL,
574 'THEME_URL' => THEME_URL,
575 'TITLE_START' => $MENU[
'START'],
576 'TITLE_VIEW' => $MENU[
'VIEW'],
577 'TITLE_HELP' => $MENU[
'HELP'],
578 'TITLE_LOGOUT' => $MENU[
'LOGOUT'],
588 'URL_VIEW' => $view_url,
589 'URL_HELP' =>
' https://lepton-cms.org/',
591 'THEME_VERSION' => $backend_theme_version,
592 'THEME_NAME' => DEFAULT_THEME,
618 echo $this->oTWIG->render(
641 echo $this->oTWIG->render(
654 $this->html_output_storage = ob_get_clean();
655 if (
true === $this->droplets_ok)
657 evalDroplets($this->html_output_storage);
661 if ($this->is_authenticated() )
663 LEPTON_core::getInstance()->getProtectedFunctions($this->html_output_storage, $this);
666 echo $this->html_output_storage;
677 public function print_success(
string|array $message,
string $redirect =
'index.php',
bool $auto_footer =
true): void
684 if (
true === is_array($message))
686 $message = implode(
"<br />", $message);
691 'NEXT' => $TEXT[
'NEXT'],
692 'BACK' => $TEXT[
'BACK'],
693 'MESSAGE' => $message,
694 'THEME_URL' => THEME_URL,
695 'REDIRECT' => $redirect,
696 'REDIRECT_TIMER' => REDIRECT_TIMER
699 echo $this->oTWIG->render(
700 '@theme/success.lte',
704 if (
true === $auto_footer)
719 public function print_error(
string|array $message,
string $link =
'index.php',
bool $auto_footer =
true): void
725 if (
true === is_array($message))
727 $message = implode(
"<br />", $message);
731 'MESSAGE' => $message,
733 'BACK' => $TEXT[
'BACK'],
734 'THEME_URL' => THEME_URL
737 echo $this->oTWIG->render(
742 if (
true === $auto_footer && method_exists($this,
"print_footer"))
758 if (self::userHasAdminRights())
763 if (!isset($_SESSION[
'SYSTEM_PERMISSIONS']))
768 return (in_array($sPermissionName, $_SESSION[
'SYSTEM_PERMISSIONS']));
781 static::$instance =
null;
791 if (LEPTON_core::userHasAdminRights() ==
true)
796 if (empty($this->adminTools))
798 $aAllAdminToolsStorage = [];
799 $this->database->execute_query(
800 "SELECT `directory` FROM `".TABLE_PREFIX.
"addons` WHERE `function` = 'tool'",
802 $aAllAdminToolsStorage,
806 foreach ($aAllAdminToolsStorage as $tempTool)
808 $this->adminTools[] = $tempTool[
'directory'];
812 $aUserModules = LEPTON_core::getValue(
"module_permissions",
"array",
"session");
814 return !empty(array_intersect($aUserModules, $this->adminTools));
837 public static function displayMessage(
838 string $sType =
"success",
839 array|
string $aMessage = [],
840 string $sRedirect =
"",
841 int $iRedirectTime = -1,
842 string $sTemplateName =
"message.lte",
843 bool $bDirectOutput =
true
846 $oTwig = lib_twig_box::getInstance();
848 if (!is_array($aMessage))
850 $aMessage = [$aMessage];
853 if (empty($sRedirect))
858 if(stripos(
'leptoken=',$sRedirect) == 0)
860 $sRedirect.=
'&leptoken='.get_leptoken();
864 if (file_exists(LEPTON_PATH.
"/templates/".DEFAULT_THEME.
"/backend/backend/message.lte"))
867 $oTwig->registerPath(LEPTON_PATH.
"/templates/".DEFAULT_THEME.
"/backend/backend/",
"backend");
872 'message' => $aMessage,
873 'redirect' => $sRedirect,
874 'redirect_time' => $iRedirectTime
877 $sHTML_rendered = $oTwig->render(
878 "@backend/".$sTemplateName,
882 if ($bDirectOutput ==
true)
884 echo $sHTML_rendered;
888 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)