%PDF- %PDF-
Direktori : /home/bitrix/www/bitrix/modules/sale/lib/delivery/extra_services/ |
Current File : //home/bitrix/www/bitrix/modules/sale/lib/delivery/extra_services/enum.php |
<?php namespace Bitrix\Sale\Delivery\ExtraServices; use Bitrix\Main\SystemException; use Bitrix\Main\Localization\Loc; Loc::loadMessages(__FILE__); class Enum extends Base { public function __construct($id, array $structure, $currency, $value = null, array $additionalParams = array()) { $prices = !empty($structure["PARAMS"]["PRICES"]) && is_array($structure["PARAMS"]["PRICES"]) ? $structure["PARAMS"]["PRICES"] : array(); $structure["PARAMS"]["ONCHANGE"] = $this->createJSOnchange($id, $prices); parent::__construct($id, $structure, $currency, $value); $this->params["TYPE"] = "ENUM"; $this->params["OPTIONS"] = array(); } public function getClassTitle() { return Loc::getMessage("DELIVERY_EXTRA_SERVICE_ENUM_TITLE"); } public function getCost() { if(!isset($this->params["PRICES"]) || !is_array($this->params["PRICES"])) throw new SystemException("Service id: ".$this->id." doesn't have field array PRICES"); if(isset($this->params["PRICES"][$this->value]["PRICE"])) { $result = $this->params["PRICES"][$this->value]["PRICE"]; } else { reset($this->params["PRICES"]); $result = $this->params["PRICES"][key($this->params["PRICES"])]["PRICE"]; } return $this->convertToOperatingCurrency($result); } public static function prepareParamsToSave(array $params) { if(!isset($params["PARAMS"]["PRICES"]) || !is_array($params["PARAMS"]["PRICES"])) return $params; foreach($params["PARAMS"]["PRICES"] as $id => $price) if(strlen($price["TITLE"]) <= 0) unset($params["PARAMS"]["PRICES"][$id]); return $params; } public static function getAdminParamsName() { return Loc::getMessage("DELIVERY_EXTRA_SERVICE_ENUM_LIST"); } public static function getAdminParamsControl($name, array $params, $currency = "") { $result = '<div style="border: 1px solid #e0e8ea; padding: 10px; width: 500px;">'; if(isset($params["PARAMS"]["PRICES"]) && is_array($params["PARAMS"]["PRICES"])) { foreach($params["PARAMS"]["PRICES"] as $id => $price) { if(!isset($params["PARAMS"]["PRICES"][$id])) $params["PARAMS"]["PRICES"][$id] = 0; $result .= self::getValueHtml($name, $id, $price["TITLE"], $price["PRICE"], $currency)."<br><br>"; } } $i = strval(mktime()); $result .= self::getValueHtml($name, $i, "", "", $currency)."<br><br>". '<input type="button" value="'.Loc::getMessage("DELIVERY_EXTRA_SERVICE_ENUM_ADD"). '" onclick=\'var d=new Date(); '. 'this.parentNode.insertBefore(BX.create("span",{html: this.nextElementSibling.innerHTML.replace(/\#ID\#/g, d.getTime())}), this);\'>'. '<span style="display:none;">'.self::getValueHtml($name, '#ID#')."<br><br>".'</span><br><br></div>'; return $result; } protected static function getValueHtml($name, $id, $title = "", $price = "", $currency = "") { $price = roundEx(floatval($price), SALE_VALUE_PRECISION); $currency = htmlspecialcharsbx($currency); return Loc::getMessage("DELIVERY_EXTRA_SERVICE_ENUM_NAME"). ': <input name="'.$name.'[PARAMS][PRICES]['.$id.'][TITLE]" value="'.htmlspecialcharsbx($title).'"> '. Loc::getMessage("DELIVERY_EXTRA_SERVICE_ENUM_PRICE"). ': <input name="'.$name.'[PARAMS][PRICES]['.$id.'][PRICE]" value="'.$price.'">'.(strlen($currency) > 0 ? " (".$currency.")" : ""); } protected static function getJSPrice(array $prices) { if(empty($prices)) return ""; foreach($prices as $id => $price) $prices[$id] = roundEx(floatval($price), SALE_VALUE_PRECISION); return "(function(value){var prices=".\CUtil::PhpToJSObject($prices)."; return prices[value]['PRICE'];})(this.value)"; } public function setOperatingCurrency($currency) { if(!empty($this->params["PRICES"]) && is_array($this->params["PRICES"])) { $prices = array(); foreach($this->params["PRICES"] as $id => $price) $prices[$id] = $this->convertToOperatingCurrency($price); $this->params["ONCHANGE"] = $this->createJSOnchange($this->id, $prices); } $this->createOptions(); parent::setOperatingCurrency($currency); } protected function createOptions() { $this->params["OPTIONS"] = array(); if(empty($this->params["PRICES"]) || !is_array($this->params["PRICES"])) return; foreach($this->params["PRICES"] as $key => $price) { if(strlen($price["TITLE"]) <= 0) continue; $priceVal = floatval($price["PRICE"]); $this->params["OPTIONS"][$key] = $price["TITLE"]. " (". strip_tags( SaleFormatCurrency( $this->convertToOperatingCurrency($priceVal), $this->operatingCurrency, false ) ). ")"; } } public function getEditControl($prefix = "", $value = false) { $this->createOptions(); return parent::getEditControl($prefix, $value); } public function getViewControl() { $this->createOptions(); return parent::getViewControl(); } protected function createJSOnchange($id, array $prices) { return "BX.onCustomEvent('onDeliveryExtraServiceValueChange', [{'id' : '".$id."', 'value': this.value, 'price': ".$this->getJSPrice($prices)."}]);"; } }