[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
14082024
/
Data
/
htdocs
/
htdocs
/
jurnal-kesmas
/
lib
/
pkp
/
classes
/
note
/
[
Home
]
File: NoteDAO.php
<?php /** * @file classes/note/NoteDAO.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 NoteDAO * * @ingroup note * * @see Note * * @brief Operations for retrieving and modifying Note objects. */ namespace PKP\note; use APP\core\Application; use APP\facades\Repo; use Illuminate\Database\Query\Builder; use Illuminate\Support\Facades\DB; use Illuminate\Support\LazyCollection; use PKP\core\Core; use PKP\db\DAOResultFactory; use PKP\plugins\Hook; use PKP\submissionFile\SubmissionFile; class NoteDAO extends \PKP\db\DAO { public const NOTE_ORDER_DATE_CREATED = 1; public const NOTE_ORDER_ID = 2; /** * Create a new data object * * @return Note */ public function newDataObject() { return new Note(); } /** * Retrieve Note by note id * * @param int $noteId Note ID * * @return Note|null object */ public function getById($noteId) { $result = $this->retrieve( 'SELECT * FROM notes WHERE note_id = ?', [(int) $noteId] ); $row = $result->current(); return $row ? $this->_fromRow((array) $row) : null; } /** * Retrieve Notes by user id * * @param int $userId User ID * @param ?\PKP\db\DBResultRange $rangeInfo Optional * * @return DAOResultFactory<Note> Object containing matching Note objects */ public function getByUserId($userId, $rangeInfo = null) { $result = $this->retrieveRange( 'SELECT * FROM notes WHERE user_id = ? ORDER BY date_created DESC', [(int) $userId], $rangeInfo ); return new DAOResultFactory($result, $this, '_fromRow'); } /** * Retrieve Notes by assoc id/type * * @param int $assocId Application::ASSOC_TYPE_... * @param int $assocType Assoc ID (per $assocType) * @param int $userId Optional user ID * @param int $orderBy Optional sorting field constant: self::NOTE_ORDER_... * @param int $sortDirection Optional sorting order constant: DAO::SORT_DIRECTION_... * * @return LazyCollection<int,Note> */ public function getByAssoc( int $assocType, int $assocId, ?int $userId = null, int $orderBy = self::NOTE_ORDER_DATE_CREATED, int $sortDirection = self::SORT_DIRECTION_DESC ): LazyCollection { $query = DB::table('notes') ->where('assoc_id', '=', $assocId) ->where('assoc_type', '=', $assocType); if ($userId) { $query->where('user_id', '=', $userId); } // Sanitize sort ordering switch ($orderBy) { case self::NOTE_ORDER_ID: $orderSanitized = 'note_id'; break; case self::NOTE_ORDER_DATE_CREATED: default: $orderSanitized = 'date_created'; } switch ($sortDirection) { case self::SORT_DIRECTION_ASC: $directionSanitized = 'ASC'; break; case self::SORT_DIRECTION_DESC: default: $directionSanitized = 'DESC'; } $query->orderBy($orderSanitized, $directionSanitized); $rows = $query->get(); return LazyCollection::make(function () use ($rows) { foreach ($rows as $row) { yield $row->note_id => $this->_fromRow(get_object_vars($row)); } }); } /** * Retrieve if note exists * * @param int $assocId * @param int $assocType * @param int $userId * * @return bool */ public function notesExistByAssoc($assocType, $assocId, $userId = null) { $params = [(int) $assocId, (int) $assocType]; if ($userId) { $params[] = (int) $userId; } $result = $this->retrieve( 'SELECT COUNT(*) AS row_count FROM notes WHERE assoc_id = ? AND assoc_type = ? ' . ($userId ? ' AND user_id = ?' : ''), $params ); $row = $result->current(); return $row ? (bool) $row->row_count : false; } /** * Creates and returns an note object from a row * * @param array $row * * @return Note object */ public function _fromRow($row) { $note = $this->newDataObject(); $note->setId($row['note_id']); $note->setUserId($row['user_id']); $note->setDateCreated($this->datetimeFromDB($row['date_created'])); $note->setDateModified($this->datetimeFromDB($row['date_modified'])); $note->setContents($row['contents']); $note->setTitle($row['title']); $note->setAssocType($row['assoc_type']); $note->setAssocId($row['assoc_id']); Hook::call('NoteDAO::_fromRow', [&$note, &$row]); return $note; } /** * Inserts a new note into notes table * * @param Note $note object * * @return int Note Id */ public function insertObject($note) { if (!$note->getDateCreated()) { $note->setDateCreated(Core::getCurrentDate()); } $this->update( sprintf( 'INSERT INTO notes (user_id, date_created, date_modified, title, contents, assoc_type, assoc_id) VALUES (?, %s, %s, ?, ?, ?, ?)', $this->datetimeToDB($note->getDateCreated()), $this->datetimeToDB(Core::getCurrentDate()) ), [ (int) $note->getUserId(), $note->getTitle(), $note->getContents(), (int) $note->getAssocType(), (int) $note->getAssocId() ] ); $note->setId($this->getInsertId()); return $note->getId(); } /** * Update a note in the notes table * * @param Note $note object * * @return int Note Id */ public function updateObject($note) { return $this->update( sprintf( 'UPDATE notes SET user_id = ?, date_created = %s, date_modified = %s, title = ?, contents = ?, assoc_type = ?, assoc_id = ? WHERE note_id = ?', $this->datetimeToDB($note->getDateCreated()), $this->datetimeToDB(Core::getCurrentDate()) ), [ (int) $note->getUserId(), $note->getTitle(), $note->getContents(), (int) $note->getAssocType(), (int) $note->getAssocId(), (int) $note->getId() ] ); } /** * Delete a note by note object. * * @param Note $note */ public function deleteObject($note) { $this->deleteById($note->getId()); } /** * Delete Note by note id * * @param int $noteId * @param int $userId optional */ public function deleteById($noteId, $userId = null) { Repo::submissionFile() ->getCollector() ->filterByAssoc(Application::ASSOC_TYPE_NOTE, [(int) $noteId]) ->getMany() ->each(function (SubmissionFile $file) { Repo::submissionFile()->delete($file); }); DB::table('notes') ->where('note_id', '=', (int) $noteId) ->when(!is_null($userId), function (Builder $q) use ($userId) { $q->where('user_id', '=', $userId); }) ->delete(); } /** * Delete notes by association * * @param int $assocType Application::ASSOC_TYPE_... * @param int $assocId Foreign key, depending on $assocType */ public function deleteByAssoc($assocType, $assocId) { $notes = $this->getByAssoc($assocType, $assocId); foreach ($notes as $note) { $this->deleteObject($note); } } } if (!PKP_STRICT_MODE) { class_alias('\PKP\note\NoteDAO', '\NoteDAO'); define('NOTE_ORDER_DATE_CREATED', NoteDAO::NOTE_ORDER_DATE_CREATED); define('NOTE_ORDER_ID', NoteDAO::NOTE_ORDER_ID); }