コード例 #1
0
$app->post("/update", function () use($app) {
    if (!$app->authed()) {
        $app->makeError("Access denied");
        return;
    }
    $body = $app->request()->getBody();
    $qres = mysql_query("SELECT s.* FROM `tblservers` s WHERE s.`type` = 'cpanel' and s.`disabled` = 0;");
    if ($qres === FALSE) {
        $app->makeError("Unable to get list of cPanel servers");
        return;
    }
    $servers = array();
    while (($row = mysql_fetch_assoc($qres)) !== FALSE) {
        $servers[] = array("id" => intval($row["id"]), "name" => $row["name"], "hostname" => $row["hostname"], "username" => $row["username"], "accesshash" => $row["accesshash"]);
    }
    $plan = $body["plan"];
    $changes = array();
    // Update each WHM package
    foreach ($servers as $server) {
        $cpanel = new \Gufy\CpanelPhp\Cpanel(array("host" => "https://" . $server["hostname"] . ":2087", "username" => $server["username"], "password" => $server["accesshash"], "auth_type" => "hash"));
        $package = $cpanel->getpkginfo(array("pkg" => $plan["name"], "api.version" => 1));
        if ($package["metadata"]["result"] !== 1) {
            continue;
        }
        $package = $package["data"]["pkg"];
        $edits = array();
        if ($plan["limits"]["overage"] == 1) {
            if ($package["BWLIMIT"]) {
                $edits["bwlimit"] = "unlimited";
            }
            if ($package["QUOTA"]) {
                $edits["quota"] = "unlimited";
            }
        } else {
            if ($package["BWLIMIT"] != $plan["limits"]["bandwidth"]) {
                $edits["bwlimit"] = $plan["limits"]["bandwidth"];
            }
            if ($package["QUOTA"] != $plan["limits"]["disk"]) {
                $edits["quota"] = $plan["limits"]["disk"];
            }
        }
        if (count($edits) > 0) {
            $keys = array_keys($edits);
            $edits["name"] = $plan["name"];
            $edits["api.version"] = 1;
            $result = $cpanel->editpkg($edits);
            if ($result["metadata"]["result"] !== 1) {
                $app->makeError($result);
                continue;
            }
            $changes[] = $plan["name"] . " on " . $server["hostname"] . " updated: " . implode(",", $keys);
        }
    }
    // Update WHMCS
    $uPlanId = intval($plan["id"]);
    $uDisk = intval($plan["limits"]["disk"]);
    $uBw = intval($plan["limits"]["bandwidth"]);
    $uDesc = mysql_real_escape_string($plan["description"]);
    $uOverages = $plan["limits"]["overage"] == 1 ? "1,MB,MB" : "";
    $update = mysql_query("UPDATE tblproducts SET configoption3 = '{$uDisk}', configoption5 = '{$uBw}', description = '{$uDesc}', overagesenabled = '{$uOverages}', overagesdisklimit = {$uDisk}, overagesbwlimit = {$uBw} WHERE id = {$uPlanId}");
    if ($update === FALSE) {
        $changes[] = "*** WARNING: Changes could not be synced to WHMCS - please resolve this manually! ***";
        $changes[] = mysql_error();
    }
    echo json_encode($changes);
});