/**
  * Atualiza um contato recente
  *
  * @license    http://www.gnu.org/copyleft/gpl.html GPL
  * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
  * @sponsor    Caixa Econômica Federal
  * @author     José Vicente Tezza Jr. 
  * @return     retorna a uri do contato recente
  * @access     public
  * */
 function put($request, $id)
 {
     $this->secured();
     //verificar se a preferencia de contatos dinamicos nao esta ativada
     if (!$this->isEnabledDynamicContacts(Config::me("uidNumber"))) {
         $response = new Response($request);
         $this->createException($request, $response, Response::UNAUTHORIZED, 'Resource unauthorized', 'disabled dynamic contacts preference');
         return $response;
     }
     $post = $request->dataDecoded;
     $response = new Response($request);
     if (count($post) == 0) {
         $this->createException($request, $response, Response::BADREQUEST, 'Bad request', 'Invalid template data');
         return $response;
     }
     //recupera os atributos definidos no conceito 'user'
     $map = Config::get('dynamicContact', 'PostgreSQL.mapping');
     $params = array();
     foreach ($post as $key => $value) {
         if (!isset($map[$key]) || $key == 'id' || $key == 'timestamp' || $key == 'number_of_messages') {
             continue;
         }
         $params[$key] = $value;
     }
     if (count($params) == 0) {
         $this->createException($request, $response, Response::BADREQUEST, 'Bad request', 'Invalid template data');
         return $response;
     }
     //completar os atributos
     $params['owner'] = Config::me("uidNumber");
     $params['timestamp'] = time();
     $params['id'] = $id;
     $response->addHeader('Content-type', 'aplication/json');
     $response->code = Response::NOCONTENT;
     try {
         $dynamicContact = Controller::read(array('concept' => 'dynamicContact'), false, array('filter' => array('AND', array('=', 'owner', Config::me("uidNumber")), array('=', 'id', $id))));
         //Se existe o recurso
         if ($dynamicContact) {
             //Normaliza o recurso
             if (is_array($dynamicContact)) {
                 $dynamicContact = $dynamicContact[0];
             }
             $params['number_of_messages'] = $dynamicContact['number_of_messages'] + 1;
             $dynamicContact = Controller::update(array('concept' => 'dynamicContact', 'id' => $id), $params);
             if (!$dynamicContact) {
                 $this->createException($request, $response, Response::INTERNALSERVERERROR, 'Internal Server Error', Controller::service('PostgreSQL')->error);
                 return $response;
             }
         } else {
             /*
             $idDynamicContact = Controller::create(	array('concept' => 'dynamicContact'), $params);
             */
             //if (!$idDynamicContact) {
             $this->createException($request, $response, Response::NOTFOUND, 'Bad request', 'Invalid data');
             return $response;
             //}
         }
     } catch (Exception $ex) {
         $this->createException($request, $response, Response::INTERNALSERVERERROR, 'Internal Server Error', 'Internal Server Error');
         return $response;
     }
     $response->body = json_encode(null);
     return $response;
 }
Example #2
0
$target = gmdate('U') - 300 . '000';
$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) . '\') ');
if (!is_array($parts)) {
    return;
}
$ids = array();
foreach ($parts as $i => $part) {
    ///Montando lista de participantes
    $users = Controller::find(array('concept' => 'participant'), array('user', 'id', 'isExternal'), array('filter' => array('=', 'schedulable', $part['schedulable']), 'deepness' => 1));
    $attList = array();
    foreach ($users as $user) {
        if ($part['user'] === $user['user']['id']) {
            $part['mail'] = $user['user']['mail'];
        }
        $attList[] = $user['user']['name'];
    }
    $timezone = new DateTimeZone('UTC');
    $sTime = new DateTime('@' . (int) ($part['startTime'] / 1000), $timezone);
    $eTime = new DateTime('@' . (int) ($part['endTime'] / 1000), $timezone);
    $timezone = $part['timezone'];
    $sTime->setTimezone(new DateTimeZone($part['timezone']));
    $eTime->setTimezone(new DateTimeZone($part['timezone']));
    $data = array('startDate' => date_format($sTime, 'd/m/Y'), 'startTime' => $part['allDay'] ? '' : date_format($sTime, 'H:i'), 'endDate' => date_format($eTime, 'd/m/Y'), 'endTime' => $part['allDay'] ? '' : date_format($eTime, 'H:i'), 'eventTitle' => $part['summary'], 'eventLocation' => $part['location'], 'timezone' => $timezone, 'participants' => '<UL> <LI> ' . implode('<LI></LI> ', $attList) . '</LI> </UL>');
    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')), 'isHtml' => true, 'subject' => 'Alarme de Calendario', 'from' => $part['mail'], 'to' => $part['mail']));
    Config::regSet('noAlarm', TRUE);
    //Evita o envio de notificação ?????
    $ids[] = $part['id'];
}
if (!empty($ids)) {
    Controller::update(array('concept' => 'alarm'), array('sent' => '1'), array('filter' => array('IN', 'id', $ids)));
}
Example #3
0
 static function move($origem, $destino, $owner)
 {
     $user = Controller::find(array('concept' => 'user', 'service' => 'OpenLDAP'), false, array('filter' => array('=', 'uid', $owner), 'notExternal' => true));
     $owner = $user[0]['id'];
     self::initSessionVars(array('user' => array('uidNumber' => $owner)));
     //Busca as Agendas do usuario
     $sig = Controller::find(array('concept' => 'calendarSignature'), array('user', 'calendar'), array('filter' => array('AND', array('=', 'user', $params['owner']), array('=', 'isOwner', '1'))));
     //TODO: RESGATAR AGENDA
     foreach ($sig as $i => $v) {
         $cal = Controller::read(array('concept' => 'calendar', 'id' => $v['calendar']), array('local'));
         if ($cal['local'] == $origem) {
             Controller::update(array('concept' => 'calendar', 'id' => $v['calendar']), array('local' => $destino));
         }
     }
 }
Example #4
0
 public function encodeUpdateSchedulable(&$uri, &$params, &$criteria, $original)
 {
     $event = Controller::read(array('concept' => 'schedulable', 'id' => $uri['id']));
     if (isset($params['startTime'])) {
         if (!is_numeric($params['startTime'])) {
             $params['startTime'] = self::parseTimeDate($params['startTime'], $event['timezone']);
         }
         $params['rangeStart'] = $params['startTime'];
     }
     if (isset($params['endTime'])) {
         if (!is_numeric($params['endTime'])) {
             $params['endTime'] = self::parseTimeDate($params['endTime'], $event['timezone']);
             if (isset($params['allDay']) && $params['allDay'] || !isset($params['allDay']) && $event['allDay']) {
                 $params['endTime'] = $params['endTime'] + 86400000;
             }
         }
         $params['rangeEnd'] = $params['endTime'];
         if ($event['type'] == '2') {
             if (!isset($params['due']) && $params['endTime'] != $event['endTime']) {
                 $params['due'] = $params['endTime'];
             }
         }
     }
     if (isset($params['due']) && $params['due'] != '' && !is_numeric($params['due'])) {
         $params['due'] = self::parseTimeDate($params['due'], $event['timezone']);
         if (isset($params['allDay']) && $params['allDay'] || !isset($params['allDay']) && $event['allDay']) {
             $params['due'] = $params['due'] + 86400000;
         }
     }
     if ($event['type'] == '2') {
         $criteria['historic'] = $params;
         $criteria['beforeValue'] = $event;
         if (isset($params['startTime']) && $params['startTime'] == $event['startTime']) {
             unset($criteria['historic']['startTime']);
         }
         if (isset($params['due']) && $params['due'] == $event['due']) {
             unset($criteria['historic']['due']);
         }
         //necessário para atulizar a atividade de composta pela tarefa aqui sendo atualizada
         if (isset($criteria['historic']['startTime']) || isset($criteria['historic']['endTime'])) {
             /*
              * Verify current task is built-in activity
              * */
             $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'task', $uri['id']), array('=', 'owner', Config::me('uidNumber'))), 'deepness' => 2));
             if (!empty($taskToActivity)) {
                 $activity = Controller::read(array('concept' => 'schedulable', 'id' => $taskToActivity[0]['activity']), array('startTime', 'endTime', 'rangeStart', 'rangeEnd', 'allDay'));
                 $isAllDay = 1;
                 /*
                  * Get all task in activity
                  * */
                 $taskToActivity = Controller::find(array('concept' => 'taskToActivity'), false, array('filter' => array('AND', array('=', 'activity', $taskToActivity[0]['activity']), array('=', 'owner', Config::me('uidNumber'))), 'deepness' => 2));
                 if (!empty($activity)) {
                     $start = $params['startTime'];
                     $end = $params['endTime'];
                     foreach ($taskToActivity as $t) {
                         if ($t['task']['id'] != $params['id']) {
                             $start = $t['task']['startTime'] < $start ? $t['task']['startTime'] : $start;
                             $end = $t['task']['endTime'] > $end ? $t['task']['endTime'] : $end;
                             $isAllDay = $isAllDay == 1 && $t['task']['allDay'] == '1' ? 1 : 0;
                         }
                     }
                     if ($event['allDay'] == '0' || isset($params['allDay']) && $params['allDay'] == '0') {
                         $isAllDay = 0;
                     }
                     $toUpdate = array();
                     if ($start != $activity['startTime']) {
                         $toUpdate['startTime'] = $start;
                     }
                     if ($end != $activity['endTime']) {
                         $toUpdate['endTime'] = $end;
                         $toUpdate['due'] = $end;
                     }
                     if ($isAllDay != $activity['allDay']) {
                         $toUpdate['allDay'] = $isAllDay;
                     }
                     if (!empty($toUpdate)) {
                         Controller::update(array('concept' => 'schedulable', 'id' => $taskToActivity[0]['activity']), $toUpdate);
                     }
                 }
             }
         }
         /*
          * Clean historic not used
          * */
         unset($criteria['historic']['endTime']);
         unset($criteria['historic']['rangeEnd']);
         unset($criteria['historic']['rangeStart']);
         unset($criteria['historic']['class']);
         unset($criteria['historic']['type']);
         unset($criteria['historic']['allDay']);
         unset($criteria['historic']['id']);
         unset($criteria['historic']['lastUpdate']);
         unset($criteria['historic']['timezone']);
     }
 }