HEX
Server: LiteSpeed
System: Linux srv1.dhviews.com 5.14.0-570.23.1.el9_6.x86_64 #1 SMP PREEMPT_DYNAMIC Tue Jun 24 11:27:16 EDT 2025 x86_64
User: bdedition (1723)
PHP: 7.4.33
Disabled: NONE
Upload Files
File: /home/bdedition/public_html/core/app/Http/Controllers/Admin/SystemController.php
<?php

namespace App\Http\Controllers\Admin;

use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Artisan;
use App\Lib\CurlRequest;
use App\Lib\FileManager;
use App\Models\UpdateLog;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Laramin\Utility\VugiChugi;

class SystemController extends Controller
{
    public function systemInfo()
    {
        $laravelVersion = app()->version();
        $timeZone = config('app.timezone');
        $pageTitle = 'Application Information';
        return view('admin.system.info', compact('pageTitle', 'laravelVersion', 'timeZone'));
    }

    public function optimize()
    {
        $pageTitle = 'Clear System Cache';
        return view('admin.system.optimize', compact('pageTitle'));
    }

    public function optimizeClear()
    {
        Artisan::call('optimize:clear');
        $notify[] = ['success', 'Cache cleared successfully'];
        return back()->withNotify($notify);
    }

    public function systemServerInfo()
    {
        $currentPHP = phpversion();
        $pageTitle = 'Server Information';
        $serverDetails = $_SERVER;
        return view('admin.system.server', compact('pageTitle', 'currentPHP', 'serverDetails'));
    }

    public function systemUpdate()
    {
        $pageTitle = 'System Updates';
        return view('admin.system.update', compact('pageTitle'));
    }

    public function systemUpdateProcess()
    {
        if (gs('system_customized')) {
            return response()->json([
                'status' => 'error',
                'message' => [
                    'The system already customized. You can\'t update the project'
                ]
            ]);
        }

        if (version_compare(systemDetails()['version'], gs('available_version'), '==')) {
            return response()->json([
                'status' => 'info',
                'message' => [
                    'The system is currently up to date'
                ]
            ]);
        }

        if (!extension_loaded('zip')) {
            return response()->json([
                'status' => 'error',
                'message' => [
                    'Zip Extension is required to update the system'
                ]
            ]);
        }

        $purchasecode = env('PURCHASECODE');
        if (!$purchasecode) {
            return response()->json([
                'status' => 'error',
                'message' => [
                    'Invalid request. Please contact with support'
                ]
            ]);
        }

        $website = @$_SERVER['HTTP_HOST'] . @$_SERVER['REQUEST_URI'] . ' - ' . env("APP_URL");

        $response = CurlRequest::curlPostContent(VugiChugi::upman(), [
            'purchasecode' => $purchasecode,
            'product' => systemDetails()['name'],
            'version' => systemDetails()['version'],
            'website' => $website,
        ]);

        $response = json_decode($response);
        if ($response->status == 'error') {
            return response()->json([
                'status' => 'error',
                'message' => $response->message->error
            ]);
        }

        if ($response->remark == 'already_updated') {
            return response()->json([
                'status' => 'info',
                'message' => $response->message->success
            ]);
        }

        $directory = 'core/temp/';
        $files = [];
        foreach ($response->data->files as $key => $fileUrl) {

            $opts = [
                "http" => [
                    "method" => "GET",
                    "header" => "Purchase-Code: $purchasecode"
                ]
            ];

            $context = stream_context_create($opts);
            $fileContent = file_get_contents($fileUrl, false, $context);

            if (@json_decode($fileContent)->status == 'error') {
                return response()->json([
                    'status' => 'error',
                    'message' => @json_decode($fileContent)->message->error
                ]);
            }
            file_put_contents($directory . $key . '.zip', $fileContent);
            $files[$key] = $fileContent;
        }

        $fileNames = array_keys($files);
        foreach ($fileNames as $fileName) {
            $rand    = Str::random(10);
            $dir     = base_path('temp/' . $rand);
            $extract = $this->extractZip(base_path('temp/' . $fileName . '.zip'), $dir);

            if ($extract == false) {
                $this->removeDir($dir);
                return response()->json([
                    'status' => 'error',
                    'message' => ['Something went wrong while extracting the update']
                ]);
            }

            if (!file_exists($dir . '/config.json')) {
                $this->removeDir($dir);
                return response()->json([
                    'status' => 'error',
                    'message' => ['Config file not found']
                ]);
            }

            $getConfig = file_get_contents($dir . '/config.json');
            $config    = json_decode($getConfig);

            $this->removeFile($directory . '/' . $fileName . '.zip');

            $mainFile = $dir . '/update.zip';
            if (!file_exists($mainFile)) {
                $this->removeDir($dir);
                return response()->json([
                    'status' => 'error',
                    'message' => ['Something went wrong while patching the update']
                ]);
            }

            //move file
            $extract = $this->extractZip(base_path('temp/' . $rand . '/update.zip'), base_path('../'));
            if ($extract == false) {
                return response()->json([
                    'status' => 'error',
                    'message' => ['Something went wrong while extracting the update']
                ]);
            }

            //Execute database
            if (file_exists($dir . '/update.sql')) {
                $sql = file_get_contents($dir . '/update.sql');
                DB::unprepared($sql);
            }

            $updateLog = new UpdateLog();
            $updateLog->version = $config->version;
            $updateLog->update_log = $config->changes;
            $updateLog->save();

            $this->removeDir($dir);
        }
        Artisan::call('optimize:clear');
        return response()->json([
            'status' => 'success',
            'message' => ['System updated successfully']
        ]);
    }

    public function systemUpdateLog()
    {
        $pageTitle = 'System Update Log';
        $updates = UpdateLog::orderBy('id', 'desc')->paginate(getPaginate());
        return view('admin.system.update_log', compact('pageTitle', 'updates'));
    }

    protected function extractZip($file, $extractTo)
    {
        $zip = new \ZipArchive;
        $res = $zip->open($file);
        if ($res != true) {
            return false;
        }

        for ($i = 0; $i < $zip->numFiles; $i++) {
            if ($zip->getNameIndex($i) != '/' && $zip->getNameIndex($i) != '__MACOSX/_') {
                $zip->extractTo($extractTo, array($zip->getNameIndex($i)));
            }
        }

        $zip->close();
        return true;
    }

    protected function removeFile($path)
    {
        $fileManager = new FileManager();
        $fileManager->removeFile($path);
    }

    protected function removeDir($location)
    {
        $fileManager = new FileManager();
        $fileManager->removeDirectory($location);
    }
}