public function execute()
 {
     $lazy = waRequest::get('lazy', 0, waRequest::TYPE_INT);
     $offset = waRequest::get('offset', 0, waRequest::TYPE_INT);
     $limit = 30;
     $model = new shopDiscountcardsPluginOrderModel();
     $sql = "SELECT count(*) " . $this->getSql();
     $total_count = (int) $model->query($sql)->fetchField();
     $sql = "SELECT * " . $this->getSql() . " LIMIT {$offset}, {$limit}";
     $discountcards_orders = $model->query($sql)->fetchAll();
     $discountcards_model = new shopDiscountcardsPluginModel();
     $order_model = new shopOrderModel();
     $workflow = new shopWorkflow();
     foreach ($discountcards_orders as &$discountcards_order) {
         $order = $order_model->getOrder($discountcards_order['order_id']);
         $discountcards_order['order'] = $order;
         $discountcards_order['order_id_encode'] = shopHelper::encodeOrderId($order['id']);
         if ($discountcard = $discountcards_model->getByField('discountcard', $discountcards_order['discountcard'])) {
             $discountcards_order['_discountcard'] = $discountcard;
         }
         $discountcards_order['state'] = $workflow->getStateById($order['state_id']);
     }
     unset($discountcards_order);
     $this->view->assign(array('discountcards_orders' => $discountcards_orders, 'offset' => $offset, 'limit' => $limit, 'count' => count($discountcards_orders), 'total_count' => $total_count, 'lazy' => $lazy));
 }
 public function execute()
 {
     $code = waRequest::param('code');
     $encoded_order_id = waRequest::param('id');
     $order_id = shopHelper::decodeOrderId($encoded_order_id);
     if (!$order_id) {
         // fall back to non-encoded id
         $order_id = $encoded_order_id;
         $encoded_order_id = shopHelper::encodeOrderId($order_id);
     }
     if (!$order_id || $order_id != substr($code, 16, -16)) {
         throw new waException(_w('Order not found'), 404);
     }
     // When user is authorized, check if order belongs to him.
     // When it does, redirect to plain order page.
     if (wa()->getUser()->isAuth()) {
         $om = new shopOrderModel();
         $order = $om->getOrder($order_id);
         if (!$order) {
             throw new waException(_w('Order not found'), 404);
         }
         if ($order['contact_id'] == wa()->getUser()->getId()) {
             $this->redirect(wa()->getRouteUrl('/frontend/myOrder', array('id' => $order_id)));
         }
     }
     // Check auth code
     $opm = new shopOrderParamsModel();
     $params = $opm->get($order_id);
     if (ifset($params['auth_code']) !== $code || empty($params['auth_pin'])) {
         throw new waException(_w('Order not found'), 404);
     }
     // Check auth pin and show order page if pin is correct
     $pin = waRequest::request('pin', wa()->getStorage()->get('shop/pin/' . $order_id));
     if ($pin && $pin == $params['auth_pin']) {
         wa()->getStorage()->set('shop/pin/' . $order_id, $pin);
         parent::execute();
         if (!waRequest::isXMLHttpRequest()) {
             $this->layout->assign('breadcrumbs', self::getBreadcrumbs());
         }
         return;
     }
     //
     // No pin or pin is incorrect: show form to enter pin
     //
     $this->view->assign('wrong_pin', !!$pin);
     $this->view->assign('pin_required', true);
     $this->view->assign('encoded_order_id', $encoded_order_id);
     $this->view->assign('my_nav_selected', 'orders');
     // Set up layout and template from theme
     $this->setThemeTemplate('my.order.html');
     if (!waRequest::isXMLHttpRequest()) {
         $this->setLayout(new shopFrontendLayout());
         $this->getResponse()->setTitle(_w('Order') . ' ' . $encoded_order_id);
         $this->view->assign('breadcrumbs', self::getBreadcrumbs());
         $this->layout->assign('nofollow', true);
     }
 }
 public function execute()
 {
     $om = new shopOrderModel();
     $encoded_order_id = waRequest::param('id');
     $code = waRequest::param('code');
     $order_id = shopHelper::decodeOrderId($encoded_order_id);
     if (!$order_id) {
         // fall back to non-encoded id
         $order_id = $encoded_order_id;
         $encoded_order_id = shopHelper::encodeOrderId($order_id);
     }
     $order = $om->getOrder($order_id);
     if (!$order) {
         throw new waException(_w('Order not found'), 404);
     } elseif (!$this->isAuth($order, $code)) {
         if ($code && $order_id != substr($code, 16, -16)) {
             throw new waException(_w('Order not found'), 404);
         } else {
             $redirect = array('id' => $order_id);
             if (!empty($code)) {
                 $redirect['code'] = $code;
             }
             $url = $code ? '/frontend/myOrderByCode' : '/frontend/myOrder';
             $this->redirect(wa()->getRouteUrl($url, $redirect));
         }
     } elseif ($code && $order['contact_id'] == wa()->getUser()->getId()) {
         $redirect = array('id' => $order_id, 'form_type' => waRequest::param('form_type'), 'form_id' => waRequest::param('form_id'));
         $this->redirect(wa()->getRouteUrl('/frontend/myOrderPrintform', $redirect));
     }
     $order_params_model = new shopOrderParamsModel();
     $order['params'] = $order_params_model->get($order['id']);
     $order['id_str'] = $encoded_order_id;
     switch (waRequest::param('form_type')) {
         case 'payment':
             if (empty($order['params']['payment_id']) || !($payment = shopPayment::getPlugin(null, $order['params']['payment_id']))) {
                 throw new waException(_w('Printform not found'), 404);
             }
             $form_id = waRequest::param('form_id');
             $params = null;
             if (strpos($form_id, '.')) {
                 $form = explode('.', $form_id, 2);
                 $form_id = array_shift($form);
                 $params = array_shift($form);
             }
             print $payment->displayPrintForm(ifempty($form_id, $payment->getId()), shopPayment::getOrderData($order, $payment), intval($params));
             exit;
             break;
         default:
             throw new waException(_w('Printform not found'), 404);
             break;
     }
 }
 private function formatData($data, $type)
 {
     if ($type == 'order') {
         $orders = array();
         foreach ($data as $k => $item) {
             if ($item['autocomplete_item_type'] == 'order') {
                 $orders[] = $item;
                 unset($data[$k]);
             }
         }
         if ($orders) {
             shopHelper::workupOrders($orders);
             $data = array_merge($orders, $data);
         }
         foreach ($data as &$item) {
             if ($item['autocomplete_item_type'] == 'order') {
                 $item['value'] = shopHelper::encodeOrderId($item['id']);
                 $item['label'] = '';
                 if (!empty($item['icon'])) {
                     $item['label'] .= "<i class='{$item['icon']}'></i>";
                 }
                 $item['label'] .= $item['value'] . " " . $item['total_str'];
                 $item['label'] .= ' <span class="hint">' . htmlspecialchars($item['customer_name']) . '</span>';
                 $item = array('id' => $item['id'], 'value' => $item['value'], 'label' => $item['label'], 'autocomplete_item_type' => 'order');
             }
         }
         return $data;
     } else {
         if ($type == 'product') {
             $with_counts = waRequest::get('with_counts', 0, waRequest::TYPE_INT);
             $with_sku_name = waRequest::get('with_sku_name', 0, waRequest::TYPE_INT);
             foreach ($data as &$item) {
                 if (empty($item['label'])) {
                     $item['label'] = htmlspecialchars($item['value']);
                 }
                 if ($with_counts) {
                     $item['label'] .= ' ' . shopHelper::getStockCountIcon($item['count'], null, true);
                 }
                 if ($with_sku_name) {
                     $item['label'] .= ' <span class="hint">' . $item['sku_name'] . '</span>';
                 }
             }
         }
     }
     return $data;
 }
 public function execute()
 {
     $contact = wa()->getUser();
     $scm = new shopCustomerModel();
     // Customer orders
     $om = new shopOrderModel();
     $orders = $om->where('contact_id=?', $contact->getId())->order('id DESC')->fetchAll('id');
     // Items for all orders, one query
     $im = new shopOrderItemsModel();
     foreach ($im->getByField('order_id', array_keys($orders), true) as $row) {
         $orders[$row['order_id']]['items'][] = $row;
     }
     // Params for all orders, one query
     $opm = new shopOrderParamsModel();
     foreach ($opm->getByField('order_id', array_keys($orders), true) as $row) {
         $orders[$row['order_id']]['params'][$row['name']] = $row['value'];
     }
     // Prepare order data for template
     $url_tmpl = wa()->getRouteUrl('/frontend/myOrder', array('id' => '%ID%'));
     $workflow = new shopWorkflow();
     foreach ($orders as $k => &$o) {
         if ($o['state_id'] == 'deleted') {
             unset($orders[$k]);
             continue;
         }
         $o['id_str'] = shopHelper::encodeOrderId($o['id']);
         $o['total_formatted'] = waCurrency::format('%{s}', $o['total'], $o['currency']);
         $o['shipping_name'] = ifset($o['params']['shipping_name'], '');
         $o['payment_name'] = ifset($o['params']['payment_name'], '');
         $o['state'] = $workflow->getStateById($o['state_id']);
         $o['url'] = str_replace('%ID%', $o['id'], $url_tmpl);
     }
     $this->view->assign('orders', array_values($orders));
     $this->view->assign('my_nav_selected', 'orders');
     // Set up layout and template from theme
     $this->setThemeTemplate('my.orders.html');
     if (!waRequest::isXMLHttpRequest()) {
         $this->setLayout(new shopFrontendLayout());
         $this->getResponse()->setTitle(_w('Orders'));
         $this->view->assign('breadcrumbs', self::getBreadcrumbs());
         $this->layout->assign('nofollow', true);
     }
 }
 public function execute()
 {
     $encoded_order_id = waRequest::param('id');
     $order_id = shopHelper::decodeOrderId($encoded_order_id);
     if (!$order_id) {
         // fall back to non-encoded id
         $order_id = $encoded_order_id;
         $encoded_order_id = shopHelper::encodeOrderId($order_id);
     }
     $om = new shopOrderModel();
     $order = $om->getOrder($order_id);
     if (!$order) {
         throw new waException(_w('Order not found'), 404);
     }
     if (!$this->isAuth($order)) {
         throw new waException(_w('The file will be available for download after the order is paid and processed.'), 404);
     }
     // Check auth code
     $opm = new shopOrderParamsModel();
     $params = $opm->get($order_id);
     $code = waRequest::param('code');
     if (ifset($params['auth_code']) !== $code) {
         throw new waException(_w('Order not found'), 404);
     }
     if ($item = ifempty($order['items'][waRequest::param('item')])) {
         $skus_model = new shopProductSkusModel();
         $sku = $skus_model->getById(ifempty($item['sku_id']));
         if ($sku['file_name'] && $sku['file_size']) {
             $file_path = shopProductSkusModel::getPath($sku);
             waFiles::readFile($file_path, $sku['file_name']);
         } else {
             throw new waException(_w('File not found'), 404);
         }
     } else {
         throw new waException(_w('Order item not found'), 404);
     }
 }
 protected static function sendSms($n, $data)
 {
     $general = wa('shop')->getConfig()->getGeneralSettings();
     /**
      * @var waContact $customer
      */
     $customer = $data['customer'];
     if ($n['to'] == 'customer') {
         $to = $customer->get('phone', 'default');
         $log = sprintf(_w("Notification <strong>%s</strong> sent to customer."), $n['name']);
     } elseif ($n['to'] == 'admin') {
         $to = $general['phone'];
         $log = sprintf(_w("Notification <strong>%s</strong> sent to store admin."), $n['name']);
     } else {
         $to = $n['to'];
         $log = sprintf(_w("Notification <strong>%s</strong> sent to %s."), $n['name'], $n['to']);
     }
     if (!$to) {
         return;
     }
     $view = wa()->getView();
     foreach (array('shipping', 'billing') as $k) {
         $address = shopHelper::getOrderAddress($data['order']['params'], $k);
         $formatter = new waContactAddressOneLineFormatter(array('image' => false));
         $address = $formatter->format(array('data' => $address));
         $view->assign($k . '_address', $address['value']);
     }
     $order_id = $data['order']['id'];
     $data['order']['id'] = shopHelper::encodeOrderId($order_id);
     $view->assign('order_url', wa()->getRouteUrl('/frontend/myOrderByCode', array('id' => $order_id, 'code' => $data['order']['params']['auth_code']), true));
     $view->assign($data);
     $text = $view->fetch('string:' . $n['text']);
     $sms = new waSMS();
     if ($sms->send($to, $text, isset($n['from']) ? $n['from'] : null)) {
         $order_log_model = new shopOrderLogModel();
         $order_log_model->add(array('order_id' => $order_id, 'contact_id' => null, 'action_id' => '', 'text' => '<i class="icon16 mobile"></i> ' . $log, 'before_state_id' => $data['order']['state_id'], 'after_state_id' => $data['order']['state_id']));
     }
 }
 private function workupList(&$list, $fields)
 {
     if (!$list) {
         return;
     }
     foreach ($list as &$v) {
         $v['icon'] = shopProductStocksLogModel::getIcon($v['type']);
         if (!$v['description']) {
             if ($v['after_count'] === null) {
                 $v['description'] = _w('In stock value updated to ∞');
             } else {
                 $v['description'] = sprintf(_w('In stock value updated to %d'), $v['after_count']);
             }
         } else {
             if ($v['type'] == self::TYPE_ORDER) {
                 $v['description'] = sprintf(_w($v['description']), '<a href="?action=orders#/order/' . $v['order_id'] . '/">' . shopHelper::encodeOrderId($v['order_id']) . '</a>');
             }
         }
     }
     unset($v);
     $stock_ids = array();
     foreach ($list as $v) {
         $stock_ids[] = $v['stock_id'];
     }
     $model = new shopStockModel();
     $stocks = $model->getByField('id', array_unique($stock_ids), 'id');
     foreach ($list as &$v) {
         if (isset($stocks[$v['stock_id']])) {
             $v['stock_name'] = $stocks[$v['stock_id']]['name'];
         }
     }
     unset($v);
     foreach ($fields as $f) {
         if ($f == 'sku_name') {
             $sku_ids = array();
             foreach ($list as $v) {
                 $sku_ids[] = $v['sku_id'];
             }
             $model = new shopProductSkusModel();
             $skus = $model->select('id,sku,name')->where("id IN(" . implode(',', array_unique($sku_ids)) . ")")->fetchAll('id');
             foreach ($list as &$v) {
                 if (isset($skus[$v['sku_id']])) {
                     $v['sku_name'] = $skus[$v['sku_id']]['name'];
                     if ($v['sku_name']) {
                         if ($skus[$v['sku_id']]['sku']) {
                             $v['sku_name'] .= ' (' . $skus[$v['sku_id']]['sku'] . ')';
                         }
                     } else {
                         if ($skus[$v['sku_id']]['sku']) {
                             $v['sku_name'] = $skus[$v['sku_id']]['sku'];
                         }
                     }
                 }
             }
             unset($v);
         }
         if ($f == 'product_name') {
             $product_ids = array();
             foreach ($list as $v) {
                 $product_ids[] = $v['product_id'];
             }
             $model = new shopProductModel();
             $products = $model->select('id,name')->where("id IN (" . implode(',', array_unique($product_ids)) . ")")->fetchAll('id');
             foreach ($list as &$v) {
                 if (isset($products[$v['product_id']])) {
                     $v['product_name'] = $products[$v['product_id']]['name'];
                 }
             }
             unset($v);
         }
     }
 }
Esempio n. 9
0
 public static function applyBonus($order_or_id)
 {
     if (wa_is_int($order_or_id)) {
         $order_id = $order_or_id;
         $om = new shopOrderModel();
         $order = $om->getOrder($order_id);
     } else {
         $order = $order_or_id;
         $order_id = $order['id'];
     }
     if (!$order['contact_id']) {
         return 0;
     }
     $cm = new shopCustomerModel();
     $customer = $cm->getById($order['contact_id']);
     if (!$customer) {
         return 0;
     }
     $atm = new shopAffiliateTransactionModel();
     $atm->applyBonus($order['contact_id'], self::calculateBonus($order), $order_id, sprintf_wp('Bonus for the order %s totalling %s', shopHelper::encodeOrderId($order_id), waCurrency::format('%{s}', $order['total'], ifempty($order['currency'], wa()->getConfig()->getCurrency()))));
 }
 public function execute()
 {
     $steps = $this->getConfig()->getCheckoutSettings();
     $current_step = waRequest::param('step', waRequest::request('step'));
     if (!$current_step) {
         $current_step = key($steps);
     }
     $title = _w('Checkout');
     if ($current_step == 'success') {
         $order_id = waRequest::get('order_id');
         if (!$order_id) {
             $order_id = wa()->getStorage()->get('shop/order_id');
             $payment_success = false;
         } else {
             $payment_success = true;
             $this->view->assign('payment_success', true);
         }
         if (!$order_id) {
             wa()->getResponse()->redirect(wa()->getRouteUrl('shop/frontend'));
         }
         $order_model = new shopOrderModel();
         $order = $order_model->getById($order_id);
         if ($order) {
             $order['_id'] = $order['id'];
         }
         if (!$payment_success) {
             $order_params_model = new shopOrderParamsModel();
             $order['params'] = $order_params_model->get($order_id);
             $order_items_model = new shopOrderItemsModel();
             $order['items'] = $order_items_model->getByField('order_id', $order_id, true);
             $payment = '';
             if (!empty($order['params']['payment_id'])) {
                 try {
                     /**
                      * @var waPayment $plugin
                      */
                     $plugin = shopPayment::getPlugin(null, $order['params']['payment_id']);
                     $payment = $plugin->payment(waRequest::post(), shopPayment::getOrderData($order, $plugin), true);
                 } catch (waException $ex) {
                     $payment = $ex->getMessage();
                 }
             }
             $order['id'] = shopHelper::encodeOrderId($order_id);
             $this->getResponse()->addGoogleAnalytics($this->getGoogleAnalytics($order));
         } else {
             $order['id'] = shopHelper::encodeOrderId($order_id);
         }
         $this->view->assign('order', $order);
         if (isset($payment)) {
             $this->view->assign('payment', $payment);
         }
     } else {
         $cart = new shopCart();
         if (!$cart->count() && $current_step != 'error') {
             $current_step = 'error';
             $this->view->assign('error', _w('Your shopping cart is empty. Please add some products to cart, and then proceed to checkout.'));
         }
         if ($current_step != 'error') {
             if (waRequest::method() == 'post') {
                 if (waRequest::post('wa_auth_login')) {
                     $login_action = new shopLoginAction();
                     $login_action->run();
                 } else {
                     $redirect = false;
                     foreach ($steps as $step_id => $step) {
                         if ($step_id == $current_step) {
                             $step_instance = $this->getStep($step_id);
                             if ($step_instance->execute()) {
                                 $redirect = true;
                             }
                         } elseif ($redirect) {
                             $this->redirect(wa()->getRouteUrl('/frontend/checkout', array('step' => $step_id)));
                         }
                     }
                     // last step
                     if ($redirect) {
                         if ($this->createOrder()) {
                             $this->redirect(wa()->getRouteUrl('/frontend/checkout', array('step' => 'success')));
                         }
                     }
                 }
             } else {
                 $this->view->assign('error', '');
             }
             $title .= ' - ' . $steps[$current_step]['name'];
             $steps[$current_step]['content'] = $this->getStep($current_step)->display();
             $this->view->assign('checkout_steps', $steps);
         }
     }
     $this->getResponse()->setTitle($title);
     $this->view->assign('checkout_current_step', $current_step);
     /**
      * @event frontend_checkout
      * @return array[string]string $return[%plugin_id%] html output
      */
     $event_params = array('step' => $current_step);
     $this->view->assign('frontend_checkout', wa()->event('frontend_checkout', $event_params));
     if (waRequest::isXMLHttpRequest()) {
         $this->setThemeTemplate('checkout.' . $current_step . '.html');
     } else {
         $this->setLayout(new shopFrontendLayout());
         $this->setThemeTemplate('checkout.html');
     }
 }
Esempio n. 11
0
 /**
  *
  * formalize order data
  * @param string|array $order order ID or order data
  * @param waPayment $payment_plugin
  * @return waOrder
  */
 public static function getOrderData($order, $payment_plugin = null)
 {
     if (!is_array($order)) {
         $order_id = shopHelper::decodeOrderId($encoded_order_id = $order);
         if (!$order_id) {
             $order_id = $encoded_order_id;
             $encoded_order_id = shopHelper::encodeOrderId($order_id);
         }
         $om = new shopOrderModel();
         $order = $om->getOrder($order_id);
         if (!$order) {
             return null;
         }
         $order['id_str'] = $encoded_order_id;
     }
     if (!isset($order['id_str'])) {
         $order['id_str'] = shopHelper::encodeOrderId($order['id']);
     }
     if (!isset($order['params'])) {
         $order_params_model = new shopOrderParamsModel();
         $order['params'] = $order_params_model->get($order['id']);
     }
     $convert = false;
     if ($payment_plugin && method_exists($payment_plugin, 'allowedCurrency')) {
         $currency = $payment_plugin->allowedCurrency();
         $total = $order['total'];
         $currency_id = $order['currency'];
         if ($currency !== true) {
             $currency = (array) $currency;
             if (!in_array($order['currency'], $currency)) {
                 $convert = true;
                 $total = shop_currency($total, $order['currency'], $currency_id = reset($currency), false);
             }
         }
     } else {
         $currency_id = $order['currency'];
         $total = $order['total'];
     }
     $items = array();
     if (!empty($order['items'])) {
         foreach ($order['items'] as $item) {
             ifempty($item['price'], 0.0);
             if ($convert) {
                 $item['price'] = shop_currency($item['price'], $order['currency'], $currency_id, false);
             }
             $items[] = array('id' => ifset($item['id']), 'name' => ifset($item['name']), 'sku' => ifset($item['sku_code']), 'description' => '', 'price' => $item['price'], 'quantity' => ifset($item['quantity'], 0), 'total' => $item['price'] * $item['quantity'], 'type' => ifset($item['type'], 'product'), 'product_id' => ifset($item['product_id']));
             if (isset($item['weight'])) {
                 $items[count($items) - 1]['weight'] = $item['weight'];
             }
         }
     }
     $empty_address = array('firstname' => '', 'lastname' => '', 'country' => '', 'region' => '', 'city' => '', 'street' => '', 'zip' => '');
     $shipping_address = array_merge($empty_address, shopHelper::getOrderAddress($order['params'], 'shipping'));
     $billing_address = array_merge($empty_address, shopHelper::getOrderAddress($order['params'], 'billing'));
     if (!count(array_filter($billing_address, 'strlen'))) {
         $billing_address = $shipping_address;
     }
     ifset($order['shipping'], 0.0);
     ifset($order['discount'], 0.0);
     ifset($order['tax'], 0.0);
     if ($convert) {
         $order['tax'] = shop_currency($order['tax'], $order['currency'], $currency_id, false);
         $order['shipping'] = shop_currency($order['shipping'], $order['currency'], $currency_id, false);
         $order['discount'] = shop_currency($order['discount'], $order['currency'], $currency_id, false);
     }
     $order_data = array('id_str' => ifempty($order['id_str'], $order['id']), 'id' => $order['id'], 'contact_id' => $order['contact_id'], 'datetime' => ifempty($order['create_datetime']), 'description' => sprintf(_w('Payment for order %s'), ifempty($order['id_str'], $order['id'])), 'update_datetime' => ifempty($order['update_datetime']), 'paid_datetime' => empty($order['paid_date']) ? null : $order['paid_date'] . ' 00:00:00', 'total' => ifempty($total, $order['total']), 'currency' => ifempty($currency_id, $order['currency']), 'discount' => $order['discount'], 'tax' => $order['tax'], 'payment_name' => ifset($order['params']['payment_name'], ''), 'billing_address' => $billing_address, 'shipping' => $order['shipping'], 'shipping_name' => ifset($order['params']['shipping_name'], ''), 'shipping_address' => $shipping_address, 'items' => $items, 'comment' => ifempty($order['comment'], ''), 'params' => $order['params']);
     return waOrder::factory($order_data);
 }
 public function execute()
 {
     $encoded_order_id = waRequest::param('id');
     $order_id = shopHelper::decodeOrderId($encoded_order_id);
     if (!$order_id) {
         // fall back to non-encoded id
         $order_id = $encoded_order_id;
         $encoded_order_id = shopHelper::encodeOrderId($order_id);
     }
     // Check that order exists and belongs to this user
     $om = new shopOrderModel();
     $order = $om->getOrder($order_id);
     if (!$order || !$this->isAuth($order)) {
         throw new waException(_w('Order not found'), 404);
     }
     if ($order['paid_date']) {
         foreach ($order['items'] as &$i) {
             if (!empty($i['file_name'])) {
                 $i['download_link'] = wa()->getRouteUrl('/frontend/myOrderDownload', array('id' => $order['id'], 'code' => $order['params']['auth_code'], 'item' => $i['id']), true);
             }
         }
         unset($i);
     }
     $workflow = new shopWorkflow();
     $order_params_model = new shopOrderParamsModel();
     $order['params'] = $order_params_model->get($order['id']);
     $order['id_str'] = $encoded_order_id;
     $order['state'] = $workflow->getStateById($order['state_id']);
     // Order subtotal
     $subtotal = 0;
     foreach ($order['items'] as $item) {
         $subtotal += $item['price'] * $item['quantity'];
     }
     // Order comment
     $lm = new shopOrderLogModel();
     $l = $lm->getByField(array('action_id' => 'create', 'order_id' => $order['id']));
     $order['comment'] = ifempty($l['text']);
     $order['payment_name'] = ifset($order['params']['payment_name'], '');
     $order['shipping_name'] = ifset($order['params']['shipping_name'], '');
     // Shipping and billing addresses
     $settings = wa('shop')->getConfig()->getCheckoutSettings();
     $form_fields = ifset($settings['contactinfo']['fields'], array());
     $formatter = new waContactAddressSeveralLinesFormatter();
     $shipping_address = shopHelper::getOrderAddress($order['params'], 'shipping');
     if ($shipping_address) {
         $shipping_address = $formatter->format(array('data' => $shipping_address));
         $shipping_address = $shipping_address['value'];
     }
     if (isset($form_fields['address.billing'])) {
         $billing_address = shopHelper::getOrderAddress($order['params'], 'billing');
         $billing_address = $formatter->format(array('data' => $billing_address));
         $billing_address = $billing_address['value'];
     } else {
         $billing_address = null;
     }
     if (wa()->getUser()->getId() == $order['contact_id']) {
         $contact = wa()->getUser();
     } else {
         $contact = new waContact($order['contact_id']);
     }
     $payment = '';
     if (!empty($order['params']['payment_id']) && !$order['paid_date']) {
         try {
             $plugin = shopPayment::getPlugin(null, $order['params']['payment_id']);
             $payment = $plugin->payment(waRequest::post(), shopPayment::getOrderData($order, $plugin), false);
         } catch (waException $ex) {
             $payment = $ex->getMessage();
         }
     }
     $this->view->assign('payment', $payment);
     $tracking = '';
     if (!empty($order['params']['shipping_id']) && !empty($order['params']['tracking_number'])) {
         try {
             $plugin = shopShipping::getPlugin(null, $order['params']['shipping_id']);
             $tracking = $plugin->tracking($order['params']['tracking_number']);
         } catch (waException $ex) {
             $tracking = $ex->getMessage();
         }
     }
     $this->view->assign('tracking', $tracking);
     $this->view->assign('order', $order);
     $this->view->assign('contact', $contact);
     $this->view->assign('shipping_address', $shipping_address);
     $this->view->assign('billing_address', $billing_address);
     $this->view->assign('subtotal', $subtotal);
     // Set up layout and template from theme
     $this->setThemeTemplate('my.order.html');
     $this->view->assign('my_nav_selected', 'orders');
     if (!waRequest::isXMLHttpRequest()) {
         $this->setLayout(new shopFrontendLayout());
         $this->getResponse()->setTitle(_w('Order') . ' ' . $encoded_order_id);
         $this->view->assign('breadcrumbs', self::getBreadcrumbs());
         $this->layout->assign('nofollow', true);
     }
 }
 public function execute()
 {
     $modelNotifierConfig = new shopNotifierConfigModel();
     $modelNotifierLog = new shopNotifierLogModel();
     $n_date = array('w' => 'week', 'd' => 'days', 'm' => 'hour', 'h' => 'minute');
     $all_notifications = $modelNotifierConfig->getAll();
     foreach ($all_notifications as $notification) {
         $last_event_date = strtotime($modelNotifierLog->getLastDateByConfigId($notification['id']));
         $last_event = strtotime('+' . $notification['repeat_number_time'] . ' ' . $n_date[$notification['repeat_period']], $last_event_date);
         if (date('Y-m-d H:i:s', $last_event) < date('Y-m-d H:i:s')) {
             $states = (array) json_decode($notification['state_name']);
             $last_time = strtotime('-' . $notification['number_time'] . ' ' . $n_date[$notification['period']], $last_event_date);
             $orders = array();
             $orders_new = array();
             foreach ($states as $s) {
                 if ($s == 'new') {
                     $collection = new shopOrdersCollection('search/state_id=new&create_datetime<' . date('Y-m-d H:i:s', $last_time));
                     $orders_new = $collection->getOrders('*,params,items,contact');
                 } else {
                     $states_without_new[] = $s;
                 }
             }
             $state_for_collection = is_array($states_without_new) ? implode('||', $states_without_new) : $states_without_new[0];
             $collection = new shopOrdersCollection('search/state_id=' . $state_for_collection . '&update_datetime<' . date('Y-m-d H:i:s', $last_time));
             $orders = $collection->getOrders('*,params,items,contact');
             if (is_array($orders_new)) {
                 $orders = array_merge($orders, $orders_new);
             }
             $emails = array();
             $notification['data_contact'] = json_decode($notification['data_contact']);
             foreach ($notification['data_contact']->contact as $contact) {
                 $user = new waContact($contact);
                 //                    $email = array();
                 $email = $user->get('email');
                 $emails[$email[0]['value']] = $user->get('name');
             }
             if (!empty($notification['data_contact']->group)) {
                 $modelContactCategory = new waContactCategoryModel();
                 foreach ($notification['data_contact']->group as $group) {
                     $contacts = $modelContactCategory->getByField('category_id', $group);
                     //                      ->query("SELECT * FROM wa_contact_categories WHERE category_id = '".$gr."'")->fetchAll('contact_id');
                     foreach ($contacts as $key => $contact) {
                         $user = new waContact($key);
                         $email = array();
                         $email = $user->get('email');
                         $emails[$email[0]['value']] = $user->get('name');
                     }
                 }
             }
             $view = wa()->getView();
             $shop_config = $general = wa('shop')->getConfig()->getGeneralSettings();
             $from = $shop_config['email'];
             if (!$from) {
                 $from = '*****@*****.**';
             }
             if (!empty($notification['send_email']) && self::isValidEmail($notification['send_email'])) {
                 $from = $notification['send_email'];
             }
             $body = file_get_contents(shopNotifierPlugin::path($notification['template']));
             //TODO: File read error
             if ($notification['group_senders'] == 1) {
                 if ($notification['save_to_order_log'] == 1) {
                     $order_log_model = new shopOrderLogModel();
                     foreach ($orders as $order) {
                         $order_log_model->add(array('order_id' => $order['id'], 'contact_id' => wa()->getUser()->getId(), 'before_state_id' => $order['state_id'], 'after_state_id' => $order['state_id'], 'text' => 'Отправлено уведомление на адреса из оповещания ' . $notification['config_name'], 'action_id' => 'comment'));
                     }
                 }
                 $view->clearAllAssign();
                 $view->assign('orders', $orders);
                 $subject_string = 'Обратите внимание на заказы';
                 $subject = $view->fetch('string:' . $subject_string);
                 $body = $view->fetch('string:' . $body);
                 $message = new waMailMessage($subject, $body);
                 $message->setTo($emails);
                 $message->setFrom($from);
                 $message->send();
             } else {
                 foreach ($orders as $order) {
                     if ($notification['save_to_order_log'] == 1) {
                         $order_log_model = new shopOrderLogModel();
                         $order_log_model->add(array('order_id' => $order['id'], 'contact_id' => wa()->getUser()->getId(), 'before_state_id' => $order['state_id'], 'after_state_id' => $order['state_id'], 'text' => 'Отослано уведомление на емайлы из оповещания ' . $notification['config_name'], 'action_id' => 'comment'));
                     }
                     $view->clearAllAssign();
                     $view->assign('order', $order);
                     $subject_string = 'Заказ ' . shopHelper::encodeOrderId($order['id']);
                     $subject = $view->fetch('string:' . $subject_string);
                     $body = $view->fetch('string:' . $body);
                     $message = new waMailMessage($subject, $body);
                     $message->setTo($emails);
                     $message->setFrom($from);
                     $message->send();
                 }
             }
             $modelNotifierLog->add(array('config_id' => $notification['id']));
         }
     }
 }
Esempio n. 14
0
 public function orderId($id)
 {
     return shopHelper::encodeOrderId($id);
 }