X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_listing.inc;h=485a0aff701a6efe14df28591ed4a046dc78fcbe;hb=d5f42389530849d171b1dc22de1c591c5feedd38;hp=3152261315bf622e870a439b4cde30fcc47ca6a5;hpb=efdf0c903b27945c4cf57c628005ffc3a5263a93;p=gosa.git diff --git a/gosa-core/include/class_listing.inc b/gosa-core/include/class_listing.inc index 315226131..485a0aff7 100644 --- a/gosa-core/include/class_listing.inc +++ b/gosa-core/include/class_listing.inc @@ -45,6 +45,7 @@ class listing { var $pid; var $objectTypes= array(); var $objectTypeCount= array(); + var $objectDnMapping= array(); var $copyPasteHandler= null; var $snapshotHandler= null; var $exporter= array(); @@ -255,6 +256,7 @@ class listing { } } + function render() { // Check for exeeded sizelimit @@ -270,25 +272,23 @@ class listing { $height= $this->height; } - $result.= "
\n"; - $result.= " -"; // Add the footer if requested if ($this->showFooter) { - $result.= ""; + $result.= ""; } - $result.= "
\n"; + $result.= "
\n"; - - // New table for the real list contents - $result.= ""; + // Close list body + $result.= "
\n"; + + $result.= "\n"; $this->numColumns= count($this->colprops) + ($this->multiSelect?1:0); // Build list header - $result.= "\n"; + $result.= "\n"; if ($this->multiSelect) { - $result.= "\n"; + $result.= "\n"; } foreach ($this->header as $header) { $result.= $header; } + $result.= "\n"; - // Add 13px for scroller - $result.= "
 
\n"; + // Build list body + $result.= "\n"; // No results? Just take an empty colspanned row if (count($this->entries) + count($this->departments) == 0) { @@ -309,7 +309,7 @@ class listing { // Render multi select if needed if ($this->multiSelect) { - $result.=""; + $result.=""; } // Render defined department columns, fill the rest with some stuff @@ -389,11 +389,12 @@ class listing { $result.= ""; } - $result.= "
  
"; + $result.= "
"; foreach ($this->objectTypes as $objectType) { if (isset($this->objectTypeCount[$objectType['label']])) { @@ -402,12 +403,14 @@ class listing { } } - $result.= " 
"; + // Close list + $result.= ""; $smarty= get_smarty(); + $smarty->assign("usePrototype", "true"); $smarty->assign("FILTER", $this->filter->render()); $smarty->assign("SIZELIMIT", print_sizelimit_warning()); $smarty->assign("LIST", $result); @@ -437,8 +440,9 @@ class listing { global $config; $ui= get_userinfo(); - // Reset object counter + // 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) { @@ -447,9 +451,10 @@ class listing { // Save base if (isset($_POST['BASE']) && $this->baseMode) { - $base= validate($_POST['BASE']); + $base= get_post('BASE'); if (isset($this->bases[$base])) { $this->base= $base; + session::global_set("CurrentMainBase", $this->base); } } @@ -551,32 +556,38 @@ class listing { $layout= preg_replace("/^\|/", "", $layout); $layout= preg_replace("/\|$/", "", $layout); $cols= split("\|", $layout); + foreach ($cols as $index => $config) { if ($config != "") { + $res= ""; $components= split(';', $config); - $config= ""; foreach ($components as $part) { if (preg_match("/^r$/", $part)) { - $config.= "text-align:right;"; + $res.= "text-align:right;"; continue; } if (preg_match("/^l$/", $part)) { - $config.= "text-align:left;"; + $res.= "text-align:left;"; continue; } if (preg_match("/^c$/", $part)) { - $config.= "text-align:center;"; + $res.= "text-align:center;"; continue; } if (preg_match("/^[0-9]+(|px|%)$/", $part)) { - $config.= "width:$part;"; + $res.= "width:$part;min-width:$part;"; continue; } } - $result[$index]= " style='$config' "; + // Add minimum width for scalable columns + if (!preg_match('/width:/', $res)){ + $res.= "min-width:200px;"; + } + + $result[$index]= " style='$res' "; } else { - $result[$index]= null; + $result[$index]= " style='min-width:100px'"; } } @@ -634,8 +645,10 @@ class listing { $selected= " selected"; $found= true; } - $result.= ""; + $key = htmlentities($key,ENT_QUOTES); + $result.= "\n"; } + $result.= ""; // Reset the currently used base to the first DN we found if there @@ -653,11 +666,18 @@ class listing { preg_match_all("/%\{filter:([^(]+)\((.*)\)\}/", $data, $matches, PREG_SET_ORDER); foreach ($matches as $match) { - if (!isset($this->filters[$match[1]])) { - continue; + $cl= ""; + $method= ""; + if (preg_match('/::/', $match[1])) { + $cl= preg_replace('/::.*$/', '', $match[1]); + $method= preg_replace('/^.*::/', '', $match[1]); + } else { + if (!isset($this->filters[$match[1]])) { + continue; + } + $cl= preg_replace('/::.*$/', '', $this->filters[$match[1]]); + $method= preg_replace('/^.*::/', '', $this->filters[$match[1]]); } - $cl= preg_replace('/::.*$/', '', $this->filters[$match[1]]); - $method= preg_replace('/^.*::/', '', $this->filters[$match[1]]); // Prepare params for function call $params= array(); @@ -674,6 +694,11 @@ class listing { $params[]= $this->pid; } + // base is replaced by the current base + if ($param == "base") { + $params[]= $this->getBase(); + } + // Fixie with "" is passed directly if (preg_match('/^".*"$/', $param)){ $params[]= preg_replace('/"/', '', $param); @@ -749,12 +774,14 @@ class listing { $objectType= $this->getObjectType($this->objectTypes, $classes); if ($objectType) { + $this->objectDnMapping[$dn]= $objectType["objectClass"]; $result= ""; if (!isset($this->objectTypeCount[$objectType['label']])) { $this->objectTypeCount[$objectType['label']]= 0; } $this->objectTypeCount[$objectType['label']]++; } + return $result; } @@ -772,9 +799,28 @@ class listing { foreach($actions as $action) { // Skip the entry completely if there's no permission to execute it if (!$this->hasActionPermission($action, $dn)) { + $result.= " "; continue; } + // Skip entry if the pseudo filter does not fit + if (isset($action['filter']) && preg_match('/^[a-z0-9_]+!?=[a-z0-9_]+$/i', $action['filter'])) { + list($fa, $fv)= split('=', $action['filter']); + if (preg_match('/^(.*)!$/', $fa, $m)){ + $fa= $m[1]; + if (isset($this->entries[$row][$fa]) && $this->entries[$row][$fa][0] == $fv) { + $result.= " "; + continue; + } + } else { + if (!isset($this->entries[$row][$fa]) && !$this->entries[$row][$fa][0] == $fv) { + $result.= " "; + continue; + } + } + } + + // If there's an objectclass definition and we don't have it // add an empty picture here. if (isset($action['objectclass'])){ @@ -1004,7 +1050,7 @@ class listing { // Load shortcut $actions= &$this->xmlData['actionmenu']['action']; $result= "
". - "