X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_listing.inc;h=ef7e038c30b9a64fa145bdd5306112e639047671;hb=ed2e61f01da6d459cbfc9bda3aaeaa61db00eac8;hp=131e58877aa2deb3c6e5f3b538fea491e7d68434;hpb=bd3a64a768d3876b0688c77cc07e144d7ebf4f44;p=gosa.git diff --git a/gosa-core/include/class_listing.inc b/gosa-core/include/class_listing.inc index 131e58877..ef7e038c3 100644 --- a/gosa-core/include/class_listing.inc +++ b/gosa-core/include/class_listing.inc @@ -53,9 +53,10 @@ class listing { var $useSpan= false; var $height= 0; var $scrollPosition= 0; + var $baseSelector; - function __construct($filename) + function listing($filename) { global $config; global $class_mapping; @@ -96,6 +97,9 @@ class listing { } } } + + // Instanciate base selector + $this->baseSelector= new baseSelector($this->bases, $this->base); } @@ -160,7 +164,7 @@ class listing { // Fill objectTypes from departments and xml definition $types = departmentManagement::get_support_departments(); foreach ($types as $class => $data) { - $this->objectTypes[]= array("label" => $data['TITLE'], + $this->objectTypes[$data['OC']]= array("label" => $data['TITLE'], "objectClass" => $data['OC'], "image" => $data['IMG']); } @@ -170,12 +174,14 @@ class listing { $this->xmlData['definition']['objectType']= array($this->xmlData['definition']['objectType']); } foreach ($this->xmlData['definition']['objectType'] as $index => $otype) { - $this->objectTypes[]= $this->xmlData['definition']['objectType'][$index]; + $tmp = $this->xmlData['definition']['objectType'][$index]; + $this->objectTypes[$tmp['objectClass']]= $tmp; if (isset($this->xmlData['definition']['objectType'][$index]['category'])){ $this->categories[]= $otype['category']; } } } + $this->objectTypes = array_values($this->objectTypes); // Parse layout per column $this->colprops= $this->parseLayout($this->xmlData['table']['layout']); @@ -232,7 +238,7 @@ class listing { isset($config['sortType'])) { $this->sortAttribute= $config['sortAttribute']; $this->sortType= $config['sortType']; - $sorter= " "; + $sorter= " ".image("images/lists/sort-".($this->sortDirection[$index]?"up":"down").".png", null, null, $this->sortDirection[$index]?_("Up"):_("Down"), "text-top"); } $sortable= (isset($config['sortAttribute'])); @@ -267,7 +273,7 @@ class listing { // Some browsers don't have the ability do do scrollable table bodies, filter them // here. $switch= false; - if (preg_match('/(Opera|Konqueror|Safari|msie)/i', $_SERVER['HTTP_USER_AGENT'])){ + if (preg_match('/(Opera|Konqueror|Safari)/i', $_SERVER['HTTP_USER_AGENT'])){ $switch= true; } @@ -280,13 +286,8 @@ class listing { $height= $this->height; } - $result.= ""; + $result.= "
\n"; - - $height= ""; - if ($switch){ - $height= "height:100%;"; - } - $result.= "\n"; + $result.= "
\n"; + $result.= "
\n"; $this->numColumns= count($this->colprops) + ($this->multiSelect?1:0); // Build list header @@ -308,7 +309,7 @@ class listing { // No results? Just take an empty colspanned row if (count($this->entries) + count($this->departments) == 0) { - $result.= ""; + $result.= ""; } // Line color alternation @@ -321,7 +322,7 @@ class listing { // Fill with department browser if configured this way $departmentIterator= new departmentSortIterator($this->departments, $this->sortDirection[$this->sortColumn]); foreach ($departmentIterator as $row => $entry){ - $result.=""; + $result.=""; // Render multi select if needed if ($this->multiSelect) { @@ -381,10 +382,10 @@ class listing { // Complete list by sorting entries for _sort$index and appending them to the output $entryIterator= new listingSortIterator($this->entries, $this->sortDirection[$this->sortColumn], "_sort".$this->sortColumn, $this->sortType); foreach ($entryIterator as $row => $entry){ - $alt++; - $result.="\n"; + $result.="\n"; $result.= $entry['_rendered']; $result.="\n"; + $alt++; } // Need to fill the list if it's not full (nobody knows why this is 22 ;-)) @@ -406,24 +407,23 @@ class listing { } // Close list body - $result.= "
 
 
"; // Add the footer if requested if ($this->showFooter) { - $result.= ""; + $result.= "
"; foreach ($this->objectTypes as $objectType) { if (isset($this->objectTypeCount[$objectType['label']])) { $label= _($objectType['label']); - $result.= "$label ".$this->objectTypeCount[$objectType['label']]."    "; + $result.= image($objectType['image'], null, null, $label)." ".$this->objectTypeCount[$objectType['label']]."  "; } } - $result.= ""; + $result.= "
"; } // Close list - $result.= ""; $result.= $switch?"":""; // Add scroll positioner @@ -471,32 +471,44 @@ class listing { global $config; $ui= get_userinfo(); + // Take care of base selector + if ($this->baseMode) { + $this->baseSelector->update(); + // Check if a wrong base was supplied + if(!$this->baseSelector->checkLastBaseUpdate()){ + msg_dialog::display(_("Error"), msgPool::check_base(), ERROR_DIALOG); + } + } + + // Save base + $refresh= false; + if ($this->baseMode) { + $this->base= $this->baseSelector->getBase(); + session::global_set("CurrentMainBase", $this->base); + $refresh= true; + } + + // Reset object counter / DN mapping $this->objectTypeCount= array(); $this->objectDnMapping= array(); // Do not do anything if this is not our PID - if(!(isset($_REQUEST['PID']) && $_REQUEST['PID'] != $this->pid)) { + if($refresh || !(isset($_REQUEST['PID']) && $_REQUEST['PID'] != $this->pid)) { // Save position if set if (isset($_POST['position_'.$this->pid]) && is_numeric($_POST['position_'.$this->pid])) { $this->scrollPosition= $_POST['position_'.$this->pid]; } - // Save base - if (isset($_POST['BASE']) && $this->baseMode) { - $base= base64_decode(get_post('BASE')); - if (isset($this->bases[$base])) { - $this->base= $base; - session::global_set("CurrentMainBase", $this->base); - } - } - // Override the base if we got a message from the browser navigation if ($this->departmentBrowser && isset($_GET['act'])) { if (preg_match('/^department_([0-9]+)$/', validate($_GET['act']), $match)){ if (isset($this->departments[$match[1]])){ $this->base= $this->departments[$match[1]]['dn']; + if ($this->baseMode) { + $this->baseSelector->setBase($this->base); + } session::global_set("CurrentMainBase", $this->base); } } @@ -539,7 +551,7 @@ class listing { // Override base if we got signals from the navigation elements $action= ""; foreach ($_POST as $key => $value) { - if (preg_match('/^(ROOT|BACK|HOME)_x$/', $key, $match)) { + if (preg_match('/^(ROOT|BACK|HOME)(_x)?$/', $key, $match)) { $action= $match[1]; break; } @@ -549,17 +561,23 @@ class listing { if ($action == 'ROOT') { $deps= $ui->get_module_departments($this->categories); $this->base= $deps[0]; + $this->baseSelector->setBase($this->base); + session::global_set("CurrentMainBase", $this->base); } if ($action == 'BACK') { $deps= $ui->get_module_departments($this->categories); $base= preg_replace("/^[^,]+,/", "", $this->base); if(in_array_ics($base, $deps)){ $this->base= $base; + $this->baseSelector->setBase($this->base); + session::global_set("CurrentMainBase", $this->base); } } if ($action == 'HOME') { $ui= get_userinfo(); - $this->base= $this->filter->getObjectBase($ui->dn); + $this->base= get_base_from_people($ui->dn); + $this->baseSelector->setBase($this->base); + session::global_set("CurrentMainBase", $this->base); } } @@ -582,6 +600,9 @@ class listing { function setBase($base) { $this->base= $base; + if ($this->baseMode) { + $this->baseSelector->setBase($this->base); + } } @@ -673,34 +694,7 @@ class listing { return; } - $result= ""; - - // Reset the currently used base to the first DN we found if there - // was no match. - if(!$found){ - $this->base = $firstDN; - } - - return $result; + return $this->baseSelector->render(); } @@ -824,7 +818,7 @@ class listing { $objectType= $this->getObjectType($this->objectTypes, $classes); if ($objectType) { $this->objectDnMapping[$dn]= $objectType["objectClass"]; - $result= ""; + $result= image($objectType["image"], null, null, LDAP::fix($dn)); if (!isset($this->objectTypeCount[$objectType['label']])) { $this->objectTypeCount[$objectType['label']]= 0; } @@ -848,7 +842,7 @@ class listing { foreach($actions as $action) { // Skip the entry completely if there's no permission to execute it if (!$this->hasActionPermission($action, $dn, $classes)) { - $result.= " "; + $result.= image('images/empty.png'); continue; } @@ -858,12 +852,12 @@ class listing { if (preg_match('/^(.*)!$/', $fa, $m)){ $fa= $m[1]; if (isset($this->entries[$row][$fa]) && $this->entries[$row][$fa][0] == $fv) { - $result.= " "; + $result.= image('images/empty.png'); continue; } } else { if (!isset($this->entries[$row][$fa]) && !$this->entries[$row][$fa][0] == $fv) { - $result.= " "; + $result.= image('images/empty.png'); continue; } } @@ -877,17 +871,17 @@ class listing { if (preg_match('/^!(.*)$/', $objectclass, $m)){ $objectclass= $m[1]; if(in_array($objectclass, $classes)) { - $result.= " "; + $result.= image('images/empty.png'); continue; } } elseif (is_string($objectclass)) { if(!in_array($objectclass, $classes)) { - $result.= " "; + $result.= image('images/empty.png'); continue; } } elseif (is_array($objectclass)) { if(count(array_intersect($objectclass, $classes)) != count($objectclass)){ - $result.= " "; + $result.= image('images/empty.png'); continue; } } @@ -897,8 +891,7 @@ class listing { if ($action['type'] == "entry") { $label= $this->processElementFilter($action['label'], $this->entries[$row], $row); $image= $this->processElementFilter($action['image'], $this->entries[$row], $row); - $result.=""; + $result.= image($image, null, "listing_".$action['name']."_$row", $label); } // Handle special types @@ -986,37 +979,35 @@ class listing { $listhead =""; /* Check if we are in users home department */ - if(!count($deps) || $this->filter->base == $this->filter->getObjectBase($ui->dn)){ + if(!count($deps) || $this->filter->base == get_base_from_people($ui->dn)){ $enableHome = false; } /* Draw root button */ if($enableRoot){ - $result["ROOT"]= ""; + $result["ROOT"]= image('images/lists/root.png', null, 'ROOT', _("Root")); }else{ - $result["ROOT"]= ""._("Root").""; + $result["ROOT"]= image('images/lists/root-grey.png', null, null, _("Root")); } /* Draw back button */ if($enableBack){ - $result["BACK"]= ""; + $result["BACK"]= image('images/lists/back.png', null, 'BACK', _("Go up one department")); }else{ - $result["BACK"]= ""._("Up").""; + $result["BACK"]= image('images/lists/back-grey.png', null, null, _("Go up one department")); } /* Draw home button */ + /* Draw home button */ if($enableHome){ - $result["HOME"]= ""; + $result["HOME"]= image('images/lists/home.png', null, 'HOME', _("Go to users department")); }else{ - $result["HOME"]= ""._("Home").""; + $result["HOME"]= image('images/lists/home-grey.png', null, null, _("Go to users department")); } + /* Draw reload button, this button is enabled everytime */ - $result["RELOAD"]= ""; + $result["RELOAD"]= image('images/lists/reload.png', null, 'REFRESH', _("Reload list")); return ($result); } @@ -1111,8 +1102,7 @@ class listing { // Load shortcut $actions= &$this->xmlData['actionmenu']['action']; $result= "
". - "