File: /var/www/heifetz/heifetz-app/models/Repositories/UserLogRepository.php
<?php
declare(strict_types=1);
namespace Models\Repositories;
use Core\Models\OldUser;
use Helpers\Data;
use Helpers\DataTableHelper;
use JetBrains\PhpStorm\ArrayShape;
use Models\UserLogs;
class UserLogRepository
{
#[ArrayShape(['data' => "array", 'totalCount' => "int"])]
public static function getUserLogs(array $options): array
{
$limit = (int) $options['limit'];
$offset = (int) $options['offset'];
$orderBy = $options['orderBy'];
$filters = $options['filters'];
$sql = UserLogs::getQuery();
$cols = ['id', 'user_id', 'entity', 'entity_id', 'column', 'value', 'created_at', 'action'];
$sql = DataTableHelper::sort($cols, $orderBy, $sql);
if (!empty($filters)) {
foreach ($filters as $filterKey => $value) {
if (empty($value)) {
continue;
}
switch ($filterKey) {
case 'value':
$sql->whereLike('value', $value);
break;
case 'userId':
$sql->whereIn('user_id', $value);
break;
case 'entity':
$sql->whereIn('entity', $value);
break;
case 'entityId':
if (isset($filters['onlyFullEqual']) && '1' === $filters['onlyFullEqual']) {
$sql->where('entity_id = ?', $value);
} else {
$sql->whereLike('entity_id', $value);
}
break;
}
}
}
$totalCount = $sql->totalCount();
$sql->limit($limit, $offset);
/** @var UserLogs[] $userLogs */
$userLogs = $sql->fetchAll();
$data = [];
foreach ($userLogs as $log) {
$user = OldUser::find($log->user_id);
$row = [];
$row[] = $log->id;
$row[] = $user ? Data::generateUserLink($user->id, $user->username) : '';
$row[] = $log->entity;
$row[] = empty($log->entity_id) ? '' : $log->entity_id;
$row[] = $log->column;
$row[] = UserLogs::ACTION_DELETE == $log->action ? '' : $log->value;
$row[] = date('d.m.Y H:i:s', strtotime($log->created_at));
$row[] = UserLogs::$actions[$log->action];
$data[] = $row;
}
return ['data' => $data, 'totalCount' => $totalCount];
}
}