143 lines
3.4 KiB
PHP
143 lines
3.4 KiB
PHP
<?php
|
|
/**
|
|
* @file classes/announcement/DAO.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 DAO
|
|
*
|
|
* @brief Read and write announcements to the database.
|
|
*/
|
|
|
|
namespace PKP\announcement;
|
|
|
|
use Illuminate\Support\Collection;
|
|
use Illuminate\Support\Facades\DB;
|
|
use Illuminate\Support\LazyCollection;
|
|
use PKP\core\EntityDAO;
|
|
|
|
/**
|
|
* @template T of Announcement
|
|
* @extends EntityDAO<T>
|
|
*/
|
|
class DAO extends EntityDAO
|
|
{
|
|
/** @copydoc EntityDAO::$schema */
|
|
public $schema = \PKP\services\PKPSchemaService::SCHEMA_ANNOUNCEMENT;
|
|
|
|
/** @copydoc EntityDAO::$table */
|
|
public $table = 'announcements';
|
|
|
|
/** @copydoc EntityDAO::$settingsTable */
|
|
public $settingsTable = 'announcement_settings';
|
|
|
|
/** @copydoc EntityDAO::$primaryKeyColumn */
|
|
public $primaryKeyColumn = 'announcement_id';
|
|
|
|
/** @copydoc EntityDAO::$primaryTableColumns */
|
|
public $primaryTableColumns = [
|
|
'id' => 'announcement_id',
|
|
'assocId' => 'assoc_id',
|
|
'assocType' => 'assoc_type',
|
|
'typeId' => 'type_id',
|
|
'dateExpire' => 'date_expire',
|
|
'datePosted' => 'date_posted',
|
|
];
|
|
|
|
/**
|
|
* Instantiate a new DataObject
|
|
*/
|
|
public function newDataObject(): Announcement
|
|
{
|
|
return app(Announcement::class);
|
|
}
|
|
|
|
/**
|
|
* Check if an announcement exists
|
|
*/
|
|
public function exists(int $id): bool
|
|
{
|
|
return DB::table($this->table)
|
|
->where($this->primaryKeyColumn, '=', $id)
|
|
->exists();
|
|
}
|
|
|
|
/**
|
|
* Get an announcement
|
|
*/
|
|
public function get(int $id): ?Announcement
|
|
{
|
|
$row = DB::table($this->table)
|
|
->where($this->primaryKeyColumn, $id)
|
|
->first();
|
|
return $row ? $this->fromRow($row) : null;
|
|
}
|
|
|
|
/**
|
|
* Get the number of announcements matching the configured query
|
|
*/
|
|
public function getCount(Collector $query): int
|
|
{
|
|
return $query
|
|
->getQueryBuilder()
|
|
->get('a.' . $this->primaryKeyColumn)
|
|
->count();
|
|
}
|
|
|
|
/**
|
|
* Get a list of ids matching the configured query
|
|
*
|
|
* @return Collection<int,int>
|
|
*/
|
|
public function getIds(Collector $query): Collection
|
|
{
|
|
return $query
|
|
->getQueryBuilder()
|
|
->pluck('a.' . $this->primaryKeyColumn);
|
|
}
|
|
|
|
/**
|
|
* Get a collection of announcements matching the configured query
|
|
*
|
|
* @return LazyCollection<int,T>
|
|
*/
|
|
public function getMany(Collector $query): LazyCollection
|
|
{
|
|
$rows = $query
|
|
->getQueryBuilder()
|
|
->get();
|
|
|
|
return LazyCollection::make(function () use ($rows) {
|
|
foreach ($rows as $row) {
|
|
yield $row->announcement_id => $this->fromRow($row);
|
|
}
|
|
});
|
|
}
|
|
|
|
/**
|
|
* @copydoc EntityDAO::insert()
|
|
*/
|
|
public function insert(Announcement $announcement): int
|
|
{
|
|
return parent::_insert($announcement);
|
|
}
|
|
|
|
/**
|
|
* @copydoc EntityDAO::update()
|
|
*/
|
|
public function update(Announcement $announcement)
|
|
{
|
|
parent::_update($announcement);
|
|
}
|
|
|
|
/**
|
|
* @copydoc EntityDAO::delete()
|
|
*/
|
|
public function delete(Announcement $announcement)
|
|
{
|
|
parent::_delete($announcement);
|
|
}
|
|
}
|