X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_listing.inc;h=ecaaf244c894de9c0d71e3545c64d91d0d94e1ec;hb=62c2547a71af33f8815bf3627822599c95153527;hp=e2bdb9a44a2d7e608db8d888dbf9cc66f59bea41;hpb=fdc518a8263e1cf9d6c6dd76970e60a0e5e21924;p=gosa.git diff --git a/gosa-core/include/class_listing.inc b/gosa-core/include/class_listing.inc index e2bdb9a44..ecaaf244c 100644 --- a/gosa-core/include/class_listing.inc +++ b/gosa-core/include/class_listing.inc @@ -47,11 +47,15 @@ class listing { var $objectTypeCount= array(); var $copyPasteHandler= null; var $snapshotHandler= null; + var $exporter= array(); + var $exportColumns= array(); + var $showExporter= false; function listing($filename) { global $config; + global $class_mapping; // Initialize pid $this->pid= preg_replace("/[^0-9]/", "", microtime(TRUE)); @@ -75,6 +79,14 @@ class listing { $this->registerElementFilter("departmentLink", "listing::filterDepartmentLink"); $this->registerElementFilter("link", "listing::filterLink"); $this->registerElementFilter("actions", "listing::filterActions"); + + // Load exporters + foreach($class_mapping as $class => $dummy) { + if (preg_match('/Exporter$/', $class)) { + $info= call_user_func(array($class, "getInfo")); + $this->exporter= array_merge($this->exporter, $info); + } + } } @@ -164,6 +176,15 @@ class listing { $this->categories= array($this->categories); } + // Evaluate columns to be exported + if (isset($this->xmlData['table']['column'])){ + foreach ($this->xmlData['table']['column'] as $index => $config) { + if (isset($config['export']) && $config['export'] == "true"){ + $this->exportColumns[]= $index; + } + } + } + return true; } @@ -171,6 +192,7 @@ class listing { function renderHeader() { $this->header= array(); + $this->plainHeader= array(); // Initialize sort? $sortInit= false; @@ -208,12 +230,14 @@ class listing { } else { $this->header[$index]= "colprops[$index].">"._($config['label']).""; } + $this->plainHeader[]= _($config['label']); } else { if ($sortable) { $this->header[$index]= "colprops[$index]."> $sorter"; } else { $this->header[$index]= "colprops[$index]."> "; } + $this->plainHeader[]= ""; } } } @@ -227,26 +251,26 @@ class listing { } // Initialize list - $result= ""; - $result.= "
"; + $result= "\n"; + $result.= "
\n"; $result.= " -\n"; // New table for the real list contents - $result.= "
"; +"; + $result.= "
\n"; $this->numColumns= count($this->colprops) + ($this->multiSelect?1:0); // Build list header - $result.= ""; + $result.= "\n"; if ($this->multiSelect) { - $result.= ""; + $result.= "\n"; } foreach ($this->header as $header) { $result.= $header; } // Add 13px for scroller - $result.= "
 
 
"; + $result.= "
\n"; // No results? Just take an empty colspanned row if (count($this->entries) + count($this->departments) == 0) { @@ -293,33 +317,37 @@ class listing { } // Fill with contents, sort as configured - foreach ($this->entry as $row => $entry) { - $trow =""; + foreach ($this->entries as $row => $entry) { + $trow= ""; // Render multi select if needed if ($this->multiSelect) { - $trow.=""; + $trow.="\n"; } foreach ($this->xmlData['table']['column'] as $index => $config) { $renderedCell= $this->renderCell($config['value'], $entry, $row); - $trow.=""; + $trow.="\n"; // Save rendered column - $this->entry[$row]["_sort$index"]= $renderedCell; + $sort= preg_replace('/.*>([^<]+)<.*$/', '$1', $renderedCell); + if (preg_match('/entries[$row]["_sort$index"]= $sort; } - $trow.=""; // Save rendered entry - $this->entry[$row]['_rendered']= $trow; - - $alt++; + $this->entries[$row]['_rendered']= $trow; } // 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.= $entry['_rendered']; + $result.="\n"; } // Need to fill the list if it's not full (nobody knows why this is 22 ;-)) @@ -358,6 +386,12 @@ class listing { $result.= "
colprops[$index]." class='list0'>".$renderedCell."colprops[$index]." class='list0'>".$renderedCell."
"; + // Open export window? + if ($this->showExporter) { + $result.= ""; + $this->showExporter= false; + } + $smarty= get_smarty(); $smarty->assign("FILTER", $this->filter->render()); $smarty->assign("SIZELIMIT", print_sizelimit_warning()); @@ -413,6 +447,20 @@ class listing { } } + // Filter POST with "act" attributes -> posted from action menu + if (isset($_POST['act']) && $_POST['act'] != '') { + if (preg_match('/^export.*$/', $_POST['act']) && isset($this->exporter[$_POST['act']])) { + $exporter= $this->exporter[$_POST['act']]; + $instance= new $exporter['class']($this->plainHeader, $this->entries, $this->exportColumns); + $type= call_user_func(array($exporter['class'], "getInfo")); + $type= $type[$_POST['act']]; + session::set('binarytype', $type['mime']); + session::set('binaryfile', $type['filename']); + session::set('binary', $instance->query()); + $this->showExporter= true; + } + } + // Filter GET with "act" attributes if (isset($_GET['act'])) { $key= validate($_GET['act']); @@ -467,6 +515,18 @@ class listing { } + function getBase($base) + { + $this->base= $base; + } + + + function setBase() + { + return $this->base; + } + + function parseLayout($layout) { $result= array(); @@ -894,7 +954,9 @@ class listing { // Filter POST with "act" attributes -> posted from action menu if (isset($_POST['act']) && $_POST['act'] != '') { - $result['action']= validate($_POST['act']); + if (!preg_match('/^export.*$/', $_POST['act'])){ + $result['action']= validate($_POST['act']); + } } // Drop targets if empty @@ -976,6 +1038,10 @@ class listing { $result.= $this->renderSnapshotMenu($separator); break; + case 'exporter': + $result.= $this->renderExporterMenu($separator); + break; + case 'daemon': $result.= $this->renderDaemonMenu($separator); break; @@ -1243,6 +1309,26 @@ class listing { } + function renderExporterMenu($separator) + { + // Presets + $result = ""; + + // Draw entries + $result.= " "._("Export list")." 
    "; + + // Export CVS as build in exporter + foreach ($this->exporter as $action => $exporter) { + $result.= "
  •  ".$exporter['label']."
  • "; + } + + // Finalize list + $result.= "
"; + + return($result); + } + + function renderSnapshotActions($row, $dn, $category, $class, $copy= true, $cut= true) { // We can only provide information if we've got a snapshot handler