/home/kueuepay/public_html/resources/installer/src/Helpers/RequirementHelper.php
<?php 

namespace Project\Installer\Helpers;

use Exception;

class RequirementHelper {

    public $error_helper;
    public $config;
    public $requirements;
    public $requirements_status;

    public function __construct(ErrorHelper $error_helper, ConfigHelper $config)
    {
        $this->error_helper = $error_helper;
        // $this->config = $this->getConfig();
        $this->config = $config->get();
        $this->requirements = $this->config['requirements'] ?? [];
    }

    public function getRequirementStatus() {
        $php_requirements       = $this->handlePHPRequirements();
        $server_requirements    = $this->handleServerRequirements();

        $requirements_status = [
            'php'   => $php_requirements,
            'server'    => $server_requirements,
        ];

        $this->requirements_status = $requirements_status;

        // Set Step Session
        $this->setStepSession();

        return $requirements_status;
    }

    public function setStepSession() {

        $requirements_status = $this->requirements_status;

        $version_status = [data_get($requirements_status,'php.version.status')];
        $extensions_status = data_get($requirements_status,'php.extensions.*.status');
        $server_modules_status = data_get($requirements_status,'server.*.status');

        $all_status = array_merge($version_status,$extensions_status,$server_modules_status);

        if(in_array(false,$all_status)) { // If one false value is available
            session()->put('requirement',false);
        }else {
            session()->put('requirement',"PASSED");
        }
    }

    public static function step() {
        return session('requirement');
    }

    public function handleServerRequirements() {

        $server_software_info_array = explode(" ",$_SERVER['SERVER_SOFTWARE']);
        $software_info = array_shift($server_software_info_array);

        $software_info_array = explode("/",$software_info);

        $software_name = array_shift($software_info_array);
        $software_version = array_pop($software_info_array);

        $server_requirement_status = [];
        if(strtolower($software_name) == 'apache') {
            // Need to check apache server requirements
            $server_requirement_status = $this->checkApacheRequirements();
        }

        return $server_requirement_status;
    }


    public function checkApacheRequirements() {
        $apache_requirements = $this->requirements['apache'] ?? [];

        $apache_requirement_status = [];
        if(function_exists("apache_get_modules")) {
            foreach($apache_requirements as $key => $item) {
                $apache_requirement_status[$key] = [
                    'name'      => $item,
                    'status'    => false,
                    'message'   => "",
                ];
    
                if(in_array($item,apache_get_modules())) {
                    $apache_requirement_status[$key]['status'] = true;
                }else {
                    $apache_requirement_status[$key]['message'] = "Module " . $item . " is required!";
                }
            }
        }

        return $apache_requirement_status;
    }

    public function handlePHPRequirements() {
        $php_requirements = $this->requirements['php'] ?? [];
        if(count($php_requirements) == 0 || !isset($php_requirements['min_version']) || !isset($php_requirements['extensions'])) {
            throw new Exception('Invalid Server Requirement Configuration File');
        }

        $php_version_status = $this->checkPHPVersion($php_requirements['min_version']);
        $php_extension_status = $this->checkPHPExtensions($php_requirements['extensions']);

        return [
            'version'       => $php_version_status,
            'extensions'    => $php_extension_status,
        ];
    }

    public function checkPHPVersion(string $require_version) {

        $data = [
            'status'        => false,
            'server_v'      => phpversion(),
            'requirement_v' => $require_version,
            'message'       => "",
        ];

        if($data['server_v'] >= $data['requirement_v']) {
            $data['status']  = true;
        }else {
            $data['message'] = "Server PHP version must not be less then ". $require_version;
        }

        return $data;
    }

    public function checkPHPExtensions(array $require_extensions) {

        $extensions_status = [];
        foreach($require_extensions as $key => $item) {

            $extensions_status[$key] = [
                'name'      => $item,
                'status'    => false,
                'message'   => "",
            ];

            if(extension_loaded($item)) {
                $extensions_status[$key]['status'] = true;
            }else {
                $extensions_status[$key]['message'] = "Extension " . $item . " is required!";
            }

        }
        return $extensions_status;
    }

    public function requirementConfigIsInvalid() {
        $requirements = $this->requirements['requirements'] ?? null;
        if(!is_array($requirements)) return false;
        return true;
    }
}
User Registration
top