X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_sortableListing.inc;h=a30758ebc3c3ccba455edc2e079eeecb61530b65;hb=05b1b86cf7628a526d3e74dee3d7dfe836b92cf5;hp=cf7a5e66fd555f03133d0d6d96ec9053ab34e76b;hpb=e0f580ea83145b6e0d1411149e0962e0b19a9c0d;p=gosa.git diff --git a/gosa-core/include/class_sortableListing.inc b/gosa-core/include/class_sortableListing.inc index cf7a5e66f..a30758ebc 100644 --- a/gosa-core/include/class_sortableListing.inc +++ b/gosa-core/include/class_sortableListing.inc @@ -1,7 +1,7 @@ setData($data); - if (!$displayData) { - $displayData= array(); - foreach ($data as $value) { - $displayData[]= array($value); - } - } - - $this->setDisplayData($displayData); + $this->setListData($data, $displayData); // Generate instance wide unique ID $tmp= gettimeofday(); @@ -74,6 +72,20 @@ class sortableListing { } + 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; @@ -87,10 +99,18 @@ class sortableListing { } // Transfer information - $this->displayData= $data; + $this->displayData= array(); + $this->modes= 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); + $this->mapping= range(0, abs(count($this->keys)-1)); $this->current_mapping= $this->mapping; // Find the number of coluns @@ -121,6 +141,12 @@ class sortableListing { } + public function setColorAlternate($flag) + { + $this->colorAlternate= $flag; + } + + public function setEditable($flag) { $this->editable= $flag; @@ -159,8 +185,8 @@ class sortableListing { public function render() { - $result= "
\n"; - $result.= "cssclass)?" class='".$this->cssclass."'":"").">\n"; + $result= "
\n"; + $result.= "
cssclass)?" class='".$this->cssclass."'":"").">\n"; $action_width= 0; if (strpos($this->acl, 'w') === false) { $edit_image= $this->editable?""._("Edit")."":""; @@ -178,12 +204,12 @@ class sortableListing { if ($this->colspecs) { $result.= " \n"; for ($i= 0; $i<$this->columns; $i++) { - $result.= " \n"; + $result.= " \n"; } // Extend by another column if we've actions specified if ($action_width) { - $result.= " \n"; + $result.= " \n"; } $result.= " \n"; } @@ -191,6 +217,7 @@ class sortableListing { // Do we need a header? if ($this->header) { $result.= " \n \n"; + $first= " style='border:0'"; for ($i= 0; $i<$this->columns; $i++) { $link= "href='?plug=".$_GET['plug']."&PID=".$this->id."&act=SORT_$i'"; $sorter= ""; @@ -199,10 +226,11 @@ class sortableListing { } if ($this->reorderable) { - $result.= " "; + $result.= " ".(isset($this->header[$i])?$this->header[$i]:"").""; } else { - $result.= " "; + $result.= " ".(isset($this->header[$i])?$this->header[$i]:"")."$sorter"; } + $first= ""; } if ($action_width) { $result.= ""; @@ -216,16 +244,33 @@ class sortableListing { if (strpos($this->acl, 'r') !== false) { foreach ($this->mapping as $nr => $row) { $editable= $this->editable?" onclick='$(\"edit_".$this->id."_$nr\").click()'":""; - $result.= " \n"; + + $id= ""; + if (isset($this->modes[$row])) { + switch ($this->modes[$row]) { + case LIST_DISABLED: + $id= " sortableListItemDisabled"; + $editable= ""; + break; + case LIST_MARKED: + $id= " sortableListItemMarked"; + break; + } + } + + $result.= " \n"; $first= " style='border:0'"; + foreach ($this->displayData[$row] as $column) { - $result.= " ".htmlentities($column)."\n"; + $result.= " ".$column."\n"; $first= ""; } + if ($action_width) { $result.= ""; } + $result.= " \n"; } } @@ -286,6 +331,15 @@ class sortableListing { $this->sortData(); } } + } + + + public function save_object() + { + // 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; + } // Do not do anything if we're not posted - or have no permission if (strpos($this->acl, 'w') !== false && isset($_POST['reorder_'.$this->id])){ @@ -315,7 +369,17 @@ class sortableListing { foreach ($_POST as $key => $value) { if (preg_match('/^del_'.$this->id.'_([0-9]+)_x.*$/', $key, $matches)) { $this->active_index= $this->mapping[$matches[1]]; + + // Ignore request if mode requests it + if (isset($this->modes[$this->active_index]) && $this->modes[$this->active_index] == LIST_DISABLED) { + $this->active_index= null; + continue; + } + + // Set action $this->action= "delete"; + + // Remove value if requested if ($this->instantDelete) { $this->deleteEntry($this->active_index); } @@ -328,6 +392,13 @@ class sortableListing { foreach ($_POST as $key => $value) { if (preg_match('/^edit_'.$this->id.'_([0-9]+)_x.*$/', $key, $matches)) { $this->active_index= $this->mapping[$matches[1]]; + + // Ignore request if mode requests it + if (isset($this->modes[$this->active_index]) && $this->modes[$this->active_index] == LIST_DISABLED) { + $this->active_index= null; + continue; + } + $this->action= "edit"; } } @@ -371,7 +442,7 @@ class sortableListing { $tmp= array(); foreach ($this->mapping as $src => $dst) { - $tmp[$src]= $this->data[$dst]; + $tmp[$this->keys[$dst]]= $this->data[$dst]; } return $tmp; @@ -417,19 +488,43 @@ class sortableListing { } - public function addEntry($entry, $displayEntry= null) + public function addEntry($entry, $displayEntry= null, $key= null) { + // Only add if not already there + if (!$key) { + if (in_array($entry, $this->data)) { + return; + } + } else { + if (isset($this->data[$key])) { + return; + } + } + // Prefill with default value if not specified if (!$displayEntry) { - $displayEntry= array($entry); + $displayEntry= array('data' => array($entry)); } // Append to data and mapping - $this->data[]= $entry; - $this->displayData[]= $displayEntry; + if ($key) { + $this->data[$key]= $entry; + $this->keys[]= $key; + } else { + $this->data[]= $entry; + $this->keys[]= count($this->mapping); + } + $this->displayData[]= $displayEntry['data']; $this->mapping[]= count($this->mapping); $this->modified= true; + + // Sort data after we've added stuff + $this->sortData(); } + public function getKey($index) { + return isset($this->keys[$index])?$this->keys[$index]:null; + } + }
".(isset($this->header[$i])?$this->header[$i]:"")."".(isset($this->header[$i])?$this->header[$i]:"")."$sorter 
".str_replace('%ID', "edit_".$this->id."_$nr", $edit_image). str_replace('%ID', "del_".$this->id."_$nr", $delete_image)."