source: trunk/prototype/modules/filters/interceptors/FilterMapping.php @ 6009

Revision 6009, 20.1 KB checked in by airton, 12 years ago (diff)

Ticket #2649 - Adequar ativacao e desativacao de filtros

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