source: branches/2.4/prototype/modules/calendar/alarms.php @ 7391

Revision 7391, 3.5 KB checked in by eduardow, 12 years ago (diff)

Ticket #3152 - Inconsistências na delegação em tarefas

Line 
1<?php
2
3if(!defined('ROOTPATH'))
4    define('ROOTPATH', dirname(__FILE__).'/../..');
5
6require_once ROOTPATH.'/api/controller.php';
7require_once ROOTPATH.'/modules/calendar/constants.php';
8require_once ROOTPATH.'/api/parseTPL.php';
9
10use prototype\api\Config as Config;
11
12$target = (gmdate('U') - 300 ).'000';
13
14$parts = Controller::service('PostgreSQL')->execSql('SELECT DISTINCT calendar_participant.user_info_id as "user", co.id as "schedulable", co.type_id as "type", co.allDay as "allDay" ,co.dtend as "endTime", co.dtstart as "startTime", co.summary as "summary", co.tzid as "timezone", co.location as "location", al.id as "id" '.
15                            'FROM calendar_participant, calendar_alarm as "al", calendar_object as "co", calendar_repeat as "rep" WHERE ('.
16                            "al.participant_id = calendar_participant.id AND ".
17                            "calendar_participant.object_id = co.id AND ".
18                            "al.action_id = '".ALARM_MAIL."' AND ".
19                            "al.sent = '0' AND ".
20                            "CASE WHEN rep.object_id = co.id ".
21                            "THEN  ( select count(occurrence) FROM calendar_repeat_occurrence WHERE rep.object_id = co.id AND rep.id = calendar_repeat_occurrence.repeat_id AND ((occurrence - al.alarm_offset) >= '$target') AND  ((occurrence - al.alarm_offset) >= '".($target + 360000)."') ) > 0 ".
22                            "ELSE (co.range_start - al.alarm_offset >= '$target') AND (co.range_start - al.alarm_offset < '".($target + 360000)."') END )");
23
24if(!is_array($parts))
25  return;
26
27$ids = array();
28
29foreach ($parts as $i => $part)
30{
31        ///Montando lista de participantes
32
33        $users = Controller::find( array( 'concept' => 'participant' ) , array( 'user', 'id', 'isExternal' ) ,array('filter' => array ('=', 'schedulable' , $part['schedulable'] ), 'deepness' => 1 ) );
34
35        $attList = array();
36
37        foreach( $users as $user )
38        {
39            if( $part['user'] === $user['user']['id'] )
40                $part['mail'] = $user['user']['mail'];
41
42            $attList[] = $user['user']['name'];
43        }
44
45        $timezone = new DateTimeZone('UTC');
46        $sTime = new DateTime('@' . (int) ($part['startTime'] / 1000), $timezone);
47        $eTime = new DateTime('@' . (int) ($part['endTime'] / 1000), $timezone);
48
49        $timezone = $part['timezone'];
50        $sTime->setTimezone(new DateTimeZone($part['timezone']));
51        $eTime->setTimezone(new DateTimeZone($part['timezone']));
52       
53        $data = array('startDate' =>  date_format( $sTime , 'd/m/Y') ,
54                      'startTime' =>  $part['allDay'] ? '' : date_format( $sTime , 'H:i'),
55                      'endDate' =>  date_format( $eTime , 'd/m/Y') ,
56                      'endTime' =>  $part['allDay'] ? '' : date_format( $eTime , 'H:i'),
57                      'eventTitle' =>  $part['summary'],
58                      'eventLocation' =>  $part['location'],
59                      'timezone' => $timezone,
60                      'participants' =>  '<UL> <LI> '.implode( '<LI></LI> ', $attList ).'</LI> </UL>');
61
62        Controller::create( array( 'service' => 'SMTP' ), array( 'body' => parseTPL::load_tpl( $data, ROOTPATH.'/modules/calendar/templates/'. ($parts['type'] == '1' ? 'notify_alarm_body.tpl' : 'notify_alarm_body_task.tpl')),
63                                                                  'isHtml' => true,
64                                                                  'subject' => 'Alarme de Calendario',
65                                                                  'from' => $part['mail'],
66                                                                  'to' => $part['mail'] ) );
67
68        Config::regSet('noAlarm', TRUE); //Evita o envio de notificação ?????
69        $ids[] = $part['id'];
70}
71
72if( !empty( $ids ) )
73    Controller::update( array( 'concept' => 'alarm' ) , array('sent' => '1'), array('filter' => array( 'IN', 'id', $ids ) ));
74
75?>
Note: See TracBrowser for help on using the repository browser.