0fb397aa433638d8e14c1d09d1a1c07b4380887e
[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 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      * return all groups an account is member of
25      *
26      * @param mixed $_accountId the account as integer or Tinebase_Model_User
27      * @return array
28      */
29     abstract public function getGroupMemberships($_accountId);
30     
31     /**
32      * get list of groupmembers
33      *
34      * @param int $_groupId
35      * @return array
36      */
37     abstract public function getGroupMembers($_groupId);
38     
39     /**
40      * replace all current groupmembers with the new groupmembers list
41      *
42      * @param int $_groupId
43      * @param array $_groupMembers
44      * @return unknown
45      */
46     abstract public function setGroupMembers($_groupId, $_groupMembers);
47
48     /**
49      * add a new groupmember to the group
50      *
51      * @param int $_groupId
52      * @param int $_accountId
53      * @return unknown
54      */
55     abstract public function addGroupMember($_groupId, $_accountId);
56
57     /**
58      * remove one groupmember from the group
59      *
60      * @param int $_groupId
61      * @param int $_accountId
62      * @return unknown
63      */
64     abstract public function removeGroupMember($_groupId, $_accountId);
65     
66     /**
67      * create a new group
68      *
69      * @param string $_groupName
70      * @return unknown
71      */
72     abstract public function addGroup(Tinebase_Model_Group $_group);
73     
74     /**
75      * updates an existing group
76      *
77      * @param Tinebase_Model_Group $_account
78      * @return Tinebase_Model_Group
79      */
80     abstract public function updateGroup(Tinebase_Model_Group $_group);
81
82     /**
83      * remove groups
84      *
85      * @param mixed $_groupId
86      * 
87      */
88     abstract public function deleteGroups($_groupId);
89     
90     /**
91      * get group by id
92      *
93      * @param int $_groupId
94      * @return Tinebase_Model_Group
95      * @throws  Tinebase_Exception_Record_NotDefined
96      */
97     abstract public function getGroupById($_groupId);
98     
99     /**
100      * get group by name
101      *
102      * @param string $_groupName
103      * @return Tinebase_Model_Group
104      * @throws  Tinebase_Exception_Record_NotDefined
105      */
106     abstract public function getGroupByName($_groupName);
107
108     /**
109      * get default group
110      *
111      * @return Tinebase_Model_Group
112      */
113     public function getDefaultGroup()
114     {
115         return $this->_getDefaultGroup('Users');
116     }
117     
118     /**
119      * get default admin group
120      *
121      * @return Tinebase_Model_Group
122      */
123     public function getDefaultAdminGroup()
124     {
125         return $this->_getDefaultGroup('Administrators');
126     }
127     
128     /**
129      * Get multiple groups
130      *
131      * @param string|array $_ids Ids
132      * @return Tinebase_Record_RecordSet
133      */
134     abstract public function getMultiple($_ids);
135     
136     /**
137      * get list of groups
138      *
139      * @param string $_filter
140      * @param string $_sort
141      * @param string $_dir
142      * @param int $_start
143      * @param int $_limit
144      * @return Tinebase_Record_RecordSet with record class Tinebase_Model_Group
145      */
146     abstract public function getGroups($_filter = NULL, $_sort = 'name', $_dir = 'ASC', $_start = NULL, $_limit = NULL);
147     
148     /**
149      * get default group for users/admins
150      * 
151      * @param string $_name group name (Users|Administrators)
152      * @return unknown_type
153      */
154     protected function _getDefaultGroup($_name = 'Users')
155     {
156         if (! in_array($_name, array('Users', 'Administrators'))) {
157             throw new Tinebase_Exception_InvalidArgument('Wrong group name: ' . $_name);
158         }
159         
160         $configKey = ($_name == 'Users') ? Tinebase_User::DEFAULT_USER_GROUP_NAME_KEY : Tinebase_User::DEFAULT_ADMIN_GROUP_NAME_KEY;
161         $defaultGroupName = Tinebase_User::getBackendConfiguration($configKey);
162         if (empty($defaultGroupName)) {
163             Tinebase_Core::getLogger()->notice(__METHOD__ . '::' . __LINE__ . ' ' . $configKey . ' not found. Check your user backend configuration.');
164             $defaultGroupName = $_name;
165         }
166         
167         try {
168             $result = $this->getGroupByName($defaultGroupName);
169         } catch (Tinebase_Exception_Record_NotDefined $tenf) {
170             // create group on the fly
171             $result = $this->addGroup(new Tinebase_Model_Group(array(
172                 'name'    => $defaultGroupName,
173             )));
174         }
175         
176         return $result;
177     }
178     
179     /**
180     * get dummy group record
181     *
182     * @param integer $_id [optional]
183     * @return Tinebase_Model_Group
184     */
185     public function getNonExistentGroup($_id = NULL)
186     {
187         $translate = Tinebase_Translation::getTranslation('Tinebase');
188     
189         $result = new Tinebase_Model_Group(array(
190                 'id'        => $_id,
191                 'name'      => $translate->_('unknown'),
192         ), TRUE);
193     
194         return $result;
195     }
196 }