public function backendOrders() { $view = wa()->getView(); $plugin_model = new shopPluginModel(); $workflow = new shopWorkflow(); $view->assign('states', $workflow->getAvailableStates()); $view->assign('payments', $plugin_model->listPlugins(shopPluginModel::TYPE_PAYMENT)); $view->assign('shippings', $plugin_model->listPlugins(shopPluginModel::TYPE_SHIPPING)); return array('sidebar_section' => $view->fetch($this->path . '/templates/actions/backend/BackendOrders.html')); }
public function execute() { if (!$this->getUser()->getRights('shop', 'settings')) { throw new waRightsException(_w('Access denied')); } $model = new shopPluginModel(); $this->view->assign('instances', $model->listPlugins(shopPluginModel::TYPE_PAYMENT, array('all' => true))); $this->view->assign('plugins', waPayment::enumerate()); $this->view->assign('installer', $this->getUser()->getRights('installer', 'backend')); }
public function display() { $plugin_model = new shopPluginModel(); if (waRequest::param('payment_id') && is_array(waRequest::param('payment_id'))) { $methods = $plugin_model->getById(waRequest::param('payment_id')); } else { $methods = $plugin_model->listPlugins('payment'); } $shipping = $this->getSessionData('shipping'); if ($shipping) { $disabled = shopHelper::getDisabledMethods('payment', $shipping['id']); } else { $disabled = array(); } $currencies = wa('shop')->getConfig()->getCurrencies(); $selected = null; foreach ($methods as $key => $m) { $method_id = $m['id']; if (in_array($method_id, $disabled)) { unset($methods[$key]); continue; } $plugin = shopPayment::getPlugin($m['plugin'], $m['id']); $plugin_info = $plugin->info($m['plugin']); $methods[$key]['icon'] = $plugin_info['icon']; $custom_fields = $this->getCustomFields($method_id, $plugin); $custom_html = ''; foreach ($custom_fields as $c) { $custom_html .= '<div class="wa-field">' . $c . '</div>'; } $methods[$key]['custom_html'] = $custom_html; $allowed_currencies = $plugin->allowedCurrency(); if ($allowed_currencies !== true) { $allowed_currencies = (array) $allowed_currencies; if (!array_intersect($allowed_currencies, array_keys($currencies))) { $methods[$key]['error'] = sprintf(_w('Payment procedure cannot be processed because required currency %s is not defined in your store settings.'), implode(', ', $allowed_currencies)); } } if (!$selected && empty($methods[$key]['error'])) { $selected = $method_id; } } $view = wa()->getView(); $view->assign('checkout_payment_methods', $methods); $view->assign('payment_id', $this->getSessionData('payment', $selected)); $checkout_flow = new shopCheckoutFlowModel(); $step_number = shopCheckout::getStepNumber('payment'); // IF no errors $checkout_flow->add(array('step' => $step_number)); // ELSE // $checkout_flow->add(array( // 'step' => $step_number, // 'description' => ERROR MESSAGE HERE // )); }
public function execute() { if (!$this->getUser()->getRights('shop', 'settings')) { throw new waRightsException(_w('Access denied')); } $model = new shopPluginModel(); $this->view->assign('instances', $model->listPlugins(shopPluginModel::TYPE_SHIPPING, array('all' => true))); $this->view->assign('plugins', shopShipping::getList()); $feature_model = new shopFeatureModel(); $this->view->assign('no_weight', $feature_model->getByCode('weight') ? false : true); $this->view->assign('installer', $this->getUser()->getRights('installer', 'backend')); }
public function execute() { if (!$this->getUser()->getRights('shop', 'settings')) { throw new waRightsException(_w('Access denied')); } $this->view->assign('plugin_id', $plugin_id = waRequest::get('plugin_id')); $this->view->assign('plugin', $info = shopPayment::getPluginInfo($plugin_id)); $plugin = shopPayment::getPlugin($info['plugin'], $plugin_id); $params = array('namespace' => "payment[settings]", 'value' => waRequest::post('shipping[settings]')); $this->view->assign('settings_html', $plugin->getSettingsHTML($params)); $this->view->assign('guide_html', $plugin->getGuide($params)); $model = new shopPluginModel(); $this->view->assign('shipping', $model->listPlugins(shopPluginModel::TYPE_SHIPPING, array('payment' => $plugin_id, 'all' => true))); }
public static function savePlugin($plugin) { $default = array('status' => 0); $plugin = array_merge($default, $plugin); $model = new shopPluginModel(); if (!empty($plugin['id']) && ($id = max(0, intval($plugin['id']))) && ($row = $model->getByField(array('id' => $id, 'type' => shopPluginModel::TYPE_PAYMENT)))) { $plugin['plugin'] = $row['plugin']; $model->updateById($plugin['id'], $plugin); } elseif (!empty($plugin['plugin'])) { $plugin['type'] = shopPluginModel::TYPE_PAYMENT; $plugin['id'] = $model->insert($plugin); } if (!empty($plugin['id']) && isset($plugin['settings'])) { waPayment::factory($plugin['plugin'], $plugin['id'], self::getInstance())->saveSettings($plugin['settings']); } if (!empty($plugin['id'])) { ifset($plugin['shipping'], array()); $plugins = $model->listPlugins(shopPluginModel::TYPE_SHIPPING, array('all' => true)); $app_settings = new waAppSettingsModel(); $settings = json_decode($app_settings->get('shop', 'shipping_payment_disabled', '{}'), true); if (empty($settings) || !is_array($settings)) { $settings = array(); } if (!isset($settings[$plugin['id']])) { $settings[$plugin['id']] = array(); } $s =& $settings[$plugin['id']]; foreach ($plugins as $item) { if (empty($plugin['shipping'][$item['id']])) { $s[] = $item['id']; } else { $key = array_search($item['id'], $s); if ($key !== false) { unset($s[$key]); } } } $s = array_unique($s); if (empty($s)) { unset($settings[$plugin['id']]); } $app_settings->set('shop', 'shipping_payment_disabled', json_encode($settings)); } return $plugin; }
/** * Returns available shipping methods and rates for specified address. * * @param array $address Address data * @param array $items Order items * @param array $params Optional extra parameters: * 'payment' => [int] payment method id for which available shipping methods must be returned * 'currency' => [string] currency code to convert shipping rates to * 'total_price' => [float] arbitrary total order items cost to be taken into account for obtaining shipping rates * @return array */ public static function getShippingMethods($address = null, $items = array(), $params = array()) { $plugin_model = new shopPluginModel(); $options = array(); if (!empty($params[shopPluginModel::TYPE_PAYMENT])) { $options[shopPluginModel::TYPE_PAYMENT] = $params[shopPluginModel::TYPE_PAYMENT]; } $methods = $plugin_model->listPlugins(shopPluginModel::TYPE_SHIPPING, $options); if ($address !== null) { $config = wa('shop')->getConfig(); /** * @var $config shopConfig */ $result = array(); $currency = isset($params['currency']) ? $params['currency'] : $config->getCurrency(); $dimensions = shopDimension::getInstance(); foreach ($methods as $m) { if ($m['available']) { $plugin = shopShipping::getPlugin($m['plugin'], $m['id']); $plugin_info = $plugin->info($m['plugin']); $plugin_currency = (array) $plugin->allowedCurrency(); $total = null; if ($plugin_currency != $currency) { if (!$config->getCurrencies($plugin_currency)) { $result[$m['id']] = array('plugin' => $m['plugin'], 'logo' => $m['logo'], 'icon' => $plugin_info['icon'], 'img' => $plugin_info['img'], 'name' => $m['name'], 'error' => sprintf(_w('Shipping rate was not calculated because required currency %s is not defined in your store settings.'), implode(', ', $plugin_currency)), 'rate' => '', 'currency' => $currency); continue; } } if (isset($params['total_price'])) { if (!in_array($currency, $plugin_currency)) { $total = shop_currency($params['total_price'], $currency, reset($plugin_currency), false); } else { $total = $params['total_price']; } } else { foreach ($items as $item) { if (!empty($item['price'])) { $total += $item['price'] * (isset($item['quantity']) ? $item['quantity'] : 1); } if ($total && !in_array($currency, $plugin_currency)) { $total = shop_currency($total, $currency, reset($plugin_currency), false); } } } $weight_unit = $plugin->allowedWeightUnit(); foreach ($items as &$item) { if (!empty($item['weight'])) { $item['weight'] = $dimensions->convert($item['weight'], 'weight', $weight_unit); } } unset($item); $rates = $plugin->getRates($items, $address ? $address : array(), $total ? array('total_price' => $total) : array()); if (is_array($rates)) { foreach ($rates as $rate_id => $info) { if (is_array($info)) { $rate = is_array($info['rate']) ? max($info['rate']) : $info['rate']; $rate = (double) shop_currency($rate, reset($plugin_currency), $currency, false); $result[$m['id'] . '.' . $rate_id] = array('plugin' => $m['plugin'], 'logo' => $m['logo'], 'icon' => $plugin_info['icon'], 'img' => $plugin_info['img'], 'name' => $m['name'] . (!empty($info['name']) ? ' (' . $info['name'] . ')' : ''), 'rate' => $rate, 'currency' => $currency); } } } elseif (is_string($rates)) { $result[$m['id']] = array('plugin' => $m['plugin'], 'logo' => $m['logo'], 'icon' => $plugin_info['icon'], 'img' => $plugin_info['img'], 'name' => $m['name'], 'error' => $rates, 'rate' => '', 'currency' => $currency); } } } return $result; } else { return $methods; } }
public function display() { $plugin_model = new shopPluginModel(); if (waRequest::param('shipping_id') && is_array(waRequest::param('shipping_id'))) { $methods = $plugin_model->getById(waRequest::param('shipping_id')); } else { $methods = $plugin_model->listPlugins('shipping'); } $address = $this->getAddress(); $empty = true; foreach ($address as $v) { if ($v) { $empty = false; break; } } if ($empty) { $address = array(); } $items = $this->getItems(); $cart = new shopCart(); $total = $cart->total(); $settings = wa('shop')->getConfig()->getCheckoutSettings(); $address_form = !isset($settings['contactinfo']) || !isset($settings['contactinfo']['fields']['address.shipping']); if (!isset($settings['contactinfo']) || !isset($settings['contactinfo']['fields']['address.shipping']) && !isset($settings['contactinfo']['fields']['address'])) { $settings = wa('shop')->getConfig()->getCheckoutSettings(true); } if (!$address) { $shipping_address = array(); $address_form = true; if ($settings['contactinfo']['fields']['address']) { foreach ($settings['contactinfo']['fields']['address']['fields'] as $k => $f) { if (!empty($f['value'])) { $shipping_address[$k] = $f['value']; } } } } else { $shipping_address = $address; } if (waRequest::method() == 'post') { $shipping_id = waRequest::post('shipping_id'); $rate_id = waRequest::post('rate_id'); $selected_shipping = array('id' => $shipping_id, 'rate_id' => !empty($rate_id[$shipping_id]) ? $rate_id[$shipping_id] : ''); } else { $selected_shipping = $this->getSessionData('shipping', array()); } $dimension = shopDimension::getInstance()->getDimension('weight'); $currencies = wa('shop')->getConfig()->getCurrencies(); foreach ($methods as $method_id => $m) { $plugin = shopShipping::getPlugin($m['plugin'], $m['id']); $plugin_info = $plugin->info($m['plugin']); $m['icon'] = $plugin_info['icon']; $m['img'] = $plugin_info['img']; $m['currency'] = $plugin->allowedCurrency(); $weight_unit = $plugin->allowedWeightUnit(); if ($weight_unit != $dimension['base_unit']) { $shipping_items = array(); foreach ($items as $item_id => $item) { if ($item['weight']) { $item['weight'] = $item['weight'] / $dimension['units'][$weight_unit]['multiplier']; } $shipping_items[$item_id] = $item; } } else { $shipping_items = $items; } $m['external'] = $selected_shipping && $selected_shipping['id'] == $m['id'] ? 0 : $plugin->getProperties('external'); if ($m['external']) { $m['rates'] = array(); } else { $m['rates'] = $plugin->getRates($shipping_items, $shipping_address, array('total_price' => $total)); } if (is_array($m['rates'])) { if (!isset($currencies[$m['currency']])) { $m['rate'] = 0; $m['error'] = sprintf(_w('Shipping rate was not calculated because required currency %s is not defined in your store settings.'), $m['currency']); $methods[$method_id] = $m; continue; } foreach ($m['rates'] as &$r) { if (is_array($r['rate'])) { $r['rate'] = max($r['rate']); } } if ($m['rates']) { if (!empty($selected_shipping['rate_id']) && isset($m['rates'][$selected_shipping['rate_id']])) { $rate = $m['rates'][$selected_shipping['rate_id']]; } else { $rate = reset($m['rates']); } $m['rate'] = $rate['rate']; $m['est_delivery'] = isset($rate['est_delivery']) ? $rate['est_delivery'] : ''; if (!empty($rate['comment'])) { $m['comment'] = $rate['comment']; } } else { $m['rates'] = array(); $m['rate'] = null; } } elseif (is_string($m['rates'])) { if ($address) { $m['error'] = $m['rates']; } else { $m['rates'] = array(); $m['rate'] = null; } } else { unset($methods[$method_id]); continue; } $custom_fields = $this->getCustomFields($method_id, $plugin); $custom_html = ''; foreach ($custom_fields as $c) { $custom_html .= '<div class="wa-field">' . $c . '</div>'; } if ($custom_html) { $m['custom_html'] = $custom_html; } $f = $this->getAddressForm($m['id'], $plugin, $settings, $address, $address_form); if ($f) { $m['form'] = $f; $m['form']->setValue($this->getContact()); } $methods[$method_id] = $m; } $view = wa()->getView(); $view->assign('checkout_shipping_methods', $methods); $default_method = ''; foreach ($methods as $m) { if (empty($m['error'])) { $default_method = $m['id']; break; } } $view->assign('shipping', $selected_shipping ? $selected_shipping : array('id' => $default_method, 'rate_id' => '')); $checkout_flow = new shopCheckoutFlowModel(); $step_number = shopOnestepCheckout::getStepNumber('shipping'); // IF no errors $checkout_flow->add(array('step' => $step_number)); // ELSE // $checkout_flow->add(array( // 'step' => $step_number, // 'description' => ERROR MESSAGE HERE // )); }
public function shipping() { $plugin_model = new shopPluginModel(); return $plugin_model->listPlugins('shipping'); }