HEX
Server: nginx/1.18.0
System: Linux test-ipsremont 5.4.0-214-generic #234-Ubuntu SMP Fri Mar 14 23:50:27 UTC 2025 x86_64
User: ips (1000)
PHP: 8.0.30
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
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];
    }

}