[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= "") { // Initialize pid $this->pid= preg_replace("/[^0-9]/", "", microtime(TRUE)); // Transfer data $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 setBases($bases) { global $config; $this->pathMapping= array(); $selected= $this->base == $config->current['BASE']?"Selected":""; $first= true; $last_indent= 2; foreach ($bases as $base => $dummy) { // Build path style display $elements= explode(',', substr($base, 0, strlen($base) - strlen($config->current['BASE']))); $elements= array_reverse($elements, true); $this->pathMapping[$base]= $base == $config->current['BASE']? '/' : 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 { return false; } } } elseif (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 foreach ($this->pathMapping as $key => $path) { if (mb_strtolower($path) == mb_strtolower($_POST['bs_input_'.$this->pid])) { $this->base= $key; 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=\"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 == $config->current['BASE']?"Selected":""; $this->tree.= "\n"; // Draw submitter if required if ($this->submitButton) { $this->tree.= " "; } $this->tree.= ""; $this->tree.= ""; $this->tree.= ""; return true; } 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; } } ?>