- Modification des templates :

-> Le choix du niveau est maintenant dans le menu de gauche
 -> Le logo est cliquable (retour à l'accueil)
- Mise en cache des subDnLdapServer (sous-niveaux)
- Modification majeur sur le module de recherche :
  -> Refonte du mécanisme de la page
	-> Ajout du cache de recherche (gain notable de rapidité)
	-> Ajout d'un message quand la recherche ne retourne aucun résultat
	-> Possibilité de faire une recherche récursive
- Personnalisation rendu possible du nom donné au concepte de niveau
- LSldapObject : Correction d'un bug dans la méthode listObjects() : Warning
  lors de certains retours vides.
- LSsession : 
  -> Création de méthode pour centraliser les tests d'activation des caches
  -> Proprité ajax_displate : permet l'affichage des debugs à travers les 
	   requêtes ajax du type 'update'
- LSsmoothbox : Modification de l'affichage
This commit is contained in:
Benjamin Renard 2008-06-18 12:27:35 +00:00
parent 69f0b35ca6
commit dd80110e6d
18 changed files with 714 additions and 278 deletions

View file

@ -25,7 +25,9 @@ $GLOBALS['LSconfig'] = array(
'NetLDAP2' => '/usr/share/php/Net/LDAP2.php',
'Smarty' => '/var/www/tmp/Smarty-2.6.18/libs/Smarty.class.php',
'lang' => 'fr_FR.UTF8',
'cacheLSrights' => false,
'cacheLSrights' => true,
'cacheSubDn' => true,
'cacheSearch' => true,
'ldap_servers' => array (
array (
'name' => 'LSexample',
@ -53,6 +55,7 @@ $GLOBALS['LSconfig'] = array(
)
),
'cacheLSrights' => false,
'cacheSearch' => true,
'authobject' => 'LSeepeople',
'authobject_pwdattr' => 'userPassword',
'recoverPassword' => array(

View file

@ -746,10 +746,15 @@ class LSldapObject {
// Si recherche unique
else {
// préparation du retour finale
$ret_final=array();
foreach($ret as $obj)
$ret_final[]=$obj['dn'];
$ret=$ret_final;
if (is_array($ret)) {
$ret_final=array();
foreach($ret as $obj)
$ret_final[]=$obj['dn'];
$ret=$ret_final;
}
else {
$ret=array();
}
break;
}
}

View file

@ -46,6 +46,8 @@ class LSsession {
);
var $LSaccess = array();
var $tmp_file = array();
var $_subDnLdapServer = array();
var $ajaxDisplay = false;
/**
* Constructeur
@ -243,7 +245,7 @@ class LSsession {
$this -> ldapServerId = $_SESSION['LSsession']['ldapServerId'];
$this -> tmp_file = $_SESSION['LSsession']['tmp_file'];
if ( ($GLOBALS['LSconfig']['cacheLSrights']) || ($this -> ldapServer['cacheLSrights']) ) {
if ( $this -> cacheLSrights() ) {
$this -> ldapServer = $_SESSION['LSsession']['ldapServer'];
$this -> LSrights = $_SESSION['LSsession']['LSrights'];
$this -> LSaccess = $_SESSION['LSsession']['LSaccess'];
@ -258,6 +260,11 @@ class LSsession {
$this -> loadLSobjects();
$this -> loadLSrights();
}
if ( $this -> cacheSudDn() && (!isset($_REQUEST['LSsession_topDn_refresh'])) ) {
$this -> _subDnLdapServer = $_SESSION['LSsession_subDnLdapServer'];
}
$this -> loadLSobject($this -> ldapServer['authobject']);
$this -> LSuserObject = new $this -> ldapServer['authobject']();
$this -> LSuserObject -> loadData($this -> dn);
@ -466,7 +473,7 @@ class LSsession {
$this -> rdn = $_POST['LSsession_user'];
$this -> loadLSrights();
$this -> loadLSaccess();
$GLOBALS['Smarty'] -> assign('LSsession_username',$this -> LSuserObject -> getDisplayValue());
$GLOBALS['Smarty'] -> assign('LSsession_username',$this -> LSuserObject -> getValue('rdn'));
$_SESSION['LSsession']=get_object_vars($this);
return true;
}
@ -549,6 +556,9 @@ class LSsession {
* @retval mixed Tableau des subDn, false si une erreur est survenue.
*/
function getSubDnLdapServer() {
if ($this -> cacheSudDn() && isset($this -> _subDnLdapServer[$this -> ldapServerId])) {
return $this -> _subDnLdapServer[$this -> ldapServerId];
}
if ( is_array($this ->ldapServer['subDn']) ) {
$return=array();
foreach($this ->ldapServer['subDn'] as $subDn_name => $subDn_config) {
@ -588,12 +598,32 @@ class LSsession {
$return[$subDn_config] = $subDn_name;
}
}
if ($this -> cacheSudDn()) {
$this -> _subDnLdapServer[$this -> ldapServerId]=$return;
$_SESSION['LSsession_subDnLdapServer'] = $this -> _subDnLdapServer;
}
return $return;
}
else {
return;
}
}
/**
* Retourne la liste de subDn du serveur Ldap utilise
* trié par la profondeur dans l'arboressence (ordre décroissant)
*
* @return array() Tableau des subDn trié
*/
function getSortSubDnLdapServer() {
if(isset($_SESSION['LSsession']['LSview_subDnLdapServer']) && $this -> cacheSudDn()) {
return $_SESSION['LSsession']['LSview_subDnLdapServer'];
}
$subDnLdapServer = $this -> getSubDnLdapServer();
uksort($subDnLdapServer,"compareDn");
$_SESSION['LSsession']['LSview_subDnLdapServer']=$subDnLdapServer;
return $subDnLdapServer;
}
/**
* Retourne les options d'une liste déroulante pour le choix du topDn
@ -825,20 +855,28 @@ class LSsession {
// Niveau
$listTopDn = $this -> getSubDnLdapServer();
if (is_array($listTopDn)) {
$GLOBALS['Smarty'] -> assign('label_level',_('Niveau'));
$GLOBALS['Smarty'] -> assign('label_level',$this -> getLevelLabel());
$GLOBALS['Smarty'] -> assign('_refresh',_('Rafraîchir'));
$LSsession_topDn_index = array();
$LSsession_topDn_name = array();
foreach($listTopDn as $index => $name) {
$LSsession_topDn_index[] = $index;
$LSsession_topDn_name[] = $name;
}
$GLOBALS['Smarty'] -> assign('LSsession_topDn_index',$LSsession_topDn_index);
$GLOBALS['Smarty'] -> assign('LSsession_topDn_name',$LSsession_topDn_name);
$GLOBALS['Smarty'] -> assign('LSsession_topDn',$this -> topDn);
$GLOBALS['Smarty'] -> assign('LSsession_subDn_indexes',$LSsession_topDn_index);
$GLOBALS['Smarty'] -> assign('LSsession_subDn_names',$LSsession_topDn_name);
$GLOBALS['Smarty'] -> assign('LSsession_subDn',$this -> topDn);
$GLOBALS['Smarty'] -> assign('LSsession_subDnName',$this -> getSubDnName());
}
$GLOBALS['LSerror'] -> display();
debug_print();
if ($this -> ajaxDisplay) {
$GLOBALS['Smarty'] -> assign('error_txt',json_encode($GLOBALS['LSerror']->getErrors()));
$GLOBALS['Smarty'] -> assign('debug_txt',json_encode(debug_print(true)));
}
else {
$GLOBALS['LSerror'] -> display();
debug_print();
}
if (!$this -> template)
$this -> setTemplate('empty.tpl');
$GLOBALS['Smarty'] -> display($this -> template);
@ -1184,6 +1222,69 @@ class LSsession {
}
}
/**
* Retourne true si le cache des droits est activé
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @retval boolean True si le cache des droits est activé, false sinon.
*/
function cacheLSrights() {
return ( ($GLOBALS['LSconfig']['cacheLSrights']) || ($this -> ldapServer['cacheLSrights']) );
}
/**
* Retourne true si le cache des subDn est activé
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @retval boolean True si le cache des subDn est activé, false sinon.
*/
function cacheSudDn() {
return (($GLOBALS['LSconfig']['cacheSubDn']) || ($this -> ldapServer['cacheSubDn']));
}
/**
* Retourne true si le cache des recherches est activé
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @retval boolean True si le cache des recherches est activé, false sinon.
*/
function cacheSearch() {
return (($GLOBALS['LSconfig']['cacheSearch']) || ($this -> ldapServer['cacheSearch']));
}
/**
* Retourne le label des niveaux pour le serveur ldap courant
*
* @author Benjamin Renard <brenard@easter-eggs.com>
*
* @retval string Le label des niveaux pour le serveur ldap dourant
*/
function getLevelLabel() {
return ($this -> ldapServer['levelLabel']!='')?$this -> ldapServer['levelLabel']:_('Niveau');
}
/**
* Retourne le nom du subDn
*
* @param[in] $subDn string subDn
*
* @return string Le nom du subDn ou '' sinon
*/
function getSubDnName($subDn=false) {
if (!$subDn) {
$subDn = $this -> topDn;
}
if ($this -> getSubDnLdapServer()) {
if (isset($this -> _subDnLdapServer[$this -> ldapServerId][$subDn])) {
return $this -> _subDnLdapServer[$this -> ldapServerId][$subDn];
}
}
return '';
}
}
?>

View file

@ -258,5 +258,12 @@ function debug_print($return=false) {
}
return $retVal;
}
function compareDn($a,$b) {
if (substr_count($a,',') > substr_count($b,','))
return -1;
else
return 1;
}
?>

View file

@ -31,7 +31,7 @@ var LSdefault = new Class({
onLSdebugHiddenClick: function(event){
new Event(event).stop();
new Fx.Style(this.LSdebug,'opacity',{duration:500}).start(1,0);
new Fx.Style(this.LSdebug,'opacity',{duration:500}).start(0.8,0);
},
displayDebugBox: function() {
@ -46,8 +46,7 @@ var LSdefault = new Class({
},
displayDebug: function(html) {
this.LSdebug.empty();
this.LSdebug.setHTML(html);
this.LSdebugInfos.setHTML(html);
this.displayDebugBox();
},

View file

@ -1,17 +1,24 @@
var LSselect = new Class({
initialize: function(){
this.initializeContent();
this.main_page = $('LSobject-select-main-div').getParent();
this.content = $('content');
$$('form.LSselect_search').each(function(el) {
var input = new Element('input');
input.setProperty('name','ajax');
input.setProperty('type','hidden');
input.injectInside(el);
el.addEvent('submit',this.onSubmitSearchForm.bindWithEvent(this,el));
}, this);
this.LSselect_search_form = $('LSselect_search_form');
var input = new Element('input');
input.setProperty('name','ajax');
input.setProperty('type','hidden');
input.injectInside(this.LSselect_search_form);
this.LSselect_search_form.addEvent('submit',this.onSubmitSearchForm.bindWithEvent(this));
this.LSselect_topDn = $('LSselect_topDn');
this.LSselect_topDn.addEvent('change',this.onChangeLSselect_topDn.bind(this));
if (this.LSselect_topDn) {
this.LSselect_topDn.addEvent('change',this.onChangeLSselect_topDn.bind(this));
}
this.LSselect_refresh_btn = $('LSselect_refresh_btn');
this.LSselect_refresh_btn.addEvent('click',this.onClickLSselect_refresh_btn.bind(this));
this.initializeContent();
},
initializeContent: function() {
@ -32,10 +39,8 @@ var LSselect = new Class({
objectdn: checkbox.value,
objecttype: $('LSselect-object').getProperties('caption').caption
};
LSdebug('plus');
}
else {
LSdebug('mois');
var data = {
template: 'LSselect',
action: 'dropLSselectobject-item',
@ -64,40 +69,50 @@ var LSselect = new Class({
onChangePageClickComplete: function(responseText, responseXML) {
varLSdefault.loadingImgHide(this.searchImgload);
$('content').setHTML(responseText);
this.content.setHTML(responseText);
this.initializeContent();
},
onChangeLSselect_topDn: function() {
form = this.LSselect_topDn.getParent().getParent();
this.submitSearchForm(form);
this.submitSearchForm();
},
onSubmitSearchForm: function(event, form) {
onSubmitSearchForm: function(event) {
new Event(event).stop();
this.submitSearchForm(form);
this.submitSearchForm();
},
submitSearchForm: function(form) {
submitSearchForm: function() {
var imgload = varLSdefault.loadingImgDisplay($('title'),'inside');
form.send({
update: $('content'),
onComplete: this.onSubmitSearchFormComplete.bind(this,imgload)
this.LSselect_search_form.send({
update: this.content,
onComplete: this.onSubmitSearchFormComplete.bind(this,imgload),
evalScripts: true
});
},
onSubmitSearchFormComplete: function(imgload) {
varLSdefault.loadingImgHide(imgload);
if (typeof(debug_txt)!="undefined") {
var debug = Json.evaluate(debug_txt);
if (debug) {
varLSdefault.displayDebug(debug.toString());
}
}
if (typeof(error_txt)!="undefined") {
var error=Json.evaluate(error_txt);
if (error) {
varLSdefault.displayDebug(error.toString());
}
}
this.initializeContent();
},
submit: function() {
var values = new Array();
$('content').getElements('input[name^=LSobjects_selected]').each(function(el) {
values.push(el.value);
},this);
return values;
onClickLSselect_refresh_btn: function() {
var input = new Element('input');
input.setProperty('name','refresh');
input.setProperty('type','hidden');
input.injectInside(this.LSselect_search_form);
this.submitSearchForm();
}
});

View file

@ -49,6 +49,7 @@ var LSsession_login = new Class({
if (data.list_topDn) {
$('LSsession_topDn').getParent().setHTML(data.list_topDn);
LSdebug($('LSsession_topDn').innerHTML);
$('LSsession_topDn_label').setHTML(data.levelLabel);
$$('.loginform-level').each(function(el) {
el.setStyle('display','block');
});

View file

@ -22,8 +22,8 @@ var LSsmoothbox = new Class({
this.pnav = new Element('p');
this.pnav.setProperty('id','pnav-LSsmoothbox');
this.pnav.injectInside(this.win);
this.frame.injectInside(this.win);
this.pnav.injectInside(this.win);
$$('a.LSsmoothbox').each(function(el) {
el.addEvent('click',this.clickA.bindWithEvent(this,el));

View file

@ -24,7 +24,10 @@ if (!isset($_ERRORS)) {
$list = $GLOBALS['LSsession'] -> getSubDnLdapServerOptions($_SESSION['LSsession_topDn']);
if (is_string($list)) {
$list="<select name='LSsession_topDn' id='LSsession_topDn'>".$list."</select>";
$data = array('list_topDn' => $list);
$data = array(
'list_topDn' => $list,
'levelLabel' => $GLOBALS['LSsession'] -> getLevelLabel()
);
}
else if (is_array($list)){
$data = array('LSerror' => $GLOBALS['LSerror']->getErrors());

View file

@ -29,121 +29,253 @@ if($LSsession -> startLSsession()) {
if (isset($_REQUEST['LSobject'])) {
$LSobject = $_REQUEST['LSobject'];
if ( $GLOBALS['LSsession'] -> loadLSobject($_REQUEST['LSobject']) ) {
$objectList=array();
$object = new $_REQUEST['LSobject']();
if ( $_REQUEST['LSview_pattern']!='' ) {
$filter='(|';
if ( isset($_REQUEST['LSview_approx']) ) {
foreach ($object -> attrs as $attr_name => $attr_val) {
$filter.='('.$attr_name.'~='.$_REQUEST['LSview_pattern'].')';
}
}
else {
foreach ($object -> attrs as $attr_name => $attr_val) {
$filter.='('.$attr_name.'=*'.$_REQUEST['LSview_pattern'].'*)';
}
}
$filter.=')';
$GLOBALS['Smarty']->assign('LSobject_list_filter','filter='.urlencode($filter));
}
else if ($_REQUEST['filter']) {
$filter=urldecode($_REQUEST['filter']);
$GLOBALS['Smarty']->assign('LSobject_list_filter','filter='.$_REQUEST['filter']);
if ( $GLOBALS['LSsession'] -> loadLSobject($LSobject) ) {
$objectList=array();
$object = new $LSobject();
$GLOBALS['Smarty']->assign('pagetitle',$object -> getLabel());
$GLOBALS['Smarty']->assign('LSobject_list_objectname',$object -> getLabel());
if (isset($_SESSION['LSsession']['LSsearch'][$LSobject])) {
$filter = $_SESSION['LSsession']['LSsearch'][$LSobject]['filter'];
if (isCompatibleDNs($_SESSION['LSsession']['LSsearch'][$LSobject]['topDn'],$GLOBALS['LSsession'] -> topDn)) {
$topDn = $_SESSION['LSsession']['LSsearch'][$LSobject]['topDn'];
debug("topDn from cache : ".$topDn);
}
else {
$filter=NULL;
$GLOBALS['Smarty']->assign('LSobject_list_filter','');
$topDn = $object -> config['container_dn'].','.$GLOBALS['LSsession'] -> topDn;
debug("topDn from cache : ".$topDn);
}
$topDn = $object -> config['container_dn'].','.$GLOBALS['LSsession'] -> topDn;
if(isset($_REQUEST['LSselect_topDn'])) {
if ($GLOBALS['LSsession'] -> validSubDnLdapServer($_REQUEST['LSselect_topDn'])) {
$topDn = $object -> config['container_dn'].','.$_REQUEST['LSselect_topDn'];
$params = $_SESSION['LSsession']['LSsearch'][$LSobject]['params'];
$pattern = $_SESSION['LSsession']['LSsearch'][$LSobject]['pattern'];
$recur = $_SESSION['LSsession']['LSsearch'][$LSobject]['recur'];
$approx = $_SESSION['LSsession']['LSsearch'][$LSobject]['approx'];
$selectedTopDn = $_SESSION['LSsession']['LSsearch'][$LSobject]['selectedTopDn'];
}
else {
$filter = NULL;
$topDn = $object -> config['container_dn'].','.$GLOBALS['LSsession'] -> topDn;
$params = array('scope' => 'one');
$pattern = false;
$recur = false;
$approx = false;
$selectedTopDn = $GLOBALS['LSsession'] -> topDn;
}
if (isset($_REQUEST['LSview_search_submit'])) {
if (isset($_REQUEST['LSview_pattern']) && ($_REQUEST['LSview_pattern']!=$pattern)) {
$pattern = $_REQUEST['LSview_pattern'];
}
}
$list=$object -> listObjects($filter,$topDn);
$nbObjects=count($list);
if ($nbObjects > NB_LSOBJECT_LIST_SELECT) {
if (isset($_GET['page'])) {
$list = array_slice($list, ($_GET['page']) * NB_LSOBJECT_LIST_SELECT, NB_LSOBJECT_LIST_SELECT);
$GLOBALS['Smarty']->assign('LSobject_list_currentpage',$_GET['page']);
$GLOBALS['Smarty']->assign('LSobject_list_nbpage',ceil($nbObjects / NB_LSOBJECT_LIST_SELECT));
$approx = (isset($_REQUEST['LSview_approx']));
if ($pattern && $pattern!='') {
$filter='(|';
if ($approx) {
foreach ($object -> attrs as $attr_name => $attr_val) {
$filter.='('.$attr_name.'~='.$pattern.')';
}
}
else {
$list = array_slice($list, 0, NB_LSOBJECT_LIST_SELECT);
$GLOBALS['Smarty']->assign('LSobject_list_currentpage',0);
$GLOBALS['Smarty']->assign('LSobject_list_nbpage',ceil($nbObjects / NB_LSOBJECT_LIST_SELECT));
foreach ($object -> attrs as $attr_name => $attr_val) {
$filter.='('.$attr_name.'=*'.$pattern.'*)';
}
}
$filter.=')';
}
else {
$filter = NULL;
}
if (isset($_REQUEST['LSview_recur'])) {
$recur = true;
$params['scope'] = 'sub';
if ($GLOBALS['LSsession'] -> validSubDnLdapServer($_REQUEST['LSselect_topDn'])) {
$topDn = $_REQUEST['LSselect_topDn'];
$selectedTopDn = $topDn;
}
else {
$topDn = $GLOBALS['LSsession'] -> topDn;
$selectedTopDn = $topDn;
}
}
else {
$recur = false;
$params['scope'] = 'one';
if ($GLOBALS['LSsession'] -> validSubDnLdapServer($_REQUEST['LSselect_topDn'])) {
$topDn = $object -> config['container_dn'].','.$_REQUEST['LSselect_topDn'];
$selectedTopDn = $_REQUEST['LSselect_topDn'];
}
else {
$topDn = $object -> config['container_dn'].','.$GLOBALS['LSsession'] -> topDn;
$selectedTopDn = $GLOBALS['LSsession'] -> topDn;
}
}
}
// Sauvegarde en Session
$_SESSION['LSsession']['LSsearch'][$LSobject] = array(
'filter' => $filter,
'topDn' => $topDn,
'params' => $params,
'pattern' => $pattern,
'recur' => $recur,
'approx' => $approx,
'selectedTopDn' => $selectedTopDn
);
$GLOBALS['Smarty']->assign('LSview_search_pattern',$pattern);
if ($recur) {
$GLOBALS['Smarty']->assign('LSview_search_recur',true);
}
if ($approx) {
$GLOBALS['Smarty']->assign('LSview_search_approx',true);
}
$GLOBALS['Smarty']->assign('LSselect_topDn',$selectedTopDn);
// Hidden fields
$GLOBALS['Smarty']->assign('LSview_search_hidden_fields',array(
'LSobject' => $LSobject,
'LSview_search_submit' => 1,
'ajax' => 1
));
// Hash de la recherche déterminer à partir des paramètres de la recherche
$hash = mhash (MHASH_MD5,
print_r(
array(
'LSobject' => $LSobject,
'filter' => $filter,
'topDn' => $topDn,
'params' => $params
),
true
)
);
if (($GLOBALS['LSsession'] -> cacheSearch()) && isset($_SESSION['LSsession']['LSsearch'][$hash]) && (!isset($_REQUEST['refresh']))) {
// On affiche à partir du cache
$searchData=$_SESSION['LSsession']['LSsearch'][$hash];
debug('From cache');
}
else {
debug('Load');
$LSview_actions[] = array (
'label' => _('Rafraîchir'),
'url' => 'view.php?LSobject='.$LSobject.'&amp;refresh',
'action' => 'refresh'
);
$list=$object -> listObjects($filter,$topDn,$params);
$nbObjects=count($list);
$searchData['LSobject_list_nbresult']=$nbObjects;
$c=0;
$subDnLdapServer = $GLOBALS['LSsession'] -> getSortSubDnLdapServer();
foreach($list as $thisObject) {
$c++;
unset($actions);
if ($GLOBALS['LSsession'] -> canAccess($_REQUEST['LSobject'],$thisObject->getValue('dn'))) {
if ($c%2==0) {
$tr='bis';
}
else {
$tr='';
}
if ($GLOBALS['LSsession'] -> canAccess($LSobject,$thisObject->getValue('dn'))) {
$c++;
unset($actions);
if (is_array($_SESSION['LSselect'][$_REQUEST['LSobject']])) {
if(in_array($thisObject -> getValue('dn'),$_SESSION['LSselect'][$_REQUEST['LSobject']])) {
$select = true;
$subDn_name=false;
reset($subDnLdapServer);
while (!$subDn_name && next($subDnLdapServer)) {
if (isCompatibleDNs(key($subDnLdapServer),$thisObject -> getValue('dn'))) {
$subDn_name=current($subDnLdapServer);
}
else {
$select = false;
}
}
else {
$select = false;
}
$objectList[]=array(
'dn' => $thisObject->getValue('dn'),
'displayValue' => $thisObject->getDisplayValue(),
'actions' => $actions,
'tr' => $tr,
'select' => $select
'subDn' => $subDn_name
);
}
else {
debug($thisObject->getValue('dn'));
}
}
$GLOBALS['LSsession'] -> addJSscript('LSview.js');
//$GLOBALS['LSsession'] -> addJSscript('LSselect.js');
$GLOBALS['Smarty']->assign('LSview_search',array(
'action' => $_SERVER['PHP_SELF'],
'submit' => _('Rechercher'),
'LSobject' => $_REQUEST['LSobject']
));
$GLOBALS['Smarty']->assign('pagetitle',$object -> getLabel());
$GLOBALS['Smarty']->assign('LSobject_list_objectname',$object -> getLabel());
$GLOBALS['Smarty']->assign('LSobject_list_nbresult',$nbObjects);
$GLOBALS['Smarty']->assign('LSobject_list',$objectList);
$GLOBALS['Smarty']->assign('LSobject_list_objecttype',$_REQUEST['LSobject']);
if (isset($_REQUEST['ajax'])) {
$GLOBALS['LSsession'] -> setTemplate('select_table.tpl');
$searchData['objectList']=$objectList;
$searchData['LSview_actions'] = $LSview_actions;
if ($GLOBALS['LSsession'] -> cacheSearch()) {
$_SESSION['LSsession']['LSsearch'][$hash]=$searchData;
}
}
$GLOBALS['Smarty']->assign('LSobject_list_nbresult',$searchData['LSobject_list_nbresult']);
// Pagination
if ($searchData['LSobject_list_nbresult'] > NB_LSOBJECT_LIST) {
if (isset($_REQUEST['page'])) {
$searchData['objectList'] = array_slice($searchData['objectList'], ($_REQUEST['page']) * NB_LSOBJECT_LIST, NB_LSOBJECT_LIST);
$GLOBALS['Smarty']->assign('LSobject_list_currentpage',$_REQUEST['page']);
}
else {
$GLOBALS['LSsession'] -> setTemplate('select.tpl');
$searchData['objectList'] = array_slice($searchData['objectList'], 0, NB_LSOBJECT_LIST);
$GLOBALS['Smarty']->assign('LSobject_list_currentpage',0);
}
$searchData['LSobject_list_nbpage']=ceil($searchData['LSobject_list_nbresult'] / NB_LSOBJECT_LIST);
$GLOBALS['Smarty']->assign('LSobject_list_nbpage',$searchData['LSobject_list_nbpage']);
}
// Bis/Pas Bis + Select/Pas Select
for($i=0;$i<count($searchData['objectList']);$i++) {
if ($i%2==0) {
$tr='bis';
}
else {
$tr='';
}
$searchData['objectList'][$i]['tr']=$tr;
if (is_array($_SESSION['LSselect'][$LSobject])) {
if(in_array($searchData['objectList'][$i]['dn'],$_SESSION['LSselect'][$LSobject])) {
$select = true;
}
else {
$select = false;
}
}
else {
$select = false;
}
$searchData['objectList'][$i]['select']=$select;
}
$GLOBALS['LSsession'] -> addJSscript('LSview.js');
$GLOBALS['Smarty']->assign('LSview_search',array(
'action' => $_SERVER['PHP_SELF'],
'submit' => _('Rechercher'),
'LSobject' => $LSobject
));
$GLOBALS['Smarty']->assign('LSview_search_recur_label',_('Recherche récursive'));
$GLOBALS['Smarty']->assign('LSview_search_approx_label',_('Recherche approximative'));
$GLOBALS['Smarty']->assign('LSobject_list_without_result_label',_("Cette recherche n'a retourné aucun résultat."));
$GLOBALS['Smarty']->assign('LSobject_list',$searchData['objectList']);
$GLOBALS['Smarty']->assign('LSobject_list_objecttype',$LSobject);
$GLOBALS['Smarty'] -> assign('LSview_actions',$searchData['LSview_actions']);
if (isset($_REQUEST['ajax'])) {
$GLOBALS['LSsession'] -> setTemplate('select_table.tpl');
}
else {
$GLOBALS['LSsession'] -> setTemplate('select.tpl');
}
$GLOBALS['LSsession'] -> ajaxDisplay = true;
}
else {
$GLOBALS['LSerror'] -> addErrorCode(1004,$_REQUEST['LSobject']);
$GLOBALS['LSsession'] -> setTemplate('blank.tpl');
$GLOBALS['LSerror'] -> addErrorCode(1004,$LSobject);
}
}
else {
$GLOBALS['LSerror'] -> addErrorCode(1012);
$GLOBALS['LSsession'] -> setTemplate('blank.tpl');
}
}
else {

View file

@ -68,13 +68,13 @@ hr {
#LSsession_topDn {
height: 1.5em;
width: 150px;
}
#LSsession_topDn_form {
float: left;
font-size: 0.7em;
width: 150px;
margin: 5px;
color: #fff;
}
#user_name {
@ -108,11 +108,19 @@ td.LSobject-list {
padding: 0.1em;
}
td.LSobject-list-without-result {
text-align: center;
}
th.LSobject-list {
background-color: #52bce5;
color: #fff;
}
td.LSobject-list-subdn {
width: 15em;
}
tr.LSobject-list-bis {
background-color: #ecf8fd;
}
@ -233,9 +241,13 @@ div.LSselect_search {
float: right;
}
#LSview_search_param {
margin: 0px;
padding: 0px;
}
label.LSview_search {
font-size: 0.6em;
display: block;
}
input[type='text'].LSview_search {
@ -276,3 +288,13 @@ form.LSselect_search {
img.LSrelation-btn {
margin-left: 0.5em;
}
.btn {
cursor: pointer;
}
#LSview_subDnName {
float: left;
margin: 0.5em;
margin-bottom: 0em;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 770 B

View file

@ -25,7 +25,7 @@
<dd {$loginform_ldapserver_style}>
<select name='LSsession_ldapserver' id='LSsession_ldapserver'>{html_options values=$loginform_ldapservers_index output=$loginform_ldapservers_name selected=$ldapServerId}</select>
</dd>
<dt class='loginform-level' {$loginform_ldapserver_style}>{$loginform_label_level}</dt>
<dt class='loginform-level' id='LSsession_topDn_label' {$loginform_ldapserver_style}>{$loginform_label_level}</dt>
<dd class='loginform-level' {$loginform_ldapserver_style}><select name='LSsession_topDn' id='LSsession_topDn'>{html_options values=$loginform_topdn_index output=$loginform_topdn_name selected=$topDn}</select></dd>
<dt>{$loginform_label_user}</dt>
<dd><input type='text' name='LSsession_user' /></dd>

View file

@ -1,21 +1,28 @@
<div class='LSobject-select'>
<div class='LSobject-select' id='LSobject-select-main-div'>
<h1 id='title'>
{$pagetitle}
</h1>
<form action='{$LSview_search.action}' method='post' class='LSview_search LSselect_search'>
<input type='hidden' name='LSobject' value='{$LSview_search.LSobject}' />
<form action='{$LSview_search.action}' method='post' class='LSview_search LSselect_search btn' id='LSselect_search_form'>
{foreach from=$LSview_search_hidden_fields item=field_value key=field_name}
<input type='hidden' name='{$field_name}' value='{$field_value}' />
{/foreach}
{if $LSsession_topDn!=""}
{if $LSsession_subDn!=""}
<label id='LSselect_topDn_label'>{$label_level}
<select name='LSselect_topDn' id='LSselect_topDn'>
{html_options values=$LSsession_topDn_index output=$LSsession_topDn_name selected=$LSsession_topDn}
{html_options values=$LSsession_subDn_indexes output=$LSsession_subDn_names selected=$LSselect_subDn}
</select>
</label>
{/if}
<div class='LSselect_search'>
<input type='text' name='LSview_pattern' class='LSview_search' />
<input type='submit' value='{$LSview_search.submit}' class='LSview_search' />
<label class='LSview_search'>Recherche approximative : <input type='checkbox' name='LSview_approx' class='LSview_search' /></label>
<input type='text' name='LSview_pattern' class='LSview_search' value="{$LSview_search_pattern}"/>
<input type='submit' value='{$LSview_search.submit}' name='LSview_search_submit' class='LSview_search' />
<img src='templates/images/refresh.png' alt='{$_refresh}' title='{$_refresh}' id='LSselect_refresh_btn' />
<p id='LSview_search_param'>
<label class='LSview_search'>{$LSview_search_approx_label} : <input type='checkbox' name='LSview_approx' class='LSview_search' {if $LSview_search_approx!=''}checked{/if} /></label>
<label class='LSview_search'>{$LSview_search_recur_label} : <input type='checkbox' name='LSview_recur' class='LSview_search' {if $LSview_search_recur!=''}checked{/if}/></label>
</p>
</div>
</form>
<div id='content'>

View file

@ -2,12 +2,18 @@
<tr class='LSobject-list'>
<th class='LSobject-list LSobject-select-check'></th>
<th class='LSobject-list'>{$LSobject_list_objectname}</th>
{if $label_level}<th class='LSobject-list'>{$label_level}</th>{/if}
</tr>
{foreach from=$LSobject_list item=object}
<tr class='LSobject-list{if $object.tr=='bis'} LSobject-list-bis{/if}'>
<td class='LSobject-list LSobject-select-check'><input type='checkbox' name='LSobjects_selected[]' value='{$object.dn}' {if $object.select}checked{/if} class='LSobject-select' /></td>
<td class='LSobject-list LSobject-select-names'>{$object.displayValue}</td>
{if $label_level}<td class='LSobject-list LSobject-select-level'>{$object.subDn}</td>{/if}
</tr>
{foreachelse}
<tr class='LSobject-list'>
<td colspan='3' class='LSobject-list-without-result'>{$LSobject_list_without_result_label}</td>
</tr>
{/foreach}
</table>
{if $LSobject_list_nbpage}
@ -21,3 +27,7 @@
{/section}
</p>
{/if}
<script type='text/javascript'>
debug_txt = {$debug_txt};
error_txt = {$error_txt};
</script>

View file

@ -2,7 +2,7 @@
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if}</title>
<link rel="stylesheet" type="text/css" href="templates/css/base.css" title="Normal" />
<link rel="stylesheet" type="text/css" href="templates/css/base_print.css" media='print' title="Normal" />
@ -20,7 +20,18 @@
<div id='main'>
<div id='left'>
<img src='templates/images/logo.png' alt='Logo' id='logo'/>
<a href='index.php'><img src='templates/images/logo.png' alt='Logo' id='logo'/></a>
{if $LSsession_subDn!=""}
<form action="index.php" method='post' id='LSsession_topDn_form'>
<label>{$label_level}
<a href="index.php?LSsession_topDn_refresh"><img src='templates/images/refresh.png' alt='{$_refresh}' title='{$_refresh}' /></a>
<select name='LSsession_topDn' id='LSsession_topDn'>
{html_options values=$LSsession_subDn_indexes output=$LSsession_subDn_names selected=$LSsession_subDn}
</select>
</label>
</form>
{/if}
<ul class='menu'>
{foreach from=$LSaccess item=item key=LSobject_type}
<li class='menu'><a href='view.php?LSobject={$LSobject_type}' class='menu'>{$item.label}</a></li>
@ -30,15 +41,7 @@
<div id='right'>
{if $LSsession_topDn!=""}
<form action="index.php" method='post' id='LSsession_topDn_form'>
<label>{$label_level}
<select name='LSsession_topDn' id='LSsession_topDn'>
{html_options values=$LSsession_topDn_index output=$LSsession_topDn_name selected=$LSsession_topDn}
</select>
</label>
</form>
{/if}
<p id='status'>
Connecté en tant que <span id='user_name'>{$LSsession_username}</span></b> <a href='index.php?LSsession_logout'><img src='templates/images/logout.png' alt='Logout' title='Logout' /></a>
</p>

View file

@ -1,9 +1,14 @@
{include file='top.tpl'}
<form action='{$LSview_search.action}' method='post' class='LSview_search'>
<input type='hidden' name='LSobject' value='{$LSview_search.LSobject}' />
<input type='text' name='LSview_pattern' class='LSview_search' />
<input type='submit' value='{$LSview_search.submit}' class='LSview_search' />
<label class='LSview_search'>Recherche approximative : <input type='checkbox' name='LSview_approx' class='LSview_search' /></label>
{foreach from=$LSview_search_hidden_fields item=value key=name}
<input type='hidden' name='{$name}' value='{$value}' />
{/foreach}
<input type='text' name='LSview_pattern' class='LSview_search' value="{$LSview_search_pattern}"/>
<input type='submit' value='{$LSview_search.submit}' name='LSview_search_submit' class='LSview_search' />
<p id='LSview_search_param'>
<label class='LSview_search'>{$LSview_search_approx_label} : <input type='checkbox' name='LSview_approx' class='LSview_search' {if $LSview_search_approx!=''}checked{/if} /></label>
<label class='LSview_search'>{$LSview_search_recur_label} : <input type='checkbox' name='LSview_recur' class='LSview_search' {if $LSview_search_recur!=''}checked{/if}/></label>
</p>
</form>
<h1>
{$pagetitle}
@ -16,14 +21,17 @@
{/foreach}
</p>
{/if}
<table class='LSobject-list'>
<tr class='LSobject-list'>
<th class='LSobject-list'>{$LSobject_list_objectname}</th>
<th class='LSobject-list'>{$_Actions}</th>
</tr>
{foreach from=$LSobject_list item=object}
<table class='LSobject-list'>
<tr class='LSobject-list'>
<th class='LSobject-list'>{$LSobject_list_objectname}</th>
{if $label_level}<th class='LSobject-list'>{$label_level}</th>{/if}
<th class='LSobject-list'>{$_Actions}</th>
</tr>
{foreach from=$LSobject_list item=object}
<tr class='LSobject-list{if $object.tr=='bis'} LSobject-list-bis{/if}'>
<td class='LSobject-list LSobject-list-names'><a href='view.php?LSobject={$LSobject_list_objecttype}&amp;dn={$object.dn}' class='LSobject-list'>{$object.displayValue}</a> </td>
{if $label_level}<td class='LSobject-list LSobject-list-subdn'>{$object.subDn}</td>{/if}
<td class='LSobject-list LSobject-list-actions'>
{if $object.actions!=''}
{foreach from=$object.actions item=item}
@ -32,7 +40,11 @@
{/if}
</td>
</tr>
{/foreach}
{foreachelse}
<tr class='LSobject-list'>
<td colspan='3' class='LSobject-list-without-result'>{$LSobject_list_without_result_label}</td>
</tr>
{/foreach}
</table>
{if $LSobject_list_nbpage}
<p class='LSobject-list-page'>

View file

@ -28,41 +28,44 @@ $GLOBALS['LSsession'] = new LSsession();
if($LSsession -> startLSsession()) {
if (isset($_REQUEST['LSobject'])) {
$LSobject = $_REQUEST['LSobject'];
$dn = $_REQUEST['dn'];
if ( $LSobject == 'SELF' ) {
$_REQUEST['LSobject'] = $GLOBALS['LSsession']-> LSuserObject -> getType();
$_REQUEST['dn'] = $GLOBALS['LSsession']-> LSuserObject -> getValue('dn');
$LSobject = $GLOBALS['LSsession']-> LSuserObject -> getType();
$dn = $GLOBALS['LSsession']-> LSuserObject -> getValue('dn');
}
if ( $GLOBALS['LSsession'] -> loadLSobject($_REQUEST['LSobject']) ) {
if ( isset($_REQUEST['dn']) ) {
if ($GLOBALS['LSsession'] -> canAccess($_REQUEST['LSobject'],$_REQUEST['dn'])) {
if ( $GLOBALS['LSsession'] -> canEdit($_REQUEST['LSobject'],$_REQUEST['dn']) ) {
if ( $GLOBALS['LSsession'] -> loadLSobject($LSobject) ) {
// Affichage d'un objet
if ( $dn!='' ) {
if ($GLOBALS['LSsession'] -> canAccess($LSobject,$dn)) {
if ( $GLOBALS['LSsession'] -> canEdit($LSobject,$dn) ) {
$LSview_actions[] = array(
'label' => _('Modifier'),
'url' =>'modify.php?LSobject='.$_REQUEST['LSobject'].'&amp;dn='.$_REQUEST['dn'],
'url' =>'modify.php?LSobject='.$LSobject.'&amp;dn='.$dn,
'action' => 'modify'
);
}
if ($GLOBALS['LSsession'] -> canCreate($_REQUEST['LSobject'])) {
if ($GLOBALS['LSsession'] -> canCreate($LSobject)) {
$LSview_actions[] = array(
'label' => _('Copier'),
'url' =>'create.php?LSobject='.$_REQUEST['LSobject'].'&amp;load='.$_REQUEST['dn'],
'url' =>'create.php?LSobject='.$LSobject.'&amp;load='.$dn,
'action' => 'copy'
);
}
if ($GLOBALS['LSsession'] -> canRemove($_REQUEST['LSobject'],$_REQUEST['dn'])) {
if ($GLOBALS['LSsession'] -> canRemove($LSobject,$dn)) {
$LSview_actions[] = array(
'label' => _('Supprimer'),
'url' => 'remove.php?LSobject='.$_REQUEST['LSobject'].'&amp;dn='.$_REQUEST['dn'],
'url' => 'remove.php?LSobject='.$LSobject.'&amp;dn='.$dn,
'action' => 'delete'
);
}
if ($GLOBALS['LSsession']-> LSuserObject -> getValue('dn') != $_REQUEST['dn']) {
$object = new $_REQUEST['LSobject']();
$object -> loadData($_REQUEST['dn']);
if ($GLOBALS['LSsession']-> LSuserObject -> getValue('dn') != $dn) {
$object = new $LSobject();
$object -> loadData($dn);
$GLOBALS['Smarty'] -> assign('pagetitle',$object -> getDisplayValue());
}
else {
@ -134,135 +137,248 @@ if($LSsession -> startLSsession()) {
$GLOBALS['LSerror'] -> addErrorCode(1011);
}
}
// Affichage d'une liste d'un type d'objet
else {
$objectList=array();
$object = new $_REQUEST['LSobject']();
$object = new $LSobject();
$GLOBALS['Smarty']->assign('pagetitle',$object -> getLabel());
$GLOBALS['Smarty']->assign('LSobject_list_objectname',$object -> getLabel());
if ($GLOBALS['LSsession'] -> canCreate($_REQUEST['LSobject'])) {
$LSview_actions[] = array (
'label' => _('Nouveau'),
'url' => 'create.php?LSobject='.$_REQUEST['LSobject'],
'action' => 'create'
);
$canCopy=true;
}
if ( $_REQUEST['LSview_pattern']!='' ) {
$filter='(|';
if ( isset($_REQUEST['LSview_approx']) ) {
foreach ($object -> attrs as $attr_name => $attr_val) {
$filter.='('.$attr_name.'~='.$_REQUEST['LSview_pattern'].')';
}
if (isset($_SESSION['LSsession']['LSsearch'][$LSobject])) {
$filter = $_SESSION['LSsession']['LSsearch'][$LSobject]['filter'];
$params = $_SESSION['LSsession']['LSsearch'][$LSobject]['params'];
$pattern = $_SESSION['LSsession']['LSsearch'][$LSobject]['pattern'];
$recur = $_SESSION['LSsession']['LSsearch'][$LSobject]['recur'];
if ($recur) {
$topDn = $GLOBALS['LSsession'] -> topDn;
}
else {
foreach ($object -> attrs as $attr_name => $attr_val) {
$filter.='('.$attr_name.'=*'.$_REQUEST['LSview_pattern'].'*)';
}
$topDn = $object -> config['container_dn'].','.$GLOBALS['LSsession'] -> topDn;
}
$filter.=')';
$GLOBALS['Smarty']->assign('LSobject_list_filter','filter='.urlencode($filter));
}
else if ($_REQUEST['filter']) {
$filter=urldecode($_REQUEST['filter']);
$GLOBALS['Smarty']->assign('LSobject_list_filter','filter='.$_REQUEST['filter']);
$approx = $_SESSION['LSsession']['LSsearch'][$LSobject]['approx'];
}
else {
$filter=NULL;
$GLOBALS['Smarty']->assign('LSobject_list_filter','');
$filter = NULL;
$topDn = $object -> config['container_dn'].','.$GLOBALS['LSsession'] -> topDn;
$params = array('scope' => 'one');
$pattern = false;
$recur = false;
$approx = false;
}
$topDn = $object -> config['container_dn'].','.$GLOBALS['LSsession'] -> topDn;
$list=$object -> listObjects($filter,$topDn);
$nbObjects=count($list);
$GLOBALS['Smarty']->assign('LSobject_list_nbresult',$nbObjects);
if ($nbObjects > NB_LSOBJECT_LIST) {
if (isset($_REQUEST['page'])) {
$list = array_slice($list, ($_REQUEST['page']) * NB_LSOBJECT_LIST, NB_LSOBJECT_LIST);
$GLOBALS['Smarty']->assign('LSobject_list_currentpage',$_REQUEST['page']);
$GLOBALS['Smarty']->assign('LSobject_list_nbpage',ceil($nbObjects / NB_LSOBJECT_LIST));
if (isset($_REQUEST['LSview_search_submit'])) {
if (isset($_REQUEST['LSview_pattern']) && ($_REQUEST['LSview_pattern']!=$pattern)) {
$pattern = $_REQUEST['LSview_pattern'];
}
else {
$list = array_slice($list, 0, NB_LSOBJECT_LIST);
$GLOBALS['Smarty']->assign('LSobject_list_currentpage',0);
$GLOBALS['Smarty']->assign('LSobject_list_nbpage',ceil($nbObjects / NB_LSOBJECT_LIST));
}
}
$c=0;
foreach($list as $thisObject) {
$c++;
unset($actions);
if ($GLOBALS['LSsession'] -> canAccess($_REQUEST['LSobject'],$thisObject->getValue('dn'))) {
$actions[] = array(
'label' => _('Voir'),
'url' =>'view.php?LSobject='.$_REQUEST['LSobject'].'&amp;dn='.$thisObject -> getValue('dn'),
'action' => 'view'
);
if ($GLOBALS['LSsession'] -> canEdit($_REQUEST['LSobject'],$thisObject->getValue('dn'))) {
$actions[]=array(
'label' => _('Modifier'),
'url' => 'modify.php?LSobject='.$_REQUEST['LSobject'].'&amp;dn='.$thisObject->getValue('dn'),
'action' => 'modify'
);
}
if ($canCopy) {
$actions[] = array(
'label' => _('Copier'),
'url' =>'create.php?LSobject='.$_REQUEST['LSobject'].'&amp;load='.$thisObject -> getValue('dn'),
'action' => 'copy'
);
}
if ($GLOBALS['LSsession'] -> canRemove($thisObject -> getType(),$thisObject -> getValue('dn'))) {
$actions[] = array (
'label' => _('Supprimer'),
'url' => 'remove.php?LSobject='.$_REQUEST['LSobject'].'&amp;dn='.$thisObject -> getValue('dn'),
'action' => 'delete'
);
}
if ($c%2==0) {
$tr='bis';
$approx = (isset($_REQUEST['LSview_approx']));
if ($pattern && $pattern!='') {
$filter='(|';
if ($approx) {
foreach ($object -> attrs as $attr_name => $attr_val) {
$filter.='('.$attr_name.'~='.$pattern.')';
}
}
else {
$tr='';
foreach ($object -> attrs as $attr_name => $attr_val) {
$filter.='('.$attr_name.'=*'.$pattern.'*)';
}
}
$objectList[]=array(
'dn' => $thisObject->getValue('dn'),
'displayValue' => $thisObject->getDisplayValue(),
'actions' => $actions,
'tr' => $tr
);
$filter.=')';
}
else {
debug($thisObject->getValue('dn'));
$filter = NULL;
}
if (isset($_REQUEST['LSview_recur'])) {
$recur = true;
$params['scope'] = 'sub';
$topDn = $GLOBALS['LSsession'] -> topDn;
}
else {
$recur = false;
$params['scope'] = 'one';
$topDn = $object -> config['container_dn'].','.$GLOBALS['LSsession'] -> topDn;
}
}
$GLOBALS['LSsession'] -> addJSscript('LSview.js');
// Sauvegarde en Session
$_SESSION['LSsession']['LSsearch'][$LSobject] = array(
'filter' => $filter,
'topDn' => $topDn,
'params' => $params,
'pattern' => $pattern,
'recur' => $recur,
'approx' => $approx
);
$GLOBALS['Smarty']->assign('LSview_search_pattern',$pattern);
if ($recur) {
$GLOBALS['Smarty']->assign('LSview_search_recur',true);
}
if ($approx) {
$GLOBALS['Smarty']->assign('LSview_search_approx',true);
}
// Hidden fields
$GLOBALS['Smarty']->assign('LSview_search_hidden_fields',array(
'LSobject' => $LSobject,
'LSview_search_submit' => 1
));
// Hash de la recherche déterminer à partir des paramètres de la recherche
$hash = mhash (MHASH_MD5,
print_r(
array(
'LSobject' => $LSobject,
'filter' => $filter,
'topDn' => $topDn,
'params' => $params
),
true
)
);
if (($GLOBALS['LSsession'] -> cacheSearch()) && isset($_SESSION['LSsession']['LSsearch'][$hash]) && (!isset($_REQUEST['refresh']))) {
// On affiche à partir du cache
$searchData=$_SESSION['LSsession']['LSsearch'][$hash];
debug('Recherche : From cache');
}
else {
debug('Recherche : Load');
if ($GLOBALS['LSsession'] -> canCreate($LSobject)) {
$LSview_actions[] = array (
'label' => _('Nouveau'),
'url' => 'create.php?LSobject='.$LSobject,
'action' => 'create'
);
$canCopy=true;
}
$LSview_actions[] = array (
'label' => _('Rafraîchir'),
'url' => 'view.php?LSobject='.$LSobject.'&amp;refresh',
'action' => 'refresh'
);
$list=$object -> listObjects($filter,$topDn,$params);
$nbObjects=count($list);
$searchData['LSobject_list_nbresult']=$nbObjects;
$c=0;
$subDnLdapServer = $GLOBALS['LSsession'] -> getSortSubDnLdapServer();
foreach($list as $thisObject) {
if ($GLOBALS['LSsession'] -> canAccess($LSobject,$thisObject->getValue('dn'))) {
$subDn_name=false;
if ($subDnLdapServer) {
reset($subDnLdapServer);
while (!$subDn_name && next($subDnLdapServer)) {
if (isCompatibleDNs(key($subDnLdapServer),$thisObject -> getValue('dn'))) {
$subDn_name=current($subDnLdapServer);
}
}
}
$c++;
unset($actions);
$actions[] = array(
'label' => _('Voir'),
'url' =>'view.php?LSobject='.$LSobject.'&amp;dn='.$thisObject -> getValue('dn'),
'action' => 'view'
);
if ($GLOBALS['LSsession'] -> canEdit($LSobject,$thisObject->getValue('dn'))) {
$actions[]=array(
'label' => _('Modifier'),
'url' => 'modify.php?LSobject='.$LSobject.'&amp;dn='.$thisObject->getValue('dn'),
'action' => 'modify'
);
}
if ($canCopy) {
$actions[] = array(
'label' => _('Copier'),
'url' =>'create.php?LSobject='.$LSobject.'&amp;load='.$thisObject -> getValue('dn'),
'action' => 'copy'
);
}
if ($GLOBALS['LSsession'] -> canRemove($thisObject -> getType(),$thisObject -> getValue('dn'))) {
$actions[] = array (
'label' => _('Supprimer'),
'url' => 'remove.php?LSobject='.$LSobject.'&amp;dn='.$thisObject -> getValue('dn'),
'action' => 'delete'
);
}
if (count($objectList)%2==0) {
$tr='bis';
}
else {
$tr='';
}
$objectList[]=array(
'dn' => $thisObject->getValue('dn'),
'displayValue' => $thisObject->getDisplayValue(),
'actions' => $actions,
'tr' => $tr,
'subDn' => $subDn_name
);
}
else {
debug($thisObject->getValue('dn'));
}
}
$searchData['objectList']=$objectList;
$searchData['LSview_actions'] = $LSview_actions;
if ($GLOBALS['LSsession'] -> cacheSearch()) {
$_SESSION['LSsession']['LSsearch'][$hash]=$searchData;
}
}
$GLOBALS['Smarty']->assign('LSobject_list_nbresult',$searchData['LSobject_list_nbresult']);
// Pagination
if ($searchData['LSobject_list_nbresult'] > NB_LSOBJECT_LIST) {
if (isset($_REQUEST['page'])) {
$searchData['objectList'] = array_slice($searchData['objectList'], ($_REQUEST['page']) * NB_LSOBJECT_LIST, NB_LSOBJECT_LIST);
$GLOBALS['Smarty']->assign('LSobject_list_currentpage',$_REQUEST['page']);
}
else {
$searchData['objectList'] = array_slice($searchData['objectList'], 0, NB_LSOBJECT_LIST);
$GLOBALS['Smarty']->assign('LSobject_list_currentpage',0);
}
$searchData['LSobject_list_nbpage']=ceil($searchData['LSobject_list_nbresult'] / NB_LSOBJECT_LIST);
$GLOBALS['Smarty']->assign('LSobject_list_nbpage',$searchData['LSobject_list_nbpage']);
}
$GLOBALS['LSsession'] -> addJSscript('LSview.js');
$GLOBALS['Smarty']->assign('LSview_search',array(
'action' => $_SERVER['PHP_SELF'],
'submit' => _('Rechercher'),
'LSobject' => $_REQUEST['LSobject']
'LSobject' => $LSobject
));
$GLOBALS['Smarty']->assign('LSview_search_recur_label',_('Recherche récursive'));
$GLOBALS['Smarty']->assign('LSview_search_approx_label',_('Recherche approximative'));
$GLOBALS['Smarty']->assign('LSobject_list_without_result_label',_("Cette recherche n'a retourné aucun résultat."));
$GLOBALS['Smarty']->assign('_Actions',_('Actions'));
$GLOBALS['Smarty']->assign('_Modifier',_('Modifier'));
$GLOBALS['Smarty']->assign('LSobject_list',$objectList);
$GLOBALS['Smarty']->assign('LSobject_list_objecttype',$_REQUEST['LSobject']);
$GLOBALS['Smarty'] -> assign('LSview_actions',$LSview_actions);
$GLOBALS['Smarty']->assign('LSobject_list',$searchData['objectList']);
$GLOBALS['Smarty']->assign('LSobject_list_objecttype',$LSobject);
$GLOBALS['Smarty'] -> assign('LSview_actions',$searchData['LSview_actions']);
$GLOBALS['LSsession'] -> setTemplate('viewList.tpl');
}
}
else {
$GLOBALS['LSerror'] -> addErrorCode(1004,$_REQUEST['LSobject']);
$GLOBALS['LSerror'] -> addErrorCode(1004,$LSobject);
}
}
else {