00001 <?php
00002
00016 import('classes.monograph.Genre');
00017 import('classes.press.DefaultSettingDAO');
00018
00019 class GenreDAO extends DefaultSettingDAO {
00023 function GenreDAO() {
00024 parent::DefaultSettingDAO();
00025 }
00026
00030 function getPrimaryKeyColumnName() {
00031 return 'genre_id';
00032 }
00033
00039 function &getById($genreId, $pressId = null){
00040 $sqlParams = array((int)$genreId);
00041 if ($pressId) {
00042 $sqlParams[] = (int)$pressId;
00043 }
00044
00045 $result =& $this->retrieve('SELECT * FROM genres WHERE genre_id = ?'. ($pressId ? ' AND press_id = ?' : ''), $sqlParams);
00046 $returner = null;
00047 if ($result->RecordCount() != 0) {
00048 $returner =& $this->_fromRow($result->GetRowAssoc(false));
00049 }
00050 $result->Close();
00051 return $returner;
00052 }
00053
00061 function &getEnabledByPressId($pressId, $rangeInfo = null) {
00062 $result =& $this->retrieveRange(
00063 'SELECT * FROM genres WHERE enabled = ? AND press_id = ?', array(1, $pressId), $rangeInfo
00064 );
00065
00066 $returner = new DAOResultFactory($result, $this, '_fromRow', array('id'));
00067 return $returner;
00068 }
00069
00074 function getLocaleFieldNames() {
00075 return array('name', 'designation');
00076 }
00077
00082 function updateLocaleFields(&$genre) {
00083 $this->updateDataObjectSettings('genre_settings', $genre, array(
00084 'genre_id' => $genre->getId()
00085 ));
00086 }
00087
00092 function newDataObject() {
00093 return new Genre();
00094 }
00095
00101 function &_fromRow(&$row) {
00102 $genre = $this->newDataObject();
00103 $genre->setId($row['genre_id']);
00104 $genre->setPressId($row['press_id']);
00105 $genre->setSortable($row['sortable']);
00106 $genre->setCategory($row['category']);
00107
00108 $this->getDataObjectSettings('genre_settings', 'genre_id', $row['genre_id'], $genre);
00109
00110 HookRegistry::call('GenreDAO::_fromRow', array(&$genre, &$row));
00111
00112 return $genre;
00113 }
00114
00119 function insertObject(&$genre) {
00120 $this->update(
00121 'INSERT INTO genres
00122 (sortable, press_id, category)
00123 VALUES
00124 (?, ?, ?)',
00125 array(
00126 $genre->getSortable() ? 1 : 0,
00127 (int) $genre->getPressId(),
00128 (int) $genre->getCategory()
00129 )
00130 );
00131
00132 $genre->setId($this->getInsertGenreId());
00133
00134 $this->updateLocaleFields($genre);
00135
00136 return $genre->getId();
00137 }
00138
00143 function updateObject(&$genre) {
00144 $this->updateLocaleFields($genre);
00145 }
00146
00151 function deleteObject($genre) {
00152 return $this->deleteById($genre->getId());
00153 }
00154
00159 function deleteById($entryId) {
00160 return $this->update(
00161 'UPDATE genres SET enabled = ? WHERE genre_id = ?', array(0, (int) $entryId)
00162 );
00163 }
00164
00170 function deleteByPressId($pressId) {
00171 return $this->update(
00172 'DELETE FROM genres WHERE press_id = ?', array((int) $pressId)
00173 );
00174 }
00175
00180 function getInsertGenreId() {
00181 return $this->getInsertId('genres', 'genre_id');
00182 }
00183
00188 function getSettingsTableName() {
00189 return 'genre_settings';
00190 }
00191
00196 function getTableName() {
00197 return 'genres';
00198 }
00199
00204 function getDefaultType() {
00205 return DEFAULT_SETTING_GENRES;
00206 }
00207
00212 function getDefaultBaseFilename() {
00213 return 'registry/genres.xml';
00214 }
00215
00221 function installDefaultBase($pressId) {
00222 $xmlDao = new XMLDAO();
00223
00224 $data = $xmlDao->parseStruct($this->getDefaultBaseFilename(), array('genre'));
00225 if (!isset($data['genre'])) return false;
00226
00227 foreach ($data['genre'] as $entry) {
00228 $attrs = $entry['attributes'];
00229 $this->update(
00230 'INSERT INTO genres
00231 (entry_key, sortable, press_id, category)
00232 VALUES
00233 (?, ?, ?, ?)',
00234 array($attrs['key'], $attrs['sortable'] ? 1 : 0, $pressId, $attrs['category'])
00235 );
00236 }
00237 return true;
00238 }
00239
00246 function &getSettingAttributes($node = null, $locale = null) {
00247
00248 if ($node == null) {
00249 $settings = array('name', 'designation');
00250 } else {
00251 $localeKey = $node->getAttribute('localeKey');
00252 $sortable = $node->getAttribute('sortable');
00253
00254 $designation = $sortable ? GENRE_SORTABLE_DESIGNATION : __($localeKey.'.designation', array(), $locale);
00255
00256 $settings = array(
00257 'name' => __($localeKey, array(), $locale),
00258 'designation' => $designation
00259 );
00260 }
00261 return $settings;
00262 }
00263 }
00264
00265 ?>