--- /dev/null
+<?php
+/*******************************************************************************
+ * Copyright (C) 2007 Easter-eggs
+ * http://ldapsaisie.labs.libre-entreprise.org
+ *
+ * Author: See AUTHORS file in top-level directory.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version 2
+ * as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+******************************************************************************/
+
+require_once 'core.php';
+
+if(LSsession :: startLSsession()) {
+
+ if ((isset($_GET['LSobject'])) && (isset($_GET['dn'])) && (isset($_GET['customAction']))) {
+
+ if (LSsession ::loadLSobject($_GET['LSobject'])) {
+ if ( LSsession :: canExecuteCustomAction($_GET['dn'],$_GET['LSobject'],$_GET['customAction']) ) {
+ $object = new $_GET['LSobject']();
+ if ($object -> 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();
+?>
}
/**
+ * 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
*
* @author Benjamin Renard <brenard@easter-eggs.com>
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})")
);
'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();