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_strict($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; } } ?>