[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
v1
/
lib
/
pkp
/
classes
/
controlledVocab
/
[
Home
]
File: ControlledVocabDAO.php
<?php /** * @file classes/controlledVocab/ControlledVocabDAO.php * * Copyright (c) 2014-2021 Simon Fraser University * Copyright (c) 2000-2021 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class ControlledVocabDAO * * @ingroup controlled_vocab * * @see ControlledVocab * * @brief Operations for retrieving and modifying ControlledVocab objects. */ namespace PKP\controlledVocab; use PKP\db\DAORegistry; use PKP\facades\Locale; class ControlledVocabDAO extends \PKP\db\DAO { /** * Return the Controlled Vocab Entry DAO for this Controlled Vocab. * Can be subclassed to provide extended DAOs. */ public function getEntryDAO() { return DAORegistry::getDAO('ControlledVocabEntryDAO'); } /** * Retrieve a controlled vocab by controlled vocab ID. * * @param int $controlledVocabId * * @return ControlledVocab */ public function getById($controlledVocabId) { $result = $this->retrieve('SELECT * FROM controlled_vocabs WHERE controlled_vocab_id = ?', [(int) $controlledVocabId]); $row = $result->current(); return $row ? $this->_fromRow((array) $row) : null; } /** * Fetch a controlled vocab by symbolic info, building it if needed. * * @param string $symbolic * @param int $assocType * @param int $assocId * * @return ControlledVocab */ public function _build($symbolic, $assocType = 0, $assocId = 0) { // Attempt to fetch an existing controlled vocabulary. $controlledVocab = $this->getBySymbolic($symbolic, $assocType, $assocId); if ($controlledVocab) { return $controlledVocab; } // Attempt to build a new controlled vocabulary. $controlledVocab = $this->newDataObject(); $controlledVocab->setSymbolic($symbolic); $controlledVocab->setAssocType($assocType); $controlledVocab->setAssocId($assocId); $id = $this->insertObject($controlledVocab, false); if ($id !== null) { return $controlledVocab; } // Presume that an error was a duplicate insert. // In this case, try to fetch an existing controlled // vocabulary. return $this->getBySymbolic($symbolic, $assocType, $assocId); } /** * Construct a new data object corresponding to this DAO. * * @return ControlledVocab */ public function newDataObject() { return new ControlledVocab(); } /** * Internal function to return an ControlledVocab object from a row. * * @param array $row * * @return ControlledVocab */ public function _fromRow($row) { $controlledVocab = $this->newDataObject(); $controlledVocab->setId($row['controlled_vocab_id']); $controlledVocab->setAssocType($row['assoc_type']); $controlledVocab->setAssocId($row['assoc_id']); $controlledVocab->setSymbolic($row['symbolic']); return $controlledVocab; } /** * Insert a new ControlledVocab. * * @param ControlledVocab $controlledVocab * * @return ?int New insert ID on insert, or null on error */ public function insertObject($controlledVocab, $dieOnError = true) { $success = $this->update( sprintf('INSERT INTO controlled_vocabs (symbolic, assoc_type, assoc_id) VALUES (?, ?, ?)'), [ $controlledVocab->getSymbolic(), (int) $controlledVocab->getAssocType(), (int) $controlledVocab->getAssocId() ], true, // callHooks $dieOnError ); if ($success) { $controlledVocab->setId($this->getInsertId()); return $controlledVocab->getId(); } else { return null; } // An error occurred on insert } /** * Update an existing controlled vocab. * * @param ControlledVocab $controlledVocab * * @return bool */ public function updateObject($controlledVocab) { $returner = $this->update( sprintf('UPDATE controlled_vocabs SET symbolic = ?, assoc_type = ?, assoc_id = ? WHERE controlled_vocab_id = ?'), [ $controlledVocab->getSymbolic(), (int) $controlledVocab->getAssocType(), (int) $controlledVocab->getAssocId(), (int) $controlledVocab->getId() ] ); return $returner; } /** * Delete a controlled vocab. * * @param ControlledVocab $controlledVocab * * @return bool */ public function deleteObject($controlledVocab) { return $this->deleteObjectById($controlledVocab->getId()); } /** * Delete a controlled vocab by controlled vocab ID. * * @param int $controlledVocabId * * @return bool */ public function deleteObjectById($controlledVocabId) { $controlledVocabEntryDao = DAORegistry::getDAO('ControlledVocabEntryDAO'); /** @var ControlledVocabEntryDAO $controlledVocabEntryDao */ $controlledVocabEntries = $this->enumerate($controlledVocabId); foreach ($controlledVocabEntries as $controlledVocabEntryId => $controlledVocabEntryName) { $controlledVocabEntryDao->deleteObjectById($controlledVocabEntryId); } return $this->update('DELETE FROM controlled_vocabs WHERE controlled_vocab_id = ?', [(int) $controlledVocabId]); } /** * Retrieve an array of controlled vocabs matching the specified * symbolic name and assoc info. * * @param string $symbolic * @param int $assocType * @param int $assocId * * @return ?ControlledVocab */ public function getBySymbolic($symbolic, $assocType = 0, $assocId = 0) { $result = $this->retrieve( 'SELECT * FROM controlled_vocabs WHERE symbolic = ? AND assoc_type = ? AND assoc_id = ?', [$symbolic, (int) $assocType, (int) $assocId] ); $row = $result->current(); return $row ? $this->_fromRow((array) $row) : null; } /** * Get a list of controlled vocabulary options. * * @param string $symbolic * @param int $assocType * @param int $assocId * @param string $settingName optional * * @return array $controlledVocabEntryId => $settingValue */ public function enumerateBySymbolic($symbolic, $assocType, $assocId, $settingName = 'name') { $controlledVocab = $this->getBySymbolic($symbolic, $assocType, $assocId); if (!$controlledVocab) { return []; } return $controlledVocab->enumerate($settingName); } /** * Get a list of controlled vocabulary options. * * @param int $controlledVocabId * @param string $settingName optional * * @return array $controlledVocabEntryId => name */ public function enumerate($controlledVocabId, $settingName = 'name') { $result = $this->retrieve( 'SELECT e.controlled_vocab_entry_id, COALESCE(l.setting_value, p.setting_value, n.setting_value) AS setting_value, COALESCE(l.setting_type, p.setting_type, n.setting_type) AS setting_type FROM controlled_vocab_entries e LEFT JOIN controlled_vocab_entry_settings l ON (l.controlled_vocab_entry_id = e.controlled_vocab_entry_id AND l.setting_name = ? AND l.locale = ?) LEFT JOIN controlled_vocab_entry_settings p ON (p.controlled_vocab_entry_id = e.controlled_vocab_entry_id AND p.setting_name = ? AND p.locale = ?) LEFT JOIN controlled_vocab_entry_settings n ON (n.controlled_vocab_entry_id = e.controlled_vocab_entry_id AND n.setting_name = ? AND n.locale = ?) WHERE e.controlled_vocab_id = ? ORDER BY e.seq', [ $settingName, Locale::getLocale(), // Current locale $settingName, Locale::getPrimaryLocale(), // Primary locale $settingName, '', // No locale (int) $controlledVocabId ] ); $returner = []; foreach ($result as $row) { $returner[$row->controlled_vocab_entry_id] = $this->convertFromDB( $row->setting_value, $row->setting_type ); } return $returner; } } if (!PKP_STRICT_MODE) { class_alias('\PKP\controlledVocab\ControlledVocabDAO', '\ControlledVocabDAO'); }