2011-04-15 15:14:02 +00:00
< ? php
/**
* ownCloud
*
* @ author Frank Karlitschek
2012-05-26 17:14:24 +00:00
* @ copyright 2012 Frank Karlitschek frank @ owncloud . org
2011-04-15 15:14:02 +00:00
*
* 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 )
*/
2011-07-29 19:36:03 +00:00
class OC_Group_Database extends OC_Group_Backend {
2011-04-15 15:14:02 +00:00
/**
2011-04-18 08:00:45 +00:00
* @ brief Try to create a new group
2012-09-23 00:39:11 +00:00
* @ param string $gid The name of the group to create
* @ return bool
2011-04-15 15:14:02 +00:00
*
2012-09-23 00:39:11 +00:00
* Tries to create a new group . If the group name already exists , false will
2011-04-18 08:00:45 +00:00
* be returned .
2011-04-15 15:14:02 +00:00
*/
2012-09-07 13:22:01 +00:00
public function createGroup ( $gid ) {
2011-04-18 08:00:45 +00:00
// Check for existence
2012-08-24 22:05:07 +00:00
$stmt = OC_DB :: prepare ( " SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` = ? " );
$result = $stmt -> execute ( array ( $gid ));
2011-04-15 15:14:02 +00:00
2012-09-07 13:22:01 +00:00
if ( $result -> fetchRow () ) {
2011-04-18 08:00:45 +00:00
// Can not add an existing group
2011-04-15 15:14:02 +00:00
return false ;
}
else {
2011-04-18 08:00:45 +00:00
// Add group and exit
2012-08-24 22:05:07 +00:00
$stmt = OC_DB :: prepare ( " INSERT INTO `*PREFIX*groups` ( `gid` ) VALUES( ? ) " );
$result = $stmt -> execute ( array ( $gid ));
2011-04-15 15:14:02 +00:00
return $result ? true : false ;
}
}
2011-04-16 23:04:23 +00:00
/**
2011-04-18 08:00:45 +00:00
* @ brief delete a group
2012-09-23 00:39:11 +00:00
* @ param string $gid gid of the group to delete
* @ return bool
2011-04-16 23:04:23 +00:00
*
2011-04-18 08:00:45 +00:00
* Deletes a group and removes it from the group_user - table
2011-04-16 23:04:23 +00:00
*/
2012-09-07 13:22:01 +00:00
public function deleteGroup ( $gid ) {
2011-04-18 08:00:45 +00:00
// Delete the group
2012-08-24 22:05:07 +00:00
$stmt = OC_DB :: prepare ( " DELETE FROM `*PREFIX*groups` WHERE `gid` = ? " );
2012-09-23 00:39:11 +00:00
$stmt -> execute ( array ( $gid ));
2011-04-16 23:04:23 +00:00
2011-04-18 08:00:45 +00:00
// Delete the group-user relation
2012-08-24 22:05:07 +00:00
$stmt = OC_DB :: prepare ( " DELETE FROM `*PREFIX*group_user` WHERE `gid` = ? " );
2012-09-23 00:39:11 +00:00
$stmt -> execute ( array ( $gid ));
2011-04-18 08:00:45 +00:00
2011-04-16 23:04:23 +00:00
return true ;
}
2011-04-15 15:14:02 +00:00
/**
2011-04-18 08:00:45 +00:00
* @ brief is user in group ?
2012-09-23 00:39:11 +00:00
* @ param string $uid uid of the user
* @ param string $gid gid of the group
* @ return bool
2011-04-15 15:14:02 +00:00
*
2011-04-18 08:00:45 +00:00
* Checks whether the user is member of a group or not .
2011-04-15 15:14:02 +00:00
*/
2012-09-07 13:22:01 +00:00
public function inGroup ( $uid , $gid ) {
2011-04-18 08:00:45 +00:00
// check
2012-08-24 22:05:07 +00:00
$stmt = OC_DB :: prepare ( " SELECT `uid` FROM `*PREFIX*group_user` WHERE `gid` = ? AND `uid` = ? " );
$result = $stmt -> execute ( array ( $gid , $uid ));
2011-04-18 08:00:45 +00:00
2011-09-18 11:34:29 +00:00
return $result -> fetchRow () ? true : false ;
2011-04-15 15:14:02 +00:00
}
/**
2011-04-18 08:00:45 +00:00
* @ brief Add a user to a group
2012-09-23 00:39:11 +00:00
* @ 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
2011-04-15 15:14:02 +00:00
*
2011-04-18 08:00:45 +00:00
* Adds a user to a group .
2011-04-15 15:14:02 +00:00
*/
2012-09-07 13:22:01 +00:00
public function addToGroup ( $uid , $gid ) {
2011-04-18 08:00:45 +00:00
// No duplicate entries!
2012-09-07 13:22:01 +00:00
if ( ! $this -> inGroup ( $uid , $gid )) {
2012-08-24 22:05:07 +00:00
$stmt = OC_DB :: prepare ( " INSERT INTO `*PREFIX*group_user` ( `uid`, `gid` ) VALUES( ?, ? ) " );
$stmt -> execute ( array ( $uid , $gid ));
2012-04-12 23:58:53 +00:00
return true ;
} else {
return false ;
2011-04-15 15:14:02 +00:00
}
}
/**
2011-04-18 08:00:45 +00:00
* @ brief Removes a user from a group
2012-09-23 00:39:11 +00:00
* @ 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
2011-04-15 15:14:02 +00:00
*
2011-04-18 08:00:45 +00:00
* removes the user from a group .
2011-04-15 15:14:02 +00:00
*/
2012-09-07 13:22:01 +00:00
public function removeFromGroup ( $uid , $gid ) {
2012-08-24 22:05:07 +00:00
$stmt = OC_DB :: prepare ( " DELETE FROM `*PREFIX*group_user` WHERE `uid` = ? AND `gid` = ? " );
$stmt -> execute ( array ( $uid , $gid ));
2011-04-18 11:12:30 +00:00
return true ;
2011-04-15 15:14:02 +00:00
}
/**
2011-04-18 08:00:45 +00:00
* @ brief Get all groups a user belongs to
2012-09-23 00:39:11 +00:00
* @ param string $uid Name of the user
* @ return array with group names
2011-04-15 15:14:02 +00:00
*
2011-04-18 08:00:45 +00:00
* This function fetches all groups a user belongs to . It does not check
* if the user exists at all .
2011-04-15 15:14:02 +00:00
*/
2012-09-07 13:22:01 +00:00
public function getUserGroups ( $uid ) {
2011-04-18 08:00:45 +00:00
// No magic!
2012-08-24 22:05:07 +00:00
$stmt = OC_DB :: prepare ( " SELECT `gid` FROM `*PREFIX*group_user` WHERE `uid` = ? " );
$result = $stmt -> execute ( array ( $uid ));
2011-04-15 15:14:02 +00:00
$groups = array ();
2012-09-07 13:22:01 +00:00
while ( $row = $result -> fetchRow ()) {
2011-04-16 12:59:10 +00:00
$groups [] = $row [ " gid " ];
2011-04-15 15:14:02 +00:00
}
return $groups ;
}
/**
2011-04-18 08:00:45 +00:00
* @ brief get a list of all groups
2012-09-23 00:39:11 +00:00
* @ param string $search
* @ param int $limit
* @ param int $offset
* @ return array with group names
2011-04-15 15:14:02 +00:00
*
2011-04-18 08:00:45 +00:00
* Returns a list with all groups
2011-04-15 15:14:02 +00:00
*/
2012-08-24 22:05:07 +00:00
public function getGroups ( $search = '' , $limit = null , $offset = null ) {
$stmt = OC_DB :: prepare ( 'SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` LIKE ?' , $limit , $offset );
$result = $stmt -> execute ( array ( $search . '%' ));
2011-04-15 15:14:02 +00:00
$groups = array ();
2012-07-31 00:20:46 +00:00
while ( $row = $result -> fetchRow ()) {
$groups [] = $row [ 'gid' ];
2011-04-15 15:14:02 +00:00
}
return $groups ;
}
2012-06-05 12:02:00 +00:00
2012-08-07 18:48:55 +00:00
/**
* check if a group exists
* @ param string $gid
* @ return bool
*/
public function groupExists ( $gid ) {
2012-08-24 22:05:07 +00:00
$query = OC_DB :: prepare ( 'SELECT `gid` FROM `*PREFIX*groups` WHERE `gid` = ?' );
2012-08-07 18:48:55 +00:00
$result = $query -> execute ( array ( $gid )) -> fetchOne ();
if ( $result ) {
return true ;
}
return false ;
}
2011-08-11 08:11:44 +00:00
/**
* @ brief get a list of all users in a group
2012-09-23 00:39:11 +00:00
* @ param string $gid
* @ param string $search
* @ param int $limit
* @ param int $offset
* @ return array with user ids
2011-08-11 08:11:44 +00:00
*/
2012-08-24 22:05:07 +00:00
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 );
$result = $stmt -> execute ( array ( $gid , $search . '%' ));
2012-08-11 20:21:09 +00:00
$users = array ();
while ( $row = $result -> fetchRow ()) {
$users [] = $row [ 'uid' ];
2011-08-11 08:11:44 +00:00
}
return $users ;
}
2013-01-28 14:47:57 +00:00
/**
* @ brief get a list of all display names in a group
* @ param string $gid
* @ param string $search
* @ param int $limit
* @ param int $offset
* @ return array with display names ( value ) and user ids ( key )
*/
public function DisplayNamesInGroup ( $gid , $search = '' , $limit = - 1 , $offset = 0 ) {
$displayNames = '' ;
/*
SELECT Persons . LastName , Persons . FirstName , Orders . OrderNo
FROM Persons
INNER JOIN Orders
ON Persons . P_Id = Orders . P_Id
ORDER BY Persons . LastName
*/
$stmt = OC_DB :: prepare ( 'SELECT `*PREFIX*users`.`uid`, `*PREFIX*users`.`displayname` FROM `*PREFIX*users` INNER JOIN `*PREFIX*group_user` ON `*PREFIX*group_user`.`uid` = `*PREFIX*users`.`uid` WHERE `gid` = ? AND `*PREFIX*group_user.uid` LIKE ?' , $limit , $offset );
$result = $stmt -> execute ( array ( $gid , $search . '%' ));
$users = array ();
while ( $row = $result -> fetchRow ()) {
$displayName = trim ( $row [ 'displayname' ], ' ' );
$displayNames [ $row [ 'uid' ]] = empty ( $displayName ) ? $row [ 'uid' ] : $displayName ;
}
return $displayNames ;
}
2011-04-15 15:14:02 +00:00
}