protected function systemConfigurationChecker()
    {
        $response = [];
        $data = [];
        $errors = [];
        $dataExt = [];
        $dataVar = [];
        $checkDataExt = 0;
        $success = 0;

        $translator = $this->getServiceLocator()->get('translator');
        $installHelper = $this->getServiceLocator()->get('InstallerHelper');

        $installHelper->setRequiredExtensions([
            'openssl',
            'json',
            'pdo_mysql',
            'intl',
        ]);


        foreach ($installHelper->getRequiredExtensions() as $ext) {
            if (in_array($ext, $installHelper->getPhpExtensions())) {
                $dataExt[$ext] = $installHelper->isExtensionsExists($ext);
            } else {
                $dataExt[$ext] = sprintf($translator->translate('tr_melis_installer_step_1_0_extension_not_loaded'), $ext);
            }

        }

        $dataVar = $installHelper->checkEnvironmentVariables();

        // checks if all PHP configuration is fine
        if (!empty($dataExt)) {
            foreach ($dataExt as $ext => $status) {
                if ((int) $status === 1) {
                    $checkDataExt = 1;
                } else {
                    $checkDataExt = 0;
                }
            }
        }

        if (!empty($dataVar)) {
            foreach ($dataVar as $var => $value) {
                $currentVal = trim($value);
                if (is_null($currentVal)) {
                    $dataVar[$var] = sprintf($translator->translate('tr_melis_installer_step_1_0_php_variable_not_set'), $var);
                    array_push($errors, sprintf($translator->translate('tr_melis_installer_step_1_0_php_variable_not_set'), $var));
                } elseif ($currentVal || $currentVal == '0' || $currentVal == '-1') {
                    $dataVar[$var] = 1;
                }
            }
        } else {
            array_push($errors, $translator->translate('tr_melis_installer_step_1_0_php_requied_variables_empty'));
        }

        // last checking
        if (empty($errors) && $checkDataExt === 1) {
            $success = 1;
        }

        $response = [
            'success' => $success,
            'errors' => $errors,
            'data' => [
                'extensions' => $dataExt,
                'variables' => $dataVar,
            ],

        ];

        return $response;
    }