$v) { if(isset($v['labelId'])) { $labels = Controller::find( array( 'concept' => 'label' ) , false, array( 'filter' => array('=', 'id' , $v['labelId']) )); $result[$i]['label'] = $labels[0]; } } } return $result; } /** * Método a ser chamado na exclusão de um label, procedendo com a * desvinculação deste label com todas as mensagens a que estava vinculado */ //label:before.delete public function clearAllLabeledsOfLabel( &$uri , &$result , &$criteria , $original ){ $labeleds = Controller::find( array( 'concept' => 'labeled' ) , false, array( 'filter' => array('=', 'labelId' , $uri['id']) )); if (empty($labeleds)) return; $labeledsIds = array(); foreach ($labeleds as $e) { $labeledsIds[] = $e['id']; } Controller::delete( array( 'concept' => 'labeled' ), false, array( 'filter' => array( 'IN', 'id', $labeledsIds )) ); //return $result; } /** * Método a ser chamado ao listar os labeleds, uma vez que as funções de IMAP do PHP não são capazes de * obter a lista de todos os labels e nem são capazes de obter os labels de uma dada mensagem */ //labeled:before.find public function makeLabelListFilter( &$uri , &$result , &$criteria , $original ){ if (!isset($criteria['filter']) || !self::in_arrayr('labelId', $criteria['filter'])) { $labels = Controller::find( array( 'concept' => 'label' ) ); $list = array(); foreach ($labels as $label) $list[] = $label['id']; $filter = array( 'IN' , 'labelId' , $list ); if (isset($criteria['filter']) && $criteria['filter']!=NULL && count($criteria['filter']) != 0) $criteria['filter'] = array( 'AND', $criteria['filter'], $filter ); else $criteria['filter'] = $filter; } } public static function in_arrayr($needle, $haystack) { foreach ($haystack as $v) { if ($needle == $v) return true; elseif (is_array($v)) return self::in_arrayr($needle, $v); } return false; } /** * FOLLOWUPFLAG */ //followupflagged:after.find public function deepnessFollowupflaggeds( &$uri , &$result , &$criteria , $original ){ if(isset($original['criteria']['deepness'])) { foreach ($result as $i => $v) { if(isset($v['followupflagId'])) { $followupflag = Controller::find(array('concept' => 'followupflag'), false, array('filter' => array('=', 'id', $v['followupflagId']) )); $result[$i]['followupflag'] = $followupflag[0]; } if(isset($v['messageNumber']) && isset($v['folderName'])) { $details = $original['criteria']['deepness'] == '1' ? 'headers' : 'all'; $imapService = new imap_functions(); $message = $imapService->getMessages(array('messages' => array($v['folderName'] => array($v['messageNumber'])), 'details' => $details)); $result[$i]['message'] = $message[$v['folderName']][0]; } } } return $result; } //followupflagged:PostgreSQL.before.find public function clearFilterAtFind( &$uri , &$params , &$criteria , $original ) { if ($criteria['filter'] && !self::in_arrayr('id', $criteria['filter'])) { unset($criteria['filter']); } } /** * Método a ser chamado ao listar os sinalizadores, uma vez que as funções de IMAP do PHP não são capazes de * obter a lista de todos os sinalizadores e nem são capazes de obter os sinalizadores de uma dada mensagem */ //followupflagged:PostgreSQL.after.find public function doImapFind( &$uri , &$result , &$criteria , $original ){ if (!self::in_arrayr('id', $original['criteria']['filter'])) { if ($result) { $list = array(); foreach ($result as $followupflagged) $list[] = $followupflagged['id']; $filter = array( 'IN' , 'id' , $list ); if (isset($original['criteria']['filter']) && $original['criteria']['filter']!=NULL && count($original['criteria']['filter']) != 0) $criteria['filter'] = array( 'AND', $original['criteria']['filter'], $filter ); else $criteria['filter'] = $filter; } } $imap_uri = $uri; $imap_uri['service'] = 'Imap'; $imap_result = Controller::find($imap_uri, $params, $criteria); /** * Mescla os dados vindos do PostgreSQL com os dados vindos do Imap */ $merge_result = array (); foreach ($imap_result as $ir) { list($messageId, $flagId) = explode('#', $ir['id']); foreach($result as $r) { if ($r['id'] == $flagId) { $r['messageNumber'] = $ir['messageNumber']; $r['folderName'] = $ir['folderName']; $merge_result[] = $r; } } } return $merge_result; } //followupflagged:PostgreSQL.before.create public function letFollowupflaggedKeepUnique (&$uri , &$params , &$criteria , $original ){ if (isset($params['folderName']) && isset($params['messageNumber'])) { $filter = array ( 'AND', array('=', 'folderName', $params['folderName']), array('=', 'messageNumber', $params['messageNumber']) ); Controller::delete( array( 'concept' => 'followupflagged' ), false, array( 'filter' => $filter)); } } /* public function clearAllFlaggedOfFollowupflag( &$uri , &$result , &$criteria , $original ){ //TODO - filter return $result; } */ //followupflagged:PostgreSQL.after.create public function doImapCreate( &$uri , &$params , &$criteria , $original ) { $imap_uri = $uri; $imap_uri['service'] = 'Imap'; $imap_params = $params + $original['properties']; if ($imap_params['folderName'] && $imap_params['messageNumber'] && $imap_params['id']) { $imap_uri['id'] = $imap_params['folderName'] . '/' . $imap_params['messageNumber'] . '#' . $imap_params['id']; $imap_params['id'] = $imap_params['folderName'] . '/' . $imap_params['messageNumber'] . '#' . $imap_params['id']; $result = Controller::create($imap_uri, $imap_params); } } //followupflagged:PostgreSQL.before.read public function doImapRead( &$uri , &$params , &$criteria , $original ) { //TODO - read //$imap_uri = $uri; //$imap_uri['service'] = 'Imap'; //$result = Controller::read($imap_uri, $params, $criteria); } //followupflagged:PostgreSQL.before.delete public function doImapDelete( &$uri , &$params , &$criteria , $original ) { $toGetURI = $uri; $flagged = Controller::read($toGetURI); //assumindo que $criteria['filter'] venha sempre vazio no delete $imap_criteria['filter'] = array(); foreach ($flagged as $key => $value) { $imap_criteria['filter'][] = array('=', $key, $value); } if($imap_criteria['filter']) array_unshift($imap_criteria['filter'], 'AND'); $imap_uri = $uri; $imap_uri['service'] = 'Imap'; if ($flagged && $flagged['id']) { $flagged['id'] = $flagged['folderName'] . '/' . $flagged['messageNumber'] . '#' . $flagged['id']; $imap_uri['id'] = $flagged['id']; } $result = Controller::delete($imap_uri, $params, $imap_criteria); } //followupflagged:PostgreSQL.before.update public function doImapUpdate( &$uri , &$params , &$criteria , $original ) { //TODO - update //$imap_uri = $uri; //$imap_uri['service'] = 'Imap'; //$result = Controller::update($imap_uri, $params, $criteria); } } ?>