openrat-cms

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

commit afcd571fc6aa4ef8c65ddb911ad8b415441ef7d3
parent 914094bfe5cb86ef52ee0fda7acd9d6c47b2afb8
Author: dankert <openrat@jandankert.de>
Date:   Fri,  3 Dec 2021 23:27:44 +0100

New: Only allowed methods are shown in the dropdown menu; Some security enhancements.

Diffstat:
Mmodules/cms/action/FolderAction.class.php | 13+++++++++++++
Mmodules/cms/action/ProfileAction.class.php | 20+++++++++++++++++++-
Mmodules/cms/action/folder/FolderAddAction.class.php | 8++++++++
Mmodules/cms/action/folder/FolderAdvancedAction.class.php | 3+++
Mmodules/cms/action/folder/FolderEditAction.class.php | 4+++-
Mmodules/cms/action/folder/FolderOrderAction.class.php | 1+
Mmodules/cms/action/folder/FolderRootAction.class.php | 3++-
Mmodules/cms/action/login/LoginLicenseAction.class.php | 18++++++++++++------
Mmodules/cms/action/object/ObjectNameAction.class.php | 9+++++++++
Mmodules/cms/action/object/ObjectRightsAction.class.php | 10++++++++++
Mmodules/cms/action/object/ObjectSettingsAction.class.php | 12++++++++++++
Mmodules/cms/action/profile/ProfileAvailableAction.class.php | 16+++++++++++++++-
Mmodules/cms/action/profile/ProfileUserinfoAction.class.php | 6++++++
Mmodules/cms/model/BaseObject.class.php | 11+++++++----
Mmodules/cms/ui/themes/default/html/views/folder/edit.php | 16+++++++++-------
Mmodules/cms/ui/themes/default/html/views/folder/edit.tpl.src.xml | 207+++++++++++++++++++++++++++++++++++++++++--------------------------------------
Mmodules/cms/ui/themes/default/html/views/title/show.php | 78++++++++++++++++++++++++++++++++++++++++++++++--------------------------------
Mmodules/cms/ui/themes/default/html/views/title/show.tpl.src.xml | 171++++++++++++++++++++++++++++---------------------------------------------------
Mmodules/util/ClassName.class.php | 10++++++++++
Mmodules/util/Session.class.php | 6++++--
20 files changed, 356 insertions(+), 266 deletions(-)

diff --git a/modules/cms/action/FolderAction.class.php b/modules/cms/action/FolderAction.class.php @@ -132,4 +132,17 @@ class FolderAction extends ObjectAction return intval($val); } + + /** + * Is it allowed to add a new object? + * @return bool + */ + protected function hasPermissionToAddAnyObject() { + + return + $this->folder->hasRight( Permission::ACL_CREATE_FILE ) || + $this->folder->hasRight( Permission::ACL_CREATE_FOLDER ) || + $this->folder->hasRight( Permission::ACL_CREATE_LINK ) || + $this->folder->hasRight( Permission::ACL_CREATE_PAGE ); + } } \ No newline at end of file diff --git a/modules/cms/action/ProfileAction.class.php b/modules/cms/action/ProfileAction.class.php @@ -39,6 +39,13 @@ use util\UIUtils; */ class ProfileAction extends BaseAction { + /** + * Current user. + * + * Current user or null, if no user is present. + * + * @var User|null + */ protected $user; /** @@ -71,21 +78,32 @@ class ProfileAction extends BaseAction /** + * Theme name. + * + * Gets the theme name of the current user, or the + * default style if no user is present. + * * @param User $user * @return string */ protected function getUserStyle($user ) { - // Theme für den angemeldeten Benuter ermitteln + // Gets theme for current user. if ( $user && Configuration::subset('style')->has($user->style)) $style = $user->style; else + // Fallback: Default theme. $style = Configuration::subset(['interface','style'])->get('default',''); return $style; } + /** + * Default permission: An authenticated user is necessary. + * + * @return void + */ public function checkAccess() { if ( !$this->user ) throw new SecurityException(); diff --git a/modules/cms/action/folder/FolderAddAction.class.php b/modules/cms/action/folder/FolderAddAction.class.php @@ -3,6 +3,7 @@ namespace cms\action\folder; use cms\action\FolderAction; use cms\action\Method; use cms\model\Permission; +use util\exception\SecurityException; class FolderAddAction extends FolderAction implements Method { @@ -20,4 +21,11 @@ class FolderAddAction extends FolderAction implements Method { public function post() { } + + + public function checkAccess() + { + if ( ! parent::hasPermissionToAddAnyObject() ) + throw new SecurityException(); + } } diff --git a/modules/cms/action/folder/FolderAdvancedAction.class.php b/modules/cms/action/folder/FolderAdvancedAction.class.php @@ -369,4 +369,7 @@ class FolderAdvancedAction extends FolderAction implements Method { $this->folder->setTimestamp(); } + + + } diff --git a/modules/cms/action/folder/FolderEditAction.class.php b/modules/cms/action/folder/FolderEditAction.class.php @@ -51,7 +51,9 @@ class FolderEditAction extends FolderAction implements Method { } $this->setTemplateVar('object' ,$list ); - } + + $this->setTemplateVar('add',parent::hasPermissionToAddAnyObject() ); + } public function post() { diff --git a/modules/cms/action/folder/FolderOrderAction.class.php b/modules/cms/action/folder/FolderOrderAction.class.php @@ -8,6 +8,7 @@ use language\Messages; class FolderOrderAction extends FolderAction implements Method { + public function getRequiredPermission() { return Permission::ACL_WRITE; } diff --git a/modules/cms/action/folder/FolderRootAction.class.php b/modules/cms/action/folder/FolderRootAction.class.php @@ -7,13 +7,14 @@ use cms\model\Project; class FolderRootAction extends FolderAction implements Method { + public function view() { $project = new Project($this->folder->projectid); $rootFolder = new Folder( $project->getRootObjectId() ); $rootFolder->load(); $this->setTemplateVar('rootfolderid' ,$rootFolder->id ); - $this->setTemplateVar('rootfoldername',$rootFolder->name); + $this->setTemplateVar('rootfoldername',$rootFolder->filename ); } diff --git a/modules/cms/action/login/LoginLicenseAction.class.php b/modules/cms/action/login/LoginLicenseAction.class.php @@ -3,6 +3,7 @@ namespace cms\action\login; use cms\action\LoginAction; use cms\action\Method; use cms\base\Configuration; +use cms\model\User; use util\Session; @@ -40,16 +41,21 @@ class LoginLicenseAction extends LoginAction implements Method { $this->setTemplateVar('cms_operator', Configuration::Conf()->subset('application')->get('operator') ); $user = Session::getUser(); - if ( !empty($user) ) - { - $this->setTemplateVar('user_login' , $user->loginDate ); - $this->setTemplateVar('user_name' , $user->name ); - $this->setTemplateVar('user_fullname', $user->fullname ); - } + if ( ! $user ) + $user = new User(); // empty user object as default. + $this->setTemplateVar('user_login' , $user->loginDate ); + $this->setTemplateVar('user_name' , $user->name ); + $this->setTemplateVar('user_fullname', $user->fullname ); } public function post() { } + + + public function checkAccess() + { + return true; + } } diff --git a/modules/cms/action/object/ObjectNameAction.class.php b/modules/cms/action/object/ObjectNameAction.class.php @@ -3,6 +3,7 @@ namespace cms\action\object; use cms\action\Method; use cms\action\ObjectAction; use cms\model\Language; +use cms\model\Permission; use language\Messages; use util\exception\ValidationException; @@ -31,4 +32,12 @@ class ObjectNameAction extends ObjectAction implements Method { $this->addNoticeFor($this->baseObject, Messages::SAVED); } + + + /** + * @return int Permission-flag. + */ + public function getRequiredPermission() { + return Permission::ACL_WRITE; + } } diff --git a/modules/cms/action/object/ObjectRightsAction.class.php b/modules/cms/action/object/ObjectRightsAction.class.php @@ -59,4 +59,14 @@ class ObjectRightsAction extends ObjectAction implements Method { } public function post() { } + + + /** + * @return int Permission-flag. + */ + public function getRequiredPermission() { + return Permission::ACL_GRANT; + } + + } diff --git a/modules/cms/action/object/ObjectSettingsAction.class.php b/modules/cms/action/object/ObjectSettingsAction.class.php @@ -3,6 +3,7 @@ namespace cms\action\object; use cms\action\Action; use cms\action\Method; use cms\action\ObjectAction; +use cms\model\Permission; use language\Messages; use util\exception\ValidationException; @@ -46,4 +47,15 @@ class ObjectSettingsAction extends ObjectAction implements Method { $this->addNoticeFor( $this->baseObject,Messages::SAVED); } + + + + /** + * @return int Permission-flag. + */ + public function getRequiredPermission() { + return Permission::ACL_PROP; + } + + } diff --git a/modules/cms/action/profile/ProfileAvailableAction.class.php b/modules/cms/action/profile/ProfileAvailableAction.class.php @@ -1,6 +1,7 @@ <?php namespace cms\action\profile; use cms\action\Action; +use cms\action\BaseAction; use cms\action\Method; use cms\action\ProfileAction; use util\ClassName; @@ -39,8 +40,21 @@ class ProfileAvailableAction extends ProfileAction implements Method { $actionClassName = new ClassName( ucfirst($action) . ucfirst($methodName) . 'Action'); $actionClassName->addNamespace( ['cms','action',$action] ); - if ( $actionClassName->exists() ) + if ( $actionClassName->exists() ) { + $n = $actionClassName->getName(); + /** + * @var BaseAction + */ + $actionMethod = new $n(); + $actionMethod->request = $this->request; + $actionMethod->init(); + try { + $actionMethod->checkAccess(); + } catch( \Exception $e ) { + return false; + } return true; + } $baseActionClassName = new ClassName( ucfirst($action) . 'Action' ); $baseActionClassName->addNamespace( ['cms','action'] ); diff --git a/modules/cms/action/profile/ProfileUserinfoAction.class.php b/modules/cms/action/profile/ProfileUserinfoAction.class.php @@ -10,6 +10,12 @@ use util\UIUtils; class ProfileUserinfoAction extends ProfileAction implements Method { + /** + * Gets user information. + * If no user is logged in, default information will be returned. + * + * @return void + */ public function view() { $user = Session::getUser(); diff --git a/modules/cms/model/BaseObject.class.php b/modules/cms/model/BaseObject.class.php @@ -57,14 +57,17 @@ class BaseObject extends ModelBase */ public $parentid; - /** Physikalischer Dateiname des Objektes (bei Links nicht gef?llt) - * <em>enth?lt nicht die Dateinamen-Erweiterung</em> + /** Filename. + * + * Technical filename of this object without any extension. This name must be unique in a folder. + * * @type String */ public $filename = ''; - /** Logischer (sprachabhaengiger) Name des Objektes - * (wird in Tabelle <code>name</code> abgelegt) + /** Name. + * + * Logical name of this object. * @type String * @deprecated use modelclass Name instead */ diff --git a/modules/cms/ui/themes/default/html/views/folder/edit.php b/modules/cms/ui/themes/default/html/views/folder/edit.php @@ -94,9 +94,11 @@ </table> </div> </div> - <div class="<?php echo O::escapeHtml('or-act-clickable or-button-knob') ?>"><?php echo O::escapeHtml('') ?> - <a target="<?php echo O::escapeHtml('_self') ?>" data-type="<?php echo O::escapeHtml('dialog') ?>" data-action="<?php echo O::escapeHtml('folder') ?>" data-method="<?php echo O::escapeHtml('add') ?>" data-id="<?php echo O::escapeHtml('') ?>" data-extra="<?php echo O::escapeHtml('[]') ?>" href="<?php echo O::escapeHtml('#/folder') ?>" class="<?php echo O::escapeHtml('or-link') ?>"><?php echo O::escapeHtml('') ?> - <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--method-new') ?>"><?php echo O::escapeHtml('') ?></i> - <span><?php echo O::escapeHtml(''.@O::lang('add').'') ?></span> - </a> - </div> -\ No newline at end of file + <?php $if2=($add); if($if2) { ?> + <div class="<?php echo O::escapeHtml('or-act-clickable or-button-knob') ?>"><?php echo O::escapeHtml('') ?> + <a target="<?php echo O::escapeHtml('_self') ?>" data-type="<?php echo O::escapeHtml('dialog') ?>" data-action="<?php echo O::escapeHtml('folder') ?>" data-method="<?php echo O::escapeHtml('add') ?>" data-id="<?php echo O::escapeHtml('') ?>" data-extra="<?php echo O::escapeHtml('[]') ?>" href="<?php echo O::escapeHtml('#/folder') ?>" class="<?php echo O::escapeHtml('or-link') ?>"><?php echo O::escapeHtml('') ?> + <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--method-new') ?>"><?php echo O::escapeHtml('') ?></i> + <span><?php echo O::escapeHtml(''.@O::lang('add').'') ?></span> + </a> + </div> + <?php } ?> +\ No newline at end of file diff --git a/modules/cms/ui/themes/default/html/views/folder/edit.tpl.src.xml b/modules/cms/ui/themes/default/html/views/folder/edit.tpl.src.xml @@ -1,103 +1,110 @@ -<output xmlns="http://www.openrat.de/template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openrat.de/template ../../../../../../../template_engine/components/template.xsd"> - <table> - <row header="true"> - <column header="true" class="table-column-action"> - <text value="${message:TYPE}"/> - </column> - <column header="true" class="table-column-auto"> - <text value="${message:NAME}"/> - </column> - <column header="true" class="-visible-on-desktop,table-column-date"> - <text value="${message:LASTCHANGE}"/> - </column> - <column header="true" class="table-column-action"> - </column> - </row> - <if present="parentid"> - <row class="data,act-clickable"> - <column> - <link type="open" id="${parentid}" name="" action="folder"> - <image action="folder"/> - </link> - </column> - <column> - <text value=".."/> - </column> - <column /> - <column /> - </row> - </if> - <list list="${object}" extract="true"> - <row class="data"> - <column class=""> - <image action="${icon}"/> - </column> - <column class="act-clickable"> - <link type="open" id="${id}" name="${name}" action="${type}" title="${desc}"> - <text value="${name}"/> - </link> - </column> - <column class="-visible-on-desktop"> - <date date="${date}"/> - </column> - <column> - <part class="button,button--active-on-hover,toolbar-icon,row--on-hover"> - <image class="menu-icon" menu="more"/> - <part class="dropdown,button-value"> - <part - class="dropdown-entry,act-clickable"> - <link type="open" id="${id}" title="${message:menu_open}" action="${type}"> - <image method="switch"/> - <text class="dropdown-text" value="${message:menu_open}"/> - </link> - </part> - <part - class="dropdown-entry,act-clickable"> - <link type="dialog" id="${id}" title="${message:menu_info_desc}" action="${type}" subaction="info"> - <image method="info"/> - <text class="dropdown-text" value="${message:menu_info}"/> - </link> - </part> - <part - class="dropdown-entry,act-clickable"> - <link type="dialog" id="${id}" title="${message:menu_prop_desc}" action="${type}" subaction="prop"> - <image method="prop"/> - <text class="dropdown-text" value="${message:menu_prop}"/> - </link> - </part> - <part - class="dropdown-entry,act-clickable"> - <link type="dialog" id="${id}" title="${message:menu_preview_desc}" action="${type}" subaction="preview"> - <image method="preview"/> - <text class="dropdown-text" value="${message:menu_preview}"/> - </link> - </part> - <part - class="dropdown-entry,act-clickable"> - <link type="dialog" id="${id}" title="${message:menu_pub_desc}" action="${type}" subaction="pub"> - <image method="pub"/> - <text class="dropdown-text" value="${message:menu_pub}"/> - </link> - </part> - </part> - </part> +<output xmlns="http://www.openrat.de/template" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://www.openrat.de/template ../../../../../../../template_engine/components/template.xsd"> + <table> + <row header="true"> + <column header="true" class="table-column-action"> + <text value="${message:TYPE}"/> + </column> + <column header="true" class="table-column-auto"> + <text value="${message:NAME}"/> + </column> + <column header="true" class="-visible-on-desktop,table-column-date"> + <text value="${message:LASTCHANGE}"/> + </column> + <column header="true" class="table-column-action"> + </column> + </row> + <if present="parentid"> + <row class="data,act-clickable"> + <column> + <link type="open" id="${parentid}" name="" action="folder"> + <image action="folder"/> + </link> + </column> + <column> + <text value=".."/> + </column> + <column/> + <column/> + </row> + </if> + <list list="${object}" extract="true"> + <row class="data"> + <column class=""> + <image action="${icon}"/> + </column> + <column class="act-clickable"> + <link type="open" id="${id}" name="${name}" action="${type}" title="${desc}"> + <text value="${name}"/> + </link> + </column> + <column class="-visible-on-desktop"> + <date date="${date}"/> + </column> + <column> + <part class="button,button--active-on-hover,toolbar-icon,row--on-hover"> + <image class="menu-icon" menu="more"/> + <part class="dropdown,button-value"> + <part + class="dropdown-entry,act-clickable"> + <link type="open" id="${id}" title="${message:menu_open}" action="${type}"> + <image method="switch"/> + <text class="dropdown-text" value="${message:menu_open}"/> + </link> + </part> + <part + class="dropdown-entry,act-clickable"> + <link type="dialog" id="${id}" title="${message:menu_info_desc}" action="${type}" + subaction="info"> + <image method="info"/> + <text class="dropdown-text" value="${message:menu_info}"/> + </link> + </part> + <part + class="dropdown-entry,act-clickable"> + <link type="dialog" id="${id}" title="${message:menu_prop_desc}" action="${type}" + subaction="prop"> + <image method="prop"/> + <text class="dropdown-text" value="${message:menu_prop}"/> + </link> + </part> + <part + class="dropdown-entry,act-clickable"> + <link type="dialog" id="${id}" title="${message:menu_preview_desc}" action="${type}" + subaction="preview"> + <image method="preview"/> + <text class="dropdown-text" value="${message:menu_preview}"/> + </link> + </part> + <part + class="dropdown-entry,act-clickable"> + <link type="dialog" id="${id}" title="${message:menu_pub_desc}" action="${type}" + subaction="pub"> + <image method="pub"/> + <text class="dropdown-text" value="${message:menu_pub}"/> + </link> + </part> + </part> + </part> - </column> - </row> - </list> - <if empty="${object}"> - <row> - <column colspan="2"> - <text value="${message:NOT_FOUND}"/> - </column> - </row> - </if> - </table> + </column> + </row> + </list> + <if empty="${object}"> + <row> + <column colspan="2"> + <text value="${message:NOT_FOUND}"/> + </column> + </row> + </if> + </table> - <part class="act-clickable,button-knob"> - <link type="dialog" action="folder" subaction="add"> - <image method="new"/> - <text value="${message:add}"/> - </link> - </part> + <if value="${add}"> + <part class="act-clickable,button-knob"> + <link type="dialog" action="folder" subaction="add"> + <image method="new"/> + <text value="${message:add}"/> + </link> + </part> + </if> </output> diff --git a/modules/cms/ui/themes/default/html/views/title/show.php b/modules/cms/ui/themes/default/html/views/title/show.php @@ -48,12 +48,50 @@ <div class="<?php echo O::escapeHtml('or-toolbar-icon or-user or-menu-category') ?>"><?php echo O::escapeHtml('') ?> <img /><?php echo O::escapeHtml('') ?> </div> - <div class="<?php echo O::escapeHtml('or-toolbar-icon or-user or-menu-category') ?>"><?php echo O::escapeHtml('') ?> - <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--action-user') ?>"><?php echo O::escapeHtml('') ?></i> - <span class="<?php echo O::escapeHtml('or-menu-label') ?>"><?php echo O::escapeHtml(''.@$userfullname.'') ?></span> - <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--dropdown or-menu-dropdown-icon') ?>"><?php echo O::escapeHtml('') ?></i> - <div class="<?php echo O::escapeHtml('or-dropdown or-dropdown--on-right') ?>"><?php echo O::escapeHtml('') ?> - <?php $if6=($isLoggedIn); if($if6) { ?> + <?php $if4=(!$isLoggedIn); if($if4) { ?> + <div class="<?php echo O::escapeHtml('or-toolbar-icon or-user or-menu-category') ?>"><?php echo O::escapeHtml('') ?> + <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--method-logout') ?>"><?php echo O::escapeHtml('') ?></i> + <span class="<?php echo O::escapeHtml('or-menu-label') ?>"><?php echo O::escapeHtml(''.@$userfullname.'') ?></span> + <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--dropdown or-menu-dropdown-icon') ?>"><?php echo O::escapeHtml('') ?></i> + <div class="<?php echo O::escapeHtml('or-dropdown or-dropdown--on-right') ?>"><?php echo O::escapeHtml('') ?> + <div class="<?php echo O::escapeHtml('or-dropdown-entry or-act-clickable') ?>"><?php echo O::escapeHtml('') ?> + <a title="<?php echo O::escapeHtml(''.@O::lang('USER_LOGIN_DESC').'') ?>" target="<?php echo O::escapeHtml('_self') ?>" data-type="<?php echo O::escapeHtml('dialog') ?>" data-action="<?php echo O::escapeHtml('login') ?>" data-method="<?php echo O::escapeHtml('login') ?>" data-id="<?php echo O::escapeHtml('') ?>" data-extra="<?php echo O::escapeHtml('[]') ?>" href="<?php echo O::escapeHtml('#/login') ?>" class="<?php echo O::escapeHtml('or-link') ?>"><?php echo O::escapeHtml('') ?> + <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--method-user') ?>"><?php echo O::escapeHtml('') ?></i> + <span class="<?php echo O::escapeHtml('or-dropdown-text') ?>"><?php echo O::escapeHtml(''.@O::lang('USER_LOGIN').'') ?></span> + </a> + </div> + <?php $if7=(O::config(['login','register'])); if($if7) { ?> + <div class="<?php echo O::escapeHtml('or-dropdown-entry or-act-clickable') ?>"><?php echo O::escapeHtml('') ?> + <a title="<?php echo O::escapeHtml(''.@O::lang('REGISTER_DESC').'') ?>" target="<?php echo O::escapeHtml('_self') ?>" data-type="<?php echo O::escapeHtml('dialog') ?>" data-action="<?php echo O::escapeHtml('login') ?>" data-method="<?php echo O::escapeHtml('register') ?>" data-id="<?php echo O::escapeHtml('') ?>" data-extra="<?php echo O::escapeHtml('[]') ?>" href="<?php echo O::escapeHtml('#/login') ?>" class="<?php echo O::escapeHtml('or-link') ?>"><?php echo O::escapeHtml('') ?> + <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--method-register') ?>"><?php echo O::escapeHtml('') ?></i> + <span class="<?php echo O::escapeHtml('or-dropdown-text') ?>"><?php echo O::escapeHtml(''.@O::lang('REGISTER').'') ?></span> + </a> + </div> + <?php } ?> + <?php $if7=(O::config(['login','send_password'])); if($if7) { ?> + <div class="<?php echo O::escapeHtml('or-dropdown-entry or-act-clickable') ?>"><?php echo O::escapeHtml('') ?> + <a title="<?php echo O::escapeHtml(''.@O::lang('SEND_PASSWORD_DESC').'') ?>" target="<?php echo O::escapeHtml('_self') ?>" data-type="<?php echo O::escapeHtml('dialog') ?>" data-action="<?php echo O::escapeHtml('login') ?>" data-method="<?php echo O::escapeHtml('password') ?>" data-id="<?php echo O::escapeHtml('') ?>" data-extra="<?php echo O::escapeHtml('[]') ?>" href="<?php echo O::escapeHtml('#/login') ?>" class="<?php echo O::escapeHtml('or-link') ?>"><?php echo O::escapeHtml('') ?> + <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--method-password') ?>"><?php echo O::escapeHtml('') ?></i> + <span class="<?php echo O::escapeHtml('or-dropdown-text') ?>"><?php echo O::escapeHtml(''.@O::lang('SEND_PASSWORD').'') ?></span> + </a> + </div> + <?php } ?> + <div class="<?php echo O::escapeHtml('or-dropdown-divide') ?>"><?php echo O::escapeHtml('') ?></div> + <div class="<?php echo O::escapeHtml('or-dropdown-entry or-act-clickable') ?>"><?php echo O::escapeHtml('') ?> + <a title="<?php echo O::escapeHtml(''.@O::lang('menu_license_DESC').'') ?>" target="<?php echo O::escapeHtml('_self') ?>" data-type="<?php echo O::escapeHtml('dialog') ?>" data-action="<?php echo O::escapeHtml('login') ?>" data-method="<?php echo O::escapeHtml('license') ?>" data-id="<?php echo O::escapeHtml('') ?>" data-extra="<?php echo O::escapeHtml('[]') ?>" href="<?php echo O::escapeHtml('#/login') ?>" class="<?php echo O::escapeHtml('or-link') ?>"><?php echo O::escapeHtml('') ?> + <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--method-info') ?>"><?php echo O::escapeHtml('') ?></i> + <span class="<?php echo O::escapeHtml('or-dropdown-text') ?>"><?php echo O::escapeHtml(''.@O::lang('menu_info').'') ?></span> + </a> + </div> + </div> + </div> + <?php } ?> + <?php $if4=($isLoggedIn); if($if4) { ?> + <div class="<?php echo O::escapeHtml('or-toolbar-icon or-user or-menu-category') ?>"><?php echo O::escapeHtml('') ?> + <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--action-user') ?>"><?php echo O::escapeHtml('') ?></i> + <span class="<?php echo O::escapeHtml('or-menu-label') ?>"><?php echo O::escapeHtml(''.@$userfullname.'') ?></span> + <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--dropdown or-menu-dropdown-icon') ?>"><?php echo O::escapeHtml('') ?></i> + <div class="<?php echo O::escapeHtml('or-dropdown or-dropdown--on-right') ?>"><?php echo O::escapeHtml('') ?> <div class="<?php echo O::escapeHtml('or-dropdown-entry or-act-clickable') ?>"><?php echo O::escapeHtml('') ?> <a title="<?php echo O::escapeHtml(''.@O::lang('menu_PROFILE_DESC').'') ?>" target="<?php echo O::escapeHtml('_self') ?>" data-type="<?php echo O::escapeHtml('dialog') ?>" data-action="<?php echo O::escapeHtml('profile') ?>" data-method="<?php echo O::escapeHtml('edit') ?>" data-id="<?php echo O::escapeHtml('') ?>" data-extra="<?php echo O::escapeHtml('[]') ?>" href="<?php echo O::escapeHtml('#/profile') ?>" class="<?php echo O::escapeHtml('or-link') ?>"><?php echo O::escapeHtml('') ?> <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--action-user') ?>"><?php echo O::escapeHtml('') ?></i> @@ -92,33 +130,9 @@ <span class="<?php echo O::escapeHtml('or-dropdown-text') ?>"><?php echo O::escapeHtml(''.@O::lang('USER_LOGOUT').'') ?></span> </a> </div> - <?php } ?> - <?php if(!$if6) { ?> - <div class="<?php echo O::escapeHtml('or-dropdown-entry or-act-clickable') ?>"><?php echo O::escapeHtml('') ?> - <a title="<?php echo O::escapeHtml(''.@O::lang('USER_LOGIN_DESC').'') ?>" target="<?php echo O::escapeHtml('_self') ?>" data-type="<?php echo O::escapeHtml('dialog') ?>" data-action="<?php echo O::escapeHtml('login') ?>" data-method="<?php echo O::escapeHtml('login') ?>" data-id="<?php echo O::escapeHtml('') ?>" data-extra="<?php echo O::escapeHtml('[]') ?>" href="<?php echo O::escapeHtml('#/login') ?>" class="<?php echo O::escapeHtml('or-link') ?>"><?php echo O::escapeHtml('') ?> - <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--method-user') ?>"><?php echo O::escapeHtml('') ?></i> - <span class="<?php echo O::escapeHtml('or-dropdown-text') ?>"><?php echo O::escapeHtml(''.@O::lang('USER_LOGIN').'') ?></span> - </a> - </div> - <?php $if7=(O::config(['login','register'])); if($if7) { ?> - <div class="<?php echo O::escapeHtml('or-dropdown-entry or-act-clickable') ?>"><?php echo O::escapeHtml('') ?> - <a title="<?php echo O::escapeHtml(''.@O::lang('REGISTER_DESC').'') ?>" target="<?php echo O::escapeHtml('_self') ?>" data-type="<?php echo O::escapeHtml('dialog') ?>" data-action="<?php echo O::escapeHtml('login') ?>" data-method="<?php echo O::escapeHtml('register') ?>" data-id="<?php echo O::escapeHtml('') ?>" data-extra="<?php echo O::escapeHtml('[]') ?>" href="<?php echo O::escapeHtml('#/login') ?>" class="<?php echo O::escapeHtml('or-link') ?>"><?php echo O::escapeHtml('') ?> - <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--method-register') ?>"><?php echo O::escapeHtml('') ?></i> - <span class="<?php echo O::escapeHtml('or-dropdown-text') ?>"><?php echo O::escapeHtml(''.@O::lang('REGISTER').'') ?></span> - </a> - </div> - <?php } ?> - <?php $if7=(O::config(['login','send_password'])); if($if7) { ?> - <div class="<?php echo O::escapeHtml('or-dropdown-entry or-act-clickable') ?>"><?php echo O::escapeHtml('') ?> - <a title="<?php echo O::escapeHtml(''.@O::lang('SEND_PASSWORD_DESC').'') ?>" target="<?php echo O::escapeHtml('_self') ?>" data-type="<?php echo O::escapeHtml('dialog') ?>" data-action="<?php echo O::escapeHtml('login') ?>" data-method="<?php echo O::escapeHtml('password') ?>" data-id="<?php echo O::escapeHtml('') ?>" data-extra="<?php echo O::escapeHtml('[]') ?>" href="<?php echo O::escapeHtml('#/login') ?>" class="<?php echo O::escapeHtml('or-link') ?>"><?php echo O::escapeHtml('') ?> - <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--method-password') ?>"><?php echo O::escapeHtml('') ?></i> - <span class="<?php echo O::escapeHtml('or-dropdown-text') ?>"><?php echo O::escapeHtml(''.@O::lang('SEND_PASSWORD').'') ?></span> - </a> - </div> - <?php } ?> - <?php } ?> + </div> </div> - </div> + <?php } ?> <div class="<?php echo O::escapeHtml('or-toolbar-icon or-menu-category') ?>"><?php echo O::escapeHtml('') ?> <i class="<?php echo O::escapeHtml('or-image-icon or-image-icon--menu-more or-menu-icon') ?>"><?php echo O::escapeHtml('') ?></i> <span class="<?php echo O::escapeHtml('or-menu-label') ?>"><?php echo O::escapeHtml(''.@O::lang('edit').'') ?></span> diff --git a/modules/cms/ui/themes/default/html/views/title/show.tpl.src.xml b/modules/cms/ui/themes/default/html/views/title/show.tpl.src.xml @@ -8,21 +8,13 @@ <image menu="menu"/> </part> - <!-- Shrink the navigation on desktop --> - <!-- - <part - class="toolbar-icon,workbench-\\\\-visible-on-wide,,act-nav-small,workbench-\\\\-visible-on-dialog-open,-visible-on-desktop"> - <image class="" menu="menu"/> - </part> - --> - <!-- Open the navigation on desktop --> <part class="toolbar-icon,workbench--visible-on-small,act-nav-wide,workbench--visible-on-dialog-open,-visible-on-desktop"> <image class="" menu="menu"/> </part> - <!-- Placeholder for breadcrum navigation --> + <!-- Placeholder for breadcrumb navigation --> <part class="breadcrumb act-breadcrumb"/> </part> @@ -73,80 +65,67 @@ </link> </part> - <!-- Menü: Datei --> - <!-- - <part class="toolbar-icon,menu-category,menu-shortcut"> - <image method="add"/> - - - <text class="menu-label" value="${message:file}"/>- - <image class="menu-dropdown-icon" symbol="dropdown"/> - <part class="dropdown"> - <part - class="dropdown-entry,act-clickable,filtered"> - <link type="dialog" title="${message:menu_new_desc}" subaction="add"> - <image method="add"/> - <text value="${message:menu_new}"/> - <text class="dropdown-key,link-keystroke" value="${config:ui/keybinding/method/add}"/> - </link> - </part> - <part class="dropdown-divide"/> - <part class="dropdown-entry,act-clickable,filtered"> - <link type="dialog" title="${message:menu_createfolder_desc}" subaction="createfolder"> - <image method="add"/> - <text class="dropdown-text" value="${message:menu_createfolder}"/> - </link> - </part> - <part class="dropdown-entry,act-clickable,filtered"> - <link type="dialog" title="${message:menu_createpage_desc}" subaction="createpage"> - <image method="add"/> - <text class="dropdown-text" value="${message:menu_createpage}"/> - </link> - </part> - <part class="dropdown-entry,act-clickable,filtered"> - <link type="dialog" title="${message:menu_createfile_desc}" subaction="createfile"> - <image method="add"/> - <text class="dropdown-text" value="${message:menu_createfile}"/> - </link> - </part> - <part class="dropdown-entry,act-clickable,filtered"> - <link type="dialog" title="${message:menu_createimage_desc}" subaction="createimage"> - <image method="add"/> - <text class="dropdown-text" value="${message:menu_createimage}"/> - </link> - </part> - <part class="dropdown-entry,act-clickable,filtered"> - <link type="dialog" title="${message:menu_createtext_desc}" subaction="createtext"> - <image method="add"/> - <text class="dropdown-text" value="${message:menu_createtext}"/> - </link> - </part> - <part class="dropdown-entry,act-clickable,filtered"> - <link type="dialog" title="${message:menu_createlink_desc}" subaction="createlink"> - <image method="add"/> - <text class="dropdown-text" value="${message:menu_createlink}"/> - </link> - </part> - <part class="dropdown-entry,act-clickable,filtered"> - <link type="dialog" title="${message:menu_createurl_desc}" subaction="createurl"> - <image method="add"/> - <text class="dropdown-text" value="${message:menu_createurl}"/> - </link> - </part> - </part> - </part>--> - <part class="toolbar-icon,user,menu-category"> <image/><!-- empty image as a divider --> </part> - <part class="toolbar-icon,user,menu-category"> - <image action="user"/> - <text class="menu-label" value="${userfullname}"/> - <image class="menu-dropdown-icon" symbol="dropdown"/> - <!-- <image symbol="dropdown" />--> - <part class="dropdown,dropdown--on-right"> - <if true="${isLoggedIn}"> - <!-- logged in --> + + <!-- no user is logged in --> + <if false="${isLoggedIn}"> + <part class="toolbar-icon,user,menu-category"> + <image method="logout"/> + <text class="menu-label" value="${userfullname}"/> + <image class="menu-dropdown-icon" symbol="dropdown"/> + <!-- <image symbol="dropdown" />--> + <part class="dropdown,dropdown--on-right"> + <part class="dropdown-entry,act-clickable"> + <link type="dialog" title="${message:USER_LOGIN_DESC}" action="login" subaction="login"> + <image method="user"/> + <text class="dropdown-text" value="${message:USER_LOGIN}"/> + </link> + </part> + <if value="${config:login/register}"> + <part class="dropdown-entry,act-clickable"> + <link type="dialog" title="${message:REGISTER_DESC}" action="login" + subaction="register"> + <image method="register"/> + <text class="dropdown-text" value="${message:REGISTER}"/> + </link> + </part> + + </if> + <if value="${config:login/send_password}"> + <part class="dropdown-entry,act-clickable"> + <link type="dialog" title="${message:SEND_PASSWORD_DESC}" action="login" + subaction="password"> + <image method="password"/> + <text class="dropdown-text" value="${message:SEND_PASSWORD}"/> + </link> + </part> + </if> + <part class="dropdown-divide"/> + + <!-- License info --> + <part class="dropdown-entry,act-clickable"> + <link type="dialog" title="${message:menu_license_DESC}" action="login" subaction="license"> + <image method="info"/> + <text class="dropdown-text" value="${message:menu_info}"/> + </link> + </part> + + </part> + </part> + </if> + + + <!-- a user is logged in --> + <if true="${isLoggedIn}"> + <part class="toolbar-icon,user,menu-category"> + <image action="user"/> + <text class="menu-label" value="${userfullname}"/> + <image class="menu-dropdown-icon" symbol="dropdown"/> + <!-- <image symbol="dropdown" />--> + <part class="dropdown,dropdown--on-right"> <part class="dropdown-entry,act-clickable"> <link type="dialog" title="${message:menu_PROFILE_DESC}" action="profile" subaction="edit"> <image action="user"/> @@ -188,39 +167,9 @@ <text class="dropdown-text" value="${message:USER_LOGOUT}"/> </link> </part> - </if> - <else> - <!-- not logged in --> - <part class="dropdown-entry,act-clickable"> - <link type="dialog" title="${message:USER_LOGIN_DESC}" action="login" subaction="login"> - <image method="user"/> - <text class="dropdown-text" value="${message:USER_LOGIN}"/> - </link> - </part> - <if value="${config:login/register}"> - <part class="dropdown-entry,act-clickable"> - <link type="dialog" title="${message:REGISTER_DESC}" action="login" - subaction="register"> - <image method="register"/> - <text class="dropdown-text" value="${message:REGISTER}"/> - </link> - </part> - - </if> - <if value="${config:login/send_password}"> - <part class="dropdown-entry,act-clickable"> - <link type="dialog" title="${message:SEND_PASSWORD_DESC}" action="login" - subaction="password"> - <image method="password"/> - <text class="dropdown-text" value="${message:SEND_PASSWORD}"/> - </link> - </part> - - </if> - </else> + </part> </part> - </part> - <!-- Search is now in the navigation pane --> + </if> <!-- Common menu --> diff --git a/modules/util/ClassName.class.php b/modules/util/ClassName.class.php @@ -20,6 +20,16 @@ class ClassName $this->name = $className; } + /** + * get full class name. + * @return string + */ + public function getName() + { + return $this->name; + } + + public function dropNamespace() { if ( $pos = strrpos($this->name, '\\') ) diff --git a/modules/util/Session.class.php b/modules/util/Session.class.php @@ -66,9 +66,11 @@ class Session /** - * Liefert den Benutzer aus der Sitzung oder <code>null</code>, wenn kein Benutze angemeldet ist. + * Current user. * - * @return User + * Gets the current user from session or <code>null</code>, if no user is present. + * + * @return User|null */ public static function getUser() {