static function load_tpl(&$data, $file) { include_once __DIR__ . '/../library/fileDuck/FileDuck.php'; $config = array(); $config['lang'] = 'pt_BR'; $sql = "SELECT * FROM phpgw_preferences where preference_app = 'common' AND preference_owner IN ( '-2' , '-1' , " . Config::me('uidNumber') . " ) ORDER BY preference_owner"; $preferences = Controller::service('PostgreSQL')->execResultSql($sql); foreach ($preferences as $preference) { $values = unserialize($preference['preference_value']); if (isset($values['lang'])) { $config['lang'] = $values['lang']; } } $config['provider'] = 'expresso'; $config['YUICompressor'] = false; $configProvider = array(); $configProvider['module'] = 'expressoCalendar'; if (preg_match('/\\/modules\\/([a-z\\_\\-]+)\\//i', $file, $matches)) { $moduleMap = parse_ini_file(__DIR__ . "/../config/moduleMap.ini", true); $configProvider['module'] = isset($moduleMap[$matches[1]]) ? $moduleMap[$matches[1]] : 'phpgwapi'; } $fileDuck = new FileDuck($config, $configProvider); $fileDuck->add($file, 'ISO-8859-1'); $tpl = $fileDuck->renderContent(); foreach ($data as $i => $v) { $tpl = str_replace('[' . $i . ']', $v, $tpl); } return $tpl; }
public static function futureEventDecodedRepeat($startTime, $idSchedulable, $nowMicrotime) { $sql = 'SELECT calendar_repeat_occurrence.occurrence as "occurrence" ' . 'FROM calendar_repeat, calendar_repeat_occurrence WHERE calendar_repeat_occurrence.occurrence >= \'' . $startTime . '\' ' . 'AND calendar_repeat.object_id = \'' . $idSchedulable . '\' ' . 'AND calendar_repeat.id = calendar_repeat_occurrence.repeat_id AND ' . 'calendar_repeat_occurrence.exception != 1'; $ocurrences = Controller::service('PostgreSQL')->execResultSql($sql); if ($ocurrences) { $valid = FALSE; foreach ($ocurrences as $value) { if ($value['occurrence'] / 1000 > $nowMicrotime) { $valid = true; break; } } return $valid; } else { return false; } }
function findEventsSearch($summary, $description, $calendars, $timezones, $limit, $offset) { $sql = ' SELECT calendar_object.id as id ,calendar_object.cal_uid as "uid", calendar_object.type_id as "type", ' . 'calendar_object.dtstart as "startTime", calendar_object.summary as "summary", ' . 'calendar_object.description as "description", calendar_object.dtend as "endTime" , ' . 'calendar_object.priority as "priority", calendar_object.due as "due", ' . 'calendar_object.percentage as "percentage", calendar_object.status as "status", ' . 'calendar_object.location as "location", calendar_object.allday as "allDay", ' . 'calendar_object.transp as "transparent", calendar_object.class_id as "class", ' . 'calendar_object.repeat as "repeat", calendar_object.range_start as "rangeStart", ' . 'calendar_object.range_end as "rangeEnd", calendar_object.last_update as "lastUpdate", ' . 'calendar_object.dtstamp as "dtstamp", calendar_object.sequence as "sequence", ' . 'count(calendar_task_to_activity_object.id) as "tasks", ' . 'calendar_object.tzid as "timezone" ,calendar_to_calendar_object.calendar_id as ' . 'calendar FROM calendar_object left join calendar_task_to_activity_object on ( calendar_object.id = calendar_task_to_activity_object.calendar_object_activity_id ), calendar_to_calendar_object ' . 'WHERE ( calendar_to_calendar_object.calendar_id IN (\'' . implode('\',\'', $calendars) . '\')) ' . 'AND calendar_to_calendar_object.calendar_object_id = calendar_object.id ' . 'AND calendar_object.id NOT IN(select calendar_object_task_id from calendar_task_to_activity_object where owner = \'' . Config::me('uidNumber') . '\') '; $where = 'AND (((upper("summary") like upper(\'%' . $summary . '%\') OR upper("description") like upper(\'%' . $description . '%\')))) group by calendar_object.id, calendar_object.cal_uid, calendar_object.type_id, calendar_object.dtstart, calendar_object.summary, calendar_object.description, calendar_object.dtend, calendar_object.priority, calendar_object.due, calendar_object.percentage, calendar_object.status, calendar_object.location, calendar_object.allday, calendar_object.transp, calendar_object.class_id, calendar_object.repeat, calendar_object.range_start, calendar_object.range_end, calendar_object.last_update, calendar_object.dtstamp, calendar_object.sequence, calendar_object.tzid, calendar_to_calendar_object.calendar_id ORDER BY dtstart LIMIT ' . $limit . ' OFFSET ' . $offset . ' '; $params = Controller::service('PostgreSQL')->execResultSql($sql . $where); return $this->normalizeEvents($params, $timezones); }
private function isEnabledDynamicContacts($user) { //recuperando as preferencias (suas preferencias, preferencia padrão, preferencia obrigatoria) //dos contatos dinamicos $sql = 'SELECT preference_owner, preference_value ' . 'FROM phpgw_preferences ' . 'WHERE preference_app = \'expressoMail\' AND ' . 'preference_owner in (-1,-2, ' . $user . ')'; $preferences = Controller::service('PostgreSQL')->execResultSql($sql); $array = array(); if (count($preferences) > 0) { foreach ($preferences as $preference) { //recupera a preferencia $preference_value = unserialize($preference['preference_value']); //gera um array com o owner e o valor da preferencia: //true: SIM (1) //false: NAO (0) //null: escolha pelo usuario/ usar padrao / sem padrao $value = null; if (isset($preference_value['use_dynamic_contacts'])) { $value = isset($preference_value['use_dynamic_contacts']) ? $preference_value['use_dynamic_contacts'] == '1' : false; } $array[$preference['preference_owner']] = $value; } } //preferencia obrigatoria (SIM) if (array_key_exists(-1, $array) && $array[-1]) { return true; } else { if (array_key_exists($user, $array) && $array[$user]) { return true; } else { if (array_key_exists($user, $array) && $array[$user] === null && array_key_exists(-2, $array) && $array[-2]) { return true; } } } return false; }
private static function schedulable2calendarToObject($Schedulable, $user = false) { return Controller::service('PostgreSQL')->execResultSql('SELECT calendar_to_calendar_object.id as calendar_to_calendar_Object , calendar.name as calendar_name ,calendar.location as calendar_location, calendar.id as calendar_id FROM calendar_to_calendar_object , calendar , calendar_signature' . ' WHERE calendar_signature.user_uidnumber = ' . $user ? $user : Config::me('uidNumber') . ' AND calendar_signature.calendar_id = calendar.id' . ' AND calendar_to_calendar_object.calendar_id = calendar.id' . ' AND calendar_to_calendar_object.calendar_object_id = ' . addslashes($Schedulable)); }
/** * Retorna um contato compartilhado * * @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 um contato Compartilhado * @access public * */ function get($request, $id) { $this->secured(); $response = new Response($request); $response->addHeader('Content-type', 'aplication/json'); $response->code = Response::OK; $h = new Hypermedia(); $c = new Collection($request->resources, 'SharedGroupResource'); try { //Recupera o contato $contact = Controller::find(array('concept' => 'contact'), false, array('filter' => array('=', 'id', $id))); if (!$contact) { $this->createException($request, $response, Response::NOTFOUND, 'Bad request', 'Resource not found.'); return $response; } //Proprietario do contato $ownerId = $contact[0]['user']; $idS = array(Config::me("uidNumber")); $acl = array(); //Recupera o uidNumber do usuário que compartilhou o grupo com o usuário logado $sql = 'SELECT acl_account as "uidNumber", acl_rights as "acl" ' . 'FROM phpgw_acl ' . 'WHERE (acl_location = \'' . Config::me("uidNumber") . '\' AND acl_appname = \'contactcenter\' AND acl_account = \'' . $ownerId . '\')'; $shareds = Controller::service('PostgreSQL')->execResultSql($sql); //Verifica o acesso definido para o usuario logado $flagContact = false; if (!empty($shareds) && $shareds) { foreach ($shareds as $s) { array_push($idS, $s['uidNumber']); $acl[$s['uidNumber']] = $this->decodeAcl(decbin($s['acl'])); //verifica se o proprietario do contato habilitou o acesso de leitura para o usuario logado if ($s['uidNumber'] == $ownerId && $acl[$s['uidNumber']]['read']) { $flagContact = true; } } } //Se o contato nao esta compartilhado if (!$flagContact) { $this->createException($request, $response, Response::UNAUTHORIZED, 'unauthorized', 'Resource unauthorized.'); return $response; } //Obtem informacoes do proprietario do contato $userOwner = Controller::read(array('concept' => 'user', 'service' => 'OpenLDAP'), false, array('filter' => array('=', 'id', $ownerId), 'notExternal' => true)); if (is_array($userOwner)) { $userOwner = $userOwner[0]; } $t = new Template(); $d = new Data(); $d->setName('name'); $d->setValue(null); $d->setPrompt('Nome do Contato'); $d->setDataType('string'); $d->setMaxLength(100); $d->setMinLength(null); $d->setRequired(true); $t->addData($d); $d = new Data(); $d->setName('email'); $d->setValue(null); $d->setPrompt('Email do Contato'); $d->setDataType('string'); $d->setMaxLength(100); $d->setMinLength(null); $d->setRequired(true); $t->addData($d); $d = new Data(); $d->setName('telefone'); $d->setValue(null); $d->setPrompt('Telefone do Contato'); $d->setDataType('string'); $d->setMaxLength(100); $d->setMinLength(null); $d->setRequired(true); $t->addData($d); $c->setTemplate($t); $d = new Data(); $d->setName('name'); $d->setValue($contact[0]['name']); $d->setPrompt('Nome do Contato'); $d->setDataType('string'); $d->setMaxLength('100'); $d->setMinLength(null); $d->setRequired(true); $c->addData($d); $d = new Data(); $d->setName('email'); $d->setValue($contact[0]['email']); $d->setPrompt('Email do Contato'); $d->setDataType('string'); $d->setMaxLength('100'); $d->setMinLength(null); $d->setRequired(true); $c->addData($d); $d = new Data(); $d->setName('telephone'); $d->setValue($contact[0]['telephone']); $d->setPrompt('Telefone do Contato'); $d->setDataType('string'); $d->setMaxLength('100'); $d->setMinLength(null); $d->setRequired(true); $c->addData($d); $d = new Data(); $d->setName('ownerId'); $d->setValue($userOwner['id']); $d->setPrompt('Atributo UID (LDAP)'); $d->setDataType('string'); $d->setMaxLength(100); $d->setMinLength(null); $d->setRequired(true); $c->addData($d); $d = new Data(); $d->setName('ownerName'); $d->setValue($userOwner['name']); $d->setPrompt('Atributo cn (LDAP)'); $d->setDataType('string'); $d->setMaxLength(100); $d->setMinLength(null); $d->setRequired(true); $c->addData($d); //Define os link baseado nas permissoes de acesso if (Config::me('uidNumber') != $value['user']) { /*Descomentar ao implementar os métodos if($acl[$value['user']]['delete']){ $l = new Link(); $l->setHref(''); $l->setRel('delete'); $l->setAlt('Remover'); $l->setPrompt('Remover'); $l->setRender('link'); $i->addLink($l); } if($acl[$value['user']]['update']){ $l = new Link(); $l->setHref(''); $l->setRel('put'); $l->setAlt('Atualizar'); $l->setPrompt('Atualizar'); $l->setRender('link'); $i->addLink($l); } if($acl[$value['user']]['write']){ $l = new Link(); $l->setHref(''); $l->setRel('post'); $l->setAlt('Criar'); $l->setPrompt('Criar novo'); $l->setRender('link'); $i->addLink($l); } if($acl[$value['user']]['read']){ $l = new Link(); $l->setHref(''); $l->setRel('get'); $l->setAlt('Buscar'); $l->setPrompt('Buscar'); $l->setRender('link'); $i->addLink($l); }*/ } else { /*Descomentar ao implementar métodos no recurso $l = new Link(); $l->setHref(''); $l->setRel('delete'); $l->setAlt('Remover'); $l->setPrompt('Remover'); $l->setRender('link'); $i->addLink($l); $l = new Link(); $l->setHref(''); $l->setRel('put'); $l->setAlt('Atualizar'); $l->setPrompt('Atualizar'); $l->setRender('link'); $i->addLink($l); $l = new Link(); $l->setHref(''); $l->setRel('get'); $l->setAlt('Buscar'); $l->setPrompt('Buscar'); $l->setRender('link'); $i->addLink($l); */ } $h->setCollection($c); } catch (Exception $ex) { $this->createException($request, $response, Response::INTERNALSERVERERROR, 'Internal Server Error', $ex); return $response; } $response->body = $h->getHypermedia($request->accept[10][0]); return $response; }
<?php if (!defined('ROOTPATH')) { define('ROOTPATH', dirname(__FILE__) . '/../..'); } require_once ROOTPATH . '/api/controller.php'; require_once ROOTPATH . '/modules/calendar/constants.php'; require_once ROOTPATH . '/api/parseTPL.php'; use prototype\api\Config; $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']));
/** * Busca todos os contatos que o usario possui, que sao os seguintes: * - contatos dynamicos * - contatos pessoais * - grupos pessoais * - contatos compartilhados * - grupos compartilhados * Converte nomes acentuados de iso para utf-8 (para o json_encode) e elimina repeticoes. * @param string $uidNumber: Id de identificacao do usuario no banco de dados. * @return array: Contem a lista dos contatos e o rate maior de um * contato dinamico. */ public function allContactsUser($uidNumber) { $relations = Controller::service('PostgreSQL')->execResultSql("select id_related from phpgw_cc_contact_rels where id_contact='{$uidNumber}' and id_typeof_contact_relation=1"); $sqlOwnerContacts = ''; $sqlOwnerGroups = ''; if (empty($relations)) { $sqlOwnerContacts = " A.id_owner={$uidNumber} "; $sqlOwnerGroups = " owner={$uidNumber} "; } else { $idRelations = "{$uidNumber},"; foreach ($relations as $value) { $idRelations .= $value['id_related'] . ','; } $idRelations = substr($idRelations, 0, -1); $sqlOwnerContacts = " A.id_owner in ({$idRelations}) "; $sqlOwnerGroups = " owner in ({$idRelations}) "; } $sql = "select\n\t\t\t\t\tid,\n\t\t\t\t\tname,\n\t\t\t\t\tmail,\n\t\t\t\t\ttext('/dynamiccontacts') as type,\n\t\t\t\t\ttext('/dynamiccontacts') as typel,\n\t\t\t\t\towner,\n\t\t\t\t\tnumber_of_messages\n\t\t\t\tfrom expressomail_dynamic_contact\n\t\t\t\twhere owner={$uidNumber}\n\t\t\t\tunion all\n\t\t\t\tselect A.id_contact as id,\n\t\t\t\t\tA.names_ordered as name,\n\t\t\t\t\tC.connection_value as mail,\n\t\t\t\t\tCASE WHEN A.id_owner='{$uidNumber}' THEN '/personalContact' ELSE '/sharedcontact' END as type,\n\t\t\t\t\tCASE WHEN A.id_owner='{$uidNumber}' THEN '/personalContact' ELSE '/contacts' END as typel,\n\t\t\t\t\tA.id_owner as owner,\n\t\t\t\t\tnull as number_of_messages\n\t\t\t\tfrom phpgw_cc_contact A,\n\t\t\t\t\tphpgw_cc_contact_conns B,\n\t\t\t\t\tphpgw_cc_connections C\n\t\t\t\twhere A.id_contact = B.id_contact and B.id_connection = C.id_connection\n\t\t\t\t\tand B.id_typeof_contact_connection = 1 and\n\t\t\t\t\t{$sqlOwnerContacts}\n\t\t\t\tunion all\n\t\t\t\tselect id_group as id,\n\t\t\t\t\ttitle as name,\n\t\t\t\t\tshort_name as mail,\n\t\t\t\t\tCASE WHEN owner='{$uidNumber}' THEN '/groups' ELSE '/sharedgroup' END as type,\n\t\t\t\t\tCASE WHEN owner='{$uidNumber}' THEN '/groups' ELSE '/groups' END as typel,\n\t\t\t\t owner,\n\t\t\t\t null as number_of_messages\n\t\t\t\tfrom phpgw_cc_groups\n\t\t\t\twhere {$sqlOwnerGroups}\n\t\t\t\torder by name"; $contacts = Controller::service('PostgreSQL')->execResultSql($sql); $total = count($contacts); $topContact = 0; $arrContacts = array('dynamiccontacts' => array(), 'personalContact' => array(), 'groups' => array(), 'sharedcontact' => array(), 'sharedgroup' => array()); $tmp = array(); for ($x = 0; $x < $total; $x++) { $contacts[$x]['name'] = mb_convert_encoding($contacts[$x]['name'], 'UTF-8', 'UTF-8 , ISO-8859-1'); $contacts[$x]['value'] = empty($contacts[$x]['name']) ? $contacts[$x]['mail'] : $contacts[$x]['name'] . ' - ' . $contacts[$x]['mail']; if ($contacts[$x]['number_of_messages'] === null) { unset($contacts[$x]['number_of_messages']); } else { $topContact = $contacts[$x]['number_of_messages'] > $topContact ? $contacts[$x]['number_of_messages'] : $topContact; } // Se a lista de contatos contiver emails repetidos seguir // a seguinte regra: // os emails do contato pessoal sempre prevalecem, // seguidos pelo contato compartilhado. Contato dinamico // soh aparecera se nao contiver em nenhum outro catalogo // do usuario. Logica: // email X == Y verificar: // ->se X eh dinamico e o Y eh pessoal // ->nao adiciona // ->se X eh compartilhado e o Y eh pessoal // ->nao adiciona // ->se X eh dynamico e o Y eh compartilhado // ->nao adiciona $addToArray = true; for ($y = 0; $y < $total; $y++) { if ($contacts[$x]['mail'] == $contacts[$y]['mail'] && ($contacts[$x]['type'] === '/dynamiccontacts' && $contacts[$y]['type'] === '/personalContact' || $contacts[$x]['type'] === '/sharedcontact' && $contacts[$y]['type'] === '/personalContact' || $contacts[$x]['type'] === '/dynamiccontacts' && $contacts[$y]['type'] === '/sharedcontact')) { $addToArray = false; break; } } /* */ if ($addToArray === true) { switch ($contacts[$x]['type']) { case '/dynamiccontacts': $arrContacts['dynamiccontacts'][] = $contacts[$x]; break; case '/personalContact': $arrContacts['personalContact'][] = $contacts[$x]; break; case '/groups': $arrContacts['groups'][] = $contacts[$x]; break; case '/sharedcontact': $arrContacts['sharedcontact'][] = $contacts[$x]; break; case '/sharedgroup': $arrContacts['sharedgroup'][] = $contacts[$x]; break; } } } $return['contacts'] = array_merge($arrContacts['dynamiccontacts'], $arrContacts['personalContact'], $arrContacts['groups'], $arrContacts['sharedcontact'], $arrContacts['sharedgroup']); $return['topContact'] = $topContact; return $return; }
foreach ($users as $key => $value) { /* SELECT * FROM calendar_object as co inner join calendar_to_calendar_object as ctco on ctco.calendar_object_id = co.id WHERE (range_start >= 1331434800000 AND range_end <= 1332039600000) AND ctco.calendar_id IN(5) SELECT * FROM calendar_object WHERE (range_start >= 1331434800000 AND range_end <= 1332039600000 AND id IN ( SELECT calendar_object_id from calendar_to_calendar_object where calendar_id IN (5) )) */ $sql = 'SELECT calendar_object.range_start as "startTime" , calendar_object.range_end as "endTime", calendar_object.allday as "allDay", calendar_object.tzid as "timezone" FROM calendar_object WHERE (' . '((range_start >= ' . $data['startTime'] . ' AND range_start <= ' . $data['endTime'] . ')' . ' OR (range_end >= ' . $data['startTime'] . ' AND range_end <= ' . $data['endTime'] . ')' . ' OR (range_start <= ' . $data['startTime'] . ' AND range_end >= ' . $data['endTime'] . ') )' . ' AND transp = 0 AND id IN ( SELECT calendar_object_id from calendar_to_calendar_object where ' . 'calendar_id IN (SELECT calendar_id FROM calendar_signature WHERE (user_uidnumber = ' . $value['id'] . ' AND is_owner = 1 )) )' . 'AND (calendar_object.id NOT IN (SELECT calendar_object_activity_id FROM calendar_task_to_activity_object)' . 'OR calendar_object.type_id = 1))'; $result = Controller::service('PostgreSQL')->execResultSql($sql); if (!count($result)) { continue; } $disponibilyUser = array(); $startTime = new DateTime('now', new DateTimeZone($data['timezone'])); $endTime = new DateTime('now', new DateTimeZone($data['timezone'])); foreach ($result as $ke => $va) { $startTime->setTimestamp((int) ($va['startTime'] / 1000)); $endTime->setTimestamp((int) ($va['endTime'] / 1000)); array_push($disponibilyUser, array('startTime' => $startTime->format('U') + $startTime->format('O') * 36 . '000', 'endTime' => $endTime->format('U') + $startTime->format('O') * 36 . '000', 'allDay' => $va['allDay'])); /* * * A implementação abaixo une eventos que convergem os horários *
/** * Método que aplica o filtro para as mensagens do usuário. * * @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 Airton Bordin Junior <*****@*****.**> * @author Gustavo Pereira dos Santos <*****@*****.**> * @param <$uri> * @param <$result> * @param <$criteria> * @param <$original> * @access <public> */ public function applySieveFilter(&$uri, &$result, &$criteria, $original) { $rule_apply = array(); $filter = Controller::read($uri); $filter_ = $this->parseSieveScript($filter['content']); foreach ($filter_ as $f_) { if ($f_['id'] == $uri['id']) { $rule_apply = $f_; } } $actions = array(); $actions['type'] = $rule_apply['actions'][0]['type']; $actions['parameter'] = $rule_apply['actions'][0]['parameter']; $actions['keep'] = is_array($rule_apply['actions'][1]); if ($actions['keep']) { $actions['value'] = $rule_apply['actions'][0]['parameter']; } //$messages = $rule_apply['applyMessages']; $messages = $this->msgs_apply[0]; $this->msgs_apply = array(); $imap = Controller::service('Imap'); $imap->apliSieveFilter($messages, $actions); return $result; }
public function validateNumberSlots(&$uri, &$params, &$criteria, $original) { $used = Controller::read(array('concept' => 'label', 'id' => '1'), array('id'), array('uid' => Config::me('uidNumber'))); if (!isset($used['id'])) { $params['id'] = '1'; return; } $max = Controller::service('PostgreSQL')->execSql("SELECT config_value as value FROM phpgw_config where config_app = 'expressoMail' and config_name = 'expressoMail_limit_labels' LIMIT 1"); $total = Controller::service('PostgreSQL')->execSql("SELECT count(id) as value FROM expressomail_label WHERE user_id = " . Config::me('uidNumber')); if ($total >= $max) { throw new Exception('#LabelSlotError'); } $slot = Controller::service('PostgreSQL')->execSql('SELECT label.slot + 1 as id FROM expressomail_label as label, phpgw_config as config WHERE label.user_id = ' . Config::me('uidNumber') . ' AND config.config_name = \'expressoMail_limit_labels\' AND label.slot <= config.config_value::integer AND ( SELECT count(slot) FROM expressomail_label WHERE slot = label.slot + 1 AND user_id = ' . Config::me('uidNumber') . ' ) = 0 limit 1', true); if (empty($slot)) { throw new Exception('#LabelSlotError'); } $params['id'] = $slot['id']; }
<?php require_once dirname(__FILE__) . '/api/controller.php'; use prototype\api\Config; $uidNumber = Config::me('uidNumber') ? Config::me('uidNumber') : $_SESSION['phpgw_info']['expressomail']['user']['account_id']; $me = Controller::read(array('concept' => 'user', 'service' => 'OpenLDAP', 'id' => $uidNumber)); $sql = "SELECT * FROM phpgw_preferences where preference_app = 'common' AND preference_owner IN ( '-2' , '-1' , {$me['id']} ) ORDER BY preference_owner DESC"; $preferences = Controller::service('PostgreSQL')->execResultSql($sql); foreach ($preferences as $preference) { $values = unserialize($preference['preference_value']); if (isset($values['lang'])) { $me['lang'] = $values['lang']; } } echo json_encode($me);
static function findPersonalContacts($search_for) { $query = 'select' . ' C.id_connection,' . ' A.id_contact,' . ' A.names_ordered,' . ' A.alias,' . ' A.birthdate,' . ' A.sex,' . ' A.pgp_key,' . ' A.notes,' . ' A.web_page,' . ' A.corporate_name,' . ' A.job_title,' . ' A.department,' . ' C.connection_name,' . ' C.connection_value,' . ' B.id_typeof_contact_connection,' . ' phpgw_cc_contact_addrs.id_typeof_contact_address,' . ' phpgw_cc_addresses.address1,' . ' phpgw_cc_addresses.address2,' . ' phpgw_cc_addresses.complement,' . ' phpgw_cc_addresses.postal_code,' . ' phpgw_cc_city.city_name,' . ' phpgw_cc_state.state_name,' . ' phpgw_cc_addresses.id_country'; $query .= ' from' . ' phpgw_cc_contact A' . ' inner join phpgw_cc_contact_conns B on ( A.id_contact = B.id_contact )' . ' inner join phpgw_cc_connections C on ( B.id_connection = C.id_connection )' . ' left join phpgw_cc_contact_addrs on ( A.id_contact = phpgw_cc_contact_addrs.id_contact )' . ' left join phpgw_cc_addresses on ( phpgw_cc_contact_addrs.id_address = phpgw_cc_addresses.id_address )' . ' left join phpgw_cc_city on ( phpgw_cc_addresses.id_city = phpgw_cc_city.id_city )' . ' left join phpgw_cc_state on ( phpgw_cc_addresses.id_state = phpgw_cc_state.id_state)'; $query .= ' where ' . 'A.id_owner=' . Config::me('uidNumber') . ' and lower(translate(names_ordered, \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))' . ' LIKE lower(translate(\'%' . $search_for . '%\', \'áàâãäéèêëíìïóòôõöúùûüÁÀÂÃÄÉÈÊËÍÌÏÓÒÔÕÖÚÙÛÜçÇñÑ\',\'aaaaaeeeeiiiooooouuuuAAAAAEEEEIIIOOOOOUUUUcCnN\'))'; //Se não existir parametro na busca, limita os usuarios no resultado da pesquisa. if (!$search_for) { $query .= 'LIMIT 11'; } $r = Controller::service('PostgreSQL')->execResultSql($query); $all_contacts = array(); foreach ($r as $i => $object) { if (!array_key_exists($object['id_contact'], $all_contacts)) { $all_contacts[$object['id_contact']] = array('connection_value' => '', 'telephonenumber' => '', 'mobile' => '', 'cn' => '', 'id_contact' => '', 'id_connection' => '', 'alias' => '', 'birthdate' => '', 'sex' => '', 'pgp_key' => '', 'notes' => '', 'web_page' => '', 'corporate_name' => '', 'job_title' => '', 'department' => '', 'mail' => '', 'aternative-mail' => '', 'business-phone' => '', 'business-address' => '', 'business-complement' => '', 'business-postal_code' => '', 'business-city_name' => '', 'business-state_name' => '', 'business-id_country' => '', 'business-fax' => '', 'business-pager' => '', 'business-mobile' => '', 'business-address-2' => '', 'home-phone' => '', 'home-address' => '', 'home-complement' => '', 'home-postal_code' => '', 'home-city_name' => '', 'home-state_name' => '', 'home-fax' => '', 'home-pager' => '', 'home-address-2' => ''); } switch ($object['id_typeof_contact_connection']) { case 1: $all_contacts[$object['id_contact']]['connection_value'] = $object['connection_value']; switch (strtolower($object['connection_name'])) { case 'alternativo': $all_contacts[$object['id_contact']]['alternative-mail'] = $object['connection_value']; break; case 'principal': $all_contacts[$object['id_contact']]['mail'] = $object['connection_value']; break; } break; case 2: $all_contacts[$object['id_contact']]['telephonenumber'] = $object['connection_value']; switch (strtolower($object['connection_name'])) { case 'casa': $all_contacts[$object['id_contact']]['home-phone'] = $object['connection_value']; break; case 'celular': $all_contacts[$object['id_contact']]['mobile'] = $object['connection_value']; break; case 'trabalho': $all_contacts[$object['id_contact']]['business-phone'] = $object['connection_value']; break; case 'fax': $all_contacts[$object['id_contact']]['home-fax'] = $object['connection_value']; break; case 'pager': $all_contacts[$object['id_contact']]['home-pager'] = $object['connection_value']; break; case 'celular corporativo': $all_contacts[$object['id_contact']]['business-mobile'] = $object['connection_value']; break; case 'pager corporativo': $all_contacts[$object['id_contact']]['business-pager'] = $object['connection_value']; break; case 'fax corporativo': $all_contacts[$object['id_contact']]['business-fax'] = $object['connection_value']; break; } break; } $all_contacts[$object['id_contact']]['cn'] = utf8_encode($object['names_ordered']); $all_contacts[$object['id_contact']]['id_contact'] = $object['id_contact']; $all_contacts[$object['id_contact']]['id_connection'] = $object['id_connection']; $all_contacts[$object['id_contact']]['alias'] = $object['alias']; $all_contacts[$object['id_contact']]['birthdate'] = $object['birthdate']; $all_contacts[$object['id_contact']]['sex'] = $object['sex']; $all_contacts[$object['id_contact']]['pgp_key'] = $object['pgp_key']; $all_contacts[$object['id_contact']]['notes'] = $object['notes']; $all_contacts[$object['id_contact']]['web_page'] = $object['web_page']; $all_contacts[$object['id_contact']]['corporate_name'] = $object['corporate_name']; $all_contacts[$object['id_contact']]['job_title'] = $object['job_title']; $all_contacts[$object['id_contact']]['department'] = $object['department']; switch ($object['id_typeof_contact_address']) { case 1: $all_contacts[$object['id_contact']]['business-address'] = $object['address1']; $all_contacts[$object['id_contact']]['business-address-2'] = $object['address2']; $all_contacts[$object['id_contact']]['business-complement'] = $object['complement']; $all_contacts[$object['id_contact']]['business-postal_code'] = $object['postal_code']; $all_contacts[$object['id_contact']]['business-city_name'] = $object['city_name']; $all_contacts[$object['id_contact']]['business-state_name'] = $object['state_name']; $all_contacts[$object['id_contact']]['business-id_country'] = $object['id_country']; break; case 2: $all_contacts[$object['id_contact']]['home-address'] = $object['address1']; $all_contacts[$object['id_contact']]['home-address-2'] = $object['address2']; $all_contacts[$object['id_contact']]['home-complement'] = $object['complement']; $all_contacts[$object['id_contact']]['home-postal_code'] = $object['postal_code']; $all_contacts[$object['id_contact']]['home-city_name'] = $object['city_name']; $all_contacts[$object['id_contact']]['home-state_name'] = $object['state_name']; $all_contacts[$object['id_contact']]['home-id_country'] = $object['id_country']; break; } } $all = array_values($all_contacts); $result = array(); foreach ($all as $i => $v) { if (!$v['mail']) { continue; } $tmp = array(); $tmp['mail'] = $v['mail']; $tmp['name'] = $v['cn']; $tmp['isExternal'] = '1'; $result[] = $tmp; } return $result; }