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

declare(strict_types=1);

namespace 
AppHttpControllersAdmin;

use 
AppClassesValidator;
use 
IlluminateHttpRedirectResponse;
use 
IlluminateHttpRequest;
use 
IlluminateSupportStr;
use 
IlluminateViewView;

class 
FileController extends AdminController
{
    private 
string $file;
    private ?
string $path;

    
/**
     * Конструктор
     */
    
public function __construct(Request $request)
    {
        
$this->file ltrim(check($request->input('file')), '/');
        
$this->path rtrim(check($request->input('path')), '/');

        if (
            empty(
$this->path)
            || 
Str::contains($this->path'.')
            || 
Str::startsWith($this->path'/')
            || ! 
file_exists(resource_path('views/' $this->path))
            || ! 
is_dir(resource_path('views/' $this->path))
        ) {
            
$this->path null;
        }
    }

    
/**
     * Главная страница
     */
    
public function index(): View
    
{
        
$path $this->path;
        
$elements preg_grep('/^([^.])/'scandir(resource_path('views/' $path $this->file), SCANDIR_SORT_ASCENDING));

        
$folders = [];
        
$files = [];

        foreach (
$elements as $element) {
            if (
is_dir(resource_path('views/' $path '/' $element))) {
                
$folders[] = $element;
            } else {
                
$files[] = $element;
            }
        }

        
$files array_merge($folders$files);

        
$directories explode('/', (string) $path);

        return 
view('admin/files/index'compact('files''path''directories'));
    }

    
/**
     * Редактирование файла
     *
     *
     * @return View|RedirectResponse
     */
    
public function edit(Request $requestValidator $validator)
    {
        
$path $this->path;
        
$file $path '/' $this->file $this->file;
        
$writable is_writable(resource_path('views/' $path $file '.blade.php'));

        if (
            (
$this->path && ! preg_match('#^([a-z0-9_-/]+|)$#'$this->path))
            || ! 
preg_match('#^[a-z0-9_-/]+$#'$this->file)
        ) {
            
abort(404__('admin.files.file_invalid'));
        }

        if (! 
file_exists(resource_path('views/' $this->path $file '.blade.php'))) {
            
abort(404__('admin.files.file_not_exist'));
        }

        if (
$request->isMethod('post')) {
            
$msg $request->input('msg');

            
$validator->equal($request->input('_token'), csrf_token(), __('validator.token'))
                ->
true($writable, ['msg' => __('admin.files.writable')]);

            if (
$validator->isValid()) {
                
file_put_contents(resource_path('views/' $this->path $file '.blade.php'), $msg);

                
setFlash('success'__('admin.files.file_success_saved'));

                return 
redirect('admin/files/edit?path=' $this->path '&file=' $this->file);
            }

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

        
$contest file_get_contents(resource_path('views/' $path $file '.blade.php'));

        return 
view('admin/files/edit'compact('contest''path''file''writable'));
    }

    
/**
     * Создание файла
     *
     *
     * @return View|RedirectResponse
     */
    
public function create(Request $requestValidator $validator)
    {
        if (! 
is_writable(resource_path('views/' $this->path))) {
            
abort(200__('admin.files.directory_not_writable', ['dir' => $this->path]));
        }

        if (
$request->isMethod('post')) {
            
$filename check($request->input('filename'));
            
$dirname check($request->input('dirname'));

            
$fileName $this->path '/' $filename $filename;
            
$dirName $this->path '/' $dirname $dirname;

            
$validator->equal($request->input('_token'), csrf_token(), __('validator.token'));

            if (
$filename) {
                
$validator->length($filename130, ['filename' => __('admin.files.file_required')]);
                
$validator->false(file_exists(resource_path('views/' $this->path $fileName '.blade.php')), ['filename' => __('admin.files.file_exist')]);
                
$validator->regex($filename'|^[a-z0-9_-]+$|', ['filename' => __('admin.files.file_invalid')]);
            } else {
                
$validator->length($dirname130, ['dirname' => __('admin.files.directory_required')]);
                
$validator->false(file_exists(resource_path('views/' $this->path $dirName)), ['dirname' => __('admin.files.directory_exist')]);
                
$validator->regex($dirname'|^[a-z0-9_-]+$|', ['dirname' => __('admin.files.directory_invalid')]);
            }

            if (
$validator->isValid()) {
                if (
$filename) {
                    
file_put_contents(resource_path('views/' $this->path $fileName '.blade.php'), '');
                    
chmod(resource_path('views/' $this->path $fileName '.blade.php'), 0666);

                    
setFlash('success'__('admin.files.file_success_created'));

                    return 
redirect('admin/files/edit?path=' $this->path '&file=' $filename);
                }

                
$old umask(0);
                
mkdir(resource_path('views/' $this->path $dirName), 0777true);
                
umask($old);
                
setFlash('success'__('admin.files.directory_success_created'));

                return 
redirect('admin/files?path=' $this->path $dirName);
            }

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

        return 
view('admin/files/create', ['path' => $this->path]);
    }

    
/**
     * Удаление файла
     */
    
public function delete(Request $requestValidator $validator): RedirectResponse
    
{
        if (! 
is_writable(resource_path('views/' $this->path))) {
            
abort(200__('admin.files.directory_not_writable', ['dir' => $this->path]));
        }

        
$filename check($request->input('filename'));
        
$dirname check($request->input('dirname'));

        
$fileName $this->path '/' $filename $filename;
        
$dirName $this->path '/' $dirname $dirname;

        
$validator->equal($request->input('_token'), csrf_token(), __('validator.token'));

        if (
$filename) {
            
$validator->true(file_exists(resource_path('views/' $this->path $fileName '.blade.php')), __('admin.files.file_not_exist'));
            
$validator->regex($filename'|^[a-z0-9_-]+$|'__('admin.files.file_invalid'));
        } else {
            
$validator->true(file_exists(resource_path('views/' $this->path $dirName)), __('admin.files.directory_not_exist'));
            
$validator->regex($dirname'|^[a-z0-9_-]+$|'__('admin.files.directory_invalid'));
        }

        if (
$validator->isValid()) {
            if (
$filename) {
                
unlink(resource_path('views/' $this->path $fileName '.blade.php'));
                
setFlash('success'__('admin.files.file_success_deleted'));
            } else {
                
deleteDir(resource_path('views/' $this->path $dirName));
                
setFlash('success'__('admin.files.directory_success_deleted'));
            }
        } else {
            
setFlash('danger'$validator->getErrors());
        }

        return 
redirect('admin/files?path=' $this->path);
    }
}
Онлайн: 1
Реклама