00001 <?php
00002
00017 import('lib.pkp.classes.controlledVocab.ControlledVocabDAO');
00018
00019 define('CONTROLLED_VOCAB_MONOGRAPH_DISCIPLINE', 'monographDiscipline');
00020
00021 class MonographDisciplineDAO extends ControlledVocabDAO {
00025 function MonographDisciplineDAO() {
00026 parent::ControlledVocabDAO();
00027 }
00028
00034 function build($monographId) {
00035 return parent::build(CONTROLLED_VOCAB_MONOGRAPH_DISCIPLINE, ASSOC_TYPE_MONOGRAPH, $monographId);
00036 }
00037
00042 function getLocaleFieldNames() {
00043 return array('monographDiscipline');
00044 }
00045
00052 function getDisciplines($monographId, $locales) {
00053
00054 $returner = array();
00055
00056 foreach ($locales as $locale) {
00057
00058 $returner[$locale] = array();
00059 $disciplines = $this->build($monographId);
00060 $monographDisciplineEntryDao =& DAORegistry::getDAO('MonographDisciplineEntryDAO');
00061 $monographDisciplines = $monographDisciplineEntryDao->getByControlledVocabId($disciplines->getId());
00062
00063 while ($discipline =& $monographDisciplines->next()) {
00064 $discipline = $discipline->getDiscipline();
00065 if (array_key_exists($locale, $discipline)) {
00066 $returner[$locale][] = $discipline[$locale];
00067 unset($discipline);
00068 }
00069 }
00070 }
00071 return $returner;
00072 }
00073
00078 function getAllUniqueDisciplines() {
00079 $disciplines = array();
00080
00081 $result =& $this->retrieve(
00082 'SELECT DISTINCT setting_value FROM controlled_vocab_entry_settings WHERE setting_name = ?', CONTROLLED_VOCAB_MONOGRAPH_DISCIPLINE
00083 );
00084
00085 while (!$result->EOF) {
00086 $disciplines[] = $result->fields[0];
00087 $result->MoveNext();
00088 }
00089
00090 $result->Close();
00091 unset($result);
00092
00093 return $disciplines;
00094 }
00095
00101 function getMonographIdsByDiscipline($discipline) {
00102 $result =& $this->retrieve(
00103 'SELECT assoc_id
00104 FROM controlled_vocabs cv
00105 LEFT JOIN controlled_vocab_entries cve ON cv.controlled_vocab_id = cve.controlled_vocab_id
00106 INNER JOIN controlled_vocab_entry_settings cves ON cve.controlled_vocab_entry_id = cves.controlled_vocab_entry_id
00107 WHERE cves.setting_name = ? AND cves.setting_value = ?',
00108 array(CONTROLLED_VOCAB_MONOGRAPH_DISCIPLINE, $discipline)
00109 );
00110
00111 $returner = array();
00112 while (!$result->EOF) {
00113 $row = $result->GetRowAssoc(false);
00114 $returner[] = $row['assoc_id'];
00115 $result->MoveNext();
00116 }
00117 $result->Close();
00118 return $returner;
00119 }
00120
00128 function insertDisciplines($disciplines, $monographId, $deleteFirst = true) {
00129 $disciplineDao =& DAORegistry::getDAO('MonographDisciplineDAO');
00130 $monographDisciplineEntryDao =& DAORegistry::getDAO('MonographDisciplineEntryDAO');
00131 $currentDisciplines = $this->build($monographId);
00132
00133 if ($deleteFirst) {
00134 $existingEntries = $disciplineDao->enumerate($currentDisciplines->getId(), CONTROLLED_VOCAB_MONOGRAPH_DISCIPLINE);
00135
00136 foreach ($existingEntries as $id => $entry) {
00137 $entry = trim($entry);
00138 $monographDisciplineEntryDao->deleteObjectById($id);
00139 }
00140 }
00141 if (is_array($disciplines)) {
00142
00143 foreach ($disciplines as $locale => $list) {
00144 if (is_array($list)) {
00145 $list = array_unique($list);
00146 $i = 1;
00147 foreach ($list as $discipline) {
00148 $disciplineEntry = $monographDisciplineEntryDao->newDataObject();
00149 $disciplineEntry->setControlledVocabId($currentDisciplines->getID());
00150 $disciplineEntry->setDiscipline(urldecode($discipline), $locale);
00151 $disciplineEntry->setSequence($i);
00152 $i ++;
00153 $disciplineEntryId = $monographDisciplineEntryDao->insertObject($disciplineEntry);
00154 }
00155 }
00156 }
00157 }
00158 }
00159 }
00160
00161 ?>