diff --git a/gosa-core/plugins/admin/newConfigManagement/class_newConfigManagement.inc b/gosa-core/plugins/admin/newConfigManagement/class_newConfigManagement.inc
index 4d5822c88b70dd83d07cd184bd31f481d6eebbd3..530e979fc86a2573db23dd975560442fa0b7de03 100644 (file)
<?php
+/*! \brief This class allows to manage backend config items and packages.
+ */
class newConfigManagement extends plugin
{
var $initTime;
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();
$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
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..
*/
// 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);
}
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){
}
-
- function remove_lock()
- {
- }
-
-
/*! \brief Intializes this plugin
* All available installation methods will be loaded
*/
}
+ /*! \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();
$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(
"plProvidedAcls"=> array()
));
}
+
+
+ /*! \brief
+ * @param
+ * @return
+ */
+ function remove_lock()
+ {
+ }
+
+
}
?>