Code

Added dhcp plugin to general include list
[gosa.git] / include / class_tabs.inc
index 1bab2b70f9a0972efafe94992acd805f6def0a4a..ba24d9530e8f047d06ba1633cd55b7ab1dc1322f 100644 (file)
@@ -30,16 +30,23 @@ class tabs
   var $disabled= "";
   var $by_name= array();
   var $by_object= array();
+  var $SubDialog = false;
 
   function tabs($config, $data, $dn)
   {
        /* Save dn */
        $this->dn= $dn;
        $this->config= $config;
+       $baseobject= NULL;
 
        foreach ($data as $tab){
                $this->by_name[$tab['CLASS']]= $tab['NAME'];
-               $this->by_object[$tab['CLASS']]= new $tab['CLASS']($this->config, $this->dn);
+               if ($baseobject == NULL){
+                       $baseobject= new $tab['CLASS']($this->config, $this->dn);
+                       $this->by_object[$tab['CLASS']]= $baseobject;
+               } else {
+                       $this->by_object[$tab['CLASS']]= new $tab['CLASS']($this->config, $this->dn, $baseobject);
+               }
                $this->by_object[$tab['CLASS']]->parent= &$this;
 
                /* Initialize current */
@@ -74,12 +81,14 @@ class tabs
        $display= $this->gen_tabs();
 
        /* Show object */
-       $display.= "<table cellpadding=4 cellspacing=0 border=0 style=\"width:100%; background-color:#F0F0F0; border-style:solid; border-color:black; border-top-width:0px; border-bottom-width:1px; border-left-width:1px; border-right-width:1px;\">\n";
+       $display.= "<table summary=\"\" cellpadding=4 cellspacing=0 border=0 style=\"width:100%; background-color:#F0F0F0; border-style:solid; border-color:black; border-top-width:0px; border-bottom-width:1px; border-left-width:1px; border-right-width:1px;\">\n";
        $display.= "<tr><td>\n";
 
        $obj= $this->by_object[$this->current];
-       $display.= $obj->execute ();
-       $this->by_object[$this->current]= $obj;
+       $display.= $obj->execute();
+  if (is_php4()){
+    $this->by_object[$this->current]= $obj;
+  }
 
        /* Footer for tabbed dialog */
        $display.= "</td></tr></table>";
@@ -95,7 +104,9 @@ class tabs
 
                $obj= $this->by_object[$this->last];
                $obj->save_object ();
-               $this->by_object[$this->last]= $obj;
+    if (is_php4()){
+      $this->by_object[$this->last]= $obj;
+    }
        }
 
        /* Skip if curent and last are the same object */
@@ -111,7 +122,9 @@ class tabs
                        $this->current, "Saving (current)");
 
                $obj->save_object ();
-               $this->by_object[$this->current]= $obj;
+    if (is_php4()){
+      $this->by_object[$this->current]= $obj;
+    }
        }
 
   }
@@ -119,7 +132,7 @@ class tabs
   function gen_tabs()
   {
        $display= "<input type=\"hidden\" name=\"arg\" value=\"\">";
-       $display.= "<table cellpadding=0 cellspacing=0 border=0 style=\"width:100%;\"><tr>";
+       $display.= "<table summary=\"\" cellpadding=0 cellspacing=0 border=0 style=\"width:100%;\"><tr>";
        $index= 0;
        $style= array("tab_left", "tab_active", "tab_near_active", "tab_right");
        foreach ($this->by_name as $class => $name){
@@ -136,16 +149,27 @@ class tabs
                }
 
                /* Paint tab */
-               $display.= "<td style=\"vertical-align:bottom; width:100px;\">";
+               $display.= "<td style=\"vertical-align:bottom;width:1px;white-space:nowrap;\">";
+
+               /* Shorten string if its too long for the tab headers*/
                $title= _($name);
-               if (mb_strlen($title) > 14){
-                       $title= mb_substr($title,0, 11, 'UTF-8')."...";
+               if (mb_strlen($title, 'UTF-8') > 14){
+                       $title= mb_substr($title,0, 12, 'UTF-8')."...";
+               }
+
+               $title= preg_replace("/ /", "&nbsp;", $title);
+               
+               /* Take care about notifications */
+               if ($this->by_object[$class]->pl_notify){
+                       $notify= "id=\"notify\"";
+               } else {
+                       $notify= "";
                }
                if ($_SESSION['js']==FALSE){    
-                       $display.= "<div class=\"$style[$index]\"><input type=\"submit\" name=\"$class\"".
+                       $display.= "<div class=\"$style[$index]\" $notify><input type=\"submit\" name=\"$class\"".
                                   " class=\"$style[$index]\" value=\"$title\"";
                } else {                         
-                       $display.= "<div class=\"$style[$index]\"><a class=\"$style[$index]\" onclick=\"return true;\" href=\"javascript:document.mainform.arg.value='$class';document.mainform.submit();\">$title</a";
+                       $display.= "<div $notify class=\"$style[$index]\"><a class=\"$style[$index]\" onclick=\"return true;\" href=\"javascript:document.mainform.arg.value='$class';document.mainform.submit();\">$title</a";
                }
                $display.= "></div></td>";
        }
@@ -158,35 +182,46 @@ class tabs
 
   function set_acl($acl)
   {
-       /* Set local acl */
-       $this->acl= $acl;
-
-       /* Setup for all plugins */
-       foreach ($this->by_object as $key => $obj){
-               $sacl= get_module_permission($acl, "$key", $this->dn);
-               $obj->acl= $sacl;
-               $this->by_object[$key]= $obj;
-       }
+    /* Set local acl */
+    $this->acl= $acl;
+
+    /* Setup for all plugins */
+    foreach ($this->by_object as $key => $obj){
+      $sacl= get_module_permission($acl, "$key", $this->dn);
+      $obj->acl= $sacl;
+      if (is_php4()){
+        $this->by_object[$key]= $obj;
+      }
+    }
   }
 
   function delete()
   {
-       /* Delete for all plugins */
-       foreach (array_reverse($this->by_object) as $key => $obj){
-               $obj->remove_from_parent();
-       }
+    /* Check if all plugins will ACK for deletion */
+    foreach (array_reverse($this->by_object) as $key => $obj){
+      $reason= $obj->allow_remove();
+      if ($reason != ""){
+        print_red(sprintf(_("Delete process has been canceled by plugin '%s': %s"), $key, $reason));
+        return;
+      }
+    }
+
+    /* Delete for all plugins */
+    foreach (array_reverse($this->by_object) as $key => $obj){
+      $obj->remove_from_parent();
+    }
   }
 
   function password_change_needed()
   {
-       /* Ask all plugins for needed password changes */
-       foreach ($this->by_object as $key => $obj){
-               if ($obj->password_change_needed()){
-                       return TRUE;
-               }
-       }
-
-       return FALSE;
+    /* Ask all plugins for needed password changes */
+    foreach ($this->by_object as $key => $obj){
+      if ($obj->password_change_needed()){
+        return TRUE;
+      }
+    }
+
+    return FALSE;
   }
 
   function check($ignore_account= FALSE)
@@ -194,18 +229,31 @@ class tabs
        $this->save_object(TRUE);
        $messages= array();
 
+  $current_set = FALSE;
+
        /* Check all plugins */
        foreach ($this->by_object as $key => $obj){
                if ($obj->is_account || $ignore_account || $obj->ignore_account){
                        @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__,
                                $key, "Checking");
 
-                       $messages= $obj->check();
-                       if (count($messages)){
-                               $this->current= $key;
-                               break;
-                       }
-               }
+                       $msg= $obj->check();
+      if (is_php4()){
+        $this->by_object[$key]= $obj;
+      }
+                       if (count($msg)){
+        $this->by_object[$key]->pl_notify= TRUE;
+        if(!$current_set){
+          $current_set = TRUE;
+                               $this->current= $key; 
+          $messages = $msg;
+        }
+                       }else{
+        $this->by_object[$key]->pl_notify= FALSE;
+      }
+               }else{
+      $this->by_object[$key]->pl_notify= FALSE;
+    }
        }
 
        return ($messages);
@@ -238,10 +286,48 @@ class tabs
                                  $key, "Adapting");
                  $obj->parent= &$this;
                  $obj->adapt_from_template($dn);
-                 $this->by_object[$key]= $obj;
+      if (is_php4()){
+        $this->by_object[$key]= $obj;
+      }
          }
   }
 
+       
+  /* Save attributes posted by copy & paste dialog
+   */
+  function saveCopyDialog()
+  {
+         foreach ($this->by_object as $key => $obj){
+                 if($obj->is_account){
+                         $this->by_object[$key]->saveCopyDialog();
+                 }
+         }
+  }
+
+
+  /* return copy & paste dialog
+   */
+  function getCopyDialog()
+  {
+    $ret = "";
+    $this->SubDialog = false;
+    foreach ($this->by_object as $key => $obj){
+      if($obj->is_account){
+        $tmp = $this->by_object[$key]->getCopyDialog();
+        if($tmp['status'] == "SubDialog"){
+          $this->SubDialog = true;
+          return($tmp['string']);
+        }else{
+          if(!empty($tmp['string'])){
+            $ret .= $tmp['string'];
+            $ret .= "<p class='seperator'>&nbsp;</p>";
+          }
+        }
+      }
+    }
+    return($ret);
+  }
 }
 
+// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
 ?>