Felamimail Sieve - configurable email domain whitelist for redirect rules
[tine20] / tine20 / Felamimail / Model / Sieve / Rule.php
1 <?php
2 /**
3  * class to hold Sieve Rule data
4  * 
5  * @package     Felamimail
6  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
7  * @author      Philipp Schuele <p.schuele@metaways.de>
8  * @copyright   Copyright (c) 2010 Metaways Infosystems GmbH (http://www.metaways.de)
9  * 
10  */
11
12 /**
13  * class to hold Rule data
14  * 
15  * @property    integer $id
16  * @property    array   $conditions   array( 0 => array('test', 'comperator', 'header', 'key'), 1 => (...))
17  * @property    boolean $enabled
18  * @property    string  $action_argument
19  * @property    string  $action_type
20  * 
21  * @package     Felamimail
22  */
23 class Felamimail_Model_Sieve_Rule extends Tinebase_Record_Abstract
24 {
25     /**
26      * key in $_validators/$_properties array for the field which 
27      * represents the identifier
28      * 
29      * @var string
30      */    
31     protected $_identifier = 'id';
32     
33     /**
34      * application the record belongs to
35      *
36      * @var string
37      */
38     protected $_application = 'Felamimail';
39
40     /**
41      * list of zend validator
42      * 
43      * this validators get used when validating user generated content with Zend_Input_Filter
44      *
45      * @var array
46      */
47     protected $_validators = array(
48         'id'                    => array(Zend_Filter_Input::ALLOW_EMPTY => true),
49         'account_id'            => array(Zend_Filter_Input::ALLOW_EMPTY => true),
50         'action_type'           => array(Zend_Filter_Input::ALLOW_EMPTY => true),
51         'action_argument'       => array(Zend_Filter_Input::ALLOW_EMPTY => true),
52         'conjunction'           => array(Zend_Filter_Input::ALLOW_EMPTY => true, Zend_Filter_Input::DEFAULT_VALUE => 'allof'),
53         'conditions'            => array(Zend_Filter_Input::ALLOW_EMPTY => true, Zend_Filter_Input::DEFAULT_VALUE => array()),
54         'enabled'               => array(Zend_Filter_Input::ALLOW_EMPTY => true, Zend_Filter_Input::DEFAULT_VALUE => 0),
55     );
56     
57     /**
58      * set from sieve rule object
59      * 
60      * @param Felamimail_Sieve_Rule $fsr
61      */
62     public function setFromFSR(Felamimail_Sieve_Rule $fsr)
63     {
64         $this->setFromArray($fsr->toArray());
65     }
66     
67     /**
68      * get sieve rule object
69      * 
70      * @return Felamimail_Sieve_Rule
71      */
72     public function getFSR()
73     {
74         $fsr = new Felamimail_Sieve_Rule();
75         $fsr->setEnabled($this->enabled)
76             ->setId($this->id)
77             ->setSieveConjunction($this->conjunction);
78
79         $fsra = new Felamimail_Sieve_Rule_Action();
80         $fsra->setType($this->action_type)
81              ->setArgument($this->action_argument);
82         $fsr->setAction($fsra);
83         
84         foreach ($this->conditions as $condition) {
85             $fsrc = new Felamimail_Sieve_Rule_Condition();
86             $fsrc->setTest($condition['test'])
87                  ->setComperator($condition['comperator'])
88                  ->setHeader($condition['header'])
89                  ->setKey($condition['key']);
90             $fsr->addCondition($fsrc);
91         } 
92             
93         return $fsr;
94     }
95 }