Jmango360_Japi - Version 2.9.0

Version Notes

* Bug fixes

Download this release

Release Info

Developer Duc Ngo
Extension Jmango360_Japi
Version 2.9.0
Comparing to
See all releases


Code changes from version 2.8.2 to 2.9.0

Files changed (34) hide show
  1. app/code/community/Jmango360/Japi/Block/Adminhtml/Catalog/Product/Grid/Column/Renderer/Hide.php +12 -0
  2. app/code/community/Jmango360/Japi/Block/Checkout/Onepage.php +9 -0
  3. app/code/community/Jmango360/Japi/Helper/Data.php +22 -0
  4. app/code/community/Jmango360/Japi/Helper/Product.php +101 -13
  5. app/code/community/Jmango360/Japi/Helper/Product/File.php +83 -0
  6. app/code/community/Jmango360/Japi/Model/Observer.php +142 -10
  7. app/code/community/Jmango360/Japi/Model/Rest/Cart.php +9 -7
  8. app/code/community/Jmango360/Japi/Model/Rest/Product.php +83 -14
  9. app/code/community/Jmango360/Japi/Model/Rest/Product/Crosssell.php +185 -0
  10. app/code/community/Jmango360/Japi/Model/Rest/Product/List.php +1 -0
  11. app/code/community/Jmango360/Japi/Model/Rest/Product/Related.php +55 -0
  12. app/code/community/Jmango360/Japi/Model/Rest/Product/Search.php +1 -0
  13. app/code/community/Jmango360/Japi/Model/Rest/Product/Upsell.php +64 -0
  14. app/code/community/Jmango360/Japi/Model/Rest/Product/Url.php +125 -0
  15. app/code/community/Jmango360/Japi/controllers/CheckoutController.php +18 -0
  16. app/code/community/Jmango360/Japi/controllers/CustomerController.php +9 -0
  17. app/code/community/Jmango360/Japi/controllers/Rest/MageController.php +9 -1
  18. app/code/community/Jmango360/Japi/controllers/Rest/ProductController.php +28 -0
  19. app/code/community/Jmango360/Japi/etc/config.xml +37 -4
  20. app/code/community/Jmango360/Japi/etc/system.xml +32 -38
  21. app/code/community/Jmango360/Japi/sql/japi_setup/upgrade-2.8.2-2.9.0.php +26 -0
  22. app/design/frontend/base/default/layout/jmango360_japi.xml +1 -1
  23. app/design/frontend/base/default/template/japi/TIG/PostNL/delivery_options/onepage/available.phtml +206 -0
  24. app/design/frontend/base/default/template/japi/checkout/onepage/shipping_method/available.phtml +56 -11
  25. app/design/frontend/base/default/template/japi/form.phtml +15 -2
  26. app/locale/en_US/Jmango360_Japi.csv +5 -3
  27. app/locale/fr_FR/Jmango360_Japi.csv +1 -0
  28. app/locale/it_IT/Jmango360_Japi.csv +1 -0
  29. app/locale/nl_NL/Jmango360_Japi.csv +2 -0
  30. app/locale/pt_BR/Jmango360_Japi.csv +1 -0
  31. app/locale/pt_PT/Jmango360_Japi.csv +1 -0
  32. package.xml +4 -4
  33. skin/frontend/base/default/japi/css/style.css +716 -638
  34. skin/frontend/base/default/japi/css/style.less +109 -1
app/code/community/Jmango360/Japi/Block/Adminhtml/Catalog/Product/Grid/Column/Renderer/Hide.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Jmango360_Japi_Block_Adminhtml_Catalog_Product_Grid_Column_Renderer_Hide extends
4
+ Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Options
5
+ {
6
+ public function render(Varien_Object $row)
7
+ {
8
+ $value = $row->getData($this->getColumn()->getIndex());
9
+ $row->setData($this->getColumn()->getIndex(), !$value ? 0 : 1);
10
+ return parent::render($row);
11
+ }
12
+ }
app/code/community/Jmango360/Japi/Block/Checkout/Onepage.php ADDED
@@ -0,0 +1,9 @@
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2015 JMango360
5
+ */
6
+ class Jmango360_Japi_Block_Checkout_Onepage extends Mage_Checkout_Block_Onepage
7
+ {
8
+
9
+ }
app/code/community/Jmango360/Japi/Helper/Data.php CHANGED
@@ -16,6 +16,18 @@ class Jmango360_Japi_Helper_Data extends Mage_Core_Helper_Abstract
16
  'region', 'region_id', 'postcode', 'telephone', 'fax', 'vat_id'
17
  );
18
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  /**
20
  * @param $form Mage_Eav_Model_Form
21
  * @param $excluded array
@@ -148,6 +160,16 @@ class Jmango360_Japi_Helper_Data extends Mage_Core_Helper_Abstract
148
  return $setup->getAttribute('customer', 'japi');
149
  }
150
 
 
 
 
 
 
 
 
 
 
 
151
  /**
152
  * @param Mage_Sales_Model_Quote $quote
153
  * @return array
16
  'region', 'region_id', 'postcode', 'telephone', 'fax', 'vat_id'
17
  );
18
 
19
+ /**
20
+ * Set session cookie if website not accept SID
21
+ */
22
+ public function checkValidSession()
23
+ {
24
+ $SID = Mage::app()->getRequest()->getParam('SID');
25
+ $sid = Mage::getSingleton('core/session')->getSessionId();
26
+ if ($SID != $sid) {
27
+ setcookie(session_name(), $SID, time() + Mage::app()->getCookie()->getLifetime(), '/');
28
+ }
29
+ }
30
+
31
  /**
32
  * @param $form Mage_Eav_Model_Form
33
  * @param $excluded array
160
  return $setup->getAttribute('customer', 'japi');
161
  }
162
 
163
+ /**
164
+ * Check if product entity has "hide_in_jm360" attribute
165
+ */
166
+ public function hasJapiProductData()
167
+ {
168
+ /* @var $setup Mage_Eav_Model_Entity_Setup */
169
+ $setup = new Mage_Eav_Model_Entity_Setup('core_setup');
170
+ return $setup->getAttribute(Mage_Catalog_Model_Product::ENTITY, 'hide_in_jm360');
171
+ }
172
+
173
  /**
174
  * @param Mage_Sales_Model_Quote $quote
175
  * @return array
app/code/community/Jmango360/Japi/Helper/Product.php CHANGED
@@ -59,7 +59,8 @@ class Jmango360_Japi_Helper_Product extends Mage_Core_Helper_Abstract
59
  'special_from_date',
60
  'special_to_date',
61
  'image',
62
- 'media_gallery'
 
63
  );
64
 
65
  /**
@@ -74,7 +75,8 @@ class Jmango360_Japi_Helper_Product extends Mage_Core_Helper_Abstract
74
  'short_description',
75
  'visibility',
76
  'price',
77
- 'image'
 
78
  );
79
 
80
  /**
@@ -247,12 +249,45 @@ class Jmango360_Japi_Helper_Product extends Mage_Core_Helper_Abstract
247
  $data['available_limit'] = $toolBarBlock->getAvailableLimit();
248
 
249
  $data['current_order'] = $toolBarBlock->getCurrentOrder();
250
- $data['current_direction'] = $toolBarBlock->getCurrentDirection();
 
 
251
  $data['available_orders'] = $toolBarBlock->getAvailableOrders();
252
 
253
  return $data;
254
  }
255
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
256
  /**
257
  * Convert a product to collection and return to api json
258
  *
@@ -294,14 +329,18 @@ class Jmango360_Japi_Helper_Product extends Mage_Core_Helper_Abstract
294
  return null;
295
  }
296
 
 
297
  $collection = Mage::getResourceModel('catalog/product_collection')
298
  ->setStoreId(Mage::app()->getStore()->getId())
299
  ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
 
300
  ->addMinimalPrice()
301
  ->addFinalPrice()
302
  ->addTaxPercents()
303
  ->addIdFilter($product);
304
 
 
 
305
  Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
306
  //Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
307
 
@@ -309,6 +348,20 @@ class Jmango360_Japi_Helper_Product extends Mage_Core_Helper_Abstract
309
  return count($result) ? array_pop($result) : null;
310
  }
311
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
312
  /**
313
  * Convert some products to collection and return to api json
314
  *
@@ -522,6 +575,7 @@ class Jmango360_Japi_Helper_Product extends Mage_Core_Helper_Abstract
522
  $this->_addConfigurableAttributes($product, $result, true);
523
  $this->_addGroupedItems($product, $result, true);
524
  $this->_addBundleInfo($product, $result);
 
525
  } else {
526
  if ($product->getTypeId() == 'bundle') {
527
  $result['bundle_attributes'] = Mage::helper('japi/product_bundle')->getBundleAttributes($product);
@@ -548,14 +602,11 @@ class Jmango360_Japi_Helper_Product extends Mage_Core_Helper_Abstract
548
 
549
  if (in_array($attributeCode, array('short_description', 'description'))) {
550
  if ($attribute->getData('is_wysiwyg_enabled') == 1) {
551
- $html = '<style>';
552
- $html .= 'pre,code,blockquote{white-space:normal!important;}';
553
- $html .= 'table{width:100%!important;}';
554
- $html .= '</style>';
555
  $html .= $productHelper->productAttribute(
556
  $product, $product->getData($attributeCode), $attributeCode
557
  );
558
- $result[$attributeCode] = $html;
559
  } else {
560
  $result[$attributeCode] = $product->getData($attributeCode);
561
  }
@@ -710,12 +761,9 @@ class Jmango360_Japi_Helper_Product extends Mage_Core_Helper_Abstract
710
  if (!$attrContent || $attrContent == '' || trim(strip_tags($attrContent)) == '') {
711
  $result[$attributeCode] = '';
712
  } else {
713
- $html = '<style>';
714
- $html .= 'pre,code,blockquote{white-space:normal!important;}';
715
- $html .= 'table{width:100%!important;}';
716
- $html .= '</style>';
717
  $html .= $attrContent;
718
- $result[$attributeCode] = $html;
719
  }
720
  } else {
721
  $result[$attributeCode] = $product->getData($attributeCode);
@@ -788,6 +836,46 @@ class Jmango360_Japi_Helper_Product extends Mage_Core_Helper_Abstract
788
  return $result;
789
  }
790
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
791
  /**
792
  * @param $product Mage_Catalog_Model_Product
793
  * @param $result
59
  'special_from_date',
60
  'special_to_date',
61
  'image',
62
+ 'media_gallery',
63
+ 'hide_in_jm360'
64
  );
65
 
66
  /**
75
  'short_description',
76
  'visibility',
77
  'price',
78
+ 'image',
79
+ 'hide_in_jm360'
80
  );
81
 
82
  /**
249
  $data['available_limit'] = $toolBarBlock->getAvailableLimit();
250
 
251
  $data['current_order'] = $toolBarBlock->getCurrentOrder();
252
+ $currentDirection = $this->_getCurrentDirection($collection);
253
+ if (!$currentDirection) $currentDirection = $toolBarBlock->getCurrentDirection();
254
+ $data['current_direction'] = $currentDirection;
255
  $data['available_orders'] = $toolBarBlock->getAvailableOrders();
256
 
257
  return $data;
258
  }
259
 
260
+ /**
261
+ * Get Toobar direction from layout frontend
262
+ *
263
+ * @param Mage_Catalog_Model_Resource_Product_Collection $collection
264
+ * @return string
265
+ * @throws Mage_Core_Exception
266
+ */
267
+ protected function _getCurrentDirection($collection)
268
+ {
269
+ $_cacheKey = 'japi_catalog_current_direction_' . Mage::app()->getStore()->getStoreId();
270
+ $cache = Mage::app()->getCache();
271
+ if ($dir = $cache->load($_cacheKey)) {
272
+ return $dir;
273
+ }
274
+ $layout = Mage::app()->getLayout();
275
+ $update = $layout->getUpdate();
276
+ $update->load('catalog_category_layered');
277
+ $layout->generateXml();
278
+ $layout->generateBlocks();
279
+ $block = $layout->getBlock('product_list_toolbar');
280
+ if ($block) {
281
+ $block->setCollection($collection);
282
+ if ($dir = $block->getCurrentDirection()) {
283
+ $cache->save($dir, $_cacheKey, array(Mage_Core_Model_Layout_Update::LAYOUT_GENERAL_CACHE_TAG), null);
284
+ return $dir;
285
+ }
286
+ }
287
+
288
+ return '';
289
+ }
290
+
291
  /**
292
  * Convert a product to collection and return to api json
293
  *
329
  return null;
330
  }
331
 
332
+ /* @var $collection Mage_Catalog_Model_Resource_Product_Collection */
333
  $collection = Mage::getResourceModel('catalog/product_collection')
334
  ->setStoreId(Mage::app()->getStore()->getId())
335
  ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
336
+ ->addFieldToFilter('type_id', array('in' => array('simple', 'configurable', 'grouped', 'bundle')))
337
  ->addMinimalPrice()
338
  ->addFinalPrice()
339
  ->addTaxPercents()
340
  ->addIdFilter($product);
341
 
342
+ $this->applyHideOnAppFilter($collection);
343
+
344
  Mage::getSingleton('catalog/product_status')->addVisibleFilterToCollection($collection);
345
  //Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
346
 
348
  return count($result) ? array_pop($result) : null;
349
  }
350
 
351
+ /**
352
+ * Apply filter 'hide_in_jm360'
353
+ *
354
+ * @param Mage_Catalog_Model_Resource_Product_Collection $collection
355
+ */
356
+ public function applyHideOnAppFilter($collection)
357
+ {
358
+ if (!$collection) return;
359
+ $collection->addAttributeToFilter(array(
360
+ array('attribute' => 'hide_in_jm360', 'null' => true),
361
+ array('attribute' => 'hide_in_jm360', 'eq' => 0)
362
+ ), null, 'left');
363
+ }
364
+
365
  /**
366
  * Convert some products to collection and return to api json
367
  *
575
  $this->_addConfigurableAttributes($product, $result, true);
576
  $this->_addGroupedItems($product, $result, true);
577
  $this->_addBundleInfo($product, $result);
578
+ $this->_addFileInfo($product, $result);
579
  } else {
580
  if ($product->getTypeId() == 'bundle') {
581
  $result['bundle_attributes'] = Mage::helper('japi/product_bundle')->getBundleAttributes($product);
602
 
603
  if (in_array($attributeCode, array('short_description', 'description'))) {
604
  if ($attribute->getData('is_wysiwyg_enabled') == 1) {
605
+ $html = $this->_getCustomHtmlStyle();
 
 
 
606
  $html .= $productHelper->productAttribute(
607
  $product, $product->getData($attributeCode), $attributeCode
608
  );
609
+ $result[$attributeCode] = $this->_cleanHtml($html);
610
  } else {
611
  $result[$attributeCode] = $product->getData($attributeCode);
612
  }
761
  if (!$attrContent || $attrContent == '' || trim(strip_tags($attrContent)) == '') {
762
  $result[$attributeCode] = '';
763
  } else {
764
+ $html = $this->_getCustomHtmlStyle();
 
 
 
765
  $html .= $attrContent;
766
+ $result[$attributeCode] = $this->_cleanHtml($html);
767
  }
768
  } else {
769
  $result[$attributeCode] = $product->getData($attributeCode);
836
  return $result;
837
  }
838
 
839
+ /**
840
+ * Return download files from MageWorx_Downloads
841
+ *
842
+ * @param Mage_Catalog_Model_Product $product
843
+ * @param $result
844
+ */
845
+ protected function _addFileInfo($product, &$result)
846
+ {
847
+ if (!$this->isModuleEnabled('MageWorx_Downloads')) return;
848
+ $result['attachment'] = Mage::helper('japi/product_file')->getItems($product);
849
+ }
850
+
851
+ /**
852
+ * Return custom CSS for WYSIWYG field
853
+ */
854
+ protected function _getCustomHtmlStyle()
855
+ {
856
+ $css = '<style type="text/css">';
857
+ $css .= 'pre,code,blockquote{white-space:normal!important;}';
858
+ $css .= 'table{width:100%!important;}';
859
+ if ($custtomCss = Mage::getStoreConfig('japi/jmango_rest_catalog_settings/custom_css')) {
860
+ $css .= str_replace("\n", '', $custtomCss);
861
+ }
862
+ $css .= '</style>';
863
+
864
+ return $css;
865
+ }
866
+
867
+ /**
868
+ * Remove: &nbsp;
869
+ *
870
+ * @param string $html
871
+ * @return string
872
+ */
873
+ protected function _cleanHtml($html)
874
+ {
875
+ if (!$html) return $html;
876
+ return str_replace('&nbsp; ', ' ', str_replace('&nbsp;&nbsp;', ' ', $html));
877
+ }
878
+
879
  /**
880
  * @param $product Mage_Catalog_Model_Product
881
  * @param $result
app/code/community/Jmango360/Japi/Helper/Product/File.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Copyright 2015 JMango360
5
+ */
6
+ class Jmango360_Japi_Helper_Product_File extends Mage_Core_Helper_Abstract
7
+ {
8
+ /**
9
+ * @param Mage_Catalog_Model_Product $product
10
+ * @return null|array
11
+ */
12
+ public function getItems($product)
13
+ {
14
+ if (!$product->getId()) return null;
15
+ $items = $this->_getProductFiles($product->getId());
16
+ if (!$items) return null;
17
+ /* @var MageWorx_Downloads_Helper_Data $helper */
18
+ $helper = Mage::helper('mageworx_downloads');
19
+ if ($helper->getGroupByCategory() || $helper->checkCustomerAccess($items)) {
20
+ $result['label'] = $this->_getTitle($product);
21
+ foreach ($items as $item) {
22
+ $result['items'][] = $this->_getDownloadItem($item);
23
+ }
24
+ return $result;
25
+ }
26
+ }
27
+
28
+ protected function _getDownloadItem($item)
29
+ {
30
+ /* @var MageWorx_Downloads_Helper_Data $helper */
31
+ $helper = Mage::helper('mageworx_downloads');
32
+ $data = array();
33
+ $data['name'] = $item->getName();
34
+ $data['url'] = $item->getUrl() ? $item->getUrl() : $helper->getDownloadLink($item);
35
+ $data['icon'] = $helper->getIconUrl($item->getType());
36
+ $data['size'] = $helper->isDisplaySize() ? $helper->prepareFileSize($item->getSize()) : null;
37
+ $data['description'] = $item->getFileDescription();
38
+
39
+ return $data;
40
+ }
41
+
42
+ protected function _getTitle($product)
43
+ {
44
+ $productDownloadsTitle = trim(Mage::helper('catalog/output')->productAttribute(
45
+ $product,
46
+ $product->getDownloadsTitle(),
47
+ 'downloads_title'
48
+ ));
49
+
50
+ if ($productDownloadsTitle) {
51
+ return $productDownloadsTitle;
52
+ } else {
53
+ return Mage::helper('mageworx_downloads')->getProductDownloadsTitle();
54
+ }
55
+ }
56
+
57
+ protected function _getProductFiles($productId)
58
+ {
59
+ $_helper = Mage::helper('mageworx_downloads');
60
+ $ids = Mage::getResourceSingleton('mageworx_downloads/relation')->getFileIds($productId);
61
+
62
+ if (is_array($ids) && $ids) {
63
+ $files = Mage::getResourceSingleton('mageworx_downloads/files_collection');
64
+ $files->addResetFilter()
65
+ ->addFilesFilter($ids)
66
+ ->addStatusFilter()
67
+ ->addCategoryStatusFilter()
68
+ ->addStoreFilter()
69
+ ->addSortOrder();
70
+
71
+ $items = $files->getItems();
72
+ foreach ($items as $k => $item) {
73
+ if (!$_helper->checkCustomerGroupAccess($item) && $_helper->isHideFiles()) {
74
+ unset($items[$k]);
75
+ }
76
+ }
77
+
78
+ return $items;
79
+ }
80
+
81
+ return false;
82
+ }
83
+ }
app/code/community/Jmango360/Japi/Model/Observer.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  class Jmango360_Japi_Model_Observer
4
  {
5
- public function addressBookPostcodeCheck($observe)
6
  {
7
  if (Mage::app()->getRequest()->getModuleName() != 'japi') return;
8
  if (!Mage::helper('core')->isModuleEnabled('TIG_PostNL')) return;
@@ -16,7 +16,7 @@ class Jmango360_Japi_Model_Observer
16
  $block->setTemplate('japi/TIG/PostNL/address_validation/customer/address/edit.phtml');
17
  }
18
 
19
- public function shippingAddressPostcodeCheck($observe)
20
  {
21
  if (Mage::app()->getRequest()->getModuleName() != 'japi') return;
22
  if (!Mage::helper('core')->isModuleEnabled('TIG_PostNL')) return;
@@ -25,12 +25,15 @@ class Jmango360_Japi_Model_Observer
25
  $blockClass = Mage::getConfig()->getBlockClassName(TIG_PostNL_Model_AddressValidation_Observer_Onepage::SHIPPING_ADDRESS_BLOCK_NAME);
26
  $block = $observe->getBlock();
27
  if (!$block || get_class($block) != $blockClass) return;
 
 
 
28
  if (!Mage::helper('postnl/addressValidation')->isPostcodeCheckEnabled(null, TIG_PostNL_Model_AddressValidation_Observer_Onepage::POSTCODECHECK_ENV)) return;
29
  Mage::app()->getStore()->setConfig(TIG_PostNL_Helper_AddressValidation::XPATH_POSTCODE_CHECK_IN_CHECKOUT, 0);
30
  $block->setTemplate('japi/TIG/PostNL/address_validation/checkout/onepage/shipping.phtml');
31
  }
32
 
33
- public function billingAddressPostcodeCheck($observe)
34
  {
35
  if (Mage::app()->getRequest()->getModuleName() != 'japi') return;
36
  if (!Mage::helper('core')->isModuleEnabled('TIG_PostNL')) return;
@@ -41,9 +44,27 @@ class Jmango360_Japi_Model_Observer
41
  if (!$block || get_class($block) != $blockClass) return;
42
  if (!Mage::helper('postnl/addressValidation')->isPostcodeCheckEnabled(null, TIG_PostNL_Model_AddressValidation_Observer_Onepage::POSTCODECHECK_ENV)) return;
43
  Mage::app()->getStore()->setConfig(TIG_PostNL_Helper_AddressValidation::XPATH_POSTCODE_CHECK_IN_CHECKOUT, 0);
 
44
  $block->setTemplate('japi/TIG/PostNL/address_validation/checkout/onepage/billing.phtml');
45
  }
46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
47
  public function handleErrorCheckout($observe)
48
  {
49
  /* @var $server Jmango360_Japi_Model_Server */
@@ -188,12 +209,17 @@ class Jmango360_Japi_Model_Observer
188
  $route = explode('/', $request->getPathInfo());
189
  if (in_array('system_config', $route)) return;
190
  if (count($route) > 3 && $route[1] == 'japi') {
191
- if ($route[2] == 'checkout' && $route[3] == 'onepage') {
192
  return;
193
  }
194
  Mage::register('_singleton/core/session', Mage::getModel('japi/core_session', array('name' => 'frontend')), true);
195
  } elseif (count($route) > 3 && in_array('japi', $route)) {
196
- if (in_array('checkout', $route) && in_array('onepage', $route)) {
 
 
 
 
 
197
  return;
198
  }
199
  Mage::register('_singleton/core/session', Mage::getModel('japi/core_session', array('name' => 'frontend')), true);
@@ -201,6 +227,12 @@ class Jmango360_Japi_Model_Observer
201
  }
202
  }
203
 
 
 
 
 
 
 
204
  public function restAdminActionPreDispatch($observe)
205
  {
206
  /* @var $action Mage_Core_Controller_Varien_Action */
@@ -244,6 +276,26 @@ class Jmango360_Japi_Model_Observer
244
  }
245
  }
246
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
247
  protected function _logCronjob($str)
248
  {
249
  Mage::log($str, null, 'japi_cron.log');
@@ -391,6 +443,27 @@ class Jmango360_Japi_Model_Observer
391
  'filter_condition_callback' => array($this, 'japiCustomerFilterConditionCallback')
392
  ), 'entity_id');
393
  break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
394
  }
395
  }
396
 
@@ -399,20 +472,32 @@ class Jmango360_Japi_Model_Observer
399
  */
400
  public function eavCollectionAbstractLoadBefore($observe)
401
  {
 
 
 
402
  /* @var $collection Varien_Data_Collection_Db */
403
  $collection = $observe->getEvent()->getCollection();
404
  if (!$collection) return;
405
 
406
  if ($collection instanceof Mage_Customer_Model_Resource_Customer_Collection) {
407
- $this->_addJapiToCustomerSelect($collection);
 
 
 
 
 
 
 
 
 
408
  }
409
  }
410
 
411
  /**
412
- * @param $collection Mage_Sales_Model_Resource_Order_Grid_Collection
413
- * @param $column Mage_Adminhtml_Block_Widget_Grid_Column
414
- *
415
  * Customer mobile filter callback
 
 
 
416
  */
417
  public function japiCustomerFilterConditionCallback($collection, $column)
418
  {
@@ -423,7 +508,7 @@ class Jmango360_Japi_Model_Observer
423
  /**
424
  * Add japi with ifnull condition to customer select
425
  *
426
- * @param Varien_Data_Collection_Db $collection
427
  */
428
  protected function _addJapiToCustomerSelect($collection)
429
  {
@@ -437,4 +522,51 @@ class Jmango360_Japi_Model_Observer
437
  Mage::logException($e);
438
  }
439
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
440
  }
2
 
3
  class Jmango360_Japi_Model_Observer
4
  {
5
+ public function TIG_PostNL__addressBookPostcodeCheck($observe)
6
  {
7
  if (Mage::app()->getRequest()->getModuleName() != 'japi') return;
8
  if (!Mage::helper('core')->isModuleEnabled('TIG_PostNL')) return;
16
  $block->setTemplate('japi/TIG/PostNL/address_validation/customer/address/edit.phtml');
17
  }
18
 
19
+ public function TIG_PostNL__shippingAddressPostcodeCheck($observe)
20
  {
21
  if (Mage::app()->getRequest()->getModuleName() != 'japi') return;
22
  if (!Mage::helper('core')->isModuleEnabled('TIG_PostNL')) return;
25
  $blockClass = Mage::getConfig()->getBlockClassName(TIG_PostNL_Model_AddressValidation_Observer_Onepage::SHIPPING_ADDRESS_BLOCK_NAME);
26
  $block = $observe->getBlock();
27
  if (!$block || get_class($block) != $blockClass) return;
28
+ if (Mage::getSingleton('core/session')->hasData(TIG_PostNL_Helper_AddressValidation::XPATH_POSTCODE_CHECK_IN_CHECKOUT)) {
29
+ Mage::app()->getStore()->setConfig(TIG_PostNL_Helper_AddressValidation::XPATH_POSTCODE_CHECK_IN_CHECKOUT, 1);
30
+ }
31
  if (!Mage::helper('postnl/addressValidation')->isPostcodeCheckEnabled(null, TIG_PostNL_Model_AddressValidation_Observer_Onepage::POSTCODECHECK_ENV)) return;
32
  Mage::app()->getStore()->setConfig(TIG_PostNL_Helper_AddressValidation::XPATH_POSTCODE_CHECK_IN_CHECKOUT, 0);
33
  $block->setTemplate('japi/TIG/PostNL/address_validation/checkout/onepage/shipping.phtml');
34
  }
35
 
36
+ public function TIG_PostNL__billingAddressPostcodeCheck($observe)
37
  {
38
  if (Mage::app()->getRequest()->getModuleName() != 'japi') return;
39
  if (!Mage::helper('core')->isModuleEnabled('TIG_PostNL')) return;
44
  if (!$block || get_class($block) != $blockClass) return;
45
  if (!Mage::helper('postnl/addressValidation')->isPostcodeCheckEnabled(null, TIG_PostNL_Model_AddressValidation_Observer_Onepage::POSTCODECHECK_ENV)) return;
46
  Mage::app()->getStore()->setConfig(TIG_PostNL_Helper_AddressValidation::XPATH_POSTCODE_CHECK_IN_CHECKOUT, 0);
47
+ Mage::getSingleton('core/session')->setData(TIG_PostNL_Helper_AddressValidation::XPATH_POSTCODE_CHECK_IN_CHECKOUT, 1);
48
  $block->setTemplate('japi/TIG/PostNL/address_validation/checkout/onepage/billing.phtml');
49
  }
50
 
51
+ public function TIG_PostNL__addDeliveryOptions($observe)
52
+ {
53
+ if (Mage::app()->getRequest()->getModuleName() != 'japi') return;
54
+ if (!Mage::helper('core')->isModuleEnabled('TIG_PostNL')) return;
55
+ if (!class_exists('TIG_PostNL_Model_DeliveryOptions_Observer_ShippingMethodAvailable')) return;
56
+ if (!class_exists('TIG_PostNL_Helper_DeliveryOptions')) return;
57
+ $blockClass = Mage::getConfig()->getBlockClassName(TIG_PostNL_Model_DeliveryOptions_Observer_ShippingMethodAvailable::BLOCK_NAME);
58
+ $block = $observe->getBlock();
59
+ if (!$block || get_class($block) != $blockClass) return;
60
+ /* @var $model TIG_PostNL_Model_DeliveryOptions_Observer_ShippingMethodAvailable */
61
+ $model = Mage::getSingleton('postnl_deliveryoptions/observer_shippingMethodAvailable');
62
+ if (!$model->getCanUseDeliveryOptions()) return;
63
+ $model->setBpostBlockModified(true);
64
+ //Mage::app()->getStore()->setConfig(TIG_PostNL_Helper_DeliveryOptions::XPATH_DELIVERY_OPTIONS_ACTIVE, 0);
65
+ $block->setTemplate('japi/TIG/PostNL/delivery_options/onepage/available.phtml');
66
+ }
67
+
68
  public function handleErrorCheckout($observe)
69
  {
70
  /* @var $server Jmango360_Japi_Model_Server */
209
  $route = explode('/', $request->getPathInfo());
210
  if (in_array('system_config', $route)) return;
211
  if (count($route) > 3 && $route[1] == 'japi') {
212
+ if (!$this->_getListModuleNeedToByPassSession() && ($route[2] == 'checkout' && $route[3] == 'onepage')) {
213
  return;
214
  }
215
  Mage::register('_singleton/core/session', Mage::getModel('japi/core_session', array('name' => 'frontend')), true);
216
  } elseif (count($route) > 3 && in_array('japi', $route)) {
217
+ if (!$this->_getListModuleNeedToByPassSession() && (in_array('checkout', $route) && in_array('onepage', $route))) {
218
+ return;
219
+ }
220
+ Mage::register('_singleton/core/session', Mage::getModel('japi/core_session', array('name' => 'frontend')), true);
221
+ } elseif (strpos(Mage::app()->getRequest()->getHeader('Referer'), 'japi/checkout/onepage') !== false) {
222
+ if (!$this->_getListModuleNeedToByPassSession()) {
223
  return;
224
  }
225
  Mage::register('_singleton/core/session', Mage::getModel('japi/core_session', array('name' => 'frontend')), true);
227
  }
228
  }
229
 
230
+ protected function _getListModuleNeedToByPassSession()
231
+ {
232
+ $helper = Mage::helper('japi');
233
+ return $helper->isModuleEnabled('TIG_PostNL');
234
+ }
235
+
236
  public function restAdminActionPreDispatch($observe)
237
  {
238
  /* @var $action Mage_Core_Controller_Varien_Action */
276
  }
277
  }
278
 
279
+ public function reindexProductAttributeData()
280
+ {
281
+ try {
282
+ if (Mage::getStoreConfigFlag('japi/indexer/product_attribute_show_in_jm360')) return 2;
283
+ /* @var $productCollection Mage_Catalog_Model_Resource_Product_Collection */
284
+ $productCollection = Mage::getResourceSingleton('catalog/product_collection');
285
+ $productCollection->addFieldToFilter('type_id', array('in' => array('simple', 'configurable', 'grouped', 'bundle')));
286
+ $productIds = $productCollection->getAllIds();
287
+ /* @var $productAction Mage_Catalog_Model_Product_Action */
288
+ $productAction = Mage::getSingleton('catalog/product_action');
289
+ $productAction->updateAttributes($productIds, array('show_in_jm360' => '1'), 0);
290
+ Mage::getConfig()->saveConfig('japi/indexer/product_attribute_show_in_jm360', 1);
291
+ Mage::app()->cleanCache(array(Mage_Core_Model_Config::CACHE_TAG));
292
+ return 1;
293
+ } catch (Exception $e) {
294
+ Mage::logException($e);
295
+ return 0;
296
+ }
297
+ }
298
+
299
  protected function _logCronjob($str)
300
  {
301
  Mage::log($str, null, 'japi_cron.log');
443
  'filter_condition_callback' => array($this, 'japiCustomerFilterConditionCallback')
444
  ), 'entity_id');
445
  break;
446
+ case 'adminhtml/catalog_product_grid':
447
+ if (!Mage::getStoreConfigFlag('japi/jmango_rest_catalog_settings/visible_on_app')) {
448
+ return;
449
+ }
450
+
451
+ if (!$helper->hasJapiProductData()) {
452
+ return;
453
+ }
454
+
455
+ $grid->addColumnAfter('hide_in_jm360', array(
456
+ 'header' => $helper->__('Hide on JMango360'),
457
+ 'index' => 'hide_in_jm360',
458
+ 'type' => 'options',
459
+ 'width' => '70px',
460
+ 'options' => array(
461
+ 0 => $helper->__('No'),
462
+ 1 => $helper->__('Yes')
463
+ ),
464
+ 'renderer' => 'Jmango360_Japi_Block_Adminhtml_Catalog_Product_Grid_Column_Renderer_Hide'
465
+ ), 'visibility');
466
+ break;
467
  }
468
  }
469
 
472
  */
473
  public function eavCollectionAbstractLoadBefore($observe)
474
  {
475
+ /* @var $helper Jmango360_Japi_Helper_Data */
476
+ $helper = Mage::helper('japi');
477
+
478
  /* @var $collection Varien_Data_Collection_Db */
479
  $collection = $observe->getEvent()->getCollection();
480
  if (!$collection) return;
481
 
482
  if ($collection instanceof Mage_Customer_Model_Resource_Customer_Collection) {
483
+ if (Mage::getStoreConfigFlag('japi/jmango_rest_customer_settings/display_customer_from') && $helper->hasJapiCustomerData()) {
484
+ $this->_addJapiToCustomerSelect($collection);
485
+ }
486
+ }
487
+
488
+ if ($collection instanceof Mage_Catalog_Model_Resource_Product_Collection) {
489
+ if (Mage::getStoreConfigFlag('japi/jmango_rest_catalog_settings/visible_on_app') && $helper->hasJapiProductData()) {
490
+ //$this->_addJapiToProductSelect($collection);
491
+ $collection->addAttributeToSelect('hide_in_jm360');
492
+ }
493
  }
494
  }
495
 
496
  /**
 
 
 
497
  * Customer mobile filter callback
498
+ *
499
+ * @param $collection Mage_Customer_Model_Resource_Customer_Collection
500
+ * @param $column Mage_Adminhtml_Block_Widget_Grid_Column
501
  */
502
  public function japiCustomerFilterConditionCallback($collection, $column)
503
  {
508
  /**
509
  * Add japi with ifnull condition to customer select
510
  *
511
+ * @param Mage_Customer_Model_Resource_Customer_Collection $collection
512
  */
513
  protected function _addJapiToCustomerSelect($collection)
514
  {
522
  Mage::logException($e);
523
  }
524
  }
525
+
526
+ /**
527
+ * Support TIG_PostNL
528
+ *
529
+ * @param Varien_Event_Observer $observer
530
+ * @return $this
531
+ */
532
+ public function TIG_PostNL__saveOrderOptions(Varien_Event_Observer $observer)
533
+ {
534
+ if (!Mage::helper('core')->isModuleEnabled('TIG_PostNL'))
535
+ return $this;
536
+
537
+ /* @var $obj TIG_PostNL_Model_DeliveryOptions_Observer_UpdatePostnlOrder */
538
+ $obj = Mage::getSingleton('postnl_deliveryoptions/observer_updatePostnlOrder');
539
+ $obj->saveOptions($observer);
540
+ }
541
+
542
+ /**
543
+ * Support Vaimo_Klarna
544
+ *
545
+ * @param Varien_Event_Observer $observer
546
+ * @return $this
547
+ */
548
+ public function Vaimo_Klarna__checkLaunchKlarnaCheckout(Varien_Event_Observer $observer)
549
+ {
550
+ if (!Mage::helper('core')->isModuleEnabled('Vaimo_Klarna'))
551
+ return $this;
552
+
553
+ /* @var $obj Vaimo_Klarna_Model_Observer */
554
+ $obj = Mage::getSingleton('klarna/observer');
555
+ $obj->checkLaunchKlarnaCheckout($observer);
556
+ }
557
+
558
+ /**
559
+ * MPLUGIN-1324: fix issue "Session expired" for Japi checkout onepage
560
+ *
561
+ * @param Varien_Event_Observer $observer
562
+ * @return $this
563
+ */
564
+ public function japiOnepagePreDispatch(Varien_Event_Observer $observer)
565
+ {
566
+ $session = Mage::getSingleton('core/session');
567
+ $sessionId = $session->getSessionId();
568
+ /** @var Mage_Core_Model_Cookie $cookie */
569
+ $cookie = Mage::getModel('core/cookie');
570
+ $cookie->set('frontend', $sessionId, null, '/japi/checkout', Mage::app()->getRequest()->getHttpHost(), null, true);
571
+ }
572
  }
app/code/community/Jmango360/Japi/Model/Rest/Cart.php CHANGED
@@ -80,14 +80,16 @@ class Jmango360_Japi_Model_Rest_Cart extends Mage_Checkout_Model_Cart
80
  $session->replaceQuote($quote);
81
  }
82
 
83
- public function getCartData()
84
  {
85
- // if mobile version < 2.9.0, we should throw any error found
86
- $throwError = Mage::getSingleton('core/session')->getIsOffilneCart();
 
87
 
88
- $this->_validateQuote(!$throwError);
89
- $this->_validateMinimumAmount(!$throwError);
90
- $this->_validateGuestCanCheckout(!$throwError);
 
91
 
92
  $cart = $this->getQuote()->getData();
93
 
@@ -288,7 +290,7 @@ class Jmango360_Japi_Model_Rest_Cart extends Mage_Checkout_Model_Cart
288
  'type' => 1
289
  );
290
 
291
- $data['cart'] = $this->getCartData();
292
  if ($data['cart'] === false) {
293
  return $this->_getCart();
294
  }
80
  $session->replaceQuote($quote);
81
  }
82
 
83
+ public function getCartData($needValidate = true)
84
  {
85
+ if ($needValidate) {
86
+ // if mobile version < 2.9.0, we should throw any error found
87
+ $throwError = Mage::getSingleton('core/session')->getIsOffilneCart();
88
 
89
+ $this->_validateQuote(!$throwError);
90
+ $this->_validateMinimumAmount(!$throwError);
91
+ $this->_validateGuestCanCheckout(!$throwError);
92
+ }
93
 
94
  $cart = $this->getQuote()->getData();
95
 
290
  'type' => 1
291
  );
292
 
293
+ $data['cart'] = $this->getCartData(false);
294
  if ($data['cart'] === false) {
295
  return $this->_getCart();
296
  }
app/code/community/Jmango360/Japi/Model/Rest/Product.php CHANGED
@@ -38,6 +38,26 @@ class Jmango360_Japi_Model_Rest_Product extends Mage_Core_Model_Abstract
38
  $this->_getResponse()->render($data);
39
  $this->_getResponse()->setHttpResponseCode(Jmango360_Japi_Model_Server::HTTP_OK);
40
  break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  default:
42
  throw new Jmango360_Japi_Exception(
43
  Mage::helper('japi')->__('Resource method not implemented'),
@@ -46,6 +66,42 @@ class Jmango360_Japi_Model_Rest_Product extends Mage_Core_Model_Abstract
46
  }
47
  }
48
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  protected function _getProductList()
50
  {
51
  /* @var $model Jmango360_Japi_Model_Rest_Product_List */
@@ -74,6 +130,29 @@ class Jmango360_Japi_Model_Rest_Product extends Mage_Core_Model_Abstract
74
  }
75
 
76
  protected function _getProductDetail()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  {
78
  $id = $this->_getRequest()->getParam('product_id', 0);
79
 
@@ -84,27 +163,17 @@ class Jmango360_Japi_Model_Rest_Product extends Mage_Core_Model_Abstract
84
  );
85
  }
86
 
87
- $product = Mage::getModel('catalog/product')->load($id, array('sku'));
88
- if (!$product->getId()) {
89
  throw new Jmango360_Japi_Exception(
90
  Mage::helper('japi')->__('Product not found'),
91
  Jmango360_Japi_Model_Request::HTTP_INTERNAL_ERROR
92
  );
93
  }
94
 
95
- Mage::dispatchEvent('catalog_controller_product_view', array('product' => $product));
96
-
97
- /* @var $helper Jmango360_Japi_Helper_Product */
98
- $helper = Mage::helper('japi/product');
99
- $data['product'] = $helper->convertProductIdToApiResponseV2($id);
100
- if (!$data['product']) {
101
- throw new Jmango360_Japi_Exception(
102
- Mage::helper('japi')->__('Product not found'),
103
- Jmango360_Japi_Model_Request::HTTP_INTERNAL_ERROR
104
- );
105
- }
106
 
107
- return $data;
108
  }
109
 
110
  protected function _getRecentlyViewed()
38
  $this->_getResponse()->render($data);
39
  $this->_getResponse()->setHttpResponseCode(Jmango360_Japi_Model_Server::HTTP_OK);
40
  break;
41
+ case 'getRelated' . Jmango360_Japi_Model_Request::OPERATION_RETRIEVE:
42
+ $data = $this->_getRelatedProducts();
43
+ $this->_getResponse()->render($data);
44
+ $this->_getResponse()->setHttpResponseCode(Jmango360_Japi_Model_Server::HTTP_OK);
45
+ break;
46
+ case 'getCrossSell' . Jmango360_Japi_Model_Request::OPERATION_RETRIEVE:
47
+ $data = $this->_getCrossSellProducts();
48
+ $this->_getResponse()->render($data);
49
+ $this->_getResponse()->setHttpResponseCode(Jmango360_Japi_Model_Server::HTTP_OK);
50
+ break;
51
+ case 'getUpSell' . Jmango360_Japi_Model_Request::OPERATION_RETRIEVE:
52
+ $data = $this->_getUpSellProducts();
53
+ $this->_getResponse()->render($data);
54
+ $this->_getResponse()->setHttpResponseCode(Jmango360_Japi_Model_Server::HTTP_OK);
55
+ break;
56
+ case 'getProductId' . Jmango360_Japi_Model_Request::OPERATION_RETRIEVE:
57
+ $data = $this->_getProductId();
58
+ $this->_getResponse()->render($data);
59
+ $this->_getResponse()->setHttpResponseCode(Jmango360_Japi_Model_Server::HTTP_OK);
60
+ break;
61
  default:
62
  throw new Jmango360_Japi_Exception(
63
  Mage::helper('japi')->__('Resource method not implemented'),
66
  }
67
  }
68
 
69
+ protected function _getProductId()
70
+ {
71
+ /* @var $model Jmango360_Japi_Model_Rest_Product_Url */
72
+ $model = Mage::getModel('japi/rest_product_url');
73
+ $data = $model->getProductId();
74
+
75
+ return $data;
76
+ }
77
+
78
+ protected function _getRelatedProducts()
79
+ {
80
+ /* @var $model Jmango360_Japi_Model_Rest_Product_Related */
81
+ $model = Mage::getModel('japi/rest_product_related');
82
+ $data = $model->getList();
83
+
84
+ return $data;
85
+ }
86
+
87
+ protected function _getCrossSellProducts()
88
+ {
89
+ /* @var $model Jmango360_Japi_Model_Rest_Product_Crosssell */
90
+ $model = Mage::getModel('japi/rest_product_crosssell');
91
+ $data = $model->getList();
92
+
93
+ return $data;
94
+ }
95
+
96
+ protected function _getUpSellProducts()
97
+ {
98
+ /* @var $model Jmango360_Japi_Model_Rest_Product_Upsell */
99
+ $model = Mage::getModel('japi/rest_product_upsell');
100
+ $data = $model->getList();
101
+
102
+ return $data;
103
+ }
104
+
105
  protected function _getProductList()
106
  {
107
  /* @var $model Jmango360_Japi_Model_Rest_Product_List */
130
  }
131
 
132
  protected function _getProductDetail()
133
+ {
134
+ $product = $this->_initProduct();
135
+
136
+ Mage::dispatchEvent('catalog_controller_product_view', array('product' => $product));
137
+
138
+ /* @var $helper Jmango360_Japi_Helper_Product */
139
+ $helper = Mage::helper('japi/product');
140
+ $data['product'] = $helper->convertProductIdToApiResponseV2($product->getId());
141
+ if (!$data['product']) {
142
+ throw new Jmango360_Japi_Exception(
143
+ Mage::helper('japi')->__('Product not found'),
144
+ Jmango360_Japi_Model_Request::HTTP_INTERNAL_ERROR
145
+ );
146
+ }
147
+
148
+ return $data;
149
+ }
150
+
151
+ /**
152
+ * @return Mage_Catalog_Model_Product
153
+ * @throws Jmango360_Japi_Exception
154
+ */
155
+ protected function _initProduct()
156
  {
157
  $id = $this->_getRequest()->getParam('product_id', 0);
158
 
163
  );
164
  }
165
 
166
+ $product = Mage::getModel('catalog/product')->load($id, array('sku', 'hide_in_jm360'));
167
+ if (!$product->getId() || $product->getData('hide_in_jm360') == 1) {
168
  throw new Jmango360_Japi_Exception(
169
  Mage::helper('japi')->__('Product not found'),
170
  Jmango360_Japi_Model_Request::HTTP_INTERNAL_ERROR
171
  );
172
  }
173
 
174
+ Mage::register('current_product', $product);
 
 
 
 
 
 
 
 
 
 
175
 
176
+ return $product;
177
  }
178
 
179
  protected function _getRecentlyViewed()
app/code/community/Jmango360/Japi/Model/Rest/Product/Crosssell.php ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Jmango360_Japi_Model_Rest_Product_Crosssell extends Jmango360_Japi_Model_Rest_Product
4
+ {
5
+ const LIMIT = 99;
6
+
7
+ public function getList()
8
+ {
9
+ $id = $this->_getRequest()->getParam('product_id', null);
10
+ if ($id) {
11
+ return $this->_getListByProduct();
12
+ } else {
13
+ return $this->_getListByCart();
14
+ }
15
+ }
16
+
17
+ protected function _getListByProduct()
18
+ {
19
+ $product = $this->_initProduct();
20
+
21
+ $collection = $product->getCrossSellProductCollection()
22
+ ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
23
+ ->setPositionOrder()
24
+ ->addStoreFilter();
25
+
26
+ Mage::helper('japi/product')->applyHideOnAppFilter($collection);
27
+ Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
28
+
29
+ $collection->load();
30
+ foreach ($collection as $product) {
31
+ $product->setDoNotUseCategoryId(true);
32
+ }
33
+
34
+ /* @var $helper Jmango360_Japi_Helper_Product */
35
+ $helper = Mage::helper('japi/product');
36
+
37
+ $data['products'] = $helper->convertProductCollectionToApiResponseV2($collection);
38
+
39
+ return $data;
40
+ }
41
+
42
+ protected function _getListByCart()
43
+ {
44
+ $ninProductIds = $this->_getCartProductIds();
45
+ if ($ninProductIds) {
46
+ $lastAdded = (int)$this->_getLastAddedProductId();
47
+ $items = array();
48
+ if ($lastAdded) {
49
+ $collection = $this->_getCollection()->addProductFilter($lastAdded);
50
+ if (!empty($ninProductIds)) {
51
+ $collection->addExcludeProductFilter($ninProductIds);
52
+ }
53
+ $collection->setPositionOrder()->load();
54
+
55
+ foreach ($collection as $item) {
56
+ $ninProductIds[] = $item->getId();
57
+ $items[] = $item;
58
+ }
59
+ }
60
+
61
+ if (count($items) < self::LIMIT) {
62
+ $filterProductIds = array_merge($this->_getCartProductIds(), $this->_getCartProductIdsRel());
63
+ $collection = $this->_getCollection()
64
+ ->addProductFilter($filterProductIds)
65
+ ->addExcludeProductFilter($ninProductIds)
66
+ ->setPageSize(self::LIMIT - count($items))
67
+ ->setGroupBy()
68
+ ->setPositionOrder()
69
+ ->load();
70
+
71
+ foreach ($collection as $item) {
72
+ $items[] = $item;
73
+ }
74
+ }
75
+
76
+ /* @var $helper Jmango360_Japi_Helper_Product */
77
+ $helper = Mage::helper('japi/product');
78
+
79
+ $data['products'] = $helper->convertProductCollectionToApiResponseV2($collection);
80
+ } else {
81
+ $data['products'] = array();
82
+ }
83
+
84
+ return $data;
85
+ }
86
+
87
+ /**
88
+ * Get ids of products that are in cart
89
+ *
90
+ * @return array
91
+ */
92
+ protected function _getCartProductIds()
93
+ {
94
+ $ids = array();
95
+ foreach ($this->getQuote()->getAllItems() as $item) {
96
+ if ($product = $item->getProduct()) {
97
+ $ids[] = $product->getId();
98
+ }
99
+ }
100
+
101
+ return $ids;
102
+ }
103
+
104
+ /**
105
+ * Retrieve Array of product ids which have special relation with products in Cart
106
+ * For example simple product as part of Grouped product
107
+ *
108
+ * @return array
109
+ */
110
+ protected function _getCartProductIdsRel()
111
+ {
112
+ $productIds = array();
113
+ foreach ($this->getQuote()->getAllItems() as $quoteItem) {
114
+ $productTypeOpt = $quoteItem->getOptionByCode('product_type');
115
+ if ($productTypeOpt instanceof Mage_Sales_Model_Quote_Item_Option
116
+ && $productTypeOpt->getValue() == Mage_Catalog_Model_Product_Type_Grouped::TYPE_CODE
117
+ && $productTypeOpt->getProductId()
118
+ ) {
119
+ $productIds[] = $productTypeOpt->getProductId();
120
+ }
121
+ }
122
+
123
+ return $productIds;
124
+ }
125
+
126
+ /**
127
+ * Get last product ID that was added to cart and remove this information from session
128
+ *
129
+ * @return int
130
+ */
131
+ protected function _getLastAddedProductId()
132
+ {
133
+ return Mage::getSingleton('checkout/session')->getLastAddedProductId(true);
134
+ }
135
+
136
+ /**
137
+ * Get crosssell products collection
138
+ *
139
+ * @return Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Link_Product_Collection
140
+ */
141
+ protected function _getCollection()
142
+ {
143
+ $collection = Mage::getModel('catalog/product_link')->useCrossSellLinks()
144
+ ->getProductCollection()
145
+ ->setStoreId(Mage::app()->getStore()->getId())
146
+ ->addStoreFilter()
147
+ ->setPageSize(self::LIMIT);
148
+ $this->_addProductAttributesAndPrices($collection);
149
+
150
+ Mage::helper('japi/product')->applyHideOnAppFilter($collection);
151
+ Mage::getSingleton('catalog/product_status')->addSaleableFilterToCollection($collection);
152
+ Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
153
+ Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($collection);
154
+
155
+ return $collection;
156
+ }
157
+
158
+ /**
159
+ * Add all attributes and apply pricing logic to products collection
160
+ * to get correct values in different products lists.
161
+ * E.g. crosssells, upsells, new products, recently viewed
162
+ *
163
+ * @param Mage_Catalog_Model_Resource_Product_Collection $collection
164
+ * @return Mage_Catalog_Model_Resource_Product_Collection
165
+ */
166
+ protected function _addProductAttributesAndPrices(Mage_Catalog_Model_Resource_Product_Collection $collection)
167
+ {
168
+ return $collection
169
+ ->addMinimalPrice()
170
+ ->addFinalPrice()
171
+ ->addTaxPercents()
172
+ ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
173
+ ->addUrlRewrite();
174
+ }
175
+
176
+ /**
177
+ * Get quote instance
178
+ *
179
+ * @return Mage_Sales_Model_Quote
180
+ */
181
+ protected function getQuote()
182
+ {
183
+ return Mage::getSingleton('checkout/session')->getQuote();
184
+ }
185
+ }
app/code/community/Jmango360/Japi/Model/Rest/Product/List.php CHANGED
@@ -12,6 +12,7 @@ class Jmango360_Japi_Model_Rest_Product_List extends Jmango360_Japi_Model_Rest_C
12
  if (is_object($category) && $category->getId()) {
13
  $block = $this->_getListBlock();
14
  $productCollection = $block->getLayer()->getProductCollection();
 
15
 
16
  /* @var $resource Mage_Core_Model_Resource */
17
  $resource = Mage::getSingleton('core/resource');
12
  if (is_object($category) && $category->getId()) {
13
  $block = $this->_getListBlock();
14
  $productCollection = $block->getLayer()->getProductCollection();
15
+ Mage::helper('japi/product')->applyHideOnAppFilter($productCollection);
16
 
17
  /* @var $resource Mage_Core_Model_Resource */
18
  $resource = Mage::getSingleton('core/resource');
app/code/community/Jmango360/Japi/Model/Rest/Product/Related.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Jmango360_Japi_Model_Rest_Product_Related extends Jmango360_Japi_Model_Rest_Product
4
+ {
5
+ public function getList()
6
+ {
7
+ $product = $this->_initProduct();
8
+
9
+ $collection = $product->getRelatedProductCollection()
10
+ ->addAttributeToSelect('required_options')
11
+ ->setPositionOrder()
12
+ ->addStoreFilter();
13
+
14
+ if (Mage::helper('catalog')->isModuleEnabled('Mage_Checkout')) {
15
+ Mage::getResourceSingleton('checkout/cart')->addExcludeProductFilter(
16
+ $collection,
17
+ Mage::getSingleton('checkout/session')->getQuoteId()
18
+ );
19
+ $this->_addProductAttributesAndPrices($collection);
20
+ }
21
+
22
+ Mage::helper('japi/product')->applyHideOnAppFilter($collection);
23
+ Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
24
+
25
+ $collection->load();
26
+ foreach ($collection as $product) {
27
+ $product->setDoNotUseCategoryId(true);
28
+ }
29
+
30
+ /* @var $helper Jmango360_Japi_Helper_Product */
31
+ $helper = Mage::helper('japi/product');
32
+
33
+ $data['products'] = $helper->convertProductCollectionToApiResponseV2($collection);
34
+
35
+ return $data;
36
+ }
37
+
38
+ /**
39
+ * Add all attributes and apply pricing logic to products collection
40
+ * to get correct values in different products lists.
41
+ * E.g. crosssells, upsells, new products, recently viewed
42
+ *
43
+ * @param Mage_Catalog_Model_Resource_Product_Collection $collection
44
+ * @return Mage_Catalog_Model_Resource_Product_Collection
45
+ */
46
+ protected function _addProductAttributesAndPrices(Mage_Catalog_Model_Resource_Product_Collection $collection)
47
+ {
48
+ return $collection
49
+ ->addMinimalPrice()
50
+ ->addFinalPrice()
51
+ ->addTaxPercents()
52
+ ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
53
+ ->addUrlRewrite();
54
+ }
55
+ }
app/code/community/Jmango360/Japi/Model/Rest/Product/Search.php CHANGED
@@ -34,6 +34,7 @@ class Jmango360_Japi_Model_Rest_Product_Search extends Jmango360_Japi_Model_Rest
34
  $block = $this->_getSearchLayerBlock();
35
  /* @var $productCollection Mage_Catalog_Model_Resource_Product_Collection */
36
  $productCollection = $block->getLayer()->getProductCollection();
 
37
 
38
  /* @var $resource Mage_Core_Model_Resource */
39
  $resource = Mage::getSingleton('core/resource');
34
  $block = $this->_getSearchLayerBlock();
35
  /* @var $productCollection Mage_Catalog_Model_Resource_Product_Collection */
36
  $productCollection = $block->getLayer()->getProductCollection();
37
+ Mage::helper('japi/product')->applyHideOnAppFilter($productCollection);
38
 
39
  /* @var $resource Mage_Core_Model_Resource */
40
  $resource = Mage::getSingleton('core/resource');
app/code/community/Jmango360/Japi/Model/Rest/Product/Upsell.php ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Jmango360_Japi_Model_Rest_Product_Upsell extends Jmango360_Japi_Model_Rest_Product
4
+ {
5
+ public function getList()
6
+ {
7
+ $product = $this->_initProduct();
8
+
9
+ $collection = $product->getUpSellProductCollection()
10
+ ->setPositionOrder()
11
+ ->addStoreFilter();
12
+
13
+ if (Mage::helper('catalog')->isModuleEnabled('Mage_Checkout')) {
14
+ Mage::getResourceSingleton('checkout/cart')->addExcludeProductFilter(
15
+ $collection,
16
+ Mage::getSingleton('checkout/session')->getQuoteId()
17
+ );
18
+ $this->_addProductAttributesAndPrices($collection);
19
+ }
20
+
21
+ Mage::helper('japi/product')->applyHideOnAppFilter($collection);
22
+ Mage::getSingleton('catalog/product_visibility')->addVisibleInCatalogFilterToCollection($collection);
23
+
24
+ $collection->load();
25
+
26
+ /**
27
+ * Updating collection with desired items
28
+ */
29
+ Mage::dispatchEvent('catalog_product_upsell', array(
30
+ 'product' => $product,
31
+ 'collection' => $collection,
32
+ 'limit' => 999
33
+ ));
34
+
35
+ foreach ($collection as $product) {
36
+ $product->setDoNotUseCategoryId(true);
37
+ }
38
+
39
+ /* @var $helper Jmango360_Japi_Helper_Product */
40
+ $helper = Mage::helper('japi/product');
41
+
42
+ $data['products'] = $helper->convertProductCollectionToApiResponseV2($collection);
43
+
44
+ return $data;
45
+ }
46
+
47
+ /**
48
+ * Add all attributes and apply pricing logic to products collection
49
+ * to get correct values in different products lists.
50
+ * E.g. crosssells, upsells, new products, recently viewed
51
+ *
52
+ * @param Mage_Catalog_Model_Resource_Product_Collection $collection
53
+ * @return Mage_Catalog_Model_Resource_Product_Collection
54
+ */
55
+ protected function _addProductAttributesAndPrices(Mage_Catalog_Model_Resource_Product_Collection $collection)
56
+ {
57
+ return $collection
58
+ ->addMinimalPrice()
59
+ ->addFinalPrice()
60
+ ->addTaxPercents()
61
+ ->addAttributeToSelect(Mage::getSingleton('catalog/config')->getProductAttributes())
62
+ ->addUrlRewrite();
63
+ }
64
+ }
app/code/community/Jmango360/Japi/Model/Rest/Product/Url.php ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Jmango360_Japi_Model_Rest_Product_Url extends Jmango360_Japi_Model_Rest_Product
4
+ {
5
+ public function getProductId()
6
+ {
7
+ $url = $this->_getRequest()->getParam('url', null);
8
+ if ($url) {
9
+ /* @var $rewrite Mage_Core_Model_Url_Rewrite */
10
+ $rewrite = Mage::getModel('core/url_rewrite');
11
+ $rewrite->setStoreId(Mage::app()->getStore()->getId());
12
+ $request = new Mage_Core_Controller_Request_Http($url);
13
+ $requestCases = $this->_getRequestCases($request);
14
+ $rewrite->loadByRequestPath($requestCases);
15
+
16
+ if ($rewrite->getId()) {
17
+ return array('product' => $this->_getProductData($rewrite->getProductId()));
18
+ } else {
19
+ $routers = array();
20
+
21
+ $routersInfo = Mage::app()->getStore()->getConfig(Mage_Core_Controller_Varien_Front::XML_STORE_ROUTERS_PATH);
22
+ $front = new Mage_Core_Controller_Varien_Front();
23
+ foreach ($routersInfo as $routerCode => $routerInfo) {
24
+ if (isset($routerInfo['class']) && $routerInfo['class'] == 'Mage_Core_Controller_Varien_Router_Standard') {
25
+ /* @var $router Mage_Core_Controller_Varien_Router_Abstract */
26
+ $router = new $routerInfo['class'];
27
+ $router->setFront($front);
28
+ if (isset($routerInfo['area'])) {
29
+ $router->collectRoutes($routerInfo['area'], $routerCode);
30
+ }
31
+ $routers[$routerCode] = $router;
32
+ }
33
+ }
34
+
35
+ $request->setPathInfo()->setDispatched(false);
36
+ $i = 0;
37
+ while (!$request->isDispatched() && $i++ < 100) {
38
+ foreach ($routers as $router) {
39
+ /** @var $router Mage_Core_Controller_Varien_Router_Abstract */
40
+ if ($router->match($request)) {
41
+ break;
42
+ }
43
+ }
44
+ }
45
+
46
+ if ($request->isDispatched()
47
+ && $request->getModuleName() == 'catalog'
48
+ && $request->getControllerName() == 'product'
49
+ && $request->getActionName() == 'view'
50
+ ) {
51
+ return array('product' => $this->_getProductData($request->getParam('id')));
52
+ }
53
+ }
54
+ }
55
+
56
+ return array('product' => null);
57
+ }
58
+
59
+ protected function _getProductData($productId)
60
+ {
61
+ if (!$productId) return null;
62
+ /* @var $helper Jmango360_Japi_Helper_Product */
63
+ $helper = Mage::helper('japi/product');
64
+ return $helper->convertProductIdToApiResponseV2($productId);
65
+ }
66
+
67
+ /**
68
+ * Prepare request cases.
69
+ *
70
+ * We have two cases of incoming paths - with and without slashes at the end ("/somepath/" and "/somepath").
71
+ * Each of them matches two url rewrite request paths
72
+ * - with and without slashes at the end ("/somepath/" and "/somepath").
73
+ * Choose any matched rewrite, but in priority order that depends on same presence of slash and query params.
74
+ *
75
+ * @param Mage_Core_Controller_Request_Http $request
76
+ * @return array
77
+ */
78
+ protected function _getRequestCases($request)
79
+ {
80
+ $pathInfo = $request->getPathInfo();
81
+ $requestPath = trim($pathInfo, '/');
82
+ $origSlash = (substr($pathInfo, -1) == '/') ? '/' : '';
83
+ // If there were final slash - add nothing to less priority paths. And vice versa.
84
+ $altSlash = $origSlash ? '' : '/';
85
+
86
+ $requestCases = array();
87
+ // Query params in request, matching "path + query" has more priority
88
+ $queryString = $this->_getQueryString();
89
+ if ($queryString) {
90
+ $requestCases[] = $requestPath . $origSlash . '?' . $queryString;
91
+ $requestCases[] = $requestPath . $altSlash . '?' . $queryString;
92
+ }
93
+ $requestCases[] = $requestPath . $origSlash;
94
+ $requestCases[] = $requestPath . $altSlash;
95
+
96
+ return $requestCases;
97
+ }
98
+
99
+ /**
100
+ * Prepare and return QUERY_STRING
101
+ *
102
+ * @return bool|string
103
+ */
104
+ protected function _getQueryString()
105
+ {
106
+ if (!empty($_SERVER['QUERY_STRING'])) {
107
+ $queryParams = array();
108
+ parse_str($_SERVER['QUERY_STRING'], $queryParams);
109
+ $hasChanges = false;
110
+ foreach ($queryParams as $key => $value) {
111
+ if (substr($key, 0, 3) === '___') {
112
+ unset($queryParams[$key]);
113
+ $hasChanges = true;
114
+ }
115
+ }
116
+ if ($hasChanges) {
117
+ return http_build_query($queryParams);
118
+ } else {
119
+ return $_SERVER['QUERY_STRING'];
120
+ }
121
+ }
122
+
123
+ return false;
124
+ }
125
+ }
app/code/community/Jmango360/Japi/controllers/CheckoutController.php CHANGED
@@ -94,6 +94,12 @@ class Jmango360_Japi_CheckoutController extends Mage_Checkout_OnepageController
94
  {
95
  /* @var $helper Jmango360_Japi_Helper_Data */
96
  $helper = Mage::helper('japi');
 
 
 
 
 
 
97
  $checkoutUrl = $helper->getCheckoutUrl();
98
  if ($checkoutUrl) $this->_redirectUrl($checkoutUrl);
99
  else $this->_redirect('checkout/onepage', array('_secure' => true));
@@ -226,6 +232,18 @@ class Jmango360_Japi_CheckoutController extends Mage_Checkout_OnepageController
226
  </reference>";
227
  }
228
 
 
 
 
 
 
 
 
 
 
 
 
 
229
  try {
230
  $this->getLayout()->getUpdate()->addUpdate($xml);
231
  $this->generateLayoutXml()->generateLayoutBlocks();
94
  {
95
  /* @var $helper Jmango360_Japi_Helper_Data */
96
  $helper = Mage::helper('japi');
97
+
98
+ /**
99
+ * MPLUGIN-1377: Reset PHPSESSID
100
+ */
101
+ $helper->checkValidSession();
102
+
103
  $checkoutUrl = $helper->getCheckoutUrl();
104
  if ($checkoutUrl) $this->_redirectUrl($checkoutUrl);
105
  else $this->_redirect('checkout/onepage', array('_secure' => true));
232
  </reference>";
233
  }
234
 
235
+ if ($helper->isModuleEnabled('Vaimo_Klarna')) {
236
+ $xml .= "
237
+ <reference name=\"head\">
238
+ <action method=\"addJs\"><script>vaimo/klarna/klarna.js</script></action>
239
+ <action method=\"addCss\"><stylesheet>css/vaimo/klarna/checkout.css</stylesheet></action>
240
+ <block type=\"page/html_head\" name=\"klarna_header\" as=\"klarna_header\" template=\"vaimo/klarna/checkout/header.phtml\" />
241
+ </reference>
242
+ <reference name=\"content\">
243
+ <block type=\"klarna/checkout_top\" after=\"-\" name=\"klarna_checkout_top\" as=\"klarna_checkout_top\" template=\"vaimo/klarna/checkout/top.phtml\" />
244
+ </reference>";
245
+ }
246
+
247
  try {
248
  $this->getLayout()->getUpdate()->addUpdate($xml);
249
  $this->generateLayoutXml()->generateLayoutBlocks();
app/code/community/Jmango360/Japi/controllers/CustomerController.php CHANGED
@@ -156,6 +156,15 @@ class Jmango360_Japi_CustomerController extends Mage_Customer_AccountController
156
  }
157
  }
158
 
 
 
 
 
 
 
 
 
 
159
  protected function _getCustomer()
160
  {
161
  $customer = $this->_getFromRegistry('current_customer');
156
  }
157
  }
158
 
159
+ protected function _welcomeCustomer(Mage_Customer_Model_Customer $customer, $isJustConfirmed = false)
160
+ {
161
+ $url = parent::_welcomeCustomer($customer, $isJustConfirmed);
162
+ $this->_getSession()->addSuccess(
163
+ $this->__('Please close this form and login with your new account.')
164
+ );
165
+ return $url;
166
+ }
167
+
168
  protected function _getCustomer()
169
  {
170
  $customer = $this->_getFromRegistry('current_customer');
app/code/community/Jmango360/Japi/controllers/Rest/MageController.php CHANGED
@@ -88,13 +88,21 @@ class Jmango360_Japi_Rest_MageController extends Jmango360_Japi_Controller_Abstr
88
 
89
  public function redirectAction()
90
  {
 
 
 
 
 
 
 
 
91
  /**
92
  * MPLUGIN-1126: by pass check user's IP adress to auto redirect when website installed "Experius_Geoipredirect"
93
  */
94
- $helper = Mage::helper('japi');
95
  if ($helper->isModuleEnabled('Experius_Geoipredirect')) {
96
  Mage::getSingleton('core/session')->setData('ipcheck_redirected', Mage::app()->getStore()->getId());
97
  }
 
98
  $url = $this->getRequest()->getParam('url');
99
  if (strpos($url, 'http') === 0) {
100
  $this->_redirectUrl($url);
88
 
89
  public function redirectAction()
90
  {
91
+ /* @var $helper Jmango360_Japi_Helper_Data */
92
+ $helper = Mage::helper('japi');
93
+
94
+ /**
95
+ * MPLUGIN-1377: Reset PHPSESSID
96
+ */
97
+ $helper->checkValidSession();
98
+
99
  /**
100
  * MPLUGIN-1126: by pass check user's IP adress to auto redirect when website installed "Experius_Geoipredirect"
101
  */
 
102
  if ($helper->isModuleEnabled('Experius_Geoipredirect')) {
103
  Mage::getSingleton('core/session')->setData('ipcheck_redirected', Mage::app()->getStore()->getId());
104
  }
105
+
106
  $url = $this->getRequest()->getParam('url');
107
  if (strpos($url, 'http') === 0) {
108
  $this->_redirectUrl($url);
app/code/community/Jmango360/Japi/controllers/Rest/ProductController.php CHANGED
@@ -43,4 +43,32 @@ class Jmango360_Japi_Rest_ProductController extends Jmango360_Japi_Controller_Ab
43
  $server->setRestDispatchModel(Mage::getModel('japi/rest_product'));
44
  $server->run();
45
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  }
43
  $server->setRestDispatchModel(Mage::getModel('japi/rest_product'));
44
  $server->run();
45
  }
46
+
47
+ public function getRelatedAction()
48
+ {
49
+ $server = $this->getServer();
50
+ $server->setRestDispatchModel(Mage::getModel('japi/rest_product'));
51
+ $server->run();
52
+ }
53
+
54
+ public function getCrossSellAction()
55
+ {
56
+ $server = $this->getServer();
57
+ $server->setRestDispatchModel(Mage::getModel('japi/rest_product'));
58
+ $server->run();
59
+ }
60
+
61
+ public function getUpSellAction()
62
+ {
63
+ $server = $this->getServer();
64
+ $server->setRestDispatchModel(Mage::getModel('japi/rest_product'));
65
+ $server->run();
66
+ }
67
+
68
+ public function getProductIdAction()
69
+ {
70
+ $server = $this->getServer();
71
+ $server->setRestDispatchModel(Mage::getModel('japi/rest_product'));
72
+ $server->run();
73
+ }
74
  }
app/code/community/Jmango360/Japi/etc/config.xml CHANGED
@@ -7,7 +7,7 @@
7
  <config>
8
  <modules>
9
  <Jmango360_Japi>
10
- <version>2.8.2</version>
11
  </Jmango360_Japi>
12
  </modules>
13
 
@@ -81,6 +81,24 @@
81
 
82
  <frontend>
83
  <events>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
84
  <controller_action_postdispatch_checkout_onepage_success>
85
  <observers>
86
  <rest_checkout_success>
@@ -134,18 +152,23 @@
134
  <tig_postnl_customer_address_edit_postcodecheck>
135
  <type>singleton</type>
136
  <class>japi/observer</class>
137
- <method>addressBookPostcodeCheck</method>
138
  </tig_postnl_customer_address_edit_postcodecheck>
139
  <tig_postnl_checkout_onepage_shipping_postcodecheck>
140
  <type>singleton</type>
141
  <class>japi/observer</class>
142
- <method>shippingAddressPostcodeCheck</method>
143
  </tig_postnl_checkout_onepage_shipping_postcodecheck>
144
  <tig_postnl_checkout_onepage_billing_postcodecheck>
145
  <type>singleton</type>
146
  <class>japi/observer</class>
147
- <method>billingAddressPostcodeCheck</method>
148
  </tig_postnl_checkout_onepage_billing_postcodecheck>
 
 
 
 
 
149
  </observers>
150
  </core_block_abstract_to_html_before>
151
  <customer_register_success>
@@ -157,6 +180,15 @@
157
  </japi_customer_register_success>
158
  </observers>
159
  </customer_register_success>
 
 
 
 
 
 
 
 
 
160
  </events>
161
  <routers>
162
  <japi>
@@ -264,6 +296,7 @@
264
  <jmango_rest_catalog_settings>
265
  <include_all_active>1</include_all_active>
266
  <hide_null_value>0</hide_null_value>
 
267
  </jmango_rest_catalog_settings>
268
  <jmango_rest_checkout_settings>
269
  <onepage>1</onepage>
7
  <config>
8
  <modules>
9
  <Jmango360_Japi>
10
+ <version>2.9.0</version>
11
  </Jmango360_Japi>
12
  </modules>
13
 
81
 
82
  <frontend>
83
  <events>
84
+ <controller_action_predispatch_japi_checkout_onepage>
85
+ <observers>
86
+ <vaimo_klarna>
87
+ <type>singleton</type>
88
+ <class>japi/observer</class>
89
+ <method>Vaimo_Klarna__checkLaunchKlarnaCheckout</method>
90
+ </vaimo_klarna>
91
+ </observers>
92
+ </controller_action_predispatch_japi_checkout_onepage>
93
+ <controller_action_postdispatch_japi_checkout_saveShippingMethod>
94
+ <observers>
95
+ <tig_postnl>
96
+ <type>singleton</type>
97
+ <class>japi/observer</class>
98
+ <method>TIG_PostNL__saveOrderOptions</method>
99
+ </tig_postnl>
100
+ </observers>
101
+ </controller_action_postdispatch_japi_checkout_saveShippingMethod>
102
  <controller_action_postdispatch_checkout_onepage_success>
103
  <observers>
104
  <rest_checkout_success>
152
  <tig_postnl_customer_address_edit_postcodecheck>
153
  <type>singleton</type>
154
  <class>japi/observer</class>
155
+ <method>TIG_PostNL__addressBookPostcodeCheck</method>
156
  </tig_postnl_customer_address_edit_postcodecheck>
157
  <tig_postnl_checkout_onepage_shipping_postcodecheck>
158
  <type>singleton</type>
159
  <class>japi/observer</class>
160
+ <method>TIG_PostNL__shippingAddressPostcodeCheck</method>
161
  </tig_postnl_checkout_onepage_shipping_postcodecheck>
162
  <tig_postnl_checkout_onepage_billing_postcodecheck>
163
  <type>singleton</type>
164
  <class>japi/observer</class>
165
+ <method>TIG_PostNL__billingAddressPostcodeCheck</method>
166
  </tig_postnl_checkout_onepage_billing_postcodecheck>
167
+ <tig_postnl_checkout_deliveryoptions>
168
+ <type>singleton</type>
169
+ <class>japi/observer</class>
170
+ <method>TIG_PostNL__addDeliveryOptions</method>
171
+ </tig_postnl_checkout_deliveryoptions>
172
  </observers>
173
  </core_block_abstract_to_html_before>
174
  <customer_register_success>
180
  </japi_customer_register_success>
181
  </observers>
182
  </customer_register_success>
183
+ <controller_action_predispatch_japi_checkout_onepage>
184
+ <observers>
185
+ <japi_predispatch_japi_checkout_onepage>
186
+ <type>singleton</type>
187
+ <class>japi/observer</class>
188
+ <method>japiOnepagePreDispatch</method>
189
+ </japi_predispatch_japi_checkout_onepage>
190
+ </observers>
191
+ </controller_action_predispatch_japi_checkout_onepage>
192
  </events>
193
  <routers>
194
  <japi>
296
  <jmango_rest_catalog_settings>
297
  <include_all_active>1</include_all_active>
298
  <hide_null_value>0</hide_null_value>
299
+ <visible_on_app>0</visible_on_app>
300
  </jmango_rest_catalog_settings>
301
  <jmango_rest_checkout_settings>
302
  <onepage>1</onepage>
app/code/community/Jmango360/Japi/etc/system.xml CHANGED
@@ -36,9 +36,7 @@
36
  <show_in_default>1</show_in_default>
37
  <show_in_website>1</show_in_website>
38
  <show_in_store>1</show_in_store>
39
- <comment>This username will be checked from every App while a session is set up between the
40
- App and the Magento store.
41
- </comment>
42
  </apiuser>
43
  <apikey translate="label comment" module="japi">
44
  <label>Api Key</label>
@@ -47,9 +45,7 @@
47
  <show_in_default>1</show_in_default>
48
  <show_in_website>1</show_in_website>
49
  <show_in_store>1</show_in_store>
50
- <comment>This key will be checked from every App while a session is set up between the App
51
- and the Magento store.
52
- </comment>
53
  </apikey>
54
  <use_token translate="label comment" module="japi">
55
  <label>Use token for Api communications</label>
@@ -78,9 +74,7 @@
78
  <show_in_default>1</show_in_default>
79
  <show_in_website>1</show_in_website>
80
  <show_in_store>1</show_in_store>
81
- <comment>Include all "Active" categories regardless of whether or not they are included in
82
- navigation
83
- </comment>
84
  </include_all_active>
85
  <attribute_on_listing translate="label comment" module="japi">
86
  <label>Display attribute on Product Listing</label>
@@ -110,19 +104,36 @@
110
  <show_in_default>1</show_in_default>
111
  <show_in_website>1</show_in_website>
112
  <show_in_store>1</show_in_store>
113
- <comment>Attribute whose value is N/A or blank will not be displayed on Additional
114
- Information on product detail page
115
- </comment>
116
  </hide_null_value>
117
  <show_grouped_item_image translate="label comment" module="japi">
118
  <label>Show image of child product in Grouped Product Detail on mobile</label>
119
  <frontend_type>select</frontend_type>
120
  <source_model>adminhtml/system_config_source_yesno</source_model>
121
- <sort_order>100</sort_order>
122
  <show_in_default>1</show_in_default>
123
  <show_in_website>1</show_in_website>
124
  <show_in_store>1</show_in_store>
125
  </show_grouped_item_image>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
126
  </fields>
127
  </jmango_rest_catalog_settings>
128
  <jmango_app_login_settings translate="label" module="japi">
@@ -161,10 +172,7 @@
161
  <show_in_website>1</show_in_website>
162
  <show_in_store>1</show_in_store>
163
  <can_be_empty>1</can_be_empty>
164
- <comment>Select one or more, but not all shipping methods that are not suitable/compatible
165
- to be used in mobile app environment. This can be set anytime during or after creation
166
- of JMango360 application.
167
- </comment>
168
  </shipping_excluded>
169
  <payment_excluded translate="label" module="japi">
170
  <label>Excluded payment methods</label>
@@ -176,10 +184,7 @@
176
  <show_in_website>1</show_in_website>
177
  <show_in_store>1</show_in_store>
178
  <can_be_empty>1</can_be_empty>
179
- <comment>Select one or more, but not all payment methods that are not suitable/compatible to
180
- be used in mobile app environment. This can be set anytime during or after creation of
181
- JMango360 application.
182
- </comment>
183
  </payment_excluded>
184
  <onepage translate="label" module="japi">
185
  <label>Use Onepage checkout for mobile app</label>
@@ -190,9 +195,7 @@
190
  <show_in_website>1</show_in_website>
191
  <show_in_store>1</show_in_store>
192
  <can_be_empty>1</can_be_empty>
193
- <comment>Select to use JMango360 Onepage responsive web checkout for mobile app instead of
194
- default Magento checkout
195
- </comment>
196
  </onepage>
197
  <custom_xml translate="label" module="japi">
198
  <label>Custom Layout Update</label>
@@ -201,9 +204,7 @@
201
  <show_in_default>1</show_in_default>
202
  <show_in_website>1</show_in_website>
203
  <show_in_store>1</show_in_store>
204
- <comment>Enter xml layout update code here, it will only affect JMango360 Onepage checkout
205
- page
206
- </comment>
207
  <depends>
208
  <onepage>1</onepage>
209
  </depends>
@@ -215,8 +216,7 @@
215
  <show_in_default>1</show_in_default>
216
  <show_in_website>1</show_in_website>
217
  <show_in_store>1</show_in_store>
218
- <comment>Enter css code here, it will only append to JMango360 Onepage checkout page
219
- </comment>
220
  <depends>
221
  <onepage>1</onepage>
222
  </depends>
@@ -229,9 +229,7 @@
229
  <show_in_website>1</show_in_website>
230
  <show_in_store>1</show_in_store>
231
  <can_be_empty>1</can_be_empty>
232
- <comment>Enter custom checkout url of website if Jmango360 plugin could not detect. Ex:
233
- checkout/onepage.
234
- </comment>
235
  <depends>
236
  <onepage>0</onepage>
237
  </depends>
@@ -307,9 +305,7 @@
307
  <show_in_default>1</show_in_default>
308
  <show_in_website>1</show_in_website>
309
  <show_in_store>1</show_in_store>
310
- <comment>Choose what kind of image of product that I would like to show in catalogue listing
311
- in mobile app.
312
- </comment>
313
  </catalog_image_default>
314
  <image_default_listing translate="label comment" module="japi">
315
  <label>Choose image type to be displayed on catalogue page</label>
@@ -319,9 +315,7 @@
319
  <show_in_default>1</show_in_default>
320
  <show_in_website>1</show_in_website>
321
  <show_in_store>1</show_in_store>
322
- <comment>Choose what kind of image of product that I would like to show in product listing
323
- in mobile app.
324
- </comment>
325
  </image_default_listing>
326
  </fields>
327
  </jmango_rest_gallery_settings>
36
  <show_in_default>1</show_in_default>
37
  <show_in_website>1</show_in_website>
38
  <show_in_store>1</show_in_store>
39
+ <comment>This username will be checked from every App while a session is set up between the App and the Magento store.</comment>
 
 
40
  </apiuser>
41
  <apikey translate="label comment" module="japi">
42
  <label>Api Key</label>
45
  <show_in_default>1</show_in_default>
46
  <show_in_website>1</show_in_website>
47
  <show_in_store>1</show_in_store>
48
+ <comment>This key will be checked from every App while a session is set up between the App and the Magento store.</comment>
 
 
49
  </apikey>
50
  <use_token translate="label comment" module="japi">
51
  <label>Use token for Api communications</label>
74
  <show_in_default>1</show_in_default>
75
  <show_in_website>1</show_in_website>
76
  <show_in_store>1</show_in_store>
77
+ <comment>Include all "Active" categories regardless of whether or not they are included in navigation</comment>
 
 
78
  </include_all_active>
79
  <attribute_on_listing translate="label comment" module="japi">
80
  <label>Display attribute on Product Listing</label>
104
  <show_in_default>1</show_in_default>
105
  <show_in_website>1</show_in_website>
106
  <show_in_store>1</show_in_store>
107
+ <comment>Attribute whose value is N/A or blank will not be displayed on Additional Information on product detail page</comment>
 
 
108
  </hide_null_value>
109
  <show_grouped_item_image translate="label comment" module="japi">
110
  <label>Show image of child product in Grouped Product Detail on mobile</label>
111
  <frontend_type>select</frontend_type>
112
  <source_model>adminhtml/system_config_source_yesno</source_model>
113
+ <sort_order>50</sort_order>
114
  <show_in_default>1</show_in_default>
115
  <show_in_website>1</show_in_website>
116
  <show_in_store>1</show_in_store>
117
  </show_grouped_item_image>
118
+ <custom_css translate="label comment" module="japi">
119
+ <label>Custom CSS for description</label>
120
+ <frontend_type>textarea</frontend_type>
121
+ <sort_order>60</sort_order>
122
+ <show_in_default>1</show_in_default>
123
+ <show_in_website>1</show_in_website>
124
+ <show_in_store>1</show_in_store>
125
+ <comment>Custom CSS for product description</comment>
126
+ </custom_css>
127
+ <visible_on_app translate="label" module="japi">
128
+ <label>Enable Hide on App on Manage Products</label>
129
+ <frontend_type>select</frontend_type>
130
+ <source_model>adminhtml/system_config_source_yesno</source_model>
131
+ <sort_order>70</sort_order>
132
+ <show_in_default>1</show_in_default>
133
+ <show_in_website>1</show_in_website>
134
+ <show_in_store>1</show_in_store>
135
+ <comment>Enable this option to choose if a product is hidden on app or not</comment>
136
+ </visible_on_app>
137
  </fields>
138
  </jmango_rest_catalog_settings>
139
  <jmango_app_login_settings translate="label" module="japi">
172
  <show_in_website>1</show_in_website>
173
  <show_in_store>1</show_in_store>
174
  <can_be_empty>1</can_be_empty>
175
+ <comment>Select one or more but not all shipping methods that are not suitable/compatible to be used in mobile app environment. This can be set anytime during or after creation of JMango360 application.</comment>
 
 
 
176
  </shipping_excluded>
177
  <payment_excluded translate="label" module="japi">
178
  <label>Excluded payment methods</label>
184
  <show_in_website>1</show_in_website>
185
  <show_in_store>1</show_in_store>
186
  <can_be_empty>1</can_be_empty>
187
+ <comment>Select one or more, but not all payment methods that are not suitable/compatible to be used in mobile app environment. This can be set anytime during or after creation of JMango360 application.</comment>
 
 
 
188
  </payment_excluded>
189
  <onepage translate="label" module="japi">
190
  <label>Use Onepage checkout for mobile app</label>
195
  <show_in_website>1</show_in_website>
196
  <show_in_store>1</show_in_store>
197
  <can_be_empty>1</can_be_empty>
198
+ <comment>Select to use JMango360 Onepage responsive web checkout for mobile app instead of default Magento checkout</comment>
 
 
199
  </onepage>
200
  <custom_xml translate="label" module="japi">
201
  <label>Custom Layout Update</label>
204
  <show_in_default>1</show_in_default>
205
  <show_in_website>1</show_in_website>
206
  <show_in_store>1</show_in_store>
207
+ <comment>Enter xml layout update code here, it will only affect JMango360 Onepage checkout page</comment>
 
 
208
  <depends>
209
  <onepage>1</onepage>
210
  </depends>
216
  <show_in_default>1</show_in_default>
217
  <show_in_website>1</show_in_website>
218
  <show_in_store>1</show_in_store>
219
+ <comment>Enter css code here, it will only append to JMango360 Onepage checkout page</comment>
 
220
  <depends>
221
  <onepage>1</onepage>
222
  </depends>
229
  <show_in_website>1</show_in_website>
230
  <show_in_store>1</show_in_store>
231
  <can_be_empty>1</can_be_empty>
232
+ <comment>Enter custom checkout url of website if Jmango360 plugin could not detect. Ex: checkout/onepage.</comment>
 
 
233
  <depends>
234
  <onepage>0</onepage>
235
  </depends>
305
  <show_in_default>1</show_in_default>
306
  <show_in_website>1</show_in_website>
307
  <show_in_store>1</show_in_store>
308
+ <comment>Choose what kind of image of product that I would like to show in catalogue listing in mobile app.</comment>
 
 
309
  </catalog_image_default>
310
  <image_default_listing translate="label comment" module="japi">
311
  <label>Choose image type to be displayed on catalogue page</label>
315
  <show_in_default>1</show_in_default>
316
  <show_in_website>1</show_in_website>
317
  <show_in_store>1</show_in_store>
318
+ <comment>Choose what kind of image of product that I would like to show in product listing in mobile app.</comment>
 
 
319
  </image_default_listing>
320
  </fields>
321
  </jmango_rest_gallery_settings>
app/code/community/Jmango360/Japi/sql/japi_setup/upgrade-2.8.2-2.9.0.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Copyright 2016 JMango360
4
+ */
5
+
6
+ /* @var $this Mage_Catalog_Model_Resource_Setup */
7
+ $this->startSetup();
8
+
9
+ $this->addAttribute(Mage_Catalog_Model_Product::ENTITY, 'hide_in_jm360', array(
10
+ 'group' => 'General',
11
+ 'type' => 'int',
12
+ 'label' => 'Hide on JMango360 App',
13
+ 'input' => 'select',
14
+ 'source' => 'eav/entity_attribute_source_boolean',
15
+ 'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
16
+ 'visible' => true,
17
+ 'required' => false,
18
+ 'user_defined' => false,
19
+ 'default' => '',
20
+ 'apply_to' => 'simple,configurable,grouped,bundle',
21
+ 'input_renderer' => '',
22
+ 'visible_on_front' => false,
23
+ 'used_in_product_listing' => false
24
+ ));
25
+
26
+ $this->endSetup();
app/design/frontend/base/default/layout/jmango360_japi.xml CHANGED
@@ -58,7 +58,7 @@
58
  <update handle="japi_checkout_default"/>
59
  <reference name="content">
60
  <block type="core/template" name="checkout.onepage.style" as="checkout.onepage.style" template="japi/checkout/onepage/style.phtml"/>
61
- <block type="checkout/onepage" name="checkout.onepage" template="japi/checkout/onepage.phtml">
62
  <block type="checkout/onepage_billing" name="checkout.onepage.billing" as="billing" template="japi/checkout/onepage/billing.phtml">
63
  <block type="japi/form" name="form.additional.info">
64
  <action method="setPrefix"><value>billing</value></action>
58
  <update handle="japi_checkout_default"/>
59
  <reference name="content">
60
  <block type="core/template" name="checkout.onepage.style" as="checkout.onepage.style" template="japi/checkout/onepage/style.phtml"/>
61
+ <block type="japi/checkout_onepage" name="checkout.onepage" template="japi/checkout/onepage.phtml">
62
  <block type="checkout/onepage_billing" name="checkout.onepage.billing" as="billing" template="japi/checkout/onepage/billing.phtml">
63
  <block type="japi/form" name="form.additional.info">
64
  <action method="setPrefix"><value>billing</value></action>
app/design/frontend/base/default/template/japi/TIG/PostNL/delivery_options/onepage/available.phtml ADDED
@@ -0,0 +1,206 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * ___________ __ __
4
+ * \__ ___/____ _/ |_ _____ | |
5
+ * | | / _ \\ __\\__ \ | |
6
+ * | | | |_| || | / __ \_| |__
7
+ * |____| \____/ |__| (____ /|____/
8
+ * \/
9
+ * ___ __ __
10
+ * | | ____ _/ |_ ____ _______ ____ ____ _/ |_
11
+ * | | / \\ __\_/ __ \\_ __ \ / \ _/ __ \\ __\
12
+ * | || | \| | \ ___/ | | \/| | \\ ___/ | |
13
+ * |___||___| /|__| \_____>|__| |___| / \_____>|__|
14
+ * \/ \/
15
+ * ________
16
+ * / _____/_______ ____ __ __ ______
17
+ * / \ ___\_ __ \ / _ \ | | \\____ \
18
+ * \ \_\ \| | \/| |_| || | /| |_| |
19
+ * \______ /|__| \____/ |____/ | __/
20
+ * \/ |__|
21
+ *
22
+ * NOTICE OF LICENSE
23
+ *
24
+ * This source file is subject to the Creative Commons License.
25
+ * It is available through the world-wide-web at this URL:
26
+ * http://creativecommons.org/licenses/by-nc-nd/3.0/nl/deed.en_US
27
+ * If you are unable to obtain it through the world-wide-web, please send an email
28
+ * to servicedesk@tig.nl so we can send you a copy immediately.
29
+ *
30
+ * DISCLAIMER
31
+ *
32
+ * Do not edit or add to this file if you wish to upgrade this module to newer
33
+ * versions in the future. If you wish to customize this module for your
34
+ * needs please contact servicedesk@tig.nl for more information.
35
+ *
36
+ * @copyright Copyright (c) 2015 Total Internet Group B.V. (http://www.tig.nl)
37
+ * @license http://creativecommons.org/licenses/by-nc-nd/3.0/nl/deed.en_US
38
+ */
39
+ ?>
40
+ <?php /** @var $this Mage_Checkout_Block_Onepage_Shipping_Method_Available */ ?>
41
+ <?php $_shippingRateGroups = $this->getShippingRates(); ?>
42
+
43
+ <script type="text/javascript">
44
+ //<![CDATA[
45
+ if (window.deliveryOptions) {
46
+ window.deliveryOptions.reset();
47
+ window.deliveryOptions = false;
48
+ }
49
+ //]]>
50
+ </script>
51
+ <?php if (!$_shippingRateGroups): ?>
52
+ <p><?php echo $this->__('Sorry, no quotes are available for this order at this time.') ?></p>
53
+ <?php else: ?>
54
+ <dl class="sp-methods">
55
+ <?php $shippingCodePrice = array(); ?>
56
+ <?php $_store = $this->getQuote()->getStore(); ?>
57
+ <?php $_deliveryOptionsShown = false; ?>
58
+ <?php $_sole = count($_shippingRateGroups) == 1; ?>
59
+ <?php $_carrierHelper = Mage::helper('postnl/carrier'); ?>
60
+ <?php $_deliveryOptionsHelper = Mage::helper('postnl/deliveryOptions'); ?>
61
+ <?php foreach ($_shippingRateGroups as $code => $_rates): ?>
62
+ <dt><?php echo $this->escapeHtml($this->getCarrierName($code)) ?></dt>
63
+ <dd>
64
+ <ul>
65
+ <?php $_sole = $_sole && count($_rates) == 1; ?>
66
+ <?php /** @var Mage_Sales_Model_Quote_Address_Rate $_rate */?>
67
+ <?php foreach ($_rates as $_rate): ?>
68
+ <?php $shippingCodePrice[] = "'".$_rate->getCode()."':".(float)$_rate->getPrice(); ?>
69
+ <li class="<?php echo $code ?>_wrapper">
70
+ <?php if ($_rate->getErrorMessage()): ?>
71
+ <ul class="messages"><li class="error-msg"><ul><li><?php echo $this->escapeHtml($_rate->getErrorMessage()) ?></li></ul></li></ul>
72
+ <?php else: ?>
73
+ <?php if ($_sole) : ?>
74
+ <span class="no-display"><input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>" checked="checked" /></span>
75
+ <?php else: ?>
76
+ <input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>"<?php if($_rate->getCode()===$this->getAddressShippingMethod()) echo ' checked="checked"' ?> class="radio"/>
77
+
78
+ <?php if ($_rate->getCode() === $this->getAddressShippingMethod()): ?>
79
+ <script type="text/javascript">
80
+ //<![CDATA[
81
+ lastPrice = <?php echo (float)$_rate->getPrice(); ?>;
82
+ //]]>
83
+ </script>
84
+ <?php endif; ?>
85
+
86
+ <?php endif; ?>
87
+ <?php $_excl = $this->getShippingPrice($_rate->getPrice(), $this->helper('tax')->displayShippingPriceIncludingTax()); ?>
88
+ <?php $_incl = $this->getShippingPrice($_rate->getPrice(), true); ?>
89
+
90
+
91
+ <?php $_priceExcl = $_store->convertPrice(Mage::helper('tax')->getShippingPrice($_rate->getPrice(), false, $this->getAddress())); ?>
92
+ <?php $_priceIncl = $_store->convertPrice(Mage::helper('tax')->getShippingPrice($_rate->getPrice(), true, $this->getAddress())); ?>
93
+ <label data-price="<?php echo $_priceExcl; ?>" data-price-incl="<?php echo $_priceIncl; ?>" for="s_method_<?php echo $_rate->getCode() ?>">
94
+ <?php
95
+ /**
96
+ * MPLUGIN-1203: don't use escape HTML when display method title for "Netzkollektiv_InStorePickupMulti"
97
+ */
98
+ if (Mage::helper('japi')->isModuleEnabled('Netzkollektiv_InStorePickupMulti') && $_rate->getCarrier() == 'instorepickupmulti') {
99
+ echo $_rate->getMethodTitle();
100
+ } else {
101
+ echo $this->escapeHtml($_rate->getMethodTitle());
102
+ }
103
+ ?>
104
+ <?php echo $_excl; ?>
105
+ <?php if ($this->helper('tax')->displayShippingBothPrices() && $_incl != $_excl): ?>
106
+ (<?php echo $this->__('Incl. Tax'); ?> <?php echo $_incl; ?>)
107
+ <?php endif; ?>
108
+ </label>
109
+ <?php
110
+ $carrier = Mage::getModel('shipping/config')->getCarrierInstance($code);
111
+ if ($carrier && $carrier->getFormBlock()){
112
+ $block = $this->getLayout()->createBlock($carrier->getFormBlock());
113
+ $block->setMethodCode($code);
114
+ $block->setRate($_rate);
115
+ $block->setMethodInstance($carrier);
116
+ echo $block->_toHtml();
117
+ }
118
+ ?>
119
+ <?php endif ?>
120
+
121
+ <?php if (!$_deliveryOptionsShown): ?>
122
+ <?php $_canUseDeliveryOptions = false; ?>
123
+ <?php if (Mage::helper('postnl/deliveryOptions')->canUseDeliveryOptions($this->getQuote()) && Mage::helper('postnl/deliveryOptions')->canUseDeliveryOptionsForCountry($this->getQuote())): ?>
124
+ <?php $_canUseDeliveryOptions = true; ?>
125
+ <?php endif; ?>
126
+ <?php if ($_canUseDeliveryOptions
127
+ && $_carrierHelper->isPostnlShippingMethod($_rate->getCode())
128
+ && $this->getChild('postnl.delivery.options')
129
+ ): ?>
130
+ <div class="postnl-container">
131
+ <?php echo $this->getChild('postnl.delivery.options')->setRate($_rate)->toHtml(); ?>
132
+ </div>
133
+ <?php $_deliveryOptionsShown = true; ?>
134
+ <?php endif; ?>
135
+ <?php endif; ?>
136
+ </li>
137
+ <?php endforeach; ?>
138
+ </ul>
139
+ </dd>
140
+ <?php endforeach; ?>
141
+ </dl>
142
+ <script type="text/javascript">
143
+ //<![CDATA[
144
+ <?php if (!empty($shippingCodePrice)): ?>
145
+ var shippingCodePrice = {<?php echo implode(',',$shippingCodePrice); ?>};
146
+ <?php endif; ?>
147
+
148
+ $$('input[type="radio"][name="shipping_method"]').each(function(el){
149
+ Event.observe(el, 'click', function(){
150
+ if (el.checked == true) {
151
+ var getShippingCode = el.getValue();
152
+ <?php if (!empty($shippingCodePrice)): ?>
153
+ var newPrice = shippingCodePrice[getShippingCode];
154
+ if (!lastPrice) {
155
+ lastPrice = newPrice;
156
+ quoteBaseGrandTotal += newPrice;
157
+ }
158
+ if (newPrice != lastPrice) {
159
+ quoteBaseGrandTotal += (newPrice-lastPrice);
160
+ lastPrice = newPrice;
161
+ }
162
+ <?php endif; ?>
163
+ checkQuoteBaseGrandTotal = quoteBaseGrandTotal;
164
+ return false;
165
+ }
166
+ });
167
+ });
168
+ //]]>
169
+ </script>
170
+
171
+ <!-- Experius_Pickup -->
172
+ <script type="text/javascript">
173
+ JMango(document).ready(function(){
174
+ hideShippingAll();
175
+ JMango('input[type="radio"][name="shipping_method"]').click(function(){
176
+ hideShippingAll();
177
+ var code = JMango(this).val();
178
+ if(JMango(this).is(':checked')){
179
+ showShipping(code);
180
+ }
181
+ });
182
+
183
+ JMango('input[type="radio"][name="shipping_method"]').each(function(){
184
+ var code = JMango(this).val();
185
+ if(JMango(this).is(":checked")){
186
+ showShipping(code);
187
+ }
188
+ });
189
+ });
190
+
191
+ function showShipping(code){
192
+ if(JMango('#'+'shipping_form_'+code).length != 0){
193
+ JMango('#'+'shipping_form_'+code).show();
194
+ JMango(this).find('.required-entry').attr('disabled','false');
195
+ }
196
+ }
197
+
198
+ function hideShippingAll(){
199
+ JMango('input[type="radio"][name="shipping_method"]').each(function(){
200
+ var code = JMango(this).val();
201
+ JMango('#'+'shipping_form_'+code).hide();
202
+ JMango(this).find('.required-entry').attr('disabled','true');
203
+ });
204
+ }
205
+ </script>
206
+ <?php endif; ?>
app/design/frontend/base/default/template/japi/checkout/onepage/shipping_method/available.phtml CHANGED
@@ -37,10 +37,10 @@
37
  <ul>
38
  <?php $_sole = $_sole && count($_rates) == 1; foreach ($_rates as $_rate): ?>
39
  <?php $shippingCodePrice[] = "'".$_rate->getCode()."':".(float)$_rate->getPrice(); ?>
40
- <li>
41
- <?php if ($_rate->getErrorMessage()): ?>
42
- <ul class="messages"><li class="error-msg"><ul><li><?php echo $this->escapeHtml($_rate->getErrorMessage()) ?></li></ul></li></ul>
43
- <?php else: ?>
44
  <?php if ($_sole) : ?>
45
  <span class="no-display"><input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>" checked="checked" /></span>
46
  <?php else: ?>
@@ -60,12 +60,11 @@
60
  /**
61
  * MPLUGIN-1203: don't use escape HTML when display method title for "Netzkollektiv_InStorePickupMulti"
62
  */
63
- if (Mage::helper('japi')->isModuleEnabled('Netzkollektiv_InStorePickupMulti')
64
- && $_rate->getCarrier() == 'instorepickupmulti') {
65
- echo $_rate->getMethodTitle();
66
- } else {
67
- echo $this->escapeHtml($_rate->getMethodTitle());
68
- }
69
  ?>
70
  <?php $_excl = $this->getShippingPrice($_rate->getPrice(), $this->helper('tax')->displayShippingPriceIncludingTax()); ?>
71
  <?php $_incl = $this->getShippingPrice($_rate->getPrice(), true); ?>
@@ -74,7 +73,17 @@
74
  (<?php echo $this->__('Incl. Tax'); ?> <?php echo $_incl; ?>)
75
  <?php endif; ?>
76
  </label>
77
- <?php endif ?>
 
 
 
 
 
 
 
 
 
 
78
  </li>
79
  <?php endforeach; ?>
80
  </ul>
@@ -109,4 +118,40 @@
109
  });
110
  //]]>
111
  </script>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  <?php endif; ?>
37
  <ul>
38
  <?php $_sole = $_sole && count($_rates) == 1; foreach ($_rates as $_rate): ?>
39
  <?php $shippingCodePrice[] = "'".$_rate->getCode()."':".(float)$_rate->getPrice(); ?>
40
+ <li class="<?php echo $code ?>_wrapper">
41
+ <?php if ($_rate->getErrorMessage()): ?>
42
+ <ul class="messages"><li class="error-msg"><ul><li><?php echo $this->escapeHtml($_rate->getErrorMessage()) ?></li></ul></li></ul>
43
+ <?php else: ?>
44
  <?php if ($_sole) : ?>
45
  <span class="no-display"><input name="shipping_method" type="radio" value="<?php echo $_rate->getCode() ?>" id="s_method_<?php echo $_rate->getCode() ?>" checked="checked" /></span>
46
  <?php else: ?>
60
  /**
61
  * MPLUGIN-1203: don't use escape HTML when display method title for "Netzkollektiv_InStorePickupMulti"
62
  */
63
+ if (Mage::helper('japi')->isModuleEnabled('Netzkollektiv_InStorePickupMulti') && $_rate->getCarrier() == 'instorepickupmulti') {
64
+ echo $_rate->getMethodTitle();
65
+ } else {
66
+ echo $this->escapeHtml($_rate->getMethodTitle());
67
+ }
 
68
  ?>
69
  <?php $_excl = $this->getShippingPrice($_rate->getPrice(), $this->helper('tax')->displayShippingPriceIncludingTax()); ?>
70
  <?php $_incl = $this->getShippingPrice($_rate->getPrice(), true); ?>
73
  (<?php echo $this->__('Incl. Tax'); ?> <?php echo $_incl; ?>)
74
  <?php endif; ?>
75
  </label>
76
+ <?php
77
+ $carrier = Mage::getModel('shipping/config')->getCarrierInstance($code);
78
+ if ($carrier && $carrier->getFormBlock()){
79
+ $block = $this->getLayout()->createBlock($carrier->getFormBlock());
80
+ $block->setMethodCode($code);
81
+ $block->setRate($_rate);
82
+ $block->setMethodInstance($carrier);
83
+ echo $block->_toHtml();
84
+ }
85
+ ?>
86
+ <?php endif ?>
87
  </li>
88
  <?php endforeach; ?>
89
  </ul>
118
  });
119
  //]]>
120
  </script>
121
+
122
+ <!-- Experius_Pickup -->
123
+ <script type="text/javascript">
124
+ JMango(document).ready(function(){
125
+ hideShippingAll();
126
+ JMango('input[type="radio"][name="shipping_method"]').click(function(){
127
+ hideShippingAll();
128
+ var code = JMango(this).val();
129
+ if(JMango(this).is(':checked')){
130
+ showShipping(code);
131
+ }
132
+ });
133
+
134
+ JMango('input[type="radio"][name="shipping_method"]').each(function(){
135
+ var code = JMango(this).val();
136
+ if(JMango(this).is(":checked")){
137
+ showShipping(code);
138
+ }
139
+ });
140
+ });
141
+
142
+ function showShipping(code){
143
+ if(JMango('#'+'shipping_form_'+code).length != 0){
144
+ JMango('#'+'shipping_form_'+code).show();
145
+ JMango(this).find('.required-entry').attr('disabled','false');
146
+ }
147
+ }
148
+
149
+ function hideShippingAll(){
150
+ JMango('input[type="radio"][name="shipping_method"]').each(function(){
151
+ var code = JMango(this).val();
152
+ JMango('#'+'shipping_form_'+code).hide();
153
+ JMango(this).find('.required-entry').attr('disabled','true');
154
+ });
155
+ }
156
+ </script>
157
  <?php endif; ?>
app/design/frontend/base/default/template/japi/form.phtml CHANGED
@@ -5,8 +5,9 @@
5
  ?>
6
  <?php /* @var $this Jmango360_Japi_Block_Form */ ?>
7
  <?php foreach ($this->getFields() as $field): ?>
8
- <li class="wide">
9
- <label class="<?php echo $field['required'] ? 'required' : '' ?>" for="">
 
10
  <?php if ($field['required']): ?><em>*</em><?php endif ?>
11
  <?php echo $this->__($field['label']) ?>
12
  </label>
@@ -36,6 +37,18 @@
36
  checked="<?php echo $this->getFieldValue($field['key']) ? 'checked' : '' ?>"
37
  class="input-text<?php echo $field['required'] ? ' required-entry' : '' ?>"/>
38
  <?php break; ?>
 
 
 
 
 
 
 
 
 
 
 
 
39
  <?php default: ?>
40
  <input type="text"
41
  name="<?php echo $this->getFieldName($field['key']) ?>"
5
  ?>
6
  <?php /* @var $this Jmango360_Japi_Block_Form */ ?>
7
  <?php foreach ($this->getFields() as $field): ?>
8
+ <li class="wide" id="<?php echo str_replace(' ', '_', $field['key']) ?>_wrapper">
9
+ <label class="<?php echo $field['required'] ? 'required' : '' ?>"
10
+ for="<?php echo $this->getFieldId($field['key']) ?>">
11
  <?php if ($field['required']): ?><em>*</em><?php endif ?>
12
  <?php echo $this->__($field['label']) ?>
13
  </label>
37
  checked="<?php echo $this->getFieldValue($field['key']) ? 'checked' : '' ?>"
38
  class="input-text<?php echo $field['required'] ? ' required-entry' : '' ?>"/>
39
  <?php break; ?>
40
+ <?php case 'hidden': ?>
41
+ <input type="hidden"
42
+ name="<?php echo $this->getFieldName($field['key']) ?>"
43
+ id="<?php echo $this->getFieldId($field['key']) ?>"
44
+ value="<?php echo $this->escapeHtml($this->getFieldValue($field['key'])) ?>"/>
45
+ <?php break; ?>
46
+ <?php case 'textarea': ?>
47
+ <textarea
48
+ name="<?php echo $this->getFieldName($field['key']) ?>"
49
+ id="<?php echo $this->getFieldId($field['key']) ?>"
50
+ class="input-text<?php echo $field['required'] ? ' required-entry' : '' ?>"><?php echo $this->escapeHtml($this->getFieldValue($field['key'])) ?></textarea>
51
+ <?php break; ?>
52
  <?php default: ?>
53
  <input type="text"
54
  name="<?php echo $this->getFieldName($field['key']) ?>"
app/locale/en_US/Jmango360_Japi.csv CHANGED
@@ -244,6 +244,8 @@
244
  "Street Address #4 Label", "Street Address #4 Label"
245
  "Set the label for 4th street address.", "Set the label for 4th street address."
246
  "Set if the street address field is required input.", "Set if the street address field is required input."
247
- "", ""
248
- "", ""
249
- "", ""
 
 
244
  "Street Address #4 Label", "Street Address #4 Label"
245
  "Set the label for 4th street address.", "Set the label for 4th street address."
246
  "Set if the street address field is required input.", "Set if the street address field is required input."
247
+ "Please close this form and login with your new account.", "Please close this form and login with your new account."
248
+ "Enable Hide on App on Manage Products","Enable Hide on App on Manage Products"
249
+ "Enable this option to choose if a product is hidden on app or not","Enable this option to choose if a product is hidden on app or not"
250
+ "Hide on JMango360","Hide on JMango360"
251
+ "Hide on JMango360 App","Hide on JMango360 App"
app/locale/fr_FR/Jmango360_Japi.csv CHANGED
@@ -210,3 +210,4 @@
210
  "Mobile App Login Settings","Réglage de la connexion de l'Application Mobile"
211
  "App users must login to see product prices","Utilisateur de l'application doit se connecter pour voir les prix et le bouton Ajouter au Panier"
212
  "This will prevent mobile app user using app without an account.","Cela va empêcher les utilisateurs d'application mobile d'utiliser l'application sans avoir un compte."
 
210
  "Mobile App Login Settings","Réglage de la connexion de l'Application Mobile"
211
  "App users must login to see product prices","Utilisateur de l'application doit se connecter pour voir les prix et le bouton Ajouter au Panier"
212
  "This will prevent mobile app user using app without an account.","Cela va empêcher les utilisateurs d'application mobile d'utiliser l'application sans avoir un compte."
213
+ "Please close this form and login with your new account.", "Veuillez fermer ce formulaire et vous connecter avec votre nouveau compte."
app/locale/it_IT/Jmango360_Japi.csv CHANGED
@@ -222,3 +222,4 @@
222
  "Adding extra attributes to registration form","Adding extra attributes to registration form"
223
  "Adding these attributes to customer registration form in mobile app","Adding these attributes to customer registration form in mobile app"
224
  "Show image of child product in Grouped Product Detail on mobile","Show image of child product in Grouped Product Detail on mobile"
 
222
  "Adding extra attributes to registration form","Adding extra attributes to registration form"
223
  "Adding these attributes to customer registration form in mobile app","Adding these attributes to customer registration form in mobile app"
224
  "Show image of child product in Grouped Product Detail on mobile","Show image of child product in Grouped Product Detail on mobile"
225
+ "Please close this form and login with your new account.", "Chiudi questo modulo ed effettua il login con il tuo nuovo account."
app/locale/nl_NL/Jmango360_Japi.csv ADDED
@@ -0,0 +1,2 @@
 
 
1
+
2
+ "Please close this form and login with your new account.", "Sluit dit formulier en log in met uw nieuwe account."
app/locale/pt_BR/Jmango360_Japi.csv CHANGED
@@ -227,3 +227,4 @@
227
  "Group ID not found.", "Group ID not found."
228
  "Group not found.", "Group not found."
229
  "Account is created. Please check email to confirm.", "Sua conta foi criada. Por favor, verifique o email de confirmação"
 
227
  "Group ID not found.", "Group ID not found."
228
  "Group not found.", "Group not found."
229
  "Account is created. Please check email to confirm.", "Sua conta foi criada. Por favor, verifique o email de confirmação"
230
+ "Please close this form and login with your new account.", "Por favor cierra esta pagina y accede a tu cuenta."
app/locale/pt_PT/Jmango360_Japi.csv CHANGED
@@ -227,3 +227,4 @@
227
  "Group ID not found.", "Group ID not found."
228
  "Group not found.", "Group not found."
229
  "Account is created. Please check email to confirm.", "Sua conta foi criada. Por favor, verifique o email de confirmação"
 
227
  "Group ID not found.", "Group ID not found."
228
  "Group not found.", "Group not found."
229
  "Account is created. Please check email to confirm.", "Sua conta foi criada. Por favor, verifique o email de confirmação"
230
+ "Please close this form and login with your new account.", "Por favor cierra esta pagina y accede a tu cuenta."
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Jmango360_Japi</name>
4
- <version>2.8.2</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.apache.org/licenses/LICENSE-2.0">Apache License</license>
7
  <channel>community</channel>
@@ -31,9 +31,9 @@ Other generic mobile apps that you can add and configure:&#xD;
31
  For more details on JMango360 please visit our website http://www.jmango360.com or out knowledge site http://support.jmango360.com</description>
32
  <notes>* Bug fixes</notes>
33
  <authors><author><name>Duc Ngo</name><user>jmango360</user><email>duc@jmango360.com</email></author></authors>
34
- <date>2016-09-27</date>
35
- <time>10:00:38</time>
36
- <contents><target name="magecommunity"><dir name="Jmango360"><dir name="Japi"><dir name="Block"><dir name="Adminhtml"><dir name="Order"><file name="Grid.php" hash="22273d3d0acaf1b0a093e524f87c6aff"/></dir><file name="Order.php" hash="04e94160608b989286aebeb190299565"/><dir name="Report"><dir name="Chart"><file name="Customers.php" hash="5fde8fdbf5d33e63374b8928249fc58e"/><file name="Orders.php" hash="2e5b31bcf202cf4f726245f4c93de3bc"/><file name="Sales.php" hash="d4d7f0e6db1a1c4b509ce5b6439a92d2"/></dir><dir name="Customers"><file name="Chart.php" hash="cff7f9590804c5527fa80f3e2fb3126e"/><file name="Grid.php" hash="92c0a7ee2bb5d8acf26e29a030db4263"/></dir><file name="Customers.php" hash="ab1d85a4260ea7dba99146fe9fca52bf"/><dir name="Filter"><dir name="Form"><file name="Orders.php" hash="921a673ca567255db3f8e078667bce16"/></dir><file name="Form.php" hash="7b6741ce28ca55c29a5841c41dcb43ce"/></dir><dir name="Orders"><file name="Chart.php" hash="bd3959f7cfb8f64f22a73d974535def3"/><file name="Grid.php" hash="5b4f21bf95f5affb9dd4bceef4a5e710"/></dir><file name="Orders.php" hash="a3349365fbf0cf1fce770a2a6a59212f"/><dir name="Sales"><file name="Chart.php" hash="cfcc4b86ce4cbf71eeb1342639c390f0"/><file name="Grid.php" hash="ad23e6eafa8faca5749ce2ed03cabdf3"/></dir><file name="Sales.php" hash="f38da3ba2754bf66e4db6d297e4edfac"/></dir><dir name="System"><dir name="Config"><dir name="Form"><file name="Log.php" hash="578fd58700caded2f8212eaf168c0b6f"/><file name="User.php" hash="765c49cc51ef232c5e36302921197bde"/><file name="Version.php" hash="ed37a968210f8633570cf0851f0c98c9"/></dir></dir></dir><dir name="Widget"><dir name="Form"><dir name="Renderer"><dir name="Element"><file name="Chart.php" hash="248436ebdd189390e4f55cd6031e5394"/></dir></dir></dir></dir></dir><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="e2e09262d227de4bbe92f09787c36232"/><file name="Category.php" hash="f8bc45fa70f86862e6cbe7c9746a1edc"/><file name="Decimal.php" hash="d0d334970f46b2f9f03d0a8ab362015f"/><file name="Price.php" hash="fa47844068b1e00a068aaff82f068e3a"/></dir><file name="View.php" hash="24ac37f0280492b836e7b71a9ed42edb"/></dir><dir name="Product"><file name="List.php" hash="792c386d84b00f91daa270f8e1bd5eee"/></dir></dir><dir name="Catalogsearch"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="825ecf71c564eb9d76c39abf533b5d44"/></dir></dir><file name="Layer.php" hash="6a9a804601062cc0f79299311a31bb1e"/></dir><dir name="Checkout"><dir name="Cart"><file name="Totals.php" hash="03b89b266dbc21421cd3ee3ebdaa5ecd"/></dir><dir name="Onepage"><file name="Addjs.php" hash="b06fbe98c4c16c472215d4f0e4e11d92"/><file name="Address.php" hash="5aa5083ce32d5710543b2716ed362336"/><file name="Billing.php" hash="9ed5e52390ec384e0742fe5cc035f02b"/><file name="Shipping.php" hash="875d5e21ed3ac9adffe5fa90501dd886"/></dir></dir><file name="Form.php" hash="da6604d3649e5a239ba968ac66203078"/><dir name="GiftMessage"><dir name="Message"><file name="Inline.php" hash="9babd88f15d4f18f3e650e40403a9e30"/></dir></dir></dir><dir name="Controller"><file name="Abstract.php" hash="407a9629e31c0bde55cdb06dd5ce6c38"/></dir><file name="Exception.php" hash="4c7ba2f3f16b67d29588e5c5515c2c29"/><dir name="Helper"><dir name="Adminhtml"><dir name="Report"><file name="Order.php" hash="b6109c1616e5d4fcc5cf0eb9866c6c51"/></dir></dir><file name="Data.php" hash="8e8bb68005f04e050a9024848aac428e"/><file name="Debug.php" hash="51b4ae79ed3bed1be80ba580f5ed983d"/><dir name="GiftMessage"><file name="Message.php" hash="b0fdee7a8c8e247b8ca483b82c18bf2a"/></dir><dir name="Product"><file name="Bundle.php" hash="f207f070f5407e6f7de8d8a869a4ac4a"/><file name="Configurable.php" hash="1d84aa31971a28db1388cfb5c8cfb558"/><file name="Downloadable.php" hash="15f566287b4c9a943b261f4ecb79ccad"/><file name="Grouped.php" hash="88823ffed2223f91df4eeeecda771b1d"/><file name="Media.php" hash="84069dbfd8759b3816367822c9a4a287"/><file name="Options.php" hash="c4f422fa68773044ea838476e7e846ef"/><file name="TierPrice.php" hash="c6657d673ffb763e3daf75d6baf9ef45"/></dir><file name="Product.php" hash="71cdd6566cbf29319df507485e70f776"/><file name="Tax.php" hash="9cf654643cfd6bfe4c9be2d852305499"/></dir><dir name="Model"><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="567bfc8c4dca52f4c445bb7b39d65586"/><file name="Decimal.php" hash="1c1c15b3e0a38d1c0eb4734df6d965a6"/><file name="Price.php" hash="d28f561aec670d6613add8665107b68d"/></dir></dir></dir><dir name="Catalogsearch"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="e78da872e86ac57b1c2c6d5d7abb62da"/></dir></dir></dir><dir name="Core"><file name="Session.php" hash="dc122a47f18a1118e7557cf79d837196"/></dir><file name="Dispatcher.php" hash="0032dd91e78f3a8145420be5b069ebd8"/><dir name="Magpleasure"><dir name="Tierprices"><file name="Price.php" hash="96955e13f0153cba6bb41c2b3e23904f"/></dir></dir><file name="Observer.php" hash="a61a77a174626bb6b2ef40ce03ddef47"/><dir name="Renderer"><file name="Json.php" hash="01a6d0947bb0de340fb35082dbdebdb3"/></dir><file name="Renderer.php" hash="f6304d75dc46db79b4e5d0a36448058e"/><file name="Request.php" hash="e0bf50273db6a631ef5162da23d480ac"/><dir name="Resource"><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2e2fbe3a4defdc57c67c6da4f4c394ab"/><file name="Decimal.php" hash="3c0754c63f624c844a5d284897d4d67b"/><file name="Price.php" hash="2cfa115132865391e29f6d7d702ee2fc"/></dir></dir></dir><dir name="Report"><dir name="Order"><file name="Collection.php" hash="252dc8575563cd584451b9a24c7e49ea"/></dir></dir><dir name="Sales"><dir name="Report"><dir name="Order"><dir name="Collection"><file name="Aggregated.php" hash="fb1f5302e04cced336a65fb345c9f918"/><file name="Live.php" hash="23b0464c592f45657e4e472e72d34355"/></dir></dir><file name="Order.php" hash="acfb2f0982ed1eac58848ac6b9acb199"/></dir></dir><file name="Setup.php" hash="088e7250a113ca9999280b0705850427"/></dir><file name="Response.php" hash="786d845284e214a4af674bd38ee4fc0f"/><dir name="Rest"><dir name="Cart"><file name="Coupon.php" hash="b5f008680c754454bf11d4b56b1533c0"/><file name="Update.php" hash="6e6cd84881512aea20fb94b4ab08b37b"/></dir><file name="Cart.php" hash="47573c545e92162903f7519649dfc9f1"/><dir name="Catalog"><dir name="Category"><file name="Assignedproducts.php" hash="a0bd4a2ddefe157c944dfda14ea56d9b"/><file name="Tree.php" hash="222d4b24f1ca6a64c4cdff49c60492f8"/></dir><dir name="Search"><file name="Products.php" hash="387cd29b8b3d54f314c221a66da346e5"/><file name="Terms.php" hash="4322eb9633f94d89b1940ef0bffb959f"/></dir></dir><file name="Catalog.php" hash="6ee5d37530675fe373dbecffb7a62364"/><dir name="Checkout"><file name="Methods.php" hash="177b27a7917d67fd40b407e2189c703e"/><file name="Onepage.php" hash="9bcfa633bd721d739dd44b37367b1cab"/><file name="Redirect.php" hash="77f4f72415a20eef5b4714150aa4b5dd"/><file name="Submit.php" hash="c0d271e9634ea049549fca6fb5dccc4c"/></dir><file name="Checkout.php" hash="c11edbfa39bd4f57d400cde7c880f1ba"/><dir name="Cms"><file name="Page.php" hash="0a78b2624bd4e69a6d8c7ee566ffd164"/></dir><file name="Cms.php" hash="e29088c9e5da473b0a430c66bc047f01"/><dir name="Customer"><file name="Address.php" hash="3ecccb0378aedb6ccc979b4a4fcce6d3"/><file name="Edit.php" hash="5ec3ebf05838baae0c1f6aaee10cfa5e"/><file name="Group.php" hash="343ce1ff5be3b6c552dfc879fb4aa9bf"/><file name="List.php" hash="15d7cc18a6b22cadd911950dfe0673dc"/><file name="Login.php" hash="53905536f879fe296d33efcd4878d2b3"/><dir name="Order"><file name="List.php" hash="d3b5c949439c9ce569d009ecaea0b5b8"/></dir><file name="Order.php" hash="4a917444e5ef14b399e93cc571167e55"/><file name="Password.php" hash="42ce37853acf0ed09224186b16ababa7"/><file name="Register.php" hash="a6d7f0dc7d669054e6f0adf21745d9e5"/></dir><file name="Customer.php" hash="a9e6efe88ce6762a187277d50ae7f35f"/><file name="Mage.php" hash="c65bb1feb87b06dbab6205c54cbd2d1c"/><dir name="Product"><file name="List.php" hash="2da96203379335d2b9e86f126e795785"/><file name="Purchased.php" hash="9f672085eee3b3b0dbc4ad73d30f73df"/><file name="Search.php" hash="889ffa4785c620b351057752df81c1dc"/><file name="Viewed.php" hash="2deacf3f0896b5247e15a10c6dbbbfbf"/></dir><file name="Product.php" hash="83a1b315df75694e683c24946268fcd0"/><file name="Wishlist.php" hash="110d6bdc7bcca03e9217151c14b4af12"/></dir><file name="Server.php" hash="011aa6a277750dc8c075dd5bbbde5d1a"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Payment.php" hash="14bcf1d7c077a4c17c014174921a9228"/><file name="Shipping.php" hash="fa680415ba872da467a898d8995817bc"/></dir><dir name="Source"><dir name="Address"><file name="Attributes.php" hash="b8c2fd4ae5b52ee76d5f18d07c30b1e7"/><file name="Validatetype.php" hash="5ee18901d63ed0de77db6662f2365d4a"/></dir><file name="Attributes.php" hash="67eccf925d994a08177713fec118b7da"/><file name="Catalogimage.php" hash="30b059c1c67d36f5938d22311194aded"/><dir name="Customer"><file name="Attributes.php" hash="f27a2cb3f53b5396ac9bdcbbab15d665"/></dir><file name="Defaultimage.php" hash="7bc4b41fbcd481affbe9c6985fb4a527"/><file name="Payment.php" hash="8553971f076bd048eea8eb24236f7896"/><file name="Shipping.php" hash="b063fa60f03955d15c049cdae9c6870a"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Japi"><file name="LogController.php" hash="0945b5406c46aff7257b0d21b5ad8491"/><file name="OrderController.php" hash="e6b7c1f5a7156a06fa3f51c32e6bbba9"/><file name="ReportController.php" hash="7f875011263dc136b88c5b789f3b874f"/></dir></dir><file name="CheckoutController.php" hash="bd01e2fb081fb3d9fd7f4e885d7a2cf8"/><file name="CustomerController.php" hash="6ed6bef4b3d3ecffb77de58397a99569"/><file name="ImageController.php" hash="dd0c5b857adae6d4f3b2e9c589724ec0"/><dir name="Rest"><file name="CartController.php" hash="c03ad5e80be7f6f672a68a9e8be80d79"/><file name="CatalogController.php" hash="be9eb353c01e5d8561282806605470d1"/><file name="CheckoutController.php" hash="c201d0870f9e4b3ecf9997e73120f65a"/><file name="CmsController.php" hash="1f8f491a5fa05060a0bfe94f3cfece75"/><file name="CustomerController.php" hash="ab8d79da68a93695438c95fa70608679"/><file name="MageController.php" hash="712eb975f9fad6cb8c56b91b650663be"/><file name="ProductController.php" hash="0dccf3f12dda8f39fe2ec8a2368a39ed"/><file name="WishlistController.php" hash="6e821c803a743544762beacdd6628afc"/></dir><file name="TestController.php" hash="5cf6d0077eec7673a8064716f4373523"/></dir><dir name="data"><dir name="japi_setup"><file name="data-install-2.0.0.php" hash="d3192372e4c2d7a0b026f7337881101b"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="504078ae12fcf490ac8cf405f3366ac1"/><file name="config.xml" hash="67b82d47407ceef8f62551d71b75aff1"/><file name="system.xml" hash="1c65b5eb3402aff41970088959d3743d"/></dir><dir name="sql"><dir name="japi_setup"><file name="install-1.0.0.php" hash="f84214fc43f665c79b92dc7a092b364f"/><file name="upgrade-2.0.1.2-2.0.2.php" hash="d54fe62ffff2834a8330daeb47bc2722"/><file name="upgrade-2.1.6-2.2.0.php" hash="1b66107f157fad22a8cf2682c1ba3d52"/><file name="upgrade-2.2.0-2.2.1.php" hash="55fc2d392f0fbe56af2aede01f1d5d6b"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Jmango360_Japi.xml" hash="8029f499a0cb634a21ffe2fdb5c31712"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="jmango360_japi.xml" hash="a808c587efe1e29e0fce5d4e327c0dca"/></dir><dir name="template"><dir name="japi"><dir name="report"><file name="chart.phtml" hash="b4790e21b21fa6bf8ffd9e9c08526636"/><dir name="grid"><file name="container.phtml" hash="284b949ac932c4fb29506b0af9153fe9"/></dir></dir><dir name="widget"><dir name="form"><dir name="renderer"><dir name="element"><file name="chart.phtml" hash="8531200ea3dd209eef9dc829c653f1a0"/></dir></dir></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="jmango360_japi.xml" hash="2ddf437f8161fb761c2571310176f1ee"/></dir><dir name="template"><dir name="japi"><dir name="TIG"><dir name="PostNL"><dir name="address_validation"><dir name="checkout"><dir name="onepage"><file name="billing.phtml" hash="45db02c3c310266586d8c8645b75b1f1"/><file name="shipping.phtml" hash="6a8dceaff3e204bb5ea73390685f2ab1"/></dir></dir><dir name="customer"><dir name="address"><file name="edit.phtml" hash="e67297b06331aa19c7542fc6054a506e"/><file name="postcode_check.phtml" hash="87e4ce3591eb1cbdb76c1ceacaca6232"/></dir></dir></dir></dir></dir><dir name="checkout"><dir name="onepage"><file name="address.phtml" hash="c63505c5a59a9c7b77ac113ea81c13aa"/><file name="agreements.phtml" hash="daa5fc3cd4cc95f46447c417d1c98d4e"/><file name="billing.phtml" hash="c2b7080bb2e4b109f452759f3df5833c"/><file name="coupon.phtml" hash="194a4d7dec303dc8c86ac174deb3f6ca"/><file name="js.phtml" hash="82cf4af3e0a2d02250b84084fcc16dc0"/><dir name="payment"><file name="info.phtml" hash="5652693e8debe3ab20e444ae8993ca86"/></dir><file name="payment.phtml" hash="1f1ccdb0fb5f42d63b1de496b5f23629"/><dir name="review"><file name="button.phtml" hash="2b4d0b89098374100cde80d0e45dc3b1"/><file name="info.phtml" hash="0dabd96d05df35a2ee955ce97f1bd0b5"/><file name="item.phtml" hash="59f6015bc69052964b77906d854dbcb5"/><file name="totals.phtml" hash="ca947cb3b69fc74bc1616c288135fab7"/></dir><file name="review.phtml" hash="318ca1bcbd683dcf6d1a3edfbee751f6"/><file name="shipping.phtml" hash="0d29917a293d13e56b71d08e47071d7e"/><dir name="shipping_method"><file name="additional.phtml" hash="2ccd4ad249a519175c62d6105fa0cedc"/><file name="available.phtml" hash="7a4cf070e08cbe1b69204136642719a2"/></dir><file name="shipping_method.phtml" hash="325e43b580d9f855d96a6d1e262ea4d7"/><file name="style.phtml" hash="8cddbfde16738f0871ddb52034b9d286"/></dir><file name="onepage.phtml" hash="063d3159bd768753c449bd0c5cd6b983"/></dir><dir name="customer"><dir name="address"><file name="edit.phtml" hash="cd58cfd578d115b8f37d8020dd0088a8"/></dir><dir name="form"><file name="edit.phtml" hash="841a4133ab0cebce6ca27fd6b0e9de98"/><file name="register.phtml" hash="9cc6f316d2e682afd9be0b59aa8214d7"/></dir></dir><file name="form.phtml" hash="b4afa3d28e7e6ec22ea643a7aa82100e"/><dir name="giftmessage"><file name="inline.phtml" hash="1c418df89c7c1f4f68825d3ca7c96bde"/></dir><dir name="page"><dir name="html"><file name="head.phtml" hash="5e33248f1b858519d8e6e8dfc7c2daeb"/></dir><file name="rwd.phtml" hash="bbd5df06b3db265f138b5f0a42bd5299"/></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="japi"><dir name="css"><dir name="icomoon"><dir name="fonts"><file name="icomoon.eot" hash="842065e274d718c38968a81a721d49f4"/><file name="icomoon.svg" hash="1c1ad2678d933f8d2fd712006fbe4e97"/><file name="icomoon.ttf" hash="8ffbfccd78de7c37eadeca837ee40344"/><file name="icomoon.woff" hash="32df67c3aed8769c316b3e7ff1bb637c"/></dir><file name="style.css" hash="1bc04f5f4d16a9ef143954066f60180f"/></dir><file name="style.css" hash="d96a9b58d8bb3167def2bc77c7ae8d05"/><file name="style.less" hash="83fdfce92a92808c9ebae39715d2b48f"/></dir><dir name="images"><file name="bg-down.png" hash="04d7cd2963010b610f608aca03a45c63"/><file name="bg-up.png" hash="2882d38108532275fb1d425bbd021c9d"/></dir><dir name="js"><file name="checkout.js" hash="350b1de4fbfece6f9220f3737c4b33e4"/><dir name="varien"><file name="form.js" hash="212f1f00ac29da3dd5172ded185137dd"/></dir></dir><dir name="lib"><dir name="bootstrap"><dir name="css"><file name="bootstrap.min.css" hash="3e53c6843a02b42ed881307d0c17af7d"/></dir><dir name="fonts"><file name="glyphicons-halflings-regular.eot" hash="f4769f9bdb7466be65088239c12046d1"/><file name="glyphicons-halflings-regular.svg" hash="f721466883998665b87923b92dea655b"/><file name="glyphicons-halflings-regular.ttf" hash="e18bbf611f2a2e43afc071aa2f4e1512"/><file name="glyphicons-halflings-regular.woff" hash="fa2772327f55d8198301fdb8bcfc8158"/><file name="glyphicons-halflings-regular.woff2" hash="448c34a56d699c29117adc64c43affeb"/></dir><dir name="js"><file name="collapse.js" hash="a056148b6e411d503b1173a7a7015423"/><file name="modal.js" hash="e0b4f56dd8cf393335146c0875c5d57c"/><file name="transition.js" hash="7b2ebef34d503883899753188c57c383"/></dir></dir><dir name="jquery"><file name="jquery-1.11.2.min.js" hash="9aecea3830b65ecad103ee84bd5fe294"/><file name="jquery-noconflict.js" hash="3ec1ec0c93eb4f571268d79d7bb02551"/></dir><dir name="ladda"><file name="ladda.min.css" hash="31b0d68aca8c063f2889c5ea6e089518"/><file name="ladda.min.js" hash="01c75906236ae05920e68197c095ce45"/></dir><dir name="scrollto"><file name="scrollTo.js" hash="067acc15856de3af6370b0b8184dff65"/></dir><dir name="spin"><file name="spin.min.js" hash="cc2192a06099083fb2f687d780807b85"/></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Jmango360_Japi.csv" hash="eacdf871e0c6694d356368c3bfd6d1b6"/></dir><dir name="fr_FR"><file name="Jmango360_Japi.csv" hash="9c29080d99860a0939c0bd138ed3412e"/></dir><dir name="it_IT"><file name="Jmango360_Japi.csv" hash="a48046e3dd30ac0ee0086c87aa307991"/></dir><dir name="pt_PT"><file name="Jmango360_Japi.csv" hash="9bf8c9076fcfe9c3aeb525dd18fa959c"/></dir><dir name="pt_BR"><file name="Jmango360_Japi.csv" hash="9bf8c9076fcfe9c3aeb525dd18fa959c"/></dir><dir name="ar_SA"><file name="Jmango360_Japi.csv" hash="c25c4155299f3602dc31325dc8cedeb1"/></dir></target></contents>
37
  <compatible/>
38
  <dependencies><required><php><min>5.2.0</min><max>7.0.0</max></php></required></dependencies>
39
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Jmango360_Japi</name>
4
+ <version>2.9.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://www.apache.org/licenses/LICENSE-2.0">Apache License</license>
7
  <channel>community</channel>
31
  For more details on JMango360 please visit our website http://www.jmango360.com or out knowledge site http://support.jmango360.com</description>
32
  <notes>* Bug fixes</notes>
33
  <authors><author><name>Duc Ngo</name><user>jmango360</user><email>duc@jmango360.com</email></author></authors>
34
+ <date>2016-10-03</date>
35
+ <time>06:47:58</time>
36
+ <contents><target name="magecommunity"><dir name="Jmango360"><dir name="Japi"><dir name="Block"><dir name="Adminhtml"><dir name="Catalog"><dir name="Product"><dir name="Grid"><dir name="Column"><dir name="Renderer"><file name="Hide.php" hash="e4ba69f83fa56a9e79e2a6c7750510f4"/></dir></dir></dir></dir></dir><dir name="Order"><file name="Grid.php" hash="22273d3d0acaf1b0a093e524f87c6aff"/></dir><file name="Order.php" hash="04e94160608b989286aebeb190299565"/><dir name="Report"><dir name="Chart"><file name="Customers.php" hash="5fde8fdbf5d33e63374b8928249fc58e"/><file name="Orders.php" hash="2e5b31bcf202cf4f726245f4c93de3bc"/><file name="Sales.php" hash="d4d7f0e6db1a1c4b509ce5b6439a92d2"/></dir><dir name="Customers"><file name="Chart.php" hash="cff7f9590804c5527fa80f3e2fb3126e"/><file name="Grid.php" hash="92c0a7ee2bb5d8acf26e29a030db4263"/></dir><file name="Customers.php" hash="ab1d85a4260ea7dba99146fe9fca52bf"/><dir name="Filter"><dir name="Form"><file name="Orders.php" hash="921a673ca567255db3f8e078667bce16"/></dir><file name="Form.php" hash="7b6741ce28ca55c29a5841c41dcb43ce"/></dir><dir name="Orders"><file name="Chart.php" hash="bd3959f7cfb8f64f22a73d974535def3"/><file name="Grid.php" hash="5b4f21bf95f5affb9dd4bceef4a5e710"/></dir><file name="Orders.php" hash="a3349365fbf0cf1fce770a2a6a59212f"/><dir name="Sales"><file name="Chart.php" hash="cfcc4b86ce4cbf71eeb1342639c390f0"/><file name="Grid.php" hash="ad23e6eafa8faca5749ce2ed03cabdf3"/></dir><file name="Sales.php" hash="f38da3ba2754bf66e4db6d297e4edfac"/></dir><dir name="System"><dir name="Config"><dir name="Form"><file name="Log.php" hash="578fd58700caded2f8212eaf168c0b6f"/><file name="User.php" hash="765c49cc51ef232c5e36302921197bde"/><file name="Version.php" hash="ed37a968210f8633570cf0851f0c98c9"/></dir></dir></dir><dir name="Widget"><dir name="Form"><dir name="Renderer"><dir name="Element"><file name="Chart.php" hash="248436ebdd189390e4f55cd6031e5394"/></dir></dir></dir></dir></dir><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="e2e09262d227de4bbe92f09787c36232"/><file name="Category.php" hash="f8bc45fa70f86862e6cbe7c9746a1edc"/><file name="Decimal.php" hash="d0d334970f46b2f9f03d0a8ab362015f"/><file name="Price.php" hash="fa47844068b1e00a068aaff82f068e3a"/></dir><file name="View.php" hash="24ac37f0280492b836e7b71a9ed42edb"/></dir><dir name="Product"><file name="List.php" hash="792c386d84b00f91daa270f8e1bd5eee"/></dir></dir><dir name="Catalogsearch"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="825ecf71c564eb9d76c39abf533b5d44"/></dir></dir><file name="Layer.php" hash="6a9a804601062cc0f79299311a31bb1e"/></dir><dir name="Checkout"><dir name="Cart"><file name="Totals.php" hash="03b89b266dbc21421cd3ee3ebdaa5ecd"/></dir><dir name="Onepage"><file name="Addjs.php" hash="b06fbe98c4c16c472215d4f0e4e11d92"/><file name="Address.php" hash="5aa5083ce32d5710543b2716ed362336"/><file name="Billing.php" hash="9ed5e52390ec384e0742fe5cc035f02b"/><file name="Shipping.php" hash="875d5e21ed3ac9adffe5fa90501dd886"/></dir><file name="Onepage.php" hash="9252a6d5af9d169271208f6a05b9d106"/></dir><file name="Form.php" hash="da6604d3649e5a239ba968ac66203078"/><dir name="GiftMessage"><dir name="Message"><file name="Inline.php" hash="9babd88f15d4f18f3e650e40403a9e30"/></dir></dir></dir><dir name="Controller"><file name="Abstract.php" hash="407a9629e31c0bde55cdb06dd5ce6c38"/></dir><file name="Exception.php" hash="4c7ba2f3f16b67d29588e5c5515c2c29"/><dir name="Helper"><dir name="Adminhtml"><dir name="Report"><file name="Order.php" hash="b6109c1616e5d4fcc5cf0eb9866c6c51"/></dir></dir><file name="Data.php" hash="78c7090749bca57015ab877f2a9efd0d"/><file name="Debug.php" hash="51b4ae79ed3bed1be80ba580f5ed983d"/><dir name="GiftMessage"><file name="Message.php" hash="b0fdee7a8c8e247b8ca483b82c18bf2a"/></dir><dir name="Product"><file name="Bundle.php" hash="f207f070f5407e6f7de8d8a869a4ac4a"/><file name="Configurable.php" hash="1d84aa31971a28db1388cfb5c8cfb558"/><file name="Downloadable.php" hash="15f566287b4c9a943b261f4ecb79ccad"/><file name="File.php" hash="ad3730fae76e324f098da2991cf6283e"/><file name="Grouped.php" hash="88823ffed2223f91df4eeeecda771b1d"/><file name="Media.php" hash="84069dbfd8759b3816367822c9a4a287"/><file name="Options.php" hash="c4f422fa68773044ea838476e7e846ef"/><file name="TierPrice.php" hash="c6657d673ffb763e3daf75d6baf9ef45"/></dir><file name="Product.php" hash="bb4fdbd7a2fda19d0661f47e68ee449c"/><file name="Tax.php" hash="9cf654643cfd6bfe4c9be2d852305499"/></dir><dir name="Model"><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="567bfc8c4dca52f4c445bb7b39d65586"/><file name="Decimal.php" hash="1c1c15b3e0a38d1c0eb4734df6d965a6"/><file name="Price.php" hash="d28f561aec670d6613add8665107b68d"/></dir></dir></dir><dir name="Catalogsearch"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="e78da872e86ac57b1c2c6d5d7abb62da"/></dir></dir></dir><dir name="Core"><file name="Session.php" hash="dc122a47f18a1118e7557cf79d837196"/></dir><file name="Dispatcher.php" hash="0032dd91e78f3a8145420be5b069ebd8"/><dir name="Magpleasure"><dir name="Tierprices"><file name="Price.php" hash="96955e13f0153cba6bb41c2b3e23904f"/></dir></dir><file name="Observer.php" hash="e043ea1a298c9d6243da0b2dea03fba8"/><dir name="Renderer"><file name="Json.php" hash="01a6d0947bb0de340fb35082dbdebdb3"/></dir><file name="Renderer.php" hash="f6304d75dc46db79b4e5d0a36448058e"/><file name="Request.php" hash="e0bf50273db6a631ef5162da23d480ac"/><dir name="Resource"><dir name="Catalog"><dir name="Layer"><dir name="Filter"><file name="Attribute.php" hash="2e2fbe3a4defdc57c67c6da4f4c394ab"/><file name="Decimal.php" hash="3c0754c63f624c844a5d284897d4d67b"/><file name="Price.php" hash="2cfa115132865391e29f6d7d702ee2fc"/></dir></dir></dir><dir name="Report"><dir name="Order"><file name="Collection.php" hash="252dc8575563cd584451b9a24c7e49ea"/></dir></dir><dir name="Sales"><dir name="Report"><dir name="Order"><dir name="Collection"><file name="Aggregated.php" hash="fb1f5302e04cced336a65fb345c9f918"/><file name="Live.php" hash="23b0464c592f45657e4e472e72d34355"/></dir></dir><file name="Order.php" hash="acfb2f0982ed1eac58848ac6b9acb199"/></dir></dir><file name="Setup.php" hash="088e7250a113ca9999280b0705850427"/></dir><file name="Response.php" hash="786d845284e214a4af674bd38ee4fc0f"/><dir name="Rest"><dir name="Cart"><file name="Coupon.php" hash="b5f008680c754454bf11d4b56b1533c0"/><file name="Update.php" hash="6e6cd84881512aea20fb94b4ab08b37b"/></dir><file name="Cart.php" hash="9ef09ea5421f65ae439ea864658ed6b2"/><dir name="Catalog"><dir name="Category"><file name="Assignedproducts.php" hash="a0bd4a2ddefe157c944dfda14ea56d9b"/><file name="Tree.php" hash="222d4b24f1ca6a64c4cdff49c60492f8"/></dir><dir name="Search"><file name="Products.php" hash="387cd29b8b3d54f314c221a66da346e5"/><file name="Terms.php" hash="4322eb9633f94d89b1940ef0bffb959f"/></dir></dir><file name="Catalog.php" hash="6ee5d37530675fe373dbecffb7a62364"/><dir name="Checkout"><file name="Methods.php" hash="177b27a7917d67fd40b407e2189c703e"/><file name="Onepage.php" hash="9bcfa633bd721d739dd44b37367b1cab"/><file name="Redirect.php" hash="77f4f72415a20eef5b4714150aa4b5dd"/><file name="Submit.php" hash="c0d271e9634ea049549fca6fb5dccc4c"/></dir><file name="Checkout.php" hash="c11edbfa39bd4f57d400cde7c880f1ba"/><dir name="Cms"><file name="Page.php" hash="0a78b2624bd4e69a6d8c7ee566ffd164"/></dir><file name="Cms.php" hash="e29088c9e5da473b0a430c66bc047f01"/><dir name="Customer"><file name="Address.php" hash="3ecccb0378aedb6ccc979b4a4fcce6d3"/><file name="Edit.php" hash="5ec3ebf05838baae0c1f6aaee10cfa5e"/><file name="Group.php" hash="343ce1ff5be3b6c552dfc879fb4aa9bf"/><file name="List.php" hash="15d7cc18a6b22cadd911950dfe0673dc"/><file name="Login.php" hash="53905536f879fe296d33efcd4878d2b3"/><dir name="Order"><file name="List.php" hash="d3b5c949439c9ce569d009ecaea0b5b8"/></dir><file name="Order.php" hash="4a917444e5ef14b399e93cc571167e55"/><file name="Password.php" hash="42ce37853acf0ed09224186b16ababa7"/><file name="Register.php" hash="a6d7f0dc7d669054e6f0adf21745d9e5"/></dir><file name="Customer.php" hash="a9e6efe88ce6762a187277d50ae7f35f"/><file name="Mage.php" hash="c65bb1feb87b06dbab6205c54cbd2d1c"/><dir name="Product"><file name="Crosssell.php" hash="1622bd39c5c272da70e11335ea2b787f"/><file name="List.php" hash="ebed176f5e705898da5d39d1e8af0136"/><file name="Purchased.php" hash="9f672085eee3b3b0dbc4ad73d30f73df"/><file name="Related.php" hash="c6fc3f0f9e9ec35001a92b6dc3e624e7"/><file name="Search.php" hash="ffd01073e11b846aeb615be416436fd8"/><file name="Upsell.php" hash="3acb5b81c55e62e07c41eeec1a402001"/><file name="Url.php" hash="ef302c7c1529e9e255cf89ec02b15c9b"/><file name="Viewed.php" hash="2deacf3f0896b5247e15a10c6dbbbfbf"/></dir><file name="Product.php" hash="6359df568930718423ccd9c91aea3954"/><file name="Wishlist.php" hash="110d6bdc7bcca03e9217151c14b4af12"/></dir><file name="Server.php" hash="011aa6a277750dc8c075dd5bbbde5d1a"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Payment.php" hash="14bcf1d7c077a4c17c014174921a9228"/><file name="Shipping.php" hash="fa680415ba872da467a898d8995817bc"/></dir><dir name="Source"><dir name="Address"><file name="Attributes.php" hash="b8c2fd4ae5b52ee76d5f18d07c30b1e7"/><file name="Validatetype.php" hash="5ee18901d63ed0de77db6662f2365d4a"/></dir><file name="Attributes.php" hash="67eccf925d994a08177713fec118b7da"/><file name="Catalogimage.php" hash="30b059c1c67d36f5938d22311194aded"/><dir name="Customer"><file name="Attributes.php" hash="f27a2cb3f53b5396ac9bdcbbab15d665"/></dir><file name="Defaultimage.php" hash="7bc4b41fbcd481affbe9c6985fb4a527"/><file name="Payment.php" hash="8553971f076bd048eea8eb24236f7896"/><file name="Shipping.php" hash="b063fa60f03955d15c049cdae9c6870a"/></dir></dir></dir></dir><dir name="controllers"><dir name="Adminhtml"><dir name="Japi"><file name="LogController.php" hash="0945b5406c46aff7257b0d21b5ad8491"/><file name="OrderController.php" hash="e6b7c1f5a7156a06fa3f51c32e6bbba9"/><file name="ReportController.php" hash="7f875011263dc136b88c5b789f3b874f"/></dir></dir><file name="CheckoutController.php" hash="6cac3e82b7255657fd30430ec42f8b6f"/><file name="CustomerController.php" hash="6dfdcd19d714764ab07614cdb6dc2e3d"/><file name="ImageController.php" hash="dd0c5b857adae6d4f3b2e9c589724ec0"/><dir name="Rest"><file name="CartController.php" hash="c03ad5e80be7f6f672a68a9e8be80d79"/><file name="CatalogController.php" hash="be9eb353c01e5d8561282806605470d1"/><file name="CheckoutController.php" hash="c201d0870f9e4b3ecf9997e73120f65a"/><file name="CmsController.php" hash="1f8f491a5fa05060a0bfe94f3cfece75"/><file name="CustomerController.php" hash="ab8d79da68a93695438c95fa70608679"/><file name="MageController.php" hash="65720693f19a9ac5eca461dbb8713893"/><file name="ProductController.php" hash="2962cb51e658a4ffc8fe6c7eacbc2322"/><file name="WishlistController.php" hash="6e821c803a743544762beacdd6628afc"/></dir><file name="TestController.php" hash="5cf6d0077eec7673a8064716f4373523"/></dir><dir name="data"><dir name="japi_setup"><file name="data-install-2.0.0.php" hash="d3192372e4c2d7a0b026f7337881101b"/></dir></dir><dir name="etc"><file name="adminhtml.xml" hash="504078ae12fcf490ac8cf405f3366ac1"/><file name="config.xml" hash="c4dfdfaa7348801a83ace7e1a99d6bae"/><file name="system.xml" hash="bea548e2bb5c90d2d961d691b46077d8"/></dir><dir name="sql"><dir name="japi_setup"><file name="install-1.0.0.php" hash="f84214fc43f665c79b92dc7a092b364f"/><file name="upgrade-2.0.1.2-2.0.2.php" hash="d54fe62ffff2834a8330daeb47bc2722"/><file name="upgrade-2.1.6-2.2.0.php" hash="1b66107f157fad22a8cf2682c1ba3d52"/><file name="upgrade-2.2.0-2.2.1.php" hash="55fc2d392f0fbe56af2aede01f1d5d6b"/><file name="upgrade-2.8.2-2.9.0.php" hash="f158f1a636b6e98d0d2a26526ffd8c69"/></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Jmango360_Japi.xml" hash="8029f499a0cb634a21ffe2fdb5c31712"/></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="jmango360_japi.xml" hash="a808c587efe1e29e0fce5d4e327c0dca"/></dir><dir name="template"><dir name="japi"><dir name="report"><file name="chart.phtml" hash="b4790e21b21fa6bf8ffd9e9c08526636"/><dir name="grid"><file name="container.phtml" hash="284b949ac932c4fb29506b0af9153fe9"/></dir></dir><dir name="widget"><dir name="form"><dir name="renderer"><dir name="element"><file name="chart.phtml" hash="8531200ea3dd209eef9dc829c653f1a0"/></dir></dir></dir></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="jmango360_japi.xml" hash="e65f8de0991c1cee5970a1262ae5dbfa"/></dir><dir name="template"><dir name="japi"><dir name="TIG"><dir name="PostNL"><dir name="address_validation"><dir name="checkout"><dir name="onepage"><file name="billing.phtml" hash="45db02c3c310266586d8c8645b75b1f1"/><file name="shipping.phtml" hash="6a8dceaff3e204bb5ea73390685f2ab1"/></dir></dir><dir name="customer"><dir name="address"><file name="edit.phtml" hash="e67297b06331aa19c7542fc6054a506e"/><file name="postcode_check.phtml" hash="87e4ce3591eb1cbdb76c1ceacaca6232"/></dir></dir></dir><dir name="delivery_options"><dir name="onepage"><file name="available.phtml" hash="04ab6351509ce1697dd433231958fe1c"/></dir></dir></dir></dir><dir name="checkout"><dir name="onepage"><file name="address.phtml" hash="c63505c5a59a9c7b77ac113ea81c13aa"/><file name="agreements.phtml" hash="daa5fc3cd4cc95f46447c417d1c98d4e"/><file name="billing.phtml" hash="c2b7080bb2e4b109f452759f3df5833c"/><file name="coupon.phtml" hash="194a4d7dec303dc8c86ac174deb3f6ca"/><file name="js.phtml" hash="82cf4af3e0a2d02250b84084fcc16dc0"/><dir name="payment"><file name="info.phtml" hash="5652693e8debe3ab20e444ae8993ca86"/></dir><file name="payment.phtml" hash="1f1ccdb0fb5f42d63b1de496b5f23629"/><dir name="review"><file name="button.phtml" hash="2b4d0b89098374100cde80d0e45dc3b1"/><file name="info.phtml" hash="0dabd96d05df35a2ee955ce97f1bd0b5"/><file name="item.phtml" hash="59f6015bc69052964b77906d854dbcb5"/><file name="totals.phtml" hash="ca947cb3b69fc74bc1616c288135fab7"/></dir><file name="review.phtml" hash="318ca1bcbd683dcf6d1a3edfbee751f6"/><file name="shipping.phtml" hash="0d29917a293d13e56b71d08e47071d7e"/><dir name="shipping_method"><file name="additional.phtml" hash="2ccd4ad249a519175c62d6105fa0cedc"/><file name="available.phtml" hash="0a71445c8f2df862a678ff63a2c670e1"/></dir><file name="shipping_method.phtml" hash="325e43b580d9f855d96a6d1e262ea4d7"/><file name="style.phtml" hash="8cddbfde16738f0871ddb52034b9d286"/></dir><file name="onepage.phtml" hash="063d3159bd768753c449bd0c5cd6b983"/></dir><dir name="customer"><dir name="address"><file name="edit.phtml" hash="cd58cfd578d115b8f37d8020dd0088a8"/></dir><dir name="form"><file name="edit.phtml" hash="841a4133ab0cebce6ca27fd6b0e9de98"/><file name="register.phtml" hash="9cc6f316d2e682afd9be0b59aa8214d7"/></dir></dir><file name="form.phtml" hash="fb5e076a84171ae64fa5a8225bfcfb41"/><dir name="giftmessage"><file name="inline.phtml" hash="1c418df89c7c1f4f68825d3ca7c96bde"/></dir><dir name="page"><dir name="html"><file name="head.phtml" hash="5e33248f1b858519d8e6e8dfc7c2daeb"/></dir><file name="rwd.phtml" hash="bbd5df06b3db265f138b5f0a42bd5299"/></dir></dir></dir></dir></dir></dir></target><target name="mageskin"><dir name="frontend"><dir name="base"><dir name="default"><dir name="japi"><dir name="css"><dir name="icomoon"><dir name="fonts"><file name="icomoon.eot" hash="842065e274d718c38968a81a721d49f4"/><file name="icomoon.svg" hash="1c1ad2678d933f8d2fd712006fbe4e97"/><file name="icomoon.ttf" hash="8ffbfccd78de7c37eadeca837ee40344"/><file name="icomoon.woff" hash="32df67c3aed8769c316b3e7ff1bb637c"/></dir><file name="style.css" hash="1bc04f5f4d16a9ef143954066f60180f"/></dir><file name="style.css" hash="4e924fcb6a3da80854ecb3a42abe68b9"/><file name="style.less" hash="541946e26f13df0cf0c6bbda76530a93"/></dir><dir name="images"><file name="bg-down.png" hash="04d7cd2963010b610f608aca03a45c63"/><file name="bg-up.png" hash="2882d38108532275fb1d425bbd021c9d"/></dir><dir name="js"><file name="checkout.js" hash="350b1de4fbfece6f9220f3737c4b33e4"/><dir name="varien"><file name="form.js" hash="212f1f00ac29da3dd5172ded185137dd"/></dir></dir><dir name="lib"><dir name="bootstrap"><dir name="css"><file name="bootstrap.min.css" hash="3e53c6843a02b42ed881307d0c17af7d"/></dir><dir name="fonts"><file name="glyphicons-halflings-regular.eot" hash="f4769f9bdb7466be65088239c12046d1"/><file name="glyphicons-halflings-regular.svg" hash="f721466883998665b87923b92dea655b"/><file name="glyphicons-halflings-regular.ttf" hash="e18bbf611f2a2e43afc071aa2f4e1512"/><file name="glyphicons-halflings-regular.woff" hash="fa2772327f55d8198301fdb8bcfc8158"/><file name="glyphicons-halflings-regular.woff2" hash="448c34a56d699c29117adc64c43affeb"/></dir><dir name="js"><file name="collapse.js" hash="a056148b6e411d503b1173a7a7015423"/><file name="modal.js" hash="e0b4f56dd8cf393335146c0875c5d57c"/><file name="transition.js" hash="7b2ebef34d503883899753188c57c383"/></dir></dir><dir name="jquery"><file name="jquery-1.11.2.min.js" hash="9aecea3830b65ecad103ee84bd5fe294"/><file name="jquery-noconflict.js" hash="3ec1ec0c93eb4f571268d79d7bb02551"/></dir><dir name="ladda"><file name="ladda.min.css" hash="31b0d68aca8c063f2889c5ea6e089518"/><file name="ladda.min.js" hash="01c75906236ae05920e68197c095ce45"/></dir><dir name="scrollto"><file name="scrollTo.js" hash="067acc15856de3af6370b0b8184dff65"/></dir><dir name="spin"><file name="spin.min.js" hash="cc2192a06099083fb2f687d780807b85"/></dir></dir></dir></dir></dir></dir></target><target name="magelocale"><dir name="en_US"><file name="Jmango360_Japi.csv" hash="5ca28202de134886ba732da2cdbd9c3b"/></dir><dir name="fr_FR"><file name="Jmango360_Japi.csv" hash="d4d2f66da68229aa271c307b8645cf5a"/></dir><dir name="it_IT"><file name="Jmango360_Japi.csv" hash="28f5e675e9ce85bf4b29072122e49d11"/></dir><dir name="pt_PT"><file name="Jmango360_Japi.csv" hash="6b0f1091ad1a871087152292fa57e62a"/></dir><dir name="pt_BR"><file name="Jmango360_Japi.csv" hash="6b0f1091ad1a871087152292fa57e62a"/></dir><dir name="ar_SA"><file name="Jmango360_Japi.csv" hash="c25c4155299f3602dc31325dc8cedeb1"/></dir><dir name="nl_NL"><file name="Jmango360_Japi.csv" hash="120eea4cdc6c01e069a7336474f7cf3e"/></dir></target></contents>
37
  <compatible/>
38
  <dependencies><required><php><min>5.2.0</min><max>7.0.0</max></php></required></dependencies>
39
  </package>
skin/frontend/base/default/japi/css/style.css CHANGED
@@ -1,638 +1,716 @@
1
- /**
2
- * Copyright 2015 JMango360
3
- */
4
- table {
5
- width: 100%;
6
- }
7
- ul,
8
- ol {
9
- margin: 0;
10
- padding: 0;
11
- }
12
- ul li,
13
- ol li {
14
- list-style: none;
15
- }
16
- h1,
17
- h2,
18
- h3,
19
- h4,
20
- h5,
21
- h6 {
22
- font-weight: normal;
23
- margin: 0;
24
- line-height: 1em;
25
- }
26
- a,
27
- a:focus,
28
- a:hover {
29
- text-decoration: none;
30
- }
31
- .cleafix:before,
32
- .cleafix:after {
33
- display: table;
34
- content: "";
35
- }
36
- .cleafix:after {
37
- clear: both;
38
- }
39
- .page-title {
40
- padding: 0 1em;
41
- }
42
- .page-title h1 {
43
- text-transform: uppercase;
44
- font-size: 20px;
45
- font-weight: bold;
46
- line-height: 20px;
47
- padding: 1em 0;
48
- }
49
- .step-title {
50
- border-bottom: 1px solid #d9d9d9;
51
- position: relative;
52
- white-space: nowrap;
53
- overflow: hidden;
54
- }
55
- .step-title .step-number-wrapper {
56
- display: table-cell;
57
- padding-right: 0.5em;
58
- }
59
- .step-title .step-number {
60
- width: 26px;
61
- height: 26px;
62
- color: #fff;
63
- background: #333;
64
- display: inline-block;
65
- line-height: 26px;
66
- text-align: center;
67
- }
68
- .step-title h2 {
69
- color: #333;
70
- font-size: 1.2em;
71
- display: inline-block;
72
- text-transform: uppercase;
73
- line-height: 40px;
74
- display: table-cell;
75
- }
76
- .step-title .section-control {
77
- position: absolute;
78
- top: 0;
79
- right: 0;
80
- background: #fff;
81
- display: none;
82
- color: #333;
83
- width: 40px;
84
- line-height: 40px;
85
- text-align: center;
86
- font-size: 16px;
87
- }
88
- .allow .section-control {
89
- display: block;
90
- }
91
- .opc {
92
- display: block;
93
- width: 100%;
94
- box-sizing: border-box;
95
- padding: 0 1em 1em 1em;
96
- }
97
- .opc .section {
98
- border-radius: 0;
99
- -webkit-box-shadow: none;
100
- box-shadow: none;
101
- padding: 0;
102
- margin: 0;
103
- }
104
- .opc .section:first-child .step-title {
105
- border-top: 1px solid #d9d9d9;
106
- }
107
- .opc .step > form,
108
- .opc .step > .order-review {
109
- padding: 1em 0 0 0;
110
- }
111
- .opc .step .buttons-set {
112
- margin-top: 1em;
113
- }
114
- .sp-methods {
115
- box-shadow: 0 0 0 1px #d9d9d9;
116
- margin-bottom: 0;
117
- }
118
- .sp-methods dt {
119
- display: table;
120
- width: 100%;
121
- padding: 1em;
122
- font-weight: normal;
123
- border-top: 1px solid #d9d9d9;
124
- border-bottom: 1px solid #d9d9d9;
125
- }
126
- .sp-methods dt:first-child,
127
- .sp-methods dt + dt {
128
- border-top: 0;
129
- }
130
- .sp-methods dd {
131
- background: #fafafa;
132
- }
133
- .sp-methods dd ul li {
134
- padding: 1em;
135
- width: 100%;
136
- display: table;
137
- }
138
- .sp-methods dd ul.form-list li {
139
- display: block;
140
- }
141
- .sp-methods label {
142
- font-weight: normal;
143
- color: #737373;
144
- display: table-cell;
145
- width: 100%;
146
- padding: 0 0 0 0.5em;
147
- }
148
- .sp-methods label .price {
149
- color: #4d4d4d;
150
- float: right;
151
- }
152
- .sp-methods input[type=checkbox],
153
- .sp-methods input[type=radio] {
154
- display: table-cell;
155
- padding: 0;
156
- margin: 0;
157
- }
158
- .sp-methods .section-control {
159
- display: inline-block;
160
- float: right;
161
- font-size: 16px;
162
- color: #333;
163
- }
164
- .ladda-button {
165
- width: 100%;
166
- }
167
- .jm-item:first-child td {
168
- padding-top: 0;
169
- }
170
- .jm-item td {
171
- padding-top: 1em;
172
- padding-left: 1em;
173
- vertical-align: top;
174
- }
175
- .jm-item td:first-child {
176
- padding-left: 0;
177
- }
178
- .jm-item .jm-item-img {
179
- width: 20%;
180
- }
181
- .jm-item .jm-item-img .jm-item-img-inner {
182
- width: 100%;
183
- position: relative;
184
- }
185
- .jm-item .jm-item-img .jm-item-qty {
186
- border-radius: 2em;
187
- font-size: 0.8em;
188
- padding: 0.15em 0.5em;
189
- min-width: 1.7em;
190
- position: absolute;
191
- right: -0.75em;
192
- top: -0.75em;
193
- color: #fff;
194
- background-color: rgba(153, 153, 153, 0.9);
195
- }
196
- .jm-item .jm-item-img img {
197
- width: 100%;
198
- border-radius: 8px;
199
- }
200
- .jm-item .jm-item-detail {
201
- padding-left: 1em;
202
- }
203
- .jm-item .jm-item-detail .jm-item-desc {
204
- font-size: 0.9em;
205
- color: #969696;
206
- }
207
- .jm-item .jm-item-detail .jm-item-desc .jm-item-desc-item {
208
- display: block;
209
- }
210
- .modal-agreement .modal-dialog {
211
- margin: 0;
212
- }
213
- .modal-agreement .modal-dialog .modal-content {
214
- border-radius: 0;
215
- border: 0;
216
- box-shadow: none;
217
- }
218
- .modal-agreement .modal-dialog .close {
219
- font-size: 2em;
220
- font-weight: normal;
221
- min-width: 1em;
222
- }
223
- #checkout-review-table tfoot {
224
- border-top: solid 1px #D4D2D2;
225
- }
226
- #checkout-review-table tfoot tr td {
227
- padding: 10px 15px;
228
- }
229
- @media (min-width: 768px) {
230
- .modal-dialog {
231
- width: 100%;
232
- }
233
- }
234
- .modal-backdrop {
235
- z-index: 0;
236
- }
237
- p.required,
238
- p.back-link {
239
- display: none;
240
- }
241
- .form-list input[type="text"],
242
- .form-list input[type="password"],
243
- .form-list input.input-text,
244
- .form-list textarea {
245
- width: 100%;
246
- padding: 0.4em 0.5em;
247
- border: 1px solid #dadada;
248
- }
249
- .form-list input[type="text"].validation-failed,
250
- .form-list input[type="password"].validation-failed,
251
- .form-list input.input-text.validation-failed,
252
- .form-list textarea.validation-failed {
253
- border-color: #df280a;
254
- }
255
- .form-list textarea {
256
- min-height: 100px;
257
- padding: 0 5px;
258
- }
259
- .form-list input[type="checkbox"],
260
- .form-list input[type="radio"] {
261
- width: auto;
262
- display: inline-block;
263
- margin: 0 5px 0 0;
264
- padding: 0;
265
- vertical-align: middle;
266
- height: auto;
267
- }
268
- .form-list .control {
269
- margin: 1em 0 0 0;
270
- }
271
- .form-list .control > .input-box {
272
- display: inline-block;
273
- }
274
- .form-list .control label {
275
- padding: 0;
276
- margin: 0;
277
- height: auto;
278
- vertical-align: middle;
279
- }
280
- .form-list select {
281
- width: 100%;
282
- padding: 0.4em 0.5em;
283
- border: 1px solid #dadada;
284
- }
285
- .form-list select[multiple] {
286
- min-height: 5em;
287
- }
288
- .form-list label {
289
- font-weight: normal;
290
- vertical-align: middle;
291
- padding: 0;
292
- }
293
- .form-list label.required em {
294
- color: #DF280A;
295
- float: right;
296
- }
297
- .form-list .fields .customer-name .field {
298
- width: 49%;
299
- float: left;
300
- }
301
- .form-list .fields .customer-name .field:last-child {
302
- float: right;
303
- }
304
- .form-list .fields .field,
305
- .form-list .wide .field {
306
- margin-bottom: 10px;
307
- }
308
- .form-list .wide .input-box {
309
- margin-bottom: 5px;
310
- }
311
- .form-list .validation-advice {
312
- color: #df280a;
313
- margin-top: 5px;
314
- line-height: 1;
315
- font-size: 0.9em;
316
- }
317
- .form-list .validation-advice:before {
318
- content: "\e900";
319
- font-family: 'icomoon';
320
- font-style: normal;
321
- font-weight: normal;
322
- line-height: 1;
323
- padding-right: 5px;
324
- }
325
- .form-list .input-box:before,
326
- .form-list .input-box:after {
327
- display: table;
328
- content: "";
329
- }
330
- .form-list .input-box:after {
331
- clear: both;
332
- }
333
- .form-list .input-box .v-fix {
334
- width: 49%;
335
- float: left;
336
- }
337
- .form-list .input-box .v-fix:last-child {
338
- float: right;
339
- }
340
- .form-list .cvv-what-is-this {
341
- display: none;
342
- }
343
- .form-list label[for="ccsave_cc_cid"] + .input-box .v-fix {
344
- width: 100%;
345
- }
346
- #discount-coupon-form {
347
- padding-top: 1em;
348
- }
349
- #discount-coupon-form .sp-methods label {
350
- display: block;
351
- padding: 0;
352
- }
353
- span.price {
354
- white-space: nowrap;
355
- }
356
- #onepage-checkout-shipping-method-additional-load {
357
- margin-top: 1em;
358
- }
359
- .gift-messages h3 {
360
- font-size: 1.2em;
361
- line-height: 1.2em;
362
- }
363
- .gift-messages-form .inner-box > h4 {
364
- display: none;
365
- }
366
- .gift-messages-form .product-img-box .number {
367
- font-style: italic;
368
- }
369
- .gift-messages-form .product-name {
370
- font-weight: bold;
371
- padding: 5px 0 8px 0;
372
- }
373
- .gift-messages-form .inner-box p,
374
- .gift-messages p.control {
375
- margin: 5px 0;
376
- }
377
- .gift-messages-form .inner-box p > *,
378
- .gift-messages p.control > * {
379
- padding: 0;
380
- margin: 0;
381
- vertical-align: middle;
382
- }
383
- .gift-messages-form .inner-box p input[type="checkbox"],
384
- .gift-messages p.control input[type="checkbox"] {
385
- display: inline-block;
386
- margin: 0 5px 0 0;
387
- }
388
- .gift-messages-form .inner-box p label,
389
- .gift-messages p.control label {
390
- font-weight: normal;
391
- }
392
- .customer-dob .dob-month,
393
- .customer-dob .dob-day,
394
- .customer-dob .dob-year {
395
- width: 33%;
396
- padding-right: 1%;
397
- float: left;
398
- }
399
- .customer-dob .dob-month .validation-advice,
400
- .customer-dob .dob-day .validation-advice,
401
- .customer-dob .dob-year .validation-advice {
402
- display: none;
403
- }
404
- .messages .error-msg {
405
- color: #a94442;
406
- background-color: #f2dede;
407
- border-color: #ebccd1;
408
- padding: 1em;
409
- word-wrap: break-word;
410
- }
411
- .messages .success-msg {
412
- color: #3c763d;
413
- background-color: #dff0d8;
414
- border-color: #d6e9c6;
415
- padding: 1em;
416
- word-wrap: break-word;
417
- }
418
- .messages + .opc .section .step-title {
419
- border-top: 0;
420
- }
421
- #checkout-shipping-method-load {
422
- min-height: 1em;
423
- }
424
- .jm-spinner {
425
- margin: 1em 0;
426
- }
427
- .account-create .page-title h1,
428
- .account-address .page-title h1,
429
- .account-edit .page-title h1 {
430
- display: none;
431
- }
432
- .account-create .success-msg,
433
- .account-address .success-msg,
434
- .account-edit .success-msg {
435
- display: none;
436
- }
437
- .account-create form,
438
- .account-address form,
439
- .account-edit form {
440
- padding: 0 1em;
441
- }
442
- .account-create h2.legend,
443
- .account-address h2.legend,
444
- .account-edit h2.legend {
445
- color: #333;
446
- font-size: 1.2em;
447
- text-transform: uppercase;
448
- line-height: 40px;
449
- }
450
- .account-create .buttons-set,
451
- .account-address .buttons-set,
452
- .account-edit .buttons-set {
453
- padding: 1em 0;
454
- }
455
- .account-address .success-msg {
456
- display: block;
457
- }
458
- #checkout-step-billing input[type="text"],
459
- #checkout-step-shipping input[type="text"],
460
- #checkout-step-billing input[type="password"] select,
461
- #checkout-step-shipping input[type="password"] select,
462
- #checkout-step-billing textarea,
463
- #checkout-step-shipping textarea {
464
- background: #fafafa;
465
- }
466
- /******** PostcodeNl_Api ********/
467
- #billing\:postcode_input\:wrapper .field,
468
- #shipping\:postcode_input\:wrapper .field {
469
- width: 49%;
470
- display: inline-block;
471
- }
472
- #billing\:postcode_input\:wrapper .field:last-child,
473
- #shipping\:postcode_input\:wrapper .field:last-child {
474
- float: right;
475
- }
476
- #billing\:postcode_input\:wrapper input.pcnl-input-text-half,
477
- #shipping\:postcode_input\:wrapper input.pcnl-input-text-half {
478
- width: 100%;
479
- }
480
- #billing\:postcode_input\:wrapper:before,
481
- #shipping\:postcode_input\:wrapper:before,
482
- #billing\:postcode_input\:wrapper:after,
483
- #shipping\:postcode_input\:wrapper:after {
484
- display: table;
485
- content: "";
486
- }
487
- #billing\:postcode_input\:wrapper:after,
488
- #shipping\:postcode_input\:wrapper:after {
489
- clear: both;
490
- }
491
- /******** TIG_PostNL ********/
492
- #opc_postnl_ce {
493
- float: left;
494
- margin-top: 1em;
495
- width: 100%;
496
- }
497
- #opc_postnl_ce .field {
498
- width: 100% !important;
499
- }
500
- #opc_postnl_ce .field .input-box {
501
- width: 100%;
502
- }
503
- #opc_postnl_ce .field .input-box input,
504
- #opc_postnl_ce .field .input-box select,
505
- #opc_postnl_ce .field .input-box textarea {
506
- width: 100%;
507
- }
508
- #opc_postnl_ce .postnl.validation-advice {
509
- width: 100%;
510
- }
511
- #opc_postnl_ce .postnl-loading {
512
- width: 100%;
513
- text-align: center;
514
- margin: 0.5em 0;
515
- }
516
- #s_method_postnl_tablerate,
517
- #s_method_postnl_tablerate + label {
518
- display: inline;
519
- }
520
- .postnl-container {
521
- display: block;
522
- background: transparent;
523
- border-bottom: 0;
524
- padding: 0;
525
- margin: 0;
526
- }
527
- .postnl-container #postnl_delivery_options {
528
- padding: 1em 0;
529
- width: 100%;
530
- }
531
- .postnl-container .responsive-switch-wrapper {
532
- margin-top: 0;
533
- }
534
- .postnl-container .responsive-switch-wrapper ul > li {
535
- width: 49%;
536
- padding: 0 0.5em;
537
- }
538
- .postnl-container .responsive-switch-wrapper a {
539
- border-radius: 0 !important;
540
- }
541
- .postnl-container .option-list .responsive-tooltip {
542
- padding: 0;
543
- }
544
- .postnl-container .option-list .location {
545
- margin: 0;
546
- }
547
- .postnl-container .option-list .add-location {
548
- height: auto;
549
- border-top: 0;
550
- }
551
- .postnl-container .option-list.extras .content {
552
- display: table;
553
- }
554
- .postnl-container .option-list.extras .content > input {
555
- display: table-cell;
556
- vertical-align: middle;
557
- }
558
- .postnl-container .option-list.extras .content input + label {
559
- display: table-cell;
560
- }
561
- .postnl-container .col2-set .col-1,
562
- .postnl-container .col2-set .col-2 {
563
- max-width: 0;
564
- }
565
- .postnl-container .location-filters li {
566
- height: auto;
567
- padding: 0.5em 0;
568
- }
569
- .postnl-container .location-filters li strong {
570
- font-size: 1.5em;
571
- }
572
- .postnl-container .location-filters .label {
573
- color: #333;
574
- text-align: left;
575
- }
576
- .postnl-container .location-details {
577
- padding: 0;
578
- }
579
- .postnl-container .location-details .more-info {
580
- margin: 0 1em 0 1em;
581
- padding: 1em 0;
582
- }
583
- .postnl-container .location-details .content {
584
- padding: 1em;
585
- }
586
- .postnl-container .location-details .content .location-info {
587
- width: 100%;
588
- }
589
- .postnl-container .location-details .content .location-info .radio {
590
- margin: 0;
591
- }
592
- .postnl-container .location-details .content .location-info .address {
593
- width: 100%;
594
- }
595
- .postnl-container .location-details .content .location-info .distance {
596
- right: 1em;
597
- top: 0;
598
- }
599
- /******** Afterpay_Afterpay ********/
600
- #payment-errors + .form-list .input-box input[type="radio"] {
601
- margin: 0;
602
- }
603
- #payment-errors + .form-list .input-box label {
604
- display: inline-block;
605
- width: auto;
606
- margin: 0;
607
- padding-right: 1em;
608
- }
609
- #payment-errors + .form-list ul > li {
610
- display: block;
611
- }
612
- #payment-errors + .form-list ul > li > label {
613
- float: none !important;
614
- }
615
- #payment-errors + .form-list ul > li > .field {
616
- margin-bottom: 1em;
617
- }
618
- #payment-errors + .form-list ul > li > .field:last-child {
619
- margin-bottom: 0;
620
- }
621
- /******** Afterpay_Afterpay ********/
622
- #dd_method_msp_klarna .form-list li br {
623
- display: none;
624
- }
625
- #dd_method_msp_klarna .form-list li label {
626
- margin-top: 1em;
627
- display: block;
628
- }
629
- #dd_method_msp_klarna .form-list li label:first-child {
630
- margin-top: 0;
631
- }
632
- #dd_method_msp_klarna .form-list li input {
633
- width: 100%;
634
- }
635
- #dd_method_msp_klarna .form-list li input[type="radio"],
636
- #dd_method_msp_klarna .form-list li input[type="checkbox"] {
637
- width: auto;
638
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /**
2
+ * Copyright 2015 JMango360
3
+ */
4
+ table {
5
+ width: 100%;
6
+ }
7
+ ul,
8
+ ol {
9
+ margin: 0;
10
+ padding: 0;
11
+ }
12
+ ul li,
13
+ ol li {
14
+ list-style: none;
15
+ }
16
+ h1,
17
+ h2,
18
+ h3,
19
+ h4,
20
+ h5,
21
+ h6 {
22
+ font-weight: normal;
23
+ margin: 0;
24
+ line-height: 1em;
25
+ }
26
+ a,
27
+ a:focus,
28
+ a:hover {
29
+ text-decoration: none;
30
+ }
31
+ .cleafix:before,
32
+ .cleafix:after {
33
+ display: table;
34
+ content: "";
35
+ }
36
+ .cleafix:after {
37
+ clear: both;
38
+ }
39
+ .page-title {
40
+ padding: 0 1em;
41
+ }
42
+ .page-title h1 {
43
+ text-transform: uppercase;
44
+ font-size: 20px;
45
+ font-weight: bold;
46
+ line-height: 20px;
47
+ padding: 1em 0;
48
+ }
49
+ .step-title {
50
+ border-bottom: 1px solid #d9d9d9;
51
+ position: relative;
52
+ white-space: nowrap;
53
+ overflow: hidden;
54
+ }
55
+ .step-title .step-number-wrapper {
56
+ display: table-cell;
57
+ padding-right: 0.5em;
58
+ }
59
+ .step-title .step-number {
60
+ width: 26px;
61
+ height: 26px;
62
+ color: #fff;
63
+ background: #333;
64
+ display: inline-block;
65
+ line-height: 26px;
66
+ text-align: center;
67
+ }
68
+ .step-title h2 {
69
+ color: #333;
70
+ font-size: 1.2em;
71
+ display: inline-block;
72
+ text-transform: uppercase;
73
+ line-height: 40px;
74
+ display: table-cell;
75
+ }
76
+ .step-title .section-control {
77
+ position: absolute;
78
+ top: 0;
79
+ right: 0;
80
+ background: #fff;
81
+ display: none;
82
+ color: #333;
83
+ width: 40px;
84
+ line-height: 40px;
85
+ text-align: center;
86
+ font-size: 16px;
87
+ }
88
+ .allow .section-control {
89
+ display: block;
90
+ }
91
+ .opc {
92
+ display: block;
93
+ width: 100%;
94
+ box-sizing: border-box;
95
+ padding: 0 1em 1em 1em;
96
+ }
97
+ .opc .section {
98
+ border-radius: 0;
99
+ -webkit-box-shadow: none;
100
+ box-shadow: none;
101
+ padding: 0;
102
+ margin: 0;
103
+ }
104
+ .opc .section:first-child .step-title {
105
+ border-top: 1px solid #d9d9d9;
106
+ }
107
+ .opc .step > form,
108
+ .opc .step > .order-review {
109
+ padding: 1em 0 0 0;
110
+ }
111
+ .opc .step .buttons-set {
112
+ margin-top: 1em;
113
+ }
114
+ .sp-methods {
115
+ box-shadow: 0 0 0 1px #d9d9d9;
116
+ margin-bottom: 0;
117
+ }
118
+ .sp-methods dt {
119
+ display: table;
120
+ width: 100%;
121
+ padding: 1em;
122
+ font-weight: normal;
123
+ border-top: 1px solid #d9d9d9;
124
+ border-bottom: 1px solid #d9d9d9;
125
+ }
126
+ .sp-methods dt:first-child,
127
+ .sp-methods dt + dt {
128
+ border-top: 0;
129
+ }
130
+ .sp-methods dd {
131
+ background: #fafafa;
132
+ }
133
+ .sp-methods dd ul li {
134
+ padding: 1em;
135
+ width: 100%;
136
+ display: table;
137
+ }
138
+ .sp-methods dd ul.form-list li {
139
+ display: block;
140
+ }
141
+ .sp-methods label {
142
+ font-weight: normal;
143
+ color: #737373;
144
+ display: table-cell;
145
+ width: 100%;
146
+ padding: 0 0 0 0.5em;
147
+ }
148
+ .sp-methods label .price {
149
+ color: #4d4d4d;
150
+ float: right;
151
+ }
152
+ .sp-methods input[type=checkbox],
153
+ .sp-methods input[type=radio] {
154
+ display: table-cell;
155
+ padding: 0;
156
+ margin: 0;
157
+ }
158
+ .sp-methods .section-control {
159
+ display: inline-block;
160
+ float: right;
161
+ font-size: 16px;
162
+ color: #333;
163
+ }
164
+ .ladda-button {
165
+ width: 100%;
166
+ }
167
+ .jm-item:first-child td {
168
+ padding-top: 0;
169
+ }
170
+ .jm-item td {
171
+ padding-top: 1em;
172
+ padding-left: 1em;
173
+ vertical-align: top;
174
+ }
175
+ .jm-item td:first-child {
176
+ padding-left: 0;
177
+ }
178
+ .jm-item .jm-item-img {
179
+ width: 20%;
180
+ }
181
+ .jm-item .jm-item-img .jm-item-img-inner {
182
+ width: 100%;
183
+ position: relative;
184
+ }
185
+ .jm-item .jm-item-img .jm-item-qty {
186
+ border-radius: 2em;
187
+ font-size: 0.8em;
188
+ padding: 0.15em 0.5em;
189
+ min-width: 1.7em;
190
+ position: absolute;
191
+ right: -0.75em;
192
+ top: -0.75em;
193
+ color: #fff;
194
+ background-color: rgba(153, 153, 153, 0.9);
195
+ }
196
+ .jm-item .jm-item-img img {
197
+ width: 100%;
198
+ border-radius: 8px;
199
+ }
200
+ .jm-item .jm-item-detail {
201
+ padding-left: 1em;
202
+ }
203
+ .jm-item .jm-item-detail .jm-item-desc {
204
+ font-size: 0.9em;
205
+ color: #969696;
206
+ }
207
+ .jm-item .jm-item-detail .jm-item-desc .jm-item-desc-item {
208
+ display: block;
209
+ }
210
+ .modal-agreement .modal-dialog {
211
+ margin: 0;
212
+ }
213
+ .modal-agreement .modal-dialog .modal-content {
214
+ border-radius: 0;
215
+ border: 0;
216
+ box-shadow: none;
217
+ }
218
+ .modal-agreement .modal-dialog .close {
219
+ font-size: 2em;
220
+ font-weight: normal;
221
+ min-width: 1em;
222
+ }
223
+ #checkout-review-table tfoot {
224
+ border-top: solid 1px #D4D2D2;
225
+ }
226
+ #checkout-review-table tfoot tr td {
227
+ padding: 10px 15px;
228
+ }
229
+ @media (min-width: 768px) {
230
+ .modal-dialog {
231
+ width: 100%;
232
+ }
233
+ }
234
+ .modal-backdrop {
235
+ z-index: 0;
236
+ }
237
+ p.required,
238
+ p.back-link {
239
+ display: none;
240
+ }
241
+ .form-list input[type="text"],
242
+ .form-list input[type="password"],
243
+ .form-list input.input-text,
244
+ .form-list textarea {
245
+ width: 100%;
246
+ padding: 0.4em 0.5em;
247
+ border: 1px solid #dadada;
248
+ }
249
+ .form-list input[type="text"].validation-failed,
250
+ .form-list input[type="password"].validation-failed,
251
+ .form-list input.input-text.validation-failed,
252
+ .form-list textarea.validation-failed {
253
+ border-color: #df280a;
254
+ }
255
+ .form-list textarea {
256
+ min-height: 100px;
257
+ padding: 0 5px;
258
+ }
259
+ .form-list input[type="checkbox"],
260
+ .form-list input[type="radio"] {
261
+ width: auto;
262
+ display: inline-block;
263
+ margin: 0 5px 0 0;
264
+ padding: 0;
265
+ vertical-align: middle;
266
+ height: auto;
267
+ }
268
+ .form-list .control {
269
+ margin: 1em 0 0 0;
270
+ }
271
+ .form-list .control > .input-box {
272
+ display: inline-block;
273
+ }
274
+ .form-list .control label {
275
+ padding: 0;
276
+ margin: 0;
277
+ height: auto;
278
+ vertical-align: middle;
279
+ }
280
+ .form-list select {
281
+ width: 100%;
282
+ padding: 0.4em 0.5em;
283
+ border: 1px solid #dadada;
284
+ }
285
+ .form-list select[multiple] {
286
+ min-height: 5em;
287
+ }
288
+ .form-list label {
289
+ font-weight: normal;
290
+ vertical-align: middle;
291
+ padding: 0;
292
+ }
293
+ .form-list label.required em {
294
+ color: #DF280A;
295
+ float: right;
296
+ }
297
+ .form-list .fields .customer-name .field {
298
+ width: 49%;
299
+ float: left;
300
+ }
301
+ .form-list .fields .customer-name .field:last-child {
302
+ float: right;
303
+ }
304
+ .form-list .fields .field,
305
+ .form-list .wide .field {
306
+ margin-bottom: 10px;
307
+ }
308
+ .form-list .wide .input-box {
309
+ margin-bottom: 5px;
310
+ }
311
+ .form-list .validation-advice {
312
+ color: #df280a;
313
+ margin-top: 5px;
314
+ line-height: 1;
315
+ font-size: 0.9em;
316
+ }
317
+ .form-list .validation-advice:before {
318
+ content: "\e900";
319
+ font-family: 'icomoon';
320
+ font-style: normal;
321
+ font-weight: normal;
322
+ line-height: 1;
323
+ padding-right: 5px;
324
+ }
325
+ .form-list .input-box:before,
326
+ .form-list .input-box:after {
327
+ display: table;
328
+ content: "";
329
+ }
330
+ .form-list .input-box:after {
331
+ clear: both;
332
+ }
333
+ .form-list .input-box .v-fix {
334
+ width: 49%;
335
+ float: left;
336
+ }
337
+ .form-list .input-box .v-fix:last-child {
338
+ float: right;
339
+ }
340
+ .form-list .cvv-what-is-this {
341
+ display: none;
342
+ }
343
+ .form-list label[for="ccsave_cc_cid"] + .input-box .v-fix {
344
+ width: 100%;
345
+ }
346
+ #discount-coupon-form {
347
+ padding-top: 1em;
348
+ }
349
+ #discount-coupon-form .sp-methods label {
350
+ display: block;
351
+ padding: 0;
352
+ }
353
+ span.price {
354
+ white-space: nowrap;
355
+ }
356
+ #onepage-checkout-shipping-method-additional-load {
357
+ margin-top: 1em;
358
+ }
359
+ .gift-messages h3 {
360
+ font-size: 1.2em;
361
+ line-height: 1.2em;
362
+ }
363
+ .gift-messages-form .inner-box > h4 {
364
+ display: none;
365
+ }
366
+ .gift-messages-form .product-img-box .number {
367
+ font-style: italic;
368
+ }
369
+ .gift-messages-form .product-name {
370
+ font-weight: bold;
371
+ padding: 5px 0 8px 0;
372
+ }
373
+ .gift-messages-form .inner-box p,
374
+ .gift-messages p.control {
375
+ margin: 5px 0;
376
+ }
377
+ .gift-messages-form .inner-box p > *,
378
+ .gift-messages p.control > * {
379
+ padding: 0;
380
+ margin: 0;
381
+ vertical-align: middle;
382
+ }
383
+ .gift-messages-form .inner-box p input[type="checkbox"],
384
+ .gift-messages p.control input[type="checkbox"] {
385
+ display: inline-block;
386
+ margin: 0 5px 0 0;
387
+ }
388
+ .gift-messages-form .inner-box p label,
389
+ .gift-messages p.control label {
390
+ font-weight: normal;
391
+ }
392
+ .customer-dob .dob-month,
393
+ .customer-dob .dob-day,
394
+ .customer-dob .dob-year {
395
+ width: 33%;
396
+ padding-right: 1%;
397
+ float: left;
398
+ }
399
+ .customer-dob .dob-month .validation-advice,
400
+ .customer-dob .dob-day .validation-advice,
401
+ .customer-dob .dob-year .validation-advice {
402
+ display: none;
403
+ }
404
+ .messages .error-msg {
405
+ color: #a94442;
406
+ background-color: #f2dede;
407
+ border-color: #ebccd1;
408
+ padding: 1em;
409
+ word-wrap: break-word;
410
+ }
411
+ .messages .success-msg {
412
+ color: #3c763d;
413
+ background-color: #dff0d8;
414
+ border-color: #d6e9c6;
415
+ padding: 1em;
416
+ word-wrap: break-word;
417
+ }
418
+ .messages + .opc .section .step-title {
419
+ border-top: 0;
420
+ }
421
+ #checkout-shipping-method-load {
422
+ min-height: 1em;
423
+ }
424
+ .jm-spinner {
425
+ margin: 1em 0;
426
+ }
427
+ .account-create .page-title h1,
428
+ .account-address .page-title h1,
429
+ .account-edit .page-title h1 {
430
+ display: none;
431
+ }
432
+ .account-create .success-msg,
433
+ .account-address .success-msg,
434
+ .account-edit .success-msg {
435
+ display: none;
436
+ }
437
+ .account-create form,
438
+ .account-address form,
439
+ .account-edit form {
440
+ padding: 0 1em;
441
+ }
442
+ .account-create h2.legend,
443
+ .account-address h2.legend,
444
+ .account-edit h2.legend {
445
+ color: #333;
446
+ font-size: 1.2em;
447
+ text-transform: uppercase;
448
+ line-height: 40px;
449
+ }
450
+ .account-create .buttons-set,
451
+ .account-address .buttons-set,
452
+ .account-edit .buttons-set {
453
+ padding: 1em 0;
454
+ }
455
+ .account-create .success-msg {
456
+ display: block;
457
+ }
458
+ .account-address .success-msg {
459
+ display: block;
460
+ }
461
+ #checkout-step-billing input[type="text"],
462
+ #checkout-step-shipping input[type="text"],
463
+ #checkout-step-billing input[type="password"] select,
464
+ #checkout-step-shipping input[type="password"] select,
465
+ #checkout-step-billing textarea,
466
+ #checkout-step-shipping textarea {
467
+ background: #fafafa;
468
+ }
469
+ /******** PostcodeNl_Api ********/
470
+ #billing\:postcode_input\:wrapper .field,
471
+ #shipping\:postcode_input\:wrapper .field {
472
+ width: 49%;
473
+ display: inline-block;
474
+ }
475
+ #billing\:postcode_input\:wrapper .field:last-child,
476
+ #shipping\:postcode_input\:wrapper .field:last-child {
477
+ float: right;
478
+ }
479
+ #billing\:postcode_input\:wrapper input.pcnl-input-text-half,
480
+ #shipping\:postcode_input\:wrapper input.pcnl-input-text-half {
481
+ width: 100%;
482
+ }
483
+ #billing\:postcode_input\:wrapper:before,
484
+ #shipping\:postcode_input\:wrapper:before,
485
+ #billing\:postcode_input\:wrapper:after,
486
+ #shipping\:postcode_input\:wrapper:after {
487
+ display: table;
488
+ content: "";
489
+ }
490
+ #billing\:postcode_input\:wrapper:after,
491
+ #shipping\:postcode_input\:wrapper:after {
492
+ clear: both;
493
+ }
494
+ /******** TIG_PostNL ********/
495
+ #opc_postnl_ce {
496
+ float: left;
497
+ margin-top: 1em;
498
+ width: 100%;
499
+ }
500
+ #opc_postnl_ce .field {
501
+ width: 100% !important;
502
+ }
503
+ #opc_postnl_ce .field .input-box {
504
+ width: 100%;
505
+ }
506
+ #opc_postnl_ce .field .input-box input,
507
+ #opc_postnl_ce .field .input-box select,
508
+ #opc_postnl_ce .field .input-box textarea {
509
+ width: 100%;
510
+ }
511
+ #opc_postnl_ce .postnl.validation-advice {
512
+ width: 100%;
513
+ }
514
+ #opc_postnl_ce .postnl-loading {
515
+ width: 100%;
516
+ text-align: center;
517
+ margin: 0.5em 0;
518
+ }
519
+ #s_method_postnl_tablerate,
520
+ #s_method_postnl_tablerate + label {
521
+ display: inline;
522
+ }
523
+ .postnl-container {
524
+ display: block;
525
+ background: transparent;
526
+ border-bottom: 0;
527
+ padding: 0;
528
+ margin: 0;
529
+ }
530
+ .postnl-container #postnl_delivery_options {
531
+ padding: 1em 0;
532
+ width: 100%;
533
+ }
534
+ .postnl-container .responsive-switch-wrapper {
535
+ margin-top: 0;
536
+ }
537
+ .postnl-container .responsive-switch-wrapper ul > li {
538
+ width: 49%;
539
+ padding: 0 0.5em;
540
+ }
541
+ .postnl-container .responsive-switch-wrapper a {
542
+ border-radius: 0 !important;
543
+ }
544
+ .postnl-container .option-list .responsive-tooltip {
545
+ padding: 0;
546
+ }
547
+ .postnl-container .option-list .location {
548
+ margin: 0;
549
+ }
550
+ .postnl-container .option-list .add-location {
551
+ height: auto;
552
+ border-top: 0;
553
+ }
554
+ .postnl-container .option-list.extras .content {
555
+ display: table;
556
+ }
557
+ .postnl-container .option-list.extras .content > input {
558
+ display: table-cell;
559
+ vertical-align: middle;
560
+ }
561
+ .postnl-container .option-list.extras .content input + label {
562
+ display: table-cell;
563
+ }
564
+ .postnl-container .col2-set .col-1,
565
+ .postnl-container .col2-set .col-2 {
566
+ max-width: 0;
567
+ }
568
+ .postnl-container .location-filters li {
569
+ height: auto;
570
+ padding: 0.5em 0;
571
+ }
572
+ .postnl-container .location-filters li strong {
573
+ font-size: 1.5em;
574
+ }
575
+ .postnl-container .location-filters .label {
576
+ color: #333;
577
+ text-align: left;
578
+ }
579
+ .postnl-container .location-details {
580
+ padding: 0;
581
+ }
582
+ .postnl-container .location-details .more-info {
583
+ margin: 0 1em 0 1em;
584
+ padding: 1em 0;
585
+ }
586
+ .postnl-container .location-details .content {
587
+ padding: 1em;
588
+ }
589
+ .postnl-container .location-details .content .location-info {
590
+ width: 100%;
591
+ }
592
+ .postnl-container .location-details .content .location-info .radio {
593
+ margin: 0;
594
+ }
595
+ .postnl-container .location-details .content .location-info .address {
596
+ width: 100%;
597
+ }
598
+ .postnl-container .location-details .content .location-info .distance {
599
+ right: 1em;
600
+ top: 0;
601
+ }
602
+ /******** Afterpay_Afterpay ********/
603
+ #payment-errors + .form-list .input-box input[type="radio"] {
604
+ margin: 0;
605
+ }
606
+ #payment-errors + .form-list .input-box label {
607
+ display: inline-block;
608
+ width: auto;
609
+ margin: 0;
610
+ padding-right: 1em;
611
+ }
612
+ #payment-errors + .form-list ul > li {
613
+ display: block;
614
+ }
615
+ #payment-errors + .form-list ul > li > label {
616
+ float: none !important;
617
+ }
618
+ #payment-errors + .form-list ul > li > .field {
619
+ margin-bottom: 1em;
620
+ }
621
+ #payment-errors + .form-list ul > li > .field:last-child {
622
+ margin-bottom: 0;
623
+ }
624
+ /******** Afterpay_Afterpay ********/
625
+ #dd_method_msp_klarna .form-list li br {
626
+ display: none;
627
+ }
628
+ #dd_method_msp_klarna .form-list li label {
629
+ margin-top: 1em;
630
+ display: block;
631
+ }
632
+ #dd_method_msp_klarna .form-list li label:first-child {
633
+ margin-top: 0;
634
+ }
635
+ #dd_method_msp_klarna .form-list li input {
636
+ width: 100%;
637
+ }
638
+ #dd_method_msp_klarna .form-list li input[type="radio"],
639
+ #dd_method_msp_klarna .form-list li input[type="checkbox"] {
640
+ width: auto;
641
+ }
642
+ /******** Afterpay_Afterpay ********/
643
+ .sp-methods dd .klarna_readme {
644
+ padding: 0 1em;
645
+ }
646
+ .sp-methods dd .payment_plan_wrapper {
647
+ margin: 0;
648
+ }
649
+ .sp-methods dd .payment_plan_wrapper .payment_plan li {
650
+ padding: 1em 0;
651
+ }
652
+ .sp-methods dd .payment_plan_wrapper .payment_plan .payment_plan_info_wrapper {
653
+ padding: 0;
654
+ }
655
+ .sp-methods dd .payment_plan_wrapper .payment_plan .payment_plan_info_wrapper dl {
656
+ float: left;
657
+ margin: 0;
658
+ }
659
+ .sp-methods dd .payment_plan_wrapper .payment_plan .payment_plan_info_wrapper dl dt,
660
+ .sp-methods dd .payment_plan_wrapper .payment_plan .payment_plan_info_wrapper dl dd {
661
+ border: 0;
662
+ padding: 0.5em;
663
+ }
664
+ .sp-methods dd .payment_plan_wrapper .payment_plan .payment_plan_info_wrapper dl dt {
665
+ width: 70%;
666
+ }
667
+ .sp-methods dd .payment_plan_wrapper .payment_plan .payment_plan_info_wrapper dl dt:last-child {
668
+ width: 100%;
669
+ }
670
+ .sp-methods dd .payment_plan_wrapper .payment_plan .payment_plan_info_wrapper dl dd {
671
+ width: 29%;
672
+ }
673
+ .sp-methods dd ul.klarna-input-box {
674
+ margin-top: 0;
675
+ }
676
+ .sp-methods dd ul.klarna-input-box > li {
677
+ padding: 0;
678
+ margin-bottom: 1em;
679
+ }
680
+ .sp-methods dd ul.klarna-input-box > li:last-child {
681
+ margin-bottom: 0;
682
+ }
683
+ .sp-methods dd ul.klarna-input-box > li > br {
684
+ display: none;
685
+ }
686
+ .sp-methods dd ul.klarna-input-box > li > input[type="text"] {
687
+ width: 100% !important;
688
+ }
689
+ .sp-methods dd ul.klarna-input-box > li > button.form-button {
690
+ width: 100% !important;
691
+ margin: 0.5em 0 0 !important;
692
+ }
693
+ .sp-methods dd ul.klarna-input-box > li .update-address-indicator {
694
+ text-align: center;
695
+ display: block;
696
+ }
697
+ .sp-methods dd ul.klarna-input-box > li .klarna_msg_txt li {
698
+ padding: 0;
699
+ }
700
+ .sp-methods dd ul.klarna-input-box .klarna_dob input[type="text"] {
701
+ width: 31% !important;
702
+ }
703
+ .sp-methods dd ul.klarna-input-box .gender-input-box input,
704
+ .sp-methods dd ul.klarna-input-box .gender-input-box label {
705
+ display: inline;
706
+ }
707
+ .sp-methods dd ul.klarna-input-box .klarna_notification {
708
+ background: #fcf8e3;
709
+ border: 1px solid #faebcc;
710
+ padding: 0.5em !important;
711
+ color: #8a6d3b;
712
+ margin: 0;
713
+ }
714
+ .sp-methods dd ul.klarna-input-box .klarna_notification:before {
715
+ background: none;
716
+ }
skin/frontend/base/default/japi/css/style.less CHANGED
@@ -541,6 +541,10 @@ span.price {
541
  }
542
  }
543
 
 
 
 
 
544
  .account-address .success-msg {
545
  display: block;
546
  }
@@ -772,4 +776,108 @@ span.price {
772
  }
773
  }
774
  }
775
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
541
  }
542
  }
543
 
544
+ .account-create .success-msg {
545
+ display: block;
546
+ }
547
+
548
  .account-address .success-msg {
549
  display: block;
550
  }
776
  }
777
  }
778
  }
779
+ }
780
+
781
+ /******** Afterpay_Afterpay ********/
782
+ .sp-methods dd {
783
+ .klarna_readme {
784
+ padding: 0 1em;
785
+ }
786
+
787
+ .payment_plan_wrapper {
788
+ margin: 0;
789
+
790
+ .payment_plan {
791
+ li {
792
+ padding: 1em 0;
793
+ }
794
+
795
+ .payment_plan_info_wrapper {
796
+ padding: 0;
797
+
798
+ dl {
799
+ float: left;
800
+ margin: 0;
801
+
802
+ dt, dd {
803
+ border: 0;
804
+ padding: 0.5em;
805
+ }
806
+
807
+ dt {
808
+ width: 70%;
809
+
810
+ &:last-child {
811
+ width: 100%;
812
+ }
813
+ }
814
+
815
+ dd {
816
+ width: 29%;
817
+ }
818
+ }
819
+ }
820
+ }
821
+ }
822
+
823
+ ul.klarna-input-box {
824
+ margin-top: 0;
825
+
826
+ > li {
827
+ padding: 0;
828
+ margin-bottom: 1em;
829
+
830
+ &:last-child {
831
+ margin-bottom: 0;
832
+ }
833
+
834
+ > br {
835
+ display: none;
836
+ }
837
+
838
+ > input[type="text"] {
839
+ width: 100% !important;
840
+ }
841
+
842
+ > button.form-button {
843
+ width: 100% !important;
844
+ margin: 0.5em 0 0 !important;
845
+ }
846
+
847
+ .update-address-indicator {
848
+ text-align: center;
849
+ display: block;
850
+ }
851
+
852
+ .klarna_msg_txt {
853
+ li {
854
+ padding: 0;
855
+ }
856
+ }
857
+ }
858
+
859
+ .klarna_dob {
860
+ input[type="text"] {
861
+ width: 31% !important;
862
+ }
863
+ }
864
+
865
+ .gender-input-box {
866
+ input, label {
867
+ display: inline;
868
+ }
869
+ }
870
+
871
+ .klarna_notification {
872
+ background: #fcf8e3;
873
+ border: 1px solid #faebcc;
874
+ padding: 0.5em !important;
875
+ color: #8a6d3b;
876
+ margin: 0;
877
+
878
+ &:before {
879
+ background: none;
880
+ }
881
+ }
882
+ }
883
+ }