X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_listing.inc;h=e2bdb9a44a2d7e608db8d888dbf9cc66f59bea41;hb=fdc518a8263e1cf9d6c6dd76970e60a0e5e21924;hp=e9cc5d9ebe1e19c470500bd640f9d22abb3a999b;hpb=8be0d004bb2ce4d7bac193179eba7e93c41296f2;p=gosa.git diff --git a/gosa-core/include/class_listing.inc b/gosa-core/include/class_listing.inc index e9cc5d9eb..e2bdb9a44 100644 --- a/gosa-core/include/class_listing.inc +++ b/gosa-core/include/class_listing.inc @@ -45,6 +45,8 @@ class listing { var $pid; var $objectTypes= array(); var $objectTypeCount= array(); + var $copyPasteHandler= null; + var $snapshotHandler= null; function listing($filename) @@ -76,6 +78,29 @@ class listing { } + function setCopyPasteHandler($handler) + { + $this->copyPasteHandler= &$handler; + } + + + function setSnapshotHandler($handler) + { + $this->snapshotHandler= &$handler; + } + + + function setFilter($filter) + { + $this->filter= &$filter; + if ($this->departmentBrowser){ + $this->departments= $this->getDepartments(); + } + $this->filter->setBase($this->base); + $this->entries= $this->filter->query(); + } + + function registerElementFilter($name, $call) { if (!isset($this->filters[$name])) { @@ -113,9 +138,16 @@ class listing { "objectClass" => $data['OC'], "image" => $data['IMG']); } + $this->categories= array(); if (isset($this->xmlData['definition']['objectType'])) { + if(isset($this->xmlData['definition']['objectType']['label'])) { + $this->xmlData['definition']['objectType']= array($this->xmlData['definition']['objectType']); + } foreach ($this->xmlData['definition']['objectType'] as $index => $otype) { $this->objectTypes[]= $this->xmlData['definition']['objectType'][$index]; + if (isset($this->xmlData['definition']['objectType'][$index]['category'])){ + $this->categories[]= $this->xmlData['definition']['objectType'][$index]['category']; + } } } @@ -128,6 +160,9 @@ class listing { // Assign headline/module $this->headline= _($this->xmlData['definition']['label']); $this->module= $this->xmlData['definition']['module']; + if (!is_array($this->categories)){ + $this->categories= array($this->categories); + } return true; } @@ -186,7 +221,10 @@ class listing { function render() { -echo "sizelimit, copypaste handler, snapshot handler, daemon handler
"; + // Check for exeeded sizelimit + if (($message= check_sizelimit()) != ""){ + return($message); + } // Initialize list $result= ""; @@ -232,11 +270,18 @@ echo "sizelimit, copypaste handler, snapshot handler, daemon handler
"; } // Render defined department columns, fill the rest with some stuff + $rest= $this->numColumns - 1; foreach ($this->xmlData['table']['department'] as $index => $config) { - $result.="colprops[$index]." class='list1'>".$this->renderCell($config['value'], $entry, $row).""; + $colspan= 1; + if (isset($config['span'])){ + $colspan= $config['span']; + } + $result.="colprops[$index]." class='list1'>".$this->renderCell($config['value'], $entry, $row).""; + $rest-= $colspan; } - $last= count($this->xmlData['table']['department']) + 1; - $rest= $this->numColumns - $last; + + // Fill remaining cols with nothing + $last= $this->numColumns - $rest; for ($i= 0; $i<$rest; $i++){ $result.= "colprops[$last+$i-1]." class='list1'> "; } @@ -248,26 +293,38 @@ echo "sizelimit, copypaste handler, snapshot handler, daemon handler
"; } // Fill with contents, sort as configured - $entryIterator= new listingSortIterator($this->entries, $this->sortDirection[$this->sortColumn], $this->sortAttribute, $this->sortType); - foreach ($entryIterator as $row => $entry){ - $result.=""; + foreach ($this->entry as $row => $entry) { + $trow =""; // Render multi select if needed if ($this->multiSelect) { - $result.=""; + $trow.=""; } foreach ($this->xmlData['table']['column'] as $index => $config) { - $result.="colprops[$index]." class='list0'>".$this->renderCell($config['value'], $entry, $row).""; + $renderedCell= $this->renderCell($config['value'], $entry, $row); + $trow.="colprops[$index]." class='list0'>".$renderedCell.""; + + // Save rendered column + $this->entry[$row]["_sort$index"]= $renderedCell; } - $result.=""; + $trow.=""; + + // Save rendered entry + $this->entry[$row]['_rendered']= $trow; $alt++; } + // 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){ + $result.= $entry['_rendered']; + } + // Need to fill the list if it's not full (nobody knows why this is 22 ;-)) - $emptyListStyle= (count($this->entries) + count($deps) == 0)?"border:0;":""; - if (count($this->entries) + count($deps) < 22) { + $emptyListStyle= (count($this->entries) + $deps == 0)?"border:0;":""; + if ((count($this->entries) + $deps) < 22) { $result.= ""; for ($i= 0; $i<$this->numColumns; $i++) { if ($i == 0) { @@ -303,6 +360,7 @@ echo "sizelimit, copypaste handler, snapshot handler, daemon handler
"; $smarty= get_smarty(); $smarty->assign("FILTER", $this->filter->render()); + $smarty->assign("SIZELIMIT", print_sizelimit_warning()); $smarty->assign("LIST", $result); // Assign navigation elements @@ -325,22 +383,14 @@ echo "sizelimit, copypaste handler, snapshot handler, daemon handler
"; } - function setFilter($filter) - { - $this->filter= &$filter; - if ($this->departmentBrowser){ - $this->departments= $this->getDepartments(); - } - $this->filter->setBase($this->base); - $this->entries= $this->filter->query(); - } - - function update() { global $config; $ui= get_userinfo(); + // Reset object counter + $this->objectTypeCount= array(); + // Do not do anything if this is not our PID if(isset($_REQUEST['PID']) && $_REQUEST['PID'] != $this->pid) { return; @@ -476,6 +526,10 @@ echo "sizelimit, copypaste handler, snapshot handler, daemon handler
"; // Watch out for filters and prepare to execute them $data= $this->processElementFilter($data, $config, $row); + // Replace all non replaced %{...} instances because they + // are non resolved attributes or filters + $data= preg_replace('/%{[^}]+}/', ' ', $data); + return $data; } @@ -666,19 +720,21 @@ echo "sizelimit, copypaste handler, snapshot handler, daemon handler
"; } // Handle special types - if ($action['type'] == "snapshot") { - #TODO - #echo "actiontriggers: snapshot missing
"; - } - if ($action['type'] == "copypaste") { - #TODO - #echo "actiontriggers: copypaste missing
"; - } - if ($action['type'] == "daemon") { - #TODO - #echo "actiontriggers: daemon missing
"; - } + if ($action['type'] == "copypaste" || $action['type'] == "snapshot") { + $objectType= $this->getObjectType($this->objectTypes, $this->entries[$row]['objectClass']); + $category= $class= null; + if ($objectType) { + $category= $objectType['category']; + $class= $objectType['class']; + } + + if ($action['type'] == "copypaste") { + $result.= $this->renderCopyPasteActions($row, $this->entries[$row]['dn'], $category, $class); + } else { + $result.= $this->renderSnapshotActions($row, $this->entries[$row]['dn'], $category, $class); + } + } } return $result; @@ -860,7 +916,7 @@ echo "sizelimit, copypaste handler, snapshot handler, daemon handler
"; $actions= &$this->xmlData['actionmenu']['action']; $result= "". "