Code

Updated toggle method
[gosa.git] / gosa-core / include / class_baseSelector.inc
index fa9ad7ddb2397d87611d9300233d6f75ce025153..4da32961e827ac04fa56158b03c0ad07e3a89090 100644 (file)
@@ -29,6 +29,7 @@ class baseSelector {
   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.
@@ -71,6 +72,18 @@ class baseSelector {
   }
 
 
+  function checkBase($base)
+  {
+    return isset($this->pathMapping[$base]);
+  }
+
+
+  function checkLastBaseUpdate()
+  {
+    return $this->lastState;
+  }
+
+
   function setBases($bases)
   {
     global $config;
@@ -101,29 +114,35 @@ class baseSelector {
     // Analyze for base changes if needed
     $this->action= null;
     $last_base= $this->base;
-    if(isset($_REQUEST['PID']) && $_REQUEST['PID'] == $this->pid) {
-      if (isset($_REQUEST['REBASE'])) {
-        $new_base= base64_decode($_REQUEST['REBASE']);
+    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;
         }
-      }
-    } 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;
+      }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;
+              }
+            }
           }
         }
-      }
+      } 
 
     }
 
@@ -132,10 +151,9 @@ class baseSelector {
       return true;
     }
 
-    $link= "href='?plug=".$_GET['plug']."&PID=".$this->pid."&REBASE=".base64_encode($config->current['BASE'])."'";
+    $link= "onclick=\"\$('bs_rebase_".$this->pid."').value='".base64_encode($config->current['BASE'])."';  $('submit_tree_base_".$this->pid."').click();\"";
     $this->tree= "<input type='text' size='35' name='bs_input_".$this->pid."' id='bs_input_".$this->pid."' onkeydown=\"\$('bs_".$this->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('/"/', '&quot;',$this->pathMapping[$this->base])."\">";
 
-
     // Autocompleter
     $this->tree.= "<div id='autocomplete_".$this->pid."' class='autocomplete'></div>".
                   "<script type='text/javascript'>".
@@ -146,7 +164,7 @@ class baseSelector {
     $this->tree.= "</script>";
 
     $selected= $this->base == $config->current['BASE']?"Selected":"";
-    $this->tree.= "<div class='treeList' style='display:none;max-height:".$this->height."px' id='bs_".$this->pid."' onmouseover=\"window.clearTimeout(rtimer);\" onmouseout=\"rtimer= Element.hide.delay(0.25, 'bs_".$this->pid."')\"><a class='treeList$selected' $link>/ ["._("Root")."]</a><ul class='treeList'>\n";
+    $this->tree.= "<div class='treeList' style='display:none;max-height:".$this->height."px' id='bs_".$this->pid."' onmouseover=\"window.clearTimeout(rtimer);\" onmouseout=\"rtimer= Element.hide.delay(0.25, 'bs_".$this->pid."')\"><a class='treeList$selected' $link>/&nbsp;["._("Root")."]</a><ul class='treeList'>\n";
     $first= true;
     $last_indent= 2;
 
@@ -174,7 +192,7 @@ class baseSelector {
         $this->tree.= "</li>\n";
       }
       $selected= $this->base == $base?" class='treeListSelected'":"";
-      $link= "href='?plug=".$_GET['plug']."&amp;PID=".$this->pid."&amp;REBASE=".base64_encode($base)."'";
+      $link= "onclick=\"\$('bs_rebase_".$this->pid."').value='".base64_encode($base)."';$('submit_tree_base_".$this->pid."').click();\"";
       $this->tree.= "<li><a$selected $link>".str_replace(' ', '&nbsp;', ldap::fix(preg_replace('/^[a-z0-9]+=([^,]+),.*$/i', '$1', $base)))."</a>";
 
       $last_indent= $indent;
@@ -191,7 +209,11 @@ class baseSelector {
     if ($this->submitButton) {
       $this->tree.= "&nbsp;<input class='center' type='image' src='images/lists/submit.png' align='middle' title='"._("Submit")."' name='submit_base_".$this->pid."' id='submit_base_".$this->pid."' alt='"._("Submit")."'>";
     }
+    $this->tree.= "<input type='submit' style='display:none' name='submit_tree_base_".$this->pid."' id='submit_tree_base_".$this->pid."'>";
+    $this->tree.= "<input type='hidden' name='bs_rebase_".$this->pid."' id='bs_rebase_".$this->pid."'>";
+    $this->tree.= "<input type='hidden' name='BPID' id='BPID' value='".$this->pid."'>";
 
+    $this->lastState= true;
     return true;
   }
 
@@ -209,8 +231,8 @@ class baseSelector {
 
   function getAction()
   {
-    // Do not do anything if this is not our PID, or there's even no PID available...
-    if(!isset($_REQUEST['PID']) || $_REQUEST['PID'] != $this->pid) {
+    // 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;
     }