/home/smartonegroup/www/veroserv/system/controllers/media.php
<?php
if (!defined('APP_RUN')) {
    exit('No direct access allowed');
}
authenticate_admin();
$request_method = request_method();

$action = route(1,'files');
switch ($request_method) {
    case 'GET':
        switch ($action) {

            case 'files':

                $media_files = MediaFile::orderBy('id', 'desc')->get();
                \view('media', [
                    'media_files' => $media_files,
                    'selected_navigation' => 'media',
                ]);

                break;


            case 'image':

                $server = League\Glide\ServerFactory::create([
                    'source' => APP_STORAGE_PATH . '/media',
                    'cache' => APP_CACHE_PATH . '/media',
                ]);

                $path = route(2);

                if(file_exists(APP_STORAGE_PATH . '/media/' . $path))
                {
                    $server->outputImage($path, $_GET);
                }
                else
                {
                    $server->outputImage('default.png', $_GET);
                }


                break;

            case 'delete':

                $id = route(2);
                $media_file = MediaFile::find($id);
                if ($media_file) {
                    $path = APP_STORAGE_PATH . '/media/' . $media_file->path;

                    if(file_exists($path))
                    {
                        unlink($path);
                    }

                    $media_file->delete();

                    redirect_to('media',[
                        'success' => 'Media file deleted successfully'
                    ]);

                }

                break;

            case 'choose':

                $media_files = MediaFile::orderBy('id', 'desc')->get();
                \view('media_choose', [
                    'media_files' => $media_files,
                ]);

                break;
        }

    case 'POST':
        switch ($action)
        {
            case 'upload':

                if (APP_STAGE == 'Demo') {
                    api_response([
                        'errors' => [
                            'file' => 'Upload is disabled in demo mode',
                        ],
                    ], 422);
                }

                $uploader = new Uploader();
                $uploader->setDir(APP_STORAGE_PATH.'/media/');
                $uploader->setExtensions(['jpg','jpeg','gif','svg','webp','png']);
                if ($uploader->uploadFile('file')) {
                    $uploaded = $uploader->getUploadName();
                    $extension = $uploader->getExtension($uploaded);
                    $media_file = new MediaFile();
                    $media_file->title = $_FILES['file']['name'] ?? $uploaded;
                    $media_file->path = $uploaded;
                    $media_file->extension = $extension;
                    $media_file->save();
                } else {
                    $error_message = $uploader->getMessage();
                    api_response([
                        'errors' => [
                            'file' => $error_message
                        ],
                    ], 422);
                }

                break;
        }
        break;
}