2004-05-31 20:10:36 +00:00
< ? php
/*
$Id $
2009-10-27 18:47:12 +00:00
This code is part of LDAP Account Manager ( http :// www . ldap - account - manager . org / )
2012-02-09 17:08:39 +00:00
Copyright ( C ) 2003 - 2012 Roland Gruber
2004-05-31 20:10:36 +00:00
This program is free software ; you can redistribute it and / or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation ; either version 2 of the License , or
( at your option ) any later version .
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
*/
/**
* This file includes functions to manage the list views .
*
* @ package lists
* @ author Roland Gruber
*/
2006-01-01 16:30:05 +00:00
/** Used to get type information. */
include_once ( " types.inc " );
/** Used to get PDF information. */
include_once ( " pdfstruct.inc " );
2006-01-03 22:02:03 +00:00
/** Used to create PDF files. */
include_once ( " pdf.inc " );
2006-01-01 16:30:05 +00:00
2005-01-23 17:54:13 +00:00
/**
2006-01-01 16:30:05 +00:00
* Generates the list view .
*
* @ package lists
* @ author Roland Gruber
2006-09-23 11:19:36 +00:00
*
2006-01-01 16:30:05 +00:00
*/
class lamList {
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/** Account type */
2007-11-11 14:01:16 +00:00
protected $type ;
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/** current page number */
2007-11-11 14:01:16 +00:00
protected $page = 1 ;
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/** list of LDAP attributes */
2007-11-11 14:01:16 +00:00
protected $attrArray = array ();
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/** list of attribute descriptions */
2007-11-11 14:01:16 +00:00
protected $descArray = array ();
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/** maximum count of entries per page */
2007-12-09 10:45:04 +00:00
protected $maxPageEntries = 30 ;
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/** sort column name */
2007-11-05 18:14:38 +00:00
protected $sortColumn ;
/** sort direction: 1 for ascending, -1 for descending */
protected $sortDirection = 1 ;
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/** LDAP suffix */
2007-11-11 14:01:16 +00:00
protected $suffix ;
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/** refresh page switch */
2007-11-11 14:01:16 +00:00
protected $refresh = true ;
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/** LDAP entries */
2007-11-11 14:01:16 +00:00
protected $entries ;
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/** filter string to include in URL */
2007-11-11 14:01:16 +00:00
protected $filterText ;
2010-02-13 19:05:33 +00:00
/** LDAP filter part which was entered by user via filter boxes */
protected $filterPart = '' ;
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/** list of possible LDAP suffixes(organizational units) */
2007-11-11 14:01:16 +00:00
protected $possibleSuffixes ;
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/** list of account specific labels */
2007-11-11 14:01:16 +00:00
protected $labels ;
/** configuration options */
private $configOptions ;
2012-09-09 14:02:27 +00:00
/** tabindex for GUI elements */
protected $tabindex = 1 ;
2006-09-23 11:19:36 +00:00
2007-12-09 10:45:04 +00:00
/** ID for list size config option */
const LIST_SIZE_OPTION_NAME = " L_SIZE " ;
2012-04-06 13:12:43 +00:00
/** prefix for virtual (non-LDAP) attributes */
const VIRTUAL_ATTRIBUTE_PREFIX = 'lam_virtual_' ;
2006-01-01 16:30:05 +00:00
/**
* Constructor
*
* @ param string $type account type
* @ return lamList list object
*/
2007-12-28 16:08:56 +00:00
public function __construct ( $type ) {
2006-01-01 16:30:05 +00:00
$this -> type = $type ;
$this -> labels = array (
2012-02-09 17:08:39 +00:00
'nav' => _ ( " Object count: %s " ),
2006-01-01 16:30:05 +00:00
'error_noneFound' => _ ( " No objects found! " ),
'newEntry' => _ ( " New object " ),
2012-02-05 19:03:25 +00:00
'deleteEntry' => _ ( " Delete selected objects " ));
2007-11-11 14:01:16 +00:00
$this -> configOptions = $this -> listGetAllConfigOptions ();
$this -> listReadOptionsFromCookie ();
}
/**
* Reads the list options from the cookie value .
*/
private function listReadOptionsFromCookie () {
if ( sizeof ( $this -> configOptions ) > 0 ) {
if ( isset ( $_COOKIE [ " ListOptions_ " . $this -> type ])) {
$cookieValue = $_COOKIE [ " ListOptions_ " . $this -> type ];
$valueParts = explode ( " ; " , $cookieValue );
$values = array ();
for ( $i = 0 ; $i < sizeof ( $valueParts ); $i ++ ) {
$key_value = explode ( '=' , $valueParts [ $i ]);
if ( sizeof ( $key_value ) == 2 ) {
$values [ $key_value [ 0 ]] = $key_value [ 1 ];
}
}
for ( $i = 0 ; $i < sizeof ( $this -> configOptions ); $i ++ ) {
if ( isset ( $values [ $this -> configOptions [ $i ] -> getID ()])) {
$this -> configOptions [ $i ] -> setValue ( $values [ $this -> configOptions [ $i ] -> getID ()]);
}
}
// notify subclasses
$this -> listConfigurationChanged ();
}
}
2006-01-01 16:30:05 +00:00
}
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/**
* Prints the HTML code to display the list view .
*/
2007-11-11 14:01:16 +00:00
public function showPage () {
2012-09-09 14:02:27 +00:00
$this -> tabindex = 1 ;
2006-01-01 16:30:05 +00:00
// do POST actions
2010-11-06 09:40:32 +00:00
$postFragment = $this -> listDoPost ();
2006-01-01 16:30:05 +00:00
// get some parameters
$this -> listGetParams ();
// print HTML head
$this -> listPrintHeader ();
2010-11-26 20:16:14 +00:00
// print messages when redirected from other pages
$this -> listPrintRedirectMessages ();
2006-01-01 16:30:05 +00:00
// refresh data if needed
2010-02-13 19:05:33 +00:00
if ( $this -> refresh ) {
$this -> listBuildFilter ();
$this -> listRefreshData ();
}
2006-01-01 16:30:05 +00:00
// sort rows by sort column
2010-02-13 19:05:33 +00:00
if ( isset ( $this -> entries )) {
2011-05-21 10:58:22 +00:00
$this -> listSort ( $this -> entries );
2006-01-01 16:30:05 +00:00
}
2010-11-06 09:40:32 +00:00
// insert HTML fragment from listDoPost
echo $postFragment ;
2011-04-09 10:04:56 +00:00
// config dialog
$this -> listPrintConfigurationPage ();
2006-01-01 16:30:05 +00:00
// show form
2010-08-21 08:30:11 +00:00
echo " <div class= \" ui-tabs-panel ui-widget-content ui-corner-bottom \" > " ;
2010-08-23 18:01:06 +00:00
echo " <div id= \" listTabContentArea \" > \n " ;
2010-08-21 09:43:52 +00:00
echo ( " <form action= \" list.php?type= " . $this -> type . " &norefresh=true \" method= \" post \" > \n " );
2006-01-01 16:30:05 +00:00
// draw account list if accounts were found
2010-02-13 19:05:33 +00:00
if ( sizeof ( $this -> entries ) > 0 ) {
2007-02-11 18:06:42 +00:00
// buttons
$this -> listPrintButtons ( false );
2010-01-01 17:21:46 +00:00
echo ( " <br> \n " );
2006-01-01 16:30:05 +00:00
// navigation bar
2010-02-13 19:05:33 +00:00
$this -> listDrawNavigationBar ( sizeof ( $this -> entries ));
2006-01-01 16:30:05 +00:00
echo ( " <br> \n " );
2010-08-23 18:01:06 +00:00
echo " <div id= \" listScrollArea \" style= \" overflow: auto; padding: 1px; \" > " ;
2006-01-01 16:30:05 +00:00
// account table head
$this -> listPrintTableHeader ();
// account table body
2010-02-13 19:05:33 +00:00
$this -> listPrintTableBody ( $this -> entries );
2010-08-23 18:01:06 +00:00
echo " </div> " ;
2006-01-01 16:30:05 +00:00
}
else {
2007-02-11 18:06:42 +00:00
// buttons
$this -> listPrintButtons ( true );
2010-10-10 17:34:07 +00:00
echo ( " <br> \n " );
2007-11-06 17:42:37 +00:00
// navigation bar
2010-02-13 19:05:33 +00:00
$this -> listDrawNavigationBar ( sizeof ( $this -> entries ));
2007-11-06 17:42:37 +00:00
echo ( " <br> \n " );
2006-01-01 16:30:05 +00:00
// account table head
$this -> listPrintTableHeader ();
echo " </table><br> \n " ;
2005-01-23 17:54:13 +00:00
}
2007-11-11 14:01:16 +00:00
$this -> listPrintFooter ();
2005-01-23 17:54:13 +00:00
}
2006-01-01 16:30:05 +00:00
/**
* Builds the regular expressions from the filter values .
*/
2007-11-11 14:01:16 +00:00
protected function listBuildFilter () {
2006-01-01 16:30:05 +00:00
$filter = array ();
2010-02-13 19:05:33 +00:00
$filterParam = " " ;
$LDAPFilterPart = " " ;
2006-01-01 16:30:05 +00:00
// build filter array
for ( $i = 0 ; $i < sizeof ( $this -> attrArray ); $i ++ ) {
2006-09-23 11:19:36 +00:00
$foundFilter = null ;
if ( isset ( $_GET [ " filter " . strtolower ( $this -> attrArray [ $i ])])) {
$foundFilter = $_GET [ " filter " . strtolower ( $this -> attrArray [ $i ])];
}
if ( isset ( $_POST [ " filter " . strtolower ( $this -> attrArray [ $i ])])) {
$foundFilter = $_POST [ " filter " . strtolower ( $this -> attrArray [ $i ])];
}
2010-04-07 19:23:11 +00:00
if ( isset ( $foundFilter ) && ( $foundFilter != '' )) {
2011-11-12 15:06:29 +00:00
if ( preg_match ( '/^([\p{L}\p{N} _\\*\\$\\.@-])+$/iu' , $foundFilter )) { // \p{L} matches any Unicode letter
2010-04-07 19:23:11 +00:00
$filterParam .= " &filter " . $this -> attrArray [ $i ] . '=' . $foundFilter ;
$LDAPFilterPart .= '(' . $this -> attrArray [ $i ] . '=' . $foundFilter . ')' ;
}
else {
2011-11-12 15:06:29 +00:00
StatusMessage ( 'ERROR' , _ ( 'Please enter a valid filter. Only letters, numbers and " _*$.@-" are allowed.' ), htmlspecialchars ( $foundFilter ));
2010-04-07 19:23:11 +00:00
}
2006-01-01 16:30:05 +00:00
}
}
2010-02-13 19:05:33 +00:00
$this -> filterText = $filterParam ;
$this -> filterPart = $LDAPFilterPart ;
2006-01-01 16:30:05 +00:00
}
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/**
* Sorts an account list by a given attribute
*
* @ param array $info the account list
*/
2007-11-11 14:01:16 +00:00
protected function listSort ( & $info ) {
2011-05-21 10:58:22 +00:00
if ( ! is_array ( $this -> attrArray )) return ;
if ( ! is_string ( $this -> sortColumn )) return ;
2006-01-01 16:30:05 +00:00
// sort and return account list
usort ( $info , array ( $this , " cmp_array " ));
}
2006-09-23 11:19:36 +00:00
2004-05-31 20:10:36 +00:00
/**
* Compare function used for usort - method
*
* Rows are sorted with the first attribute entry of the sort column .
* If objects have attributes with multiple values only the first is used for sorting .
*
* @ param array $a first row which is compared
* @ param array $b second row which is compared
* @ return integer 0 if both are equal , 1 if $a is greater , - 1 if $b is greater
*/
2007-11-11 14:01:16 +00:00
protected function cmp_array ( & $a , & $b ) {
2009-11-27 14:25:58 +00:00
if ( $this -> sortColumn != " dn " ) {
2004-05-31 20:10:36 +00:00
// sort by first attribute with name $sort
2009-11-27 14:25:58 +00:00
return @ strnatcasecmp ( $a [ $this -> sortColumn ][ 0 ], $b [ $this -> sortColumn ][ 0 ]) * $this -> sortDirection ;
2004-05-31 20:10:36 +00:00
}
else {
2009-11-27 14:25:58 +00:00
return strnatcasecmp ( $a [ $this -> sortColumn ], $b [ $this -> sortColumn ]) * $this -> sortDirection ;
2004-05-31 20:10:36 +00:00
}
}
2006-01-01 16:30:05 +00:00
/**
* Draws a navigation bar to switch between pages
*
* @ param integer $count number of account entries
*/
2007-11-11 14:01:16 +00:00
protected function listDrawNavigationBar ( $count ) {
2010-10-10 17:34:07 +00:00
echo ( " <table width= \" 100% \" border= \" 0 \" > \n " );
2006-01-01 16:30:05 +00:00
echo ( " <tr> \n " );
2010-10-10 17:34:07 +00:00
echo ( " <td align= \" left \" > " );
2006-01-01 16:30:05 +00:00
printf ( $this -> labels [ 'nav' ], $count );
echo ( " </td> " );
2006-09-23 11:19:36 +00:00
2010-12-19 13:25:01 +00:00
if ( $count > $this -> maxPageEntries ) {
echo ( " <td class= \" " . $this -> type . " nav-activepage \" align= \" right \" > " );
if ( $this -> page != 1 ) {
echo ( " <a title= \" " . _ ( 'Jump to first page' ) . " \" href= \" list.php?type= " . $this -> type . " &norefresh=true&page=1 " .
" &sort= " . $this -> sortColumn . " &sortdirection= " . $this -> sortDirection . $this -> filterText . " \" > " .
2011-04-03 10:29:23 +00:00
" <img height=16 width=16 class= \" align-middle \" alt= \" \" src= \" ../../graphics/go-first.png \" ></a> \n " );
2010-12-19 13:25:01 +00:00
}
if ( $this -> page > 10 ) {
echo ( " <a title= \" " . _ ( 'Jump 10 pages backward' ) . " \" href= \" list.php?type= " . $this -> type . " &norefresh=true&page= " . ( $this -> page - 10 ) .
" &sort= " . $this -> sortColumn . " &sortdirection= " . $this -> sortDirection . $this -> filterText . " \" > " .
2011-04-03 10:29:23 +00:00
" <img height=16 width=16 class= \" align-middle \" alt= \" \" src= \" ../../graphics/go-previous.png \" ></a> \n " );
2010-07-30 16:08:20 +00:00
}
2012-07-22 17:32:23 +00:00
for ( $i = $this -> page - 6 ; $i < ( $this -> page + 5 ); $i ++ ) {
2010-12-19 13:25:01 +00:00
if ( $i >= ( $count / $this -> maxPageEntries )) {
break ;
}
elseif ( $i < 0 ) {
continue ;
}
if ( $i == $this -> page - 1 ) {
2012-03-10 14:15:31 +00:00
echo ' ' . ( $i + 1 ) . ' ' ;
2010-12-19 13:25:01 +00:00
}
else {
2012-03-10 14:15:31 +00:00
echo " <a href= \" list.php?type= " . $this -> type . " &norefresh=true&page= " . ( $i + 1 ) .
" &sort= " . $this -> sortColumn . " &sortdirection= " . $this -> sortDirection . $this -> filterText . " \" > " . ( $i + 1 ) . " </a> \n " ;
2010-12-19 13:25:01 +00:00
}
2010-07-30 16:08:20 +00:00
}
2010-12-19 13:25:01 +00:00
if ( $this -> page < (( $count / $this -> maxPageEntries ) - 10 )) {
echo ( " <a title= \" " . _ ( 'Jump 10 pages forward' ) . " \" href= \" list.php?type= " . $this -> type . " &norefresh=true&page= " . ( $this -> page + 10 ) .
" &sort= " . $this -> sortColumn . " &sortdirection= " . $this -> sortDirection . $this -> filterText . " \" > " .
2011-04-03 10:29:23 +00:00
" <img height=16 width=16 class= \" align-middle \" alt= \" \" src= \" ../../graphics/go-next.png \" ></a> \n " );
2006-01-01 16:30:05 +00:00
}
2010-12-19 13:25:01 +00:00
if ( $this -> page < ( $count / $this -> maxPageEntries )) {
2012-03-10 14:15:31 +00:00
echo ( " <a title= \" " . _ ( 'Jump to last page' ) . " \" href= \" list.php?type= " . $this -> type . " &norefresh=true&page= " . ceil (( $count / $this -> maxPageEntries )) .
2010-12-19 13:25:01 +00:00
" &sort= " . $this -> sortColumn . " &sortdirection= " . $this -> sortDirection . $this -> filterText . " \" > " .
2011-04-03 10:29:23 +00:00
" <img height=16 width=16 class= \" align-middle \" alt= \" \" src= \" ../../graphics/go-last.png \" ></a> \n " );
2006-01-01 16:30:05 +00:00
}
2010-12-19 13:25:01 +00:00
echo " </td> " ;
2006-01-01 16:30:05 +00:00
}
2010-12-19 13:25:01 +00:00
echo " </tr></table> \n " ;
2004-06-11 11:01:56 +00:00
}
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/**
* Prints the attribute and filter row at the account table head
*/
2007-11-11 14:01:16 +00:00
protected function listPrintTableHeader () {
2006-01-01 16:30:05 +00:00
// print table header
2010-08-23 18:01:06 +00:00
echo " <table id= \" accountTable \" frame= \" box \" rules= \" none \" class= \" " . $this -> type . " list \" width= \" 100% \" ><thead> \n " ;
2010-07-07 15:22:07 +00:00
echo " <tr class= \" " . $this -> type . " list-dark \" > \n <th width=22 height=34></th> \n <th></th> \n " ;
2006-01-01 16:30:05 +00:00
// table header
for ( $k = 0 ; $k < sizeof ( $this -> descArray ); $k ++ ) {
if ( strtolower ( $this -> attrArray [ $k ]) == $this -> sortColumn ) {
2007-11-05 18:14:38 +00:00
$sortImage = " sort_asc.png " ;
if ( $this -> sortDirection < 0 ) {
$sortImage = " sort_desc.png " ;
}
2011-04-04 16:48:14 +00:00
echo " <th align= \" left \" ><a href= \" list.php?type= " . $this -> type . " & " .
2007-11-05 18:14:38 +00:00
" sort= " . strtolower ( $this -> attrArray [ $k ]) . $this -> filterText . " &norefresh=y " . " \" > " . $this -> descArray [ $k ] .
2011-04-03 10:29:23 +00:00
" <img height=16 width=16 style= \" vertical-align: middle; \" src= \" ../../graphics/ $sortImage\ " alt = \ " sort direction \" ></a></th> \n " ;
2006-01-01 16:30:05 +00:00
}
2011-04-04 16:48:14 +00:00
else echo " <th align= \" left \" ><a href= \" list.php?type= " . $this -> type . " & " .
2006-01-01 16:30:05 +00:00
" sort= " . strtolower ( $this -> attrArray [ $k ]) . $this -> filterText . " &norefresh=y " . " \" > " . $this -> descArray [ $k ] . " </a></th> \n " ;
2005-02-22 20:20:47 +00:00
}
2006-01-01 16:30:05 +00:00
echo " </tr> \n " ;
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
// print filter row
2010-07-07 15:22:07 +00:00
echo " <tr align= \" center \" class= \" " . $this -> type . " list-bright \" > \n " ;
2006-01-01 16:30:05 +00:00
echo " <td width=22 height=34> " ;
2009-02-07 20:37:06 +00:00
printHelpLink ( getHelp ( '' , '250' ), '250' );
2006-01-01 16:30:05 +00:00
echo " </td> \n " ;
2004-06-11 11:01:56 +00:00
echo " <td> " ;
2012-03-10 15:37:21 +00:00
echo " <button type= \" submit \" class= \" smallPadding \" id= \" apply_filter \" name= \" apply_filter \" > " . _ ( " Filter " ) . " </button> " ;
2004-06-11 11:01:56 +00:00
echo " </td> \n " ;
2006-01-01 16:30:05 +00:00
// print input boxes for filters
for ( $k = 0 ; $k < sizeof ( $this -> descArray ); $k ++ ) {
2011-04-04 16:48:14 +00:00
echo " <td align= \" left \" > " ;
2012-04-06 13:12:43 +00:00
if ( $this -> canBeFiltered ( $this -> attrArray [ $k ])) {
$value = " " ;
if ( isset ( $_GET [ " filter " . strtolower ( $this -> attrArray [ $k ])])) {
$value = " value= \" " . $_GET [ " filter " . strtolower ( $this -> attrArray [ $k ])] . " \" " ;
}
if ( isset ( $_POST [ " filter " . strtolower ( $this -> attrArray [ $k ])])) {
$value = " value= \" " . $_POST [ " filter " . strtolower ( $this -> attrArray [ $k ])] . " \" " ;
}
echo " <input style= \" margin-right: 10px; \" type= \" text \" size=15 name= \" filter " . strtolower ( $this -> attrArray [ $k ]) . " \" " . $value . " onkeypress= \" SubmitForm('apply_filter', event); \" > " ;
}
2006-01-01 16:30:05 +00:00
echo " </td> \n " ;
}
2010-08-23 18:01:06 +00:00
echo " </tr></thead> \n " ;
2004-06-11 11:01:56 +00:00
}
2012-04-06 13:12:43 +00:00
/**
* Returns if the given attribute can be filtered .
* If filtering is not possible then no filter box will be displayed .
* By default all attributes can be filtered .
*
* @ param String $attr attribute name
* @ return boolean filtering possible
*/
protected function canBeFiltered ( $attr ) {
return true ;
}
2004-06-11 11:01:56 +00:00
2006-01-01 16:30:05 +00:00
/**
* Prints the entry list
2006-09-23 11:19:36 +00:00
*
2006-01-01 16:30:05 +00:00
* @ param array $info entries
*/
2007-11-11 14:01:16 +00:00
protected function listPrintTableBody ( & $info ) {
2010-08-23 18:01:06 +00:00
echo " <tbody> \n " ;
2006-01-01 16:30:05 +00:00
// calculate which rows to show
$table_begin = ( $this -> page - 1 ) * $this -> maxPageEntries ;
if (( $this -> page * $this -> maxPageEntries ) > sizeof ( $info )) $table_end = sizeof ( $info );
else $table_end = ( $this -> page * $this -> maxPageEntries );
// print account list
for ( $i = $table_begin ; $i < $table_end ; $i ++ ) {
2009-12-06 18:34:24 +00:00
$rowID = base64_encode ( $info [ $i ][ 'dn' ]);
2010-07-07 15:22:07 +00:00
if ((( $i - $table_begin ) % 2 ) == 1 ) {
$classes = ' ' . $this -> type . 'list-bright' ;
}
else {
$classes = ' ' . $this -> type . 'list-dark' ;
}
2012-09-09 14:02:27 +00:00
echo ( " <tr class= \" $classes\ " " .
2011-04-09 10:04:56 +00:00
" onClick= \" list_click(' " . $rowID . " ') \" \n " .
2010-01-17 20:35:56 +00:00
" onDblClick= \" top.location.href='../account/edit.php?type= " . $this -> type . " &DN= " . rawurlencode ( $info [ $i ][ 'dn' ]) . " ' \" > \n " );
2011-05-07 12:03:55 +00:00
echo " <td align= \" center \" ><input class= \" accountBoxUnchecked \" onClick= \" list_click(' " . $rowID . " ') \" " .
2010-02-17 17:57:04 +00:00
" type= \" checkbox \" name= \" " . $rowID . " \" ></td> \n " ;
2010-08-31 17:35:36 +00:00
$this -> listPrintToolLinks ( $info [ $i ], $rowID );
2006-01-01 16:30:05 +00:00
for ( $k = 0 ; $k < sizeof ( $this -> attrArray ); $k ++ ) {
echo ( " <td> " );
$attrName = strtolower ( $this -> attrArray [ $k ]);
2007-02-17 16:26:08 +00:00
$this -> listPrintTableCellContent ( $info [ $i ], $attrName );
2006-01-01 16:30:05 +00:00
echo ( " </td> \n " );
2005-01-27 21:07:48 +00:00
}
2006-01-01 16:30:05 +00:00
echo ( " </tr> \n " );
}
// display select all link
$colspan = sizeof ( $this -> attrArray ) + 1 ;
2010-07-07 15:22:07 +00:00
echo " <tr class= \" " . $this -> type . " list-bright \" > \n " ;
2011-04-03 10:29:23 +00:00
echo " <td align= \" center \" ><a href= \" # \" onClick= \" list_switchAccountSelection(); \" ><img height=16 width=16 src= \" ../../graphics/select.png \" alt= \" select all \" ></a></td> \n " ;
2010-02-17 17:57:04 +00:00
echo " <td colspan= $colspan > <a href= \" # \" onClick= \" list_switchAccountSelection(); \" > " .
2010-07-30 16:08:20 +00:00
" <font color= \" black \" > " . _ ( " Select all " ) . " </font></a></td> \n " ;
2006-01-01 16:30:05 +00:00
echo " </tr> \n " ;
2010-08-23 18:01:06 +00:00
echo " </tbody> \n " ;
echo " </table> \n " ;
2006-01-01 16:30:05 +00:00
}
2007-02-17 16:26:08 +00:00
2007-04-21 11:04:50 +00:00
/**
* Prints the tool image links ( e . g . edit and delete ) for each account .
*
2007-11-25 12:52:18 +00:00
* @ param array $account LDAP attributes
* @ param String $id account ID
2007-04-21 11:04:50 +00:00
*/
2007-11-25 12:52:18 +00:00
private function listPrintToolLinks ( $account , $id ) {
2010-08-31 17:35:36 +00:00
$output = '' ;
$toolCount = 0 ;
2007-04-21 11:04:50 +00:00
// edit image
2010-08-31 17:35:36 +00:00
$output .= " <a href= \" ../account/edit.php?type= " . $this -> type . " &DN=' " . rawurlencode ( $account [ 'dn' ]) . " ' \" > " ;
2011-11-01 12:50:35 +00:00
$output .= " <img height=16 width=16 src= \" ../../graphics/edit.png \" alt= \" " . _ ( " Edit " ) . " \" title= \" " . _ ( " Edit " ) . " \" class= \" align-middle \" > " ;
2010-08-31 17:35:36 +00:00
$output .= " </a> \n " ;
$toolCount ++ ;
2007-04-21 11:04:50 +00:00
// delete image
2007-12-30 16:08:54 +00:00
if ( checkIfWriteAccessIsAllowed ()) {
2010-08-31 17:35:36 +00:00
$output .= " <a href= \" deletelink.php?type= " . $this -> type . " &DN=' " . rawurlencode ( $account [ 'dn' ]) . " ' \" > " ;
2011-11-01 12:50:35 +00:00
$output .= " <img height=16 width=16 src= \" ../../graphics/delete.png \" alt= \" " . _ ( " Delete " ) . " \" title= \" " . _ ( " Delete " ) . " \" class= \" align-middle \" > " ;
2010-08-31 17:35:36 +00:00
$output .= " </a> \n " ;
$toolCount ++ ;
2007-12-30 16:08:54 +00:00
}
2007-11-25 12:52:18 +00:00
// pdf image
2010-05-02 15:34:44 +00:00
$pdfButtonStyle = " background-image: url(../../graphics/pdf.png);background-position: -1px -1px;background-repeat: no-repeat;width:20px;height:20px;background-color:transparent;border-style:none; " ;
2011-11-01 12:50:35 +00:00
$output .= " <input type= \" submit \" style= \" $pdfButtonStyle\ " name = \ " createPDF_ " . $id . " \" value= \" \" title= \" " . _ ( 'Create PDF file' ) . " \" class= \" align-middle \" > \n " ;
2010-08-31 17:35:36 +00:00
$toolCount ++ ;
2007-11-05 18:14:38 +00:00
// additional tools
$tools = $this -> getAdditionalTools ();
for ( $i = 0 ; $i < sizeof ( $tools ); $i ++ ) {
2010-08-31 17:35:36 +00:00
$output .= " <a href= \" " . $tools [ $i ] -> getLinkTarget () . " ?type= " . $this -> type . " &DN=' " . rawurlencode ( $account [ 'dn' ]) . " ' \" > " ;
2011-11-01 12:50:35 +00:00
$output .= " <img height=16 width=16 src= \" ../../graphics/ " . $tools [ $i ] -> getImage () . " \" alt= \" " . $tools [ $i ] -> getName () . " \" title= \" " . $tools [ $i ] -> getName () . " \" class= \" align-middle \" > " ;
2010-08-31 17:35:36 +00:00
$output .= " </a> \n " ;
$toolCount ++ ;
2007-11-05 18:14:38 +00:00
}
2010-08-31 17:35:36 +00:00
$width = ( $toolCount * 20 ) + 20 ;
echo " <td align='center' style= \" white-space: nowrap; width: ${ width } px \" > " ;
echo $output ;
echo " </td> \n " ;
2007-04-21 11:04:50 +00:00
}
2007-02-17 16:26:08 +00:00
/**
* Prints the content of a cell in the account list for a given LDAP entry and attribute .
*
* @ param array $entry LDAP attributes
* @ param string $attribute attribute name
*/
2007-11-11 14:01:16 +00:00
protected function listPrintTableCellContent ( & $entry , & $attribute ) {
2007-02-17 16:26:08 +00:00
// print all attribute entries seperated by "; "
if ( isset ( $entry [ $attribute ]) && sizeof ( $entry [ $attribute ]) > 0 ) {
if ( is_array ( $entry [ $attribute ])) {
// sort array
sort ( $entry [ $attribute ]);
2007-03-21 13:36:09 +00:00
echo htmlspecialchars ( implode ( " ; " , $entry [ $attribute ]), ENT_QUOTES , " UTF-8 " );
}
else {
echo htmlspecialchars ( $entry [ $attribute ], ENT_QUOTES , " UTF-8 " );
2007-02-17 16:26:08 +00:00
}
}
}
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/**
* Manages all POST actions ( e . g . button pressed ) for the account lists .
2010-11-06 09:40:32 +00:00
*
* @ return String HTML fragment to insert into beginning of account list
2006-01-01 16:30:05 +00:00
*/
2008-01-14 18:10:13 +00:00
protected function listDoPost () {
2010-10-31 13:48:15 +00:00
// check if button was pressed and if we have to add/delete an account or call file upload
if ( isset ( $_POST [ 'new' ]) || isset ( $_POST [ 'del' ]) || isset ( $_POST [ 'fileUpload' ])){
2007-12-30 16:08:54 +00:00
if ( ! checkIfWriteAccessIsAllowed ()) {
die ();
}
2006-01-01 16:30:05 +00:00
// add new account
if ( isset ( $_POST [ 'new' ])){
2007-11-06 17:42:37 +00:00
metaRefresh ( " ../account/edit.php?type= " . $this -> type . " &suffix= " . $this -> suffix );
2005-01-27 21:07:48 +00:00
exit ;
}
2006-01-01 16:30:05 +00:00
// delete account(s)
elseif ( isset ( $_POST [ 'del' ])){
// search for checkboxes
$accounts = array_keys ( $_POST , " on " );
2006-06-29 19:38:38 +00:00
// build DN list
2006-01-01 16:30:05 +00:00
$_SESSION [ 'delete_dn' ] = array ();
for ( $i = 0 ; $i < sizeof ( $accounts ); $i ++ ) {
2010-01-04 20:15:25 +00:00
$_SESSION [ 'delete_dn' ][] = base64_decode ( $accounts [ $i ]);
2006-01-01 16:30:05 +00:00
}
if ( sizeof ( $accounts ) > 0 ) {
metaRefresh ( " ../delete.php?type= " . $this -> type );
exit ;
}
2005-01-27 21:07:48 +00:00
}
2010-10-31 13:48:15 +00:00
// file upload
elseif ( isset ( $_POST [ 'fileUpload' ])){
metaRefresh ( " ../masscreate.php?type= " . $this -> type );
exit ;
}
2007-11-25 12:52:18 +00:00
}
// PDF button
foreach ( $_POST as $key => $value ) {
if ( strpos ( $key , 'createPDF_' ) > - 1 ) {
$parts = explode ( " _ " , $key );
2010-05-02 15:34:44 +00:00
if ( sizeof ( $parts ) == 2 ) {
2007-11-25 12:52:18 +00:00
$this -> showPDFPage ( $parts [ 1 ]);
exit ;
}
}
}
// PDF creation Ok
if ( isset ( $_POST [ 'createPDFok' ])) {
$pdfStruct = $_POST [ 'pdf_structure' ];
$option = $_POST [ 'createFor' ];
2010-11-06 09:40:32 +00:00
$filename = '' ;
2007-11-25 12:52:18 +00:00
// create for clicked account
if ( $option == 'DN' ) {
$_SESSION [ " accountPDF " ] = new accountContainer ( $this -> type , " accountPDF " );
2009-12-06 18:34:24 +00:00
$_SESSION [ " accountPDF " ] -> load_account ( base64_decode ( $_POST [ 'clickedAccount' ]));
2010-11-06 09:40:32 +00:00
$filename = createModulePDF ( array ( $_SESSION [ " accountPDF " ]), $pdfStruct );
2007-11-25 12:52:18 +00:00
unset ( $_SESSION [ " accountPDF " ]);
}
// create for all selected accounts
elseif ( $option == 'SELECTED' ) {
2006-01-01 16:30:05 +00:00
// search for checkboxes
$accounts = array_keys ( $_POST , " on " );
$list = array ();
// load accounts from LDAP
for ( $i = 0 ; $i < sizeof ( $accounts ); $i ++ ) {
$_SESSION [ " accountPDF- $i " ] = new accountContainer ( $this -> type , " accountPDF- $i " );
2009-12-06 18:34:24 +00:00
$_SESSION [ " accountPDF- $i " ] -> load_account ( base64_decode ( $accounts [ $i ]));
2006-01-01 16:30:05 +00:00
$list [ $i ] = $_SESSION [ " accountPDF- $i " ];
}
if ( sizeof ( $list ) > 0 ) {
2010-11-06 09:40:32 +00:00
$filename = createModulePDF ( $list , $pdfStruct );
2007-11-25 12:52:18 +00:00
for ( $i = 0 ; $i < sizeof ( $accounts ); $i ++ ) {
unset ( $_SESSION [ " accountPDF- $i " ]);
}
2006-01-01 16:30:05 +00:00
}
}
2007-11-25 12:52:18 +00:00
// create for all accounts
elseif ( $option == 'ALL' ) {
2006-01-01 16:30:05 +00:00
$list = array ();
2006-01-03 22:02:03 +00:00
for ( $i = 0 ; $i < sizeof ( $this -> entries ); $i ++ ) {
2006-01-01 16:30:05 +00:00
$_SESSION [ " accountPDF- $i " ] = new accountContainer ( $this -> type , " accountPDF- $i " );
2006-01-03 22:02:03 +00:00
$_SESSION [ " accountPDF- $i " ] -> load_account ( $this -> entries [ $i ][ 'dn' ]);
2006-01-01 16:30:05 +00:00
$list [ $i ] = $_SESSION [ " accountPDF- $i " ];
}
if ( sizeof ( $list ) > 0 ) {
2010-11-06 09:40:32 +00:00
$filename = createModulePDF ( $list , $pdfStruct );
2007-11-25 12:52:18 +00:00
for ( $i = 0 ; $i < sizeof ( $this -> entries ); $i ++ ) {
// clean session
unset ( $_SESSION [ " accountPDF- $i " ]);
}
2006-01-01 16:30:05 +00:00
}
2005-01-27 21:07:48 +00:00
}
2010-03-08 18:18:31 +00:00
elseif ( $option == 'SESSION' ) {
2010-11-06 09:40:32 +00:00
$filename = createModulePDF ( array ( $_SESSION [ $_POST [ 'PDFSessionID' ]]), $pdfStruct );
2011-11-01 17:14:54 +00:00
unset ( $_SESSION [ $_POST [ 'PDFSessionID' ]]);
2010-11-06 09:40:32 +00:00
}
if ( $filename != '' ) {
return " <script type= \" text/javascript \" >window.open(' " . $filename . " ', '_blank');</script> " ;
2010-03-08 18:18:31 +00:00
}
2005-01-27 21:07:48 +00:00
}
2007-11-11 14:01:16 +00:00
// check if back from configuration page
if ( sizeof ( $this -> configOptions ) > 0 ) {
if ( isset ( $_POST [ 'saveConfigOptions' ])) {
$cookieValue = '' ;
for ( $i = 0 ; $i < sizeof ( $this -> configOptions ); $i ++ ) {
$this -> configOptions [ $i ] -> fillFromPostData ();
$cookieValue .= $this -> configOptions [ $i ] -> getID () . " = " . $this -> configOptions [ $i ] -> getValue () . ';' ;
}
// save options as cookie for one year
setcookie ( " ListOptions_ " . $this -> type , $cookieValue , time () + 60 * 60 * 24 * 365 , " / " );
// notify subclasses
$this -> listConfigurationChanged ();
}
}
2010-11-06 09:40:32 +00:00
return '' ;
2005-01-27 21:07:48 +00:00
}
2007-11-25 12:52:18 +00:00
/**
* Shows the page where the user may select the PDF options .
*
* @ param String $id account ID
*/
private function showPDFPage ( $id ) {
2010-03-08 18:18:31 +00:00
$sessionObject = null ;
$PDFSessionID = null ;
if (( $id == null ) && isset ( $_GET [ 'PDFSessionID' ])) {
$PDFSessionID = $_GET [ 'PDFSessionID' ];
$sessionObject = $_SESSION [ $PDFSessionID ];
}
2007-11-25 12:52:18 +00:00
// search for checkboxes
$selAccounts = array_keys ( $_POST , " on " );
2007-12-03 09:18:20 +00:00
if ( ! in_array ( $id , $selAccounts )) {
$selAccounts [] = $id ;
}
2010-11-06 09:40:32 +00:00
// get possible PDF structures
$pdf_structures = getPDFStructureDefinitions ( $this -> type );
2007-11-25 12:52:18 +00:00
$this -> listPrintHeader ();
2010-11-06 09:40:32 +00:00
echo " <div class= \" ui-tabs-nav " . $this -> type . " list-bright \" > " ;
echo " <div class= \" smallPaddingContent \" > \n " ;
echo " <form action= \" list.php?type= " . $this -> type . " &norefresh=true \" method= \" post \" > \n " ;
2007-11-25 12:52:18 +00:00
// hiden inputs for selected accounts
for ( $i = 0 ; $i < sizeof ( $selAccounts ); $i ++ ) {
echo '<input type="hidden" name="' . $selAccounts [ $i ] . '" value="on">' ;
}
echo '<input type="hidden" name="clickedAccount" value="' . $id . '">' ;
2010-11-06 09:40:32 +00:00
$container = new htmlTable ();
$container -> addElement ( new htmlSubTitle ( _ ( 'Create PDF file' )), true );
2010-11-06 13:02:13 +00:00
$container -> addElement ( new htmlTableExtendedSelect ( 'pdf_structure' , $pdf_structures , array ( 'default' ), _ ( 'PDF structure' ), '405' ), true );
2010-11-06 09:40:32 +00:00
$container -> addElement ( new htmlSpacer ( null , '5px' ), true );
$container -> addElement ( new htmlOutputText ( _ ( 'Create for' )));
// check if account object is already in session
if ( $sessionObject != null ) {
$container -> addElement ( new htmlOutputText ( $sessionObject -> finalDN ));
$container -> addElement ( new htmlHiddenInput ( 'createFor' , 'SESSION' ));
$container -> addElement ( new htmlHiddenInput ( 'PDFSessionID' , $PDFSessionID ), true );
}
else {
$radioOptions = array (
2011-01-15 18:10:55 +00:00
getAbstractDN ( base64_decode ( $id )) => 'DN' ,
2010-11-06 09:40:32 +00:00
sprintf ( _ ( 'All selected accounts (%s)' ), sizeof ( $selAccounts )) => 'SELECTED' ,
sprintf ( _ ( 'All accounts (%s)' ), sizeof ( $this -> entries )) => 'ALL'
);
$container -> addElement ( new htmlRadio ( 'createFor' , $radioOptions , 'DN' ), true );
}
$container -> addElement ( new htmlSpacer ( null , '10px' ), true );
$buttonContainer = new htmlTable ();
2010-11-06 13:02:13 +00:00
$buttonContainer -> colspan = 3 ;
2010-11-06 09:40:32 +00:00
$buttonContainer -> addElement ( new htmlButton ( 'createPDFok' , _ ( 'Ok' )));
$buttonContainer -> addElement ( new htmlButton ( 'createPDFCancel' , _ ( 'Cancel' )));
$container -> addElement ( $buttonContainer );
2012-09-09 14:02:27 +00:00
parseHtml ( null , $container , array (), false , $this -> tabindex , $this -> type );
2010-11-06 09:40:32 +00:00
2007-11-25 12:52:18 +00:00
$this -> listPrintFooter ();
}
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/**
* Prints a combobox with possible sub - DNs .
*/
2007-11-11 14:01:16 +00:00
protected function listShowOUSelection () {
2006-01-01 16:30:05 +00:00
if ( sizeof ( $this -> possibleSuffixes ) > 1 ) {
2012-09-09 14:02:27 +00:00
$group = new htmlGroup ();
$suffixList = array ();
2006-01-01 16:30:05 +00:00
for ( $i = 0 ; $i < sizeof ( $this -> possibleSuffixes ); $i ++ ) {
2012-09-09 14:02:27 +00:00
$suffixList [ getAbstractDN ( $this -> possibleSuffixes [ $i ])] = $this -> possibleSuffixes [ $i ];
2006-01-01 16:30:05 +00:00
}
2012-09-09 14:02:27 +00:00
$suffixSelect = new htmlSelect ( 'suffix' , $suffixList , array ( $this -> suffix ));
$suffixSelect -> setOnchangeEvent ( " listOUchanged(' " . $this -> type . " ', this) " );
$suffixSelect -> setRightToLeftTextDirection ( true );
$suffixSelect -> setSortElements ( false );
$suffixSelect -> setHasDescriptiveElements ( true );
$group -> addElement ( $suffixSelect );
$group -> addElement ( new htmlSpacer ( '5px' , null ));
parseHtml ( null , $group , array (), true , $this -> tabindex , $this -> type );
2006-01-01 16:30:05 +00:00
}
2005-04-14 17:42:15 +00:00
}
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/**
2007-11-25 12:52:18 +00:00
* Prints the create and delete buttons .
2006-01-01 16:30:05 +00:00
*
* @ param boolean $createOnly true if only the create button should be displayed
*/
2007-11-11 14:01:16 +00:00
protected function listPrintButtons ( $createOnly ) {
2007-02-11 18:06:42 +00:00
echo " <table border=0 width= \" 100% \" > \n " ;
echo " <tr> \n " ;
echo " <td align= \" left \" > \n " ;
2007-12-30 16:08:54 +00:00
if ( checkIfWriteAccessIsAllowed ()) {
// add/delete buttons
2010-10-31 13:48:15 +00:00
echo " <button id= \" newButton \" name= \" new \" > " . $this -> labels [ 'newEntry' ] . " </button> \n " ;
2007-12-30 16:08:54 +00:00
if ( ! $createOnly ) {
2010-10-31 13:48:15 +00:00
echo " <button id= \" delButton \" name= \" del \" > " . $this -> labels [ 'deleteEntry' ] . " </button> \n " ;
2007-12-30 16:08:54 +00:00
}
2010-10-31 13:48:15 +00:00
$type = new $this -> type ();
2012-08-13 17:43:48 +00:00
$toolSettings = $_SESSION [ 'config' ] -> getToolSettings ();
if ( $type -> supportsFileUpload () && ! ( isset ( $toolSettings [ 'tool_hide_toolFileUpload' ]) && ( $toolSettings [ 'tool_hide_toolFileUpload' ] == 'true' ))) {
2010-10-31 13:48:15 +00:00
echo ' ' ;
echo " <button id= \" fileUploadButton \" name= \" fileUpload \" > " . _ ( 'File upload' ) . " </button> \n " ;
}
?>
& nbsp ; & nbsp ; & nbsp ;
< script type = " text/javascript " >
jQuery ( document ) . ready ( function () {
jQuery ( '#newButton' ) . button ({
icons : {
primary : 'createButton'
}
});
jQuery ( '#delButton' ) . button ({
icons : {
primary : 'deleteButton'
}
});
jQuery ( '#fileUploadButton' ) . button ({
icons : {
primary : 'upButton'
}
});
});
</ script >
< ? php
2005-02-26 14:32:52 +00:00
}
2007-02-11 18:06:42 +00:00
echo " </td> \n " ;
echo " <td align= \" right \" > \n " ;
2010-10-10 17:34:07 +00:00
$this -> listShowOUSelection ();
2011-11-01 12:50:35 +00:00
echo " <input class= \" smallImageButton align-middle \" style= \" background-image: url(../../graphics/refresh.png); \" type= \" submit \" value= \" \" name= \" refresh \" title= \" " . _ ( " Refresh " ) . " \" > " ;
echo ' <a class="align-middle" href="#" onclick="listShowSettingsDialog(\'' . _ ( 'Change list settings' ) . '\', \'' . _ ( 'Ok' ) . '\', \'' . _ ( 'Cancel' ) . '\');">' ;
2011-04-03 10:29:23 +00:00
echo '<img height=16 width=16 src="../../graphics/tools.png" alt="' . _ ( 'Change settings' ) . '" title="' . _ ( 'Change settings' ) . '">' ;
2007-11-11 14:01:16 +00:00
echo '</a>' ;
2007-02-11 18:06:42 +00:00
echo " </td> \n " ;
echo " </tr> \n " ;
echo " </table> \n " ;
}
2006-01-01 16:30:05 +00:00
/**
2007-11-11 14:01:16 +00:00
* Prints the HTML header .
2006-01-01 16:30:05 +00:00
*/
2007-11-11 14:01:16 +00:00
protected function listPrintHeader () {
2010-01-01 17:21:46 +00:00
include '../main_header.php' ;
2006-01-01 16:30:05 +00:00
}
2007-11-11 14:01:16 +00:00
/**
* Prints the HTML footer .
*/
2010-08-21 09:43:52 +00:00
protected function listPrintFooter () {
2010-08-31 17:35:36 +00:00
?>
</ form ></ div ></ div >
< script type = " text/javascript " >
jQuery ( document ) . ready ( function () {
jQuery ( '#tab_<?php echo $this->type; ?>' ) . addClass ( 'ui-tabs-selected' );
jQuery ( '#tab_<?php echo $this->type; ?>' ) . addClass ( 'ui-state-active' );
window . onload = listResizeITabContentDiv ;
window . onresize = listResizeITabContentDiv ;
jQuery ( '#filterButton' ) . button ();
});
</ script >
< ? php
2010-08-21 09:43:52 +00:00
include '../main_footer.php' ;
2007-11-11 14:01:16 +00:00
}
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/**
* Returns an hash array containing with all attributes to be shown and their descriptions .
* Format : array ( attribute => description )
*
* @ return array attribute list
*/
2012-04-06 13:12:43 +00:00
protected function listGetAttributeDescriptionList () {
2006-01-01 16:30:05 +00:00
$ret = array ();
$attr_string = $_SESSION [ " config " ] -> get_listAttributes ( $this -> type );
$temp_array = explode ( " ; " , $attr_string );
$hash_table = getListAttributeDescriptions ( $this -> type );
// generate column attributes and descriptions
for ( $i = 0 ; $i < sizeof ( $temp_array ); $i ++ ) {
// if value is predifined, look up description in hash_table
if ( substr ( $temp_array [ $i ], 0 , 1 ) == " # " ) {
$attr = strtolower ( substr ( $temp_array [ $i ], 1 ));
if ( isset ( $hash_table [ $attr ])) {
$ret [ $attr ] = $hash_table [ $attr ];
}
else {
$ret [ $attr ] = $attr ;
}
2005-04-14 17:42:15 +00:00
}
2006-01-01 16:30:05 +00:00
// if not predefined, the attribute is seperated by a ":" from description
2005-04-14 17:42:15 +00:00
else {
2006-01-01 16:30:05 +00:00
$attr = explode ( " : " , $temp_array [ $i ]);
if ( isset ( $attr [ 1 ])) {
$ret [ $attr [ 0 ]] = $attr [ 1 ];
}
else {
$ret [ $attr [ 0 ]] = $attr [ 0 ];
}
2005-04-14 17:42:15 +00:00
}
}
2006-01-01 16:30:05 +00:00
return $ret ;
}
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/**
* Sets some internal parameters .
*/
2007-11-11 14:01:16 +00:00
protected function listGetParams () {
2010-01-04 20:50:39 +00:00
// check if only PDF should be shown
if ( isset ( $_GET [ 'printPDF' ])) {
2010-03-08 18:18:31 +00:00
$this -> showPDFPage ( null );
2010-01-04 20:50:39 +00:00
exit ();
}
2006-01-01 16:30:05 +00:00
// get current page
if ( isset ( $_GET [ " page " ])) $this -> page = $_GET [ " page " ];
else $this -> page = 1 ;
// generate attribute-description table
$temp_array = $this -> listGetAttributeDescriptionList ();
$this -> attrArray = array_keys ( $temp_array ); // list of LDAP attributes to show
$this -> descArray = array_values ( $temp_array ); // list of descriptions for the attributes
// get sorting column
2007-11-05 18:14:38 +00:00
if ( isset ( $_GET [ " sort " ])) {
if ( $_GET [ " sort " ] == $this -> sortColumn ) {
$this -> sortDirection = - $this -> sortDirection ;
}
else {
$this -> sortColumn = $_GET [ " sort " ];
$this -> sortDirection = 1 ;
}
}
else {
$this -> sortColumn = strtolower ( $this -> attrArray [ 0 ]);
$this -> sortDirection = 1 ;
}
// get sort order
if ( isset ( $_GET [ 'sortdirection' ])) {
$this -> sortDirection = $_GET [ 'sortdirection' ];
}
2006-01-01 16:30:05 +00:00
// check search suffix
2006-01-24 14:23:42 +00:00
if ( isset ( $_POST [ 'suffix' ])) $this -> suffix = $_POST [ 'suffix' ]; // new suffix selected via combobox
2007-05-13 14:08:10 +00:00
elseif ( isset ( $_GET [ 'suffix' ])) $this -> suffix = $_GET [ 'suffix' ]; // new suffix selected via combobox
2006-01-01 16:30:05 +00:00
elseif ( ! $this -> suffix ) $this -> suffix = $_SESSION [ " config " ] -> get_Suffix ( $this -> type ); // default suffix
// check if LDAP data should be refreshed
$this -> refresh = true ;
if ( isset ( $_GET [ 'norefresh' ])) $this -> refresh = false ;
2010-02-13 19:05:33 +00:00
if ( isset ( $_POST [ 'refresh' ]) || isset ( $_POST [ 'apply_filter' ])) {
$this -> refresh = true ;
}
2006-01-01 16:30:05 +00:00
}
2006-09-23 11:19:36 +00:00
2006-01-01 16:30:05 +00:00
/**
* Rereads the entries from LDAP .
*/
2007-11-11 14:01:16 +00:00
protected function listRefreshData () {
2012-04-20 18:24:13 +00:00
// check suffix
if ( ! $this -> suffix ) {
$this -> suffix = $_SESSION [ " config " ] -> get_Suffix ( $this -> type ); // default suffix
}
2006-01-01 16:30:05 +00:00
// configure search filter
$module_filter = get_ldap_filter ( $this -> type ); // basic filter is provided by modules
2010-02-13 19:05:33 +00:00
$filter = " (& " . $module_filter . $this -> filterPart . " ) " ;
2006-01-01 16:30:05 +00:00
$attrs = $this -> attrArray ;
2012-04-06 13:12:43 +00:00
// remove virtual attributes from list
for ( $i = 0 ; $i < sizeof ( $attrs ); $i ++ ) {
if ( strpos ( $attrs [ $i ], self :: VIRTUAL_ATTRIBUTE_PREFIX ) === 0 ) {
unset ( $attrs [ $i ]);
}
}
$attrs = array_values ( $attrs );
// include additional attributes
$additionalAttrs = $this -> getAdditionalLDAPAttributesToRead ();
for ( $i = 0 ; $i < sizeof ( $additionalAttrs ); $i ++ ) {
if ( ! in_array_ignore_case ( $additionalAttrs [ $i ], $attrs )) {
$attrs [] = $additionalAttrs [ $i ];
}
}
2011-05-21 10:58:22 +00:00
$this -> entries = searchLDAP ( $this -> suffix , $filter , $attrs );
2010-02-14 18:01:20 +00:00
$lastError = getLastLDAPError ();
if ( $lastError != null ) {
call_user_func_array ( 'StatusMessage' , $lastError );
2005-04-14 17:42:15 +00:00
}
2006-01-01 16:30:05 +00:00
// generate list of possible suffixes
2011-04-25 18:01:11 +00:00
$typeObj = new $this -> type ();
$this -> possibleSuffixes = $typeObj -> getSuffixList ();
2005-04-14 17:42:15 +00:00
}
2007-02-11 18:06:42 +00:00
2012-04-06 13:12:43 +00:00
/**
* Returns a list of additional LDAP attributes that should be read .
* This can be used to show additional data even if the user selected other attributes to show in the list .
*
* @ return array additional attribute names
*/
protected function getAdditionalLDAPAttributesToRead () {
return array ();
}
2007-02-11 18:06:42 +00:00
/**
2007-11-11 14:01:16 +00:00
* Returns a list of lamListTool objects to display next to the edit / delete buttons .
*
* @ return lamListTool [] tools
2007-02-11 18:06:42 +00:00
*/
2007-11-11 14:01:16 +00:00
protected function getAdditionalTools () {
return array ();
2007-02-11 18:06:42 +00:00
}
2007-11-05 18:14:38 +00:00
/**
2007-11-11 14:01:16 +00:00
* Returns a list of possible configuration options .
2007-11-05 18:14:38 +00:00
*
2007-11-11 14:01:16 +00:00
* @ return array list of lamListOption objects
2007-11-05 18:14:38 +00:00
*/
2007-11-11 14:01:16 +00:00
protected function listGetAllConfigOptions () {
2011-01-24 20:50:04 +00:00
$listSizeOption = new lamSelectListOption ( _ ( " Maximum list entries " ), array ( 10 , 20 , 30 , 50 , 75 , 100 , 500 , 1000 ), self :: LIST_SIZE_OPTION_NAME );
2010-09-26 11:12:02 +00:00
$listSizeOption -> setHelpID ( '208' );
2010-11-21 15:03:19 +00:00
$listSizeOption -> setValue ( $this -> maxPageEntries );
2007-12-09 10:45:04 +00:00
return array ( $listSizeOption );
2007-11-05 18:14:38 +00:00
}
2007-11-11 14:01:16 +00:00
/**
* Prints the list configuration page .
*/
protected function listPrintConfigurationPage () {
2011-04-25 18:01:11 +00:00
echo " <div id= \" settingsDialog \" class= \" hidden \" > \n " ;
2011-04-09 10:04:56 +00:00
echo " <form id= \" settingsDialogForm \" action= \" list.php?type= " . $this -> type . " &norefresh=true \" method= \" post \" > \n " ;
echo '<table width="100%"><tr><td>' ;
2010-09-26 11:12:02 +00:00
$configContainer = new htmlTable ();
2007-11-11 14:01:16 +00:00
for ( $i = 0 ; $i < sizeof ( $this -> configOptions ); $i ++ ) {
2010-09-26 11:12:02 +00:00
$configContainer -> mergeTableElements ( $this -> configOptions [ $i ] -> getMetaHTML ());
2007-11-11 14:01:16 +00:00
}
2011-04-09 10:04:56 +00:00
$configContainer -> addElement ( new htmlHiddenInput ( 'saveConfigOptions' , 'ok' ));
2010-09-26 11:12:02 +00:00
2012-09-09 14:02:27 +00:00
parseHtml ( '' , $configContainer , array (), false , $this -> tabindex , $this -> type );
2007-11-11 14:01:16 +00:00
echo " </td></tr></table> \n " ;
2011-04-09 10:04:56 +00:00
echo '</form>' ;
echo " </div> \n " ;
2007-11-11 14:01:16 +00:00
}
/**
* Returns the configuration option with the given ID .
*
* @ param String $ID ID
*/
protected function listGetConfigOptionByID ( $ID ) {
for ( $i = 0 ; $i < sizeof ( $this -> configOptions ); $i ++ ) {
if ( $this -> configOptions [ $i ] -> getID () === $ID ) {
return $this -> configOptions [ $i ];
}
}
return null ;
}
/**
* Called when the configuration options changed .
*/
protected function listConfigurationChanged () {
2007-12-09 10:45:04 +00:00
$sizeOption = $this -> listGetConfigOptionByID ( self :: LIST_SIZE_OPTION_NAME );
if ( $sizeOption -> getValue () != null ) {
$this -> maxPageEntries = $sizeOption -> getValue ();
}
2007-11-11 14:01:16 +00:00
return ;
}
2010-11-26 20:16:14 +00:00
/**
* Prints messages when another page ( e . g . delete / upload ) redirects to the list view .
*/
protected function listPrintRedirectMessages () {
if ( isset ( $_GET [ 'deleteAllOk' ])) {
StatusMessage ( 'INFO' , _ ( 'Deletion was successful.' ));
}
2010-11-28 15:27:27 +00:00
elseif ( isset ( $_GET [ 'uploadAllOk' ])) {
StatusMessage ( 'INFO' , _ ( " Upload has finished " ));
2012-02-05 10:38:59 +00:00
if ( isset ( $_SESSION [ 'mass_pdf' ][ 'file' ])) {
2012-02-05 13:16:01 +00:00
StatusMessage ( 'INFO' , sprintf ( _ ( 'You can download your PDF files {link=%s}{color=#d2131a}here{endcolor}{endlink}.' ), '../' . $_SESSION [ 'mass_pdf' ][ 'file' ]));
2012-02-05 10:38:59 +00:00
}
2010-11-28 15:27:27 +00:00
}
2012-06-05 18:20:17 +00:00
if ( isset ( $_SESSION [ 'listRedirectMessages' ])) {
2010-11-28 15:27:27 +00:00
for ( $i = 0 ; $i < sizeof ( $_SESSION [ 'listRedirectMessages' ]); $i ++ ) {
call_user_func_array ( 'StatusMessage' , $_SESSION [ 'listRedirectMessages' ][ $i ]);
}
unset ( $_SESSION [ 'listRedirectMessages' ]);
}
2010-11-26 20:16:14 +00:00
}
2007-11-05 18:14:38 +00:00
}
/**
* Represents a tool which can be included in the account lists .
*
* @ package lists
* @ author Roland Gruber
*/
class lamListTool {
2012-07-15 12:05:47 +00:00
/** tool name */
2007-11-05 18:14:38 +00:00
private $name ;
2012-07-15 12:05:47 +00:00
/** tool image */
2007-11-05 18:14:38 +00:00
private $image ;
2012-07-15 12:05:47 +00:00
/** link target */
2007-11-05 18:14:38 +00:00
private $target ;
/**
* Constructor
*
* @ param String $name tool name
* @ param String $image image file
* @ param String $target target page
* @ return lamListTool tool object
*/
2007-12-28 16:08:56 +00:00
public function __construct ( $name , $image , $target ) {
2007-11-05 18:14:38 +00:00
$this -> name = $name ;
$this -> image = $image ;
$this -> target = $target ;
}
/**
* Returns the name of the tool image .
* The image is returned without path ( e . g . mytool . png ) . All images must reside in the graphics folder .
*
* @ return String image name
*/
2007-11-11 14:01:16 +00:00
public function getImage () {
2007-11-05 18:14:38 +00:00
return $this -> image ;
}
/**
* Returns the tool name .
* This is used for the tool tip .
*
* @ return String name
*/
2007-11-11 14:01:16 +00:00
public function getName () {
2007-11-05 18:14:38 +00:00
return $this -> name ;
}
/**
* Returns the PHP file ( relative to 'templates/lists' ) which will be the target for this tool .
* The target page will be opened with two GET parameters : DN and type ( e . g . user )
*
* @ return String page file ( e . g . 'mytool.php' )
*/
2007-11-11 14:01:16 +00:00
public function getLinkTarget () {
2007-11-05 18:14:38 +00:00
return $this -> target ;
}
2005-04-14 17:42:15 +00:00
2006-01-01 16:30:05 +00:00
}
2005-04-14 17:42:15 +00:00
2007-11-11 14:01:16 +00:00
/**
* Represents a list configuration option .
*
* @ package lists
* @ author Roland Gruber
*/
abstract class lamListOption {
2012-07-15 12:05:47 +00:00
/** unique ID */
2007-11-11 14:01:16 +00:00
private $ID ;
2012-07-15 12:05:47 +00:00
/** option value */
2007-11-11 14:01:16 +00:00
private $value ;
/**
* Creates a new config option .
*
2007-12-09 10:45:04 +00:00
* @ param String $ID unique ID
2007-11-11 14:01:16 +00:00
* @ return lamConfigOption config option
*/
2007-12-28 16:08:56 +00:00
public function __construct ( $ID ) {
2007-11-11 14:01:16 +00:00
$this -> ID = $ID ;
}
/**
* Returns the option ID .
*
* @ return String ID
*/
public function getID () {
return $this -> ID ;
}
/**
* Fills the config option from POST data .
*
* @ return array list of StatusMessages ( array ( < type > , < head line > , < body > ))
*/
public abstract function fillFromPostData ();
/**
* Returns the option value . The value must not contain " = " and " ; " .
*
* @ return String value
*/
public function getValue () {
return $this -> value ;
}
/**
* Sets the config option value . The value must not contain " = " and " ; " .
*
* @ param String $value
*/
public function setValue ( $value ) {
if (( strpos ( $value , '=' ) > - 1 ) || ( strpos ( $value , ';' ) > - 1 )) {
user_error ( " Invalid value for list option: " . $value , E_ERROR );
}
$this -> value = $value ;
}
/**
* Returns the meta HTML data to display this option .
*
2010-09-26 11:12:02 +00:00
* @ return htmlTable meta HTML
2007-11-11 14:01:16 +00:00
*/
public abstract function getMetaHTML ();
}
/**
* Boolean option for list configuration .
*
* @ package lists
* @ author Roland Gruber
*/
class lamBooleanListOption extends lamListOption {
2012-07-15 12:05:47 +00:00
/** option name */
2007-11-11 14:01:16 +00:00
private $name ;
/**
* Creates a new boolean option .
*
* @ param String $name name to show on config page
2007-12-09 10:45:04 +00:00
* @ param String $ID unique ID
2007-11-11 14:01:16 +00:00
* @ return lamBooleanListOption config option
*/
2007-12-28 16:08:56 +00:00
public function __construct ( $name , $ID ) {
parent :: __construct ( $ID );
2007-11-11 14:01:16 +00:00
$this -> name = $name ;
}
/**
* Returns if this option is selected .
*
* @ return boolean true , if selected
*/
public function isSelected () {
return ( $this -> getValue () === " 1 " );
}
/**
* Fills the config option from POST data .
*
* @ return array list of StatusMessages ( array ( < type > , < head line > , < body > ))
*/
public function fillFromPostData () {
if ( isset ( $_POST [ $this -> getID ()])) {
$this -> setValue ( " 1 " );
}
else {
$this -> setValue ( " 0 " );
}
}
/**
* Returns the meta HTML data to display this option .
*
2010-09-26 11:12:02 +00:00
* @ return htmlTable meta HTML
2007-11-11 14:01:16 +00:00
*/
public function getMetaHTML () {
2010-09-26 11:12:02 +00:00
$return = new htmlTable ();
$return -> addElement ( new htmlTableExtendedInputCheckbox ( $this -> getID (), $this -> isSelected (), $this -> name ));
2007-11-11 14:01:16 +00:00
return $return ;
}
}
2007-12-09 10:45:04 +00:00
/**
* Boolean option for list configuration .
*
* @ package lists
* @ author Roland Gruber
*/
class lamSelectListOption extends lamListOption {
2012-07-15 12:05:47 +00:00
/** option name */
2007-12-09 10:45:04 +00:00
private $name ;
2012-07-15 12:05:47 +00:00
/** possible select options */
2007-12-09 10:45:04 +00:00
private $options ;
2012-07-15 12:05:47 +00:00
/** help ID */
2007-12-09 10:45:04 +00:00
private $helpID ;
/**
* Creates a new selection list option .
*
* @ param String $name name to show on config page
* @ param array $options list of possible values
* @ param String $ID unique ID
* @ return lamBooleanListOption config option
*/
2007-12-28 16:08:56 +00:00
public function __construct ( $name , $options , $ID ) {
parent :: __construct ( $ID );
2007-12-09 10:45:04 +00:00
$this -> name = $name ;
$this -> options = $options ;
}
/**
* Sets the help ID .
*
* @ param Strign $id help ID
*/
public function setHelpID ( $id ) {
$this -> helpID = $id ;
}
/**
* Fills the config option from POST data .
*
* @ return array list of StatusMessages ( array ( < type > , < head line > , < body > ))
*/
public function fillFromPostData () {
if ( isset ( $_POST [ $this -> getID ()])) {
$this -> setValue ( $_POST [ $this -> getID ()]);
}
else {
$this -> setValue ( null );
}
}
/**
* Returns the meta HTML data to display this option .
*
2010-09-26 11:12:02 +00:00
* @ return htmlTable meta HTML
2007-12-09 10:45:04 +00:00
*/
public function getMetaHTML () {
2010-09-26 11:12:02 +00:00
$return = new htmlTable ();
$return -> addElement ( new htmlTableExtendedSelect ( $this -> getID (), $this -> options , array ( $this -> getValue ()), $this -> name , $this -> helpID ));
2007-12-09 10:45:04 +00:00
return $return ;
}
2010-11-26 20:16:14 +00:00
2007-12-09 10:45:04 +00:00
}
2004-05-31 20:10:36 +00:00
?>