source: trunk/prototype/modules/calendar/alarms.php @ 7696

Revision 7696, 3.0 KB checked in by cristiano, 11 years ago (diff)

Ticket #3260 - Requisição de alarmes de eventos custosa quando existem muitos eventos

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