00001 <?php
00002
00016
00017
00018
00019 import ('group.GroupMembership');
00020
00021 class GroupMembershipDAO extends DAO {
00022 var $userDao;
00023
00027 function GroupMembershipDAO() {
00028 parent::DAO();
00029 $this->userDao =& DAORegistry::getDAO('UserDAO');
00030 }
00031
00038 function &getMembership($groupId, $userId) {
00039 $result = &$this->retrieve(
00040 'SELECT * FROM group_memberships WHERE group_id = ? AND user_id = ?',
00041 array($groupId, $userId)
00042 );
00043
00044 $returner = null;
00045 if ($result->RecordCount() != 0) {
00046 $returner = &$this->_returnMembershipFromRow($result->GetRowAssoc(false));
00047 }
00048 $result->Close();
00049 unset($result);
00050 return $returner;
00051 }
00052
00058 function &getMemberships($groupId, $rangeInfo = null) {
00059 $result =& $this->retrieveRange(
00060 'SELECT * FROM group_memberships m, users u WHERE group_id = ? AND u.user_id = m.user_id ORDER BY m.seq',
00061 $groupId,
00062 $rangeInfo
00063 );
00064
00065 $returner =& new DAOResultFactory($result, $this, '_returnMembershipFromRow');
00066 return $returner;
00067 }
00068
00074 function &_returnMembershipFromRow(&$row) {
00075
00076 static $users;
00077 if (!isset($users)) {
00078 $users = array();
00079 }
00080 $userId = $row['user_id'];
00081 if (!isset($users[$userId])) {
00082 $users[$userId] =& $this->userDao->getUser($userId);
00083 }
00084
00085 $membership = &new GroupMembership();
00086 $membership->setGroupId($row['group_id']);
00087 $membership->setUserId($row['user_id']);
00088 $membership->setUser($users[$userId]);
00089 $membership->setSequence($row['seq']);
00090 $membership->setAboutDisplayed($row['about_displayed']);
00091
00092 HookRegistry::call('GroupMembershipDAO::_returnMemberFromRow', array(&$membership, &$row));
00093
00094 return $membership;
00095 }
00096
00101 function insertMembership(&$membership) {
00102 $this->update(
00103 'INSERT INTO group_memberships
00104 (group_id, user_id, seq, about_displayed)
00105 VALUES
00106 (?, ?, ?, ?)',
00107 array(
00108 $membership->getGroupId(),
00109 $membership->getUserId(),
00110 $membership->getSequence() == null ? 0 : $membership->getSequence(),
00111 $membership->getAboutDisplayed()
00112 )
00113 );
00114 }
00115
00120 function updateMembership(&$membership) {
00121 return $this->update(
00122 'UPDATE group_memberships
00123 SET
00124 seq = ?,
00125 about_displayed = ?
00126 WHERE
00127 group_id = ? AND
00128 user_id = ?',
00129 array(
00130 $membership->getSequence(),
00131 $membership->getAboutDisplayed(),
00132 $membership->getGroupId(),
00133 $membership->getUserId()
00134 )
00135 );
00136 }
00137
00142 function deleteMembership(&$membership) {
00143 return $this->deleteMembershipById($membership->getGroupId(), $membership->getUserId());
00144 }
00145
00151 function deleteMembershipById($groupId, $userId) {
00152 return $this->update(
00153 'DELETE FROM group_memberships WHERE group_id = ? AND user_id = ?',
00154 array($groupId, $userId)
00155 );
00156 }
00157
00162 function deleteMembershipByGroupId($groupId) {
00163 return $this->update(
00164 'DELETE FROM group_memberships WHERE group_id = ?',
00165 $groupId
00166 );
00167 }
00168
00173 function deleteMembershipByUserId($userId) {
00174 return $this->update(
00175 'DELETE FROM group_memberships WHERE user_id = ?',
00176 $userId
00177 );
00178 }
00179
00184 function resequenceMemberships($groupId) {
00185 $result = &$this->retrieve(
00186 'SELECT user_id, group_id FROM group_memberships WHERE group_id = ? ORDER BY seq',
00187 $groupId
00188 );
00189
00190 for ($i=1; !$result->EOF; $i++) {
00191 list($userId, $groupId) = $result->fields;
00192 $this->update(
00193 'UPDATE group_memberships SET seq = ? WHERE user_id = ? AND group_id = ?',
00194 array(
00195 $i,
00196 $userId,
00197 $groupId
00198 )
00199 );
00200
00201 $result->moveNext();
00202 }
00203
00204 $result->close();
00205 unset($result);
00206 }
00207 }
00208
00209 ?>