Вход Регистрация
Файл: app/Http/Controllers/Admin/UserController.php
Строк: 200
<?php

declare(strict_types=1);

namespace 
AppHttpControllersAdmin;

use 
AppClassesRegistry;
use 
AppClassesRestatement;
use 
AppClassesValidator;
use 
AppModelsBanhist;
use 
AppModelsBlackList;
use 
AppModelsComment;
use 
AppModelsUser;
use 
AppModelsUserField;
use 
IlluminateHttpRedirectResponse;
use 
IlluminateHttpRequest;
use 
IlluminateSupportFacadesHash;
use 
IlluminateSupportStr;
use 
IlluminateViewView;

class 
UserController extends AdminController
{
    
/**
     * Главная страница
     */
    
public function index(): View
    
{
        
$users User::query()
            ->
orderByDesc('created_at')
            ->
paginate(setting('userlist'));

        return 
view('admin/users/index'compact('users'));
    }

    
/**
     * Поиск пользователей
     */
    
public function search(Request $request): View
    
{
        
$q check($request->input('q'));

        
$users User::query()
            ->
when(
                
$q === '1',
                
fn ($query) => $query->whereRaw("login RLIKE '^[-0-9]'"),
                
fn ($query) => $query->where('login''like'$q '%')
            )
            ->
orderByDesc('point')
            ->
paginate(setting('usersearch'))
            ->
appends(['q' => $q]);

        return 
view('admin/users/search'compact('users'));
    }

    
/**
     * Редактирование пользователя
     */
    
public function edit(Request $requestValidator $validator): View|RedirectResponse
    
{
        
$user getUserByLogin($request->input('user'));

        if (! 
$user) {
            
abort(404__('validator.user'));
        }

        
$allThemes getAvailableThemes();
        
$adminGroups User::ADMIN_GROUPS;

        
$allGroups = [];
        foreach (
User::ALL_GROUPS as $level) {
            
$allGroups[$level] = User::getLevelByKey($level);
        }

        
$fields UserField::query()->withUserData($user->id)->get();

        if (
$request->isMethod('post')) {
            
$level $request->input('level');
            
$password $request->input('password');
            
$email $request->input('email');
            
$name $request->input('name');
            
$country $request->input('country');
            
$city $request->input('city');
            
$phone preg_replace('/[^d+]/'''$request->input('phone') ?? '');
            
$site $request->input('site');
            
$birthday $request->input('birthday');
            
$point int($request->input('point'));
            
$money int($request->input('money'));
            
$status $request->input('status');
            
$posrating int($request->input('posrating'));
            
$negrating int($request->input('negrating'));
            
$themes $request->input('themes');
            
$gender $request->input('gender') === User::MALE User::MALE User::FEMALE;
            
$info $request->input('info');

            
$validator
                
->in($levelUser::ALL_GROUPS, ['level' => __('users.user_level_invalid')])
                ->
length($password620__('users.password_length_requirements'), false)
                ->
email($email, ['email' => __('validator.email')])
                ->
phone($phone, ['phone' => __('validator.phone')], false)
                ->
url($site, ['site' => __('validator.url')], false)
                ->
regex($birthday'#^[0-9]{2}+.[0-9]{2}+.[0-9]{4}$#', ['birthday' => __('validator.date')], false)
                ->
length($status325, ['status' => __('users.status_short_or_long')], false)
                ->
true(in_array($themes$allThemestrue) || empty($themes), ['themes' => __('users.theme_not_installed')])
                ->
length($info01000, ['info' => __('users.info_yourself_long')]);

            foreach (
$fields as $field) {
                
$validator->length(
                    
$request->input('field' $field->id),
                    
$field->min,
                    
$field->max,
                    [
'field' $field->id => __('validator.text')],
                    
false // Для админа поля не обязательны
                
);
            }

            if (
$validator->isValid()) {
                if (
$password) {
                    
$text __('users.user_new_password', ['password' => $password]);
                    
$password Hash::make($password);
                } else {
                    
$text null;
                    
$password $user->password;
                }

                
$name Str::substr($name020);
                
$country Str::substr($country030);
                
$city Str::substr($city050);
                
$rating $posrating $negrating;

                
$user->update([
                    
'password'  => $password,
                    
'level'     => $level,
                    
'email'     => $email,
                    
'name'      => $name,
                    
'country'   => $country,
                    
'city'      => $city,
                    
'phone'     => $phone,
                    
'site'      => $site,
                    
'birthday'  => $birthday,
                    
'point'     => $point,
                    
'money'     => $money,
                    
'status'    => $status,
                    
'rating'    => $rating,
                    
'posrating' => $posrating,
                    
'negrating' => $negrating,
                    
'themes'    => $themes,
                    
'gender'    => $gender,
                    
'info'      => $info,
                ]);

                foreach (
$fields as $field) {
                    
$user->data()
                        ->
updateOrCreate([
                            
'field_id' => $field->id,
                        ], [
                            
'value' => $field->sanitizeValue($request->input('field' $field->id)),
                        ]);
                }

                
clearCache('status');
                
setFlash('success', [__('users.user_success_changed'), $text]);

                return 
redirect('admin/users/edit?user=' $user->login);
            }

            
setInput($request->all());
            
setFlash('danger'$validator->getErrors());
        }

        
$banhist Banhist::query()
            ->
where('user_id'$user->id)
            ->
whereIn('type', ['ban''change'])
            ->
orderByDesc('created_at')
            ->
first();

        return 
view('admin/users/edit'compact('user''banhist''allThemes''allGroups''adminGroups''fields'));
    }

    
/**
     * Удаление пользователя
     */
    
public function delete(Request $requestValidator $validator): View|RedirectResponse
    
{
        
$user getUserByLogin($request->input('user'));

        if (! 
$user) {
            
abort(404__('validator.user'));
        }

        if (
$request->isMethod('post')) {
            
$loginblack $request->boolean('loginblack');
            
$mailblack $request->boolean('mailblack');
            
$delcomments $request->boolean('delcomments');

            
$validator->notIn($user->levelUser::ADMIN_GROUPS__('users.admins_remove_forbidden'));

            if (
$validator->isValid()) {
                if (
$loginblack) {
                    
BlackList::query()->firstOrCreate(
                        [
'type' => 'login''value' => $user->login],
                        [
'user_id' => getUser('id')],
                    );
                }

                if (
$mailblack) {
                    
BlackList::query()->firstOrCreate(
                        [
'type' => 'email''value' => $user->email],
                        [
'user_id' => getUser('id')],
                    );
                }

                foreach (
Registry::$onAdminDeleteUser as $handler) {
                    
$handler($user$request);
                }

                
// Удаление комментариев
                
if ($delcomments) {
                    
$comments Comment::query()
                        ->
where('user_id'$user->id)
                        ->
get();

                    
$comments->each(static function (Comment $comment) {
                        
$comment->delete();
                    });

                    if (
$comments->isNotEmpty()) {
                        
Restatement::run(array_keys(Restatement::$handlers));
                    }
                }

                
$user->delete();

                
setFlash('success'__('users.user_success_deleted'));

                return 
redirect('admin/users');
            }

            
setInput($request->all());
            
setFlash('danger'$validator->getErrors());
        }

        return 
view('admin/users/delete'compact('user'));
    }
}
Онлайн: 0
Реклама