source: sandbox/2.4.2-expresso1/prototype/modules/calendar/alarms.php @ 6528

Revision 6528, 3.4 KB checked in by gustavo, 10 years ago (diff)

Ticket #2766 - Merge do branch das novas funcionalidaes para o trunk

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.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/notify_alarm_body.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.