00001 <?php
00002
00016
00017
00018
00019 import ('group.Group');
00020
00021 class GroupDAO extends DAO {
00027 function &getGroup($groupId) {
00028 $result = &$this->retrieve(
00029 'SELECT * FROM groups WHERE group_id = ?', $groupId
00030 );
00031
00032 $returner = null;
00033 if ($result->RecordCount() != 0) {
00034 $returner = &$this->_returnGroupFromRow($result->GetRowAssoc(false));
00035 }
00036 $result->Close();
00037 unset($result);
00038 return $returner;
00039 }
00040
00048 function &getGroups($journalId, $context = null, $rangeInfo = null) {
00049 $params = array($journalId);
00050 if ($context !== null) $params[] = $context;
00051
00052 $result =& $this->retrieveRange(
00053 'SELECT * FROM groups WHERE journal_id = ? ' . ($context!==null?'AND context = ? ':'') . 'ORDER BY context, seq',
00054 $params, $rangeInfo
00055 );
00056
00057 $returner =& new DAOResultFactory($result, $this, '_returnGroupFromRow');
00058 return $returner;
00059 }
00060
00065 function getLocaleFieldNames() {
00066 return array('title');
00067 }
00068
00074 function &_returnGroupFromRow(&$row) {
00075 $group = &new Group();
00076 $group->setGroupId($row['group_id']);
00077 $group->setAboutDisplayed($row['about_displayed']);
00078 $group->setSequence($row['seq']);
00079 $group->setContext($row['context']);
00080 $group->setJournalId($row['journal_id']);
00081 $this->getDataObjectSettings('group_settings', 'group_id', $row['group_id'], $group);
00082
00083 HookRegistry::call('GroupDAO::_returnGroupFromRow', array(&$group, &$row));
00084
00085 return $group;
00086 }
00087
00092 function updateLocaleFields(&$group) {
00093 $this->updateDataObjectSettings('group_settings', $group, array(
00094 'group_id' => $group->getGroupId()
00095 ));
00096 }
00097
00102 function insertGroup(&$group) {
00103 $this->update(
00104 'INSERT INTO groups
00105 (seq, journal_id, about_displayed, context)
00106 VALUES
00107 (?, ?, ?, ?)',
00108 array(
00109 $group->getSequence() == null ? 0 : $group->getSequence(),
00110 $group->getJournalId(),
00111 $group->getAboutDisplayed(),
00112 $group->getContext()
00113 )
00114 );
00115
00116 $group->setGroupId($this->getInsertGroupId());
00117 $this->updateLocaleFields($group);
00118 return $group->getGroupId();
00119 }
00120
00125 function updateGroup(&$group) {
00126 $returner = $this->update(
00127 'UPDATE groups
00128 SET
00129 seq = ?,
00130 journal_id = ?,
00131 about_displayed = ?,
00132 context = ?
00133 WHERE group_id = ?',
00134 array(
00135 $group->getSequence(),
00136 $group->getJournalId(),
00137 $group->getAboutDisplayed(),
00138 $group->getContext(),
00139 $group->getGroupId()
00140 )
00141 );
00142 $this->updateLocaleFields($group);
00143 return $returner;
00144 }
00145
00150 function deleteGroup(&$group) {
00151 return $this->deleteGroupById($group->getGroupId());
00152 }
00153
00158 function deleteGroupById($groupId) {
00159 $groupMembershipDao = &DAORegistry::getDAO('GroupMembershipDAO');
00160 $groupMembershipDao->deleteMembershipByGroupId($groupId);
00161 $this->update('DELETE FROM group_settings WHERE group_id = ?', $groupId);
00162 return $this->update('DELETE FROM groups WHERE group_id = ?', $groupId);
00163 }
00164
00169 function deleteGroupsByJournalId($journalId) {
00170 $groups =& $this->getGroups($journalId);
00171 while ($group =& $groups->next()) {
00172 $this->deleteGroup($group);
00173 }
00174 }
00175
00180 function resequenceGroups($journalId = null) {
00181 $result = &$this->retrieve(
00182 'SELECT group_id FROM groups ' .
00183 ($journalId !== null?'WHERE journal_id = ?':'') .
00184 'ORDER BY seq',
00185 $journalId
00186 );
00187
00188 for ($i=1; !$result->EOF; $i++) {
00189 list($groupId) = $result->fields;
00190 $this->update(
00191 'UPDATE groups SET seq = ? WHERE group_id = ?',
00192 array(
00193 $i,
00194 $groupId
00195 )
00196 );
00197
00198 $result->moveNext();
00199 }
00200
00201 $result->close();
00202 unset($result);
00203 }
00204
00209 function getInsertGroupId() {
00210 return $this->getInsertId('groups', 'group_id');
00211 }
00212 }
00213
00214 ?>