X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_listing.inc;h=0f3a8594e833e8a2a94e6507d5f91b6844c4e72e;hb=7eada0d8c03ea6bbe6e0bf41a789de38715eba9e;hp=34afc1e095edb942deb0d8245f0cf979a38eabcf;hpb=42a7dda70fe0fa9ec489bb0d2b35446a165833bb;p=gosa.git diff --git a/gosa-core/include/class_listing.inc b/gosa-core/include/class_listing.inc index 34afc1e09..0f3a8594e 100644 --- a/gosa-core/include/class_listing.inc +++ b/gosa-core/include/class_listing.inc @@ -47,11 +47,14 @@ class listing { var $objectTypeCount= array(); var $copyPasteHandler= null; var $snapshotHandler= null; + var $exporter= array(); + var $exportColumns= array(); function listing($filename) { global $config; + global $class_mapping; // Initialize pid $this->pid= preg_replace("/[^0-9]/", "", microtime(TRUE)); @@ -61,11 +64,15 @@ class listing { } // Set base for filter - $this->base= session::global_get("CurrentMainBase"); - if ($this->base == null) { + if ($this->baseMode) { + $this->base= session::global_get("CurrentMainBase"); + if ($this->base == null) { + $this->base= $config->current['BASE']; + } + $this->refreshBasesList(); + } else { $this->base= $config->current['BASE']; } - $this->refreshBasesList(); // Move footer information $this->showFooter= ($config->get_cfg_value("listSummary") == "true"); @@ -75,6 +82,16 @@ 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")); + if ($info != null) { + $this->exporter= array_merge($this->exporter, $info); + } + } + } } @@ -97,7 +114,6 @@ class listing { $this->departments= $this->getDepartments(); } $this->filter->setBase($this->base); - $this->entries= $this->filter->query(); } @@ -164,6 +180,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 +196,7 @@ class listing { function renderHeader() { $this->header= array(); + $this->plainHeader= array(); // Initialize sort? $sortInit= false; @@ -208,12 +234,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[]= ""; } } } @@ -294,7 +322,7 @@ class listing { // Fill with contents, sort as configured foreach ($this->entries as $row => $entry) { - $trow ="\n"; + $trow= ""; // Render multi select if needed if ($this->multiSelect) { @@ -306,20 +334,25 @@ class listing { $trow.="colprops[$index]." class='list0'>".$renderedCell."\n"; // Save rendered column - $this->entries[$row]["_sort$index"]= $renderedCell; + $sort= preg_replace('/.*>([^<]+)<.*$/', '$1', $renderedCell); + $sort= preg_replace('/ /', '', $sort); + if (preg_match('/entries[$row]["_sort$index"]= $sort; } - $trow.="\n"; // Save rendered entry $this->entries[$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){ + $alt++; + $result.="\n"; $result.= $entry['_rendered']; + $result.="\n"; } // Need to fill the list if it's not full (nobody knows why this is 22 ;-)) @@ -397,7 +430,7 @@ class listing { } // Save base - if (isset($_POST['BASE']) && $this->baseMode == true) { + if (isset($_POST['BASE']) && $this->baseMode) { $base= validate($_POST['BASE']); if (isset($this->bases[$base])) { $this->base= $base; @@ -413,6 +446,18 @@ class listing { } } + // Filter POST with "act" attributes -> posted from action menu + if (isset($_POST['exec_act']) && $_POST['act'] != '') { + if (preg_match('/^export.*$/', $_POST['act']) && isset($this->exporter[$_POST['act']])) { + $exporter= $this->exporter[$_POST['act']]; + $userinfo= ", "._("created by")." ".$ui->cn." - ".strftime('%A, %d. %B %Y, %H:%M:%S'); + $instance= new $exporter['class']($this->headline.$userinfo, $this->plainHeader, $this->entries, $this->exportColumns); + $type= call_user_func(array($exporter['class'], "getInfo")); + $type= $type[$_POST['act']]; + send_binary_content($instance->query(), $type['filename'], $type= $type['mime']); + } + } + // Filter GET with "act" attributes if (isset($_GET['act'])) { $key= validate($_GET['act']); @@ -467,6 +512,18 @@ class listing { } + function setBase($base) + { + $this->base= $base; + } + + + function getBase() + { + return $this->base; + } + + function parseLayout($layout) { $result= array(); @@ -536,6 +593,10 @@ class listing { function renderBase() { + if (!$this->baseMode) { + return; + } + $result= "". + $result= "
". "