From da80c7126887183b375c8b6f7c498f364724a95a Mon Sep 17 00:00:00 2001 From: Benjamin Renard Date: Fri, 25 Mar 2011 18:05:26 +0100 Subject: [PATCH] Added custum action feature --- public_html/custom_action.php | 104 ++++++++++++++++++ .../includes/class/class.LSsession.php | 31 +++++- public_html/lang/generate_lang_file.php | 9 ++ public_html/view.php | 14 +++ 4 files changed, 157 insertions(+), 1 deletion(-) create mode 100644 public_html/custom_action.php diff --git a/public_html/custom_action.php b/public_html/custom_action.php new file mode 100644 index 00000000..6a9cbd8c --- /dev/null +++ b/public_html/custom_action.php @@ -0,0 +1,104 @@ + loadData($_GET['dn'])) { + $config = LSconfig :: get('LSobjects.'.$_GET['LSobject'].'.customActions.'.$_GET['customAction']); + if (isset($config['function']) && is_callable($config['function'])) { + if (isset($config['label'])) { + $title=__($config['label']); + } + else { + $title=__($_GET['customAction']); + } + if (isset($_GET['valid'])) { + $objectname=$object -> getDisplayName(); + $GLOBALS['Smarty'] -> assign('pagetitle',$title.' : '.$objectname); + if ($config['function']($object)) { + if ($config['onSuccessMsgFormat']) { + + } + else { + LSsession :: addInfo(getFData(_('The custom action %{customAction} have been successfully execute on %{objectname}.'),array('objectname' => $objectname,'customAction' => $_GET['customAction']))); + } + LSsession :: redirect('view.php?LSobject='.$_GET['LSobject'].'&refresh'); + } + else { + LSerror :: addErrorCode('LSldapObject_15',$objectname); + } + } + else { + $objectname=$object -> getDisplayName(); + $question=( + isset($config['question_format'])? + getFData(__($config['question_format']),$objectname): + getFData( + _('Do you really want to execute custom action %{customAction} on %{objectname} ?'), + array( + 'objectname' => $objectname, + 'customAction' => $_GET['customAction'] + ) + ) + ); + $GLOBALS['Smarty'] -> assign('pagetitle',$title.' : '.$objectname); + $GLOBALS['Smarty'] -> assign('question',$question); + $GLOBALS['Smarty'] -> assign('validation_url','custom_action.php?LSobject='.$_GET['LSobject'].'&dn='.$_GET['dn'].'&customAction='.$_GET['customAction'].'&valid'); + $GLOBALS['Smarty'] -> assign('validation_label',_('Validate')); + } + LSsession :: setTemplate('question.tpl'); + } + else { + LSerror :: addErrorCode('LSsession_13'); + } + } + else { + LSerror :: addErrorCode('LSsession_12'); + } + } + else { + LSerror :: addErrorCode('LSsession_11'); + } + } + else { + LSerror :: addErrorCode('LSldapObject_01'); + } + } + else { + LSerror :: addErrorCode('LSsession_12'); + } + +} +else { + LSsession :: setTemplate('login.tpl'); +} + +// Affichage des retours d'erreurs +LSsession :: displayTemplate(); +?> diff --git a/public_html/includes/class/class.LSsession.php b/public_html/includes/class/class.LSsession.php index 4b9a07b1..e37f8ca1 100644 --- a/public_html/includes/class/class.LSsession.php +++ b/public_html/includes/class/class.LSsession.php @@ -1884,6 +1884,32 @@ class LSsession { return self :: relationCanAccess($dn,$LSobject,$relationName,'w'); } + /** + * Retourne le droit de l'utilisateur a executer une customAction + * + * @param[in] string $dn Le DN de l'objet + * @param[in] string $LSobject Le type de l'objet + * @param[in] string $customActionName Le nom de la customAction + * + * @retval boolean True si l'utilisateur peut executer cette customAction, false sinon + */ + public static function canExecuteCustomAction($dn,$LSobject,$customActionName) { + $conf=LSconfig :: get('LSobjects.'.$LSobject.'.customActions.'.$customActionName); + if (!is_array($conf)) + return; + $whoami = self :: whoami($dn); + + if (isset($conf['rights']) && is_array($conf['rights'])) { + foreach($whoami as $who) { + if (in_array($who,$conf['rights'])) { + return True; + } + } + } + + return; + } + /** * Ajoute un fichier temporaire * @@ -2169,7 +2195,10 @@ class LSsession { LSerror :: defineError('LSsession_12', _("LSsession : Some informations are missing to display this page.") ); - // 13 -> 16 : not yet used + LSerror :: defineError('LSsession_13', + _("LSsession : The function of the custom action %{name} does not exists or is not configured.") + ); + // 14 -> 16 : not yet used LSerror :: defineError('LSsession_17', _("LSsession : Error during creation of list of levels. Contact administrators. (Code : %{code})") ); diff --git a/public_html/lang/generate_lang_file.php b/public_html/lang/generate_lang_file.php index 07e0a2d5..3b293c42 100755 --- a/public_html/lang/generate_lang_file.php +++ b/public_html/lang/generate_lang_file.php @@ -71,6 +71,15 @@ if (loadDir('../'.LS_OBJECTS_DIR)) { add($rel['emptyText']); } } + // Custom Actions + if (is_array($conf['customActions'])) { + foreach($conf['customActions'] as $act) { + add($act['label']); + add($act['question_format']); + add($act['onSuccessMsgFormat']); + } + } + // LSform if (is_array($conf['LSform']['layout'])) { foreach($conf['LSform']['layout'] as $lay) { diff --git a/public_html/view.php b/public_html/view.php index fa2571f5..34927ea2 100644 --- a/public_html/view.php +++ b/public_html/view.php @@ -61,6 +61,20 @@ if(LSsession :: startLSsession()) { 'action' => 'delete' ); } + + // Custum Actions + $customActionsConfig = LSconfig :: get('LSobjects.'.$LSobject.'.customActions'); + if (is_array($customActionsConfig)) { + foreach($customActionsConfig as $name => $config) { + if (LSsession :: canExecuteCustomAction($dn,$LSobject,$name)) { + $LSview_actions[] = array ( + 'label' => ((isset($config['label']))?__($config['label']):__($name)), + 'url' => 'custom_action.php?LSobject='.$LSobject.'&dn='.$dn.'&customAction='.$name, + 'action' => ((isset($config['icon']))?$config['icon']:'generate') + ); + } + } + } if (LSsession :: getLSuserObjectDn() != $dn) { $object = new $LSobject();