00001 <?php
00002
00016
00017
00018
00019 import('announcement.Announcement');
00020
00021 class AnnouncementDAO extends DAO {
00027 function &getAnnouncement($announcementId) {
00028 $result = &$this->retrieve(
00029 'SELECT * FROM announcements WHERE announcement_id = ?', $announcementId
00030 );
00031
00032 $returner = null;
00033 if ($result->RecordCount() != 0) {
00034 $returner = &$this->_returnAnnouncementFromRow($result->GetRowAssoc(false));
00035 }
00036 $result->Close();
00037 return $returner;
00038 }
00039
00045 function getAnnouncementJournalId($announcementId) {
00046 $result = &$this->retrieve(
00047 'SELECT journal_id FROM announcements WHERE announcement_id = ?', $announcementId
00048 );
00049
00050 return isset($result->fields[0]) ? $result->fields[0] : 0;
00051 }
00052
00057 function getLocaleFieldNames() {
00058 return array('title', 'descriptionShort', 'description');
00059 }
00060
00066 function &_returnAnnouncementFromRow(&$row) {
00067 $announcement = &new Announcement();
00068 $announcement->setAnnouncementId($row['announcement_id']);
00069 $announcement->setJournalId($row['journal_id']);
00070 $announcement->setTypeId($row['type_id']);
00071 $announcement->setDateExpire($this->dateFromDB($row['date_expire']));
00072 $announcement->setDatePosted($this->datetimeFromDB($row['date_posted']));
00073
00074 $this->getDataObjectSettings('announcement_settings', 'announcement_id', $row['announcement_id'], $announcement);
00075
00076 return $announcement;
00077 }
00078
00083 function updateLocaleFields(&$announcement) {
00084 $this->updateDataObjectSettings('announcement_settings', $announcement, array(
00085 'announcement_id' => $announcement->getAnnouncementId()
00086 ));
00087 }
00088
00094 function insertAnnouncement(&$announcement) {
00095 $this->update(
00096 sprintf('INSERT INTO announcements
00097 (journal_id, type_id, date_expire, date_posted)
00098 VALUES
00099 (?, ?, %s, %s)',
00100 $this->dateToDB($announcement->getDateExpire()), $this->dateToDB($announcement->getDatetimePosted())),
00101 array(
00102 $announcement->getJournalId(),
00103 $announcement->getTypeId()
00104 )
00105 );
00106 $announcement->setAnnouncementId($this->getInsertAnnouncementId());
00107 $this->updateLocaleFields($announcement);
00108 return $announcement->getAnnouncementId();
00109 }
00110
00116 function updateAnnouncement(&$announcement) {
00117 $returner = $this->update(
00118 sprintf('UPDATE announcements
00119 SET
00120 journal_id = ?,
00121 type_id = ?,
00122 date_expire = %s
00123 WHERE announcement_id = ?',
00124 $this->dateToDB($announcement->getDateExpire())),
00125 array(
00126 $announcement->getJournalId(),
00127 $announcement->getTypeId(),
00128 $announcement->getAnnouncementId()
00129 )
00130 );
00131 $this->updateLocaleFields($announcement);
00132 return $returner;
00133 }
00134
00140 function deleteAnnouncement($announcement) {
00141 return $this->deleteAnnouncementById($announcement->getAnnouncementId());
00142 }
00143
00149 function deleteAnnouncementById($announcementId) {
00150 $this->update('DELETE FROM announcement_settings WHERE announcement_id = ?', $announcementId);
00151 return $this->update('DELETE FROM announcements WHERE announcement_id = ?', $announcementId);
00152 }
00153
00159 function deleteAnnouncementByTypeId($typeId) {
00160 $announcements =& $this->getAnnouncementsByTypeId($typeId);
00161 while (($announcement =& $announcements->next())) {
00162 $this->deleteAnnouncement($announcement->getAnnouncementId());
00163 unset($announcement);
00164 }
00165 }
00166
00171 function deleteAnnouncementsByJournal($journalId) {
00172 $announcements =& $this->getAnnouncementsByJournalId($journalId);
00173 while (($announcement =& $announcements->next())) {
00174 $this->deleteAnnouncementById($announcement->getAnnouncementId());
00175 unset($announcement);
00176 }
00177 }
00178
00184 function &getAnnouncementsByJournalId($journalId, $rangeInfo = null) {
00185 $result = &$this->retrieveRange(
00186 'SELECT * FROM announcements WHERE journal_id = ? ORDER BY announcement_id DESC', $journalId, $rangeInfo
00187 );
00188
00189 $returner = &new DAOResultFactory($result, $this, '_returnAnnouncementFromRow');
00190 return $returner;
00191 }
00192
00198 function &getAnnouncementsByTypeId($typeId, $rangeInfo = null) {
00199 $result = &$this->retrieveRange(
00200 'SELECT * FROM announcements WHERE type_id = ? ORDER BY announcement_id DESC', $typeId, $rangeInfo
00201 );
00202
00203 $returner = &new DAOResultFactory($result, $this, '_returnAnnouncementFromRow');
00204 return $returner;
00205 }
00206
00212 function &getNumAnnouncementsByJournalId($journalId, $numAnnouncements, $rangeInfo = null) {
00213 $result = &$this->retrieveRange(
00214 'SELECT * FROM announcements WHERE journal_id = ? ORDER BY announcement_id DESC LIMIT ?', array($journalId, $numAnnouncements), $rangeInfo
00215 );
00216
00217 $returner = &new DAOResultFactory($result, $this, '_returnAnnouncementFromRow');
00218 return $returner;
00219 }
00220
00226 function &getAnnouncementsNotExpiredByJournalId($journalId, $rangeInfo = null) {
00227 $result = &$this->retrieveRange(
00228 'SELECT * FROM announcements WHERE journal_id = ? AND (date_expire IS NULL OR date_expire > CURRENT_DATE) ORDER BY announcement_id DESC', $journalId, $rangeInfo
00229 );
00230
00231 $returner = &new DAOResultFactory($result, $this, '_returnAnnouncementFromRow');
00232 return $returner;
00233 }
00234
00240 function &getNumAnnouncementsNotExpiredByJournalId($journalId, $numAnnouncements, $rangeInfo = null) {
00241 $result = &$this->retrieveRange(
00242 'SELECT * FROM announcements WHERE journal_id = ? AND (date_expire IS NULL OR date_expire > CURRENT_DATE) ORDER BY announcement_id DESC LIMIT ?', array($journalId, $numAnnouncements), $rangeInfo
00243 );
00244
00245 $returner = &new DAOResultFactory($result, $this, '_returnAnnouncementFromRow');
00246 return $returner;
00247 }
00248
00254 function &getMostRecentAnnouncementByJournalId($journalId) {
00255 $result = &$this->retrieve(
00256 'SELECT * FROM announcements WHERE journal_id = ? ORDER BY announcement_id DESC LIMIT 1', $journalId
00257 );
00258
00259 $returner = null;
00260 if ($result->RecordCount() != 0) {
00261 $returner = &$this->_returnAnnouncementFromRow($result->GetRowAssoc(false));
00262 }
00263 $result->Close();
00264 return $returner;
00265 }
00266
00271 function getInsertAnnouncementId() {
00272 return $this->getInsertId('announcements', 'announcement_id');
00273 }
00274 }
00275
00276 ?>