aboutsummaryrefslogtreecommitdiffstats
path: root/public/catalog/controller/extension/module
diff options
context:
space:
mode:
authorJesús <heckyel@hyperbola.info>2019-08-18 21:14:58 -0500
committerJesús <heckyel@hyperbola.info>2019-08-18 21:14:58 -0500
commit2eed7b082f83630301e51f57ca8394de228a8605 (patch)
tree1d19962d22d30f99317d9276e4bae7744fc93fc2 /public/catalog/controller/extension/module
downloadlibrecart-2eed7b082f83630301e51f57ca8394de228a8605.tar.lz
librecart-2eed7b082f83630301e51f57ca8394de228a8605.tar.xz
librecart-2eed7b082f83630301e51f57ca8394de228a8605.zip
first commit
Diffstat (limited to 'public/catalog/controller/extension/module')
-rw-r--r--public/catalog/controller/extension/module/account.php26
-rw-r--r--public/catalog/controller/extension/module/amazon_login.php172
-rw-r--r--public/catalog/controller/extension/module/amazon_pay.php52
-rw-r--r--public/catalog/controller/extension/module/banner.php31
-rw-r--r--public/catalog/controller/extension/module/bestseller.php62
-rw-r--r--public/catalog/controller/extension/module/carousel.php31
-rw-r--r--public/catalog/controller/extension/module/category.php64
-rw-r--r--public/catalog/controller/extension/module/divido_calculator.php53
-rw-r--r--public/catalog/controller/extension/module/ebay_listing.php42
-rw-r--r--public/catalog/controller/extension/module/featured.php72
-rw-r--r--public/catalog/controller/extension/module/filter.php74
-rw-r--r--public/catalog/controller/extension/module/google_hangouts.php14
-rw-r--r--public/catalog/controller/extension/module/html.php11
-rw-r--r--public/catalog/controller/extension/module/information.php22
-rw-r--r--public/catalog/controller/extension/module/klarna_checkout_module.php138
-rw-r--r--public/catalog/controller/extension/module/latest.php69
-rw-r--r--public/catalog/controller/extension/module/laybuy_layout.php38
-rw-r--r--public/catalog/controller/extension/module/pilibaba_button.php16
-rw-r--r--public/catalog/controller/extension/module/pp_braintree_button.php51
-rw-r--r--public/catalog/controller/extension/module/pp_button.php34
-rw-r--r--public/catalog/controller/extension/module/pp_login.php202
-rw-r--r--public/catalog/controller/extension/module/sagepay_direct_cards.php13
-rw-r--r--public/catalog/controller/extension/module/sagepay_server_cards.php13
-rw-r--r--public/catalog/controller/extension/module/slideshow.php31
-rw-r--r--public/catalog/controller/extension/module/special.php69
-rw-r--r--public/catalog/controller/extension/module/store.php40
26 files changed, 1440 insertions, 0 deletions
diff --git a/public/catalog/controller/extension/module/account.php b/public/catalog/controller/extension/module/account.php
new file mode 100644
index 0000000..333b9a1
--- /dev/null
+++ b/public/catalog/controller/extension/module/account.php
@@ -0,0 +1,26 @@
+<?php
+class ControllerExtensionModuleAccount extends Controller {
+ public function index() {
+ $this->load->language('extension/module/account');
+
+ $data['logged'] = $this->customer->isLogged();
+ $data['register'] = $this->url->link('account/register', '', true);
+ $data['login'] = $this->url->link('account/login', '', true);
+ $data['logout'] = $this->url->link('account/logout', '', true);
+ $data['forgotten'] = $this->url->link('account/forgotten', '', true);
+ $data['account'] = $this->url->link('account/account', '', true);
+ $data['edit'] = $this->url->link('account/edit', '', true);
+ $data['password'] = $this->url->link('account/password', '', true);
+ $data['address'] = $this->url->link('account/address', '', true);
+ $data['wishlist'] = $this->url->link('account/wishlist');
+ $data['order'] = $this->url->link('account/order', '', true);
+ $data['download'] = $this->url->link('account/download', '', true);
+ $data['reward'] = $this->url->link('account/reward', '', true);
+ $data['return'] = $this->url->link('account/return', '', true);
+ $data['transaction'] = $this->url->link('account/transaction', '', true);
+ $data['newsletter'] = $this->url->link('account/newsletter', '', true);
+ $data['recurring'] = $this->url->link('account/recurring', '', true);
+
+ return $this->load->view('extension/module/account', $data);
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/amazon_login.php b/public/catalog/controller/extension/module/amazon_login.php
new file mode 100644
index 0000000..9b8ae65
--- /dev/null
+++ b/public/catalog/controller/extension/module/amazon_login.php
@@ -0,0 +1,172 @@
+<?php
+
+class ControllerExtensionModuleAmazonLogin extends Controller {
+ public function index() {
+ if ($this->config->get('payment_amazon_login_pay_status') && $this->config->get('module_amazon_login_status') && !$this->customer->isLogged() && !empty($this->request->server['HTTPS'])) {
+
+ $this->load->model('extension/payment/amazon_login_pay');
+
+ // capital L in Amazon cookie name is required, do not alter for coding standards
+ if (isset($this->request->cookie['amazon_Login_state_cache'])) {
+ setcookie('amazon_Login_state_cache', null, -1, '/');
+ }
+
+ $amazon_payment_js = $this->model_extension_payment_amazon_login_pay->getWidgetJs();
+
+ $this->document->addScript($amazon_payment_js);
+
+ $data['client_id'] = trim($this->config->get('payment_amazon_login_pay_client_id'));
+ $data['merchant_id'] = $this->config->get('payment_amazon_login_pay_merchant_id');
+ $data['return_url'] = html_entity_decode($this->url->link('extension/module/amazon_login/login', '', true), ENT_COMPAT, "UTF-8");
+ $data['button_id'] = 'AmazonLoginButton';
+
+ if ($this->config->get('payment_amazon_login_pay_test') == 'sandbox') {
+ $data['sandbox'] = isset($this->session->data['user_id']); // Require an active admin panel session to show debug messages
+ }
+
+ if ($this->config->get('module_amazon_login_button_type')) {
+ $data['button_type'] = $this->config->get('module_amazon_login_button_type');
+ } else {
+ $data['button_type'] = 'lwa';
+ }
+
+ if ($this->config->get('module_amazon_login_button_colour')) {
+ $data['button_colour'] = $this->config->get('module_amazon_login_button_colour');
+ } else {
+ $data['button_colour'] = 'gold';
+ }
+
+ if ($this->config->get('module_amazon_login_button_size')) {
+ $data['button_size'] = $this->config->get('module_amazon_login_button_size');
+ } else {
+ $data['button_size'] = 'medium';
+ }
+
+ if ($this->config->get('payment_amazon_login_pay_language')) {
+ $data['language'] = $this->config->get('payment_amazon_login_pay_language');
+ } else {
+ $data['language'] = 'en-US';
+ }
+
+ return $this->load->view('extension/module/amazon_login', $data);
+ }
+ }
+
+ public function login() {
+ $this->load->language('extension/payment/amazon_login_pay');
+ $this->load->language('account/login');
+
+ $this->load->model('extension/module/amazon_login');
+
+ $from_amazon_pay = isset($this->request->get['from_amazon_pay']);
+
+ unset($this->session->data['apalwa']);
+
+ try {
+ if (isset($this->request->get['access_token'])) {
+ $access_token = $this->request->get['access_token'];
+
+ $this->session->data['apalwa']['login']['access_token'] = $access_token;
+
+ $this->model_extension_module_amazon_login->verifyAccessToken($access_token);
+
+ $amazon_profile = $this->model_extension_module_amazon_login->fetchProfile($access_token);
+ } else {
+ $this->model_extension_module_amazon_login->debugLog("EXCEPTION", $this->language->get('error_login'));
+
+ throw new \RuntimeException($this->language->get('error_login'));
+ }
+
+ // No issues found, and the Amazon profile has been fetched
+ if ($from_amazon_pay) {
+ unset($this->session->data['guest']);
+ unset($this->session->data['account']);
+
+ if ($this->config->get('payment_amazon_login_pay_checkout') == 'guest') {
+ $this->session->data['account'] = 'guest';
+
+ $this->session->data['guest']['customer_group_id'] = $this->config->get('config_customer_group_id');
+ $this->session->data['guest']['firstname'] = (string)$amazon_profile->first_name;
+ $this->session->data['guest']['lastname'] = (string)$amazon_profile->last_name;
+ $this->session->data['guest']['email'] = (string)$amazon_profile->email;
+ $this->session->data['guest']['telephone'] = '0000000';
+
+ $this->session->data['apalwa']['pay']['profile'] = $this->session->data['guest'];
+ } else {
+ // The payment button must log in a customer
+ $this->session->data['account'] = 'register';
+
+ $profile = $this->model_extension_module_amazon_login->loginProfile($amazon_profile);
+
+ $this->session->data['apalwa']['pay']['profile'] = $profile;
+
+ // If a customer is already logged in, we must overwrite their data with amazon data
+ // Therefore, at the end of the day, we will have a
+ }
+
+ $this->response->redirect($this->url->link('extension/payment/amazon_login_pay/address', '', true));
+ } else {
+ $this->model_extension_module_amazon_login->loginProfile($amazon_profile);
+
+ $this->response->redirect($this->url->link('account/account', '', true));
+ }
+ } catch (\RuntimeException $e) {
+ $this->session->data['apalwa']['login']['error'] = $e->getMessage();
+
+ $this->response->redirect($this->url->link('extension/module/amazon_login/error', '', true));
+ }
+ }
+
+ public function error() {
+ $this->load->language('extension/payment/amazon_login_pay');
+
+ $data = array();
+
+ $continue = $this->url->link('common/home', '', true);
+
+ if (isset($this->session->data['apalwa']['login']['error'])) {
+ $data['error'] = $this->session->data['apalwa']['login']['error'];
+ $data['continue'] = $continue;
+ $data['heading_title'] = $this->language->get('error_login');
+
+ $this->document->setTitle($this->language->get('error_login'));
+
+ unset($this->session->data['apalwa']);
+
+ $data['breadcrumbs'] = array();
+
+ $data['breadcrumbs'][] = array(
+ 'href' => $this->url->link('common/home', '', true),
+ 'text' => $this->language->get('text_home')
+ );
+
+ $data['breadcrumbs'][] = array(
+ 'href' => null,
+ 'current' => true,
+ 'text' => $this->language->get('error_login')
+ );
+
+ $data['content_main'] = $this->load->view('extension/module/amazon_login_error', $data);
+ $data['column_left'] = $this->load->controller('common/column_left');
+ $data['column_right'] = $this->load->controller('common/column_right');
+ $data['content_top'] = $this->load->controller('common/content_top');
+ $data['content_bottom'] = $this->load->controller('common/content_bottom');
+ $data['footer'] = $this->load->controller('common/footer');
+ $data['header'] = $this->load->controller('common/header');
+
+ $this->response->setOutput($this->load->view('extension/payment/amazon_login_pay_generic', $data));
+ } else {
+ $this->response->redirect($continue);
+ }
+ }
+
+ public function logout() {
+ unset($this->session->data['apalwa']);
+
+ // capital L in Amazon cookie name is required, do not alter for coding standards
+ if (isset($this->request->cookie['amazon_Login_state_cache'])) {
+ //@todo - rework this by triggering the JavaScript logout
+ setcookie('amazon_Login_state_cache', null, -1, '/');
+ }
+ }
+}
diff --git a/public/catalog/controller/extension/module/amazon_pay.php b/public/catalog/controller/extension/module/amazon_pay.php
new file mode 100644
index 0000000..97bc3c0
--- /dev/null
+++ b/public/catalog/controller/extension/module/amazon_pay.php
@@ -0,0 +1,52 @@
+<?php
+class ControllerExtensionModuleAmazonPay extends Controller {
+ public function index() {
+ $this->load->model('extension/payment/amazon_login_pay');
+
+ if ($this->config->get('payment_amazon_login_pay_status') && $this->config->get('module_amazon_pay_status') && !empty($this->request->server['HTTPS']) && !($this->config->get('payment_amazon_login_pay_minimum_total') > 0 && $this->config->get('payment_amazon_login_pay_minimum_total') > $this->cart->getSubTotal()) && $this->model_extension_payment_amazon_login_pay->isTotalPositive()) {
+
+ // capital L in Amazon cookie name is required, do not alter for coding standards
+ if (!$this->customer->isLogged() && isset($this->request->cookie['amazon_Login_state_cache'])) {
+ setcookie('amazon_Login_state_cache', null, -1, '/');
+ }
+
+ $amazon_payment_js = $this->model_extension_payment_amazon_login_pay->getWidgetJs();
+ $this->document->addScript($amazon_payment_js);
+
+ $data['client_id'] = $this->config->get('payment_amazon_login_pay_client_id');
+ $data['merchant_id'] = $this->config->get('payment_amazon_login_pay_merchant_id');
+ $data['return_url'] = html_entity_decode($this->url->link('extension/module/amazon_login/login', 'from_amazon_pay=1', true), ENT_COMPAT, "UTF-8");
+ $data['button_id'] = 'AmazonPayButton';
+
+ if ($this->config->get('payment_amazon_login_pay_test') == 'sandbox') {
+ $data['sandbox'] = isset($this->session->data['user_id']); // Require an active admin panel session to show debug messages
+ }
+
+ if ($this->config->get('module_amazon_pay_button_type')) {
+ $data['button_type'] = $this->config->get('module_amazon_pay_button_type');
+ } else {
+ $data['button_type'] = 'PwA';
+ }
+
+ if ($this->config->get('module_amazon_pay_button_colour')) {
+ $data['button_colour'] = $this->config->get('module_amazon_pay_button_colour');
+ } else {
+ $data['button_colour'] = 'Gold';
+ }
+
+ if ($this->config->get('module_amazon_pay_button_size')) {
+ $data['button_size'] = $this->config->get('module_amazon_pay_button_size');
+ } else {
+ $data['button_size'] = 'medium';
+ }
+
+ if ($this->config->get('payment_amazon_login_pay_language')) {
+ $data['language'] = $this->config->get('payment_amazon_login_pay_language');
+ } else {
+ $data['language'] = 'en-US';
+ }
+
+ return $this->load->view('extension/module/amazon_login', $data);
+ }
+ }
+}
diff --git a/public/catalog/controller/extension/module/banner.php b/public/catalog/controller/extension/module/banner.php
new file mode 100644
index 0000000..0e90702
--- /dev/null
+++ b/public/catalog/controller/extension/module/banner.php
@@ -0,0 +1,31 @@
+<?php
+class ControllerExtensionModuleBanner extends Controller {
+ public function index($setting) {
+ static $module = 0;
+
+ $this->load->model('design/banner');
+ $this->load->model('tool/image');
+
+ $this->document->addStyle('catalog/view/javascript/jquery/swiper/css/swiper.min.css');
+ $this->document->addStyle('catalog/view/javascript/jquery/swiper/css/opencart.css');
+ $this->document->addScript('catalog/view/javascript/jquery/swiper/js/swiper.jquery.js');
+
+ $data['banners'] = array();
+
+ $results = $this->model_design_banner->getBanner($setting['banner_id']);
+
+ foreach ($results as $result) {
+ if (is_file(DIR_IMAGE . $result['image'])) {
+ $data['banners'][] = array(
+ 'title' => $result['title'],
+ 'link' => $result['link'],
+ 'image' => $this->model_tool_image->resize($result['image'], $setting['width'], $setting['height'])
+ );
+ }
+ }
+
+ $data['module'] = $module++;
+
+ return $this->load->view('extension/module/banner', $data);
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/bestseller.php b/public/catalog/controller/extension/module/bestseller.php
new file mode 100644
index 0000000..6b0a239
--- /dev/null
+++ b/public/catalog/controller/extension/module/bestseller.php
@@ -0,0 +1,62 @@
+<?php
+class ControllerExtensionModuleBestSeller extends Controller {
+ public function index($setting) {
+ $this->load->language('extension/module/bestseller');
+
+ $this->load->model('catalog/product');
+
+ $this->load->model('tool/image');
+
+ $data['products'] = array();
+
+ $results = $this->model_catalog_product->getBestSellerProducts($setting['limit']);
+
+ if ($results) {
+ foreach ($results as $result) {
+ if ($result['image']) {
+ $image = $this->model_tool_image->resize($result['image'], $setting['width'], $setting['height']);
+ } else {
+ $image = $this->model_tool_image->resize('placeholder.png', $setting['width'], $setting['height']);
+ }
+
+ if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
+ $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
+ } else {
+ $price = false;
+ }
+
+ if ((float)$result['special']) {
+ $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
+ } else {
+ $special = false;
+ }
+
+ if ($this->config->get('config_tax')) {
+ $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
+ } else {
+ $tax = false;
+ }
+
+ if ($this->config->get('config_review_status')) {
+ $rating = $result['rating'];
+ } else {
+ $rating = false;
+ }
+
+ $data['products'][] = array(
+ 'product_id' => $result['product_id'],
+ 'thumb' => $image,
+ 'name' => $result['name'],
+ 'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
+ 'price' => $price,
+ 'special' => $special,
+ 'tax' => $tax,
+ 'rating' => $rating,
+ 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id'])
+ );
+ }
+
+ return $this->load->view('extension/module/bestseller', $data);
+ }
+ }
+}
diff --git a/public/catalog/controller/extension/module/carousel.php b/public/catalog/controller/extension/module/carousel.php
new file mode 100644
index 0000000..f273cd1
--- /dev/null
+++ b/public/catalog/controller/extension/module/carousel.php
@@ -0,0 +1,31 @@
+<?php
+class ControllerExtensionModuleCarousel extends Controller {
+ public function index($setting) {
+ static $module = 0;
+
+ $this->load->model('design/banner');
+ $this->load->model('tool/image');
+
+ $this->document->addStyle('catalog/view/javascript/jquery/swiper/css/swiper.min.css');
+ $this->document->addStyle('catalog/view/javascript/jquery/swiper/css/opencart.css');
+ $this->document->addScript('catalog/view/javascript/jquery/swiper/js/swiper.jquery.js');
+
+ $data['banners'] = array();
+
+ $results = $this->model_design_banner->getBanner($setting['banner_id']);
+
+ foreach ($results as $result) {
+ if (is_file(DIR_IMAGE . $result['image'])) {
+ $data['banners'][] = array(
+ 'title' => $result['title'],
+ 'link' => $result['link'],
+ 'image' => $this->model_tool_image->resize($result['image'], $setting['width'], $setting['height'])
+ );
+ }
+ }
+
+ $data['module'] = $module++;
+
+ return $this->load->view('extension/module/carousel', $data);
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/category.php b/public/catalog/controller/extension/module/category.php
new file mode 100644
index 0000000..e29ed4b
--- /dev/null
+++ b/public/catalog/controller/extension/module/category.php
@@ -0,0 +1,64 @@
+<?php
+class ControllerExtensionModuleCategory extends Controller {
+ public function index() {
+ $this->load->language('extension/module/category');
+
+ if (isset($this->request->get['path'])) {
+ $parts = explode('_', (string)$this->request->get['path']);
+ } else {
+ $parts = array();
+ }
+
+ if (isset($parts[0])) {
+ $data['category_id'] = $parts[0];
+ } else {
+ $data['category_id'] = 0;
+ }
+
+ if (isset($parts[1])) {
+ $data['child_id'] = $parts[1];
+ } else {
+ $data['child_id'] = 0;
+ }
+
+ $this->load->model('catalog/category');
+
+ $this->load->model('catalog/product');
+
+ $data['categories'] = array();
+
+ $categories = $this->model_catalog_category->getCategories(0);
+
+ foreach ($categories as $category) {
+ $children_data = array();
+
+ if ($category['category_id'] == $data['category_id']) {
+ $children = $this->model_catalog_category->getCategories($category['category_id']);
+
+ foreach($children as $child) {
+ $filter_data = array('filter_category_id' => $child['category_id'], 'filter_sub_category' => true);
+
+ $children_data[] = array(
+ 'category_id' => $child['category_id'],
+ 'name' => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
+ 'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'])
+ );
+ }
+ }
+
+ $filter_data = array(
+ 'filter_category_id' => $category['category_id'],
+ 'filter_sub_category' => true
+ );
+
+ $data['categories'][] = array(
+ 'category_id' => $category['category_id'],
+ 'name' => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
+ 'children' => $children_data,
+ 'href' => $this->url->link('product/category', 'path=' . $category['category_id'])
+ );
+ }
+
+ return $this->load->view('extension/module/category', $data);
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/divido_calculator.php b/public/catalog/controller/extension/module/divido_calculator.php
new file mode 100644
index 0000000..40a7b3e
--- /dev/null
+++ b/public/catalog/controller/extension/module/divido_calculator.php
@@ -0,0 +1,53 @@
+<?php
+class ControllerExtensionModuleDividoCalculator extends Controller {
+ public function index() {
+ $this->load->language('extension/module/divido_calculator');
+ $this->load->model('extension/payment/divido');
+ $this->load->model('catalog/product');
+
+ $product_selection = $this->config->get('payment_divido_productselection');
+ $product_threshold = $this->config->get('payment_divido_price_threshold');
+
+ if (!isset($this->request->get['product_id']) || !$this->config->get('payment_divido_status') || !$this->config->get('module_divido_calculator_status')) {
+ return false;
+ }
+
+ $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']);
+
+ $price = 0;
+ if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
+ $base_price = !empty($product_info['special']) ? $product_info['special'] : $product_info['price'];
+ $price = $this->tax->calculate($base_price, $product_info['tax_class_id'], $this->config->get('config_tax'));
+ }
+
+ if ($product_selection == 'threshold' && $product_threshold > $price) {
+ return false;
+ }
+
+ $api_key = $this->config->get('payment_divido_api_key');
+ $key_parts = explode('.', $api_key);
+ $js_key = strtolower(array_shift($key_parts));
+
+ $this->model_extension_payment_divido->setMerchant($api_key);
+ $plans = $this->model_extension_payment_divido->getProductPlans($this->request->get['product_id']);
+
+ if (!$plans) {
+ return false;
+ }
+
+ $plans_ids = array_map(function ($plan) {
+ return $plan->id;
+ }, $plans);
+ $plans_ids = array_unique($plans_ids);
+ $plans_list = implode(',', $plans_ids);
+
+ $data = array(
+ 'merchant_script' => "//cdn.divido.com/calculator/{$js_key}.js",
+ 'product_price' => $price,
+ 'plan_list' => $plans_list,
+ 'generic_credit_req_error' => 'Credit request could not be initiated',
+ );
+
+ return $this->load->view('extension/module/divido_calculator', $data);
+ }
+}
diff --git a/public/catalog/controller/extension/module/ebay_listing.php b/public/catalog/controller/extension/module/ebay_listing.php
new file mode 100644
index 0000000..0e763e7
--- /dev/null
+++ b/public/catalog/controller/extension/module/ebay_listing.php
@@ -0,0 +1,42 @@
+<?php
+class ControllerExtensionModuleEbayListing extends Controller {
+ public function index() {
+ if ($this->config->get('ebay_status') == 1) {
+ $this->load->language('extension/module/ebay');
+
+ $this->load->model('tool/image');
+ $this->load->model('extension/openbay/ebay_product');
+
+ $data['heading_title'] = $this->language->get('heading_title');
+
+ $data['products'] = array();
+
+ $products = $this->cache->get('ebay_listing.' . md5(serialize($products)));
+
+ if (!$products) {
+ $products = $this->model_extension_openbay_ebay_product->getDisplayProducts();
+
+ $this->cache->set('ebay_listing.' . md5(serialize($products)), $products);
+ }
+
+ foreach($products['products'] as $product) {
+ if (isset($product['pictures'][0])) {
+ $image = $this->model_extension_openbay_ebay_product->resize($product['pictures'][0], $this->config->get('ebay_listing_width'), $this->config->get('ebay_listing_height'));
+ } else {
+ $image = $this->model_tool_image->resize('placeholder.png', $this->config->get('ebay_listing_width'), $this->config->get('ebay_listing_height'));
+ }
+
+ $data['products'][] = array(
+ 'thumb' => $image,
+ 'name' => base64_decode($product['Title']),
+ 'price' => $this->currency->format($product['priceGross'], $this->session->data['currency']),
+ 'href' => (string)$product['link']
+ );
+ }
+
+ $data['tracking_pixel'] = $products['tracking_pixel'];
+
+ return $this->load->view('extension/module/ebay', $data);
+ }
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/featured.php b/public/catalog/controller/extension/module/featured.php
new file mode 100644
index 0000000..b3b14c5
--- /dev/null
+++ b/public/catalog/controller/extension/module/featured.php
@@ -0,0 +1,72 @@
+<?php
+class ControllerExtensionModuleFeatured extends Controller {
+ public function index($setting) {
+ $this->load->language('extension/module/featured');
+
+ $this->load->model('catalog/product');
+
+ $this->load->model('tool/image');
+
+ $data['products'] = array();
+
+ if (!$setting['limit']) {
+ $setting['limit'] = 4;
+ }
+
+ if (!empty($setting['product'])) {
+ $products = array_slice($setting['product'], 0, (int)$setting['limit']);
+
+ foreach ($products as $product_id) {
+ $product_info = $this->model_catalog_product->getProduct($product_id);
+
+ if ($product_info) {
+ if ($product_info['image']) {
+ $image = $this->model_tool_image->resize($product_info['image'], $setting['width'], $setting['height']);
+ } else {
+ $image = $this->model_tool_image->resize('placeholder.png', $setting['width'], $setting['height']);
+ }
+
+ if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
+ $price = $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
+ } else {
+ $price = false;
+ }
+
+ if ((float)$product_info['special']) {
+ $special = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
+ } else {
+ $special = false;
+ }
+
+ if ($this->config->get('config_tax')) {
+ $tax = $this->currency->format((float)$product_info['special'] ? $product_info['special'] : $product_info['price'], $this->session->data['currency']);
+ } else {
+ $tax = false;
+ }
+
+ if ($this->config->get('config_review_status')) {
+ $rating = $product_info['rating'];
+ } else {
+ $rating = false;
+ }
+
+ $data['products'][] = array(
+ 'product_id' => $product_info['product_id'],
+ 'thumb' => $image,
+ 'name' => $product_info['name'],
+ 'description' => utf8_substr(strip_tags(html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
+ 'price' => $price,
+ 'special' => $special,
+ 'tax' => $tax,
+ 'rating' => $rating,
+ 'href' => $this->url->link('product/product', 'product_id=' . $product_info['product_id'])
+ );
+ }
+ }
+ }
+
+ if ($data['products']) {
+ return $this->load->view('extension/module/featured', $data);
+ }
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/filter.php b/public/catalog/controller/extension/module/filter.php
new file mode 100644
index 0000000..36bedce
--- /dev/null
+++ b/public/catalog/controller/extension/module/filter.php
@@ -0,0 +1,74 @@
+<?php
+class ControllerExtensionModuleFilter extends Controller {
+ public function index() {
+ if (isset($this->request->get['path'])) {
+ $parts = explode('_', (string)$this->request->get['path']);
+ } else {
+ $parts = array();
+ }
+
+ $category_id = end($parts);
+
+ $this->load->model('catalog/category');
+
+ $category_info = $this->model_catalog_category->getCategory($category_id);
+
+ if ($category_info) {
+ $this->load->language('extension/module/filter');
+
+ $url = '';
+
+ if (isset($this->request->get['sort'])) {
+ $url .= '&sort=' . $this->request->get['sort'];
+ }
+
+ if (isset($this->request->get['order'])) {
+ $url .= '&order=' . $this->request->get['order'];
+ }
+
+ if (isset($this->request->get['limit'])) {
+ $url .= '&limit=' . $this->request->get['limit'];
+ }
+
+ $data['action'] = str_replace('&amp;', '&', $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url));
+
+ if (isset($this->request->get['filter'])) {
+ $data['filter_category'] = explode(',', $this->request->get['filter']);
+ } else {
+ $data['filter_category'] = array();
+ }
+
+ $this->load->model('catalog/product');
+
+ $data['filter_groups'] = array();
+
+ $filter_groups = $this->model_catalog_category->getCategoryFilters($category_id);
+
+ if ($filter_groups) {
+ foreach ($filter_groups as $filter_group) {
+ $childen_data = array();
+
+ foreach ($filter_group['filter'] as $filter) {
+ $filter_data = array(
+ 'filter_category_id' => $category_id,
+ 'filter_filter' => $filter['filter_id']
+ );
+
+ $childen_data[] = array(
+ 'filter_id' => $filter['filter_id'],
+ 'name' => $filter['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : '')
+ );
+ }
+
+ $data['filter_groups'][] = array(
+ 'filter_group_id' => $filter_group['filter_group_id'],
+ 'name' => $filter_group['name'],
+ 'filter' => $childen_data
+ );
+ }
+
+ return $this->load->view('extension/module/filter', $data);
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/google_hangouts.php b/public/catalog/controller/extension/module/google_hangouts.php
new file mode 100644
index 0000000..5d61d87
--- /dev/null
+++ b/public/catalog/controller/extension/module/google_hangouts.php
@@ -0,0 +1,14 @@
+<?php
+class ControllerExtensionModuleGoogleHangouts extends Controller {
+ public function index() {
+ $this->load->language('extension/module/google_hangouts');
+
+ if ($this->request->server['HTTPS']) {
+ $data['code'] = str_replace('http', 'https', html_entity_decode($this->config->get('module_google_hangouts_code')));
+ } else {
+ $data['code'] = html_entity_decode($this->config->get('module_google_hangouts_code'));
+ }
+
+ return $this->load->view('extension/module/google_hangouts', $data);
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/html.php b/public/catalog/controller/extension/module/html.php
new file mode 100644
index 0000000..bf32060
--- /dev/null
+++ b/public/catalog/controller/extension/module/html.php
@@ -0,0 +1,11 @@
+<?php
+class ControllerExtensionModuleHTML extends Controller {
+ public function index($setting) {
+ if (isset($setting['module_description'][$this->config->get('config_language_id')])) {
+ $data['heading_title'] = html_entity_decode($setting['module_description'][$this->config->get('config_language_id')]['title'], ENT_QUOTES, 'UTF-8');
+ $data['html'] = html_entity_decode($setting['module_description'][$this->config->get('config_language_id')]['description'], ENT_QUOTES, 'UTF-8');
+
+ return $this->load->view('extension/module/html', $data);
+ }
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/information.php b/public/catalog/controller/extension/module/information.php
new file mode 100644
index 0000000..15badd3
--- /dev/null
+++ b/public/catalog/controller/extension/module/information.php
@@ -0,0 +1,22 @@
+<?php
+class ControllerExtensionModuleInformation extends Controller {
+ public function index() {
+ $this->load->language('extension/module/information');
+
+ $this->load->model('catalog/information');
+
+ $data['informations'] = array();
+
+ foreach ($this->model_catalog_information->getInformations() as $result) {
+ $data['informations'][] = array(
+ 'title' => $result['title'],
+ 'href' => $this->url->link('information/information', 'information_id=' . $result['information_id'])
+ );
+ }
+
+ $data['contact'] = $this->url->link('information/contact');
+ $data['sitemap'] = $this->url->link('information/sitemap');
+
+ return $this->load->view('extension/module/information', $data);
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/klarna_checkout_module.php b/public/catalog/controller/extension/module/klarna_checkout_module.php
new file mode 100644
index 0000000..079207f
--- /dev/null
+++ b/public/catalog/controller/extension/module/klarna_checkout_module.php
@@ -0,0 +1,138 @@
+<?php
+class ControllerExtensionModuleKlarnaCheckoutModule extends Controller {
+ public function index() {
+ $this->load->model('extension/payment/klarna_checkout');
+
+ // If Payment Method or Module is disabled
+ if (!$this->config->get('module_klarna_checkout_status') || !$this->config->get('klarna_checkout_status')) {
+ $this->model_extension_payment_klarna_checkout->log('Not shown due to Payment Method or Module being disabled');
+ return false;
+ }
+
+ // Validate cart has products and has stock.
+ if ((!$this->cart->hasProducts() && empty($this->session->data['vouchers'])) || (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout'))) {
+ $this->model_extension_payment_klarna_checkout->log('Not shown due to empty cart');
+ return false;
+ }
+
+ // Validate minimum quantity requirements.
+ $products = $this->cart->getProducts();
+
+ foreach ($products as $product) {
+ $product_total = 0;
+
+ foreach ($products as $product_2) {
+ if ($product_2['product_id'] == $product['product_id']) {
+ $product_total += $product_2['quantity'];
+ }
+ }
+
+ if ($product['minimum'] > $product_total) {
+ $this->model_extension_payment_klarna_checkout->log('Not shown due to cart not meeting minimum quantity reqs.');
+ return false;
+ }
+ }
+
+ // Validate cart has recurring products
+ if ($this->cart->hasRecurringProducts()) {
+ $this->model_extension_payment_klarna_checkout->log('Not shown due to cart having recurring products.');
+ return false;
+ }
+
+ list($totals, $taxes, $total) = $this->model_extension_payment_klarna_checkout->getTotals();
+
+ if ($this->config->get('klarna_checkout_total') > 0 && $this->config->get('klarna_checkout_total') > $total) {
+ return false;
+ }
+
+ if ($this->model_extension_payment_klarna_checkout->checkForPaymentTaxes($products)) {
+ $this->model_extension_payment_klarna_checkout->log('Payment Address based taxes used.');
+ return false;
+ }
+
+ $this->setShipping();
+
+ list($klarna_account, $connector) = $this->model_extension_payment_klarna_checkout->getConnector($this->config->get('klarna_checkout_account'), $this->session->data['currency']);
+
+ if (!$klarna_account || !$connector) {
+ $this->model_extension_payment_klarna_checkout->log('Couldn\'t secure connection to Klarna API.');
+ return false;
+ }
+
+ $data['klarna_checkout'] = $this->url->link('extension/payment/klarna_checkout', '', true);
+
+ return $this->load->view('extension/module/klarna_checkout_module', $data);
+ }
+
+ private function setShipping() {
+ $this->load->model('account/address');
+ $this->load->model('localisation/country');
+ $this->load->model('localisation/zone');
+
+ if (isset($this->session->data['shipping_address']) && !empty($this->session->data['shipping_address'])) {
+ $this->session->data['shipping_address'] = $this->session->data['shipping_address'];
+ } elseif ($this->customer->isLogged() && $this->customer->getAddressId()) {
+ $this->session->data['shipping_address'] = $this->model_account_address->getAddress($this->customer->getAddressId());
+ } else {
+ $country_info = $this->model_localisation_country->getCountry($this->config->get('config_country_id'));
+
+ $zone_info = $this->model_localisation_zone->getZone($this->config->get('config_zone_id'));
+
+ $this->session->data['shipping_address'] = array(
+ 'address_id' => null,
+ 'firstname' => null,
+ 'lastname' => null,
+ 'company' => null,
+ 'address_1' => null,
+ 'address_2' => null,
+ 'postcode' => null,
+ 'city' => null,
+ 'zone_id' => $zone_info['zone_id'],
+ 'zone' => $zone_info['name'],
+ 'zone_code' => $zone_info['code'],
+ 'country_id' => $country_info['country_id'],
+ 'country' => $country_info['name'],
+ 'iso_code_2' => $country_info['iso_code_2'],
+ 'iso_code_3' => $country_info['iso_code_3'],
+ 'address_format' => '',
+ 'custom_field' => null,
+ );
+ }
+
+ if (isset($this->session->data['shipping_address'])) {
+ // Shipping Methods
+ $method_data = array();
+
+ $this->load->model('setting/extension');
+
+ $results = $this->model_setting_extension->getExtensions('shipping');
+
+ foreach ($results as $result) {
+ if ($this->config->get('shipping_' . $result['code'] . '_status')) {
+ $this->load->model('extension/shipping/' . $result['code']);
+
+ $quote = $this->{'model_extension_shipping_' . $result['code']}->getQuote($this->session->data['shipping_address']);
+
+ if ($quote) {
+ $method_data[$result['code']] = array(
+ 'title' => $quote['title'],
+ 'quote' => $quote['quote'],
+ 'sort_order' => $quote['sort_order'],
+ 'error' => $quote['error']
+ );
+ }
+ }
+ }
+
+ $sort_order = array();
+
+ foreach ($method_data as $key => $value) {
+ $sort_order[$key] = $value['sort_order'];
+ }
+
+ array_multisort($sort_order, SORT_ASC, $method_data);
+
+ $this->session->data['shipping_methods'] = $method_data;
+ }
+ }
+}
diff --git a/public/catalog/controller/extension/module/latest.php b/public/catalog/controller/extension/module/latest.php
new file mode 100644
index 0000000..44285de
--- /dev/null
+++ b/public/catalog/controller/extension/module/latest.php
@@ -0,0 +1,69 @@
+<?php
+class ControllerExtensionModuleLatest extends Controller {
+ public function index($setting) {
+ $this->load->language('extension/module/latest');
+
+ $this->load->model('catalog/product');
+
+ $this->load->model('tool/image');
+
+ $data['products'] = array();
+
+ $filter_data = array(
+ 'sort' => 'p.date_added',
+ 'order' => 'DESC',
+ 'start' => 0,
+ 'limit' => $setting['limit']
+ );
+
+ $results = $this->model_catalog_product->getProducts($filter_data);
+
+ if ($results) {
+ foreach ($results as $result) {
+ if ($result['image']) {
+ $image = $this->model_tool_image->resize($result['image'], $setting['width'], $setting['height']);
+ } else {
+ $image = $this->model_tool_image->resize('placeholder.png', $setting['width'], $setting['height']);
+ }
+
+ if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
+ $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
+ } else {
+ $price = false;
+ }
+
+ if ((float)$result['special']) {
+ $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
+ } else {
+ $special = false;
+ }
+
+ if ($this->config->get('config_tax')) {
+ $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
+ } else {
+ $tax = false;
+ }
+
+ if ($this->config->get('config_review_status')) {
+ $rating = $result['rating'];
+ } else {
+ $rating = false;
+ }
+
+ $data['products'][] = array(
+ 'product_id' => $result['product_id'],
+ 'thumb' => $image,
+ 'name' => $result['name'],
+ 'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
+ 'price' => $price,
+ 'special' => $special,
+ 'tax' => $tax,
+ 'rating' => $rating,
+ 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id'])
+ );
+ }
+
+ return $this->load->view('extension/module/latest', $data);
+ }
+ }
+}
diff --git a/public/catalog/controller/extension/module/laybuy_layout.php b/public/catalog/controller/extension/module/laybuy_layout.php
new file mode 100644
index 0000000..a586167
--- /dev/null
+++ b/public/catalog/controller/extension/module/laybuy_layout.php
@@ -0,0 +1,38 @@
+<?php
+class ControllerExtensionModuleLaybuyLayout extends Controller {
+ public function index() {
+ $this->load->model('extension/module/laybuy_layout');
+
+ $status = $this->config->get('module_laybuy_layout_status');
+
+ if ($status && $this->config->get('payment_laybuy_status')) {
+ if ($this->customer->isLogged()) {
+ if (isset($this->request->get['order_id'])) {
+ $order_id = $this->request->get['order_id'];
+
+ if ($this->model_extension_module_laybuy_layout->isLayBuyOrder($order_id)) {
+ $this->load->language('extension/module/laybuy_layout');
+
+ $transaction_info = $this->model_extension_module_laybuy_layout->getTransactionByOrderId($order_id);
+
+ $data['transaction'] = array(
+ 'laybuy_ref_no' => $transaction_info['laybuy_ref_no'],
+ 'paypal_profile_id' => $transaction_info['paypal_profile_id'],
+ 'status' => $this->model_extension_module_laybuy_layout->getStatusLabel($transaction_info['status']),
+ 'amount' => $this->currency->format($transaction_info['amount'], $transaction_info['currency']),
+ 'downpayment' => $transaction_info['downpayment'],
+ 'months' => $transaction_info['months'],
+ 'downpayment_amount' => $this->currency->format($transaction_info['downpayment_amount'], $transaction_info['currency']),
+ 'payment_amounts' => $this->currency->format($transaction_info['payment_amounts'], $transaction_info['currency']),
+ 'first_payment_due' => date($this->language->get('date_format_short'), strtotime($transaction_info['first_payment_due'])),
+ 'last_payment_due' => date($this->language->get('date_format_short'), strtotime($transaction_info['last_payment_due'])),
+ 'report' => json_decode($transaction_info['report'], true)
+ );
+
+ return $this->load->view('extension/module/laybuy_layout', $data);
+ }
+ }
+ }
+ }
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/pilibaba_button.php b/public/catalog/controller/extension/module/pilibaba_button.php
new file mode 100644
index 0000000..bd7271a
--- /dev/null
+++ b/public/catalog/controller/extension/module/pilibaba_button.php
@@ -0,0 +1,16 @@
+<?php
+class ControllerExtensionModulePilibabaButton extends Controller {
+ public function index() {
+ $status = true;
+
+ if (!$this->cart->hasProducts() || (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout'))) {
+ $status = false;
+ }
+
+ if ($status) {
+ $data['payment_url'] = $this->url->link('extension/payment/pilibaba/express', '', true);
+
+ return $this->load->view('extension/module/pilibaba_button', $data);
+ }
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/pp_braintree_button.php b/public/catalog/controller/extension/module/pp_braintree_button.php
new file mode 100644
index 0000000..32f38d8
--- /dev/null
+++ b/public/catalog/controller/extension/module/pp_braintree_button.php
@@ -0,0 +1,51 @@
+<?php
+class ControllerExtensionModulePPBraintreeButton extends Controller {
+ private $gateway = null;
+
+ public function index() {
+ if ($this->config->get('payment_pp_braintree_status') == 1) {
+ $this->initialise();
+
+ $status = true;
+
+ if ((!$this->cart->hasProducts() && empty($this->session->data['vouchers'])) || (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout')) || (!$this->customer->isLogged() && ($this->cart->hasRecurringProducts() || $this->cart->hasDownload()))) {
+ $status = false;
+ }
+
+ if ($status) {
+ $this->load->model('checkout/order');
+ $this->load->model('extension/payment/pp_braintree');
+
+ $create_token = array();
+
+ $data['client_token'] = $this->model_extension_payment_pp_braintree->generateToken($this->gateway, $create_token);
+
+ $data['payment_pp_braintree_settlement_immediate'] = $this->config->get('payment_pp_braintree_settlement_immediate');
+ $data['payment_pp_braintree_paypal_button_colour'] = $this->config->get('payment_pp_braintree_paypal_button_colour');
+ $data['payment_pp_braintree_paypal_button_size'] = $this->config->get('payment_pp_braintree_paypal_button_size');
+ $data['payment_pp_braintree_paypal_button_shape'] = $this->config->get('payment_pp_braintree_paypal_button_shape');
+
+ /*
+ * The auth total is just a guess as to what the end total will be since the user has not
+ * selected a shipping option yet. The user does not see this amount during checkout but the figure
+ * may be too low if buying a low value item and shipping is more than 50% of the item value.
+ */
+ $data['auth_total'] = $this->cart->getTotal() * 1.5;
+ $data['currency_code'] = $this->session->data['currency'];
+ $data['action'] = $this->url->link('extension/payment/pp_braintree/expressConfirm', '', true);
+
+ return $this->load->view('extension/module/pp_braintree_button', $data);
+ }
+ }
+ }
+
+ private function initialise() {
+ $this->load->model('extension/payment/pp_braintree');
+
+ if ($this->config->get('payment_pp_braintree_access_token') != '') {
+ $this->gateway = $this->model_extension_payment_pp_braintree->setGateway($this->config->get('payment_pp_braintree_access_token'));
+ } else {
+ $this->model_extension_payment_pp_braintree->setCredentials();
+ }
+ }
+}
diff --git a/public/catalog/controller/extension/module/pp_button.php b/public/catalog/controller/extension/module/pp_button.php
new file mode 100644
index 0000000..a217245
--- /dev/null
+++ b/public/catalog/controller/extension/module/pp_button.php
@@ -0,0 +1,34 @@
+<?php
+class ControllerExtensionModulePPButton extends Controller {
+ public function index() {
+ if ($this->config->get('payment_pp_express_status') == 1) {
+ $status = true;
+
+ if ((!$this->cart->hasProducts() && empty($this->session->data['vouchers'])) || (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout')) || (!$this->customer->isLogged() && ($this->cart->hasRecurringProducts() || $this->cart->hasDownload()))) {
+ $status = false;
+ }
+
+ if ($status) {
+ $this->load->model('extension/payment/pp_express');
+
+ if (preg_match('/Mobile|Android|BlackBerry|iPhone|Windows Phone/', $this->request->server['HTTP_USER_AGENT'])) {
+ $data['mobile'] = true;
+ } else {
+ $data['mobile'] = false;
+ }
+
+ if ($this->config->get('payment_pp_express_test') == 1) {
+ $data['paypal_username'] = $this->config->get('payment_pp_express_sandbox_username');
+ $data['paypal_environment'] = 'sandbox';
+ } else {
+ $data['paypal_username'] = $this->config->get('payment_pp_express_username');
+ $data['paypal_environment'] = 'production';
+ }
+
+ $data['payment_url'] = $this->url->link('extension/payment/pp_express/express', '', true);
+
+ return $this->load->view('extension/module/pp_button', $data);
+ }
+ }
+ }
+}
diff --git a/public/catalog/controller/extension/module/pp_login.php b/public/catalog/controller/extension/module/pp_login.php
new file mode 100644
index 0000000..dc581ab
--- /dev/null
+++ b/public/catalog/controller/extension/module/pp_login.php
@@ -0,0 +1,202 @@
+<?php
+class ControllerExtensionModulePPLogin extends Controller {
+ private $error = array();
+
+ public function index() {
+ if (!$this->customer->isLogged()) {
+ $data['client_id'] = $this->config->get('module_pp_login_client_id');
+ $data['return_url'] = $this->url->link('extension/module/pp_login/login', '', true);
+
+ if ($this->config->get('module_pp_login_sandbox')) {
+ $data['sandbox'] = 'sandbox';
+ } else {
+ $data['sandbox'] = '';
+ }
+
+ if ($this->config->get('module_pp_login_button_colour') == 'grey') {
+ $data['button_colour'] = 'neutral';
+ } else {
+ $data['button_colour'] = '';
+ }
+
+ $locale = $this->config->get('module_pp_login_locale');
+
+ $this->load->model('localisation/language');
+
+ $languages = $this->model_localisation_language->getLanguages();
+
+ foreach ($languages as $language) {
+ if ($language['status'] && ($language['code'] == $this->session->data['language']) && isset($locale[$language['language_id']])) {
+ $data['locale'] = $locale[$language['language_id']];
+ }
+ }
+
+ if (!isset($data['locale'])) {
+ $data['locale'] = 'en-gb';
+ }
+
+ $scopes = array(
+ 'profile',
+ 'email',
+ 'address',
+ 'phone'
+ );
+
+ if ($this->config->get('module_pp_login_seamless')) {
+ $scopes[] = 'https://uri.paypal.com/services/expresscheckout';
+ }
+
+ $data['scopes'] = implode(' ', $scopes);
+
+ return $this->load->view('extension/module/pp_login', $data);
+ }
+ }
+
+ public function login() {
+ $this->load->model('extension/module/pp_login');
+ $this->load->model('account/customer');
+ $this->load->model('account/customer_group');
+
+ if ($this->customer->isLogged()) {
+ echo '<script type="text/javascript">window.opener.location = "' . $this->url->link('account/account', '', true) . '"; window.close();</script>';
+ }
+
+ if (!isset($this->request->get['code'])) {
+ if (isset($this->request->get['error']) && isset($this->request->get['error_description'])) {
+ $this->model_extension_module_pp_login->log('No code returned. Error: ' . $this->request->get['error'] . ', Error Description: ' . $this->request->get['error_description']);
+ }
+
+ echo '<script type="text/javascript">window.opener.location = "' . $this->url->link('account/login', '', true) . '"; window.close();</script>';
+ } else {
+ $tokens = $this->model_extension_module_pp_login->getTokens($this->request->get['code']);
+ }
+
+ if (isset($tokens->access_token) && !isset($tokens->error)) {
+ $user = $this->model_extension_module_pp_login->getUserInfo($tokens->access_token);
+ }
+
+ if (isset($user)) {
+ $customer_info = $this->model_account_customer->getCustomerByEmail($user->email);
+
+ if ($customer_info) {
+ if ($this->validate($user->email)) {
+ $this->completeLogin($customer_info['customer_id'], $customer_info['email'], $tokens->access_token);
+ } else {
+ $this->model_extension_module_pp_login->log('Could not login to - ID: ' . $customer_info['customer_id'] . ', Email: ' . $customer_info['email']);
+ echo '<script type="text/javascript">window.opener.location = "' . $this->url->link('account/login', '', true) . '"; window.close();</script>';
+ }
+ } else {
+ $country = $this->db->query("SELECT `country_id` FROM `" . DB_PREFIX . "country` WHERE iso_code_2 = '" . $this->db->escape($user->address->country) . "'");
+
+ if ($country->num_rows) {
+ $country_id = $country->row['country_id'];
+
+ $zone = $this->db->query("SELECT `zone_id` FROM `" . DB_PREFIX . "zone` WHERE country_id = '" . (int)$country_id . "' AND name = '" . $this->db->escape($user->address->region) . "'");
+
+ if ($zone->num_rows) {
+ $zone_id = $zone->row['zone_id'];
+ } else {
+ $zone_id = 0;
+ }
+ } else {
+ $country_id = 0;
+ $zone_id = 0;
+ }
+
+ if ($this->config->get('module_pp_login_customer_group_id')) {
+ $customer_group_id = $this->config->get('module_pp_login_customer_group_id');
+ } else {
+ $customer_group_id = $this->config->get('config_customer_group_id');
+ }
+
+ $data = array(
+ 'customer_group_id' => (int)$customer_group_id,
+ 'firstname' => $user->given_name,
+ 'lastname' => $user->family_name,
+ 'email' => $user->email,
+ 'telephone' => $user->phone_number,
+ 'password' => uniqid(rand(), true),
+ 'company' => '',
+ 'address_1' => $user->address->street_address,
+ 'address_2' => '',
+ 'city' => $user->address->locality,
+ 'postcode' => $user->address->postal_code,
+ 'country_id' => (int)$country_id,
+ 'zone_id' => (int)$zone_id,
+ );
+
+ $customer_id = $this->model_account_customer->addCustomer($data);
+
+ $this->model_extension_module_pp_login->log('Customer ID date_added: ' . $customer_id);
+
+ if ($this->validate($user->email)) {
+ $this->completeLogin($customer_id, $user->email, $tokens->access_token);
+ } else {
+ $this->model_extension_module_pp_login->log('Could not login to - ID: ' . $customer_id . ', Email: ' . $user->email);
+ echo '<script type="text/javascript">window.opener.location = "' . $this->url->link('account/login', '', true) . '"; window.close();</script>';
+ }
+ }
+ }
+ }
+
+ public function logout() {
+ if (isset($this->session->data['pp_login'])) {
+ unset($this->session->data['pp_login']);
+ }
+ }
+
+ protected function completeLogin($customer_id, $email, $access_token) {
+ unset($this->session->data['guest']);
+
+ // Default Shipping Address
+ $this->load->model('account/address');
+
+ if ($this->config->get('config_tax_customer') == 'payment') {
+ $this->session->data['payment_address'] = $this->model_account_address->getAddress($this->customer->getAddressId());
+ }
+
+ if ($this->config->get('config_tax_customer') == 'shipping') {
+ $this->session->data['shipping_address'] = $this->model_account_address->getAddress($this->customer->getAddressId());
+ }
+
+ if ($this->config->get('module_pp_login_seamless')) {
+ $this->session->data['pp_login']['seamless']['customer_id'] = $this->customer->getId();
+ $this->session->data['pp_login']['seamless']['access_token'] = $access_token;
+ } else {
+ if (isset($this->session->data['pp_login']['seamless'])) {
+ unset($this->session->data['pp_login']['seamless']);
+ }
+ }
+
+ $this->model_extension_module_pp_login->log('Customer logged in - ID: ' . $customer_id . ', Email: ' . $email);
+ echo '<script type="text/javascript">window.opener.location = "' . $this->url->link('account/account', '', true) . '"; window.close();</script>';
+ }
+
+ protected function validate($email) {
+ // Check how many login attempts have been made.
+ $login_info = $this->model_account_customer->getLoginAttempts($email);
+
+ if ($login_info && ($login_info['total'] >= $this->config->get('config_login_attempts')) && strtotime('-1 hour') < strtotime($login_info['date_modified'])) {
+ $this->error['warning'] = $this->language->get('error_attempts');
+ }
+
+ // Check if customer has been approved.
+ $customer_info = $this->model_account_customer->getCustomerByEmail($email);
+
+ if ($customer_info && !$customer_info['status']) {
+ $this->error['warning'] = $this->language->get('error_approved');
+ }
+
+ if (!$this->error) {
+ if (!$this->customer->login($email, '', true)) {
+ $this->error['warning'] = $this->language->get('error_login');
+
+ $this->model_account_customer->addLoginAttempt($email);
+ } else {
+ $this->model_account_customer->deleteLoginAttempts($email);
+ }
+ }
+
+ return !$this->error;
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/sagepay_direct_cards.php b/public/catalog/controller/extension/module/sagepay_direct_cards.php
new file mode 100644
index 0000000..0d4dce1
--- /dev/null
+++ b/public/catalog/controller/extension/module/sagepay_direct_cards.php
@@ -0,0 +1,13 @@
+<?php
+class ControllerExtensionModuleSagepayDirectCards extends Controller {
+ public function index() {
+ if ($this->config->get('module_sagepay_direct_cards_status') && $this->config->get('payment_sagepay_direct_status') && $this->customer->isLogged()) {
+ $this->load->language('account/sagepay_direct_cards');
+
+ $data['card'] = $this->url->link('account/sagepay_direct_cards', '', true);
+
+ return $this->load->view('extension/module/sagepay_direct_cards', $data);
+ }
+ }
+
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/sagepay_server_cards.php b/public/catalog/controller/extension/module/sagepay_server_cards.php
new file mode 100644
index 0000000..f4cc007
--- /dev/null
+++ b/public/catalog/controller/extension/module/sagepay_server_cards.php
@@ -0,0 +1,13 @@
+<?php
+class ControllerExtensionModuleSagepayServerCards extends Controller {
+ public function index() {
+ if ($this->config->get('module_sagepay_server_cards_status') && $this->config->get('payment_sagepay_server_status') && $this->customer->isLogged()) {
+ $this->load->language('account/sagepay_server_cards');
+
+ $data['card'] = $this->url->link('account/sagepay_server_cards', '', true);
+
+ return $this->load->view('extension/module/sagepay_server_cards', $data);
+ }
+ }
+
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/slideshow.php b/public/catalog/controller/extension/module/slideshow.php
new file mode 100644
index 0000000..80265d7
--- /dev/null
+++ b/public/catalog/controller/extension/module/slideshow.php
@@ -0,0 +1,31 @@
+<?php
+class ControllerExtensionModuleSlideshow extends Controller {
+ public function index($setting) {
+ static $module = 0;
+
+ $this->load->model('design/banner');
+ $this->load->model('tool/image');
+
+ $this->document->addStyle('catalog/view/javascript/jquery/swiper/css/swiper.min.css');
+ $this->document->addStyle('catalog/view/javascript/jquery/swiper/css/opencart.css');
+ $this->document->addScript('catalog/view/javascript/jquery/swiper/js/swiper.jquery.js');
+
+ $data['banners'] = array();
+
+ $results = $this->model_design_banner->getBanner($setting['banner_id']);
+
+ foreach ($results as $result) {
+ if (is_file(DIR_IMAGE . $result['image'])) {
+ $data['banners'][] = array(
+ 'title' => $result['title'],
+ 'link' => $result['link'],
+ 'image' => $this->model_tool_image->resize($result['image'], $setting['width'], $setting['height'])
+ );
+ }
+ }
+
+ $data['module'] = $module++;
+
+ return $this->load->view('extension/module/slideshow', $data);
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/special.php b/public/catalog/controller/extension/module/special.php
new file mode 100644
index 0000000..6f13eed
--- /dev/null
+++ b/public/catalog/controller/extension/module/special.php
@@ -0,0 +1,69 @@
+<?php
+class ControllerExtensionModuleSpecial extends Controller {
+ public function index($setting) {
+ $this->load->language('extension/module/special');
+
+ $this->load->model('catalog/product');
+
+ $this->load->model('tool/image');
+
+ $data['products'] = array();
+
+ $filter_data = array(
+ 'sort' => 'pd.name',
+ 'order' => 'ASC',
+ 'start' => 0,
+ 'limit' => $setting['limit']
+ );
+
+ $results = $this->model_catalog_product->getProductSpecials($filter_data);
+
+ if ($results) {
+ foreach ($results as $result) {
+ if ($result['image']) {
+ $image = $this->model_tool_image->resize($result['image'], $setting['width'], $setting['height']);
+ } else {
+ $image = $this->model_tool_image->resize('placeholder.png', $setting['width'], $setting['height']);
+ }
+
+ if ($this->customer->isLogged() || !$this->config->get('config_customer_price')) {
+ $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
+ } else {
+ $price = false;
+ }
+
+ if ((float)$result['special']) {
+ $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')), $this->session->data['currency']);
+ } else {
+ $special = false;
+ }
+
+ if ($this->config->get('config_tax')) {
+ $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price'], $this->session->data['currency']);
+ } else {
+ $tax = false;
+ }
+
+ if ($this->config->get('config_review_status')) {
+ $rating = $result['rating'];
+ } else {
+ $rating = false;
+ }
+
+ $data['products'][] = array(
+ 'product_id' => $result['product_id'],
+ 'thumb' => $image,
+ 'name' => $result['name'],
+ 'description' => utf8_substr(trim(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'))), 0, $this->config->get('theme_' . $this->config->get('config_theme') . '_product_description_length')) . '..',
+ 'price' => $price,
+ 'special' => $special,
+ 'tax' => $tax,
+ 'rating' => $rating,
+ 'href' => $this->url->link('product/product', 'product_id=' . $result['product_id'])
+ );
+ }
+
+ return $this->load->view('extension/module/special', $data);
+ }
+ }
+} \ No newline at end of file
diff --git a/public/catalog/controller/extension/module/store.php b/public/catalog/controller/extension/module/store.php
new file mode 100644
index 0000000..40a0dd4
--- /dev/null
+++ b/public/catalog/controller/extension/module/store.php
@@ -0,0 +1,40 @@
+<?php
+class ControllerExtensionModuleStore extends Controller {
+ public function index() {
+ $status = true;
+
+ if ($this->config->get('module_store_admin')) {
+ $this->user = new Cart\User($this->registry);
+
+ $status = $this->user->isLogged();
+ }
+
+ if ($status) {
+ $this->load->language('extension/module/store');
+
+ $data['store_id'] = $this->config->get('config_store_id');
+
+ $data['stores'] = array();
+
+ $data['stores'][] = array(
+ 'store_id' => 0,
+ 'name' => $this->language->get('text_default'),
+ 'url' => HTTP_SERVER . 'index.php?route=common/home&session_id=' . $this->session->getId()
+ );
+
+ $this->load->model('setting/store');
+
+ $results = $this->model_setting_store->getStores();
+
+ foreach ($results as $result) {
+ $data['stores'][] = array(
+ 'store_id' => $result['store_id'],
+ 'name' => $result['name'],
+ 'url' => $result['url'] . 'index.php?route=common/home&session_id=' . $this->session->getId()
+ );
+ }
+
+ return $this->load->view('extension/module/store', $data);
+ }
+ }
+}