Code

Updated plugin dec
[gosa.git] / gosa-core / plugins / admin / newConfigManagement / class_newConfigManagement.inc
index 4d5822c88b70dd83d07cd184bd31f481d6eebbd3..530e979fc86a2573db23dd975560442fa0b7de03 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+/*! \brief  This class allows to manage backend config items and packages.
+ */
 class newConfigManagement extends plugin
 {
     var $initTime;
@@ -18,7 +20,7 @@ class newConfigManagement extends plugin
     function __construct($config, $dn)
     {
         $this->config = &$config;
-        $this->listing = new ConfigManagementListing($this->config, get_userinfo());
+        $this->listing = new ConfigManagementListing($this->config, get_userinfo(), $this);
 
         // Request an update of the data model
         $this->updateDataModel();
@@ -66,33 +68,17 @@ class newConfigManagement extends plugin
         $this->listing->save_object();
 
         // Get the selected distribution and release from the listing widget.
-        $this->selectedContainer = $this->listing->getSelectedContainer();
-        $this->selectedItem = $this->listing->getSelectedItem();
-  
-        // Get a list of all available distributions and releases.
-        $distList = $this->getDistList();
-        $releaseList = $this->getItemList();
-
-        // Ensure that we've valid values selected.
-        if(!isset($releaseList[$this->selectedItem])){
-            if(count($releaseList)){
-                $this->selectedItem = key($releaseList);
-            }else{
-                $this->selectedItem = "";
-            }
-        }
-
-        // Update list of items within the selected container. 
-        $this->updateItemList($this->selectedContainer);
-
-        // Transfer checked values back to the listing class.
-        $this->listing->setContainer($this->selectedContainer);
-        $this->listing->setItem($this->selectedItem);
-        $this->listing->setContainers($this->getDistList());
-        $this->listing->setItems($this->getItemList());
+        $cont = $this->listing->getSelectedContainer();
+        $item = $this->listing->getSelectedItem();
+        $this->setCurrentContainer($cont, $item);
     }
 
 
+    /*! \brief  Load extended sub-objecte like 'config items' or 'packages'
+     *           for the given release path.
+     *  @param  String  The release path to load sub-objects for.
+     *  @return NULL 
+     */
     function updateItemList($path)
     {
         // Fist get Item and check if it is an release 
@@ -109,25 +95,61 @@ class newConfigManagement extends plugin
                             sprintf(_("Failed to load distributions, error was '%s'!"), 
                                 $rpc->get_error()),ERROR_DIALOG);
                 }else{
-                    $this->dataModel->setItemStatus($path, 'käse');
                     $rpc = $this->config->getRpcHandle();
                     $res = $rpc->getPackages($data['name']);
 
                     return;
                     foreach($res as $itemPath => $type){
-                
+
                         // Make names dataModel conform
                         $itemPath = $path.'/'.preg_replace("/^\//","/root", $itemPath);
                         $name = preg_replace("/^.*\//","",$itemPath);   
                         $itemPath = preg_replace("/\/[^\/]*$/","", $itemPath);
                         $this->dataModel->addItem($type, $itemPath, $name); 
                     }
+                    $this->dataModel->setItemStatus($path, 'fetched');
                 }
             }
         }
     }
 
 
+    /*! \brief  Sets the currently selected container and item path. 
+     *  @param  String  The path of the container to set.
+     *  @param  String  The path of the item to set.
+     *  @return 
+     */
+    function setCurrentContainer($cont, $item)
+    {
+        $this->selectedContainer = $cont;
+        $this->selectedItem = $item;
+
+        // Get a list of all available container and items.
+        $distList = $this->getContainerList();
+        $releaseList = $this->getItemList();
+
+        // Ensure that we've valid values selected.
+        if(!isset($releaseList[$this->selectedItem])){
+            if(count($releaseList)){
+                echo "Fallback";
+                $this->selectedItem = key($releaseList);
+            }else{
+                echo "Fallback 2";
+                $this->selectedItem = "";
+            }
+        }
+
+        // Update list of items within the selected container. 
+        $this->updateItemList($this->selectedContainer);
+
+        // Transfer checked values back to the listing class.
+        $this->listing->setContainer($this->selectedContainer);
+        $this->listing->setItem($this->selectedItem);
+        $this->listing->setContainers($this->getContainerList());
+        $this->listing->setItems($this->getItemList());
+    }
+
+
     /*! \brief  Generate the HTML content for this plugin.
      *          Actually renders the listing widget..
      */
@@ -136,12 +158,24 @@ class newConfigManagement extends plugin
         // Get the selected release and store it in a session variable
         //  to allow the configFilter to access it and display the
         //  packages and items.
-        $path = $this->selectedContainer.$this->selectedItem;
-        $item = $this->dataModel->getItemByPath($path);
-        session::set('CONFIG_ITEM', $item);
+        $res = $this->listing->execute();
         $this->listing->setListingTypes($this->getListingTypes());
 
-        return($this->listing->renderList());
+        return($res);
+    }
+
+
+    /*! \brief      Returns a list of items which will then be displayed 
+     *               in the management-list. 
+     *              (The management class calls this method from its execute())
+     *  @return     Array   A list of items/objects for the listing. 
+     */
+    function getItemsToBeDisplayed()
+    {
+
+        $path = $this->selectedContainer.$this->selectedItem;
+        $item = $this->dataModel->getItemByPath($path);
+        return($item);
     }
 
 
@@ -152,34 +186,49 @@ class newConfigManagement extends plugin
     function getItemList()
     {
         $data = $this->dataModel->getItemByPath($this->selectedContainer);
-        $res = array(""=>"/");
+        $res = array();
+        $res[""] = array("name" => "/", "desc" => "");
+        $res = array_merge($res,$this->__recurseItem($data, array('Component')));
+        return($res);
+
+
         if($data['type'] != 'Release'){
         }else{
             $res = array_merge($res,$this->__recurseItem($data, array('Component'),$this->selectedContainer));
         }
         return($res);
     }
-    
-    
+
+
     /*! \brief  Returns a simply list of all distributions.
      *          This list will then be used to generate the entries of the 
      *           ItemSelectors in the listing class.
      */
-    function getDistList()
+    function getContainerList()
     {
         $data = $this->dataModel->getItemByPath('/root');
-        $res["/root"] = "/";
+        $res = array();
+        $res["/root"] = array("name" => "/", "desc" => "");
         $res = array_merge($res,$this->__recurseItem($data, array('Distribution','Release')));
+
+        print_a($res);
         return($res);
     }
-    
 
+
+    /*! \brief  Recursivly walks through an item and collects all path and name info.
+     *          The reult can then be used to fill the ItemSelector.
+     *  @param  Array   The Item to recurse. 
+     *  @param  Array   The type of of objects to collect. 
+     *  @param  String  The parent path prefix which should be removed.
+     *  @return Array   An array containing Array[path] = name
+     */
     function __recurseItem($item, $types, $parent = "")
     {
         $res = array();
         if(in_array($item['type'], $types)){
             $path = preg_replace("/".preg_quote($parent,'/')."/","",$item['path']);
-            $res[$path] = $item['name'];
+            $res[$path] = array('name' => $item['name'],'desc'=>$item['type']);
         }
         if(count($item['children'])){
             foreach($item['children'] as $child){
@@ -190,12 +239,6 @@ class newConfigManagement extends plugin
     }
 
 
-
-    function remove_lock()
-    {
-    }
-
-    
     /*! \brief  Intializes this plugin
      *          All available installation methods will be loaded
      */
@@ -224,6 +267,10 @@ class newConfigManagement extends plugin
     }
 
 
+    /*! \brief   Returns a info list about all items we can manage,
+     *            this used to fill the listings <objectType> settings.
+     *  @return Array   An array with item info.
+     */
     function getListingTypes()
     {
         $types= array();
@@ -235,13 +282,70 @@ class newConfigManagement extends plugin
 
         $types['Release']['objectClass'] = 'Release';
         $types['Release']['label'] = _('Release');
-        $types['Release']['image'] = 'images/lists/edit.png';
+        $types['Release']['image'] = 'images/lists/delete.png';
         $types['Release']['category'] = 'Device';
         $types['Release']['class'] = 'Device';
+
+        $types['Component']['objectClass'] = 'Component';
+        $types['Component']['label'] = _('Component');
+        $types['Component']['image'] = 'plugins/users/images/select_user.png';
+        $types['Component']['category'] = 'Device';
+        $types['Component']['class'] = 'Device';
         return($types);
     }
 
 
+    /*! \brief  Acts on edit requests and opens an edit dialog for the received item-id.
+     *          (This action is received from the ConfigManagementListing class.)
+     *  @param  Array   The items ids. (May contain multiple ids)
+     *  @return  
+     */
+    function editEntry($ids)
+    {
+        foreach($ids as $id){
+            echo "<br>Edit {$id}";
+        }
+    }
+
+
+    /*! \brief  Acts on remove requests.
+     *          (This action is received from the ConfigManagementListing class.)
+     *  @param  Array   The items ids. (May contain multiple ids)
+     *  @return  
+     */
+    function removeEntry($ids)
+    {
+        foreach($ids as $id){
+            echo "<br>Remove {$id}";
+        }
+    }
+
+
+    /*! \brief  Acts on open requests.
+     *          (This action is received from the ConfigManagementListing class.)
+     *  @param  Array   The items ids. (May contain multiple ids)
+     *  @return  
+     */
+    function openEntry($ids)
+    {
+        $id = $ids[0];
+        $item = $this->dataModel->getItemById($id);
+        if($item){
+            if(in_array($item['type'], array('Distribution', 'Release'))){
+                $this->setCurrentContainer($item['path'], $this->selectedItem);
+            }elseif(in_array($item['type'], array('Component'))){
+                $next = preg_replace("/".preg_quote($this->selectedContainer,'/')."/","", $item['path']);
+                $this->setCurrentContainer($this->selectedContainer, $next);
+            }else{
+                $this->editEntry(array($id));
+            }
+        }
+    }
+
+
+    /*! \brief      The plugins ACL and plugin-property definition. 
+     *  @return 
+     */
     public static function plInfo()
     {
         return (array(
@@ -257,5 +361,16 @@ class newConfigManagement extends plugin
                     "plProvidedAcls"=> array()
                     ));
     }
+
+
+    /*! \brief   
+     *  @param  
+     *  @return 
+     */
+    function remove_lock()
+    {
+    }
+
+
 }
 ?>