e07e63c160b1952d783b332285982cf84cb2acd0
[tine20] / tine20 / Addressbook / Model / List.php
1 <?php
2 /**
3  * Tine 2.0
4  * 
5  * @package     Addressbook
6  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
7  * @author      Lars Kneschke <l.kneschke@metaways.de>
8  * @copyright   Copyright (c) 2010-2012 Metaways Infosystems GmbH (http://www.metaways.de)
9  */
10
11 /**
12  * class to hold addressbook list data
13  * 
14  * @property    id        
15  * @property    container_id
16  * @property    name            
17  * @property    description        
18  * @property    member
19  * @property    email             
20  * @property    type            type of list
21  * @package     Addressbook
22  */
23 class Addressbook_Model_List extends Tinebase_Record_Abstract
24 {
25     /**
26      * key in $_validators/$_properties array for the filed 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 = 'Addressbook';
39     
40     /**
41      * list type: list (user defined lists)
42      * 
43      * @var string
44      */
45     const LISTTYPE_LIST = 'list';
46     
47     /**
48      * list type: group (lists matching a system group)
49      * 
50      * @var string
51      */
52     const LISTTYPE_GROUP = 'group';
53     
54     /**
55      * list of zend validator
56      * 
57      * this validators get used when validating user generated content with Zend_Input_Filter
58      *
59      * @var array
60      */
61     protected $_validators = array (
62         // tine 2.0 generic fields
63         'id'                    => array(Zend_Filter_Input::ALLOW_EMPTY => true, Zend_Filter_Input::DEFAULT_VALUE => NULL),
64         'container_id'          => array(Zend_Filter_Input::ALLOW_EMPTY => true),
65         // modlog fields
66         'created_by'            => array(Zend_Filter_Input::ALLOW_EMPTY => true),
67         'creation_time'         => array(Zend_Filter_Input::ALLOW_EMPTY => true),
68         'last_modified_by'      => array(Zend_Filter_Input::ALLOW_EMPTY => true),
69         'last_modified_time'    => array(Zend_Filter_Input::ALLOW_EMPTY => true),
70         'is_deleted'            => array(Zend_Filter_Input::ALLOW_EMPTY => true),
71         'deleted_time'          => array(Zend_Filter_Input::ALLOW_EMPTY => true),
72         'deleted_by'            => array(Zend_Filter_Input::ALLOW_EMPTY => true),
73         'seq'                   => array(Zend_Filter_Input::ALLOW_EMPTY => true, Zend_Filter_Input::DEFAULT_VALUE => 0),
74         
75         // list specific fields
76         'name'                  => array('presence' => 'required'),
77         'description'           => array(Zend_Filter_Input::ALLOW_EMPTY => true),
78         'members'               => array(Zend_Filter_Input::ALLOW_EMPTY => true, Zend_Filter_Input::DEFAULT_VALUE => array()),
79         'email'                 => array(Zend_Filter_Input::ALLOW_EMPTY => true),
80         'type'                  => array(
81             Zend_Filter_Input::ALLOW_EMPTY => true,
82             Zend_Filter_Input::DEFAULT_VALUE => self::LISTTYPE_LIST,
83             array('InArray', array(self::LISTTYPE_LIST, self::LISTTYPE_GROUP)),
84         ),
85         'list_type'             => array(Zend_Filter_Input::ALLOW_EMPTY => true),
86         'group_id'              => array(Zend_Filter_Input::ALLOW_EMPTY => true),
87         'tags'                  => array(Zend_Filter_Input::ALLOW_EMPTY => true),
88         'emails'                => array(Zend_Filter_Input::ALLOW_EMPTY => true),
89         'memberroles'           => array(Zend_Filter_Input::ALLOW_EMPTY => true),
90
91         // tine 2.0 generic fields
92         'tags'                  => array(Zend_Filter_Input::ALLOW_EMPTY => true),
93         'notes'                 => array(Zend_Filter_Input::ALLOW_EMPTY => true),
94         'relations'             => array(Zend_Filter_Input::ALLOW_EMPTY => true),
95         'customfields'          => array(Zend_Filter_Input::ALLOW_EMPTY => true, Zend_Filter_Input::DEFAULT_VALUE => array()),
96     );
97     
98     /**
99      * name of fields containing datetime or or an array of datetime information
100      *
101      * @var array list of datetime fields
102      */
103     protected $_datetimeFields = array(
104         'creation_time',
105         'last_modified_time',
106         'deleted_time'
107     );
108     
109     /**
110      * converts a string or Addressbook_Model_List to a list id
111      *
112      * @param   string|Addressbook_Model_List  $_listId  the contact id to convert
113      * 
114      * @return  string
115      * @throws  UnexpectedValueException  if no list id set 
116      */
117     static public function convertListIdToInt($_listId)
118     {
119         if ($_listId instanceof self) {
120             if ($_listId->getId() == null) {
121                 throw new UnexpectedValueException('No identifier set.');
122             }
123             $id = (string) $_listId->getId();
124         } else {
125             $id = (string) $_listId;
126         }
127         
128         if (empty($id)) {
129             throw new UnexpectedValueException('Identifier can not be empty.');
130         }
131         
132         return $id;
133     }
134 }