Merge branch '2013.10' into 2014.11
[tine20] / tine20 / Tinebase / Group / Abstract.php
1 <?php
2 /**
3  * Tine 2.0
4  *
5  * @package     Tinebase
6  * @subpackage  Group
7  * @license     http://www.gnu.org/licenses/agpl.html AGPL3
8  * @copyright   Copyright (c) 2008-2014 Metaways Infosystems GmbH (http://www.metaways.de)
9  * @author      Lars Kneschke <l.kneschke@metaways.de>
10  * 
11  * @todo        add search count function
12  */
13
14 /**
15  * abstract class for all group backends
16  *
17  * @package     Tinebase
18  * @subpackage  Group
19  */
20  
21 abstract class Tinebase_Group_Abstract
22 {
23     /**
24      * in class cache 
25      * 
26      * @var array
27      */
28     protected $_classCache = array ();
29     
30     /**
31      * return all groups an account is member of
32      *
33      * @param mixed $_accountId the account as integer or Tinebase_Model_User
34      * @return array
35      */
36     abstract public function getGroupMemberships($_accountId);
37     
38     /**
39      * get list of groupmembers
40      *
41      * @param int $_groupId
42      * @return array
43      */
44     abstract public function getGroupMembers($_groupId);
45     
46     /**
47      * replace all current groupmembers with the new groupmembers list
48      *
49      * @param int $_groupId
50      * @param array $_groupMembers
51      * @return unknown
52      */
53     abstract public function setGroupMembers($_groupId, $_groupMembers);
54
55     /**
56      * add a new groupmember to the group
57      *
58      * @param int $_groupId
59      * @param int $_accountId
60      * @return unknown
61      */
62     abstract public function addGroupMember($_groupId, $_accountId);
63
64     /**
65      * remove one groupmember from the group
66      *
67      * @param int $_groupId
68      * @param int $_accountId
69      * @return unknown
70      */
71     abstract public function removeGroupMember($_groupId, $_accountId);
72     
73     /**
74      * reset class cache
75      * 
76      * @param string $key
77      * @return Tinebase_Group_Sql
78      */
79     public function resetClassCache($key = null)
80     {
81         foreach ($this->_classCache as $cacheKey => $cacheValue) {
82             if ($key === null || $key === $cacheKey) {
83                 $this->_classCache[$cacheKey] = array();
84             }
85         }
86         
87         return $this;
88     }
89     
90     /**
91      * create a new group
92      *
93      * @param string $_groupName
94      * @return unknown
95      */
96     abstract public function addGroup(Tinebase_Model_Group $_group);
97     
98     /**
99      * updates an existing group
100      *
101      * @param Tinebase_Model_Group $_account
102      * @return Tinebase_Model_Group
103      */
104     abstract public function updateGroup(Tinebase_Model_Group $_group);
105
106     /**
107      * remove groups
108      *
109      * @param mixed $_groupId
110      * 
111      */
112     abstract public function deleteGroups($_groupId);
113     
114     /**
115      * get group by id
116      *
117      * @param int $_groupId
118      * @return Tinebase_Model_Group
119      * @throws  Tinebase_Exception_Record_NotDefined
120      */
121     abstract public function getGroupById($_groupId);
122     
123     /**
124      * get group by name
125      *
126      * @param string $_groupName
127      * @return Tinebase_Model_Group
128      * @throws  Tinebase_Exception_Record_NotDefined
129      */
130     abstract public function getGroupByName($_groupName);
131
132     /**
133      * get default group
134      *
135      * @return Tinebase_Model_Group
136      */
137     public function getDefaultGroup()
138     {
139         return $this->_getDefaultGroup('Users');
140     }
141     
142     /**
143      * get default admin group
144      *
145      * @return Tinebase_Model_Group
146      */
147     public function getDefaultAdminGroup()
148     {
149         return $this->_getDefaultGroup('Administrators');
150     }
151     
152     /**
153      * Get multiple groups
154      *
155      * @param string|array $_ids Ids
156      * @return Tinebase_Record_RecordSet
157      */
158     abstract public function getMultiple($_ids);
159     
160     /**
161      * get list of groups
162      *
163      * @param string $_filter
164      * @param string $_sort
165      * @param string $_dir
166      * @param int $_start
167      * @param int $_limit
168      * @return Tinebase_Record_RecordSet with record class Tinebase_Model_Group
169      */
170     abstract public function getGroups($_filter = NULL, $_sort = 'name', $_dir = 'ASC', $_start = NULL, $_limit = NULL);
171     
172     /**
173      * get default group for users/admins
174      * 
175      * @param string $_name group name (Users|Administrators)
176      * @return unknown_type
177      */
178     protected function _getDefaultGroup($_name = 'Users')
179     {
180         if (! in_array($_name, array('Users', 'Administrators'))) {
181             throw new Tinebase_Exception_InvalidArgument('Wrong group name: ' . $_name);
182         }
183         
184         $configKey = ($_name == 'Users') ? Tinebase_User::DEFAULT_USER_GROUP_NAME_KEY : Tinebase_User::DEFAULT_ADMIN_GROUP_NAME_KEY;
185         $defaultGroupName = Tinebase_User::getBackendConfiguration($configKey);
186         if (empty($defaultGroupName)) {
187             Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' ' . $configKey . ' not found. Check your user backend configuration.');
188             $defaultGroupName = $_name;
189         }
190         
191         try {
192             $result = $this->getGroupByName($defaultGroupName);
193         } catch (Tinebase_Exception_Record_NotDefined $tenf) {
194             // create group on the fly
195             $result = $this->addGroup(new Tinebase_Model_Group(array(
196                 'name'    => $defaultGroupName,
197             )));
198         }
199         
200         return $result;
201     }
202     
203     /**
204     * get dummy group record
205     *
206     * @param integer $_id [optional]
207     * @return Tinebase_Model_Group
208     */
209     public function getNonExistentGroup($_id = NULL)
210     {
211         $translate = Tinebase_Translation::getTranslation('Tinebase');
212     
213         $result = new Tinebase_Model_Group(array(
214                 'id'        => $_id,
215                 'name'      => $translate->_('unknown'),
216         ), TRUE);
217     
218         return $result;
219     }
220 }