Code

Fixed change_password().
[gosa.git] / include / class_tabs.inc
index cda88a02cff2fcb2f5cfbd0826ec8ebd27cc6876..ba24d9530e8f047d06ba1633cd55b7ab1dc1322f 100644 (file)
@@ -37,10 +37,16 @@ class tabs
        /* 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 */
@@ -80,7 +86,9 @@ class tabs
 
        $obj= $this->by_object[$this->current];
        $display.= $obj->execute();
-       $this->by_object[$this->current]= $obj;
+  if (is_php4()){
+    $this->by_object[$this->current]= $obj;
+  }
 
        /* Footer for tabbed dialog */
        $display.= "</td></tr></table>";
@@ -96,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 */
@@ -112,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;
+    }
        }
 
   }
@@ -137,19 +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, '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>";
        }
@@ -162,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)
@@ -198,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);
@@ -242,7 +286,9 @@ 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;
+      }
          }
   }
 
@@ -263,22 +309,25 @@ class tabs
    */
   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{
-                 $ret .= "<br>".$tmp['string'];
-                         }
-                 }
-         }
-         return($ret);
+    $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:
 ?>