public function init() { if ((isset($_GET['cms_visual_edit']) || isset($_SESSION['visual_edit'])) && Users::getInstance()->isLogged() && Settings::get('enable_visual_edit')) { self::$enabled = true; $_SESSION['visual_edit'] = true; } }
/** * @return $this */ protected function beforeSave() { $can_set_permission = 0; // If user is super-admin with all privileges granted if ($this->is_superadmin) { $can_set_permission = 1; } // If current group is allowed to set permissions if ($this->getField('can_set_permissions') && Users::getInstance()->getGroupData('can_set_permissions')) { $can_set_permission = 1; } $this->setCanSetPermissions($can_set_permission); return $this; }
private function init_data() { if (Settings::getInstance()->get('disable_cms_translations')) { return; // No translations } $data = []; foreach (Finder::getInstance()->getPathFolders(Finder::TYPE_TRANSLATIONS) as $file) { $file_path = $file . Users::getInstance()->getUserLng() . '.php'; if (stripos($file_path, DIR_BASE) === false) { $file_path = DIR_BASE . $file_path; } if (file_exists($file_path)) { $data += (require_once $file_path); } } self::$init_data = $data; }
private function generateContent() { ob_start(); // Requesting P page $method = false; $call_object = false; // Find in classes under Vendor - Modules $real_class = Converter::to_camel_case(P); $class = '\\TMCms\\Modules\\' . $real_class . '\\Cms' . $real_class; if (!class_exists($class)) { // Not vendor module - check main CMS admin object $class = '\\TMCms\\Admin\\' . $real_class . '\\Cms' . $real_class; $call_object = true; if (!class_exists($class)) { // Search for exclusive module CMS pages created in Project folder for this individual site $file_path = DIR_MODULES . strtolower($real_class) . '/' . 'Cms' . $real_class . '.php'; if (file_exists($file_path)) { require_once $file_path; // Check for module itself $file_path = DIR_MODULES . strtolower($real_class) . '/' . 'Module' . $real_class . '.php'; if (file_exists($file_path)) { require_once $file_path; } // Require all objects class files $objects_path = DIR_MODULES . strtolower($real_class) . '/Entity/'; if (file_exists($objects_path)) { foreach (array_diff(scandir($objects_path), ['.', '..']) as $object_file) { require_once $objects_path . $object_file; } } // CmsClass $real_class = Converter::to_camel_case(P); $class = '\\TMCms\\Modules\\' . $real_class . '\\Cms' . $real_class; } } } // Try autoload PSR-0 or PSR-4 if (!class_exists($class)) { $class = 'TMCms\\Modules\\' . $real_class . '\\Cms' . $real_class; } // Try to find the right directory of requested class if (!class_exists($class)) { $class_name = 'Cms' . $real_class; $directory_iterator = new RecursiveDirectoryIterator(DIR_MODULES); $iterator = new RecursiveIteratorIterator($directory_iterator); foreach ($iterator as $file) { if ($file->getFilename() == $class_name . '.php') { $module_path = $file->getPathInfo()->getPathName(); $module_name = $file->getPathInfo()->getFilename(); $module_directory_iterator = new RecursiveDirectoryIterator($module_path); $module_iterator = new RecursiveIteratorIterator($module_directory_iterator); foreach ($module_iterator as $module_file) { $module_file_directory = $module_file->getPathInfo()->getFilename(); $module_file_name = $module_file->getFileName(); if (!in_array($module_file_name, ['.', '..']) and in_array($module_file_directory, [$module_name, 'Entity'])) { require_once $module_file->getPathName(); } } $class = implode('\\', ['\\TMCms', 'Modules', $module_name, $class_name]); break; } } } // Still no class if (!class_exists($class)) { dump('Requested class "' . $class . '" not found'); } // Check existence of requested method if (class_exists($class)) { $call_object = true; // Check requested method exists or set default if (method_exists($class, P_DO)) { $method = P_DO; } else { $method = '_default'; } // Final check we have anything to run if (!method_exists($class, $method)) { dump('Method "' . $method . '" not found in class "' . $class . '"'); } } // Check user's permission if (!Users::getInstance()->checkAccess(P, $method)) { error('You do not have permissions to access this page ("' . P . ' - ' . $method . '")'); die; } // Call required method if ($call_object) { $obj = new $class(); $obj->{$method}(); } else { call_user_func([$class, $method]); } $this->content = ob_get_clean(); }
<?php defined('INC') or exit; use TMCms\Admin\Users; use TMCms\Log\App; Users::getInstance()->deleteSession($_SESSION['admin_id']); App::add('User "' . $_SESSION['admin_login'] . '" logged out'); $_SESSION['admin_logged'] = false; $_SESSION['admin_id'] = false; $_SESSION['admin_login'] = false; $_SESSION['admin_super'] = false; $_SESSION['admin_sid'] = false; go(DIR_CMS_URL);
/** * Main view */ public function _default() { // We can show only files if user is locked to current folder $files_only = isset($_GET['files_only']); // We can set range of allowed file extensions to be uploaded $allowed_extensions = isset($_GET['allowed_extensions']) ? explode(',', $_GET['allowed_extensions']) : []; // If page is shown in modal widow if (IS_AJAX_REQUEST) { ob_start(); } // Directory to be shown is supplied from url $dir = isset($_GET['path']) ? $_GET['path'] : NULL; // Maybe user hav access only to public folder, so we have to check and change folder if (Users::getInstance()->getGroupData('filemanager_limited') && stripos($dir, DIR_PUBLIC_URL) === false) { $dir = DIR_PUBLIC_URL; } // If no dir - set default directory for public files if (!$dir) { $dir = DIR_PUBLIC_URL; } // Check that we have no slash as first symbol if ($dir[0] === '/') { $dir = substr($dir, 1); } // Create requested directory if not exists if (!file_exists(DIR_BASE . $dir)) { FileSystem::mkDir(DIR_BASE . $dir); } // Create list of folders and files in requested location $file_list = $dir_list = []; foreach (array_diff(scandir(DIR_BASE . $dir), ['.', '..']) as $v) { $p = $dir . $v; if (is_dir(DIR_BASE . $p)) { $dir_list[] = $p . '/'; } else { $file_list[] = $p; } } // Generate path to upper folder $tmp = []; $path_up = explode('/', $dir); foreach ($path_up as $v) { if ($v) { $tmp[] = $v; } } $path_up = $tmp; array_pop($path_up); $path_up = '/' . implode('/', $path_up) . '/'; // Show current path and generate links on page parts $path_links = []; $tmp = '/'; foreach (explode('/', $dir) as $v) { if (trim($v) == '') { continue; } $tmp .= $v . '/'; $path_links[] = '<a onclick="filemanager_helpers.loadDirectory(this); return false;" href="?p=' . P . '&nomenu&path=' . $tmp . '">' . $v . '</a>'; } // Show top bar if we are allowed to view folders if (!$files_only) { ?> <!--suppress JSUnresolvedFunction --> <div style="padding: 10px; position: relative"> <a onclick="filemanager_helpers.show_create_directory(); return false;" href="?p=<?php echo P; ?> &do=create_directory&nomenu&path=<?php echo $dir; ?> ">Create directory</a> | <a href="?p=<?php echo P; ?> &do=filemanager&nomenu&path=<?php echo $path_up; ?> " onclick="filemanager_helpers.loadDirectory(this); return false;">Go up</a> | Current path: /<?php echo implode('/', $path_links); ?> <hr> <a onclick="filemanager_helpers.show_create_file(); return false;" href="?p=<?php echo P; ?> &do=create_file&nomenu&path=<?php echo $dir; ?> ">Create file</a> | Filter by name <input type="text" id="filter_name" placeholder="File or folder name"> <hr> <span id="multiple_commands"> <var onclick="multiple.download(this)"><?php echo __('Download'); ?> </var> <var onclick="if (confirm('<?php echo __('Are you sure?'); ?> ')) multiple.delete_files()"><?php echo __('Delete'); ?> </var> <var onclick="multiple.copy(this)"><?php echo __('Copy'); ?> </var> <var id="multiple_paste" style="display:none;" onclick="multiple.paste(this)"><?php echo __('Paste'); ?> </var> </span> <hr> <div style="position: absolute; top: 0; right: 0; width: 300px; z-index: 10"> <img width="300" id="filemanager_current_image" style="display: none" src="<?php echo DIR_CMS_IMAGES_URL; ?> _.gif"> </div> </div> <?php } ?> <div style="min-height: 350px; overflow-y: auto; padding: 10px" id="file_list_zone"> <table cellspacing="0" cellpadding="0" style="line-height:20px"> <?php if (!$files_only) { ?> <tr> <td width="100%"></td> <td></td> <td width="75"></td> <td width="30"></td> </tr> <tr> <td colspan="5">Folders:</td> </tr> <?php foreach ($dir_list as $k => $v) { ?> <?php if ($v[0] != '/') { $v = '/' . $v; } ?> <tr class="bg_mouseover toggle_checkbox"> <td> <input class="cb_hide" type="checkbox" name="<?php echo $v; ?> " value=""> <a class="dir_context" href="?p=<?php echo P; ?> &do=filemanager&nomenu&path=<?php echo $v; ?> " onclick="return setSelectedToInput(this);" data-path="<?php echo $v; ?> " ondblclick="filemanager_helpers.loadDirectory(this); return false;" data-name="<?php echo basename($v); ?> "><?php echo basename($v); ?> </a> </td> <td></td> <td></td> <td align="center"> <a href="?p=<?php echo P; ?> &do=_delete&path=<?php echo $v; ?> " onclick="filemanager_helpers.delete_files('<?php echo $v; ?> '); return false;">x</a> </td> </tr> <?php } ?> <tr> <td colspan="5"> </td> </tr> <?php } ?> <tr> <td colspan="5">Files:</td> </tr> <?php foreach ($file_list as $k => $v) { // Need to have slash in name to set absolute paths if ($v[0] != '/') { $v = '/' . $v; } // Check special file type to show context menu $ext = strtolower(pathinfo($v, PATHINFO_EXTENSION)); $type_by_extension = ''; if (in_array($ext, ['txt', 'html', 'php', 'js', 'htaccess', 'css', ''])) { $type_by_extension = '_text'; } elseif (in_array(strtolower($ext), ['bmp', 'jpg', 'png', 'jpeg', 'gif'])) { $type_by_extension = '_img'; } elseif (in_array(strtolower($ext), ['zip'])) { $type_by_extension = '_archive'; } ?> <tr class="bg_mouseover toggle_checkbox"> <td> <input class="cb_hide" type="checkbox" name="<?php echo $v; ?> " value=""> <a class="file_context<?php echo $type_by_extension; ?> " href="" onclick="return setSelectedToInput(this);" data-path="<?php echo $v; ?> " ondblclick="done();" <?php if ($type_by_extension == '_img') { ?> onmouseover="$('#filemanager_current_image').attr('src', '<?php echo $v; ?> ').show()" onmouseout="$('#filemanager_current_image').attr('src', '<?php echo DIR_CMS_IMAGES_URL; ?> _.gif').hide()" <?php } ?> data-name="<?php echo basename($v); ?> "><?php echo basename($v); ?> </a> </td> <td></td> <td><?php echo Converter::formatDataSize(filesize(DIR_BASE . $v)); ?> </td> <td align="center"> <a href="?p=<?php echo P; ?> &do=_delete&path=<?php echo $v; ?> " onclick="filemanager_helpers.delete_files('<?php echo $v; ?> '); return false;">x</a> </td> </tr> <?php } ?> </table> <?php if ($files_only) { // Stop further rendering if we can locked to see only files echo ob_get_clean(); die; } ?> </div> <br> <div style="margin: auto 5px"> <?php // Simple upload form echo CmsForm::getInstance()->addField('Selected file (<a href="" onclick="done(); return false">Set</a>)', CmsInputText::getInstance('filename')->disableBackupBlock()->enableReadOnly()); ?> </div> <?php // Get maximum allowed size of chunk of uploaded file $max_upload_file = $max_post = Converter::formatIniSize(ini_get('post_max_size')); $max_upload = Converter::formatIniSize(ini_get('upload_max_filesize')); if ($max_upload < $max_upload_file) { $max_upload_file = $max_upload; } // Modern upload form with multiple file selects and large file uploads $upload_form = CmsForm::getInstance()->setSubmitButton(CmsButton::getInstance('Upload')->setElementIdAttribute('upload_files'))->setEnctype(CmsForm::ENCTYPE_MULTIPART)->setAction('?p=' . P . '&do=_upload')->addField('Upload files', CmsHtml::getInstance('file')->enableMultiple()->setValue(' <div id="filelist"> <input id="file" type="file" name="file[]" class="form-control" multiple=""> </div> <div id="container"> <a id="pickfiles" href="javascript:;" style="display: block; letter-spacing: 3px; padding-top: 15px; height: 50px; font-size: 13px; text-align: center; border: 1px solid black">Click to select files, or drag files here</a> </div> <pre id="console" style="display: none"></pre>'))->addField('Extract .zip files', CmsCheckbox::getInstance('extract')->setIsChecked())->addField('If file exists', CmsRadioBox::getInstance('exists')->setRadioButtons(['skip' => 'Skip upload', 'overwrite' => 'Overwrite', 'rename' => 'Make new name'])->setSelected('skip')); // Render textarea with form echo $upload_form; ?> <script> // Choose folder or file function setSelectedToInput(link) { $('a[data-path="' + link.getAttribute('data-path') + '"') .parents('#modal-popup_inner') .find('#filename') .val(link.getAttribute('data-path')); return false; } // Set value in opener and close window function done() { var filenameInput = $('#filename'), modalWindow = filenameInput.parents('#modal-popup_inner'); modalWindow.trigger('popup:return_result', [filenameInput.val()]); modalWindow.trigger('popup:close'); } // Main Container var _ = { con: { close: function () { $('#con_bg_in').hide().width(400).height(200).css('margin-left', -200); $('#con_bg, #con_bg_in, #con_rename, #con_file_create, #con_dir_create').hide(); }, open: function () { var $w = $(window); var w_h = $w.height(); $('#con_bg').show().width('100%').height(w_h); $('#con_bg_in').show(); } } }; // Bind checkbox events function events_on_checkboxes() { // Checkboxes toggle $('.toggle_checkbox input').change(function () { var $container = $('#multiple_commands'); if ($('.toggle_checkbox input:checked').length > 0) { $container.show(); } else { $container.hide(); } }); $('#con_bg').click(function () { _.con.close(); }); } events_on_checkboxes(); // Filter by name $('#filter_name').focus().keyup(function (el) { var value = el.target.value; if (!value.length) { $('a[data-name').closest('tr').show(); } else { $('a[data-name').closest('tr').hide(); } $('a[data-name*="' + value + '"]').closest('tr').show(); }); // Actions with multiple selected items var multiple = { // Start storage init: function () { var storage = this.getLocalStorage(); var items_copy = storage.get('multiple_copy_items'); if (items_copy) { $('#multiple_paste').show(); } }, // Get list of selected items get_selected_item_sources: function () { var items = []; $('.toggle_checkbox input:checked').each(function (k, v) { items.push($(v).attr('name')); }); return items; }, // Show / hide available button toggleButton: function (el) { $(el).stop().fadeOut('fast', function () { $(el).fadeIn('fast'); }); }, getLocalStorage: function () { return new Storage('filemanager_multiple'); }, // Delete files from server delete_files: function () { var items = this.get_selected_item_sources(); $.post('?p=filemanager&nomenu&do=_multiple_delete&ajax' + Date.now(), {pathes: items}, function () { filemanager_helpers.reloadFiles(); }); }, // Delete files from server download: function () { var items = this.get_selected_item_sources(); $.post('?p=filemanager&nomenu&do=_multiple_download&ajax' + Date.now(), {pathes: items}, function (link) { location.href = link; }); }, // Copy selected items copy: function (el) { // Save item paths into buffer var items = this.get_selected_item_sources(); var storage = this.getLocalStorage(); storage.set('multiple_copy_items', items); this.toggleButton(el); this.init(); }, // Paste (create copied) paste: function (el) { var storage = this.getLocalStorage(); // Check copied items var items = storage.get('multiple_copy_items'); if (items) { $.get('?p=filemanager&nomenu&do=_multiple_copy&ajax' + Date.now(), {pathes: items, current_path: '<?php echo $dir; ?> '}, function () { filemanager_helpers.reloadFiles(); } ); } this.toggleButton(el); } }; multiple.init(); // File uploader plugin with chunk upload possibility, drag and drop, and multiple selectes var uploader = new plupload.Uploader({ runtimes: 'html5,flash,silverlight,html4', browse_button: 'pickfiles', max_retries: 3, chunk_size: '<?php echo $max_upload_file; ?> ', container: document.getElementById('container'), drop_element: document.getElementById('container'), url: "?p=<?php echo P; ?> &do=_upload_multiple&path=<?php echo $dir; ?> &allowed_extensions=<?php echo implode(',', $allowed_extensions); ?> ", // Flash settings flash_swf_url: '<?php echo DIR_CMS_SCRIPTS_URL; ?> plupload/Moxie.swf', // Silverlight settings silverlight_xap_url: '<?php echo DIR_CMS_SCRIPTS_URL; ?> plupload/Moxie.xap', init: { PostInit: function () { document.getElementById('filelist').innerHTML = ''; document.getElementById('upload_files').onclick = function () { uploader.start(); return false; }; }, FilesAdded: function (up, files) { plupload.each(files, function (file) { document.getElementById('filelist').innerHTML += '<div onclick="filemanager_helpers.removeFile(\''+ file.id +'\')" style="cursor: no-drop" id="' + file.id + '"><var id="deleteFile' + file.id + '">X</var> ' + file.name + ' (' + plupload.formatSize(file.size) + ') <b></b></div>'; filemanager_helpers.upload_object = up; filemanager_helpers.file_handlers[file.id] = file; }); }, UploadProgress: function (up, file) { document.getElementById(file.id).getElementsByTagName('b')[0].innerHTML = '<span style="float: right; color: #fff; text-align: center; display: inline-block; width: 100px"><span style="background: green; width: '+ file.percent +'%; display: inline-block">' + file.percent + "%</span></span>"; }, Error: function (up, err) { document.getElementById('console').style.display = 'block'; document.getElementById('console').innerHTML += "\nError #" + err.code + ": " + err.message; }, UploadComplete: function () { // (up, err) filemanager_helpers.reloadFiles(); }, BeforeUpload: function () { // (up, err) uploader.setOption('url', "?p=<?php echo P; ?> &do=_upload_multiple&path=<?php echo $dir; ?> &allowed_extensions=<?php echo implode(',', $allowed_extensions); ?> &exists=" + $('input[name=exists]:checked').val() + '&extract=' + $('input[name=extract]:checked').length + '&cache=<?php echo NOW; ?> '); } } }); // Helper function for uploader plugin var filemanager_helpers = { upload_object: null, file_handlers: {}, removeFile: function(file_id) { var file = filemanager_helpers.file_handlers[file_id]; filemanager_helpers.upload_object.removeFile(file); $("#" + file_id).remove(); }, reloadFiles: function() { $('#file_list_zone').load(filemanager_helpers.current_url + '&files_only'); setTimeout(function() { events_on_checkboxes(); ajax_toasters.request_new_messages(); filemanager_helpers.reinit_context_menues(); }, 100); }, current_url: '<?php echo SELF; ?> ', loadDirectory: function (link) { // From CKEditor - in separate window if ('<?php echo (int) isset($_GET['CKEditor']); ?> ' == '1') { window.location.href = link.href + '&CKEditor=<?php echo isset($_GET['CKEditor']) ? $_GET['CKEditor'] : ''; ?> &CKEditorFuncNum=<?php echo isset($_GET['CKEditorFuncNum']) ? $_GET['CKEditorFuncNum'] : ''; ?> &langCode=<?php echo isset($_GET['langCode']) ? $_GET['langCode'] : ''; ?> '; } else { // Ajax filemanager_helpers.current_url = link.href; $(link).parents('#modal-popup_inner').trigger('popup:load_content', [link.href]); } return false; }, show_create_directory: function() { _.con.open(); $('#con_file_create').hide(); $('#con_dir_create').show(); }, show_create_file: function() { _.con.open(); $('#con_dir_create').hide(); $('#con_file_create').show(); }, delete_files: function(path) { if (!confirm('<?php echo __('Are you sure?'); ?> ')) return false; $.get("?p=<?php echo P; ?> &do=_delete&path="+ path, { 'path': path }, function () { filemanager_helpers.reloadFiles(); }); }, reinit_context_menues: function() { // Move all contextMenues to the BODY element - to calculate proper CSS if ($('body > .contextMenu').length < 1) { $('.contextMenu').appendTo(document.body); } else { // Delete new from ajaxed data $('.contextMenu').not('body > .contextMenu').remove(); } } }; uploader.init(); filemanager_helpers.reinit_context_menues(); </script><?php if (IS_AJAX_REQUEST) { echo ob_get_clean(); die; } }
/** * After that user is logged-in * @param AdminUser $user * @return string session id */ public function setUserLoggedIn($user) { $_SESSION['admin_logged'] = true; $_SESSION['admin_id'] = $user->getId(); $_SESSION['admin_login'] = $user->getLogin(); $_SESSION['admin_sid'] = Users::getInstance()->startSession($user->getId()); if (!defined('USER_ID')) { define('USER_ID', $user->getId()); } App::add('User "' . $user->getLogin() . '" logged in.'); }
/** * Get top page header * @return string */ public function getMenuHeaderView() { if (!defined('USER_ID') || !USER_ID) { return ''; } ob_start(); // Notifications from system $notification_repository = new UsersMessageEntityRepository(); $notification_repository->setWhereToUserId(USER_ID); $notification_repository->setWhereFromUserId(0); $notification_repository->addOrderByField('ts', true); $notification_repository->setWhereSeen(0); $total_notifications = $notification_repository->getCountOfObjectsInCollection(); $notification_repository->setLimit(10); $notifications = $notification_repository->getAsArrayOfObjects(); // Messages from users $messages_repository = new UsersMessageEntityRepository(); $messages_repository->setWhereToUserId(USER_ID); $messages_repository->addWhereFieldIsNot('from_user_id', 0); $messages_repository->addOrderByField('ts', true); $messages_repository->setWhereSeen(0); $total_messages = $messages_repository->getCountOfObjectsInCollection(); $messages_repository->setLimit(10); $messages = $messages_repository->getAsArrayOfObjects(); // Custom notifiers // TODO $custom_notifiers = []; $custom_notifiers[] = $this->getHelpTextsNotifier(); // Logo image and link $logo = ''; if (array_key_exists('logo', Configuration::getInstance()->get('cms'))) { $logo = Configuration::getInstance()->get('cms')['logo']; } $logo_link = DIR_CMS_URL; if (array_key_exists('logo_link', Configuration::getInstance()->get('cms'))) { $logo_link = Configuration::getInstance()->get('cms')['logo_link']; } $user_avatar = Users::getInstance()->getUserData('avatar'); if (!$user_avatar) { $user_avatar = '/vendor/devp-eu/tmcms-core/src/assets/cms/layout/img/avatar.png'; } $languages = AdminLanguages::getPairs(); $current_language = Users::getInstance()->getUserLng(); ?> <div class="page-header-inner"> <?php if ($logo) { ?> <div class="page-logo"> <a href="<?php echo $logo_link; ?> "> <img src="<?php echo $logo; ?> " alt="logo" class="logo-default"> </a> <div class="menu-toggler sidebar-toggler"></div> </div> <?php } ?> <a href="javascript:;" class="menu-toggler responsive-toggler" data-toggle="collapse" data-target=".navbar-collapse"></a> <div class="top-menu"> <ul class="nav navbar-nav pull-right"> <li class="dropdown dropdown-extended dropdown-home" id="header_home_bar"> <a href="/" target="_blank" class="dropdown-toggle" data-hover="dropdown" data-close-others="true"> <i class="icon-home"></i> </a> </li> <?php if (count($languages) > 1) { ?> <li class="dropdown dropdown-language"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true"> <img alt="" src="/vendor/devp-eu/tmcms-core/src/assets/cms/img/flags/<?php echo LNG; ?> .png"> <span class="langname"><?php echo strtoupper(LNG); ?> </span> <i class="fa fa-angle-down"></i> </a> <ul class="dropdown-menu"> <?php foreach ($languages as $k => $v) { if ($k == LNG) { continue; } ?> <li> <a href="?p=users&do=_change_lng&lng=<?php echo $k; ?> "> <img alt="" src="/vendor/devp-eu/tmcms-core/src/assets/cms/img/flags/<?php echo $k; ?> .png"> <?php echo $v; ?> </a> </li> <?php } ?> </ul> </li> <?php } ?> <?php if ($notifications) { ?> <li class="dropdown dropdown-extended dropdown-notification" id="header_notification_bar"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true"> <i class="icon-bell"></i> <span class="badge badge-default"><?php echo count($notifications); ?> </span> </a> <ul class="dropdown-menu"> <li> <p> You have <?php echo $total_notifications; ?> new notifications </p> </li> <li> <ul class="dropdown-menu-list scroller" style="height: 250px;"> <?php foreach ($notifications as $k => $message) { /** @var UsersMessageEntity $message */ ?> <li> <a href="#"> <span class="label label-sm label-icon label-warning"> <i class="fa fa-bell-o"></i> </span> <?php echo $message->getMessage(); ?> <span class="time"> <?php echo Converter::getTimeFromEventAgo($message->getTs()); ?> </span> </a> </li> <?php } ?> </ul> </li> <li class="external"> <a href="?p=home&do=notifications"> See all notifications <i class="m-icon-swapright"></i> </a> </li> </ul> </li> <?php } ?> <?php if ($messages) { ?> <li class="dropdown dropdown-extended dropdown-inbox" id="header_inbox_bar"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true"> <i class="icon-envelope-open"></i> <span class="badge badge-default"><?php echo count($messages); ?> </span> </a> <ul class="dropdown-menu"> <li> <p> You have <?php echo $total_messages; ?> new messages </p> </li> <li> <ul class="dropdown-menu-list scroller" style="height: 250px;"> <?php foreach ($notifications as $k => $message) { /** @var UsersMessageEntity $message */ $user = new AdminUser($message->getFromUserId()); $avatar = $user->getAvatar(); ?> <li> <a href="?p=users&do=chat&user_id=2"> <?php if ($avatar) { ?> <span class="photo"> <img src="<?php echo $avatar; ?> " alt="" style="height=40px"> </span> <?php } ?> <span class="subject"> <span class="from"><?php echo $user->getName(); ?> </span> <span class="time"><?php echo Converter::getTimeFromEventAgo($message->getTs()); ?> </span> </span> <span class="message"><?php echo Converter::cutLongStrings($message->getMessage()); ?> </span> </a> </li> <?php } ?> </ul> </li> <li class="external"> <a href="?p=users&do=chat"> See all messages <i class="m-icon-swapright"></i> </a> </li> </ul> </li> <?php } ?> <?php if ($custom_notifiers) { ?> <?php echo implode('', $custom_notifiers); ?> <?php } ?> <li class="dropdown dropdown-user"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true"> <img alt="" class="img-circle" src="<?php echo $user_avatar; ?> " style="height: 29px;"> <span class="username"><?php echo Users::getInstance()->getUserData('name'); ?> </span> <i class="fa fa-angle-down"></i> </a> <ul class="dropdown-menu"> <li> <a href="?p=users&do=users_edit&id=<?php echo USER_ID; ?> "> <i class="icon-user"></i> My Profile </a> </li> <li> <a href="?p=home&do=notifications"> <i class="icon-envelope-open"></i>My notifications <span class="badge badge-danger"> <?php echo count($notifications); ?> </span> </a> </li> <li class="divider"></li> <li> <a href="#" onclick="clipboard_forms.copy_page_forms(); return false;"> <i class="icon-cloud-download"></i>Copy form data </a> </li> <li> <a href="#" onclick="clipboard_forms.paste_page_forms(); return false;"> <i class="icon-cloud-upload"></i>Paste form data </a> </li> <li class="divider"></li> <li> <a href="?p=home&do=_exit" onclick="return confirm('<?php echo __('Are you sure?'); ?> ');"> <i class="icon-key"></i> Log Out </a> </li> </ul> </li> <?php // TODO right panel ?> <!-- <li class="dropdown dropdown-quick-sidebar-toggler">--> <!-- <a href="javascript:;" class="dropdown-toggle">--> <!-- <i class="icon-logout"></i>--> <!-- </a>--> <!-- </li>--> </ul> </div> </div> <?php return ob_get_clean(); }
<?php use TMCms\Admin\Menu; use TMCms\Admin\Users; use TMCms\Config\Settings; if (!Settings::get('admin_panel_on_site') || !Users::getInstance()->isLogged()) { die; } ob_start(); ?> <style> #admin_front_panel table { border-collapse: collapse; } #admin_front_panel td { border: 2px solid #000; padding: 3px; } </style> <div id="admin_front_panel" style="position: fixed; top: 0; left: 0; opacity: 0.9; width: 100%; height: 25px; background: #fff; z-index: 99998; font-size: 16px; font-family: Arial, sans-serif"> <table cellpadding="0" cellspacing="0"> <tr> <td style="text-align: right"> <a href="<?php echo DIR_CMS_URL; ?> " title="Open Admin panel">CMS</a> </td> <td style="text-align: right"> <a href="<?php echo DIR_CMS_URL; ?>
/** * @param AdminUser $user */ private function initLogInProcess($user) { $user->loadDataFromDB(); // Set constants and session Users::getInstance()->deleteSession($user->getId()); Users::getInstance()->setUserLoggedIn($user); go(isset($_POST['go']) ? $_POST['go'] : '/cms/?p=home'); }
public function hashPassword() { $this->setPassword(Users::getInstance()->generateHash($this->getPassword())); }