Blame view

sources/lib/private/group/database.php 6.3 KB
03e52840d   Kload   Init
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
  <?php
  
  /**
   * ownCloud
   *
   * @author Frank Karlitschek
   * @copyright 2012 Frank Karlitschek frank@owncloud.org
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
   * License as published by the Free Software Foundation; either
   * version 3 of the License, or any later version.
   *
   * This library is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
   *
   * You should have received a copy of the GNU Affero General Public
   * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
   *
   */
  /*
   *
   * The following SQL statement is just a help for developers and will not be
   * executed!
   *
   * CREATE TABLE `groups` (
   *   `gid` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
   *   PRIMARY KEY (`gid`)
   * ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
   *
   * CREATE TABLE `group_user` (
   *   `gid` varchar(64) COLLATE utf8_unicode_ci NOT NULL,
   *   `uid` varchar(64) COLLATE utf8_unicode_ci NOT NULL
   * ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
   *
   */
  
  /**
   * Class for group management in a SQL Database (e.g. MySQL, SQLite)
   */
  class OC_Group_Database extends OC_Group_Backend {
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
46
  	 * Try to create a new group
03e52840d   Kload   Init
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
  	 * @param string $gid The name of the group to create
  	 * @return bool
  	 *
  	 * Tries to create a new group. If the group name already exists, false will
  	 * be returned.
  	 */
  	public function createGroup( $gid ) {
  		// Check for existence
  		$stmt = OC_DB::prepare( "SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` = ?" );
  		$result = $stmt->execute( array( $gid ));
  
  		if( $result->fetchRow() ) {
  			// Can not add an existing group
  			return false;
  		}
  		else{
  			// Add group and exit
  			$stmt = OC_DB::prepare( "INSERT INTO `*PREFIX*groups` ( `gid` ) VALUES( ? )" );
  			$result = $stmt->execute( array( $gid ));
  
  			return $result ? true : false;
  		}
  	}
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
72
  	 * delete a group
03e52840d   Kload   Init
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
  	 * @param string $gid gid of the group to delete
  	 * @return bool
  	 *
  	 * Deletes a group and removes it from the group_user-table
  	 */
  	public function deleteGroup( $gid ) {
  		// Delete the group
  		$stmt = OC_DB::prepare( "DELETE FROM `*PREFIX*groups` WHERE `gid` = ?" );
  		$stmt->execute( array( $gid ));
  
  		// Delete the group-user relation
  		$stmt = OC_DB::prepare( "DELETE FROM `*PREFIX*group_user` WHERE `gid` = ?" );
  		$stmt->execute( array( $gid ));
  
  		return true;
  	}
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
91
  	 * is user in group?
03e52840d   Kload   Init
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
  	 * @param string $uid uid of the user
  	 * @param string $gid gid of the group
  	 * @return bool
  	 *
  	 * Checks whether the user is member of a group or not.
  	 */
  	public function inGroup( $uid, $gid ) {
  		// check
  		$stmt = OC_DB::prepare( "SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` = ?" );
  		$result = $stmt->execute( array( $gid, $uid ));
  
  		return $result->fetchRow() ? true : false;
  	}
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
107
  	 * Add a user to a group
03e52840d   Kload   Init
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
  	 * @param string $uid Name of the user to add to group
  	 * @param string $gid Name of the group in which add the user
  	 * @return bool
  	 *
  	 * Adds a user to a group.
  	 */
  	public function addToGroup( $uid, $gid ) {
  		// No duplicate entries!
  		if( !$this->inGroup( $uid, $gid )) {
  			$stmt = OC_DB::prepare( "INSERT INTO `*PREFIX*group_user` ( `uid`, `gid` ) VALUES( ?, ? )" );
  			$stmt->execute( array( $uid, $gid ));
  			return true;
  		}else{
  			return false;
  		}
  	}
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
126
  	 * Removes a user from a group
03e52840d   Kload   Init
127
128
129
130
131
132
133
134
135
136
137
138
139
140
  	 * @param string $uid Name of the user to remove from group
  	 * @param string $gid Name of the group from which remove the user
  	 * @return bool
  	 *
  	 * removes the user from a group.
  	 */
  	public function removeFromGroup( $uid, $gid ) {
  		$stmt = OC_DB::prepare( "DELETE FROM `*PREFIX*group_user` WHERE `uid` = ? AND `gid` = ?" );
  		$stmt->execute( array( $uid, $gid ));
  
  		return true;
  	}
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
141
  	 * Get all groups a user belongs to
03e52840d   Kload   Init
142
  	 * @param string $uid Name of the user
6d9380f96   Cédric Dupont   Update sources OC...
143
  	 * @return array an array of group names
03e52840d   Kload   Init
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
  	 *
  	 * This function fetches all groups a user belongs to. It does not check
  	 * if the user exists at all.
  	 */
  	public function getUserGroups( $uid ) {
  		// No magic!
  		$stmt = OC_DB::prepare( "SELECT `gid` FROM `*PREFIX*group_user` WHERE `uid` = ?" );
  		$result = $stmt->execute( array( $uid ));
  
  		$groups = array();
  		while( $row = $result->fetchRow()) {
  			$groups[] = $row["gid"];
  		}
  
  		return $groups;
  	}
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
162
  	 * get a list of all groups
03e52840d   Kload   Init
163
164
165
  	 * @param string $search
  	 * @param int $limit
  	 * @param int $offset
6d9380f96   Cédric Dupont   Update sources OC...
166
  	 * @return array an array of group names
03e52840d   Kload   Init
167
168
169
170
171
  	 *
  	 * Returns a list with all groups
  	 */
  	public function getGroups($search = '', $limit = null, $offset = null) {
  		$stmt = OC_DB::prepare('SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` LIKE ?', $limit, $offset);
6d9380f96   Cédric Dupont   Update sources OC...
172
  		$result = $stmt->execute(array('%' . $search . '%'));
03e52840d   Kload   Init
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
  		$groups = array();
  		while ($row = $result->fetchRow()) {
  			$groups[] = $row['gid'];
  		}
  		return $groups;
  	}
  
  	/**
  	 * check if a group exists
  	 * @param string $gid
  	 * @return bool
  	 */
  	public function groupExists($gid) {
  		$query = OC_DB::prepare('SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` = ?');
  		$result = $query->execute(array($gid))->fetchOne();
f7d878ff1   kload   [enh] Update to 7...
188
  		if ($result !== false) {
03e52840d   Kload   Init
189
190
191
192
193
194
  			return true;
  		}
  		return false;
  	}
  
  	/**
6d9380f96   Cédric Dupont   Update sources OC...
195
  	 * get a list of all users in a group
03e52840d   Kload   Init
196
197
198
199
  	 * @param string $gid
  	 * @param string $search
  	 * @param int $limit
  	 * @param int $offset
6d9380f96   Cédric Dupont   Update sources OC...
200
  	 * @return array an array of user ids
03e52840d   Kload   Init
201
202
203
204
205
  	 */
  	public function usersInGroup($gid, $search = '', $limit = null, $offset = null) {
  		$stmt = OC_DB::prepare('SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` LIKE ?',
  			$limit,
  			$offset);
6d9380f96   Cédric Dupont   Update sources OC...
206
  		$result = $stmt->execute(array($gid, '%'.$search.'%'));
03e52840d   Kload   Init
207
208
209
210
211
212
  		$users = array();
  		while ($row = $result->fetchRow()) {
  			$users[] = $row['uid'];
  		}
  		return $users;
  	}
6d9380f96   Cédric Dupont   Update sources OC...
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
  
  	/**
  	 * get the number of all users matching the search string in a group
  	 * @param string $gid
  	 * @param string $search
  	 * @return int|false
  	 * @throws DatabaseException
  	 */
  	public function countUsersInGroup($gid, $search = '') {
  		$stmt = OC_DB::prepare('SELECT COUNT(`uid`) AS `count` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` LIKE ?');
  		$result = $stmt->execute(array($gid, '%' . $search . '%'));
  		$count = $result->fetchOne();
  		if($count !== false) {
  			$count = intval($count);
  		}
  		return $count;
  	}
03e52840d   Kload   Init
230
  }