Version Notes
1. package release
Download this release
Release Info
| Developer | James Ball |
| Extension | Gateway3D_PersonaliseIt |
| Version | 1.6.0.0 |
| Comparing to | |
| See all releases | |
Version 1.6.0.0
- app/code/local/Gateway3D/PersonaliseIt/Block/Adminhtml/Catalog/Product/Edit/Tab/Options.php +31 -0
- app/code/local/Gateway3D/PersonaliseIt/Block/Adminhtml/Catalog/Product/Edit/Tab/Options/Option.php +28 -0
- app/code/local/Gateway3D/PersonaliseIt/Block/Product/View/Options.php +19 -0
- app/code/local/Gateway3D/PersonaliseIt/Helper/Data.php +17 -0
- app/code/local/Gateway3D/PersonaliseIt/Helper/MessageEvent.php +42 -0
- app/code/local/Gateway3D/PersonaliseIt/Helper/ProductCustomOptions.php +98 -0
- app/code/local/Gateway3D/PersonaliseIt/Model/Catalog/Product/Option.php +43 -0
- app/code/local/Gateway3D/PersonaliseIt/Model/Catalog/Product/Option/Type/Hidden.php +12 -0
- app/code/local/Gateway3D/PersonaliseIt/Model/Cron/Abstract.php +89 -0
- app/code/local/Gateway3D/PersonaliseIt/Model/Cron/DelayedPrintJob.php +144 -0
- app/code/local/Gateway3D/PersonaliseIt/Model/Cron/Sl.php +623 -0
- app/code/local/Gateway3D/PersonaliseIt/Model/ImportOptions.php +193 -0
- app/code/local/Gateway3D/PersonaliseIt/Model/Product/Abstract.php +64 -0
- app/code/local/Gateway3D/PersonaliseIt/Model/Product/Callback.php +389 -0
- app/code/local/Gateway3D/PersonaliseIt/Model/Product/Epa.php +260 -0
- app/code/local/Gateway3D/PersonaliseIt/Model/Product/Rating.php +70 -0
- app/code/local/Gateway3D/PersonaliseIt/Model/Resource/Eav/Mysql4/Setup.php +279 -0
- app/code/local/Gateway3D/PersonaliseIt/Model/Source/Orderstatus.php +19 -0
- app/code/local/Gateway3D/PersonaliseIt/Model/Status/Callback.php +91 -0
- app/code/local/Gateway3D/PersonaliseIt/controllers/CppController.php +23 -0
- app/code/local/Gateway3D/PersonaliseIt/controllers/ProductController.php +157 -0
- app/code/local/Gateway3D/PersonaliseIt/controllers/ProductsController.php +21 -0
- app/code/local/Gateway3D/PersonaliseIt/controllers/StatusController.php +52 -0
- app/code/local/Gateway3D/PersonaliseIt/etc/config.xml +165 -0
- app/code/local/Gateway3D/PersonaliseIt/etc/system.xml +130 -0
- app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-install-1.0.0.php +5 -0
- app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-upgrade-1.0.0-1.1.0.php +122 -0
- app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-upgrade-1.1.1-1.1.2.php +20 -0
- app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-upgrade-1.1.7.1-1.2.0.0.php +5 -0
- app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-upgrade-1.2.0.3-1.3.0.0.php +26 -0
- app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-upgrade-1.3.5.4-1.3.6.0.php +26 -0
- app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-upgrade-1.3.6.0-1.4.0.0.php +49 -0
- app/design/adminhtml/default/default/template/personaliseit/catalog/product/edit/options.phtml +60 -0
- app/design/adminhtml/default/default/template/personaliseit/item_column_renderer_name.phtml +30 -0
- app/design/adminhtml/default/default/template/personaliseit/option.phtml +370 -0
- app/design/frontend/base/default/layout/personaliseit.xml +71 -0
- app/design/frontend/base/default/template/personaliseit/cart/item/default.phtml +299 -0
- app/design/frontend/base/default/template/personaliseit/product/callback.phtml +15 -0
- app/design/frontend/base/default/template/personaliseit/product/view/addtocart.phtml +42 -0
- app/design/frontend/base/default/template/personaliseit/product/view/media.phtml +218 -0
- app/design/frontend/base/default/template/personaliseit/products/index.phtml +48 -0
- app/etc/modules/Gateway3D_PersonaliseIt.xml +19 -0
- js/personalise-it/delayed-preview.js +87 -0
- lib/Gateway3D/PersonaliseIt/Service/Api/Abstract.php +179 -0
- lib/Gateway3D/PersonaliseIt/Service/Api/P1/Product.php +38 -0
- lib/Gateway3D/PersonaliseIt/Service/Api/P1/Sample.php +38 -0
- lib/Gateway3D/PersonaliseIt/Service/Api/P2/PrintJob.php +51 -0
- lib/Gateway3D/PersonaliseIt/Service/Api/Sl/Order.php +42 -0
- lib/Gateway3D/PersonaliseIt/Service/Dto/Abstract.php +17 -0
- lib/Gateway3D/PersonaliseIt/Service/Dto/Interface.php +15 -0
- lib/Gateway3D/PersonaliseIt/Service/Dto/P1/Product.php +26 -0
- lib/Gateway3D/PersonaliseIt/Service/Dto/P1/Sample.php +25 -0
- lib/Gateway3D/PersonaliseIt/Service/Dto/P2/PrintJob.php +27 -0
- lib/Gateway3D/PersonaliseIt/Service/Dto/Sl/Order.php +79 -0
- lib/Gateway3D/PersonaliseIt/Service/Dto/Sl/Order/Item.php +45 -0
- package.xml +26 -0
app/code/local/Gateway3D/PersonaliseIt/Block/Adminhtml/Catalog/Product/Edit/Tab/Options.php
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Gateway3D_PersonaliseIt_Block_Adminhtml_Catalog_Product_Edit_Tab_Options
|
| 4 |
+
extends Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Options
|
| 5 |
+
{
|
| 6 |
+
public function __construct()
|
| 7 |
+
{
|
| 8 |
+
parent::__construct();
|
| 9 |
+
|
| 10 |
+
$this->setTemplate('personaliseit/catalog/product/edit/options.phtml');
|
| 11 |
+
}
|
| 12 |
+
|
| 13 |
+
protected function _prepareLayout()
|
| 14 |
+
{
|
| 15 |
+
$this->setChild('import_from_cpp_button',
|
| 16 |
+
$this->getLayout()->createBlock('adminhtml/widget_button')
|
| 17 |
+
->setData(array(
|
| 18 |
+
'label' => Mage::helper('catalog')->__('Import From Gateway CPP'),
|
| 19 |
+
'class' => 'add',
|
| 20 |
+
'id' => 'import_from_cpp_button'
|
| 21 |
+
))
|
| 22 |
+
);
|
| 23 |
+
|
| 24 |
+
return parent::_prepareLayout();
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
public function getImportFromCppButtonHtml()
|
| 28 |
+
{
|
| 29 |
+
return $this->getChildHtml('import_from_cpp_button');
|
| 30 |
+
}
|
| 31 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Block/Adminhtml/Catalog/Product/Edit/Tab/Options/Option.php
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Block_Adminhtml_Catalog_Product_Edit_Tab_Options_Option
|
| 11 |
+
extends Mage_Adminhtml_Block_Catalog_Product_Edit_Tab_Options_Option
|
| 12 |
+
{
|
| 13 |
+
public function __construct()
|
| 14 |
+
{
|
| 15 |
+
parent::__construct();
|
| 16 |
+
$this->setTemplate('personaliseit/option.phtml');
|
| 17 |
+
}
|
| 18 |
+
|
| 19 |
+
public function getImportFromCppButtonId()
|
| 20 |
+
{
|
| 21 |
+
$buttonId = $this
|
| 22 |
+
->getLayout()
|
| 23 |
+
->getBlock('admin.product.options')
|
| 24 |
+
->getChild('import_from_cpp_button')->getId();
|
| 25 |
+
|
| 26 |
+
return $buttonId;
|
| 27 |
+
}
|
| 28 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Block/Product/View/Options.php
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Block_Product_View_Options
|
| 11 |
+
extends Mage_Catalog_Block_Product_View_Options
|
| 12 |
+
{
|
| 13 |
+
public function getOptionHtml(Mage_Catalog_Model_Product_Option $option)
|
| 14 |
+
{
|
| 15 |
+
return $option->getType() == Gateway3D_PersonaliseIt_Model_Catalog_Product_Option::OPTION_TYPE_HIDDEN
|
| 16 |
+
? ""
|
| 17 |
+
: parent::getOptionHtml($option);
|
| 18 |
+
}
|
| 19 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Helper/Data.php
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2013 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Helper_Data
|
| 11 |
+
extends Mage_Core_Helper_Data
|
| 12 |
+
{
|
| 13 |
+
public function reduceUrlSlashes($url)
|
| 14 |
+
{
|
| 15 |
+
return preg_replace('/(?<!:)\/\//', '/', $url);
|
| 16 |
+
}
|
| 17 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Helper/MessageEvent.php
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Helper_MessageEvent
|
| 11 |
+
{
|
| 12 |
+
private $_id;
|
| 13 |
+
|
| 14 |
+
public function getId()
|
| 15 |
+
{
|
| 16 |
+
if(!$this->_id)
|
| 17 |
+
{
|
| 18 |
+
$this->_id = md5(uniqid());
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
return $this->_id;
|
| 22 |
+
}
|
| 23 |
+
|
| 24 |
+
public function getOrigin($uri)
|
| 25 |
+
{
|
| 26 |
+
$parsed = parse_url($uri);
|
| 27 |
+
|
| 28 |
+
if(!isset($parsed['host']))
|
| 29 |
+
{
|
| 30 |
+
return "";
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
if(!isset($parsed['scheme']))
|
| 34 |
+
{
|
| 35 |
+
$parsed['scheme'] = Mage::app()->getStore()->isCurrentlySecure()
|
| 36 |
+
? 'https'
|
| 37 |
+
: 'http';
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
return "{$parsed['scheme']}://{$parsed['host']}";
|
| 41 |
+
}
|
| 42 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Helper/ProductCustomOptions.php
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Helper_ProductCustomOptions
|
| 11 |
+
{
|
| 12 |
+
public static function ensureProductHasCustomOptions(Mage_Catalog_Model_Product $product, $required = array())
|
| 13 |
+
{
|
| 14 |
+
// Compatability hack for older Magentos
|
| 15 |
+
if(!class_exists('Mage_Catalog_Model_Product_Option_Api'))
|
| 16 |
+
{
|
| 17 |
+
return;
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
// determine if the product has the required custom options
|
| 21 |
+
$options = $product->getOptions();
|
| 22 |
+
$coSkus = array_map(function($o) { return $o->getSku(); }, $options);
|
| 23 |
+
$coTitles = array_map(function($o) { return $o->getTitle(); }, $options);
|
| 24 |
+
$coSkusAndTitles = $coSkus + $coTitles;
|
| 25 |
+
|
| 26 |
+
$missing = array_unique(array_diff($required, $coSkusAndTitles));
|
| 27 |
+
|
| 28 |
+
// create missing options
|
| 29 |
+
foreach($missing as $sku)
|
| 30 |
+
{
|
| 31 |
+
$optionData = array(
|
| 32 |
+
'title' => $sku,
|
| 33 |
+
'type' => Gateway3D_PersonaliseIt_Model_Catalog_Product_Option::OPTION_TYPE_HIDDEN,
|
| 34 |
+
'is_require' => false,
|
| 35 |
+
'sort_order' => 1,
|
| 36 |
+
'additional_fields' => array(array(
|
| 37 |
+
'price' => 0,
|
| 38 |
+
'price_type' => 'fixed',
|
| 39 |
+
'sku' => $sku
|
| 40 |
+
))
|
| 41 |
+
);
|
| 42 |
+
|
| 43 |
+
self::addOption($product, $optionData);
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
// reload
|
| 47 |
+
$product->load($product->getId());
|
| 48 |
+
|
| 49 |
+
return array_values(array_filter($product->getOptions(), function($o) use ($required)
|
| 50 |
+
{
|
| 51 |
+
return in_array($o->getSku(), $required);
|
| 52 |
+
}));
|
| 53 |
+
}
|
| 54 |
+
|
| 55 |
+
static function addOption(Mage_Catalog_Model_Product $product, array $optionData)
|
| 56 |
+
{
|
| 57 |
+
// HACK:
|
| 58 |
+
//
|
| 59 |
+
// Magento seems to only let you change product custom options
|
| 60 |
+
// if it thinks that we are in the backend.
|
| 61 |
+
//
|
| 62 |
+
// See Mage_Catalog_Model_Product::getOrigData
|
| 63 |
+
|
| 64 |
+
$id = Mage::app()->getStore()->getId();
|
| 65 |
+
Mage::app()->getStore()->setId(Mage_Core_Model_App::ADMIN_STORE_ID);
|
| 66 |
+
|
| 67 |
+
$m = new Mage_Catalog_Model_Product_Option_Api;
|
| 68 |
+
$m->add($product->getId(), $optionData);
|
| 69 |
+
|
| 70 |
+
Mage::app()->getStore()->setId($id);
|
| 71 |
+
|
| 72 |
+
// HACK:
|
| 73 |
+
//
|
| 74 |
+
// Magento versions older than 1.8 seem to require us to
|
| 75 |
+
// explictly reset the product options array otherwise
|
| 76 |
+
// options will be added multiple times the next time we
|
| 77 |
+
// try to add one.
|
| 78 |
+
//
|
| 79 |
+
// Presumably 1.8 and above call this line somewhere down
|
| 80 |
+
// in the call chain of Mage_Catalog_Model_Product_Option_Api.
|
| 81 |
+
|
| 82 |
+
$product->getOptionInstance()
|
| 83 |
+
->setProduct($product)
|
| 84 |
+
->setOptions(array());
|
| 85 |
+
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
static function update(Mage_Catalog_Model_Product_Option $option, array $data)
|
| 89 |
+
{
|
| 90 |
+
$id = Mage::app()->getStore()->getId();
|
| 91 |
+
Mage::app()->getStore()->setId(Mage_Core_Model_App::ADMIN_STORE_ID);
|
| 92 |
+
|
| 93 |
+
$m = new Mage_Catalog_Model_Product_Option_Api;
|
| 94 |
+
$m->update($option->getId(), $data);
|
| 95 |
+
|
| 96 |
+
Mage::app()->getStore()->setId($id);
|
| 97 |
+
}
|
| 98 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Model/Catalog/Product/Option.php
ADDED
|
@@ -0,0 +1,43 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Model_Catalog_Product_Option
|
| 11 |
+
extends Mage_Catalog_Model_Product_Option
|
| 12 |
+
{
|
| 13 |
+
const OPTION_GROUP_HIDDEN = 'hidden';
|
| 14 |
+
const OPTION_TYPE_HIDDEN = 'hidden';
|
| 15 |
+
|
| 16 |
+
public function getGroupByType($type = null)
|
| 17 |
+
{
|
| 18 |
+
if (is_null($type)) {
|
| 19 |
+
$type = $this->getType();
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
if($type === self::OPTION_TYPE_HIDDEN)
|
| 23 |
+
{
|
| 24 |
+
return self::OPTION_GROUP_HIDDEN;
|
| 25 |
+
}
|
| 26 |
+
else
|
| 27 |
+
{
|
| 28 |
+
return parent::getGroupByType($type);
|
| 29 |
+
}
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
public function groupFactory($type)
|
| 33 |
+
{
|
| 34 |
+
if($type === self::OPTION_TYPE_HIDDEN)
|
| 35 |
+
{
|
| 36 |
+
return Mage::getModel('personaliseit/catalog_product_option_type_hidden');
|
| 37 |
+
}
|
| 38 |
+
else
|
| 39 |
+
{
|
| 40 |
+
return parent::groupFactory($type);
|
| 41 |
+
}
|
| 42 |
+
}
|
| 43 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Model/Catalog/Product/Option/Type/Hidden.php
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Model_Catalog_Product_Option_Type_Hidden
|
| 11 |
+
extends Mage_Catalog_Model_Product_Option_Type_Text
|
| 12 |
+
{ }
|
app/code/local/Gateway3D/PersonaliseIt/Model/Cron/Abstract.php
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
abstract class Gateway3D_PersonaliseIt_Model_Cron_Abstract
|
| 4 |
+
{
|
| 5 |
+
const PRINT_JOB_ID_CUSTOM_OPTION_SKU = "printJobId";
|
| 6 |
+
const EXTERNAL_URL_CUSTOM_OPTION_SKU = "external_url";
|
| 7 |
+
|
| 8 |
+
protected static function _getOrderCollection()
|
| 9 |
+
{
|
| 10 |
+
return Mage::getResourceModel('sales/order_collection')
|
| 11 |
+
->addAttributeToSelect('*')
|
| 12 |
+
|
| 13 |
+
// Include orders that have been completed because
|
| 14 |
+
// orders with 100% discount codes go straight to
|
| 15 |
+
// complete and bypass processing.
|
| 16 |
+
->addFieldToFilter('status', array(
|
| 17 |
+
array('eq' => Mage_Sales_Model_Order::STATE_PROCESSING),
|
| 18 |
+
array('eq' => Mage_Sales_Model_Order::STATE_COMPLETE))
|
| 19 |
+
)
|
| 20 |
+
|
| 21 |
+
->addFieldToFilter('sent', 0)
|
| 22 |
+
->addOrder('created_at', 'desc');
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
protected static function _getItemPrintJobId($storeId, Mage_Sales_Model_Order_Item $item)
|
| 26 |
+
{
|
| 27 |
+
return (int)self::_getItemCustomOption($storeId, $item, self::PRINT_JOB_ID_CUSTOM_OPTION_SKU);
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
protected static function _getItemExternalUrl($storeId, Mage_Sales_Model_Order_Item $item)
|
| 31 |
+
{
|
| 32 |
+
return self::_getItemCustomOption($storeId, $item, self::EXTERNAL_URL_CUSTOM_OPTION_SKU);
|
| 33 |
+
}
|
| 34 |
+
|
| 35 |
+
protected static function _getItemCustomOption($storeId, Mage_Sales_Model_Order_Item $item, $sku)
|
| 36 |
+
{
|
| 37 |
+
$options = self::_getItemProduct($storeId, $item)->getOptions();
|
| 38 |
+
|
| 39 |
+
foreach($options as $option)
|
| 40 |
+
{
|
| 41 |
+
if($option->getSku() == $sku)
|
| 42 |
+
{
|
| 43 |
+
$id = $option->getId();
|
| 44 |
+
}
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
if(isset($id) && $id)
|
| 48 |
+
{
|
| 49 |
+
$options = $item->getProductOptions();
|
| 50 |
+
$options = $options['options'];
|
| 51 |
+
|
| 52 |
+
foreach($options as $option)
|
| 53 |
+
{
|
| 54 |
+
if($option['option_id'] == $id)
|
| 55 |
+
{
|
| 56 |
+
return $option['value'];
|
| 57 |
+
}
|
| 58 |
+
}
|
| 59 |
+
}
|
| 60 |
+
|
| 61 |
+
return null;
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
protected static function _log($message)
|
| 65 |
+
{
|
| 66 |
+
$message = "SL :: {$message}";
|
| 67 |
+
|
| 68 |
+
if(getenv('LOG_TO_STDOUT'))
|
| 69 |
+
{
|
| 70 |
+
echo "{$message}\n";
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
Mage::log($message);
|
| 74 |
+
}
|
| 75 |
+
|
| 76 |
+
/**
|
| 77 |
+
* Load a product.
|
| 78 |
+
*
|
| 79 |
+
* @param int $storeId
|
| 80 |
+
* @param Mage_Sales_Model_Order_Item $item
|
| 81 |
+
* @return Mage_Catalog_Model_Product
|
| 82 |
+
*/
|
| 83 |
+
protected static function _getItemProduct($storeId, Mage_Sales_Model_Order_Item $item)
|
| 84 |
+
{
|
| 85 |
+
return Mage::getModel('catalog/product')
|
| 86 |
+
->setStoreId($storeId)
|
| 87 |
+
->load($item->getProductId());
|
| 88 |
+
}
|
| 89 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Model/Cron/DelayedPrintJob.php
ADDED
|
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
/**
|
| 11 |
+
* Cron class that is responsible for creating print jobs for any delayed preview
|
| 12 |
+
* products that have been purchased but don't yet have a print job ID.
|
| 13 |
+
*/
|
| 14 |
+
class Gateway3D_PersonaliseIt_Model_Cron_DelayedPrintJob
|
| 15 |
+
extends Gateway3D_PersonaliseIt_Model_Cron_Abstract
|
| 16 |
+
{
|
| 17 |
+
const PRINT_JOB_ID_CUSTOM_OPTION_SKU = "printJobId";
|
| 18 |
+
|
| 19 |
+
/**
|
| 20 |
+
* @var Gateway3D_PersonaliseIt_Service_Api2_PrintJob
|
| 21 |
+
*/
|
| 22 |
+
private $_api;
|
| 23 |
+
|
| 24 |
+
public function start()
|
| 25 |
+
{
|
| 26 |
+
self::_log("Personalise-iT Delayed Print Job Cron Started");
|
| 27 |
+
|
| 28 |
+
$this->_initApi();
|
| 29 |
+
$this->_push();
|
| 30 |
+
|
| 31 |
+
self::_log("Finished");
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
private function _initApi()
|
| 35 |
+
{
|
| 36 |
+
$path = Mage::getStoreConfig("general/personaliseit-delayed-preview/api_path");
|
| 37 |
+
|
| 38 |
+
if($path)
|
| 39 |
+
{
|
| 40 |
+
$this->_api = new Gateway3D_PersonaliseIt_Service_Api_P2_PrintJob($path);
|
| 41 |
+
}
|
| 42 |
+
else
|
| 43 |
+
{
|
| 44 |
+
Mage::throwException('No delayed preview API path set');
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
private function _push()
|
| 49 |
+
{
|
| 50 |
+
$collection = self::_getOrderCollection();
|
| 51 |
+
|
| 52 |
+
foreach($collection as $order)
|
| 53 |
+
{
|
| 54 |
+
$this->_pushOrder($order);
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
if(!count($collection))
|
| 58 |
+
{
|
| 59 |
+
self::_log("Nothing to do");
|
| 60 |
+
}
|
| 61 |
+
}
|
| 62 |
+
|
| 63 |
+
private function _pushOrder(Mage_Sales_Model_Order $order)
|
| 64 |
+
{
|
| 65 |
+
$items = $order->getAllVisibleItems();
|
| 66 |
+
|
| 67 |
+
foreach($items as $item)
|
| 68 |
+
{
|
| 69 |
+
$storeId = $order->getStoreId();
|
| 70 |
+
$product = self::_getItemProduct($storeId, $item);
|
| 71 |
+
|
| 72 |
+
if($product->personaliseit_dp_enabled && !self::_getItemPrintJobId($storeId, $item))
|
| 73 |
+
{
|
| 74 |
+
self::_log("Attemping to create print job for {$order->getIncrementId()}/{$item->getId()}");
|
| 75 |
+
|
| 76 |
+
$printJobId = $this->_pushPrintJob($item, $product);
|
| 77 |
+
|
| 78 |
+
$required = array(self::PRINT_JOB_ID_CUSTOM_OPTION_SKU);
|
| 79 |
+
|
| 80 |
+
$requiredOptions = Gateway3D_PersonaliseIt_Helper_ProductCustomOptions::ensureProductHasCustomOptions($product, $required);
|
| 81 |
+
$printJobOption = $requiredOptions[0];
|
| 82 |
+
|
| 83 |
+
$itemOptions = $item->getProductOptions();
|
| 84 |
+
$itemOptions['options'][] = array(
|
| 85 |
+
'label' => $printJobOption->getTitle(),
|
| 86 |
+
'value' => $printJobId,
|
| 87 |
+
'option_id' => $printJobOption->getId(),
|
| 88 |
+
);
|
| 89 |
+
|
| 90 |
+
$item->setProductOptions($itemOptions);
|
| 91 |
+
$item->save();
|
| 92 |
+
|
| 93 |
+
self::_log("PJ: {$printJobId}");
|
| 94 |
+
}
|
| 95 |
+
}
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
private function _pushPrintJob(Mage_Sales_Model_Order_Item $item, Mage_Catalog_Model_Product $product)
|
| 99 |
+
{
|
| 100 |
+
$printJob = $this->_createPrintJob($item, $product);
|
| 101 |
+
|
| 102 |
+
$this->_api->create($printJob, $options = array(
|
| 103 |
+
Gateway3D_PersonaliseIt_Service_Api_P2_PrintJob::OPTION_IMPLICIT => true
|
| 104 |
+
));
|
| 105 |
+
|
| 106 |
+
return $printJob->print_job_id;
|
| 107 |
+
}
|
| 108 |
+
|
| 109 |
+
private function _createPrintJob(Mage_Sales_Model_Order_Item $item, Mage_Catalog_Model_Product $product)
|
| 110 |
+
{
|
| 111 |
+
$printJob = new Gateway3D_PersonaliseIt_Service_Dto_P2_PrintJob;
|
| 112 |
+
|
| 113 |
+
$printJob->product_id = $product->personaliseit_dp_pid;
|
| 114 |
+
$printJob->print_job_company_id = $product->personaliseit_company_ref_id;
|
| 115 |
+
$printJob->items = array();
|
| 116 |
+
|
| 117 |
+
// Create text items
|
| 118 |
+
$options = $product->getOptions();
|
| 119 |
+
$itemOptions = $item->getProductOptionByCode('options');
|
| 120 |
+
|
| 121 |
+
foreach($options as $option)
|
| 122 |
+
{
|
| 123 |
+
$matches = array();
|
| 124 |
+
|
| 125 |
+
if(preg_match('/^userText([0-9]*)$/', $option->getSku(), $matches) && count($matches) == 2)
|
| 126 |
+
{
|
| 127 |
+
foreach($itemOptions as $itemOption)
|
| 128 |
+
{
|
| 129 |
+
if($itemOption['option_id'] == $option->getId())
|
| 130 |
+
{
|
| 131 |
+
$printJob->items[] = array(
|
| 132 |
+
'area_id' => $matches[1],
|
| 133 |
+
|
| 134 |
+
'item_type' => 'TEXT_AREA',
|
| 135 |
+
'resources' => $itemOption['value']
|
| 136 |
+
);
|
| 137 |
+
}
|
| 138 |
+
}
|
| 139 |
+
}
|
| 140 |
+
}
|
| 141 |
+
|
| 142 |
+
return $printJob;
|
| 143 |
+
}
|
| 144 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Model/Cron/Sl.php
ADDED
|
@@ -0,0 +1,623 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
/**
|
| 11 |
+
* Cron class that is responsible for inserting orders into the Gateway3D
|
| 12 |
+
* Order-iT system using the Supplier Link API.
|
| 13 |
+
*/
|
| 14 |
+
class Gateway3D_PersonaliseIt_Model_Cron_Sl
|
| 15 |
+
extends Gateway3D_PersonaliseIt_Model_Cron_Abstract
|
| 16 |
+
{
|
| 17 |
+
/**
|
| 18 |
+
* @var Gateway3D_PersonaliseIt_Service_Api_Sl_Order
|
| 19 |
+
*/
|
| 20 |
+
private $_api;
|
| 21 |
+
|
| 22 |
+
public function start()
|
| 23 |
+
{
|
| 24 |
+
self::_log("Personalise-iT SL Cron Started");
|
| 25 |
+
|
| 26 |
+
$this->_checkOtherSupplierLinks();
|
| 27 |
+
$this->_initApi();
|
| 28 |
+
|
| 29 |
+
$this->_push();
|
| 30 |
+
|
| 31 |
+
if(Mage::getStoreConfig("general/personaliseit-sl/enable_order_status_polling"))
|
| 32 |
+
{
|
| 33 |
+
$this->_pull();
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
self::_log("Finished");
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
/**
|
| 40 |
+
* Pushes all possible Magento orders via the Supplier Link API.
|
| 41 |
+
*/
|
| 42 |
+
private function _push()
|
| 43 |
+
{
|
| 44 |
+
$collection = self::_getOrderCollection();
|
| 45 |
+
|
| 46 |
+
foreach($collection as $order)
|
| 47 |
+
{
|
| 48 |
+
$this->_pushMageOrder($order);
|
| 49 |
+
}
|
| 50 |
+
|
| 51 |
+
if(!count($collection))
|
| 52 |
+
{
|
| 53 |
+
self::_log("Nothing to push");
|
| 54 |
+
}
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
/**
|
| 58 |
+
* Pulls statuses from the Supplier Link API for all possible Magento orders.
|
| 59 |
+
*/
|
| 60 |
+
private function _pull()
|
| 61 |
+
{
|
| 62 |
+
$collection = Mage::getResourceModel('sales/order_collection')
|
| 63 |
+
->addAttributeToSelect('*')
|
| 64 |
+
->addFieldToFilter('shipped', 0)
|
| 65 |
+
->addFieldToFilter('sent', 1)
|
| 66 |
+
->addOrder('created_at', 'desc');
|
| 67 |
+
|
| 68 |
+
foreach($collection as $order)
|
| 69 |
+
{
|
| 70 |
+
$this->_pullMageOrder($order);
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
if(!count($collection))
|
| 74 |
+
{
|
| 75 |
+
self::_log("Nothing to pull");
|
| 76 |
+
}
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
/**
|
| 80 |
+
* Push a single Magento order through the Supplier Link API.
|
| 81 |
+
*
|
| 82 |
+
* @param Mage_Sales_Model_Order $order
|
| 83 |
+
*/
|
| 84 |
+
private function _pushMageOrder(Mage_Sales_Model_Order $order)
|
| 85 |
+
{
|
| 86 |
+
self::_log("Pushing {$order->getIncrementId()}");
|
| 87 |
+
|
| 88 |
+
$items = $order->getAllVisibleItems();
|
| 89 |
+
|
| 90 |
+
// Check that any delayed preview items have had a print job generated
|
| 91 |
+
if(!$this->_doAllDelayedPreviewItemsHavePrintJobIds($order, $items))
|
| 92 |
+
{
|
| 93 |
+
$message = "Order has a delayed preview item that does not yet have a print job ID";
|
| 94 |
+
|
| 95 |
+
self::_log($message);
|
| 96 |
+
$order->addStatusHistoryComment("Personalise-iT: {$message}");
|
| 97 |
+
$order->save();
|
| 98 |
+
|
| 99 |
+
return;
|
| 100 |
+
}
|
| 101 |
+
|
| 102 |
+
//
|
| 103 |
+
$groupedItems = $this->_createSlOrderItems($order->getStoreId(), $items);
|
| 104 |
+
|
| 105 |
+
if(!count($groupedItems))
|
| 106 |
+
{
|
| 107 |
+
self::_log("All items have already been sent");
|
| 108 |
+
}
|
| 109 |
+
|
| 110 |
+
$slIds = array();
|
| 111 |
+
|
| 112 |
+
// Now we create an order for each company ref ID grouping.
|
| 113 |
+
foreach($groupedItems as $guid => $itemPairs)
|
| 114 |
+
{
|
| 115 |
+
// Extract all SL order items from the item pairs.
|
| 116 |
+
$_items = array();
|
| 117 |
+
|
| 118 |
+
foreach($itemPairs as $itemPair)
|
| 119 |
+
{
|
| 120 |
+
$_items[] = $itemPair[1];
|
| 121 |
+
}
|
| 122 |
+
|
| 123 |
+
// Create an SL order
|
| 124 |
+
$_order = $this->_createSlOrder($order, $guid, $_items);
|
| 125 |
+
|
| 126 |
+
try
|
| 127 |
+
{
|
| 128 |
+
$this->_api->create($_order);
|
| 129 |
+
|
| 130 |
+
// Update Magento order items
|
| 131 |
+
foreach($itemPairs as $itemPair)
|
| 132 |
+
{
|
| 133 |
+
$itemPair[0]->sl_order_id = $_order->id;
|
| 134 |
+
$itemPair[0]->save();
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
$order->addStatusHistoryComment("Personalise-iT Order Ref: {$_order->ref} ({$guid})");
|
| 138 |
+
$order->save();
|
| 139 |
+
|
| 140 |
+
self::_log("Pushed {$order->getIncrementId()} -> {$guid}, id:{$_order->id}, ref:{$_order->ref}");
|
| 141 |
+
}
|
| 142 |
+
catch(Exception $e)
|
| 143 |
+
{
|
| 144 |
+
$message = "Personalise-iT Error: {$e->getMessage()} ({$guid})";
|
| 145 |
+
|
| 146 |
+
$order->addStatusHistoryComment($message);
|
| 147 |
+
|
| 148 |
+
// don't retry the order later
|
| 149 |
+
$order->sent = 1;
|
| 150 |
+
|
| 151 |
+
$order->save();
|
| 152 |
+
|
| 153 |
+
self::_log($message);
|
| 154 |
+
|
| 155 |
+
// bail out
|
| 156 |
+
return;
|
| 157 |
+
|
| 158 |
+
}
|
| 159 |
+
}
|
| 160 |
+
|
| 161 |
+
// Update the magento order
|
| 162 |
+
$order->sent = 1;
|
| 163 |
+
$order->save();
|
| 164 |
+
}
|
| 165 |
+
|
| 166 |
+
/**
|
| 167 |
+
* Determines whether an order's delayed preview items ALL have print job IDs.
|
| 168 |
+
*
|
| 169 |
+
* @param Mage_Sales_Model_Order $order
|
| 170 |
+
* @param array $items
|
| 171 |
+
* @return boolean True if all delayed preview items have print job IDs.
|
| 172 |
+
*/
|
| 173 |
+
private function _doAllDelayedPreviewItemsHavePrintJobIds(Mage_Sales_Model_Order $order, array $items)
|
| 174 |
+
{
|
| 175 |
+
foreach($items as $item)
|
| 176 |
+
{
|
| 177 |
+
$storeId = $order->getStoreId();
|
| 178 |
+
$product = self::_getItemProduct($storeId, $item);
|
| 179 |
+
|
| 180 |
+
if($product->personaliseit_dp_enabled && !self::_getItemPrintJobId($storeId, $item))
|
| 181 |
+
{
|
| 182 |
+
return false;
|
| 183 |
+
}
|
| 184 |
+
}
|
| 185 |
+
|
| 186 |
+
return true;
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
|
| 190 |
+
/**
|
| 191 |
+
* Creates a collection of SL order items from their Magento order item
|
| 192 |
+
* counterparts, grouped by company.
|
| 193 |
+
*
|
| 194 |
+
* @param Mage_Sales_Model_Order_Item[] $items
|
| 195 |
+
* @return Gateway3D_PersonaliseIt_Model_Sl_Data_Order_Item[]
|
| 196 |
+
*/
|
| 197 |
+
private function _createSlOrderItems($storeId, array $items)
|
| 198 |
+
{
|
| 199 |
+
$groupedItems = array();
|
| 200 |
+
|
| 201 |
+
foreach($items as $item)
|
| 202 |
+
{
|
| 203 |
+
$product = self::_getItemProduct($storeId, $item);
|
| 204 |
+
|
| 205 |
+
// We only send the item if:
|
| 206 |
+
//
|
| 207 |
+
// 1) The item has a print job ID custom option, or,
|
| 208 |
+
// 2) The item's product has a POD sample ref set.
|
| 209 |
+
// 3) The item is has plain stock set to 'Yes'
|
| 210 |
+
//
|
| 211 |
+
// AND
|
| 212 |
+
//
|
| 213 |
+
// 4) The item has not already been sent
|
| 214 |
+
|
| 215 |
+
$printJobId = self::_getItemPrintJobId($storeId, $item);
|
| 216 |
+
$externalUrl = self::_getItemExternalUrl($storeId, $item);
|
| 217 |
+
|
| 218 |
+
$sampleRef = $product->personaliseit_pod_ref;
|
| 219 |
+
$isPlain = $product->personaliseit_is_plain;
|
| 220 |
+
|
| 221 |
+
if(($printJobId || $externalUrl || $sampleRef || $isPlain) && !$item->sl_order_id)
|
| 222 |
+
{
|
| 223 |
+
// We also need to group the item by the product's company ref ID.
|
| 224 |
+
$guid = $product->personaliseit_company_ref_id;
|
| 225 |
+
|
| 226 |
+
if(!isset($groupedItems[$guid]))
|
| 227 |
+
{
|
| 228 |
+
$groupedItems[$guid] = array();
|
| 229 |
+
}
|
| 230 |
+
|
| 231 |
+
$groupedItems[$guid][] = array($item, $this->_createSlItem($storeId, $item, $printJobId, $externalUrl, $sampleRef));
|
| 232 |
+
}
|
| 233 |
+
}
|
| 234 |
+
|
| 235 |
+
return $groupedItems;
|
| 236 |
+
}
|
| 237 |
+
|
| 238 |
+
/**
|
| 239 |
+
* Creates a single SL order item from a Magento order item.
|
| 240 |
+
*
|
| 241 |
+
* @param Mage_Sales_Model_Order_Item $item
|
| 242 |
+
* @param string $printJobId
|
| 243 |
+
* @param string $externalUrl
|
| 244 |
+
* @param string $sampleRef
|
| 245 |
+
* @return \Gateway3D_PersonaliseIt_Model_Sl_Data_Order_Item
|
| 246 |
+
*/
|
| 247 |
+
private function _createSlItem($storeId, Mage_Sales_Model_Order_Item $item, $printJobId, $externalUrl, $sampleRef)
|
| 248 |
+
{
|
| 249 |
+
$product = self::_getItemProduct($storeId, $item);
|
| 250 |
+
|
| 251 |
+
$_item = new Gateway3D_PersonaliseIt_Service_Dto_Sl_Order_Item;
|
| 252 |
+
|
| 253 |
+
if($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE)
|
| 254 |
+
{
|
| 255 |
+
$_item->description = $item->getName();
|
| 256 |
+
$_item->sku = $item->getSku();
|
| 257 |
+
}
|
| 258 |
+
else
|
| 259 |
+
{
|
| 260 |
+
$_item->description = $product->getName();
|
| 261 |
+
$_item->sku = $product->getSku();
|
| 262 |
+
}
|
| 263 |
+
|
| 264 |
+
$_item->quantity = $item->getQtyOrdered();
|
| 265 |
+
$_item->print_job_id = $printJobId;
|
| 266 |
+
$_item->print_on_demand_ref = $sampleRef;
|
| 267 |
+
$_item->external_ref = "{$item->getOrder()->getIncrementId()}-{$item->getId()}";
|
| 268 |
+
$_item->unit_sale_price = $item->getOriginalPrice();
|
| 269 |
+
|
| 270 |
+
//
|
| 271 |
+
$options = array_merge(
|
| 272 |
+
$item->getProductOptionByCode('attributes_info') ?: array(),
|
| 273 |
+
$item->getProductOptionByCode('options'));
|
| 274 |
+
|
| 275 |
+
if($options)
|
| 276 |
+
{
|
| 277 |
+
foreach($options as $option)
|
| 278 |
+
{
|
| 279 |
+
$name = strtolower($option['label']);
|
| 280 |
+
|
| 281 |
+
if($name == 'color' || $name == 'colour' || $name == 'size')
|
| 282 |
+
{
|
| 283 |
+
$name = $name == 'color' ? 'colour' : $name;
|
| 284 |
+
|
| 285 |
+
$_item->{$name} = $option['value'];
|
| 286 |
+
}
|
| 287 |
+
}
|
| 288 |
+
}
|
| 289 |
+
|
| 290 |
+
//
|
| 291 |
+
$attributes = $this->_getInterestingItemAttributes($storeId, $item, $product);
|
| 292 |
+
|
| 293 |
+
foreach($attributes as $name => $value)
|
| 294 |
+
{
|
| 295 |
+
$_item->{$name} = $value;
|
| 296 |
+
}
|
| 297 |
+
|
| 298 |
+
//
|
| 299 |
+
if($printJobId)
|
| 300 |
+
{
|
| 301 |
+
$_item->type = Gateway3D_PersonaliseIt_Service_Dto_Sl_Order_Item::TYPE_PRINT_JOB;
|
| 302 |
+
}
|
| 303 |
+
else if($externalUrl)
|
| 304 |
+
{
|
| 305 |
+
$_item->type = Gateway3D_PersonaliseIt_Service_Dto_Sl_Order_Item::TYPE_EXTERNAL_URL;
|
| 306 |
+
$_item->external_url = $externalUrl;
|
| 307 |
+
$_item->external_thumbnail_url = $externalUrl;
|
| 308 |
+
}
|
| 309 |
+
else if($sampleRef)
|
| 310 |
+
{
|
| 311 |
+
$_item->type = Gateway3D_PersonaliseIt_Service_Dto_Sl_Order_Item::TYPE_PRINT_ON_DEMAND;
|
| 312 |
+
}
|
| 313 |
+
else
|
| 314 |
+
{
|
| 315 |
+
$_item->type = Gateway3D_PersonaliseIt_Service_Dto_Sl_Order_Item::TYPE_PLAIN;
|
| 316 |
+
|
| 317 |
+
list($_item->external_url, $_item->external_thumbnail_url) = $this->_resolveItemImages($item, $product);
|
| 318 |
+
}
|
| 319 |
+
|
| 320 |
+
return $_item;
|
| 321 |
+
}
|
| 322 |
+
|
| 323 |
+
/**
|
| 324 |
+
* Gets any attributes from the item that we're interested in (i.e. colour and size).
|
| 325 |
+
*
|
| 326 |
+
* @param int $storeId
|
| 327 |
+
* @param Mage_Sales_Model_Order_Item $item
|
| 328 |
+
* @param Mage_Catalog_Model_Product $product
|
| 329 |
+
* @return array
|
| 330 |
+
*/
|
| 331 |
+
private function _getInterestingItemAttributes($storeId, Mage_Sales_Model_Order_Item $item, Mage_Catalog_Model_Product $product)
|
| 332 |
+
{
|
| 333 |
+
// For configurable products, we need to get the attributes from the
|
| 334 |
+
// relavent simple.
|
| 335 |
+
if($product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE)
|
| 336 |
+
{
|
| 337 |
+
$children = $item->getChildrenItems();
|
| 338 |
+
|
| 339 |
+
if(count($children))
|
| 340 |
+
{
|
| 341 |
+
$product = self::_getItemProduct($storeId, $children[0]);
|
| 342 |
+
}
|
| 343 |
+
}
|
| 344 |
+
|
| 345 |
+
$attributes = $product->getAttributes();
|
| 346 |
+
$flatAttributes = array();
|
| 347 |
+
|
| 348 |
+
foreach($attributes as $attribute)
|
| 349 |
+
{
|
| 350 |
+
$name = $attribute->getName();
|
| 351 |
+
|
| 352 |
+
if($name == 'color' || $name == 'colour' || $name == 'size')
|
| 353 |
+
{
|
| 354 |
+
// Force UK spellings
|
| 355 |
+
$name = $name == 'color' ? 'colour' : $name;
|
| 356 |
+
|
| 357 |
+
$flatAttributes[$name] = $attribute->getFrontend()->getValue($product);
|
| 358 |
+
|
| 359 |
+
// Magento will return "No" if an attribute exists on a product but is not
|
| 360 |
+
// set. Therefore lets try and filter them out
|
| 361 |
+
if($flatAttributes[$name] == Mage::helper('personaliseit')->__('No'))
|
| 362 |
+
{
|
| 363 |
+
unset($flatAttributes[$name]);
|
| 364 |
+
}
|
| 365 |
+
}
|
| 366 |
+
}
|
| 367 |
+
|
| 368 |
+
return $flatAttributes;
|
| 369 |
+
}
|
| 370 |
+
|
| 371 |
+
/**
|
| 372 |
+
* Resolves the images to use for a plain stock item.
|
| 373 |
+
*
|
| 374 |
+
* @param Mage_Sales_Model_Order_Item $item
|
| 375 |
+
* @param Mage_Catalog_Model_Product $product
|
| 376 |
+
* @return array($imageUrl, $thumbnailUrl)
|
| 377 |
+
*/
|
| 378 |
+
private function _resolveItemImages(Mage_Sales_Model_Order_Item $item, Mage_Catalog_Model_Product $product)
|
| 379 |
+
{
|
| 380 |
+
$isConfigurable = $product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_CONFIGURABLE;
|
| 381 |
+
|
| 382 |
+
$configKey = Mage_Checkout_Block_Cart_Item_Renderer_Configurable::CONFIGURABLE_PRODUCT_IMAGE;
|
| 383 |
+
$useParentImage = Mage::getStoreConfig($configKey) == Mage_Checkout_Block_Cart_Item_Renderer_Configurable::USE_PARENT_IMAGE;
|
| 384 |
+
|
| 385 |
+
$children = $item->getChildrenItems();
|
| 386 |
+
|
| 387 |
+
if($isConfigurable && !$useParentImage && count($children))
|
| 388 |
+
{
|
| 389 |
+
$child = $children[0]->getProduct();
|
| 390 |
+
$thumbnail = $child->getData('thumbnail');
|
| 391 |
+
|
| 392 |
+
if($thumbnail && $thumbnail != 'no_selection')
|
| 393 |
+
{
|
| 394 |
+
$product = $child;
|
| 395 |
+
}
|
| 396 |
+
}
|
| 397 |
+
|
| 398 |
+
return array(
|
| 399 |
+
$product->getImageUrl(),
|
| 400 |
+
$product->getThumbnailUrl(100, 100)
|
| 401 |
+
);
|
| 402 |
+
}
|
| 403 |
+
|
| 404 |
+
/**
|
| 405 |
+
* Creates a single SL order from a Magento order.
|
| 406 |
+
*
|
| 407 |
+
* @param Mage_Sales_Model_Order $order
|
| 408 |
+
* @param string $companyRefId
|
| 409 |
+
* @param Gateway3D_PersonaliseIt_Model_Sl_Data_Order_Item[] $items
|
| 410 |
+
* @return \Gateway3D_PersonaliseIt_Model_Sl_Data_Order
|
| 411 |
+
*/
|
| 412 |
+
private function _createSlOrder(Mage_Sales_Model_Order $order, $companyRefId, array $items)
|
| 413 |
+
{
|
| 414 |
+
$shippingAddress = $order->getShippingAddress();
|
| 415 |
+
$billingAddress = $order->getBillingAddress();
|
| 416 |
+
|
| 417 |
+
$store = Mage::app()->getStore($order->getStoreId())->getWebsite()->getName();
|
| 418 |
+
|
| 419 |
+
//
|
| 420 |
+
$_order = new Gateway3D_PersonaliseIt_Service_Dto_Sl_Order;
|
| 421 |
+
|
| 422 |
+
$_order->additional_info = php_uname('n') . " :: " . $store;
|
| 423 |
+
|
| 424 |
+
$this->_setAddressFields($_order, $billingAddress, "billing_address");
|
| 425 |
+
|
| 426 |
+
$_order->billing_country = trim($billingAddress->getCountry());
|
| 427 |
+
$_order->billing_postcode = trim($billingAddress->getPostcode());
|
| 428 |
+
|
| 429 |
+
$this->_setAddressFields($_order, $shippingAddress, "shipping_address");
|
| 430 |
+
|
| 431 |
+
$_order->shipping_country = trim($shippingAddress->getCountry());
|
| 432 |
+
$_order->shipping_country_code = $shippingAddress->getCountryModel()->getIso2Code();
|
| 433 |
+
$_order->shipping_postcode = trim($shippingAddress->getPostcode());
|
| 434 |
+
|
| 435 |
+
list($carrier, $method) = explode(' - ', $order->getShippingDescription());
|
| 436 |
+
|
| 437 |
+
$_order->shipping_carrier = $carrier;
|
| 438 |
+
$_order->shipping_method = $method;
|
| 439 |
+
|
| 440 |
+
$_order->customer_email = $order->getCustomerEmail();
|
| 441 |
+
$_order->customer_name = $shippingAddress->getName();
|
| 442 |
+
|
| 443 |
+
$_order->external_ref = $order->getIncrementId();
|
| 444 |
+
|
| 445 |
+
$order->getCreatedAtDate()->setOptions(array('format_type' => 'php'));
|
| 446 |
+
$_order->sale_datetime = $order->getCreatedAtDate()->toString("Y-m-d H:i:s");
|
| 447 |
+
|
| 448 |
+
$_order->purchase_complete = 1;
|
| 449 |
+
$_order->payment_type = $order->getPayment()->getMethodInstance()->getTitle();
|
| 450 |
+
|
| 451 |
+
$_order->company_ref_id = $companyRefId;
|
| 452 |
+
|
| 453 |
+
$_order->status = Mage::getStoreConfig("general/personaliseit-sl/default_order_status");
|
| 454 |
+
|
| 455 |
+
if(!Mage::getStoreConfig("general/personaliseit-sl/enable_order_status_polling"))
|
| 456 |
+
{
|
| 457 |
+
$_order->status_callback_url = $this->_createSlOrderStatusCallbackUrl($order);
|
| 458 |
+
}
|
| 459 |
+
|
| 460 |
+
$_order->items = $items;
|
| 461 |
+
|
| 462 |
+
return $_order;
|
| 463 |
+
}
|
| 464 |
+
|
| 465 |
+
private function _setAddressFields(
|
| 466 |
+
Gateway3D_PersonaliseIt_Service_Dto_Sl_Order $order,
|
| 467 |
+
Mage_Customer_Model_Address_Abstract $address,
|
| 468 |
+
$fieldPrefix)
|
| 469 |
+
{
|
| 470 |
+
$lines = $address->getStreet();
|
| 471 |
+
array_unshift($lines, $address->getCompany());
|
| 472 |
+
array_push($lines, $address->getCity());
|
| 473 |
+
array_push($lines, $address->getRegion());
|
| 474 |
+
|
| 475 |
+
for($i = 0; $i < count($lines) && $i < 5; $i++)
|
| 476 |
+
{
|
| 477 |
+
if($lines[$i])
|
| 478 |
+
{
|
| 479 |
+
$_i = $i + 1;
|
| 480 |
+
$key = "{$fieldPrefix}_{$_i}";
|
| 481 |
+
|
| 482 |
+
$order->{$key} = trim($lines[$i]);
|
| 483 |
+
}
|
| 484 |
+
}
|
| 485 |
+
}
|
| 486 |
+
|
| 487 |
+
private function _createSlOrderStatusCallbackUrl(Mage_Sales_Model_Order $order)
|
| 488 |
+
{
|
| 489 |
+
$ref = sha1(uniqid(time(), true));
|
| 490 |
+
|
| 491 |
+
$order->status_callback_ref = $ref;
|
| 492 |
+
|
| 493 |
+
$url = Mage::getUrl('personaliseit/status/callback/', array(
|
| 494 |
+
'_store' => $order->getStoreId(),
|
| 495 |
+
'ref' => $ref
|
| 496 |
+
));
|
| 497 |
+
|
| 498 |
+
return $url;
|
| 499 |
+
}
|
| 500 |
+
|
| 501 |
+
/**
|
| 502 |
+
*
|
| 503 |
+
*
|
| 504 |
+
* @param Mage_Sales_Model_Order $order
|
| 505 |
+
*/
|
| 506 |
+
private function _pullMageOrder(Mage_Sales_Model_Order $order)
|
| 507 |
+
{
|
| 508 |
+
self::_log("Pulling {$order->getIncrementId()}");
|
| 509 |
+
|
| 510 |
+
// First we need to get all of the SL order ids that might have been
|
| 511 |
+
// associated with this Magento order.
|
| 512 |
+
$items = $order->getAllVisibleItems();
|
| 513 |
+
|
| 514 |
+
$slOrderIds = array();
|
| 515 |
+
|
| 516 |
+
foreach($items as $item)
|
| 517 |
+
{
|
| 518 |
+
if($item->sl_order_id)
|
| 519 |
+
{
|
| 520 |
+
$slOrderIds[] = (int)$item->sl_order_id;
|
| 521 |
+
}
|
| 522 |
+
else
|
| 523 |
+
{
|
| 524 |
+
// Bail out early because the order has items that have not been
|
| 525 |
+
// sent via the SL API thus we can't accurately say whether the
|
| 526 |
+
// order should be shipped.
|
| 527 |
+
|
| 528 |
+
return;
|
| 529 |
+
}
|
| 530 |
+
}
|
| 531 |
+
|
| 532 |
+
$slOrderIds = array_unique($slOrderIds);
|
| 533 |
+
|
| 534 |
+
//
|
| 535 |
+
$dispatched = 0;
|
| 536 |
+
$dispatchedStatuses = array(
|
| 537 |
+
Gateway3D_PersonaliseIt_Service_Dto_Sl_Order::STATUS_DISPATCHED,
|
| 538 |
+
Gateway3D_PersonaliseIt_Service_Dto_Sl_Order::STATUS_SUPPLIER_DISPATCHED_NOTIFIED
|
| 539 |
+
);
|
| 540 |
+
|
| 541 |
+
// We nw retrieve the status of each SL order. If they have all been
|
| 542 |
+
// dispatched then we can ship the Mage order.
|
| 543 |
+
foreach($slOrderIds as $id)
|
| 544 |
+
{
|
| 545 |
+
$_order = new Gateway3D_PersonaliseIt_Service_Dto_Sl_Order;
|
| 546 |
+
$_order->id = $id;
|
| 547 |
+
|
| 548 |
+
$this->_api->retrieve($_order);
|
| 549 |
+
|
| 550 |
+
if(in_array($_order->status, $dispatchedStatuses))
|
| 551 |
+
{
|
| 552 |
+
$dispatched++;
|
| 553 |
+
}
|
| 554 |
+
}
|
| 555 |
+
|
| 556 |
+
//
|
| 557 |
+
if($dispatched == count($items))
|
| 558 |
+
{
|
| 559 |
+
$this->_ship($order);
|
| 560 |
+
}
|
| 561 |
+
}
|
| 562 |
+
|
| 563 |
+
private function _ship(Mage_Sales_Model_Order $order)
|
| 564 |
+
{
|
| 565 |
+
if(!$order->canShip())
|
| 566 |
+
{
|
| 567 |
+
self::_log("Order {$order->getIncrementId()} cannot be shipped");
|
| 568 |
+
}
|
| 569 |
+
else
|
| 570 |
+
{
|
| 571 |
+
$qtys = array();
|
| 572 |
+
|
| 573 |
+
foreach($order->getAllItems() as $item)
|
| 574 |
+
{
|
| 575 |
+
$qtys[$item->getId()] = $item->getQtyToShip();
|
| 576 |
+
}
|
| 577 |
+
|
| 578 |
+
$shipment = Mage::getModel('sales/service_order', $order)->prepareShipment($qtys);
|
| 579 |
+
|
| 580 |
+
$shipment->register();
|
| 581 |
+
|
| 582 |
+
$shipment->setEmailSent(true);
|
| 583 |
+
|
| 584 |
+
$shipment->getOrder()->setCustomerNoteNotify(true);
|
| 585 |
+
|
| 586 |
+
$shipment->getOrder()->setIsInProcess(true);
|
| 587 |
+
|
| 588 |
+
$transactionSave = Mage::getModel('core/resource_transaction')
|
| 589 |
+
->addObject($shipment)
|
| 590 |
+
->addObject($shipment->getOrder())
|
| 591 |
+
->save();
|
| 592 |
+
|
| 593 |
+
$shipment->sendEmail(true, '');
|
| 594 |
+
|
| 595 |
+
$order->shipped = true;
|
| 596 |
+
$order->save();
|
| 597 |
+
}
|
| 598 |
+
}
|
| 599 |
+
|
| 600 |
+
/**/
|
| 601 |
+
private function _checkOtherSupplierLinks()
|
| 602 |
+
{
|
| 603 |
+
if(@class_exists('Gateway3D_SupplierLink_Model_Observer') || @class_exists('BNetCentric_SupplierLink_Model_Observer'))
|
| 604 |
+
{
|
| 605 |
+
throw new Exception('Please disable and remove older versions of Supplier Link');
|
| 606 |
+
}
|
| 607 |
+
}
|
| 608 |
+
|
| 609 |
+
private function _initApi()
|
| 610 |
+
{
|
| 611 |
+
$path = Mage::getStoreConfig("general/personaliseit-sl/api_path");
|
| 612 |
+
$key = Mage::getStoreConfig("general/personaliseit-sl/api_key");
|
| 613 |
+
|
| 614 |
+
if($path && $key)
|
| 615 |
+
{
|
| 616 |
+
$this->_api = new Gateway3D_PersonaliseIt_Service_Api_Sl_Order($path, $key);
|
| 617 |
+
}
|
| 618 |
+
else
|
| 619 |
+
{
|
| 620 |
+
throw new Exception('No SL API key / path set');
|
| 621 |
+
}
|
| 622 |
+
}
|
| 623 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Model/ImportOptions.php
ADDED
|
@@ -0,0 +1,193 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Gateway3D_PersonaliseIt_Model_ImportOptions
|
| 4 |
+
extends Mage_Core_Helper_Abstract
|
| 5 |
+
{
|
| 6 |
+
const TYPE_SAMPLE = "su";
|
| 7 |
+
const TYPE_PRODUCT = "p";
|
| 8 |
+
|
| 9 |
+
private $_product = null;
|
| 10 |
+
|
| 11 |
+
private $_existingProductOptionSkus = array();
|
| 12 |
+
private $_existingProductOptionTitles = array();
|
| 13 |
+
|
| 14 |
+
private $_cppProduct = null;
|
| 15 |
+
|
| 16 |
+
private $_type = "";
|
| 17 |
+
private $_id = 0;
|
| 18 |
+
|
| 19 |
+
private $_optionData = array();
|
| 20 |
+
|
| 21 |
+
public function __construct(Mage_Catalog_Model_Product $product)
|
| 22 |
+
{
|
| 23 |
+
$this->_product = $product;
|
| 24 |
+
|
| 25 |
+
foreach($product->getOptions() as $option)
|
| 26 |
+
{
|
| 27 |
+
if($option->getSku())
|
| 28 |
+
{
|
| 29 |
+
$this->_existingProductOptionSkus[] = $option->getSku();
|
| 30 |
+
}
|
| 31 |
+
else
|
| 32 |
+
{
|
| 33 |
+
$values = $option->getValues();
|
| 34 |
+
|
| 35 |
+
foreach($option->getValues() as $value)
|
| 36 |
+
{
|
| 37 |
+
$this->_existingProductOptionSkus[] = $value->getSku();
|
| 38 |
+
}
|
| 39 |
+
}
|
| 40 |
+
}
|
| 41 |
+
}
|
| 42 |
+
|
| 43 |
+
public function import()
|
| 44 |
+
{
|
| 45 |
+
$this->_parseIframeUrls();
|
| 46 |
+
|
| 47 |
+
if($this->_type == self::TYPE_SAMPLE)
|
| 48 |
+
{
|
| 49 |
+
$this->_loadSample();
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
$this->_loadProduct();
|
| 53 |
+
$this->_determineOptions();
|
| 54 |
+
|
| 55 |
+
$m = new Mage_Catalog_Model_Product_Option_Api;
|
| 56 |
+
|
| 57 |
+
foreach($this->_optionData as $optionData)
|
| 58 |
+
{
|
| 59 |
+
$skuExists = false;
|
| 60 |
+
|
| 61 |
+
foreach($optionData['additional_fields'] as $value)
|
| 62 |
+
{
|
| 63 |
+
$skuExists |= in_array($value['sku'], $this->_existingProductOptionSkus);
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
if(!$skuExists)
|
| 67 |
+
{
|
| 68 |
+
$m->add($this->_product->getId(), $optionData);
|
| 69 |
+
}
|
| 70 |
+
}
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
private function _determineOptions()
|
| 74 |
+
{
|
| 75 |
+
$this->_determineOptionsFromCppTextAreas();
|
| 76 |
+
$this->_determineOptionsFromCppAttributes();
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
private function _determineOptionsFromCppTextAreas()
|
| 80 |
+
{
|
| 81 |
+
foreach($this->_cppProduct->text_areas as $area)
|
| 82 |
+
{
|
| 83 |
+
$this->_optionData[] = array(
|
| 84 |
+
'title' => @$area['name'] ?: '',
|
| 85 |
+
'type' => Gateway3D_PersonaliseIt_Model_Catalog_Product_Option::OPTION_TYPE_FIELD,
|
| 86 |
+
'is_require' => false,
|
| 87 |
+
'sort_order' => 1,
|
| 88 |
+
|
| 89 |
+
'additional_fields' => array(array(
|
| 90 |
+
'price' => @$area['price'] ?: 0.00,
|
| 91 |
+
'price_type' => 'fixed',
|
| 92 |
+
'sku' => "userText{$area['template_text_area_id']}",
|
| 93 |
+
))
|
| 94 |
+
);
|
| 95 |
+
}
|
| 96 |
+
}
|
| 97 |
+
|
| 98 |
+
private function _determineOptionsFromCppAttributes()
|
| 99 |
+
{
|
| 100 |
+
// First pass - organise attributes into groups.
|
| 101 |
+
$groups = array();
|
| 102 |
+
|
| 103 |
+
foreach($this->_cppProduct->product_attributes as $attribute)
|
| 104 |
+
{
|
| 105 |
+
$key = $attribute['group_name'];
|
| 106 |
+
|
| 107 |
+
if(!isset($groups[$key]))
|
| 108 |
+
{
|
| 109 |
+
$groups[$key] = array();
|
| 110 |
+
}
|
| 111 |
+
|
| 112 |
+
$groups[$key][] = $attribute;
|
| 113 |
+
}
|
| 114 |
+
|
| 115 |
+
// Second pass - marshal to Mage optionData structures
|
| 116 |
+
foreach($groups as $name => $attributes)
|
| 117 |
+
{
|
| 118 |
+
$optionData = array(
|
| 119 |
+
'title' => $name,
|
| 120 |
+
'type' => Gateway3D_PersonaliseIt_Model_Catalog_Product_Option::OPTION_TYPE_DROP_DOWN,
|
| 121 |
+
'is_require' => false,
|
| 122 |
+
'sort_order' => 1,
|
| 123 |
+
|
| 124 |
+
'additional_fields' => array()
|
| 125 |
+
);
|
| 126 |
+
|
| 127 |
+
foreach($attributes as $attribute)
|
| 128 |
+
{
|
| 129 |
+
$optionData['additional_fields'][] = array(
|
| 130 |
+
'title' => @$attribute['attribute_name'] ?: '',
|
| 131 |
+
'price' => @$attribute['price'] ?: 0.00,
|
| 132 |
+
'price_type' => 'fixed',
|
| 133 |
+
'sku' => @$attribute['sku'] ?: "userAttribute{$attribute['attribute_id']}"
|
| 134 |
+
);
|
| 135 |
+
}
|
| 136 |
+
|
| 137 |
+
$this->_optionData[] = $optionData;
|
| 138 |
+
}
|
| 139 |
+
}
|
| 140 |
+
|
| 141 |
+
private function _doesAnOptionAlreadyExistForCppAttributeGroup($attribute)
|
| 142 |
+
{
|
| 143 |
+
|
| 144 |
+
}
|
| 145 |
+
|
| 146 |
+
private function _loadSample()
|
| 147 |
+
{
|
| 148 |
+
$url = Mage::getStoreConfig("general/personaliseit-cpp/api_path") . "/p/1/sample";
|
| 149 |
+
$url = Mage::helper('personaliseit')->reduceUrlSlashes($url);
|
| 150 |
+
|
| 151 |
+
$service = new Gateway3D_PersonaliseIt_Service_Api_P1_Sample($url);
|
| 152 |
+
$sample = $service->retrieve($this->_id);
|
| 153 |
+
|
| 154 |
+
$this->_id = $sample->product_id;
|
| 155 |
+
$this->_type = self::TYPE_PRODUCT;
|
| 156 |
+
}
|
| 157 |
+
|
| 158 |
+
private function _loadProduct()
|
| 159 |
+
{
|
| 160 |
+
$url = Mage::getStoreConfig("general/personaliseit-cpp/api_path") . "/p/1/product";
|
| 161 |
+
$url = Mage::helper('personaliseit')->reduceUrlSlashes($url);
|
| 162 |
+
|
| 163 |
+
$service = new Gateway3D_PersonaliseIt_Service_Api_P1_Product($url);
|
| 164 |
+
$this->_cppProduct = $service->retrieve($this->_id);
|
| 165 |
+
}
|
| 166 |
+
|
| 167 |
+
private function _parseIframeUrls()
|
| 168 |
+
{
|
| 169 |
+
$fields = array(
|
| 170 |
+
'easypromo3d_url',
|
| 171 |
+
'personaliseit_iframe_url',
|
| 172 |
+
'personaliseit_m_iframe_url',
|
| 173 |
+
'personaliseit_fl_iframe_url',
|
| 174 |
+
'personaliseit_gl_iframe_url'
|
| 175 |
+
);
|
| 176 |
+
|
| 177 |
+
foreach($fields as &$field)
|
| 178 |
+
{
|
| 179 |
+
if($this->_product->{$field})
|
| 180 |
+
{
|
| 181 |
+
$count = preg_match("/(su|p)=([0-9]*)/", $this->_product->{$field}, $matches);
|
| 182 |
+
|
| 183 |
+
if($count && count($matches) >= 3)
|
| 184 |
+
{
|
| 185 |
+
$this->_type = $matches[1];
|
| 186 |
+
$this->_id = $matches[2];
|
| 187 |
+
|
| 188 |
+
return;
|
| 189 |
+
}
|
| 190 |
+
}
|
| 191 |
+
}
|
| 192 |
+
}
|
| 193 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Model/Product/Abstract.php
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
abstract class Gateway3D_PersonaliseIt_Model_Product_Abstract
|
| 11 |
+
{
|
| 12 |
+
protected $_product;
|
| 13 |
+
|
| 14 |
+
/**
|
| 15 |
+
* @return Mage_Catalog_Model_Product
|
| 16 |
+
*/
|
| 17 |
+
public function getProduct()
|
| 18 |
+
{
|
| 19 |
+
return $this->_product;
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
public function load($id = null, $sku = null)
|
| 23 |
+
{
|
| 24 |
+
if($id)
|
| 25 |
+
{
|
| 26 |
+
$this->loadById($id);
|
| 27 |
+
}
|
| 28 |
+
else if($sku)
|
| 29 |
+
{
|
| 30 |
+
$this->loadBySku($sku);
|
| 31 |
+
}
|
| 32 |
+
else
|
| 33 |
+
{
|
| 34 |
+
throw new Exception('No ID or SKU specified');
|
| 35 |
+
}
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
public function loadById($id)
|
| 39 |
+
{
|
| 40 |
+
$product = Mage::getModel('catalog/product');
|
| 41 |
+
|
| 42 |
+
$product->load($id);
|
| 43 |
+
|
| 44 |
+
if(!$product->getId())
|
| 45 |
+
{
|
| 46 |
+
throw new Exception("Invalid ID {$id}");
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
$this->_product = $product;
|
| 50 |
+
}
|
| 51 |
+
|
| 52 |
+
public function loadBySku($sku)
|
| 53 |
+
{
|
| 54 |
+
$id = Mage::getModel('catalog/product')
|
| 55 |
+
->getIdBySku($sku);
|
| 56 |
+
|
| 57 |
+
if(!$id)
|
| 58 |
+
{
|
| 59 |
+
throw new Exception("Invalid SKU {$sku}");
|
| 60 |
+
}
|
| 61 |
+
|
| 62 |
+
$this->loadById($id);
|
| 63 |
+
}
|
| 64 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Model/Product/Callback.php
ADDED
|
@@ -0,0 +1,389 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
/**
|
| 11 |
+
* Class for processing a Personalise-iT app add to cart callback.
|
| 12 |
+
*/
|
| 13 |
+
class Gateway3D_PersonaliseIt_Model_Product_Callback
|
| 14 |
+
extends Gateway3D_PersonaliseIt_Model_Product_Abstract
|
| 15 |
+
{
|
| 16 |
+
private $_data;
|
| 17 |
+
|
| 18 |
+
public function __construct(array $data)
|
| 19 |
+
{
|
| 20 |
+
$this->_data = $data;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
public function process()
|
| 24 |
+
{
|
| 25 |
+
if(isset($this->_data['dynamic_pricing']) && is_array($this->_data['dynamic_pricing']))
|
| 26 |
+
{
|
| 27 |
+
$this->_marshalDynamicPricing();
|
| 28 |
+
}
|
| 29 |
+
|
| 30 |
+
$this->_processCart();
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
/**
|
| 34 |
+
* Marshal the dynamic_pricing structure into a form that can be understood
|
| 35 |
+
* by _processCart
|
| 36 |
+
*
|
| 37 |
+
* @return void
|
| 38 |
+
*/
|
| 39 |
+
private function _marshalDynamicPricing()
|
| 40 |
+
{
|
| 41 |
+
$dynamicPricing = $this->_data['dynamic_pricing'];
|
| 42 |
+
|
| 43 |
+
if(!isset($dynamicPricing['attributes']) || !is_array($dynamicPricing['attributes']))
|
| 44 |
+
{
|
| 45 |
+
$dynamicPricing['attributes'] = array();
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
$this->_marshalDpQuantityElementToAttribute(
|
| 49 |
+
$dynamicPricing, 'image_colours', 'Number of Image Colours');
|
| 50 |
+
|
| 51 |
+
$this->_marshalDpQuantityElementToAttribute(
|
| 52 |
+
$dynamicPricing, 'print_areas', 'Number of Print Areas');
|
| 53 |
+
|
| 54 |
+
if(isset($dynamicPricing['attributes']))
|
| 55 |
+
{
|
| 56 |
+
$this->_marshalDynamicPricingToDropdowns($dynamicPricing['attributes']);
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
if(isset($dynamicPricing['colours']))
|
| 60 |
+
{
|
| 61 |
+
$this->_marshalDynamicPricingToMultiples('Colours', $dynamicPricing['colours']);
|
| 62 |
+
}
|
| 63 |
+
|
| 64 |
+
if(isset($dynamicPricing['effects']))
|
| 65 |
+
{
|
| 66 |
+
$this->_marshalDynamicPricingToMultiples('Effects', $dynamicPricing['effects']);
|
| 67 |
+
}
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
private function _marshalDpQuantityElementToAttribute(array &$dp, $element, $name)
|
| 71 |
+
{
|
| 72 |
+
if(isset($dp[$element]) && is_array($dp[$element]))
|
| 73 |
+
{
|
| 74 |
+
$dp['attributes'][] = array(
|
| 75 |
+
'name' => $name,
|
| 76 |
+
'value' => $dp[$element]['quantity'],
|
| 77 |
+
'cost' => $dp[$element]['cost']
|
| 78 |
+
);
|
| 79 |
+
}
|
| 80 |
+
}
|
| 81 |
+
|
| 82 |
+
/**
|
| 83 |
+
* Ensure that a valid "multiple" custom option exists with the given title
|
| 84 |
+
* and with the given values.
|
| 85 |
+
*
|
| 86 |
+
* This method also adds to _data['options'] for later processing.
|
| 87 |
+
*
|
| 88 |
+
* @param string $name Custom option title.
|
| 89 |
+
* @param array $values Custom option values.
|
| 90 |
+
* @return void
|
| 91 |
+
*/
|
| 92 |
+
private function _marshalDynamicPricingToMultiples($name, array $values)
|
| 93 |
+
{
|
| 94 |
+
if(count($values))
|
| 95 |
+
{
|
| 96 |
+
$this->_data['options'][$name] = array_map(function($a)
|
| 97 |
+
{
|
| 98 |
+
return $a['name'];
|
| 99 |
+
}, $values);
|
| 100 |
+
|
| 101 |
+
// Search for a matching "dropdown" custom option.
|
| 102 |
+
$multiples = array_filter(
|
| 103 |
+
$this->_product->getOptions(),
|
| 104 |
+
array($this, '_filterOptionMultiple'));
|
| 105 |
+
|
| 106 |
+
$matchingOptions = array_values(array_filter($multiples, function($o) use ($name)
|
| 107 |
+
{
|
| 108 |
+
return $o->getTitle() == $name;
|
| 109 |
+
}));
|
| 110 |
+
|
| 111 |
+
// Create the custom option if it doesn't already exist.
|
| 112 |
+
if(count($matchingOptions) == 0)
|
| 113 |
+
{
|
| 114 |
+
$optionData = array(
|
| 115 |
+
'title' => $name,
|
| 116 |
+
'type' => Mage_Catalog_Model_Product_Option::OPTION_TYPE_MULTIPLE,
|
| 117 |
+
'is_require'=> false,
|
| 118 |
+
'sort_order'=> 1,
|
| 119 |
+
|
| 120 |
+
'additional_fields' => array()
|
| 121 |
+
);
|
| 122 |
+
|
| 123 |
+
// Create values
|
| 124 |
+
foreach($values as $attribute)
|
| 125 |
+
{
|
| 126 |
+
$optionData['additional_fields'][] = array(
|
| 127 |
+
'title' => $attribute['name'],
|
| 128 |
+
'price' => $attribute['cost'],
|
| 129 |
+
'price_type'=> 'fixed'
|
| 130 |
+
);
|
| 131 |
+
}
|
| 132 |
+
|
| 133 |
+
Gateway3D_PersonaliseIt_Helper_ProductCustomOptions::addOption($this->_product, $optionData);
|
| 134 |
+
}
|
| 135 |
+
|
| 136 |
+
// A matching custom option exists so let's check that the correct
|
| 137 |
+
// values also exist and create them if not.
|
| 138 |
+
else
|
| 139 |
+
{
|
| 140 |
+
$matchingOption = $matchingOptions[0];
|
| 141 |
+
|
| 142 |
+
$optionData = array(
|
| 143 |
+
'additional_fields' => array()
|
| 144 |
+
);
|
| 145 |
+
|
| 146 |
+
foreach($values as $attribute)
|
| 147 |
+
{
|
| 148 |
+
// Check whether a value already exists.
|
| 149 |
+
$matchingValues = array_filter($matchingOption->getValues(), function($value) use ($attribute)
|
| 150 |
+
{
|
| 151 |
+
return $value->getTitle() == $attribute['name'];
|
| 152 |
+
});
|
| 153 |
+
|
| 154 |
+
// Create a value if one doesn't already exist.
|
| 155 |
+
if(count($matchingValues) == 0)
|
| 156 |
+
{
|
| 157 |
+
$optionData['additional_fields'][] = array(
|
| 158 |
+
'title' => $attribute['name'],
|
| 159 |
+
'price' => $attribute['cost'],
|
| 160 |
+
'price_type'=> 'fixed'
|
| 161 |
+
);
|
| 162 |
+
|
| 163 |
+
Gateway3D_PersonaliseIt_Helper_ProductCustomOptions::update($matchingOption, $optionData);
|
| 164 |
+
}
|
| 165 |
+
}
|
| 166 |
+
}
|
| 167 |
+
}
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
/**
|
| 171 |
+
* Ensure that valid "dropdown" custom options exist for the given collection
|
| 172 |
+
* of attributes.
|
| 173 |
+
*
|
| 174 |
+
* @param array $attributes
|
| 175 |
+
* @return void
|
| 176 |
+
*/
|
| 177 |
+
private function _marshalDynamicPricingToDropdowns(array $attributes)
|
| 178 |
+
{
|
| 179 |
+
$dropdowns = array_filter(
|
| 180 |
+
$this->_product->getOptions(),
|
| 181 |
+
array($this, '_filterOptionDropdown'));
|
| 182 |
+
|
| 183 |
+
foreach($attributes as $attribute)
|
| 184 |
+
{
|
| 185 |
+
$name = $attribute['name'];
|
| 186 |
+
$value = $attribute['value'];
|
| 187 |
+
|
| 188 |
+
$this->_data['options'][$name] = $value;
|
| 189 |
+
|
| 190 |
+
$matchingOptions = array_values(array_filter($dropdowns, function($o) use ($attribute)
|
| 191 |
+
{
|
| 192 |
+
return $o->getTitle() == $attribute['name'];
|
| 193 |
+
}));
|
| 194 |
+
|
| 195 |
+
// Create if doesn't exist
|
| 196 |
+
if(count($matchingOptions) == 0)
|
| 197 |
+
{
|
| 198 |
+
$optionData = array(
|
| 199 |
+
'title' => $attribute['name'],
|
| 200 |
+
'type' => Mage_Catalog_Model_Product_Option::OPTION_TYPE_DROP_DOWN,
|
| 201 |
+
'is_require'=> false,
|
| 202 |
+
'sort_order'=> 1,
|
| 203 |
+
|
| 204 |
+
'additional_fields' => array()
|
| 205 |
+
);
|
| 206 |
+
|
| 207 |
+
$optionData['additional_fields'][] = array(
|
| 208 |
+
'title' => $attribute['value'],
|
| 209 |
+
'price' => $attribute['cost'],
|
| 210 |
+
'price_type'=> 'fixed'
|
| 211 |
+
);
|
| 212 |
+
|
| 213 |
+
Gateway3D_PersonaliseIt_Helper_ProductCustomOptions::addOption($this->_product, $optionData);
|
| 214 |
+
}
|
| 215 |
+
|
| 216 |
+
else
|
| 217 |
+
{
|
| 218 |
+
$matchingOption = $matchingOptions[0];
|
| 219 |
+
|
| 220 |
+
// Check that a matching value exists
|
| 221 |
+
$matchingValues = array_keys(array_filter($matchingOption->getValues(), function($v) use ($attribute)
|
| 222 |
+
{
|
| 223 |
+
return $v->getTitle() == $attribute['value'];
|
| 224 |
+
}));
|
| 225 |
+
|
| 226 |
+
if(count($matchingValues) == 0)
|
| 227 |
+
{
|
| 228 |
+
$data = array(
|
| 229 |
+
'additional_fields' => array(array(
|
| 230 |
+
'title' => $attribute['value'],
|
| 231 |
+
'price' => $attribute['cost'],
|
| 232 |
+
'price_type'=> 'fixed'
|
| 233 |
+
))
|
| 234 |
+
);
|
| 235 |
+
|
| 236 |
+
Gateway3D_PersonaliseIt_Helper_ProductCustomOptions::update($matchingOption, $data);
|
| 237 |
+
}
|
| 238 |
+
}
|
| 239 |
+
}
|
| 240 |
+
}
|
| 241 |
+
|
| 242 |
+
/**
|
| 243 |
+
* Check whether a given custom option is a "dropdown".
|
| 244 |
+
*
|
| 245 |
+
* @param Mage_Catalog_Model_Product_Option $o
|
| 246 |
+
* @return bool True if the given option is a "dropdown".
|
| 247 |
+
*/
|
| 248 |
+
private function _filterOptionDropdown(Mage_Catalog_Model_Product_Option $o)
|
| 249 |
+
{
|
| 250 |
+
return $o->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_DROP_DOWN;
|
| 251 |
+
}
|
| 252 |
+
|
| 253 |
+
/**
|
| 254 |
+
* Check whether a given custom option is a "multiple".
|
| 255 |
+
*
|
| 256 |
+
* @param Mage_Catalog_Model_Product_Option $o
|
| 257 |
+
* @return bool True if the given option is a "multiple".
|
| 258 |
+
*/
|
| 259 |
+
private function _filterOptionMultiple(Mage_Catalog_Model_Product_Option $o)
|
| 260 |
+
{
|
| 261 |
+
return $o->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_MULTIPLE;
|
| 262 |
+
}
|
| 263 |
+
|
| 264 |
+
/**
|
| 265 |
+
* Add the current product or it's associated group products to the cart.
|
| 266 |
+
*
|
| 267 |
+
* @return void
|
| 268 |
+
*/
|
| 269 |
+
private function _processCart()
|
| 270 |
+
{
|
| 271 |
+
$cart = Mage::getModel("checkout/cart");
|
| 272 |
+
|
| 273 |
+
if($this->_product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_GROUPED)
|
| 274 |
+
{
|
| 275 |
+
$associatedProducts = $this->_product
|
| 276 |
+
->getTypeInstance(true)
|
| 277 |
+
->getAssociatedProducts($this->_product);
|
| 278 |
+
|
| 279 |
+
foreach($this->_data['grouped'] as $item)
|
| 280 |
+
{
|
| 281 |
+
if($item['quantity'] > 0)
|
| 282 |
+
{
|
| 283 |
+
$product = Mage::getModel('catalog/product');
|
| 284 |
+
$product->load($item['id']);
|
| 285 |
+
|
| 286 |
+
$this->_ensureProductHasCustomOptions($product);
|
| 287 |
+
|
| 288 |
+
$params = array(
|
| 289 |
+
'options' => $this->_getOptions($product, $item),
|
| 290 |
+
'qty' => $item['quantity']
|
| 291 |
+
);
|
| 292 |
+
|
| 293 |
+
$cart->addProduct($product, $params);
|
| 294 |
+
}
|
| 295 |
+
}
|
| 296 |
+
}
|
| 297 |
+
else
|
| 298 |
+
{
|
| 299 |
+
$this->_ensureProductHasCustomOptions($this->_product);
|
| 300 |
+
|
| 301 |
+
$params = array(
|
| 302 |
+
'options' => $this->_getOptions($this->_product),
|
| 303 |
+
'qty' => $this->_data['quantity']
|
| 304 |
+
);
|
| 305 |
+
|
| 306 |
+
$cart->addProduct($this->_product, $params);
|
| 307 |
+
}
|
| 308 |
+
|
| 309 |
+
//
|
| 310 |
+
$cart->save();
|
| 311 |
+
}
|
| 312 |
+
|
| 313 |
+
private function _getOptions(Mage_Catalog_Model_Product $product, $additionalData = array())
|
| 314 |
+
{
|
| 315 |
+
// Note:
|
| 316 |
+
// additionalData has precedence over _data
|
| 317 |
+
// So the ordering of the if statements is important!
|
| 318 |
+
|
| 319 |
+
$options = array();
|
| 320 |
+
|
| 321 |
+
foreach($product->getOptions() as $option)
|
| 322 |
+
{
|
| 323 |
+
$id = $option->getId();
|
| 324 |
+
$sku = $option->getSku();
|
| 325 |
+
|
| 326 |
+
if($option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_DROP_DOWN)
|
| 327 |
+
{
|
| 328 |
+
if(isset($additionalData['options'][$id]))
|
| 329 |
+
{
|
| 330 |
+
$options[$id] = $additionalData['options'][$id];
|
| 331 |
+
}
|
| 332 |
+
else if(isset($this->_data['options'][$id]))
|
| 333 |
+
{
|
| 334 |
+
$options[$id] = $this->_data['options'][$id];
|
| 335 |
+
}
|
| 336 |
+
else if(isset($this->_data['options'][$option->getTitle()]))
|
| 337 |
+
{
|
| 338 |
+
$_value = $this->_data['options'][$option->getTitle()];
|
| 339 |
+
|
| 340 |
+
foreach($option->getValues() as $value)
|
| 341 |
+
{
|
| 342 |
+
if($value->getTitle() == $_value)
|
| 343 |
+
{
|
| 344 |
+
$options[$option->getId()] = $value->getId();
|
| 345 |
+
}
|
| 346 |
+
}
|
| 347 |
+
}
|
| 348 |
+
}
|
| 349 |
+
else if($option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_MULTIPLE)
|
| 350 |
+
{
|
| 351 |
+
if(isset($this->_data['options'][$option->getTitle()]))
|
| 352 |
+
{
|
| 353 |
+
$_values = $this->_data['options'][$option->getTitle()];
|
| 354 |
+
|
| 355 |
+
$values = array_filter($option->getValues(), function($value) use ($_values)
|
| 356 |
+
{
|
| 357 |
+
return in_array($value->getTitle(), $_values);
|
| 358 |
+
});
|
| 359 |
+
|
| 360 |
+
$ids = array_map(function($value) { return $value->getId(); }, $values);
|
| 361 |
+
|
| 362 |
+
$options[$option->getId()] = $ids;
|
| 363 |
+
}
|
| 364 |
+
}
|
| 365 |
+
else if(isset($additionalData[$sku]))
|
| 366 |
+
{
|
| 367 |
+
$options[$id] = $additionalData[$sku];
|
| 368 |
+
}
|
| 369 |
+
else if(isset($this->_data[$sku]))
|
| 370 |
+
{
|
| 371 |
+
$options[$id] = $this->_data[$sku];
|
| 372 |
+
}
|
| 373 |
+
}
|
| 374 |
+
|
| 375 |
+
return $options;
|
| 376 |
+
}
|
| 377 |
+
|
| 378 |
+
private function _ensureProductHasCustomOptions(Mage_Catalog_Model_Product $product, $required = array())
|
| 379 |
+
{
|
| 380 |
+
$printJobIdSku = Gateway3D_PersonaliseIt_Model_Cron_Sl::PRINT_JOB_ID_CUSTOM_OPTION_SKU;
|
| 381 |
+
|
| 382 |
+
$required = array_merge(array(
|
| 383 |
+
$printJobIdSku,
|
| 384 |
+
"thumburl"
|
| 385 |
+
), $required);
|
| 386 |
+
|
| 387 |
+
Gateway3D_PersonaliseIt_Helper_ProductCustomOptions::ensureProductHasCustomOptions($product, $required);
|
| 388 |
+
}
|
| 389 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Model/Product/Epa.php
ADDED
|
@@ -0,0 +1,260 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Model_Product_Epa
|
| 11 |
+
extends Gateway3D_PersonaliseIt_Model_Product_Abstract
|
| 12 |
+
{
|
| 13 |
+
public function getData()
|
| 14 |
+
{
|
| 15 |
+
$data = $this->_getProductData($this->_product);
|
| 16 |
+
|
| 17 |
+
$data['dynamic_pricing'] = $this->_getProductDynamicPricing($this->_product);
|
| 18 |
+
$data['grouped'] = array();
|
| 19 |
+
|
| 20 |
+
//
|
| 21 |
+
if($this->_product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_GROUPED)
|
| 22 |
+
{
|
| 23 |
+
$cheapestPrice = INF;
|
| 24 |
+
|
| 25 |
+
$associatedProducts = $this->_product
|
| 26 |
+
->getTypeInstance(true)
|
| 27 |
+
->getAssociatedProducts($this->_product);
|
| 28 |
+
|
| 29 |
+
foreach($associatedProducts as $associatedProduct)
|
| 30 |
+
{
|
| 31 |
+
$_associatedProduct = Mage::getModel('catalog/product');
|
| 32 |
+
$_associatedProduct->load($associatedProduct->getId());
|
| 33 |
+
|
| 34 |
+
$data['grouped'][] = $this->_getProductData($_associatedProduct);
|
| 35 |
+
|
| 36 |
+
// Grouped products don't have prices so use the cheapest
|
| 37 |
+
// associated product.
|
| 38 |
+
//
|
| 39 |
+
// Note that we don't compare on $data['price'] because it might
|
| 40 |
+
// be formatted with currency symbols etc
|
| 41 |
+
if($associatedProduct->getPrice() <= $cheapestPrice)
|
| 42 |
+
{
|
| 43 |
+
$data['price'] = $this->_getPrice($associatedProduct);
|
| 44 |
+
$cheapestPrice = $associatedProduct->getPrice();
|
| 45 |
+
}
|
| 46 |
+
}
|
| 47 |
+
}
|
| 48 |
+
|
| 49 |
+
//
|
| 50 |
+
return $data;
|
| 51 |
+
}
|
| 52 |
+
|
| 53 |
+
/**
|
| 54 |
+
* Get pricing information used for dynamic pricing.
|
| 55 |
+
*
|
| 56 |
+
* @param Mage_Core_Catalog_Model_Product $product
|
| 57 |
+
* @return array
|
| 58 |
+
*/
|
| 59 |
+
private function _getProductDynamicPricing(Mage_Core_Catalog_Model_Product $product)
|
| 60 |
+
{
|
| 61 |
+
return array(
|
| 62 |
+
'base' => $product->getPrice(),
|
| 63 |
+
|
| 64 |
+
'per_print_area' => $this->_getProductDynamicPricingField(
|
| 65 |
+
$product, 'Number of Print Areas', Mage_Catalog_Model_Product_Option::OPTION_TYPE_DROP_DOWN),
|
| 66 |
+
|
| 67 |
+
'per_detected_colour' => $this->_getProductDynamicPricingField(
|
| 68 |
+
$product, 'Number of Image Colours', Mage_Catalog_Model_Product_Option::OPTION_TYPE_DROP_DOWN),
|
| 69 |
+
|
| 70 |
+
'per_stitch' => $this->_getProductDynamicPricingField(
|
| 71 |
+
$product, 'Number of Stitches', Mage_Catalog_Model_Product_Option::OPTION_TYPE_DROP_DOWN),
|
| 72 |
+
|
| 73 |
+
'effects' => $this->_getProductDynamicPricingField(
|
| 74 |
+
$product, 'Effects', Mage_Catalog_Model_Product_Option::OPTION_TYPE_MULTIPLE)
|
| 75 |
+
);
|
| 76 |
+
}
|
| 77 |
+
|
| 78 |
+
/**
|
| 79 |
+
* Gets a pricing structure for a matching custom option.
|
| 80 |
+
*
|
| 81 |
+
* @param Mage_Core_Catalog_Model_Product $product
|
| 82 |
+
* @param string $name Custom option title.
|
| 83 |
+
* @param string $type Custom option type.
|
| 84 |
+
* @return array|bool
|
| 85 |
+
*/
|
| 86 |
+
private function _getProductDynamicPricingField(Mage_Core_Catalog_Model_Product $product, $name, $type)
|
| 87 |
+
{
|
| 88 |
+
foreach($product->getOptions() as $option)
|
| 89 |
+
{
|
| 90 |
+
$doesTitleMatch = $option->getTitle() == $name;
|
| 91 |
+
$doesTypeMatch = $option->getType() == $type;
|
| 92 |
+
|
| 93 |
+
$isDropDown = $option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_DROP_DOWN;
|
| 94 |
+
$isMulti = $option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_MULTIPLE;
|
| 95 |
+
|
| 96 |
+
// In this case of a dropdown custom option, we assume that each
|
| 97 |
+
// option is a quantity and therefore only return a single value.
|
| 98 |
+
if($doesTypeMatch && $doesTitleMatch && $isDropDown)
|
| 99 |
+
{
|
| 100 |
+
foreach($option->getValues() as $value)
|
| 101 |
+
{
|
| 102 |
+
$title = $value->getTitle();
|
| 103 |
+
|
| 104 |
+
if(is_numeric($title) && $title > 0)
|
| 105 |
+
{
|
| 106 |
+
return $value->getPrice() / $title;
|
| 107 |
+
}
|
| 108 |
+
}
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
// In the case of a multiple custom option, we return the price
|
| 112 |
+
// of each possible value.
|
| 113 |
+
else if($doesTypeMatch && $doesTitleMatch && $isMulti)
|
| 114 |
+
{
|
| 115 |
+
return array_values(array_map(function($value)
|
| 116 |
+
{
|
| 117 |
+
$matches = array();
|
| 118 |
+
|
| 119 |
+
return array(
|
| 120 |
+
'title' => $value->getTitle(),
|
| 121 |
+
'price' => $value->getPrice()
|
| 122 |
+
);
|
| 123 |
+
}, $option->getValues()));
|
| 124 |
+
}
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
return false;
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
/**
|
| 131 |
+
* Gets the pricing structure for a given product.
|
| 132 |
+
*
|
| 133 |
+
* @param Mage_Catalog_Model_Product $product
|
| 134 |
+
* @return array
|
| 135 |
+
*/
|
| 136 |
+
private function _getProductData($product)
|
| 137 |
+
{
|
| 138 |
+
$tiers = array();
|
| 139 |
+
$options = array();
|
| 140 |
+
|
| 141 |
+
// Tier prices
|
| 142 |
+
foreach($product->getTierPrice() as $tier)
|
| 143 |
+
{
|
| 144 |
+
$tiers[] = array(
|
| 145 |
+
'quantity' => $tier['price_qty'],
|
| 146 |
+
'price' => $this->_formatPrice($tier['price'])
|
| 147 |
+
);
|
| 148 |
+
}
|
| 149 |
+
|
| 150 |
+
// Drop down custom options
|
| 151 |
+
foreach($product->getOptions() as $option)
|
| 152 |
+
{
|
| 153 |
+
if($option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_DROP_DOWN)
|
| 154 |
+
{
|
| 155 |
+
$values = array();
|
| 156 |
+
|
| 157 |
+
foreach($option->getValues() as $value)
|
| 158 |
+
{
|
| 159 |
+
$values[] = array(
|
| 160 |
+
'id' => $value->getId(),
|
| 161 |
+
'name' => $value->getTitle(),
|
| 162 |
+
'sku' => $value->getSku(),
|
| 163 |
+
'price' => $this->_formatPrice($value->getPrice()),
|
| 164 |
+
|
| 165 |
+
'minimum_quantity' => $product->getStockItem()->getMinSaleQty(),
|
| 166 |
+
'maximum_quantity' => $product->getStockItem()->getMaxSaleQty(),
|
| 167 |
+
);
|
| 168 |
+
}
|
| 169 |
+
|
| 170 |
+
$options[] = array(
|
| 171 |
+
'id' => $option->getId(),
|
| 172 |
+
'name' => $option->getTitle(),
|
| 173 |
+
'values' => $values
|
| 174 |
+
);
|
| 175 |
+
}
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
// average user rating
|
| 179 |
+
$storeId = Mage::app()->getStore()->getId();
|
| 180 |
+
|
| 181 |
+
$summaryData = Mage::getModel('review/review_summary')
|
| 182 |
+
->setStoreId($storeId)
|
| 183 |
+
->load($product->getId());
|
| 184 |
+
|
| 185 |
+
$rating = $summaryData->getRatingSummary()
|
| 186 |
+
? $summaryData->getRatingSummary() / 100
|
| 187 |
+
: 0.0;
|
| 188 |
+
|
| 189 |
+
//
|
| 190 |
+
return array(
|
| 191 |
+
'id' => $product->getId(),
|
| 192 |
+
'sku' => $product->getSku(),
|
| 193 |
+
|
| 194 |
+
'price' => $this->_getPrice($product),
|
| 195 |
+
|
| 196 |
+
'name' => $product->getName(),
|
| 197 |
+
'description' => $product->getDescription(),
|
| 198 |
+
'rating' => $rating,
|
| 199 |
+
|
| 200 |
+
'minimum_quantity' => $product->getStockItem()->getMinSaleQty(),
|
| 201 |
+
'maximum_quantity' => $product->getStockItem()->getMaxSaleQty(),
|
| 202 |
+
|
| 203 |
+
'increment_quantity'=> $product->getStockItem()->getEnableQtyIncrements()
|
| 204 |
+
? $product->getStockItem()->getQtyIncrements()
|
| 205 |
+
: 1,
|
| 206 |
+
|
| 207 |
+
'is_new' => self::_isProductNew($product),
|
| 208 |
+
|
| 209 |
+
'options' => $options,
|
| 210 |
+
'tiers' => $tiers,
|
| 211 |
+
);
|
| 212 |
+
}
|
| 213 |
+
|
| 214 |
+
/**
|
| 215 |
+
* Gets a formatted price for a product.
|
| 216 |
+
*
|
| 217 |
+
* @param Mage_Catalog_Model_Product $product
|
| 218 |
+
* @return string
|
| 219 |
+
*/
|
| 220 |
+
private function _getPrice($product)
|
| 221 |
+
{
|
| 222 |
+
return $this->_formatPrice($product->getPrice());
|
| 223 |
+
}
|
| 224 |
+
|
| 225 |
+
/**
|
| 226 |
+
* Gets a price formatted according to Magento's current currency.
|
| 227 |
+
*
|
| 228 |
+
* @param mixed $price
|
| 229 |
+
* @return string
|
| 230 |
+
*/
|
| 231 |
+
private function _formatPrice($price)
|
| 232 |
+
{
|
| 233 |
+
$price = number_format($price, 2);
|
| 234 |
+
|
| 235 |
+
return Mage::helper('core')
|
| 236 |
+
->currency($price, true, false);
|
| 237 |
+
}
|
| 238 |
+
|
| 239 |
+
/**
|
| 240 |
+
* Calculates whether a product is new.
|
| 241 |
+
*
|
| 242 |
+
* @param Mage_Catalog_Model_Product $product
|
| 243 |
+
* @return boolean
|
| 244 |
+
*/
|
| 245 |
+
private static function _isProductNew(Mage_Catalog_Model_Product $product)
|
| 246 |
+
{
|
| 247 |
+
if($product->getNewsFromDate())
|
| 248 |
+
{
|
| 249 |
+
return Mage::app()->getLocale()->isStoreDateInInterval(
|
| 250 |
+
Mage::app()->getStore(),
|
| 251 |
+
$product->getNewsFromDate(),
|
| 252 |
+
$product->getNewsToDate()
|
| 253 |
+
);
|
| 254 |
+
}
|
| 255 |
+
else
|
| 256 |
+
{
|
| 257 |
+
return false;
|
| 258 |
+
}
|
| 259 |
+
}
|
| 260 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Model/Product/Rating.php
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Model_Product_Rating
|
| 11 |
+
extends Gateway3D_PersonaliseIt_Model_Product_Abstract
|
| 12 |
+
{
|
| 13 |
+
public function setRating($rating = 1)
|
| 14 |
+
{
|
| 15 |
+
// Don't allow a rating < 1 or > 5
|
| 16 |
+
$rating = max(1, min(5, $rating));
|
| 17 |
+
|
| 18 |
+
// Limitation:
|
| 19 |
+
//
|
| 20 |
+
// Currently we can only use the first rating that we find because
|
| 21 |
+
// there is nothing to tell us which rating to use!
|
| 22 |
+
$ratingCollection = Mage::getModel('rating/rating')
|
| 23 |
+
->getResourceCollection()
|
| 24 |
+
->addEntityFilter('product')
|
| 25 |
+
->setPositionOrder()
|
| 26 |
+
->addRatingPerStoreName(Mage::app()->getStore()->getId())
|
| 27 |
+
->setStoreFilter(Mage::app()->getStore()->getId())
|
| 28 |
+
->load()
|
| 29 |
+
->addOptionToItems();
|
| 30 |
+
|
| 31 |
+
$ratingId = null;
|
| 32 |
+
|
| 33 |
+
foreach($ratingCollection as $_rating)
|
| 34 |
+
{
|
| 35 |
+
$ratingId = $_rating->getId();
|
| 36 |
+
break;
|
| 37 |
+
}
|
| 38 |
+
|
| 39 |
+
if($ratingId === null)
|
| 40 |
+
{
|
| 41 |
+
throw new Exception('No rating found');
|
| 42 |
+
}
|
| 43 |
+
|
| 44 |
+
// Now create the review
|
| 45 |
+
$review = Mage::getModel('review/review')
|
| 46 |
+
->setEntityPkValue($this->_product->getId())
|
| 47 |
+
->setStatusId(Mage_Review_Model_Review::STATUS_APPROVED)
|
| 48 |
+
->setCustomerId(Mage::getSingleton('customer/session')->getCustomerId())
|
| 49 |
+
->setTitle("")
|
| 50 |
+
->setDetail("")
|
| 51 |
+
->setEntityId(1)
|
| 52 |
+
->setStoreId(Mage::app()->getStore()->getId())
|
| 53 |
+
->setStores(array(Mage::app()->getStore()->getId()))
|
| 54 |
+
->setNickname("")
|
| 55 |
+
->save();
|
| 56 |
+
|
| 57 |
+
// Add the rating to the review
|
| 58 |
+
Mage::getModel('rating/rating')
|
| 59 |
+
->setRatingId($ratingId)
|
| 60 |
+
->setReviewId($review->getId())
|
| 61 |
+
->setCustomerId(Mage::getSingleton('customer/session')->getCustomerId())
|
| 62 |
+
->addOptionVote(floor($rating), $this->_product->getId());
|
| 63 |
+
|
| 64 |
+
// ?? Recalculate the review's rating summary?
|
| 65 |
+
$review->aggregate();
|
| 66 |
+
|
| 67 |
+
//
|
| 68 |
+
return true;
|
| 69 |
+
}
|
| 70 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Model/Resource/Eav/Mysql4/Setup.php
ADDED
|
@@ -0,0 +1,279 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2013 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
class Gateway3D_PersonaliseIt_Model_Resource_Eav_Mysql4_Setup
|
| 10 |
+
extends Mage_Eav_Model_Entity_Setup
|
| 11 |
+
{
|
| 12 |
+
public function getDefaultEntities(){
|
| 13 |
+
return array(
|
| 14 |
+
'catalog_product' => array(
|
| 15 |
+
'entity_model' => 'catalog/product',
|
| 16 |
+
'attribute_model' => 'catalog/resource_eav_attribute',
|
| 17 |
+
'table' => 'catalog/product',
|
| 18 |
+
'additional_attribute_table' => 'catalog/eav_attribute',
|
| 19 |
+
'entity_attribute_collection' => 'catalog/product_attribute_collection',
|
| 20 |
+
'attributes' => array(
|
| 21 |
+
|
| 22 |
+
'personaliseit_gl_iframe_url'=> array(
|
| 23 |
+
'section' =>'general',
|
| 24 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 25 |
+
'label' => 'WebGL iFrame URL',
|
| 26 |
+
'type' => 'text',
|
| 27 |
+
'input' => 'text',
|
| 28 |
+
'default' => '',
|
| 29 |
+
'class' => '',
|
| 30 |
+
'backend' => '',
|
| 31 |
+
'frontend' => '',
|
| 32 |
+
'source' => '',
|
| 33 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 34 |
+
'visible' => true,
|
| 35 |
+
'required' => false,
|
| 36 |
+
'user_defined' => false,
|
| 37 |
+
'searchable' => false,
|
| 38 |
+
'filterable' => false,
|
| 39 |
+
'comparable' => false,
|
| 40 |
+
'visible_on_front' => false,
|
| 41 |
+
'visible_in_advanced_search' => false,
|
| 42 |
+
'unique' => false
|
| 43 |
+
),
|
| 44 |
+
|
| 45 |
+
'personaliseit_fl_iframe_url'=> array(
|
| 46 |
+
'section' =>'general',
|
| 47 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 48 |
+
'label' => 'Flash iFrame URL',
|
| 49 |
+
'type' => 'text',
|
| 50 |
+
'input' => 'text',
|
| 51 |
+
'default' => '',
|
| 52 |
+
'class' => '',
|
| 53 |
+
'backend' => '',
|
| 54 |
+
'frontend' => '',
|
| 55 |
+
'source' => '',
|
| 56 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 57 |
+
'visible' => true,
|
| 58 |
+
'required' => false,
|
| 59 |
+
'user_defined' => false,
|
| 60 |
+
'searchable' => false,
|
| 61 |
+
'filterable' => false,
|
| 62 |
+
'comparable' => false,
|
| 63 |
+
'visible_on_front' => false,
|
| 64 |
+
'visible_in_advanced_search' => false,
|
| 65 |
+
'unique' => false
|
| 66 |
+
),
|
| 67 |
+
|
| 68 |
+
'personaliseit_m_iframe_url'=>array(
|
| 69 |
+
'section' =>'general',
|
| 70 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 71 |
+
'label' => 'Default Mobile iFrame URL',
|
| 72 |
+
'type' => 'text',
|
| 73 |
+
'input' => 'text',
|
| 74 |
+
'default' => '',
|
| 75 |
+
'class' => '',
|
| 76 |
+
'backend' => '',
|
| 77 |
+
'frontend' => '',
|
| 78 |
+
'source' => '',
|
| 79 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 80 |
+
'visible' => true,
|
| 81 |
+
'required' => false,
|
| 82 |
+
'user_defined' => false,
|
| 83 |
+
'searchable' => false,
|
| 84 |
+
'filterable' => false,
|
| 85 |
+
'comparable' => false,
|
| 86 |
+
'visible_on_front' => false,
|
| 87 |
+
'visible_in_advanced_search' => false,
|
| 88 |
+
'unique' => false
|
| 89 |
+
),
|
| 90 |
+
|
| 91 |
+
'personaliseit_iframe_url'=>array(
|
| 92 |
+
'section'=>'general',
|
| 93 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 94 |
+
'label' => 'Default iFrame URL',
|
| 95 |
+
'type' => 'text',
|
| 96 |
+
'input' => 'text',
|
| 97 |
+
'default' => '',
|
| 98 |
+
'class' => '',
|
| 99 |
+
'backend' => '',
|
| 100 |
+
'frontend' => '',
|
| 101 |
+
'source' => '',
|
| 102 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 103 |
+
'visible' => true,
|
| 104 |
+
'required' => false,
|
| 105 |
+
'user_defined' => false,
|
| 106 |
+
'searchable' => false,
|
| 107 |
+
'filterable' => false,
|
| 108 |
+
'comparable' => false,
|
| 109 |
+
'visible_on_front' => false,
|
| 110 |
+
'visible_in_advanced_search' => false,
|
| 111 |
+
'unique' => false
|
| 112 |
+
),
|
| 113 |
+
|
| 114 |
+
'easypromo3d_url'=>array(
|
| 115 |
+
'section'=>'general',
|
| 116 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 117 |
+
'label' => 'Legacy Easypromo3D URL',
|
| 118 |
+
'type' => 'text',
|
| 119 |
+
'input' => 'text',
|
| 120 |
+
'default' => '',
|
| 121 |
+
'class' => '',
|
| 122 |
+
'backend' => '',
|
| 123 |
+
'frontend' => '',
|
| 124 |
+
'source' => '',
|
| 125 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 126 |
+
'visible' => true,
|
| 127 |
+
'required' => false,
|
| 128 |
+
'user_defined' => false,
|
| 129 |
+
'searchable' => false,
|
| 130 |
+
'filterable' => false,
|
| 131 |
+
'comparable' => false,
|
| 132 |
+
'visible_on_front' => false,
|
| 133 |
+
'visible_in_advanced_search' => false,
|
| 134 |
+
'unique' => false
|
| 135 |
+
),
|
| 136 |
+
|
| 137 |
+
'personaliseit_company_ref_id'=>array(
|
| 138 |
+
'section'=>'general',
|
| 139 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 140 |
+
'label' => '(Supplier) Company Ref ID',
|
| 141 |
+
'type' => 'varchar',
|
| 142 |
+
'input' => 'text',
|
| 143 |
+
'default' => '',
|
| 144 |
+
'class' => '',
|
| 145 |
+
'backend' => '',
|
| 146 |
+
'frontend' => '',
|
| 147 |
+
'source' => '',
|
| 148 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 149 |
+
'visible' => true,
|
| 150 |
+
'required' => false,
|
| 151 |
+
'user_defined' => false,
|
| 152 |
+
'searchable' => false,
|
| 153 |
+
'filterable' => false,
|
| 154 |
+
'comparable' => false,
|
| 155 |
+
'visible_on_front' => false,
|
| 156 |
+
'visible_in_advanced_search' => false,
|
| 157 |
+
'unique' => false
|
| 158 |
+
),
|
| 159 |
+
|
| 160 |
+
'personaliseit_pod_ref'=>array(
|
| 161 |
+
'section'=>'general',
|
| 162 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 163 |
+
'label' => 'Print-on-Demand Sample Ref',
|
| 164 |
+
'type' => 'varchar',
|
| 165 |
+
'input' => 'text',
|
| 166 |
+
'default' => '',
|
| 167 |
+
'class' => '',
|
| 168 |
+
'backend' => '',
|
| 169 |
+
'frontend' => '',
|
| 170 |
+
'source' => '',
|
| 171 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 172 |
+
'visible' => true,
|
| 173 |
+
'required' => false,
|
| 174 |
+
'user_defined' => false,
|
| 175 |
+
'searchable' => false,
|
| 176 |
+
'filterable' => false,
|
| 177 |
+
'comparable' => false,
|
| 178 |
+
'visible_on_front' => false,
|
| 179 |
+
'visible_in_advanced_search' => false,
|
| 180 |
+
'unique' => false
|
| 181 |
+
),
|
| 182 |
+
|
| 183 |
+
'personaliseit_is_plain' => array(
|
| 184 |
+
'section' => 'general',
|
| 185 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 186 |
+
'label' => 'Is Plain?',
|
| 187 |
+
'type' => 'int',
|
| 188 |
+
'input' => 'boolean',
|
| 189 |
+
'default' => '',
|
| 190 |
+
'class' => '',
|
| 191 |
+
'backend' => '',
|
| 192 |
+
'frontend' => '',
|
| 193 |
+
'source' => 'eav/entity_attribute_source_table',
|
| 194 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 195 |
+
'visible' => true,
|
| 196 |
+
'required' => false,
|
| 197 |
+
'user_defined' => false,
|
| 198 |
+
'searchable' => false,
|
| 199 |
+
'filterable' => false,
|
| 200 |
+
'comparable' => false,
|
| 201 |
+
'visible_on_front' => false,
|
| 202 |
+
'visible_in_advanced_search' => false,
|
| 203 |
+
'unique' => false
|
| 204 |
+
),
|
| 205 |
+
|
| 206 |
+
'personaliseit_use_mageid' => array(
|
| 207 |
+
'section' => 'general',
|
| 208 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 209 |
+
'label' => 'Use Magento product ID in iFrame callbacks?',
|
| 210 |
+
'type' => 'int',
|
| 211 |
+
'input' => 'boolean',
|
| 212 |
+
'default' => '1',
|
| 213 |
+
'class' => '',
|
| 214 |
+
'backend' => '',
|
| 215 |
+
'frontend' => '',
|
| 216 |
+
'source' => 'eav/entity_attribute_source_table',
|
| 217 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 218 |
+
'visible' => true,
|
| 219 |
+
'required' => false,
|
| 220 |
+
'user_defined' => false,
|
| 221 |
+
'searchable' => false,
|
| 222 |
+
'filterable' => false,
|
| 223 |
+
'comparable' => false,
|
| 224 |
+
'visible_on_front' => false,
|
| 225 |
+
'visible_in_advanced_search' => false,
|
| 226 |
+
'unique' => false
|
| 227 |
+
),
|
| 228 |
+
|
| 229 |
+
'personaliseit_dp_enabled' => array(
|
| 230 |
+
'section' => 'general',
|
| 231 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 232 |
+
'label' => 'Enable delayed preview',
|
| 233 |
+
'type' => 'int',
|
| 234 |
+
'input' => 'boolean',
|
| 235 |
+
'default' => '0',
|
| 236 |
+
'class' => '',
|
| 237 |
+
'backend' => '',
|
| 238 |
+
'frontend' => '',
|
| 239 |
+
'source' => 'eav/entity_attribute_source_table',
|
| 240 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 241 |
+
'visible' => true,
|
| 242 |
+
'required' => false,
|
| 243 |
+
'user_defined' => false,
|
| 244 |
+
'searchable' => false,
|
| 245 |
+
'filterable' => false,
|
| 246 |
+
'comparable' => false,
|
| 247 |
+
'visible_on_front' => false,
|
| 248 |
+
'visible_in_advanced_search' => false,
|
| 249 |
+
'unique' => false
|
| 250 |
+
),
|
| 251 |
+
|
| 252 |
+
'personaliseit_dp_pid' => array(
|
| 253 |
+
'section' => 'general',
|
| 254 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 255 |
+
'label' => 'Automatic print job creation product ID',
|
| 256 |
+
'type' => 'int',
|
| 257 |
+
'input' => 'text',
|
| 258 |
+
'default' => '0',
|
| 259 |
+
'class' => '',
|
| 260 |
+
'backend' => '',
|
| 261 |
+
'frontend' => '',
|
| 262 |
+
'source' => 'eav/entity_attribute_source_table',
|
| 263 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 264 |
+
'visible' => true,
|
| 265 |
+
'required' => false,
|
| 266 |
+
'user_defined' => false,
|
| 267 |
+
'searchable' => false,
|
| 268 |
+
'filterable' => false,
|
| 269 |
+
'comparable' => false,
|
| 270 |
+
'visible_on_front' => false,
|
| 271 |
+
'visible_in_advanced_search' => false,
|
| 272 |
+
'unique' => false
|
| 273 |
+
)
|
| 274 |
+
),
|
| 275 |
+
),
|
| 276 |
+
);
|
| 277 |
+
}
|
| 278 |
+
}
|
| 279 |
+
|
app/code/local/Gateway3D/PersonaliseIt/Model/Source/Orderstatus.php
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Model_Source_Orderstatus
|
| 11 |
+
{
|
| 12 |
+
public function toOptionArray()
|
| 13 |
+
{
|
| 14 |
+
return array(
|
| 15 |
+
array('value' => Gateway3D_PersonaliseIt_Service_Dto_Sl_Order::STATUS_ITEMS_READY, 'label' => 'Received'),
|
| 16 |
+
array('value' => Gateway3D_PersonaliseIt_Service_Dto_Sl_Order::STATUS_ON_HOLD, 'label' => 'On Hold')
|
| 17 |
+
);
|
| 18 |
+
}
|
| 19 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/Model/Status/Callback.php
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Model_Status_Callback
|
| 11 |
+
{
|
| 12 |
+
/**
|
| 13 |
+
* @var Mage_Sales_Model_Order
|
| 14 |
+
*/
|
| 15 |
+
private $_order;
|
| 16 |
+
|
| 17 |
+
public function load($ref)
|
| 18 |
+
{
|
| 19 |
+
$collection = Mage::getResourceModel('sales/order_collection')
|
| 20 |
+
->addAttributeToSelect('*')
|
| 21 |
+
->addFieldToFilter('status_callback_ref', $ref)
|
| 22 |
+
->addFieldToFilter('sent', 1)
|
| 23 |
+
->addFieldToFilter('shipped', 0)
|
| 24 |
+
->addOrder('created_at', 'desc');
|
| 25 |
+
|
| 26 |
+
if(count($collection) === 1)
|
| 27 |
+
{
|
| 28 |
+
foreach($collection as $order)
|
| 29 |
+
{
|
| 30 |
+
$this->_order = $order;
|
| 31 |
+
|
| 32 |
+
break;
|
| 33 |
+
}
|
| 34 |
+
}
|
| 35 |
+
else
|
| 36 |
+
{
|
| 37 |
+
throw new Exception('Invalid ref');
|
| 38 |
+
}
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
public function update($status, $statusName)
|
| 42 |
+
{
|
| 43 |
+
switch($status)
|
| 44 |
+
{
|
| 45 |
+
case Gateway3D_PersonaliseIt_Service_Dto_Sl_Order::STATUS_DISPATCHED:
|
| 46 |
+
case Gateway3D_PersonaliseIt_Service_Dto_Sl_Order::STATUS_SUPPLIER_DISPATCHED_NOTIFIED:
|
| 47 |
+
$this->_ship();
|
| 48 |
+
break;
|
| 49 |
+
|
| 50 |
+
default:
|
| 51 |
+
$this->_order->addStatusHistoryComment("Status callback: {$statusName} ({$status})");
|
| 52 |
+
$this->_order->save();
|
| 53 |
+
break;
|
| 54 |
+
}
|
| 55 |
+
|
| 56 |
+
return true;
|
| 57 |
+
}
|
| 58 |
+
|
| 59 |
+
private function _ship()
|
| 60 |
+
{
|
| 61 |
+
if($this->_order->canShip())
|
| 62 |
+
{
|
| 63 |
+
$qtys = array();
|
| 64 |
+
|
| 65 |
+
foreach($this->_order->getAllItems() as $item)
|
| 66 |
+
{
|
| 67 |
+
$qtys[$item->getId()] = $item->getQtyToShip();
|
| 68 |
+
}
|
| 69 |
+
|
| 70 |
+
$shipment = Mage::getModel('sales/service_order', $this->_order)->prepareShipment($qtys);
|
| 71 |
+
|
| 72 |
+
$shipment->register();
|
| 73 |
+
|
| 74 |
+
$shipment->setEmailSent(true);
|
| 75 |
+
|
| 76 |
+
$shipment->getOrder()->setCustomerNoteNotify(true);
|
| 77 |
+
|
| 78 |
+
$shipment->getOrder()->setIsInProcess(true);
|
| 79 |
+
|
| 80 |
+
Mage::getModel('core/resource_transaction')
|
| 81 |
+
->addObject($shipment)
|
| 82 |
+
->addObject($shipment->getOrder())
|
| 83 |
+
->save();
|
| 84 |
+
|
| 85 |
+
$shipment->sendEmail(true, '');
|
| 86 |
+
|
| 87 |
+
$this->_order->shipped = true;
|
| 88 |
+
$this->_order->save();
|
| 89 |
+
}
|
| 90 |
+
}
|
| 91 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/controllers/CppController.php
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
class Gateway3D_PersonaliseIt_CppController
|
| 4 |
+
extends Mage_Adminhtml_Controller_Action
|
| 5 |
+
{
|
| 6 |
+
public function importOptionsAction()
|
| 7 |
+
{
|
| 8 |
+
$id = $this->getRequest()->getParam('id', 0);
|
| 9 |
+
|
| 10 |
+
$product = Mage::getModel('catalog/product')
|
| 11 |
+
->load($id);
|
| 12 |
+
|
| 13 |
+
try
|
| 14 |
+
{
|
| 15 |
+
$model = new Gateway3D_PersonaliseIt_Model_ImportOptions($product);
|
| 16 |
+
$model->import();
|
| 17 |
+
}
|
| 18 |
+
catch(Exception $e)
|
| 19 |
+
{
|
| 20 |
+
$this->_getSession()->addError($e->getMessage());
|
| 21 |
+
}
|
| 22 |
+
}
|
| 23 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/controllers/ProductController.php
ADDED
|
@@ -0,0 +1,157 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2013 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_ProductController
|
| 11 |
+
extends Mage_Core_Controller_Front_Action
|
| 12 |
+
{
|
| 13 |
+
/**
|
| 14 |
+
* /personalise-it/product/epa/
|
| 15 |
+
*/
|
| 16 |
+
public function epaAction()
|
| 17 |
+
{
|
| 18 |
+
$model = new Gateway3D_PersonaliseIt_Model_Product_Epa();
|
| 19 |
+
|
| 20 |
+
$sku = $this->getRequest()->getParam('sku', '');
|
| 21 |
+
$id = $this->getRequest()->getParam('id', '');
|
| 22 |
+
$callback = $this->getRequest()->getParam('callback', '');
|
| 23 |
+
$callback = preg_replace("/[^0-9a-zA-Z\$_]/", "", $callback);
|
| 24 |
+
|
| 25 |
+
//
|
| 26 |
+
try
|
| 27 |
+
{
|
| 28 |
+
$model->load($id, $sku);
|
| 29 |
+
$data = $model->getData();
|
| 30 |
+
}
|
| 31 |
+
catch(Exception $e)
|
| 32 |
+
{
|
| 33 |
+
$data = array(
|
| 34 |
+
'error' => array(
|
| 35 |
+
'message' => $e->getMessage()
|
| 36 |
+
)
|
| 37 |
+
);
|
| 38 |
+
}
|
| 39 |
+
|
| 40 |
+
//
|
| 41 |
+
$json = Zend_Json::encode($data);
|
| 42 |
+
$jsonp = "{$callback}({$json})";
|
| 43 |
+
|
| 44 |
+
$this->getResponse()->clearAllHeaders();
|
| 45 |
+
$this->getResponse()->setHeader('Content-Length', strlen($jsonp));
|
| 46 |
+
$this->getResponse()->setHeader('Content-Type', 'text/plain');
|
| 47 |
+
$this->getResponse()->sendHeaders();
|
| 48 |
+
|
| 49 |
+
echo $jsonp;
|
| 50 |
+
|
| 51 |
+
exit;
|
| 52 |
+
}
|
| 53 |
+
|
| 54 |
+
public function ratingAction()
|
| 55 |
+
{
|
| 56 |
+
$model = new Gateway3D_PersonaliseIt_Model_Product_Rating();
|
| 57 |
+
|
| 58 |
+
$sku = $this->getRequest()->getParam('sku', '');
|
| 59 |
+
$id = $this->getRequest()->getParam('id', '');
|
| 60 |
+
$rating = $this->getRequest()->getParam('rating', 0);
|
| 61 |
+
$callback = $this->getRequest()->getParam('callback', '');
|
| 62 |
+
$callback = preg_replace("/[^0-9a-zA-Z\$_]/", "", $callback);
|
| 63 |
+
|
| 64 |
+
//
|
| 65 |
+
try
|
| 66 |
+
{
|
| 67 |
+
$model->load($id, $sku);
|
| 68 |
+
$data = $model->setRating($rating);
|
| 69 |
+
}
|
| 70 |
+
catch(Exception $e)
|
| 71 |
+
{
|
| 72 |
+
$data = array(
|
| 73 |
+
'error' => array(
|
| 74 |
+
'message' => $e->getMessage()
|
| 75 |
+
)
|
| 76 |
+
);
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
+
//
|
| 80 |
+
$json = Zend_Json::encode($data);
|
| 81 |
+
$jsonp = "{$callback}({$json})";
|
| 82 |
+
|
| 83 |
+
$this->getResponse()->clearAllHeaders();
|
| 84 |
+
$this->getResponse()->setHeader('Content-Length', strlen($jsonp));
|
| 85 |
+
$this->getResponse()->setHeader('Content-Type', 'text/plain');
|
| 86 |
+
$this->getResponse()->sendHeaders();
|
| 87 |
+
|
| 88 |
+
echo $jsonp;
|
| 89 |
+
|
| 90 |
+
exit;
|
| 91 |
+
}
|
| 92 |
+
|
| 93 |
+
public function callbackAction()
|
| 94 |
+
{
|
| 95 |
+
$data = $this->_getData();
|
| 96 |
+
$model = new Gateway3D_PersonaliseIt_Model_Product_Callback($data);
|
| 97 |
+
|
| 98 |
+
$sku = $this->getRequest()->getParam('sku', '');
|
| 99 |
+
$id = $this->getRequest()->getParam('id', '');
|
| 100 |
+
|
| 101 |
+
// Fallback to SKU specified in data object
|
| 102 |
+
if(!$id && !$sku && isset($data['sku']))
|
| 103 |
+
{
|
| 104 |
+
$sku = $data['sku'];
|
| 105 |
+
}
|
| 106 |
+
|
| 107 |
+
// Load the model
|
| 108 |
+
$model->load($id, $sku);
|
| 109 |
+
|
| 110 |
+
//
|
| 111 |
+
$this->loadLayout();
|
| 112 |
+
|
| 113 |
+
$block = $this->getLayout()->getBlock('root');
|
| 114 |
+
|
| 115 |
+
//
|
| 116 |
+
try
|
| 117 |
+
{
|
| 118 |
+
$model->process();
|
| 119 |
+
|
| 120 |
+
$block->setData('message', __('Please wait while we download your custom design to the shopping basket...'));
|
| 121 |
+
$block->setData('redirect', Mage::getUrl('checkout/cart'));
|
| 122 |
+
|
| 123 |
+
}
|
| 124 |
+
catch(Exception $e)
|
| 125 |
+
{
|
| 126 |
+
$block->setData('message', $e->getMessage());
|
| 127 |
+
$block->setData('redirect', $model->getProduct()->getProductUrl());
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
//
|
| 131 |
+
|
| 132 |
+
$this->renderLayout();
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
private function _getData()
|
| 136 |
+
{
|
| 137 |
+
$type = $_SERVER['CONTENT_TYPE'];
|
| 138 |
+
|
| 139 |
+
switch($type)
|
| 140 |
+
{
|
| 141 |
+
case 'application/json':
|
| 142 |
+
$json = $this->getRequest()->getRawBody();
|
| 143 |
+
break;
|
| 144 |
+
|
| 145 |
+
case 'application/x-www-form-urlencoded':
|
| 146 |
+
$json = $_POST['data'];
|
| 147 |
+
break;
|
| 148 |
+
|
| 149 |
+
default:
|
| 150 |
+
throw new Exception('Invalid content-type');
|
| 151 |
+
}
|
| 152 |
+
|
| 153 |
+
$data = Zend_Json::decode($json);
|
| 154 |
+
|
| 155 |
+
return $data;
|
| 156 |
+
}
|
| 157 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/controllers/ProductsController.php
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2013 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_ProductsController
|
| 11 |
+
extends Mage_Core_Controller_Front_Action
|
| 12 |
+
{
|
| 13 |
+
/**
|
| 14 |
+
* /product-selector/products/
|
| 15 |
+
*/
|
| 16 |
+
public function indexAction()
|
| 17 |
+
{
|
| 18 |
+
$this->loadLayout();
|
| 19 |
+
$this->renderLayout();
|
| 20 |
+
}
|
| 21 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/controllers/StatusController.php
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2013 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_StatusController
|
| 11 |
+
extends Mage_Core_Controller_Front_Action
|
| 12 |
+
{
|
| 13 |
+
/**
|
| 14 |
+
* /personalise-it/status/callback/
|
| 15 |
+
*/
|
| 16 |
+
public function callbackAction()
|
| 17 |
+
{
|
| 18 |
+
$model = new Gateway3D_PersonaliseIt_Model_Status_Callback();
|
| 19 |
+
|
| 20 |
+
$ref = $this->getRequest()->getParam('ref', '');
|
| 21 |
+
|
| 22 |
+
$request = Zend_Json::decode($this->getRequest()->getRawBody());
|
| 23 |
+
$status = @$request['status'];
|
| 24 |
+
$statusName = @$request['status_name'];
|
| 25 |
+
|
| 26 |
+
//
|
| 27 |
+
try
|
| 28 |
+
{
|
| 29 |
+
$model->load($ref);
|
| 30 |
+
$response = $model->update($status, $statusName);
|
| 31 |
+
}
|
| 32 |
+
catch(Exception $e)
|
| 33 |
+
{
|
| 34 |
+
$response = array(
|
| 35 |
+
'error' => array(
|
| 36 |
+
'message' => $e->getMessage()
|
| 37 |
+
)
|
| 38 |
+
);
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
//
|
| 42 |
+
$json = Zend_Json::encode($response);
|
| 43 |
+
|
| 44 |
+
$this->getResponse()->clearAllHeaders();
|
| 45 |
+
$this->getResponse()->setHeader('Content-Type', 'application/json');
|
| 46 |
+
$this->getResponse()->sendHeaders();
|
| 47 |
+
|
| 48 |
+
echo $json;
|
| 49 |
+
|
| 50 |
+
exit;
|
| 51 |
+
}
|
| 52 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/etc/config.xml
ADDED
|
@@ -0,0 +1,165 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<!--
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2013 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
-->
|
| 10 |
+
|
| 11 |
+
<config>
|
| 12 |
+
<modules>
|
| 13 |
+
<Gateway3D_PersonaliseIt>
|
| 14 |
+
<version>1.6.0.0</version>
|
| 15 |
+
</Gateway3D_PersonaliseIt>
|
| 16 |
+
</modules>
|
| 17 |
+
<global>
|
| 18 |
+
<models>
|
| 19 |
+
<personaliseit>
|
| 20 |
+
<class>Gateway3D_PersonaliseIt_Model</class>
|
| 21 |
+
<resourceModel>personaliseit_mysql4</resourceModel>
|
| 22 |
+
</personaliseit>
|
| 23 |
+
|
| 24 |
+
<catalog>
|
| 25 |
+
<rewrite>
|
| 26 |
+
<product_option>Gateway3D_PersonaliseIt_Model_Catalog_Product_Option</product_option>
|
| 27 |
+
</rewrite>
|
| 28 |
+
</catalog>
|
| 29 |
+
</models>
|
| 30 |
+
|
| 31 |
+
<helpers>
|
| 32 |
+
<personaliseit>
|
| 33 |
+
<class>Gateway3D_PersonaliseIt_Helper</class>
|
| 34 |
+
</personaliseit>
|
| 35 |
+
</helpers>
|
| 36 |
+
|
| 37 |
+
<resources>
|
| 38 |
+
<personaliseit_setup>
|
| 39 |
+
<setup>
|
| 40 |
+
<module>Gateway3D_PersonaliseIt</module>
|
| 41 |
+
<class>Gateway3D_PersonaliseIt_Model_Resource_Eav_Mysql4_Setup</class>
|
| 42 |
+
</setup>
|
| 43 |
+
<connection>
|
| 44 |
+
<use>core_setup</use>
|
| 45 |
+
</connection>
|
| 46 |
+
</personaliseit_setup>
|
| 47 |
+
<personaliseit_write>
|
| 48 |
+
<connection>
|
| 49 |
+
<use>core_write</use>
|
| 50 |
+
</connection>
|
| 51 |
+
</personaliseit_write>
|
| 52 |
+
<personaliseit_read>
|
| 53 |
+
<connection>
|
| 54 |
+
<use>core_read</use>
|
| 55 |
+
</connection>
|
| 56 |
+
</personaliseit_read>
|
| 57 |
+
</resources>
|
| 58 |
+
|
| 59 |
+
<catalog>
|
| 60 |
+
<product>
|
| 61 |
+
<options>
|
| 62 |
+
<custom>
|
| 63 |
+
<groups>
|
| 64 |
+
<hidden translate="label" module="personaliseit">
|
| 65 |
+
<label>Hidden</label>
|
| 66 |
+
<render>adminhtml/catalog_product_edit_tab_options_type_text</render>
|
| 67 |
+
|
| 68 |
+
<types>
|
| 69 |
+
<hidden translate="label" module="personaliseit">
|
| 70 |
+
<label>Hidden</label>
|
| 71 |
+
</hidden>
|
| 72 |
+
</types>
|
| 73 |
+
</hidden>
|
| 74 |
+
</groups>
|
| 75 |
+
</custom>
|
| 76 |
+
</options>
|
| 77 |
+
</product>
|
| 78 |
+
</catalog>
|
| 79 |
+
|
| 80 |
+
<blocks>
|
| 81 |
+
<adminhtml>
|
| 82 |
+
<rewrite>
|
| 83 |
+
<catalog_product_edit_tab_options>Gateway3D_PersonaliseIt_Block_Adminhtml_Catalog_Product_Edit_Tab_Options</catalog_product_edit_tab_options>
|
| 84 |
+
</rewrite>
|
| 85 |
+
<rewrite>
|
| 86 |
+
<catalog_product_edit_tab_options_option>Gateway3D_PersonaliseIt_Block_Adminhtml_Catalog_Product_Edit_Tab_Options_Option</catalog_product_edit_tab_options_option>
|
| 87 |
+
</rewrite>
|
| 88 |
+
</adminhtml>
|
| 89 |
+
|
| 90 |
+
<catalog>
|
| 91 |
+
<rewrite>
|
| 92 |
+
<product_view_options>Gateway3D_PersonaliseIt_Block_Product_View_Options</product_view_options>
|
| 93 |
+
</rewrite>
|
| 94 |
+
</catalog>
|
| 95 |
+
</blocks>
|
| 96 |
+
</global>
|
| 97 |
+
<frontend>
|
| 98 |
+
<routers>
|
| 99 |
+
<personaliseit>
|
| 100 |
+
<use>standard</use>
|
| 101 |
+
<args>
|
| 102 |
+
<module>Gateway3D_PersonaliseIt</module>
|
| 103 |
+
<frontName>personalise-it</frontName>
|
| 104 |
+
</args>
|
| 105 |
+
</personaliseit>
|
| 106 |
+
</routers>
|
| 107 |
+
<layout>
|
| 108 |
+
<updates>
|
| 109 |
+
<personaliseit>
|
| 110 |
+
<file>personaliseit.xml</file>
|
| 111 |
+
</personaliseit>
|
| 112 |
+
</updates>
|
| 113 |
+
</layout>
|
| 114 |
+
</frontend>
|
| 115 |
+
<adminhtml>
|
| 116 |
+
<layout>
|
| 117 |
+
<updates>
|
| 118 |
+
<personaliseit>
|
| 119 |
+
<file>personaliseit.xml</file>
|
| 120 |
+
</personaliseit>
|
| 121 |
+
</updates>
|
| 122 |
+
</layout>
|
| 123 |
+
</adminhtml>
|
| 124 |
+
<crontab>
|
| 125 |
+
<jobs>
|
| 126 |
+
<personaliseit>
|
| 127 |
+
<schedule>
|
| 128 |
+
<cron_expr>*/10 * * * *</cron_expr>
|
| 129 |
+
</schedule>
|
| 130 |
+
<run>
|
| 131 |
+
<model>personaliseit/cron_delayedPrintJob::start</model>
|
| 132 |
+
<model>personaliseit/cron_sl::start</model>
|
| 133 |
+
</run>
|
| 134 |
+
</personaliseit>
|
| 135 |
+
</jobs>
|
| 136 |
+
</crontab>
|
| 137 |
+
|
| 138 |
+
<admin>
|
| 139 |
+
<routers>
|
| 140 |
+
<adminhtml>
|
| 141 |
+
<args>
|
| 142 |
+
<modules>
|
| 143 |
+
<Gateway3D_PersonaliseIt before="Mage_Adminhtml">Gateway3D_PersonaliseIt</Gateway3D_PersonaliseIt>
|
| 144 |
+
</modules>
|
| 145 |
+
</args>
|
| 146 |
+
</adminhtml>
|
| 147 |
+
</routers>
|
| 148 |
+
</admin>
|
| 149 |
+
|
| 150 |
+
<default>
|
| 151 |
+
<general>
|
| 152 |
+
<personaliseit-delayed-preview>
|
| 153 |
+
<api_path>https://my.gateway3d.com/acp/api/p/2/print-job</api_path>
|
| 154 |
+
</personaliseit-delayed-preview>
|
| 155 |
+
|
| 156 |
+
<personaliseit-sl>
|
| 157 |
+
<api_path>https://my.gateway3d.com/acp/api/sl/2.1/order</api_path>
|
| 158 |
+
</personaliseit-sl>
|
| 159 |
+
|
| 160 |
+
<personaliseit-cpp>
|
| 161 |
+
<api_path>https://my.gateway3d.com/acp/api/</api_path>
|
| 162 |
+
</personaliseit-cpp>
|
| 163 |
+
</general>
|
| 164 |
+
</default>
|
| 165 |
+
</config>
|
app/code/local/Gateway3D/PersonaliseIt/etc/system.xml
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<!--
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2013 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
-->
|
| 10 |
+
|
| 11 |
+
<config>
|
| 12 |
+
<sections>
|
| 13 |
+
<general>
|
| 14 |
+
<groups>
|
| 15 |
+
<personaliseit-product-selector translate="label" module="personaliseit">
|
| 16 |
+
<label>G3D Personalise-iT Product Selector Settings</label>
|
| 17 |
+
<frontend_type>text</frontend_type>
|
| 18 |
+
<sort_order>1</sort_order>
|
| 19 |
+
<show_in_default>1</show_in_default>
|
| 20 |
+
<show_in_website>1</show_in_website>
|
| 21 |
+
<show_in_store>0</show_in_store>
|
| 22 |
+
<fields>
|
| 23 |
+
<iframe_url translate="label">
|
| 24 |
+
<label>iFrame URL</label>
|
| 25 |
+
<frontend_type>text</frontend_type>
|
| 26 |
+
<sort_order>4</sort_order>
|
| 27 |
+
<show_in_default>1</show_in_default>
|
| 28 |
+
<show_in_website>1</show_in_website>
|
| 29 |
+
<show_in_store>0</show_in_store>
|
| 30 |
+
</iframe_url>
|
| 31 |
+
|
| 32 |
+
<mobile_iframe_url translate="label">
|
| 33 |
+
<label>Mobile iFrame URL</label>
|
| 34 |
+
<frontend_type>text</frontend_type>
|
| 35 |
+
<sort_order>8</sort_order>
|
| 36 |
+
<show_in_default>1</show_in_default>
|
| 37 |
+
<show_in_website>1</show_in_website>
|
| 38 |
+
<show_in_store>0</show_in_store>
|
| 39 |
+
</mobile_iframe_url>
|
| 40 |
+
</fields>
|
| 41 |
+
</personaliseit-product-selector>
|
| 42 |
+
|
| 43 |
+
<personaliseit-sl translate="label" module="personaliseit">
|
| 44 |
+
<label>G3D Personalise-iT Supplier Link Settings</label>
|
| 45 |
+
<frontend_type>text</frontend_type>
|
| 46 |
+
<sort_order>1</sort_order>
|
| 47 |
+
<show_in_default>1</show_in_default>
|
| 48 |
+
<show_in_website>1</show_in_website>
|
| 49 |
+
<show_in_store>0</show_in_store>
|
| 50 |
+
<fields>
|
| 51 |
+
<api_path translate="label">
|
| 52 |
+
<label>API Path</label>
|
| 53 |
+
<frontend_type>text</frontend_type>
|
| 54 |
+
<sort_order>30</sort_order>
|
| 55 |
+
<show_in_default>1</show_in_default>
|
| 56 |
+
<show_in_website>1</show_in_website>
|
| 57 |
+
<show_in_store>0</show_in_store>
|
| 58 |
+
</api_path>
|
| 59 |
+
<api_key translate="label">
|
| 60 |
+
<label>API Key</label>
|
| 61 |
+
<frontend_type>text</frontend_type>
|
| 62 |
+
<sort_order>35</sort_order>
|
| 63 |
+
<show_in_default>1</show_in_default>
|
| 64 |
+
<show_in_website>1</show_in_website>
|
| 65 |
+
<show_in_store>0</show_in_store>
|
| 66 |
+
<validate>required-entry validate-length minimum-length-27 maximum-length-27</validate>
|
| 67 |
+
</api_key>
|
| 68 |
+
<default_order_status translate="label">
|
| 69 |
+
<label>Default Order Status</label>
|
| 70 |
+
<frontend_type>select</frontend_type>
|
| 71 |
+
<sort_order>40</sort_order>
|
| 72 |
+
<show_in_default>1</show_in_default>
|
| 73 |
+
<show_in_website>1</show_in_website>
|
| 74 |
+
<show_in_store>0</show_in_store>
|
| 75 |
+
<source_model>personaliseit/source_orderstatus</source_model>
|
| 76 |
+
</default_order_status>
|
| 77 |
+
<enable_order_status_polling translate="label">
|
| 78 |
+
<label>Enable Order Status Polling (Legacy)</label>
|
| 79 |
+
<frontend_type>select</frontend_type>
|
| 80 |
+
<sort_order>45</sort_order>
|
| 81 |
+
<show_in_default>1</show_in_default>
|
| 82 |
+
<show_in_website>1</show_in_website>
|
| 83 |
+
<show_in_store>0</show_in_store>
|
| 84 |
+
<source_model>adminhtml/system_config_source_yesno</source_model>
|
| 85 |
+
</enable_order_status_polling>
|
| 86 |
+
</fields>
|
| 87 |
+
</personaliseit-sl>
|
| 88 |
+
|
| 89 |
+
<personaliseit-delayed-preview translate="label" module="personaliseit">
|
| 90 |
+
<label>G3D Personalise-iT Delayed Preview Settings</label>
|
| 91 |
+
<frontend_type>text</frontend_type>
|
| 92 |
+
<sort_order>1</sort_order>
|
| 93 |
+
<show_in_default>1</show_in_default>
|
| 94 |
+
<show_in_website>1</show_in_website>
|
| 95 |
+
<show_in_store>0</show_in_store>
|
| 96 |
+
<fields>
|
| 97 |
+
<api_path translate="label">
|
| 98 |
+
<label>API Path</label>
|
| 99 |
+
<frontend_type>text</frontend_type>
|
| 100 |
+
<sort_order>30</sort_order>
|
| 101 |
+
<show_in_default>1</show_in_default>
|
| 102 |
+
<show_in_website>1</show_in_website>
|
| 103 |
+
<show_in_store>0</show_in_store>
|
| 104 |
+
</api_path>
|
| 105 |
+
</fields>
|
| 106 |
+
</personaliseit-delayed-preview>
|
| 107 |
+
|
| 108 |
+
<personaliseit-cpp translate="label" module="personaliseit">
|
| 109 |
+
<label>G3D CPP Settings</label>
|
| 110 |
+
<frontend_type>text</frontend_type>
|
| 111 |
+
<sort_order>1</sort_order>
|
| 112 |
+
<show_in_default>1</show_in_default>
|
| 113 |
+
<show_in_website>1</show_in_website>
|
| 114 |
+
<show_in_store>0</show_in_store>
|
| 115 |
+
<fields>
|
| 116 |
+
<api_path translate="label">
|
| 117 |
+
<label>API Path</label>
|
| 118 |
+
<frontend_type>text</frontend_type>
|
| 119 |
+
<sort_order>30</sort_order>
|
| 120 |
+
<show_in_default>1</show_in_default>
|
| 121 |
+
<show_in_website>1</show_in_website>
|
| 122 |
+
<show_in_store>0</show_in_store>
|
| 123 |
+
</api_path>
|
| 124 |
+
</fields>
|
| 125 |
+
</personaliseit-cpp>
|
| 126 |
+
</groups>
|
| 127 |
+
</general>
|
| 128 |
+
</sections>
|
| 129 |
+
</config>
|
| 130 |
+
|
app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-install-1.0.0.php
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
$installer = $this;
|
| 4 |
+
$installer->installEntities();
|
| 5 |
+
|
app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-upgrade-1.0.0-1.1.0.php
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
$installer = $this;
|
| 4 |
+
|
| 5 |
+
$installer->addAttribute('catalog_product', 'personaliseit_gl_iframe_url', array(
|
| 6 |
+
'section' =>'general',
|
| 7 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 8 |
+
'label' => 'WebGL iFrame URL',
|
| 9 |
+
'type' => 'varchar',
|
| 10 |
+
'input' => 'text',
|
| 11 |
+
'default' => '',
|
| 12 |
+
'class' => '',
|
| 13 |
+
'backend' => '',
|
| 14 |
+
'frontend' => '',
|
| 15 |
+
'source' => '',
|
| 16 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 17 |
+
'visible' => true,
|
| 18 |
+
'required' => false,
|
| 19 |
+
'user_defined' => false,
|
| 20 |
+
'searchable' => false,
|
| 21 |
+
'filterable' => false,
|
| 22 |
+
'comparable' => false,
|
| 23 |
+
'visible_on_front' => false,
|
| 24 |
+
'visible_in_advanced_search' => false,
|
| 25 |
+
'unique' => false
|
| 26 |
+
));
|
| 27 |
+
|
| 28 |
+
$installer->addAttribute('catalog_product', 'personaliseit_fl_iframe_url', array(
|
| 29 |
+
'section' =>'general',
|
| 30 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 31 |
+
'label' => 'Flash iFrame URL',
|
| 32 |
+
'type' => 'varchar',
|
| 33 |
+
'input' => 'text',
|
| 34 |
+
'default' => '',
|
| 35 |
+
'class' => '',
|
| 36 |
+
'backend' => '',
|
| 37 |
+
'frontend' => '',
|
| 38 |
+
'source' => '',
|
| 39 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 40 |
+
'visible' => true,
|
| 41 |
+
'required' => false,
|
| 42 |
+
'user_defined' => false,
|
| 43 |
+
'searchable' => false,
|
| 44 |
+
'filterable' => false,
|
| 45 |
+
'comparable' => false,
|
| 46 |
+
'visible_on_front' => false,
|
| 47 |
+
'visible_in_advanced_search' => false,
|
| 48 |
+
'unique' => false
|
| 49 |
+
));
|
| 50 |
+
|
| 51 |
+
$installer->addAttribute('catalog_product', 'easypromo3d_url', array(
|
| 52 |
+
'section' => 'general',
|
| 53 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 54 |
+
'label' => 'Legacy Easypromo3D URL',
|
| 55 |
+
'type' => 'varchar',
|
| 56 |
+
'input' => 'text',
|
| 57 |
+
'default' => '',
|
| 58 |
+
'class' => '',
|
| 59 |
+
'backend' => '',
|
| 60 |
+
'frontend' => '',
|
| 61 |
+
'source' => '',
|
| 62 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 63 |
+
'visible' => true,
|
| 64 |
+
'required' => false,
|
| 65 |
+
'user_defined' => false,
|
| 66 |
+
'searchable' => false,
|
| 67 |
+
'filterable' => false,
|
| 68 |
+
'comparable' => false,
|
| 69 |
+
'visible_on_front' => false,
|
| 70 |
+
'visible_in_advanced_search' => false,
|
| 71 |
+
'unique' => false
|
| 72 |
+
));
|
| 73 |
+
|
| 74 |
+
$installer->addAttribute('catalog_product', 'personaliseit_company_ref_id', array(
|
| 75 |
+
'section' =>'general',
|
| 76 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 77 |
+
'label' => '(Supplier) Company Ref ID',
|
| 78 |
+
'type' => 'varchar',
|
| 79 |
+
'input' => 'text',
|
| 80 |
+
'default' => '',
|
| 81 |
+
'class' => '',
|
| 82 |
+
'backend' => '',
|
| 83 |
+
'frontend' => '',
|
| 84 |
+
'source' => '',
|
| 85 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 86 |
+
'visible' => true,
|
| 87 |
+
'required' => false,
|
| 88 |
+
'user_defined' => false,
|
| 89 |
+
'searchable' => false,
|
| 90 |
+
'filterable' => false,
|
| 91 |
+
'comparable' => false,
|
| 92 |
+
'visible_on_front' => false,
|
| 93 |
+
'visible_in_advanced_search' => false,
|
| 94 |
+
'unique' => false
|
| 95 |
+
));
|
| 96 |
+
|
| 97 |
+
$installer->addAttribute('catalog_product', 'personaliseit_pod_ref', array(
|
| 98 |
+
'section' =>'general',
|
| 99 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 100 |
+
'label' => 'Print-on-Demand Sample Ref',
|
| 101 |
+
'type' => 'varchar',
|
| 102 |
+
'input' => 'text',
|
| 103 |
+
'default' => '',
|
| 104 |
+
'class' => '',
|
| 105 |
+
'backend' => '',
|
| 106 |
+
'frontend' => '',
|
| 107 |
+
'source' => '',
|
| 108 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 109 |
+
'visible' => true,
|
| 110 |
+
'required' => false,
|
| 111 |
+
'user_defined' => false,
|
| 112 |
+
'searchable' => false,
|
| 113 |
+
'filterable' => false,
|
| 114 |
+
'comparable' => false,
|
| 115 |
+
'visible_on_front' => false,
|
| 116 |
+
'visible_in_advanced_search' => false,
|
| 117 |
+
'unique' => false
|
| 118 |
+
));
|
| 119 |
+
|
| 120 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'sent', 'int not null default 0');
|
| 121 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'shipped', 'int not null default 0');
|
| 122 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/order_item'), 'sl_order_id', 'int not null default 0');
|
app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-upgrade-1.1.1-1.1.2.php
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
$installer = $this;
|
| 4 |
+
|
| 5 |
+
$entityTypeId = $installer->getEntityTypeId('catalog_product');
|
| 6 |
+
|
| 7 |
+
$attributes = array(
|
| 8 |
+
'personaliseit_gl_iframe_url',
|
| 9 |
+
'personaliseit_fl_iframe_url',
|
| 10 |
+
'personaliseit_m_iframe_url',
|
| 11 |
+
'personaliseit_iframe_url',
|
| 12 |
+
'easypromo3d_url',
|
| 13 |
+
);
|
| 14 |
+
|
| 15 |
+
foreach($attributes as $attribute)
|
| 16 |
+
{
|
| 17 |
+
$idAttributeOldSelect = $this->getAttribute($entityTypeId, $attribute, 'attribute_id');
|
| 18 |
+
|
| 19 |
+
$installer->updateAttribute($entityTypeId, $idAttributeOldSelect, 'backend_type', 'text');
|
| 20 |
+
}
|
app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-upgrade-1.1.7.1-1.2.0.0.php
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
$installer = $this;
|
| 4 |
+
|
| 5 |
+
$installer->getConnection()->addColumn($installer->getTable('sales/order'), 'status_callback_ref', 'varchar(256) not null default ""');
|
app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-upgrade-1.2.0.3-1.3.0.0.php
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
$installer = $this;
|
| 4 |
+
|
| 5 |
+
$installer->addAttribute('catalog_product', 'personaliseit_is_plain', array(
|
| 6 |
+
'section' => 'general',
|
| 7 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 8 |
+
'label' => 'Is Plain?',
|
| 9 |
+
'type' => 'int',
|
| 10 |
+
'input' => 'boolean',
|
| 11 |
+
'default' => '',
|
| 12 |
+
'class' => '',
|
| 13 |
+
'backend' => '',
|
| 14 |
+
'frontend' => '',
|
| 15 |
+
'source' => 'eav/entity_attribute_source_table',
|
| 16 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 17 |
+
'visible' => true,
|
| 18 |
+
'required' => false,
|
| 19 |
+
'user_defined' => false,
|
| 20 |
+
'searchable' => false,
|
| 21 |
+
'filterable' => false,
|
| 22 |
+
'comparable' => false,
|
| 23 |
+
'visible_on_front' => false,
|
| 24 |
+
'visible_in_advanced_search' => false,
|
| 25 |
+
'unique' => false
|
| 26 |
+
));
|
app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-upgrade-1.3.5.4-1.3.6.0.php
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
$installer = $this;
|
| 4 |
+
|
| 5 |
+
$installer->addAttribute('catalog_product', 'personaliseit_use_mageid', array(
|
| 6 |
+
'section' => 'general',
|
| 7 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 8 |
+
'label' => 'Use Magento product ID in iFrame callbacks?',
|
| 9 |
+
'type' => 'int',
|
| 10 |
+
'input' => 'boolean',
|
| 11 |
+
'default' => '1',
|
| 12 |
+
'class' => '',
|
| 13 |
+
'backend' => '',
|
| 14 |
+
'frontend' => '',
|
| 15 |
+
'source' => 'eav/entity_attribute_source_table',
|
| 16 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 17 |
+
'visible' => true,
|
| 18 |
+
'required' => false,
|
| 19 |
+
'user_defined' => false,
|
| 20 |
+
'searchable' => false,
|
| 21 |
+
'filterable' => false,
|
| 22 |
+
'comparable' => false,
|
| 23 |
+
'visible_on_front' => false,
|
| 24 |
+
'visible_in_advanced_search' => false,
|
| 25 |
+
'unique' => false
|
| 26 |
+
));
|
app/code/local/Gateway3D/PersonaliseIt/sql/personaliseit_setup/mysql4-upgrade-1.3.6.0-1.4.0.0.php
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
$installer = $this;
|
| 4 |
+
|
| 5 |
+
$installer->addAttribute('catalog_product', 'personaliseit_dp_enabled', array(
|
| 6 |
+
'section' => 'general',
|
| 7 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 8 |
+
'label' => 'Enable delayed preview',
|
| 9 |
+
'type' => 'int',
|
| 10 |
+
'input' => 'boolean',
|
| 11 |
+
'default' => '0',
|
| 12 |
+
'class' => '',
|
| 13 |
+
'backend' => '',
|
| 14 |
+
'frontend' => '',
|
| 15 |
+
'source' => 'eav/entity_attribute_source_table',
|
| 16 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 17 |
+
'visible' => true,
|
| 18 |
+
'required' => false,
|
| 19 |
+
'user_defined' => false,
|
| 20 |
+
'searchable' => false,
|
| 21 |
+
'filterable' => false,
|
| 22 |
+
'comparable' => false,
|
| 23 |
+
'visible_on_front' => false,
|
| 24 |
+
'visible_in_advanced_search' => false,
|
| 25 |
+
'unique' => false
|
| 26 |
+
));
|
| 27 |
+
|
| 28 |
+
$installer->addAttribute('catalog_product', 'personaliseit_dp_pid', array(
|
| 29 |
+
'section' => 'general',
|
| 30 |
+
'group' => 'Gateway3D Personalise-iT',
|
| 31 |
+
'label' => 'Automatic print job creation product ID',
|
| 32 |
+
'type' => 'int',
|
| 33 |
+
'input' => 'text',
|
| 34 |
+
'default' => '0',
|
| 35 |
+
'class' => '',
|
| 36 |
+
'backend' => '',
|
| 37 |
+
'frontend' => '',
|
| 38 |
+
'source' => 'eav/entity_attribute_source_table',
|
| 39 |
+
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
|
| 40 |
+
'visible' => true,
|
| 41 |
+
'required' => false,
|
| 42 |
+
'user_defined' => false,
|
| 43 |
+
'searchable' => false,
|
| 44 |
+
'filterable' => false,
|
| 45 |
+
'comparable' => false,
|
| 46 |
+
'visible_on_front' => false,
|
| 47 |
+
'visible_in_advanced_search' => false,
|
| 48 |
+
'unique' => false
|
| 49 |
+
));
|
app/design/adminhtml/default/default/template/personaliseit/catalog/product/edit/options.phtml
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
| 8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
| 9 |
+
* It is also available through the world-wide-web at this URL:
|
| 10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
| 11 |
+
* If you did not receive a copy of the license and are unable to
|
| 12 |
+
* obtain it through the world-wide-web, please send an email
|
| 13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
| 14 |
+
*
|
| 15 |
+
* DISCLAIMER
|
| 16 |
+
*
|
| 17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
| 18 |
+
* versions in the future. If you wish to customize Magento for your
|
| 19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
| 20 |
+
*
|
| 21 |
+
* @category design
|
| 22 |
+
* @package default_default
|
| 23 |
+
* @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
|
| 24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
| 25 |
+
*/
|
| 26 |
+
?>
|
| 27 |
+
<div class="entry-edit custom-options product-custom-options">
|
| 28 |
+
<div id="dynamic-price-warrning" style="display:none">
|
| 29 |
+
<ul class="messages">
|
| 30 |
+
<li class="error-msg">
|
| 31 |
+
<ul>
|
| 32 |
+
<li><?php echo $this->__('Bundle with dynamic pricing cannot include custom defined options. Options will not be saved.') ?></li>
|
| 33 |
+
</ul>
|
| 34 |
+
</li>
|
| 35 |
+
</ul>
|
| 36 |
+
</div>
|
| 37 |
+
<div class="entry-edit-head">
|
| 38 |
+
<h4><?php echo Mage::helper('catalog')->__('Custom Options') ?></h4>
|
| 39 |
+
<div class="right">
|
| 40 |
+
<?php echo $this->getImportFromCppButtonHtml() ?>
|
| 41 |
+
<?php echo $this->getAddButtonHtml() ?>
|
| 42 |
+
</div>
|
| 43 |
+
</div>
|
| 44 |
+
|
| 45 |
+
<div id="product_options_container" class="box">
|
| 46 |
+
<div id="product_options_container_top"></div>
|
| 47 |
+
<?php echo $this->getOptionsBoxHtml() ?>
|
| 48 |
+
</div>
|
| 49 |
+
</div>
|
| 50 |
+
|
| 51 |
+
<script type="text/javascript">
|
| 52 |
+
// re-bind form elements onchange
|
| 53 |
+
varienWindowOnload(true);
|
| 54 |
+
//show error message
|
| 55 |
+
if ($('price_type')) {
|
| 56 |
+
if ($('price_type').value == '0' && $('dynamic-price-warrning')) {
|
| 57 |
+
$('dynamic-price-warrning').show();
|
| 58 |
+
}
|
| 59 |
+
}
|
| 60 |
+
</script>
|
app/design/adminhtml/default/default/template/personaliseit/item_column_renderer_name.phtml
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php if ($_item = $this->getItem()): ?>
|
| 2 |
+
<h5 class="title"><?php echo $this->htmlEscape($_item->getName()) ?></h5>
|
| 3 |
+
<div><strong><?php echo $this->helper('sales')->__('SKU') ?>:</strong> <?php echo implode('<br />', Mage::helper('catalog')->splitSku($this->htmlEscape($this->getSku()))); ?></div>
|
| 4 |
+
<dl class="item-options">
|
| 5 |
+
<?php foreach ($this->getOrderOptions() as $_option): ?>
|
| 6 |
+
<dt><?php echo $_option['label'] ?></dt>
|
| 7 |
+
<dd>
|
| 8 |
+
<?php if (isset($_option['custom_view']) && $_option['custom_view']): ?>
|
| 9 |
+
<?php echo $this->getCustomizedOptionValue($_option); ?>
|
| 10 |
+
<?php else:
|
| 11 |
+
$_prepend=''; $_append='';
|
| 12 |
+
if(preg_match('/^https?:/i',$_option['value'])){
|
| 13 |
+
$_prepend='<a target="_new" href="'.$this->htmlEscape($_option['value']).'">'; $_append='</a>';
|
| 14 |
+
}
|
| 15 |
+
?>
|
| 16 |
+
<?php echo $_prepend.Mage::helper('core/string')->truncate($_option['value'], 55, '', $_remainder).$_append;?>
|
| 17 |
+
<?php if ($_remainder):?>
|
| 18 |
+
... <span id="<?php echo $_id = 'id' . uniqid()?>"><?php echo $_remainder ?></span>
|
| 19 |
+
<script type="text/javascript">
|
| 20 |
+
$('<?php echo $_id ?>').hide();
|
| 21 |
+
$('<?php echo $_id ?>').up().observe('mouseover', function(){$('<?php echo $_id ?>').show();});
|
| 22 |
+
$('<?php echo $_id ?>').up().observe('mouseout', function(){$('<?php echo $_id ?>').hide();});
|
| 23 |
+
</script>
|
| 24 |
+
<?php endif;?>
|
| 25 |
+
<?php endif;?>
|
| 26 |
+
</dd>
|
| 27 |
+
<?php endforeach; ?>
|
| 28 |
+
</dl>
|
| 29 |
+
<?php echo $this->htmlEscape($_item->getDescription()) ?>
|
| 30 |
+
<?php endif; ?>
|
app/design/adminhtml/default/default/template/personaliseit/option.phtml
ADDED
|
@@ -0,0 +1,370 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
| 8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
| 9 |
+
* It is also available through the world-wide-web at this URL:
|
| 10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
| 11 |
+
* If you did not receive a copy of the license and are unable to
|
| 12 |
+
* obtain it through the world-wide-web, please send an email
|
| 13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
| 14 |
+
*
|
| 15 |
+
* DISCLAIMER
|
| 16 |
+
*
|
| 17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
| 18 |
+
* versions in the future. If you wish to customize Magento for your
|
| 19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
| 20 |
+
*
|
| 21 |
+
* @category design
|
| 22 |
+
* @package default_default
|
| 23 |
+
* @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
|
| 24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
| 25 |
+
*/
|
| 26 |
+
?>
|
| 27 |
+
<?php echo $this->getTemplatesHtml() ?>
|
| 28 |
+
|
| 29 |
+
<script type="text/javascript">
|
| 30 |
+
//<![CDATA[
|
| 31 |
+
var firstStepTemplate = '<div class="option-box" id="option_{{id}}">'+
|
| 32 |
+
'<table id="<?php echo $this->getFieldId() ?>_{{id}}" class="option-header" cellpadding="0" cellspacing="0">'+
|
| 33 |
+
'<input type="hidden" id="<?php echo $this->getFieldId() ?>_{{id}}_is_delete" name="<?php echo $this->getFieldName() ?>[{{id}}][is_delete]" value="" />'+
|
| 34 |
+
'<input type="hidden" id="<?php echo $this->getFieldId() ?>_{{id}}_previous_type" name="<?php echo $this->getFieldName() ?>[{{id}}][previous_type]" value="{{type}}" />'+
|
| 35 |
+
'<input type="hidden" id="<?php echo $this->getFieldId() ?>_{{id}}_previous_group" name="<?php echo $this->getFieldName() ?>[{{id}}][previous_group]" value="" />'+
|
| 36 |
+
'<input type="hidden" id="<?php echo $this->getFieldId() ?>_{{id}}_id" name="<?php echo $this->getFieldName() ?>[{{id}}][id]" value="{{id}}" />'+
|
| 37 |
+
'<input type="hidden" id="<?php echo $this->getFieldId() ?>_{{id}}_option_id" name="<?php echo $this->getFieldName() ?>[{{id}}][option_id]" value="{{option_id}}" />'+
|
| 38 |
+
'<thead>'+
|
| 39 |
+
'<tr>'+
|
| 40 |
+
'<th class="opt-title"><?php echo Mage::helper('catalog')->__('Title') ?> <span class="required">*</span></th>'+
|
| 41 |
+
'<th class="opt-type"><?php echo Mage::helper('catalog')->__('Input Type') ?> <span class="required">*</span></th>'+
|
| 42 |
+
'<th class="opt-req"><?php echo $this->jsQuoteEscape(Mage::helper('catalog')->__('Is Required')) ?></th>'+
|
| 43 |
+
'<th class="opt-order"><?php echo Mage::helper('catalog')->__('Sort Order') ?></th>'+
|
| 44 |
+
'<th class="a-right"><?php echo $this->jsQuoteEscape($this->getDeleteButtonHtml()) ?></th>'+
|
| 45 |
+
'</tr>'+
|
| 46 |
+
'</thead>'+
|
| 47 |
+
'<tr>'+
|
| 48 |
+
'<td><input type="text" class="required-entry input-text" id="<?php echo $this->getFieldId() ?>_{{id}}_title" name="<?php echo $this->getFieldName() ?>[{{id}}][title]" value="{{title}}">{{checkboxScopeTitle}}</td>'+
|
| 49 |
+
'<td><?php echo $this->getTypeSelectHtml() ?></td>'+
|
| 50 |
+
'<td class="opt-req"><?php echo $this->getRequireSelectHtml() ?></td>'+
|
| 51 |
+
'<td><input type="text" class="validate-zero-or-greater input-text" name="<?php echo $this->getFieldName() ?>[{{id}}][sort_order]" value="{{sort_order}}"></td>'+
|
| 52 |
+
'<td> </td>'+
|
| 53 |
+
'</tr></table></div>';
|
| 54 |
+
|
| 55 |
+
var productOption = {
|
| 56 |
+
div : $('product_options_container_top'),
|
| 57 |
+
templateSyntax : /(^|.|\r|\n)({{(\w+)}})/,
|
| 58 |
+
templateText : firstStepTemplate,
|
| 59 |
+
itemCount : 1,
|
| 60 |
+
add : function(data) {
|
| 61 |
+
this.template = new Template(this.templateText, this.templateSyntax);
|
| 62 |
+
|
| 63 |
+
if(!data.id){
|
| 64 |
+
data = {};
|
| 65 |
+
data.id = this.itemCount;
|
| 66 |
+
data.type = '';
|
| 67 |
+
data.option_id = 0;
|
| 68 |
+
} else {
|
| 69 |
+
this.itemCount = data.item_count;
|
| 70 |
+
}
|
| 71 |
+
|
| 72 |
+
Element.insert(this.div, {'after':this.template.evaluate(data)});
|
| 73 |
+
|
| 74 |
+
//set selected type
|
| 75 |
+
if (data.type) {
|
| 76 |
+
$A($('<?php echo $this->getFieldId() ?>_'+data.id+'_type').options).each(function(option){
|
| 77 |
+
if (option.value==data.type) option.selected = true;
|
| 78 |
+
});
|
| 79 |
+
}
|
| 80 |
+
|
| 81 |
+
//set selected is_require
|
| 82 |
+
if (data.is_require) {
|
| 83 |
+
$A($('<?php echo $this->getFieldId() ?>_'+data.id+'_is_require').options).each(function(option){
|
| 84 |
+
if (option.value==data.is_require) option.selected = true;
|
| 85 |
+
});
|
| 86 |
+
}
|
| 87 |
+
|
| 88 |
+
if (data.checkboxScopeTitle) {
|
| 89 |
+
//set disabled
|
| 90 |
+
if ($('<?php echo $this->getFieldId() ?>_'+data.option_id+'_title') && data.scopeTitleDisabled) {
|
| 91 |
+
$('<?php echo $this->getFieldId() ?>_'+data.option_id+'_title').disable();
|
| 92 |
+
}
|
| 93 |
+
}
|
| 94 |
+
|
| 95 |
+
this.itemCount++;
|
| 96 |
+
this.bindRemoveButtons();
|
| 97 |
+
productOptionType.bindSelectInputType();
|
| 98 |
+
},
|
| 99 |
+
remove : function(event){
|
| 100 |
+
var element = $(Event.findElement(event, 'div'));
|
| 101 |
+
if(element){
|
| 102 |
+
$('product_'+element.readAttribute('id')+'_'+'is_delete').value = '1';
|
| 103 |
+
element.addClassName('no-display');
|
| 104 |
+
element.addClassName('ignore-validate');
|
| 105 |
+
element.hide();
|
| 106 |
+
}
|
| 107 |
+
},
|
| 108 |
+
bindRemoveButtons : function(){
|
| 109 |
+
var buttons = $$('div.product-custom-options .delete-product-option');
|
| 110 |
+
for(var i=0;i<buttons.length;i++){
|
| 111 |
+
if(!$(buttons[i]).binded){
|
| 112 |
+
$(buttons[i]).binded = true;
|
| 113 |
+
Event.observe(buttons[i], 'click', this.remove.bind(this));
|
| 114 |
+
}
|
| 115 |
+
}
|
| 116 |
+
var inputs = $$('div.product-custom-options button', 'div.product-custom-options input', 'div.product-custom-options select', 'div.product-custom-options textarea');
|
| 117 |
+
<?php if ($this->isReadonly()):?>
|
| 118 |
+
for (var i=0, l = inputs.length; i < l; i ++) {
|
| 119 |
+
inputs[i].disabled = true;
|
| 120 |
+
if (inputs[i].tagName.toLowerCase()=='button') {
|
| 121 |
+
inputs[i].addClassName('disabled');
|
| 122 |
+
}
|
| 123 |
+
}
|
| 124 |
+
<?php else: ?>
|
| 125 |
+
inputs.each(function(el) { Event.observe(el, 'change', el.setHasChanges.bind(el)); } )
|
| 126 |
+
<?php endif;?>
|
| 127 |
+
}
|
| 128 |
+
}
|
| 129 |
+
|
| 130 |
+
|
| 131 |
+
var productOptionType = {
|
| 132 |
+
templateSyntax : /(^|.|\r|\n)({{(\w+)}})/,
|
| 133 |
+
loadStepTwo : function(event){
|
| 134 |
+
var element = $(Event.findElement(event, 'select'));
|
| 135 |
+
|
| 136 |
+
var group = '';
|
| 137 |
+
var previousGroupElm = $(element.readAttribute('id').sub('_type', '_previous_group'));
|
| 138 |
+
|
| 139 |
+
switch(element.getValue()){
|
| 140 |
+
case 'field':
|
| 141 |
+
case 'area':
|
| 142 |
+
case 'hidden':
|
| 143 |
+
template = OptionTemplateText;
|
| 144 |
+
group = 'text';
|
| 145 |
+
break;
|
| 146 |
+
case 'file':
|
| 147 |
+
template = OptionTemplateFile;
|
| 148 |
+
group = 'file';
|
| 149 |
+
break;
|
| 150 |
+
case 'drop_down':
|
| 151 |
+
case 'radio':
|
| 152 |
+
case 'checkbox':
|
| 153 |
+
case 'multiple':
|
| 154 |
+
template = OptionTemplateSelect;
|
| 155 |
+
group = 'select';
|
| 156 |
+
break;
|
| 157 |
+
case 'date':
|
| 158 |
+
case 'date_time':
|
| 159 |
+
case 'time':
|
| 160 |
+
template = OptionTemplateDate;
|
| 161 |
+
group = 'date';
|
| 162 |
+
break;
|
| 163 |
+
default:
|
| 164 |
+
template = '';
|
| 165 |
+
group = 'unknown';
|
| 166 |
+
break;
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
if (previousGroupElm.getValue() != group) {
|
| 170 |
+
if ($(element.readAttribute('id')+'_'+previousGroupElm.getValue())) {
|
| 171 |
+
formElm = $(element.readAttribute('id')+'_'+previousGroupElm.getValue()).descendants();
|
| 172 |
+
formElm.each(function(elm){
|
| 173 |
+
if (elm.tagName == 'input' || elm.tagName == 'select') {
|
| 174 |
+
elm.name = '__delete__'+elm.readAttribute('name');
|
| 175 |
+
}
|
| 176 |
+
});
|
| 177 |
+
|
| 178 |
+
$(element.readAttribute('id')+'_'+previousGroupElm.getValue()).addClassName('no-display');
|
| 179 |
+
$(element.readAttribute('id')+'_'+previousGroupElm.getValue()).addClassName('ignore-validate');
|
| 180 |
+
$(element.readAttribute('id')+'_'+previousGroupElm.getValue()).hide();
|
| 181 |
+
}
|
| 182 |
+
|
| 183 |
+
previousGroupElm.value = group;
|
| 184 |
+
|
| 185 |
+
if ($(element.readAttribute('id')+'_'+group)) {
|
| 186 |
+
formElm = $(element.readAttribute('id')+'_'+group).descendants();
|
| 187 |
+
formElm.each(function(elm){
|
| 188 |
+
if (elm.match('input') || elm.match('select')) {
|
| 189 |
+
elm.name = elm.readAttribute('name').sub('__delete__', '');
|
| 190 |
+
}
|
| 191 |
+
});
|
| 192 |
+
$(element.readAttribute('id')+'_'+group).removeClassName('no-display');
|
| 193 |
+
$(element.readAttribute('id')+'_'+group).removeClassName('ignore-validate');
|
| 194 |
+
$(element.readAttribute('id')+'_'+group).show();
|
| 195 |
+
|
| 196 |
+
} else {
|
| 197 |
+
template = '<div id="'+element.readAttribute('id')+'_'+group+'" class="grid tier form-list">'+template+'</div><div id="'+element.readAttribute('id')+'_'+group+'_advice"></div';
|
| 198 |
+
this.secondTemplate = new Template(template, this.templateSyntax);
|
| 199 |
+
|
| 200 |
+
data = {};
|
| 201 |
+
if (!data.option_id) {
|
| 202 |
+
data = {};
|
| 203 |
+
data.option_id = $(element.readAttribute('id').sub('_type', '_id')).getValue();
|
| 204 |
+
}
|
| 205 |
+
|
| 206 |
+
Element.insert(element.readAttribute('id').sub('_type', ''), {'after':this.secondTemplate.evaluate(data)});
|
| 207 |
+
|
| 208 |
+
switch(element.getValue()){
|
| 209 |
+
case 'drop_down':
|
| 210 |
+
case 'radio':
|
| 211 |
+
case 'checkbox':
|
| 212 |
+
case 'multiple':
|
| 213 |
+
selectOptionType.bindAddButton();
|
| 214 |
+
break;
|
| 215 |
+
}
|
| 216 |
+
}
|
| 217 |
+
}
|
| 218 |
+
},
|
| 219 |
+
addDataToValues : function(data){
|
| 220 |
+
|
| 221 |
+
switch(data.type){
|
| 222 |
+
case 'field':
|
| 223 |
+
case 'area':
|
| 224 |
+
case 'hidden':
|
| 225 |
+
template = OptionTemplateText;
|
| 226 |
+
group = 'text';
|
| 227 |
+
break;
|
| 228 |
+
case 'file':
|
| 229 |
+
template = OptionTemplateFile;
|
| 230 |
+
group = 'file';
|
| 231 |
+
break;
|
| 232 |
+
case 'drop_down':
|
| 233 |
+
case 'radio':
|
| 234 |
+
case 'checkbox':
|
| 235 |
+
case 'multiple':
|
| 236 |
+
template = OptionTemplateSelect;
|
| 237 |
+
group = 'select';
|
| 238 |
+
break;
|
| 239 |
+
case 'date':
|
| 240 |
+
case 'date_time':
|
| 241 |
+
case 'time':
|
| 242 |
+
template = OptionTemplateDate;
|
| 243 |
+
group = 'date';
|
| 244 |
+
break;
|
| 245 |
+
}
|
| 246 |
+
|
| 247 |
+
$('<?php echo $this->getFieldId() ?>_'+data.id+'_previous_group').value = group;
|
| 248 |
+
|
| 249 |
+
template = '<div id="<?php echo $this->getFieldId() ?>_{{id}}_type_'+group+'" class="grid tier form-list">'+template+'</div><div id="<?php echo $this->getFieldId() ?>_{{id}}_type_'+group+'_advice"></div>';
|
| 250 |
+
|
| 251 |
+
this.secondTemplate = new Template(template, this.templateSyntax);
|
| 252 |
+
|
| 253 |
+
Element.insert($('<?php echo $this->getFieldId() ?>_'+data.option_id), {'after':this.secondTemplate.evaluate(data)});
|
| 254 |
+
|
| 255 |
+
if (data.checkboxScopePrice) {
|
| 256 |
+
//set disabled
|
| 257 |
+
if ($('<?php echo $this->getFieldId() ?>_'+data.option_id+'_price') && data.scopePriceDisabled) {
|
| 258 |
+
$('<?php echo $this->getFieldId() ?>_'+data.option_id+'_price').disable();
|
| 259 |
+
$('<?php echo $this->getFieldId() ?>_'+data.option_id+'_price_type').disable();
|
| 260 |
+
}
|
| 261 |
+
}
|
| 262 |
+
|
| 263 |
+
switch(data.type){
|
| 264 |
+
case 'drop_down':
|
| 265 |
+
case 'radio':
|
| 266 |
+
case 'checkbox':
|
| 267 |
+
case 'multiple':
|
| 268 |
+
data.optionValues.each(function(value) {
|
| 269 |
+
selectOptionType.add(value);
|
| 270 |
+
});
|
| 271 |
+
selectOptionType.bindAddButton();
|
| 272 |
+
break;
|
| 273 |
+
}
|
| 274 |
+
|
| 275 |
+
if (data.price_type) {
|
| 276 |
+
$A($('<?php echo $this->getFieldId() ?>_'+data.option_id+'_price_type').options).each(function(option){
|
| 277 |
+
if (option.value==data.price_type) option.selected = true;
|
| 278 |
+
});
|
| 279 |
+
}
|
| 280 |
+
|
| 281 |
+
},
|
| 282 |
+
bindSelectInputType : function(){
|
| 283 |
+
var types = $$('.select-product-option-type');
|
| 284 |
+
for(var i=0;i<types.length;i++){
|
| 285 |
+
if(!$(types[i]).binded){
|
| 286 |
+
$(types[i]).binded = true;
|
| 287 |
+
Event.observe(types[i], 'change', function(event){
|
| 288 |
+
productOptionType.loadStepTwo(event);
|
| 289 |
+
});
|
| 290 |
+
}
|
| 291 |
+
}
|
| 292 |
+
}
|
| 293 |
+
}
|
| 294 |
+
|
| 295 |
+
var productOptionScope = {
|
| 296 |
+
addScope : function(event){
|
| 297 |
+
var element = $(Event.element(event));
|
| 298 |
+
fieldToDisable = $(element.readAttribute('id').sub('_use_default', ''));
|
| 299 |
+
|
| 300 |
+
if (fieldToDisable.disabled) {
|
| 301 |
+
if (fieldToDisable.hasClassName('product-option-price')) {//need change to cheking value of element
|
| 302 |
+
$(fieldToDisable.readAttribute('id')+'_type').enable();
|
| 303 |
+
}
|
| 304 |
+
fieldToDisable.enable();
|
| 305 |
+
} else {
|
| 306 |
+
if (fieldToDisable.hasClassName('product-option-price')) {//need change to cheking value of element
|
| 307 |
+
$(fieldToDisable.readAttribute('id')+'_type').disable();
|
| 308 |
+
}
|
| 309 |
+
fieldToDisable.disable();
|
| 310 |
+
}
|
| 311 |
+
},
|
| 312 |
+
bindScopeCheckbox : function(){
|
| 313 |
+
var checkboxes = $$('.product-option-scope-checkbox');
|
| 314 |
+
for (var i=0;i<checkboxes.length;i++) {
|
| 315 |
+
if (!$(checkboxes[i]).binded) {
|
| 316 |
+
$(checkboxes[i]).binded = true;
|
| 317 |
+
Event.observe(checkboxes[i], 'click', this.addScope.bind(this));
|
| 318 |
+
}
|
| 319 |
+
}
|
| 320 |
+
}
|
| 321 |
+
}
|
| 322 |
+
|
| 323 |
+
if($('option_panel')){
|
| 324 |
+
$('option_panel').remove();
|
| 325 |
+
}
|
| 326 |
+
|
| 327 |
+
productOption.bindRemoveButtons();
|
| 328 |
+
|
| 329 |
+
if($('<?php echo $this->getAddButtonId() ?>')){
|
| 330 |
+
Event.observe('<?php echo $this->getAddButtonId() ?>', 'click', productOption.add.bind(productOption));
|
| 331 |
+
}
|
| 332 |
+
|
| 333 |
+
if($('<?php echo $this->getImportFromCppButtonId() ?>')) {
|
| 334 |
+
Event.observe('<?php echo $this->getImportFromCppButtonId() ?>', 'click', function() {
|
| 335 |
+
new Ajax.Request('<?php echo $this->getUrl('adminhtml/cpp/importOptions', array('id' => $this->getProduct()->getId())) ?>', {
|
| 336 |
+
type: 'POST',
|
| 337 |
+
|
| 338 |
+
onComplete: function(transport) {
|
| 339 |
+
window.location = '<?php echo $this->getUrl('*/*/edit', array(
|
| 340 |
+
'_current' => true,
|
| 341 |
+
'back' => 'edit',
|
| 342 |
+
'tab' => 'product_info_tabs_customer_options',
|
| 343 |
+
'active_tab' => null
|
| 344 |
+
)) ?>'.replace('isAjax=1', '');
|
| 345 |
+
}.bind(this)
|
| 346 |
+
});
|
| 347 |
+
});
|
| 348 |
+
}
|
| 349 |
+
|
| 350 |
+
//validation for selected input type
|
| 351 |
+
Validation.addAllThese([
|
| 352 |
+
['required-option-select', <?php echo $this->helper('core')->jsonEncode(Mage::helper('catalog')->__('Select type of option')) ?>, function(v, elm) {
|
| 353 |
+
if (elm.getValue() == '') {
|
| 354 |
+
return false;
|
| 355 |
+
}
|
| 356 |
+
return true;
|
| 357 |
+
}]]);
|
| 358 |
+
|
| 359 |
+
//adding data to templates
|
| 360 |
+
<?php foreach ($this->getOptionValues() as $_value): ?>
|
| 361 |
+
productOption.add(<?php echo $_value->toJson() ?>);
|
| 362 |
+
productOptionType.addDataToValues(<?php echo $_value->toJson() ?>);
|
| 363 |
+
<?php endforeach; ?>
|
| 364 |
+
|
| 365 |
+
//bind scope checkboxes
|
| 366 |
+
productOptionScope.bindScopeCheckbox();
|
| 367 |
+
//]]>
|
| 368 |
+
</script>
|
| 369 |
+
|
| 370 |
+
<div><?php if (!$this->isReadonly()):?><input type="hidden" name="affect_product_custom_options" value="1" /><?php endif;?></div>
|
app/design/frontend/base/default/layout/personaliseit.xml
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<layout>
|
| 3 |
+
<catalog_product_view>
|
| 4 |
+
<reference name="head">
|
| 5 |
+
<action method="addItem">
|
| 6 |
+
<type>js</type>
|
| 7 |
+
<name>personalise-it/delayed-preview.js</name>
|
| 8 |
+
</action>
|
| 9 |
+
|
| 10 |
+
<action method="addItem">
|
| 11 |
+
<type>js</type>
|
| 12 |
+
<name>prototype/window.js</name>
|
| 13 |
+
</action>
|
| 14 |
+
|
| 15 |
+
<action method="addItem">
|
| 16 |
+
<type>js_css</type>
|
| 17 |
+
<name>prototype/windows/themes/default.css</name>
|
| 18 |
+
</action>
|
| 19 |
+
|
| 20 |
+
<action method="addCss">
|
| 21 |
+
<name>lib/prototype/windows/themes/magento.css</name>
|
| 22 |
+
</action>
|
| 23 |
+
</reference>
|
| 24 |
+
|
| 25 |
+
<reference name="product.info.media">
|
| 26 |
+
<action method="setTemplate"><template>personaliseit/product/view/media.phtml</template></action>
|
| 27 |
+
</reference>
|
| 28 |
+
|
| 29 |
+
<reference name="product.info.addtocart">
|
| 30 |
+
<action method="setTemplate"><template>personaliseit/product/view/addtocart.phtml</template></action>
|
| 31 |
+
</reference>
|
| 32 |
+
</catalog_product_view>
|
| 33 |
+
|
| 34 |
+
<checkout_cart_index>
|
| 35 |
+
<reference name="checkout.cart">
|
| 36 |
+
<action method="addItemRender"><type>simple</type><block>checkout/cart_item_renderer</block><template>personaliseit/cart/item/default.phtml</template></action>
|
| 37 |
+
<action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>personaliseit/cart/item/default.phtml</template></action>
|
| 38 |
+
<action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>personaliseit/cart/item/default.phtml</template></action>
|
| 39 |
+
</reference>
|
| 40 |
+
</checkout_cart_index>
|
| 41 |
+
|
| 42 |
+
<personaliseit_products_index>
|
| 43 |
+
<remove name="right" />
|
| 44 |
+
<remove name="left" />
|
| 45 |
+
|
| 46 |
+
<reference name="root">
|
| 47 |
+
<action method="setTemplate">
|
| 48 |
+
<template>page/1column.phtml</template>
|
| 49 |
+
</action>
|
| 50 |
+
</reference>
|
| 51 |
+
|
| 52 |
+
<reference name="content">
|
| 53 |
+
<block type="core/template" name="personaliseit_products_index" template="personaliseit/products/index.phtml"></block>
|
| 54 |
+
</reference>
|
| 55 |
+
</personaliseit_products_index>
|
| 56 |
+
|
| 57 |
+
<personaliseit_product_callback>
|
| 58 |
+
<remove name="right" />
|
| 59 |
+
<remove name="left" />
|
| 60 |
+
|
| 61 |
+
<reference name="root">
|
| 62 |
+
<action method="setTemplate">
|
| 63 |
+
<template>page/1column.phtml</template>
|
| 64 |
+
</action>
|
| 65 |
+
</reference>
|
| 66 |
+
|
| 67 |
+
<reference name="content">
|
| 68 |
+
<block type="core/template" output="toHtml" name="root" template="personaliseit/product/callback.phtml"></block>
|
| 69 |
+
</reference>
|
| 70 |
+
</personaliseit_product_callback>
|
| 71 |
+
</layout>
|
app/design/frontend/base/default/template/personaliseit/cart/item/default.phtml
ADDED
|
@@ -0,0 +1,299 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
| 8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
| 9 |
+
* It is also available through the world-wide-web at this URL:
|
| 10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
| 11 |
+
* If you did not receive a copy of the license and are unable to
|
| 12 |
+
* obtain it through the world-wide-web, please send an email
|
| 13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
| 14 |
+
*
|
| 15 |
+
* DISCLAIMER
|
| 16 |
+
*
|
| 17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
| 18 |
+
* versions in the future. If you wish to customize Magento for your
|
| 19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
| 20 |
+
*
|
| 21 |
+
* @category design
|
| 22 |
+
* @package base_default
|
| 23 |
+
* @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
|
| 24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
| 25 |
+
*/
|
| 26 |
+
?>
|
| 27 |
+
<?php
|
| 28 |
+
$_item = $this->getItem();
|
| 29 |
+
$isVisibleProduct = $_item->getProduct()->isVisibleInSiteVisibility();
|
| 30 |
+
$canApplyMsrp = Mage::helper('catalog')->canApplyMsrp($_item->getProduct(), Mage_Catalog_Model_Product_Attribute_Source_Msrp_Type::TYPE_BEFORE_ORDER_CONFIRM);
|
| 31 |
+
|
| 32 |
+
$productThumbnail = $this->getProductThumbnail()->resize(75);
|
| 33 |
+
|
| 34 |
+
$productOptions = $_item->getProduct()->getOptions();
|
| 35 |
+
$options = $this->getOptionList();
|
| 36 |
+
|
| 37 |
+
if($productOptions && $options)
|
| 38 |
+
{
|
| 39 |
+
foreach($options as $option)
|
| 40 |
+
{
|
| 41 |
+
if(
|
| 42 |
+
isset($productOptions[$option['option_id']]) &&
|
| 43 |
+
$productOptions[$option['option_id']]->getSku() == "thumburl")
|
| 44 |
+
{
|
| 45 |
+
$productThumbnail = $option['value'];
|
| 46 |
+
}
|
| 47 |
+
}
|
| 48 |
+
}
|
| 49 |
+
?>
|
| 50 |
+
<tr>
|
| 51 |
+
<td><?php if ($this->hasProductUrl()):?><a href="<?php echo $this->getProductUrl() ?>" title="<?php echo $this->escapeHtml($this->getProductName()) ?>" class="product-image"><?php endif;?><img src="<?php echo $productThumbnail; ?>" width="75" height="75" alt="<?php echo $this->escapeHtml($this->getProductName()) ?>" /><?php if ($this->hasProductUrl()):?></a><?php endif;?></td>
|
| 52 |
+
<td>
|
| 53 |
+
<h2 class="product-name">
|
| 54 |
+
<?php if ($this->hasProductUrl()):?>
|
| 55 |
+
<a href="<?php echo $this->getProductUrl() ?>"><?php echo $this->escapeHtml($this->getProductName()) ?></a>
|
| 56 |
+
<?php else: ?>
|
| 57 |
+
<?php echo $this->escapeHtml($this->getProductName()) ?>
|
| 58 |
+
<?php endif; ?>
|
| 59 |
+
</h2>
|
| 60 |
+
<?php if ($_options = $this->getOptionList()):?>
|
| 61 |
+
<dl class="item-options">
|
| 62 |
+
<?php foreach ($_options as $_option) : ?>
|
| 63 |
+
|
| 64 |
+
<?php if($_option['option_type'] === Gateway3D_PersonaliseIt_Model_Catalog_Product_Option::OPTION_GROUP_HIDDEN) { continue; } ?>
|
| 65 |
+
|
| 66 |
+
<?php $_formatedOptionValue = $this->getFormatedOptionValue($_option) ?>
|
| 67 |
+
<dt><?php echo $this->escapeHtml($_option['label']) ?></dt>
|
| 68 |
+
<dd<?php if (isset($_formatedOptionValue['full_view'])): ?> class="truncated"<?php endif; ?>><?php echo $_formatedOptionValue['value'] ?>
|
| 69 |
+
<?php if (isset($_formatedOptionValue['full_view'])): ?>
|
| 70 |
+
<div class="truncated_full_value">
|
| 71 |
+
<dl class="item-options">
|
| 72 |
+
<dt><?php echo $this->escapeHtml($_option['label']) ?></dt>
|
| 73 |
+
<dd><?php echo $_formatedOptionValue['full_view'] ?></dd>
|
| 74 |
+
</dl>
|
| 75 |
+
</div>
|
| 76 |
+
<?php endif; ?>
|
| 77 |
+
</dd>
|
| 78 |
+
<?php endforeach; ?>
|
| 79 |
+
</dl>
|
| 80 |
+
<?php endif;?>
|
| 81 |
+
<?php if ($messages = $this->getMessages()): ?>
|
| 82 |
+
<?php foreach ($messages as $message): ?>
|
| 83 |
+
<p class="item-msg <?php echo $message['type'] ?>">* <?php echo $this->escapeHtml($message['text']) ?></p>
|
| 84 |
+
<?php endforeach; ?>
|
| 85 |
+
<?php endif; ?>
|
| 86 |
+
<?php $addInfoBlock = $this->getProductAdditionalInformationBlock(); ?>
|
| 87 |
+
<?php if ($addInfoBlock): ?>
|
| 88 |
+
<?php echo $addInfoBlock->setItem($_item)->toHtml() ?>
|
| 89 |
+
<?php endif;?>
|
| 90 |
+
</td>
|
| 91 |
+
<td class="a-center">
|
| 92 |
+
<?php if ($isVisibleProduct): ?>
|
| 93 |
+
<a href="<?php echo $this->getConfigureUrl() ?>" title="<?php echo $this->__('Edit item parameters') ?>"><?php echo $this->__('Edit') ?></a>
|
| 94 |
+
<?php endif ?>
|
| 95 |
+
</td>
|
| 96 |
+
<?php if ($this->helper('wishlist')->isAllowInCart()) : ?>
|
| 97 |
+
<td class="a-center">
|
| 98 |
+
<?php if ($isVisibleProduct): ?>
|
| 99 |
+
<a href="<?php echo $this->helper('wishlist')->getMoveFromCartUrl($_item->getId()); ?>" class="link-wishlist use-ajax"><?php echo $this->__('Move'); ?></a>
|
| 100 |
+
<?php endif ?>
|
| 101 |
+
</td>
|
| 102 |
+
<?php endif ?>
|
| 103 |
+
|
| 104 |
+
<?php if ($canApplyMsrp): ?>
|
| 105 |
+
<td class="a-right"<?php if ($this->helper('tax')->displayCartBothPrices()): ?> colspan="2"<?php endif; ?>>
|
| 106 |
+
<span class="cart-price">
|
| 107 |
+
<span class="cart-msrp-unit"><?php echo $this->__('See price before order confirmation.'); ?></span>
|
| 108 |
+
<?php $helpLinkId = 'cart-msrp-help-' . $_item->getId(); ?>
|
| 109 |
+
<a id="<?php echo $helpLinkId ?>" href="#" class="map-help-link"><?php echo $this->__("What's this?"); ?></a>
|
| 110 |
+
<script type="text/javascript">
|
| 111 |
+
Catalog.Map.addHelpLink($('<?php echo $helpLinkId ?>'), "<?php echo $this->__("What's this?") ?>");
|
| 112 |
+
</script>
|
| 113 |
+
</span>
|
| 114 |
+
</td>
|
| 115 |
+
<?php else: ?>
|
| 116 |
+
|
| 117 |
+
<?php if ($this->helper('tax')->displayCartPriceExclTax() || $this->helper('tax')->displayCartBothPrices()): ?>
|
| 118 |
+
<td class="a-right">
|
| 119 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 120 |
+
<span class="cart-tax-total" onclick="taxToggle('eunit-item-tax-details<?php echo $_item->getId(); ?>', this, 'cart-tax-total-expanded');">
|
| 121 |
+
<?php else: ?>
|
| 122 |
+
<span class="cart-price">
|
| 123 |
+
<?php endif; ?>
|
| 124 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 125 |
+
<?php echo $this->helper('checkout')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?>
|
| 126 |
+
<?php else: ?>
|
| 127 |
+
<?php echo $this->helper('checkout')->formatPrice($_item->getCalculationPrice()) ?>
|
| 128 |
+
<?php endif; ?>
|
| 129 |
+
|
| 130 |
+
</span>
|
| 131 |
+
|
| 132 |
+
|
| 133 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
| 134 |
+
|
| 135 |
+
<div class="cart-tax-info" id="eunit-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;">
|
| 136 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 137 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
| 138 |
+
<span class="weee"><?php echo $tax['title']; ?>: <?php echo Mage::helper('checkout')->formatPrice($tax['amount'],true,true); ?></span>
|
| 139 |
+
<?php endforeach; ?>
|
| 140 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 141 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
| 142 |
+
<span class="weee"><?php echo $tax['title']; ?>: <?php echo Mage::helper('checkout')->formatPrice($tax['amount_incl_tax'],true,true); ?></span>
|
| 143 |
+
<?php endforeach; ?>
|
| 144 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 145 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
| 146 |
+
<span class="weee"><?php echo $tax['title']; ?>: <?php echo Mage::helper('checkout')->formatPrice($tax['amount_incl_tax'],true,true); ?></span>
|
| 147 |
+
<?php endforeach; ?>
|
| 148 |
+
<?php endif; ?>
|
| 149 |
+
</div>
|
| 150 |
+
|
| 151 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 152 |
+
<div class="cart-tax-total" onclick="taxToggle('eunit-item-tax-details<?php echo $_item->getId(); ?>', this, 'cart-tax-total-expanded');">
|
| 153 |
+
<span class="weee"><?php echo Mage::helper('weee')->__('Total'); ?>: <?php echo $this->helper('checkout')->formatPrice($_item->getCalculationPrice()+$_item->getWeeeTaxAppliedAmount()+$_item->getWeeeTaxDisposition()); ?></span>
|
| 154 |
+
</div>
|
| 155 |
+
<?php endif; ?>
|
| 156 |
+
<?php endif; ?>
|
| 157 |
+
</td>
|
| 158 |
+
<?php endif; ?>
|
| 159 |
+
<?php if ($this->helper('tax')->displayCartPriceInclTax() || $this->helper('tax')->displayCartBothPrices()): ?>
|
| 160 |
+
<td>
|
| 161 |
+
<?php $_incl = $this->helper('checkout')->getPriceInclTax($_item); ?>
|
| 162 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 163 |
+
<span class="cart-tax-total" onclick="taxToggle('unit-item-tax-details<?php echo $_item->getId(); ?>', this, 'cart-tax-total-expanded');">
|
| 164 |
+
<?php else: ?>
|
| 165 |
+
<span class="cart-price">
|
| 166 |
+
<?php endif; ?>
|
| 167 |
+
|
| 168 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 169 |
+
<?php echo $this->helper('checkout')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?>
|
| 170 |
+
<?php else: ?>
|
| 171 |
+
<?php echo $this->helper('checkout')->formatPrice($_incl-$_item->getWeeeTaxDisposition()) ?>
|
| 172 |
+
<?php endif; ?>
|
| 173 |
+
|
| 174 |
+
</span>
|
| 175 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
| 176 |
+
|
| 177 |
+
<div class="cart-tax-info" id="unit-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;">
|
| 178 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 179 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
| 180 |
+
<span class="weee"><?php echo $tax['title']; ?>: <?php echo Mage::helper('checkout')->formatPrice($tax['amount'],true,true); ?></span>
|
| 181 |
+
<?php endforeach; ?>
|
| 182 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 183 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
| 184 |
+
<span class="weee"><?php echo $tax['title']; ?>: <?php echo Mage::helper('checkout')->formatPrice($tax['amount_incl_tax'],true,true); ?></span>
|
| 185 |
+
<?php endforeach; ?>
|
| 186 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 187 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
| 188 |
+
<span class="weee"><?php echo $tax['title']; ?>: <?php echo Mage::helper('checkout')->formatPrice($tax['amount_incl_tax'],true,true); ?></span>
|
| 189 |
+
<?php endforeach; ?>
|
| 190 |
+
<?php endif; ?>
|
| 191 |
+
</div>
|
| 192 |
+
|
| 193 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 194 |
+
<div class="cart-tax-total" onclick="taxToggle('unit-item-tax-details<?php echo $_item->getId(); ?>', this, 'cart-tax-total-expanded');">
|
| 195 |
+
<span class="weee"><?php echo Mage::helper('weee')->__('Total incl. tax'); ?>: <?php echo $this->helper('checkout')->formatPrice($_incl+$_item->getWeeeTaxAppliedAmount()); ?></span>
|
| 196 |
+
</div>
|
| 197 |
+
<?php endif; ?>
|
| 198 |
+
<?php endif; ?>
|
| 199 |
+
</td>
|
| 200 |
+
<?php endif; ?>
|
| 201 |
+
<?php endif; ?>
|
| 202 |
+
<td class="a-center">
|
| 203 |
+
<input name="cart[<?php echo $_item->getId() ?>][qty]" value="<?php echo $this->getQty() ?>" size="4" title="<?php echo $this->__('Qty') ?>" class="input-text qty" maxlength="12" />
|
| 204 |
+
</td>
|
| 205 |
+
<?php if (($this->helper('tax')->displayCartPriceExclTax() || $this->helper('tax')->displayCartBothPrices()) && !$_item->getNoSubtotal()): ?>
|
| 206 |
+
<td class="a-right">
|
| 207 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 208 |
+
<span class="cart-tax-total" onclick="taxToggle('esubtotal-item-tax-details<?php echo $_item->getId(); ?>', this, 'cart-tax-total-expanded');">
|
| 209 |
+
<?php else: ?>
|
| 210 |
+
<span class="cart-price">
|
| 211 |
+
<?php endif; ?>
|
| 212 |
+
|
| 213 |
+
<?php if ($canApplyMsrp): ?>
|
| 214 |
+
<span class="cart-msrp-subtotal">--</span>
|
| 215 |
+
<?php else: ?>
|
| 216 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 217 |
+
<?php echo $this->helper('checkout')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?>
|
| 218 |
+
<?php else: ?>
|
| 219 |
+
<?php echo $this->helper('checkout')->formatPrice($_item->getRowTotal()) ?>
|
| 220 |
+
<?php endif; ?>
|
| 221 |
+
<?php endif; ?>
|
| 222 |
+
|
| 223 |
+
</span>
|
| 224 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
| 225 |
+
|
| 226 |
+
<div class="cart-tax-info" id="esubtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;">
|
| 227 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 228 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
| 229 |
+
<span class="weee"><?php echo $tax['title']; ?>: <?php echo Mage::helper('checkout')->formatPrice($tax['row_amount'],true,true); ?></span>
|
| 230 |
+
<?php endforeach; ?>
|
| 231 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 232 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
| 233 |
+
<span class="weee"><?php echo $tax['title']; ?>: <?php echo Mage::helper('checkout')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span>
|
| 234 |
+
<?php endforeach; ?>
|
| 235 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 236 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
| 237 |
+
<span class="weee"><?php echo $tax['title']; ?>: <?php echo Mage::helper('checkout')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span>
|
| 238 |
+
<?php endforeach; ?>
|
| 239 |
+
<?php endif; ?>
|
| 240 |
+
</div>
|
| 241 |
+
|
| 242 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 243 |
+
<div class="cart-tax-total" onclick="taxToggle('esubtotal-item-tax-details<?php echo $_item->getId(); ?>', this, 'cart-tax-total-expanded');">
|
| 244 |
+
<span class="weee"><?php echo Mage::helper('weee')->__('Total'); ?>: <?php echo $this->helper('checkout')->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?></span>
|
| 245 |
+
</div>
|
| 246 |
+
<?php endif; ?>
|
| 247 |
+
<?php endif; ?>
|
| 248 |
+
</td>
|
| 249 |
+
<?php endif; ?>
|
| 250 |
+
<?php if (($this->helper('tax')->displayCartPriceInclTax() || $this->helper('tax')->displayCartBothPrices()) && !$_item->getNoSubtotal()): ?>
|
| 251 |
+
<td>
|
| 252 |
+
<?php $_incl = $this->helper('checkout')->getSubtotalInclTax($_item); ?>
|
| 253 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 254 |
+
<span class="cart-tax-total" onclick="taxToggle('subtotal-item-tax-details<?php echo $_item->getId(); ?>', this, 'cart-tax-total-expanded');">
|
| 255 |
+
<?php else: ?>
|
| 256 |
+
<span class="cart-price">
|
| 257 |
+
<?php endif; ?>
|
| 258 |
+
|
| 259 |
+
<?php if ($canApplyMsrp): ?>
|
| 260 |
+
<span class="cart-msrp-subtotal">--</span>
|
| 261 |
+
<?php else: ?>
|
| 262 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 263 |
+
<?php echo $this->helper('checkout')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?>
|
| 264 |
+
<?php else: ?>
|
| 265 |
+
<?php echo $this->helper('checkout')->formatPrice($_incl-$_item->getWeeeTaxRowDisposition()) ?>
|
| 266 |
+
<?php endif; ?>
|
| 267 |
+
<?php endif; ?>
|
| 268 |
+
|
| 269 |
+
</span>
|
| 270 |
+
|
| 271 |
+
|
| 272 |
+
<?php if (Mage::helper('weee')->getApplied($_item)): ?>
|
| 273 |
+
|
| 274 |
+
<div class="cart-tax-info" id="subtotal-item-tax-details<?php echo $_item->getId(); ?>" style="display:none;">
|
| 275 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 1, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 276 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
| 277 |
+
<span class="weee"><?php echo $tax['title']; ?>: <?php echo Mage::helper('checkout')->formatPrice($tax['row_amount'],true,true); ?></span>
|
| 278 |
+
<?php endforeach; ?>
|
| 279 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 280 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
| 281 |
+
<span class="weee"><?php echo $tax['title']; ?>: <?php echo Mage::helper('checkout')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span>
|
| 282 |
+
<?php endforeach; ?>
|
| 283 |
+
<?php elseif (Mage::helper('weee')->typeOfDisplay($_item, 4, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 284 |
+
<?php foreach (Mage::helper('weee')->getApplied($_item) as $tax): ?>
|
| 285 |
+
<span class="weee"><?php echo $tax['title']; ?>: <?php echo Mage::helper('checkout')->formatPrice($tax['row_amount_incl_tax'],true,true); ?></span>
|
| 286 |
+
<?php endforeach; ?>
|
| 287 |
+
<?php endif; ?>
|
| 288 |
+
</div>
|
| 289 |
+
|
| 290 |
+
<?php if (Mage::helper('weee')->typeOfDisplay($_item, 2, 'sales') && $_item->getWeeeTaxAppliedAmount()): ?>
|
| 291 |
+
<div class="cart-tax-total" onclick="taxToggle('subtotal-item-tax-details<?php echo $_item->getId(); ?>', this, 'cart-tax-total-expanded');">
|
| 292 |
+
<span class="weee"><?php echo Mage::helper('weee')->__('Total incl. tax'); ?>: <?php echo $this->helper('checkout')->formatPrice($_incl+$_item->getWeeeTaxAppliedRowAmount()); ?></span>
|
| 293 |
+
</div>
|
| 294 |
+
<?php endif; ?>
|
| 295 |
+
<?php endif; ?>
|
| 296 |
+
</td>
|
| 297 |
+
<?php endif; ?>
|
| 298 |
+
<td class="a-center"><a href="<?php echo $this->getDeleteUrl()?>" title="<?php echo $this->__('Remove item')?>" class="btn-remove btn-remove2"><?php echo $this->__('Remove item')?></a></td>
|
| 299 |
+
</tr>
|
app/design/frontend/base/default/template/personaliseit/product/callback.phtml
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<!DOCTYPE html>
|
| 2 |
+
<html>
|
| 3 |
+
<head>
|
| 4 |
+
<script>
|
| 5 |
+
setTimeout(function() {
|
| 6 |
+
window.top.location = "<?= $this->redirect ?>";
|
| 7 |
+
}, 250);
|
| 8 |
+
</script>
|
| 9 |
+
|
| 10 |
+
<title>Adding to Cart...</title>
|
| 11 |
+
</head>
|
| 12 |
+
<body>
|
| 13 |
+
<h2 style="font-family: Arial, Helvetica, sans-serif; font-size: 1.8em; color: #888"><?= $this->message ?></h2>
|
| 14 |
+
</body>
|
| 15 |
+
</html>
|
app/design/frontend/base/default/template/personaliseit/product/view/addtocart.phtml
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
| 8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
| 9 |
+
* It is also available through the world-wide-web at this URL:
|
| 10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
| 11 |
+
* If you did not receive a copy of the license and are unable to
|
| 12 |
+
* obtain it through the world-wide-web, please send an email
|
| 13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
| 14 |
+
*
|
| 15 |
+
* DISCLAIMER
|
| 16 |
+
*
|
| 17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
| 18 |
+
* versions in the future. If you wish to customize Magento for your
|
| 19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
| 20 |
+
*
|
| 21 |
+
* @category design
|
| 22 |
+
* @package base_default
|
| 23 |
+
* @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
|
| 24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
| 25 |
+
*/
|
| 26 |
+
?>
|
| 27 |
+
<?php $_product = $this->getProduct(); ?>
|
| 28 |
+
<?php $prevewButtonTitle = $this->__('Preview'); ?>
|
| 29 |
+
<?php $buttonTitle = $this->__('Add to Cart'); ?>
|
| 30 |
+
<?php if($_product->isSaleable()): ?>
|
| 31 |
+
<div class="add-to-cart">
|
| 32 |
+
<?php if(!$_product->isGrouped()): ?>
|
| 33 |
+
<label for="qty"><?php echo $this->__('Qty:') ?></label>
|
| 34 |
+
<input type="text" name="qty" id="qty" maxlength="12" value="<?php echo $this->getProductDefaultQty() * 1 ?>" title="<?php echo $this->__('Qty') ?>" class="input-text qty" />
|
| 35 |
+
<?php endif; ?>
|
| 36 |
+
<?php if($_product->personaliseit_dp_enabled): ?>
|
| 37 |
+
<button type="button" title="<?php echo $prevewButtonTitle ?>" class="button btn-cart" onclick="delayedPreview.preview()"><span><span><?php echo $prevewButtonTitle ?></span></span></button>
|
| 38 |
+
<?php endif; ?>
|
| 39 |
+
<button type="button" title="<?php echo $buttonTitle ?>" class="button btn-cart" onclick="productAddToCartForm.submit(this)"><span><span><?php echo $buttonTitle ?></span></span></button>
|
| 40 |
+
<?php echo $this->getChildHtml('', true, true) ?>
|
| 41 |
+
</div>
|
| 42 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/personaliseit/product/view/media.phtml
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
/**
|
| 3 |
+
* Magento
|
| 4 |
+
*
|
| 5 |
+
* NOTICE OF LICENSE
|
| 6 |
+
*
|
| 7 |
+
* This source file is subject to the Academic Free License (AFL 3.0)
|
| 8 |
+
* that is bundled with this package in the file LICENSE_AFL.txt.
|
| 9 |
+
* It is also available through the world-wide-web at this URL:
|
| 10 |
+
* http://opensource.org/licenses/afl-3.0.php
|
| 11 |
+
* If you did not receive a copy of the license and are unable to
|
| 12 |
+
* obtain it through the world-wide-web, please send an email
|
| 13 |
+
* to license@magentocommerce.com so we can send you a copy immediately.
|
| 14 |
+
*
|
| 15 |
+
* DISCLAIMER
|
| 16 |
+
*
|
| 17 |
+
* Do not edit or add to this file if you wish to upgrade Magento to newer
|
| 18 |
+
* versions in the future. If you wish to customize Magento for your
|
| 19 |
+
* needs please refer to http://www.magentocommerce.com for more information.
|
| 20 |
+
*
|
| 21 |
+
* @category design
|
| 22 |
+
* @package base_default
|
| 23 |
+
* @copyright Copyright (c) 2013 Magento Inc. (http://www.magentocommerce.com)
|
| 24 |
+
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
|
| 25 |
+
*/
|
| 26 |
+
|
| 27 |
+
/**
|
| 28 |
+
* Product media data template
|
| 29 |
+
*
|
| 30 |
+
* @see Mage_Catalog_Block_Product_View_Media
|
| 31 |
+
*/
|
| 32 |
+
?>
|
| 33 |
+
|
| 34 |
+
<?php
|
| 35 |
+
$product = $_product = $this->getProduct();
|
| 36 |
+
$_helper = $this->helper('catalog/output');
|
| 37 |
+
|
| 38 |
+
$messageEventHelper = new Gateway3D_PersonaliseIt_Helper_MessageEvent;
|
| 39 |
+
|
| 40 |
+
// Build EPA and callback URLs
|
| 41 |
+
$params = $product->personaliseit_use_mageid
|
| 42 |
+
? array('id' => $_product->getId())
|
| 43 |
+
: array();
|
| 44 |
+
|
| 45 |
+
$params['_nosid'] = true;
|
| 46 |
+
|
| 47 |
+
$epa = Mage::getUrl('personaliseit/product/epa', $params);
|
| 48 |
+
$callback = Mage::getUrl('personaliseit/product/callback', $params);
|
| 49 |
+
|
| 50 |
+
// Build URLs
|
| 51 |
+
$query = http_build_query(array(
|
| 52 |
+
'a2cpost' => 1,
|
| 53 |
+
'epa' => $epa,
|
| 54 |
+
'ep3dUrl' => $callback,
|
| 55 |
+
'guid' => $product->personaliseit_company_ref_id,
|
| 56 |
+
'meo' => $messageEventHelper->getOrigin(Mage::getBaseUrl()),
|
| 57 |
+
'mei' => $messageEventHelper->getId()
|
| 58 |
+
));
|
| 59 |
+
|
| 60 |
+
$urlParams = array(
|
| 61 |
+
'a2cpost' => 1,
|
| 62 |
+
'epa' => $epa,
|
| 63 |
+
'ep3dUrl' => $callback,
|
| 64 |
+
'guid' => $product->personaliseit_company_ref_id,
|
| 65 |
+
'meo' => $messageEventHelper->getOrigin(Mage::getBaseUrl()),
|
| 66 |
+
'mei' => $messageEventHelper->getId()
|
| 67 |
+
);
|
| 68 |
+
|
| 69 |
+
// URL fields and the order of preference.
|
| 70 |
+
$_urls = array(
|
| 71 |
+
'webgl' => 'personaliseit_gl_iframe_url',
|
| 72 |
+
'flash' => 'personaliseit_fl_iframe_url',
|
| 73 |
+
'mobile' => 'personaliseit_m_iframe_url',
|
| 74 |
+
'standard' => 'personaliseit_iframe_url',
|
| 75 |
+
'legacy' => 'easypromo3d_url',
|
| 76 |
+
);
|
| 77 |
+
|
| 78 |
+
$urls = array_map(function($u) use ($product, $query, $messageEventHelper, $urlParams)
|
| 79 |
+
{
|
| 80 |
+
$present = !!$product->{$u};
|
| 81 |
+
|
| 82 |
+
$_urlParams = $urlParams;
|
| 83 |
+
|
| 84 |
+
foreach($urlParams as $key => $value)
|
| 85 |
+
{
|
| 86 |
+
if(preg_match("/{$key}=/", $product->{$u}))
|
| 87 |
+
{
|
| 88 |
+
unset($_urlParams[$key]);
|
| 89 |
+
}
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
$query = http_build_query($_urlParams);
|
| 93 |
+
$url = "{$product->$u}&{$query}";
|
| 94 |
+
|
| 95 |
+
return $present
|
| 96 |
+
? array(
|
| 97 |
+
'url' => $url,
|
| 98 |
+
'origin' => $messageEventHelper->getOrigin($url))
|
| 99 |
+
: false;
|
| 100 |
+
}, $_urls);
|
| 101 |
+
|
| 102 |
+
$hasUrl = count(array_filter($urls, function($url) {
|
| 103 |
+
return $url;
|
| 104 |
+
})) > 0;
|
| 105 |
+
?>
|
| 106 |
+
|
| 107 |
+
<style>
|
| 108 |
+
#personalise-it-iframe {
|
| 109 |
+
border: 0; width: 100%; height: 100%;
|
| 110 |
+
}
|
| 111 |
+
</style>
|
| 112 |
+
|
| 113 |
+
<?php if($hasUrl && $product->personaliseit_company_ref_id && !$product->personaliseit_dp_enabled): ?>
|
| 114 |
+
<iframe id="personalise-it-iframe" style="" src=""></iframe>
|
| 115 |
+
<?php else: ?>
|
| 116 |
+
<?php if ($_product->getImage() != 'no_selection' && $_product->getImage()): ?>
|
| 117 |
+
<p class="product-image product-image-zoom">
|
| 118 |
+
<?php
|
| 119 |
+
$_img = '<img id="image" src="'.$this->helper('catalog/image')->init($_product, 'image').'" alt="'.$this->escapeHtml($this->getImageLabel()).'" title="'.$this->escapeHtml($this->getImageLabel()).'" />';
|
| 120 |
+
echo $_helper->productAttribute($_product, $_img, 'image');
|
| 121 |
+
?>
|
| 122 |
+
</p>
|
| 123 |
+
<p class="zoom-notice" id="track_hint"><?php echo $this->__('Double click on above image to view full picture') ?></p>
|
| 124 |
+
<div class="zoom">
|
| 125 |
+
<img id="zoom_out" src="<?php echo $this->getSkinUrl('images/slider_btn_zoom_out.gif') ?>" alt="<?php echo $this->__('Zoom Out') ?>" title="<?php echo $this->__('Zoom Out') ?>" class="btn-zoom-out" />
|
| 126 |
+
<div id="track">
|
| 127 |
+
<div id="handle"></div>
|
| 128 |
+
</div>
|
| 129 |
+
<img id="zoom_in" src="<?php echo $this->getSkinUrl('images/slider_btn_zoom_in.gif') ?>" alt="<?php echo $this->__('Zoom In') ?>" title="<?php echo $this->__('Zoom In') ?>" class="btn-zoom-in" />
|
| 130 |
+
</div>
|
| 131 |
+
<script type="text/javascript">
|
| 132 |
+
//<![CDATA[
|
| 133 |
+
Event.observe(window, 'load', function() {
|
| 134 |
+
product_zoom = new Product.Zoom('image', 'track', 'handle', 'zoom_in', 'zoom_out', 'track_hint');
|
| 135 |
+
});
|
| 136 |
+
//]]>
|
| 137 |
+
</script>
|
| 138 |
+
<?php else: ?>
|
| 139 |
+
<p class="product-image">
|
| 140 |
+
<?php
|
| 141 |
+
$_img = '<img src="'.$this->helper('catalog/image')->init($_product, 'image')->resize(265).'" alt="'.$this->escapeHtml($this->getImageLabel()).'" title="'.$this->escapeHtml($this->getImageLabel()).'" />';
|
| 142 |
+
echo $_helper->productAttribute($_product, $_img, 'image');
|
| 143 |
+
?>
|
| 144 |
+
</p>
|
| 145 |
+
<?php endif; ?>
|
| 146 |
+
<?php if (count($this->getGalleryImages()) > 0): ?>
|
| 147 |
+
<div class="more-views">
|
| 148 |
+
<h2><?php echo $this->__('More Views') ?></h2>
|
| 149 |
+
<ul>
|
| 150 |
+
<?php foreach ($this->getGalleryImages() as $_image): ?>
|
| 151 |
+
<li>
|
| 152 |
+
<a href="#" onclick="popWin('<?php echo $this->getGalleryUrl($_image) ?>', 'gallery', 'width=300,height=300,left=0,top=0,location=no,status=yes,scrollbars=yes,resizable=yes'); return false;" title="<?php echo $this->escapeHtml($_image->getLabel()) ?>"><img src="<?php echo $this->helper('catalog/image')->init($this->getProduct(), 'thumbnail', $_image->getFile())->resize(56); ?>" width="56" height="56" alt="<?php echo $this->escapeHtml($_image->getLabel()) ?>" /></a>
|
| 153 |
+
</li>
|
| 154 |
+
<?php endforeach; ?>
|
| 155 |
+
</ul>
|
| 156 |
+
</div>
|
| 157 |
+
<?php endif; ?>
|
| 158 |
+
<?php endif; ?>
|
| 159 |
+
|
| 160 |
+
<?php if($hasUrl && $product->personaliseit_company_ref_id): ?>
|
| 161 |
+
<script>
|
| 162 |
+
var urls = <?php echo json_encode($urls); ?>;
|
| 163 |
+
|
| 164 |
+
// Remove the mobile URL if we're not on a mobile.
|
| 165 |
+
var isMobile = window.matchMedia && window.matchMedia("(max-width: 800px)").matches;
|
| 166 |
+
|
| 167 |
+
if(!isMobile) {
|
| 168 |
+
urls['mobile'] = false;
|
| 169 |
+
}
|
| 170 |
+
|
| 171 |
+
// Remove the WebGL URL if there is no WebGL support.
|
| 172 |
+
var hasWebGl = !!document.createElement('canvas').getContext("webgl") || !!document.createElement('canvas').getContext('experimental-webgl');
|
| 173 |
+
|
| 174 |
+
if(!hasWebGl) {
|
| 175 |
+
urls['webgl'] = false;
|
| 176 |
+
}
|
| 177 |
+
|
| 178 |
+
// Remove the Flash URL if there is no Flash support.
|
| 179 |
+
var hasFlash = ((typeof navigator.plugins != "undefined" && typeof navigator.plugins["Shockwave Flash"] == "object") || (window.ActiveXObject && (new ActiveXObject("ShockwaveFlash.ShockwaveFlash")) != false));
|
| 180 |
+
|
| 181 |
+
if(!hasFlash) {
|
| 182 |
+
urls['flash'] = false;
|
| 183 |
+
}
|
| 184 |
+
|
| 185 |
+
// Find the first available iframe URL.
|
| 186 |
+
var url = "";
|
| 187 |
+
var origin = "";
|
| 188 |
+
|
| 189 |
+
for(var type in urls) {
|
| 190 |
+
if(urls[type]) {
|
| 191 |
+
url = urls[type].url;
|
| 192 |
+
origin = urls[type].origin;
|
| 193 |
+
break;
|
| 194 |
+
}
|
| 195 |
+
}
|
| 196 |
+
|
| 197 |
+
<?php if(!$product->personaliseit_dp_enabled): ?>
|
| 198 |
+
document.getElementById('personalise-it-iframe').src = url;
|
| 199 |
+
<?php else: ?>
|
| 200 |
+
var delayedPreview = new PersonaliseIt.DelayedPreview(url, '<?= $messageEventHelper->getId() ?>', origin);
|
| 201 |
+
<?php
|
| 202 |
+
foreach($product->getOptions() as $o)
|
| 203 |
+
{
|
| 204 |
+
$matches = array();
|
| 205 |
+
|
| 206 |
+
if(preg_match('/^userText([0-9]*)$/', $o->sku, $matches))
|
| 207 |
+
{
|
| 208 |
+
?>
|
| 209 |
+
|
| 210 |
+
delayedPreview.addTextField('options_' + <?= $o->option_id ?> + '_text', <?= $matches[1] ?>);
|
| 211 |
+
|
| 212 |
+
<?php
|
| 213 |
+
}
|
| 214 |
+
}
|
| 215 |
+
?>
|
| 216 |
+
<?php endif; ?>
|
| 217 |
+
</script>
|
| 218 |
+
<?php endif; ?>
|
app/design/frontend/base/default/template/personaliseit/products/index.phtml
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?
|
| 2 |
+
$params = array('_nosid' => true);
|
| 3 |
+
|
| 4 |
+
$epa = Mage::getUrl('personaliseit/product/epa', $params);
|
| 5 |
+
$callback = Mage::getUrl('personaliseit/product/callback', $params);
|
| 6 |
+
|
| 7 |
+
$query = http_build_query(array(
|
| 8 |
+
'a2cpost' => 1,
|
| 9 |
+
'epa' => $epa,
|
| 10 |
+
'ep3dUrl' => $callback,
|
| 11 |
+
));
|
| 12 |
+
|
| 13 |
+
$urls = array(
|
| 14 |
+
'mobile' => 'mobile_iframe_url',
|
| 15 |
+
'standard' => 'iframe_url',
|
| 16 |
+
);
|
| 17 |
+
|
| 18 |
+
foreach($urls as &$url)
|
| 19 |
+
{
|
| 20 |
+
$url = trim(Mage::getStoreConfig("general/personaliseit-product-selector/{$url}"));
|
| 21 |
+
}
|
| 22 |
+
?>
|
| 23 |
+
|
| 24 |
+
<iframe id="personalise-it-iframe" style="border: 0; width: 100%; height: 100%;" src=""></iframe>
|
| 25 |
+
|
| 26 |
+
<script>
|
| 27 |
+
var urls = <?php echo json_encode($urls); ?>;
|
| 28 |
+
|
| 29 |
+
// Remove the mobile URL if we're not on a mobile.
|
| 30 |
+
var isMobile = window.matchMedia && window.matchMedia("(max-width: 800px)").matches;
|
| 31 |
+
|
| 32 |
+
if(!isMobile) {
|
| 33 |
+
urls['mobile'] = false;
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
// Find the first available iframe URL.
|
| 37 |
+
var url = "";
|
| 38 |
+
|
| 39 |
+
for(var type in urls) {
|
| 40 |
+
if(urls[type]) {
|
| 41 |
+
url = urls[type];
|
| 42 |
+
break;
|
| 43 |
+
}
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
document.getElementById('personalise-it-iframe').src = url;
|
| 47 |
+
</script>
|
| 48 |
+
|
app/etc/modules/Gateway3D_PersonaliseIt.xml
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<!--
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2013 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
-->
|
| 10 |
+
|
| 11 |
+
<config>
|
| 12 |
+
<modules>
|
| 13 |
+
<Gateway3D_PersonaliseIt>
|
| 14 |
+
<active>true</active>
|
| 15 |
+
<codePool>local</codePool>
|
| 16 |
+
</Gateway3D_PersonaliseIt>
|
| 17 |
+
</modules>
|
| 18 |
+
</config>
|
| 19 |
+
|
js/personalise-it/delayed-preview.js
ADDED
|
@@ -0,0 +1,87 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
var PersonaliseIt = PersonaliseIt || {};
|
| 2 |
+
|
| 3 |
+
PersonaliseIt.DelayedPreview = (function() {
|
| 4 |
+
function DelayedPreview(url, id, origin) {
|
| 5 |
+
this.url = url;
|
| 6 |
+
this.id = id;
|
| 7 |
+
this.origin = origin;
|
| 8 |
+
|
| 9 |
+
this.textFields = {};
|
| 10 |
+
this.busyCount = 1;
|
| 11 |
+
|
| 12 |
+
window.addEventListener("message", function(e) {
|
| 13 |
+
if(e.origin === origin && e.data.id === id) {
|
| 14 |
+
switch(e.data.name) {
|
| 15 |
+
case 'SHOW_BUSY': this.busyCount++; break;
|
| 16 |
+
|
| 17 |
+
case 'HIDE_BUSY': // fall through
|
| 18 |
+
case 'RENDERER_READY':
|
| 19 |
+
this.busyCount--; break;
|
| 20 |
+
}
|
| 21 |
+
}
|
| 22 |
+
});
|
| 23 |
+
}
|
| 24 |
+
|
| 25 |
+
DelayedPreview.prototype.addTextField = function(optionId, areaId) {
|
| 26 |
+
this.textFields[optionId] = areaId;
|
| 27 |
+
};
|
| 28 |
+
|
| 29 |
+
DelayedPreview.prototype.update = function(iframeWindow) {
|
| 30 |
+
for(var optionId in this.textFields) {
|
| 31 |
+
var text = $$('#' + optionId)[0].value;
|
| 32 |
+
|
| 33 |
+
iframeWindow.postMessage({
|
| 34 |
+
id: this.id,
|
| 35 |
+
name: 'SET_TEXT_AREA_TEXT',
|
| 36 |
+
|
| 37 |
+
body: {
|
| 38 |
+
areaId: this.textFields[optionId],
|
| 39 |
+
text: text
|
| 40 |
+
}
|
| 41 |
+
}, this.origin);
|
| 42 |
+
}
|
| 43 |
+
};
|
| 44 |
+
|
| 45 |
+
DelayedPreview.prototype.preview = function() {
|
| 46 |
+
this.busyCount = 0;
|
| 47 |
+
|
| 48 |
+
var popup = new Window({
|
| 49 |
+
id:'preview',
|
| 50 |
+
className: 'magento',
|
| 51 |
+
url: this.url,
|
| 52 |
+
|
| 53 |
+
width: 820,
|
| 54 |
+
height: 600,
|
| 55 |
+
|
| 56 |
+
minimizable: false,
|
| 57 |
+
maximizable: false,
|
| 58 |
+
|
| 59 |
+
showEffectOptions: {
|
| 60 |
+
duration: 0.4
|
| 61 |
+
},
|
| 62 |
+
|
| 63 |
+
hideEffectOptions:{
|
| 64 |
+
duration: 0.4
|
| 65 |
+
},
|
| 66 |
+
|
| 67 |
+
onload: (function() {
|
| 68 |
+
var window = $$('#preview_content')[0].contentWindow;
|
| 69 |
+
|
| 70 |
+
var int = setInterval((function() {
|
| 71 |
+
if(this.busyCount === 0) {
|
| 72 |
+
clearInterval(int);
|
| 73 |
+
|
| 74 |
+
this.update(window);
|
| 75 |
+
}
|
| 76 |
+
}).bind(this), 100);
|
| 77 |
+
}).bind(this),
|
| 78 |
+
|
| 79 |
+
destroyOnClose: true
|
| 80 |
+
});
|
| 81 |
+
|
| 82 |
+
popup.setZIndex(100);
|
| 83 |
+
popup.showCenter(true);
|
| 84 |
+
};
|
| 85 |
+
|
| 86 |
+
return DelayedPreview;
|
| 87 |
+
})();
|
lib/Gateway3D/PersonaliseIt/Service/Api/Abstract.php
ADDED
|
@@ -0,0 +1,179 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
/**
|
| 11 |
+
* Abstract class for building API services.
|
| 12 |
+
*/
|
| 13 |
+
abstract class Gateway3D_PersonaliseIt_Service_Api_Abstract
|
| 14 |
+
{
|
| 15 |
+
/**
|
| 16 |
+
* API endpoint.
|
| 17 |
+
*
|
| 18 |
+
* @var string
|
| 19 |
+
*/
|
| 20 |
+
protected $_url = "";
|
| 21 |
+
|
| 22 |
+
/**
|
| 23 |
+
* Http client.
|
| 24 |
+
*
|
| 25 |
+
* @var Zend_Http_Client
|
| 26 |
+
*/
|
| 27 |
+
protected $_client = null;
|
| 28 |
+
|
| 29 |
+
/**
|
| 30 |
+
* Http client response.
|
| 31 |
+
*
|
| 32 |
+
* @var Zend_Http_Response
|
| 33 |
+
*/
|
| 34 |
+
protected $_response = null;
|
| 35 |
+
|
| 36 |
+
public function __construct($url)
|
| 37 |
+
{
|
| 38 |
+
$this->_url = $url;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
/**
|
| 42 |
+
* Execute a create request on the endpoint.
|
| 43 |
+
*
|
| 44 |
+
* @param Gateway3D_PersonaliseIt_Service_Dto $dto
|
| 45 |
+
* @param array $options
|
| 46 |
+
* @return Gateway3D_PersonaliseIt_Service_Dto
|
| 47 |
+
*/
|
| 48 |
+
public function create(Gateway3D_PersonaliseIt_Service_Dto_Abstract $dto, $options = array())
|
| 49 |
+
{
|
| 50 |
+
$url = $this->_getCreateUrl();
|
| 51 |
+
|
| 52 |
+
$this->_initClient($url, Zend_Http_Client::POST, $dto->toArray());
|
| 53 |
+
|
| 54 |
+
return $this->_marshalToDto($dto, $this->_getResponse());
|
| 55 |
+
}
|
| 56 |
+
|
| 57 |
+
/**
|
| 58 |
+
* Execute an update request on the endpoint.
|
| 59 |
+
*
|
| 60 |
+
* @param Gateway3D_PersonaliseIt_Service_Dto $dto
|
| 61 |
+
* @param array $options
|
| 62 |
+
* @return Gateway3D_PersonaliseIt_Service_Dto
|
| 63 |
+
*/
|
| 64 |
+
public function update(Gateway3D_PersonaliseIt_Service_Dto_Abstract $dto, $options = array())
|
| 65 |
+
{
|
| 66 |
+
$url = $this->_getUpdateUrl($dto->getId());
|
| 67 |
+
|
| 68 |
+
$this->_initClient($url, Zend_Http_Client::PUT, $dto->toArray());
|
| 69 |
+
|
| 70 |
+
return $this->_marshalToDto($dto, $this->_getResponse());
|
| 71 |
+
}
|
| 72 |
+
|
| 73 |
+
/**
|
| 74 |
+
* Retrieves an entity from the endpoint.
|
| 75 |
+
*
|
| 76 |
+
* @param Gateway3D_PersonaliseIt_Service_Dto $dto
|
| 77 |
+
* @param array $options
|
| 78 |
+
* @return Gateway3D_PersonaliseIt_Service_Dto
|
| 79 |
+
*/
|
| 80 |
+
public function retrieve($idOrDto, $options = array())
|
| 81 |
+
{
|
| 82 |
+
if($idOrDto instanceof Gateway3D_PersonaliseIt_Service_Dto_Abstract)
|
| 83 |
+
{
|
| 84 |
+
$dto = $idOrDto;
|
| 85 |
+
}
|
| 86 |
+
else
|
| 87 |
+
{
|
| 88 |
+
$dto = $this->_newDto();
|
| 89 |
+
$dto->setId($idOrDto);
|
| 90 |
+
}
|
| 91 |
+
|
| 92 |
+
$url = $this->_getRetrieveUrl($dto->getId());
|
| 93 |
+
|
| 94 |
+
$this->_initClient($url, Zend_Http_Client::GET);
|
| 95 |
+
|
| 96 |
+
return $this->_marshalToDto($dto, $this->_getResponse());
|
| 97 |
+
}
|
| 98 |
+
|
| 99 |
+
/**
|
| 100 |
+
* Builds a URL to be used for creation requests.
|
| 101 |
+
*/
|
| 102 |
+
abstract protected function _getCreateUrl();
|
| 103 |
+
|
| 104 |
+
/**
|
| 105 |
+
* Builds a URL to be used for update requests.
|
| 106 |
+
*/
|
| 107 |
+
abstract protected function _getUpdateUrl($id);
|
| 108 |
+
|
| 109 |
+
/**
|
| 110 |
+
* Builds a URL to be used for retrieval requests.
|
| 111 |
+
*/
|
| 112 |
+
abstract protected function _getRetrieveUrl($id);
|
| 113 |
+
|
| 114 |
+
/**
|
| 115 |
+
* Create a new DTO specific for the current API.
|
| 116 |
+
*/
|
| 117 |
+
abstract protected function _newDto();
|
| 118 |
+
|
| 119 |
+
/**
|
| 120 |
+
* Marshals an array into a Dto object.
|
| 121 |
+
*
|
| 122 |
+
* @param Gateway3D_PersonaliseIt_Service_Dto $dto
|
| 123 |
+
* @param array $data
|
| 124 |
+
*/
|
| 125 |
+
protected function _marshalToDto(Gateway3D_PersonaliseIt_Service_Dto_Abstract $dto, array $data)
|
| 126 |
+
{
|
| 127 |
+
foreach($data as $k => $v)
|
| 128 |
+
{
|
| 129 |
+
if(property_exists($dto, $k))
|
| 130 |
+
{
|
| 131 |
+
$dto->{$k} = $v;
|
| 132 |
+
}
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
return $dto;
|
| 136 |
+
}
|
| 137 |
+
|
| 138 |
+
/**
|
| 139 |
+
* Initialises the http client.
|
| 140 |
+
*
|
| 141 |
+
* @param string $url
|
| 142 |
+
* @param string $method
|
| 143 |
+
* @param array $data Content of request.
|
| 144 |
+
*/
|
| 145 |
+
protected function _initClient($url, $method, array $data = null)
|
| 146 |
+
{
|
| 147 |
+
$this->_client = new Zend_Http_Client($url);
|
| 148 |
+
$this->_client->setMethod($method);
|
| 149 |
+
|
| 150 |
+
if(is_array($data))
|
| 151 |
+
{
|
| 152 |
+
$this->_client->setRawData(Zend_Json::encode($data));
|
| 153 |
+
}
|
| 154 |
+
}
|
| 155 |
+
|
| 156 |
+
protected function _getResponse()
|
| 157 |
+
{
|
| 158 |
+
$this->_response = $this->_client->request();
|
| 159 |
+
|
| 160 |
+
try
|
| 161 |
+
{
|
| 162 |
+
$object = Zend_Json::decode($this->_response->getBody());
|
| 163 |
+
}
|
| 164 |
+
catch(Zend_Json_Exception $e)
|
| 165 |
+
{
|
| 166 |
+
Mage::throwException("Invalid JSON: {$this->_response->getBody()}");
|
| 167 |
+
}
|
| 168 |
+
|
| 169 |
+
if($this->_response->isError())
|
| 170 |
+
{
|
| 171 |
+
$message = $object['error']['message'];
|
| 172 |
+
Mage::throwException($message);
|
| 173 |
+
}
|
| 174 |
+
else
|
| 175 |
+
{
|
| 176 |
+
return $object;
|
| 177 |
+
}
|
| 178 |
+
}
|
| 179 |
+
}
|
lib/Gateway3D/PersonaliseIt/Service/Api/P1/Product.php
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Service_Api_P1_Product
|
| 11 |
+
extends Gateway3D_PersonaliseIt_Service_Api_Abstract
|
| 12 |
+
{
|
| 13 |
+
protected function _getCreateUrl()
|
| 14 |
+
{
|
| 15 |
+
$this->_notSupported();
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
protected function _getUpdateUrl($id)
|
| 19 |
+
{
|
| 20 |
+
$this->_notSupported();
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
protected function _getRetrieveUrl($id)
|
| 24 |
+
{
|
| 25 |
+
return "{$this->_url}/?id={$id}";
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
protected function _newDto()
|
| 29 |
+
{
|
| 30 |
+
return new Gateway3D_PersonaliseIt_Service_Dto_P1_Product;
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
private function _notSupported()
|
| 34 |
+
{
|
| 35 |
+
Mage::throwException("Operation not supported");
|
| 36 |
+
}
|
| 37 |
+
}
|
| 38 |
+
|
lib/Gateway3D/PersonaliseIt/Service/Api/P1/Sample.php
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Service_Api_P1_Sample
|
| 11 |
+
extends Gateway3D_PersonaliseIt_Service_Api_Abstract
|
| 12 |
+
{
|
| 13 |
+
protected function _getCreateUrl()
|
| 14 |
+
{
|
| 15 |
+
$this->_notSupported();
|
| 16 |
+
}
|
| 17 |
+
|
| 18 |
+
protected function _getUpdateUrl($id)
|
| 19 |
+
{
|
| 20 |
+
$this->_notSupported();
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
protected function _getRetrieveUrl($id)
|
| 24 |
+
{
|
| 25 |
+
return "{$this->_url}/?id={$id}";
|
| 26 |
+
}
|
| 27 |
+
|
| 28 |
+
protected function _newDto()
|
| 29 |
+
{
|
| 30 |
+
return new Gateway3D_PersonaliseIt_Service_Dto_P1_Sample;
|
| 31 |
+
}
|
| 32 |
+
|
| 33 |
+
private function _notSupported()
|
| 34 |
+
{
|
| 35 |
+
Mage::throwException("Operation not supported");
|
| 36 |
+
}
|
| 37 |
+
}
|
| 38 |
+
|
lib/Gateway3D/PersonaliseIt/Service/Api/P2/PrintJob.php
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Service_Api_P2_PrintJob
|
| 11 |
+
extends Gateway3D_PersonaliseIt_Service_Api_Abstract
|
| 12 |
+
{
|
| 13 |
+
const OPTION_IMPLICIT = 'implicit';
|
| 14 |
+
|
| 15 |
+
public function create(Gateway3D_PersonaliseIt_Service_Dto $dto, $options = array())
|
| 16 |
+
{
|
| 17 |
+
$url = $this->_getCreateUrl();
|
| 18 |
+
|
| 19 |
+
$data = array('options' => $options, 'print_job' => $dto->toArray());
|
| 20 |
+
|
| 21 |
+
$this->_initClient($url, Zend_Http_Client::POST, $data);
|
| 22 |
+
|
| 23 |
+
return $this->_marshalToDto($dto, $this->_getResponse());
|
| 24 |
+
}
|
| 25 |
+
|
| 26 |
+
protected function _getCreateUrl()
|
| 27 |
+
{
|
| 28 |
+
return $this->_url;
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
protected function _getUpdateUrl($id)
|
| 32 |
+
{
|
| 33 |
+
$this->_notSupported();
|
| 34 |
+
}
|
| 35 |
+
|
| 36 |
+
protected function _getRetrieveUrl($id)
|
| 37 |
+
{
|
| 38 |
+
$this->_notSupported();
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
protected function _newDto()
|
| 42 |
+
{
|
| 43 |
+
return new Gateway3D_PersonaliseIt_Service_Dto_P2_PrintJob;
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
private function _notSupported()
|
| 47 |
+
{
|
| 48 |
+
Mage::throwException("Operation not supported");
|
| 49 |
+
}
|
| 50 |
+
}
|
| 51 |
+
|
lib/Gateway3D/PersonaliseIt/Service/Api/Sl/Order.php
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Service_Api_Sl_Order
|
| 11 |
+
extends Gateway3D_PersonaliseIt_Service_Api_Abstract
|
| 12 |
+
{
|
| 13 |
+
protected $_key = "";
|
| 14 |
+
|
| 15 |
+
public function __construct($url, $key)
|
| 16 |
+
{
|
| 17 |
+
parent::__construct($url);
|
| 18 |
+
|
| 19 |
+
$this->_key = $key;
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
protected function _getCreateUrl()
|
| 23 |
+
{
|
| 24 |
+
return "{$this->_url}?k={$this->_key}";
|
| 25 |
+
}
|
| 26 |
+
|
| 27 |
+
protected function _getUpdateUrl($id)
|
| 28 |
+
{
|
| 29 |
+
return "{$this->_url}?o={$id}&k={$this->_key}";
|
| 30 |
+
}
|
| 31 |
+
|
| 32 |
+
protected function _getRetrieveUrl($id)
|
| 33 |
+
{
|
| 34 |
+
return "{$this->_url}?o={$id}&k={$this->_key}";
|
| 35 |
+
}
|
| 36 |
+
|
| 37 |
+
protected function _newDto()
|
| 38 |
+
{
|
| 39 |
+
return new Gateway3D_PersonaliseIt_Service_Dto_Sl_Order;
|
| 40 |
+
}
|
| 41 |
+
}
|
| 42 |
+
|
lib/Gateway3D/PersonaliseIt/Service/Dto/Abstract.php
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
abstract class Gateway3D_PersonaliseIt_Service_Dto_Abstract
|
| 11 |
+
implements Gateway3D_PersonaliseIt_Service_Dto_Interface
|
| 12 |
+
{
|
| 13 |
+
public function toArray()
|
| 14 |
+
{
|
| 15 |
+
return (array)$this;
|
| 16 |
+
}
|
| 17 |
+
}
|
lib/Gateway3D/PersonaliseIt/Service/Dto/Interface.php
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
interface Gateway3D_PersonaliseIt_Service_Dto_Interface
|
| 11 |
+
{
|
| 12 |
+
function getId();
|
| 13 |
+
function setId($id);
|
| 14 |
+
function toArray();
|
| 15 |
+
}
|
lib/Gateway3D/PersonaliseIt/Service/Dto/P1/Product.php
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Service_Dto_P1_Product
|
| 11 |
+
extends Gateway3D_PersonaliseIt_Service_Dto_Abstract
|
| 12 |
+
{
|
| 13 |
+
public $id = 0;
|
| 14 |
+
public $text_areas = array();
|
| 15 |
+
public $product_attributes = array();
|
| 16 |
+
|
| 17 |
+
public function getId()
|
| 18 |
+
{
|
| 19 |
+
return $this->id;
|
| 20 |
+
}
|
| 21 |
+
|
| 22 |
+
public function setId($id)
|
| 23 |
+
{
|
| 24 |
+
$this->id = $id;
|
| 25 |
+
}
|
| 26 |
+
}
|
lib/Gateway3D/PersonaliseIt/Service/Dto/P1/Sample.php
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Service_Dto_P1_Sample
|
| 11 |
+
extends Gateway3D_PersonaliseIt_Service_Dto_Abstract
|
| 12 |
+
{
|
| 13 |
+
public $sample_id = 0;
|
| 14 |
+
public $product_id = 0;
|
| 15 |
+
|
| 16 |
+
public function getId()
|
| 17 |
+
{
|
| 18 |
+
return $this->sample_id;
|
| 19 |
+
}
|
| 20 |
+
|
| 21 |
+
public function setId($id)
|
| 22 |
+
{
|
| 23 |
+
$this->sample_id = $id;
|
| 24 |
+
}
|
| 25 |
+
}
|
lib/Gateway3D/PersonaliseIt/Service/Dto/P2/PrintJob.php
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Service_Dto_P2_PrintJob
|
| 11 |
+
extends Gateway3D_PersonaliseIt_Service_Dto_Abstract
|
| 12 |
+
{
|
| 13 |
+
public $print_job_id = 0;
|
| 14 |
+
public $product_id = 0;
|
| 15 |
+
public $print_job_company_id = 0;
|
| 16 |
+
public $items = array();
|
| 17 |
+
|
| 18 |
+
public function getId()
|
| 19 |
+
{
|
| 20 |
+
return $this->print_job_id;
|
| 21 |
+
}
|
| 22 |
+
|
| 23 |
+
public function setId($id)
|
| 24 |
+
{
|
| 25 |
+
$this->print_job_id;
|
| 26 |
+
}
|
| 27 |
+
}
|
lib/Gateway3D/PersonaliseIt/Service/Dto/Sl/Order.php
ADDED
|
@@ -0,0 +1,79 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Service_Dto_Sl_Order
|
| 11 |
+
extends Gateway3D_PersonaliseIt_Service_Dto_Abstract
|
| 12 |
+
{
|
| 13 |
+
const STATUS_UNKNOWN = 0;
|
| 14 |
+
const STATUS_ITEMS_READY = 1;
|
| 15 |
+
const STATUS_BATCH_READY = 2;
|
| 16 |
+
const STATUS_IN_PRODUCTION = 4;
|
| 17 |
+
const STATUS_DISPATCHED = 8;
|
| 18 |
+
const STATUS_REPRINT = 16;
|
| 19 |
+
const STATUS_REJECTED = 32;
|
| 20 |
+
|
| 21 |
+
const STATUS_SUPPLIER_DISPATCHED_NOTIFIED = 64;
|
| 22 |
+
|
| 23 |
+
const STATUS_CANCELLED = 128;
|
| 24 |
+
const STATUS_ON_HOLD = 256;
|
| 25 |
+
|
| 26 |
+
public $id = 0;
|
| 27 |
+
public $ref = '';
|
| 28 |
+
public $external_ref = '';
|
| 29 |
+
public $additional_info = '';
|
| 30 |
+
public $company_ref_id = 0;
|
| 31 |
+
public $status = 0;
|
| 32 |
+
|
| 33 |
+
public $sale_datetime = '';
|
| 34 |
+
public $completion_datetime = '';
|
| 35 |
+
public $creation_datetime = '';
|
| 36 |
+
|
| 37 |
+
public $has_been_completed = false;
|
| 38 |
+
|
| 39 |
+
public $shipping_address_1 = '';
|
| 40 |
+
public $shipping_address_2 = '';
|
| 41 |
+
public $shipping_address_3 = '';
|
| 42 |
+
public $shipping_address_4 = '';
|
| 43 |
+
public $shipping_address_5 = '';
|
| 44 |
+
public $shipping_postcode = '';
|
| 45 |
+
public $shipping_country = '';
|
| 46 |
+
public $shipping_country_code = '';
|
| 47 |
+
|
| 48 |
+
public $shipping_method = '';
|
| 49 |
+
public $shipping_carrier = '';
|
| 50 |
+
public $shipping_tracking = '';
|
| 51 |
+
|
| 52 |
+
public $billing_address_1 = '';
|
| 53 |
+
public $billing_address_2 = '';
|
| 54 |
+
public $billing_address_3 = '';
|
| 55 |
+
public $billing_address_4 = '';
|
| 56 |
+
public $billing_address_5 = '';
|
| 57 |
+
public $billing_postcode = '';
|
| 58 |
+
public $billing_country = '';
|
| 59 |
+
|
| 60 |
+
public $payment_trans_id = '';
|
| 61 |
+
|
| 62 |
+
public $customer_name = '';
|
| 63 |
+
public $customer_email = '';
|
| 64 |
+
|
| 65 |
+
public $has_error = false;
|
| 66 |
+
public $error_message = '';
|
| 67 |
+
|
| 68 |
+
public $items = array();
|
| 69 |
+
|
| 70 |
+
public function getId()
|
| 71 |
+
{
|
| 72 |
+
return $this->id;
|
| 73 |
+
}
|
| 74 |
+
|
| 75 |
+
public function setId($id)
|
| 76 |
+
{
|
| 77 |
+
$this->id = $id;
|
| 78 |
+
}
|
| 79 |
+
}
|
lib/Gateway3D/PersonaliseIt/Service/Dto/Sl/Order/Item.php
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
|
| 3 |
+
/**
|
| 4 |
+
* @category Gateway3D
|
| 5 |
+
* @package Personalise-iT
|
| 6 |
+
* @author James Ball <james@gateway3d.co.uk>
|
| 7 |
+
* @copyright Copyright (c) 2015 Gateway 3D Ltd.
|
| 8 |
+
*/
|
| 9 |
+
|
| 10 |
+
class Gateway3D_PersonaliseIt_Service_Dto_Sl_Order_Item
|
| 11 |
+
extends Gateway3D_PersonaliseIt_Service_Dto_Abstract
|
| 12 |
+
{
|
| 13 |
+
const TYPE_UNKNOWN = 0;
|
| 14 |
+
const TYPE_EXTERNAL_URL = 1;
|
| 15 |
+
const TYPE_PRINT_JOB = 2;
|
| 16 |
+
const TYPE_PRINT_ON_DEMAND = 3;
|
| 17 |
+
const TYPE_PLAIN = 4;
|
| 18 |
+
|
| 19 |
+
const STATUS_UNKNOWN = 0;
|
| 20 |
+
const STATUS_READY = 1;
|
| 21 |
+
const STATUS_IN_PRODUCTION = 2;
|
| 22 |
+
const STATUS_DISPATCHED = 3;
|
| 23 |
+
|
| 24 |
+
public $id = 0;
|
| 25 |
+
public $order_id = 0;
|
| 26 |
+
public $sku = '';
|
| 27 |
+
public $description = '';
|
| 28 |
+
public $quantity = 0;
|
| 29 |
+
public $type = 0;
|
| 30 |
+
public $status = 0;
|
| 31 |
+
public $ref = '';
|
| 32 |
+
public $external_ref = '';
|
| 33 |
+
public $print_job_id = 0;
|
| 34 |
+
public $print_on_demand_ref = '';
|
| 35 |
+
|
| 36 |
+
public function getId()
|
| 37 |
+
{
|
| 38 |
+
return $this->id;
|
| 39 |
+
}
|
| 40 |
+
|
| 41 |
+
public function setId($id)
|
| 42 |
+
{
|
| 43 |
+
$this->id = $id;
|
| 44 |
+
}
|
| 45 |
+
}
|
package.xml
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?xml version="1.0"?>
|
| 2 |
+
<package>
|
| 3 |
+
<name>Gateway3D_PersonaliseIt</name>
|
| 4 |
+
<version>1.6.0.0</version>
|
| 5 |
+
<stability>stable</stability>
|
| 6 |
+
<license uri="http://opensource.org/licenses/GPL-3.0">GNU General Public License (GPL)</license>
|
| 7 |
+
<channel>community</channel>
|
| 8 |
+
<extends/>
|
| 9 |
+
<summary>PERSONALISE-IT ECOMMERCE EXTENSION FOR MAGENTO enables you to add personalised products to your magento website and back office system.</summary>
|
| 10 |
+
<description>Personalise-iT eCommerce Extension for Magento
|
| 11 |
+
Enables you to add personalised products to your magento website and back office system
|
| 12 |
+

|
| 13 |
+
Adds an attribute for product URL that will display as an iframe on product detail page - only potential additional development is to update your page CSS - dependant on Magento theme should take no more than a few hours
|
| 14 |
+
Enables personalised products to be added from the iframe directly to your standard Magento shopping basket
|
| 15 |
+
Enables you to add to a single product or install a product selector
|
| 16 |
+
Integrates with Magento to get latest prices for single and grouped products
|
| 17 |
+
Enables easy import of personalised products data from the Gateway3D ACP
|
| 18 |
+
</description>
|
| 19 |
+
<notes>1. package release</notes>
|
| 20 |
+
<authors><author><name>James Ball</name><user>gateway3d</user><email>andrew@gateway3d.com</email></author></authors>
|
| 21 |
+
<date>2015-05-06</date>
|
| 22 |
+
<time>09:21:28</time>
|
| 23 |
+
<contents><target name="magelocal"><dir name="Gateway3D"><dir name="PersonaliseIt"><dir name="Block"><dir name="Adminhtml"><dir name="Catalog"><dir name="Product"><dir name="Edit"><dir name="Tab"><dir name="Options"><file name="Option.php" hash="de7ec2e5d3726236fc1be2d32e7449c9"/></dir><file name="Options.php" hash="8f30014e12e91e0953f88ba7db8ca0f1"/></dir></dir></dir></dir></dir><dir name="Product"><dir name="View"><file name="Options.php" hash="e4c65343b18699801cac12926b899a8a"/></dir></dir></dir><dir name="Helper"><file name="Data.php" hash="6fa3c5a7ddaee7f85574913ca3f5c453"/><file name="MessageEvent.php" hash="68b3bbd29ef744cc003e19983f8aa9ff"/><file name="ProductCustomOptions.php" hash="c0c814759d98f7d2d2c76e5c69138688"/></dir><dir name="Model"><dir name="Catalog"><dir name="Product"><dir name="Option"><dir name="Type"><file name="Hidden.php" hash="24e4219bcef522d5541c80e76d81d417"/></dir></dir><file name="Option.php" hash="6e5d86d3461efe2ec628167452810540"/></dir></dir><dir name="Cron"><file name="Abstract.php" hash="23ff66caca4b72339b440974189b9ff8"/><file name="DelayedPrintJob.php" hash="dc9ad2fb74dd140eb8059e27967142d0"/><file name="Sl.php" hash="403deafd2faa7bec02269e0af3da008c"/></dir><file name="ImportOptions.php" hash="a2a2bb0edb75cc19f09516dd6dfa812e"/><dir name="Product"><file name="Abstract.php" hash="42d7cc2abc7ac71ff4f3c273e0d2eab2"/><file name="Callback.php" hash="6cdea1ba267dfc8d8f2336d752919b54"/><file name="Epa.php" hash="90bdd24d82eb740487534d03950f2554"/><file name="Rating.php" hash="ef560672e4ebabf7ee48400fd844e2c6"/></dir><dir name="Resource"><dir name="Eav"><dir name="Mysql4"><file name="Setup.php" hash="1cc4352f5731c8791909e91e37c16dbe"/></dir></dir></dir><dir name="Source"><file name="Orderstatus.php" hash="cab06992d625e25c03230c2d83e5181b"/></dir><dir name="Status"><file name="Callback.php" hash="3a570645736683a389ad64e20862b3d0"/></dir></dir><dir name="controllers"><file name="CppController.php" hash="8c67cacf5709a556e491dbfebe966032"/><file name="ProductController.php" hash="c05170bda82b874c6f6af2e7eccb2754"/><file name="ProductsController.php" hash="ecc1571d47195ed50425cff021cdb763"/><file name="StatusController.php" hash="b5ac639a2c016ba6069444539b0f192c"/></dir><dir name="etc"><file name="config.xml" hash="ecfe65679696b236b611f5e5b3646dd3"/><file name="system.xml" hash="c7d794ce6fdc37dd901ad4cc4154e34c"/></dir><dir name="sql"><dir name="personaliseit_setup"><file name="mysql4-install-1.0.0.php" hash="1fce9f7b040554ef5a94548d1a475fa4"/><file name="mysql4-upgrade-1.0.0-1.1.0.php" hash="4a595f9829b6860bc95b53bdc9502ff9"/><file name="mysql4-upgrade-1.1.1-1.1.2.php" hash="6191fd474af43bc3eb2ddbd8d77502d9"/><file name="mysql4-upgrade-1.1.7.1-1.2.0.0.php" hash="4f1bde8b6caecd92eac47fbbff54670b"/><file name="mysql4-upgrade-1.2.0.3-1.3.0.0.php" hash="c1ad1ae7db03f5d1558e6bbe5c63cdce"/><file name="mysql4-upgrade-1.3.5.4-1.3.6.0.php" hash="e4bfb0b95cfcae3142eee04fe1b5c7c8"/><file name="mysql4-upgrade-1.3.6.0-1.4.0.0.php" hash="35ef54c4aa462e673cad55c8b1f66657"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="template"><dir name="personaliseit"><dir name="catalog"><dir name="product"><dir name="edit"><file name="options.phtml" hash="8778b1db29eeaea9ac0f48c23bea908c"/></dir></dir></dir><file name="item_column_renderer_name.phtml" hash="22f10bce29cdc670790c31b23df39c85"/><file name="option.phtml" hash="dc54dc21176e7b36175f58956162340e"/></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><file name="personaliseit.xml" hash="7c81f0d446b9d42ef6f3f15ebe810c24"/></dir><dir name="template"><dir name="personaliseit"><dir name="cart"><dir name="item"><file name="default.phtml" hash="3473fca9da1e0c7a1b6be2a4582b07db"/></dir></dir><dir name="product"><file name="callback.phtml" hash="8a5fa1a137a7cc867d738f238cbf5f09"/><dir name="view"><file name="addtocart.phtml" hash="31b3cb1ce58bf5683ac42aad40c7a53c"/><file name="media.phtml" hash="920bdaa1e1729e1b9c0fe9370218b53c"/></dir></dir><dir name="products"><file name="index.phtml" hash="26565d0b4e509c5fed580b29b8c072e0"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Gateway3D_PersonaliseIt.xml" hash="16c34b7b2a594b1cec6dee88ff1528ea"/></dir></target><target name="mageweb"><dir name="js"><dir name="personalise-it"><file name="delayed-preview.js" hash="ae30ade52d17cc34858f6487f0422b96"/></dir></dir></target><target name="magelib"><dir name="Gateway3D"><dir name="PersonaliseIt"><dir name="Service"><dir name="Api"><file name="Abstract.php" hash="0a04cec6523526979e199ab85de241d2"/><dir name="P1"><file name="Product.php" hash="2af118282a6259397da3b674eed96978"/><file name="Sample.php" hash="26939ac32c06825bcbba37a445219b4a"/></dir><dir name="P2"><file name="PrintJob.php" hash="09126773651feea4f4316797539a34ac"/></dir><dir name="Sl"><file name="Order.php" hash="efb4e24a9dac06385cb89559b0779eef"/></dir></dir><dir name="Dto"><file name="Abstract.php" hash="5eb3756ee49227e089b92db44d5bdc04"/><file name="Interface.php" hash="1023c3de30572c812bc1d4e1027184d3"/><dir name="P1"><file name="Product.php" hash="7c3f1f9afa6be2d207195323ebe9ac78"/><file name="Sample.php" hash="cd6583fee38465fe0063cb5479c7cdb4"/></dir><dir name="P2"><file name="PrintJob.php" hash="d4fc0358846d23ecdd2647a55dcaafe9"/></dir><dir name="Sl"><dir name="Order"><file name="Item.php" hash="08e26b54602bb477e1cd70d3c642f8be"/></dir><file name="Order.php" hash="929bcee73f1b95b3827394452ef2fb29"/></dir></dir></dir></dir></dir></target></contents>
|
| 24 |
+
<compatible/>
|
| 25 |
+
<dependencies><required><php><min>4.4.0</min><max>6.0.0</max></php></required></dependencies>
|
| 26 |
+
</package>
|
