From: hickert Date: Mon, 29 Mar 2010 12:38:17 +0000 (+0000) Subject: Added release selector X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=9ede1204f7efd7b44755c39c244bc98ba356bec2;p=gosa.git Added release selector git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@17347 594d385d-05f5-0310-b6e9-bd551577e9d8 --- diff --git a/gosa-core/include/class_releaseSelector.inc b/gosa-core/include/class_releaseSelector.inc new file mode 100644 index 000000000..dc98422c4 --- /dev/null +++ b/gosa-core/include/class_releaseSelector.inc @@ -0,0 +1,252 @@ +pid= preg_replace("/[^0-9]/", "", microtime(TRUE)); + + // Transfer data + $this->releaseBase = $releaseBase; + $this->releaseInfo = $bases; + $this->setBases($bases); + $this->setBase($base); + } + + + function setSubmitButton($flag) + { + $this->submitButton= $flag; + } + + + function setHeight($value) + { + $this->height= $value; + } + + + function setBase($base) + { + if (isset($this->pathMapping[$base])) { + $this->base= $base; + $this->update(true); + } + } + + + function checkBase($base) + { + return isset($this->pathMapping[$base]); + } + + + function checkLastBaseUpdate() + { + return $this->lastState; + } + + + function setBases($bases) + { + global $config; + + $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))); + } + + // Save bases to session for autocompletion + session::global_set('pathMapping', $this->pathMapping); + } + + + function update($force= false) + { + global $config; + + // Analyze for base changes if needed + $this->action= null; + $last_base= $this->base; + if(isset($_REQUEST['BPID']) && $_REQUEST['BPID'] == $this->pid) { + if (isset($_POST['bs_rebase_'.$this->pid]) && !empty($_POST['bs_rebase_'.$this->pid])) { + $new_base= base64_decode($_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.'_x']) || !$this->submitButton) { + + // Check if base is available + $this->lastState= false; + foreach ($this->pathMapping as $key => $path) { + if (mb_strtolower($path) == mb_strtolower($_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=\"Element.clonePosition(\$('bs_".$this->pid."'), 'bs_input_".$this->pid."', {setHeight: false, setWidth: false, offsetTop:(Element.getHeight('bs_input_".$this->pid."'))});\$('bs_".$this->pid."').show();\" onmouseout=\"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']) || $_REQUEST['BPID'] != $this->pid) { + return; + } + + if ($this->action) { + return array("targets" => array($this->base), "action" => $this->action); + } + + return null; + } + +} + +?>