Code

fixed problem with singleUserSelect dialog
[gosa.git] / gosa-core / plugins / admin / groups / class_groupManagement.inc
index 5dd9cd39a7486427de0d918548e55b79bba9dbac..7e600b6bbb9ca3b5f23ef022d6bcfa7606bfd45c 100644 (file)
@@ -23,7 +23,7 @@
 class groupManagement extends management
 {
   var $plHeadline     = "Groups";
-  var $plDescription  = "Group administration";
+  var $plDescription  = "Manage aspects of groups like members, posix, desktop, samba and mail settings";
   var $plIcon  = "plugins/groups/images/plugin.png";
 
   // Tab definition 
@@ -51,6 +51,7 @@ class groupManagement extends management
 
     // Build headpage
     $headpage = new listing(get_template_path("group-list.xml", true));
+    $headpage->registerElementFilter("filterProperties", "groupManagement::filterProperties");
     $headpage->setFilter($filter);
 
     // Add copy&paste and snapshot handler.
@@ -61,6 +62,153 @@ class groupManagement extends management
       $this->snapHandler = new SnapshotHandler($this->config);
     }
     parent::__construct($config, $ui, "groups", $headpage);
+
+    $this->registerAction("edit_group","editEntry");
+    $this->registerAction("edit_group_","editEntry");
+    $this->registerAction("edit_group__","editEntry");
+    $this->registerAction("edit_environment","editEntry");
+    $this->registerAction("edit_appgroup","editEntry");
+    $this->registerAction("edit_mailgroup","editEntry");
+
+    $this->registerAction("sendMessage", "sendMessage");
+    $this->registerAction("saveEventDialog", "saveEventDialog");
+    $this->registerAction("abortEventDialog", "closeDialogs");
+  }
+
+  // Inject user actions
+  function detectPostActions()
+  {
+    $action = management::detectPostActions();
+    if(isset($_POST['save_event_dialog'])) $action['action'] = "saveEventDialog";
+    if(isset($_POST['abort_event_dialog'])) $action['action'] = "abortEventDialog";
+    return($action);
+  }
+
+
+  /*! \brief  Sends a message to a set of users using gosa-si events.
+   */
+  function saveEventDialog()
+  {
+    $this->dialogObject->save_object();
+    $msgs = $this->dialogObject->check();
+    if(count($msgs)){
+      msg_dialog::displayChecks($msgs);
+    }else{
+      $o_queue = new gosaSupportDaemon();
+      $o_queue->append($this->dialogObject);
+      if($o_queue->is_error()){
+        msg_dialog::display(_("Infrastructure error"), msgPool::siError($o_queue->get_error()),ERROR_DIALOG);
+      }
+      $this->closeDialogs();
+    }
+  }
+
+
+  /*! \brief  Sends a message to a set of users using gosa-si events.
+   */
+  function sendMessage($action="",$target=array(),$all=array())
+  {
+    $uids = array();
+    $ldap = $this->config->get_ldap_link();
+    $ldap->cd($this->config->current['BASE']);
+    foreach($target as $dn){
+      $ldap->cat($dn,array('cn'));
+      if($ldap->count()){
+        $attrs = $ldap->fetch();
+        $uids[] = $attrs['cn'][0];
+      }
+    }
+    if(count($uids)){
+      $events = DaemonEvent::get_event_types(USER_EVENT);
+      $event = "DaemonEvent_notify";
+      if(isset($events['BY_CLASS'][$event])){
+        $type = $events['BY_CLASS'][$event];
+        $this->dialogObject = new $type['CLASS_NAME']($this->config);
+        $this->dialogObject->add_groups($uids);
+        $this->dialogObject->set_type(SCHEDULED_EVENT);
+      }
+    }
+  }
+
+
+  function editEntry($action="",$target=array(),$all=array(), $altTabClass ="", $altTabType = "", $altAclCategory="")
+  {
+    $str = management::editEntry($action,$target);
+    if(preg_match("/^edit_/",$action)){
+      $tab = preg_replace("/^edit_([^_]*).*$/","\\1",$action);
+      if(isset($this->tabObject->by_object[$tab])){
+        $this->tabObject->current = $tab;
+      }else{
+        trigger_error("Unknown tab: ".$tab);
+      }
+    }
+    if(!empty($str)) return($str);
+  }
+
+  static function filterProperties($row, $classes)
+  {
+    $result= "";
+
+    $map = array(
+        "posixGroup" => 
+        array(
+          "image" => "plugins/groups/images/select_group.png",
+          "plugin" => "group",
+          "alt" => _("Posix"),
+          "title" => _("Edit posix properties")
+          ),
+
+        "gosaMailAccount" => 
+        array(
+          "image" => "plugins/groups/images/mail.png",
+          "plugin" => "mailgroup",
+          "alt" => _("Mail"),
+          "title" => _("Edit mail properties")
+          ),
+
+        "sambaGroupMapping" => 
+        array(
+          "image" => "plugins/groups/images/samba.png",
+          "plugin" => "group_",
+          "alt" => _("Samba"),
+          "title" => _("Edit samba properties")
+          ),
+
+        "goFonPickupGroup" => 
+          array(
+              "image" => "plugins/groups/images/asterisk.png",
+              "plugin" => "group__",
+              "alt" => _("Phone"),
+              "title" => _("Edit phone properties")
+              ),
+
+        "gotoMenuGroup" => 
+          array(
+              "image" => "plugins/groups/images/menu.png",
+              "plugin" => "appgroup",
+              "alt" => _("Menu"),
+              "title" => _("Edit start menu properties")
+              ),
+
+        "gotoEnvironment" => 
+          array(
+              "image" => "plugins/groups/images/environment.png",
+              "plugin" => "environment",
+              "alt" => _("Environment"),
+              "title" => _("Edit environment properties")
+              )
+          );
+
+
+    // Walk thru map
+    foreach ($map as $oc => $properties) {
+      if (in_array_ics($oc, $classes)) {
+        $result.= image($properties['image'], 'listing_edit_'.$properties['plugin'].'_'.$row, $properties['title']);
+      } else {
+        $result.= image('images/empty.png');
+      }
+    }
+    return $result;
   }
 } 
 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: