X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_baseSelector.inc;h=0b26ffe0bbdda9f530448fe31c623eb7d1c6a110;hb=e1e757ca6816d818fa1a393b66f165ffefb1afe7;hp=28d0025c24aed26dae580ac3c6337d68506a6c36;hpb=f0e6fc49306dd18c2979b23069bbb80dd1c0a67f;p=gosa.git diff --git a/gosa-core/include/class_baseSelector.inc b/gosa-core/include/class_baseSelector.inc index 28d0025c2..0b26ffe0b 100644 --- a/gosa-core/include/class_baseSelector.inc +++ b/gosa-core/include/class_baseSelector.inc @@ -24,17 +24,13 @@ class baseSelector { private $base; private $pid; + private $action; + private $height= 500; + private $submitButton= true; protected $tree; protected $pathMapping; + protected $lastState; - // It would be better to get a dn -> [name, description, type] array - // to avoid these tasks be done several times. Skipping for the moment. - #'dc' => 'plugins/departments/images/domain.png', - #'dc' => 'plugins/departments/images/dc.png', - #'l' => 'plugins/departments/images/locality.png', - #'c' => 'plugins/departments/images/country.png', - #'o' => 'plugins/departments/images/organization.png', - #'ou' => 'plugins/departments/images/folder.png', function __construct($bases, $base= "") { @@ -44,7 +40,18 @@ class baseSelector { // Transfer data $this->setBases($bases); $this->setBase($base); - $this->update(); + } + + + function setSubmitButton($flag) + { + $this->submitButton= $flag; + } + + + function setHeight($value) + { + $this->height= $value; } @@ -52,12 +59,23 @@ class baseSelector { { if (isset($this->pathMapping[$base])) { $this->base= $base; - } else { - die("Invalid base selected"); + $this->update(true); } } + function checkBase($base) + { + return isset($this->pathMapping[$base]); + } + + + function checkLastBaseUpdate() + { + return $this->lastState; + } + + function setBases($bases) { global $config; @@ -74,20 +92,98 @@ class baseSelector { $elements= array_reverse($elements, true); $this->pathMapping[$base]= $base == $config->current['BASE']? '/' : ldap::fix(preg_replace('/(^|,)[a-z0-9]+=/i', '/', implode(',', $elements))); + $this->pathMapping[$base]= stripslashes( $this->pathMapping[$base]); } // Save bases to session for autocompletion session::global_set('pathMapping', $this->pathMapping); + session::global_set('department_info', $config->department_info); } - function update() + function update($force= false) { global $config; - $this->tree= "pid."').hide()\" onmouseover=\"\$('bs_".$this->pid."').show();pos = Element.positionedOffset('bs_input_".$this->pid."');\$('bs_".$this->pid."').setStyle({left: (pos[0]), top: (pos[1]+ Element.getHeight('bs_input_".$this->pid."'))});\" onmouseout=\"rtimer= Element.hide.delay(0.25, 'bs_".$this->pid."')\" value='".$this->pathMapping[$this->base]."'>"; + + // 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]) || !$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($config->current['BASE'])."'; $('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 == $config->current['BASE']?"Selected":""; - $this->tree.= "