Code

Fixed post handling.
[gosa.git] / gosa-plugins / goto / addons / goto / class_filterGotoEvents.inc
index fdb665c1476b4ef72af9fb77688ff1e188319991..240c4d34d7aee3e096021fbb64bbefb81f8a35a0 100644 (file)
 <?php
 class filterGotoEvents extends  filterLDAP {
-  static function query($base, $scope, $filter, $attributes, $category, $objectStorage= "")
-  {
+    static function query($base, $scope, $filter, $attributes, $category, $objectStorage= "")
+    {
+        global $config;
 
+        $o_queue = new gosaSupportDaemon(TRUE,5);
+        $events  = DaemonEvent::get_event_types( SYSTEM_EVENT);
 
-    $o_queue = new gosaSupportDaemon(TRUE,5);
-    $events  = DaemonEvent::get_event_types( SYSTEM_EVENT);
+        /* Get tags that will be used in queue searches */
+        $event_tags = array("none");
+        foreach($events['SCHEDULED'] as $evt){
+            $event_tags[] = $evt['s_Queued_Action'];
+        }
 
+        $entries = $o_queue->get_queued_entries($event_tags,0,9999999,"id");
+        if ($o_queue->is_error()){
+            msg_dialog::display(_("Error"), sprintf(_("Cannot load queue entries: %s"), "<br><br>".$o_queue->get_error()), ERROR_DIALOG);
+        }
 
-    $entries = $o_queue->get_queued_entries($event_tags,0,9999999,"id");
-    if ($o_queue->is_error()){
-      msg_dialog::display(_("Error"), sprintf(_("Cannot load queue entries: %s"), "<br><br>".$o_queue->get_error()), ERROR_DIALOG);
-    }
+        /* Assign entries by id.
+         */
+        $data= array();
+        $ui = get_userinfo();
+
+
+        $ui= get_userinfo();
+        $acl_base = $config->current['BASE'];
+        $acl_is_writeable = preg_match('/w/', $ui->get_permissions($acl_base, "gotomasses/gotomasses", "0"));
+        $acl_is_removeable = preg_match('/d/', $ui->get_permissions($acl_base, "gotomasses/gotomasses", "0"));
+        $acl_is_readable = preg_match('/r/', $ui->get_permissions($acl_base, "gotomasses/gotomasses", "0"));
+
+        foreach($entries as $entry){
+
+            // Detect entry status 
+            $entry['objectClass'][] = "FAKE_OC__gotoEvent";
+
+            /* If WAITING add priority action
+             */
+            if(in_array($entry['STATUS'],array("waiting")) && $acl_is_writeable){
+                $entry['objectClass'][] = "FAKE_OC__prioUp";
+                $entry['objectClass'][] = "FAKE_OC__prioDown";
+                $entry['objectClass'][] = "FAKE_OC__prioPause";
+            }
+
+            /* If PAUSED add resume action
+             */
+            if(in_array($entry['STATUS'],array("paused")) && $acl_is_writeable){
+                $entry['objectClass'][] = "FAKE_OC__prioResume";
+            }
 
-    /* Assign entries by id.
-     */
-    $data= array();
-    foreach($entries as $entry){
+            /* If PAUSED or WAITING add execution action
+             */
+            if(in_array($entry['STATUS'],array("paused","waiting")) && $acl_is_writeable){
+                $entry['objectClass'][] = "FAKE_OC__processNow";
+            }
 
-      $item = array();
-      
-      $item['count'] = 0;
-      $item['dn']= implode($entry,", item=");
+            /* Add logview button, currently ever.
+             */
+            if($acl_is_readable){
+                $entry['objectClass'][] = "FAKE_OC__viewLogs";
+            }
 
-      foreach($entry as $name => $value){
-        $item[] = $name;
-        $item[$name]=array('count' => 1, $value);
-        $item['count'] ++;
-      }
+            /* If PAUSED or WAITING add edit action
+             */
+            if(in_array($entry['STATUS'],array("waiting")) && $acl_is_writeable){
+                $entry['objectClass'][] = "FAKE_OC__edit";
+            }
+
+
+            /* If PROCESSING add abort action
+             */
+            if(in_array($entry['STATUS'],array("processing")) && preg_match("/install/",$entry['HEADERTAG']) && $acl_is_writeable){
+                $entry['objectClass'][] = "FAKE_OC__abort";
+            }
+
+            /* If WAITING or ERROR add remove action
+             */
+            if( $acl_is_removeable && in_array($entry['STATUS'],array("waiting","error","processed"))){
+                $entry['objectClass'][] = "FAKE_OC__remove";
+            }
+            if($acl_is_writeable && in_array($entry['STATUS'],array("processing")) && !preg_match("/install/",$entry['HEADERTAG'])){
+                $entry['objectClass'][] = "FAKE_OC__remove";
+            }
+
+            $item = array();
+            $item['count'] = 0;
+            $item['EVENT'] = $entry;
+            $item['dn']= $entry['MACADDRESS'].",".$entry['TIMESTAMP'];
+
+            foreach($entry as $name => $value){
+                $item[] = $name;
+                if(!is_array($value)){
+                    $item[$name]=array('count' => 1, $value);
+                }else{
+                    $item[$name] = $value;
+                    $item[$name]['count'] = count($value);
+                }
+                $item['count'] ++;
+            }
 
 
 #     /* Skip entries which will be removed within the next seconds */
-#     if(isset($entry['MACADDRESS']) && in_array($entry['MACADDRESS'],$this->recently_removed)){
+#     if(isset($entry['MACADDRESS']) && in_array($entry['MACADDRESS'],$recently_removed)){
 #       continue;
 #     }
-      $data[] = $item;
+            $data[] = $item;
+        }
+
+        return($data);
     }
-    return($data);
-  }
 }
 ?>