source: branches/2.4/prototype/modules/filters/interceptors/FilterMapping.php @ 6590

Revision 6590, 22.7 KB checked in by eduardow, 12 years ago (diff)

Ticket #2865 - Exibição de mensagem ao mover pastas no Expresso Mail.

RevLine 
[5341]1<?php
[5539]2/**
3*
[6193]4* Copyright (C) 2011 Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
[5539]5*
6* This program is free software; you can redistribute it and/or modify it under
7* the terms of the GNU Affero General Public License version 3 as published by
8* the Free Software Foundation with the addition of the following permission
9* added to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED
10* WORK IN WHICH THE COPYRIGHT IS OWNED BY FUNAMBOL, FUNAMBOL DISCLAIMS THE
11* WARRANTY OF NON INFRINGEMENT  OF THIRD PARTY RIGHTS.
12*
13* This program is distributed in the hope that it will be useful, but WITHOUT
14* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
15* FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
16* details.
17*
18* You should have received a copy of the GNU Affero General Public License
19* along with this program; if not, see www.gnu.org/licenses or write to
20* the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
21* MA 02110-1301 USA.
22*
23* This code is based on the OpenXchange Connector and on the Prognus pSync
24* Connector both developed by the community and licensed under the GPL
25* version 2 or above as published by the Free Software Foundation.
26*
27* You can contact Prognus Software Livre headquarters at Av. Tancredo Neves,
[6193]28* 6731, PTI, Bl. 05, Esp. 02, Sl. 10, Foz do Iguaçu - PR - Brasil or at
[5539]29* e-mail address prognus@prognus.com.br.
30*
[6193]31* Descrição rápida do arquivo
[5539]32*
[6193]33* Arquivo responsável pela manipulação dos filtros
[5539]34*
35* @package    filters
36* @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]37* @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
[5539]38* @version    1.0
[6193]39* @sponsor    Caixa Econômica Federal
40* @since      Arquivo disponibilizado na versão 2.4
[5539]41*/
[5341]42
[6590]43use prototype\api\Config as Config;
[5539]44
45/**
[6193]46* Classe responsável pela manipulação dos filtros.
[5539]47*
48*
49* @package    prototype
50* @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]51* @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
[5862]52* @author     Airton Bordin Junior <airton@prognus.com.br>
53* @author     Gustavo Pereira dos Santos <gustavo@prognus.com.br>
[5539]54* @version    1.0
[6193]55* @since      Classe disponibilizada na versão 2.4
[5539]56*/
[5341]57class FilterMapping
58{
[5539]59        var $service;
[6392]60        var $msgs_apply = array();
[6021]61        /**
[6193]62        * Método que cria o ID da regra que está sendo criada.
[6021]63        *
64        * @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]65        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
66        * @sponsor    Caixa Econômica Federal
[6021]67        * @author     Airton Bordin Junior <airton@prognus.com.br>
68        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
69        * @author         Natan Fonseca <natan@prognus.com.br> 
70        * @param      <$uri>
71        * @param      <$result>
72        * @param      <$criteria>
73        * @param      <$original>
74        * @access     <public>
75        */
76        public function makeId(&$uri , &$result , &$criteria , $original) {
77                $result['id'] = $uri['id'];
78        }
[5539]79       
[6021]80       
[5539]81        /**
[6193]82        * Método que formata o Script de acordo com a sintaxe do Sieve.
[5539]83        *
84        * @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]85        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
86        * @sponsor    Caixa Econômica Federal
[5862]87        * @author     Airton Bordin Junior <airton@prognus.com.br>
88        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
[6193]89        * @param      <Array> <$rules> <Array com as regras do usuário>
[5539]90        * @return     <Regra de acordo com a sintaxe do Sieve>
91        * @access     <public>
92        */
93        public function formatSieveScript( $rules )
[5341]94    {
[5539]95                $require_fileinto = $require_flag = $require_reject = $require_vacation = $require_body = $require_imapflag = $vacation = $startswith = $endswith = false;
[5341]96
[5629]97                $script_rules = $script_header = $script_criteria = $vacation_action = "";
98
[5539]99                $i = 0;
[6009]100               
[5539]101                foreach( $rules as $name => $data )
[6009]102                {       
103                        if( $data['enabled'] == 'false' )
104                                continue;
105                               
[5747]106                        if(array_key_exists("block", $data)) {
[6193]107                                /* Usado na opção Bloquear usuário do ExpressoMail */
[5747]108                                if($data['block']) {
109                                        ($i >0) ? $script_match = 'elsif anyof' : $script_match = 'if anyof';
110                                        $script_match = $script_match . "(address :is \"from\" [\"" .$data['name'] . "\"]) {\r\n"; 
111                                        $script_match .= "fileinto \"INBOX/Spam\"; \r\n}\r\n";
112                                        $script_rules .= $script_match;
113                                        $script_match = "";
114                                        $script_criteria = "";
115                                        $require_fileinto = true;
116                                        $i++;
117                                        continue;
118                                }
[5630]119                        }
[6009]120                               
[5629]121                        $vacation = false;
[5539]122                        $criteria = $data['criteria'];
123                        $action   = $data['actions'];
124                       
125                        ($i >0) ? $script_match = 'els' : $script_match = '';
126                        $data['isExact'] == 'false' ?  $script_match .= 'if anyof (' : $script_match .= 'if allof (';
[5341]127
[5728]128                        if( is_array($criteria) )
[5996]129                        foreach ($criteria as $j => $value)
[5539]130                        {                                       
[6193]131                               
[5539]132                                switch($criteria[$j]['field']) {
133                                        case 'To':   
134                                        case 'to':   
135                                        case 'CC':
136                                        case 'Cc':
137                                                $criteria[$j]['field'] = "[\"To\", \"TO\", \"Cc\", \"CC\"]";
138                                                $script_criteria .= "address :";
139                                                break;
140                                        case 'from':
141                                                $criteria[$j]['field'] = "\"" . $criteria[$j]['field'] . "\"";
142                                                $script_criteria .= "address :";
143                                                break;
144                                        case 'size':   
145                                                $criteria[$j]['field'] = '';
146                                                $script_criteria .= "size :";
147                                                break;
148                                        case 'subject':
149                                                $criteria[$j]['field'] = "\"" . $criteria[$j]['field'] . "\"";
[6163]150                                                $criteria[$j]['value'] = "" . imap_8bit($criteria[$j]['value']) . "*\", \"" . base64_encode($criteria[$j]['value']) . "";
[6348]151                                                $criteria[$j]['operator'] = "^";  //temporary
[5539]152                                                $script_criteria .= "header :";
153                                                break;
154                                        case 'body':
155                                                $criteria[$j]['field'] = '';
156                                                $script_criteria .= "body :";
157                                                $require_body = true;
158                                                break;
159                                        case 'vacation':
[5601]160                                                continue;
[6163]161                                        case 'hasAttachment':
[6348]162                                                $criteria[$j]['field'] = '';
163                                                $script_criteria .= "body :";
164                                                $criteria[$j]['operator'] = "^^";
165                                                $require_body = true;
166                                                break;
[5539]167                                        default:
168                                                $script_criteria .= "header :";
169                                                break;
170                                }
171                               
172                                switch ($criteria[$j]['operator']) {
173                                        case '>':
174                                                $criteria[$j]['operator'] = "over";
[6001]175                                                $criteria[$j]['value'] = $criteria[$j]['value'] . "K";
[5539]176                                                break;
177                                        case '<':
178                                                $criteria[$j]['operator'] = "under";
[6001]179                                                $criteria[$j]['value'] = $criteria[$j]['value'] . "K";
[5539]180                                                break;
181                                        case '=':
182                                                $criteria[$j]['operator'] = "is";
183                                                $criteria[$j]['value'] = "[\"" . $criteria[$j]['value'] . "\"]";
184                                                break;
185                                        case '*':
186                                                $criteria[$j]['operator'] = "contains";
187                                                $criteria[$j]['value'] = "[\"" . $criteria[$j]['value'] . "\"]";
188                                                break;                                         
189                                        case '^':
190                                                $criteria[$j]['operator'] = "matches";
191                                                $criteria[$j]['value'] = "[\"" . $criteria[$j]['value'] . "*\"]";
192                                                $startswith = true;
193                                                break;
[6348]194                                        case '^^':
195                                                $criteria[$j]['operator'] = "raw :matches";
196                                                $criteria[$j]['value'] = "[\"*filename=*\"]";
197                                                $startswith = true;
198                                                break;
[5539]199                                        case '$':
200                                                $criteria[$j]['operator'] = "matches";
201                                                $criteria[$j]['value'] = "[\"*" . $criteria[$j]['value'] . "\"]";
202                                                $endswith = true;
203                                                break;
204                                        /*
205                                           TO-DO:
[6193]206                                           Inconsistência na regra do "não contém".
[5539]207                                        */
208                                        case '!*':
209                                                $criteria[$j]['operator'] = "contains";
210                                                $criteria[$j]['value'] = "[\"" . $criteria[$j]['value'] . "\"]";
211                                                break;
212                                }
213                               
214                                if ($criteria[$j]['field'] == "" || $criteria[$j]['field'] == "\"subject\"" || $startswith || $endswith)
215                                {
216                                        $script_criteria .= $criteria[$j]['operator'] . " " . $criteria[$j]['field'] . " " . $criteria[$j]['value'] . ", ";
217                                        $startswith = $endswith = false;
218                                }
219                                else
220                                        $script_criteria .= $criteria[$j]['operator'] . " " . $criteria[$j]['field'] . " " . $criteria[$j]['value'] . ", ";
221                        }
222                        $script_criteria = substr($script_criteria,0,-2);
[5629]223                        /* if ($vacation == false) */
224                        $script_criteria .= ")";
225
[5539]226                        $script_action = " {\r\n ";
[5728]227                       
[5747]228                        if( is_array($action) )
[5996]229                        foreach ($action as $k => $value)
[5539]230                        {
231                                switch ($action[$k]['type']) {
232                                        case 'redirect':
233                                                break;
234                                        case 'reject':
235                                                $require_reject = true;
236                                                break;
237                                        case 'fileinto':
238                                                $require_fileinto = true;
[6377]239                                                $action[$k]['parameter'] = mb_convert_encoding($action[$k]['parameter'], "UTF7-IMAP","UTF-8, ISO-8859-1, UTF7-IMAP");
[5539]240                                                break;
241                                        case 'vacation':
242                                                $require_vacation = true;
243                                                $action[$k]['parameter'] = "\"" . $action[$k]['parameter'] . "\"";
[6213]244                                                $vacation_action = ' :subject "Fora do Escrit&oacuterio" ' . $action[$k]['parameter'] . ";";
[5539]245                                                $vacation = true;
[5601]246                                                continue;
[5539]247                                        case 'setflag':
248                                                $require_flag = true;
249                                                $action[$k]['parameter'] = "\\\\" . $action[$k]['parameter'];
250                                                break;
251                                        case 'discard':
252                                                break;
253                                }
[5629]254                                if ($vacation == false) $script_action .= $action[$k]['type'] . " \"" . $action[$k]['parameter'] . "\";\r\n ";
[5539]255                        }
[5629]256                        $script_action .= "}";
257                       
[6163]258                        if($vacation == false)
[5629]259                                $script_rules .= $script_match . $script_criteria . $script_action . "\r\n";
[5539]260
[5629]261                        if($data['id'] != "vacation")
262                                $i++;
[5539]263                        $script_match = "";
[5862]264                        $script_criteria = ""; 
265                        $data['applyMessages'] = "";                                                   
[5341]266                }
[5539]267
268                if($require_reject || $require_fileinto || $require_vacation || $require_body || $require_flag)
[5341]269                {
[6348]270                        /* Para habilitar as funções desejadas, edite a diretiva sieve_extensions no arquivo de configuração "/etc/imapd.conf" */
[5539]271                        $script_header .= "require [";
272                        $require_reject ? $script_header .= "\"reject\", " : "";
273                        $require_fileinto ? $script_header .= "\"fileinto\", " : "";
274                        $require_vacation? $script_header .= "\"vacation\", " : ""; 
275                        $require_flag ? $script_header .= "\"imapflags\", " : ""; 
[6348]276                        $require_body ? $script_header .= "\"body\", " : ""; 
[5539]277                        $script_header = substr($script_header,0,-2);
278                        $script_header .= "];\r\n";
[5341]279                }
280
[5629]281                if( $vacation_action )
[5601]282                {
283                  $script_rules .= "vacation" . $vacation_action . "\r\n";
284                }
285
[6392]286                foreach ($rules as &$values) {                                         
287                        if($values['applyMessages'])
288                                $this->msgs_apply[] = $values['applyMessages'];
289                        $values['applyMessages'] = array();
290                }
291
[5539]292                $json_data = json_encode($rules);
293               
[6348]294                $script_begin = "#Filtro gerado por Expresso Livre\r\n\r\n";
[5341]295
[5539]296                $content = $script_begin . $script_header . $script_rules . "\r\n\r\n#PseudoScript#" . "\r\n#" . $json_data;
[6193]297               
[5539]298                return( $content );
[5341]299        }
[5539]300       
[5672]301        /**
[6193]302        * Método que lê e faz o parser dos filtros antigos
[5672]303        *
304        * @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]305        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
306        * @sponsor    Caixa Econômica Federal
[5862]307        * @author     Airton Bordin Junior <airton@prognus.com.br>
308        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
[6193]309        * @param      <$scriptName> <Regras do usuário>
310        * @return     <Regra do usuário parseada>
[5672]311        * @access     <public>
312        */
313        public function readOldScript($scriptName)
314        {
[6193]315        // Recebe o conteúdo do array;
[5672]316        $lines = array();
317        $lines = preg_split("/\n/", $scriptName);
[5341]318
[5672]319        // Pega o tamanho da regra na primeira do script;
320        $size_rule = array_shift($lines);
321
322        // Recebe o tamanho do script, pela primeira linha;
[5862]323        //$this->size = trim($size_rule);
[5672]324
[6193]325        // Verifica a composição do script; */
[5862]326        $line = array_shift($lines);
[5672]327
328        // Variaveis para a regra e o campo ferias;
[5862]329        $regexps = array('##PSEUDO', '#rule', '#vacation', '#mode');
[5672]330        $retorno['rule'] = array();
331
332        $line = array_shift($lines);
[5862]333        while (isset($line)) {
[5672]334            foreach ($regexps as $regp) {
[5862]335                if (preg_match("/$regp/i", $line)) {
[5672]336                    // Recebe todas as regras criadas no servidor;
[5862]337                    if (preg_match("/#rule&&/i", $line)) {
338                        $retorno['rule'][] = ltrim($line) . "\n";                         
[5672]339                    }
340                }
341            }
342            // Pega a proxima linha do sript;
343            $line = array_shift($lines);
344        }
345        return $retorno;
346    }
347       
348       
349       
350       
[5539]351        /**
[6193]352        * Método que faz o parsing do Script Sieve, transformando em Array.
[5539]353        *
354        * @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]355        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
356        * @sponsor    Caixa Econômica Federal
[5862]357        * @author     Airton Bordin Junior <airton@prognus.com.br>
358        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
[6193]359        * @param      <String> <$script> <Script Sieve com as regras do usuário>
360        * @return     <Regras do usuário em Array>
[5539]361        * @access     <public>
362        */
363        public function parseSieveScript( $script )
[5341]364        {
[6363]365                $old_rule = strripos($script, "##PSEUDO script start");
366                /* Tem regra antiga */
[5672]367                if($old_rule) {
[5862]368                        $parsed_rule = $this->readOldScript($script);
369                        $old_rules = array();
[6363]370                        $i_return = 0;
[5862]371                        foreach ($parsed_rule['rule'] as $i => $value) {
[6363]372                                $array_rule = explode("&&", $parsed_rule['rule'][$i]);
[5862]373                               
[6363]374                                $action_type = array();
375                                $action_parameter = array();
376                                $criteria_value = array();
377                                $criteria_operator = array();
378                                $criteria_field = array();
379                                       
380                                $i_criteria = 0;
381                                $i_action = 0;
[5672]382
[6193]383                                /* TO-DO: Ver as actions possíveis além de reject e fileinto */
[5862]384                                switch($array_rule[6]) {
385                                        case 'reject':
[6363]386                                                $action_type[$i_action] = 'reject';
387                                                $action_parameter[$i_action] = $array_rule[7];
388                                                $i_action++;
[5862]389                                                break;
390                                        case 'folder':
[6363]391                                                $action_type[$i_action] = 'fileinto';
392                                                $action_parameter[$i_action] = $array_rule[7];
393                                                $i_action++;
[5862]394                                                break;
[6363]395                                        case 'flagged':
396                                                $action_type[$i_action] = 'setflag';
397                                                $action_parameter[$i_action] = 'flagged';
398                                                $i_action++;
399                                                break;
400                                        case 'address':
401                                                $action_type[$i_action] = 'redirect';
402                                                $action_parameter[$i_action] = $array_rule[7];
403                                                $i_action++;
404                                                break;
405                                        /* Somente para tratar casos em que a ação não é suportada */
406                                        default:       
407                                                $action_type[$i_action] = 'setflag';
408                                                $action_parameter[$i_action] = 'flagged';
409                                                $i_action++;
410                                                break;
411                                        // Recuperar o cyrus_delimiter para forçar um fileinto para INBOX/trash
412                                        //case 'discard':
413                                                //$action_type[$i_action] = 'fileinto';
414                                                //$action_parameter[$i_action] =;
415                                                //$i_action++;
416                                                //break;
[5862]417                                }
418                                if($array_rule[3] != "") {
[6363]419                                        $criteria_value[$i_criteria] = $array_rule[3];
420                                        $criteria_operator[$i_criteria] = '=';
421                                        $criteria_field[$i_criteria] = 'from';
422                                        $i_criteria++;
[5862]423                                }
[6363]424                                if($array_rule[4] != "") {
425                                        $criteria_value[$i_criteria] = $array_rule[4];
426                                        $criteria_operator[$i_criteria] = '=';
427                                        $criteria_field[$i_criteria] = 'to';
428                                        $i_criteria++;
429                                }
430                                if($array_rule[5] != "") {
431                                        $criteria_value[$i_criteria] = $array_rule[5];
432                                        $criteria_operator[$i_criteria] = '=';
433                                        $criteria_field[$i_criteria] = 'subject';
434                                        $i_criteria++;
[5862]435                                }
436                                $old_retorno = array();
[6363]437                                $old_retorno['isExact']  = true;
438                                $old_retorno['name'] = 'regra_migrada_' . $array_rule[1];
439                               
440                                $old_retorno['criteria'] = array();                             
441                                foreach($criteria_value as $j => $value) {
442                                        $old_retorno['criteria'][$j] = array();
443                                        $old_retorno['criteria'][$j]['value'] = $criteria_value[$j];
444                                        $old_retorno['criteria'][$j]['operator'] = $criteria_operator[$j];
445                                        $old_retorno['criteria'][$j]['field'] = $criteria_field[$j];
446                                }
447                               
448                                $old_retorno['actions'] = array();                             
449                                foreach($action_parameter as $j => $value) {
450                                        $old_retorno['actions'][$j] = array();
451                                        $old_retorno['actions'][$j]['parameter'] = $action_parameter[$j];
452                                        $old_retorno['actions'][$j]['type'] = $action_type[$j];
453                                }
454                               
455                                $old_retorno['enabled'] = ($array_rule[2] == 'ENABLED') ? 'true' : 'false';
456                                $old_retorno['id'] = 'Regra_migrada_' . $i_return;
457                                $old_retorno['applyMessages']  = '';
[5862]458
[6363]459                                $old_rules[$i_return] = $old_retorno;
460                                $i_return++;
[5862]461                        }                       
462                        return $old_rules;
[5952]463                }
[6193]464                /* Não tem regra antiga */
[5539]465                $pos = strripos($script, "#PseudoScript#");
466                $pseudo_script = substr( $script, $pos+17 );
[5341]467
[5539]468                $return = json_decode( $pseudo_script, true );
[5862]469       
[5539]470                return $return;
471        }
[5341]472
[5539]473        var $rules = false;
[5341]474
[5539]475        /**
476        * Construtor da classe.
477        *
478        * @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]479        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
480        * @sponsor    Caixa Econômica Federal
[5862]481        * @author     Airton Bordin Junior <airton@prognus.com.br>
482        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
[5539]483        * @access     <public>
484        */
485        public function __construct()
486        {
487                $this->service = Controller::service("Sieve");
488        }
[5341]489
[5539]490       
491        /**
[6193]492        * Método que recupera as regras do usuário.
[5539]493        *
494        * @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]495        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
496        * @sponsor    Caixa Econômica Federal
[5862]497        * @author     Airton Bordin Junior <airton@prognus.com.br>
498        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
[6193]499        * @return     <Regras do usuário>
[5539]500        * @access     <public>
501        */
502        public function getRules()
503        {
504                $this->rules = Controller::find( array( 'concept' => 'filter' ) );
[5341]505
[5539]506                if( !$this->rules ) {
507                        $this->rules = array();
508                }
509                return( $this->rules );
510        }
[5341]511
[5539]512       
513        /**
[6193]514        * Método que aplica o filtro para as mensagens do usuário.
[5539]515        *
516        * @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]517        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
518        * @sponsor    Caixa Econômica Federal
[5862]519        * @author     Airton Bordin Junior <airton@prognus.com.br>
520        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
[5539]521        * @param      <$uri>
522        * @param      <$result>
523        * @param      <$criteria>
524        * @param      <$original>
525        * @access     <public>
526        */
527        public function applySieveFilter( &$uri , &$result , &$criteria , $original  )
528        {
[6392]529                $rule_apply = array();
[5862]530                       
[6392]531                $filter = Controller::read($uri);
532                $filter_ = $this->parseSieveScript($filter['content']);
533               
534                foreach ($filter_ as $f_) {
535                        if($f_['id'] == $uri['id']) {
536                                $rule_apply     = $f_;
[5692]537                        }
[6392]538                }
539                               
540                $actions = array();
541                $actions['type'] = $rule_apply['actions'][0]['type'];
542                $actions['parameter'] = $rule_apply['actions'][0]['parameter'];
543                /* Hardcoded */
544                $actions['keep'] = false;
[5862]545
[6392]546                //$messages = $rule_apply['applyMessages'];
547                $messages = $this->msgs_apply[0];
548                $this->msgs_apply = array();
549                       
550                $imap = Controller::service( 'Imap' );
551                $imap->apliSieveFilter($messages, $actions);
552                return $result;
[5539]553        }
[5341]554
[5539]555       
556        /**
[6193]557        * Método que lê o script do usuário.
[5539]558        *
559        * @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]560        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
561        * @sponsor    Caixa Econômica Federal
[5862]562        * @author     Airton Bordin Junior <airton@prognus.com.br>
563        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
[5539]564        * @param      <$uri>
565        * @param      <$result>
566        * @param      <$criteria>
567        * @param      <$original>
[6193]568        * @return     <Script do usuário>
[5539]569        * @access     <public>
570        */
571        public function readUserScript( &$uri , &$params , &$criteria , $original )
572        { 
573                $uri['id'] = $this->service->config['user'];
574        }
575 
576 
577        /**
[6193]578        * Método que seta o script do usuário.
[5539]579        *
580        * @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]581        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
582        * @sponsor    Caixa Econômica Federal
[5862]583        * @author     Airton Bordin Junior <airton@prognus.com.br>
584        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
[5539]585        * @param      <$uri>
586        * @param      <$result>
587        * @param      <$criteria>
588        * @param      <$original>
[6193]589        * @return     <Script do usuário>
[5539]590        * @access     <public>
591        */
592        public function setRule( &$uri , &$params , &$criteria , $original  )
[5601]593        {
[5630]594                if( !$this->rules )
[6392]595                        $this->rules = $this->getRules();
[5341]596
[5601]597            $uri['id'] = $params['id'] = isset($params['id']) ? $params['id'] : urlencode($params['name']);
[5341]598
[5601]599            $i = 0;
[5341]600
[5629]601            for( ; isset($this->rules[$i]) && $this->rules[$i]['id'] !== $params['id']; $i++ );
[5601]602
[5629]603            $this->rules[$i] = array_merge( ( isset($this->rules[$i]) ? $this->rules[$i] : array() ), $params );
[5601]604
605            $params = array( 'name' => $this->service->config['user'],
606                             'content' => $this->formatSieveScript( $this->rules ),
607                             'active' => true );
[5539]608        }
[5341]609
[5539]610       
611        /**
[6193]612        * Método que deleta o script do usuário.
[5539]613        *
614        * @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]615        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
616        * @sponsor    Caixa Econômica Federal
[5862]617        * @author     Airton Bordin Junior <airton@prognus.com.br>
618        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
[5539]619        * @param      <$uri>
620        * @param      <$result>
621        * @param      <$criteria>
622        * @param      <$original>
623        * @access     <public>
624        */
625        public function deleteRule( &$uri, &$params, &$criteria, $original )
626        {
[5601]627                if( !$this->rules ) {   
628                        $this->rules = $this->getRules();
629                }         
[5539]630                $params['id'] = $uri['id'];
[5341]631
[5601]632                $rules = array();
[5341]633
[5539]634                foreach( $this->rules as $i => $rule )
[5601]635                        if( $rule['id'] !== $uri['id'] )
636                                $rules[] = $this->rules[$i];
[5341]637
[5601]638                $this->rules = $rules;
639               
[5539]640                $uri['id'] = '';
[5341]641
[5539]642                $params = array( 'name' => $this->service->config['user'],
643                           'content' => $this->formatSieveScript( $this->rules ),
644                           'active' => true );
[5341]645
[5539]646                $URI = Controller::URI( $uri['concept'], $this->service->config['user'] );
647                $this->service->update( $URI, $params );
[5601]648       
[5539]649                return( false );
650        }
[5341]651
[5539]652       
653        /**
[6193]654        * Método que pega o script do usuário.
[5539]655        *
656        * @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]657        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
658        * @sponsor    Caixa Econômica Federal
[5862]659        * @author     Airton Bordin Junior <airton@prognus.com.br>
660        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
[5539]661        * @param      <$uri>
662        * @param      <$result>
663        * @param      <$criteria>
664        * @param      <$original>
[6193]665        * @return     <Script do usuário>
[5539]666        * @access     <public>
667        */
668        public function getSieveRule( &$uri , &$params , &$criteria , $original )
669        {         
670                $script = $this->parseSieveScript( $params['content'] );
[5341]671
[5539]672                foreach( $script as $i => $rule )
[5747]673                        if(is_array ($rule['name']) && is_array($original['id']))
[5539]674                        if( $rule['name'] === $original['id'] )
675                                return( $params = $rule );
676        }
[5341]677
[5539]678       
679        /**
[6193]680        * Método que lista as regras do usuário.
[5539]681        *
682        * @license    http://www.gnu.org/copyleft/gpl.html GPL
[6193]683        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
684        * @sponsor    Caixa Econômica Federal
[5862]685        * @author     Airton Bordin Junior <airton@prognus.com.br>
686        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
[5539]687        * @param      <$uri>
688        * @param      <$result>
689        * @param      <$criteria>
690        * @param      <$original>
[6193]691        * @return     <Regras do usuário>
[5539]692        * @access     <public>
693        */
694        public function listSieveRules( &$uri , &$params , &$criteria , $original  )
[5629]695        {
[5539]696                $return = $params = $this->parseSieveScript( $params[0]['content'] );
697                return( $return );
698        }
699}
Note: See TracBrowser for help on using the repository browser.