/** * notifyBuyers * * @param array $order_ids * @param integer $status * @return boolean */ public function notifyBuyers($order_ids, $status) { $output = true; if (!is_array($order_ids)) { $order_ids = array($order_ids); } //Параметры сниппета Shopkeeper3 $snippet_properties = array(); $response = $this->modx->runProcessor('getsnippetproperties', array(), array('processors_path' => $this->modx->getOption('core_path') . 'components/shopkeeper3/processors/mgr/')); if (!$response->isError()) { $snippet_properties = $response->getObject(); } require_once $this->modx->getOption('core_path') . "components/shopkeeper3/model/shopkeeper.class.php"; $shopCart = new Shopkeeper($this->modx, $snippet_properties); $config = $shopCart->getConfig(array('statuses')); foreach ($order_ids as $order_id) { //Данные заказа $response = $this->modx->runProcessor('getorder', array('order_id' => $order_id), array('processors_path' => $this->modx->getOption('core_path') . 'components/shopkeeper3/processors/mgr/')); if ($response->isError()) { $output = false; break; } else { $order_data = $response->getObject(); if (empty($order_data['email'])) { continue; } //Параметры статуса $status_data = array(); foreach ($config['statuses'] as $st) { if ($st['id'] == $status) { $status_data = $st; break; } } if (empty($status_data) || empty($status_data['tpl'])) { continue; } $mainChunk = $shopCart->getChunk($status_data['tpl']); //Данные товаров заказа $purchasesArray = $order_data['purchases']; foreach ($purchasesArray as &$purchase) { if (!empty($purchase['options'])) { $p_options = $shopCart->getPurchasesOptionsData($purchase['options']); $purchase = array_merge($purchase, $p_options); unset($purchase['options']); } } //Формируем письмо $orderOutputData = $shopCart->getOrderData($order_id); $chunkArr = array('orderID' => $order_data['id'], 'orderDate' => $order_data['date'], 'statusName' => $status_data['label'], 'orderCurrency' => $shopCart->config['currency'], 'orderOutputData' => $orderOutputData); unset($order_data['contacts'], $order_data['purchases']); $chunkArr = array_merge($order_data, $chunkArr); $mail_body = $shopCart->parseTpl($mainChunk, $chunkArr, $status_data['tpl']); $subject = $this->modx->lexicon('shk3.order_change_status'); $this->SHKsendMail($subject, $mail_body, $order_data['email']); } } return $output; }
function shk_currency_calc($properties, $base_price, $currency_id, $rate_ratio = 0) { $inverse = isset($properties['inverse']) ? $properties['inverse'] : false; //обратный перевод цены if (!$rate_ratio) { if (isset($_SESSION['shk_curr_rate']) && is_numeric($_SESSION['shk_curr_rate']) && !$inverse) { $rate_ratio = $_SESSION['shk_curr_rate']; } else { if (!isset($properties['currency_rate'])) { require_once MODX_CORE_PATH . "components/shopkeeper3/model/shopkeeper.class.php"; $config = Shopkeeper::getConfig(array('currency_rate')); $properties['currency_rate'] = $config['currency_rate']; } $rate_ratio = 1; if ($properties['currency_default'] != $currency_id) { $rate_default = 1; $rate = 1; //Определяем курс по умолчанию и новый курс foreach ($properties['currency_rate'] as $rt) { if ($rt['id'] == $properties['currency_default']) { $rate_default = Shopkeeper::cleanNumber($rt['value'], 'float'); } else { if ($rt['id'] == $currency_id) { $rate = Shopkeeper::cleanNumber($rt['value'], 'float'); } } } if (!$inverse) { $rate_ratio = $rate_default / $rate; $_SESSION['shk_curr_rate'] = $rate_ratio; } else { $rate_ratio = $rate / $rate_default; } } } } //Считаем цену по курсу if ($rate_ratio) { $price = $base_price * $rate_ratio; $price = round($price, ceil($price) == $price ? 0 : 2); return $price; } else { return $base_price; } }
* Сниппет выводит данные из конфигурации Shopkeeper * */ $output = array(); $get = explode(',', $modx->getOption('get', $scriptProperties, '')); $post_name = explode(',', $modx->getOption('post_name', $scriptProperties, $get)); $get = array_map('trim', $get); $post_name = array_map('trim', $post_name); $tpl = $modx->getOption('tpl', $scriptProperties, ''); $toPlaceholders = $modx->getOption('toPlaceholders', $scriptProperties, false); $pl_prefix = $modx->getOption('pl_prefix', $scriptProperties, 'shkopt_'); if (empty($get)) { return ''; } if (class_exists('Shopkeeper')) { $config = Shopkeeper::getConfig($get); //echo '<pre>' . print_r( $config, true ) . '</pre>'; if (!empty($config)) { foreach ($get as $index => $opt_name) { if (!empty($config[$opt_name])) { $output[$opt_name] = ''; foreach ($config[$opt_name] as $key => $conf) { if (empty($conf['value'])) { $conf['value'] = $conf['label']; } $conf['selected'] = isset($post_name[$index]) && isset($_POST[$post_name[$index]]) && $_POST[$post_name[$index]] == $conf['value'] ? 'selected="selected"' : ''; $output[$opt_name] .= $modx->getChunk($tpl, $conf) . PHP_EOL . "\t"; } } } }