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