source: sandbox/2.4.1-1/prototype/modules/filters/interceptors/FilterMapping.php @ 6285

Revision 6285, 21.4 KB checked in by airton, 12 years ago (diff)

Ticket #2764 - Implementacao de alerta ao usuario para criterio atendido nos filtros de mensagens

Line 
1<?php
2/**
3*
4* Copyright (C) 2011 Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
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,
28* 6731, PTI, Bl. 05, Esp. 02, Sl. 10, Foz do Iguaçu - PR - Brasil or at
29* e-mail address prognus@prognus.com.br.
30*
31* Descrição rápida do arquivo
32*
33* Arquivo responsável pela manipulação dos filtros
34*
35* @package    filters
36* @license    http://www.gnu.org/copyleft/gpl.html GPL
37* @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
38* @version    1.0
39* @sponsor    Caixa Econômica Federal
40* @since      Arquivo disponibilizado na versão 2.4
41*/
42
43
44
45/**
46* Classe responsável pela manipulação dos filtros.
47*
48*
49* @package    prototype
50* @license    http://www.gnu.org/copyleft/gpl.html GPL
51* @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
52* @author     Airton Bordin Junior <airton@prognus.com.br>
53* @author     Gustavo Pereira dos Santos <gustavo@prognus.com.br>
54* @version    1.0
55* @since      Classe disponibilizada na versão 2.4
56*/
57class FilterMapping
58{
59        var $service;
60       
61        /**
62        * Método que cria o ID da regra que está sendo criada.
63        *
64        * @license    http://www.gnu.org/copyleft/gpl.html GPL
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
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        }
79       
80       
81        /**
82        * Método que formata o Script de acordo com a sintaxe do Sieve.
83        *
84        * @license    http://www.gnu.org/copyleft/gpl.html GPL
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
87        * @author     Airton Bordin Junior <airton@prognus.com.br>
88        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
89        * @param      <Array> <$rules> <Array com as regras do usuário>
90        * @return     <Regra de acordo com a sintaxe do Sieve>
91        * @access     <public>
92        */
93        public function formatSieveScript( $rules )
94    {
95                $require_fileinto = $require_flag = $require_reject = $require_vacation = $require_body = $require_imapflag = $vacation = $startswith = $endswith = false;
96
97                $script_rules = $script_header = $script_criteria = $vacation_action = "";
98
99                $i = 0;
100               
101                foreach( $rules as $name => $data )
102                {       
103                        if( $data['enabled'] == 'false' )
104                                continue;
105                               
106                        if(array_key_exists("block", $data)) {
107                                /* Usado na opção Bloquear usuário do ExpressoMail */
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                                }
119                        }
120                        //if( $data['enabled'] == 'false' )
121                                //continue;
122                               
123                        $vacation = false;
124                        $criteria = $data['criteria'];
125                        $action   = $data['actions'];
126                       
127                        ($i >0) ? $script_match = 'els' : $script_match = '';
128                        $data['isExact'] == 'false' ?  $script_match .= 'if anyof (' : $script_match .= 'if allof (';
129
130                        if( is_array($criteria) )
131                        foreach ($criteria as $j => $value)
132                        {                                       
133                               
134                                switch($criteria[$j]['field']) {
135                                        case 'To':   
136                                        case 'to':   
137                                        case 'CC':
138                                        case 'Cc':
139                                                $criteria[$j]['field'] = "[\"To\", \"TO\", \"Cc\", \"CC\"]";
140                                                $script_criteria .= "address :";
141                                                break;
142                                        case 'from':
143                                                $criteria[$j]['field'] = "\"" . $criteria[$j]['field'] . "\"";
144                                                $script_criteria .= "address :";
145                                                break;
146                                        case 'size':   
147                                                $criteria[$j]['field'] = '';
148                                                $script_criteria .= "size :";
149                                                break;
150                                        case 'subject':
151                                                $criteria[$j]['field'] = "\"" . $criteria[$j]['field'] . "\"";
152                                                $criteria[$j]['value'] = "" . imap_8bit($criteria[$j]['value']) . "*\", \"" . base64_encode($criteria[$j]['value']) . "";
153                                                $script_criteria .= "header :";
154                                                break;
155                                        case 'body':
156                                                $criteria[$j]['field'] = '';
157                                                $script_criteria .= "body :";
158                                                $require_body = true;
159                                                break;
160                                        case 'vacation':
161                                                continue;
162                                        case 'hasAttachment':
163                                                //$hasAttach = true;
164                                                continue;
165                                        default:
166                                                $script_criteria .= "header :";
167                                                break;
168                                }
169                               
170                                switch ($criteria[$j]['operator']) {
171                                        case '>':
172                                                $criteria[$j]['operator'] = "over";
173                                                $criteria[$j]['value'] = $criteria[$j]['value'] . "K";
174                                                break;
175                                        case '<':
176                                                $criteria[$j]['operator'] = "under";
177                                                $criteria[$j]['value'] = $criteria[$j]['value'] . "K";
178                                                break;
179                                        case '=':
180                                                $criteria[$j]['operator'] = "is";
181                                                $criteria[$j]['value'] = "[\"" . $criteria[$j]['value'] . "\"]";
182                                                break;
183                                        case '*':
184                                                $criteria[$j]['operator'] = "contains";
185                                                $criteria[$j]['value'] = "[\"" . $criteria[$j]['value'] . "\"]";
186                                                break;                                         
187                                        case '^':
188                                                $criteria[$j]['operator'] = "matches";
189                                                $criteria[$j]['value'] = "[\"" . $criteria[$j]['value'] . "*\"]";
190                                                $startswith = true;
191                                                break;
192                                        case '$':
193                                                $criteria[$j]['operator'] = "matches";
194                                                $criteria[$j]['value'] = "[\"*" . $criteria[$j]['value'] . "\"]";
195                                                $endswith = true;
196                                                break;
197                                        /*
198                                           TO-DO:
199                                           Inconsistência na regra do "não contém".
200                                        */
201                                        case '!*':
202                                                $criteria[$j]['operator'] = "contains";
203                                                $criteria[$j]['value'] = "[\"" . $criteria[$j]['value'] . "\"]";
204                                                break;
205                                }
206                               
207                                if ($criteria[$j]['field'] == "" || $criteria[$j]['field'] == "\"subject\"" || $startswith || $endswith)
208                                {
209                                        $script_criteria .= $criteria[$j]['operator'] . " " . $criteria[$j]['field'] . " " . $criteria[$j]['value'] . ", ";
210                                        $startswith = $endswith = false;
211                                }
212                                else
213                                        $script_criteria .= $criteria[$j]['operator'] . " " . $criteria[$j]['field'] . " " . $criteria[$j]['value'] . ", ";
214                        }
215                        $script_criteria = substr($script_criteria,0,-2);
216                        /* if ($vacation == false) */
217                        $script_criteria .= ")";
218
219                        //$script_action = " {\r\n ";
220                        /* Somente para controlar que o addFlag virá antes de qualquer ação. Modificar isso depois */
221                        $action_addFlag = '';
222                       
223                        if( is_array($action) )
224                        foreach ($action as $k => $value)
225                        {
226                                switch ($action[$k]['type']) {
227                                        case 'setflag':
228                                                $require_flag = true;
229                                                $action[$k]['parameter'] = "\\\\" . $action[$k]['parameter'];
230                                                break;
231                                        case 'addflag':
232                                                $require_flag = true;
233                                                $action_addFlag = "addflag \"" . $action[$k]['parameter'] . "\";\r\n ";
234                                                break;
235                                        case 'redirect':
236                                                break;
237                                        case 'reject':
238                                                $require_reject = true;
239                                                break;
240                                        case 'fileinto':
241                                                $require_fileinto = true;
242                                                $action[$k]['parameter'] = imap_utf7_encode($action[$k]['parameter']);
243                                                break;
244                                        case 'vacation':
245                                                $require_vacation = true;
246                                                $action[$k]['parameter'] = "\"" . $action[$k]['parameter'] . "\"";
247                                                $vacation_action = ' :subject "Fora do Escrit&oacuterio" ' . $action[$k]['parameter'] . ";";
248                                                $vacation = true;
249                                                continue;
250                                        case 'discard':
251                                                break;
252                                }
253                                if ($vacation == false && $action[$k]['type'] != 'addflag') $script_action .= $action[$k]['type'] . " \"" . $action[$k]['parameter'] . "\";\r\n ";
254                        }
255                       
256                        /* ATENÇÃO: Colocar sempre o comando addflag antes de qualquer outro no caso de ações compostas no Sieve */
257                        if ($action_addFlag != '') $script_action = $action_addFlag . $script_action;
258                       
259                        $script_action = "{\r\n " . $script_action . "}";
260                        $action_addFlag = '';
261                        if($vacation == false)
262                                $script_rules .= $script_match . $script_criteria . $script_action . "\r\n";
263
264                        if($data['id'] != "vacation")
265                                $i++;
266                        $script_match = "";
267                        $script_criteria = ""; 
268                        $script_action = "";
269                        $data['applyMessages'] = "";                                                   
270                }
271
272                if($require_reject || $require_fileinto || $require_vacation || $require_body || $require_flag)
273                {
274                        $script_header .= "require [";
275                        $require_reject ? $script_header .= "\"reject\", " : "";
276                        $require_fileinto ? $script_header .= "\"fileinto\", " : "";
277                        $require_vacation? $script_header .= "\"vacation\", " : ""; 
278                        $require_flag ? $script_header .= "\"imapflags\", " : ""; 
279                        $require_body ? $script_header .= "\"body\", " : "";  /* tem que instalar as extensões no Cyrus */
280                        $script_header = substr($script_header,0,-2);
281                        $script_header .= "];\r\n";
282                }
283
284                if( $vacation_action )
285                {
286                  $script_rules .= "vacation" . $vacation_action . "\r\n";
287                }
288
289                $json_data = json_encode($rules);
290               
291                $script_begin = "#Filtro gerado por Expresso Livre versão 2.4\r\n\r\n";
292
293                $content = $script_begin . $script_header . $script_rules . "\r\n\r\n#PseudoScript#" . "\r\n#" . $json_data;
294
295                return( $content );
296        }
297       
298        /**
299        * Método que lê e faz o parser dos filtros antigos
300        *
301        * @license    http://www.gnu.org/copyleft/gpl.html GPL
302        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
303        * @sponsor    Caixa Econômica Federal
304        * @author     Airton Bordin Junior <airton@prognus.com.br>
305        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
306        * @param      <$scriptName> <Regras do usuário>
307        * @return     <Regra do usuário parseada>
308        * @access     <public>
309        */
310        public function readOldScript($scriptName)
311        {
312        // Recebe o conteúdo do array;
313        $lines = array();
314        $lines = preg_split("/\n/", $scriptName);
315
316        // Pega o tamanho da regra na primeira do script;
317        $size_rule = array_shift($lines);
318
319        // Recebe o tamanho do script, pela primeira linha;
320        //$this->size = trim($size_rule);
321
322        // Verifica a composição do script; */
323        $line = array_shift($lines);
324
325        // Variaveis para a regra e o campo ferias;
326        $regexps = array('##PSEUDO', '#rule', '#vacation', '#mode');
327        $retorno['rule'] = array();
328
329        $line = array_shift($lines);
330        while (isset($line)) {
331            foreach ($regexps as $regp) {
332                if (preg_match("/$regp/i", $line)) {
333                    // Recebe todas as regras criadas no servidor;
334                    if (preg_match("/#rule&&/i", $line)) {
335                        $retorno['rule'][] = ltrim($line) . "\n";                         
336                    }
337                }
338            }
339            // Pega a proxima linha do sript;
340            $line = array_shift($lines);
341        }
342        return $retorno;
343    }
344       
345       
346       
347       
348        /**
349        * Método que faz o parsing do Script Sieve, transformando em Array.
350        *
351        * @license    http://www.gnu.org/copyleft/gpl.html GPL
352        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
353        * @sponsor    Caixa Econômica Federal
354        * @author     Airton Bordin Junior <airton@prognus.com.br>
355        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
356        * @param      <String> <$script> <Script Sieve com as regras do usuário>
357        * @return     <Regras do usuário em Array>
358        * @access     <public>
359        */
360        public function parseSieveScript( $script )
361        {
362                 $old_rule = strripos($script, "##PSEUDO script start");
363               
364                if($old_rule) {
365                        $parsed_rule = $this->readOldScript($script);
366                        $old_rules = array();
367                        $j = 0;
368                        foreach ($parsed_rule['rule'] as $i => $value) {
369                               
370                                $array_rule = explode("&&", $parsed_rule['rule'][$i]);
371
372                                /* TO-DO: Ver as actions possíveis além de reject e fileinto */
373                                switch($array_rule[6]) {
374                                        case 'reject':
375                                                $action_type      = 'reject';
376                                                $action_parameter = $array_rule[7];
377                                                break;
378                                        case 'folder':
379                                                $action_type      = 'fileinto';
380                                                $action_parameter = $array_rule[7];
381                                                break;
382                                }
383
384                                if($array_rule[3] != "") {
385                                        $criteria_value = $array_rule[3];
386                                        $criteria_operator = '=';
387                                        $criteria_field = 'from';
388                                }
389                                else
390                                {
391                                        $criteria_value = $array_rule[5];
392                                        $criteria_operator = '=';
393                                        $criteria_field = 'subject';
394                                }
395
396                                $old_retorno = array();
397                                $old_retorno['isExact']                                 = true;
398                                $old_retorno['name']                                    = 'regra_migrada_' . $array_rule[1];
399                                $old_retorno['criteria']                                = array();
400                                $old_retorno['criteria'][0]                     = array();
401                                $old_retorno['criteria'][0]['value']    = $criteria_value;
402                                $old_retorno['criteria'][0]['operator'] = $criteria_operator;
403                                $old_retorno['criteria'][0]['field']    = $criteria_field;
404                                $old_retorno['actions']                 = array();
405                                $old_retorno['actions'][0]              = array();
406                                $old_retorno['actions'][0]['parameter'] = $action_parameter;
407                                $old_retorno['actions'][0]['type']      = $action_type;
408                                $old_retorno['enabled']                 = ($array_rule[2] == 'ENABLED') ? true: false;
409                                $old_retorno['id']                      = 'regra_migrada_' . $array_rule[1];
410                                $old_retorno['applyMessages']           = '';
411
412                                $old_rules[$j] = $old_retorno;
413                                $j++;
414                        }                       
415                        return $old_rules;
416                }
417                /* Não tem regra antiga */
418                $pos = strripos($script, "#PseudoScript#");
419                $pseudo_script = substr( $script, $pos+17 );
420
421                $return = json_decode( $pseudo_script, true );
422       
423                return $return;
424        }
425
426        var $rules = false;
427
428        /**
429        * Construtor da classe.
430        *
431        * @license    http://www.gnu.org/copyleft/gpl.html GPL
432        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
433        * @sponsor    Caixa Econômica Federal
434        * @author     Airton Bordin Junior <airton@prognus.com.br>
435        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
436        * @access     <public>
437        */
438        public function __construct()
439        {
440                $this->service = Controller::service("Sieve");
441        }
442
443       
444        /**
445        * Método que recupera as regras do usuário.
446        *
447        * @license    http://www.gnu.org/copyleft/gpl.html GPL
448        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
449        * @sponsor    Caixa Econômica Federal
450        * @author     Airton Bordin Junior <airton@prognus.com.br>
451        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
452        * @return     <Regras do usuário>
453        * @access     <public>
454        */
455        public function getRules()
456        {
457                $this->rules = Controller::find( array( 'concept' => 'filter' ) );
458
459                if( !$this->rules ) {
460                        $this->rules = array();
461                }
462               
463                return( $this->rules );
464        }
465
466       
467        /**
468        * Método que aplica o filtro para as mensagens do usuário.
469        *
470        * @license    http://www.gnu.org/copyleft/gpl.html GPL
471        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
472        * @sponsor    Caixa Econômica Federal
473        * @author     Airton Bordin Junior <airton@prognus.com.br>
474        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
475        * @param      <$uri>
476        * @param      <$result>
477        * @param      <$criteria>
478        * @param      <$original>
479        * @access     <public>
480        */
481        public function applySieveFilter( &$uri , &$result , &$criteria , $original  )
482        {
483               
484                //if()                 
485                //{                                             
486                        $rule_apply = array();
487                       
488                        $filter = Controller::read($uri);
489                        $filter_ = $this->parseSieveScript($filter['content']);
490                       
491                        foreach ($filter_ as $f_) {
492                                if($f_['id'] == $uri['id']) {
493                                        $rule_apply     = $f_;
494                                }
495                        }
496                                       
497                        $actions = array();
498                        $actions['type']      = $rule_apply['actions'][0]['type'];
499                        $actions['parameter'] = $rule_apply['actions'][0]['parameter'];
500                        /* Hardcoded */
501                        $actions['keep']      = false;
502
503                        $messages_to_apply = array();                   
504
505                        $messages = $rule_apply['applyMessages'];
506                        /*       
507                        $proc = array();
508                        $proc['keep'] = false;
509                                 
510                        */
511                        $imap = Controller::service( 'Imap' );
512                        $imap->apliSieveFilter($messages, $actions);
513                        return $result;
514                //}
515        }
516
517       
518        /**
519        * Método que lê o script do usuário.
520        *
521        * @license    http://www.gnu.org/copyleft/gpl.html GPL
522        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
523        * @sponsor    Caixa Econômica Federal
524        * @author     Airton Bordin Junior <airton@prognus.com.br>
525        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
526        * @param      <$uri>
527        * @param      <$result>
528        * @param      <$criteria>
529        * @param      <$original>
530        * @return     <Script do usuário>
531        * @access     <public>
532        */
533        public function readUserScript( &$uri , &$params , &$criteria , $original )
534        { 
535                $uri['id'] = $this->service->config['user'];
536        }
537 
538 
539        /**
540        * Método que seta o script do usuário.
541        *
542        * @license    http://www.gnu.org/copyleft/gpl.html GPL
543        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
544        * @sponsor    Caixa Econômica Federal
545        * @author     Airton Bordin Junior <airton@prognus.com.br>
546        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
547        * @param      <$uri>
548        * @param      <$result>
549        * @param      <$criteria>
550        * @param      <$original>
551        * @return     <Script do usuário>
552        * @access     <public>
553        */
554        public function setRule( &$uri , &$params , &$criteria , $original  )
555        {
556                if( !$this->rules )
557                $this->rules = $this->getRules();
558
559            $uri['id'] = $params['id'] = isset($params['id']) ? $params['id'] : urlencode($params['name']);
560
561            $i = 0;
562
563            for( ; isset($this->rules[$i]) && $this->rules[$i]['id'] !== $params['id']; $i++ );
564
565            $this->rules[$i] = array_merge( ( isset($this->rules[$i]) ? $this->rules[$i] : array() ), $params );
566
567            $params = array( 'name' => $this->service->config['user'],
568                             'content' => $this->formatSieveScript( $this->rules ),
569                             'active' => true );
570        }
571
572       
573        /**
574        * Método que deleta o script do usuário.
575        *
576        * @license    http://www.gnu.org/copyleft/gpl.html GPL
577        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
578        * @sponsor    Caixa Econômica Federal
579        * @author     Airton Bordin Junior <airton@prognus.com.br>
580        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
581        * @param      <$uri>
582        * @param      <$result>
583        * @param      <$criteria>
584        * @param      <$original>
585        * @access     <public>
586        */
587        public function deleteRule( &$uri, &$params, &$criteria, $original )
588        {
589                if( !$this->rules ) {   
590                        $this->rules = $this->getRules();
591                }         
592                $params['id'] = $uri['id'];
593
594                $update = false;
595               
596                $rules = array();
597
598                foreach( $this->rules as $i => $rule )
599                        if( $rule['id'] !== $uri['id'] )
600                                $rules[] = $this->rules[$i];
601
602                $this->rules = $rules;
603               
604                $uri['id'] = '';
605
606                $params = array( 'name' => $this->service->config['user'],
607                           'content' => $this->formatSieveScript( $this->rules ),
608                           'active' => true );
609
610                $URI = Controller::URI( $uri['concept'], $this->service->config['user'] );
611                $this->service->update( $URI, $params );
612       
613                return( false );
614        }
615
616       
617        /**
618        * Método que pega o script do usuário.
619        *
620        * @license    http://www.gnu.org/copyleft/gpl.html GPL
621        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
622        * @sponsor    Caixa Econômica Federal
623        * @author     Airton Bordin Junior <airton@prognus.com.br>
624        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
625        * @param      <$uri>
626        * @param      <$result>
627        * @param      <$criteria>
628        * @param      <$original>
629        * @return     <Script do usuário>
630        * @access     <public>
631        */
632        public function getSieveRule( &$uri , &$params , &$criteria , $original )
633        {         
634                $script = $this->parseSieveScript( $params['content'] );
635
636                foreach( $script as $i => $rule )
637                        if(is_array ($rule['name']) && is_array($original['id']))
638                        if( $rule['name'] === $original['id'] )
639                                return( $params = $rule );
640        }
641
642       
643        /**
644        * Método que lista as regras do usuário.
645        *
646        * @license    http://www.gnu.org/copyleft/gpl.html GPL
647        * @author     Consórcio Expresso Livre - 4Linux (www.4linux.com.br) e Prognus Software Livre (www.prognus.com.br)
648        * @sponsor    Caixa Econômica Federal
649        * @author     Airton Bordin Junior <airton@prognus.com.br>
650        * @author         Gustavo Pereira dos Santos <gustavo@prognus.com.br>   
651        * @param      <$uri>
652        * @param      <$result>
653        * @param      <$criteria>
654        * @param      <$original>
655        * @return     <Regras do usuário>
656        * @access     <public>
657        */
658        public function listSieveRules( &$uri , &$params , &$criteria , $original  )
659        {
660                $return = $params = $this->parseSieveScript( $params[0]['content'] );
661                return( $return );
662        }
663}
Note: See TracBrowser for help on using the repository browser.