%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /www/loslex/test/app/Livewire/
Upload File :
Create Path :
Current File : //www/loslex/test/app/Livewire/UserList.php

<?php
namespace App\Livewire;

use App\Models\User;
use Livewire\Component;
use Livewire\Attributes\On;
use Livewire\WithPagination;
use Livewire\WithoutUrlPagination;
use Illuminate\Support\Facades\Log;
use Illuminate\Contracts\Database\Query\Builder;


class UserList extends Component
{
    use WithPagination, WithoutUrlPagination;

    public bool $ufReferees = false;
    public bool $ufDeleted = false;
    public bool $ufEmailValidation = false;
    public bool $ufGuidAlias = false;
    public bool $ufLexHash = false;
    public bool $ufOrganizer = false;
    public bool $ufBanned = false;
    public $ufSearch;

    public function clearFilter()
    {
        $this->reset();
        $this->resetPage();
    }

    #[On('user-updated')]
    public function render()
    {
        $this->authorize('viewAny', User::class);
        $users = User::with(['organizer_groups', 'registrations'])
                     ->orderBy('lastname')
                     ->orderBy('firstname')
                     ->orderBy('namesuffix')
                     ->when($this->ufSearch, function (Builder $query, string $str) {
                        $qArr = explode(' ', trim($str, ' '));

                        foreach ($qArr as $qry) {
                            $query->whereAny(['firstname', 'lastname', 'namesuffix', 'username','email', 'licence_number'], 'LIKE', "%{$qry}%");
                        }
                     })
                     ->when($this->ufEmailValidation, function (Builder $query) { $query->whereNull('email_verified_at'); })
                     ->when($this->ufGuidAlias, function (Builder $query) { $query->where('username', 'RLIKE', '^[A-Fa-f\d]{8}(-[A-Fa-f\d]{4}){3}-[A-Fa-f\d]{12}$'); })
                     ->when($this->ufLexHash, function (Builder $query) { $query->whereNotNull('lex_hash'); })
                     ->when($this->ufOrganizer, function (Builder $query) { $query->has('organizer_groups'); })
                     ->when($this->ufDeleted, function (Builder $query) { $query->onlyTrashed(); })
                     ->when($this->ufBanned, function (Builder $query) { $query->where('is_active', '0')->withTrashed(); })
                     ->paginate(18);

        return view('livewire.user-list', ['users' => $users]);
    }

    public function highlight($text)
    {
        if ($this->ufSearch) {
            $qArr = explode(' ', trim($this->ufSearch, ' '));
            foreach ($qArr as $qry) {
                $word = $this->iast_normalize_regex($qry);
                $text = preg_replace("/($word)/i","<span class=\"search-highlight\">$1</span>", $text);
            }
        }

        return $text;
    }

    private function iast_normalize_regex($str) {

        $subst = [ 'a|á', 'c|č', 'd|ď', 'e|é|ě', 'i|í', 'n|ň', 'o|ó', 'r|ř', 's|š', 't|ť', 'u|ů|ú', 'y|ý', 'z|ž' ];

        $subst_rex = [];

        foreach($subst as $variants) {
            $chars = explode('|', $variants);
            foreach($chars as $char) {
                $subst_rex[$char] = "({$variants})";
            }
        }

        $str_chars = mb_str_split($str);

        $str_rex = '';
        foreach($str_chars as $char) {
            $str_rex .= !isset($subst_rex[$char]) ? $char : $subst_rex[$char];
        }

        return $str_rex;
    }
}

Zerion Mini Shell 1.0