1 <?php
2 class filterGotoEvents extends filterLDAP {
3 static function query($base, $scope, $filter, $attributes, $category, $objectStorage= "")
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($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($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($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($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($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($entry['STATUS'],array("waiting","error","processed"))){
80 $entry['objectClass'][] = "FAKE_OC__remove";
81 }
82 if($acl_is_writeable && in_array($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($entry['MACADDRESS'],$recently_removed)){
105 # continue;
106 # }
107 $data[] = $item;
108 }
110 return($data);
111 }
112 }
113 ?>