HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux vmi3050980 6.8.0-90-generic #91-Ubuntu SMP PREEMPT_DYNAMIC Tue Nov 18 14:14:30 UTC 2025 x86_64
User: gurumedia_st_usr (1012)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: /var/www/gurumedia_st_usr/data/www/gurumedia.store/frd-api/frd-mixd/frdapi-SoftUp.php
<?php
/*
Soft Up
Version: 2
*/
// Always return JSON
header('Content-Type: application/json; charset=utf-8');

http_response_code(200);

// ---- Method & Content-Type handling ----
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';
if ($method !== 'POST') {
    http_response_code(405);
    echo json_encode(['FRA' => 2, 'FRM' => 'Only POST allowed']);
    exit;
}

$rawContentType = $_SERVER['CONTENT_TYPE'] ?? '';
$ct = strtolower(trim(explode(';', $rawContentType)[0]));

// Accept JSON primarily; tolerate form-encoded as fallback
$input = [];
if ($ct === 'application/json') {
    $raw = file_get_contents('php://input');
    try {
        $input = json_decode($raw, true, 512, JSON_THROW_ON_ERROR);
    } catch (Throwable $e) {
        http_response_code(400);
        echo json_encode(['FRA' => 2, 'FRM' => 'Invalid JSON: '.$e->getMessage()]);
        exit;
    }
} elseif ($ct === 'application/x-www-form-urlencoded' || $ct === 'multipart/form-data') {
    // Fallback: accept standard form submit
    $input = $_POST;
} else {
    // If no/unknown content-type but body exists, try JSON; else 415
    $raw = file_get_contents('php://input');
    if (strlen($raw ?? '') > 0) {
        $try = json_decode($raw, true);
        if (json_last_error() === JSON_ERROR_NONE) {
            $input = $try;
        } else {
            http_response_code(415);
            echo json_encode(['FRA' => 2, 'FRM' => 'Unsupported Media Type. Send application/json or application/x-www-form-urlencoded']);
            exit;
        }
    } else {
        http_response_code(415);
        echo json_encode(['FRA' => 2, 'FRM' => 'Unsupported Media Type (empty body)']);
        exit;
    }
}

// ---- Pull expected fields with defaults ----
$FR_U = $input['FR_U'] ?? '0';
$FR_P = $input['FR_P'] ?? '0';
$FRd_LATEST_R_VERSION = isset($input['FRd_LATEST_R_VERSION']) ? (int)$input['FRd_LATEST_R_VERSION'] : null;

// Your environment variables / constants must exist:
$FR_SOFT_VERSION = $FR_SOFT_VERSION ?? 0;
$FR_PATH_HD      = rtrim($FR_PATH_HD ?? __DIR__.'/../../', '/').'/';
$FRD_HURL        = $FRD_HURL ?? ($_SERVER['HTTP_HOST'] ?? '');

// ---- Output scaffold ----
$FR_OUTPUT = [];
$FRc_FRA = 2; // default: not updated
$FRc_RuningVersion = $FR_SOFT_VERSION;
$FRc_Message = "";
$FRc_MMessage_TABLEUPDATE = "";

// ---- Short-circuit if already latest ----
$FR_VC_LATEST_R_VERSION = "NO";
if ($FRd_LATEST_R_VERSION !== null && $FRd_LATEST_R_VERSION == $FR_SOFT_VERSION) {
    $FR_VC_LATEST_R_VERSION = "YES";
    $FRc_FRA = 2;
    $FRc_Message .= "LATEST VERSION $FR_SOFT_VERSION RUNNING ON $FRD_HURL";
}

// ---- If not latest, continue update chain ----
$FRc_NEXT_VALID_UPDATE_VERSION = $FR_SOFT_VERSION + 1;
$FR_VC_ZIP_FILE_EXIST = 0;
$FR_VC_ZIP_FILE_DOWNLOAD = 0;
$FR_VC_FILE_VERSION = 0;
$FR_VC_ZIP_FILE_EXTRACT = 0;
$FR_VC_TABLE_UPDATE = 0;

if ($FR_VC_LATEST_R_VERSION === "NO") {
    // Remote file
    $remoteZipFileURL = "https://spiderecommerce.com/ahost/released-version/V-3-$FRc_NEXT_VALID_UPDATE_VERSION-SPIDER_ECOMMERCE.zip";
    $localZipFile = $FR_PATH_HD."V-3-$FRc_NEXT_VALID_UPDATE_VERSION-SPIDER_ECOMMERCE.zip";

    // HEAD check
    $ch = curl_init($remoteZipFileURL);
    curl_setopt_array($ch, [
        CURLOPT_NOBODY => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
    ]);
    curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);

    if (($info['http_code'] ?? 0) == 200) {
        $ctype = strtolower($info['content_type'] ?? '');
        // Some servers return different zip MIME types; be lenient
        if (strpos($ctype, 'zip') !== false || $ctype === '' /* some hosts omit */) {
            $FR_VC_ZIP_FILE_EXIST = 1;
            $FRc_Message .= "Remote ZIP file exists and can be downloaded \n";
        } else {
            $FRc_Message .= " + Error: Remote ZIP not reported as zip (content-type=$ctype) \n";
            $FRc_Message .= " + Error: RUNNING VERSION $FR_SOFT_VERSION \n";
        }
    } else {
        $FRc_Message .= " + Error: Remote ZIP file not exists (HTTP ".($info['http_code'] ?? 'NA').") \n";
        $FRc_Message .= " + Error: RUNNING VERSION $FR_SOFT_VERSION \n";
    }

    // Download
    if ($FR_VC_ZIP_FILE_EXIST === 1) {
        $zipContents = @file_get_contents($remoteZipFileURL);
        if ($zipContents === false) {
            $FRc_Message .= " + ERROR: Failed to download remote file \n";
        } else {
            if (@file_put_contents($localZipFile, $zipContents) !== false) {
                $FR_VC_ZIP_FILE_DOWNLOAD = 1;
                $FRc_Message .= " + Zip File downloaded and saved successfully. \n";
            } else {
                $FRc_Message .= " + ERROR: Zip File save failed. \n";
            }
        }
    }

    // Version validation
    if ($FR_VC_ZIP_FILE_DOWNLOAD === 1) {
        if (file_exists($localZipFile)) {
            $fileName = basename($localZipFile);
            $ARR = explode("-", $fileName);
            $FRc_File_Version = $ARR[2] ?? '';
            if ((string)$FRc_File_Version === (string)$FRc_NEXT_VALID_UPDATE_VERSION) {
                $FR_VC_FILE_VERSION = 1;
                $FRc_Message .= " + NEXT VERSION VALID \n";
            } else {
                $FRc_Message .= " + ERROR: NEXT VERSION NOT VALID ($FRc_File_Version) \n";
            }
        } else {
            $FRc_Message .= " + ERROR: ZIP FILE NOT FOUND \n";
        }
    }

    // Unzip
    if ($FR_VC_FILE_VERSION === 1) {
        $unzip = new ZipArchive();
        $out = $unzip->open($localZipFile);
        if ($out === TRUE) {
            $unzip->extractTo($FR_PATH_HD);
            $unzip->close();
            $FR_VC_ZIP_FILE_EXTRACT = 1;
            $FRc_Message .= " + ZIP FILE EXTRACT COMPLETED \n";
        } else {
            $FRc_Message .= " + ERROR: ZIP FILE EXTRACT FAILED \n";
        }
    }

    // Table update
    if ($FR_VC_ZIP_FILE_EXTRACT === 1) {
        $alterFile = $FR_PATH_HD."frd-src/frd-alter-table.php";
        if (file_exists($alterFile)) {
            require_once $alterFile;
            $FR_VC_TABLE_UPDATE = 1;
            $FRc_Message .= " + TABLE UPDATE COMPLETED \n";
        } else {
            $FRc_Message .= " + ERROR: TABLE UPDATE FAILED \n";
        }
    }

    // Cleanup (paths normalized)
    if ($FR_VC_TABLE_UPDATE === 1) {
        $alterFile = $FR_PATH_HD."frd-src/frd-alter-table.php";
        if (file_exists($alterFile)) {
            @unlink($alterFile);
            if (!file_exists($alterFile)) {
                $FRc_Message .= " + TABLE UPDATE FILE DELETE COMPLETED \n";
            }
        } else {
            $FRc_Message .= " + ERROR: TABLE UPDATE FILE NOT EXIST \n";
        }

        if (file_exists($localZipFile)) {
            @unlink($localZipFile);
            if (!file_exists($localZipFile)) {
                $FRc_Message .= " + ZIP FILE DELETE COMPLETED \n";
            }
        } else {
            $FRc_Message .= " + ERROR: ZIP FILE NOT EXIST FOR DELETE \n";
        }

        // (Your FRF_DeleteFolder and unlink calls kept as-is; ensure functions and flags exist)
        if (function_exists('FRF_DeleteFolder')) {
            if (($frsc_sells_reports ?? 1) == 0) { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-sr"); }
            if (($frsc_sells_reports ?? 1) == 0) { FRF_DeleteFolder($FR_PATH_HD."frd-api/frd-sr"); }
            if (($frsc_profit_reports ?? 1) == 0){ FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-pal");}
            if (($frsc_profit_reports ?? 1) == 0){ FRF_DeleteFolder($FR_PATH_HD."frd-api/frd-pal"); }
            if (($frsc_ppr_panel ?? 1) == 0)    { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-ppr"); }
            if (($frsc_ppr_panel ?? 1) == 0)    { FRF_DeleteFolder($FR_PATH_HD."frd-api/frd-ppr"); }
            if (($frsc_usr_m_panel ?? 1) == 0)  { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-usr"); }
            if (($frsc_cust_m_panel ?? 1) == 0) { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-crm"); }
            if (($frplug_RatingRev ?? 1) == 0)  { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-rr"); }
            if (($frplug_SMSs ?? 1) == 0)       { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-smss");}
            if (($frplug_SMSs ?? 1) == 0)       { FRF_DeleteFolder($FR_PATH_HD."frd-api/frd-sms"); }
            if (($frplug_sms_m_osb ?? 1) == 0)  { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-smsMosb"); }
            if (($frplug_SFC_OSAU ?? 1) == 0)   { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-SFCosau"); }
            if (($frsc_fb_feed_xml ?? 1) == 0)  { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-fbcat"); }
            if (($frplug_suppliers ?? 1) == 0)  { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-supp"); }
            if (($frplug_cost ?? 1) == 0)       { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-cost"); }
            if (($frplug_ac_m ?? 1) == 0)       { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-acc"); }
            if (($frplug_inv_m ?? 1) == 0)      { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-inv");}
            if (($frplug_due_m ?? 1) == 0)      { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-due");}
            if (($frplug_sitedata ?? 1) == 0)   { FRF_DeleteFolder($FR_PATH_HD."frdsp/dp/page/frd-p-sitedata");}
            if (($frplug_sitedata ?? 1) == 0)   { FRF_DeleteFolder($FR_PATH_HD."frd-api/frd-sitedata");}
        }
        if (($frplug_api_steadfast ?? 1) == 0){ @unlink($FR_PATH_HD."frdsp/dp/page/frd-p-om/frd-BookingApi_SteadFast.php"); }
        if (($frplug_api_pathao ?? 1) == 0)  { @unlink($FR_PATH_HD."frdsp/dp/page/frd-p-om/frd-BookingApi_Pathao.php"); }
        if (($frplug_capi ?? 1) == 0)        { @unlink($FR_PATH_HD."frd-api/frd-mixd/frdapi-IniCAPI.php"); }

        $FRc_FRA = 1;
        $FRc_RuningVersion = $FRc_NEXT_VALID_UPDATE_VERSION;
        $FRc_Message .= " + Dear Boss Your eCommerce Website [$FRD_HURL] Update Completed Version $FRc_NEXT_VALID_UPDATE_VERSION!";
    }
}

// ---- Final response ----
$FR_OUTPUT['FRA']                = $FRc_FRA;
$FR_OUTPUT['FRM']                = $FRc_Message;
$FR_OUTPUT['FRM_ATERTABLE']      = $FRc_MMessage_TABLEUPDATE;
$FR_OUTPUT['FRrd_RunningVersion']= $FRc_RuningVersion;
$FR_OUTPUT['FRrd_BACK']          = $input;

echo json_encode($FR_OUTPUT, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE);