Code

Updated in
[gosa.git] / gosa-core / include / class_management.inc
index 81a798b5876e808fb4728848a4f9d7c178c33136..8c2f6ab1be227073383dace92741e4ce3f6672ea 100644 (file)
@@ -33,7 +33,7 @@ class management
   public $plHeadline    = "unconfigured";
 
   // The currently used object(s) (e.g. in edit, removal)
-  protected $dn = "";
+  public $dn = "";  // this is public due to some compatibility problems with class plugin..
   protected $dns = array();
 
   // The last used object(s).
@@ -46,6 +46,7 @@ class management
   // The tab definitions to use for the current object.
   protected $tabClass = "";         // e.g. usertabs
   protected $tabType = "";          // e.g. USERTABS
+  protected $aclPlugin = "";        // e.g. generic
   protected $aclCategory = "";      // e.g. users
   protected $objectName = "";       // e.g. users
 
@@ -58,7 +59,10 @@ class management
   protected $last_dialogObject = null;
 
   // Whether to display the apply button or not
-  protected $displayApplyBtn = "";
+  protected $displayApplyBtn = FALSE;
+
+  // Whether to display a header or not.
+  protected $skipHeader = false;
 
   // Whether to display a footer or not.
   protected $skipFooter = false;
@@ -79,6 +83,9 @@ class management
   // A list of configured actions/events
   protected $actions = array();
 
+  // Attributes managed by this plugin, can be used in post events;
+  public $attributes = array(); 
+
   function  __construct(&$config,$ui,$plugname, $headpage)
   {
     $this->plugname = $plugname;
@@ -155,7 +162,7 @@ class management
 
     // Display tab object.
     if($this->tabObject instanceOf tabs || $this->tabObject instanceOf multi_plug){
-      $this->tabObject->save_object();
+#      $this->tabObject->save_object();
       $display = $this->tabObject->execute();
       $display.= $this->_getTabFooter();
       return($this->getHeader().$display);
@@ -200,6 +207,8 @@ class management
    */
   protected function getHeader()
   {
+    if($this->skipHeader) return("");
+
     if (get_object_info() != ""){
       $display= print_header(get_template_path($this->plIcon),_($this->plDescription),
           "<img alt=\"\" class=\"center\" src=\"".get_template_path('images/lists/locked.png')."\">".
@@ -335,8 +344,8 @@ class management
         $this->dn = $dn;
         $this->tabObject= new $tabClass($this->config,$this->config->data['TABS'][$tabType], $this->dn, $aclCategory, true, true);
         $this->tabObject->set_acl_base($this->dn);
-        $this->tabObject->delete ();
         $this->tabObject->parent = &$this;
+        $this->tabObject->delete ();
 
         // Remove the lock for the current object.
         del_lock($this->dn);        
@@ -430,7 +439,8 @@ class management
    *  @param  Array   'all'     A combination of both 'action' and 'target'.
    */
   function saveSnapshot($action="",$target=array(),$all=array())
-  {
+  { 
+    if(!is_object($this->dialogObject)) return;
     $this->dialogObject->save_object();
     $msgs = $this->dialogObject->check();
     if(count($msgs)){
@@ -565,10 +575,14 @@ class management
     if(empty($tabClass) || empty($tabType)){
       // No tab type defined
     }else{
-      $this->tabObject= new $tabClass($this->config,$this->config->data['TABS'][$tabType], $this->dn, $aclCategory);
-      $this->tabObject->set_acl_base($this->headpage->getBase());
-      $this->tabObject->parent = &$this;
-      @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__,$this->dn,"Create new entry initiated!");
+      if (isset($this->config->data['TABS'][$tabType])) {
+        $this->tabObject= new $tabClass($this->config,$this->config->data['TABS'][$tabType], $this->dn, $aclCategory);
+        $this->tabObject->set_acl_base($this->headpage->getBase());
+        $this->tabObject->parent = &$this;
+        @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__,$this->dn,"Create new entry initiated!");
+      } else {
+        msg_dialog::display(_("Error"), sprintf(_("No tab declaration for '%s' found in your configuration file. Cannot create plugin instance!"), $tabType), ERROR_DIALOG);
+      }
     }
   }
 
@@ -614,9 +628,10 @@ class management
     if(!empty($altTabType)) $tabType = $altTabType;
     if(!empty($altAclCategory)) $aclCategory = $altAclCategory;
 
+    $this->displayApplyBtn = count($target) == 1;
+
     // Single edit - we only got one object dn.
     if(count($target) == 1){
-      $this->displayApplyBtn = TRUE;
       $this->is_new = FALSE;
       $this->is_single_edit = TRUE;
       $this->is_multiple_edit = FALSE;
@@ -743,6 +758,7 @@ class management
     $this->dns = array();
     $this->tabObject = null;
     $this->dialogObject = null;
+    $this->skipFooter = FALSE;
     set_object_info();
   }
 
@@ -850,6 +866,44 @@ class management
     $this->filter = $str;
   }
 
+  function postcreate() {
+      $this->handle_post_events('add');
+  }
+  function postmodify(){
+      $this->handle_post_events('modify');
+  }
+  function postremove(){
+      $this->handle_post_events('remove');
+  }
+
+  function is_modal_dialog()
+  {
+      return(is_object($this->tabObject) || is_object($this->dialogObject));
+  }
+
+  /*! \brief    Forward command execution request
+   *             to the correct method.
+   */
+  function handle_post_events($mode, $addAttrs= array())
+  {
+      if(!in_array_strict($mode, array('add','remove','modify'))){
+          trigger_error(sprintf("Invalid post event type given %s! Valid types are [add,modify,remove].", $mode));
+          return;
+      }
+      switch ($mode){
+          case "add":
+              plugin::callHook($this,"POSTCREATE", $addAttrs);
+          break;
+
+          case "modify":
+              plugin::callHook($this,"POSTMODIFY", $addAttrs);
+          break;
+
+          case "remove":
+              plugin::callHook($this,"POSTREMOVE", $addAttrs);
+          break;
+      }
+  }
 }
 
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: