Hacked By AnonymousFox
<?php
function get_php_version($cpanel, $domain) {
try {
$phpVerResp = $cpanel->uapi(
'PHPSelector', 'get_php_version_for_domain',
array(
'domain' => $domain,
)
);
return $phpVerResp["cpanelresult"]["result"]["data"]["version"];
} catch (Exception $e) {
$err = $e->getMessage();
error_log("SOFTACULOUS can\'t get PHP version for domain: $domain - $err");
}
}
function get_available_php_versions($cpanel) {
try {
$resp = $cpanel->uapi(
'PHPSelector', 'list_php_versions',
);
$resp_parsed = print_r( $resp, true );
return $resp["cpanelresult"]["result"]["data"]["versions"];
} catch (Exception $e) {
$err = $e->getMessage();
error_log("SOFTACULOUS can't get php versions, live api error: $err");
}
return [];
}
function set_php_version($cpanel, $domain, $ver) {
try {
$phpVerResp = $cpanel->uapi(
'PHPSelector', 'set_php_version_for_domain',
array(
'domain' => $domain,
"php" => $ver,
)
);
return $phpVerResp["cpanelresult"]["result"]["data"]["version"];
} catch (Exception $e) {
$err = $e->getMessage();
error_log("SOFTACULOUS can't set php version $ver for domain $domain, live api error: $err");
}
}
function get_extensions($cpanel, $domain, $ver) {
try {
$phpVerResp = $cpanel->uapi(
'PHPSelector', 'get_php_extensions_for_domain',
array(
'domain' => $domain,
"php" => $ver,
)
);
return $phpVerResp["cpanelresult"]["result"]["data"];
} catch (Exception $e) {
$err = $e->getMessage();
error_log("SOFTACULOUS error api: $err");
}
return [];
}
function resolve_domain($cpanel, $proxy_domain) {
try {
$res = $cpanel->uapi(
'DomainInfo', 'domains_data',
array(
'format' => "list",
)
);
foreach ($res["cpanelresult"]["result"]["data"] as $domain) {
if ($domain["domain"] == $proxy_domain) {
return $domain["servername"];
}
}
} catch (Exception $e) {
$err = $e->getMessage();
error_log("SOFTACULOUS error api: $err");
}
return $proxy_domain;
}
function normalise_php_version($version) {
$splited = explode(".", $version, 3);
if (count($splited) == 3) {
array_pop($splited);
}
return implode(".", $splited);
}
function get_php_version_mapping() {
$php_map = [];
@exec("/usr/bin/selectorctl --list --json", $raw, $ret);
$json_data = json_decode($raw[0], true);
foreach($json_data['data'] as $php) {
$php_map[$php["short"]] = $php["full"];
}
return $php_map;
}
function resolve_full_php_version($version, $mapping) {
return $mapping[$version];
}
function HOOK_PHP_VERSION_SWITCH($domain_alias) {
global $cpanel, $soft, $scripts, $softpanel, $error, $__hooks;
$domain = resolve_domain($cpanel, $domain_alias);
$current_php = get_php_version($cpanel, $domain);
$php_mapping = get_php_version_mapping();
$current_php_full = resolve_full_php_version($current_php, $php_mapping);
$cms_php_min = $scripts[$soft]['php_min'];
$cms_php_max = $scripts[$soft]['php_max'];
$fit_min_php = 1;
$fit_max_php = 1;
if(!empty($cms_php_min)){
$fit_min_php = sversion_compare($current_php_full, $cms_php_min, '>=');
}
if(!empty($cms_php_max)){
$fit_max_php = sversion_compare($current_php_full, $cms_php_max, '<=');
}
if(!$fit_min_php || !$fit_max_php){
if(!empty($cms_php_min)){
$fit_min_php = 0;
}
if(!empty($cms_php_max)){
$fit_max_php = 0;
}
$available_php_versions = get_available_php_versions($cpanel);
rsort($available_php_versions);
foreach($available_php_versions as $ver){
$ver_full = resolve_full_php_version($ver, $php_mapping);
if(!$fit_min_php) {
$fit_min_php = sversion_compare($ver_full, $cms_php_min, '>=');
}
if(!$fit_max_php) {
$fit_max_php = sversion_compare($ver_full, $cms_php_max, '<=');
}
// error_log("Check ver: $ver_full max: $cms_php_max, min: $cms_php_min, fit: ($fit_max_php,$fit_min_php)"); // Left for debug
if($fit_min_php && $fit_max_php){
// Ask for a confirmation
if(!checkbox('php_version_select')){
$error[] = 'Current PHP version is '.$current_php_full.', unfortunately it does not fit CMS requirements <br />
<input type="checkbox" name="php_version_select" '.POSTChecked('php_version_select').' />
Do you wish to enable PHP '.$ver_full.' ? (Might cause issues with your existing installations).';
}else{
$current_php = set_php_version($cpanel, $domain, $ver);
$current_php_full = resolve_full_php_version($current_php, $php_mapping);
}
break;
}
}
}
$extensions = get_extensions($cpanel, $domain, $current_php);
foreach ($extensions as $ext_name=>$ext_data){
if ($ext_data["state"] != "disabled") {
$__hooks['loaded_extension'][] = $ext_name;
}
}
if(in_array('nd_mysqli', $extensions)){
$__hooks['loaded_extension'][] = 'mysqli';
}
if(in_array('nd_mysql', $extensions)){
$__hooks['loaded_extension'][] = 'mysql';
}
if(in_array('nd_pdo_mysql', $extensions)){
$__hooks['loaded_extension'][] = 'pdo_mysql';
}
define('PHP_EXT_EXHAUSTIVE', 1);
define('php_version', $current_php_full);
}
?>
Hacked By AnonymousFox1.0, Coded By AnonymousFox