Code

Backport from trunk
[gosa.git] / gosa-plugins / goto / addons / goto / class_filterGotoEvents.inc
1 <?php
2 class filterGotoEvents extends  filterLDAP {
3     static function query($base, $scope, $filter, $attributes, $category, $objectStorage= array(""))
4     {
5         global $config;
7         $o_queue = new gosaSupportDaemon(TRUE,5);
8         $events  = DaemonEvent::get_event_types( SYSTEM_EVENT);
10         /* Get tags that will be used in queue searches */
11         $event_tags = array("none");
12         foreach($events['SCHEDULED'] as $evt){
13             $event_tags[] = $evt['s_Queued_Action'];
14         }
16         $entries = $o_queue->get_queued_entries($event_tags,0,9999999,"id");
17         if ($o_queue->is_error()){
18             msg_dialog::display(_("Error"), sprintf(_("Cannot load queue entries: %s"), "<br><br>".$o_queue->get_error()), ERROR_DIALOG);
19         }
21         /* Assign entries by id.
22          */
23         $data= array();
24         $ui = get_userinfo();
27         $ui= get_userinfo();
28         $acl_base = $config->current['BASE'];
29         $acl_is_writeable = preg_match('/w/', $ui->get_permissions($acl_base, "gotomasses/gotomasses", "0"));
30         $acl_is_removeable = preg_match('/d/', $ui->get_permissions($acl_base, "gotomasses/gotomasses", "0"));
31         $acl_is_readable = preg_match('/r/', $ui->get_permissions($acl_base, "gotomasses/gotomasses", "0"));
33         foreach($entries as $entry){
35             // Detect entry status 
36             $entry['objectClass'][] = "FAKE_OC__gotoEvent";
38             /* If WAITING add priority action
39              */
40             if(in_array_strict($entry['STATUS'],array("waiting")) && $acl_is_writeable){
41                 $entry['objectClass'][] = "FAKE_OC__prioUp";
42                 $entry['objectClass'][] = "FAKE_OC__prioDown";
43                 $entry['objectClass'][] = "FAKE_OC__prioPause";
44             }
46             /* If PAUSED add resume action
47              */
48             if(in_array_strict($entry['STATUS'],array("paused")) && $acl_is_writeable){
49                 $entry['objectClass'][] = "FAKE_OC__prioResume";
50             }
52             /* If PAUSED or WAITING add execution action
53              */
54             if(in_array_strict($entry['STATUS'],array("paused","waiting")) && $acl_is_writeable){
55                 $entry['objectClass'][] = "FAKE_OC__processNow";
56             }
58             /* Add logview button, currently ever.
59              */
60             if($acl_is_readable){
61                 $entry['objectClass'][] = "FAKE_OC__viewLogs";
62             }
64             /* If PAUSED or WAITING add edit action
65              */
66             if(in_array_strict($entry['STATUS'],array("waiting")) && $acl_is_writeable){
67                 $entry['objectClass'][] = "FAKE_OC__edit";
68             }
71             /* If PROCESSING add abort action
72              */
73             if(in_array_strict($entry['STATUS'],array("processing")) && preg_match("/install/",$entry['HEADERTAG']) && $acl_is_writeable){
74                 $entry['objectClass'][] = "FAKE_OC__abort";
75             }
77             /* If WAITING or ERROR add remove action
78              */
79             if( $acl_is_removeable && in_array_strict($entry['STATUS'],array("waiting","error","processed"))){
80                 $entry['objectClass'][] = "FAKE_OC__remove";
81             }
82             if($acl_is_writeable && in_array_strict($entry['STATUS'],array("processing")) && !preg_match("/install/",$entry['HEADERTAG'])){
83                 $entry['objectClass'][] = "FAKE_OC__remove";
84             }
86             $item = array();
87             $item['count'] = 0;
88             $item['EVENT'] = $entry;
89             $item['dn']= $entry['MACADDRESS'].",".$entry['TIMESTAMP'];
91             foreach($entry as $name => $value){
92                 $item[] = $name;
93                 if(!is_array($value)){
94                     $item[$name]=array('count' => 1, $value);
95                 }else{
96                     $item[$name] = $value;
97                     $item[$name]['count'] = count($value);
98                 }
99                 $item['count'] ++;
100             }
103 #     /* Skip entries which will be removed within the next seconds */
104 #     if(isset($entry['MACADDRESS']) && in_array_strict($entry['MACADDRESS'],$recently_removed)){
105 #       continue;
106 #     }
107             $data[] = $item;
108         }
110         return($data);
111     }
113 ?>