X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_sortableListing.inc;h=3af979b285c2ac88fa4a9f016fb592e53e15da6c;hb=9c309d6fc3d3ff65caf535b6f53ea3177433d29b;hp=d023584cf3461e53f744fbe954c69b0983c0ea34;hpb=2809bd260565adcde6063b8b8324585b64ee328e;p=gosa.git diff --git a/gosa-core/include/class_sortableListing.inc b/gosa-core/include/class_sortableListing.inc index d023584cf..3af979b28 100644 --- a/gosa-core/include/class_sortableListing.inc +++ b/gosa-core/include/class_sortableListing.inc @@ -1,9 +1,9 @@ setData($data); + $this->setListData($data, $displayData); + + // Get list of used IDs + if(!session::is_set('sortableListing_USED_IDS')){ + session::set('sortableListing_USED_IDS',array()); + } + $usedIds = session::get('sortableListing_USED_IDS'); // Generate instance wide unique ID - $tmp= gettimeofday(); - $this->id= 'l'.md5($t['sec']); + $id = ""; + while($id == "" || in_array($id, $usedIds)){ + + // Wait 1 msec to ensure that we definately get a new id + if($id != "") usleep(1); + $tmp= gettimeofday(); + $id = 'l'.md5(microtime().$tmp['sec']); + } + + // Only keep the last 10 list IDsi + $usedIds = array_slice($usedIds, count($usedIds) -10, 10); + $usedIds[] = $id; + session::set('sortableListing_USED_IDS',$usedIds); + $this->id = $id; + + // Set reorderable flag + $this->reorderable= $reorderable; + if (!$reorderable) { + $this->sortData(); + } } + public function setReorderable($bool) + { + $this->reorderable= $bool; + } + + public function setDefaultSortColumn($id) + { + $this->sortColumn = $id; + } - function setData($data) + public function setListData($data, $displayData= null) + { + // Save data to display + $this->setData($data); + if (!$displayData) { + $displayData= array(); + foreach ($data as $key => $value) { + $displayData[$key]= array("data" => array($value)); + } + } + $this->setDisplayData($displayData); + } + + + private function setData($data) + { + $this->data= $data; + } + + + private function setDisplayData($data) { if (!is_array($data)) { - die ("sortableList needs an array as data!"); + trigger_error ("sortableList needs an array as data!"); } // Transfer information - $this->data= $data; + $this->displayData= array(); + $this->modes= array(); + $this->mapping= array(); + foreach ($data as $key => $value) { + $this->displayData[]= $value['data']; + if (isset($value['mode'])) { + $this->modes[]= $value['mode']; + } + } + $this->keys= array_keys($data); // Create initial mapping - $this->mapping= array_keys($data); + if(count($this->keys)){ + $this->mapping= range(0, abs(count($this->keys)-1)); + } + $this->current_mapping= $this->mapping; // Find the number of coluns - reset($this->data); - $first= current($this->data); + reset($this->displayData); + $first= current($this->displayData); if (is_array($first)) { $this->columns= count($first); } else { $this->columns= 1; } + + // Preset sort orders to 'down' + for ($column= 0; $column<$this->columns; $column++) { + if(!isset($this->sortDirection[$column])){ + $this->sortDirection[$column]= true; + } + } } - function setWidth($width) + public function setWidth($width) { $this->width= $width; } - function setInstantDelete($flag) + public function setInstantDelete($flag) { $this->instantDelete= $flag; } - function setEditable($flag) + public function setColorAlternate($flag) + { + $this->colorAlternate= $flag; + } + + + public function setEditable($flag) { $this->editable= $flag; } - function setDeleteable($flag) + public function setDeleteable($flag) { $this->deleteable= $flag; } - function setHeight($height) + public function setHeight($height) { $this->height= $height; } - function setCssClass($css) + public function setCssClass($css) { $this->cssclass= $css; } - function setHeader($header) + public function setHeader($header) { $this->header= $header; } - function setColspecs($specs) + public function setColspecs($specs) { $this->colspecs= $specs; } - function render() + public function render() { - $result= "
".(isset($this->header[$i])?$this->header[$i]:"")." | "; + $link= "href='?plug=".$_GET['plug']."&PID=".$this->id."&act=SORT_$i'"; + $sorter= ""; + if ($i == $this->sortColumn){ + $sorter= " ".image("images/lists/sort-".($this->sortDirection[$i]?"up":"down").".png", null, $this->sortDirection[$i]?_("Sort ascending"):_("Sort descending")); + } + + if ($this->reorderable) { + $result.= "".(isset($this->header[$i])?$this->header[$i]:"")." | "; + } else { + $result.= "".(isset($this->header[$i])?$this->header[$i]:"")."$sorter | "; + } + $first= ""; } if ($action_width) { $result.= ""; @@ -159,43 +274,116 @@ class sortableListing { $result.= "\n |
---|---|---|---|
".htmlentities($column)." | \n"; - } - if ($action_width) { - $result.= "".str_replace('%ID', "edit_".$this->id."_$nr", $edit_image). - str_replace('%ID', "del_".$this->id."_$nr", $delete_image)." | "; + $reorderable= $this->reorderable?"":" style='cursor:default'"; + if (strpos($this->acl, 'r') !== false) { + foreach ($this->mapping as $nr => $row) { + $editable= $this->editable?" onClick='$(\"edit_".$this->id."_$nr\").click()'":""; + + $id= ""; + if (isset($this->modes[$row])) { + switch ($this->modes[$row]) { + case LIST_DISABLED: + $id= " sortableListItemDisabled"; + $editable= ""; + break; + case LIST_MARKED: + $id= " sortableListItemMarked"; + break; + } + } + + $result.= "||
".$column." | \n"; + $first= ""; + } + + if ($action_width) { + $result.= "".str_replace('%ID', "edit_".$this->id."_$nr", $edit_image). + str_replace('%ID', "del_".$this->id."_$nr", $delete_image)." | "; + } + + $result.= "||
"; + $num= $action_width?$this->columns:$this->columns-1; + for ($i= 0; $i<$num; $i++) { + $result.= " | "; + } + $result.= " |