define("CLIENTAREA", true); define("SHOPPING_CART", true); require(__DIR__ . "/init.php"); require(ROOTDIR . "/includes/orderfunctions.php"); require(ROOTDIR . "/includes/domainfunctions.php"); require(ROOTDIR . "/includes/configoptionsfunctions.php"); require(ROOTDIR . "/includes/customfieldfunctions.php"); require(ROOTDIR . "/includes/clientfunctions.php"); require(ROOTDIR . "/includes/invoicefunctions.php"); require(ROOTDIR . "/includes/processinvoices.php"); require(ROOTDIR . "/includes/gatewayfunctions.php"); require(ROOTDIR . "/includes/modulefunctions.php"); require(ROOTDIR . "/includes/ccfunctions.php"); require(ROOTDIR . "/includes/cartfunctions.php"); $nameserverRegexPattern = "/^(?!\\-)(?:[a-zA-Z\\d\\-]{0,62}[a-zA-Z\\d]\\.){2,126}(?!\\d+)[a-zA-Z\\d]{1,63}\$/"; initialiseClientArea(Lang::trans("carttitle"), Lang::trans("carttitle"), "", "", "" . Lang::trans("carttitle") . ""); checkContactPermission("orders"); $orderfrm = new WHMCS\OrderForm(); $orderFormTemplate = WHMCS\View\Template\OrderForm::factory(); $orderFormTemplateName = $orderFormTemplate->getName(); $whmcs = WHMCS\Application::getInstance(); $securityqans = $whmcs->get_req_var("securityqans"); $securityqid = $whmcs->get_req_var("securityqid"); $a = $whmcs->get_req_var("a"); $gid = $whmcs->get_req_var("gid"); $pid = $whmcs->get_req_var("pid"); if( substr($pid, 0, 1) == "b" ) { $bid = (int) substr($pid, 1); redir("a=add&bid=" . $bid); } else { $pid = (int) $pid; } $aid = (int) $whmcs->get_req_var("aid"); $ajax = $whmcs->get_req_var("ajax"); $sld = $whmcs->get_req_var("sld"); $tld = $whmcs->get_req_var("tld"); $domains = $whmcs->get_req_var("domains"); $step = $whmcs->get_req_var("step"); $remote_ip = $whmcs->getRemoteIp(); $cartSession = $orderfrm->getCartData(); $productInfoKey = (int) $whmcs->get_req_var("i"); if( $productInfoKey < 0 ) { $productInfoKey = NULL; } $orderfrmtpl = $whmcs->get_config("OrderFormTemplate"); if( !isValidforPath($orderfrmtpl) ) { exit( "Invalid Order Form Template Name" ); } $orderconf = array( ); $orderfrmconfig = ROOTDIR . "/templates/orderforms/" . $orderfrmtpl . "/config.php"; if( file_exists($orderfrmconfig) ) { include($orderfrmconfig); } if( !$ajax && isset($orderconf["denynonajaxaccess"]) && is_array($orderconf["denynonajaxaccess"]) && in_array($a, $orderconf["denynonajaxaccess"]) ) { redir(); } $orderform = true; $nowrapper = false; $errormessage = $allowcheckout = ""; $userid = (isset($_SESSION["uid"]) ? $_SESSION["uid"] : ""); $currencyid = (isset($_SESSION["currency"]) ? $_SESSION["currency"] : ""); $currency = getCurrency($userid, $currencyid); $smartyvalues["currency"] = $currency; $smartyvalues["ipaddress"] = $remote_ip; $smartyvalues["ajax"] = ($ajax ? true : false); $smartyvalues["inShoppingCart"] = true; $smartyvalues["action"] = $a; $smartyvalues["numitemsincart"] = $orderfrm->getNumItemsInCart(); $smartyvalues["gid"] = ""; $smartyvalues["domain"] = ""; $captcha = clientAreaInitCaptcha(); if( isset($_SESSION["cart"]["lastconfigured"]) ) { bundlesStepCompleteRedirect($_SESSION["cart"]["lastconfigured"]); unset($_SESSION["cart"]["lastconfigured"]); } if( $step == "fraudcheck" ) { $a = "fraudcheck"; } if( $promocode = $whmcs->get_req_var("promocode") ) { SetPromoCode($promocode); } if( $a == "empty" ) { unset($_SESSION["cart"]); redir("a=view"); } if( $a == "startover" ) { unset($_SESSION["cart"]); redir(); } if( $a == "remove" && !is_null($productInfoKey) ) { if( $r == "p" && isset($_SESSION["cart"]["products"][$productInfoKey]) ) { unset($_SESSION["cart"]["products"][$productInfoKey]); $_SESSION["cart"]["products"] = array_values($_SESSION["cart"]["products"]); } else { if( $r == "a" && isset($_SESSION["cart"]["addons"][$productInfoKey]) ) { unset($_SESSION["cart"]["addons"][$productInfoKey]); $_SESSION["cart"]["addons"] = array_values($_SESSION["cart"]["addons"]); } else { if( $r == "d" && isset($_SESSION["cart"]["domains"][$productInfoKey]) ) { unset($_SESSION["cart"]["domains"][$productInfoKey]); $_SESSION["cart"]["domains"] = array_values($_SESSION["cart"]["domains"]); } else { if( $r == "r" && isset($_SESSION["cart"]["renewals"][$productInfoKey]) ) { unset($_SESSION["cart"]["renewals"][$productInfoKey]); } else { if( $r == "u" && isset($_SESSION["cart"]["upgrades"][$productInfoKey]) ) { unset($_SESSION["cart"]["upgrades"][$productInfoKey]); } } } } } redir("a=view"); } if( $a == "applypromo" ) { $promoerrormessage = SetPromoCode($promocode); echo $promoerrormessage; exit(); } if( $a == "validateCaptcha" ) { check_token(); $validate = new WHMCS\Validate(); $validate->validate("captcha", "code", "captchaverifyincorrect"); $response = new WHMCS\Http\JsonResponse(); $error = false; if( $validate->hasErrors() ) { $error = Lang::trans(($captcha == "recaptcha" ? "googleRecaptchaIncorrect" : "captchaverifyincorrect")); WHMCS\Session::set("CaptchaComplete", false); } else { WHMCS\Session::set("CaptchaComplete", true); } $response->setData(array( "error" => $error )); $response->send(); WHMCS\Terminus::getInstance()->doExit(); } if( $a == "checkDomain" ) { check_token(); $domain = App::getFromRequest("domain"); $type = App::getFromRequest("type"); switch( $type ) { case "incart": case "owndomain": case "subdomain": break; default: WHMCS\Session::release(); try { } catch( Exception $e ) { $searchResult = array( "error" => $e->getMessage() ); } if( WHMCS\Config\Setting::getValue("PremiumDomains") ) { $premiumSessionData = array( ); foreach( $searchResult as $key => $domain ) { if( is_object($domain) ) { $domain = $domain->toArray(); } if( $domain["isPremium"] ) { $premiumSessionData[$domain["domainName"]] = array( "markupPrice" => $domain["pricing"], "cost" => $domain["premiumCostPricing"] ); } } if( $premiumSessionData ) { $storedSessionData = WHMCS\Session::get("PremiumDomains"); if( $storedSessionData && is_array($storedSessionData) ) { $premiumSessionData = array_merge($storedSessionData, $premiumSessionData); } WHMCS\Session::setAndRelease("PremiumDomains", $premiumSessionData); } } $response = new WHMCS\Http\JsonResponse(); $response->setData(array( "result" => ($searchResult instanceof WHMCS\Domains\DomainLookup\ResultsList ? $searchResult->toArray() : $searchResult) )); $response->send(); WHMCS\Terminus::getInstance()->doExit(); } if( $captcha && WHMCS\Session::get("CaptchaComplete" !== true) ) { throw new Exception(Lang::trans("googleRecaptchaIncorrect")); } $lookupProvider = WHMCS\Domains\DomainLookup\Provider::factory(); $domain = WHMCS\Input\Sanitize::decode($domain); $domain = (WHMCS\Config\Setting::getValue("AllowIDNDomains") ? mb_strtolower($domain) : strtolower($domain)); $domain = str_replace(array( "'", "+", ",", "|", "!", "\\", "\"", "£", "\$", "%", "&", "/", "(", ")", "=", "?", "^", "*", " ", "°", "§", ";", ":", "_", "<", ">", "]", "[", "@", ")" ), "", $domain); $domain = new WHMCS\Domains\Domain($domain); switch( $type ) { case "spotlight": $spotlightTlds = getSpotlightTlds(); if( 0 < count($spotlightTlds) ) { $searchResult = $lookupProvider->checkAvailability($domain, getSpotlightTlds()); } else { $searchResult = new WHMCS\Domains\DomainLookup\ResultsList(); } break; case "suggestions": $searchResult = $lookupProvider->getSuggestions($domain); break; case "transfer": $tld = $domain->getDotTopLevel(); $searchResult = $lookupProvider->checkAvailability($domain, array( $tld )); break; case "subdomain": case "owndomain": case "incart": try { if( $type == "subdomain" ) { $lookupProvider->checkSubDomain($domain); } else { if( $type == "owndomain" ) { $lookupProvider->checkOwnDomain($domain); } } $productInfo = $orderfrm->setPid($pid); $passedVariables = $_SESSION["cart"]["passedvariables"]; unset($_SESSION["cart"]["passedvariables"]); cartPreventDuplicateProduct($domain->getDomain()); $productArray = array( "pid" => $pid, "domain" => $domain->getDomain(), "billingcycle" => ($passedVariables["billingcycle"] ?: $orderfrm->validateBillingCycle("")), "configoptions" => $passedVariables["configoption"], "customfields" => $passedVariables["customfield"], "addons" => $passedVariables["addons"], "server" => "", "noconfig" => true, "skipConfig" => isset($passedVariables["skipconfig"]) && $passedVariables["skipconfig"] ); if( isset($passedVariables["bnum"]) ) { $productArray["bnum"] = $passedVariables["bnum"]; } if( isset($passedVariables["bitem"]) ) { $productArray["bitem"] = $passedVariables["bitem"]; } $_SESSION["cart"]["newproduct"] = true; $updatedExistingQuantity = false; if( $productInfo["allowqty"] ) { foreach( $_SESSION["cart"]["products"] as &$cart_prod ) { if( $pid == $cart_prod["pid"] ) { if( empty($cart_prod["qty"]) ) { $cart_prod["qty"] = 1; } $cart_prod["qty"]++; if( $productInfo["stockcontrol"] && $productInfo["qty"] < $cart_prod["qty"] ) { $cart_prod["qty"] = $productInfo["qty"]; } $updatedExistingQuantity = true; break; } } } if( !$updatedExistingQuantity ) { $_SESSION["cart"]["products"][] = $productArray; } $newProductIValue = count($_SESSION["cart"]["products"]) - 1; if( isset($passedVariables["skipconfig"]) && $passedVariables["skipconfig"] ) { unset($_SESSION["cart"]["products"][$newProductIValue]["noconfig"]); $_SESSION["cart"]["lastconfigured"] = array( "type" => "product", "i" => $newProductIValue ); } $searchResult[] = array( "status" => true, "num" => $newProductIValue ); } catch( WHMCS\Exception\InvalidDomain $e ) { $searchResult[] = array( "error" => Lang::trans($e->getMessage()) ); } break; default: $tld = $domain->getDotTopLevel(); $tlds = getTLDList(); $preferredTLDNotAvailable = false; if( $tld == "." || !in_array($tld, $tlds) ) { if( $tld != "." ) { $originalTld = $tld; $preferredTLDNotAvailable = true; } $tld = $tlds[0]; } $searchResult = $lookupProvider->checkAvailability($domain, array( $tld ))->toArray(); if( $preferredTLDNotAvailable ) { $searchResult[0]["preferredTLDNotAvailable"] = $preferredTLDNotAvailable; $searchResult[0]["originalUnavailableDomain"] = $searchResult[0]["sld"] . $originalTld; } } } if( $a == "addToCart" ) { check_token(); $domain = App::getFromRequest("domain"); $domain = new WHMCS\Domains\Domain($domain); $whoisCheck = (bool) (int) App::getFromRequest("whois"); $response = new WHMCS\Http\JsonResponse(); if( $whoisCheck ) { $lookupProvider = WHMCS\Domains\DomainLookup\Provider::factory(); $searchResult = $lookupProvider->checkAvailability($domain, array( $domain->getDotTopLevel() )); } if( !$whoisCheck || isset($searchResult) && in_array($searchResult[0]->getStatus(), array( WHMCS\Domains\DomainLookup\SearchResult::STATUS_NOT_REGISTERED, WHMCS\Domains\DomainLookup\SearchResult::STATUS_UNKNOWN )) ) { cartPreventDuplicateDomain($domain->getDomain(false)); $tldPrice = getTLDPriceList($domain->getDotTopLevel()); $domainArray = array( "type" => "register", "domain" => $domain->getDomain(false), "regperiod" => key($tldPrice), "isPremium" => false ); if( !App::getFromRequest("sideorder") ) { $passedVariables = $_SESSION["cart"]["passedvariables"]; unset($_SESSION["cart"]["passedvariables"]); if( isset($passedVariables["bitem"]) ) { $domainArray["bitem"] = $passedVariables["bitem"]; } if( isset($passedVariables["bnum"]) ) { $domainArray["bnum"] = $passedVariables["bnum"]; } } $premiumData = WHMCS\Session::get("PremiumDomains"); if( (bool) (int) WHMCS\Config\Setting::getValue("PremiumDomains") && array_key_exists($domain->getDomain(), $premiumData) ) { $premiumPrice = $premiumData[$domain->getDomain()]; if( array_key_exists("register", $premiumPrice["cost"]) ) { $domainArray["isPremium"] = true; $domainArray["domainpriceoverride"] = $premiumPrice["markupPrice"][1]["register"]; $domainArray["registrarCostPrice"] = $premiumPrice["cost"]["register"]; $domainArray["registrarCurrency"] = $premiumPrice["markupPrice"][1]["currency"]; $domainArray["domainpriceoverride"] = $domainArray["domainpriceoverride"]->toNumeric(); } if( array_key_exists("renew", $premiumPrice["cost"]) ) { $domainArray["domainrenewoverride"] = $premiumPrice["markupPrice"][1]["renew"]; $domainArray["registrarRenewalCostPrice"] = $premiumPrice["cost"]["renew"]; $domainArray["registrarCurrency"] = $premiumPrice["markupPrice"][1]["currency"]; $domainArray["domainrenewoverride"] = $domainArray["domainrenewoverride"]->toNumeric(); } else { $domainArray["isPremium"] = false; } } $_SESSION["cart"]["domains"][] = $domainArray; $cart = new WHMCS\OrderForm(); $response->setData(array( "result" => "added", "period" => key($tldPrice), "cartCount" => $cart->getNumItemsInCart() )); } else { $response->setData(array( "result" => (isset($searchResult) ? $searchResult->offsetGet(0)->getStatus() : "unavailable") )); } $response->send(); WHMCS\Terminus::getInstance()->doExit(); } if( $a == "addDomainTransfer" ) { check_token(); $domain = App::getFromRequest("domain"); $eppCode = App::getFromRequest("epp"); $domain = new WHMCS\Domains\Domain($domain); $searchResult = array( ); try { if( $captcha && WHMCS\Session::get("CaptchaComplete" !== true) ) { throw new Exception(Lang::trans("googleRecaptchaIncorrect")); } if( $CONFIG["AllowDomainsTwice"] && cartCheckIfDomainAlreadyOrdered($domain) ) { throw new Exception(Lang::trans("ordererrordomainalreadyexists")); } $lookupProvider = WHMCS\Domains\DomainLookup\Provider::factory(); if( $domain->getSecondLevel() && $domain->getTopLevel() && $domain->isValidDomainName($domain->getSecondLevel(), $domain->getDotTopLevel()) ) { list($searchResult) = $lookupProvider->checkAvailability($domain, array( $domain->getDotTopLevel() ))->toArray(); if( $searchResult["isRegistered"] ) { $extensionConfig = WHMCS\Database\Capsule::table("tbldomainpricing")->where("extension", "=", $domain->getDotTopLevel())->first(); if( is_null($extensionConfig) ) { throw new Exception(Lang::trans("orderForm.domainExtensionTransferNotSupported")); } $eppCodeRequired = $extensionConfig->eppcode; if( $eppCodeRequired && $eppCode || !$eppCodeRequired ) { $tldPrice = getTLDPriceList($domain->getDotTopLevel(), false, "transfer"); if( !$tldPrice ) { throw new Exception(Lang::trans("orderForm.domainExtensionTransferPricingNotConfigured")); } cartPreventDuplicateDomain($domain->getDomain(false)); $passedVariables = $_SESSION["cart"]["passedvariables"]; unset($_SESSION["cart"]["passedvariables"]); $domainArray = array( "type" => "transfer", "domain" => $domain->getDomain(false), "regperiod" => key($tldPrice), "eppcode" => $eppCode, "isPremium" => false ); if( isset($passedVariables["bitem"]) ) { $domainArray["bitem"] = $passedVariables["bitem"]; } if( isset($passedVariables["bnum"]) ) { $domainArray["bnum"] = $passedVariables["bnum"]; } $premiumData = WHMCS\Session::get("PremiumDomains"); if( (bool) (int) WHMCS\Config\Setting::getValue("PremiumDomains") && array_key_exists($domain->getDomain(), $premiumData) ) { $premiumPrice = $premiumData[$domain->getDomain()]; if( array_key_exists("transfer", $premiumPrice["cost"]) ) { $domainArray["isPremium"] = true; $domainArray["domainpriceoverride"] = $premiumPrice["markupPrice"][1]["transfer"]; $domainArray["registrarCostPrice"] = $premiumPrice["cost"]["transfer"]; $domainArray["registrarCurrency"] = $premiumPrice["markupPrice"][1]["currency"]; $domainArray["domainpriceoverride"] = $domainArray["domainpriceoverride"]->toNumeric(); } if( array_key_exists("renew", $premiumPrice["cost"]) ) { $domainArray["domainrenewoverride"] = $premiumPrice["markupPrice"][1]["renew"]; $domainArray["registrarRenewalCostPrice"] = $premiumPrice["cost"]["renew"]; $domainArray["registrarCurrency"] = $premiumPrice["markupPrice"][1]["currency"]; $domainArray["domainrenewoverride"] = $domainArray["domainrenewoverride"]->toNumeric(); } else { $domainArray["isPremium"] = false; } } $_SESSION["cart"]["domains"][] = $domainArray; $searchResult = "added"; } else { $searchResult["epp"] = ($eppCodeRequired ? true : false); } } else { $searchResult["unavailable"] = Lang::trans("ordererrordomainnotregistered"); } } else { $searchResult["unavailable"] = Lang::trans("ordererrordomaininvalid"); } } catch( Exception $e ) { $searchResult = array( "unavailable" => $e->getMessage() ); } $response = new WHMCS\Http\JsonResponse(); $response->setData(array( "result" => $searchResult )); $response->send(); WHMCS\Terminus::getInstance()->doExit(); } if( $a == "updateDomainPeriod" ) { check_token(); $domain = App::getFromRequest("domain"); $period = App::getFromRequest("period"); foreach( $_SESSION["cart"]["domains"] as $key => $domainItem ) { if( $domainItem["domain"] == $domain ) { $_SESSION["cart"]["domains"][$key]["regperiod"] = $period; break; } } $response = new WHMCS\Http\JsonResponse(); $response->setData(calcCartTotals()); $response->send(); WHMCS\Terminus::getInstance()->doExit(); } if( $a == "removepromo" ) { $_SESSION["cart"]["promo"] = ""; if( $ajax ) { exit(); } redir("a=view"); } if( $a == "setstateandcountry" ) { $_SESSION["cart"]["user"]["state"] = $state; $_SESSION["cart"]["user"]["country"] = $country; redir("a=view"); } if( $a == "addUpSell" ) { check_token(); $modalLoad = App::getFromRequest("select_modal"); $productKey = App::getFromRequest("product_key"); $returnData = array( ); $cartSession = WHMCS\Session::get("cart"); static $addonMap = NULL; if( !is_array($addonMap) ) { $addonMap = array( ); } if( !array_key_exists($productKey, $addonMap) ) { $addonsCollection = WHMCS\Product\Addon::whereHas("moduleConfiguration", function($query) use ($productKey) { $query->where("setting_name", "=", "configoption1")->where("value", "=", $productKey); } )->with("moduleConfiguration")->get(); foreach( $addonsCollection as $addon ) { if( !count($addon->moduleConfiguration) ) { continue; } $addonMap[$productKey] = $addon->id; break; } } if( $modalLoad ) { $productOptions = ""; foreach( $cartSession["products"] as $infoKey => $product ) { if( !in_array($addonMap[$productKey], $product["addons"]) ) { $productOptions .= "\r\n"; } } $formToken = generate_token(); $returnData["body"] = "
\n " . $formToken . "\n \n \n

Please select the product you would like to add this add-on to:

\n

\n
\n"; } else { $cartProducts = $cartSession["products"]; foreach( $cartProducts as $key => $data ) { if( in_array($addonMap[$productKey], $data["addons"]) ) { unset($cartProducts[$key]); } } if( 1 < count($cartProducts) && !App::isInRequest("item") ) { $returnData["modal"] = "cart.php?select_modal=true&a=addUpSell&product_key=" . $productKey . generate_token("link"); $returnData["modalTitle"] = Lang::trans("cartproductselection"); $returnData["modalSubmit"] = Lang::trans("orderForm.add"); $returnData["modelSubmitId"] = "btnAddUpSell"; } else { reset($cartProducts); $productItemKey = key($cartProducts); if( App::isInRequest("item") ) { $productItemKey = App::getFromRequest("item"); $returnData["dismiss"] = true; } $marketConnectCart = new WHMCS\MarketConnect\Promotion\Helper\Cart(); if( isset($cartSession["products"][$productItemKey]) && !in_array($addonMap[$productKey], $cartSession["products"][$productItemKey]["addons"]) ) { $toAdd = true; foreach( $cartSession["products"][$productItemKey]["addons"] as &$addonId ) { if( $marketConnectCart->isUpSellForAddon($addonId, $addonMap[$productKey]) ) { $addonId = $addonMap[$productKey]; $toAdd = false; } } if( $toAdd ) { $cartSession["products"][$productItemKey]["addons"][] = $addonMap[$productKey]; } WHMCS\Session::set("cart", $cartSession); } $returnData["done"] = true; } } $response = new WHMCS\Http\JsonResponse(); $response->setData($returnData); $response->send(); WHMCS\Terminus::getInstance()->doExit(); } if( (!$a || $a == "add" && $pid) && ($sld && $tld && !is_array($sld) || is_array($domains)) ) { if( is_array($domains) ) { $tempdomain = $domains[0]; $tempdomain = explode(".", $tempdomain, 2); $sld = $tempdomain[0]; $tld = "." . $tempdomain[1]; } $_SESSION["cartdomain"]["sld"] = $sld; $_SESSION["cartdomain"]["tld"] = $tld; } $productgroups = $orderfrm->getProductGroups(); $smarty->assign("productgroups", $productgroups); $smartyvalues["registerdomainenabled"] = (bool) WHMCS\Config\Setting::getValue("AllowRegister"); $smartyvalues["transferdomainenabled"] = (bool) WHMCS\Config\Setting::getValue("AllowTransfer"); $smartyvalues["renewalsenabled"] = (bool) WHMCS\Config\Setting::getValue("EnableDomainRenewalOrders"); if( !$a ) { if( $gid == "domains" ) { redir("a=add&domain=register"); } else { if( $gid == "registerdomain" ) { redir("a=add&domain=register"); } else { if( $gid == "transferdomain" ) { redir("a=add&domain=transfer"); } else { if( $gid == "viewcart" ) { redir("a=view"); } else { if( $gid == "addons" ) { if( !$_SESSION["uid"] ) { $orderform = false; include("login.php"); } $smartyvalues["gid"] = "addons"; $templatefile = "addons"; $where = array( ); $where["userid"] = $_SESSION["uid"]; $where["domainstatus"] = "Active"; if( $pid ) { $where["tblhosting.id"] = $pid; } $productids = array( ); $result = select_query("tblhosting", "tblhosting.id,billingcycle,domain,packageid,tblproducts.name as product_name", $where, "", "", "", "tblproducts ON tblproducts.id=tblhosting.packageid"); while( $data = mysql_fetch_array($result) ) { $productstoids[$data["packageid"]][] = array( "id" => $data["id"], "product" => WHMCS\Product\Product::getProductName($data["packageid"], $data["product_name"]), "domain" => $data["domain"] ); if( !in_array($data["packageid"], $productids) ) { $productids[] = $data["packageid"]; } } $addonids = array( ); $result = select_query("tbladdons", "id,packages", ""); while( $data = mysql_fetch_array($result) ) { $id = $data["id"]; $packages = $data["packages"]; $packages = explode(",", $packages); foreach( $productids as $productid ) { if( in_array($productid, $productids) && !in_array($id, $addonids) ) { $addonids[] = $id; } } } $addons = array( ); if( count($addonids) ) { $result = select_query("tbladdons", "", "id IN (" . db_build_in_array($addonids) . ")", "weight` ASC,`name", "ASC"); if( $data = mysql_fetch_array($result) ) { $addonid = $data["id"]; $packages = $data["packages"]; $packages = explode(",", $packages); $name = $data["name"]; $description = $data["description"]; $billingcycle = WHMCS\ClientArea::getRawStatus($data["billingcycle"]); $free = false; $result2 = select_query("tblpricing", "", array( "type" => "addon", "currency" => $currency["id"], "relid" => $addonid )); $data = mysql_fetch_array($result2); switch( $billingcycle ) { case "free": case "freeaccount": $free = true; break; case "onetime": case "monthly": case "quarterly": case "semiannually": case "annually": case "biennially": case "triennially": $setupfee = $data["msetupfee"]; $recurring = $data["monthly"]; break; case "recurring": default: if( 0 <= $data["monthly"] ) { $setupfee = $data["msetupfee"]; $recurring = $data["monthly"]; $billingcycle = "monthly"; } else { if( 0 <= $data["quarterly"] ) { $setupfee = $data["qsetupfee"]; $recurring = $data["quarterly"]; $billingcycle = "quarterly"; } else { if( 0 <= $data["semiannually"] ) { $setupfee = $data["ssetupfee"]; $recurring = $data["semiannually"]; $billingcycle = "semiannually"; } else { if( 0 <= $data["annually"] ) { $setupfee = $data["asetupfee"]; $recurring = $data["annually"]; $billingcycle = "annually"; } else { if( 0 <= $data["biennially"] ) { $setupfee = $data["bsetupfee"]; $recurring = $data["biennially"]; $billingcycle = "biennially"; } else { if( 0 <= $data["triennially"] ) { $setupfee = $data["tsetupfee"]; $recurring = $data["triennially"]; $billingcycle = "triennially"; } } } } } } break; } } } $smarty->assign("addons", $addons); $smarty->assign("noaddons", count($addons) <= 0); } else { if( $gid == "renewals" ) { if( !$CONFIG["EnableDomainRenewalOrders"] ) { redir("", "clientarea.php"); } if( !$_SESSION["uid"] ) { $orderform = false; include("login.php"); } $smartyvalues["gid"] = "renewals"; $templatefile = "domainrenewals"; $smartyvalues["productgroups"] = $productgroups; $applicationConfig = DI::make("config"); $DomainRenewalGracePeriodsConfig = $DomainRenewalMinimumsConfig = array( ); if( is_array($applicationConfig["DomainRenewalGracePeriods"]) ) { $DomainRenewalGracePeriodsConfig = $applicationConfig["DomainRenewalGracePeriods"]; } if( is_array($applicationConfig["DomainRenewalMinimums"]) ) { $DomainRenewalMinimumsConfig = $applicationConfig["DomainRenewalMinimums"]; } $DomainRenewalGracePeriods = array_merge(array( ".com" => "30", ".net" => "30", ".org" => "30", ".info" => "15", ".biz" => "30", ".mobi" => "30", ".name" => "30", ".asia" => "30", ".tel" => "30", ".in" => "15", ".mn" => "30", ".bz" => "30", ".cc" => "30", ".tv" => "30", ".eu" => "0", ".co.uk" => "97", ".org.uk" => "97", ".me.uk" => "97", ".us" => "30", ".ws" => "0", ".me" => "30", ".cn" => "30", ".nz" => "0", ".ca" => "30" ), $DomainRenewalGracePeriodsConfig); $DomainRenewalMinimums = array_merge(array( ".co.uk" => "180", ".org.uk" => "180", ".me.uk" => "180", ".com.au" => "90", ".net.au" => "90", ".org.au" => "90" ), $DomainRenewalMinimumsConfig); $DomainRenewalPriceOptions = array( ); $renewals = array( ); $result = select_query("tbldomains", "", "userid='" . (int) $_SESSION["uid"] . "' AND (status='Active' OR status='Expired')", "expirydate", "ASC"); while( $data = mysql_fetch_array($result) ) { $id = $data["id"]; $domain = $data["domain"]; $expirydate = $data["expirydate"]; $status = $data["status"]; if( $expirydate == "0000-00-00" ) { $expirydate = $data["nextduedate"]; } $todaysdatetime = strtotime(date("Ymd")); $expirydatetime = strtotime($expirydate); $daysuntilexpiry = round(($expirydatetime - $todaysdatetime) / 86400); $domainparts = explode(".", $domain, 2); $tld = "." . $domainparts[1]; $beforerenewlimit = $ingraceperiod = $pastgraceperiod = false; if( array_key_exists($tld, $DomainRenewalMinimums) && $DomainRenewalMinimums[$tld] < $daysuntilexpiry ) { $beforerenewlimit = true; } if( array_key_exists($tld, $DomainRenewalGracePeriods) ) { if( $DomainRenewalGracePeriods[$tld] < $daysuntilexpiry * -1 ) { $pastgraceperiod = true; } } else { if( $daysuntilexpiry < 0 ) { $pastgraceperiod = true; } } if( !$pastgraceperiod && $daysuntilexpiry < 0 ) { $ingraceperiod = true; } if( !array_key_exists($tld, $DomainRenewalPriceOptions) ) { $temppricelist = getTLDPriceList($tld, true, true); $renewaloptions = array( ); foreach( $temppricelist as $regperiod => $options ) { if( $options["renew"] ) { $renewaloptions[] = array( "period" => $regperiod, "price" => $options["renew"] ); } } $DomainRenewalPriceOptions[$tld] = $renewaloptions; } else { $renewaloptions[] = $DomainRenewalPriceOptions[$tld]; } $overrideRenewalOptions = array( ); if( (bool) (int) $data["is_premium"] ) { $overrideRenewalOptions[] = array( "period" => $data["registrationperiod"], "price" => $data["recurringamount"] ); } $rawstatus = WHMCS\ClientArea::getRawStatus($status); if( count($renewaloptions) ) { $renewals[] = array( "id" => $id, "domain" => $domain, "tld" => $tld, "status" => $_LANG["clientarea" . $rawstatus], "expirydate" => fromMySQLDate($expirydate), "daysuntilexpiry" => $daysuntilexpiry, "beforerenewlimit" => $beforerenewlimit, "beforerenewlimitdays" => (isset($DomainRenewalMinimums[$tld]) ? $DomainRenewalMinimums[$tld] : 0), "ingraceperiod" => $ingraceperiod, "pastgraceperiod" => $pastgraceperiod, "graceperioddays" => (isset($DomainRenewalGracePeriods[$tld]) ? $DomainRenewalGracePeriods[$tld] : 0), "renewaloptions" => (($overrideRenewalOptions ?: isset($DomainRenewalPriceOptions[$tld])) ? $DomainRenewalPriceOptions[$tld] : 0) ); } } $smartyvalues["renewals"] = $renewals; } else { $templatefile = "products"; $smartyvalues["showSidebarToggle"] = (bool) WHMCS\Config\Setting::getValue("OrderFormSidebarToggle"); $hookResponses = run_hook("ShoppingCartViewCategoryAboveProductsOutput", array( "cart" => WHMCS\Session::get("cart") )); $smartyvalues["hookAboveProductsOutput"] = $hookResponses; $hookResponses = run_hook("ShoppingCartViewCategoryBelowProductsOutput", array( "cart" => WHMCS\Session::get("cart") )); $smartyvalues["hookBelowProductsOutput"] = $hookResponses; if( $pid ) { $result = select_query("tblproducts", "id,gid", array( "id" => $pid )); $data = mysql_fetch_array($result); $pid = $data["id"]; $gid = $data["gid"]; $smartyvalues["pid"] = $pid; } else { if( !$gid ) { $gid = $productgroups[0]["gid"]; } } $productGroup = WHMCS\Product\Group::find($gid); $groupinfo = $orderfrm->getProductGroupInfo($gid); if( count($productgroups) && !$groupinfo ) { redir(); } $orderFormTemplateName = ($groupinfo["orderfrmtpl"] == "" ? $orderFormTemplateName : $groupinfo["orderfrmtpl"]); $smartyvalues["gid"] = $groupinfo["id"]; $smartyvalues["productGroup"] = $productGroup; $smartyvalues["groupname"] = WHMCS\Product\Group::getGroupName($groupinfo["id"], $productGroup->name); $products = array( ); try { $products = $orderfrm->getProducts($productGroup, true, true); } catch( Exception $e ) { $smartyvalues["errormessage"] = Lang::trans("orderForm.error" . $e->getMessage()); } $regex = "/[0-9]*\\.?[0-9]+/"; $featureValues = array( ); foreach( $products as $productKey => $product ) { foreach( $product["features"] as $featureKey => $feature ) { $matches = array( ); if( preg_match($regex, $feature, $matches) ) { $featureAmount = $matches[0]; } else { $featureAmount = PHP_INT_MAX; } $featureValues[$featureKey][$productKey] = $featureAmount; asort($featureValues[$featureKey]); } } foreach( $featureValues as $featureKey => $feature ) { if( !in_array(PHP_INT_MAX, $feature) ) { continue; } $highestValue = 1; foreach( $feature as $value ) { if( $value != PHP_INT_MAX ) { $highestValue = $value; } else { break; } } $featureValues[$featureKey] = str_replace(PHP_INT_MAX, $highestValue * 2, $feature); } foreach( $featureValues as $featureKey => $feature ) { list($highestValue) = array_slice($feature, -1); foreach( $feature as $productKey => $value ) { $featureValues[$featureKey][$productKey] = (int) ($value / $highestValue * 100); } } $smartyvalues["featurePercentages"] = $featureValues; $smartyvalues["products"] = $products; $smartyvalues["productscount"] = count($products); } } } } } } } if( $a == "add" ) { if( $pid ) { $templatefile = "configureproductdomain"; $productinfo = $orderfrm->setPid($pid); if( !$productinfo ) { redir(); } $orderFormTemplateName = ($productinfo["orderfrmtpl"] == "" ? $orderFormTemplateName : $productinfo["orderfrmtpl"]); $_SESSION["cart"]["domainoptionspid"] = $productinfo["pid"]; $smartyvalues["productinfo"] = $productinfo; $smartyvalues["pid"] = $productinfo["pid"]; $pid = $smartyvalues["pid"]; $type = $productinfo["type"]; $subdomain = $productinfo["subdomain"]; $freedomain = $productinfo["freedomain"]; $freedomaintlds = $productinfo["freedomaintlds"]; $showdomainoptions = $productinfo["showdomainoptions"]; $stockcontrol = $productinfo["stockcontrol"]; $qty = $productinfo["qty"]; $subdomains = $productinfo["subdomain"]; if( $stockcontrol && $qty <= 0 ) { $templatefile = "error"; $smartyvalues["errortitle"] = $_LANG["outofstock"]; $smartyvalues["errormsg"] = $_LANG["outofstockdescription"]; outputClientArea($templatefile, $ajax); exit(); } $subdomains = ($subdomain ? explode(",", $subdomain) : array( )); $passedvariables = array( ); $skipconfig = $whmcs->get_req_var("skipconfig"); $billingcycle = $whmcs->get_req_var("billingcycle"); $configoption = $whmcs->get_req_var("configoption"); $customfield = $whmcs->get_req_var("customfield"); $addons = $whmcs->get_req_var("addons"); if( $skipconfig ) { $passedvariables["skipconfig"] = $skipconfig; } if( $billingcycle ) { $passedvariables["billingcycle"] = $billingcycle; } if( $configoption ) { $passedvariables["configoption"] = $configoption; } if( $customfield ) { $passedvariables["customfield"] = $customfield; } if( $addons ) { if( !is_array($addons) ) { $passedvariables["addons"] = explode(",", $addons); } else { foreach( $addons as $k => $v ) { $passedvariables["addons"][] = trim($k); } } } $customFields = getCustomFields("product", $productinfo["pid"], "", true); foreach( $customFields as $customField ) { $cfValue = $whmcs->get_req_var("cf_" . $customField["textid"]); if( $cfValue ) { $passedvariables["customfield"][$customField["id"]] = $cfValue; } } if( count($passedvariables) ) { $_SESSION["cart"]["passedvariables"] = $passedvariables; } if( isset($orderconf["directpidstep1"]) && $orderconf["directpidstep1"] && !$ajax ) { redir("pid=" . $pid); } $domainselect = $whmcs->get_req_var("domainselect"); $domainoption = $whmcs->get_req_var("domainoption"); if( $domainselect && !$domains && $ajax && $domainoption != "incart" && $domainoption != "owndomain" && $domainoption != "subdomain" ) { exit( "nodomains" ); } $productconfig = false; if( $orderfrm->getProductInfo("showdomainoptions") && !$domains ) { $cartproducts = $orderfrm->getCartDataByKey("products"); $cartdomains = $orderfrm->getCartDataByKey("domains"); $incartdomains = array( ); if( $cartdomains ) { foreach( $cartdomains as $cartdomain ) { $domainname = $cartdomain["domain"]; if( $cartproducts ) { foreach( $cartproducts as $cartproduct ) { if( $cartproduct["domain"] == $domainname ) { $domainname = ""; } } } if( $domainname ) { $incartdomains[] = $domainname; } } } if( !in_array($domainoption, array( "incart", "register", "transfer", "owndomain", "subdomain" )) ) { $domainoption = ""; } if( $incartdomains && !$domainoption ) { $domainoption = "incart"; } if( $CONFIG["AllowRegister"] && !$domainoption ) { $domainoption = "register"; } if( $CONFIG["AllowTransfer"] && !$domainoption ) { $domainoption = "transfer"; } if( $CONFIG["AllowOwnDomain"] && !$domainoption ) { $domainoption = "owndomain"; } if( count($subdomains) && !$domainoption ) { $domainoption = "subdomain"; } $registerTlds = getTLDList(); $transferTlds = getTLDList("transfer"); $smartyvalues["listtld"] = $registerTlds; $smartyvalues["registertlds"] = $registerTlds; $smartyvalues["transfertlds"] = $transferTlds; $smartyvalues["showdomainoptions"] = true; $smartyvalues["domainoption"] = $domainoption; $smartyvalues["registerdomainenabled"] = $CONFIG["AllowRegister"]; $smartyvalues["transferdomainenabled"] = $CONFIG["AllowTransfer"]; $smartyvalues["owndomainenabled"] = $CONFIG["AllowOwnDomain"]; $smartyvalues["subdomain"] = (isset($subdomains[0]) ? $subdomains[0] : ""); $smartyvalues["subdomains"] = $subdomains; $smartyvalues["incartdomains"] = $incartdomains; $smartyvalues["availabilityresults"] = array( ); $smartyvalues["freedomaintlds"] = ($freedomain && $freedomaintlds ? $freedomaintlds : ""); $smarty->assign("spotlightTlds", getSpotlightTldsWithPricing()); if( is_array($tld) ) { if( $domainoption == "register" ) { $tld = $tld[0]; $sld = $sld[0]; } else { if( $domainoption == "transfer" ) { $tld = $tld[1]; $sld = $sld[1]; } else { if( $domainoption == "owndomain" ) { $tld = $tld[2]; $sld = $sld[2]; } else { if( $domainoption == "subdomain" ) { if( !$subdomains[$tld[3]] ) { $tld[3] = 0; } $tld = $subdomains[$tld[3]]; $sld = $sld[3]; } else { if( $domainoption == "incart" ) { $incartdomain = explode(".", $incartdomain, 2); list($sld, $tld) = $incartdomain; } } } } } } $nocontinue = false; if( !$sld && !$tld && isset($_SESSION["cartdomain"]["sld"]) && isset($_SESSION["cartdomain"]["tld"]) && in_array($_SESSION["cartdomain"]["tld"], $registerTlds) ) { $sld = $_SESSION["cartdomain"]["sld"]; $tld = $_SESSION["cartdomain"]["tld"]; $nocontinue = true; unset($_SESSION["cartdomain"]); } $sld = cleanDomainInput($sld); $tld = cleanDomainInput($tld); if( substr($sld, -1) == "." ) { $sld = substr($sld, 0, -1); } if( $sld && $tld && ($domainoption == "register" && !in_array($tld, $registerTlds) || $domainoption == "transfer" && !in_array($tld, $transferTlds)) ) { $sld = ""; $tld = ""; } $smartyvalues["sld"] = $sld; $smartyvalues["tld"] = $tld; if( $tld && substr($tld, 0, 1) != "." ) { $tld = "." . $tld; } if( isset($_REQUEST["sld"]) || isset($_REQUEST["tld"]) || $sld ) { $validate = new WHMCS\Validate(); if( $domainoption == "subdomain" ) { if( !is_array($BannedSubdomainPrefixes) ) { $BannedSubdomainPrefixes = array( ); } if( $whmcs->get_config("BannedSubdomainPrefixes") ) { $bannedprefixes = $whmcs->get_config("BannedSubdomainPrefixes"); $bannedprefixes = explode(",", $bannedprefixes); $BannedSubdomainPrefixes = array_merge($BannedSubdomainPrefixes, $bannedprefixes); } if( !WHMCS\Domains\Domain::isValidDomainName($sld, ".com") ) { $errormessage .= "
  • " . $_LANG["ordererrordomaininvalid"]; } else { if( in_array($sld, $BannedSubdomainPrefixes) ) { $errormessage .= "
  • " . $_LANG["ordererrorsbudomainbanned"]; } else { $result = select_query("tblhosting", "COUNT(*)", "domain='" . db_escape_string($sld . $tld) . "' AND (domainstatus!='Terminated' AND domainstatus!='Cancelled' AND domainstatus!='Fraud')"); $data = mysql_fetch_array($result); $subchecks = $data[0]; if( $subchecks ) { $errormessage = "
  • " . $_LANG["ordererrorsubdomaintaken"]; } } } run_validate_hook($validate, "CartSubdomainValidation", array( "subdomain" => $sld, "domain" => $tld )); } else { if( !WHMCS\Domains\Domain::isValidDomainName($sld, $tld) ) { $errormessage .= $_LANG["ordererrordomaininvalid"]; } if( ($domainoption == "register" || $domainoption == "transfer") && $CONFIG["AllowDomainsTwice"] ) { if( substr($tld, 0, 1) != "." ) { $tld = "." . $tld; } $domainObject = new WHMCS\Domains\Domain($sld . $tld); if( cartCheckIfDomainAlreadyOrdered($domainObject) ) { $errormessage = "
  • " . $_LANG["ordererrordomainalreadyexists"]; } } else { if( $domainoption == "owndomain" && $CONFIG["AllowDomainsTwice"] ) { $result = select_query("tblhosting", "domain", "domain='" . db_escape_string($sld . $tld) . "' AND (domainstatus!='Terminated' AND domainstatus!='Cancelled' AND domainstatus!='Fraud')"); while( $data = mysql_fetch_array($result) ) { if( $data[0] == $sld . $tld ) { $errormessage = "
  • " . $_LANG["ordererrordomainalreadyexists"]; break; } } } } run_validate_hook($validate, "ShoppingCartValidateDomain", array( "domainoption" => $domainoption, "sld" => $sld, "tld" => $tld )); } if( $validate->hasErrors() ) { $errormessage .= $validate->getHTMLErrorOutput(); } $smartyvalues["errormessage"] = $errormessage; } if( !$errormessage && !$nocontinue ) { if( in_array($domainoption, array( "register", "transfer" )) && $sld && $tld ) { $domainToLookup = new WHMCS\Domains\Domain($sld); $lookupProvider = WHMCS\Domains\DomainLookup\Provider::factory(); $searchResult = $lookupProvider->checkAvailability($domainToLookup, array( $tld ))->offsetGet(0); if( $domainoption == "register" ) { $matchString = WHMCS\Domains\DomainLookup\SearchResult::STATUS_NOT_REGISTERED; } else { $matchString = WHMCS\Domains\DomainLookup\SearchResult::STATUS_REGISTERED; } if( $searchResult->getStatus() == WHMCS\Domains\DomainLookup\SearchResult::STATUS_UNKNOWN ) { $matchString = WHMCS\Domains\DomainLookup\SearchResult::STATUS_UNKNOWN; } $smartyvalues["searchvar"] = $matchString; $smartyvalues["searchResults"] = $searchResult->toArray(); $smartyvalues["availabilityresults"] = cartAvailabilityResultsBackwardsCompat($domainToLookup, $searchResult, $matchString); $smartyvalues["domains"] = $domains; } if( in_array($domainoption, array( "owndomain", "subdomain", "incart" )) && $sld && $tld ) { $smartyvalues["showdomainoptions"] = false; $domains = array( $sld . $tld ); $productconfig = true; } } } else { $productconfig = true; } if( $productconfig ) { $passedvariables = $_SESSION["cart"]["passedvariables"]; unset($_SESSION["cart"]["passedvariables"]); cartPreventDuplicateProduct($domains[0]); $prodarray = array( "pid" => $pid, "domain" => $domains[0], "billingcycle" => $passedvariables["billingcycle"], "configoptions" => $passedvariables["configoption"], "customfields" => $passedvariables["customfield"], "addons" => $passedvariables["addons"], "server" => "", "noconfig" => true ); if( isset($passedvariables["bnum"]) ) { $prodarray["bnum"] = $passedvariables["bnum"]; } if( isset($passedvariables["bitem"]) ) { $prodarray["bitem"] = $passedvariables["bitem"]; } $updatedexistingqty = false; if( $productinfo["allowqty"] ) { foreach( $_SESSION["cart"]["products"] as &$cart_prod ) { if( $pid == $cart_prod["pid"] ) { if( empty($cart_prod["qty"]) ) { $cart_prod["qty"] = 1; } $cart_prod["qty"]++; if( $stockcontrol && $qty < $cart_prod["qty"] ) { $cart_prod["qty"] = $qty; } $updatedexistingqty = true; break; } } } if( !$updatedexistingqty ) { $_SESSION["cart"]["products"][] = $prodarray; } $newprodnum = count($_SESSION["cart"]["products"]) - 1; if( $domainoption == "register" || $domainoption == "transfer" ) { foreach( $domains as $domainname ) { cartPreventDuplicateDomain($domainname); $regperiod = $domainsregperiod[$domainname]; $domainparts = explode(".", $domainname, 2); $temppricelist = getTLDPriceList("." . $domainparts[1]); if( !isset($temppricelist[$regperiod][$domainoption]) ) { if( is_array($regperiods) ) { foreach( $regperiods as $period ) { if( substr($period, 0, strlen($domainname)) == $domainname ) { $regperiod = substr($period, strlen($domainname)); } } } if( !$regperiod ) { $tldyears = array_keys($temppricelist); $regperiod = $tldyears[0]; } } $domainArray = array( "type" => $domainoption, "domain" => $domainname, "regperiod" => $regperiod, "isPremium" => false ); if( isset($passedvariables["bnum"]) ) { $domainArray["bnum"] = $passedvariables["bnum"]; } if( isset($passedvariables["bitem"]) ) { $domainArray["bitem"] = $passedvariables["bitem"]; } $premiumData = WHMCS\Session::get("PremiumDomains"); if( (bool) (int) WHMCS\Config\Setting::getValue("PremiumDomains") && array_key_exists($domainname, $premiumData) ) { $premiumPrice = $premiumData[$domainname]; if( array_key_exists("register", $premiumPrice["cost"]) ) { $domainArray["isPremium"] = true; $domainArray["domainpriceoverride"] = $premiumPrice["markupPrice"][1]["register"]; $domainArray["registrarCostPrice"] = $premiumPrice["cost"]["register"]; $domainArray["registrarCurrency"] = $premiumPrice["markupPrice"][1]["currency"]; $domainArray["domainpriceoverride"] = $domainArray["domainpriceoverride"]->toNumeric(); } if( array_key_exists("renew", $premiumPrice["cost"]) ) { $domainArray["domainrenewoverride"] = $premiumPrice["markupPrice"][1]["renew"]; $domainArray["registrarRenewalCostPrice"] = $premiumPrice["cost"]["renew"]; $domainArray["registrarCurrency"] = $premiumPrice["markupPrice"][1]["currency"]; $domainArray["domainrenewoverride"] = $domainArray["domainrenewoverride"]->toNumeric(); } else { $domainArray["isPremium"] = false; } } $_SESSION["cart"]["domains"][] = $domainArray; } } $_SESSION["cart"]["newproduct"] = true; if( $ajax ) { $ajax = "&ajax=1"; } else { if( $passedvariables["skipconfig"] ) { unset($_SESSION["cart"]["products"][$newprodnum]["noconfig"]); $_SESSION["cart"]["lastconfigured"] = array( "type" => "product", "i" => $newprodnum ); redir("a=view"); } } redir("a=confproduct&i=" . $newprodnum . $ajax); } } else { if( $aid ) { $requestAddonID = (int) $whmcs->get_req_var("aid"); $requestServiceID = (int) $whmcs->get_req_var("serviceid"); $requestProductID = (int) $whmcs->get_req_var("productid"); if( !$requestServiceID && $requestProductID ) { $requestServiceID = $requestProductID; } if( !$requestAddonID || !$requestServiceID ) { redir("gid=addons"); } $data = get_query_vals("tblhosting", "id,packageid", array( "id" => $requestServiceID, "userid" => WHMCS\Session::get("uid"), "domainstatus" => "Active" )); $serviceid = $data["id"]; $pid = $data["packageid"]; if( !$serviceid ) { redir("gid=addons"); } $data = get_query_vals("tbladdons", "id,packages", array( "id" => $requestAddonID )); $aid = $data["id"]; $packages = $data["packages"]; if( !$aid ) { redir("gid=addons"); } $packages = explode(",", $packages); if( !in_array($pid, $packages) ) { redir("gid=addons"); } $_SESSION["cart"]["addons"][] = array( "id" => $aid, "productid" => $serviceid ); if( $ajax ) { exit(); } redir("a=view"); } else { if( $domain = App::getFromRequest("domain") ) { $allowRegistration = WHMCS\Config\Setting::getValue("AllowRegister"); $allowTransfers = WHMCS\Config\Setting::getValue("AllowTransfer"); $allowRenewalOrders = WHMCS\Config\Setting::getValue("EnableDomainRenewalOrders"); $smartyvalues["domainRegistrationEnabled"] = (bool) $allowRegistration; $smartyvalues["registerdomainenabled"] = $smartyvalues["domainRegistrationEnabled"]; $smartyvalues["domainTransferEnabled"] = (bool) $allowTransfers; $smartyvalues["transferdomainenabled"] = $smartyvalues["domainTransferEnabled"]; $smartyvalues["renewalsenabled"] = (bool) $allowRenewalOrders; if( !in_array($domain, array( "register", "transfer" )) ) { $domain = "register"; } if( $domain == "register" && !$allowRegistration ) { redir(); } if( $domain == "transfer" && !$allowTransfers ) { redir(); } $pricing = localAPI("GetTldPricing", array( "clientid" => (int) WHMCS\Session::get("uid"), "currencyid" => $currency["id"] )); $smartyvalues["pricing"] = $pricing; foreach( $smartyvalues["pricing"]["pricing"] as $tld => &$priceData ) { foreach( array( "register", "transfer", "renew" ) as $action ) { foreach( $priceData[$action] as $term => &$price ) { $price = new WHMCS\View\Formatter\Price($price, (array) $smartyvalues["pricing"]["currency"]); } } } unset($price); unset($priceData); $extensions = (array_keys($smartyvalues["pricing"]["pricing"]) ?: array( )); $featuredTlds = array( ); $spotlights = getSpotlightTldsWithPricing(); foreach( $spotlights as $spotlight ) { if( file_exists(ROOTDIR . "/assets/img/tld_logos/" . $spotlight["tldNoDots"] . ".png") ) { $featuredTlds[] = $spotlight; } } $smartyvalues["featuredTlds"] = $featuredTlds; try { $tldCategories = WHMCS\Domain\TopLevel\Category::whereHas("topLevelDomains", function(Illuminate\Database\Eloquent\Builder $query) use ($extensions) { $query->whereIn("tld", $extensions); } )->with("topLevelDomains")->tldsIn($extensions)->orderBy("is_primary", "desc")->orderBy("display_order")->orderBy("category")->get(); } catch( Exception $e ) { $tldCategories = array( ); } $categoryCounts = array( ); foreach( $pricing["pricing"] as $extension => $price ) { foreach( $price["categories"] as $category ) { $categoryCounts[$category]++; } } $categoriesWithCounts = array( ); foreach( $tldCategories->pluck("category") as $category ) { $categoriesWithCounts[$category] = $categoryCounts[$category]; } if( array_key_exists("Other", $categoryCounts) ) { $categoriesWithCounts["Other"] = $categoryCounts["Other"]; } $smartyvalues["categoriesWithCounts"] = $categoriesWithCounts; $smartyvalues["availabilityresults"] = array( ); if( $domains ) { $passedvariables = $_SESSION["cart"]["passedvariables"]; unset($_SESSION["cart"]["passedvariables"]); foreach( $domains as $domainname ) { cartPreventDuplicateDomain($domainname); $regperiod = $domainsregperiod[$domainname]; $domainparts = explode(".", $domainname, 2); $temppricelist = getTLDPriceList("." . $domainparts[1]); if( !isset($temppricelist[$regperiod][$domain]) ) { if( is_array($regperiods) ) { foreach( $regperiods as $period ) { if( substr($period, 0, strlen($domainname)) == $domainname ) { $regperiod = substr($period, strlen($domainname)); } } } if( !$regperiod ) { $tldyears = array_keys($temppricelist); $regperiod = $tldyears[0]; } } $domainArray = array( "type" => $domain, "domain" => $domainname, "regperiod" => $regperiod, "eppcode" => $eppcode, "isPremium" => false ); if( isset($passedvariables["addons"]) ) { foreach( $passedvariables["addons"] as $domaddon ) { $domainArray[$domaddon] = true; } } if( isset($passedvariables["bnum"]) ) { $domainArray["bnum"] = $passedvariables["bnum"]; } if( isset($passedvariables["bitem"]) ) { $domainArray["bitem"] = $passedvariables["bitem"]; } $premiumData = WHMCS\Session::get("PremiumDomains"); if( (bool) (int) WHMCS\Config\Setting::getValue("PremiumDomains") && array_key_exists($domainname, $premiumData) ) { $premiumPrice = $premiumData[$domainname]; if( array_key_exists("transfer", $premiumPrice["cost"]) ) { $domainArray["isPremium"] = true; $domainArray["domainpriceoverride"] = $premiumPrice["markupPrice"][1]["transfer"]; $domainArray["registrarCostPrice"] = $premiumPrice["cost"]["transfer"]; $domainArray["registrarCurrency"] = $premiumPrice["markupPrice"][1]["currency"]; $domainArray["domainpriceoverride"] = $domainArray["domainpriceoverride"]->toNumeric(); } if( array_key_exists("renew", $premiumPrice["cost"]) ) { $domainArray["domainrenewoverride"] = $premiumPrice["markupPrice"][1]["renew"]; $domainArray["registrarRenewalCostPrice"] = $premiumPrice["cost"]["renew"]; $domainArray["registrarCurrency"] = $premiumPrice["markupPrice"][1]["currency"]; $domainArray["domainrenewoverride"] = $domainArray["domainrenewoverride"]->toNumeric(); } else { $domainArray["isPremium"] = false; } } $_SESSION["cart"]["domains"][] = $domainArray; } if( $ajax ) { $ajax = "&ajax=1"; } $newdomnum = count($_SESSION["cart"]["domains"]) - 1; $_SESSION["cart"]["lastconfigured"] = array( "type" => "domain", "i" => $newdomnum ); if( !$ajax && is_array($orderconf["denynonajaxaccess"]) && in_array("confdomains", $orderconf["denynonajaxaccess"]) ) { $smartyvalues["selecteddomains"] = $_SESSION["cart"]["domains"]; $smartyvalues["skipselect"] = true; } else { redir("a=confdomains" . $ajax); } } if( $domain == "transfer" ) { if( $orderFormTemplate->hasTemplate("domaintransfer") ) { $smarty->assign("captcha", $captcha); $captchaData = WHMCS\Session::getAndDelete("captchaData"); if( $captchaData ) { if( !$captchaData["invalidCaptchaError"] ) { $smarty->assign("captcha", false); } else { $smarty->assign("captchaError", $captchaData["invalidCaptchaError"]); } } else { WHMCS\Session::set("CaptchaComplete", false); } $templatefile = "domaintransfer"; } else { $templatefile = "adddomain"; } } else { if( $orderFormTemplate->hasTemplate("domainregister") ) { $lookupProvider = WHMCS\Domains\DomainLookup\Provider::factory(); $showSuggestions = true; if( $lookupProvider instanceof WHMCS\Domains\DomainLookup\Provider\BasicWhois && !WHMCS\Config\Setting::getValue("BulkCheckTLDs") || $lookupProvider instanceof WHMCS\Domains\DomainLookup\Provider\WhmcsWhois && !WHMCS\Config\Setting::getValue("domainLookup_WhmcsWhois_suggestTlds") ) { $showSuggestions = false; } $smarty->assign("showSuggestionsContainer", $showSuggestions); $smarty->assign("captcha", $captcha); $captchaData = WHMCS\Session::getAndDelete("captchaData"); if( $captchaData ) { if( !$captchaData["invalidCaptchaError"] ) { $smarty->assign("captcha", false); } else { $smarty->assign("captchaError", $captchaData["invalidCaptchaError"]); } } else { WHMCS\Session::set("CaptchaComplete", false); } $templatefile = "domainregister"; } else { $templatefile = "adddomain"; } } $registerTlds = getTLDList(); $transferTlds = getTLDList("transfer"); $smarty->assign("registertlds", $registerTlds); $smarty->assign("transfertlds", $transferTlds); $tldslist = ($domain == "register" ? $registerTlds : $transferTlds); $smarty->assign("tlds", $tldslist); $smarty->assign("spotlightTlds", getSpotlightTldsWithPricing()); $smartyvalues["domain"] = $domain; $sld = App::getFromRequest("sld"); $tld = App::getFromRequest("tld"); $lookupTerm = App::getFromRequest("query"); if( !$lookupTerm && $sld ) { if( $tld && ltrim($tld, ".") == $tld ) { $tld = "." . $tld; } $lookupTerm = $sld . $tld; } if( $lookupTerm ) { $passedDomain = new WHMCS\Domains\Domain($lookupTerm); $sld = $passedDomain->getSecondLevel(); $tld = $passedDomain->getDotTopLevel(); } $smartyvalues["lookupTerm"] = $lookupTerm; $smartyvalues["sld"] = $sld; $smartyvalues["tld"] = $tld; if( $sld && $tld && !$errormessage && $templatefile == "adddomain" ) { $searchDomain = new WHMCS\Domains\Domain($sld); $lookupProvider = WHMCS\Domains\DomainLookup\Provider::factory(); $searchResult = $lookupProvider->checkAvailability($searchDomain, array( $tld )); $searchResult = $searchResult[0]; if( $domain == "register" ) { $matchString = WHMCS\Domains\DomainLookup\SearchResult::STATUS_NOT_REGISTERED; } else { $matchString = WHMCS\Domains\DomainLookup\SearchResult::STATUS_REGISTERED; } if( $searchResult->getStatus() == WHMCS\Domains\DomainLookup\SearchResult::STATUS_UNKNOWN ) { $matchString = WHMCS\Domains\DomainLookup\SearchResult::STATUS_UNKNOWN; } $smartyvalues["searchvar"] = $matchString; $smartyvalues["searchResults"] = $searchResult->toArray(); $smartyvalues["availabilityresults"] = cartAvailabilityResultsBackwardsCompat($searchDomain, $searchResult, $matchString); } } else { if( $renewals ) { if( $renewalid ) { $_SESSION["cart"]["renewals"][$renewalid] = $renewalperiod; } else { if( !count($renewalids) ) { redir("gid=renewals"); } else { foreach( $renewalids as $domainid ) { $_SESSION["cart"]["renewals"][$domainid] = $renewalperiod[$domainid]; } } } if( $ajax ) { exit(); } redir("a=view"); } else { if( $bid ) { $data = get_query_vals("tblbundles", "", array( "id" => $bid )); $bid = $data["id"]; $validfrom = $data["validfrom"]; $validuntil = $data["validuntil"]; $uses = $data["uses"]; $maxuses = $data["maxuses"]; $itemdata = $data["itemdata"]; $itemdata = unserialize($itemdata); $vals = $itemdata[0]; if( $validfrom != "0000-00-00" && date("Ymd") < str_replace("-", "", $validfrom) || $validuntil != "0000-00-00" && str_replace("-", "", $validuntil) < date("Ymd") ) { $templatefile = "error"; $smartyvalues["errortitle"] = $_LANG["bundlevaliddateserror"]; $smartyvalues["errormsg"] = $_LANG["bundlevaliddateserrordesc"]; outputClientArea($templatefile); exit(); } if( $maxuses && $maxuses <= $uses ) { $templatefile = "error"; $smartyvalues["errortitle"] = $_LANG["bundlemaxusesreached"]; $smartyvalues["errormsg"] = $_LANG["bundlemaxusesreacheddesc"]; outputClientArea($templatefile); exit(); } $_SESSION["cart"]["bundle"][] = array( "bid" => $bid, "step" => "0", "complete" => "0" ); $totalnum = count($_SESSION["cart"]["bundle"]); $vals["bnum"] = $totalnum - 1; $vals["bitem"] = "0"; $vals["billingcycle"] = str_replace(array( "-", " " ), "", strtolower($vals["billingcycle"])); $_SESSION["cart"]["passedvariables"] = $vals; redir("a=add&pid=" . $vals["pid"]); } else { redir(); } } } } } } if( $a == "domainoptions" ) { $productinfo = $orderfrm->setPid($_SESSION["cart"]["domainoptionspid"]); $orderFormTemplateName = ($productinfo["orderfrmtpl"] == "" ? $orderFormTemplateName : $productinfo["orderfrmtpl"]); $checktype = App::getFromRequest("checktype"); $domain = App::getFromRequest("domain"); if( $checktype == "register" || $checktype == "transfer" ) { if( $domain ) { $domainparts = explode(".", $domain, 2); list($sld, $tld) = $domainparts; } $sld = cleanDomainInput($sld); $tld = cleanDomainInput($tld); if( $tld && substr($tld, 0, 1) != "." ) { $tld = "." . $tld; } $domainToLookup = new WHMCS\Domains\Domain($sld . $tld); if( $sld != "www" && $sld && $tld && WHMCS\Domains\Domain::isValidDomainName($sld, $tld) ) { $domaincheck = false; $smartyvalues["alreadyindb"] = false; if( $CONFIG["AllowDomainsTwice"] ) { $domainObject = new WHMCS\Domains\Domain($sld . $tld); $domaincheck = cartCheckIfDomainAlreadyOrdered($domainObject); } if( $domaincheck ) { $smartyvalues["alreadyindb"] = true; } else { $regenabled = $CONFIG["AllowRegister"]; $transferenabled = $CONFIG["AllowTransfer"]; $owndomainenabled = $CONFIG["AllowOwnDomain"]; $lookupProvider = WHMCS\Domains\DomainLookup\Provider::factory(); $searchResults = $lookupProvider->checkAvailability($domainToLookup, array( $tld )); $searchResult = $searchResults[0]; $smartyvalues["searchResults"] = $searchResult->toArray(); $smartyvalues["status"] = $searchResult->getLegacyStatus(); $pricing = $searchResult->pricing()->toArray(); if( $regenabled ) { $smartyvalues["regoptionscount"] = count($pricing); $smartyvalues["regoptions"] = $pricing; } if( $transferenabled ) { $smartyvalues["transferoptionscount"] = count($pricing); $smartyvalues["transferoptions"] = $pricing; $transferPrice = current($pricing); $smartyvalues["transferterm"] = key($pricing); $smartyvalues["transferprice"] = $transferPrice["transfer"]; } if( !$checktype ) { if( $searchResult->getStatus() == WHMCS\Domains\DomainLookup\SearchResult::STATUS_REGISTERED ) { $checktype = "transfer"; } else { $checktype = "register"; } } $smartyvalues["domain"] = $domainToLookup->getDomain(); $smartyvalues["checktype"] = $checktype; $smartyvalues["regenabled"] = $regenabled; $smartyvalues["transferenabled"] = $transferenabled; $smartyvalues["owndomainenabled"] = $owndomainenabled; $othersuggestions = array( ); $smartyvalues["searchResults"]["suggestions"] = array( ); if( $checktype == "register" && $regenabled ) { foreach( $lookupProvider->getSuggestions($domainToLookup) as $suggestion ) { $smartyvalues["searchResults"]["suggestions"][] = $suggestion->toArray(); $othersuggestions[] = array( "domain" => $suggestion->getDomain(), "status" => $suggestion->getStatus(), "regoptions" => $suggestion->pricing()->toArray() ); } } $smartyvalues["othersuggestions"] = $othersuggestions; } } else { $smartyvalues["invalid"] = true; } } else { if( $checktype == "owndomain" ) { $tld = strtolower($tld); if( $sld && $tld && WHMCS\Domains\Domain::isValidDomainName($sld, $tld) ) { if( substr($tld, 0, 1) != "." ) { $tld = "." . $tld; } if( $CONFIG["AllowDomainsTwice"] ) { $smartyvalues["alreadyindb"] = false; $result = select_query("tblhosting", "domain", "domain='" . db_escape_string($sld . $tld) . "' AND (domainstatus!='Terminated' AND domainstatus!='Cancelled' AND domainstatus!='Fraud')"); while( $data = mysql_fetch_array($result) ) { if( $data[0] == $sld . $tld ) { $smartyvalues["alreadyindb"] = true; break; } } } $smartyvalues["checktype"] = $checktype; $smartyvalues["sld"] = $sld; $smartyvalues["tld"] = $tld; } else { $smartyvalues["invalid"] = true; } } else { if( $checktype == "subdomain" ) { if( !is_array($BannedSubdomainPrefixes) ) { $BannedSubdomainPrefixes = array( ); } if( $whmcs->get_config("BannedSubdomainPrefixes") ) { $bannedprefixes = $whmcs->get_config("BannedSubdomainPrefixes"); $bannedprefixes = explode(",", $bannedprefixes); $BannedSubdomainPrefixes = array_merge($BannedSubdomainPrefixes, $bannedprefixes); } if( !WHMCS\Domains\Domain::isValidDomainName($sld, ".com") ) { $smartyvalues["invalid"] = true; } else { if( in_array($sld, $BannedSubdomainPrefixes) ) { $smartyvalues["invalid"] = true; $smartyvalues["reason"] = $_LANG["ordererrorsbudomainbanned"]; } else { $result = select_query("tblhosting", "COUNT(*)", "domain='" . db_escape_string($sld . $tld) . "' AND (domainstatus!='Terminated' AND domainstatus!='Cancelled' AND domainstatus!='Fraud')"); $data = mysql_fetch_array($result); $subchecks = $data[0]; if( $subchecks ) { $smartyvalues["invalid"] = true; $smartyvalues["reason"] = $_LANG["ordererrorsubdomaintaken"]; } else { $smartyvalues["checktype"] = $checktype; $smartyvalues["sld"] = $sld; $smartyvalues["tld"] = $tld; } } } } else { if( $checktype == "incart" ) { $smartyvalues["checktype"] = "owndomain"; $domainparts = explode(".", $sld, 2); list($sld, $tld) = $domainparts; $smartyvalues["sld"] = $sld; $smartyvalues["tld"] = $tld; } } } } $validate = new WHMCS\Validate(); if( $checktype == "subdomain" ) { run_validate_hook($validate, "CartSubdomainValidation", array( "subdomain" => $sld, "domain" => $tld )); } else { run_validate_hook($validate, "ShoppingCartValidateDomain", array( "domainoption" => $checktype, "sld" => $sld, "tld" => $tld )); } if( $validate->hasErrors() ) { $domainError = $validate->getHTMLErrorOutput(); $smartyvalues["invalid"] = true; $smartyvalues["reason"] = $domainError; } $templatefile = "domainoptions"; } if( $a == "cyclechange" ) { if( !is_int($productInfoKey) || !$billingcycle ) { if( $ajax ) { throw new WHMCS\Exception\ProgramExit($_LANG["invoiceserror"]); } redir(); } if( $orderfrm->validateBillingCycle($billingcycle) ) { $_SESSION["cart"]["products"][$productInfoKey]["billingcycle"] = $billingcycle; } $a = "confproduct"; } if( $a == "confproduct" ) { $templatefile = "configureproduct"; if( is_null($productInfoKey) || !isset($_SESSION["cart"]["products"][$productInfoKey]) || !is_array($_SESSION["cart"]["products"][$productInfoKey]) ) { if( $ajax ) { exit( $_LANG["invoiceserror"] ); } redir(); } if( isset($_SESSION["cart"]["products"][$productInfoKey]["skipConfig"]) && $_SESSION["cart"]["products"][$productInfoKey]["skipConfig"] ) { $_SESSION["cart"]["products"][$productInfoKey]["skipConfig"] = false; redir("a=view"); } $newproduct = (isset($_SESSION["cart"]["newproduct"]) ? $_SESSION["cart"]["newproduct"] : ""); unset($_SESSION["cart"]["newproduct"]); $pid = $_SESSION["cart"]["products"][$productInfoKey]["pid"]; $productinfo = $orderfrm->setPid($pid); if( !$productinfo ) { redir(); } $orderFormTemplateName = ($productinfo["orderfrmtpl"] == "" ? $orderFormTemplateName : $productinfo["orderfrmtpl"]); $_SESSION["cart"]["cartsummarypid"] = $productinfo["pid"]; $pid = $productinfo["pid"]; $configure = $whmcs->get_req_var("configure"); if( $configure ) { global $errormessage; $errormessage = ""; $result = select_query("tblproducts", "type", array( "id" => $pid )); $data = mysql_fetch_array($result); $producttype = $data["type"]; $serverarray = array( ); if( $producttype == "server" ) { $hostname = $whmcs->get_req_var("hostname"); $ns1prefix = $whmcs->get_req_var("ns1prefix"); $ns2prefix = $whmcs->get_req_var("ns2prefix"); $rootpw = $whmcs->get_req_var("rootpw"); if( !$hostname ) { $errormessage .= "
  • " . $_LANG["ordererrorservernohostname"]; } else { $result = select_query("tblhosting", "COUNT(id)", array( "domain" => $hostname . "." . $_SESSION["cart"]["products"][$productInfoKey]["domain"], "domainstatus" => array( "sqltype" => "NEQ", "value" => "Cancelled" ), "domainstatus" => array( "sqltype" => "NEQ", "value" => "Terminated" ), "domainstatus" => array( "sqltype" => "NEQ", "value" => "Fraud" ) )); $data = mysql_fetch_array($result); $existingcount = $data[0]; if( $existingcount ) { $errormessage .= "
  • " . $_LANG["ordererrorserverhostnameinuse"]; } } if( !$ns1prefix || !$ns2prefix ) { $errormessage .= "
  • " . $_LANG["ordererrorservernonameservers"]; } if( !$rootpw ) { $errormessage .= "
  • " . $_LANG["ordererrorservernorootpw"]; } $serverarray = array( "hostname" => $hostname, "ns1prefix" => $ns1prefix, "ns2prefix" => $ns2prefix, "rootpw" => $rootpw ); } $configoptionsarray = array( ); $configoption = $whmcs->get_req_var("configoption"); if( $configoption ) { $configOpsReturn = validateAndSanitizeQuantityConfigOptions($configoption); $configoptionsarray = $configOpsReturn["validOptions"]; $errormessage .= $configOpsReturn["errorMessage"]; } $addons = $whmcs->get_req_var("addons"); $addonsarray = (is_array($addons) ? array_keys($addons) : array( )); foreach( App::getFromRequest("addons_radio") as $addonId ) { if( is_numeric($addonId) ) { $addonsarray[] = $addonId; } } $customfield = $whmcs->get_req_var("customfield"); $errormessage .= bundlesValidateProductConfig($productInfoKey, $billingcycle, $configoptionsarray, $addonsarray); $_SESSION["cart"]["products"][$productInfoKey]["billingcycle"] = $billingcycle; $_SESSION["cart"]["products"][$productInfoKey]["server"] = $serverarray; $_SESSION["cart"]["products"][$productInfoKey]["configoptions"] = $configoptionsarray; $_SESSION["cart"]["products"][$productInfoKey]["customfields"] = $customfield; $_SESSION["cart"]["products"][$productInfoKey]["addons"] = $addonsarray; if( $whmcs->get_req_var("calctotal") ) { $productinfo = $orderfrm->setPid($_SESSION["cart"]["products"][$productInfoKey]["pid"]); $orderFormTemplateName = ($productinfo["orderfrmtpl"] == "" ? $orderFormTemplateName : $productinfo["orderfrmtpl"]); try { $orderSummaryTemplate = "/templates/orderforms/" . WHMCS\View\Template\OrderForm::factory("ordersummary.tpl", $orderFormTemplateName)->getName() . "/ordersummary.tpl"; $cartTotals = calcCartTotals(false, true); $templateVariables = array( "producttotals" => $cartTotals["products"][$productInfoKey], "carttotals" => $cartTotals ); echo processSingleTemplate($orderSummaryTemplate, $templateVariables); } catch( Exception $e ) { } exit(); } if( !$ajax && !$whmcs->get_req_var("nocyclerefresh") && $previousbillingcycle != $billingcycle ) { redir("a=confproduct&i=" . $productInfoKey); } $validate = new WHMCS\Validate(); $validate->validateCustomFields("product", $pid, true); run_validate_hook($validate, "ShoppingCartValidateProductUpdate", $_REQUEST); if( $validate->hasErrors() ) { $errormessage .= $validate->getHTMLErrorOutput(); } if( $errormessage ) { if( $ajax ) { exit( $errormessage ); } $smartyvalues["errormessage"] = $errormessage; } else { unset($_SESSION["cart"]["products"][$productInfoKey]["noconfig"]); $_SESSION["cart"]["lastconfigured"] = array( "type" => "product", "i" => $productInfoKey ); if( $ajax ) { exit(); } redir("a=confdomains"); } } $billingcycle = $_SESSION["cart"]["products"][$productInfoKey]["billingcycle"]; $server = $_SESSION["cart"]["products"][$productInfoKey]["server"]; $customfields = $_SESSION["cart"]["products"][$productInfoKey]["customfields"]; $configoptions = $_SESSION["cart"]["products"][$productInfoKey]["configoptions"]; $addons = $_SESSION["cart"]["products"][$productInfoKey]["addons"]; if( !$addons ) { $addons = array( ); } $domain = $_SESSION["cart"]["products"][$productInfoKey]["domain"]; $noconfig = $_SESSION["cart"]["products"][$productInfoKey]["noconfig"]; $billingcycle = $orderfrm->validateBillingCycle($billingcycle); $pricing = getPricingInfo($pid); $configurableoptions = getCartConfigOptions($pid, $configoptions, $billingcycle, "", true); $customfields = getCustomFields("product", $pid, "", "", "on", $customfields); $addonsarray = getAddons($pid, $addons); $marketConnect = new WHMCS\MarketConnect\MarketConnect(); $addonsPromoOutput = $marketConnect->getMarketplaceConfigureProductAddonPromoHtml($addonsarray, $billingcycle); $addonsarray = $marketConnect->removeMarketplaceAddons($addonsarray); $hookResponses = run_hook("ShoppingCartConfigureProductAddonsOutput", array( "billingCycle" => $billingcycle, "selectedAddons" => $addonsarray )); foreach( $hookResponses as $response ) { if( $response ) { $addonsPromoOutput[] = $response; } } $smartyvalues["addonsPromoOutput"] = $addonsPromoOutput; $recurringcycles = 0; if( $pricing["type"] == "recurring" ) { if( 0 <= $pricing["rawpricing"]["monthly"] ) { $recurringcycles++; } if( 0 <= $pricing["rawpricing"]["quarterly"] ) { $recurringcycles++; } if( 0 <= $pricing["rawpricing"]["semiannually"] ) { $recurringcycles++; } if( 0 <= $pricing["rawpricing"]["annually"] ) { $recurringcycles++; } if( 0 <= $pricing["rawpricing"]["biennially"] ) { $recurringcycles++; } } if( $newproduct && $productinfo["type"] != "server" && ($pricing["type"] != "recurring" || $recurringcycles <= 1) && !count($configurableoptions) && !count($customfields) && !count($addonsarray) && !$addonsPromoOutput ) { unset($_SESSION["cart"]["products"][$productInfoKey]["noconfig"]); $_SESSION["cart"]["lastconfigured"] = array( "type" => "product", "i" => $productInfoKey ); if( $ajax ) { exit(); } redir("a=confdomains"); } $serverarray = array( "hostname" => (isset($server["hostname"]) ? $server["hostname"] : ""), "ns1prefix" => (isset($server["ns1prefix"]) ? $server["ns1prefix"] : ""), "ns2prefix" => (isset($server["ns2prefix"]) ? $server["ns2prefix"] : ""), "rootpw" => (isset($server["rootpw"]) ? $server["rootpw"] : "") ); $smartyvalues["editconfig"] = true; $smartyvalues["firstconfig"] = ($noconfig ? true : false); $smartyvalues["i"] = $productInfoKey; $smartyvalues["productinfo"] = $productinfo; $smartyvalues["pricing"] = $pricing; $smartyvalues["billingcycle"] = $billingcycle; $smartyvalues["server"] = $serverarray; $smartyvalues["configurableoptions"] = $configurableoptions; $smartyvalues["addons"] = $addonsarray; $smartyvalues["customfields"] = $customfields; $smartyvalues["domain"] = $domain; } if( $a == "confdomains" ) { $templatefile = "configuredomains"; $skipstep = true; $_SESSION["cartdomain"] = ""; $update = $whmcs->get_req_var("update"); $validate = $whmcs->get_req_var("validate"); if( $update || $validate ) { $validateHookParams = $_REQUEST; $domains = $_SESSION["cart"]["domains"]; foreach( $domains as $key => $domainname ) { if( $validate ) { $domainfield[$key] = $_SESSION["cart"]["domains"][$key]["fields"]; } else { $_SESSION["cart"]["domains"][$key]["dnsmanagement"] = $_POST["dnsmanagement"][$key]; $_SESSION["cart"]["domains"][$key]["emailforwarding"] = $_POST["emailforwarding"][$key]; $_SESSION["cart"]["domains"][$key]["idprotection"] = $_POST["idprotection"][$key]; $_SESSION["cart"]["domains"][$key]["eppcode"] = $_POST["epp"][$key]; } $domainparts = explode(".", $domainname["domain"], 2); if( $domainname["type"] == "register" ) { $additflds = new WHMCS\Domains\AdditionalFields(); $additflds->setTLD($domainparts[1]); $additflds->setFieldValues($domainfield[$key]); $missingfields = $additflds->getMissingRequiredFields(); foreach( $missingfields as $missingfield ) { $errormessage .= "
  • " . $missingfield . " " . $_LANG["clientareaerrorisrequired"] . " (" . $domainname["domain"] . ")"; } $_SESSION["cart"]["domains"][$key]["fields"] = $domainfield[$key]; $validateHookParams["domainfield"][$key] = $additflds->getAsNameValueArray(); } else { $result = select_query("tbldomainpricing", "", array( "extension" => "." . $domainparts[1] )); $data = mysql_fetch_array($result); if( $data["eppcode"] && !$_POST["epp"][$key] ) { $errormessage .= "
  • " . $_LANG["domaineppcoderequired"] . " " . $domainname["domain"]; } } } for( $i = 1; $i <= 5; $i++ ) { $ns = $whmcs->get_req_var("domainns" . $i); if( preg_match($nameserverRegexPattern, $ns) ) { $_SESSION["cart"]["ns" . $i] = $ns; } if( $ns == "" && isset($_SESSION["cart"]["ns" . $i]) ) { unset($_SESSION["cart"]["ns" . $i]); } } $validate = new WHMCS\Validate(); run_validate_hook($validate, "ShoppingCartValidateDomainsConfig", $validateHookParams); if( $validate->hasErrors() ) { $errormessage .= $validate->getHTMLErrorOutput(); } if( $ajax ) { exit( $errormessage ); } if( $errormessage ) { $smartyvalues["errormessage"] = $errormessage; } else { redir("a=view"); } } $domains = $_SESSION["cart"]["domains"]; if( $domains ) { foreach( $domains as $key => $domainname ) { $regperiod = $domainname["regperiod"]; $domainparts = explode(".", $domainname["domain"], 2); list($sld, $tld) = $domainparts; $result = select_query("tbldomainpricing", "", array( "extension" => "." . $tld )); $data = mysql_fetch_array($result); $domainconfigsshowing = $eppenabled = false; if( $data["dnsmanagement"] ) { $domainconfigsshowing = true; } if( $data["emailforwarding"] ) { $domainconfigsshowing = true; } if( $data["idprotection"] ) { $domainconfigsshowing = true; } $result = select_query("tblpricing", "", array( "type" => "domainaddons", "currency" => $currency["id"], "relid" => 0 )); $data2 = mysql_fetch_array($result); $domaindnsmanagementprice = $data2["msetupfee"] * $regperiod; $domainemailforwardingprice = $data2["qsetupfee"] * $regperiod; $domainidprotectionprice = $data2["ssetupfee"] * $regperiod; $domaindnsmanagementprice = ($domaindnsmanagementprice == "0.00" ? $_LANG["orderfree"] : new WHMCS\View\Formatter\Price($domaindnsmanagementprice, $currency)); $domainemailforwardingprice = ($domainemailforwardingprice == "0.00" ? $_LANG["orderfree"] : new WHMCS\View\Formatter\Price($domainemailforwardingprice, $currency)); $domainidprotectionprice = ($domainidprotectionprice == "0.00" ? $_LANG["orderfree"] : new WHMCS\View\Formatter\Price($domainidprotectionprice, $currency)); if( $data["eppcode"] && $domainname["type"] == "transfer" ) { $eppenabled = true; $domainconfigsshowing = true; } $domainfields = array( ); if( $domainname["type"] == "register" ) { $additflds = new WHMCS\Domains\AdditionalFields(); $additflds->setTLD($tld); $fieldValues = (isset($domainname["fields"]) ? $domainname["fields"] : array( )); $additflds->setFieldValues($fieldValues); $domainfields = $additflds->getFieldsForOutput($key); if( count($domainfields) ) { $domainconfigsshowing = true; } } $products = $_SESSION["cart"]["products"]; $hashosting = false; if( $products ) { foreach( $products as $product ) { if( $product["domain"] == $domainname["domain"] ) { $hashosting = true; } } } if( !$hashosting ) { $atleastonenohosting = true; } if( $atleastonenohosting ) { $skipstep = false; } $domainAddonsCount = 0; if( $data["dnsmanagement"] ) { $domainAddonsCount++; } if( $data["emailforwarding"] ) { $domainAddonsCount++; } if( $data["idprotection"] ) { $domainAddonsCount++; } $domainsarray[$key] = array( "domain" => $domainname["domain"], "regperiod" => $domainname["regperiod"], "dnsmanagement" => $data["dnsmanagement"], "emailforwarding" => $data["emailforwarding"], "idprotection" => $data["idprotection"], "addonsCount" => $domainAddonsCount, "dnsmanagementprice" => $domaindnsmanagementprice, "emailforwardingprice" => $domainemailforwardingprice, "idprotectionprice" => $domainidprotectionprice, "dnsmanagementselected" => (isset($domainname["dnsmanagement"]) ? $domainname["dnsmanagement"] : false), "emailforwardingselected" => (isset($domainname["emailforwarding"]) ? $domainname["emailforwarding"] : false), "idprotectionselected" => (isset($domainname["idprotection"]) ? $domainname["idprotection"] : false), "eppenabled" => $eppenabled, "eppvalue" => (isset($domainname["eppcode"]) ? $domainname["eppcode"] : ""), "fields" => $domainfields, "configtoshow" => $domainconfigsshowing, "hosting" => $hashosting ); if( $domainconfigsshowing || $eppenabled || $domainfields || $data["dnsmanagement"] || $data["emailforwarding"] || $data["idprotection"] ) { $skipstep = false; } } } $smartyvalues["domains"] = $domainsarray; $smartyvalues["atleastonenohosting"] = $atleastonenohosting; if( !$skipstep && !$_SESSION["cart"]["ns1"] && !$_SESSION["cart"]["ns2"] ) { for( $i = 1; $i <= 5; $i++ ) { $_SESSION["cart"]["ns" . $i] = (isset($CONFIG["DefaultNameserver" . $i]) ? $CONFIG["DefaultNameserver" . $i] : NULL); } } for( $i = 1; $i <= 5; $i++ ) { $ns = (isset($_SESSION["cart"]["ns" . $i]) ? $_SESSION["cart"]["ns" . $i] : ""); $smartyvalues["domainns" . $i] = $ns; } if( $skipstep ) { if( $ajax ) { exit(); } redir("a=view"); } } if( $a == "checkout" ) { $domainconfigerror = false; $domains = $orderfrm->getCartDataByKey("domains"); if( $domains ) { foreach( $domains as $key => $domaindata ) { $domainparts = explode(".", $domaindata["domain"], 2); if( $domaindata["type"] == "register" ) { $additflds = new WHMCS\Domains\AdditionalFields(); $additflds->setTLD($domainparts[1]); $additflds->setFieldValues($domaindata["fields"]); if( $additflds->isMissingRequiredFields() ) { $domainconfigerror = true; } } else { $result = select_query("tbldomainpricing", "eppcode", array( "extension" => "." . $domainparts[1] )); $data = mysql_fetch_array($result); if( $data["eppcode"] && !$domaindata["eppcode"] ) { $domainconfigerror = true; } } } } if( $domainconfigerror ) { if( $ajax ) { $errormessage .= "
  • " . $_LANG["carterrordomainconfigskipped"]; } else { redir("a=confdomains&validate=1"); } } $credit_card_input = ""; foreach( getAvailableOrderPaymentGateways(true) as $moduleName => $moduleConfiguration ) { $gateway = new WHMCS\Module\Gateway(); if( $gateway->load($moduleName) && $gateway->functionExists("credit_card_input") ) { $credit_card_input .= $gateway->call("credit_card_input", calcCartTotals(false)); } } $smartyvalues["credit_card_input"] = $credit_card_input; $remoteAuth = DI::make("remoteAuth"); $remoteAuthData = $remoteAuth->getRegistrationFormData(); $remoteAuthData = (new WHMCS\Authentication\Remote\Management\Client\ViewHelper())->getTemplateData(WHMCS\Authentication\Remote\Providers\AbstractRemoteAuthProvider::HTML_TARGET_CHECKOUT); foreach( $remoteAuthData as $key => $value ) { $smartyvalues[$key] = $value; } if( !empty($remoteAuthData) ) { $userData = $_SESSION["cart"]["user"]; if( empty($userData["email"]) && isset($remoteAuthData["email"]) ) { $userData["email"] = $remoteAuthData["email"]; } if( empty($userData["firstname"]) && isset($remoteAuthData["firstname"]) ) { $userData["firstname"] = $remoteAuthData["firstname"]; } if( empty($userData["lastname"]) && isset($remoteAuthData["lastname"]) ) { $userData["lastname"] = $remoteAuthData["lastname"]; } $_SESSION["cart"]["user"] = $userData; } $allowcheckout = true; $a = "view"; } if( $a == "addcontact" ) { $allowcheckout = true; $addcontact = true; $a = "view"; } if( $a == "view" ) { $templatefile = "viewcart"; $errormessage = ""; $gateways = new WHMCS\Gateways(); $availablegateways = getAvailableOrderPaymentGateways(true); $securityquestions = getSecurityQuestions(); $submit = $whmcs->get_req_var("submit"); $checkout = $whmcs->get_req_var("checkout"); $validatelogin = $whmcs->get_req_var("validatelogin"); $validatepromo = $whmcs->get_req_var("validatepromo"); $ccinfo = $whmcs->get_req_var("ccinfo"); $cctype = $whmcs->get_req_var("cctype"); $ccnumber = $whmcs->get_req_var("ccnumber"); $ccexpirymonth = $whmcs->get_req_var("ccexpirymonth"); $ccexpiryyear = $whmcs->get_req_var("ccexpiryyear"); $ccstartmonth = $whmcs->get_req_var("ccstartmonth"); $ccstartyear = $whmcs->get_req_var("ccstartyear"); $ccissuenum = $whmcs->get_req_var("ccissuenum"); $cccvv = $whmcs->get_req_var("cccvv"); $cccvvexisting = $whmcs->get_req_var("cccvvexisting"); $nostore = $whmcs->get_req_var("nostore"); $password = $whmcs->get_req_var("password"); $password2 = $whmcs->get_req_var("password2"); $customfields = $whmcs->get_req_var("customfields"); $notes = $whmcs->get_req_var("notes"); $contact = $whmcs->get_req_var("contact"); $addcontact = $whmcs->get_req_var("addcontact"); $domaincontactfirstname = $whmcs->get_req_var("domaincontactfirstname"); $domaincontactlastname = $whmcs->get_req_var("domaincontactlastname"); $domaincontactcompanyname = $whmcs->get_req_var("domaincontactcompanyname"); $domaincontactemail = $whmcs->get_req_var("domaincontactemail"); $domaincontactaddress1 = $whmcs->get_req_var("domaincontactaddress1"); $domaincontactaddress2 = $whmcs->get_req_var("domaincontactaddress2"); $domaincontactcity = $whmcs->get_req_var("domaincontactcity"); $domaincontactstate = $whmcs->get_req_var("domaincontactstate"); $domaincontactpostcode = $whmcs->get_req_var("domaincontactpostcode"); $domaincontactcountry = $whmcs->get_req_var("domaincontactcountry"); $domaincontactphonenumber = $whmcs->get_req_var("domaincontactphonenumber"); $domaincontactphonenumber = App::formatPostedPhoneNumber("domaincontactphonenumber"); $domaincontactcountry = $whmcs->get_req_var("domaincontactcountry"); $loginfailed = $whmcs->get_req_var("loginfailed"); $insufficientstock = $whmcs->get_req_var("insufficientstock"); if( $insufficientstock ) { $errormessage .= "
  • " . $_LANG["insufficientstockmessage"] . "
  • "; } $ccExpiryDate = $whmcs->get_req_var("ccexpirydate"); if( $ccExpiryDate ) { $ccExpirySplit = explode("/", $ccExpiryDate); $ccexpirymonth = (!empty($ccExpirySplit[0]) ? $ccExpirySplit[0] : ""); $ccexpiryyear = (!empty($ccExpirySplit[1]) ? $ccExpirySplit[1] : ""); } $ccexpirymonth = trim($ccexpirymonth); $ccexpiryyear = trim($ccexpiryyear); if( 2 < strlen($ccexpiryyear) ) { $ccexpiryyear = substr($ccexpiryyear, -2); } $ccStartDate = $whmcs->get_req_var("ccstartdate"); if( $ccStartDate ) { $ccStartSplit = explode("/", $ccStartDate); $ccstartmonth = (!empty($ccStartSplit[0]) ? $ccStartSplit[0] : ""); $ccstartyear = (!empty($ccStartSplit[1]) ? $ccStartSplit[1] : ""); } $ccstartmonth = trim($ccstartmonth); $ccstartyear = trim($ccstartyear); if( 2 < strlen($ccstartmonth) ) { $ccstartmonth = substr($ccstartmonth, -2); } if( !$cccvv && $cccvvexisting ) { $cccvv = $cccvvexisting; } $encryptedVarNames = array( "cctype", "ccnumber", "ccexpirymonth", "ccexpiryyear", "ccstartmonth", "ccstartyear", "ccissuenum", "cccvv", "nostore" ); foreach( $encryptedVarNames as $varName ) { if( 32 < strlen(${$varName}) ) { ${$varName} = substr(${$varName}, 0, 32); } } $remoteAuth = DI::make("remoteAuth"); if( $remoteAuth->isPrelinkPerformed() ) { $password = $remoteAuth->generateRandomPassword(); } if( ($submit || $checkout || $validatelogin) && !$validatepromo ) { if( $orderfrm->getNumItemsInCart() <= 0 ) { redir("a=view"); } $_SESSION["cart"]["paymentmethod"] = $paymentmethod; $_SESSION["cart"]["notes"] = $notes; if( !$_SESSION["uid"] ) { if( $custtype == "existing" || $validatelogin ) { $loginemail = $whmcs->get_req_var("loginemail"); $loginpw = $whmcs->get_req_var("loginpw"); if( !$loginpw ) { $loginpw = $whmcs->get_req_var("loginpassword"); } if( validateClientLogin($loginemail, $loginpw) ) { initialiseLoggedInClient(); } else { if( $validatelogin ) { redir("a=checkout&loginfailed=1"); } $errormessage .= "
  • " . $_LANG["loginincorrect"]; } if( isset($_SESSION["2faverifyc"]) ) { $_SESSION["2fafromcart"] = true; redir("", "clientarea.php"); } if( $validatelogin ) { redir("a=checkout"); } } else { $phonenumber = App::formatPostedPhoneNumber(); $_SESSION["cart"]["user"] = array( "firstname" => $firstname, "lastname" => $lastname, "companyname" => $companyname, "email" => $email, "address1" => $address1, "address2" => $address2, "city" => $city, "state" => $state, "postcode" => $postcode, "country" => $country, "phonenumber" => $phonenumber ); $errormessage .= checkDetailsareValid("", true, true, false); } } if( $validatelogin ) { redir("a=checkout"); } if( $contact == "new" ) { redir("a=addcontact"); } if( $contact == "addingnew" ) { $errormessage .= checkContactDetails("", false, "domaincontact"); } if( $availablegateways[$paymentmethod]["type"] == "CC" && $ccinfo ) { $gateway = new WHMCS\Module\Gateway(); $gateway->load($paymentmethod); if( $gateway->functionExists("cc_validation") ) { $params = array( ); $params["cardtype"] = $cctype; $params["cardnum"] = ccFormatNumbers($ccnumber); $params["cardexp"] = ccFormatDate(ccFormatNumbers($ccexpirymonth . $ccexpiryyear)); $params["cardstart"] = ccFormatDate(ccFormatNumbers($ccstartmonth . $ccstartyear)); $params["cardissuenum"] = ccFormatNumbers($ccissuenum); $errormessage .= $gateway->call("cc_validation", $params); $params = NULL; } else { if( $ccinfo == "new" ) { $errormessage .= updateCCDetails("", $cctype, $ccnumber, $cccvv, $ccexpirymonth . $ccexpiryyear, $ccstartmonth . $ccstartyear, $ccissuenum); } if( !$cccvv ) { $errormessage .= "
  • " . $_LANG["creditcardccvinvalid"]; } } $_SESSION["cartccdetail"] = encrypt(base64_encode(serialize(array( $cctype, $ccnumber, $ccexpirymonth, $ccexpiryyear, $ccstartmonth, $ccstartyear, $ccissuenum, $cccvv, $nostore )))); } $validate = new WHMCS\Validate(); $cartCheckoutHookData = $_REQUEST; $cartCheckoutHookData["promocode"] = $orderfrm->getCartDataByKey("promo"); $cartCheckoutHookData["userid"] = WHMCS\Session::get("uid"); run_validate_hook($validate, "ShoppingCartValidateCheckout", $cartCheckoutHookData); if( isset($_SESSION["uid"]) && $whmcs->get_config("EnableTOSAccept") ) { $validate->validate("required", "accepttos", "ordererroraccepttos"); } if( $validate->hasErrors() ) { $errormessage .= $validate->getHTMLErrorOutput(); } $currency = getCurrency(WHMCS\Session::get("uid"), WHMCS\Session::get("currency")); if( $whmcs->get_req_var("updateonly") ) { $errormessage = ""; } if( $ajax && $errormessage ) { exit( $errormessage ); } if( !$errormessage && !$_POST["updateonly"] ) { if( !$_SESSION["uid"] ) { $phonenumber = App::formatPostedPhoneNumber(); $userid = addClient($firstname, $lastname, $companyname, $email, $address1, $address2, $city, $state, $postcode, $country, $phonenumber, $password, $securityqid, $securityqans); } if( $contact == "addingnew" ) { $contact = addContact($_SESSION["uid"], $domaincontactfirstname, $domaincontactlastname, $domaincontactcompanyname, $domaincontactemail, $domaincontactaddress1, $domaincontactaddress2, $domaincontactcity, $domaincontactstate, $domaincontactpostcode, $domaincontactcountry, $domaincontactphonenumber); } $_SESSION["cart"]["contact"] = $contact; define("INORDERFORM", true); $carttotals = calcCartTotals(true); if( $ccinfo == "new" && !$nostore ) { updateCCDetails($_SESSION["uid"], $cctype, $ccnumber, $cccvv, $ccexpirymonth . $ccexpiryyear, $ccstartmonth . $ccstartyear, $ccissuenum); } $orderid = $_SESSION["orderdetails"]["OrderID"]; $fraudmodule = getActiveFraudModule(); if( $CONFIG["SkipFraudForExisting"] ) { $result = select_query("tblorders", "COUNT(*)", array( "status" => "Active", "userid" => $_SESSION["uid"] )); $data = mysql_fetch_array($result); if( $data[0] ) { $fraudmodule = ""; } } $result = full_query("SELECT COUNT(*) FROM tblinvoices INNER JOIN tblorders ON tblorders.invoiceid=tblinvoices.id WHERE tblorders.id='" . db_escape_string($orderid) . "' AND tblinvoices.status='Paid' AND subtotal>0"); $data = mysql_fetch_array($result); if( $data[0] ) { $fraudmodule = ""; } if( !$fraudmodule ) { if( $ajax ) { exit(); } redir("a=complete"); } logActivity("Order ID " . $orderid . " Fraud Check Initiated"); update_query("tblorders", array( "status" => "Fraud" ), array( "id" => $orderid )); if( $_SESSION["orderdetails"]["Products"] ) { foreach( $_SESSION["orderdetails"]["Products"] as $productid ) { update_query("tblhosting", array( "domainstatus" => "Fraud" ), array( "id" => $productid, "domainstatus" => "Pending" )); } } if( $_SESSION["orderdetails"]["Addons"] ) { foreach( $_SESSION["orderdetails"]["Addons"] as $addonid ) { update_query("tblhostingaddons", array( "status" => "Fraud" ), array( "id" => $addonid, "status" => "Pending" )); } } if( $_SESSION["orderdetails"]["Domains"] ) { foreach( $_SESSION["orderdetails"]["Domains"] as $domainid ) { update_query("tbldomains", array( "status" => "Fraud" ), array( "id" => $domainid, "status" => "Pending" )); } } update_query("tblinvoices", array( "status" => "Cancelled" ), array( "id" => $_SESSION["orderdetails"]["InvoiceID"], "status" => "Unpaid" )); $fraud = new WHMCS\Module\Fraud(); if( $fraud->load($fraudmodule) ) { $results = $fraud->doFraudCheck($orderid); $_SESSION["orderdetails"]["fraudcheckresults"] = $results; } if( $ajax ) { exit(); } redir("a=fraudcheck"); } if( !$paymentmethod ) { $errormessage .= "
  • No payment gateways available so order cannot proceed"; } } $smartyvalues["errormessage"] = $errormessage; if( $allowcheckout ) { $hookResponses = run_hook("ShoppingCartCheckoutOutput", array( "cart" => WHMCS\Session::get("cart") )); $smartyvalues["hookOutput"] = $hookResponses; } else { $hookResponses = run_hook("ShoppingCartViewCartOutput", array( "cart" => WHMCS\Session::get("cart") )); $smartyvalues["hookOutput"] = $hookResponses; } if( isset($_POST["qty"]) && is_array($_POST["qty"]) ) { check_token(); $didQtyChangeRemoveProducts = false; $temporderfrm = new WHMCS\OrderForm(); $insufficientstock = false; foreach( $_POST["qty"] as $i => $qty ) { $i = (int) $i; $qty = (int) $qty; if( is_array($_SESSION["cart"]["products"][$i]) ) { if( 0 < $qty ) { $productinfo = $temporderfrm->setPid($_SESSION["cart"]["products"][$i]["pid"]); if( !empty($productinfo) && $productinfo["stockcontrol"] ) { if( !isset($productinfo["qty"]) ) { $productinfo["qty"] = 0; } if( $productinfo["qty"] < $qty ) { $qty = $productinfo["qty"]; $insufficientstock = true; } } $_SESSION["cart"]["products"][$i]["qty"] = $qty; } else { if( $qty == 0 ) { unset($_SESSION["cart"]["products"][$i]); $didQtyChangeRemoveProducts = true; } } } } if( $didQtyChangeRemoveProducts ) { $_SESSION["cart"]["products"] = array_values($_SESSION["cart"]["products"]); } redir("a=view" . (($insufficientstock ? "&insufficientstock=1" : ""))); } $smartyvalues["promoaddedsuccess"] = false; if( $promocode ) { $promoerrormessage = SetPromoCode($promocode); if( $promoerrormessage ) { $smartyvalues["promoerrormessage"] = $promoerrormessage; $smartyvalues["errormessage"] = "
  • " . $promoerrormessage; } else { $smartyvalues["promoaddedsuccess"] = true; } if( $paymentmethod ) { $_SESSION["cart"]["paymentmethod"] = $paymentmethod; } if( $notes ) { $_SESSION["cart"]["notes"] = $notes; } if( $firstname ) { $phonenumber = App::formatPostedPhoneNumber(); $_SESSION["cart"]["user"] = array( "firstname" => $firstname, "lastname" => $lastname, "companyname" => $companyname, "email" => $email, "address1" => $address1, "address2" => $address2, "city" => $city, "state" => $state, "postcode" => $postcode, "country" => $country, "phonenumber" => $phonenumber ); } } $smartyvalues["promotioncode"] = $orderfrm->getCartDataByKey("promo"); $cartsummary = $whmcs->get_req_var("cartsummary"); $ignorenoconfig = ($cartsummary ? true : false); $carttotals = calcCartTotals("", $ignorenoconfig); $promotype = $carttotals["promotype"]; $promovalue = $carttotals["promovalue"]; $promorecurring = $carttotals["promorecurring"]; if( isset($carttotals["productRemovedFromCart"]) && $carttotals["productRemovedFromCart"] ) { $smartyvalues["errormessage"] .= "
  • " . $whmcs->get_lang("outOfStockProductRemoved") . "
  • "; } $promodescription = ($promotype == "Percentage" ? $promovalue . "%" : $promovalue); if( $promotype == "Price Override" ) { $promodescription .= " " . $_LANG["orderpromopriceoverride"]; } else { if( $promotype == "Free Setup" ) { $promodescription = $_LANG["orderpromofreesetup"]; } } $promodescription .= " " . $promorecurring . " " . $_LANG["orderdiscount"]; $smartyvalues["promotiondescription"] = $promodescription; $amountOfCredit = 0; $canUseCreditOnCheckout = false; if( WHMCS\Session::get("uid") ) { $amountOfCredit = $clientsdetails["credit"]; if( 0 < $amountOfCredit ) { $canUseCreditOnCheckout = true; } } $smartyvalues["canUseCreditOnCheckout"] = $canUseCreditOnCheckout; $smartyvalues["creditBalance"] = new WHMCS\View\Formatter\Price($amountOfCredit, $currency); $smartyvalues["applyCredit"] = (App::isInRequest("applycredit") ? (bool) App::getFromRequest("applycredit") : true); foreach( $carttotals as $k => $v ) { $smartyvalues[$k] = $v; } $hasProductQuantities = false; foreach( $carttotals["products"] as $product ) { if( $product["allowqty"] ) { $hasProductQuantities = true; } } $smartyvalues["showqtyoptions"] = $hasProductQuantities; $smartyvalues["taxenabled"] = $CONFIG["TaxEnabled"]; $paymentmethod = $_SESSION["cart"]["paymentmethod"]; if( !$paymentmethod ) { foreach( $availablegateways as $k => $v ) { $paymentmethod = $k; break; } } $smartyvalues["selectedgateway"] = $paymentmethod; $smartyvalues["selectedgatewaytype"] = $availablegateways[$paymentmethod]["type"]; if( empty($_SESSION["paypalexpress"]["payerid"]) ) { $smartyvalues["gateways"] = array_filter($availablegateways, function($item) { return $item["sysname"] != "paypalexpress"; } ); } else { $smartyvalues["gateways"] = array_filter($availablegateways, function($item) { return $item["sysname"] == "paypalexpress"; } ); $smartyvalues["selectedgateway"] = "paypalexpress"; } $smartyvalues["ccinfo"] = $ccinfo; $smartyvalues["cctype"] = $cctype; $smartyvalues["ccnumber"] = $ccnumber; $smartyvalues["ccexpirymonth"] = $ccexpirymonth; $smartyvalues["ccexpiryyear"] = $ccexpiryyear; $smartyvalues["ccstartmonth"] = $ccstartmonth; $smartyvalues["ccstartyear"] = $ccstartyear; $smartyvalues["ccissuenum"] = $ccissuenum; $smartyvalues["cccvv"] = $cccvv; $smartyvalues["acceptedcctypes"] = explode(",", $CONFIG["AcceptedCardTypes"]); $smartyvalues["showccissuestart"] = $CONFIG["ShowCCIssueStart"]; $smartyvalues["shownostore"] = $CONFIG["CCAllowCustomerDelete"]; $smartyvalues["months"] = $gateways->getCCDateMonths(); $smartyvalues["startyears"] = $gateways->getCCStartDateYears(); $smartyvalues["years"] = $gateways->getCCExpiryDateYears(); $smartyvalues["expiryyears"] = $smartyvalues["years"]; $cartitems = $orderfrm->getNumItemsInCart(); if( !$cartitems ) { $allowcheckout = false; } $smartyvalues["cartitems"] = $cartitems; $smartyvalues["checkout"] = $allowcheckout; if( $_SESSION["uid"] ) { $clientsdetails = getClientsDetails(); $clientsdetails["country"] = $clientsdetails["countryname"]; $custtype = "existing"; $smartyvalues["loggedin"] = true; } else { $clientsdetails = $_SESSION["cart"]["user"]; $customfields = getCustomFields("client", "", "", "", "on", $customfield); $_SESSION["loginurlredirect"] = "cart.php?a=login"; if( !$custtype ) { $custtype = "new"; } } $smartyvalues["custtype"] = $custtype; $smartyvalues["clientsdetails"] = $clientsdetails; $smartyvalues["loginfailed"] = $loginfailed; $countries = new WHMCS\Utility\Country(); $smartyvalues["countries"] = $countries->getCountryNameArray(); $smartyvalues["defaultcountry"] = WHMCS\Config\Setting::getValue("DefaultCountry"); if( !isset($country) ) { $country = (isset($clientsdetails["countrycode"]) ? $clientsdetails["countrycode"] : $clientsdetails["country"]); } $smartyvalues["clientcountrydropdown"] = getCountriesDropDown($country); $smartyvalues["country"] = $country; $smartyvalues["password"] = $password; $smartyvalues["password2"] = $password2; $smartyvalues["securityqans"] = $securityqans; $smartyvalues["securityqid"] = $securityqid; $smartyvalues["customfields"] = $customfields; $smartyvalues["securityquestions"] = $securityquestions; $smartyvalues["shownotesfield"] = $CONFIG["ShowNotesFieldonCheckout"]; $smartyvalues["orderNotes"] = $notes; $smartyvalues["notes"] = (0 < strlen($notes) ? $notes : $_LANG["ordernotesdescription"]); $smartyvalues["accepttos"] = $CONFIG["EnableTOSAccept"]; $smartyvalues["tosurl"] = $CONFIG["TermsOfService"]; $smartyvalues["domainsinorder"] = 0 < count($orderfrm->getCartDataByKey("domains", array( ))); $domaincontacts = array( ); $result = select_query("tblcontacts", "", array( "userid" => $_SESSION["uid"], "address1" => array( "sqltype" => "NEQ", "value" => "" ) ), "firstname` ASC,`lastname", "ASC"); while( $data = mysql_fetch_array($result) ) { $domaincontacts[] = array( "id" => $data["id"], "name" => $data["firstname"] . " " . $data["lastname"] ); } $smartyvalues["domaincontacts"] = $domaincontacts; $smartyvalues["contact"] = $contact; if( $contact == "addingnew" ) { $addcontact = true; } $smartyvalues["addcontact"] = $addcontact; $smartyvalues["domaincontact"] = array( "firstname" => $domaincontactfirstname, "lastname" => $domaincontactlastname, "companyname" => $domaincontactcompanyname, "email" => $domaincontactemail, "address1" => $domaincontactaddress1, "address2" => $domaincontactaddress2, "city" => $domaincontactcity, "state" => $domaincontactstate, "postcode" => $domaincontactpostcode, "country" => $domaincontactcountry, "phonenumber" => $domaincontactphonenumber ); $smartyvalues["domaincontactcountrydropdown"] = getCountriesDropDown($domaincontactcountry, "domaincontactcountry"); $gatewaysoutput = $checkoutOutput = array( ); foreach( $availablegateways as $module => $vals ) { $gatewayModule = new WHMCS\Module\Gateway(); $gatewayModule->load($module); $params = $gatewayModule->loadSettings(); $params["amount"] = $carttotals["rawtotal"]; $params["currency"] = $currency["code"]; if( isset($params["convertto"]) && $params["convertto"] ) { $currencyCode = WHMCS\Database\Capsule::table("tblcurrencies")->where("id", "=", (int) $params["convertto"])->value("code"); $convertToAmount = convertCurrency($carttotals["rawtotal"], $currency["id"], $params["convertto"]); $params["amount"] = format_as_currency($convertToAmount); $params["currency"] = $currencyCode; $params["currencyId"] = (int) $params["convertto"]; $params["basecurrencyamount"] = format_as_currency($carttotals["rawtotal"]); $params["basecurrency"] = $currency["code"]; $params["baseCurrencyId"] = $currency["id"]; } if( !isset($params["currency"]) || !$params["currency"] ) { $params["amount"] = format_as_currency($carttotals["rawtotal"]); $params["currency"] = $currency["code"]; $params["currencyId"] = $currency["id"]; } if( $userid ) { $params["gatewayid"] = WHMCS\User\Client::find($userid)->paymentGatewayToken; } $params["isCheckout"] = (bool) $allowcheckout; if( $gatewayModule->functionExists("orderformoutput") ) { $output = $gatewayModule->call("orderformoutput", $params); if( $output ) { $gatewaysoutput[] = $output; } } if( $gatewayModule->functionExists("checkout_output") ) { $output = $gatewayModule->call("checkout_output", $params); if( $output ) { $checkoutOutput[$gatewayModule->getLoadedModule()] = $output; } } } $smartyvalues["gatewaysoutput"] = $gatewaysoutput; $smartyvalues["checkoutOutput"] = $checkoutOutput; $smartyvalues["clientsProfileOptionalFields"] = explode(",", WHMCS\Config\Setting::getValue("ClientsProfileOptionalFields")); if( $cartsummary ) { $ajax = "1"; $templatefile = "cartsummary"; $productinfo = $orderfrm->setPid($_SESSION["cart"]["cartsummarypid"]); $orderFormTemplateName = ($productinfo["orderfrmtpl"] == "" ? $orderFormTemplateName : $productinfo["orderfrmtpl"]); } } if( $a == "login" ) { if( $_SESSION["uid"] ) { redir("a=checkout"); } $templatefile = "login"; $_SESSION["loginurlredirect"] = "cart.php?a=login"; if( $incorrect ) { $smartyvalues["incorrect"] = true; } } if( $a == "fraudcheck" ) { $orderid = $_SESSION["orderdetails"]["OrderID"]; $results = (isset($_SESSION["orderdetails"]["fraudcheckresults"]) ? $_SESSION["orderdetails"]["fraudcheckresults"] : ""); unset($_SESSION["orderdetails"]["fraudcheckresults"]); if( !$results ) { $fraudmodule = getActiveFraudModule(); if( $CONFIG["SkipFraudForExisting"] ) { $result = select_query("tblorders", "COUNT(*)", array( "status" => "Active", "userid" => $_SESSION["uid"] )); $data = mysql_fetch_array($result); if( $data[0] ) { $fraudmodule = ""; } } $result = full_query("SELECT COUNT(*) FROM tblinvoices INNER JOIN tblorders ON tblorders.invoiceid=tblinvoices.id WHERE tblorders.id='" . db_escape_string($orderid) . "' AND tblinvoices.status='Paid' AND subtotal>0"); $data = mysql_fetch_array($result); if( $data[0] ) { $fraudmodule = ""; } if( !$fraudmodule ) { redir("a=complete"); } $fraud = new WHMCS\Module\Fraud(); if( $fraud->load($fraudmodule) ) { $results = $fraud->doFraudCheck($orderid); } } $hookresults = array( "orderid" => $orderid, "ordernumber" => $_SESSION["orderdetails"]["OrderNumber"], "fraudresults" => $_SESSION["orderdetails"]["fraudcheckresults"], "invoiceid" => $_SESSION["orderdetails"]["InvoiceID"], "amount" => $_SESSION["orderdetails"]["TotalDue"], "fraudresults" => $results, "isfraud" => $results["error"], "clientdetails" => getClientsDetails($_SESSION["uid"]) ); run_hook("AfterFraudCheck", $hookresults); $error = $results["error"]; if( $results["userinput"] ) { logActivity("Order ID " . $orderid . " Fraud Check Awaiting User Input"); run_hook("FraudCheckAwaitingUserInput", $hookresults); $templatefile = "fraudcheck"; $smarty->assign("errortitle", $results["title"]); $smarty->assign("error", $results["description"]); outputClientArea($templatefile); exit(); } if( $error ) { logActivity("Order ID " . $orderid . " Failed Fraud Check"); run_hook("FraudCheckFailed", $hookresults); $templatefile = "fraudcheck"; $smarty->assign("errortitle", $error["title"]); $smarty->assign("error", $error["description"]); $smartyvalues["carttpl"] = $orderFormTemplateName; outputClientArea($templatefile); exit(); } update_query("tblorders", array( "status" => "Pending" ), array( "id" => $orderid )); if( $_SESSION["orderdetails"]["Products"] ) { foreach( $_SESSION["orderdetails"]["Products"] as $productid ) { update_query("tblhosting", array( "domainstatus" => "Pending" ), array( "id" => $productid, "domainstatus" => "Fraud" )); } } if( $_SESSION["orderdetails"]["Addons"] ) { foreach( $_SESSION["orderdetails"]["Addons"] as $addonid ) { update_query("tblhostingaddons", array( "status" => "Pending" ), array( "id" => $addonid, "status" => "Fraud" )); } } if( $_SESSION["orderdetails"]["Domains"] ) { foreach( $_SESSION["orderdetails"]["Domains"] as $domainid ) { update_query("tbldomains", array( "status" => "Pending" ), array( "id" => $domainid, "status" => "Fraud" )); } } update_query("tblinvoices", array( "status" => "Unpaid" ), array( "id" => $_SESSION["orderdetails"]["InvoiceID"], "status" => "Cancelled" )); logActivity("Order ID " . $orderid . " Passed Fraud Check"); run_hook("FraudCheckPassed", $hookresults); redir("a=complete"); } if( $a == "complete" ) { $remoteAuth = DI::make("remoteAuth"); $remoteAuth->linkRemoteAccounts(); $remoteAuthData = (new WHMCS\Authentication\Remote\Management\Client\ViewHelper())->getTemplateData(); foreach( $remoteAuthData as $key => $value ) { $smartyvalues[$key] = $value; } if( !is_array($_SESSION["orderdetails"]) ) { redir(); } $orderid = $_SESSION["orderdetails"]["OrderID"]; $invoiceid = $_SESSION["orderdetails"]["InvoiceID"]; $paymentmethod = $_SESSION["orderdetails"]["PaymentMethod"]; if( WHMCS\Session::get("InOrderButNeedProcessPaidInvoiceAction") && 0 < (int) $invoiceid ) { processPaidInvoice($invoiceid); } $total = 0; if( $invoiceid ) { $result = select_query("tblinvoices", "id,total,paymentmethod,status", array( "userid" => $_SESSION["uid"], "id" => $invoiceid )); $data = mysql_fetch_array($result); $invoiceid = $data["id"]; $total = $data["total"]; $paymentmethod = $data["paymentmethod"]; $status = $data["status"]; if( !$invoiceid ) { exit( "Invalid Invoice ID" ); } $clientsdetails = getClientsDetails($_SESSION["uid"]); } $paymentmethod = WHMCS\Gateways::makeSafeName($paymentmethod); if( !$paymentmethod ) { exit( "Unexpected payment method value. Exiting." ); } $result = select_query("tblhosting", "tblhosting.id,tblproducts.servertype", array( "tblhosting.orderid" => $orderid, "tblhosting.domainstatus" => "Pending", "tblproducts.autosetup" => "order" ), "", "", "", "tblproducts ON tblproducts.id=tblhosting.packageid"); while( $data = mysql_fetch_array($result) ) { $id = $data["id"]; $servertype = $data["servertype"]; if( getNewClientAutoProvisionStatus($_SESSION["uid"]) ) { logActivity("Running Module Create on Order"); if( !isValidforPath($servertype) ) { exit( "Invalid Server Module Name" ); } include_once(ROOTDIR . "/modules/servers/" . $servertype . "/" . $servertype . ".php"); $moduleresult = ServerCreateAccount($id); if( $moduleresult == "success" ) { sendMessage("defaultnewacc", $id); } } else { logActivity("Module Create on Order Suppressed for New Client"); } $addons = WHMCS\Service\Addon::whereHas("productAddon", function(Illuminate\Database\Eloquent\Builder $query) { $query->where("autoactivate", "order"); } )->with("productAddon.welcomeEmailTemplate", "productAddon")->where("orderid", "=", $orderid)->where("status", "=", "Pending")->where("addonid", ">", 0)->get(); foreach( $addons as $addon ) { if( !$addon->productAddon ) { continue; } $noModule = true; $automationResult = false; if( $addon->productAddon->module ) { $noModule = false; if( getNewClientAutoProvisionStatus($_SESSION["uid"]) ) { $automationResult = WHMCS\Service\Automation\AddonAutomation::factory($addon)->runAction("CreateAccount"); } else { logActivity("Module Create on Order Suppressed for New Client"); } } if( $noModule || $automationResult ) { if( $addon->productAddon->welcomeEmailTemplateId ) { sendMessage($addon->productAddon->welcomeEmailTemplate, $id); } if( $noModule ) { $addon->status = "Active"; $addon->save(); $params = array( "id" => $addon->id, "userid" => $_SESSION["uid"], "serviceid" => $id, "addonid" => $addon->addonId ); run_hook("AddonActivation", $params); } } } } $gateway = new WHMCS\Module\Gateway(); $gateway->load($paymentmethod); if( $invoiceid && $status == "Unpaid" && $gateway->functionExists("orderformcheckout") ) { $invoice = new WHMCS\Invoice($invoiceid); try { $params = $invoice->initialiseGatewayAndParams(); } catch( Exception $e ) { logActivity("Failed to initialise payment gateway module: " . $e->getMessage()); throw new WHMCS\Exception\Fatal("Could not initialise payment gateway. Please contact support."); } $params = array_merge($params, $invoice->getGatewayInvoiceParams()); $params["gatewayid"] = $params["clientdetails"]["gatewayid"]; $captureresult = $gateway->call("orderformcheckout", $params); if( is_array($captureresult) ) { logTransaction($paymentmethod, $captureresult["rawdata"], ucfirst($captureresult["status"])); if( $captureresult["status"] == "success" ) { addInvoicePayment($invoiceid, $captureresult["transid"], (isset($captureresult["amount"]) ? $captureresult["amount"] : ""), $captureresult["fee"], $paymentmethod); $_SESSION["orderdetails"]["paymentcomplete"] = true; $status = "Paid"; } } } if( $invoiceid && $status == "Unpaid" ) { $gatewaytype = get_query_val("tblpaymentgateways", "value", array( "gateway" => $paymentmethod, "setting" => "type" )); if( !isValidforPath($paymentmethod) ) { exit( "Invalid Payment Gateway Name" ); } $gatewaypath = ROOTDIR . "/modules/gateways/" . $paymentmethod . ".php"; if( file_exists($gatewaypath) && !function_exists($paymentmethod . "_config") && !function_exists($paymentmethod . "_link") && !function_exists($paymentmethod . "_capture") ) { include_once($gatewaypath); } if( ($gatewaytype == "CC" || $gatewaytype == "OfflineCC") && ($CONFIG["AutoRedirectoInvoice"] == "on" || $CONFIG["AutoRedirectoInvoice"] == "gateway") && !function_exists($paymentmethod . "_nolocalcc") ) { redir("invoiceid=" . $invoiceid, "creditcard.php"); } if( $CONFIG["AutoRedirectoInvoice"] == "on" ) { redir("id=" . $invoiceid, "viewinvoice.php"); } if( $CONFIG["AutoRedirectoInvoice"] == "gateway" ) { if( in_array($paymentmethod, array( "mailin", "banktransfer" )) ) { redir("id=" . $invoiceid, "viewinvoice.php"); } $invoice = new WHMCS\Invoice($invoiceid); $paymentbutton = $invoice->getPaymentLink(); unset($orderform); $templatefile = "forwardpage"; $smarty->assign("message", $_LANG["forwardingtogateway"]); $smarty->assign("code", $paymentbutton); $smarty->assign("invoiceid", $invoiceid); outputClientArea($templatefile); exit(); } } $amount = get_query_val("tblorders", "amount", array( "userid" => $_SESSION["uid"], "id" => $orderid )); $ispaid = false; if( $invoiceid ) { $invoiceStatus = get_query_val("tblinvoices", "status", array( "id" => $invoiceid )); $ispaid = ($invoiceStatus == "Paid" ? true : false); if( $ispaid ) { $_SESSION["orderdetails"]["paymentcomplete"] = true; } } $templatefile = "complete"; $smartyvalues = array_merge($smartyvalues, array( "orderid" => $orderid, "ordernumber" => $_SESSION["orderdetails"]["OrderNumber"], "invoiceid" => $invoiceid, "ispaid" => $ispaid, "amount" => $amount, "paymentmethod" => $paymentmethod, "clientdetails" => getClientsDetails($_SESSION["uid"]) )); $addons_html = run_hook("ShoppingCartCheckoutCompletePage", $smartyvalues); $smartyvalues["addons_html"] = $addons_html; } if( !$templatefile ) { redir(); } $nowrapper = (isset($_REQUEST["ajax"]) ? true : false); try { $smartyvalues["carttpl"] = WHMCS\View\Template\OrderForm::factory($templatefile . ".tpl", $orderFormTemplateName)->getName(); } catch( WHMCS\Exception\View\TemplateNotFound $e ) { $smartyvalues["carttpl"] = $orderFormTemplateName; } $smartyvalues["phoneNumberInputStyle"] = (int) WHMCS\Config\Setting::getValue("PhoneNumberDropdown"); Menu::addContext("productGroups", $orderfrm->getProductGroups(true)); Menu::addContext("productGroupId", $smartyvalues["gid"]); Menu::addContext("domainRegistrationEnabled", $smartyvalues["registerdomainenabled"]); Menu::addContext("domainTransferEnabled", $smartyvalues["transferdomainenabled"]); Menu::addContext("domainRenewalEnabled", $smartyvalues["renewalsenabled"]); Menu::addContext("domain", $smartyvalues["domain"]); Menu::addContext("currency", $smartyvalues["currency"]); Menu::addContext("action", $a); if( $whmcs->isInRequest("i") ) { Menu::addContext("productInfoKey", $productInfoKey); } Menu::addContext("productId", $pid); Menu::addContext("domainAction", $whmcs->get_req_var("domain")); Menu::addContext("allowRemoteAuth", $allowcheckout); Menu::primarySidebar("orderFormView"); Menu::secondarySidebar("orderFormView"); outputClientArea($templatefile, $nowrapper, array( "ClientAreaPageCart" )); ?>