/** * 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; }
$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))); }
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)); } } }
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']); } }