From 64e51b5a49e72104ad747546bd00d8ff240dcd09 Mon Sep 17 00:00:00 2001 From: hickert Date: Thu, 21 Oct 2010 14:16:12 +0000 Subject: [PATCH] Added new class ItemSelector git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@20113 594d385d-05f5-0310-b6e9-bd551577e9d8 --- gosa-core/include/class_ItemSelector.inc | 307 +++++++++++++++++++++++ 1 file changed, 307 insertions(+) create mode 100644 gosa-core/include/class_ItemSelector.inc diff --git a/gosa-core/include/class_ItemSelector.inc b/gosa-core/include/class_ItemSelector.inc new file mode 100644 index 000000000..88bdc56ec --- /dev/null +++ b/gosa-core/include/class_ItemSelector.inc @@ -0,0 +1,307 @@ +pid= preg_replace("/[^0-9]/", "", microtime(TRUE)); + + // Get list of used IDs + if(!session::is_set('releaseSelector_USED_IDS')){ + session::set('releaseSelector_USED_IDS',array()); + } + $usedIds = session::get('releaseSelector_USED_IDS'); + + // Generate instance wide unique ID + $pid = ""; + while($pid == "" || in_array($pid, $usedIds)){ + + // Wait 1 msec to ensure that we definately get a new id + if($pid != "") usleep(1); + $tmp= gettimeofday(); + $pid = 'l'.md5(microtime().$tmp['sec']); + } + + // Only keep the last 10 list IDsi + $usedIds = array_slice($usedIds, count($usedIds) -10, 10); + $usedIds[] = $pid; + session::set('releaseSelector_USED_IDS',$usedIds); + $this->pid = $pid; + + // Transfer data + $this->releaseBase = $releaseBase; + $this->setBases($bases); + $this->setBase($base); + } + + + function setSubmitButton($flag) + { + $this->submitButton= $flag; + } + + + function setHeight($value) + { + $this->height= $value; + } + + + function setBase($base) + { + $this->base= $base; + if (isset($this->pathMapping[$base])) { + $this->update(true); + } + } + + function setRootBase($base) + { + $this->releaseBase = $base; + } + + + function checkBase($base) + { + return isset($this->pathMapping[$base]); + } + + + function checkLastBaseUpdate() + { + return $this->lastState; + } + + + function setBases($bases) + { + global $config; + $this->releaseInfo = array(); + $this->pathMapping= array(); + $selected= $this->base == $this->releaseBase?"Selected":""; + $first= true; + $last_indent= 2; + + foreach ($bases as $base => $dummy) { + + // Build path style display + $elements= explode(',', substr($base, 0, strlen($base) - strlen($this->releaseBase))); + $elements= array_reverse($elements, true); + $this->pathMapping[$base]= $base == $this->releaseBase? '/' : ldap::fix(preg_replace('/(^|,)[a-z0-9]+=/i', '/', implode(',', $elements))); + + $this->releaseInfo[$base]['name'] = ldap::fix(preg_replace('/(^|,)[a-z0-9]+=/i', '', $elements[0])); + $this->releaseInfo[$base]['description'] = $dummy; + } + + // Save bases to session for autocompletion + session::global_set('pathMapping', $this->pathMapping); + session::global_set('department_info', $this->releaseInfo); + } + + + function update($force= false) + { + global $config; + + // Analyze for base changes if needed + $this->action= null; + $last_base= $this->base; + if(isset($_REQUEST["BPID_{$this->pid}"]) && $_REQUEST["BPID_{$this->pid}"] == $this->pid) { + if (isset($_POST['bs_rebase_'.$this->pid]) && !empty($_POST['bs_rebase_'.$this->pid])) { + $new_base= base64_decode(get_post('bs_rebase_'.$this->pid)); + if (isset($this->pathMapping[$new_base])) { + $this->base= $new_base; + $this->action= 'rebase'; + } else { + $this->lastState= false; + return false; + } + }else{ + // Input field set? + if (isset($_POST['bs_input_'.$this->pid])) { + + // Take over input field base + if ($this->submitButton && isset($_POST['submit_base_'.$this->pid]) || !$this->submitButton) { + + // Check if base is available + $this->lastState= false; + foreach ($this->pathMapping as $key => $path) { + if (mb_strtolower($path) == mb_strtolower(get_post('bs_input_'.$this->pid))) { + $this->base= $key; + $this->lastState= true; + break; + } + } + } + } + } + + } + + /* Skip if there's no change */ + if (($this->tree && $this->base == $last_base) && !$force) { + return true; + } + + $link= "onclick=\"\$('bs_rebase_".$this->pid."').value='".base64_encode($this->releaseBase)."'; + $('submit_tree_base_".$this->pid."').click();\""; + + $this->tree= "pid}').hide(); \" + onfocus=\" \$('bs_{$this->pid}').hide(); \" + onmouseover=\" mouseIsStillOver = true; + function showIt() + { + if(mouseIsStillOver){ + \$('bs_".$this->pid."').show(); + } + }; + Element.clonePosition(\$('bs_".$this->pid."'), + 'bs_input_".$this->pid."', + {setHeight: false, setWidth: false, offsetTop:(Element.getHeight('bs_input_".$this->pid."'))}); + rtimer=showIt.delay(0.25); \" + + onmouseout=\" mouseIsStillOver=false; + rtimer=Element.hide.delay(0.25,'bs_".$this->pid."')\" + + value=\"".preg_replace('/"/','"',$this->pathMapping[$this->base])."\">"; + + // Autocompleter + $this->tree.= "
". + ""; + + $selected= $this->base == $this->releaseBase?"Selected":""; + $this->tree.= "\n"; + + // Draw submitter if required + if ($this->submitButton) { + $this->tree.= image('images/lists/submit.png', "submit_base_".$this->pid, _("Submit")); + } + $this->tree.= ""; + $this->tree.= ""; + $this->tree.= ""; + + $this->lastState= true; + return true; + } + + + function gennonbreaks($string) + { + return str_replace('-', '‑', str_replace(' ', ' ', $string)); + } + + + function render() + { + return $this->tree; + } + + + function getBase() + { + return $this->base; + } + + + function getAction() + { + // Do not do anything if this is not our BPID, or there's even no BPID available... + if(!isset($_REQUEST["BPID_{$this->pid}"]) || $_REQUEST["BPID_{$this->pid}"] != $this->pid) { + return; + } + + if ($this->action) { + return array("targets" => array($this->base), "action" => $this->action); + } + + return null; + } + +} + +?> -- 2.30.2