Changeset 5959 for trunk/prototype/modules/mail/interceptors
- Timestamp:
- 04/17/12 16:09:39 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/prototype/modules/mail/interceptors/Helpers.php
r5909 r5959 69 69 } 70 70 71 //label:before.create 72 public function verifyNameLabel(&$uri , &$params , &$criteria , $original){ 73 $nameLabel = $params['name']; 74 $Labels = Controller::find(array('concept' => 'label'), false, array('filter' => array('i=', 'name', $nameLabel) )); 75 if($Labels){ 76 Throw new Exception('Já existe um marcador com esse nome.'); 77 } 78 } 79 71 80 public static function in_arrayr($needle, $haystack) { 72 81 //if(!is_array($haystack)) return false; … … 78 87 return false; 79 88 } 80 81 89 82 90 /** … … 84 92 */ 85 93 86 //followupflag:before.find 87 public function addDefaultElementsFilter (&$uri , &$params , &$criteria , $original ){ 88 //if (!self::in_arrayr('id', $criteria['filter'])) { 89 $defaultsFilter = array( 'IN' , 'id' , array('1','2','3','4','5','6') ); 90 91 if (isset($criteria['filter']) && $criteria['filter']!=NULL && count($criteria['filter']) != 0) 92 $criteria['filter'] = array( 'OR', $criteria['filter'], $defaultsFilter ); 93 else 94 $criteria['filter'] = $defaultsFilter; 95 //} 96 } 97 98 //followupflagged:after.find 99 public function deepnessFollowupflaggeds( &$uri , &$result , &$criteria , $original ){ 100 101 if(isset($original['criteria']['deepness'])) 102 { 103 foreach ($result as $i => $v) 104 { 105 if(isset($v['followupflagId'])) 106 { 107 $followupflags = Controller::find(array('concept' => 'followupflag'), false, array('filter' => array('=', 'id', $v['followupflagId']) )); 108 109 /** 110 * Devido há inconsistencias na chamada do interceptor addDefaultElementsFilter (followupflag:before.find) 111 * os followupflag defaults são inseridos no retorno, por isso é necessário procurar o objeto correto 112 * através do id 113 */ 114 foreach ($followupflags as $followupflag) { 115 if ($v['followupflagId'] == $followupflag['id']) { 116 $result[$i]['followupflag'] = $followupflag; 117 break; 118 } 119 } 120 } 121 122 if(isset($v['messageNumber']) && isset($v['folderName'])) 123 { 124 $details = $original['criteria']['deepness'] == '1' ? 'headers' : 'all'; 125 126 $imapService = new imap_functions(); 127 $message = $imapService->getMessages(array('messages' => array($v['folderName'] => array($v['messageNumber'])), 'details' => $details)); 128 $result[$i]['message'] = $message[$v['folderName']][0]; 129 } 130 } 131 } 132 94 //Remove as dependencias de uma followupflag 95 public function clearAllFlaggedOfFollowupflag( &$uri , &$result , &$criteria , $original ){ 96 //remove apenas se vier o id da Followupflag 97 if(isset($uri['id'])) 98 Controller::deleteALL(array('concept' => 'followupflagged'), null , array('filter' => array('=' , 'followupflagId' , $uri['id']))); 99 100 } 101 102 103 //followupflagged:PostgreSQL.before.delete 104 public function doImapDelete( &$uri , &$params , &$criteria , $original ) { 105 106 $imap_uri = $uri; 107 $imap_uri['service'] = 'Imap'; 108 list($messageId, $uri['id']) = explode('#', $uri['id']); 109 110 $result = Controller::delete($imap_uri, $params, $imap_criteria); 111 112 if (!$result) 113 return false; 114 } 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 //followupflagged:PostgreSQL.before.create 143 public function doImapCreate( &$uri , &$params , &$criteria , $original ) { 144 145 $imap_uri = $uri; 146 $imap_uri['service'] = 'Imap'; 147 148 $params = Controller::create($imap_uri, $params); 149 150 if (!$params) 151 return false; 152 } 153 154 //followupflagged:PostgreSQL.after.read 155 public function doImapRead( &$uri , &$result , &$criteria , $original ) { 156 157 if ($reusult) { 158 $imap_result = Controller::read( 159 array('concept' => 'followupflagged', 'service' => 'Imap'), 160 false, 161 array('filter' => array('=', 'messageId', $result['messageId'])) 162 ); 163 } 164 165 if (!$imap_result) { 166 /** 167 * TODO - deletar do banco se não existe no imap 168 */ 169 return false; 170 } 171 172 $result = $result + $imap_result; 173 133 174 return $result; 134 } 135 136 //followupflagged:PostgreSQL.before.find 137 public function clearFilterAtFind( &$uri , &$params , &$criteria , $original ) { 138 139 if ($criteria['filter'] && 140 (self::in_arrayr('messageNumber', $criteria['filter']) || self::in_arrayr('folderName', $criteria['filter'])) ) { 141 unset($criteria['filter']); 142 } 143 144 /** 145 * TODO - fazer parse do $criteria['filter'] para fazer strip no id composto 146 */ 147 } 175 } 176 148 177 149 178 /** … … 153 182 //followupflagged:PostgreSQL.after.find 154 183 public function doImapFind( &$uri , &$result , &$criteria , $original ){ 155 /** 156 * TODO - ver implicações de busca com id no filtro 157 */ 158 159 if ($result) { 160 $list = array(); 161 foreach ($result as $followupflagged) 162 $list[] = $followupflagged['id']; 163 164 $filter = array( 'IN' , 'id' , $list ); 165 166 if (isset($original['criteria']['filter']) && $original['criteria']['filter']!=NULL && count($original['criteria']['filter']) != 0) 167 $criteria['filter'] = array( 'AND', $original['criteria']['filter'], $filter ); 168 else 169 $criteria['filter'] = $filter; 170 } 171 184 172 185 $imap_uri = $uri; 173 186 $imap_uri['service'] = 'Imap'; 174 $imap_result = Controller::find($imap_uri, $result, $criteria);175 187 $imap_result = Controller::find($imap_uri, false, $original['criteria']); 188 176 189 /** 177 190 * Mescla os dados vindos do PostgreSQL com os dados vindos do Imap … … 179 192 $merge_result = array (); 180 193 foreach ($imap_result as $ir) { 181 list($messageId, $flagId) = explode('#', $ir['id']); 182 194 183 195 foreach($result as $r) { 184 if ($r['id'] == $flagId) { 185 $r['id'] = $ir['id']; 186 $r['messageNumber'] = $ir['messageNumber']; 187 $r['folderName'] = $ir['folderName']; 188 189 $merge_result[] = $r; 196 if ($r['messageId'] == $ir['messageId']) { 197 $merge_result[] = $r + $ir; 198 break; 190 199 } 191 200 } … … 195 204 } 196 205 197 //followupflagged:Imap.before.create 198 public function letFollowupflaggedKeepUnique (&$uri , &$params , &$criteria , $original ){ 199 200 if (isset($params['folderName']) && isset($params['messageNumber'])) { 201 $filter = array ('AND', array('=', 'folderName', $params['folderName']), array('=', 'messageNumber', $params['messageNumber'])); 202 $toClearURI = array('concept' => 'followupflagged', 'service' => 'Imap'); 203 204 //Obtém do banco um possÃvel sinalizador existente 205 $imap_result = Controller::find($toClearURI, false, array('filter' => $filter)); 206 207 //Se existe um sinalizador nesta mensagem, deleta-o 208 foreach ($imap_result as $r) { 209 /** 210 * TODO - deletar sem id 211 */ 206 //followupflagged:PostgreSQL.before.find 207 public function reFilterFind (&$uri , &$params , &$criteria , $original ){ 208 /** 209 * Se p filtor incluir atributos da mensagem que o banco de dados não conhece, 210 * deve-se obter os messageId dos itens do resultado e passálos num novo filtro 211 * que o banco conheça 212 */ 213 if (self::in_arrayr('messageNumber', $criteria) || self::in_arrayr('folderName', $criteria)) { 214 $result = Controller::find(array('concept' => 'message'), array('messageId'), array('filter' => $criteria['filter'])); 215 $idList = array(); 216 foreach ($result as $message) 217 $idList[] = $message['messageId']; 212 218 213 //deleta no Imap 214 $toClearURI['id'] = $r['id']; 215 Controller::delete($toClearURI, false, false); 216 217 //deleta no PostgreSQL 218 list($messageId, $toClearURI['id']) = explode('#', $r['id']); 219 $toClearURI['service'] = 'PostgreSQL'; 220 Controller::delete($toClearURI, false, false); 221 } 222 } 223 224 } 225 226 //Remove as dependencias de uma followupflag 227 public function clearAllFlaggedOfFollowupflag( &$uri , &$result , &$criteria , $original ){ 228 //remove apenas se vier o id da Followupflag 229 if(isset($uri['id'])) 230 Controller::deleteALL(array('concept' => 'followupflagged'), null , array('filter' => array('=' , 'followupflagId' , $uri['id']))); 231 232 } 233 234 235 //followupflagged:PostgreSQL.after.create 236 public function doImapCreate( &$uri , &$result , &$criteria , $original ) { 237 /** 238 * Se não consegue salvar no banco, ele retorna objeto válido, porém sem id 239 */ 240 if (!isset($result['id'])) return false; 241 242 $imap_uri = $original['URI'];; 243 $imap_uri['service'] = 'Imap'; 244 245 $imap_params = array_merge($original['properties'], $result); 246 247 $result = array(); 248 if ($imap_params['folderName'] && $imap_params['messageNumber'] && $imap_params['id']) { 249 $imap_params['id'] = $imap_params['folderName'] . '/' . $imap_params['messageNumber'] . '#' . $imap_params['id']; 250 $result = Controller::create($imap_uri, $imap_params); 251 } 252 253 if (!$result) { 254 //TODO - rollback 255 } 256 } 257 258 //followupflagged:PostgreSQL.after.read 259 public function doImapRead( &$uri , &$result , &$criteria , $original ) { 260 261 $imap_uri = $original['URI']; 262 $imap_uri['service'] = 'Imap'; 263 264 $imap_result = Controller::read($imap_uri, $params, $imap_criteria); 265 266 if (!$imap_result) 267 return false; 268 269 $result = array_merge($result, $imap_result); 270 271 } 272 273 //followupflagged:PostgreSQL.before.<...> 274 public function stripURIAttrs( &$uri , &$params , &$criteria , $original ) { 275 list($messageId, $uri['id']) = explode('#', $uri['id']); 276 $params['id'] = $uri['id']; 277 } 278 279 //followupflagged:PostgreSQL.before.delete 280 public function doImapDelete( &$uri , &$params , &$criteria , $original ) { 281 282 $imap_uri = $uri; 283 $imap_uri['service'] = 'Imap'; 284 list($messageId, $uri['id']) = explode('#', $uri['id']); 285 286 $result = Controller::delete($imap_uri, $params, $imap_criteria); 287 288 if (!$result) 289 return false; 290 } 291 292 //followupflagged:PostgreSQL.before.update 293 public function doImapUpdate( &$uri , &$params , &$criteria , $original ) { 294 /** 295 * Para os conceitos "labeled" e "followupflagged", só faz sentido o update de 296 * atributos gravados no banco de dados e nunca no IMAP. 297 */ 298 //$imap_uri = $uri; 299 //$imap_uri['service'] = 'Imap'; 300 //$result = Controller::update($imap_uri, $params, $criteria); 301 } 302 303 304 //label:before.create 305 public function verifyNameLabel(&$uri , &$params , &$criteria , $original){ 306 $nameLabel = $params['name']; 307 $Labels = Controller::find(array('concept' => 'label'), false, array('filter' => array('i=', 'name', $nameLabel) )); 308 if($Labels){ 309 Throw new Exception('Já existe um marcador com esse nome.'); 310 } 311 } 219 $filter = array( 'IN' , 'messageId' , $idList ); 220 221 $criteria['filter'] = $filter; 222 } 223 } 312 224 313 225 }
Note: See TracChangeset
for help on using the changeset viewer.