/** * 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; }
//Сохраняем товары заказа if ($saved) { $purchasesData = $shopCart->getProductsData(true); foreach ($shopCart->data as $key => $p_data) { $options = !empty($p_data['options']) ? json_encode($p_data['options']) : ''; $fields_data = !empty($purchasesData[$key]) ? $purchasesData[$key] : array(); $fields_data['url'] = !empty($p_data['url']) ? $p_data['url'] : ''; unset($fields_data['id']); $fields_data_str = json_encode($fields_data); $insert_data = array('p_id' => $p_data['id'], 'order_id' => $order->id, 'name' => $p_data['name'], 'price' => $p_data['price'], 'count' => $p_data['count'], 'class_name' => $p_data['className'], 'package_name' => $p_data['packageName'], 'data' => $fields_data_str, 'options' => $options); $purchase = $modx->newObject('shk_purchases'); $purchase->fromArray($insert_data); $purchase->save(); } $shopCart->setOrderDataSession($order->toArray()); } $modx->invokeEvent('OnSHKChangeStatus', array('order_ids' => array($order->id), 'status' => $order->status)); $orderOutputData = $shopCart->getOrderData($order->id); //OnSHKsaveOrder $evtOut = $modx->invokeEvent('OnSHKsaveOrder', array('order_id' => $order->get('id'))); if (is_array($evtOut)) { $orderOutputData .= implode('', $evtOut); } $hook->setValues(array('orderID' => $order->get('id'), 'orderDate' => $order->get('date'), 'orderPrice' => $order->get('price'), 'orderCurrency' => $shopCart->config['currency'], 'orderOutputData' => $orderOutputData)); $shopCart->request_empty(false); $output = true; } else { $hook->addError('error_message', $modx->lexicon('shk.order_empty')); $output = false; } return $output;