From dd80110e6deaa7a82665a22814eb9fb8c073a5c4 Mon Sep 17 00:00:00 2001 From: Benjamin Renard Date: Wed, 18 Jun 2008 12:27:35 +0000 Subject: [PATCH] =?UTF-8?q?-=20Modification=20des=20templates=20:=20=20->?= =?UTF-8?q?=20Le=20choix=20du=20niveau=20est=20maintenant=20dans=20le=20me?= =?UTF-8?q?nu=20de=20gauche=20=20->=20Le=20logo=20est=20cliquable=20(retou?= =?UTF-8?q?r=20=C3=A0=20l'accueil)=20-=20Mise=20en=20cache=20des=20subDnLd?= =?UTF-8?q?apServer=20(sous-niveaux)=20-=20Modification=20majeur=20sur=20l?= =?UTF-8?q?e=20module=20de=20recherche=20:=20=20=20->=20Refonte=20du=20m?= =?UTF-8?q?=C3=A9canisme=20de=20la=20page=20=09->=20Ajout=20du=20cache=20d?= =?UTF-8?q?e=20recherche=20(gain=20notable=20de=20rapidit=C3=A9)=20=09->?= =?UTF-8?q?=20Ajout=20d'un=20message=20quand=20la=20recherche=20ne=20retou?= =?UTF-8?q?rne=20aucun=20r=C3=A9sultat=20=09->=20Possibilit=C3=A9=20de=20f?= =?UTF-8?q?aire=20une=20recherche=20r=C3=A9cursive=20-=20Personnalisation?= =?UTF-8?q?=20rendu=20possible=20du=20nom=20donn=C3=A9=20au=20concepte=20d?= =?UTF-8?q?e=20niveau=20-=20LSldapObject=20:=20Correction=20d'un=20bug=20d?= =?UTF-8?q?ans=20la=20m=C3=A9thode=20listObjects()=20:=20Warning=20=20=20l?= =?UTF-8?q?ors=20de=20certains=20retours=20vides.=20-=20LSsession=20:=20?= =?UTF-8?q?=20=20->=20Cr=C3=A9ation=20de=20m=C3=A9thode=20pour=20centralis?= =?UTF-8?q?er=20les=20tests=20d'activation=20des=20caches=20=20=20->=20Pro?= =?UTF-8?q?prit=C3=A9=20ajax=5Fdisplate=20:=20permet=20l'affichage=20des?= =?UTF-8?q?=20debugs=20=C3=A0=20travers=20les=20=09=20=20=20requ=C3=AAtes?= =?UTF-8?q?=20ajax=20du=20type=20'update'=20-=20LSsmoothbox=20:=20Modifica?= =?UTF-8?q?tion=20de=20l'affichage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- trunk/conf/config.inc.php | 5 +- trunk/includes/class/class.LSldapObject.php | 13 +- trunk/includes/class/class.LSsession.php | 117 ++++++- trunk/includes/functions.php | 7 + trunk/includes/js/LSdefault.js | 5 +- trunk/includes/js/LSselect.js | 73 +++-- trunk/includes/js/LSsession_login.js | 1 + trunk/includes/js/LSsmoothbox.js | 2 +- trunk/index_ajax.php | 5 +- trunk/select.php | 302 ++++++++++++----- trunk/templates/css/base.css | 30 +- trunk/templates/images/refresh.png | Bin 0 -> 770 bytes trunk/templates/login.tpl | 2 +- trunk/templates/select.tpl | 23 +- trunk/templates/select_table.tpl | 10 + trunk/templates/top.tpl | 25 +- trunk/templates/viewList.tpl | 34 +- trunk/view.php | 338 +++++++++++++------- 18 files changed, 714 insertions(+), 278 deletions(-) create mode 100644 trunk/templates/images/refresh.png diff --git a/trunk/conf/config.inc.php b/trunk/conf/config.inc.php index 9dc795e3..258386df 100644 --- a/trunk/conf/config.inc.php +++ b/trunk/conf/config.inc.php @@ -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( diff --git a/trunk/includes/class/class.LSldapObject.php b/trunk/includes/class/class.LSldapObject.php index 3c496220..62a09bce 100644 --- a/trunk/includes/class/class.LSldapObject.php +++ b/trunk/includes/class/class.LSldapObject.php @@ -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; } } diff --git a/trunk/includes/class/class.LSsession.php b/trunk/includes/class/class.LSsession.php index 726d112f..2c43324b 100644 --- a/trunk/includes/class/class.LSsession.php +++ b/trunk/includes/class/class.LSsession.php @@ -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 + * + * @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 + * + * @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 + * + * @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 + * + * @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 ''; + } + } ?> diff --git a/trunk/includes/functions.php b/trunk/includes/functions.php index d82efecd..f78707a5 100644 --- a/trunk/includes/functions.php +++ b/trunk/includes/functions.php @@ -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; + } ?> diff --git a/trunk/includes/js/LSdefault.js b/trunk/includes/js/LSdefault.js index a354c75a..74df8524 100644 --- a/trunk/includes/js/LSdefault.js +++ b/trunk/includes/js/LSdefault.js @@ -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(); }, diff --git a/trunk/includes/js/LSselect.js b/trunk/includes/js/LSselect.js index 33d8b929..978f80d0 100644 --- a/trunk/includes/js/LSselect.js +++ b/trunk/includes/js/LSselect.js @@ -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(); } - - }); diff --git a/trunk/includes/js/LSsession_login.js b/trunk/includes/js/LSsession_login.js index c663b436..6080f07a 100644 --- a/trunk/includes/js/LSsession_login.js +++ b/trunk/includes/js/LSsession_login.js @@ -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'); }); diff --git a/trunk/includes/js/LSsmoothbox.js b/trunk/includes/js/LSsmoothbox.js index 2cfdac8b..60d95f1e 100644 --- a/trunk/includes/js/LSsmoothbox.js +++ b/trunk/includes/js/LSsmoothbox.js @@ -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)); diff --git a/trunk/index_ajax.php b/trunk/index_ajax.php index 65b64e11..313b8e8b 100644 --- a/trunk/index_ajax.php +++ b/trunk/index_ajax.php @@ -24,7 +24,10 @@ if (!isset($_ERRORS)) { $list = $GLOBALS['LSsession'] -> getSubDnLdapServerOptions($_SESSION['LSsession_topDn']); if (is_string($list)) { $list=""; - $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()); diff --git a/trunk/select.php b/trunk/select.php index d885b333..97da2847 100644 --- a/trunk/select.php +++ b/trunk/select.php @@ -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.'&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 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 { diff --git a/trunk/templates/css/base.css b/trunk/templates/css/base.css index cbc08b7e..2e72e579 100644 --- a/trunk/templates/css/base.css +++ b/trunk/templates/css/base.css @@ -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; +} diff --git a/trunk/templates/images/refresh.png b/trunk/templates/images/refresh.png new file mode 100644 index 0000000000000000000000000000000000000000..ff803be124ac5f1bd747490d2243f876eebdf5f6 GIT binary patch literal 770 zcmV+d1O5DoP)L1E-$)@F1-w)3&R|k zpe8{Z8<~c8GL+Q$?>DkG77MrB>ib*oIq``rr5B#_9^P}_=lwfJ$Ye4I1OislR|zeK zVbqYWCeYUSM0$zz3qqi|xmm|wBKZCO<8;X*Nm5-|Ss83L8wv^vz=$_CHjqpv5e|nD zi^V>Y?WWu9Ue99i`F!tXS!UrfyNRl*nP4!OdF<_2YxlP1Fme+XT27Rfmg0ZnbUKmN zQchLT0^98(MdnP?)6=lq?HnZ~C0I!=;+^~kYsqD3nhs6X;Vdi{?VA1UEzfmtU&~-q z7JwZi{gIM{t3{_E4UR1%)L*WJg$bH{MmVw30fE`e?I2IEj?l`hAghYH3 zt$W+>w6P28pTBBza%f!nsWhE`b~-<+1YOrT3B$cZ4>?gZ8b$I)lH1swJjJS$^EqF~ zm_fejtPITPCdn3|s^RUIA%3SpXiSi^{?8N`Oh=PY(SA|m3=BsGkWx0eT~QP?b~cPr zKhDrN8M!R7Nbz_a^b+|5(&_XcW=k#xvLap&a?YNRF|tvD>5s;|fF{5;0S zC%l5k;M1&07*qoM6N<$f -
{$loginform_label_level}
+
{$loginform_label_level}
{$loginform_label_user}
diff --git a/trunk/templates/select.tpl b/trunk/templates/select.tpl index 66879e3a..687d658a 100644 --- a/trunk/templates/select.tpl +++ b/trunk/templates/select.tpl @@ -1,21 +1,28 @@ -
+

{$pagetitle}

-
diff --git a/trunk/templates/select_table.tpl b/trunk/templates/select_table.tpl index 29b21d9f..b845c7fb 100644 --- a/trunk/templates/select_table.tpl +++ b/trunk/templates/select_table.tpl @@ -2,12 +2,18 @@ {$LSobject_list_objectname} + {if $label_level}{$label_level}{/if} {foreach from=$LSobject_list item=object} {$object.displayValue} + {if $label_level}{$object.subDn}{/if} +{foreachelse} + + {$LSobject_list_without_result_label} + {/foreach} {if $LSobject_list_nbpage} @@ -21,3 +27,7 @@ {/section}

{/if} + diff --git a/trunk/templates/top.tpl b/trunk/templates/top.tpl index 64a8747f..ac7624b5 100644 --- a/trunk/templates/top.tpl +++ b/trunk/templates/top.tpl @@ -2,7 +2,7 @@ "http://www.w3.org/TR/html4/loose.dtd"> - + LdapSaisie{if $pagetitle != ''} - {$pagetitle}{/if} @@ -20,7 +20,18 @@
- + + + {if $LSsession_subDn!=""} +
+ +
+ {/if}