Gateway3D_PersonaliseIt - Version 1.6.9.0

Version Notes

general updates

Download this release

Release Info

Developer James Ball
Extension Gateway3D_PersonaliseIt
Version 1.6.9.0
Comparing to
See all releases


Code changes from version 1.6.0.0 to 1.6.9.0

app/code/local/Gateway3D/PersonaliseIt/Model/Cron/Sl.php CHANGED
@@ -45,7 +45,24 @@ class Gateway3D_PersonaliseIt_Model_Cron_Sl
45
 
46
  foreach($collection as $order)
47
  {
48
- $this->_pushMageOrder($order);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
49
  }
50
 
51
  if(!count($collection))
@@ -122,7 +139,7 @@ class Gateway3D_PersonaliseIt_Model_Cron_Sl
122
 
123
  // Create an SL order
124
  $_order = $this->_createSlOrder($order, $guid, $_items);
125
-
126
  try
127
  {
128
  $this->_api->create($_order);
@@ -265,7 +282,10 @@ class Gateway3D_PersonaliseIt_Model_Cron_Sl
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(
@@ -295,6 +315,13 @@ class Gateway3D_PersonaliseIt_Model_Cron_Sl
295
  $_item->{$name} = $value;
296
  }
297
 
 
 
 
 
 
 
 
298
  //
299
  if($printJobId)
300
  {
@@ -319,7 +346,7 @@ class Gateway3D_PersonaliseIt_Model_Cron_Sl
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
  *
@@ -415,7 +442,7 @@ class Gateway3D_PersonaliseIt_Model_Cron_Sl
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
 
@@ -436,10 +463,19 @@ class Gateway3D_PersonaliseIt_Model_Cron_Sl
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'));
@@ -451,6 +487,7 @@ class Gateway3D_PersonaliseIt_Model_Cron_Sl
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
  {
@@ -458,7 +495,7 @@ class Gateway3D_PersonaliseIt_Model_Cron_Sl
458
  }
459
 
460
  $_order->items = $items;
461
-
462
  return $_order;
463
  }
464
 
45
 
46
  foreach($collection as $order)
47
  {
48
+ $order->setPersonaliseItOrderCanBeSent(true);
49
+
50
+ Mage::dispatchEvent('personaliseit_before_order_sent', array(
51
+ 'order' => $order
52
+ ));
53
+
54
+ if($order->getPersonaliseItOrderCanBeSent())
55
+ {
56
+ $this->_pushMageOrder($order);
57
+
58
+ Mage::dispatchEvent('personaliseit_after_order_sent', array(
59
+ 'order' => $order
60
+ ));
61
+ }
62
+ else
63
+ {
64
+ self::_log("skipping {$order->getIncrementId()} due to event");
65
+ }
66
  }
67
 
68
  if(!count($collection))
139
 
140
  // Create an SL order
141
  $_order = $this->_createSlOrder($order, $guid, $_items);
142
+
143
  try
144
  {
145
  $this->_api->create($_order);
282
  $_item->print_job_id = $printJobId;
283
  $_item->print_on_demand_ref = $sampleRef;
284
  $_item->external_ref = "{$item->getOrder()->getIncrementId()}-{$item->getId()}";
285
+
286
+ $_item->unit_sale_price = $item->getPrice();
287
+ $_item->unit_sale_price_inc_tax = $item->getPriceInclTax();
288
+ $_item->sale_vat_rate = $item->getTaxPercent() / 100;
289
 
290
  //
291
  $options = array_merge(
315
  $_item->{$name} = $value;
316
  }
317
 
318
+ $bundleRef = self::_getItemCustomOption($storeId, $item, 'bundle_ref');
319
+ $bundleSku = self::_getItemCustomOption($storeId, $item, 'bundle_sku');
320
+
321
+ $parts = array_filter(array($bundleSku, $bundleRef));
322
+
323
+ $_item->bundle_ref = implode('-', $parts);
324
+
325
  //
326
  if($printJobId)
327
  {
346
 
347
  return $_item;
348
  }
349
+
350
  /**
351
  * Gets any attributes from the item that we're interested in (i.e. colour and size).
352
  *
442
  $billingAddress = $order->getBillingAddress();
443
 
444
  $store = Mage::app()->getStore($order->getStoreId())->getWebsite()->getName();
445
+
446
  //
447
  $_order = new Gateway3D_PersonaliseIt_Service_Dto_Sl_Order;
448
 
463
 
464
  $_order->shipping_carrier = $carrier;
465
  $_order->shipping_method = $method;
466
+
467
+ $_order->shipping_price = $order->shipping_amount;
468
+ $_order->shipping_price_inc_tax = $order->shipping_incl_tax;
469
+ $_order->shipping_tax_rate = ($order->shipping_incl_tax / $order->shipping_amount) - 1;
470
 
471
  $_order->customer_email = $order->getCustomerEmail();
472
  $_order->customer_name = $shippingAddress->getName();
473
+ $_order->customer_telephone = $shippingAddress->getTelephone();
474
+
475
+ $_order->billing_customer_email = $order->getCustomerEmail();
476
+ $_order->billing_customer_name = $billingAddress->getName();
477
+ $_order->billing_customer_telephone = $billingAddress->getTelephone();
478
+
479
  $_order->external_ref = $order->getIncrementId();
480
 
481
  $order->getCreatedAtDate()->setOptions(array('format_type' => 'php'));
487
  $_order->company_ref_id = $companyRefId;
488
 
489
  $_order->status = Mage::getStoreConfig("general/personaliseit-sl/default_order_status");
490
+ $_order->tag = Mage::getStoreConfig("general/personaliseit-sl/default_order_tag");
491
 
492
  if(!Mage::getStoreConfig("general/personaliseit-sl/enable_order_status_polling"))
493
  {
495
  }
496
 
497
  $_order->items = $items;
498
+
499
  return $_order;
500
  }
501
 
app/code/local/Gateway3D/PersonaliseIt/Model/ImportOptions.php CHANGED
@@ -80,17 +80,41 @@ class Gateway3D_PersonaliseIt_Model_ImportOptions
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
  }
80
  {
81
  foreach($this->_cppProduct->text_areas as $area)
82
  {
83
+ if($area['options'])
84
+ {
85
+ $type = Gateway3D_PersonaliseIt_Model_Catalog_Product_Option::OPTION_TYPE_DROP_DOWN;
86
+
87
+ $options = explode(PHP_EOL, $area['options']);
88
+ $fields = array_map(function($o) use ($area)
89
+ {
90
+ return array(
91
+ 'title' => trim($o),
92
+ 'sku' => "userText{$area['template_text_area_id']}",
93
+ 'price_type' => 'fixed',
94
+ );
95
+ }, $options);
96
+ }
97
+ else
98
+ {
99
+ $type = $area['allow_input']
100
+ ? Gateway3D_PersonaliseIt_Model_Catalog_Product_Option::OPTION_TYPE_FIELD
101
+ : Gateway3D_PersonaliseIt_Model_Catalog_Product_Option::OPTION_TYPE_HIDDEN;
102
+
103
+ $fields = array(array(
104
+ 'price' => @$area['price'] ?: 0.00,
105
+ 'price_type' => 'fixed',
106
+ 'sku' => "userText{$area['template_text_area_id']}",
107
+ 'max_characters'=> $area['character_limit']
108
+ ));
109
+ }
110
+
111
  $this->_optionData[] = array(
112
  'title' => @$area['name'] ?: '',
113
+ 'type' => $type,
114
  'is_require' => false,
115
  'sort_order' => 1,
116
 
117
+ 'additional_fields' => $fields
 
 
 
 
118
  );
119
  }
120
  }
app/code/local/Gateway3D/PersonaliseIt/Model/Product/Callback.php CHANGED
@@ -20,16 +20,18 @@ class Gateway3D_PersonaliseIt_Model_Product_Callback
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
@@ -65,6 +67,11 @@ class Gateway3D_PersonaliseIt_Model_Product_Callback
65
  {
66
  $this->_marshalDynamicPricingToMultiples('Effects', $dynamicPricing['effects']);
67
  }
 
 
 
 
 
68
  }
69
 
70
  private function _marshalDpQuantityElementToAttribute(array &$dp, $element, $name)
@@ -73,7 +80,7 @@ class Gateway3D_PersonaliseIt_Model_Product_Callback
73
  {
74
  $dp['attributes'][] = array(
75
  'name' => $name,
76
- 'value' => $dp[$element]['quantity'],
77
  'cost' => $dp[$element]['cost']
78
  );
79
  }
@@ -266,9 +273,9 @@ class Gateway3D_PersonaliseIt_Model_Product_Callback
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
  {
@@ -289,21 +296,46 @@ class Gateway3D_PersonaliseIt_Model_Product_Callback
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
  //
@@ -386,4 +418,50 @@ class Gateway3D_PersonaliseIt_Model_Product_Callback
386
 
387
  Gateway3D_PersonaliseIt_Helper_ProductCustomOptions::ensureProductHasCustomOptions($product, $required);
388
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
389
  }
20
  $this->_data = $data;
21
  }
22
 
23
+ public function process($updateCartItemId = false)
24
  {
25
+ $this->_handleBundleRefs();
26
+
27
  if(isset($this->_data['dynamic_pricing']) && is_array($this->_data['dynamic_pricing']))
28
  {
29
  $this->_marshalDynamicPricing();
30
  }
31
 
32
+ $this->_processCart($updateCartItemId);
33
  }
34
+
35
  /**
36
  * Marshal the dynamic_pricing structure into a form that can be understood
37
  * by _processCart
67
  {
68
  $this->_marshalDynamicPricingToMultiples('Effects', $dynamicPricing['effects']);
69
  }
70
+
71
+ if(isset($dynamicPricing['print_areas']['used']))
72
+ {
73
+ $this->_marshalDynamicPricingToMultiples('Print Areas', $dynamicPricing['print_areas']['used']);
74
+ }
75
  }
76
 
77
  private function _marshalDpQuantityElementToAttribute(array &$dp, $element, $name)
80
  {
81
  $dp['attributes'][] = array(
82
  'name' => $name,
83
+ 'value' => @$dp[$element]['quantity'] ?: 1,
84
  'cost' => $dp[$element]['cost']
85
  );
86
  }
273
  *
274
  * @return void
275
  */
276
+ private function _processCart($updateItemId)
277
  {
278
+ $cart = Mage::getModel("checkout/cart");
279
 
280
  if($this->_product->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_GROUPED)
281
  {
296
  'options' => $this->_getOptions($product, $item),
297
  'qty' => $item['quantity']
298
  );
299
+
300
+ if($updateItemId)
301
+ {
302
+ $cart->getQuote()->updateItem($updateItemId, $params);
303
+ }
304
+ else
305
+ {
306
+ $cart->addProduct($product, $params);
307
+ }
308
  }
309
  }
310
  }
311
  else
312
  {
313
+ // Dynamically add custom options for specific fields
314
+ $required = array();
315
+
316
+ foreach($this->_data as $key => $value)
317
+ {
318
+ if(preg_match("/^user(Text|Image)[0-9]+$/", $key))
319
+ {
320
+ $required[] = $key;
321
+ }
322
+ }
323
+
324
+ $this->_ensureProductHasCustomOptions($this->_product, $required);
325
 
326
  $params = array(
327
  'options' => $this->_getOptions($this->_product),
328
+ 'qty' => @$this->_data['quantity'] ?: 1
329
  );
330
+
331
+ if($updateItemId)
332
+ {
333
+ $cart->getQuote()->updateItem($updateItemId, $params);
334
+ }
335
+ else
336
+ {
337
+ $cart->addProduct($this->_product, $params);
338
+ }
339
  }
340
 
341
  //
418
 
419
  Gateway3D_PersonaliseIt_Helper_ProductCustomOptions::ensureProductHasCustomOptions($product, $required);
420
  }
421
+
422
+ private function _handleBundleRefs()
423
+ {
424
+ if(isset($this->_data['bundle_ref']))
425
+ {
426
+ $cart = Mage::getModel('checkout/cart')->getQuote();
427
+ $items = $cart->getAllItems();
428
+
429
+ $refs = array();
430
+
431
+ foreach($items as $item)
432
+ {
433
+ $product = Mage::getModel('catalog/product')->load($item->getProductId());
434
+ $options = $product->getProductOptionsCollection();
435
+
436
+ $bundleOptionId = false;
437
+
438
+ foreach($options as $option)
439
+ {
440
+ if($option->getSku() == 'bundle_ref')
441
+ {
442
+ $bundleOptionId = $option->getId();
443
+ break;
444
+ }
445
+ }
446
+
447
+ if($bundleOptionId)
448
+ {
449
+ $orderOptions = $item->getProduct()->getTypeInstance(true)->getOrderOptions($item->getProduct());
450
+
451
+ foreach($orderOptions['options'] as $option)
452
+ {
453
+ if($option['option_id'] == $bundleOptionId)
454
+ {
455
+ $refs[] = $option['option_value'];
456
+ }
457
+ }
458
+ }
459
+ }
460
+
461
+ $refs = array_unique($refs);
462
+ $next = count($refs) + 1;
463
+
464
+ $this->_data['bundle_ref'] = $next;
465
+ }
466
+ }
467
  }
app/code/local/Gateway3D/PersonaliseIt/Model/Product/Epa.php CHANGED
@@ -56,11 +56,25 @@ class Gateway3D_PersonaliseIt_Model_Product_Epa
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
 
@@ -71,10 +85,37 @@ class Gateway3D_PersonaliseIt_Model_Product_Epa
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
  *
@@ -83,7 +124,7 @@ class Gateway3D_PersonaliseIt_Model_Product_Epa
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
  {
@@ -103,7 +144,7 @@ class Gateway3D_PersonaliseIt_Model_Product_Epa
103
 
104
  if(is_numeric($title) && $title > 0)
105
  {
106
- return $value->getPrice() / $title;
107
  }
108
  }
109
  }
@@ -112,15 +153,17 @@ class Gateway3D_PersonaliseIt_Model_Product_Epa
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
 
@@ -219,7 +262,7 @@ class Gateway3D_PersonaliseIt_Model_Product_Epa
219
  */
220
  private function _getPrice($product)
221
  {
222
- return $this->_formatPrice($product->getPrice());
223
  }
224
 
225
  /**
@@ -230,10 +273,12 @@ class Gateway3D_PersonaliseIt_Model_Product_Epa
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
  /**
56
  * @param Mage_Core_Catalog_Model_Product $product
57
  * @return array
58
  */
59
+ private function _getProductDynamicPricing(Mage_Catalog_Model_Product $product)
60
  {
61
+ $tiers = array();
62
+
63
+ foreach($product->getTierPrice() as $tier)
64
+ {
65
+ $tiers[] = array(
66
+ 'quantity' => $tier['price_qty'],
67
+ 'price' => $this->_currency($tier['price'])
68
+ );
69
+ }
70
+
71
  return array(
72
+ 'currency' => Mage::app()->getStore()->getCurrentCurrencyCode(),
73
+
74
+ 'base' => $this->_currency($product->getPrice()),
75
+
76
+ 'tiers' => $tiers,
77
+
78
  'per_print_area' => $this->_getProductDynamicPricingField(
79
  $product, 'Number of Print Areas', Mage_Catalog_Model_Product_Option::OPTION_TYPE_DROP_DOWN),
80
 
85
  $product, 'Number of Stitches', Mage_Catalog_Model_Product_Option::OPTION_TYPE_DROP_DOWN),
86
 
87
  'effects' => $this->_getProductDynamicPricingField(
88
+ $product, 'Effects', Mage_Catalog_Model_Product_Option::OPTION_TYPE_MULTIPLE),
89
+
90
+ 'print_areas' => $this->_getProductDynamicPricingField(
91
+ $product, 'Print Areas', Mage_Catalog_Model_Product_Option::OPTION_TYPE_MULTIPLE),
92
+
93
+ 'attributes' => $this->_getProductAttributes($product)
94
  );
95
  }
96
 
97
+ private function _getProductAttributes(Mage_Catalog_Model_Product $product)
98
+ {
99
+ $attributes = array();
100
+
101
+ foreach($product->getOptions() as $option)
102
+ {
103
+ if($option->getType() == Mage_Catalog_Model_Product_Option::OPTION_TYPE_DROP_DOWN)
104
+ {
105
+ foreach($option->getValues() as $value)
106
+ {
107
+ $attributes[] = array(
108
+ 'name' => $option->getTitle(),
109
+ 'value' => $value->getTitle(),
110
+ 'price' => $this->_currency($value->getPrice())
111
+ );
112
+ }
113
+ }
114
+ }
115
+
116
+ return $attributes;
117
+ }
118
+
119
  /**
120
  * Gets a pricing structure for a matching custom option.
121
  *
124
  * @param string $type Custom option type.
125
  * @return array|bool
126
  */
127
+ private function _getProductDynamicPricingField(Mage_Catalog_Model_Product $product, $name, $type)
128
  {
129
  foreach($product->getOptions() as $option)
130
  {
144
 
145
  if(is_numeric($title) && $title > 0)
146
  {
147
+ return $this->_currency($value->getPrice() / $title);
148
  }
149
  }
150
  }
153
  // of each possible value.
154
  else if($doesTypeMatch && $doesTitleMatch && $isMulti)
155
  {
156
+ $options = array();
 
 
157
 
158
+ foreach($option->getValues() as $value)
159
+ {
160
+ $options[] = array(
161
+ 'name' => $value->getTitle(),
162
+ 'price' => $this->_currency($value->getPrice())
163
  );
164
+ }
165
+
166
+ return array_values($options);
167
  }
168
  }
169
 
262
  */
263
  private function _getPrice($product)
264
  {
265
+ return $this->_formatPrice($product->getFinalPrice());
266
  }
267
 
268
  /**
273
  */
274
  private function _formatPrice($price)
275
  {
276
+ return $this->_currency($price, true);
277
+ }
278
+
279
+ private function _currency($price, $format = false)
280
+ {
281
+ return Mage::helper('core')->currency($price, $format, false);
282
  }
283
 
284
  /**
app/code/local/Gateway3D/PersonaliseIt/controllers/ProductController.php CHANGED
@@ -97,7 +97,8 @@ class Gateway3D_PersonaliseIt_ProductController
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
  {
@@ -115,7 +116,7 @@ class Gateway3D_PersonaliseIt_ProductController
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'));
97
 
98
  $sku = $this->getRequest()->getParam('sku', '');
99
  $id = $this->getRequest()->getParam('id', '');
100
+ $update = $this->getRequest()->getParam('update', '');
101
+
102
  // Fallback to SKU specified in data object
103
  if(!$id && !$sku && isset($data['sku']))
104
  {
116
  //
117
  try
118
  {
119
+ $model->process($update);
120
 
121
  $block->setData('message', __('Please wait while we download your custom design to the shopping basket...'));
122
  $block->setData('redirect', Mage::getUrl('checkout/cart'));
app/code/local/Gateway3D/PersonaliseIt/etc/config.xml CHANGED
@@ -11,7 +11,7 @@
11
  <config>
12
  <modules>
13
  <Gateway3D_PersonaliseIt>
14
- <version>1.6.0.0</version>
15
  </Gateway3D_PersonaliseIt>
16
  </modules>
17
  <global>
11
  <config>
12
  <modules>
13
  <Gateway3D_PersonaliseIt>
14
+ <version>1.6.9.0</version>
15
  </Gateway3D_PersonaliseIt>
16
  </modules>
17
  <global>
app/code/local/Gateway3D/PersonaliseIt/etc/system.xml CHANGED
@@ -65,6 +65,15 @@
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>
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_tag translate="label">
69
+ <label>Default Order Tag</label>
70
+ <frontend_type>text</frontend_type>
71
+ <sort_order>39</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
+ <validate>validate-length maximum-length-16</validate>
76
+ </default_order_tag>
77
  <default_order_status translate="label">
78
  <label>Default Order Status</label>
79
  <frontend_type>select</frontend_type>
app/design/frontend/base/default/template/personaliseit/product/view/media.phtml CHANGED
@@ -34,7 +34,7 @@
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
@@ -48,15 +48,6 @@
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,
@@ -66,6 +57,23 @@
66
  'mei' => $messageEventHelper->getId()
67
  );
68
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  // URL fields and the order of preference.
70
  $_urls = array(
71
  'webgl' => 'personaliseit_gl_iframe_url',
@@ -75,7 +83,7 @@
75
  'legacy' => 'easypromo3d_url',
76
  );
77
 
78
- $urls = array_map(function($u) use ($product, $query, $messageEventHelper, $urlParams)
79
  {
80
  $present = !!$product->{$u};
81
 
@@ -201,13 +209,27 @@
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
  }
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
48
  $callback = Mage::getUrl('personaliseit/product/callback', $params);
49
 
50
  // Build URLs
 
 
 
 
 
 
 
 
 
51
  $urlParams = array(
52
  'a2cpost' => 1,
53
  'epa' => $epa,
57
  'mei' => $messageEventHelper->getId()
58
  );
59
 
60
+ // Editing
61
+ $existingOptions = $product->getPreconfiguredValues()->getData('options');
62
+
63
+ if($existingOptions)
64
+ {
65
+ foreach($product->getOptions() as $o)
66
+ {
67
+ if($o->getSku() == 'printJobId')
68
+ {
69
+ $urlParams['pj'] = $existingOptions[$o->getId()];
70
+
71
+ $cartId = $this->getRequest()->getParam('id');
72
+ $urlParams['ep3dUrl'] = "{$urlParams['ep3dUrl']}update/{$cartId}";
73
+ }
74
+ }
75
+ }
76
+
77
  // URL fields and the order of preference.
78
  $_urls = array(
79
  'webgl' => 'personaliseit_gl_iframe_url',
83
  'legacy' => 'easypromo3d_url',
84
  );
85
 
86
+ $urls = array_map(function($u) use ($product, $messageEventHelper, $urlParams)
87
  {
88
  $present = !!$product->{$u};
89
 
209
  <?php
210
  foreach($product->getOptions() as $o)
211
  {
212
+ if($o->getType() == Gateway3D_PersonaliseIt_Model_Catalog_Product_Option::OPTION_TYPE_DROP_DOWN)
213
+ {
214
+ $values = array_values($o->getValues());
215
+ $sku = $values[0]->getSku();
216
+
217
+ $selector = "select_{$o->option_id}";
218
+ }
219
+ else
220
+ {
221
+ $sku = $o->getSku();
222
+
223
+ $selector = "options_{$o->option_id}_text";
224
+ }
225
+
226
  $matches = array();
227
 
228
+ if(preg_match('/^userText([0-9]*)$/', $sku, $matches))
229
  {
230
  ?>
231
 
232
+ delayedPreview.addTextField('<?= $selector ?>', <?= $matches[1] ?>);
233
 
234
  <?php
235
  }
app/design/frontend/base/default/template/personaliseit/products/index.phtml CHANGED
@@ -18,6 +18,11 @@
18
  foreach($urls as &$url)
19
  {
20
  $url = trim(Mage::getStoreConfig("general/personaliseit-product-selector/{$url}"));
 
 
 
 
 
21
  }
22
  ?>
23
 
18
  foreach($urls as &$url)
19
  {
20
  $url = trim(Mage::getStoreConfig("general/personaliseit-product-selector/{$url}"));
21
+
22
+ if($url)
23
+ {
24
+ $url .= "&{$query}";
25
+ }
26
  }
27
  ?>
28
 
js/personalise-it/delayed-preview.js CHANGED
@@ -27,8 +27,12 @@ PersonaliseIt.DelayedPreview = (function() {
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,
@@ -84,4 +88,4 @@ PersonaliseIt.DelayedPreview = (function() {
84
  };
85
 
86
  return DelayedPreview;
87
- })();
27
  };
28
 
29
  DelayedPreview.prototype.update = function(iframeWindow) {
30
+ for(var optionId in this.textFields) {
31
+ var element = $$('#' + optionId)[0];
32
+
33
+ var text = element.options && element.selectedIndex
34
+ ? element.options[element.selectedIndex].text
35
+ : element.value;
36
 
37
  iframeWindow.postMessage({
38
  id: this.id,
88
  };
89
 
90
  return DelayedPreview;
91
+ })();
lib/Gateway3D/PersonaliseIt/Service/Api/P2/PrintJob.php CHANGED
@@ -12,7 +12,7 @@ class Gateway3D_PersonaliseIt_Service_Api_P2_PrintJob
12
  {
13
  const OPTION_IMPLICIT = 'implicit';
14
 
15
- public function create(Gateway3D_PersonaliseIt_Service_Dto $dto, $options = array())
16
  {
17
  $url = $this->_getCreateUrl();
18
 
12
  {
13
  const OPTION_IMPLICIT = 'implicit';
14
 
15
+ public function create(Gateway3D_PersonaliseIt_Service_Dto_Abstract $dto, $options = array())
16
  {
17
  $url = $this->_getCreateUrl();
18
 
package.xml CHANGED
@@ -1,7 +1,7 @@
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>
@@ -16,11 +16,11 @@ Enables you to add to a single product or install a product selector&#xD;
16
  Integrates with Magento to get latest prices for single and grouped products&#xD;
17
  Enables easy import of personalised products data from the Gateway3D ACP&#xD;
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>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Gateway3D_PersonaliseIt</name>
4
+ <version>1.6.9.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>
16
  Integrates with Magento to get latest prices for single and grouped products&#xD;
17
  Enables easy import of personalised products data from the Gateway3D ACP&#xD;
18
  </description>
19
+ <notes>general updates</notes>
20
  <authors><author><name>James Ball</name><user>gateway3d</user><email>andrew@gateway3d.com</email></author></authors>
21
+ <date>2015-12-03</date>
22
+ <time>15:06:21</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="eeb0a156c3848907b4ed232989d06b96"/></dir><file name="ImportOptions.php" hash="8af798d813b22302eaaf495be9e4f172"/><dir name="Product"><file name="Abstract.php" hash="42d7cc2abc7ac71ff4f3c273e0d2eab2"/><file name="Callback.php" hash="48a9a2eeee9b28fab80258456e4bfda3"/><file name="Epa.php" hash="bfa7ba8bd72e99a1d98bd40f23dcd316"/><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="df5d67f396621d9f78225744f0f6aff4"/><file name="ProductsController.php" hash="ecc1571d47195ed50425cff021cdb763"/><file name="StatusController.php" hash="b5ac639a2c016ba6069444539b0f192c"/></dir><dir name="etc"><file name="config.xml" hash="b088e1b5ff31a8e8dd12c679e172df23"/><file name="system.xml" hash="b52cb07f78433f223cc01924ea5ce2ad"/></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="6e608632b2dbf491e5b87a0f3594384e"/></dir></dir><dir name="products"><file name="index.phtml" hash="a579b987c9af70705730a5cb8d961a08"/></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="b6f2b21374b0763351bd7552ae537f75"/></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="bc0f3e564a608893d599ef364c4095b8"/></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>