00001 <?php
00002
00016
00017
00018
00019 import('subscription.SubscriptionType');
00020
00021 class SubscriptionTypeDAO extends DAO {
00027 function &getSubscriptionType($typeId) {
00028 $result = &$this->retrieve(
00029 'SELECT * FROM subscription_types WHERE type_id = ?', $typeId
00030 );
00031
00032 $returner = null;
00033 if ($result->RecordCount() != 0) {
00034 $returner = &$this->_returnSubscriptionTypeFromRow($result->GetRowAssoc(false));
00035 }
00036
00037 $result->Close();
00038 unset($result);
00039
00040 return $returner;
00041 }
00042
00048 function getSubscriptionTypeJournalId($typeId) {
00049 $result = &$this->retrieve(
00050 'SELECT journal_id FROM subscription_types WHERE type_id = ?', $typeId
00051 );
00052
00053 $returner = isset($result->fields[0]) ? $result->fields[0] : false;
00054
00055 $result->Close();
00056 unset($result);
00057
00058 return $returner;
00059 }
00060
00066 function getSubscriptionTypeName($typeId) {
00067 $result = &$this->retrieve(
00068 'SELECT COALESCE(l.setting_value, p.setting_value) FROM subscription_type_settings l LEFT JOIN subscription_type_settings p ON (p.type_id = ? AND p.setting_name = ? AND p.locale = ?) WHERE l.type_id = ? AND l.setting_name = ? AND l.locale = ?',
00069 array(
00070 $typeId, 'name', Locale::getLocale(),
00071 $typeId, 'name', Locale::getPrimaryLocale()
00072 )
00073 );
00074
00075 $returner = isset($result->fields[0]) ? $result->fields[0] : false;
00076
00077 $result->Close();
00078 unset($result);
00079
00080 return $returner;
00081 }
00082
00088 function getSubscriptionTypeInstitutional($typeId) {
00089 $result = &$this->retrieve(
00090 'SELECT institutional FROM subscription_types WHERE type_id = ?', $typeId
00091 );
00092
00093 $returner = isset($result->fields[0]) ? $result->fields[0] : false;
00094
00095 $result->Close();
00096 unset($result);
00097
00098 return $returner;
00099 }
00100
00106 function getSubscriptionTypeMembership($typeId) {
00107 $result = &$this->retrieve(
00108 'SELECT membership FROM subscription_types WHERE type_id = ?', $typeId
00109 );
00110
00111 $returner = isset($result->fields[0]) ? $result->fields[0] : false;
00112
00113 $result->Close();
00114 unset($result);
00115
00116 return $returner;
00117 }
00118
00124 function getSubscriptionTypeDisablePublicDisplay($typeId) {
00125 $result = &$this->retrieve(
00126 'SELECT disable_public_display FROM subscription_types WHERE type_id = ?', $typeId
00127 );
00128
00129 $returner = isset($result->fields[0]) ? $result->fields[0] : false;
00130
00131 $result->Close();
00132 unset($result);
00133
00134 return $returner;
00135 }
00136
00143 function subscriptionTypeExistsByTypeId($typeId, $journalId) {
00144 $result = &$this->retrieve(
00145 'SELECT COUNT(*)
00146 FROM subscription_types
00147 WHERE type_id = ?
00148 AND journal_id = ?',
00149 array(
00150 $typeId,
00151 $journalId
00152 )
00153 );
00154 $returner = isset($result->fields[0]) && $result->fields[0] != 0 ? true : false;
00155
00156 $result->Close();
00157 unset($result);
00158
00159 return $returner;
00160 }
00161
00167 function &_returnSubscriptionTypeFromRow(&$row) {
00168 $subscriptionType = &new SubscriptionType();
00169 $subscriptionType->setTypeId($row['type_id']);
00170 $subscriptionType->setJournalId($row['journal_id']);
00171 $subscriptionType->setCost($row['cost']);
00172 $subscriptionType->setCurrencyCodeAlpha($row['currency_code_alpha']);
00173 $subscriptionType->setDuration($row['duration']);
00174 $subscriptionType->setFormat($row['format']);
00175 $subscriptionType->setInstitutional($row['institutional']);
00176 $subscriptionType->setMembership($row['membership']);
00177 $subscriptionType->setDisablePublicDisplay($row['disable_public_display']);
00178 $subscriptionType->setSequence($row['seq']);
00179
00180 $this->getDataObjectSettings('subscription_type_settings', 'type_id', $row['type_id'], $subscriptionType);
00181
00182 HookRegistry::call('SubscriptionTypeDAO::_returnSubscriptionTypeFromRow', array(&$subscriptionType, &$row));
00183
00184 return $subscriptionType;
00185 }
00186
00191 function getLocaleFieldNames() {
00192 return array('name', 'description');
00193 }
00194
00199 function updateLocaleFields(&$subscriptionType) {
00200 $this->updateDataObjectSettings('subscription_type_settings', $subscriptionType, array(
00201 'type_id' => $subscriptionType->getTypeId()
00202 ));
00203 }
00204
00210 function insertSubscriptionType(&$subscriptionType) {
00211 $this->update(
00212 'INSERT INTO subscription_types
00213 (journal_id, cost, currency_code_alpha, duration, format, institutional, membership, disable_public_display, seq)
00214 VALUES
00215 (?, ?, ?, ?, ?, ?, ?, ?, ?)',
00216 array(
00217 $subscriptionType->getJournalId(),
00218 $subscriptionType->getCost(),
00219 $subscriptionType->getCurrencyCodeAlpha(),
00220 $subscriptionType->getDuration(),
00221 $subscriptionType->getFormat(),
00222 $subscriptionType->getInstitutional(),
00223 $subscriptionType->getMembership(),
00224 $subscriptionType->getDisablePublicDisplay(),
00225 $subscriptionType->getSequence()
00226 )
00227 );
00228
00229 $subscriptionType->setTypeId($this->getInsertSubscriptionTypeId());
00230 $this->updateLocaleFields($subscriptionType);
00231 return $subscriptionType->getTypeId();
00232 }
00233
00239 function updateSubscriptionType(&$subscriptionType) {
00240 $returner = $this->update(
00241 'UPDATE subscription_types
00242 SET
00243 journal_id = ?,
00244 cost = ?,
00245 currency_code_alpha = ?,
00246 duration = ?,
00247 format = ?,
00248 institutional = ?,
00249 membership = ?,
00250 disable_public_display = ?,
00251 seq = ?
00252 WHERE type_id = ?',
00253 array(
00254 $subscriptionType->getJournalId(),
00255 $subscriptionType->getCost(),
00256 $subscriptionType->getCurrencyCodeAlpha(),
00257 $subscriptionType->getDuration(),
00258 $subscriptionType->getFormat(),
00259 $subscriptionType->getInstitutional(),
00260 $subscriptionType->getMembership(),
00261 $subscriptionType->getDisablePublicDisplay(),
00262 $subscriptionType->getSequence(),
00263 $subscriptionType->getTypeId()
00264 )
00265 );
00266 $this->updateLocaleFields($subscriptionType);
00267 return $returner;
00268 }
00269
00275 function deleteSubscriptionType(&$subscriptionType) {
00276 return $this->deleteSubscriptionTypeById($subscriptionType->getTypeId());
00277 }
00278
00285 function deleteSubscriptionTypeById($typeId) {
00286
00287 $returner = $this->update('DELETE FROM subscription_types WHERE type_id = ?', $typeId);
00288
00289
00290 if ($returner) {
00291 $this->update('DELETE FROM subscription_type_settings WHERE type_id = ?', $typeId);
00292 $subscriptionDao = &DAORegistry::getDAO('SubscriptionDAO');
00293 return $subscriptionDao->deleteSubscriptionByTypeId($typeId);
00294 } else {
00295 return $returner;
00296 }
00297 }
00298
00305 function deleteSubscriptionTypesByJournal($journalId) {
00306 $result = &$this->retrieve(
00307 'SELECT type_id
00308 FROM subscription_types
00309 WHERE journal_id = ?',
00310 $journalId
00311 );
00312
00313 $returner = false;
00314
00315 if ($result->RecordCount() != 0) {
00316 $returner = true;
00317 while (!$result->EOF && $returner) {
00318 $typeId = $result->fields[0];
00319 $returner = $this->deleteSubscriptionTypeById($typeId);
00320 $result->moveNext();
00321 }
00322 }
00323
00324 $result->Close();
00325 unset($result);
00326
00327 return $returner;
00328 }
00329
00335 function &getSubscriptionTypesByJournalId($journalId, $rangeInfo = null) {
00336 $result = &$this->retrieveRange(
00337 'SELECT * FROM subscription_types WHERE journal_id = ? ORDER BY seq',
00338 $journalId, $rangeInfo
00339 );
00340
00341 $returner = &new DAOResultFactory($result, $this, '_returnSubscriptionTypeFromRow');
00342 return $returner;
00343 }
00344
00349 function getInsertSubscriptionTypeId() {
00350 return $this->getInsertId('subscription_types', 'type_id');
00351 }
00352
00356 function resequenceSubscriptionTypes($journalId) {
00357 $result = &$this->retrieve(
00358 'SELECT type_id FROM subscription_types WHERE journal_id = ? ORDER BY seq',
00359 $journalId
00360 );
00361
00362 for ($i=1; !$result->EOF; $i++) {
00363 list($subscriptionTypeId) = $result->fields;
00364 $this->update(
00365 'UPDATE subscription_types SET seq = ? WHERE type_id = ?',
00366 array(
00367 $i,
00368 $subscriptionTypeId
00369 )
00370 );
00371
00372 $result->moveNext();
00373 }
00374
00375 $result->close();
00376 unset($result);
00377 }
00378 }
00379
00380 ?>