Pure360 - Version 1.1.0

Version Notes

1.1.0
- Username/password check when changing API URL
- Increased the page refresh time in Cron job page
- Newsletter signup checkbox should not be checked by default if the use has already opted-out

1.0.4
- List opt-out support extended

1.0.3
- Stability fixes
- Verbose error handling
- List Sync fixes

1.0.2
- Dropdown values synced properly
- Boolean Yes/No synced
- Data consistency
- UI tweaks
- Admin routing updated

1.0.1
- Magento Connect compliance

Download this release

Release Info

Developer Stewart Waller
Extension Pure360
Version 1.1.0
Comparing to
See all releases


Code changes from version 1.0.3 to 1.1.0

Files changed (44) hide show
  1. app/code/community/Pure360/Cart/etc/config.xml +1 -1
  2. app/code/community/Pure360/Cart/sql/pure360_cart_setup/{mysql4-install-1.0.3.php → mysql4-install-1.0.4.php} +0 -0
  3. app/code/community/Pure360/Common/etc/config.xml +1 -1
  4. app/code/community/Pure360/Cron/etc/config.xml +1 -1
  5. app/code/community/Pure360/Cron/sql/pure360_cron_setup/{mysql4-install-1.0.3.php → mysql4-install-1.0.4.php} +0 -0
  6. app/code/community/Pure360/Email/Model/Email/Message.php +24 -2
  7. app/code/community/Pure360/Email/etc/config.xml +1 -1
  8. app/code/community/Pure360/Email/sql/pure360_email_setup/{mysql4-install-1.0.3.php → mysql4-install-1.0.4.php} +0 -0
  9. app/code/community/Pure360/List/Helper/Data.php +23 -0
  10. app/code/community/Pure360/List/Job/Sync.php +185 -3
  11. app/code/community/Pure360/List/Model/Customer.php +5 -15
  12. app/code/community/Pure360/List/Model/Optout.php +17 -0
  13. app/code/community/Pure360/List/Model/Resource/Optout.php +28 -0
  14. app/code/community/Pure360/List/Model/Resource/Optout/Collection.php +56 -0
  15. app/code/community/Pure360/List/Model/Subscriber.php +55 -0
  16. app/code/community/Pure360/List/etc/config.xml +9 -1
  17. app/code/community/Pure360/List/sql/pure360_list_setup/{mysql4-install-1.0.3.php → mysql4-install-1.0.4.php} +22 -0
  18. app/code/community/Pure360/List/sql/pure360_list_setup/mysql4-upgrade-1.0.3-1.0.4.php +30 -0
  19. app/code/community/Pure360/Newsletter/Block/Checkout/Onepage/Newsletter.php +13 -3
  20. app/code/community/Pure360/Newsletter/Helper/Api.php +38 -28
  21. app/code/community/Pure360/Newsletter/Model/Subscriber.php +48 -52
  22. app/code/community/Pure360/Newsletter/etc/config.xml +3 -3
  23. app/code/community/Pure360/Newsletter/sql/pure360_newsletter_setup/{mysql4-install-1.0.3.php → mysql4-install-1.0.4.php} +0 -0
  24. app/design/adminhtml/default/default/layout/pure360_cart.xml +8 -8
  25. app/design/adminhtml/default/default/layout/pure360_common.xml +8 -8
  26. app/design/adminhtml/default/default/layout/pure360_cron.xml +7 -7
  27. app/design/adminhtml/default/default/layout/pure360_email.xml +7 -7
  28. app/design/adminhtml/default/default/layout/pure360_list.xml +14 -14
  29. app/design/adminhtml/default/default/layout/pure360_newsletter.xml +7 -7
  30. app/design/adminhtml/default/default/template/pure360/common/about.phtml +8 -8
  31. app/design/adminhtml/default/default/template/pure360/common/disabled.phtml +10 -10
  32. app/design/adminhtml/default/default/template/pure360/common/error.phtml +10 -10
  33. app/design/adminhtml/default/default/template/pure360/common/jsinit.phtml +16 -16
  34. app/design/adminhtml/default/default/template/pure360/email/transactional.phtml +69 -69
  35. app/design/frontend/base/default/layout/pure360/cart.xml +10 -10
  36. app/design/frontend/base/default/layout/pure360/newsletter.xml +11 -11
  37. app/design/frontend/base/default/template/pure360/cart/email/order/items.phtml +85 -85
  38. app/design/frontend/base/default/template/pure360/cart/email/order/items/order/default.phtml +111 -111
  39. app/etc/modules/Pure360_Cart.xml +11 -11
  40. app/locale/en_US/template/email/pure360/abandoned_cart.html +37 -37
  41. app/locale/en_US/template/email/pure360/abandoned_cart_guest.html +37 -37
  42. js/mage/adminhtml/pure360/common.js +5 -1
  43. js/mage/adminhtml/pure360/cron.js +1 -1
  44. package.xml +13 -5
app/code/community/Pure360/Cart/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Pure360_Cart>
5
- <version>1.0.3</version>
6
  </Pure360_Cart>
7
  </modules>
8
  <global>
2
  <config>
3
  <modules>
4
  <Pure360_Cart>
5
+ <version>1.1.0</version>
6
  </Pure360_Cart>
7
  </modules>
8
  <global>
app/code/community/Pure360/Cart/sql/pure360_cart_setup/{mysql4-install-1.0.3.php → mysql4-install-1.0.4.php} RENAMED
File without changes
app/code/community/Pure360/Common/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Pure360_Common>
5
- <version>1.0.3</version>
6
  </Pure360_Common>
7
  </modules>
8
  <global>
2
  <config>
3
  <modules>
4
  <Pure360_Common>
5
+ <version>1.1.0</version>
6
  </Pure360_Common>
7
  </modules>
8
  <global>
app/code/community/Pure360/Cron/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Pure360_Cron>
5
- <version>1.0.3</version>
6
  </Pure360_Cron>
7
  </modules>
8
  <global>
2
  <config>
3
  <modules>
4
  <Pure360_Cron>
5
+ <version>1.1.0</version>
6
  </Pure360_Cron>
7
  </modules>
8
  <global>
app/code/community/Pure360/Cron/sql/pure360_cron_setup/{mysql4-install-1.0.3.php → mysql4-install-1.0.4.php} RENAMED
File without changes
app/code/community/Pure360/Email/Model/Email/Message.php CHANGED
@@ -135,7 +135,28 @@ class Pure360_Email_Model_Email_Message extends Mage_Core_Model_Email_Template
135
 
136
  $this->setUseAbsoluteLinks(true);
137
  $text = $this->getProcessedTemplate($variables, true);
138
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
139
  try
140
  {
141
  // Create API Client for current context
@@ -146,10 +167,11 @@ class Pure360_Email_Model_Email_Message extends Mage_Core_Model_Email_Template
146
  $client = Mage::helper('pure360_common/api')->getClient($url, $username, $password);
147
 
148
  // Send using Pure360 One2One
 
149
  $messageSubject = $this->getProcessedTemplateSubject($variables);
150
  $messageName = $templateId;
151
  $messageBodyHtml = $this->isPlain() ? null : $text;
152
- $messageBodyPlain = $this->isPlain() ? $text : null;
153
  $toAddress = $variables['email'];
154
  $fromAddress = $this->getSenderEmail();
155
  $fromDesc = $this->getSenderName();
135
 
136
  $this->setUseAbsoluteLinks(true);
137
  $text = $this->getProcessedTemplate($variables, true);
138
+ $plainText = $text;
139
+
140
+ if(!$this->isPlain())
141
+ {
142
+
143
+ $searchPatterns = array(
144
+ '/<style.*>.*<\/style>/Usi',
145
+ '/<p.*>/Ui',
146
+ '/<\/p>/i',
147
+ '/<br.*\/?>/i',
148
+ '/<[^>]+>/Usi',
149
+ );
150
+ $replaceValues = array(
151
+ '',
152
+ "\r\n\r\n",
153
+ "\r\n",
154
+ "\r\n",
155
+ '',
156
+ );
157
+ $plainText = preg_replace($searchPatterns, $replaceValues, $plainText);
158
+ }
159
+
160
  try
161
  {
162
  // Create API Client for current context
167
  $client = Mage::helper('pure360_common/api')->getClient($url, $username, $password);
168
 
169
  // Send using Pure360 One2One
170
+ // Todo: allow modification of the plain text message. Currently, only stripping the tags out of the HTML message.
171
  $messageSubject = $this->getProcessedTemplateSubject($variables);
172
  $messageName = $templateId;
173
  $messageBodyHtml = $this->isPlain() ? null : $text;
174
+ $messageBodyPlain = $this->isPlain() ? $text : $plainText;
175
  $toAddress = $variables['email'];
176
  $fromAddress = $this->getSenderEmail();
177
  $fromDesc = $this->getSenderName();
app/code/community/Pure360/Email/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Pure360_Email>
5
- <version>1.0.3</version>
6
  </Pure360_Email>
7
  </modules>
8
  <global>
2
  <config>
3
  <modules>
4
  <Pure360_Email>
5
+ <version>1.1.0</version>
6
  </Pure360_Email>
7
  </modules>
8
  <global>
app/code/community/Pure360/Email/sql/pure360_email_setup/{mysql4-install-1.0.3.php → mysql4-install-1.0.4.php} RENAMED
File without changes
app/code/community/Pure360/List/Helper/Data.php CHANGED
@@ -406,6 +406,29 @@ class Pure360_List_Helper_Data extends Pure360_Common_Helper_Data
406
  return $list;
407
  }
408
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
409
  public function toDate($value)
410
  {
411
  $date = date_create($value);
406
  return $list;
407
  }
408
 
409
+ /**
410
+ * Add email address to optout list
411
+ * @param string $email
412
+ * @param integer $storeId
413
+ */
414
+ public function listOptout($email, $storeId)
415
+ {
416
+ Mage::helper('pure360_list')->writeDebug(__METHOD__ . ' - start');
417
+
418
+ $list = $this->getListForStore($storeId);
419
+
420
+ /* @var $job Pure360_List_Model_Optout */
421
+ $optout = Mage::getModel('pure360_list/optout');
422
+ $optout->setData('scope', $list->getScope());
423
+ $optout->setData('scope_id', $list->getScopeId());
424
+ $optout->setData('email', $email);
425
+ $optout->setCreatedAt(time());
426
+ $optout->setUpdatedAt(time());
427
+ $optout->save();
428
+
429
+ Mage::helper('pure360_list')->writeDebug(__METHOD__ . ' - end');
430
+ }
431
+
432
  public function toDate($value)
433
  {
434
  $date = date_create($value);
app/code/community/Pure360/List/Job/Sync.php CHANGED
@@ -58,6 +58,7 @@ class Pure360_List_Job_Sync extends Pure360_Cron_Job_Abstract
58
 
59
  // Set status to syncing
60
  $list->rows = 0;
 
61
  $list->setListStatus(Pure360_List_Model_List::LIST_STATUS_SYNCING);
62
  $list->save();
63
 
@@ -67,6 +68,9 @@ class Pure360_List_Job_Sync extends Pure360_Cron_Job_Abstract
67
  // Export all Subscribers next
68
  $this->exportSubscriberList($list);
69
 
 
 
 
70
  // Sync List
71
  if($list->rows > 0)
72
  {
@@ -80,11 +84,17 @@ class Pure360_List_Job_Sync extends Pure360_Cron_Job_Abstract
80
  $list->save();
81
  }
82
 
 
 
 
 
 
 
83
  // Finally perform a logout
84
  $this->client->logout();
85
 
86
  // Update message with rows uploaded
87
- $this->_data->setData('message', $list->rows . ' rows uploaded ');
88
 
89
  // Save list data
90
  $this->_data->save();
@@ -588,6 +598,108 @@ class Pure360_List_Job_Sync extends Pure360_Cron_Job_Abstract
588
  return $dataToSend;
589
  }
590
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
591
  private function uploadList(&$list)
592
  {
593
  Mage::helper('pure360_list')->writeDebug(__METHOD__ . ' - start');
@@ -645,12 +757,38 @@ class Pure360_List_Job_Sync extends Pure360_Cron_Job_Abstract
645
 
646
  $count = 0;
647
 
648
- // Mark customers as synced
649
  foreach($files as $filename)
650
  {
651
  $dataArray = Mage::helper('pure360_common/file')->readCsv($filename);
 
 
 
 
 
 
 
 
 
 
 
652
 
653
- if(strstr($filename, 'subscribe'))
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
654
  {
655
  $emails = array();
656
 
@@ -680,6 +818,7 @@ class Pure360_List_Job_Sync extends Pure360_Cron_Job_Abstract
680
  $stmt->execute();
681
  }
682
  }
 
683
  } else
684
  {
685
  $ids = array();
@@ -730,6 +869,49 @@ class Pure360_List_Job_Sync extends Pure360_Cron_Job_Abstract
730
  return;
731
  }
732
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
733
  private function cleanup($list)
734
  {
735
  Mage::helper('pure360_list')->writeDebug(__METHOD__ . ' - start');
58
 
59
  // Set status to syncing
60
  $list->rows = 0;
61
+ $list->optout_rows = 0;
62
  $list->setListStatus(Pure360_List_Model_List::LIST_STATUS_SYNCING);
63
  $list->save();
64
 
68
  // Export all Subscribers next
69
  $this->exportSubscriberList($list);
70
 
71
+ // Finally all Optouts
72
+ $this->exportOptoutList($list);
73
+
74
  // Sync List
75
  if($list->rows > 0)
76
  {
84
  $list->save();
85
  }
86
 
87
+ // Upload Optouts
88
+ if($list->optout_rows > 0)
89
+ {
90
+ $this->uploadOptouts($list);
91
+ }
92
+
93
  // Finally perform a logout
94
  $this->client->logout();
95
 
96
  // Update message with rows uploaded
97
+ $this->_data->setData('message', $list->rows . ' rows processed, ' . $list->optout_rows . ' rows opted out ');
98
 
99
  // Save list data
100
  $this->_data->save();
598
  return $dataToSend;
599
  }
600
 
601
+ private function exportOptoutList(&$list)
602
+ {
603
+ Mage::helper('pure360_list')->writeDebug(__METHOD__ . ' - start');
604
+
605
+ $resource = Mage::getSingleton('core/resource');
606
+
607
+ // Get handle for write
608
+ $write = $resource->getConnection('core_write');
609
+
610
+ // Clean invalid optouts
611
+ $optoutTable = $resource->getTableName('pure360_optout');
612
+ $subscriberTable = $resource->getTableName('newsletter_subscriber');
613
+
614
+ $stmt = $write->prepare("DELETE e FROM $optoutTable AS e " .
615
+ " LEFT JOIN $subscriberTable AS s ON (s.subscriber_email = e.email) " .
616
+ " WHERE s.subscriber_status = :status AND e.scope = :scope AND e.scope_id = :scopeId ");
617
+
618
+ $status = Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED;
619
+
620
+ $stmt->bindParam(":status", $status, PDO::PARAM_INT);
621
+ $stmt->bindParam(":scope", $list->getScope(), PDO::PARAM_STR);
622
+ $stmt->bindParam(":scopeId", $list->getScopeId(), PDO::PARAM_INT);
623
+
624
+ $stmt->execute();
625
+
626
+ // Export optout list
627
+ $fileSlug = $list->fileSlug . '__OPTOUT__';
628
+
629
+ $file_ext = '.csv';
630
+ $batchNum = 1;
631
+ $batchSize = self::CHUNK_SIZE;
632
+ $firstEmail = null;
633
+
634
+ do
635
+ {
636
+ $time_start = microtime(true);
637
+ $currentBatch = $this->getOptoutBatch($list, $batchSize, $batchNum);
638
+ $condition = count($currentBatch);
639
+ $filePath = Mage::helper('pure360_common/file')->getFilePath($fileSlug . $batchNum . $file_ext);
640
+
641
+ $firstRow = reset($currentBatch);
642
+
643
+ if(empty($firstRow) || $firstEmail == $firstRow)
644
+ {
645
+ break;
646
+ } else
647
+ {
648
+ $firstEmail = $firstRow;
649
+ }
650
+
651
+ foreach($currentBatch as $email)
652
+ {
653
+ if($list->optout_rows < $this->max_sync_size)
654
+ {
655
+ Mage::helper('pure360_common/file')->outputCSV($filePath, array($email));
656
+ $list->optout_rows++;
657
+ } else
658
+ {
659
+ break;
660
+ }
661
+ }
662
+
663
+ $time_end = microtime(true);
664
+ $time_in_seconds = $time_end - $time_start;
665
+
666
+ Mage::helper('pure360_list')->writeDebug('Exported Optout Batch ' . $batchNum . ' in ' . $time_in_seconds . ' seconds - (' . memory_get_usage() . ') to ' . $filePath);
667
+
668
+ $batchNum++;
669
+
670
+ unset($currentBatch);
671
+ } while($condition == $batchSize && $list->optout_rows <= $this->max_sync_size);
672
+
673
+ Mage::helper('pure360_list')->writeDebug(__METHOD__ . ' - end');
674
+ }
675
+
676
+ private function getOptoutBatch($list, $batchSize = 0, $batchNum = 1)
677
+ {
678
+ Mage::helper('pure360_list')->writeDebug(__METHOD__ . ' - start');
679
+
680
+ $emails = array();
681
+
682
+ // Configure Collection
683
+ $collection = Mage::getModel('pure360_list/optout')->getCollection()
684
+ ->distinct(true)
685
+ ->addScopeFilter($list->getScope(), $list->getScopeId());
686
+
687
+ // Add paging for batch operation
688
+ $collection->setCurPage($batchNum)->setPageSize($batchSize);
689
+
690
+ // Get email for each item in collection
691
+ foreach($collection as $row)
692
+ {
693
+ $emails[] = $row->getEmail();
694
+ }
695
+
696
+ unset($collection);
697
+
698
+ Mage::helper('pure360_list')->writeDebug(__METHOD__ . ' - end');
699
+
700
+ return $emails;
701
+ }
702
+
703
  private function uploadList(&$list)
704
  {
705
  Mage::helper('pure360_list')->writeDebug(__METHOD__ . ' - start');
757
 
758
  $count = 0;
759
 
 
760
  foreach($files as $filename)
761
  {
762
  $dataArray = Mage::helper('pure360_common/file')->readCsv($filename);
763
+
764
+ // Remove optouts
765
+ if(strstr($filename, 'OPTOUT'))
766
+ {
767
+ $emails = array();
768
+
769
+ foreach($dataArray as $dataRow)
770
+ {
771
+ // Email should always be the only column for optout
772
+ $emails[] = $dataRow[0];
773
+ }
774
 
775
+ // Update Sync Statuses.
776
+ $optoutTable = $resource->getTableName('pure360_optout');
777
+ $stmt = $write->prepare("DELETE FROM $optoutTable WHERE `email` = :email AND `scope` = :scope AND `scope_id` = :scopeId ");
778
+ $email = null;
779
+ $stmt->bindParam(":email", $email, PDO::PARAM_STR);
780
+ $stmt->bindParam(":scope", $list->getScope(), PDO::PARAM_STR);
781
+ $stmt->bindParam(":scopeId", $list->getScopeId(), PDO::PARAM_INT);
782
+
783
+ foreach($emails as $email)
784
+ {
785
+ if(!empty($email))
786
+ {
787
+ $stmt->execute();
788
+ }
789
+ }
790
+ // Mark subscribers as synced
791
+ } else if(strstr($filename, 'subscribe'))
792
  {
793
  $emails = array();
794
 
818
  $stmt->execute();
819
  }
820
  }
821
+ // Mark customers as synced
822
  } else
823
  {
824
  $ids = array();
869
  return;
870
  }
871
 
872
+ private function uploadOptouts(&$list)
873
+ {
874
+ Mage::helper('pure360_list')->writeDebug(__METHOD__ . ' - start');
875
+
876
+ // Get list properties
877
+ $listName = '__OPTOUT__';
878
+ $listFields = array('email');
879
+ $files = Mage::helper('pure360_common/file')->getFilenamesForSlug($list->fileSlug . '__OPTOUT__');
880
+
881
+ /* @var $api Pure360_List_Helper_Api */
882
+ $api = Mage::helper('pure360_list/api');
883
+
884
+ // Setup file transfer
885
+ $context = $this->client->getContext();
886
+ $fileCategory = "PAINT";
887
+ $fileName = $context['beanId'] . '__OPTOUT__';
888
+ $count = count($files);
889
+ $page = 1;
890
+
891
+ // Create file
892
+ $api->createFile($this->client, $fileCategory, $fileName, $count, "Y");
893
+
894
+ // Upload chunks
895
+ foreach($files as $filename)
896
+ {
897
+ $chunkData = Mage::helper('pure360_common/file')->readFile($filename, true);
898
+ $api->uploadFileChunk($this->client, $fileCategory, $fileName, $page, $chunkData, "base64");
899
+ $page++;
900
+ }
901
+
902
+ reset($files);
903
+
904
+ // Create/Append list
905
+ $api->createAppendReplaceList($this->client, $listName, $listFields);
906
+
907
+ // Load file data onto list
908
+ $api->loadFileData($this->client, $fileCategory, $fileName, $listName);
909
+
910
+ Mage::helper('pure360_list')->writeDebug(__METHOD__ . ' - end');
911
+
912
+ return;
913
+ }
914
+
915
  private function cleanup($list)
916
  {
917
  Mage::helper('pure360_list')->writeDebug(__METHOD__ . ' - start');
app/code/community/Pure360/List/Model/Customer.php CHANGED
@@ -13,24 +13,14 @@ class Pure360_List_Model_Customer extends Mage_Customer_Model_Customer
13
  */
14
  protected function _beforeSave()
15
  {
16
- parent::_beforeSave();
17
-
18
- if (Mage::helper('pure360_list')->isEnabledForStore($this->getStoreId()))
19
  {
20
- $this->setPure360SyncStatus(0);
 
 
 
21
  }
22
-
23
  return $this;
24
  }
25
-
26
- /**
27
- * Processing object after delete data
28
- *
29
- * @return Pure360_List_Model_Customer
30
- */
31
- protected function _afterDelete()
32
- {
33
- parent::_afterDelete();
34
- }
35
  }
36
 
13
  */
14
  protected function _beforeSave()
15
  {
16
+ if(parent::_beforeSave())
 
 
17
  {
18
+ if (Mage::helper('pure360_list')->isEnabledForStore($this->getStoreId()))
19
+ {
20
+ $this->setPure360SyncStatus(0);
21
+ }
22
  }
 
23
  return $this;
24
  }
 
 
 
 
 
 
 
 
 
 
25
  }
26
 
app/code/community/Pure360/List/Model/Optout.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @package Pure360\List
5
+ * @copyright 2013 Pure360.com
6
+ */
7
+ class Pure360_List_Model_Optout extends Mage_Core_Model_Abstract
8
+ {
9
+
10
+ public function _construct()
11
+ {
12
+ parent::_construct();
13
+
14
+ $this->_init('pure360_list/optout');
15
+ }
16
+
17
+ }
app/code/community/Pure360/List/Model/Resource/Optout.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @package Pure360\List
5
+ * @copyright 2013 Pure360.com
6
+ */
7
+ class Pure360_List_Model_Resource_Optout extends Mage_Core_Model_Mysql4_Abstract
8
+ {
9
+
10
+ /**
11
+ * Primary key auto increment flag
12
+ *
13
+ * @var bool
14
+ */
15
+ protected $_isPkAutoIncrement = false;
16
+
17
+ /**
18
+ * Initialize Model
19
+ *
20
+ * @return void
21
+ * @access public
22
+ */
23
+ public function _construct()
24
+ {
25
+ $this->_init('pure360_list/optout', 'optout_id');
26
+ }
27
+
28
+ }
app/code/community/Pure360/List/Model/Resource/Optout/Collection.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @package Pure360\List
5
+ * @copyright 2013 Pure360.com
6
+ */
7
+ class Pure360_List_Model_Resource_Optout_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract
8
+ {
9
+ const MAX_COLLECTION_SIZE = 5;
10
+
11
+ /**
12
+ * Initialize Model
13
+ *
14
+ * @return void
15
+ * @access public
16
+ */
17
+ public function _construct()
18
+ {
19
+ parent::_construct();
20
+ $this->_init('pure360_list/optout');
21
+ }
22
+
23
+ /**
24
+ * @param string $scope
25
+ * @param integer $scopeIds
26
+ */
27
+ public function addScopeFilter($scope, $scopeId)
28
+ {
29
+ $this->getSelect()->where('scope = ?', $scope);
30
+ $this->getSelect()->where('scope_id = ?', $scopeId);
31
+ return $this;
32
+ }
33
+
34
+ /**
35
+ * Sort order by order created_at date
36
+ *
37
+ * @param string $dir
38
+ */
39
+ public function orderByCreatedAt($dir = self::SORT_ORDER_DESC)
40
+ {
41
+ $this->setOrder('created_at', $dir);
42
+ return $this;
43
+ }
44
+
45
+ /**
46
+ * Sort order by order updated_at date
47
+ *
48
+ * @param string $dir
49
+ */
50
+ public function orderByUpdatedAt($dir = self::SORT_ORDER_DESC)
51
+ {
52
+ $this->setOrder('updated_at', $dir);
53
+ return $this;
54
+ }
55
+
56
+ }
app/code/community/Pure360/List/Model/Subscriber.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @package Pure360\List
5
+ * @copyright 2013 Pure360.com
6
+ */
7
+ class Pure360_List_Model_Subscriber extends Mage_Newsletter_Model_Subscriber
8
+ {
9
+
10
+ /**
11
+ * Processing object before save data
12
+ *
13
+ * @return Pure360_Newsletter_Model_Subscriber
14
+ */
15
+ protected function _beforeSave()
16
+ {
17
+ if(parent::_beforeSave())
18
+ {
19
+ if(Mage::helper('pure360_list')->isEnabledForStore($this->getStoreId()))
20
+ {
21
+ $this->setPure360SyncStatus(0);
22
+
23
+ // Trigger Pure360 sync status for customer too
24
+ if($this->getCustomerId() > 0)
25
+ {
26
+ $customer = Mage::getModel('customer/customer')->load($this->getCustomerId());
27
+
28
+ if($customer->getId())
29
+ {
30
+ $customer->save();
31
+ }
32
+ }
33
+ }
34
+ }
35
+ return $this;
36
+ }
37
+
38
+ /**
39
+ * Processing object after delete data
40
+ *
41
+ * @return Pure360_Newsletter_Model_Subscriber
42
+ */
43
+ protected function _afterDelete()
44
+ {
45
+ if(parent::_afterDelete())
46
+ {
47
+ if(Mage::helper('pure360_list')->isEnabledForStore($this->getStoreId()))
48
+ {
49
+ // Add to optout list to make sure
50
+ Mage::helper('pure360_list')->listOptout($this->getSubscriberEmail(), $this->getStoreId());
51
+ }
52
+ }
53
+ return $this;
54
+ }
55
+ }
app/code/community/Pure360/List/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Pure360_List>
5
- <version>1.0.3</version>
6
  </Pure360_List>
7
  </modules>
8
  <global>
@@ -27,6 +27,9 @@
27
  <list>
28
  <table>pure360_list</table>
29
  </list>
 
 
 
30
  <field>
31
  <table>pure360_list_field</table>
32
  </field>
@@ -43,6 +46,11 @@
43
  <customer>Pure360_List_Model_Customer</customer>
44
  </rewrite>
45
  </customer>
 
 
 
 
 
46
  </models>
47
  <resources>
48
  <pure360_list_setup>
2
  <config>
3
  <modules>
4
  <Pure360_List>
5
+ <version>1.1.0</version>
6
  </Pure360_List>
7
  </modules>
8
  <global>
27
  <list>
28
  <table>pure360_list</table>
29
  </list>
30
+ <optout>
31
+ <table>pure360_optout</table>
32
+ </optout>
33
  <field>
34
  <table>pure360_list_field</table>
35
  </field>
46
  <customer>Pure360_List_Model_Customer</customer>
47
  </rewrite>
48
  </customer>
49
+ <subscriber>
50
+ <rewrite>
51
+ <customer>Pure360_List_Model_Subscriber</customer>
52
+ </rewrite>
53
+ </subscriber>
54
  </models>
55
  <resources>
56
  <pure360_list_setup>
app/code/community/Pure360/List/sql/pure360_list_setup/{mysql4-install-1.0.3.php → mysql4-install-1.0.4.php} RENAMED
@@ -5,6 +5,28 @@ $installer = $this;
5
 
6
  $installer->startSetup();
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  try
9
  {
10
  // Create New Table
5
 
6
  $installer->startSetup();
7
 
8
+ try
9
+ {
10
+ // Create New Table
11
+ $installer->run("
12
+ CREATE TABLE IF NOT EXISTS `{$this->getTable('pure360_optout')}` (
13
+ `optout_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Optout Id',
14
+ `scope` varchar(10) DEFAULT 'default' COMMENT 'Scope',
15
+ `scope_id` smallint(5) unsigned NOT NULL COMMENT 'Scope Id',
16
+ `email` varchar(100) COMMENT 'Subscriber email',
17
+ `created_at` timestamp NULL DEFAULT NULL COMMENT 'Created At',
18
+ `updated_at` timestamp NULL DEFAULT NULL COMMENT 'Updated At',
19
+ PRIMARY KEY (`optout_id`),
20
+ KEY `IDX_PURE360_OPTOUT_SCOPE_ID` (`scope_id`),
21
+ KEY `IDX_PURE360_OPTOUT_CREATED_AT` (`created_at`),
22
+ KEY `IDX_PURE360_OPTOUT_UPDATED_AT` (`updated_at`)
23
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Pure360 Optout';
24
+ ");
25
+ } catch(Exception $e)
26
+ {
27
+ // throw new RuntimeException('Failed Creating and Populating Table: ' . $e->getMessage());
28
+ }
29
+
30
  try
31
  {
32
  // Create New Table
app/code/community/Pure360/List/sql/pure360_list_setup/mysql4-upgrade-1.0.3-1.0.4.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+ /* @var $installer Mage_Sales_Model_Mysql4_Setup */
5
+
6
+ $installer->startSetup();
7
+
8
+ try
9
+ {
10
+ // Create New Table
11
+ $installer->run("
12
+ CREATE TABLE IF NOT EXISTS `{$this->getTable('pure360_optout')}` (
13
+ `optout_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Optout Id',
14
+ `scope` varchar(10) DEFAULT 'default' COMMENT 'Scope',
15
+ `scope_id` smallint(5) unsigned NOT NULL COMMENT 'Scope Id',
16
+ `email` varchar(100) COMMENT 'Subscriber email',
17
+ `created_at` timestamp NULL DEFAULT NULL COMMENT 'Created At',
18
+ `updated_at` timestamp NULL DEFAULT NULL COMMENT 'Updated At',
19
+ PRIMARY KEY (`optout_id`),
20
+ KEY `IDX_PURE360_OPTOUT_SCOPE_ID` (`scope_id`),
21
+ KEY `IDX_PURE360_OPTOUT_CREATED_AT` (`created_at`),
22
+ KEY `IDX_PURE360_OPTOUT_UPDATED_AT` (`updated_at`)
23
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Pure360 Optout';
24
+ ");
25
+ } catch(Exception $e)
26
+ {
27
+ // throw new RuntimeException('Failed Creating and Populating Table: ' . $e->getMessage());
28
+ }
29
+
30
+ $installer->endSetup();
app/code/community/Pure360/Newsletter/Block/Checkout/Onepage/Newsletter.php CHANGED
@@ -91,10 +91,20 @@ class Pure360_Newsletter_Block_Checkout_Onepage_Newsletter extends Mage_Checkout
91
  if($this->$methodName())
92
  {
93
  $action = 'show';
94
- if($this->isSubscribed() || $this->isEnabledCheckedByDefault())
95
  {
96
- $checked = 'true';
97
- $value = '1';
 
 
 
 
 
 
 
 
 
 
98
  }
99
  }
100
  }
91
  if($this->$methodName())
92
  {
93
  $action = 'show';
94
+ if(strtolower($method) == 'customer')
95
  {
96
+ if($this->isSubscribed())
97
+ {
98
+ $checked = 'true';
99
+ $value = '1';
100
+ }
101
+ } else
102
+ {
103
+ if($this->isSubscribed() || $this->isEnabledCheckedByDefault())
104
+ {
105
+ $checked = 'true';
106
+ $value = '1';
107
+ }
108
  }
109
  }
110
  }
app/code/community/Pure360/Newsletter/Helper/Api.php CHANGED
@@ -79,7 +79,7 @@ class Pure360_Newsletter_Helper_Api extends Pure360_Common_Helper_Api
79
  * @param Mage_Customer_Model_Customer $customer
80
  * @return type
81
  */
82
- public function listSubscribeCustomer($client, $customer, $date)
83
  {
84
  Mage::helper('pure360_newsletter')->writeDebug(__METHOD__ . ' - start');
85
 
@@ -116,50 +116,60 @@ class Pure360_Newsletter_Helper_Api extends Pure360_Common_Helper_Api
116
  $postFields .= '&website=' . urlencode(Mage::app()->getWebsite($websiteId)->getName());
117
  $postFields .= '&store=' . urlencode($store->getName());
118
 
119
- // Process Customer
120
- $salesFields = Mage::helper('pure360_list')->getSalesFields($list);
121
 
122
- $salesData = empty($salesFields) ? array() : Mage::helper('pure360_list')->getSalesData($customer, $salesFields);
123
 
124
- $groupData = array('customer_group' =>
125
- Mage::helper('pure360_common')->arrayToCsv(
126
- Mage::helper('pure360_list')->getCustomerGroupData($customer)));
127
 
128
- $segmentData = array('customer_segments' =>
129
- Mage::helper('pure360_common')->arrayToCsv(
130
- Mage::helper('pure360_list')->getCustomerSegmentData($customer)));
131
 
132
- $customerData = array_merge($customer->toArray(), $salesData, $groupData, $segmentData);
 
 
133
 
134
- // Get date key lookup:
135
- $dateKeyLookup = Mage::helper('pure360_list')->getDateKeyLookup();
 
136
 
137
- foreach(Mage::helper('pure360_list')->getListKeys($list) as $key)
138
- {
139
- $val = '';
 
140
 
141
- if(isset($customerData[$key]))
142
  {
143
- $val = $customerData[$key];
144
- if(!empty($val))
 
145
  {
146
- if(in_array($key, $dateKeyLookup))
 
147
  {
148
- // Format to pure360 list date
149
- $val = Mage::helper('pure360_list')->toDate($val);
 
 
 
150
  }
151
  }
 
 
152
  }
153
 
154
- $postFields .= '&' . $key . '=' . $val;
155
- }
 
 
156
 
157
- if($list->getDoubleOptinEnabled() != 'y')
 
 
158
  {
159
- $postFields .= '&doubleOptin=false';
160
  }
161
-
162
- $postFields .= '&signup_date=' . urlencode(Mage::helper('pure360_list')->toDate($date));
163
  $postFields .= '&email=' . urlencode($customer->getEmail());
164
 
165
  // Do post
79
  * @param Mage_Customer_Model_Customer $customer
80
  * @return type
81
  */
82
+ public function listSubscribeCustomer($client, $customer, $date, $subscribe = true)
83
  {
84
  Mage::helper('pure360_newsletter')->writeDebug(__METHOD__ . ' - start');
85
 
116
  $postFields .= '&website=' . urlencode(Mage::app()->getWebsite($websiteId)->getName());
117
  $postFields .= '&store=' . urlencode($store->getName());
118
 
119
+ if($subscribe)
120
+ {
121
 
 
122
 
123
+ // Process Customer
124
+ $salesFields = Mage::helper('pure360_list')->getSalesFields($list);
 
125
 
126
+ $salesData = empty($salesFields) ? array() : Mage::helper('pure360_list')->getSalesData($customer, $salesFields);
 
 
127
 
128
+ $groupData = array('customer_group' =>
129
+ Mage::helper('pure360_common')->arrayToCsv(
130
+ Mage::helper('pure360_list')->getCustomerGroupData($customer)));
131
 
132
+ $segmentData = array('customer_segments' =>
133
+ Mage::helper('pure360_common')->arrayToCsv(
134
+ Mage::helper('pure360_list')->getCustomerSegmentData($customer)));
135
 
136
+ $customerData = array_merge($customer->toArray(), $salesData, $groupData, $segmentData);
137
+
138
+ // Get date key lookup:
139
+ $dateKeyLookup = Mage::helper('pure360_list')->getDateKeyLookup();
140
 
141
+ foreach(Mage::helper('pure360_list')->getListKeys($list) as $key)
142
  {
143
+ $val = '';
144
+
145
+ if(isset($customerData[$key]))
146
  {
147
+ $val = $customerData[$key];
148
+ if(!empty($val))
149
  {
150
+ if(in_array($key, $dateKeyLookup))
151
+ {
152
+ // Format to pure360 list date
153
+ $val = Mage::helper('pure360_list')->toDate($val);
154
+ }
155
  }
156
  }
157
+
158
+ $postFields .= '&' . $key . '=' . $val;
159
  }
160
 
161
+ if($list->getDoubleOptinEnabled() != 'y')
162
+ {
163
+ $postFields .= '&doubleOptin=false';
164
+ }
165
 
166
+ $postFields .= '&signup_date=' . urlencode(Mage::helper('pure360_list')->toDate($date));
167
+
168
+ } else
169
  {
170
+ $postFields .= '&mode=OPTOUT';
171
  }
172
+
 
173
  $postFields .= '&email=' . urlencode($customer->getEmail());
174
 
175
  // Do post
app/code/community/Pure360/Newsletter/Model/Subscriber.php CHANGED
@@ -6,6 +6,7 @@
6
  */
7
  class Pure360_Newsletter_Model_Subscriber extends Mage_Newsletter_Model_Subscriber
8
  {
 
9
  /**
10
  * Override default subscribe action.
11
  */
@@ -18,7 +19,7 @@ class Pure360_Newsletter_Model_Subscriber extends Mage_Newsletter_Model_Subscrib
18
  if($this->getIsStatusChanged() && $this->getStatus() == self::STATUS_SUBSCRIBED)
19
  {
20
  $this->tagSubscription();
21
-
22
  if(Mage::app()->getWebsite()->getCode() !== 'admin')
23
  {
24
  if($callback)
@@ -42,20 +43,44 @@ class Pure360_Newsletter_Model_Subscriber extends Mage_Newsletter_Model_Subscrib
42
  {
43
  if(Mage::helper('pure360_newsletter')->isEnabledForStore($customer->getStoreId()))
44
  {
45
- if($this->getIsStatusChanged() && $this->getStatus() == self::STATUS_SUBSCRIBED)
46
  {
47
- $this->tagSubscription();
48
-
49
- if(Mage::app()->getWebsite()->getCode() !== 'admin')
50
- {
51
- if($callback)
52
  {
53
- $client = Mage::helper('pure360_common/api')->getClientForWebsite();
54
- Mage::helper('pure360_newsletter/api')->listSubscribeCustomer($client, $customer, $this->getSubscriptionDate());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  }
56
  }
57
-
58
- $customer->save();
59
  }
60
  }
61
  }
@@ -70,13 +95,13 @@ class Pure360_Newsletter_Model_Subscriber extends Mage_Newsletter_Model_Subscrib
70
  if(parent::unsubscribe())
71
  {
72
  $storeId = $this->getStoreId();
73
-
74
  if($this->getCustomerId())
75
  {
76
  $customer = Mage::getModel('customer/customer')->load($this->getCustomerId());
77
- $storeId = $customer->getStoreId();
78
  }
79
-
80
  if(Mage::helper('pure360_newsletter')->isEnabledForStore($storeId))
81
  {
82
  if($this->getStatus() == self::STATUS_UNSUBSCRIBED)
@@ -89,6 +114,9 @@ class Pure360_Newsletter_Model_Subscriber extends Mage_Newsletter_Model_Subscrib
89
  Mage::helper('pure360_newsletter/api')->listSubscribe($client, $this, false);
90
  }
91
  }
 
 
 
92
  }
93
  }
94
  }
@@ -107,6 +135,8 @@ class Pure360_Newsletter_Model_Subscriber extends Mage_Newsletter_Model_Subscrib
107
  /**
108
  * Suppress default confirmation success email function if Pure360
109
  * module is active.
 
 
110
  */
111
  public function sendConfirmationSuccessEmail()
112
  {
@@ -123,52 +153,18 @@ class Pure360_Newsletter_Model_Subscriber extends Mage_Newsletter_Model_Subscrib
123
  /**
124
  * Suppress default unsubscribe confirmation email function if Pure360
125
  * module is active.
 
 
126
  */
127
  public function sendUnsubscriptionEmail()
128
  {
129
  if(Mage::helper('pure360_newsletter')->isEnabledForStore($this->getStoreId()))
130
  {
131
  return $this;
 
132
  } else
133
  {
134
  return parent::sendUnsubscriptionEmail();
135
  }
136
  }
137
-
138
- /**
139
- * Processing object before save data
140
- *
141
- */
142
- protected function _beforeSave()
143
- {
144
- parent::_beforeSave();
145
-
146
- if(Mage::helper('pure360_newsletter')->isEnabledForStore($this->getStoreId()))
147
- {
148
- $this->setPure360SyncStatus(0);
149
-
150
- // Trigger Pure360 sync status for customer too
151
- if($this->getCustomerId() > 0)
152
- {
153
- $customer = Mage::getModel('customer/customer')->load($this->getCustomerId());
154
- if($customer->getId())
155
- {
156
- $customer->save();
157
- }
158
- }
159
- }
160
-
161
- return $this;
162
- }
163
-
164
- /**
165
- * Processing object after delete data
166
- *
167
- * @return Pure360_Newsletter_Model_Subscriber
168
- */
169
- protected function _afterDelete()
170
- {
171
- parent::_afterDelete();
172
- }
173
-
174
- }
6
  */
7
  class Pure360_Newsletter_Model_Subscriber extends Mage_Newsletter_Model_Subscriber
8
  {
9
+
10
  /**
11
  * Override default subscribe action.
12
  */
19
  if($this->getIsStatusChanged() && $this->getStatus() == self::STATUS_SUBSCRIBED)
20
  {
21
  $this->tagSubscription();
22
+
23
  if(Mage::app()->getWebsite()->getCode() !== 'admin')
24
  {
25
  if($callback)
43
  {
44
  if(Mage::helper('pure360_newsletter')->isEnabledForStore($customer->getStoreId()))
45
  {
46
+ if($this->getIsStatusChanged())
47
  {
48
+ switch($this->getStatus())
49
+ {
50
+ case self::STATUS_SUBSCRIBED:
 
 
51
  {
52
+ $this->tagSubscription();
53
+
54
+ if(Mage::app()->getWebsite()->getCode() !== 'admin')
55
+ {
56
+ if($callback)
57
+ {
58
+ $client = Mage::helper('pure360_common/api')->getClientForWebsite();
59
+ Mage::helper('pure360_newsletter/api')->listSubscribeCustomer($client, $customer, $this->getSubscriptionDate(), true);
60
+ }
61
+ }
62
+
63
+ $customer->save();
64
+ break;
65
+ }
66
+ case self::STATUS_UNSUBSCRIBED:
67
+ {
68
+ if(Mage::app()->getWebsite()->getCode() !== 'admin')
69
+ {
70
+ if($callback)
71
+ {
72
+ $client = Mage::helper('pure360_common/api')->getClientForWebsite();
73
+ Mage::helper('pure360_newsletter/api')->listSubscribeCustomer($client, $customer, $this->getSubscriptionDate(), false);
74
+ }
75
+ }
76
+
77
+ // Add to optout list to make sure
78
+ Mage::helper('pure360_list')->listOptout($this->getSubscriberEmail(), $customer->getStoreId());
79
+
80
+ $customer->save();
81
+ break;
82
  }
83
  }
 
 
84
  }
85
  }
86
  }
95
  if(parent::unsubscribe())
96
  {
97
  $storeId = $this->getStoreId();
98
+
99
  if($this->getCustomerId())
100
  {
101
  $customer = Mage::getModel('customer/customer')->load($this->getCustomerId());
102
+ $storeId = $customer->getStoreId();
103
  }
104
+
105
  if(Mage::helper('pure360_newsletter')->isEnabledForStore($storeId))
106
  {
107
  if($this->getStatus() == self::STATUS_UNSUBSCRIBED)
114
  Mage::helper('pure360_newsletter/api')->listSubscribe($client, $this, false);
115
  }
116
  }
117
+
118
+ // Add to optout list to make sure
119
+ Mage::helper('pure360_list')->listOptout($this->getSubscriberEmail(), $storeId);
120
  }
121
  }
122
  }
135
  /**
136
  * Suppress default confirmation success email function if Pure360
137
  * module is active.
138
+ *
139
+ * @return Pure360_Newsletter_Model_Subscriber
140
  */
141
  public function sendConfirmationSuccessEmail()
142
  {
153
  /**
154
  * Suppress default unsubscribe confirmation email function if Pure360
155
  * module is active.
156
+ *
157
+ * @return Pure360_Newsletter_Model_Subscriber
158
  */
159
  public function sendUnsubscriptionEmail()
160
  {
161
  if(Mage::helper('pure360_newsletter')->isEnabledForStore($this->getStoreId()))
162
  {
163
  return $this;
164
+
165
  } else
166
  {
167
  return parent::sendUnsubscriptionEmail();
168
  }
169
  }
170
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Pure360/Newsletter/etc/config.xml CHANGED
@@ -2,7 +2,7 @@
2
  <config>
3
  <modules>
4
  <Pure360_Newsletter>
5
- <version>1.0.3</version>
6
  </Pure360_Newsletter>
7
  </modules>
8
  <global>
@@ -92,7 +92,7 @@
92
  <children>
93
  <config>
94
  <children>
95
- <pure360_newsletter module="pure360_newsletterr">
96
  <title>Pure360 Newsletter Options Section</title>
97
  </pure360_newsletter>
98
  </children>
@@ -139,4 +139,4 @@
139
  </modules>
140
  </suite>
141
  </phpunit>
142
- </config>
2
  <config>
3
  <modules>
4
  <Pure360_Newsletter>
5
+ <version>1.1.0</version>
6
  </Pure360_Newsletter>
7
  </modules>
8
  <global>
92
  <children>
93
  <config>
94
  <children>
95
+ <pure360_newsletter module="pure360_newsletter">
96
  <title>Pure360 Newsletter Options Section</title>
97
  </pure360_newsletter>
98
  </children>
139
  </modules>
140
  </suite>
141
  </phpunit>
142
+ </config>
app/code/community/Pure360/Newsletter/sql/pure360_newsletter_setup/{mysql4-install-1.0.3.php → mysql4-install-1.0.4.php} RENAMED
File without changes
app/design/adminhtml/default/default/layout/pure360_cart.xml CHANGED
@@ -1,8 +1,8 @@
1
- <?xml version="1.0"?>
2
- <layout>
3
- <adminhtml_system_config_edit>
4
- <reference name="content">
5
- <block type="pure360_cart/jsinit" name="pure360_cart_jsinit" template="pure360/cart/jsinit.phtml"></block>
6
- </reference>
7
- </adminhtml_system_config_edit>
8
- </layout>
1
+ <?xml version="1.0"?>
2
+ <layout>
3
+ <adminhtml_system_config_edit>
4
+ <reference name="content">
5
+ <block type="pure360_cart/jsinit" name="pure360_cart_jsinit" template="pure360/cart/jsinit.phtml"></block>
6
+ </reference>
7
+ </adminhtml_system_config_edit>
8
+ </layout>
app/design/adminhtml/default/default/layout/pure360_common.xml CHANGED
@@ -1,8 +1,8 @@
1
- <?xml version="1.0"?>
2
- <layout>
3
- <adminhtml_system_config_edit>
4
- <reference name="content">
5
- <block type="pure360_common/jsinit" name="pure360_common_jsinit" template="pure360/common/jsinit.phtml"></block>
6
- </reference>
7
- </adminhtml_system_config_edit>
8
- </layout>
1
+ <?xml version="1.0"?>
2
+ <layout>
3
+ <adminhtml_system_config_edit>
4
+ <reference name="content">
5
+ <block type="pure360_common/jsinit" name="pure360_common_jsinit" template="pure360/common/jsinit.phtml"></block>
6
+ </reference>
7
+ </adminhtml_system_config_edit>
8
+ </layout>
app/design/adminhtml/default/default/layout/pure360_cron.xml CHANGED
@@ -1,8 +1,8 @@
1
- <?xml version="1.0"?>
2
- <layout>
3
- <adminhtml_system_config_edit>
4
- <reference name="content">
5
- <block type="pure360_cron/jsinit" name="pure360_cron_jsinit" template="pure360/cron/jsinit.phtml"></block>
6
- </reference>
7
- </adminhtml_system_config_edit>
8
  </layout>
1
+ <?xml version="1.0"?>
2
+ <layout>
3
+ <adminhtml_system_config_edit>
4
+ <reference name="content">
5
+ <block type="pure360_cron/jsinit" name="pure360_cron_jsinit" template="pure360/cron/jsinit.phtml"></block>
6
+ </reference>
7
+ </adminhtml_system_config_edit>
8
  </layout>
app/design/adminhtml/default/default/layout/pure360_email.xml CHANGED
@@ -1,8 +1,8 @@
1
- <?xml version="1.0"?>
2
- <layout>
3
- <adminhtml_system_config_edit>
4
- <reference name="content">
5
- <block type="pure360_email/jsinit" name="pure360_email_jsinit" template="pure360/email/jsinit.phtml"></block>
6
- </reference>
7
- </adminhtml_system_config_edit>
8
  </layout>
1
+ <?xml version="1.0"?>
2
+ <layout>
3
+ <adminhtml_system_config_edit>
4
+ <reference name="content">
5
+ <block type="pure360_email/jsinit" name="pure360_email_jsinit" template="pure360/email/jsinit.phtml"></block>
6
+ </reference>
7
+ </adminhtml_system_config_edit>
8
  </layout>
app/design/adminhtml/default/default/layout/pure360_list.xml CHANGED
@@ -1,15 +1,15 @@
1
- <?xml version="1.0"?>
2
- <layout>
3
- <adminhtml_system_config_edit>
4
- <reference name="content">
5
- <block type="pure360_list/jsinit" name="pure360_list_jsinit" template="pure360/list/jsinit.phtml"></block>
6
- </reference>
7
- </adminhtml_system_config_edit>
8
-
9
- <pure360_list>
10
- <reference name="content">
11
- <block type="pure360_list/adminhtml_system_config_list" name="pure360_list" template="pure360/list/list.phtml"></block>
12
- </reference>
13
- </pure360_list>
14
-
15
  </layout>
1
+ <?xml version="1.0"?>
2
+ <layout>
3
+ <adminhtml_system_config_edit>
4
+ <reference name="content">
5
+ <block type="pure360_list/jsinit" name="pure360_list_jsinit" template="pure360/list/jsinit.phtml"></block>
6
+ </reference>
7
+ </adminhtml_system_config_edit>
8
+
9
+ <pure360_list>
10
+ <reference name="content">
11
+ <block type="pure360_list/adminhtml_system_config_list" name="pure360_list" template="pure360/list/list.phtml"></block>
12
+ </reference>
13
+ </pure360_list>
14
+
15
  </layout>
app/design/adminhtml/default/default/layout/pure360_newsletter.xml CHANGED
@@ -1,8 +1,8 @@
1
- <?xml version="1.0"?>
2
- <layout>
3
- <adminhtml_system_config_edit>
4
- <reference name="content">
5
- <block type="pure360_newsletter/jsinit" name="pure360_newsletter_jsinit" template="pure360/newsletter/jsinit.phtml"></block>
6
- </reference>
7
- </adminhtml_system_config_edit>
8
  </layout>
1
+ <?xml version="1.0"?>
2
+ <layout>
3
+ <adminhtml_system_config_edit>
4
+ <reference name="content">
5
+ <block type="pure360_newsletter/jsinit" name="pure360_newsletter_jsinit" template="pure360/newsletter/jsinit.phtml"></block>
6
+ </reference>
7
+ </adminhtml_system_config_edit>
8
  </layout>
app/design/adminhtml/default/default/template/pure360/common/about.phtml CHANGED
@@ -1,9 +1,9 @@
1
- <?php /* var $this Pure360_Common_Block_Adminhtml_System_Config_About */ ?>
2
-
3
- <div style="background-color: #f4f9f5; border: 1px solid #D6D6D6; margin-bottom: 10px; padding: 10px 5px 15px 30px; color: #000">
4
- <p style="float: right; font-family: monospace; font-size: 9px; color: gray">v<?php echo $this->helper('pure360_common')->getModuleVersion(); ?></p>
5
- <a href="http://www.pure360.com" target="_blank"><img src="<?php echo $this->getSkinUrl('images/pure360/pure_logo.png'); ?>" alt="Pure360" style="float: left; margin-right: 20px;"/></a>
6
- <strong>Improving your email marketing &amp; SMS results together</strong><br/>
7
- Call Pure360 on 08082 562353<br/>
8
- <a href="http://www.pure360.com">http://www.pure360.com</a><br/>
9
  </div>
1
+ <?php /* var $this Pure360_Common_Block_Adminhtml_System_Config_About */ ?>
2
+
3
+ <div style="background-color: #f4f9f5; border: 1px solid #D6D6D6; margin-bottom: 10px; padding: 10px 5px 15px 30px; color: #000">
4
+ <p style="float: right; font-family: monospace; font-size: 9px; color: gray">v<?php echo $this->helper('pure360_common')->getModuleVersion(); ?></p>
5
+ <a href="http://www.pure360.com" target="_blank"><img src="<?php echo $this->getSkinUrl('images/pure360/pure_logo.png'); ?>" alt="Pure360" style="float: left; margin-right: 20px;"/></a>
6
+ <strong>Improving your email marketing &amp; SMS results together</strong><br/>
7
+ Call Pure360 on 08082 562353<br/>
8
+ <a href="http://www.pure360.com">http://www.pure360.com</a><br/>
9
  </div>
app/design/adminhtml/default/default/template/pure360/common/disabled.phtml CHANGED
@@ -1,10 +1,10 @@
1
- <?php include 'about.phtml'; ?>
2
- <div id="messages">
3
- <ul class="messages">
4
- <li class="error-msg">
5
- <ul>
6
- <li><span>This module is currently disabled at this scope. Please try a different configuration scope or check the API Configuration has been set correctly.</span></li>
7
- </ul>
8
- </li>
9
- </ul>
10
- </div>
1
+ <?php include 'about.phtml'; ?>
2
+ <div id="messages">
3
+ <ul class="messages">
4
+ <li class="error-msg">
5
+ <ul>
6
+ <li><span>This module is currently disabled at this scope. Please try a different configuration scope or check the API Configuration has been set correctly.</span></li>
7
+ </ul>
8
+ </li>
9
+ </ul>
10
+ </div>
app/design/adminhtml/default/default/template/pure360/common/error.phtml CHANGED
@@ -1,10 +1,10 @@
1
-
2
- <div id="messages">
3
- <ul class="messages">
4
- <li class="error-msg">
5
- <ul>
6
- <li><span>An error occurred: <?php echo $this->error->getMessage();?></span></li>
7
- </ul>
8
- </li>
9
- </ul>
10
- </div>
1
+
2
+ <div id="messages">
3
+ <ul class="messages">
4
+ <li class="error-msg">
5
+ <ul>
6
+ <li><span>An error occurred: <?php echo $this->error->getMessage();?></span></li>
7
+ </ul>
8
+ </li>
9
+ </ul>
10
+ </div>
app/design/adminhtml/default/default/template/pure360/common/jsinit.phtml CHANGED
@@ -1,16 +1,16 @@
1
- <?php
2
- $scope = Mage::helper('pure360_common')->getScope();
3
- $scopeId = Mage::helper('pure360_common')->getScopeId();
4
- ?>
5
- <script type="text/javascript">
6
-
7
- //<![CDATA[
8
- function initPure360()
9
- {
10
- pure360 = new Pure360(
11
- '<?php echo $scope; ?>',
12
- '<?php echo $this->getUrl('pure360_common/ajax/validate'); ?>');
13
- }
14
- //]]>
15
- </script>
16
-
1
+ <?php
2
+ $scope = Mage::helper('pure360_common')->getScope();
3
+ $scopeId = Mage::helper('pure360_common')->getScopeId();
4
+ ?>
5
+ <script type="text/javascript">
6
+
7
+ //<![CDATA[
8
+ function initPure360()
9
+ {
10
+ pure360 = new Pure360(
11
+ '<?php echo $scope; ?>',
12
+ '<?php echo $this->getUrl('pure360_common/ajax/validate'); ?>');
13
+ }
14
+ //]]>
15
+ </script>
16
+
app/design/adminhtml/default/default/template/pure360/email/transactional.phtml CHANGED
@@ -1,70 +1,70 @@
1
- <?php if ($this->transactionalProfileEnabled) : ?>
2
-
3
- <?php
4
- $transactionals = $this->getTransactionals();
5
-
6
- if($transactionals && false) : ?>
7
-
8
- <div id="pure360_email_transactional_container">
9
- <div id="pure360_email_transactional_options" class="entry-edit">
10
- <div class="entry-edit-head">
11
- <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('pure360_email')->__('Transactional Email Mapping') ?></h4>
12
- </div>
13
- <fieldset name="pure360_email_transactional">
14
- <legend><?php echo Mage::helper('pure360_email')->__('Transactional Email Mapping') ?></legend>
15
- <table id="mapping_table" class="form-list" cellspacing="0">
16
- <colgroup class="label"></colgroup>
17
- <colgroup class="value"></colgroup>
18
- <colgroup class="scope-label"></colgroup>
19
- <colgroup class=""></colgroup>
20
- <tbody>
21
-
22
- <?php if (!$transactionals->getSize()) : ?>
23
-
24
- <tr class="addMappingRow">
25
- <td class="label"><label></label></td>
26
- <td class="value">
27
- <select name="pure360_email_template_ids[]" class="select">
28
- <?php echo $this->getTemplates(); ?>
29
- </select>
30
- </td>
31
- <td class="value">
32
- <select name="pure360_email_message_ids[]" class="select">
33
- <?php echo $this->getMessages(); ?>
34
- </select>
35
- </td>
36
- </tr>
37
-
38
- <?php else : ?>
39
-
40
- <?php foreach ($transactionals as $transactional) : ?>
41
-
42
- <tr class="addMappingRow">
43
- <td class="label"><label></label></td>
44
- <td class="value">
45
- <select name="pure360_email_template_ids[]" class="select">
46
- <?php echo $this->getTemplates($transactional->getTemplateId()); ?>
47
- </select>
48
- </td>
49
- <td class="value">
50
- <select name="pure360_email_message_ids[]" class="select">
51
- <?php echo $this->getMessages($transactional->getMessageId()); ?>
52
- </select>
53
- </td>
54
- </tr>
55
-
56
- <?php endforeach; ?>
57
-
58
- <?php endif; ?>
59
-
60
- <tr class="addButtonRow">
61
- <td colspan="3"><button onclick="pure360Email.addMapping()" class="scalable save right" style="margin: 10px; margin-right: 25px;" type="button" >Add new</button></td>
62
- </tr>
63
- </tbody>
64
- </table>
65
- </fieldset>
66
- </div>
67
- </div>
68
- <?php endif; ?>
69
-
70
  <?php endif; ?>
1
+ <?php if ($this->transactionalProfileEnabled) : ?>
2
+
3
+ <?php
4
+ $transactionals = $this->getTransactionals();
5
+
6
+ if($transactionals && false) : ?>
7
+
8
+ <div id="pure360_email_transactional_container">
9
+ <div id="pure360_email_transactional_options" class="entry-edit">
10
+ <div class="entry-edit-head">
11
+ <h4 class="icon-head head-edit-form fieldset-legend"><?php echo Mage::helper('pure360_email')->__('Transactional Email Mapping') ?></h4>
12
+ </div>
13
+ <fieldset name="pure360_email_transactional">
14
+ <legend><?php echo Mage::helper('pure360_email')->__('Transactional Email Mapping') ?></legend>
15
+ <table id="mapping_table" class="form-list" cellspacing="0">
16
+ <colgroup class="label"></colgroup>
17
+ <colgroup class="value"></colgroup>
18
+ <colgroup class="scope-label"></colgroup>
19
+ <colgroup class=""></colgroup>
20
+ <tbody>
21
+
22
+ <?php if (!$transactionals->getSize()) : ?>
23
+
24
+ <tr class="addMappingRow">
25
+ <td class="label"><label></label></td>
26
+ <td class="value">
27
+ <select name="pure360_email_template_ids[]" class="select">
28
+ <?php echo $this->getTemplates(); ?>
29
+ </select>
30
+ </td>
31
+ <td class="value">
32
+ <select name="pure360_email_message_ids[]" class="select">
33
+ <?php echo $this->getMessages(); ?>
34
+ </select>
35
+ </td>
36
+ </tr>
37
+
38
+ <?php else : ?>
39
+
40
+ <?php foreach ($transactionals as $transactional) : ?>
41
+
42
+ <tr class="addMappingRow">
43
+ <td class="label"><label></label></td>
44
+ <td class="value">
45
+ <select name="pure360_email_template_ids[]" class="select">
46
+ <?php echo $this->getTemplates($transactional->getTemplateId()); ?>
47
+ </select>
48
+ </td>
49
+ <td class="value">
50
+ <select name="pure360_email_message_ids[]" class="select">
51
+ <?php echo $this->getMessages($transactional->getMessageId()); ?>
52
+ </select>
53
+ </td>
54
+ </tr>
55
+
56
+ <?php endforeach; ?>
57
+
58
+ <?php endif; ?>
59
+
60
+ <tr class="addButtonRow">
61
+ <td colspan="3"><button onclick="pure360Email.addMapping()" class="scalable save right" style="margin: 10px; margin-right: 25px;" type="button" >Add new</button></td>
62
+ </tr>
63
+ </tbody>
64
+ </table>
65
+ </fieldset>
66
+ </div>
67
+ </div>
68
+ <?php endif; ?>
69
+
70
  <?php endif; ?>
app/design/frontend/base/default/layout/pure360/cart.xml CHANGED
@@ -1,10 +1,10 @@
1
- <?xml version="1.0"?>
2
- <layout>
3
- <pure360_cart_email_order_items>
4
- <block type="pure360_cart/email_order_items" name="items" template="pure360/cart/email/order/items.phtml">
5
- <action method="addItemRender"><type>default</type><block>pure360_cart/email_order_items_order_default</block><template>pure360/cart/email/order/items/order/default.phtml</template></action>
6
- <action method="addItemRender"><type>grouped</type><block>pure360_cart/email_order_items_order_grouped</block><template>pure360/cart/email/order/items/order/default.phtml</template></action>
7
- </block>
8
- <block type="core/text_list" name="additional.product.info" />
9
- </pure360_cart_email_order_items>
10
- </layout>
1
+ <?xml version="1.0"?>
2
+ <layout>
3
+ <pure360_cart_email_order_items>
4
+ <block type="pure360_cart/email_order_items" name="items" template="pure360/cart/email/order/items.phtml">
5
+ <action method="addItemRender"><type>default</type><block>pure360_cart/email_order_items_order_default</block><template>pure360/cart/email/order/items/order/default.phtml</template></action>
6
+ <action method="addItemRender"><type>grouped</type><block>pure360_cart/email_order_items_order_grouped</block><template>pure360/cart/email/order/items/order/default.phtml</template></action>
7
+ </block>
8
+ <block type="core/text_list" name="additional.product.info" />
9
+ </pure360_cart_email_order_items>
10
+ </layout>
app/design/frontend/base/default/layout/pure360/newsletter.xml CHANGED
@@ -1,12 +1,12 @@
1
- <?xml version="1.0"?>
2
- <layout>
3
- <checkout_onepage_index>
4
- <reference name="content">
5
- <block type="pure360_newsletter/checkout_onepage_newsletter" name="checkout.onepage.billing.newsletter.js" after="-">
6
- <action method="setTemplate" >
7
- <template>pure360/newsletter/jsinit.phtml</template>
8
- </action>
9
- </block>
10
- </reference>
11
- </checkout_onepage_index>
12
  </layout>
1
+ <?xml version="1.0"?>
2
+ <layout>
3
+ <checkout_onepage_index>
4
+ <reference name="content">
5
+ <block type="pure360_newsletter/checkout_onepage_newsletter" name="checkout.onepage.billing.newsletter.js" after="-">
6
+ <action method="setTemplate" >
7
+ <template>pure360/newsletter/jsinit.phtml</template>
8
+ </action>
9
+ </block>
10
+ </reference>
11
+ </checkout_onepage_index>
12
  </layout>
app/design/frontend/base/default/template/pure360/cart/email/order/items.phtml CHANGED
@@ -1,86 +1,86 @@
1
- <?php $_quote = $this->getQuote() ?>
2
- <table cellspacing="0" cellpadding="0" border="0" width="650" style="border:1px solid #EAEAEA;">
3
- <thead>
4
- <tr>
5
- <th align="left" bgcolor="#EAEAEA" style="font-size:13px; padding:3px 9px"><?php echo $this->__('Item') ?></th>
6
- <th align="left" bgcolor="#EAEAEA" style="font-size:13px; padding:3px 9px"><?php echo $this->__('Sku') ?></th>
7
- <th align="center" bgcolor="#EAEAEA" style="font-size:13px; padding:3px 9px"><?php echo $this->__('Qty') ?></th>
8
- <th align="right" bgcolor="#EAEAEA" style="font-size:13px; padding:3px 9px"><?php echo $this->__('Subtotal') ?></th>
9
- </tr>
10
- </thead>
11
- <?php if(is_object($_quote)) : ?>
12
- <?php $i = 0;
13
- foreach($_quote->getAllItems() as $_item): ?>
14
- <?php if($_item->getParentItemId()) continue;
15
- else $i++; ?>
16
- <?php
17
- if($_item->getProductType() == 'configurable' || $_item->getProductType() == 'bundle') :
18
- $finalResult = array();
19
- $result = array();
20
- $options = $_item->getProduct()->getTypeInstance(true)->getOrderOptions($_item->getProduct());
21
- // Check for options
22
- if($options)
23
- {
24
- if(isset($options['options']))
25
- {
26
- $result = array_merge($result, $options['options']);
27
- }
28
- if(isset($options['additional_options']))
29
- {
30
- $result = array_merge($result, $options['additional_options']);
31
- }
32
- if(!empty($options['attributes_info']))
33
- {
34
- $result = array_merge($options['attributes_info'], $result);
35
- }
36
- if(isset($options['bundle_options']))
37
- {
38
-
39
-
40
- $bundled_product = new Mage_Catalog_Model_Product();
41
- $bundled_product->load($_item->getProduct()->getId());
42
- $selectionCollection = $bundled_product->getTypeInstance(true)->getSelectionsCollection(
43
- $bundled_product->getTypeInstance(true)->getOptionsIds($bundled_product), $bundled_product
44
- );
45
-
46
- $bundled_items = array();
47
- $label = '';
48
- $qty = '';
49
- foreach($selectionCollection as $option)
50
- {
51
- foreach($options['bundle_options'] as $bundle)
52
- {
53
- if($bundle['value'][0]['title'] == $option->getName())
54
- {
55
- $label = $bundle['label'];
56
- $qty = $bundle['value'][0]['qty'];
57
- $aux_options[] = array('label' => $label, 'value' => $qty . ' x ' . $option->getName() . ' ' . Mage::helper('checkout')->formatPrice($option->getPrice()), 'sku' => $option->getSku());
58
- }
59
- }
60
- }
61
-
62
- $result = array_merge($result, $aux_options);
63
- }
64
- }
65
- $options = array_merge($finalResult, $result);
66
- endif;
67
- ?>
68
- <tbody<?php echo $i % 2 ? ' bgcolor="#F6F6F6"' : '' ?>>
69
- <tr>
70
- <?php echo '<td valign="top" align="left" style="padding:3px 9px">' . $_item['name'] . '</td>'; ?>
71
- <?php echo '<td valign="top" align="left" style="padding:3px 9px">' . $_item['sku'] . '</td>'; ?>
72
- <?php echo '<td valign="top" align="center" style="padding:3px 9px">' . $_item['qty'] . '</td>'; ?>
73
- <?php echo '<td valign="top" align="right" style="padding:3px 9px">' . $this->getTax($_item) . '</td>'; ?>
74
- <?php if(isset($options) && is_array($options)) : foreach($options as $option) : echo '<tr><td valign="top" align="left" style="padding:3px 9px" colspan="4"><strong><em>' . $option['label'] . '</em></strong></td></tr>' . '<tr><td valign="top" align="left" style="padding:3px 19px">' . $option['value'] . '</td>';
75
- if(isset($option['sku'])) : echo '<td style="padding:3px 9px">' . $option['sku'] . '</td><td></td><td></td>';
76
- else: echo '<td></td><td></td><td></td>';
77
- endif;
78
- endforeach;
79
- $options = null;
80
- endif;
81
- '</tr>' ?>
82
- </tr>
83
- </tbody>
84
- <?php endforeach; ?>
85
- <?php endif; ?>
86
  </table>
1
+ <?php $_quote = $this->getQuote() ?>
2
+ <table cellspacing="0" cellpadding="0" border="0" width="650" style="border:1px solid #EAEAEA;">
3
+ <thead>
4
+ <tr>
5
+ <th align="left" bgcolor="#EAEAEA" style="font-size:13px; padding:3px 9px"><?php echo $this->__('Item') ?></th>
6
+ <th align="left" bgcolor="#EAEAEA" style="font-size:13px; padding:3px 9px"><?php echo $this->__('Sku') ?></th>
7
+ <th align="center" bgcolor="#EAEAEA" style="font-size:13px; padding:3px 9px"><?php echo $this->__('Qty') ?></th>
8
+ <th align="right" bgcolor="#EAEAEA" style="font-size:13px; padding:3px 9px"><?php echo $this->__('Subtotal') ?></th>
9
+ </tr>
10
+ </thead>
11
+ <?php if(is_object($_quote)) : ?>
12
+ <?php $i = 0;
13
+ foreach($_quote->getAllItems() as $_item): ?>
14
+ <?php if($_item->getParentItemId()) continue;
15
+ else $i++; ?>
16
+ <?php
17
+ if($_item->getProductType() == 'configurable' || $_item->getProductType() == 'bundle') :
18
+ $finalResult = array();
19
+ $result = array();
20
+ $options = $_item->getProduct()->getTypeInstance(true)->getOrderOptions($_item->getProduct());
21
+ // Check for options
22
+ if($options)
23
+ {
24
+ if(isset($options['options']))
25
+ {
26
+ $result = array_merge($result, $options['options']);
27
+ }
28
+ if(isset($options['additional_options']))
29
+ {
30
+ $result = array_merge($result, $options['additional_options']);
31
+ }
32
+ if(!empty($options['attributes_info']))
33
+ {
34
+ $result = array_merge($options['attributes_info'], $result);
35
+ }
36
+ if(isset($options['bundle_options']))
37
+ {
38
+
39
+
40
+ $bundled_product = new Mage_Catalog_Model_Product();
41
+ $bundled_product->load($_item->getProduct()->getId());
42
+ $selectionCollection = $bundled_product->getTypeInstance(true)->getSelectionsCollection(
43
+ $bundled_product->getTypeInstance(true)->getOptionsIds($bundled_product), $bundled_product
44
+ );
45
+
46
+ $bundled_items = array();
47
+ $label = '';
48
+ $qty = '';
49
+ foreach($selectionCollection as $option)
50
+ {
51
+ foreach($options['bundle_options'] as $bundle)
52
+ {
53
+ if($bundle['value'][0]['title'] == $option->getName())
54
+ {
55
+ $label = $bundle['label'];
56
+ $qty = $bundle['value'][0]['qty'];
57
+ $aux_options[] = array('label' => $label, 'value' => $qty . ' x ' . $option->getName() . ' ' . Mage::helper('checkout')->formatPrice($option->getPrice()), 'sku' => $option->getSku());
58
+ }
59
+ }
60
+ }
61
+
62
+ $result = array_merge($result, $aux_options);
63
+ }
64
+ }
65
+ $options = array_merge($finalResult, $result);
66
+ endif;
67
+ ?>
68
+ <tbody<?php echo $i % 2 ? ' bgcolor="#F6F6F6"' : '' ?>>
69
+ <tr>
70
+ <?php echo '<td valign="top" align="left" style="padding:3px 9px">' . $_item['name'] . '</td>'; ?>
71
+ <?php echo '<td valign="top" align="left" style="padding:3px 9px">' . $_item['sku'] . '</td>'; ?>
72
+ <?php echo '<td valign="top" align="center" style="padding:3px 9px">' . $_item['qty'] . '</td>'; ?>
73
+ <?php echo '<td valign="top" align="right" style="padding:3px 9px">' . $this->getTax($_item) . '</td>'; ?>
74
+ <?php if(isset($options) && is_array($options)) : foreach($options as $option) : echo '<tr><td valign="top" align="left" style="padding:3px 9px" colspan="4"><strong><em>' . $option['label'] . '</em></strong></td></tr>' . '<tr><td valign="top" align="left" style="padding:3px 19px">' . $option['value'] . '</td>';
75
+ if(isset($option['sku'])) : echo '<td style="padding:3px 9px">' . $option['sku'] . '</td><td></td><td></td>';
76
+ else: echo '<td></td><td></td><td></td>';
77
+ endif;
78
+ endforeach;
79
+ $options = null;
80
+ endif;
81
+ '</tr>' ?>
82
+ </tr>
83
+ </tbody>
84
+ <?php endforeach; ?>
85
+ <?php endif; ?>
86
  </table>
app/design/frontend/base/default/template/pure360/cart/email/order/items/order/default.phtml CHANGED
@@ -1,111 +1,111 @@
1
- <?php $_item = $this->getItem() ?>
2
- <?php $_quote = $this->getItem()->getQuote() ?>
3
- <tr>
4
- <td align="left" valign="top" style="font-size:11px; padding:3px 9px; border-bottom:1px dotted #CCCCCC;">
5
- <strong style="font-size:11px;"><?php echo $this->htmlEscape($_item->getName()) ?></strong>
6
- <?php if($this->getItemOptions()): ?>
7
- <dl style="margin:0; padding:0;">
8
- <?php foreach($this->getItemOptions() as $option): ?>
9
- <dt><strong><em><?php echo $option['label'] ?></em></strong></dt>
10
- <dd style="margin:0; padding:0 0 0 9px;">
11
- <?php echo nl2br($this->escapeHtml($option['value'])) ?>
12
- </dd>
13
- <?php endforeach; ?>
14
- </dl>
15
- <?php endif; ?>
16
- <?php $addInfoBlock = $this->getProductAdditionalInformationBlock(); ?>
17
- <?php if($addInfoBlock) : ?>
18
- <?php echo $addInfoBlock->setItem($_item)->toHtml(); ?>
19
- <?php endif; ?>
20
- <?php echo $this->escapeHtml($_item->getDescription()) ?>
21
- </td>
22
- <td align="left" valign="top" style="font-size:11px; padding:3px 9px; border-bottom:1px dotted #CCCCCC;"><?php echo $this->htmlEscape($this->getSku($_item)) ?></td>
23
- <td align="center" valign="top" style="font-size:11px; padding:3px 9px; border-bottom:1px dotted #CCCCCC;"><?php echo $_item->getQtyOrdered() * 1 ?></td>
24
- <td align="right" valign="top" style="font-size:11px; padding:3px 9px; border-bottom:1px dotted #CCCCCC;">
25
- <?php if($this->helper('tax')->displaySalesPriceExclTax($_quote->getStoreId()) || $this->helper('tax')->displaySalesBothPrices($_quote->getStore())): ?>
26
- <?php if($this->helper('tax')->displaySalesBothPrices($_quote->getStoreId())): ?>
27
- <span class="label"><?php echo Mage::helper('tax')->__('Excl. Tax'); ?>:</span>
28
- <?php endif; ?>
29
- <?php if(Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'email', $_quote->getStore())): ?>
30
- <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($_item->getRowTotal() + $_item->getWeeeTaxAppliedRowAmount() + $_item->getWeeeTaxRowDisposition()); ?>
31
- <?php //echo $_quote->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?>
32
- <?php else: ?>
33
- <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($_item->getRowTotal()) ?>
34
- <?php endif; ?>
35
-
36
-
37
- <?php if(Mage::helper('weee')->getApplied($_item)): ?>
38
- <br />
39
- <?php if(Mage::helper('weee')->typeOfDisplay($_item, 1, 'email', $_quote->getStore())): ?>
40
- <small>
41
- <?php foreach(Mage::helper('weee')->getApplied($_item) as $tax): ?>
42
- <span class="nobr"><?php echo $tax['title']; ?>: <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($tax['row_amount'], true, true); ?></span><br />
43
- <?php endforeach; ?>
44
- </small>
45
- <?php elseif(Mage::helper('weee')->typeOfDisplay($_item, 2, 'email', $_quote->getStoreId())): ?>
46
- <?php foreach(Mage::helper('weee')->getApplied($_item) as $tax): ?>
47
- <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($tax['row_amount_incl_tax'], true, true); ?></small></span><br />
48
- <?php endforeach; ?>
49
- <?php elseif(Mage::helper('weee')->typeOfDisplay($_item, 4, 'email', $_quote->getStoreId())): ?>
50
- <small>
51
- <?php foreach(Mage::helper('weee')->getApplied($_item) as $tax): ?>
52
- <span class="nobr"><?php echo $tax['title']; ?>: <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($tax['row_amount_incl_tax'], true, true); ?></span><br />
53
- <?php endforeach; ?>
54
- </small>
55
- <?php endif; ?>
56
-
57
- <?php if(Mage::helper('weee')->typeOfDisplay($_item, 2, 'email', $_quote->getStore())): ?>
58
- <br />
59
- <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($_item->getCalculationPrice() + $_item->getWeeeTaxAppliedRowAmount() + $_item->getWeeeTaxRowDisposition()); ?></span>
60
- <?php endif; ?>
61
- <?php endif; ?>
62
- <?php endif; ?>
63
-
64
-
65
- <?php if($this->helper('tax')->displaySalesPriceInclTax($_quote->getStoreId()) || $this->helper('tax')->displaySalesBothPrices($_quote->getStoreId())): ?>
66
- <?php if($this->helper('tax')->displaySalesBothPrices($_quote->getStoreId())): ?>
67
- <br /><span class="label"><?php echo Mage::helper('tax')->__('Incl. Tax'); ?>:</span>
68
- <?php endif; ?>
69
- <?php $_incl = $this->helper('checkout')->getSubtotalInclTax($_item); ?>
70
- <?php if(Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'email', $_quote->getStoreId())): ?>
71
- <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($_incl + $_item->getWeeeTaxAppliedRowAmount()); ?>
72
- <?php else: ?>
73
- <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($_incl - $_item->getWeeeTaxRowDisposition()) ?>
74
- <?php endif; ?>
75
- <?php if(Mage::helper('weee')->getApplied($_item)): ?>
76
- <br />
77
- <?php if(Mage::helper('weee')->typeOfDisplay($_item, 1, 'email', $_quote->getStore())): ?>
78
- <small>
79
- <?php foreach(Mage::helper('weee')->getApplied($_item) as $tax): ?>
80
- <span class="nobr"><?php echo $tax['title']; ?>: <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($tax['row_amount'], true, true); ?></span><br />
81
- <?php endforeach; ?>
82
- </small>
83
- <?php elseif(Mage::helper('weee')->typeOfDisplay($_item, 2, 'email', $_quote->getStoreId())): ?>
84
- <?php foreach(Mage::helper('weee')->getApplied($_item) as $tax): ?>
85
- <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($tax['row_amount_incl_tax'], true, true); ?></small></span><br />
86
- <?php endforeach; ?>
87
- <?php elseif(Mage::helper('weee')->typeOfDisplay($_item, 4, 'email', $_quote->getStoreId())): ?>
88
- <small>
89
- <?php foreach(Mage::helper('weee')->getApplied($_item) as $tax): ?>
90
- <span class="nobr"><?php echo $tax['title']; ?>: <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($tax['row_amount_incl_tax'], true, true); ?></span><br />
91
- <?php endforeach; ?>
92
- </small>
93
- <?php endif; ?>
94
-
95
- <?php if(Mage::helper('weee')->typeOfDisplay($_item, 2, 'email', $_quote->getStoreId())): ?>
96
- <span class="nobr"><?php echo Mage::helper('weee')->__('Total incl. tax'); ?>:<br /> <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($_incl + $_item->getWeeeTaxAppliedRowAmount()); ?></span>
97
- <?php endif; ?>
98
- <?php endif; ?>
99
- <?php endif; ?>
100
- </td>
101
- </tr>
102
- <?php if($_item->getGiftMessageId() && $_giftMessage = $this->helper('giftmessage/message')->getGiftMessage($_item->getGiftMessageId())): ?>
103
- <tr>
104
- <td colspan="4" style=" border-bottom:2px solid #CCCCCC; padding:3px 9px;">
105
- <strong style="color:#444444; font-size:11px;"><?php echo $this->__('Gift Message') ?></strong>
106
- <?php echo $this->__('From:'); ?> <?php echo $this->htmlEscape($_giftMessage->getSender()) ?><br />
107
- <?php echo $this->__('To:'); ?> <?php echo $this->htmlEscape($_giftMessage->getRecipient()) ?><br />
108
- <strong><?php echo $this->__('Message:'); ?></strong><br /><?php echo $this->htmlEscape($_giftMessage->getMessage()) ?>
109
- </td>
110
- </tr>
111
- <?php endif; ?>
1
+ <?php $_item = $this->getItem() ?>
2
+ <?php $_quote = $this->getItem()->getQuote() ?>
3
+ <tr>
4
+ <td align="left" valign="top" style="font-size:11px; padding:3px 9px; border-bottom:1px dotted #CCCCCC;">
5
+ <strong style="font-size:11px;"><?php echo $this->htmlEscape($_item->getName()) ?></strong>
6
+ <?php if($this->getItemOptions()): ?>
7
+ <dl style="margin:0; padding:0;">
8
+ <?php foreach($this->getItemOptions() as $option): ?>
9
+ <dt><strong><em><?php echo $option['label'] ?></em></strong></dt>
10
+ <dd style="margin:0; padding:0 0 0 9px;">
11
+ <?php echo nl2br($this->escapeHtml($option['value'])) ?>
12
+ </dd>
13
+ <?php endforeach; ?>
14
+ </dl>
15
+ <?php endif; ?>
16
+ <?php $addInfoBlock = $this->getProductAdditionalInformationBlock(); ?>
17
+ <?php if($addInfoBlock) : ?>
18
+ <?php echo $addInfoBlock->setItem($_item)->toHtml(); ?>
19
+ <?php endif; ?>
20
+ <?php echo $this->escapeHtml($_item->getDescription()) ?>
21
+ </td>
22
+ <td align="left" valign="top" style="font-size:11px; padding:3px 9px; border-bottom:1px dotted #CCCCCC;"><?php echo $this->htmlEscape($this->getSku($_item)) ?></td>
23
+ <td align="center" valign="top" style="font-size:11px; padding:3px 9px; border-bottom:1px dotted #CCCCCC;"><?php echo $_item->getQtyOrdered() * 1 ?></td>
24
+ <td align="right" valign="top" style="font-size:11px; padding:3px 9px; border-bottom:1px dotted #CCCCCC;">
25
+ <?php if($this->helper('tax')->displaySalesPriceExclTax($_quote->getStoreId()) || $this->helper('tax')->displaySalesBothPrices($_quote->getStore())): ?>
26
+ <?php if($this->helper('tax')->displaySalesBothPrices($_quote->getStoreId())): ?>
27
+ <span class="label"><?php echo Mage::helper('tax')->__('Excl. Tax'); ?>:</span>
28
+ <?php endif; ?>
29
+ <?php if(Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'email', $_quote->getStore())): ?>
30
+ <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($_item->getRowTotal() + $_item->getWeeeTaxAppliedRowAmount() + $_item->getWeeeTaxRowDisposition()); ?>
31
+ <?php //echo $_quote->formatPrice($_item->getRowTotal()+$_item->getWeeeTaxAppliedRowAmount()+$_item->getWeeeTaxRowDisposition()); ?>
32
+ <?php else: ?>
33
+ <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($_item->getRowTotal()) ?>
34
+ <?php endif; ?>
35
+
36
+
37
+ <?php if(Mage::helper('weee')->getApplied($_item)): ?>
38
+ <br />
39
+ <?php if(Mage::helper('weee')->typeOfDisplay($_item, 1, 'email', $_quote->getStore())): ?>
40
+ <small>
41
+ <?php foreach(Mage::helper('weee')->getApplied($_item) as $tax): ?>
42
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($tax['row_amount'], true, true); ?></span><br />
43
+ <?php endforeach; ?>
44
+ </small>
45
+ <?php elseif(Mage::helper('weee')->typeOfDisplay($_item, 2, 'email', $_quote->getStoreId())): ?>
46
+ <?php foreach(Mage::helper('weee')->getApplied($_item) as $tax): ?>
47
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($tax['row_amount_incl_tax'], true, true); ?></small></span><br />
48
+ <?php endforeach; ?>
49
+ <?php elseif(Mage::helper('weee')->typeOfDisplay($_item, 4, 'email', $_quote->getStoreId())): ?>
50
+ <small>
51
+ <?php foreach(Mage::helper('weee')->getApplied($_item) as $tax): ?>
52
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($tax['row_amount_incl_tax'], true, true); ?></span><br />
53
+ <?php endforeach; ?>
54
+ </small>
55
+ <?php endif; ?>
56
+
57
+ <?php if(Mage::helper('weee')->typeOfDisplay($_item, 2, 'email', $_quote->getStore())): ?>
58
+ <br />
59
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total'); ?>:<br /> <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($_item->getCalculationPrice() + $_item->getWeeeTaxAppliedRowAmount() + $_item->getWeeeTaxRowDisposition()); ?></span>
60
+ <?php endif; ?>
61
+ <?php endif; ?>
62
+ <?php endif; ?>
63
+
64
+
65
+ <?php if($this->helper('tax')->displaySalesPriceInclTax($_quote->getStoreId()) || $this->helper('tax')->displaySalesBothPrices($_quote->getStoreId())): ?>
66
+ <?php if($this->helper('tax')->displaySalesBothPrices($_quote->getStoreId())): ?>
67
+ <br /><span class="label"><?php echo Mage::helper('tax')->__('Incl. Tax'); ?>:</span>
68
+ <?php endif; ?>
69
+ <?php $_incl = $this->helper('checkout')->getSubtotalInclTax($_item); ?>
70
+ <?php if(Mage::helper('weee')->typeOfDisplay($_item, array(0, 1, 4), 'email', $_quote->getStoreId())): ?>
71
+ <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($_incl + $_item->getWeeeTaxAppliedRowAmount()); ?>
72
+ <?php else: ?>
73
+ <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($_incl - $_item->getWeeeTaxRowDisposition()) ?>
74
+ <?php endif; ?>
75
+ <?php if(Mage::helper('weee')->getApplied($_item)): ?>
76
+ <br />
77
+ <?php if(Mage::helper('weee')->typeOfDisplay($_item, 1, 'email', $_quote->getStore())): ?>
78
+ <small>
79
+ <?php foreach(Mage::helper('weee')->getApplied($_item) as $tax): ?>
80
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($tax['row_amount'], true, true); ?></span><br />
81
+ <?php endforeach; ?>
82
+ </small>
83
+ <?php elseif(Mage::helper('weee')->typeOfDisplay($_item, 2, 'email', $_quote->getStoreId())): ?>
84
+ <?php foreach(Mage::helper('weee')->getApplied($_item) as $tax): ?>
85
+ <span class="nobr"><small><?php echo $tax['title']; ?>: <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($tax['row_amount_incl_tax'], true, true); ?></small></span><br />
86
+ <?php endforeach; ?>
87
+ <?php elseif(Mage::helper('weee')->typeOfDisplay($_item, 4, 'email', $_quote->getStoreId())): ?>
88
+ <small>
89
+ <?php foreach(Mage::helper('weee')->getApplied($_item) as $tax): ?>
90
+ <span class="nobr"><?php echo $tax['title']; ?>: <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($tax['row_amount_incl_tax'], true, true); ?></span><br />
91
+ <?php endforeach; ?>
92
+ </small>
93
+ <?php endif; ?>
94
+
95
+ <?php if(Mage::helper('weee')->typeOfDisplay($_item, 2, 'email', $_quote->getStoreId())): ?>
96
+ <span class="nobr"><?php echo Mage::helper('weee')->__('Total incl. tax'); ?>:<br /> <?php echo Mage::app()->getLocale()->currency($_quote->getQuoteCurrencyCode())->toCurrency($_incl + $_item->getWeeeTaxAppliedRowAmount()); ?></span>
97
+ <?php endif; ?>
98
+ <?php endif; ?>
99
+ <?php endif; ?>
100
+ </td>
101
+ </tr>
102
+ <?php if($_item->getGiftMessageId() && $_giftMessage = $this->helper('giftmessage/message')->getGiftMessage($_item->getGiftMessageId())): ?>
103
+ <tr>
104
+ <td colspan="4" style=" border-bottom:2px solid #CCCCCC; padding:3px 9px;">
105
+ <strong style="color:#444444; font-size:11px;"><?php echo $this->__('Gift Message') ?></strong>
106
+ <?php echo $this->__('From:'); ?> <?php echo $this->htmlEscape($_giftMessage->getSender()) ?><br />
107
+ <?php echo $this->__('To:'); ?> <?php echo $this->htmlEscape($_giftMessage->getRecipient()) ?><br />
108
+ <strong><?php echo $this->__('Message:'); ?></strong><br /><?php echo $this->htmlEscape($_giftMessage->getMessage()) ?>
109
+ </td>
110
+ </tr>
111
+ <?php endif; ?>
app/etc/modules/Pure360_Cart.xml CHANGED
@@ -1,12 +1,12 @@
1
- <?xml version="1.0"?>
2
- <config>
3
- <modules>
4
- <Pure360_Cart>
5
- <active>true</active>
6
- <codePool>community</codePool>
7
- <depends>
8
- <Pure360_Common/>
9
- </depends>
10
- </Pure360_Cart>
11
- </modules>
12
  </config>
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Pure360_Cart>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ <depends>
8
+ <Pure360_Common/>
9
+ </depends>
10
+ </Pure360_Cart>
11
+ </modules>
12
  </config>
app/locale/en_US/template/email/pure360/abandoned_cart.html CHANGED
@@ -1,38 +1,38 @@
1
- <!--@subject {{var store.getFrontendName()}}: Cart Reminder @-->
2
- <!--@styles
3
- body,td { color:#2f2f2f; font:11px/1.35em Verdana, Arial, Helvetica, sans-serif; }
4
- @-->
5
- <body style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
6
- <div style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
7
- <table cellspacing="0" cellpadding="0" border="0" width="100%">
8
- <tr>
9
- <td align="center" valign="top" style="padding:20px 0 20px 0">
10
- <table bgcolor="#FFFFFF" cellspacing="0" cellpadding="10" border="0" width="650" style="border:1px solid #E0E0E0;">
11
- <tr>
12
- <td valign="top"><a href="{{store url=""}}"><img src="{{var logo_url}}" alt="{{var logo_alt}}" style="margin-bottom:10px;" border="0"/></a></td>
13
- </tr>
14
- <tr>
15
- <td valign="top">
16
- <h1 style="font-size:22px; font-weight:normal; line-height:22px; margin:0 0 11px 0;">Hello, {{htmlescape var=$quote.getCustomerName()}}</h1>
17
- <p style="font-size:12px; line-height:16px; margin:0;">
18
- You have an abandoned cart at {{var store.getFrontendName()}}.
19
- You can check the status of your cart by <a href="{{store url="customer/account/"}}" style="color:#1E7EC8;">logging into your account</a>.
20
- </p>
21
- <p style="font-size:12px; line-height:16px; margin:0;">If you have any questions about your cart please contact us at <a href="mailto:{{config path='trans_email/ident_support/email'}}" style="color:#1E7EC8;">{{config path='trans_email/ident_support/email'}}</a> or call us at <span class="nobr">{{config path='general/store_information/phone'}}</span> Monday - Friday, 8am - 5pm PST.</p>
22
- </tr>
23
- <tr>
24
- <td>
25
- {{block type='pure360_cart/email_order_items' area='frontend' template='pure360/cart/email/order/items.phtml' quote=$quote}}
26
- </td>
27
- </tr>
28
- <tr>
29
- <td bgcolor="#EAEAEA" align="center" style="background:#EAEAEA; text-align:center;">
30
- <p style="font-size:12px; margin:0;">Thank you, <strong>{{var store.getFrontendName()}}</strong></p>
31
- </td>
32
- </tr>
33
- </table>
34
- </td>
35
- </tr>
36
- </table>
37
- </div>
38
  </body>
1
+ <!--@subject {{var store.getFrontendName()}}: Cart Reminder @-->
2
+ <!--@styles
3
+ body,td { color:#2f2f2f; font:11px/1.35em Verdana, Arial, Helvetica, sans-serif; }
4
+ @-->
5
+ <body style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
6
+ <div style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
7
+ <table cellspacing="0" cellpadding="0" border="0" width="100%">
8
+ <tr>
9
+ <td align="center" valign="top" style="padding:20px 0 20px 0">
10
+ <table bgcolor="#FFFFFF" cellspacing="0" cellpadding="10" border="0" width="650" style="border:1px solid #E0E0E0;">
11
+ <tr>
12
+ <td valign="top"><a href="{{store url=""}}"><img src="{{var logo_url}}" alt="{{var logo_alt}}" style="margin-bottom:10px;" border="0"/></a></td>
13
+ </tr>
14
+ <tr>
15
+ <td valign="top">
16
+ <h1 style="font-size:22px; font-weight:normal; line-height:22px; margin:0 0 11px 0;">Hello, {{htmlescape var=$quote.getCustomerName()}}</h1>
17
+ <p style="font-size:12px; line-height:16px; margin:0;">
18
+ You have an abandoned cart at {{var store.getFrontendName()}}.
19
+ You can check the status of your cart by <a href="{{store url="customer/account/"}}" style="color:#1E7EC8;">logging into your account</a>.
20
+ </p>
21
+ <p style="font-size:12px; line-height:16px; margin:0;">If you have any questions about your cart please contact us at <a href="mailto:{{config path='trans_email/ident_support/email'}}" style="color:#1E7EC8;">{{config path='trans_email/ident_support/email'}}</a> or call us at <span class="nobr">{{config path='general/store_information/phone'}}</span> Monday - Friday, 8am - 5pm PST.</p>
22
+ </tr>
23
+ <tr>
24
+ <td>
25
+ {{block type='pure360_cart/email_order_items' area='frontend' template='pure360/cart/email/order/items.phtml' quote=$quote}}
26
+ </td>
27
+ </tr>
28
+ <tr>
29
+ <td bgcolor="#EAEAEA" align="center" style="background:#EAEAEA; text-align:center;">
30
+ <p style="font-size:12px; margin:0;">Thank you, <strong>{{var store.getFrontendName()}}</strong></p>
31
+ </td>
32
+ </tr>
33
+ </table>
34
+ </td>
35
+ </tr>
36
+ </table>
37
+ </div>
38
  </body>
app/locale/en_US/template/email/pure360/abandoned_cart_guest.html CHANGED
@@ -1,38 +1,38 @@
1
- <!--@subject {{var store.getFrontendName()}}: Cart Reminder @-->
2
- <!--@styles
3
- body,td { color:#2f2f2f; font:11px/1.35em Verdana, Arial, Helvetica, sans-serif; }
4
- @-->
5
- <body style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
6
- <div style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
7
- <table cellspacing="0" cellpadding="0" border="0" width="100%">
8
- <tr>
9
- <td align="center" valign="top" style="padding:20px 0 20px 0">
10
- <table bgcolor="#FFFFFF" cellspacing="0" cellpadding="10" border="0" width="650" style="border:1px solid #E0E0E0;">
11
- <tr>
12
- <td valign="top"><a href="{{store url=""}}"><img src="{{var logo_url}}" alt="{{var logo_alt}}" style="margin-bottom:10px;" border="0"/></a></td>
13
- </tr>
14
- <tr>
15
- <td valign="top">
16
- <h1 style="font-size:22px; font-weight:normal; line-height:22px; margin:0 0 11px 0;"">Hello, {{htmlescape var=$quote.getCustomerName()}}</h1>
17
- <p style="font-size:12px; line-height:16px; margin:0;">
18
- You have an abandoned cart at {{var store.getFrontendName()}}.
19
- You can check the status of your cart by <a href="{{store url="customer/account/"}}" style="color:#1E7EC8;">logging into your account</a>.
20
- </p>
21
- <p style="font-size:12px; line-height:16px; margin:0;">If you have any questions about your cart please contact us at <a href="mailto:{{config path='trans_email/ident_support/email'}}" style="color:#1E7EC8;">{{config path='trans_email/ident_support/email'}}</a> or call us at <span class="nobr">{{config path='general/store_information/phone'}}</span> Monday - Friday, 8am - 5pm PST.</p>
22
- </tr>
23
- <tr>
24
- <td>
25
- {{block type='pure360_cart/email_order_items' area='frontend' template='pure360/cart/email/order/items.phtml' quote=$quote}}
26
- </td>
27
- </tr>
28
- <tr>
29
- <td bgcolor="#EAEAEA" align="center" style="background:#EAEAEA; text-align:center;">
30
- <p style="font-size:12px; margin:0;">Thank you, <strong>{{var store.getFrontendName()}}</strong></p>
31
- </td>
32
- </tr>
33
- </table>
34
- </td>
35
- </tr>
36
- </table>
37
- </div>
38
  </body>
1
+ <!--@subject {{var store.getFrontendName()}}: Cart Reminder @-->
2
+ <!--@styles
3
+ body,td { color:#2f2f2f; font:11px/1.35em Verdana, Arial, Helvetica, sans-serif; }
4
+ @-->
5
+ <body style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
6
+ <div style="background:#F6F6F6; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:12px; margin:0; padding:0;">
7
+ <table cellspacing="0" cellpadding="0" border="0" width="100%">
8
+ <tr>
9
+ <td align="center" valign="top" style="padding:20px 0 20px 0">
10
+ <table bgcolor="#FFFFFF" cellspacing="0" cellpadding="10" border="0" width="650" style="border:1px solid #E0E0E0;">
11
+ <tr>
12
+ <td valign="top"><a href="{{store url=""}}"><img src="{{var logo_url}}" alt="{{var logo_alt}}" style="margin-bottom:10px;" border="0"/></a></td>
13
+ </tr>
14
+ <tr>
15
+ <td valign="top">
16
+ <h1 style="font-size:22px; font-weight:normal; line-height:22px; margin:0 0 11px 0;"">Hello, {{htmlescape var=$quote.getCustomerName()}}</h1>
17
+ <p style="font-size:12px; line-height:16px; margin:0;">
18
+ You have an abandoned cart at {{var store.getFrontendName()}}.
19
+ You can check the status of your cart by <a href="{{store url="customer/account/"}}" style="color:#1E7EC8;">logging into your account</a>.
20
+ </p>
21
+ <p style="font-size:12px; line-height:16px; margin:0;">If you have any questions about your cart please contact us at <a href="mailto:{{config path='trans_email/ident_support/email'}}" style="color:#1E7EC8;">{{config path='trans_email/ident_support/email'}}</a> or call us at <span class="nobr">{{config path='general/store_information/phone'}}</span> Monday - Friday, 8am - 5pm PST.</p>
22
+ </tr>
23
+ <tr>
24
+ <td>
25
+ {{block type='pure360_cart/email_order_items' area='frontend' template='pure360/cart/email/order/items.phtml' quote=$quote}}
26
+ </td>
27
+ </tr>
28
+ <tr>
29
+ <td bgcolor="#EAEAEA" align="center" style="background:#EAEAEA; text-align:center;">
30
+ <p style="font-size:12px; margin:0;">Thank you, <strong>{{var store.getFrontendName()}}</strong></p>
31
+ </td>
32
+ </tr>
33
+ </table>
34
+ </td>
35
+ </tr>
36
+ </table>
37
+ </div>
38
  </body>
js/mage/adminhtml/pure360/common.js CHANGED
@@ -57,7 +57,11 @@ Pure360.prototype =
57
  this.password_marketing.onchange = function(e) { return self.checkValidated('marketing'); };
58
  this.username_transactional.onchange = function(e) { return self.checkValidated('transactional'); };
59
  this.password_transactional.onchange = function(e) { return self.checkValidated('transactional'); };
60
- this.url.onchange = function(e) { return self.checkValidated('marketing') && self.checkValidated('transactional'); };
 
 
 
 
61
 
62
  this.checkEnabled();
63
  this.checkValidated('marketing');
57
  this.password_marketing.onchange = function(e) { return self.checkValidated('marketing'); };
58
  this.username_transactional.onchange = function(e) { return self.checkValidated('transactional'); };
59
  this.password_transactional.onchange = function(e) { return self.checkValidated('transactional'); };
60
+ this.url.onchange = function(e) {
61
+ var marketing = self.checkValidated('marketing');
62
+ var transactional = self.checkValidated('transactional')
63
+ return true;
64
+ };
65
 
66
  this.checkEnabled();
67
  this.checkValidated('marketing');
js/mage/adminhtml/pure360/cron.js CHANGED
@@ -1,6 +1,6 @@
1
  Event.observe(window, 'load', function() {
2
  initPure360Cron();
3
- setTimeout('window.location.reload();', 10000);
4
  });
5
 
6
  Pure360Cron = Class.create();
1
  Event.observe(window, 'load', function() {
2
  initPure360Cron();
3
+ setTimeout('window.location.reload();', 30000);
4
  });
5
 
6
  Pure360Cron = Class.create();
package.xml CHANGED
@@ -1,7 +1,7 @@
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Pure360</name>
4
- <version>1.0.3</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License</license>
7
  <channel>community</channel>
@@ -68,7 +68,15 @@
68
  &lt;h3&gt;Pricing&lt;/h3&gt;&#xD;
69
  &#xD;
70
  &lt;p&gt;To see Pure360 pricing &lt;a title="Sign up here" href="http://www.pure360.com/take-a-trial-software-august"&gt;sign up here&lt;/a&gt; and a member of the team will be in touch to discuss your requirements and build a package that suits your individual needs.&lt;/p&gt;</description>
71
- <notes>1.0.3&#xD;
 
 
 
 
 
 
 
 
72
  - Stability fixes&#xD;
73
  - Verbose error handling&#xD;
74
  - List Sync fixes&#xD;
@@ -83,9 +91,9 @@
83
  1.0.1&#xD;
84
  - Magento Connect compliance</notes>
85
  <authors><author><name>Stewart Waller</name><user>stewart_pure360</user><email>stewart.waller@pure360.com</email></author></authors>
86
- <date>2013-11-05</date>
87
- <time>10:52:48</time>
88
- <contents><target name="magecommunity"><dir name="Pure360"><dir name="Cart"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="b2a89a4eb5a0cc07a4ddb9851b5d8490"/></dir></dir></dir><dir name="Email"><dir name="Order"><file name="Items.php" hash="45b9becd073ab968872f142243d52d63"/></dir></dir><file name="Jsinit.php" hash="9ba1a3c3b20736d2b2376046da2b3fcf"/></dir><dir name="Helper"><file name="Data.php" hash="bc15d6ba50c4e6f0242eb07532b13c99"/></dir><dir name="Job"><file name="Trigger.php" hash="192fc12b542e97665d21e6d88d6713fb"/></dir><dir name="Model"><dir name="System"><dir name="Config"><dir name="Backend"><file name="Enable.php" hash="742234ea19b737b33de9af1aea4dcf6e"/></dir><dir name="Source"><file name="Delay.php" hash="386d7aa81411c136516e8c4cc3f13ad3"/><dir name="Email"><file name="Template.php" hash="9f2fab6d42a1da181f272d70c5236172"/><file name="TemplateGuest.php" hash="682117c74cecda7395941cb5fcbdc729"/></dir><file name="Type.php" hash="a4a09a9fcaf0f970e823479bb784e92c"/></dir></dir></dir></dir><dir name="controllers"><file name="AjaxController.php" hash="82a5cba1c9069306bbd9886fd9ad1bf9"/></dir><dir name="etc"><file name="config.xml" hash="b5c8028f6206958185d1aae23ad51aa7"/><file name="system.xml" hash="02bfe0ba69816df211fb6851067414dc"/></dir><dir name="sql"><dir name="pure360_cart_setup"><file name="mysql4-install-1.0.3.php" hash="49960b758d00481bad2d3baa2daba9cd"/></dir></dir></dir><dir name="Common"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="29091a400a1ce9c9207d732de03ce7bd"/><file name="Disabled.php" hash="9970f5fc1b0b34000b8219f2519eccaa"/><dir name="Form"><dir name="Field"><file name="Hidden.php" hash="95ed0e83cd87c03de709789eb21ab1b2"/></dir><file name="Field.php" hash="34766e8795a023cdf19c2fc0bb0c976f"/><file name="Fieldset.php" hash="0605c96e429b6d1c5ae6081b6a1bf76e"/></dir><file name="Form.php" hash="d8c5c4aa3d8132c7318311981cd1fdee"/><file name="Hidden.php" hash="b4b32095413ebdd63f4de1194e20ea0e"/><file name="Modules.php" hash="3deb577d540a7537d91059a8393d759d"/><file name="Tabs.php" hash="de833cdcb3b278923e53ee85d685820f"/><dir name="Validate"><file name="Marketing.php" hash="86513e7b18dc53ab3f6a17ae1c2ffb07"/><file name="Transactional.php" hash="578130a5e13e24848eea90dede3d8ab5"/></dir></dir></dir></dir><file name="Jsinit.php" hash="47c0e55bbe05d6adc07840090034eca7"/></dir><dir name="Helper"><file name="Ajax.php" hash="57787267c712dd712f74fc54e6f2765f"/><file name="Api.php" hash="16862411672bafb439a5b81ddca0c49f"/><file name="Data.php" hash="37fba89884930b660c000910b73ff159"/><file name="File.php" hash="9ce95f89acca0eddc0745e21dccdb165"/></dir><dir name="Interface"><file name="Job.php" hash="59c3fcfe0e35f2a7867a3bd8e5f51d61"/></dir><dir name="Model"><file name="Observer.php" hash="045ba8d185a9646cc2bfb0adfe96e6ef"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Enable.php" hash="9445b26df9a78548fd0c22be126acc7c"/></dir><dir name="Source"><dir name="Cron"><file name="Days.php" hash="0174fb71a0cd1979b4b1a74b4d5dfe6e"/><file name="Frequency.php" hash="0c0afecf1341100e4ba90e180df6facf"/><file name="Minutes.php" hash="b7a8eef1155ca8cddadc79d643ac56bc"/></dir><file name="Field.php" hash="da1801ccb45426ce8e960a4d40952303"/><file name="Global.php" hash="412071d06a25bf92962d2c2be1eb411a"/><file name="Message.php" hash="aa72d6227f29795dadf9c45405cafffd"/></dir></dir></dir></dir><dir name="controllers"><file name="AjaxController.php" hash="6e267f11b1d7df2ef27a721ae4c10887"/><file name="JobController.php" hash="99b6026a540c4f02c8c827e66a85d48b"/><file name="Pure360Controller.php" hash="07599b0ad90725bda1201b8bd291e0d5"/></dir><dir name="etc"><file name="config.xml" hash="5a823ae0f0a54b72a0bc66ff42ee4f2f"/><file name="system.xml" hash="9b467fbbc758e3933e1343f8a0f63715"/></dir></dir><dir name="Cron"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="4c08269367666f8aa9ea9028f1afc0b7"/></dir><dir name="Cron"><dir name="Manager"><dir name="Grid"><dir name="Renderer"><file name="Actions.php" hash="c0ee554f426a5147b486384c52f8eae3"/><file name="Crontab.php" hash="b28f87aeb8259bd17583b2a86fa16e19"/><file name="Force.php" hash="69f68ee9b7e7deccf161991aff2013fe"/><file name="Pause.php" hash="780dd8620f8c0c0a7094c558d6c1b0fc"/></dir></dir><file name="Grid.php" hash="a654543f57a356152eb7119cf971f4a9"/><dir name="Logs"><dir name="Renderer"><file name="Bytes.php" hash="a252cdb9290293c58962b19ec376d11f"/><file name="Clean.php" hash="448c3aae8e6fef07e676a53ac1225e11"/><file name="Download.php" hash="1046ed159db6e270d78823af78e4dec0"/><file name="Tail.php" hash="57ad12798b10af495e3e3d34e84ecb36"/></dir></dir><file name="Logs.php" hash="bbad87b3c1ff4165179ffa799554f568"/></dir><file name="Manager.php" hash="407928e5052d387a45f02b5c8e70810b"/></dir></dir></dir><file name="Jsinit.php" hash="28d2d2074598dd783db41884fc624f88"/></dir><dir name="Helper"><file name="Data.php" hash="fa6c7e721a561c014382692aa2a49eab"/></dir><dir name="Job"><file name="Abstract.php" hash="f59fb9712d9001f3406d10c202a45223"/><file name="Interface.php" hash="306c4c9de6dc281ce2d50012759da82c"/></dir><dir name="Model"><file name="Job.php" hash="2876e7fcff63de170d0b34d2aef92254"/><file name="Observer.php" hash="788e7fbcca63ac8aea5ed254097886aa"/><dir name="Resource"><dir name="Job"><file name="Collection.php" hash="a42b6c45b4786f35d2d808bd3e0860da"/></dir><file name="Job.php" hash="ca3d4f31293d6419fb4b84a10dec4464"/></dir></dir><dir name="controllers"><file name="AjaxController.php" hash="01b2c823877a8e7838c8e1cd5f3f568b"/></dir><dir name="etc"><file name="config.xml" hash="c0c5acfc3cc1281a7b13e5adfc72fb9a"/><file name="system.xml" hash="d398d5ef4758562b8e8c7007b2470b7b"/></dir><dir name="sql"><dir name="pure360_cron_setup"><file name="mysql4-install-1.0.3.php" hash="6819eab799199893f65c05a53451e3a0"/></dir></dir></dir><dir name="Email"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="c03154f20bdfbe72631bc09fbd3f86da"/><file name="Transactional.php" hash="37476f57155a4d28a9a16d75f1c2269c"/></dir></dir></dir><file name="Jsinit.php" hash="463a0092939237b6de4c4e9b47e897d8"/></dir><dir name="Helper"><file name="Api.php" hash="ddeb4f28ee7f82530b96055c4b5ccaa8"/><file name="Data.php" hash="ca33046f86cd97daff222e2386879ee8"/></dir><dir name="Model"><dir name="Email"><file name="Message.php" hash="2cae4bee4aaff2c4850d93bbf762ce04"/></dir><file name="Messages.php" hash="56eeb27a00e794774759d4631df0df0d"/><dir name="Resource"><dir name="Transactional"><file name="Collection.php" hash="92714dd16f619e43ae8695bf6b9a5d59"/></dir><file name="Transactional.php" hash="c2c02bf63ab5c7314eca1f94f4f953bc"/></dir><dir name="System"><dir name="Config"><dir name="Source"><dir name="Email"><file name="Template.php" hash="6e04d1a0f99becc198a940ef1c8ebf57"/></dir></dir></dir></dir><file name="Transactional.php" hash="f71a307d7dc6bb652a1267921b78a7e6"/></dir><dir name="controllers"><file name="AjaxController.php" hash="1d81c0ad2620918a07266c40d772b8e0"/></dir><dir name="etc"><file name="config.xml" hash="4904ebdf589129aea56246b135209969"/><file name="system.xml" hash="b1ed057cfe7d27ecfb86fdf5a3f02e27"/></dir><dir name="sql"><dir name="pure360_email_setup"><file name="mysql4-install-1.0.3.php" hash="bb37fdf2a7c8907b13e003eb56f13542"/></dir></dir></dir><dir name="List"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="f66afdcd44d13a9a4dbd92fc3d77114a"/><file name="Form.php" hash="9b8b1a093cc9c455fb108a6f9d3960c0"/><file name="List.php" hash="9ee4a1c9e91b63402060f85726296f16"/></dir></dir></dir><file name="Jsinit.php" hash="78daf97d49034d34c36007322408c9a8"/></dir><dir name="Helper"><file name="Api.php" hash="c6fad3966387a14f3b2cc6b6939f1c82"/><file name="Data.php" hash="5d6e01975c1a5ba84c44477591ffd977"/></dir><dir name="Job"><file name="Sync.php" hash="b671f48cab85ada5995ce968634485de"/></dir><dir name="Model"><file name="Address.php" hash="844441bf49a1f1ac492939449c33f28c"/><file name="Customer.php" hash="e0e3418881877b5b17579bec7978728f"/><file name="Data.php" hash="1e70c242bcfd71a92832cc300d8697fc"/><file name="Groups.php" hash="05f58791bbd56a161b8dc614831197ca"/><file name="List.php" hash="9125566c34a2500734e1c2583371aec3"/><file name="Observer.php" hash="ca2ea4a8ca36f7203c1a9ea30c70aa08"/><dir name="Resource"><dir name="List"><file name="Collection.php" hash="503fae2e6c778646ba730eaf98a67ae5"/></dir><file name="List.php" hash="5b443a43c67230dca205cf44e568b613"/></dir><file name="Sales.php" hash="9910099ba6f492c414e951a49e5960c1"/><file name="Segments.php" hash="6bf9009dc93f71224d29644c333c1a61"/></dir><dir name="controllers"><file name="AjaxController.php" hash="20084d7deabcb5ba6c37b53da0d8524e"/></dir><dir name="etc"><file name="config.xml" hash="1f93fc1a02a22b34599e16c31defdac5"/><file name="system.xml" hash="33bc7c064f682b6009e650213ee49854"/></dir><dir name="sql"><dir name="pure360_list_setup"><file name="mysql4-install-1.0.3.php" hash="72a6608eeeee4bdbc3f0a12eaea9cc83"/></dir></dir></dir><dir name="Newsletter"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="dbc0efc7099f1ac9af12d02fc87f559c"/></dir></dir></dir><dir name="Checkout"><dir name="Onepage"><file name="Newsletter.php" hash="c65136e4076cbb4c686b465c5d04fcc2"/></dir></dir><file name="Jsinit.php" hash="3cdd4b0da1539ac253e440997bb56308"/></dir><dir name="Helper"><file name="Api.php" hash="b31a077fab97c6d0a7a99c2a1d5db05a"/><file name="Data.php" hash="c2c63a8c9546183b6cb5048e6d7ddf7b"/></dir><dir name="Model"><file name="Observer.php" hash="0320f4334ef874f2c112e5d595760ec1"/><file name="Subscriber.php" hash="412d9a51803047fd337672712d0e44a9"/></dir><dir name="controllers"><file name="IndexController.php" hash="da4dfea12608bf7ef6e177b9a0be47ba"/></dir><dir name="etc"><file name="config.xml" hash="0bd108b66276ff1111144f5965a9ada9"/><file name="system.xml" hash="35d9f9afe40ee6ea617906a3a830252f"/></dir><dir name="sql"><dir name="pure360_newsletter_setup"><file name="mysql4-install-1.0.3.php" hash="8487bc8b8483b9a941f9895e25280455"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="pure360_cart.xml" hash="bb41c36682cf8829553a12881db5b2ea"/><file name="pure360_common.xml" hash="27f8fe83bb013ef6e4c3111e855aed67"/><file name="pure360_cron.xml" hash="fb35138a5514721477356dac81ac3fc1"/><file name="pure360_email.xml" hash="05ebc3cd33d33d492cae9196dfc1b65b"/><file name="pure360_list.xml" hash="4f3346bce27d07ebf2c78b888453d33f"/><file name="pure360_newsletter.xml" hash="d7ba5b55c3a3d473e96d8a7fab313584"/></dir><dir name="template"><dir name="pure360"><dir name="cart"><file name="jsinit.phtml" hash="2bca290370210037cb71c62e15b0d9cc"/></dir><dir name="common"><file name="about.phtml" hash="643d4e13c093fd954e928ada274772de"/><file name="config.phtml" hash="d41d8cd98f00b204e9800998ecf8427e"/><file name="disabled.phtml" hash="69dee703408ead95dd5c913ad2bfca9d"/><file name="error.phtml" hash="0f4f65766466a459cd57743bcbcd4085"/><file name="hidden.phtml" hash="bd8768ad057df0a9dda8e50a0507b3ed"/><file name="jsinit.phtml" hash="f30da6ab4caf72ee8f135c450a504801"/><file name="modules.phtml" hash="2dcf7bab0da85eb4533d07f8479c4c38"/></dir><dir name="cron"><file name="jsinit.phtml" hash="697388afb41375e3dfe9f7c4fff25712"/><file name="manager.phtml" hash="a413d279ec78fce33ffe2c7196fd2acb"/></dir><dir name="email"><file name="jsinit.phtml" hash="91b9745ad690249ea58b5f80c7487a1f"/><file name="transactional.phtml" hash="7f201cf65dd510fb067a173edbb0a14c"/></dir><file name="hint.phtml" hash="6e50c5cce42b12e8481e5211e8cf0f35"/><dir name="list"><file name="jsinit.phtml" hash="2a66b7d233cdf95c751e102974504ca0"/><file name="list.phtml" hash="f310c3197118223821176f4f791eeed4"/></dir><dir name="newsletter"><file name="jsinit.phtml" hash="e57d9c2279ff4440df096e79643f9bca"/></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="pure360"><file name="cart.xml" hash="31aa1884491949f7965aa0b8c514fc7c"/><file name="newsletter.xml" hash="790ced3bb4a2a83267b548fb0e0544e8"/></dir></dir><dir name="template"><dir name="pure360"><dir name="cart"><dir name="email"><dir name="order"><dir name="items"><dir name="order"><file name="default.phtml" hash="de146a4a2796d166c1337e8734ae02cd"/></dir></dir><file name="items.phtml" hash="086c832780aab518bb04cb3a8157e5ba"/></dir></dir></dir><dir name="newsletter"><file name="jsinit.phtml" hash="e99f59688cef74ad2aa3f57751c25a9f"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Pure360_Cart.xml" hash="4bf660dc41ebb88fd04421b5edcb93f5"/><file name="Pure360_Common.xml" hash="21ce1650dac593cf9d1293167592ce9d"/><file name="Pure360_Cron.xml" hash="3fac7040468efecd5ae487b3e0509737"/><file name="Pure360_Email.xml" hash="e58b87357af6ed25523afd5983a63297"/><file name="Pure360_List.xml" hash="277e4aea059838480e1af90a3b2d0a7a"/><file name="Pure360_Newsletter.xml" hash="500c3d494e2c3edc7b0a0bdb0a429126"/></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><dir name="pure360"><file name="abandoned_cart.html" hash="5aef51ca2baff2a5afc489c12daabd51"/><file name="abandoned_cart_guest.html" hash="f65bbcd0ea761b0e80ac7c0082fc9456"/></dir></dir></dir></dir></target><target name="mage"><dir name="js"><dir name="mage"><dir name="adminhtml"><dir name="pure360"><file name="cart.js" hash="ee5b1110af04c4d24f0ed5f1668cf4d5"/><file name="common.js" hash="342feffc1c2665c3e23b490fd37974b6"/><file name="cron.js" hash="b0ba0b28d2a4595bb3f87c6b04d004c4"/><file name="email.js" hash="3c9259fe31d2ade24aacc622b0790ea2"/><file name="list.js" hash="443b0acec1d1a3016f3b606e92a435d5"/><file name="newsletter.js" hash="15d462e8eaab011460431cc10a75bdb2"/></dir></dir></dir></dir></target><target name="magelib"><dir name="Pure360"><file name="Client.php" hash="2daae4bee1c878da1c4a316ed9d0b8c7"/><file name="Entity.php" hash="ba76dccb0a80ce11a110d3e1c5e108a1"/><dir name="Exception"><file name="SecurityException.php" hash="1e30dd834995651eb8ab0ff19c022713"/><file name="SystemException.php" hash="dbb715d39318c4a63db0d05eaeb85eab"/><file name="ValidationException.php" hash="69540e782165d00400c1ae460aa755ed"/></dir><dir name="Package"><dir name="Account"><file name="Identity.php" hash="56a192c63b4b82f95a03bf01dfb0e320"/><file name="Login.php" hash="b5cf3c5a7f02c34a7714492cb088b12d"/><file name="Pool.php" hash="6ca9929fae710c8d3b6baff9bb9ebd56"/></dir><file name="Account.php" hash="549fc8c168e102b5d622192e7161314f"/><dir name="Campaign"><file name="Automation.php" hash="7ef9a900dd1e48b5bc131aa3c801c4bb"/><file name="AutomationByDate.php" hash="0042f336568ce900d74e8e19e9d70a9b"/><file name="AutomationBySignup.php" hash="23e9d9e19a02c602ab67a2e706e64184"/><file name="ContentItem.php" hash="797bfd1d0fee23e2d8a00a7118934fc9"/><file name="Delivery.php" hash="a38c9f831977dc635140af291f529bbb"/><file name="DynamicRegion.php" hash="f81afeb8f67d3b5d6adb279126325321"/><file name="Email.php" hash="ae09ee6eb161c2032a68af8486227a8f"/><file name="Filter.php" hash="16cbfe1f34080bf88326315cde2c7fae"/><file name="GroupDelivery.php" hash="e470a337c36cd6c6e6c2126c2d8a6b05"/><file name="MarketingList.php" hash="62a2cb099555c922abc8971fb904af84"/><file name="Message.php" hash="115a7a8d5d313cc1fc91c404af4e277f"/><file name="One2One.php" hash="b3f229593bc9e78f717807967923e181"/><file name="Person.php" hash="465cc7928b872f1a1f9c71099e70e640"/><file name="Sms.php" hash="c525a6fb395d67651e91c1fe6481777b"/></dir><file name="Campaign.php" hash="bfab52155c32995acd3b7e376b683001"/><dir name="Context"><file name="Context.php" hash="2fe3109a45d6459f4cf441b3aa1ed7a3"/><file name="Preference.php" hash="8a390e782e04ad0decc26f72cc7f362c"/></dir><file name="Context.php" hash="7032b8dd4c00fded3f49511b174ebeba"/><dir name="Data"><file name="Meta.php" hash="a0489bfbbd52443eeb3f019f36840846"/><file name="Scheduler.php" hash="a37efb3c2d5497bc37393a8fa4879b57"/></dir><file name="Data.php" hash="77c4d9c47b4a2cd161a506d74024e639"/><dir name="Other"><file name="EventNotification.php" hash="c880abfad0408709e7c801f74c0c1882"/><file name="File.php" hash="71f3239c95c09f03a954d47ebdd20233"/></dir><file name="Other.php" hash="bea8844bf4037303bcf7bd064e18ae3f"/></dir><file name="Package.php" hash="2b1d5236b81621130c7522ddc105bd90"/><file name="Session.php" hash="340e63e5c25296bbe9baf8426dba1726"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="pure360"><file name="pure360.css" hash="ea0485422716685e1753945731b3391e"/></dir><dir name="images"><dir name="pure360"><file name="pure_logo.png" hash="e03329ae9efacfeb292f079992a18a41"/><file name="switch.png" hash="dc4dd15ad074ab584444bda7660afe7a"/></dir></dir></dir></dir></dir></target></contents>
89
  <compatible/>
90
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><extension><name>soap</name><min></min><max></max></extension></required></dependencies>
91
  </package>
1
  <?xml version="1.0"?>
2
  <package>
3
  <name>Pure360</name>
4
+ <version>1.1.0</version>
5
  <stability>stable</stability>
6
  <license uri="http://opensource.org/licenses/osl-3.0.php">Open Software License</license>
7
  <channel>community</channel>
68
  &lt;h3&gt;Pricing&lt;/h3&gt;&#xD;
69
  &#xD;
70
  &lt;p&gt;To see Pure360 pricing &lt;a title="Sign up here" href="http://www.pure360.com/take-a-trial-software-august"&gt;sign up here&lt;/a&gt; and a member of the team will be in touch to discuss your requirements and build a package that suits your individual needs.&lt;/p&gt;</description>
71
+ <notes>1.1.0&#xD;
72
+ - Username/password check when changing API URL&#xD;
73
+ - Increased the page refresh time in Cron job page&#xD;
74
+ - Newsletter signup checkbox should not be checked by default if the use has already opted-out&#xD;
75
+ &#xD;
76
+ 1.0.4&#xD;
77
+ - List opt-out support extended&#xD;
78
+ &#xD;
79
+ 1.0.3&#xD;
80
  - Stability fixes&#xD;
81
  - Verbose error handling&#xD;
82
  - List Sync fixes&#xD;
91
  1.0.1&#xD;
92
  - Magento Connect compliance</notes>
93
  <authors><author><name>Stewart Waller</name><user>stewart_pure360</user><email>stewart.waller@pure360.com</email></author></authors>
94
+ <date>2014-01-13</date>
95
+ <time>15:54:43</time>
96
+ <contents><target name="magecommunity"><dir name="Pure360"><dir name="Cart"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="b2a89a4eb5a0cc07a4ddb9851b5d8490"/></dir></dir></dir><dir name="Email"><dir name="Order"><file name="Items.php" hash="45b9becd073ab968872f142243d52d63"/></dir></dir><file name="Jsinit.php" hash="9ba1a3c3b20736d2b2376046da2b3fcf"/></dir><dir name="Helper"><file name="Data.php" hash="bc15d6ba50c4e6f0242eb07532b13c99"/></dir><dir name="Job"><file name="Trigger.php" hash="192fc12b542e97665d21e6d88d6713fb"/></dir><dir name="Model"><dir name="System"><dir name="Config"><dir name="Backend"><file name="Enable.php" hash="742234ea19b737b33de9af1aea4dcf6e"/></dir><dir name="Source"><file name="Delay.php" hash="386d7aa81411c136516e8c4cc3f13ad3"/><dir name="Email"><file name="Template.php" hash="9f2fab6d42a1da181f272d70c5236172"/><file name="TemplateGuest.php" hash="682117c74cecda7395941cb5fcbdc729"/></dir><file name="Type.php" hash="a4a09a9fcaf0f970e823479bb784e92c"/></dir></dir></dir></dir><dir name="controllers"><file name="AjaxController.php" hash="82a5cba1c9069306bbd9886fd9ad1bf9"/></dir><dir name="etc"><file name="config.xml" hash="8f525751b0d5cd3da90c657ecc21e96f"/><file name="system.xml" hash="02bfe0ba69816df211fb6851067414dc"/></dir><dir name="sql"><dir name="pure360_cart_setup"><file name="mysql4-install-1.0.4.php" hash="49960b758d00481bad2d3baa2daba9cd"/></dir></dir></dir><dir name="Common"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="29091a400a1ce9c9207d732de03ce7bd"/><file name="Disabled.php" hash="9970f5fc1b0b34000b8219f2519eccaa"/><dir name="Form"><dir name="Field"><file name="Hidden.php" hash="95ed0e83cd87c03de709789eb21ab1b2"/></dir><file name="Field.php" hash="34766e8795a023cdf19c2fc0bb0c976f"/><file name="Fieldset.php" hash="0605c96e429b6d1c5ae6081b6a1bf76e"/></dir><file name="Form.php" hash="d8c5c4aa3d8132c7318311981cd1fdee"/><file name="Hidden.php" hash="b4b32095413ebdd63f4de1194e20ea0e"/><file name="Modules.php" hash="3deb577d540a7537d91059a8393d759d"/><file name="Tabs.php" hash="de833cdcb3b278923e53ee85d685820f"/><dir name="Validate"><file name="Marketing.php" hash="86513e7b18dc53ab3f6a17ae1c2ffb07"/><file name="Transactional.php" hash="578130a5e13e24848eea90dede3d8ab5"/></dir></dir></dir></dir><file name="Jsinit.php" hash="47c0e55bbe05d6adc07840090034eca7"/></dir><dir name="Helper"><file name="Ajax.php" hash="57787267c712dd712f74fc54e6f2765f"/><file name="Api.php" hash="16862411672bafb439a5b81ddca0c49f"/><file name="Data.php" hash="37fba89884930b660c000910b73ff159"/><file name="File.php" hash="9ce95f89acca0eddc0745e21dccdb165"/></dir><dir name="Interface"><file name="Job.php" hash="59c3fcfe0e35f2a7867a3bd8e5f51d61"/></dir><dir name="Model"><file name="Observer.php" hash="045ba8d185a9646cc2bfb0adfe96e6ef"/><dir name="System"><dir name="Config"><dir name="Backend"><file name="Enable.php" hash="9445b26df9a78548fd0c22be126acc7c"/></dir><dir name="Source"><dir name="Cron"><file name="Days.php" hash="0174fb71a0cd1979b4b1a74b4d5dfe6e"/><file name="Frequency.php" hash="0c0afecf1341100e4ba90e180df6facf"/><file name="Minutes.php" hash="b7a8eef1155ca8cddadc79d643ac56bc"/></dir><file name="Field.php" hash="da1801ccb45426ce8e960a4d40952303"/><file name="Global.php" hash="412071d06a25bf92962d2c2be1eb411a"/><file name="Message.php" hash="aa72d6227f29795dadf9c45405cafffd"/></dir></dir></dir></dir><dir name="controllers"><file name="AjaxController.php" hash="6e267f11b1d7df2ef27a721ae4c10887"/><file name="JobController.php" hash="99b6026a540c4f02c8c827e66a85d48b"/><file name="Pure360Controller.php" hash="07599b0ad90725bda1201b8bd291e0d5"/></dir><dir name="etc"><file name="config.xml" hash="f97e02bce4460111bcbc1031499067bc"/><file name="system.xml" hash="9b467fbbc758e3933e1343f8a0f63715"/></dir></dir><dir name="Cron"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="4c08269367666f8aa9ea9028f1afc0b7"/></dir><dir name="Cron"><dir name="Manager"><dir name="Grid"><dir name="Renderer"><file name="Actions.php" hash="c0ee554f426a5147b486384c52f8eae3"/><file name="Crontab.php" hash="b28f87aeb8259bd17583b2a86fa16e19"/><file name="Force.php" hash="69f68ee9b7e7deccf161991aff2013fe"/><file name="Pause.php" hash="780dd8620f8c0c0a7094c558d6c1b0fc"/></dir></dir><file name="Grid.php" hash="a654543f57a356152eb7119cf971f4a9"/><dir name="Logs"><dir name="Renderer"><file name="Bytes.php" hash="a252cdb9290293c58962b19ec376d11f"/><file name="Clean.php" hash="448c3aae8e6fef07e676a53ac1225e11"/><file name="Download.php" hash="1046ed159db6e270d78823af78e4dec0"/><file name="Tail.php" hash="57ad12798b10af495e3e3d34e84ecb36"/></dir></dir><file name="Logs.php" hash="bbad87b3c1ff4165179ffa799554f568"/></dir><file name="Manager.php" hash="407928e5052d387a45f02b5c8e70810b"/></dir></dir></dir><file name="Jsinit.php" hash="28d2d2074598dd783db41884fc624f88"/></dir><dir name="Helper"><file name="Data.php" hash="fa6c7e721a561c014382692aa2a49eab"/></dir><dir name="Job"><file name="Abstract.php" hash="f59fb9712d9001f3406d10c202a45223"/><file name="Interface.php" hash="306c4c9de6dc281ce2d50012759da82c"/></dir><dir name="Model"><file name="Job.php" hash="2876e7fcff63de170d0b34d2aef92254"/><file name="Observer.php" hash="788e7fbcca63ac8aea5ed254097886aa"/><dir name="Resource"><dir name="Job"><file name="Collection.php" hash="a42b6c45b4786f35d2d808bd3e0860da"/></dir><file name="Job.php" hash="ca3d4f31293d6419fb4b84a10dec4464"/></dir></dir><dir name="controllers"><file name="AjaxController.php" hash="01b2c823877a8e7838c8e1cd5f3f568b"/></dir><dir name="etc"><file name="config.xml" hash="be953021badb7b25913bb91bdf2641d2"/><file name="system.xml" hash="d398d5ef4758562b8e8c7007b2470b7b"/></dir><dir name="sql"><dir name="pure360_cron_setup"><file name="mysql4-install-1.0.4.php" hash="6819eab799199893f65c05a53451e3a0"/></dir></dir></dir><dir name="Email"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="c03154f20bdfbe72631bc09fbd3f86da"/><file name="Transactional.php" hash="37476f57155a4d28a9a16d75f1c2269c"/></dir></dir></dir><file name="Jsinit.php" hash="463a0092939237b6de4c4e9b47e897d8"/></dir><dir name="Helper"><file name="Api.php" hash="ddeb4f28ee7f82530b96055c4b5ccaa8"/><file name="Data.php" hash="ca33046f86cd97daff222e2386879ee8"/></dir><dir name="Model"><dir name="Email"><file name="Message.php" hash="b944f24c52dd5ae00dea03254bdc6950"/></dir><file name="Messages.php" hash="56eeb27a00e794774759d4631df0df0d"/><dir name="Resource"><dir name="Transactional"><file name="Collection.php" hash="92714dd16f619e43ae8695bf6b9a5d59"/></dir><file name="Transactional.php" hash="c2c02bf63ab5c7314eca1f94f4f953bc"/></dir><dir name="System"><dir name="Config"><dir name="Source"><dir name="Email"><file name="Template.php" hash="6e04d1a0f99becc198a940ef1c8ebf57"/></dir></dir></dir></dir><file name="Transactional.php" hash="f71a307d7dc6bb652a1267921b78a7e6"/></dir><dir name="controllers"><file name="AjaxController.php" hash="1d81c0ad2620918a07266c40d772b8e0"/></dir><dir name="etc"><file name="config.xml" hash="9d1ea455697f0336d482403522287226"/><file name="system.xml" hash="b1ed057cfe7d27ecfb86fdf5a3f02e27"/></dir><dir name="sql"><dir name="pure360_email_setup"><file name="mysql4-install-1.0.4.php" hash="bb37fdf2a7c8907b13e003eb56f13542"/></dir></dir></dir><dir name="List"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="f66afdcd44d13a9a4dbd92fc3d77114a"/><file name="Form.php" hash="9b8b1a093cc9c455fb108a6f9d3960c0"/><file name="List.php" hash="9ee4a1c9e91b63402060f85726296f16"/></dir></dir></dir><file name="Jsinit.php" hash="78daf97d49034d34c36007322408c9a8"/></dir><dir name="Helper"><file name="Api.php" hash="c6fad3966387a14f3b2cc6b6939f1c82"/><file name="Data.php" hash="2bf3dd35442b2dc6191cb765512e28f7"/></dir><dir name="Job"><file name="Sync.php" hash="8ff914e80fab100d456a4a6113e3845b"/></dir><dir name="Model"><file name="Address.php" hash="844441bf49a1f1ac492939449c33f28c"/><file name="Customer.php" hash="69e24f841868d937b403c5a95b2b70ae"/><file name="Data.php" hash="1e70c242bcfd71a92832cc300d8697fc"/><file name="Groups.php" hash="05f58791bbd56a161b8dc614831197ca"/><file name="List.php" hash="9125566c34a2500734e1c2583371aec3"/><file name="Observer.php" hash="ca2ea4a8ca36f7203c1a9ea30c70aa08"/><file name="Optout.php" hash="8ef1933d96623fd1e74038be26b37034"/><dir name="Resource"><dir name="List"><file name="Collection.php" hash="503fae2e6c778646ba730eaf98a67ae5"/></dir><file name="List.php" hash="5b443a43c67230dca205cf44e568b613"/><dir name="Optout"><file name="Collection.php" hash="51f4304dcdbd28e90e98d0f3c165c3b6"/></dir><file name="Optout.php" hash="7c59ba27cdb4a565ce08a92ef43ec89d"/></dir><file name="Sales.php" hash="9910099ba6f492c414e951a49e5960c1"/><file name="Segments.php" hash="6bf9009dc93f71224d29644c333c1a61"/><file name="Subscriber.php" hash="f5ba2429a89167639bad5ca63e971012"/></dir><dir name="controllers"><file name="AjaxController.php" hash="20084d7deabcb5ba6c37b53da0d8524e"/></dir><dir name="etc"><file name="config.xml" hash="0293b16a1273a4914fb45a324a8c0772"/><file name="system.xml" hash="33bc7c064f682b6009e650213ee49854"/></dir><dir name="sql"><dir name="pure360_list_setup"><file name="mysql4-install-1.0.4.php" hash="f9babd3b5b9b11100638e688a7c59379"/><file name="mysql4-upgrade-1.0.3-1.0.4.php" hash="bd6d2cd02673217a8c5846e789c9467d"/></dir></dir></dir><dir name="Newsletter"><dir name="Block"><dir name="Adminhtml"><dir name="System"><dir name="Config"><file name="About.php" hash="dbc0efc7099f1ac9af12d02fc87f559c"/></dir></dir></dir><dir name="Checkout"><dir name="Onepage"><file name="Newsletter.php" hash="7f58aea512497487aeaec8b8e23f4107"/></dir></dir><file name="Jsinit.php" hash="3cdd4b0da1539ac253e440997bb56308"/></dir><dir name="Helper"><file name="Api.php" hash="6f81466a8218cf7deee7eab53f14a7a9"/><file name="Data.php" hash="c2c63a8c9546183b6cb5048e6d7ddf7b"/></dir><dir name="Model"><file name="Observer.php" hash="0320f4334ef874f2c112e5d595760ec1"/><file name="Subscriber.php" hash="a35b3346fb4d0e6c12856e0e04451074"/></dir><dir name="controllers"><file name="IndexController.php" hash="da4dfea12608bf7ef6e177b9a0be47ba"/></dir><dir name="etc"><file name="config.xml" hash="765839d30ddac8d55556807736241888"/><file name="system.xml" hash="35d9f9afe40ee6ea617906a3a830252f"/></dir><dir name="sql"><dir name="pure360_newsletter_setup"><file name="mysql4-install-1.0.4.php" hash="8487bc8b8483b9a941f9895e25280455"/></dir></dir></dir></dir></target><target name="magedesign"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="layout"><file name="pure360_cart.xml" hash="273917f43f2d5b661005cfe09ef19981"/><file name="pure360_common.xml" hash="936bcb981defde27e7ec4fb0d9d64333"/><file name="pure360_cron.xml" hash="f3a1e028121e2abcca8c48aa588c61aa"/><file name="pure360_email.xml" hash="3d455306546061dd3845dc66647a6c67"/><file name="pure360_list.xml" hash="16622be692caa1bdb4ea95f864faca74"/><file name="pure360_newsletter.xml" hash="2cbc34cdb97a0f0e87df04d72c4cee02"/></dir><dir name="template"><dir name="pure360"><dir name="cart"><file name="jsinit.phtml" hash="2bca290370210037cb71c62e15b0d9cc"/></dir><dir name="common"><file name="about.phtml" hash="c532330d3f02612b6bc04b5b918f3c46"/><file name="config.phtml" hash="d41d8cd98f00b204e9800998ecf8427e"/><file name="disabled.phtml" hash="3fe3a819a246c58ee95404ce7428285e"/><file name="error.phtml" hash="891d140f2a5616f2929b307edf39c18b"/><file name="hidden.phtml" hash="bd8768ad057df0a9dda8e50a0507b3ed"/><file name="jsinit.phtml" hash="fe043d6f61686949e2098108686ecad4"/><file name="modules.phtml" hash="2dcf7bab0da85eb4533d07f8479c4c38"/></dir><dir name="cron"><file name="jsinit.phtml" hash="697388afb41375e3dfe9f7c4fff25712"/><file name="manager.phtml" hash="a413d279ec78fce33ffe2c7196fd2acb"/></dir><dir name="email"><file name="jsinit.phtml" hash="91b9745ad690249ea58b5f80c7487a1f"/><file name="transactional.phtml" hash="2002641f30185ea1d63f2c492478ff95"/></dir><file name="hint.phtml" hash="6e50c5cce42b12e8481e5211e8cf0f35"/><dir name="list"><file name="jsinit.phtml" hash="2a66b7d233cdf95c751e102974504ca0"/><file name="list.phtml" hash="f310c3197118223821176f4f791eeed4"/></dir><dir name="newsletter"><file name="jsinit.phtml" hash="e57d9c2279ff4440df096e79643f9bca"/></dir></dir></dir></dir></dir></dir><dir name="frontend"><dir name="base"><dir name="default"><dir name="layout"><dir name="pure360"><file name="cart.xml" hash="ae1b704553530b74108d9759f575376b"/><file name="newsletter.xml" hash="678ce91ac72cce3f541daae259a4ef32"/></dir></dir><dir name="template"><dir name="pure360"><dir name="cart"><dir name="email"><dir name="order"><dir name="items"><dir name="order"><file name="default.phtml" hash="307ede936c9f667a7fbd64115942a721"/></dir></dir><file name="items.phtml" hash="0e349df6e260ca4d4be1092e58c7be24"/></dir></dir></dir><dir name="newsletter"><file name="jsinit.phtml" hash="e99f59688cef74ad2aa3f57751c25a9f"/></dir></dir></dir></dir></dir></dir></target><target name="mageetc"><dir name="modules"><file name="Pure360_Cart.xml" hash="29d028bc4960d42dd9ae5471c9bbf904"/><file name="Pure360_Common.xml" hash="21ce1650dac593cf9d1293167592ce9d"/><file name="Pure360_Cron.xml" hash="3fac7040468efecd5ae487b3e0509737"/><file name="Pure360_Email.xml" hash="e58b87357af6ed25523afd5983a63297"/><file name="Pure360_List.xml" hash="277e4aea059838480e1af90a3b2d0a7a"/><file name="Pure360_Newsletter.xml" hash="500c3d494e2c3edc7b0a0bdb0a429126"/></dir></target><target name="magelocale"><dir name="en_US"><dir name="template"><dir name="email"><dir name="pure360"><file name="abandoned_cart.html" hash="e2b9facb56c028a2e19a69f5420052ff"/><file name="abandoned_cart_guest.html" hash="00cbc838e6f4e44fc87c51d98cedd2a2"/></dir></dir></dir></dir></target><target name="mage"><dir name="js"><dir name="mage"><dir name="adminhtml"><dir name="pure360"><file name="cart.js" hash="ee5b1110af04c4d24f0ed5f1668cf4d5"/><file name="common.js" hash="2ffa56e258da7022973ec1568d00785c"/><file name="cron.js" hash="29b6311859e63be290a9ececc3dbc547"/><file name="email.js" hash="3c9259fe31d2ade24aacc622b0790ea2"/><file name="list.js" hash="443b0acec1d1a3016f3b606e92a435d5"/><file name="newsletter.js" hash="15d462e8eaab011460431cc10a75bdb2"/></dir></dir></dir></dir></target><target name="magelib"><dir name="Pure360"><file name="Client.php" hash="2daae4bee1c878da1c4a316ed9d0b8c7"/><file name="Entity.php" hash="ba76dccb0a80ce11a110d3e1c5e108a1"/><dir name="Exception"><file name="SecurityException.php" hash="1e30dd834995651eb8ab0ff19c022713"/><file name="SystemException.php" hash="dbb715d39318c4a63db0d05eaeb85eab"/><file name="ValidationException.php" hash="69540e782165d00400c1ae460aa755ed"/></dir><dir name="Package"><dir name="Account"><file name="Identity.php" hash="56a192c63b4b82f95a03bf01dfb0e320"/><file name="Login.php" hash="b5cf3c5a7f02c34a7714492cb088b12d"/><file name="Pool.php" hash="6ca9929fae710c8d3b6baff9bb9ebd56"/></dir><file name="Account.php" hash="549fc8c168e102b5d622192e7161314f"/><dir name="Campaign"><file name="Automation.php" hash="7ef9a900dd1e48b5bc131aa3c801c4bb"/><file name="AutomationByDate.php" hash="0042f336568ce900d74e8e19e9d70a9b"/><file name="AutomationBySignup.php" hash="23e9d9e19a02c602ab67a2e706e64184"/><file name="ContentItem.php" hash="797bfd1d0fee23e2d8a00a7118934fc9"/><file name="Delivery.php" hash="a38c9f831977dc635140af291f529bbb"/><file name="DynamicRegion.php" hash="f81afeb8f67d3b5d6adb279126325321"/><file name="Email.php" hash="ae09ee6eb161c2032a68af8486227a8f"/><file name="Filter.php" hash="16cbfe1f34080bf88326315cde2c7fae"/><file name="GroupDelivery.php" hash="e470a337c36cd6c6e6c2126c2d8a6b05"/><file name="MarketingList.php" hash="62a2cb099555c922abc8971fb904af84"/><file name="Message.php" hash="115a7a8d5d313cc1fc91c404af4e277f"/><file name="One2One.php" hash="b3f229593bc9e78f717807967923e181"/><file name="Person.php" hash="465cc7928b872f1a1f9c71099e70e640"/><file name="Sms.php" hash="c525a6fb395d67651e91c1fe6481777b"/></dir><file name="Campaign.php" hash="bfab52155c32995acd3b7e376b683001"/><dir name="Context"><file name="Context.php" hash="2fe3109a45d6459f4cf441b3aa1ed7a3"/><file name="Preference.php" hash="8a390e782e04ad0decc26f72cc7f362c"/></dir><file name="Context.php" hash="7032b8dd4c00fded3f49511b174ebeba"/><dir name="Data"><file name="Meta.php" hash="a0489bfbbd52443eeb3f019f36840846"/><file name="Scheduler.php" hash="a37efb3c2d5497bc37393a8fa4879b57"/></dir><file name="Data.php" hash="77c4d9c47b4a2cd161a506d74024e639"/><dir name="Other"><file name="EventNotification.php" hash="c880abfad0408709e7c801f74c0c1882"/><file name="File.php" hash="71f3239c95c09f03a954d47ebdd20233"/></dir><file name="Other.php" hash="bea8844bf4037303bcf7bd064e18ae3f"/></dir><file name="Package.php" hash="2b1d5236b81621130c7522ddc105bd90"/><file name="Session.php" hash="340e63e5c25296bbe9baf8426dba1726"/></dir></target><target name="mageskin"><dir name="adminhtml"><dir name="default"><dir name="default"><dir name="pure360"><file name="pure360.css" hash="ea0485422716685e1753945731b3391e"/></dir><dir name="images"><dir name="pure360"><file name="pure_logo.png" hash="e03329ae9efacfeb292f079992a18a41"/><file name="switch.png" hash="dc4dd15ad074ab584444bda7660afe7a"/></dir></dir></dir></dir></dir></target></contents>
97
  <compatible/>
98
  <dependencies><required><php><min>5.2.0</min><max>6.0.0</max></php><extension><name>soap</name><min></min><max></max></extension></required></dependencies>
99
  </package>