00001 <?php
00002
00016 import('lib.pkp.classes.controlledVocab.ControlledVocabDAO');
00017
00018 define('CONTROLLED_VOCAB_MONOGRAPH_AGENCY', 'monographAgency');
00019
00020 class MonographAgencyDAO extends ControlledVocabDAO {
00024 function MonographAgencyDAO() {
00025 parent::ControlledVocabDAO();
00026 }
00027
00033 function build($monographId) {
00034 return parent::build(CONTROLLED_VOCAB_MONOGRAPH_AGENCY, ASSOC_TYPE_MONOGRAPH, $monographId);
00035 }
00036
00041 function getLocaleFieldNames() {
00042 return array('monographAgency');
00043 }
00044
00051 function getAgencies($monographId, $locales) {
00052
00053 $returner = array();
00054 foreach ($locales as $locale) {
00055 $returner[$locale] = array();
00056 $agencies = $this->build($monographId);
00057 $monographAgencyEntryDao =& DAORegistry::getDAO('MonographAgencyEntryDAO');
00058 $monographAgencies = $monographAgencyEntryDao->getByControlledVocabId($agencies->getId());
00059
00060 while ($agency =& $monographAgencies->next()) {
00061 $agency = $agency->getAgency();
00062 if (array_key_exists($locale, $agency)) {
00063 $returner[$locale][] = $agency[$locale];
00064 unset($agency);
00065 }
00066 }
00067 }
00068 return $returner;
00069 }
00070
00075 function getAllUniqueAgencies() {
00076 $agencies = array();
00077
00078 $result =& $this->retrieve(
00079 'SELECT DISTINCT setting_value FROM controlled_vocab_entry_settings WHERE setting_name = ?', CONTROLLED_VOCAB_MONOGRAPH_AGENCY
00080 );
00081
00082 while (!$result->EOF) {
00083 $agencies[] = $result->fields[0];
00084 $result->MoveNext();
00085 }
00086
00087 $result->Close();
00088 unset($result);
00089
00090 return $agencies;
00091 }
00092
00098 function getMonographIdsByAgency($agency) {
00099 $result =& $this->retrieve(
00100 'SELECT assoc_id
00101 FROM controlled_vocabs cv
00102 LEFT JOIN controlled_vocab_entries cve ON cv.controlled_vocab_id = cve.controlled_vocab_id
00103 INNER JOIN controlled_vocab_entry_settings cves ON cve.controlled_vocab_entry_id = cves.controlled_vocab_entry_id
00104 WHERE cves.setting_name = ? AND cves.setting_value = ?',
00105 array(CONTROLLED_VOCAB_MONOGRAPH_AGENCY, $agency)
00106 );
00107
00108 $returner = array();
00109 while (!$result->EOF) {
00110 $row = $result->GetRowAssoc(false);
00111 $returner[] = $row['assoc_id'];
00112 $result->MoveNext();
00113 }
00114 $result->Close();
00115 return $returner;
00116 }
00117
00125 function insertAgencies($agencies, $monographId, $deleteFirst = true) {
00126 $agencyDao =& DAORegistry::getDAO('MonographAgencyDAO');
00127 $monographAgencyEntryDao =& DAORegistry::getDAO('MonographAgencyEntryDAO');
00128 $currentAgencies = $this->build($monographId);
00129
00130 if ($deleteFirst) {
00131 $existingEntries = $agencyDao->enumerate($currentAgencies->getId(), CONTROLLED_VOCAB_MONOGRAPH_AGENCY);
00132
00133 foreach ($existingEntries as $id => $entry) {
00134 $entry = trim($entry);
00135 $monographAgencyEntryDao->deleteObjectById($id);
00136 }
00137 }
00138 if (is_array($agencies)) {
00139
00140 foreach ($agencies as $locale => $list) {
00141 if (is_array($list)) {
00142 $list = array_unique($list);
00143 $i = 1;
00144 foreach ($list as $agency) {
00145 $agencyEntry = $monographAgencyEntryDao->newDataObject();
00146 $agencyEntry->setControlledVocabId($currentAgencies->getID());
00147 $agencyEntry->setAgency(urldecode($agency), $locale);
00148 $agencyEntry->setSequence($i);
00149 $i ++;
00150 $agencyEntryId = $monographAgencyEntryDao->insertObject($agencyEntry);
00151 }
00152 }
00153 }
00154 }
00155 }
00156 }
00157
00158 ?>