first commit
This commit is contained in:
@@ -0,0 +1,169 @@
|
||||
<?php
|
||||
/**
|
||||
* @file classes/log/event/DAO.php
|
||||
*
|
||||
* Copyright (c) 2014-2023 Simon Fraser University
|
||||
* Copyright (c) 2000-2023 John Willinsky
|
||||
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
||||
*
|
||||
* @class DAO
|
||||
*
|
||||
* @brief Read and write event information to the database.
|
||||
*/
|
||||
|
||||
namespace PKP\log\event;
|
||||
|
||||
use Illuminate\Support\Collection;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\LazyCollection;
|
||||
use PKP\core\EntityDAO;
|
||||
use PKP\services\PKPSchemaService;
|
||||
|
||||
class DAO extends EntityDAO
|
||||
{
|
||||
/** @copydoc EntityDAO::$schema */
|
||||
public $schema = PKPSchemaService::SCHEMA_EVENT_LOG;
|
||||
|
||||
/** @copydoc EntityDAO::$table */
|
||||
public $table = 'event_log';
|
||||
|
||||
/** @copydoc EntityDAO::$settingsTable */
|
||||
public $settingsTable = 'event_log_settings';
|
||||
|
||||
/** @copydoc EntityDAO::$primaryKeyColumn */
|
||||
public $primaryKeyColumn = 'log_id';
|
||||
|
||||
/** @copydoc EntityDAO::$primaryTableColumns */
|
||||
public $primaryTableColumns = [
|
||||
'id' => 'log_id',
|
||||
'assocType' => 'assoc_type',
|
||||
'assocId' => 'assoc_id',
|
||||
'userId' => 'user_id',
|
||||
'dateLogged' => 'date_logged',
|
||||
'eventType' => 'event_type',
|
||||
'message' => 'message',
|
||||
'isTranslated' => 'is_translated',
|
||||
];
|
||||
|
||||
/**
|
||||
* Instantiate a new DataObject
|
||||
*/
|
||||
public function newDataObject(): EventLogEntry
|
||||
{
|
||||
return app(EventLogEntry::class);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a log entry exists
|
||||
*/
|
||||
public function exists(int $id): bool
|
||||
{
|
||||
return DB::table($this->table)
|
||||
->where($this->primaryKeyColumn, '=', $id)
|
||||
->exists();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an event log entry
|
||||
*/
|
||||
public function get(int $id): ?EventLogEntry
|
||||
{
|
||||
$row = DB::table($this->table)
|
||||
->where($this->primaryKeyColumn, $id)
|
||||
->first();
|
||||
return $row ? $this->fromRow($row) : null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the number of log entries matching the configured query
|
||||
*/
|
||||
public function getCount(Collector $query): int
|
||||
{
|
||||
return $query
|
||||
->getQueryBuilder()
|
||||
->count();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a list of ids matching the configured query
|
||||
*/
|
||||
public function getIds(Collector $query): Collection
|
||||
{
|
||||
return $query
|
||||
->getQueryBuilder()
|
||||
->select('e.' . $this->primaryKeyColumn)
|
||||
->pluck('e.' . $this->primaryKeyColumn);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get a collection of log entries matching the configured query
|
||||
*/
|
||||
public function getMany(Collector $query): LazyCollection
|
||||
{
|
||||
$rows = $query
|
||||
->getQueryBuilder()
|
||||
->get();
|
||||
|
||||
return LazyCollection::make(function () use ($rows) {
|
||||
foreach ($rows as $row) {
|
||||
yield $row->log_id => $this->fromRow($row);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc EntityDAO::fromRow()
|
||||
*/
|
||||
public function fromRow(object $row): EventLogEntry
|
||||
{
|
||||
$logEntry = parent::fromRow($row);
|
||||
$schema = $this->schemaService->get($this->schema);
|
||||
|
||||
DB::table($this->settingsTable)
|
||||
->where($this->primaryKeyColumn, '=', $row->{$this->primaryKeyColumn})
|
||||
->get()
|
||||
->each(function ($row) use ($logEntry, $schema) {
|
||||
if (!empty($schema->properties->{$row->setting_name})) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Retrieve custom properties
|
||||
if (!empty($row->setting_type)) {
|
||||
$logEntry->setData(
|
||||
$row->setting_name,
|
||||
$this->convertFromDB(
|
||||
$row->setting_value,
|
||||
$row->setting_type
|
||||
),
|
||||
empty($row->locale) ? null : $row->locale
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
return $logEntry;
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc EntityDAO::insert()
|
||||
*/
|
||||
public function insert(EventLogEntry $eventLog): int
|
||||
{
|
||||
return parent::_insert($eventLog);
|
||||
}
|
||||
|
||||
/**
|
||||
* @copydoc EntityDAO::delete()
|
||||
*/
|
||||
public function delete(EventLogEntry $eventLog)
|
||||
{
|
||||
parent::_delete($eventLog);
|
||||
}
|
||||
|
||||
/**
|
||||
* Transfer all log entries to another user.
|
||||
*/
|
||||
public function changeUser(int $oldUserId, int $newUserId)
|
||||
{
|
||||
DB::table($this->table)->where('user_id', $oldUserId)->update(['user_id' => $newUserId]);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user