X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_sortableListing.inc;h=3af979b285c2ac88fa4a9f016fb592e53e15da6c;hb=9c309d6fc3d3ff65caf535b6f53ea3177433d29b;hp=f545cb74ec3e764d2a23cc15fd854c6eb199b6e1;hpb=8b8c3b9c0e407178bb44d18b94829aa156b747e4;p=gosa.git diff --git a/gosa-core/include/class_sortableListing.inc b/gosa-core/include/class_sortableListing.inc index f545cb74e..3af979b28 100644 --- a/gosa-core/include/class_sortableListing.inc +++ b/gosa-core/include/class_sortableListing.inc @@ -60,9 +60,27 @@ class sortableListing { // Save data to display $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(microtime().$tmp['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; @@ -71,6 +89,15 @@ class sortableListing { } } + public function setReorderable($bool) + { + $this->reorderable= $bool; + } + + public function setDefaultSortColumn($id) + { + $this->sortColumn = $id; + } public function setListData($data, $displayData= null) { @@ -126,9 +153,10 @@ class sortableListing { } // Preset sort orders to 'down' - if(!count($this->sortDirection)) for ($column= 0; $column<$this->columns; $column++) { - $this->sortDirection[$column]= true; + if(!isset($this->sortDirection[$column])){ + $this->sortDirection[$column]= true; + } } } @@ -204,7 +232,7 @@ class sortableListing { } // Do we need colspecs? - $action_width= ($this->editable?20:0) + ($this->deleteable?20:0); + $action_width= ($this->editable?30:0) + ($this->deleteable?30:0); if ($this->colspecs) { $result.= " \n"; for ($i= 0; $i<$this->columns; $i++) { @@ -230,7 +258,7 @@ class sortableListing { $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]?_("Up"):_("Down")); + $sorter= " ".image("images/lists/sort-".($this->sortDirection[$i]?"up":"down").".png", null, $this->sortDirection[$i]?_("Sort ascending"):_("Sort descending")); } if ($this->reorderable) { @@ -318,16 +346,14 @@ class sortableListing { public function update() { - // Do not do anything if this is not our PID, or there's even no PID available... - if(isset($_REQUEST['PID']) && $_REQUEST['PID'] != $this->id) { - return; - } // Filter GET with "act" attributes if (!$this->reorderable){ - if(isset($_GET['act'])) { + if(isset($_GET['act']) && isset($_GET['PID']) && $this->id == $_GET['PID']) { + $key= validate($_GET['act']); if (preg_match('/^SORT_([0-9]+)$/', $key, $match)) { + // Switch to new column or invert search order? $column= $match[1]; if ($this->sortColumn != $column) { @@ -338,7 +364,7 @@ class sortableListing { } } - + // Update mapping according to sort parameters $this->sortData(); } @@ -474,6 +500,8 @@ class sortableListing { public function sortData() { + if(!count($this->data)) return; + // Extract data $tmp= array(); foreach($this->displayData as $item) { @@ -529,6 +557,23 @@ class sortableListing { $this->mapping[]= count($this->mapping); $this->modified= true; + // Find the number of coluns + 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; + } + } + + // Sort data after we've added stuff $this->sortData(); }