Contactlab_Modules - Version 2.4.1

Version Notes

fixed bug and new minors features

Download this release

Release Info

Developer ContactLab
Extension Contactlab_Modules
Version 2.4.1
Comparing to
See all releases


Code changes from version 2.2.3 to 2.4.1

Files changed (367) hide show
  1. app/code/community/Contactlab/Commons/Block/Adminhtml/ConfigurationCheck.php +25 -5
  2. app/code/community/Contactlab/Commons/Block/Adminhtml/Events.php +1 -1
  3. app/code/community/Contactlab/Commons/Block/Adminhtml/Events/Grid.php +2 -2
  4. app/code/community/Contactlab/Commons/Block/Adminhtml/Events/Renderer/Status.php +5 -2
  5. app/code/community/Contactlab/Commons/Block/Adminhtml/Logs/Grid.php +2 -2
  6. app/code/community/Contactlab/Commons/Block/Adminhtml/ReleaseNotes.php +1 -1
  7. app/code/community/Contactlab/Commons/Block/Adminhtml/Tasks.php +1 -1
  8. app/code/community/Contactlab/Commons/Block/Adminhtml/Tasks/Grid.php +7 -4
  9. app/code/community/Contactlab/Commons/Block/Adminhtml/Tasks/Renderer/Store.php +3 -0
  10. app/code/community/Contactlab/Commons/Block/Adminhtml/Version.php +1 -1
  11. app/code/community/Contactlab/Commons/Helper/Data.php +106 -13
  12. app/code/community/Contactlab/Commons/Helper/Tasks.php +11 -1
  13. app/code/community/Contactlab/Commons/Model/Deleted.php +6 -0
  14. app/code/community/Contactlab/Commons/Model/Exporter/Abstract.php +11 -2
  15. app/code/community/Contactlab/Commons/Model/Log.php +11 -0
  16. app/code/community/Contactlab/Commons/Model/Resource/Deleted.php +1 -1
  17. app/code/community/Contactlab/Commons/Model/Task.php +44 -12
  18. app/code/community/Contactlab/Commons/Test/Helper/Data.php +181 -0
  19. app/code/community/Contactlab/Commons/Test/resources/composer.json +26 -0
  20. app/code/community/Contactlab/Commons/Test/resources/contactlab_db.sql.gz +0 -0
  21. app/code/community/Contactlab/Commons/Test/resources/local.xml +66 -0
  22. app/code/community/Contactlab/Commons/controllers/Adminhtml/ConfigurationCheckController.php +0 -16
  23. app/code/community/Contactlab/Commons/controllers/Adminhtml/Contactlab/Commons/ConfigurationCheckController.php +25 -0
  24. app/code/community/Contactlab/Commons/controllers/Adminhtml/{EventsController.php → Contactlab/Commons/EventsController.php} +9 -1
  25. app/code/community/Contactlab/Commons/controllers/Adminhtml/{LogsController.php → Contactlab/Commons/LogsController.php} +9 -1
  26. app/code/community/Contactlab/Commons/controllers/Adminhtml/Contactlab/Commons/ReleaseNotesController.php +25 -0
  27. app/code/community/Contactlab/Commons/controllers/Adminhtml/{TasksController.php → Contactlab/Commons/TasksController.php} +11 -5
  28. app/code/community/Contactlab/Commons/controllers/Adminhtml/{TestController.php → Contactlab/Commons/TestController.php} +2 -2
  29. app/code/community/Contactlab/Commons/controllers/Adminhtml/ReleaseNotesController.php +0 -16
  30. app/code/community/Contactlab/Commons/docs/ContactlabMagento.docx +0 -0
  31. app/code/community/Contactlab/Commons/docs/Quick Install Guide.docx +0 -0
  32. app/code/community/Contactlab/Commons/docs/example-config/contactlab.xml +1 -1
  33. app/code/community/Contactlab/Commons/docs/release-notes/0.8.13.html +2 -2
  34. app/code/community/Contactlab/Commons/docs/release-notes/0.8.16.html +2 -0
  35. app/code/community/Contactlab/Commons/docs/release-notes/0.8.17.html +3 -0
  36. app/code/community/Contactlab/Commons/docs/release-notes/0.9.0.html +4 -0
  37. app/code/community/Contactlab/Commons/docs/release-notes/1.0.0.html +3 -0
  38. app/code/community/Contactlab/Commons/etc/adminhtml.xml +68 -68
  39. app/code/community/Contactlab/Commons/etc/config.xml +22 -11
  40. app/code/community/Contactlab/Commons/etc/system.xml +33 -22
  41. app/code/community/Contactlab/Commons/sql/contactlab_commons_setup/mysql4-install-0.8.0.php +15 -12
  42. app/code/community/Contactlab/Commons/sql/contactlab_commons_setup/upgrade-1.0.0-1.0.1.php +10 -0
  43. app/code/community/Contactlab/Subscribers/Block/Newsletter/Subscribers/Modify.php +56 -0
  44. app/code/community/Contactlab/Subscribers/Block/Newsletter/Subscribers/Subscribe.php +143 -0
  45. app/code/community/Contactlab/Subscribers/Block/Newsletter/Subscribers/Update.php +125 -0
  46. app/code/community/Contactlab/Subscribers/Helper/Checks.php +106 -0
  47. app/code/community/Contactlab/Subscribers/Helper/Data.php +98 -13
  48. app/code/community/Contactlab/Subscribers/Helper/Exporter.php +145 -19
  49. app/code/community/Contactlab/Subscribers/Helper/Uk.php +106 -36
  50. app/code/community/Contactlab/Subscribers/Model/Checks/AbstractCheck.php +157 -0
  51. app/code/community/Contactlab/Subscribers/Model/Checks/CheckInterface.php +67 -0
  52. app/code/community/Contactlab/Subscribers/Model/Checks/ContactlabAuthApiKeyCheck.php +65 -0
  53. app/code/community/Contactlab/Subscribers/Model/Checks/FindDuplicatedCustomersCheck.php +71 -0
  54. app/code/community/Contactlab/Subscribers/Model/Checks/FindInvalidCustomersCheck.php +99 -0
  55. app/code/community/Contactlab/Subscribers/Model/Checks/RewritesCheck.php +228 -0
  56. app/code/community/Contactlab/Subscribers/Model/Checks/WsdlCheck.php +72 -0
  57. app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers.php +637 -222
  58. app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/InfoTransporter/Abstract.php +22 -0
  59. app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/InfoTransporter/Customer.php +12 -0
  60. app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/InfoTransporter/Deleted.php +12 -0
  61. app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/InfoTransporter/Subscriber.php +12 -0
  62. app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/MapTransporter/Abstract.php +22 -0
  63. app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/MapTransporter/Address.php +4 -0
  64. app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/MapTransporter/Attribute.php +4 -0
  65. app/code/community/Contactlab/Subscribers/Model/Fields.php +80 -0
  66. app/code/community/Contactlab/Subscribers/Model/Importer/Subscribers.php +5 -1
  67. app/code/community/Contactlab/Subscribers/Model/Newsletter/Subscriber.php +22 -0
  68. app/code/community/Contactlab/Subscribers/Model/Newsletter/Subscribers/Observer.php +201 -0
  69. app/code/community/Contactlab/Subscribers/Model/Observer.php +27 -7
  70. app/code/community/Contactlab/Subscribers/Model/Observer/Fields.php +212 -0
  71. app/code/community/Contactlab/Subscribers/Model/Observer/Uk.php +16 -2
  72. app/code/community/Contactlab/Subscribers/Model/Resource/Fields.php +15 -0
  73. app/code/community/Contactlab/Subscribers/Model/Resource/Fields/Collection.php +15 -0
  74. app/code/community/Contactlab/Subscribers/Model/Resource/Newsletter/Subscriber.php +133 -0
  75. app/code/community/Contactlab/Subscribers/Model/Resource/Uk.php +223 -64
  76. app/code/community/Contactlab/Subscribers/Model/Soap/SetSubscriptionStatus.php +4 -0
  77. app/code/community/Contactlab/Subscribers/Model/Stats.php +31 -4
  78. app/code/community/Contactlab/Subscribers/Model/System/Config/Source/Export/CheckUkPolicy.php +33 -0
  79. app/code/community/Contactlab/Subscribers/Model/Task/ExportSubscribersRunner.php +31 -2
  80. app/code/community/Contactlab/Subscribers/Model/Uk.php +33 -6
  81. app/code/community/Contactlab/Subscribers/Test/Helper/Checks.php +83 -0
  82. app/code/community/Contactlab/Subscribers/Test/Model/Checks/ContactlabAuthApiKeyCheck.php +17 -0
  83. app/code/community/Contactlab/Subscribers/Test/Model/Checks/FindDuplicatedCustomersCheck.php +17 -0
  84. app/code/community/Contactlab/Subscribers/Test/Model/Checks/FindInvalidCustomersCheck.php +17 -0
  85. app/code/community/Contactlab/Subscribers/Test/Model/Checks/RewritesCheck.php +17 -0
  86. app/code/community/Contactlab/Subscribers/Test/Model/Checks/WsdlCheck.php +17 -0
  87. app/code/community/Contactlab/Subscribers/Test/Model/Uk.php +436 -0
  88. app/code/community/Contactlab/Subscribers/controllers/Adminhtml/Contactlab/Subscribers/ExportController.php +23 -0
  89. app/code/community/Contactlab/Subscribers/controllers/Adminhtml/Contactlab/Subscribers/ImportController.php +23 -0
  90. app/code/community/Contactlab/Subscribers/controllers/Adminhtml/Contactlab/Subscribers/StatsController.php +33 -0
  91. app/code/community/Contactlab/Subscribers/controllers/Adminhtml/{UkController.php → Contactlab/Subscribers/UkController.php} +15 -4
  92. app/code/community/Contactlab/Subscribers/controllers/Adminhtml/ExportSubscribersController.php +0 -14
  93. app/code/community/Contactlab/Subscribers/controllers/Adminhtml/ImportSubscribersController.php +0 -14
  94. app/code/community/Contactlab/Subscribers/controllers/Adminhtml/StatsController.php +0 -23
  95. app/code/community/Contactlab/Subscribers/controllers/EditController.php +50 -0
  96. app/code/community/Contactlab/Subscribers/controllers/ModifyController.php +62 -0
  97. app/code/community/Contactlab/Subscribers/docs/release-notes/0.8.16.html +1 -1
  98. app/code/community/Contactlab/Subscribers/docs/release-notes/0.8.18.html +4 -0
  99. app/code/community/Contactlab/Subscribers/docs/release-notes/0.8.20.html +4 -0
  100. app/code/community/Contactlab/Subscribers/docs/release-notes/0.8.21.html +4 -0
  101. app/code/community/Contactlab/Subscribers/docs/release-notes/0.9.0.html +6 -0
  102. app/code/community/Contactlab/Subscribers/docs/release-notes/0.9.1.html +3 -0
  103. app/code/community/Contactlab/Subscribers/docs/release-notes/1.0.0.html +4 -0
  104. app/code/community/Contactlab/Subscribers/docs/release-notes/1.0.1.html +3 -0
  105. app/code/community/Contactlab/Subscribers/etc/config.xml +118 -13
  106. app/code/community/Contactlab/Subscribers/etc/system.xml +104 -26
  107. app/code/community/Contactlab/Subscribers/shell/make-csv.php +0 -78
  108. app/code/community/Contactlab/Subscribers/sql/contactlab_subscribers_setup/upgrade-0.8.21-0.8.22.php +91 -0
  109. app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Edit/Form.php +69 -45
  110. app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Grid.php +11 -2
  111. app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Grid/Renderer/XmlDeliveryStatus.php +80 -22
  112. app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Tasks/Detail.php +30 -0
  113. app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Tasks/Detail/Grid.php +87 -0
  114. app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Tasks/List.php +26 -0
  115. app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Tasks/List/Grid.php +114 -0
  116. app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Tasks/Renderer/Customer.php +25 -0
  117. app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Tasks/Renderer/QueueStatus.php +86 -0
  118. app/code/community/Contactlab/Template/Block/Adminhtml/Type.php +1 -1
  119. app/code/community/Contactlab/Template/Block/Adminhtml/Type/Edit/Form.php +6 -6
  120. app/code/community/Contactlab/Template/Block/Adminhtml/Type/Grid.php +4 -4
  121. app/code/community/Contactlab/Template/Helper/Data.php +15 -7
  122. app/code/community/Contactlab/Template/Helper/SampleData.php +147 -0
  123. app/code/community/Contactlab/Template/Model/Cron.php +7 -4
  124. app/code/community/Contactlab/Template/Model/Newsletter/Processor/Abstract.php +46 -14
  125. app/code/community/Contactlab/Template/Model/Newsletter/Processor/Cart.php +2 -2
  126. app/code/community/Contactlab/Template/Model/Newsletter/Processor/Filter/Abstract.php +13 -8
  127. app/code/community/Contactlab/Template/Model/Newsletter/Processor/Filter/Cart/Products.php +1 -1
  128. app/code/community/Contactlab/Template/Model/Newsletter/Processor/Filter/TestMode.php +2 -3
  129. app/code/community/Contactlab/Template/Model/Newsletter/Processor/Filter/Wishlist/DistinctByType.php +1 -1
  130. app/code/community/Contactlab/Template/Model/Newsletter/Processor/Filter/Wishlist/Products.php +2 -1
  131. app/code/community/Contactlab/Template/Model/Newsletter/Processor/Generic.php +2 -2
  132. app/code/community/Contactlab/Template/Model/Newsletter/Processor/Interface.php +2 -2
  133. app/code/community/Contactlab/Template/Model/Newsletter/Processor/Wishlist.php +2 -2
  134. app/code/community/Contactlab/Template/Model/Newsletter/Queue.php +15 -1
  135. app/code/community/Contactlab/Template/Model/Newsletter/Queue/Link.php +11 -0
  136. app/code/community/Contactlab/Template/Model/Newsletter/Template.php +85 -4
  137. app/code/community/Contactlab/Template/Model/Newsletter/XmlDelivery.php +4 -1
  138. app/code/community/Contactlab/Template/Model/Newsletter/XmlDelivery/Check.php +14 -2
  139. app/code/community/Contactlab/Template/Model/Resource/Newsletter/Queue/Collection.php +38 -6
  140. app/code/community/Contactlab/Template/Model/Resource/Newsletter/Queue/Link.php +11 -0
  141. app/code/community/Contactlab/Template/Model/Resource/Newsletter/Queue/Link/Collection.php +27 -0
  142. app/code/community/Contactlab/Template/Model/Resource/Newsletter/Template/Collection.php +13 -4
  143. app/code/community/Contactlab/Template/Model/Task/Observer.php +4 -3
  144. app/code/community/Contactlab/Template/Model/Type.php +19 -0
  145. app/code/community/Contactlab/Template/controllers/Adminhtml/Contactlab/Template/TasksController.php +57 -0
  146. app/code/community/Contactlab/Template/controllers/Adminhtml/{TypesController.php → Contactlab/Template/TypesController.php} +2 -2
  147. app/code/community/Contactlab/Template/controllers/Adminhtml/{TemplateController.php → Contactlab/TemplateController.php} +12 -3
  148. app/code/community/Contactlab/Template/controllers/Adminhtml/Newsletter/QueueController.php +1 -1
  149. app/code/community/Contactlab/Template/controllers/SampleDataController.php +11 -0
  150. app/code/community/Contactlab/Template/data/contactlab_template_setup/data-upgrade-0.8.20-0.8.21.php +5 -0
  151. app/code/community/Contactlab/Template/docs/example-templates/subject_ac.json +1 -0
  152. app/code/community/Contactlab/Template/docs/example-templates/subject_wl.json +1 -0
  153. app/code/community/Contactlab/Template/docs/release-notes/0.8.18.html +1 -1
  154. app/code/community/Contactlab/Template/docs/release-notes/0.8.20.html +1 -1
  155. app/code/community/Contactlab/Template/docs/release-notes/0.8.21.html +3 -0
  156. app/code/community/Contactlab/Template/docs/release-notes/0.8.22.html +4 -0
  157. app/code/community/Contactlab/Template/docs/release-notes/0.8.23.html +6 -0
  158. app/code/community/Contactlab/Template/docs/release-notes/0.8.24.html +5 -0
  159. app/code/community/Contactlab/Template/docs/release-notes/0.9.0.html +3 -0
  160. app/code/community/Contactlab/Template/etc/adminhtml.xml +8 -4
  161. app/code/community/Contactlab/Template/etc/config.xml +16 -12
  162. app/code/community/Contactlab/Template/etc/system.xml +24 -24
  163. app/code/community/Contactlab/Template/sql/contactlab_template_setup/old/mysql4-install-0.8.0.php +0 -26
  164. app/code/community/Contactlab/Template/sql/contactlab_template_setup/upgrade-0.8.22-0.8.23.php +24 -0
  165. app/code/community/Contactlab/Template/sql/contactlab_template_setup/upgrade-0.8.23-0.8.24.php +28 -0
  166. app/code/community/Contactlab/Template/sql/contactlab_template_setup/upgrade-0.9.0-0.9.1.php +24 -0
  167. app/code/community/Contactlab/Transactional/Model/Email/Queue.php +89 -0
  168. app/code/community/Contactlab/Transactional/Model/Email/Template.php +18 -20
  169. app/code/community/Contactlab/Transactional/Model/Zend/Mail.php +101 -104
  170. app/code/community/Contactlab/Transactional/docs/release-notes/0.8.2.html +2 -2
  171. app/code/community/Contactlab/Transactional/docs/release-notes/0.8.3.html +3 -0
  172. app/code/community/Contactlab/Transactional/docs/release-notes/0.8.31.html +3 -0
  173. app/code/community/Contactlab/Transactional/docs/release-notes/0.9.0.html +3 -0
  174. app/code/community/Contactlab/Transactional/etc/config.xml +6 -5
  175. app/code/community/Contactlab/Transactional/etc/system.xml +12 -2
  176. app/design/adminhtml/default/default/layout/contactlab/commons.xml +56 -56
  177. app/design/adminhtml/default/default/layout/contactlab/subscribers.xml +81 -86
  178. app/design/adminhtml/default/default/layout/contactlab/template.xml +64 -50
  179. app/design/adminhtml/default/default/template/contactlab/commons/configurationcheck.phtml +33 -14
  180. app/design/adminhtml/default/default/template/contactlab/commons/releasenotes.phtml +33 -33
  181. app/design/adminhtml/default/default/template/contactlab/commons/send_mail.phtml +33 -33
  182. app/design/adminhtml/default/default/template/contactlab/commons/tasks/js.phtml +4 -4
  183. app/design/adminhtml/default/default/template/contactlab/commons/tasks/status.phtml +3 -3
  184. app/design/adminhtml/default/default/template/contactlab/commons/test.phtml +5 -5
  185. app/design/adminhtml/default/default/template/contactlab/commons/version.phtml +26 -26
  186. app/design/adminhtml/default/default/template/contactlab/subscribers/export.phtml +5 -5
  187. app/design/adminhtml/default/default/template/contactlab/subscribers/subscribers.phtml +28 -25
  188. app/design/adminhtml/default/default/template/contactlab/subscribers/uk.phtml +27 -27
  189. app/design/adminhtml/default/default/template/contactlab/template/edit/js.phtml +178 -172
  190. app/design/adminhtml/default/default/template/contactlab/template/edit/validation.phtml +45 -45
  191. app/design/adminhtml/default/default/template/contactlab/template/tasks/buttons.phtml +16 -13
  192. app/design/adminhtml/default/default/template/contactlab/template/tasks/debugemail.phtml +3 -3
  193. app/design/adminhtml/default/default/template/contactlab/template/type/edit.phtml +69 -69
  194. app/design/frontend/base/default/layout/contactlab/layout.xml +10 -0
  195. app/design/frontend/base/default/layout/contactlab/subscribers.xml +32 -0
  196. app/design/frontend/base/default/template/contactlab/subscribers/newsletter/subscribers/modify.phtml +23 -0
  197. app/design/frontend/base/default/template/contactlab/subscribers/newsletter/subscribers/subscribe.phtml +158 -0
  198. app/design/frontend/base/default/template/contactlab/subscribers/newsletter/subscribers/update.phtml +148 -0
  199. app/etc/modules/Contactlab_Commons.xml +12 -26
  200. app/etc/modules/Contactlab_Subscribers.xml +12 -29
  201. app/etc/modules/Contactlab_Template.xml +12 -12
  202. app/etc/modules/Contactlab_Transactional.xml +12 -12
  203. app/locale/en_US/contactlab/Contactlab_Commons.csv +6 -6
  204. app/locale/en_US/template/email/contactlab_commons/send_mail.html +0 -2
  205. app/locale/it_IT/contactlab/Contactlab_Commons.csv +136 -129
  206. app/locale/it_IT/contactlab/Contactlab_Subscribers.csv +91 -88
  207. app/locale/it_IT/contactlab/Contactlab_Template.csv +120 -115
  208. app/locale/it_IT/contactlab/Contactlab_Transactional.csv +7 -7
  209. js/contactlab_commons/adminhtml/tasks.js +82 -82
  210. lib/contactlab/Attachment.php +41 -41
  211. lib/contactlab/AuthToken.php +13 -13
  212. lib/contactlab/BounceDetail.php +27 -27
  213. lib/contactlab/Campaign.php +90 -90
  214. lib/contactlab/CampaignFeedback.php +174 -174
  215. lib/contactlab/CampaignLookupPreferences.php +15 -15
  216. lib/contactlab/CampaignNote.php +27 -27
  217. lib/contactlab/CampaignNotes.php +15 -15
  218. lib/contactlab/Campaigns.php +15 -15
  219. lib/contactlab/ClabService.php +1128 -1128
  220. lib/contactlab/CommunicationCategory.php +41 -41
  221. lib/contactlab/EmailMessage.php +36 -36
  222. lib/contactlab/FaxMessage.php +36 -36
  223. lib/contactlab/LookupPreferences.php +27 -27
  224. lib/contactlab/Message.php +62 -62
  225. lib/contactlab/MessageModels.php +15 -15
  226. lib/contactlab/Recipients.php +20 -20
  227. lib/contactlab/Sender.php +34 -34
  228. lib/contactlab/SlicedDataSet.php +20 -20
  229. lib/contactlab/Subscriber.php +20 -20
  230. lib/contactlab/SubscriberAttribute.php +20 -20
  231. lib/contactlab/SubscriberSource.php +62 -62
  232. lib/contactlab/SubscriberSourceField.php +41 -41
  233. lib/contactlab/SubscriberSourceFilter.php +48 -48
  234. lib/contactlab/SubscriberSourceFilters.php +15 -15
  235. lib/contactlab/SubscriberSources.php +15 -15
  236. lib/contactlab/Subscribers.php +15 -15
  237. lib/contactlab/TextMessage.php +15 -15
  238. lib/contactlab/TrackedLink.php +41 -41
  239. lib/contactlab/TrackedLinks.php +15 -15
  240. lib/contactlab/XMLDeliveryInfos.php +15 -15
  241. lib/contactlab/addAttachment.php +27 -27
  242. lib/contactlab/addAttachmentResponse.php +13 -13
  243. lib/contactlab/addCampaignNote.php +27 -27
  244. lib/contactlab/addCampaignNoteResponse.php +13 -13
  245. lib/contactlab/addSubscriber.php +27 -27
  246. lib/contactlab/addSubscriberResponse.php +13 -13
  247. lib/contactlab/addSubscriberSource.php +20 -20
  248. lib/contactlab/addSubscriberSourceFilter.php +20 -20
  249. lib/contactlab/addSubscriberSourceFilterResponse.php +13 -13
  250. lib/contactlab/addSubscriberSourceResponse.php +13 -13
  251. lib/contactlab/addSubscribers.php +27 -27
  252. lib/contactlab/addSubscribersResponse.php +13 -13
  253. lib/contactlab/archiveSubscriberSourceFilter.php +20 -20
  254. lib/contactlab/archiveSubscriberSourceFilterResponse.php +6 -6
  255. lib/contactlab/borrowToken.php +20 -20
  256. lib/contactlab/borrowTokenResponse.php +13 -13
  257. lib/contactlab/cancelCampaign.php +20 -20
  258. lib/contactlab/cancelCampaignResponse.php +6 -6
  259. lib/contactlab/cloneAndSendCampaign.php +27 -27
  260. lib/contactlab/cloneAndSendCampaignResponse.php +13 -13
  261. lib/contactlab/countSubscribers.php +20 -20
  262. lib/contactlab/countSubscribersIncludedInFilter.php +27 -27
  263. lib/contactlab/countSubscribersIncludedInFilterResponse.php +13 -13
  264. lib/contactlab/countSubscribersResponse.php +13 -13
  265. lib/contactlab/createCampaign.php +20 -20
  266. lib/contactlab/createCampaignResponse.php +13 -13
  267. lib/contactlab/createMessageModel.php +20 -20
  268. lib/contactlab/createMessageModelResponse.php +13 -13
  269. lib/contactlab/findArchivedFiltersBySubscriberSource.php +27 -27
  270. lib/contactlab/findArchivedFiltersBySubscriberSourceResponse.php +13 -13
  271. lib/contactlab/findCampaigns.php +27 -27
  272. lib/contactlab/findCampaignsByModel.php +34 -34
  273. lib/contactlab/findCampaignsByModelResponse.php +13 -13
  274. lib/contactlab/findCampaignsByNameOrSubject.php +34 -34
  275. lib/contactlab/findCampaignsByNameOrSubjectResponse.php +13 -13
  276. lib/contactlab/findCampaignsByNote.php +34 -34
  277. lib/contactlab/findCampaignsByNoteResponse.php +13 -13
  278. lib/contactlab/findCampaignsByStatus.php +34 -34
  279. lib/contactlab/findCampaignsByStatusResponse.php +13 -13
  280. lib/contactlab/findCampaignsResponse.php +13 -13
  281. lib/contactlab/findCampaignsSentBetween.php +41 -41
  282. lib/contactlab/findCampaignsSentBetweenResponse.php +13 -13
  283. lib/contactlab/findFiltersBySubscriberSource.php +27 -27
  284. lib/contactlab/findFiltersBySubscriberSourceResponse.php +13 -13
  285. lib/contactlab/findMessageModels.php +27 -27
  286. lib/contactlab/findMessageModelsBySubscriberSource.php +27 -27
  287. lib/contactlab/findMessageModelsBySubscriberSourceResponse.php +13 -13
  288. lib/contactlab/findMessageModelsResponse.php +13 -13
  289. lib/contactlab/findNotesByCampaign.php +20 -20
  290. lib/contactlab/findNotesByCampaignResponse.php +13 -13
  291. lib/contactlab/findPeriodicCampaigns.php +27 -27
  292. lib/contactlab/findPeriodicCampaignsResponse.php +13 -13
  293. lib/contactlab/findSubscriberSources.php +20 -20
  294. lib/contactlab/findSubscriberSourcesResponse.php +13 -13
  295. lib/contactlab/findSubscribers.php +34 -34
  296. lib/contactlab/findSubscribersIncludedInFilter.php +34 -34
  297. lib/contactlab/findSubscribersIncludedInFilterResponse.php +13 -13
  298. lib/contactlab/findSubscribersResponse.php +13 -13
  299. lib/contactlab/findTriggerableCampaigns.php +27 -27
  300. lib/contactlab/findTriggerableCampaignsResponse.php +13 -13
  301. lib/contactlab/getArchivedSubscriberSourceFilter.php +20 -20
  302. lib/contactlab/getArchivedSubscriberSourceFilterResponse.php +13 -13
  303. lib/contactlab/getAttachmentByCampaignId.php +20 -20
  304. lib/contactlab/getAttachmentByCampaignIdResponse.php +13 -13
  305. lib/contactlab/getAvailableCommunicationCategories.php +13 -13
  306. lib/contactlab/getAvailableCommunicationCategoriesResponse.php +13 -13
  307. lib/contactlab/getCampaign.php +20 -20
  308. lib/contactlab/getCampaignDeliveryStatus.php +20 -20
  309. lib/contactlab/getCampaignDeliveryStatusResponse.php +13 -13
  310. lib/contactlab/getCampaignFeedback.php +20 -20
  311. lib/contactlab/getCampaignFeedbackResponse.php +13 -13
  312. lib/contactlab/getCampaignResponse.php +13 -13
  313. lib/contactlab/getCryptoKey.php +20 -20
  314. lib/contactlab/getCryptoKeyResponse.php +13 -13
  315. lib/contactlab/getMessageModelById.php +20 -20
  316. lib/contactlab/getMessageModelByIdResponse.php +13 -13
  317. lib/contactlab/getRequestStatus.php +20 -20
  318. lib/contactlab/getRequestStatusResponse.php +13 -13
  319. lib/contactlab/getSubscriber.php +27 -27
  320. lib/contactlab/getSubscriberDataExchangeStatus.php +20 -20
  321. lib/contactlab/getSubscriberDataExchangeStatusResponse.php +13 -13
  322. lib/contactlab/getSubscriberResponse.php +13 -13
  323. lib/contactlab/getSubscriberSource.php +20 -20
  324. lib/contactlab/getSubscriberSourceFilter.php +20 -20
  325. lib/contactlab/getSubscriberSourceFilterResponse.php +13 -13
  326. lib/contactlab/getSubscriberSourceResponse.php +13 -13
  327. lib/contactlab/getTrackedLinks.php +27 -27
  328. lib/contactlab/getTrackedLinksResponse.php +13 -13
  329. lib/contactlab/getXMLDeliveries.php +27 -27
  330. lib/contactlab/getXMLDeliveriesResponse.php +13 -13
  331. lib/contactlab/getXMLDeliveryTransitions.php +20 -20
  332. lib/contactlab/getXMLDeliveryTransitionsResponse.php +13 -13
  333. lib/contactlab/invalidateToken.php +13 -13
  334. lib/contactlab/invalidateTokenResponse.php +13 -13
  335. lib/contactlab/keepaliveToken.php +13 -13
  336. lib/contactlab/keepaliveTokenResponse.php +13 -13
  337. lib/contactlab/modifySubscriberSubscriptionStatus.php +34 -34
  338. lib/contactlab/modifySubscriberSubscriptionStatusByMailqId.php +41 -41
  339. lib/contactlab/modifySubscriberSubscriptionStatusByMailqIdResponse.php +6 -6
  340. lib/contactlab/modifySubscriberSubscriptionStatusResponse.php +6 -6
  341. lib/contactlab/publishOnWeb.php +48 -48
  342. lib/contactlab/publishOnWebResponse.php +13 -13
  343. lib/contactlab/removeSubscriber.php +27 -27
  344. lib/contactlab/removeSubscriberResponse.php +13 -13
  345. lib/contactlab/requestCampaignFeedbackReport.php +20 -20
  346. lib/contactlab/requestCampaignFeedbackReportResponse.php +6 -6
  347. lib/contactlab/reuseSubscriberSourceFilter.php +20 -20
  348. lib/contactlab/reuseSubscriberSourceFilterResponse.php +6 -6
  349. lib/contactlab/sendCampaign.php +20 -20
  350. lib/contactlab/sendCampaignResponse.php +13 -13
  351. lib/contactlab/sendImmediateMessage.php +34 -34
  352. lib/contactlab/sendImmediateMessageResponse.php +13 -13
  353. lib/contactlab/sendImmediateMessageSDataCData.php +34 -34
  354. lib/contactlab/sendImmediateMessageSDataCDataCA.php +48 -48
  355. lib/contactlab/sendImmediateMessageSDataCDataCAResponse.php +13 -13
  356. lib/contactlab/sendImmediateMessageSDataCDataResponse.php +13 -13
  357. lib/contactlab/sendImmediateMessageSDataCIdCA.php +48 -48
  358. lib/contactlab/sendImmediateMessageSDataCIdCAResponse.php +13 -13
  359. lib/contactlab/sendImmediateMessageSIdCData.php +41 -41
  360. lib/contactlab/sendImmediateMessageSIdCDataCA.php +55 -55
  361. lib/contactlab/sendImmediateMessageSIdCDataCAResponse.php +13 -13
  362. lib/contactlab/sendImmediateMessageSIdCDataResponse.php +13 -13
  363. lib/contactlab/sendImmediateMessageSdataCAl.php +34 -34
  364. lib/contactlab/sendImmediateMessageSdataCAlCA.php +48 -48
  365. lib/contactlab/sendImmediateMessageSdataCAlCAResponse.php +13 -13
  366. lib/contactlab/sendImmediateMessageSdataCAlResponse.php +13 -13
  367. lib/contactlab/sendImmediateMessageSidCAl.php +41 -41
app/code/community/Contactlab/Commons/Block/Adminhtml/ConfigurationCheck.php CHANGED
@@ -9,7 +9,7 @@ class Contactlab_Commons_Block_Adminhtml_ConfigurationCheck extends Mage_Adminht
9
  */
10
  protected function _construct()
11
  {
12
- $this->_headerText = "Cron configuration check";
13
  parent::_construct();
14
  }
15
 
@@ -20,17 +20,16 @@ class Contactlab_Commons_Block_Adminhtml_ConfigurationCheck extends Mage_Adminht
20
  public function getCronConfiguration() {
21
  $rv = new Varien_Data_Collection();
22
  $config = Mage::getConfig()->getNode('crontab/jobs')->children();
23
- $e = "";
24
  foreach ($config as $cronItem) {
25
  if (preg_match('|^contactl|', $cronItem->getName())) {
26
  $item = new Varien_Object();
27
  $item->setModule($this->normalizeModule($cronItem->getName()));
28
  $item->setName($this->normalizeName($cronItem->getName()));
29
  if ($cronItem->description) {
30
- $item->setDescription((string) $cronItem->description);
31
  }
32
  if ($cronItem->schedule) {
33
- $item->setSchedule((string) $cronItem->schedule->cron_expr);
34
  } else {
35
  $item->setSchedule(false);
36
  }
@@ -40,13 +39,34 @@ class Contactlab_Commons_Block_Adminhtml_ConfigurationCheck extends Mage_Adminht
40
  return $rv;
41
  }
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  public function normalizeModule($name)
44
  {
45
  return ucwords(str_replace('_', ' ', preg_replace('|^([^_]*_[^_]*).*|', '$1', $name)));
46
  }
 
 
 
 
 
 
47
  public function normalizeName($name)
48
  {
49
  return ucwords(str_replace('_', ' ', preg_replace('|^[^_]*_[^_]*(.*)|', '$1', $name)));
50
  }
51
-
52
  }
9
  */
10
  protected function _construct()
11
  {
12
+ $this->_headerText = "Configuration Check";
13
  parent::_construct();
14
  }
15
 
20
  public function getCronConfiguration() {
21
  $rv = new Varien_Data_Collection();
22
  $config = Mage::getConfig()->getNode('crontab/jobs')->children();
 
23
  foreach ($config as $cronItem) {
24
  if (preg_match('|^contactl|', $cronItem->getName())) {
25
  $item = new Varien_Object();
26
  $item->setModule($this->normalizeModule($cronItem->getName()));
27
  $item->setName($this->normalizeName($cronItem->getName()));
28
  if ($cronItem->description) {
29
+ $item->setDescription((string)$cronItem->description);
30
  }
31
  if ($cronItem->schedule) {
32
+ $item->setSchedule((string)$cronItem->schedule->cron_expr);
33
  } else {
34
  $item->setSchedule(false);
35
  }
39
  return $rv;
40
  }
41
 
42
+ /**
43
+ * Subscriber checks.
44
+ */
45
+ public function getSubscribersChecks() {
46
+ if (!Mage::helper('contactlab_commons')->isModuleEnabled('Contactlab_Subscribers')) {
47
+ return array();
48
+ }
49
+ $helper = Mage::helper('contactlab_subscribers/checks');
50
+ return $helper->runAvailableChecks();
51
+ }
52
+
53
+ /**
54
+ * Normalize module.
55
+ * @param string $name
56
+ * @return string
57
+ */
58
  public function normalizeModule($name)
59
  {
60
  return ucwords(str_replace('_', ' ', preg_replace('|^([^_]*_[^_]*).*|', '$1', $name)));
61
  }
62
+
63
+ /**
64
+ * Normalize module name.
65
+ * @param string $name
66
+ * @return string
67
+ */
68
  public function normalizeName($name)
69
  {
70
  return ucwords(str_replace('_', ' ', preg_replace('|^[^_]*_[^_]*(.*)|', '$1', $name)));
71
  }
 
72
  }
app/code/community/Contactlab/Commons/Block/Adminhtml/Events.php CHANGED
@@ -20,6 +20,6 @@ class Contactlab_Commons_Block_Adminhtml_Events extends Mage_Adminhtml_Block_Wid
20
 
21
  /** To task index. */
22
  public function getBackUrl() {
23
- return $this->getUrl('*/adminhtml_tasks');
24
  }
25
  }
20
 
21
  /** To task index. */
22
  public function getBackUrl() {
23
+ return $this->getUrl('*/contactlab_commons_tasks');
24
  }
25
  }
app/code/community/Contactlab/Commons/Block/Adminhtml/Events/Grid.php CHANGED
@@ -48,7 +48,7 @@ class Contactlab_Commons_Block_Adminhtml_Events_Grid extends Mage_Adminhtml_Bloc
48
  */
49
  protected function _prepareColumns() {
50
  $this->addColumn('task_event_id', array(
51
- 'header' => $this->__('Id'),
52
  'align' => 'left',
53
  'index' => 'task_event_id',
54
  'width' => 1,
@@ -62,7 +62,7 @@ class Contactlab_Commons_Block_Adminhtml_Events_Grid extends Mage_Adminhtml_Bloc
62
  'width' => 300
63
  ));
64
  $this->addColumn('created_at', array(
65
- 'header' => $this->__('Created At'),
66
  'align' => 'left',
67
  'index' => 'created_at',
68
  'width' => 1
48
  */
49
  protected function _prepareColumns() {
50
  $this->addColumn('task_event_id', array(
51
+ 'header' => $this->__('ID'),
52
  'align' => 'left',
53
  'index' => 'task_event_id',
54
  'width' => 1,
62
  'width' => 300
63
  ));
64
  $this->addColumn('created_at', array(
65
+ 'header' => $this->__('Created'),
66
  'align' => 'left',
67
  'index' => 'created_at',
68
  'width' => 1
app/code/community/Contactlab/Commons/Block/Adminhtml/Events/Renderer/Status.php CHANGED
@@ -26,9 +26,12 @@ class Contactlab_Commons_Block_Adminhtml_Events_Renderer_Status extends Mage_Adm
26
  $open = "<span class=\"task-status-" . $row->getStatus() . "\" id=\"task-status-" . $row->getTaskId() . "\">";
27
  $close = "</span>";
28
  $status = $row->getStatus();
29
- $name = Contactlab_Commons_Model_Task::$statuses[$status];
 
 
 
30
  return sprintf($open . "<span title=\"%s\" style=\"color: %s; %s\">%s</span>" . $close,
31
- $h->__($name['description']), $name['color'], $name['style'],
32
  $h->__($status));
33
  }
34
 
26
  $open = "<span class=\"task-status-" . $row->getStatus() . "\" id=\"task-status-" . $row->getTaskId() . "\">";
27
  $close = "</span>";
28
  $status = $row->getStatus();
29
+ $statusDef = Contactlab_Commons_Model_Task::$statuses[$status];
30
+ if ($status === 'hidden') {
31
+ $status = 'hidden/close';
32
+ }
33
  return sprintf($open . "<span title=\"%s\" style=\"color: %s; %s\">%s</span>" . $close,
34
+ $h->__($statusDef['description']), $statusDef['color'], $statusDef['style'],
35
  $h->__($status));
36
  }
37
 
app/code/community/Contactlab/Commons/Block/Adminhtml/Logs/Grid.php CHANGED
@@ -35,7 +35,7 @@ class Contactlab_Commons_Block_Adminhtml_Logs_Grid extends Mage_Adminhtml_Block_
35
  */
36
  protected function _prepareColumns() {
37
  $this->addColumn('log_id', array(
38
- 'header' => $this->__('Id'),
39
  'align' => 'left',
40
  'index' => 'log_id',
41
  'width' => 1,
@@ -43,7 +43,7 @@ class Contactlab_Commons_Block_Adminhtml_Logs_Grid extends Mage_Adminhtml_Block_
43
  'renderer' => 'contactlab_commons/adminhtml_logs_renderer_default'
44
  ));
45
  $this->addColumn('created_at', array(
46
- 'header' => $this->__('Created at'),
47
  'align' => 'left',
48
  'index' => 'created_at',
49
  'width' => 1,
35
  */
36
  protected function _prepareColumns() {
37
  $this->addColumn('log_id', array(
38
+ 'header' => $this->__('ID'),
39
  'align' => 'left',
40
  'index' => 'log_id',
41
  'width' => 1,
43
  'renderer' => 'contactlab_commons/adminhtml_logs_renderer_default'
44
  ));
45
  $this->addColumn('created_at', array(
46
+ 'header' => $this->__('Created'),
47
  'align' => 'left',
48
  'index' => 'created_at',
49
  'width' => 1,
app/code/community/Contactlab/Commons/Block/Adminhtml/ReleaseNotes.php CHANGED
@@ -9,7 +9,7 @@ class Contactlab_Commons_Block_Adminhtml_ReleaseNotes extends Mage_Adminhtml_Blo
9
  */
10
  protected function _construct()
11
  {
12
- $this->_headerText = "Contactlab Relase Notes";
13
  parent::_construct();
14
  }
15
 
9
  */
10
  protected function _construct()
11
  {
12
+ $this->_headerText = "ContactLab Release Notes";
13
  parent::_construct();
14
  }
15
 
app/code/community/Contactlab/Commons/Block/Adminhtml/Tasks.php CHANGED
@@ -17,7 +17,7 @@ class Contactlab_Commons_Block_Adminhtml_Tasks extends Mage_Adminhtml_Block_Widg
17
  $this->removeButton("add");
18
  $this->addCommandButton("tasks", "clear", 'contactlab_commons', "Clear old tasks", 'Are you sure you want to do this?', '*/*/clear');
19
  if (Mage::helper('contactlab_commons')->isDebug()) {
20
- $this->addCommandButton("tasks", "consume", 'contactlab_commons', "Consume tasks",
21
  null, '*/*/consume');
22
  }
23
  }
17
  $this->removeButton("add");
18
  $this->addCommandButton("tasks", "clear", 'contactlab_commons', "Clear old tasks", 'Are you sure you want to do this?', '*/*/clear');
19
  if (Mage::helper('contactlab_commons')->isDebug()) {
20
+ $this->addCommandButton("tasks", "consume", 'contactlab_commons', "Run tasks",
21
  null, '*/*/consume');
22
  }
23
  }
app/code/community/Contactlab/Commons/Block/Adminhtml/Tasks/Grid.php CHANGED
@@ -7,6 +7,7 @@ class Contactlab_Commons_Block_Adminhtml_Tasks_Grid extends Mage_Adminhtml_Block
7
 
8
  /**
9
  * Construct the block.
 
10
  */
11
  public function __construct($attributes = array()) {
12
  parent::__construct($attributes);
@@ -38,7 +39,7 @@ class Contactlab_Commons_Block_Adminhtml_Tasks_Grid extends Mage_Adminhtml_Block
38
  */
39
  protected function _prepareColumns() {
40
  $this->addColumn('task_id', array(
41
- 'header' => $this->__('Id'),
42
  'align' => 'left',
43
  'index' => 'task_id',
44
  'width' => 1
@@ -50,14 +51,14 @@ class Contactlab_Commons_Block_Adminhtml_Tasks_Grid extends Mage_Adminhtml_Block
50
  'width' => 1
51
  ));
52
  $this->addColumn('created_at', array(
53
- 'header' => $this->__('Created at'),
54
  'align' => 'left',
55
  'index' => 'created_at',
56
  'width' => 1,
57
  'type' => 'datetime'
58
  ));
59
  $this->addColumn('planned_at', array(
60
- 'header' => $this->__('Planned at'),
61
  'align' => 'left',
62
  'index' => 'planned_at',
63
  'width' => 1,
@@ -208,9 +209,11 @@ class Contactlab_Commons_Block_Adminhtml_Tasks_Grid extends Mage_Adminhtml_Block
208
 
209
  /**
210
  * Row url.
 
 
211
  */
212
  public function getRowUrl($item) {
213
- return $this->getUrl('*/adminhtml_events/', array(
214
  'id' => $item->getId()
215
  ));
216
  }
7
 
8
  /**
9
  * Construct the block.
10
+ * @param array $attributes
11
  */
12
  public function __construct($attributes = array()) {
13
  parent::__construct($attributes);
39
  */
40
  protected function _prepareColumns() {
41
  $this->addColumn('task_id', array(
42
+ 'header' => $this->__('ID'),
43
  'align' => 'left',
44
  'index' => 'task_id',
45
  'width' => 1
51
  'width' => 1
52
  ));
53
  $this->addColumn('created_at', array(
54
+ 'header' => $this->__('Created'),
55
  'align' => 'left',
56
  'index' => 'created_at',
57
  'width' => 1,
58
  'type' => 'datetime'
59
  ));
60
  $this->addColumn('planned_at', array(
61
+ 'header' => $this->__('Planned'),
62
  'align' => 'left',
63
  'index' => 'planned_at',
64
  'width' => 1,
209
 
210
  /**
211
  * Row url.
212
+ * @param $item
213
+ * @return string
214
  */
215
  public function getRowUrl($item) {
216
+ return $this->getUrl('*/contactlab_commons_events/', array(
217
  'id' => $item->getId()
218
  ));
219
  }
app/code/community/Contactlab/Commons/Block/Adminhtml/Tasks/Renderer/Store.php CHANGED
@@ -13,6 +13,9 @@ class Contactlab_Commons_Block_Adminhtml_Tasks_Renderer_Store
13
  * @return string
14
  */
15
  public function render(Varien_Object $row) {
 
 
 
16
  return Mage::app()->getStore($row->getStoreId())->getName();
17
  }
18
  }
13
  * @return string
14
  */
15
  public function render(Varien_Object $row) {
16
+ if ($row->getStoreId() === null) {
17
+ return '';
18
+ }
19
  return Mage::app()->getStore($row->getStoreId())->getName();
20
  }
21
  }
app/code/community/Contactlab/Commons/Block/Adminhtml/Version.php CHANGED
@@ -18,7 +18,7 @@ class Contactlab_Commons_Block_Adminhtml_Version extends Mage_Adminhtml_Block_Ab
18
  * @return string
19
  */
20
  public function getTitle() {
21
- return $this->__("Plugin versions");
22
  }
23
 
24
  /**
18
  * @return string
19
  */
20
  public function getTitle() {
21
+ return $this->__("Plugin version");
22
  }
23
 
24
  /**
app/code/community/Contactlab/Commons/Helper/Data.php CHANGED
@@ -1,7 +1,7 @@
1
  <?php
2
 
3
  /**
4
- * Helper data for logging pourpose.
5
  */
6
  class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
7
 
@@ -38,6 +38,7 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
38
 
39
  /**
40
  * Emergency: system is unusable
 
41
  */
42
  public function logEmerg($value) {
43
  $this->_log($value, Zend_Log::EMERG);
@@ -45,6 +46,7 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
45
 
46
  /**
47
  * Alert: action must be taken immediately
 
48
  */
49
  public function logAlert($value) {
50
  $this->_log($value, Zend_Log::ALERT);
@@ -52,6 +54,7 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
52
 
53
  /**
54
  * Critical: critical conditions
 
55
  */
56
  public function logCrit($value) {
57
  $this->_log($value, Zend_Log::CRIT);
@@ -59,6 +62,7 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
59
 
60
  /**
61
  * Error: error conditions
 
62
  */
63
  public function logErr($value) {
64
  $this->_log($value, Zend_Log::ERR);
@@ -66,6 +70,7 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
66
 
67
  /**
68
  * Warning: warning conditions
 
69
  */
70
  public function logWarn($value) {
71
  $this->_log($value, Zend_Log::WARN);
@@ -73,6 +78,7 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
73
 
74
  /**
75
  * Notice: normal but significant condition
 
76
  */
77
  public function logNotice($value) {
78
  $this->_log($value, Zend_Log::NOTICE);
@@ -80,6 +86,7 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
80
 
81
  /**
82
  * Informational: informational messages
 
83
  */
84
  public function logInfo($value) {
85
  $this->_log($value, Zend_Log::INFO);
@@ -87,6 +94,7 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
87
 
88
  /**
89
  * Debug: debug messages
 
90
  */
91
  public function logDebug($value) {
92
  $this->_log($value, Zend_Log::DEBUG);
@@ -94,6 +102,8 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
94
 
95
  /**
96
  * Private log function.
 
 
97
  */
98
  private function _log($value, $level) {
99
  Mage::log(sprintf("%-10s %-6s - %s", "Global",
@@ -102,31 +112,40 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
102
  ->setDescription($value)->setLogLevel($level)->save();
103
  }
104
 
105
- /** Check if debug is enabled. */
 
 
106
  public function isDebug() {
107
  return Mage::getStoreConfigFlag("contactlab_commons/global/debug");
108
  }
109
 
110
- /** Enable Zend DB Profiler. */
 
 
111
  public function enableDbProfiler() {
112
  if (!$this->isDebug()) {
113
  return;
114
  }
115
- Mage::getSingleton('core/resource')->getConnection('core_write')->getProfiler()->setEnabled(true);
 
 
116
  Varien_Profiler::enable();
117
  }
118
 
119
- /** Flush Zend DB Profiler. */
 
 
120
  public function flushDbProfiler() {
121
  if (!$this->isDebug()) {
122
  return;
123
  }
124
- $profiler = Mage::getSingleton('core/resource')
125
- ->getConnection('core_write')
126
- ->getProfiler();
127
 
128
  $csvArray = array();
129
  foreach ($profiler->getQueryProfiles() as $q) {
 
130
  $csvArray[] = array($q->getElapsedSecs(), $q->getQuery());
131
  }
132
  $logDir = Mage::getBaseDir('var') . DS . 'log';
@@ -137,13 +156,27 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
137
  fclose($fp);
138
  }
139
 
140
- /** Is the action $action allowed? */
 
 
 
 
 
141
  public function isAllowed($section, $action) {
 
 
 
142
  return Mage::getSingleton('admin/session')
143
  ->isAllowed("admin/newsletter/contactlab/$section/actions/$action");
144
  }
145
 
146
- /** Mage same or newer of (for backward compatibility). */
 
 
 
 
 
 
147
  public function isMageSameOrNewerOf($major, $minor, $revision = 0) {
148
  if ($this->_mageMajor < $major) {
149
  return false;
@@ -156,9 +189,13 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
156
  }
157
 
158
  /**
159
- * For backward compatibility
 
 
 
 
160
  */
161
- public function deleteFromSelect($adapter, $select, $table) {
162
  $select = clone $select;
163
  $select->reset(Zend_Db_Select::DISTINCT);
164
  $select->reset(Zend_Db_Select::COLUMNS);
@@ -175,6 +212,9 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
175
  $count = 0;
176
  foreach (Mage::getConfig()->getNode('modules')->children() as $moduleName => $moduleConfig) {
177
  if (preg_match('/^Contactlab_.*/', $moduleName)) {
 
 
 
178
  $item = new Varien_Object();
179
  $item->setName(preg_replace('/^Contactlab_/', '', $moduleName))
180
  ->setVersion((string) $moduleConfig->version)
@@ -193,13 +233,28 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
193
  /**
194
  * Log function call.
195
  * @param String $functionName
196
- * @param String $storeId
197
  */
198
  public function logCronCall($functionName, $storeId = false)
199
  {
200
  $pid = getmypid();
201
  $uid = getmyuid();
202
  $sapi = php_sapi_name();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
203
  if ($storeId !== false) {
204
  $this->logInfo(sprintf(
205
  "Function %s called. pid: %s, uid: %s, sapi: %s, store: %s.",
@@ -210,4 +265,42 @@ class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
210
  $functionName, $pid, $uid, $sapi));
211
  }
212
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
213
  }
1
  <?php
2
 
3
  /**
4
+ * Helper data for logging purpose.
5
  */
6
  class Contactlab_Commons_Helper_Data extends Mage_Core_Helper_Abstract {
7
 
38
 
39
  /**
40
  * Emergency: system is unusable
41
+ * @param string $value
42
  */
43
  public function logEmerg($value) {
44
  $this->_log($value, Zend_Log::EMERG);
46
 
47
  /**
48
  * Alert: action must be taken immediately
49
+ * @param string $value
50
  */
51
  public function logAlert($value) {
52
  $this->_log($value, Zend_Log::ALERT);
54
 
55
  /**
56
  * Critical: critical conditions
57
+ * @param string $value
58
  */
59
  public function logCrit($value) {
60
  $this->_log($value, Zend_Log::CRIT);
62
 
63
  /**
64
  * Error: error conditions
65
+ * @param string $value
66
  */
67
  public function logErr($value) {
68
  $this->_log($value, Zend_Log::ERR);
70
 
71
  /**
72
  * Warning: warning conditions
73
+ * @param string $value
74
  */
75
  public function logWarn($value) {
76
  $this->_log($value, Zend_Log::WARN);
78
 
79
  /**
80
  * Notice: normal but significant condition
81
+ * @param string $value
82
  */
83
  public function logNotice($value) {
84
  $this->_log($value, Zend_Log::NOTICE);
86
 
87
  /**
88
  * Informational: informational messages
89
+ * @param string $value
90
  */
91
  public function logInfo($value) {
92
  $this->_log($value, Zend_Log::INFO);
94
 
95
  /**
96
  * Debug: debug messages
97
+ * @param string $value
98
  */
99
  public function logDebug($value) {
100
  $this->_log($value, Zend_Log::DEBUG);
102
 
103
  /**
104
  * Private log function.
105
+ * @param string $value
106
+ * @param int $level
107
  */
108
  private function _log($value, $level) {
109
  Mage::log(sprintf("%-10s %-6s - %s", "Global",
112
  ->setDescription($value)->setLogLevel($level)->save();
113
  }
114
 
115
+ /**
116
+ * Check if debug is enabled.
117
+ */
118
  public function isDebug() {
119
  return Mage::getStoreConfigFlag("contactlab_commons/global/debug");
120
  }
121
 
122
+ /**
123
+ * Enable Zend DB Profiler.
124
+ */
125
  public function enableDbProfiler() {
126
  if (!$this->isDebug()) {
127
  return;
128
  }
129
+ /** @var $connection Varien_Db_Adapter_Pdo_Mysql */
130
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_write');
131
+ $connection->getProfiler()->setEnabled(true);
132
  Varien_Profiler::enable();
133
  }
134
 
135
+ /**
136
+ * Flush Zend DB Profiler.
137
+ */
138
  public function flushDbProfiler() {
139
  if (!$this->isDebug()) {
140
  return;
141
  }
142
+ /** @var $connection Varien_Db_Adapter_Pdo_Mysql */
143
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_write');
144
+ $profiler = $connection->getProfiler();
145
 
146
  $csvArray = array();
147
  foreach ($profiler->getQueryProfiles() as $q) {
148
+ /** @var $q Zend_Db_Profiler_Query */
149
  $csvArray[] = array($q->getElapsedSecs(), $q->getQuery());
150
  }
151
  $logDir = Mage::getBaseDir('var') . DS . 'log';
156
  fclose($fp);
157
  }
158
 
159
+ /**
160
+ * Is the action $action allowed?
161
+ * @param string $section
162
+ * @param string $action
163
+ * @return bool
164
+ */
165
  public function isAllowed($section, $action) {
166
+ if (php_sapi_name() === 'cli') {
167
+ return false;
168
+ }
169
  return Mage::getSingleton('admin/session')
170
  ->isAllowed("admin/newsletter/contactlab/$section/actions/$action");
171
  }
172
 
173
+ /**
174
+ * Mage same or newer of (for backward compatibility).
175
+ * @param int $major
176
+ * @param int $minor
177
+ * @param int $revision
178
+ * @return bool
179
+ */
180
  public function isMageSameOrNewerOf($major, $minor, $revision = 0) {
181
  if ($this->_mageMajor < $major) {
182
  return false;
189
  }
190
 
191
  /**
192
+ * For backward compatibility.
193
+ * @param Varien_Db_Adapter_Pdo_Mysql $adapter
194
+ * @param Zend_Db_Select $select
195
+ * @param $table
196
+ * @return string
197
  */
198
+ public function deleteFromSelect(Varien_Db_Adapter_Pdo_Mysql $adapter, Zend_Db_Select $select, $table) {
199
  $select = clone $select;
200
  $select->reset(Zend_Db_Select::DISTINCT);
201
  $select->reset(Zend_Db_Select::COLUMNS);
212
  $count = 0;
213
  foreach (Mage::getConfig()->getNode('modules')->children() as $moduleName => $moduleConfig) {
214
  if (preg_match('/^Contactlab_.*/', $moduleName)) {
215
+ if (((string) $moduleConfig->active) === 'false') {
216
+ continue;
217
+ }
218
  $item = new Varien_Object();
219
  $item->setName(preg_replace('/^Contactlab_/', '', $moduleName))
220
  ->setVersion((string) $moduleConfig->version)
233
  /**
234
  * Log function call.
235
  * @param String $functionName
236
+ * @param bool|String $storeId
237
  */
238
  public function logCronCall($functionName, $storeId = false)
239
  {
240
  $pid = getmypid();
241
  $uid = getmyuid();
242
  $sapi = php_sapi_name();
243
+ if (!is_string($functionName)) {
244
+ try {
245
+ $functionName = strval($functionName);
246
+ } catch (\Exception $e) {
247
+ $functionName = is_object($functionName)?get_class($functionName):gettype($functionName);
248
+ }
249
+ }
250
+ if ($storeId !== false && !is_string($storeId)) {
251
+ try {
252
+ $storeId = strval($storeId);
253
+ } catch (\Exception $e) {
254
+ $storeId = is_object($storeId)?get_class($storeId):gettype($storeId);
255
+ }
256
+ }
257
+
258
  if ($storeId !== false) {
259
  $this->logInfo(sprintf(
260
  "Function %s called. pid: %s, uid: %s, sapi: %s, store: %s.",
265
  $functionName, $pid, $uid, $sapi));
266
  }
267
  }
268
+
269
+ /**
270
+ * Add critical message.
271
+ * @param string$value
272
+ */
273
+ public function addCriticalMessage($value) {
274
+ if ($this->_useCoreAddCritical()) {
275
+ Mage::getModel('adminnotification/inbox')->addCritical($value, "Contactlab");
276
+ } else {
277
+ $this->_addCritical($value, "Contactlab");
278
+ }
279
+ }
280
+
281
+ /** For Mage 1.7 or newer. */
282
+ private function _useCoreAddCritical() {
283
+ return Mage::helper("contactlab_commons")->isMageSameOrNewerOf(1, 7);
284
+ }
285
+
286
+ /**
287
+ * Add new message (Back porting)
288
+ *
289
+ * @param string $title
290
+ * @param string $description
291
+ * @return $this
292
+ */
293
+ private function _addCritical($title, $description) {
294
+ $t = Mage::getModel('adminnotification/inbox');
295
+ $date = date('Y-m-d H:i:s');
296
+ $t->parse(array(array(
297
+ 'severity' => Mage::helper('adminnotification')->__('critical'),
298
+ 'date_added' => $date,
299
+ 'title' => $title,
300
+ 'description' => $description,
301
+ 'url' => "",
302
+ 'internal' => true
303
+ )));
304
+ return $this;
305
+ }
306
  }
app/code/community/Contactlab/Commons/Helper/Tasks.php CHANGED
@@ -128,6 +128,8 @@ class Contactlab_Commons_Helper_Tasks extends Mage_Core_Helper_Abstract {
128
 
129
  /** Get events with alert flg. */
130
  private function loadErrorTasks() {
 
 
131
  $tasks = Mage::getModel('contactlab_commons/task')->getCollection();
132
  $tasks->addFieldToSelect('task_code')
133
  ->addFieldToSelect('created_at')
@@ -139,7 +141,7 @@ class Contactlab_Commons_Helper_Tasks extends Mage_Core_Helper_Abstract {
139
  ->addFieldToSelect('retries_interval')
140
  ->addFieldToSelect('status')
141
  ->getSelect()
142
- ->join(array('task_event' => Mage::getSingleton('core/resource')->getTableName('contactlab_commons_task_event_entity')),
143
  'main_table.task_id = task_event.task_id AND task_event.email_sent = 0 AND task_event.send_alert = 1',
144
  array('task_event_id' => 'task_event.task_event_id',
145
  'created_at_' => 'task_event.created_at',
@@ -148,4 +150,12 @@ class Contactlab_Commons_Helper_Tasks extends Mage_Core_Helper_Abstract {
148
 
149
  return $tasks;
150
  }
 
 
 
 
 
 
 
 
151
  }
128
 
129
  /** Get events with alert flg. */
130
  private function loadErrorTasks() {
131
+ $tablePrefix = (string) Mage::getConfig()->getTablePrefix();
132
+
133
  $tasks = Mage::getModel('contactlab_commons/task')->getCollection();
134
  $tasks->addFieldToSelect('task_code')
135
  ->addFieldToSelect('created_at')
141
  ->addFieldToSelect('retries_interval')
142
  ->addFieldToSelect('status')
143
  ->getSelect()
144
+ ->join(array('task_event' => Mage::getSingleton('core/resource')->getTableName($tablePrefix.'contactlab_commons_task_event_entity')),
145
  'main_table.task_id = task_event.task_id AND task_event.email_sent = 0 AND task_event.send_alert = 1',
146
  array('task_event_id' => 'task_event.task_event_id',
147
  'created_at_' => 'task_event.created_at',
150
 
151
  return $tasks;
152
  }
153
+
154
+ /**
155
+ * Add critical message.
156
+ * @param string$value
157
+ */
158
+ public function addCriticalMessage($value) {
159
+ Mage::helper('contactlab_commons')->addCriticalMessage($value);
160
+ }
161
  }
app/code/community/Contactlab/Commons/Model/Deleted.php CHANGED
@@ -1,5 +1,11 @@
1
  <?php
2
 
 
 
 
 
 
 
3
  class Contactlab_Commons_Model_Deleted extends Mage_Core_Model_Abstract {
4
 
5
  public function _construct() {
1
  <?php
2
 
3
+ /**
4
+ * Class Contactlab_Commons_Model_Deleted.
5
+ * @method bool getIsCustomer
6
+ * @method string getEmail
7
+ * @method Contactlab_Commons_Model_Deleted setTaskId($value)
8
+ */
9
  class Contactlab_Commons_Model_Deleted extends Mage_Core_Model_Abstract {
10
 
11
  public function _construct() {
app/code/community/Contactlab/Commons/Model/Exporter/Abstract.php CHANGED
@@ -1,8 +1,17 @@
1
  <?php
2
 
3
- /** Abstract Exporter Model. */
 
 
 
 
 
4
  abstract class Contactlab_Commons_Model_Exporter_Abstract extends Contactlab_Commons_Model_AbstractImportExport {
5
- /** Export the xml file. */
 
 
 
 
6
  public final function export(Contactlab_Commons_Model_Task_Interface $task) {
7
  if (!$this->isEnabled()) {
8
  Mage::helper("contactlab_commons")->logWarn("Module export is disabled");
1
  <?php
2
 
3
+ /**
4
+ * Abstract Exporter Model.
5
+ * @property resource gz
6
+ *
7
+ * @method Contactlab_Commons_Model_Task getTask
8
+ */
9
  abstract class Contactlab_Commons_Model_Exporter_Abstract extends Contactlab_Commons_Model_AbstractImportExport {
10
+ /** Export the xml file.
11
+ * @param Contactlab_Commons_Model_Task_Interface $task
12
+ * @return string
13
+ * @throws Zend_Exception
14
+ */
15
  public final function export(Contactlab_Commons_Model_Task_Interface $task) {
16
  if (!$this->isEnabled()) {
17
  Mage::helper("contactlab_commons")->logWarn("Module export is disabled");
app/code/community/Contactlab/Commons/Model/Log.php CHANGED
@@ -3,6 +3,17 @@
3
  /**
4
  * Log model.
5
  */
 
 
 
 
 
 
 
 
 
 
 
6
  class Contactlab_Commons_Model_Log extends Mage_Core_Model_Abstract {
7
 
8
  /**
3
  /**
4
  * Log model.
5
  */
6
+
7
+ /**
8
+ * @method int getLogId()
9
+ * @method Contactlab_Commons_Model_Log setLogId(int $value)
10
+ * @method string getCreatedAt()
11
+ * @method Contactlab_Commons_Model_Log setCreatedAt(string $value)
12
+ * @method int getLogLevel()
13
+ * @method Contactlab_Commons_Model_Log setLogLevel(int $value)
14
+ * @method string getDescription()
15
+ * @method Contactlab_Commons_Model_Log setDescription(string $value)
16
+ */
17
  class Contactlab_Commons_Model_Log extends Mage_Core_Model_Abstract {
18
 
19
  /**
app/code/community/Contactlab/Commons/Model/Resource/Deleted.php CHANGED
@@ -2,6 +2,6 @@
2
 
3
  class Contactlab_Commons_Model_Resource_Deleted extends Mage_Core_Model_Mysql4_Abstract {
4
  public function _construct() {
5
- $this->_init ('contactlab_commons/deleted', 'deleted_entity_id' );
6
  }
7
  }
2
 
3
  class Contactlab_Commons_Model_Resource_Deleted extends Mage_Core_Model_Mysql4_Abstract {
4
  public function _construct() {
5
+ $this->_init('contactlab_commons/deleted', 'deleted_entity_id');
6
  }
7
  }
app/code/community/Contactlab/Commons/Model/Task.php CHANGED
@@ -2,6 +2,24 @@
2
 
3
  /**
4
  * Task model.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  */
6
  class Contactlab_Commons_Model_Task extends Mage_Core_Model_Abstract {
7
 
@@ -80,7 +98,7 @@ class Contactlab_Commons_Model_Task extends Mage_Core_Model_Abstract {
80
  "style" => "font-weight: bold"
81
  ),
82
  self::STATUS_HIDDEN => array(
83
- "description" => "Hidden",
84
  "color" => "lightgrey",
85
  "style" => "font-weight: normal"
86
  )
@@ -127,12 +145,8 @@ class Contactlab_Commons_Model_Task extends Mage_Core_Model_Abstract {
127
  $event->setSendAlert(1);
128
  if (!$this->getSuppressNotification()) {
129
  // Changed for backward compatibility to 1.6
130
- if ($this->_useCoreAddCritical()) {
131
- Mage::getModel('adminnotification/inbox')
132
- ->addCritical(sprintf("[Task %s]: %s", $this->getTaskId(), $description), "Contactlab");
133
- } else {
134
- $this->_addCritical(sprintf("[Task %s]: %s", $this->getTaskId(), $description), "Contactlab");
135
- }
136
  } else {
137
  $this->setSuppressNotification(false);
138
  }
@@ -161,6 +175,7 @@ class Contactlab_Commons_Model_Task extends Mage_Core_Model_Abstract {
161
  *
162
  * @param string $title
163
  * @param string $description
 
164
  */
165
  private function _addCritical($title, $description) {
166
  $t = Mage::getModel('adminnotification/inbox');
@@ -177,7 +192,11 @@ class Contactlab_Commons_Model_Task extends Mage_Core_Model_Abstract {
177
  }
178
 
179
 
180
- /** On set model name, reset interval and retries. */
 
 
 
 
181
  public function setModelName($model) {
182
  $rv = parent::setModelName($model);
183
  $this->_resetIntervalAndMaxRetries();
@@ -254,7 +273,7 @@ class Contactlab_Commons_Model_Task extends Mage_Core_Model_Abstract {
254
  * View task events url.
255
  */
256
  public function getEventsUrl() {
257
- return Mage::helper('adminhtml')->getUrl('contactlab_commons/adminhtml_events/', array(
258
  'id' => $this->getTaskId()
259
  ));
260
  }
@@ -549,7 +568,12 @@ class Contactlab_Commons_Model_Task extends Mage_Core_Model_Abstract {
549
  return $rv;
550
  }
551
 
552
- /** Set max value. */
 
 
 
 
 
553
  public function setMaxValue($value) {
554
  $rv = parent::setMaxValue($value);
555
  parent::setProgressValue(0);
@@ -562,12 +586,20 @@ class Contactlab_Commons_Model_Task extends Mage_Core_Model_Abstract {
562
  return $this->getConfigFlag("contactlab_commons/global/enabled");
563
  }
564
 
565
- /** Get config for store id. */
 
 
 
 
566
  public function getConfig($path) {
567
  return Mage::getStoreConfig($path, $this->getStoreId());
568
  }
569
 
570
- /** Get config for store id. */
 
 
 
 
571
  public function getConfigFlag($path) {
572
  return Mage::getStoreConfigFlag($path, $this->getStoreId());
573
  }
2
 
3
  /**
4
  * Task model.
5
+ *
6
+ * @method int getTaskId()
7
+ * @method int getStoreId()
8
+ * @method Contactlab_Commons_Model_Task setStoreId($value)
9
+ * @method Contactlab_Commons_Model_Task setTaskCode($value)
10
+ * @method int getMaxRetries()
11
+ * @method int getNumberOfRetries()
12
+ * @method getTaskData()
13
+ * @method setAutoDelete(bool $value)
14
+ * @method setSuppressNotification(bool $value)
15
+ *
16
+ * @method Contactlab_Commons_Model_Task setTaskData($value)
17
+ *
18
+ * @method Contactlab_Commons_Model_Task setDescription($value)
19
+ * @method Contactlab_Commons_Model_Task setPlannedAt($value)
20
+ *
21
+ * @method bool getPreventDelete()
22
+ * @method string getStatus()
23
  */
24
  class Contactlab_Commons_Model_Task extends Mage_Core_Model_Abstract {
25
 
98
  "style" => "font-weight: bold"
99
  ),
100
  self::STATUS_HIDDEN => array(
101
+ "description" => "Closed / Hidden",
102
  "color" => "lightgrey",
103
  "style" => "font-weight: normal"
104
  )
145
  $event->setSendAlert(1);
146
  if (!$this->getSuppressNotification()) {
147
  // Changed for backward compatibility to 1.6
148
+ Mage::helper('contactlab_commons/tasks')
149
+ ->addCriticalMessage(sprintf("[Task %s]: %s", $this->getTaskId(), $description));
 
 
 
 
150
  } else {
151
  $this->setSuppressNotification(false);
152
  }
175
  *
176
  * @param string $title
177
  * @param string $description
178
+ * @return $this
179
  */
180
  private function _addCritical($title, $description) {
181
  $t = Mage::getModel('adminnotification/inbox');
192
  }
193
 
194
 
195
+ /**
196
+ * On set model name, reset interval and retries.
197
+ * @param $model
198
+ * @return Contactlab_Commons_Model_Task
199
+ */
200
  public function setModelName($model) {
201
  $rv = parent::setModelName($model);
202
  $this->_resetIntervalAndMaxRetries();
273
  * View task events url.
274
  */
275
  public function getEventsUrl() {
276
+ return Mage::helper('adminhtml')->getUrl('adminhtml/contactlab_commons_events/', array(
277
  'id' => $this->getTaskId()
278
  ));
279
  }
568
  return $rv;
569
  }
570
 
571
+ /**
572
+ * Set max value.
573
+ * @param string $value
574
+ * @return Contactlab_Commons_Model_Task
575
+ * @throws Exception
576
+ */
577
  public function setMaxValue($value) {
578
  $rv = parent::setMaxValue($value);
579
  parent::setProgressValue(0);
586
  return $this->getConfigFlag("contactlab_commons/global/enabled");
587
  }
588
 
589
+ /**
590
+ * Get config for store id.
591
+ * @param string $path
592
+ * @return mixed
593
+ */
594
  public function getConfig($path) {
595
  return Mage::getStoreConfig($path, $this->getStoreId());
596
  }
597
 
598
+ /**
599
+ * Get config for store id.
600
+ * @param string $path
601
+ * @return bool
602
+ */
603
  public function getConfigFlag($path) {
604
  return Mage::getStoreConfigFlag($path, $this->getStoreId());
605
  }
app/code/community/Contactlab/Commons/Test/Helper/Data.php ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Commons_Test_Helper_Data extends EcomDev_PHPUnit_Test_Case
4
+ {
5
+ /**
6
+ * @var Contactlab_Commons_Helper_Data
7
+ */
8
+ private $helper;
9
+
10
+ protected function setUp()
11
+ {
12
+ $this->helper = Mage::helper("contactlab_commons");
13
+ }
14
+
15
+ /**
16
+ * @test
17
+ */
18
+ public function isDebug() {
19
+ $isDebug = $this->helper->isDebug();
20
+
21
+ $this->assertFalse($isDebug, "Debug mode should be disabled by default");
22
+ }
23
+
24
+ /**
25
+ * @test
26
+ */
27
+ public function getPlatformVersion() {
28
+ $version = $this->helper->getPlatformVersion();
29
+ $this->assertRegExp('|\d+\.\d+(\.\d+)?|', $version, "Platform version should be x.x(.x)?");
30
+ }
31
+
32
+ /**
33
+ * @test
34
+ */
35
+ public function logEmerg() {
36
+ $this->checkLog("Emerg");
37
+ }
38
+
39
+ /**
40
+ * @test
41
+ */
42
+ public function logAlert() {
43
+ $this->checkLog("Alert");
44
+ }
45
+
46
+ /**
47
+ * @test
48
+ */
49
+ public function logCrit() {
50
+ $this->checkLog("Crit");
51
+ }
52
+
53
+ /**
54
+ * @test
55
+ */
56
+ public function logErr() {
57
+ $this->checkLog("Err");
58
+ }
59
+
60
+ /**
61
+ * @test
62
+ */
63
+ public function logWarn() {
64
+ $this->checkLog("Warn");
65
+ }
66
+
67
+ /**
68
+ * @test
69
+ */
70
+ public function logNotice() {
71
+ $this->checkLog("Notice");
72
+ }
73
+
74
+ /**
75
+ * @test
76
+ */
77
+ public function logDebug() {
78
+ $this->checkLog("Debug");
79
+ }
80
+
81
+ /**
82
+ * @test
83
+ */
84
+ public function enableDbProfiler()
85
+ {
86
+ $this->helper->enableDbProfiler();
87
+ /** @var $connection Varien_Db_Adapter_Pdo_Mysql */
88
+ $connection = Mage::getSingleton('core/resource')->getConnection('core_write');
89
+ $profiler = $connection->getProfiler();
90
+ $profiler->setEnabled(true);
91
+ $this->assertTrue($profiler->getEnabled());
92
+ $tasks = Mage::getModel('contactlab_commons/task')->getCollection();
93
+ $tasks->count();
94
+ $found = false;
95
+
96
+ $tablePrefix = (string) Mage::getConfig()->getTablePrefix();
97
+ foreach ($profiler->getQueryProfiles() as $q) {
98
+ /** @var $q Zend_Db_Profiler_Query */
99
+ if (strpos($q->getQuery(), $tablePrefix.'contactlab_commons_task_entity')) {
100
+ $found = true;
101
+ }
102
+ }
103
+ $this->assertTrue($found, "Query not profiled");
104
+ }
105
+
106
+ /**
107
+ * @test
108
+ * @depends enableDbProfiler
109
+ */
110
+ public function flushDbProfiler() {
111
+ }
112
+
113
+ /**
114
+ * @test
115
+ */
116
+ public function isAllowed() {
117
+ $this->assertFalse($this->helper->isAllowed('commons', 'tasks'));
118
+ }
119
+
120
+ /**
121
+ * @test
122
+ */
123
+ public function isMageSameOrNewerOf() {
124
+ $this->assertTrue($this->helper->isMageSameOrNewerOf(1, 7));
125
+ $this->assertFalse($this->helper->isMageSameOrNewerOf(1, 11));
126
+ }
127
+
128
+ /**
129
+ * @test
130
+ */
131
+ public function deleteFromSelect() {
132
+ }
133
+
134
+ /**
135
+ * @test
136
+ */
137
+ public function getModulesVersion() {
138
+ }
139
+
140
+ /**
141
+ * @test
142
+ */
143
+ public function logCronCall()
144
+ {
145
+ }
146
+
147
+ /**
148
+ * @test
149
+ */
150
+ public function logInfo() {
151
+ }
152
+
153
+ /**
154
+ * @param $level
155
+ */
156
+ private function checkLog($level)
157
+ {
158
+ $random = $this->generateRandomString(64);
159
+ $f = "log${level}";;
160
+ $this->helper->$f($random);
161
+ $logFile = Mage::getBaseDir('log') . DS . 'contactlab.log';
162
+ $this->assertTrue($this->findLogEntry($logFile, $random, $level), "Could not log with level $level");
163
+ }
164
+
165
+ private function generateRandomString($length)
166
+ {
167
+ $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
168
+ $charactersLength = strlen($characters);
169
+ $randomString = '';
170
+ for ($i = 0; $i < $length; $i++) {
171
+ $randomString .= $characters[rand(0, $charactersLength - 1)];
172
+ }
173
+ return $randomString;
174
+ }
175
+
176
+ private function findLogEntry($logFile, $random, $level)
177
+ {
178
+ $log = exec("grep $random $logFile");
179
+ return strpos($log, $level) !== false;
180
+ }
181
+ }
app/code/community/Contactlab/Commons/Test/resources/composer.json ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "contactlab/magento",
3
+ "description": "Magento build for ContactlabTest",
4
+ "require-dev": {
5
+ "phpunit/phpunit": "~4.4"
6
+ },
7
+ "require": {
8
+ "aydin-hassan/magento-core-composer-installer" : "~1.0",
9
+ "magento/magento" : "1.9.1.0"
10
+ },
11
+ "authors": [
12
+ {
13
+ "name": "Andrea Gaspardo",
14
+ "email": "andrea.gaspardo@webformat.com"
15
+ }
16
+ ],
17
+ "repositories": [
18
+ {
19
+ "type": "vcs",
20
+ "url": "git@github.com:AydinHassan/magento-community.git"
21
+ }
22
+ ],
23
+ "extra": {
24
+ "magento-root-dir": "."
25
+ }
26
+ }
app/code/community/Contactlab/Commons/Test/resources/contactlab_db.sql.gz ADDED
Binary file
app/code/community/Contactlab/Commons/Test/resources/local.xml ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <!--
3
+ /**
4
+ * Magento
5
+ *
6
+ * NOTICE OF LICENSE
7
+ *
8
+ * This source file is subject to the Academic Free License (AFL 3.0)
9
+ * that is bundled with this package in the file LICENSE_AFL.txt.
10
+ * It is also available through the world-wide-web at this URL:
11
+ * http://opensource.org/licenses/afl-3.0.php
12
+ * If you did not receive a copy of the license and are unable to
13
+ * obtain it through the world-wide-web, please send an email
14
+ * to license@magentocommerce.com so we can send you a copy immediately.
15
+ *
16
+ * DISCLAIMER
17
+ *
18
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
19
+ * versions in the future. If you wish to customize Magento for your
20
+ * needs please refer to http://www.magentocommerce.com for more information.
21
+ *
22
+ * @category Mage
23
+ * @package Mage_Core
24
+ * @copyright Copyright (c) 2008 Irubin Consulting Inc. DBA Varien (http://www.varien.com)
25
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
26
+ */
27
+ -->
28
+ <config>
29
+ <global>
30
+ <install>
31
+ <date>Wed, 28 Aug 2013 09:51:02 +0000</date>
32
+ </install>
33
+ <crypt>
34
+ <key>17f5448de5bba6da56bd013c43d73df6</key>
35
+ </crypt>
36
+ <disable_local_modules>false</disable_local_modules>
37
+ <resources>
38
+ <db>
39
+ <table_prefix></table_prefix>
40
+ </db>
41
+ <default_setup>
42
+ <connection>
43
+ <host>localhost</host>
44
+ <username>travis</username>
45
+ <password></password>
46
+ <dbname>contactlab_db</dbname>
47
+ <initStatements>SET NAMES utf8</initStatements>
48
+ <model>mysql4</model>
49
+ <type>pdo_mysql</type>
50
+ <pdoType></pdoType>
51
+ <active>1</active>
52
+ </connection>
53
+ </default_setup>
54
+ </resources>
55
+ <session_save>files</session_save>
56
+ </global>
57
+ <admin>
58
+ <routers>
59
+ <adminhtml>
60
+ <args>
61
+ <frontName>admin</frontName>
62
+ </args>
63
+ </adminhtml>
64
+ </routers>
65
+ </admin>
66
+ </config>
app/code/community/Contactlab/Commons/controllers/Adminhtml/ConfigurationCheckController.php DELETED
@@ -1,16 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Test controller.
5
- */
6
- class Contactlab_Commons_Adminhtml_ConfigurationCheckController extends Mage_Adminhtml_Controller_Action {
7
-
8
- /**
9
- * Index of release notes.
10
- */
11
- public function indexAction() {
12
- $this->_title($this->__('Cron configuration check'));
13
- $this->loadLayout()->_setActiveMenu('newsletter/contactlab');
14
- return $this->renderLayout();
15
- }
16
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Contactlab/Commons/controllers/Adminhtml/Contactlab/Commons/ConfigurationCheckController.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Test controller.
5
+ */
6
+ class Contactlab_Commons_Adminhtml_Contactlab_Commons_ConfigurationCheckController extends Mage_Adminhtml_Controller_Action {
7
+
8
+ /**
9
+ * Index of release notes.
10
+ */
11
+ public function indexAction() {
12
+ $this->_title($this->__('Configuration Check'));
13
+ $this->loadLayout()->_setActiveMenu('newsletter/contactlab');
14
+ return $this->renderLayout();
15
+ }
16
+
17
+ /**
18
+ * Is this controller allowed?
19
+ * @return bool
20
+ */
21
+ protected function _isAllowed()
22
+ {
23
+ return Mage::getSingleton('admin/session')->isAllowed('newsletter/contactlab/configuration_check');
24
+ }
25
+ }
app/code/community/Contactlab/Commons/controllers/Adminhtml/{EventsController.php → Contactlab/Commons/EventsController.php} RENAMED
@@ -3,7 +3,7 @@
3
  /**
4
  * Events controller.
5
  */
6
- class Contactlab_Commons_Adminhtml_EventsController extends Mage_Adminhtml_Controller_Action {
7
 
8
  /**
9
  * Index.
@@ -21,4 +21,12 @@ class Contactlab_Commons_Adminhtml_EventsController extends Mage_Adminhtml_Contr
21
  return $this->loadLayout(false)->renderLayout();
22
  }
23
 
 
 
 
 
 
 
 
 
24
  }
3
  /**
4
  * Events controller.
5
  */
6
+ class Contactlab_Commons_Adminhtml_Contactlab_Commons_EventsController extends Mage_Adminhtml_Controller_Action {
7
 
8
  /**
9
  * Index.
21
  return $this->loadLayout(false)->renderLayout();
22
  }
23
 
24
+ /**
25
+ * Is this controller allowed?
26
+ * @return bool
27
+ */
28
+ protected function _isAllowed()
29
+ {
30
+ return Mage::getSingleton('admin/session')->isAllowed('newsletter/contactlab/tasks');
31
+ }
32
  }
app/code/community/Contactlab/Commons/controllers/Adminhtml/{LogsController.php → Contactlab/Commons/LogsController.php} RENAMED
@@ -3,7 +3,7 @@
3
  /**
4
  * Logs controller.
5
  */
6
- class Contactlab_Commons_Adminhtml_LogsController extends Mage_Adminhtml_Controller_Action {
7
 
8
  /**
9
  * Index.
@@ -29,4 +29,12 @@ class Contactlab_Commons_Adminhtml_LogsController extends Mage_Adminhtml_Control
29
  $this->_redirect('*/*');
30
  }
31
 
 
 
 
 
 
 
 
 
32
  }
3
  /**
4
  * Logs controller.
5
  */
6
+ class Contactlab_Commons_Adminhtml_Contactlab_Commons_LogsController extends Mage_Adminhtml_Controller_Action {
7
 
8
  /**
9
  * Index.
29
  $this->_redirect('*/*');
30
  }
31
 
32
+ /**
33
+ * Is this controller allowed?
34
+ * @return bool
35
+ */
36
+ protected function _isAllowed()
37
+ {
38
+ return Mage::getSingleton('admin/session')->isAllowed('newsletter/contactlab/logs');
39
+ }
40
  }
app/code/community/Contactlab/Commons/controllers/Adminhtml/Contactlab/Commons/ReleaseNotesController.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Test controller.
5
+ */
6
+ class Contactlab_Commons_Adminhtml_Contactlab_Commons_ReleaseNotesController extends Mage_Adminhtml_Controller_Action {
7
+
8
+ /**
9
+ * Index of release notes.
10
+ */
11
+ public function indexAction() {
12
+ $this->_title($this->__('ContactLab release notes'));
13
+ $this->loadLayout()->_setActiveMenu('newsletter/contactlab');
14
+ return $this->renderLayout();
15
+ }
16
+
17
+ /**
18
+ * Is this controller allowed?
19
+ * @return bool
20
+ */
21
+ protected function _isAllowed()
22
+ {
23
+ return Mage::getSingleton('admin/session')->isAllowed('newsletter/contactlab/release_notes');
24
+ }
25
+ }
app/code/community/Contactlab/Commons/controllers/Adminhtml/{TasksController.php → Contactlab/Commons/TasksController.php} RENAMED
@@ -3,7 +3,7 @@
3
  /**
4
  * Tasks controller.
5
  */
6
- class Contactlab_Commons_Adminhtml_TasksController extends Mage_Adminhtml_Controller_Action {
7
 
8
  /**
9
  * Index.
@@ -205,9 +205,7 @@ class Contactlab_Commons_Adminhtml_TasksController extends Mage_Adminhtml_Contro
205
  }
206
 
207
  /**
208
- * @comment: Set task status mass action
209
- * @params:
210
- * @return: void
211
  */
212
  public function setStatusAction() {
213
  $session = Mage::getSingleton('adminhtml/session');
@@ -272,7 +270,7 @@ class Contactlab_Commons_Adminhtml_TasksController extends Mage_Adminhtml_Contro
272
  }
273
 
274
  /**
275
- * @comment: Mass delete
276
  */
277
  public function massDeleteAction() {
278
  $session = Mage::getSingleton('adminhtml/session');
@@ -294,4 +292,12 @@ class Contactlab_Commons_Adminhtml_TasksController extends Mage_Adminhtml_Contro
294
  $this->_redirect('*/*');
295
  }
296
 
 
 
 
 
 
 
 
 
297
  }
3
  /**
4
  * Tasks controller.
5
  */
6
+ class Contactlab_Commons_Adminhtml_Contactlab_Commons_TasksController extends Mage_Adminhtml_Controller_Action {
7
 
8
  /**
9
  * Index.
205
  }
206
 
207
  /**
208
+ * Set task status mass action
 
 
209
  */
210
  public function setStatusAction() {
211
  $session = Mage::getSingleton('adminhtml/session');
270
  }
271
 
272
  /**
273
+ * Mass delete.
274
  */
275
  public function massDeleteAction() {
276
  $session = Mage::getSingleton('adminhtml/session');
292
  $this->_redirect('*/*');
293
  }
294
 
295
+ /**
296
+ * Is this controller allowed?
297
+ * @return bool
298
+ */
299
+ protected function _isAllowed()
300
+ {
301
+ return Mage::getSingleton('admin/session')->isAllowed('newsletter/contactlab/tasks');
302
+ }
303
  }
app/code/community/Contactlab/Commons/controllers/Adminhtml/{TestController.php → Contactlab/Commons/TestController.php} RENAMED
@@ -3,7 +3,7 @@
3
  /**
4
  * Test controller.
5
  */
6
- class Contactlab_Commons_Adminhtml_TestController extends Mage_Adminhtml_Controller_Action {
7
 
8
  /**
9
  * Index.
@@ -19,7 +19,7 @@ class Contactlab_Commons_Adminhtml_TestController extends Mage_Adminhtml_Control
19
  */
20
  public function queueAction() {
21
  Mage::getModel("contactlab_commons/cron")->addTestQueue();
22
- return $this->_redirect('*/adminhtml_tasks');
23
  }
24
 
25
  }
3
  /**
4
  * Test controller.
5
  */
6
+ class Contactlab_Commons_Adminhtml_Contactlab_Commons_TestController extends Mage_Adminhtml_Controller_Action {
7
 
8
  /**
9
  * Index.
19
  */
20
  public function queueAction() {
21
  Mage::getModel("contactlab_commons/cron")->addTestQueue();
22
+ return $this->_redirect('*/contactlab_commons_tasks');
23
  }
24
 
25
  }
app/code/community/Contactlab/Commons/controllers/Adminhtml/ReleaseNotesController.php DELETED
@@ -1,16 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Test controller.
5
- */
6
- class Contactlab_Commons_Adminhtml_ReleaseNotesController extends Mage_Adminhtml_Controller_Action {
7
-
8
- /**
9
- * Index of release notes.
10
- */
11
- public function indexAction() {
12
- $this->_title($this->__('ContactLab release notes'));
13
- $this->loadLayout()->_setActiveMenu('newsletter/contactlab');
14
- return $this->renderLayout();
15
- }
16
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Contactlab/Commons/docs/ContactlabMagento.docx DELETED
Binary file
app/code/community/Contactlab/Commons/docs/Quick Install Guide.docx DELETED
Binary file
app/code/community/Contactlab/Commons/docs/example-config/contactlab.xml CHANGED
@@ -50,7 +50,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
50
  <soap_call_set_subscribed></soap_call_set_subscribed><!-- 0/1 default 0 -->
51
  </global>
52
  <subscriber_to_customer>
53
- <email_on_unsubscribe></email_on_unsubscribe><!-- 0/1, default 0. Unsubscribe the customer during Newsletter subscriber to customer operation if the check of subscription is left unchecked. -->
54
  <unsubscribe_if_not_confirm></unsubscribe_if_not_confirm><!-- 0/1, default 0 -->
55
  </subscriber_to_customer>
56
  </contactlab_subscribers>
50
  <soap_call_set_subscribed></soap_call_set_subscribed><!-- 0/1 default 0 -->
51
  </global>
52
  <subscriber_to_customer>
53
+ <email_on_unsubscribe></email_on_unsubscribe><!-- 0/1, default 0. Unsubscribe the customer from the Newsletter if they do not select the subscription checkbox. -->
54
  <unsubscribe_if_not_confirm></unsubscribe_if_not_confirm><!-- 0/1, default 0 -->
55
  </subscriber_to_customer>
56
  </contactlab_subscribers>
app/code/community/Contactlab/Commons/docs/release-notes/0.8.13.html CHANGED
@@ -1,4 +1,4 @@
1
  <ul>
2
- <li><del>Beetwen</del> <strong>label</strong> fixed to <q>Between</q></li>
3
- <li><del>Attemps</del> <strong>label</strong> fixed to <q>Attempts</q></li>
4
  </ul>
1
  <ul>
2
+ <li><del>Between</del> <strong>label</strong> fixed to <q>Between</q></li>
3
+ <li><del>Attempts</del> <strong>label</strong> fixed to <q>Attempts</q></li>
4
  </ul>
app/code/community/Contactlab/Commons/docs/release-notes/0.8.16.html CHANGED
@@ -2,4 +2,6 @@
2
  <li>Modified xml template docs.</li>
3
  <li>Trimmed mail recipients of error notification mail.</li>
4
  <li><strong>Feature</strong>: Configuration Check Page</li>
 
 
5
  </ul>
2
  <li>Modified xml template docs.</li>
3
  <li>Trimmed mail recipients of error notification mail.</li>
4
  <li><strong>Feature</strong>: Configuration Check Page</li>
5
+ <li><strong>FIXED</strong>: Wrong <q>Sep<del>e</del><em>a</em>rare</q> translation</li>
6
+ <li><strong>FIXED</strong>: Wrong <code>contactlab_subscribers_model_task_updatesubscriberstatusrunner_retries</code> tag in system.xml</li>
7
  </ul>
app/code/community/Contactlab/Commons/docs/release-notes/0.8.17.html ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <ul>
2
+ <li>Removed default values from <code>config.xml</code>.</li>
3
+ </ul>
app/code/community/Contactlab/Commons/docs/release-notes/0.9.0.html ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <ul>
2
+ <li>Modified adminhtml controllers due to SUPEE-6788 Magento patch.</li>
3
+ <li><strong>Feature</strong> new checks available into the <q>Configuration checks</q> page.</li>
4
+ </ul>
app/code/community/Contactlab/Commons/docs/release-notes/1.0.0.html ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <ul>
2
+ <li><strong>Improvement</strong> custom table prefix is now fully supported.</li>
3
+ </ul>
app/code/community/Contactlab/Commons/etc/adminhtml.xml CHANGED
@@ -10,22 +10,22 @@
10
  <tasks translate="title" module="contactlab_commons">
11
  <title>Tasks</title>
12
  <sort_order>10</sort_order>
13
- <action>contactlab_commons/adminhtml_tasks</action>
14
  </tasks>
15
  <logs translate="title" module="contactlab_commons">
16
  <title>Logs</title>
17
  <sort_order>30</sort_order>
18
- <action>contactlab_commons/adminhtml_logs</action>
19
  </logs>
20
  <release_notes translate="title" module="contactlab_commons">
21
  <title>Release notes</title>
22
  <sort_order>1030</sort_order>
23
- <action>contactlab_commons/adminhtml_releaseNotes</action>
24
  </release_notes>
25
  <configuration_check translate="title" module="contactlab_commons">
26
- <title>Cron configuration check</title>
27
  <sort_order>1040</sort_order>
28
- <action>contactlab_commons/adminhtml_configurationCheck</action>
29
  </configuration_check>
30
  </children>
31
  </contactlab>
@@ -35,74 +35,74 @@
35
  <acl>
36
  <resources>
37
  <admin>
38
- <children>
39
- <newsletter>
40
- <children>
41
- <contactlab translate="title" module="contactlab_commons">
42
- <title>Contactlab</title>
43
- <sort_order>1000</sort_order>
44
- <children>
45
- <tasks translate="title">
46
- <title>Tasks</title>
47
- <sort_order>10</sort_order>
48
- <children>
49
- <actions>
50
- <title>Actions</title>
51
- <children>
52
- <suspend translate="title" module="contactlab_commons">
53
- <title>Suspend tasks</title>
54
- <sort_order>10</sort_order>
55
- </suspend>
56
- <unsuspend translate="title" module="contactlab_commons">
57
- <title>Unsuspend tasks</title>
58
- <sort_order>20</sort_order>
59
- </unsuspend>
60
- <retry translate="title" module="contactlab_commons">
61
- <title>Retry tasks</title>
62
- <sort_order>30</sort_order>
63
- </retry>
64
- <run translate="title" module="contactlab_commons">
65
- <title>Run tasks</title>
66
- <sort_order>40</sort_order>
67
- </run>
68
- <cancel translate="title" module="contactlab_commons">
69
- <title>Cancel tasks</title>
70
- <sort_order>50</sort_order>
71
- </cancel>
72
- <delete translate="title" module="contactlab_commons">
73
- <title>Delete tasks</title>
74
- <sort_order>50</sort_order>
75
- </delete>
76
- <clear translate="title" module="contactlab_commons">
77
- <title>Clear queue</title>
78
- <sort_order>60</sort_order>
79
- </clear>
80
- </children>
81
- </actions>
82
- </children>
83
- </tasks>
84
- <logs translate="title">
85
- <title>Logs</title>
86
- <sort_order>30</sort_order>
87
- </logs>
88
- <release_notes>
89
- <title>Release notes</title>
90
- <sort_order>1030</sort_order>
91
- </release_notes>
92
- <configuration_check>
93
- <title>Cron configuration check</title>
94
- <sort_order>1040</sort_order>
95
- </configuration_check>
96
- </children>
97
- </contactlab>
98
- </children>
99
- </newsletter>
100
  <system>
101
  <children>
102
  <config>
103
  <children>
104
  <contactlab_commons translate="title" module="contactlab_commons">
105
- <title>Contactlab</title>
106
  <sort_order>10</sort_order>
107
  </contactlab_commons>
108
  </children>
10
  <tasks translate="title" module="contactlab_commons">
11
  <title>Tasks</title>
12
  <sort_order>10</sort_order>
13
+ <action>adminhtml/contactlab_commons_tasks</action>
14
  </tasks>
15
  <logs translate="title" module="contactlab_commons">
16
  <title>Logs</title>
17
  <sort_order>30</sort_order>
18
+ <action>adminhtml/contactlab_commons_logs</action>
19
  </logs>
20
  <release_notes translate="title" module="contactlab_commons">
21
  <title>Release notes</title>
22
  <sort_order>1030</sort_order>
23
+ <action>adminhtml/contactlab_commons_releaseNotes</action>
24
  </release_notes>
25
  <configuration_check translate="title" module="contactlab_commons">
26
+ <title>Configuration Check</title>
27
  <sort_order>1040</sort_order>
28
+ <action>adminhtml/contactlab_commons_configurationCheck</action>
29
  </configuration_check>
30
  </children>
31
  </contactlab>
35
  <acl>
36
  <resources>
37
  <admin>
38
+ <children>
39
+ <newsletter>
40
+ <children>
41
+ <contactlab translate="title" module="contactlab_commons">
42
+ <title>ContactLab</title>
43
+ <sort_order>1000</sort_order>
44
+ <children>
45
+ <tasks translate="title">
46
+ <title>Tasks</title>
47
+ <sort_order>10</sort_order>
48
+ <children>
49
+ <actions>
50
+ <title>Actions</title>
51
+ <children>
52
+ <suspend translate="title" module="contactlab_commons">
53
+ <title>Suspend tasks</title>
54
+ <sort_order>10</sort_order>
55
+ </suspend>
56
+ <unsuspend translate="title" module="contactlab_commons">
57
+ <title>Unsuspend tasks</title>
58
+ <sort_order>20</sort_order>
59
+ </unsuspend>
60
+ <retry translate="title" module="contactlab_commons">
61
+ <title>Retry tasks</title>
62
+ <sort_order>30</sort_order>
63
+ </retry>
64
+ <run translate="title" module="contactlab_commons">
65
+ <title>Run tasks</title>
66
+ <sort_order>40</sort_order>
67
+ </run>
68
+ <cancel translate="title" module="contactlab_commons">
69
+ <title>Cancel tasks</title>
70
+ <sort_order>50</sort_order>
71
+ </cancel>
72
+ <delete translate="title" module="contactlab_commons">
73
+ <title>Delete tasks</title>
74
+ <sort_order>50</sort_order>
75
+ </delete>
76
+ <clear translate="title" module="contactlab_commons">
77
+ <title>Clear queue</title>
78
+ <sort_order>60</sort_order>
79
+ </clear>
80
+ </children>
81
+ </actions>
82
+ </children>
83
+ </tasks>
84
+ <logs translate="title">
85
+ <title>Logs</title>
86
+ <sort_order>30</sort_order>
87
+ </logs>
88
+ <release_notes>
89
+ <title>Release notes</title>
90
+ <sort_order>1030</sort_order>
91
+ </release_notes>
92
+ <configuration_check>
93
+ <title>Configuration Check</title>
94
+ <sort_order>1040</sort_order>
95
+ </configuration_check>
96
+ </children>
97
+ </contactlab>
98
+ </children>
99
+ </newsletter>
100
  <system>
101
  <children>
102
  <config>
103
  <children>
104
  <contactlab_commons translate="title" module="contactlab_commons">
105
+ <title>ContactLab</title>
106
  <sort_order>10</sort_order>
107
  </contactlab_commons>
108
  </children>
app/code/community/Contactlab/Commons/etc/config.xml CHANGED
@@ -2,8 +2,8 @@
2
  <config>
3
  <modules>
4
  <Contactlab_Commons>
5
- <version>0.8.16</version>
6
- <description>Magento/ContactLab Common functions</description>
7
  </Contactlab_Commons>
8
  </modules>
9
  <global>
@@ -79,6 +79,13 @@
79
  <frontName>contactlab_commons</frontName>
80
  </args>
81
  </contactlab_commons>
 
 
 
 
 
 
 
82
  </routers>
83
  </admin>
84
  <adminhtml>
@@ -135,24 +142,28 @@
135
  <default>
136
  <contactlab_commons>
137
  <global>
138
- <days_of_old_tasks>3</days_of_old_tasks>
139
- <debug>0</debug>
140
- <platform_version>2.2.3</platform_version>
141
  </global>
142
  <connection>
143
- <type>1</type>
144
  <import_local_path>/tmp</import_local_path>
145
  <export_local_path>/tmp</export_local_path>
146
  <remote_server>sftp-clab.housing.tomato.it</remote_server>
147
  <import_remote_path>incoming/exporter</import_remote_path>
148
- <export_remote_path>incoming/updater</export_remote_path>
149
- <!-- TODO Remove in prod -->
150
- <sftp_username>magento-test</sftp_username>
151
- <sftp_password></sftp_password>
152
  </connection>
153
  <soap>
154
- <wsdl_url><![CDATA[https://soap.contactlab.it/soap/services?wsdl]]></wsdl_url>
155
  </soap>
156
  </contactlab_commons>
157
  </default>
 
 
 
 
 
 
 
158
  </config>
2
  <config>
3
  <modules>
4
  <Contactlab_Commons>
5
+ <version>1.0.1</version>
6
+ <description>Magento/ContactLab Common functions.</description>
7
  </Contactlab_Commons>
8
  </modules>
9
  <global>
79
  <frontName>contactlab_commons</frontName>
80
  </args>
81
  </contactlab_commons>
82
+ <adminhtml>
83
+ <args>
84
+ <modules>
85
+ <contactlab_commons before="Mage_Adminhtml">Contactlab_Commons_Adminhtml</contactlab_commons>
86
+ </modules>
87
+ </args>
88
+ </adminhtml>
89
  </routers>
90
  </admin>
91
  <adminhtml>
142
  <default>
143
  <contactlab_commons>
144
  <global>
145
+ <!--days_of_old_tasks>3</days_of_old_tasks>
146
+ <debug>0</debug-->
147
+ <platform_version>2.4.1</platform_version>
148
  </global>
149
  <connection>
150
+ <!--type>1</type>
151
  <import_local_path>/tmp</import_local_path>
152
  <export_local_path>/tmp</export_local_path>
153
  <remote_server>sftp-clab.housing.tomato.it</remote_server>
154
  <import_remote_path>incoming/exporter</import_remote_path>
155
+ <export_remote_path>incoming/updater</export_remote_path-->
 
 
 
156
  </connection>
157
  <soap>
158
+ <!--wsdl_url><![CDATA[https://soap.contactlab.it/soap/services?wsdl]]></wsdl_url-->
159
  </soap>
160
  </contactlab_commons>
161
  </default>
162
+ <phpunit>
163
+ <suite>
164
+ <modules>
165
+ <Contactlab_Commons/>
166
+ </modules>
167
+ </suite>
168
+ </phpunit>
169
  </config>
app/code/community/Contactlab/Commons/etc/system.xml CHANGED
@@ -24,17 +24,17 @@
24
  <show_in_website>0</show_in_website>
25
  <show_in_store>0</show_in_store>
26
  <!--comment><![CDATA[<h3>Example configuration</h3>
27
- <p>This is an example of configuration that clears old tasks from queue every day at 10:35AM</p>
28
  <pre>&lt;crontab&gt;
29
  &lt;jobs&gt;
30
- &lt;contactlab_subscribers_clear_queue&gt;
31
  &lt;schedule&gt;
32
  &lt;cron_expr&gt;35 10 * * *&lt;/cron_expr&gt;
33
  &lt;/schedule&gt;
34
  &lt;run&gt;
35
  &lt;model&gt;contactlab_commons/cron::clearQueue&lt;/model&gt;
36
  &lt;/run&gt;
37
- &lt;/contactlab_subscribers_clear_queue&gt;
38
  &lt;/jobs&gt;
39
  &lt;/crontab&gt;</pre>]]></comment-->
40
  <fields>
@@ -46,10 +46,10 @@
46
  <show_in_default>1</show_in_default>
47
  <show_in_website>1</show_in_website>
48
  <show_in_store>1</show_in_store>
49
- <comment>Enable or disable Contactlab module</comment>
50
  </enabled>
51
  <days_of_old_tasks translate="label">
52
- <label>Number of days to consider a task as an obsolete task</label>
53
  <frontend_type>text</frontend_type>
54
  <sort_order>20</sort_order>
55
  <show_in_default>1</show_in_default>
@@ -68,7 +68,7 @@
68
  </fields>
69
  </global>
70
  <connection translate="label">
71
- <label>File Transfer Configuration</label>
72
  <frontend_type>text</frontend_type>
73
  <sort_order>20</sort_order>
74
  <show_in_default>1</show_in_default>
@@ -162,7 +162,7 @@
162
  <show_in_store>1</show_in_store>
163
  </enable>
164
  <wsdl_url translate="label">
165
- <label>WSDL url</label>
166
  <frontend_type>text</frontend_type>
167
  <sort_order>20</sort_order>
168
  <show_in_default>1</show_in_default>
@@ -173,7 +173,7 @@
173
  </depends>
174
  </wsdl_url>
175
  <uid translate="label">
176
- <label>Uid</label>
177
  <frontend_type>password</frontend_type>
178
  <sort_order>30</sort_order>
179
  <show_in_default>1</show_in_default>
@@ -184,7 +184,7 @@
184
  </depends>
185
  </uid>
186
  <apikey translate="label">
187
- <label>Api key</label>
188
  <frontend_type>password</frontend_type>
189
  <sort_order>40</sort_order>
190
  <show_in_default>1</show_in_default>
@@ -209,7 +209,7 @@
209
  <expanded>0</expanded>
210
  <fields>
211
  <soap_call_is_subscribed translate="label">
212
- <label>Enable inscription state receptions SOAP call</label>
213
  <frontend_type>select</frontend_type>
214
  <source_model>adminhtml/system_config_source_yesno</source_model>
215
  <sort_order>100</sort_order>
@@ -219,7 +219,7 @@
219
  <config_path>contactlab_subscribers/global/soap_call_is_subscribed</config_path>
220
  </soap_call_is_subscribed>
221
  <soap_call_set_subscribed translate="label">
222
- <label>Enable inscription state settings SOAP call</label>
223
  <frontend_type>select</frontend_type>
224
  <source_model>adminhtml/system_config_source_yesno</source_model>
225
  <sort_order>110</sort_order>
@@ -230,16 +230,16 @@
230
  </soap_call_set_subscribed>
231
 
232
  <contactlab_subscribers_model_task_updatesubscriberstatusrunner_interval>
233
- <label>Interval between syncronous inscription state update attempts</label>
234
  <frontend_type>text</frontend_type>
235
  <sort_order>510</sort_order>
236
  <show_in_default>1</show_in_default>
237
  <show_in_website>1</show_in_website>
238
  <show_in_store>1</show_in_store>
239
- <config_path>contactlab_subscribers/queue/contactlab_subscribers_model_task_updatesubscriberstatusrunner_retries</config_path>
240
  </contactlab_subscribers_model_task_updatesubscriberstatusrunner_interval>
241
  <contactlab_subscribers_model_task_updatesubscriberstatusrunner_retries>
242
- <label>Total number of syncronous inscription state update attempts</label>
243
  <frontend_type>text</frontend_type>
244
  <sort_order>520</sort_order>
245
  <show_in_default>1</show_in_default>
@@ -261,18 +261,18 @@
261
  <expanded>0</expanded>
262
  <fields>
263
  <unsubscribe_if_not_confirm translate="label">
264
- <label>Delete inscription if user doesn't confirm</label>
265
  <frontend_type>select</frontend_type>
266
  <source_model>adminhtml/system_config_source_yesno</source_model>
267
  <sort_order>100</sort_order>
268
  <show_in_default>1</show_in_default>
269
  <show_in_website>1</show_in_website>
270
  <show_in_store>1</show_in_store>
271
- <comment>Unsubscribe the customer during Newsletter subscriber to customer operation if the check of subscription is left unchecked.</comment>
272
  <config_path>contactlab_subscribers/subscriber_to_customer/unsubscribe_if_not_confirm</config_path>
273
  </unsubscribe_if_not_confirm>
274
  <email_on_unsubscribe translate="label">
275
- <label>Send disinscription notify email</label>
276
  <frontend_type>select</frontend_type>
277
  <source_model>adminhtml/system_config_source_yesno</source_model>
278
  <sort_order>110</sort_order>
@@ -284,12 +284,23 @@
284
  </depends>
285
  <config_path>contactlab_subscribers/subscriber_to_customer/email_on_unsubscribe</config_path>
286
  </email_on_unsubscribe>
 
 
 
 
 
 
 
 
 
 
 
287
  </fields>
288
  </behavior>
289
 
290
 
291
  <error_email translate="label">
292
- <label>Error notify email</label>
293
  <frontend_type>text</frontend_type>
294
  <sort_order>60</sort_order>
295
  <show_in_default>1</show_in_default>
@@ -312,7 +323,7 @@
312
  &lt;/crontab&gt;</pre>]]></old_comment>
313
  <fields>
314
  <enable translate="label">
315
- <label>Enable error notify email</label>
316
  <frontend_type>select</frontend_type>
317
  <sort_order>10</sort_order>
318
  <show_in_default>1</show_in_default>
@@ -343,13 +354,13 @@
343
  </depends>
344
  </email_sender_name>
345
  <recipients translate="label">
346
- <label>Recipients email</label>
347
  <frontend_type>text</frontend_type>
348
  <sort_order>40</sort_order>
349
  <show_in_default>1</show_in_default>
350
  <show_in_website>0</show_in_website>
351
  <show_in_store>0</show_in_store>
352
- <comment>Use ; delimiter for recipients separator</comment>
353
  <depends>
354
  <enable>1</enable>
355
  </depends>
@@ -376,7 +387,7 @@
376
  <show_in_website>0</show_in_website>
377
  <show_in_store>0</show_in_store>
378
  <comment><![CDATA[<h3>Example configuration</h3>
379
- <p>This is an example of configuration that clears old tasks from queue every day at 10:35AM</p>
380
  <pre>&lt;crontab&gt;
381
  &lt;jobs&gt;
382
  &lt;contactlab_subscribers_clear_queue&gt;
24
  <show_in_website>0</show_in_website>
25
  <show_in_store>0</show_in_store>
26
  <!--comment><![CDATA[<h3>Example configuration</h3>
27
+ <p>This configuration example clears old tasks from the queue every day at 10:35 AM.</p>
28
  <pre>&lt;crontab&gt;
29
  &lt;jobs&gt;
30
+ &lt;contactlab_commons_clear_queue&gt;
31
  &lt;schedule&gt;
32
  &lt;cron_expr&gt;35 10 * * *&lt;/cron_expr&gt;
33
  &lt;/schedule&gt;
34
  &lt;run&gt;
35
  &lt;model&gt;contactlab_commons/cron::clearQueue&lt;/model&gt;
36
  &lt;/run&gt;
37
+ &lt;/contactlab_commons_clear_queue&gt;
38
  &lt;/jobs&gt;
39
  &lt;/crontab&gt;</pre>]]></comment-->
40
  <fields>
46
  <show_in_default>1</show_in_default>
47
  <show_in_website>1</show_in_website>
48
  <show_in_store>1</show_in_store>
49
+ <comment>Enable or disable ContactLab module</comment>
50
  </enabled>
51
  <days_of_old_tasks translate="label">
52
+ <label>Days before a task is regarded as obsolete</label>
53
  <frontend_type>text</frontend_type>
54
  <sort_order>20</sort_order>
55
  <show_in_default>1</show_in_default>
68
  </fields>
69
  </global>
70
  <connection translate="label">
71
+ <label>File Transfer configuration</label>
72
  <frontend_type>text</frontend_type>
73
  <sort_order>20</sort_order>
74
  <show_in_default>1</show_in_default>
162
  <show_in_store>1</show_in_store>
163
  </enable>
164
  <wsdl_url translate="label">
165
+ <label>WSDL URL</label>
166
  <frontend_type>text</frontend_type>
167
  <sort_order>20</sort_order>
168
  <show_in_default>1</show_in_default>
173
  </depends>
174
  </wsdl_url>
175
  <uid translate="label">
176
+ <label>UID</label>
177
  <frontend_type>password</frontend_type>
178
  <sort_order>30</sort_order>
179
  <show_in_default>1</show_in_default>
184
  </depends>
185
  </uid>
186
  <apikey translate="label">
187
+ <label>API key</label>
188
  <frontend_type>password</frontend_type>
189
  <sort_order>40</sort_order>
190
  <show_in_default>1</show_in_default>
209
  <expanded>0</expanded>
210
  <fields>
211
  <soap_call_is_subscribed translate="label">
212
+ <label>Receive subscription states using SOAP calls</label>
213
  <frontend_type>select</frontend_type>
214
  <source_model>adminhtml/system_config_source_yesno</source_model>
215
  <sort_order>100</sort_order>
219
  <config_path>contactlab_subscribers/global/soap_call_is_subscribed</config_path>
220
  </soap_call_is_subscribed>
221
  <soap_call_set_subscribed translate="label">
222
+ <label>Set subscription states using SOAP calls</label>
223
  <frontend_type>select</frontend_type>
224
  <source_model>adminhtml/system_config_source_yesno</source_model>
225
  <sort_order>110</sort_order>
230
  </soap_call_set_subscribed>
231
 
232
  <contactlab_subscribers_model_task_updatesubscriberstatusrunner_interval>
233
+ <label>Interval between synchronous subscription state update attempts</label>
234
  <frontend_type>text</frontend_type>
235
  <sort_order>510</sort_order>
236
  <show_in_default>1</show_in_default>
237
  <show_in_website>1</show_in_website>
238
  <show_in_store>1</show_in_store>
239
+ <config_path>contactlab_subscribers/queue/contactlab_subscribers_model_task_updatesubscriberstatusrunner_interval</config_path>
240
  </contactlab_subscribers_model_task_updatesubscriberstatusrunner_interval>
241
  <contactlab_subscribers_model_task_updatesubscriberstatusrunner_retries>
242
+ <label>Total number of synchronous subscription state update attempts</label>
243
  <frontend_type>text</frontend_type>
244
  <sort_order>520</sort_order>
245
  <show_in_default>1</show_in_default>
261
  <expanded>0</expanded>
262
  <fields>
263
  <unsubscribe_if_not_confirm translate="label">
264
+ <label>Delete subscription if user does not confirm</label>
265
  <frontend_type>select</frontend_type>
266
  <source_model>adminhtml/system_config_source_yesno</source_model>
267
  <sort_order>100</sort_order>
268
  <show_in_default>1</show_in_default>
269
  <show_in_website>1</show_in_website>
270
  <show_in_store>1</show_in_store>
271
+ <comment>Unsubscribe the customer from the Newsletter if they do not select the subscription checkbox.</comment>
272
  <config_path>contactlab_subscribers/subscriber_to_customer/unsubscribe_if_not_confirm</config_path>
273
  </unsubscribe_if_not_confirm>
274
  <email_on_unsubscribe translate="label">
275
+ <label>Send unsubscribed notification email</label>
276
  <frontend_type>select</frontend_type>
277
  <source_model>adminhtml/system_config_source_yesno</source_model>
278
  <sort_order>110</sort_order>
284
  </depends>
285
  <config_path>contactlab_subscribers/subscriber_to_customer/email_on_unsubscribe</config_path>
286
  </email_on_unsubscribe>
287
+ <enable_multiwebsite_subscription translate="label comment">
288
+ <label>Enable multi-website subscription</label>
289
+ <frontend_type>select</frontend_type>
290
+ <source_model>adminhtml/system_config_source_yesno</source_model>
291
+ <comment>Enable multi-website newsletter subscription</comment>
292
+ <show_in_default>1</show_in_default>
293
+ <show_in_website>0</show_in_website>
294
+ <show_in_store>0</show_in_store>
295
+ <sort_order>1000</sort_order>
296
+ <config_path>contactlab_subscribers/global/enable_multiwebsite_subscription</config_path>
297
+ </enable_multiwebsite_subscription>
298
  </fields>
299
  </behavior>
300
 
301
 
302
  <error_email translate="label">
303
+ <label>Error notification email</label>
304
  <frontend_type>text</frontend_type>
305
  <sort_order>60</sort_order>
306
  <show_in_default>1</show_in_default>
323
  &lt;/crontab&gt;</pre>]]></old_comment>
324
  <fields>
325
  <enable translate="label">
326
+ <label>Enable error notification email</label>
327
  <frontend_type>select</frontend_type>
328
  <sort_order>10</sort_order>
329
  <show_in_default>1</show_in_default>
354
  </depends>
355
  </email_sender_name>
356
  <recipients translate="label">
357
+ <label>Recipient email</label>
358
  <frontend_type>text</frontend_type>
359
  <sort_order>40</sort_order>
360
  <show_in_default>1</show_in_default>
361
  <show_in_website>0</show_in_website>
362
  <show_in_store>0</show_in_store>
363
+ <comment>Use ; as the delimiter to separate recipients.</comment>
364
  <depends>
365
  <enable>1</enable>
366
  </depends>
387
  <show_in_website>0</show_in_website>
388
  <show_in_store>0</show_in_store>
389
  <comment><![CDATA[<h3>Example configuration</h3>
390
+ <p>This configuration example clears old tasks from the queue every day at 10:35 AM.</p>
391
  <pre>&lt;crontab&gt;
392
  &lt;jobs&gt;
393
  &lt;contactlab_subscribers_clear_queue&gt;
app/code/community/Contactlab/Commons/sql/contactlab_commons_setup/mysql4-install-0.8.0.php CHANGED
@@ -1,17 +1,20 @@
1
  <?php
2
 
 
3
  $installer = $this;
4
  $installer->startSetup();
5
 
6
  $installer->run("drop table if exists {$installer->getTable("contactlab_commons/task")};");
7
 
 
 
8
  $installer->run(<<<EOT
9
- DROP TABLE IF EXISTS `contactlab_commons_task_entity`;
10
  EOT
11
  );
12
 
13
  $installer->run(<<<EOT
14
- CREATE TABLE `contactlab_commons_task_entity` (
15
  `task_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Task Id',
16
  `task_code` varchar(255) NOT NULL COMMENT 'Task Code',
17
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Created At',
@@ -29,19 +32,19 @@ CREATE TABLE `contactlab_commons_task_entity` (
29
  PRIMARY KEY (`task_id`),
30
  KEY `IDX_CONTACTLAB_COMMONS_TASK_ENTITY_STATUS` (`status`),
31
  KEY `FK_CONTACTLAB_COMMONS_TASK_ENTITY_STORE_ID_CORE_STORE_STORE_ID` (`store_id`),
32
- CONSTRAINT `FK_CONTACTLAB_COMMONS_TASK_ENTITY_STORE_ID_CORE_STORE_STORE_ID` FOREIGN KEY (`store_id`) REFERENCES `core_store` (`store_id`) ON DELETE CASCADE ON UPDATE CASCADE
33
  ) COMMENT='Tasks';
34
  EOT
35
  );
36
 
37
 
38
  $installer->run(<<<EOT
39
- DROP TABLE IF EXISTS `contactlab_commons_task_event_entity`;
40
  EOT
41
  );
42
 
43
  $installer->run(<<<EOT
44
- CREATE TABLE `contactlab_commons_task_event_entity` (
45
  `task_event_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Task Event Id',
46
  `task_id` int(10) unsigned NOT NULL COMMENT 'Task Id',
47
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Created At',
@@ -53,19 +56,19 @@ CREATE TABLE `contactlab_commons_task_event_entity` (
53
  PRIMARY KEY (`task_event_id`),
54
  KEY `FK_C3903EA306F9FB462C57D0501D1B13E8` (`task_id`),
55
  KEY `FK_CONTACTLAB_COMMONS_TASK_EVENT_ENTT_USR_ID_ADM_USR_USR_ID` (`user_id`),
56
- CONSTRAINT `FK_C3903EA306F9FB462C57D0501D1B13E8` FOREIGN KEY (`task_id`) REFERENCES `contactlab_commons_task_entity` (`task_id`) ON DELETE CASCADE ON UPDATE CASCADE,
57
- CONSTRAINT `FK_CONTACTLAB_COMMONS_TASK_EVENT_ENTT_USR_ID_ADM_USR_USR_ID` FOREIGN KEY (`user_id`) REFERENCES `admin_user` (`user_id`) ON DELETE SET NULL ON UPDATE CASCADE
58
  ) COMMENT='Task events';
59
  EOT
60
  );
61
 
62
 
63
  $installer->run(<<<EOT
64
- DROP TABLE IF EXISTS `contactlab_commons_deleted_entity`;
65
  EOT
66
  );
67
  $installer->run(<<<EOT
68
- CREATE TABLE `contactlab_commons_deleted_entity` (
69
  `deleted_entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Deleted Entity Id',
70
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Created At',
71
  `model` varchar(255) NOT NULL COMMENT 'Model',
@@ -75,7 +78,7 @@ CREATE TABLE `contactlab_commons_deleted_entity` (
75
  `entity_id` int(10) unsigned DEFAULT NULL COMMENT 'Entity id',
76
  PRIMARY KEY (`deleted_entity_id`),
77
  KEY `FK_AB8E6FEC8986ED3EF2FA1B7DADE8FF28` (`task_id`),
78
- CONSTRAINT `FK_AB8E6FEC8986ED3EF2FA1B7DADE8FF28` FOREIGN KEY (`task_id`) REFERENCES `contactlab_commons_task_entity` (`task_id`) ON DELETE CASCADE ON UPDATE CASCADE
79
  ) COMMENT='Deleted customers and subscribers email log';
80
  EOT
81
  );
@@ -83,11 +86,11 @@ EOT
83
 
84
 
85
  $installer->run(<<<EOT
86
- DROP TABLE IF EXISTS `contactlab_commons_log_entity`;
87
  EOT
88
  );
89
  $installer->run(<<<EOT
90
- CREATE TABLE `contactlab_commons_log_entity` (
91
  `log_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Task Id',
92
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Created At',
93
  `log_level` smallint(6) NOT NULL COMMENT 'Log level',
1
  <?php
2
 
3
+
4
  $installer = $this;
5
  $installer->startSetup();
6
 
7
  $installer->run("drop table if exists {$installer->getTable("contactlab_commons/task")};");
8
 
9
+ $tablePrefix = (string) Mage::getConfig()->getTablePrefix();
10
+
11
  $installer->run(<<<EOT
12
+ DROP TABLE IF EXISTS `{$tablePrefix}contactlab_commons_task_entity`;
13
  EOT
14
  );
15
 
16
  $installer->run(<<<EOT
17
+ CREATE TABLE `{$tablePrefix}contactlab_commons_task_entity` (
18
  `task_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Task Id',
19
  `task_code` varchar(255) NOT NULL COMMENT 'Task Code',
20
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Created At',
32
  PRIMARY KEY (`task_id`),
33
  KEY `IDX_CONTACTLAB_COMMONS_TASK_ENTITY_STATUS` (`status`),
34
  KEY `FK_CONTACTLAB_COMMONS_TASK_ENTITY_STORE_ID_CORE_STORE_STORE_ID` (`store_id`),
35
+ CONSTRAINT `FK_CONTACTLAB_COMMONS_TASK_ENTITY_STORE_ID_CORE_STORE_STORE_ID` FOREIGN KEY (`store_id`) REFERENCES `{$tablePrefix}core_store` (`store_id`) ON DELETE CASCADE ON UPDATE CASCADE
36
  ) COMMENT='Tasks';
37
  EOT
38
  );
39
 
40
 
41
  $installer->run(<<<EOT
42
+ DROP TABLE IF EXISTS `{$tablePrefix}contactlab_commons_task_event_entity`;
43
  EOT
44
  );
45
 
46
  $installer->run(<<<EOT
47
+ CREATE TABLE `{$tablePrefix}contactlab_commons_task_event_entity` (
48
  `task_event_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Task Event Id',
49
  `task_id` int(10) unsigned NOT NULL COMMENT 'Task Id',
50
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Created At',
56
  PRIMARY KEY (`task_event_id`),
57
  KEY `FK_C3903EA306F9FB462C57D0501D1B13E8` (`task_id`),
58
  KEY `FK_CONTACTLAB_COMMONS_TASK_EVENT_ENTT_USR_ID_ADM_USR_USR_ID` (`user_id`),
59
+ CONSTRAINT `FK_C3903EA306F9FB462C57D0501D1B13E8` FOREIGN KEY (`task_id`) REFERENCES `{$tablePrefix}contactlab_commons_task_entity` (`task_id`) ON DELETE CASCADE ON UPDATE CASCADE,
60
+ CONSTRAINT `FK_CONTACTLAB_COMMONS_TASK_EVENT_ENTT_USR_ID_ADM_USR_USR_ID` FOREIGN KEY (`user_id`) REFERENCES `{$tablePrefix}admin_user` (`user_id`) ON DELETE SET NULL ON UPDATE CASCADE
61
  ) COMMENT='Task events';
62
  EOT
63
  );
64
 
65
 
66
  $installer->run(<<<EOT
67
+ DROP TABLE IF EXISTS `{$tablePrefix}contactlab_commons_deleted_entity`;
68
  EOT
69
  );
70
  $installer->run(<<<EOT
71
+ CREATE TABLE `{$tablePrefix}contactlab_commons_deleted_entity` (
72
  `deleted_entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Deleted Entity Id',
73
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Created At',
74
  `model` varchar(255) NOT NULL COMMENT 'Model',
78
  `entity_id` int(10) unsigned DEFAULT NULL COMMENT 'Entity id',
79
  PRIMARY KEY (`deleted_entity_id`),
80
  KEY `FK_AB8E6FEC8986ED3EF2FA1B7DADE8FF28` (`task_id`),
81
+ CONSTRAINT `FK_AB8E6FEC8986ED3EF2FA1B7DADE8FF28` FOREIGN KEY (`task_id`) REFERENCES `{$tablePrefix}contactlab_commons_task_entity` (`task_id`) ON DELETE CASCADE ON UPDATE CASCADE
82
  ) COMMENT='Deleted customers and subscribers email log';
83
  EOT
84
  );
86
 
87
 
88
  $installer->run(<<<EOT
89
+ DROP TABLE IF EXISTS `{$tablePrefix}contactlab_commons_log_entity`;
90
  EOT
91
  );
92
  $installer->run(<<<EOT
93
+ CREATE TABLE `{$tablePrefix}contactlab_commons_log_entity` (
94
  `log_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Task Id',
95
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT 'Created At',
96
  `log_level` smallint(6) NOT NULL COMMENT 'Log level',
app/code/community/Contactlab/Commons/sql/contactlab_commons_setup/upgrade-1.0.0-1.0.1.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $installer = $this;
3
+ $installer->startSetup();
4
+
5
+ $installer->run("
6
+ ALTER TABLE {$installer->getTable("contactlab_commons/task")}
7
+ CHANGE `task_data` `task_data` blob comment 'Task internal data';
8
+ ");
9
+
10
+ $installer->endSetup();
app/code/community/Contactlab/Subscribers/Block/Newsletter/Subscribers/Modify.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * Newsletter modify block.
6
+ *
7
+ * @method setInputType($value)
8
+ * @method setCustomerEmail($value)
9
+ * @method String getInputType()
10
+ * @method String getCustomerEmail()
11
+ *
12
+ * @category Contactlab
13
+ * @package Contactlab_Newsletter
14
+ * @author
15
+ */
16
+ class Contactlab_Subscribers_Block_Newsletter_Subscribers_Modify extends Mage_Newsletter_Block_Subscribe
17
+ {
18
+
19
+ protected function _toHtml()
20
+ {
21
+ if(Mage::getStoreConfig('contactlab_subscribers/newsletter/enable'))
22
+ {
23
+ return parent::_toHtml();
24
+ }
25
+ }
26
+
27
+ /**
28
+ * Preparing global layout
29
+ *
30
+ * You can redefine this method in child classes for changing layout
31
+ *
32
+ * @return Mage_Core_Block_Abstract
33
+ */
34
+ protected function _prepareLayout()
35
+ {
36
+ $session = Mage::getSingleton('customer/session');
37
+ if ($session->isLoggedIn()) {
38
+ $this->setInputType('hidden');
39
+ // The customer is logged: we don't need to show the corresponding input field
40
+ // just store it in the block already so it is available as an hidden field to the template
41
+ $customerId = $session->getCustomerId();
42
+ $this->setCustomerEmail(Mage::getModel("customer/customer")->load($customerId)->getEmail());
43
+ } else {
44
+ $this->setInputType('text');
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Get form action url.
50
+ * @return string
51
+ */
52
+ public function getFormActionUrl()
53
+ {
54
+ return $this->getUrl('contactlab_subscribers/modify', array('_secure' => true));
55
+ }
56
+ }
app/code/community/Contactlab/Subscribers/Block/Newsletter/Subscribers/Subscribe.php ADDED
@@ -0,0 +1,143 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ /**
5
+ * Newsletter subscribe block
6
+ *
7
+ * @category Contactlab
8
+ * @package Contactlab_Newsletter
9
+ * @author
10
+ */
11
+ class Contactlab_Subscribers_Block_Newsletter_Subscribers_Subscribe extends Mage_Newsletter_Block_Subscribe
12
+ {
13
+
14
+ protected function _toHtml()
15
+ {
16
+ if(Mage::getStoreConfig('contactlab_subscribers/newsletter/enable'))
17
+ {
18
+ return parent::_toHtml();
19
+ }
20
+ }
21
+
22
+ /**
23
+ * Fields.
24
+ * @var array
25
+ */
26
+ protected $fields = array(
27
+ 'email' => array('label' => "Your email", 'type' => 'text', 'title' => 'Sign up for our newsletter'),
28
+ 'fname' => array('label' => "First name", 'type' => 'text', 'title' => 'Your first name'),
29
+ 'lname' => array('label' => "Last name", 'type' => 'text', 'title' => 'Your last name'),
30
+ 'company' => array('label' => "Your company", 'type' => 'text', 'title' => 'Your company'),
31
+ 'gender' => array('label' => "Sex", 'type' => 'radio', 'choices' => array('Male', 'Female')),
32
+ 'dob' => array('label' => "Date of birth", 'type' => 'text'),
33
+ 'privacy' => array('label' => "Privacy terms agreement", 'type' => 'checkbox'),
34
+ 'custom1' => array('label' => "No label assigned", 'type' => 'text'),
35
+ 'custom2' => array('label' => "No label assigned", 'type' => 'text'),
36
+ 'country' => array('label' => "Your country", 'type' => 'text'),
37
+ 'city' => array('label' => "Your city", 'type' => 'text'),
38
+ 'address' => array('label' => "Your address", 'type' => 'text'),
39
+ 'zipcode' => array('label' => "Your ZIP code", 'type' => 'text'),
40
+ 'landphone' => array('label' => "Your landline phone number", 'type' => 'text'),
41
+ 'mobilephone' => array('label' => "Your mobile phone number", 'type' => 'text'),
42
+ 'notes' => array('label' => "Additional notes", 'type' => 'text')
43
+ );
44
+
45
+ /**
46
+ * Is enabled field.
47
+ * @param $fieldName
48
+ * @return bool
49
+ */
50
+ public function isEnabledField($fieldName)
51
+ {
52
+ return array_key_exists($fieldName, $this->fields) ?
53
+ array_key_exists('enabled', $this->fields[$fieldName]) ?
54
+ $this->fields[$fieldName]['enabled']
55
+ : true
56
+ : false;
57
+ }
58
+
59
+ /**
60
+ * Field label.
61
+ * @param $fieldName
62
+ * @return null|string
63
+ */
64
+ public function fieldLabel($fieldName)
65
+ {
66
+ return array_key_exists($fieldName, $this->fields) ? $this->__($this->fields[$fieldName]['label']) : NULL;
67
+ }
68
+
69
+ /**
70
+ * Field input type.
71
+ * @param $fieldName
72
+ * @return string
73
+ */
74
+ public function fieldInputType($fieldName)
75
+ {
76
+ return array_key_exists($fieldName, $this->fields) ? $this->fields[$fieldName]['type'] : 'text';
77
+ }
78
+
79
+ /**
80
+ * Field choices.
81
+ * @param $fieldName
82
+ * @return int
83
+ */
84
+ public function fieldChoices($fieldName)
85
+ {
86
+ if (array_key_exists($fieldName, $this->fields))
87
+ return $this->fields[$fieldName]['type'] === 'radio' ?
88
+ count($this->fields[$fieldName]['choices'])
89
+ : 0;
90
+ else return 0;
91
+ }
92
+
93
+ /**
94
+ * Field choice.
95
+ * @param $fieldName
96
+ * @param $choiceNum
97
+ * @return null|string
98
+ */
99
+ public function fieldChoice($fieldName, $choiceNum)
100
+ {
101
+ if (array_key_exists($fieldName, $this->fields)) {
102
+ return $this->fields[$fieldName]['type'] === 'radio' ?
103
+ $this->__($this->fields[$fieldName]['choices'][$choiceNum - 1])
104
+ : null;
105
+ } else {
106
+ return null;
107
+ }
108
+ }
109
+
110
+ /**
111
+ * Field value.
112
+ * @param $fieldName
113
+ * @param $choiceNum
114
+ * @return mixed
115
+ */
116
+ public function fieldValue($fieldName, $choiceNum)
117
+ {
118
+ return $choiceNum;
119
+ /*if (array_key_exists($fieldname, $this->fields)) {
120
+ return $this->fields[$fieldname]['type'] === 'radio' ?
121
+ $this->fields[$fieldname]['choices'][$choicenum - 1]
122
+ : null;
123
+ } else {
124
+ return null;
125
+ }*/
126
+ }
127
+
128
+ /**
129
+ * Field title.
130
+ * @param $fieldName
131
+ * @return null|string
132
+ */
133
+ public function fieldTitle($fieldName)
134
+ {
135
+ if (array_key_exists($fieldName, $this->fields)) {
136
+ return array_key_exists('title', $this->fields[$fieldName]) ?
137
+ $this->__($this->fields[$fieldName]['title'])
138
+ : null;
139
+ } else {
140
+ return null;
141
+ }
142
+ }
143
+ }
app/code/community/Contactlab/Subscribers/Block/Newsletter/Subscribers/Update.php ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Newsletter update block
5
+ *
6
+ * @category Contactlab
7
+ * @package Contactlab_Newsletter
8
+ * @author
9
+ */
10
+ class Contactlab_Subscribers_Block_Newsletter_Subscribers_Update extends Contactlab_Subscribers_Block_Newsletter_Subscribers_Subscribe
11
+ {
12
+ /**
13
+ * @var $_fieldValues Contactlab_Subscribers_Model_Fields
14
+ */
15
+ private $_fieldValues;
16
+
17
+ /**
18
+ * Construct.
19
+ * @throws Mage_Core_Exception
20
+ */
21
+ public function _construct()
22
+ {
23
+ parent::_construct();
24
+ //get registered fields value
25
+ $this->_fieldValues = Mage::registry('contactlab/fields');
26
+ if (is_null($this->_fieldValues)) {
27
+ Mage::throwException($this->__('Update block instantiated out of context'));
28
+ }
29
+ }
30
+
31
+ /**
32
+ * Depending on type of field, builds value or checked attribute for
33
+ * the field, getting its value from registered fields
34
+ *
35
+ * @param string $fieldName
36
+ * @param int $choiceNum
37
+ * @return string
38
+ */
39
+ public function fieldActualValue($fieldName, $choiceNum = 0)
40
+ {
41
+ if ($fieldName == 'notes') {
42
+ return $this->_fieldValues->getNotes();
43
+ }
44
+
45
+ if ($fieldName == 'fname') {
46
+ return ' value="' . $this->_fieldValues->getFirstName() . '"';
47
+ }
48
+ if ($fieldName == 'lname') {
49
+ return ' value="' . $this->_fieldValues->getLastName() . '"';
50
+ }
51
+ if ($fieldName == 'custom1') {
52
+ return ' value="' . $this->_fieldValues->getCustom1() . '"';
53
+ }
54
+ if ($fieldName == 'custom2') {
55
+ return ' value="' . $this->_fieldValues->getCustom2() . '"';
56
+ }
57
+ if ($fieldName == 'zipcode') {
58
+ return ' value="' . $this->_fieldValues->getZipCode() . '"';
59
+ }
60
+ if ($fieldName == 'landphone') {
61
+ return ' value="' . $this->_fieldValues->getPhone() . '"';
62
+ }
63
+ if ($fieldName == 'mobilephone') {
64
+ return ' value="' . $this->_fieldValues->getCellPhone() . '"';
65
+ }
66
+
67
+ if ($fieldName == 'dob') {
68
+ $dateFormat = Mage::app()->getLocale()->getDateStrFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT);
69
+ $ts = date_timestamp_get(date_create($this->_fieldValues->getDob()));
70
+ $dob = strftime($dateFormat, $ts);
71
+ return ' value="' . $dob . '"';
72
+ }
73
+
74
+ if ($this->fieldInputType($fieldName) == 'text') {
75
+ return ' value="' . $this->_fieldValues->getData($fieldName) . '" ';
76
+ }
77
+
78
+ if (($fieldName == 'privacy') && ($this->_fieldValues->getPrivacyAccepted())) {
79
+ return ' checked="yes" ';
80
+ }
81
+
82
+ if (($fieldName == 'gender') && ($this->_fieldValues->getGender() == $choiceNum)) {
83
+ return ' checked="yes" ';
84
+ }
85
+
86
+ return '';
87
+ }
88
+
89
+ /**
90
+ * Get subs email.
91
+ * @return mixed
92
+ */
93
+ public function getSubsEmail()
94
+ {
95
+ return $this->_fieldValues->getSubscriberEmail();
96
+ }
97
+
98
+ /**
99
+ * Get subs id.
100
+ * @return mixed
101
+ */
102
+ public function getSubsId()
103
+ {
104
+ return $this->_fieldValues->getSubscriberId();
105
+ }
106
+
107
+ /**
108
+ * Get subs hash.
109
+ * @return mixed
110
+ */
111
+ public function getSubsHash()
112
+ {
113
+ return $this->_fieldValues->getSubscriberConfirmCode();
114
+ }
115
+
116
+ /**
117
+ * Modify form action url.
118
+ * @return string
119
+ */
120
+ public function getModifyFormActionUrl()
121
+ {
122
+ return $this->getUrl('contactlab_subscribers/modify/personal', array('_secure' => true));
123
+ }
124
+
125
+ }
app/code/community/Contactlab/Subscribers/Helper/Checks.php ADDED
@@ -0,0 +1,106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Subscribers_Helper_Checks extends Mage_Core_Helper_Abstract
4
+ {
5
+ private $_lastChecks = array();
6
+
7
+ /**
8
+ * Get available checks.
9
+ * @param bool $onlyEssentials
10
+ * @return array
11
+ */
12
+ public function getAvailableChecks($onlyEssentials = false)
13
+ {
14
+ $checkDir = __DIR__ . '/../Model/Checks';
15
+ $rv = array();
16
+ foreach (scandir($checkDir) as $file) {
17
+ if (!preg_match('|\.php$|', $file)) {
18
+ continue;
19
+ }
20
+ $className = preg_replace('|\.php$|', '', $file);
21
+ if ($className === 'AbstractCheck' || $className === 'CheckInterface') {
22
+ continue;
23
+ }
24
+ $modelName = 'contactlab_subscribers/checks_'
25
+ . strtolower(substr($className, 0, 1))
26
+ . substr($className, 1);
27
+ /* @var $instance Contactlab_Subscribers_Model_Checks_CheckInterface */
28
+ $instance = Mage::getModel($modelName);
29
+ if ($onlyEssentials && !$instance->isEssential()) {
30
+ continue;
31
+ }
32
+ $rv[] = $instance;
33
+ }
34
+ usort($rv, function ($a, $b) {
35
+ /* @var $a Contactlab_Subscribers_Model_Checks_CheckInterface */
36
+ /* @var $b Contactlab_Subscribers_Model_Checks_CheckInterface */
37
+ $a = $a->getPosition();
38
+ $b = $b->getPosition();
39
+ if ($a == $b) {
40
+ return 0;
41
+ }
42
+ return ($a < $b) ? -1 : 1;
43
+ });
44
+ return $rv;
45
+ }
46
+
47
+ /**
48
+ * Run all available checks.
49
+ * @param bool $onlyEssentials
50
+ * @return array
51
+ */
52
+ public function runAvailableChecks($onlyEssentials = false)
53
+ {
54
+ $this->_lastChecks = array();
55
+ $checks = $this->getAvailableChecks($onlyEssentials);
56
+ /* @var $check Contactlab_Subscribers_Model_Checks_CheckInterface */
57
+ foreach ($checks as $check) {
58
+ $this->_lastChecks[] = $check;
59
+ $check->check();
60
+ }
61
+ return $this->_lastChecks;
62
+ }
63
+
64
+ /**
65
+ * Get last checks exit code.
66
+ * @return string
67
+ */
68
+ public function getLastExitCode()
69
+ {
70
+ /* @var $check Contactlab_Subscribers_Model_Checks_CheckInterface */
71
+ foreach ($this->_lastChecks as $check) {
72
+ if ($check->getExitCode() === Contactlab_Subscribers_Model_Checks_CheckInterface::ERROR) {
73
+ return $check->getExitCode();
74
+ }
75
+ }
76
+ return Contactlab_Subscribers_Model_Checks_CheckInterface::SUCCESS;
77
+ }
78
+
79
+ /**
80
+ * Run available essential checks and return last status.
81
+ * @return bool
82
+ */
83
+ public function checkAvailableEssentialChecks() {
84
+ $this->runAvailableChecks(true);
85
+ return $this->getLastExitCode() === Contactlab_Subscribers_Model_Checks_CheckInterface::SUCCESS;
86
+ }
87
+
88
+ /**
89
+ * Throw Last Check Exception.
90
+ * @param Contactlab_Commons_Model_Task $task
91
+ * @return Exception
92
+ */
93
+ public function getLastCheckException(Contactlab_Commons_Model_Task $task) {
94
+ $msg = array();
95
+ /* @var $check Contactlab_Subscribers_Model_Checks_CheckInterface */
96
+ foreach ($this->_lastChecks as $check) {
97
+ if ($check->getExitCode() === Contactlab_Subscribers_Model_Checks_CheckInterface::ERROR) {
98
+ foreach ($check->getErrors() as $error) {
99
+ $task->addEvent($error, true);
100
+ $msg[] = $error;
101
+ }
102
+ }
103
+ }
104
+ return new Exception(implode('<br>', $msg));
105
+ }
106
+ }
app/code/community/Contactlab/Subscribers/Helper/Data.php CHANGED
@@ -47,6 +47,11 @@ class Contactlab_Subscribers_Helper_Data extends Mage_Core_Helper_Abstract {
47
  }
48
  }
49
 
 
 
 
 
 
50
  public function doUpdateCustomerStats(Mage_Customer_Model_Customer $customer) {
51
  $stats = Mage::getModel('contactlab_subscribers/stats')
52
  ->getCollection()
@@ -65,7 +70,10 @@ class Contactlab_Subscribers_Helper_Data extends Mage_Core_Helper_Abstract {
65
  return $rv;
66
  }
67
 
68
- /** Add clear statistics task to queue. */
 
 
 
69
  public function addClearStatsQueue() {
70
  return Mage::getModel("contactlab_commons/task")
71
  ->setTaskCode("ClearStatisticsTask")
@@ -124,13 +132,23 @@ class Contactlab_Subscribers_Helper_Data extends Mage_Core_Helper_Abstract {
124
  Mage::helper("contactlab_commons")->flushDbProfiler();
125
  }
126
 
127
- /** Unsubscribe email. */
128
- public function unsubscribe(Contactlab_Commons_Model_Task $task, $email, $uk, $datetime, $logit = false) {
 
 
 
 
 
 
 
129
  if (!empty($uk)) {
130
  // $uk, int value of xml string content, not empty if it's a number > 0
 
131
  $ukModel = Mage::getModel('contactlab_subscribers/uk')->load($uk);
132
  if ($ukModel->hasEntityId() && $ukModel->hasSubscriberId()) {
133
- $model = Mage::getModel("newsletter/subscriber")->load($ukModel->getSubscriberId());
 
 
134
  }
135
  }
136
  // 03/02/2015 - Disabled match by email address
@@ -144,12 +162,11 @@ class Contactlab_Subscribers_Helper_Data extends Mage_Core_Helper_Abstract {
144
  if (!$this->_checkCanUnsubscribe($task, $model, $datetime)) {
145
  return false;
146
  }
147
- $model
148
- ->setStatus(Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED)
149
- ->setLastSubscribedAt(NULL)
150
- ->save();
151
- if ($logit) {
152
- Mage::helper('contactlab_commons')->logTrace("$email has been unsubscribed");
153
  }
154
  return true;
155
  } else {
@@ -160,9 +177,13 @@ class Contactlab_Subscribers_Helper_Data extends Mage_Core_Helper_Abstract {
160
 
161
  /**
162
  * If the subscriber has subscribed after ContactlLab subscription, wont do it!
 
 
 
 
163
  */
164
  private function _checkCanUnsubscribe(Contactlab_Commons_Model_Task $task,
165
- Mage_Newsletter_Model_Subscriber $subscriber,
166
  $datetime) {
167
  if (!$subscriber->isSubscribed()) {
168
  $task->addEvent(sprintf("\"%s\" is already unsubscribed", $subscriber->getEmail()));
@@ -198,10 +219,17 @@ class Contactlab_Subscribers_Helper_Data extends Mage_Core_Helper_Abstract {
198
  return $dtz->getOffset(new DateTime("now", $dtz));
199
  }
200
 
201
- /** Update subscriber status via SOAP.*/
 
 
 
 
 
 
 
202
  public function updateSubscriberStatus($email, $id, $isSubscribed, $storeId, $queue = true) {
203
  if ($this->_skipUnsubscribeSoapCall) {
204
- return;
205
  }
206
  if (!Mage::getStoreConfigFlag("contactlab_subscribers/global/soap_call_set_subscribed", $storeId)) {
207
  return $this;
@@ -209,6 +237,7 @@ class Contactlab_Subscribers_Helper_Data extends Mage_Core_Helper_Abstract {
209
 
210
  try {
211
  Mage::helper("contactlab_commons")->logNotice("updateSubscriberStatus($email, $id, $isSubscribed, $storeId, $queue)");
 
212
  $call = Mage::getModel('contactlab_subscribers/soap_setSubscriptionStatus');
213
  $call->setStoreId($storeId);
214
  $call->setEntityId($id);
@@ -227,6 +256,14 @@ class Contactlab_Subscribers_Helper_Data extends Mage_Core_Helper_Abstract {
227
  return $this;
228
  }
229
 
 
 
 
 
 
 
 
 
230
  private function _doQueueUpdateSubscriberStatus($email, $id, $isSubscribed, $storeId) {
231
  $data = new stdClass();
232
  $data->email = $email;
@@ -270,4 +307,52 @@ class Contactlab_Subscribers_Helper_Data extends Mage_Core_Helper_Abstract {
270
  $this->_skipUnsubscribeSoapCall = true;
271
  }
272
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
273
  }
47
  }
48
  }
49
 
50
+ /**
51
+ * @param Mage_Customer_Model_Customer $customer
52
+ * @return Mage_Core_Model_Abstract|null
53
+ * @throws Exception
54
+ */
55
  public function doUpdateCustomerStats(Mage_Customer_Model_Customer $customer) {
56
  $stats = Mage::getModel('contactlab_subscribers/stats')
57
  ->getCollection()
70
  return $rv;
71
  }
72
 
73
+ /**
74
+ * Add clear statistics task to queue.
75
+ * @return Contactlab_Commons_Model_Task
76
+ */
77
  public function addClearStatsQueue() {
78
  return Mage::getModel("contactlab_commons/task")
79
  ->setTaskCode("ClearStatisticsTask")
132
  Mage::helper("contactlab_commons")->flushDbProfiler();
133
  }
134
 
135
+ /** Unsubscribe email.
136
+ * @param Contactlab_Commons_Model_Task $task
137
+ * @param $email
138
+ * @param $uk
139
+ * @param $datetime
140
+ * @param bool $logIt
141
+ * @return bool
142
+ */
143
+ public function unsubscribe(Contactlab_Commons_Model_Task $task, $email, $uk, $datetime, $logIt = false) {
144
  if (!empty($uk)) {
145
  // $uk, int value of xml string content, not empty if it's a number > 0
146
+ /** @var $ukModel Contactlab_Subscribers_Model_Uk */
147
  $ukModel = Mage::getModel('contactlab_subscribers/uk')->load($uk);
148
  if ($ukModel->hasEntityId() && $ukModel->hasSubscriberId()) {
149
+ /** @var $model Contactlab_Subscribers_Model_Newsletter_Subscriber */
150
+ $model = Mage::getModel("newsletter/subscriber")
151
+ ->load($ukModel->getSubscriberId());
152
  }
153
  }
154
  // 03/02/2015 - Disabled match by email address
162
  if (!$this->_checkCanUnsubscribe($task, $model, $datetime)) {
163
  return false;
164
  }
165
+ $model->setStatus(Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED);
166
+ $model->setLastSubscribedAt(NULL);
167
+ $model->save();
168
+ if ($logIt) {
169
+ Mage::helper('contactlab_commons')->logNotice("$email has been unsubscribed");
 
170
  }
171
  return true;
172
  } else {
177
 
178
  /**
179
  * If the subscriber has subscribed after ContactlLab subscription, wont do it!
180
+ * @param Contactlab_Commons_Model_Task $task
181
+ * @param Contactlab_Subscribers_Model_Newsletter_Subscriber $subscriber
182
+ * @param $datetime
183
+ * @return bool
184
  */
185
  private function _checkCanUnsubscribe(Contactlab_Commons_Model_Task $task,
186
+ Contactlab_Subscribers_Model_Newsletter_Subscriber $subscriber,
187
  $datetime) {
188
  if (!$subscriber->isSubscribed()) {
189
  $task->addEvent(sprintf("\"%s\" is already unsubscribed", $subscriber->getEmail()));
219
  return $dtz->getOffset(new DateTime("now", $dtz));
220
  }
221
 
222
+ /** Update subscriber status via SOAP.
223
+ * @param $email
224
+ * @param $id
225
+ * @param $isSubscribed
226
+ * @param $storeId
227
+ * @param bool $queue
228
+ * @return $this
229
+ */
230
  public function updateSubscriberStatus($email, $id, $isSubscribed, $storeId, $queue = true) {
231
  if ($this->_skipUnsubscribeSoapCall) {
232
+ return $this;
233
  }
234
  if (!Mage::getStoreConfigFlag("contactlab_subscribers/global/soap_call_set_subscribed", $storeId)) {
235
  return $this;
237
 
238
  try {
239
  Mage::helper("contactlab_commons")->logNotice("updateSubscriberStatus($email, $id, $isSubscribed, $storeId, $queue)");
240
+ /** @var $call Contactlab_Subscribers_Model_Soap_SetSubscriptionStatus */
241
  $call = Mage::getModel('contactlab_subscribers/soap_setSubscriptionStatus');
242
  $call->setStoreId($storeId);
243
  $call->setEntityId($id);
256
  return $this;
257
  }
258
 
259
+ /**
260
+ * Queue update subscriber status.
261
+ * @param $email String
262
+ * @param $id int
263
+ * @param $isSubscribed bool
264
+ * @param $storeId int
265
+ * @throws Exception
266
+ */
267
  private function _doQueueUpdateSubscriberStatus($email, $id, $isSubscribed, $storeId) {
268
  $data = new stdClass();
269
  $data->email = $email;
307
  $this->_skipUnsubscribeSoapCall = true;
308
  }
309
 
310
+ /**
311
+ * Send notification email.
312
+ * @param $recipient
313
+ * @return $this
314
+ * @throws Exception
315
+ * @throws Mage_Core_Exception
316
+ */
317
+ public function sendSubscriberEditEmail($recipient)
318
+ {
319
+ if (!Mage::getStoreConfigFlag('contactlab_subscribers/modify_email/enable')) {
320
+ return $this;
321
+ }
322
+ $translate = Mage::getSingleton('core/translate');
323
+
324
+ $translate->setTranslateInline(false);
325
+ $mailTemplate = Mage::getModel('core/email_template');
326
+
327
+ $templateId = Mage::getStoreConfig('contactlab_subscribers/modify_email/send_email_template',
328
+ Mage::app()->getStore()->getId());
329
+ $senderEmail = Mage::getStoreConfig('contactlab_subscribers/modify_email/email_sender');
330
+ $senderName = Mage::getStoreConfig('contactlab_subscribers/modify_email/email_sender_name');
331
+
332
+ /** @var $subscriber Contactlab_Subscribers_Model_Newsletter_Subscriber */
333
+ $subscriber = Mage::getModel('newsletter/subscriber')->load($recipient, 'subscriber_email');
334
+ if (!$subscriber->hasSubscriberConfirmCode()) {
335
+ $subscriber->setSubscriberConfirmCode($subscriber->randomSequence())->save();
336
+ }
337
+ $params = array('id' => $subscriber->getSubscriberId(), 'hash' => $subscriber->getSubscriberConfirmCode());
338
+
339
+ //get the store associated with the subscriber and append it to final URL
340
+ if ($subscriber->hasStoreId()) {
341
+ $store = '?__store=' . Mage::getModel('core/store')->load($subscriber->getStoreId())->getCode();
342
+ } else {
343
+ $store = '';
344
+ }
345
+
346
+ $mailTemplate->sendTransactional(
347
+ $templateId,
348
+ array('name' => $senderName, 'email' => $senderEmail),
349
+ trim($recipient),
350
+ Mage::helper('contactlab_commons')->__('Modify your data'),
351
+ array('url' => Mage::getUrl('contactlab_subscribers/edit', $params) . $store),
352
+ Mage::app()->getStore()->getId()
353
+ );
354
+ $translate->setTranslateInline(true);
355
+
356
+ return $this;
357
+ }
358
  }
app/code/community/Contactlab/Subscribers/Helper/Exporter.php CHANGED
@@ -6,15 +6,24 @@
6
  class Contactlab_Subscribers_Helper_Exporter extends Mage_Core_Helper_Abstract {
7
  private $attributeSource = array();
8
  private $noSourceAttributes = array();
 
 
9
 
10
- /** Decode id attributes. */
11
- public function decode($model, $name, $attributeName, $value) {
 
 
 
 
 
 
12
  $ak = $name . '_' . $attributeName;
13
  if (array_key_exists($ak, $this->noSourceAttributes)) {
14
  return $value;
15
  }
 
16
  if (!array_key_exists($ak, $this->attributeSource)) {
17
- $attribute = $model->getResource()->getAttribute($attributeName);
18
  if ($attribute->getSourceModel()) {
19
  $this->attributeSource[$ak] = $attribute->getSource();
20
  } else {
@@ -28,9 +37,19 @@ class Contactlab_Subscribers_Helper_Exporter extends Mage_Core_Helper_Abstract {
28
  return $this->attributeSource[$ak]->getOptionText($value);
29
  }
30
 
31
- /** Attributes map for customer. */
 
 
 
 
 
32
  public function getAttributesMap(Contactlab_Commons_Model_Task $task) {
33
- return array_merge(array(
 
 
 
 
 
34
  'prefix' => 'prefix',
35
  'firstname' => 'firstname',
36
  'middlename' => 'middlename',
@@ -39,14 +58,49 @@ class Contactlab_Subscribers_Helper_Exporter extends Mage_Core_Helper_Abstract {
39
  'dob' => 'dob',
40
  'gender' => 'gender',
41
  'email' => 'email',
42
- 'created_at' => 'created_at'
43
- ), $this->_getCustomAttributesMap($task));
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
44
  }
45
 
46
- /** Attributes map for addresses. */
 
 
 
 
47
  public function getAddressesAttributesMap() {
48
- return array(
 
 
 
 
 
49
  'country_id' => 'country_id',
 
50
  'region_id' => 'region_id',
51
  'region' => 'region',
52
  'postcode' => 'postcode',
@@ -56,14 +110,35 @@ class Contactlab_Subscribers_Helper_Exporter extends Mage_Core_Helper_Abstract {
56
  'fax' => 'fax',
57
  'company' => 'company',
58
  );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  }
60
 
61
- /** Attributes map for stats. */
 
 
 
 
62
  private function _getCustomAttributesMap(Contactlab_Commons_Model_Task $task) {
63
  $rv = array();
64
  foreach (range(1, 7) as $i) {
65
  if ($task->getConfigFlag("contactlab_subscribers/custom_fields/enable_field_" . $i)) {
66
- $rv['cstm_' . $i] = $task->getConfig("contactlab_subscribers/custom_fields/field_" . $i);
 
 
67
  }
68
  }
69
  return $rv;
@@ -89,8 +164,35 @@ class Contactlab_Subscribers_Helper_Exporter extends Mage_Core_Helper_Abstract {
89
  );
90
  }
91
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
92
 
93
- /** Entity type id from name. */
 
 
 
 
 
 
94
  public function getEntityTypeId($name) {
95
  $types = Mage::getModel("eav/entity_type")->getCollection();
96
  foreach ($types as $type) {
@@ -101,7 +203,11 @@ class Contactlab_Subscribers_Helper_Exporter extends Mage_Core_Helper_Abstract {
101
  return null;
102
  }
103
 
104
- public function fillBackendTypesFromArray($attributes) {
 
 
 
 
105
  $types = array();
106
  foreach ($attributes as $row) {
107
  $backendType = $row->getData('backend_type');
@@ -111,9 +217,14 @@ class Contactlab_Subscribers_Helper_Exporter extends Mage_Core_Helper_Abstract {
111
  $types[$backendType][] = $row->getAttributeId();
112
  }
113
  return $types;
114
- }
115
 
116
- /** Attributes collection for entity type. */
 
 
 
 
 
117
  public function getAttributesForEntityType($entityType, array $attributes) {
118
  return Mage::getModel('eav/entity_attribute')
119
  ->getCollection()
@@ -122,7 +233,11 @@ class Contactlab_Subscribers_Helper_Exporter extends Mage_Core_Helper_Abstract {
122
  ->addFieldToFilter('entity_type_id', $this->getEntityTypeId($entityType));
123
  }
124
 
125
- /** Attributes collection for entity type. */
 
 
 
 
126
  public function getAttributesCodesForEntityType($entityType) {
127
  $rv = array();
128
  foreach (Mage::getModel('eav/entity_attribute')
@@ -133,7 +248,12 @@ class Contactlab_Subscribers_Helper_Exporter extends Mage_Core_Helper_Abstract {
133
  return $rv;
134
  }
135
 
136
- /** Attributes collection for entity type. */
 
 
 
 
 
137
  public function getAttributeId($entityType, $attributeCode) {
138
  foreach (Mage::getModel('eav/entity_attribute')
139
  ->getCollection()
@@ -144,7 +264,10 @@ class Contactlab_Subscribers_Helper_Exporter extends Mage_Core_Helper_Abstract {
144
  return false;
145
  }
146
 
147
- /** Manage export policy data after export success. */
 
 
 
148
  public function saveLastExportDatetime(Contactlab_Commons_Model_Task $task) {
149
  // FIXME diff by store?
150
  $lastExport = Mage::getModel("core/date")->gmtDate();
@@ -159,7 +282,10 @@ class Contactlab_Subscribers_Helper_Exporter extends Mage_Core_Helper_Abstract {
159
  Mage::app()->reinitStores();
160
  }
161
 
162
- /** Calls ContactLab SOAP StartSubscriberDataExchange method. */
 
 
 
163
  public function soapCallAfterExport(Contactlab_Commons_Model_Task $task) {
164
  if ($task->getConfigFlag("contactlab_commons/soap/enable")
165
  && $task->getConfigFlag("contactlab_subscribers/global/soap_call_after_export")) {
6
  class Contactlab_Subscribers_Helper_Exporter extends Mage_Core_Helper_Abstract {
7
  private $attributeSource = array();
8
  private $noSourceAttributes = array();
9
+ protected $attribute_map = array();
10
+ protected $address_attribute_map = array();
11
 
12
+ /** Decode id attributes.
13
+ * @param Mage_Core_Model_Abstract $model
14
+ * @param string $name
15
+ * @param string $attributeName
16
+ * @param string $value
17
+ * @return string
18
+ */
19
+ public function decode(Mage_Core_Model_Abstract $model, $name, $attributeName, $value) {
20
  $ak = $name . '_' . $attributeName;
21
  if (array_key_exists($ak, $this->noSourceAttributes)) {
22
  return $value;
23
  }
24
+ $resource = $model->getResource();
25
  if (!array_key_exists($ak, $this->attributeSource)) {
26
+ $attribute = $resource->getAttribute($attributeName);
27
  if ($attribute->getSourceModel()) {
28
  $this->attributeSource[$ak] = $attribute->getSource();
29
  } else {
37
  return $this->attributeSource[$ak]->getOptionText($value);
38
  }
39
 
40
+ /**
41
+ * Attributes map for customer.
42
+ * Metodo customizzatoper aggiungere l'evento
43
+ * @param Contactlab_Commons_Model_Task $task
44
+ * @return array
45
+ */
46
  public function getAttributesMap(Contactlab_Commons_Model_Task $task) {
47
+ $attribute_map = $this->attribute_map;
48
+ if (!empty($attribute_map)){
49
+ return $attribute_map;
50
+ }
51
+
52
+ $attribute_map = array_merge(array(
53
  'prefix' => 'prefix',
54
  'firstname' => 'firstname',
55
  'middlename' => 'middlename',
58
  'dob' => 'dob',
59
  'gender' => 'gender',
60
  'email' => 'email',
61
+ 'created_at' => 'created_at',
62
+ /**
63
+ * Adding new fields from extended newsletter subscription form
64
+ */
65
+ 'privacy' => 'privacy',
66
+ 'mobilephone' => 'mobilephone',
67
+ 'notes' => 'notes',
68
+ 'custom_1' => 'custom_1',
69
+ 'custom_2' => 'custom_2',
70
+ 'customer_group_id' => 'customer_group_id',
71
+ 'customer_group_name' => 'customer_group_name'
72
+ ), array_merge($this->_getCustomAttributesMap($task)), $this->getStatsAttributesMap());
73
+
74
+ $tMapTransporter = Mage::getModel('contactlab_subscribers/exporter_subscribers_mapTransporter_attribute');
75
+ $tMapTransporter->setMap($attribute_map);
76
+ $tMapTransporter->setIsMod(false);
77
+
78
+ Mage::dispatchEvent("contactlab_export_attributesmap",array(
79
+ 'map_transporter' => $tMapTransporter
80
+ ));
81
+
82
+ if ($tMapTransporter->isMod()){
83
+ $attribute_map = $tMapTransporter->getMap();
84
+ }
85
+ $this->attribute_map = $attribute_map;
86
+
87
+ return $this->attribute_map ;
88
  }
89
 
90
+
91
+ /**
92
+ * Attributes map for addresses.
93
+ * Metodo customizzatoper aggiungere l'evento
94
+ */
95
  public function getAddressesAttributesMap() {
96
+ $address_attribute_map = $this->address_attribute_map;
97
+ if (!empty($address_attribute_map)){
98
+ return $address_attribute_map;
99
+ }
100
+
101
+ $address_attribute_map = array(
102
  'country_id' => 'country_id',
103
+ 'country' => 'country',
104
  'region_id' => 'region_id',
105
  'region' => 'region',
106
  'postcode' => 'postcode',
110
  'fax' => 'fax',
111
  'company' => 'company',
112
  );
113
+
114
+ $tMapTransporter = Mage::getModel('contactlab_subscribers/exporter_subscribers_mapTransporter_address');
115
+ $tMapTransporter->setMap($address_attribute_map);
116
+ $tMapTransporter->setIsMod(false);
117
+
118
+ Mage::dispatchEvent("contactlab_export_AddressesAttributesMap",array(
119
+ 'map_transporter' => $tMapTransporter
120
+ ));
121
+
122
+ if ($tMapTransporter->isMod()){
123
+ $address_attribute_map = $tMapTransporter->getMap();
124
+ }
125
+ $this->address_attribute_map = $address_attribute_map;
126
+
127
+ return $this->address_attribute_map ;
128
  }
129
 
130
+ /**
131
+ * Attributes map for stats.
132
+ * @param Contactlab_Commons_Model_Task $task
133
+ * @return array
134
+ */
135
  private function _getCustomAttributesMap(Contactlab_Commons_Model_Task $task) {
136
  $rv = array();
137
  foreach (range(1, 7) as $i) {
138
  if ($task->getConfigFlag("contactlab_subscribers/custom_fields/enable_field_" . $i)) {
139
+ // $rv['cstm_' . $i] = $task->getConfig("contactlab_subscribers/custom_fields/field_" . $i);
140
+ // Array is flipped
141
+ $rv[$task->getConfig("contactlab_subscribers/custom_fields/field_" . $i)] = 'cstm_' . $i;
142
  }
143
  }
144
  return $rv;
164
  );
165
  }
166
 
167
+ /**
168
+ * Map new subscriber fields names to customer attribute names
169
+ */
170
+ public function getSubscriberToCustomerAttributeMap() {
171
+ return array(
172
+ 'first_name' => 'firstname',
173
+ 'last_name' => 'lastname',
174
+ 'company' => 'billing_company',
175
+ 'gender' => 'gender',
176
+ 'dob' => 'dob',
177
+ 'privacy_accepted' => 'privacy',
178
+ 'country' => 'billing_country',
179
+ 'city' => 'billing_city',
180
+ 'address' => 'billing_street',
181
+ 'zip_code' => 'billing_postcode',
182
+ 'phone' => 'billing_telephone',
183
+ 'cell_phone' => 'mobilephone',
184
+ 'notes' => 'notes',
185
+ 'custom_1' => 'custom_1',
186
+ 'custom_2' => 'custom_2'
187
+ );
188
 
189
+ }
190
+
191
+ /**
192
+ * Entity type id from name.
193
+ * @param $name
194
+ * @return null|string
195
+ */
196
  public function getEntityTypeId($name) {
197
  $types = Mage::getModel("eav/entity_type")->getCollection();
198
  foreach ($types as $type) {
203
  return null;
204
  }
205
 
206
+ /**
207
+ * @param Mage_Eav_Model_Resource_Entity_Attribute_Collection $attributes
208
+ * @return array
209
+ */
210
+ public function fillBackendTypesFromArray(Mage_Eav_Model_Resource_Entity_Attribute_Collection $attributes) {
211
  $types = array();
212
  foreach ($attributes as $row) {
213
  $backendType = $row->getData('backend_type');
217
  $types[$backendType][] = $row->getAttributeId();
218
  }
219
  return $types;
220
+ }
221
 
222
+ /**
223
+ * Attributes collection for entity type.
224
+ * @param $entityType
225
+ * @param array $attributes
226
+ * @return Mage_Eav_Model_Resource_Entity_Attribute_Collection
227
+ */
228
  public function getAttributesForEntityType($entityType, array $attributes) {
229
  return Mage::getModel('eav/entity_attribute')
230
  ->getCollection()
233
  ->addFieldToFilter('entity_type_id', $this->getEntityTypeId($entityType));
234
  }
235
 
236
+ /**
237
+ * Attributes collection for entity type.
238
+ * @param $entityType
239
+ * @return array
240
+ */
241
  public function getAttributesCodesForEntityType($entityType) {
242
  $rv = array();
243
  foreach (Mage::getModel('eav/entity_attribute')
248
  return $rv;
249
  }
250
 
251
+ /**
252
+ * Attributes collection for entity type.
253
+ * @param $entityType
254
+ * @param $attributeCode
255
+ * @return bool|int|null
256
+ */
257
  public function getAttributeId($entityType, $attributeCode) {
258
  foreach (Mage::getModel('eav/entity_attribute')
259
  ->getCollection()
264
  return false;
265
  }
266
 
267
+ /**
268
+ * Manage export policy data after export success.
269
+ * @param Contactlab_Commons_Model_Task $task
270
+ */
271
  public function saveLastExportDatetime(Contactlab_Commons_Model_Task $task) {
272
  // FIXME diff by store?
273
  $lastExport = Mage::getModel("core/date")->gmtDate();
282
  Mage::app()->reinitStores();
283
  }
284
 
285
+ /**
286
+ * Calls ContactLab SOAP StartSubscriberDataExchange method.
287
+ * @param Contactlab_Commons_Model_Task $task
288
+ */
289
  public function soapCallAfterExport(Contactlab_Commons_Model_Task $task) {
290
  if ($task->getConfigFlag("contactlab_commons/soap/enable")
291
  && $task->getConfigFlag("contactlab_subscribers/global/soap_call_after_export")) {
app/code/community/Contactlab/Subscribers/Helper/Uk.php CHANGED
@@ -1,46 +1,61 @@
1
  <?php
2
 
3
  /**
4
- * Uk manager.
5
  */
6
- class Contactlab_Subscribers_Helper_Uk extends Mage_Core_Helper_Abstract {
 
7
  /**
8
- *
9
- * @param numeric $customerId
10
- * @param numeric $subscriberId
11
  * @return void
12
  */
13
  public function update($customerId, $subscriberId) {
14
- if (is_null($customerId) && is_null($subscriberId)) {
15
- return;
16
- }
17
- if (is_null($subscriberId)) {
18
- $subscriberId = $this->_getSubscriberIdFromCustomerId($customerId);
19
- }
20
- if (is_null($subscriberId)) {
21
- // Not subscriber customer
22
- if (!$this->_exists('customer_id', $customerId)) {
23
- $this->_insertSubscriberIdCustomerId(NULL, $customerId);
24
  }
25
- } else if (is_null($customerId)) {
26
- // Subscriber not customer
27
- if (!$this->_exists('subscriber_id', $subscriberId)) {
28
- $this->_insertSubscriberIdCustomerId($subscriberId, NULL);
29
  }
30
- } else {
31
- // Subscriber customer
32
- if (!$this->_updateCustomerIdFromSubscriberId($subscriberId, $customerId)) {
33
- if (!$this->_updateSubscriberIdFromCustomerId($customerId, $subscriberId)) {
34
- $this->_insertSubscriberIdCustomerId($subscriberId, $customerId);
 
 
 
 
 
 
 
 
 
 
 
35
  }
36
  }
 
 
37
  }
38
  }
39
 
 
 
 
 
 
40
  public function searchByCustomerId($id) {
41
  return $this->_search('customer_id', $id);
42
  }
43
 
 
 
 
 
 
44
  public function searchBySubscriberId($id) {
45
  return $this->_search('subscriber_id', $id);
46
  }
@@ -50,21 +65,49 @@ class Contactlab_Subscribers_Helper_Uk extends Mage_Core_Helper_Abstract {
50
  Mage::getModel("contactlab_subscribers/uk")->purge();
51
  }
52
 
 
 
 
 
 
 
53
  private final function _search($column, $id) {
54
  $model = Mage::getModel("contactlab_subscribers/uk")->load($id, $column);
55
- return $model->hasEntityId() ? $model : FALSE;
56
  }
57
 
 
 
 
 
 
 
58
  private final function _exists($column, $id) {
59
- return $this->_search($column, $id) ? TRUE : FALSE;
60
  }
61
 
 
 
 
 
 
 
 
62
  private final function _insertSubscriberIdCustomerId($subscriberId, $customerId) {
 
63
  $model = Mage::getModel("contactlab_subscribers/uk");
64
  return $model->setCustomerId($customerId)->setSubscriberId($subscriberId)->save();
65
  }
66
 
 
 
 
 
 
 
 
67
  private final function _updateSubscriberIdFromCustomerId($customerId, $subscriberId) {
 
68
  $model = Mage::getModel("contactlab_subscribers/uk")->load($customerId, 'customer_id');
69
  if (!$model->hasEntityId()) {
70
  return false;
@@ -72,6 +115,13 @@ class Contactlab_Subscribers_Helper_Uk extends Mage_Core_Helper_Abstract {
72
  return $model->setSubscriberId($subscriberId)->save();
73
  }
74
 
 
 
 
 
 
 
 
75
  private final function _updateCustomerIdFromSubscriberId($subscriberId, $customerId) {
76
  $model = Mage::getModel("contactlab_subscribers/uk")->load($subscriberId, 'subscriber_id');
77
  if (!$model->hasEntityId()) {
@@ -86,9 +136,14 @@ class Contactlab_Subscribers_Helper_Uk extends Mage_Core_Helper_Abstract {
86
  return $rv;
87
  }
88
 
89
-
 
 
 
 
90
  private function _getSubscriberIdFromCustomerId($customerId) {
91
  $customer = Mage::getModel("customer/customer")->load($customerId);
 
92
  $subscriber = Mage::getModel("newsletter/subscriber")->loadByCustomer($customer);
93
  return $subscriber->hasSubscriberId() ? $subscriber->getSubscriberId() : NULL;
94
  }
@@ -96,6 +151,8 @@ class Contactlab_Subscribers_Helper_Uk extends Mage_Core_Helper_Abstract {
96
  /**
97
  * Update all.
98
  * @param boolean $doIt
 
 
99
  */
100
  public function updateAll($doIt, Contactlab_Commons_Model_Task $task = null) {
101
  /* @var $model Contactlab_Subscribers_Model_Uk */
@@ -107,17 +164,20 @@ class Contactlab_Subscribers_Helper_Uk extends Mage_Core_Helper_Abstract {
107
  return !$model->getHasNotices();
108
  }
109
 
110
- /** Add update uk task. */
 
 
111
  public function addUpdateUkTask() {
112
  return Mage::getModel("contactlab_commons/task")
113
- ->setTaskCode("UpdateUkTask")
114
- ->setModelName('contactlab_subscribers/task_updateUkRunner')
115
- ->setDescription('Update uk table')
116
- ->save();
117
  }
118
 
119
  /**
120
  * Truncate table
 
121
  */
122
  public function truncate(Contactlab_Commons_Model_Task $task = null) {
123
  /* @var $model Contactlab_Subscribers_Model_Uk */
@@ -131,10 +191,20 @@ class Contactlab_Subscribers_Helper_Uk extends Mage_Core_Helper_Abstract {
131
  /** Add truncate uk task. */
132
  public function addTruncateUkTask() {
133
  return Mage::getModel("contactlab_commons/task")
134
- ->setTaskCode("TruncateUkTask")
135
- ->setModelName('contactlab_subscribers/task_truncateUkRunner')
136
- ->setDescription('Truncate uk table')
137
- ->save();
138
  }
139
 
 
 
 
 
 
 
 
 
 
 
140
  }
1
  <?php
2
 
3
  /**
4
+ * Uk manager helper.
5
  */
6
+ class Contactlab_Subscribers_Helper_Uk extends Mage_Core_Helper_Abstract
7
+ {
8
  /**
9
+ * Update keys.
10
+ * @param int $customerId
11
+ * @param int $subscriberId
12
  * @return void
13
  */
14
  public function update($customerId, $subscriberId) {
15
+ try {
16
+ if (is_null($customerId) && is_null($subscriberId)) {
17
+ return;
 
 
 
 
 
 
 
18
  }
19
+ if (is_null($subscriberId)) {
20
+ $subscriberId = $this->_getSubscriberIdFromCustomerId($customerId);
 
 
21
  }
22
+ if (is_null($subscriberId)) {
23
+ // Not subscriber customer
24
+ if (!$this->_exists('customer_id', $customerId)) {
25
+ $this->_insertSubscriberIdCustomerId(NULL, $customerId);
26
+ }
27
+ } else if (is_null($customerId)) {
28
+ // Subscriber not customer
29
+ if (!$this->_exists('subscriber_id', $subscriberId)) {
30
+ $this->_insertSubscriberIdCustomerId($subscriberId, NULL);
31
+ }
32
+ } else {
33
+ // Subscriber customer
34
+ if (!$this->_updateCustomerIdFromSubscriberId($subscriberId, $customerId)) {
35
+ if (!$this->_updateSubscriberIdFromCustomerId($customerId, $subscriberId)) {
36
+ $this->_insertSubscriberIdCustomerId($subscriberId, $customerId);
37
+ }
38
  }
39
  }
40
+ } catch (Exception $e) {
41
+ $this->_reportException($e);
42
  }
43
  }
44
 
45
+ /**
46
+ * Search by customer id.
47
+ * @param int $id
48
+ * @return bool|Contactlab_Subscribers_Model_Uk
49
+ */
50
  public function searchByCustomerId($id) {
51
  return $this->_search('customer_id', $id);
52
  }
53
 
54
+ /**
55
+ * Search by subscriber id.
56
+ * @param int $id
57
+ * @return bool|Contactlab_Subscribers_Model_Uk
58
+ */
59
  public function searchBySubscriberId($id) {
60
  return $this->_search('subscriber_id', $id);
61
  }
65
  Mage::getModel("contactlab_subscribers/uk")->purge();
66
  }
67
 
68
+ /**
69
+ * Search record.
70
+ * @param string $column
71
+ * @param int $id
72
+ * @return bool|Contactlab_Subscribers_Model_Uk
73
+ */
74
  private final function _search($column, $id) {
75
  $model = Mage::getModel("contactlab_subscribers/uk")->load($id, $column);
76
+ return $model->hasEntityId() ? $model : false;
77
  }
78
 
79
+ /**
80
+ * Does the record exist?
81
+ * @param string $column
82
+ * @param int $id
83
+ * @return bool
84
+ */
85
  private final function _exists($column, $id) {
86
+ return $this->_search($column, $id) ? true : false;
87
  }
88
 
89
+ /**
90
+ * Insert subscriber id and customer id.
91
+ * @param int $subscriberId
92
+ * @param int $customerId
93
+ * @return Mage_Core_Model_Abstract
94
+ * @throws Exception
95
+ */
96
  private final function _insertSubscriberIdCustomerId($subscriberId, $customerId) {
97
+ /** @var $model Contactlab_Subscribers_Model_Uk */
98
  $model = Mage::getModel("contactlab_subscribers/uk");
99
  return $model->setCustomerId($customerId)->setSubscriberId($subscriberId)->save();
100
  }
101
 
102
+ /**
103
+ * Update subscriber id from customer id.
104
+ * @param int $customerId
105
+ * @param int $subscriberId
106
+ * @return bool|Mage_Core_Model_Abstract
107
+ * @throws Exception
108
+ */
109
  private final function _updateSubscriberIdFromCustomerId($customerId, $subscriberId) {
110
+ /** @var $model Contactlab_Subscribers_Model_Uk */
111
  $model = Mage::getModel("contactlab_subscribers/uk")->load($customerId, 'customer_id');
112
  if (!$model->hasEntityId()) {
113
  return false;
115
  return $model->setSubscriberId($subscriberId)->save();
116
  }
117
 
118
+ /**
119
+ * Update customer id from subscriber id.
120
+ * @param int $subscriberId
121
+ * @param int $customerId
122
+ * @return bool|Contactlab_Subscribers_Model_Uk|Mage_Core_Model_Abstract
123
+ * @throws Exception
124
+ */
125
  private final function _updateCustomerIdFromSubscriberId($subscriberId, $customerId) {
126
  $model = Mage::getModel("contactlab_subscribers/uk")->load($subscriberId, 'subscriber_id');
127
  if (!$model->hasEntityId()) {
136
  return $rv;
137
  }
138
 
139
+ /**
140
+ * Get subscriber id from customer id.
141
+ * @param int $customerId
142
+ * @return int|null
143
+ */
144
  private function _getSubscriberIdFromCustomerId($customerId) {
145
  $customer = Mage::getModel("customer/customer")->load($customerId);
146
+ /* @var $subscriber Contactlab_Subscribers_Model_Newsletter_Subscriber */
147
  $subscriber = Mage::getModel("newsletter/subscriber")->loadByCustomer($customer);
148
  return $subscriber->hasSubscriberId() ? $subscriber->getSubscriberId() : NULL;
149
  }
151
  /**
152
  * Update all.
153
  * @param boolean $doIt
154
+ * @param Contactlab_Commons_Model_Task $task
155
+ * @return bool
156
  */
157
  public function updateAll($doIt, Contactlab_Commons_Model_Task $task = null) {
158
  /* @var $model Contactlab_Subscribers_Model_Uk */
164
  return !$model->getHasNotices();
165
  }
166
 
167
+ /**
168
+ * Add update uk task.
169
+ */
170
  public function addUpdateUkTask() {
171
  return Mage::getModel("contactlab_commons/task")
172
+ ->setTaskCode("UpdateUkTask")
173
+ ->setModelName('contactlab_subscribers/task_updateUkRunner')
174
+ ->setDescription('Update uk table')
175
+ ->save();
176
  }
177
 
178
  /**
179
  * Truncate table
180
+ * @param Contactlab_Commons_Model_Task $task
181
  */
182
  public function truncate(Contactlab_Commons_Model_Task $task = null) {
183
  /* @var $model Contactlab_Subscribers_Model_Uk */
191
  /** Add truncate uk task. */
192
  public function addTruncateUkTask() {
193
  return Mage::getModel("contactlab_commons/task")
194
+ ->setTaskCode("TruncateUkTask")
195
+ ->setModelName('contactlab_subscribers/task_truncateUkRunner')
196
+ ->setDescription('Truncate uk table')
197
+ ->save();
198
  }
199
 
200
+ /**
201
+ * Report exception.
202
+ * @param Exception $exception
203
+ */
204
+ private function _reportException(Exception $exception) {
205
+ Mage::logException($exception);
206
+ $v = $exception->getMessage() . " - " . $exception->getTraceAsString();
207
+ Mage::helper('contactlab_commons')->logCrit($v);
208
+ Mage::helper('contactlab_commons')->addCriticalMessage($v);
209
+ }
210
  }
app/code/community/Contactlab/Subscribers/Model/Checks/AbstractCheck.php ADDED
@@ -0,0 +1,157 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ abstract class Contactlab_Subscribers_Model_Checks_AbstractCheck
4
+ extends Mage_Core_Model_Abstract
5
+ implements Contactlab_Subscribers_Model_Checks_CheckInterface
6
+ {
7
+ private $_success = array();
8
+ private $_error = array();
9
+
10
+ /**
11
+ * Start check.
12
+ * @return String
13
+ */
14
+ public function check() {
15
+ $exitCode = $this->doCheck();
16
+ $this->setExitCode($exitCode);
17
+ return $exitCode;
18
+ }
19
+
20
+ /**
21
+ * Get Name.
22
+ * @return string
23
+ */
24
+ function getName()
25
+ {
26
+ return get_class($this);
27
+ }
28
+
29
+ /**
30
+ * Start check.
31
+ * @return String
32
+ */
33
+ protected abstract function doCheck();
34
+
35
+ /**
36
+ * @return mixed
37
+ */
38
+ public function getExitCode()
39
+ {
40
+ return parent::getData('exit_code');
41
+ }
42
+
43
+ /**
44
+ * @param mixed $exitCode
45
+ * @return Varien_Object
46
+ */
47
+ public function setExitCode($exitCode)
48
+ {
49
+ return parent::setData('exit_code', $exitCode);
50
+ }
51
+
52
+ /**
53
+ * @param string $value
54
+ * @return mixed
55
+ */
56
+ protected function success($value)
57
+ {
58
+ $this->_addSuccess($value);
59
+ return self::SUCCESS;
60
+ }
61
+
62
+ /**
63
+ * @param string $value
64
+ * @return mixed
65
+ */
66
+ protected function error($value)
67
+ {
68
+ Mage::logException(new Zend_Exception($value));
69
+ $this->_addError($value);
70
+ return self::ERROR;
71
+ }
72
+
73
+ /**
74
+ * Table name with prefix.
75
+ * @param $string
76
+ * @return string
77
+ */
78
+ protected function _getTableName($string)
79
+ {
80
+ return Mage::getModel('core/resource')->getTableName($string);
81
+ }
82
+
83
+ /**
84
+ * Get sql result.
85
+ * @param $sql
86
+ * @return int
87
+ * @throws Zend_Exception
88
+ */
89
+ protected function _getSqlResult($sql)
90
+ {
91
+ /** @var $conn Varien_Db_Adapter_Pdo_Mysql */
92
+ $conn = Mage::getModel('core/resource')->getConnection('read');
93
+ /** @var $stmt PDOStatement */
94
+ $stmt = $conn->prepare($sql);
95
+ /** @noinspection PhpUndefinedVariableInspection */
96
+ $stmt->bindColumn('c', $count);
97
+ $stmt->execute();
98
+ $stmt->fetch();
99
+ $stmt->closeCursor();
100
+
101
+ return $count;
102
+ }
103
+
104
+ /**
105
+ * Add success row.
106
+ * @param String $value
107
+ */
108
+ private function _addSuccess($value)
109
+ {
110
+ $this->_success[] = $value;
111
+ }
112
+
113
+ /**
114
+ * Add error row.
115
+ * @param String $value
116
+ */
117
+ private function _addError($value)
118
+ {
119
+ $this->_error[] = $value;
120
+ }
121
+
122
+ /**
123
+ * Get error messages.
124
+ * @return array
125
+ */
126
+ public function getErrors()
127
+ {
128
+ return $this->_error;
129
+ }
130
+
131
+ /**
132
+ * Get success messages.
133
+ * @return array
134
+ */
135
+ public function getSuccess()
136
+ {
137
+ return $this->_success;
138
+ }
139
+
140
+ /**
141
+ * Is essential check.
142
+ * @return bool
143
+ */
144
+ public function isEssential()
145
+ {
146
+ return false;
147
+ }
148
+
149
+ /**
150
+ * Should the check fail in test mode?
151
+ * @return bool
152
+ */
153
+ public function shouldFailInTest() {
154
+ return false;
155
+ }
156
+
157
+ }
app/code/community/Contactlab/Subscribers/Model/Checks/CheckInterface.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ interface Contactlab_Subscribers_Model_Checks_CheckInterface
4
+ {
5
+ const SUCCESS = "Ok";
6
+ const ERROR = "Error";
7
+
8
+ /**
9
+ * Do Check.
10
+ * @return int
11
+ */
12
+ public function check();
13
+
14
+ /**
15
+ * Get name.
16
+ * @return String
17
+ */
18
+ public function getName();
19
+
20
+ /**
21
+ * Get code.
22
+ * @return String
23
+ */
24
+ public function getCode();
25
+
26
+ /**
27
+ * Get description.
28
+ * @return String
29
+ */
30
+ public function getDescription();
31
+
32
+ /**
33
+ * Get Exit Code.
34
+ * @return String
35
+ */
36
+ public function getExitCode();
37
+
38
+ /**
39
+ * Get position.
40
+ * @return int
41
+ */
42
+ public function getPosition();
43
+
44
+ /**
45
+ * Get error array.
46
+ * @return array
47
+ */
48
+ public function getErrors();
49
+
50
+ /**
51
+ * Get success array.
52
+ * @return array
53
+ */
54
+ public function getSuccess();
55
+
56
+ /**
57
+ * Is an essential check
58
+ * @return boolean
59
+ */
60
+ public function isEssential();
61
+
62
+ /**
63
+ * Should the check fail in test mode?
64
+ * @return bool
65
+ */
66
+ public function shouldFailInTest();
67
+ }
app/code/community/Contactlab/Subscribers/Model/Checks/ContactlabAuthApiKeyCheck.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Subscribers_Model_Checks_ContactlabAuthApiKeyCheck
4
+ extends Contactlab_Subscribers_Model_Checks_AbstractCheck
5
+ {
6
+
7
+ /**
8
+ * Do check.
9
+ */
10
+ protected function doCheck()
11
+ {
12
+ $key = Mage::getStoreConfig('contactlab_template/queue/auth_api_key');
13
+ if (empty($key)) {
14
+ return $this->error("No auth_api_key specified");
15
+ } else {
16
+ return $this->success("auth_api_key specified");
17
+ }
18
+ }
19
+
20
+ /**
21
+ * Get Check code.
22
+ * @return string
23
+ */
24
+ function getCode()
25
+ {
26
+ return "auth-api-key";
27
+ }
28
+
29
+ /**
30
+ * Get description.
31
+ * @return string
32
+ */
33
+ function getDescription()
34
+ {
35
+ return "Check auth_api_key";
36
+ }
37
+
38
+ /**
39
+ * Get position.
40
+ * @return int
41
+ */
42
+ public function getPosition()
43
+ {
44
+ return 200;
45
+ }
46
+
47
+ /**
48
+ * Is essential check.
49
+ * @return bool
50
+ */
51
+ public function isEssential()
52
+ {
53
+ return true;
54
+ }
55
+
56
+
57
+ /**
58
+ * Should the check fail in test mode?
59
+ * @return bool
60
+ */
61
+ public function shouldFailInTest()
62
+ {
63
+ return true;
64
+ }
65
+ }
app/code/community/Contactlab/Subscribers/Model/Checks/FindDuplicatedCustomersCheck.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class FindDuplicatedCustomersCheck
5
+ */
6
+ class Contactlab_Subscribers_Model_Checks_FindDuplicatedCustomersCheck extends Contactlab_Subscribers_Model_Checks_AbstractCheck
7
+ {
8
+ private $count;
9
+
10
+ /**
11
+ * Do check.
12
+ */
13
+ protected function doCheck()
14
+ {
15
+ $count = $this->getCount();
16
+ $this->count = $count;
17
+ if ($count > 0) {
18
+ //return $this->error(sprintf("Duplicate customers in newsletter subscribers: %d", $count));
19
+ Mage::helper('contactlab_commons')->logCrit(sprintf("Duplicate customers in newsletter subscribers: %d", $count));
20
+ return $this->success(sprintf("Skipped %d duplicate customers in newsletter subscribers", $count));
21
+ } else {
22
+ return $this->success("No duplicate customers in newsletter subscribers");
23
+ }
24
+ }
25
+
26
+ /**
27
+ * Get Check code.
28
+ * @return string
29
+ */
30
+ function getCode()
31
+ {
32
+ return "duplicated-customers-count";
33
+ }
34
+
35
+ /**
36
+ * Get description.
37
+ * @return string
38
+ */
39
+ function getDescription()
40
+ {
41
+ return "Find duplicate customers check";
42
+ }
43
+
44
+ /**
45
+ * Get customer count.
46
+ * @return int
47
+ */
48
+ private function getCount()
49
+ {
50
+ $sql = sprintf("select count(1) as c from (select customer_id, count(1) from %s where customer_id != 0 group by customer_id having count(1) > 1) t;", $this->_getTableName('newsletter_subscriber'));
51
+ return $this->_getSqlResult($sql);
52
+ }
53
+
54
+ /**
55
+ * Get position.
56
+ * @return int
57
+ */
58
+ public function getPosition()
59
+ {
60
+ return 130;
61
+ }
62
+
63
+ /**
64
+ * Is essential check.
65
+ * @return bool
66
+ */
67
+ public function isEssential()
68
+ {
69
+ return true;
70
+ }
71
+ }
app/code/community/Contactlab/Subscribers/Model/Checks/FindInvalidCustomersCheck.php ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class FindInvalidCustomersCheck
5
+ */
6
+ class Contactlab_Subscribers_Model_Checks_FindInvalidCustomersCheck
7
+ extends Contactlab_Subscribers_Model_Checks_AbstractCheck
8
+ {
9
+ private $count;
10
+
11
+ /**
12
+ * Do check.
13
+ */
14
+ protected function doCheck()
15
+ {
16
+ $count = $this->getCount();
17
+ $this->count = $count;
18
+ if ($count > 0) {
19
+ return $this->error(sprintf("Non-valid customers in newsletter subscribers: %d", $count));
20
+ } else {
21
+ return $this->success("No non-valid customers in newsletter subscribers");
22
+ }
23
+ }
24
+
25
+ /**
26
+ * Get Check code.
27
+ * @return string
28
+ */
29
+ function getCode()
30
+ {
31
+ return "invalid-customer-count";
32
+ }
33
+
34
+ /**
35
+ * Get description.
36
+ * @return string
37
+ */
38
+ function getDescription()
39
+ {
40
+ return "Find non-valid customers check";
41
+ }
42
+
43
+ /**
44
+ * Need Database?
45
+ * @return bool
46
+ */
47
+ public function needDatabase()
48
+ {
49
+ return true;
50
+ }
51
+
52
+ /**
53
+ * Get customer count.
54
+ * @return int
55
+ */
56
+ private function getCount()
57
+ {
58
+ $sql = sprintf("select count(1) as c from %s where customer_id != 0 and customer_id not in (select entity_id from %s);",
59
+ $this->_getTableName('newsletter_subscriber'),
60
+ $this->_getTableName('customer_entity'));
61
+ return $this->_getSqlResult($sql);
62
+ }
63
+
64
+ /**
65
+ * Get position.
66
+ * @return int
67
+ */
68
+ public function getPosition()
69
+ {
70
+ return 140;
71
+ }
72
+
73
+ /**
74
+ * Get log data to send.
75
+ * @return int
76
+ */
77
+ public function getLogData()
78
+ {
79
+ return $this->count;
80
+ }
81
+
82
+ /**
83
+ * Do send log data.
84
+ * @return bool
85
+ */
86
+ public function doSendLogData()
87
+ {
88
+ return true;
89
+ }
90
+
91
+ /**
92
+ * Is essential check.
93
+ * @return bool
94
+ */
95
+ public function isEssential()
96
+ {
97
+ return false;
98
+ }
99
+ }
app/code/community/Contactlab/Subscribers/Model/Checks/RewritesCheck.php ADDED
@@ -0,0 +1,228 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class RewritesCheck.
5
+ */
6
+ class Contactlab_Subscribers_Model_Checks_RewritesCheck extends Contactlab_Subscribers_Model_Checks_AbstractCheck
7
+ {
8
+ /**
9
+ * Do check.
10
+ */
11
+ protected function doCheck()
12
+ {
13
+ $this->_checkRewrites();
14
+ return self::SUCCESS;
15
+ }
16
+
17
+ /**
18
+ * Get Check code.
19
+ * @return string
20
+ */
21
+ function getCode()
22
+ {
23
+ return "rewrites";
24
+ }
25
+
26
+ /**
27
+ * Get description.
28
+ * @return string
29
+ */
30
+ function getDescription()
31
+ {
32
+ return "Check magento rewrites";
33
+ }
34
+
35
+ /**
36
+ * Check rewrite for all modules.
37
+ */
38
+ private function _checkRewrites()
39
+ {
40
+ foreach (array("Commons", "Subscribers", "Template", "Transactional") as $module) {
41
+ $this->_checkRewritesFor($module);
42
+ }
43
+ }
44
+
45
+ /**
46
+ * Check rewrite for the module.
47
+ * @param $module
48
+ */
49
+ private function _checkRewritesFor($module)
50
+ {
51
+ $branch = $this->getGitBranch();
52
+ $base = $this->getGitBase();
53
+ $url = sprintf("%s/%s/app/code/community/Contactlab/%s/etc/config.xml", $base, $branch, $module);
54
+ $configXml = simplexml_load_file($url);
55
+ $this->_checkRewritesForConfig($configXml);
56
+ }
57
+
58
+ private function _checkRewritesForConfig(SimpleXMLElement $configXml)
59
+ {
60
+ $this->_checkRewritesForModels($configXml->global->models);
61
+ $this->_checkRewritesForBlocks($configXml->global->blocks);
62
+ }
63
+
64
+ /**
65
+ * @param SimpleXMLElement $models
66
+ */
67
+ private function _checkRewritesForModels(SimpleXMLElement $models)
68
+ {
69
+ $rewrites = $this->_getRewrites($models);
70
+ foreach ($rewrites['default'] as $rewrite) {
71
+ $this->_checkRewritesForModel($rewrite);
72
+ }
73
+ foreach ($rewrites['resources'] as $rewrite) {
74
+ $this->_checkRewritesForResource($rewrite);
75
+ }
76
+ }
77
+
78
+ /**
79
+ * Check rewrite for blocks.
80
+ * @param SimpleXMLElement $blocks
81
+ */
82
+ private function _checkRewritesForBlocks(SimpleXMLElement $blocks)
83
+ {
84
+ $rewrites = $this->_getRewrites($blocks);
85
+ foreach ($rewrites['default'] as $rewrite) {
86
+ $this->_checkRewritesForBlock($rewrite);
87
+ }
88
+ }
89
+
90
+ /**
91
+ * Get Rewrites.
92
+ * @param SimpleXMLElement $parent
93
+ * @return array
94
+ */
95
+ private function _getRewrites(SimpleXMLElement $parent)
96
+ {
97
+ $rv = array("default" => array(), "resources" => array());
98
+
99
+ if (!$parent) {
100
+ return $rv;
101
+ }
102
+ /** @var SimpleXMLElement $model */
103
+ foreach ($parent->children() as $model) {
104
+ if ($model->rewrite->count()) {
105
+ $module = (string) $model->getName();
106
+ foreach ($model->rewrite->children() as $rewrite) {
107
+ $class = (string) $rewrite->getName();
108
+ if (preg_match('|resource$|', $module)) {
109
+ $m = preg_replace("|_resource$|", "", $module);
110
+ $rv['resources'][] = "{$m}/{$class}";
111
+ } else {
112
+ $rv['default'][] = "{$module}/{$class}";
113
+ }
114
+ }
115
+ }
116
+ }
117
+ return $rv;
118
+ }
119
+
120
+ /**
121
+ * Get rewrite for models.
122
+ * @param $rewrite Sting
123
+ */
124
+ private function _checkRewritesForModel($rewrite)
125
+ {
126
+ $modelName = Mage::app()->getConfig()->getModelClassName($rewrite);
127
+ $this->_checkClass("Model", $modelName, $rewrite);
128
+ }
129
+
130
+ /**
131
+ * Get rewrite for models resources.
132
+ * @param $rewrite String
133
+ */
134
+ private function _checkRewritesForResource($rewrite)
135
+ {
136
+ $modelName = Mage::app()->getConfig()->getResourceModelClassName($rewrite);
137
+ $this->_checkClass("Resource", $modelName, $rewrite);
138
+ }
139
+
140
+ /**
141
+ * Get rewrite for blocks.
142
+ * @param $rewrite String
143
+ */
144
+ private function _checkRewritesForBlock($rewrite)
145
+ {
146
+ $block = Mage::app()->getConfig()->getBlockClassName($rewrite);
147
+ $this->_checkClass("Block", $block, $rewrite);
148
+ }
149
+
150
+ /**
151
+ * Check the class
152
+ * @param $type String
153
+ * @param $className String
154
+ * @param $name String
155
+ */
156
+ private function _checkClass($type, $className, $name)
157
+ {
158
+ if (preg_match('|^Contactlab|', $className)) {
159
+ $this->success("Module installed: $name $type is $className");
160
+ } else if (preg_match('|^Mage_|', $className)) {
161
+ if ($this->_hasLocalFallback($className)) {
162
+ $this->error("Core class has local fallback: $name $type is $className");
163
+ } else if ($this->_hasCommunityFallback($className)) {
164
+ $this->error("Core class has community fallback: $name $type is $className");
165
+ } else {
166
+ $this->success("Core class: $name $type is $className");
167
+ }
168
+ } else {
169
+ $this->error("Rewrite problem: $name $type is $className");
170
+ }
171
+ }
172
+
173
+ /**
174
+ * Has Local Fallback?
175
+ * @param $className String
176
+ * @return bool
177
+ */
178
+ private function _hasLocalFallback($className)
179
+ {
180
+ return $this->_hasFallback('local', $className);
181
+ }
182
+
183
+ /**
184
+ * Has Community Fallback?
185
+ * @param $className String
186
+ * @return bool
187
+ */
188
+ private function _hasCommunityFallback($className)
189
+ {
190
+ return $this->_hasFallback('community', $className);
191
+ }
192
+
193
+ /**
194
+ * Has fallback?
195
+ * @param $pool String
196
+ * @param $className String
197
+ * @return bool
198
+ */
199
+ private function _hasFallback($pool, $className)
200
+ {
201
+ $base = Mage::getBaseDir();
202
+ $filename = sprintf("%s/app/code/%s/%s.php", $base, $pool, str_replace('_', '/', $className));
203
+ return is_file($filename);
204
+ }
205
+
206
+ /**
207
+ * Get position.
208
+ * @return int
209
+ */
210
+ public function getPosition()
211
+ {
212
+ return 170;
213
+ }
214
+
215
+ /**
216
+ * Git branch.
217
+ * @return string
218
+ */
219
+ public function getGitBranch()
220
+ {
221
+ return "develop";
222
+ }
223
+
224
+ public function getGitBase()
225
+ {
226
+ return "https://raw.githubusercontent.com/contactlab/contactlab-magento-connect";
227
+ }
228
+ }
app/code/community/Contactlab/Subscribers/Model/Checks/WsdlCheck.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Created by PhpStorm.
5
+ * User: andreag
6
+ * Date: 06/10/15
7
+ * Time: 9.30
8
+ */
9
+ class Contactlab_Subscribers_Model_Checks_WsdlCheck extends Contactlab_Subscribers_Model_Checks_AbstractCheck
10
+ {
11
+
12
+ /**
13
+ * Start check.
14
+ * @return String
15
+ */
16
+ protected function doCheck()
17
+ {
18
+ return $this->_getCheckWsdl()
19
+ ? $this->success(sprintf("WSDL test ok"))
20
+ : $this->error(sprintf("WSDL test error"));
21
+ }
22
+
23
+ /**
24
+ * Get code.
25
+ * @return String
26
+ */
27
+ public function getCode()
28
+ {
29
+ return "wsdl";
30
+ }
31
+
32
+ /**
33
+ * Get description.
34
+ * @return String
35
+ */
36
+ public function getDescription()
37
+ {
38
+ return "WSDL test";
39
+ }
40
+
41
+ /**
42
+ * Get position.
43
+ * @return int
44
+ */
45
+ public function getPosition()
46
+ {
47
+ return 200;
48
+ }
49
+
50
+ /**
51
+ * Check wsdl.
52
+ */
53
+ private function _getCheckWsdl()
54
+ {
55
+ $wsdl = Mage::getStoreConfig("contactlab_commons/soap/wsdl_url");
56
+ $xml = @simplexml_load_file($wsdl);
57
+ if (!$xml) {
58
+ return false;
59
+ }
60
+ new SoapClient($wsdl, array('soap_version' => SOAP_1_2));
61
+ return true;
62
+ }
63
+
64
+ /**
65
+ * Should the check fail in test mode?
66
+ * @return bool
67
+ */
68
+ public function shouldFailInTest() {
69
+ return true;
70
+ }
71
+
72
+ }
app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers.php CHANGED
@@ -2,12 +2,31 @@
2
 
3
  /**
4
  * Export subscribers.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  */
6
  class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commons_Model_Exporter_Abstract {
7
  /**
8
- * Get xml object.
9
  */
10
  protected function writeXml() {
 
11
  $this->limiter = '###';
12
  $this->found = false;
13
 
@@ -17,7 +36,7 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
17
 
18
  $this->exportPolicy = $this->getTask()->getConfig('contactlab_subscribers/global/export_policy');
19
  $this->helper = Mage::helper("contactlab_subscribers/exporter");
20
- $this->r = Mage::getSingleton('core/resource');
21
 
22
  $this->ukQuery = "";
23
 
@@ -39,119 +58,106 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
39
 
40
  // Define customer collection
41
  $attributesCustomer = $this->helper->getAttributesForEntityType('customer',
42
- array_values($this->helper->getAttributesMap($this->getTask())));
43
  $this->fAttributesMap = array_flip($this->helper->getAttributesMap($this->getTask()));
44
  $this->fAddressAttributes = array_flip($this->helper->getAddressesAttributesMap());
45
 
46
- $subscribersInCustomers = Mage::getModel('customer/customer')->getCollection();
47
-
48
- $w = 'subscriber_status = ' . Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED;
49
- $w = $this->_manageExportPolicySql($w, array(
50
- 'e' => 'updated_at',
51
- 'e' => 'created_at',
52
- $this->r->getTableName('newsletter_subscriber') => 'last_updated_at'
53
- ));
54
-
55
- if (!$this->_mustExportNotSubscribed()) {
56
- $subscribersInCustomers->getSelect()
57
- ->where('e.entity_id in (select customer_id from ' . $this->r->getTableName('newsletter_subscriber')
58
- . ' where ' . $w . ')');
59
- }
60
-
61
- // Fills array of types with attributes id array
62
- foreach ($this->helper->fillBackendTypesFromArray($attributesCustomer) as $backendType => $ids) {
63
- $alias = 'ce' . $backendType;
64
- $w = 'e.entity_id = ' . $alias . '.entity_id and length(' . $alias . '.value) > 0 and '
65
- . $alias . '.attribute_id IN (' . implode(',', $ids) . ')';
66
- $subscribersInCustomers->getSelect()->joinLeft(
67
- array(
68
- $alias => $this->r->getTableName('customer_entity_' . $backendType)),
69
- $w, array($backendType . '_value' => 'GROUP_CONCAT(DISTINCT CONCAT('
70
- . $alias . '.attribute_id, "_", '.$alias.'.value) SEPARATOR "' . $this->limiter . '")'));
71
- }
72
-
73
- // Stats
74
- $this->_addStatsToSelect($subscribersInCustomers);
75
- $this->_addAddressesToSelect($subscribersInCustomers);
76
- $this->_manageExportPolicy($subscribersInCustomers,
77
- array(
78
- 'e' => array('created_at', 'updated_at'),
79
- $this->r->getTableName('newsletter_subscriber') => 'last_updated_at',
80
- ));
81
- $this->_addCustomerExportCollection($subscribersInCustomers);
82
-
83
- $subscribersInCustomers->getSelect()->group('e.entity_id');
84
-
85
- Mage::helper("contactlab_commons")->logDebug($subscribersInCustomers->getSelect()->assemble());
86
-
87
- $prefilled = array_fill_keys(array_keys($this->fAttributesMap), '');
88
- foreach (array('billing', 'shipping') as $addressType) {
89
- if ($this->_mustExportAddress($addressType)) {
90
- foreach ($this->fAddressAttributes as $k) {
91
- $prefilled[$addressType . '_' . $k] = '';
92
- }
93
- }
94
- }
95
-
96
  $counter = 0;
97
  $start = microtime(true);
98
- $max = $subscribersInCustomers->count();
99
  $this->getTask()->setMaxValue($max);
100
  Mage::helper("contactlab_commons")->logNotice(sprintf("Counting time: %0.4f", microtime(true) - $start));
101
 
 
 
 
 
 
 
 
102
  $start = microtime(true);
103
 
104
- foreach ($subscribersInCustomers as $item) {
105
- $counter++;
106
- $toFill['is_customer'] = 1;
107
- if (!$item->hasUk()) {
108
- $msg = sprintf("FATAL ERROR, %s subscriber has no UK record!", $item->getEmail());
109
- $this->getTask()->addEvent($msg, true);
110
- throw new Exception($msg);
111
- }
112
- $toFill['entity_id'] = $item->getUk();
113
- $toFill = array_merge($toFill, $prefilled);
114
- $toFill['email'] = $item->getEmail();
115
- $this->_setAttributeKeys($toFill, $item);
116
- $this->_setAddressesAttributeKeys($toFill, $item);
117
-
118
- $this->_fillStoreAttributes($toFill, $item);
119
- foreach ($this->statsAttributesMap as $k => $v) {
120
- $toFill[$k] = $item->getData($v);
121
- }
122
- $this->_manageCustomerClsFlag($toFill, $item);
 
123
 
124
- $this->found = true;
125
- $this->customers++;
126
- $writer = new XMLWriter();
127
- $writer->openMemory();
128
- $writer->startElement("RECORD");
129
- $writer->writeAttribute('ACTION', 'U');
130
- foreach ($toFill as $k => $v) {
131
- if ($k !== $this->getSubscribedFlagName()) {
132
- $k = strtoupper($k);
133
  }
134
- $writer->writeElement($k, $v);
135
- }
136
- $writer->endElement();
137
- gzwrite($this->gz, $writer->outputMemory());
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
138
 
139
- if ($counter % 500 == 0) {
140
- Mage::helper("contactlab_commons")->logNotice(sprintf("Exporting %6s / %-6s", $counter, $max));
141
- $this->getTask()->setProgressValue($counter);
 
 
 
 
 
142
  }
 
143
  }
144
  Mage::helper("contactlab_commons")->logNotice(sprintf("Loop time: %0.4f", microtime(true) - $start));
145
 
146
  $this->_addNotCustomerRecords();
147
  $this->_addDeletedRecords();
148
 
149
- if ($this->ukQuery != "") {
150
- $this->ukQuery = sprintf('update %s set is_exported = 1 where entity_id in (%s)',
151
- $this->r->getTableName('contactlab_subscribers/uk'),
152
- $this->ukQuery);
153
- $this->_query($this->ukQuery);
154
- }
155
 
156
  Mage::helper("contactlab_commons")->flushDbProfiler();
157
  if (!$this->found) {
@@ -169,6 +175,93 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
169
  }
170
  }
171
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
172
  /**
173
  * Called after the export.
174
  */
@@ -179,96 +272,148 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
179
  /** Not customer records. */
180
  private function _addNotCustomerRecords() {
181
  Mage::helper("contactlab_commons")->logDebug("_addNotCustomerRecords");
182
- $subscribersNotInCustomers = Mage::getModel('newsletter/subscriber')->getCollection();
183
- $this->_manageExportPolicy($subscribersNotInCustomers,
184
- array('main_table' => 'last_updated_at'));
185
- if (!$this->_mustExportNotSubscribed()) {
186
- $subscribersNotInCustomers
187
- ->addFieldToFilter('subscriber_status', Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED);
 
 
188
  }
189
- $this->_addNewsletterSubscriberExportCollection($subscribersNotInCustomers);
190
-
191
- $subscribersNotInCustomers
192
- ->getSelect()->where('main_table.customer_id is null or main_table.customer_id = 0');
193
-
194
  $counter = 0;
 
 
195
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
196
 
197
- Mage::helper("contactlab_commons")->logDebug("Prima del count, subscribersNotInCustomers");
198
- Mage::helper("contactlab_commons")->logDebug($subscribersNotInCustomers->getSelect()->assemble());
199
- $max = $subscribersNotInCustomers->count();
200
- $this->getTask()->setMaxValue($max);
201
- $prefilled = array_fill_keys(array_keys($this->fAttributesMap), '');
202
- foreach (array('billing', 'shipping') as $addressType) {
203
- if ($this->_mustExportAddress($addressType)) {
204
- foreach ($this->fAddressAttributes as $k) {
205
- $prefilled[$addressType . '_' . $k] = '';
 
 
 
 
 
 
206
  }
 
 
 
 
 
 
 
 
 
 
207
  }
 
208
  }
 
209
 
210
- Mage::helper("contactlab_commons")->logDebug($subscribersNotInCustomers->getSelect()->assemble());
211
-
212
- foreach ($subscribersNotInCustomers as $item) {
213
- $counter++;
214
- $toFill = array();
215
 
216
- $toFill['is_customer'] = 0;
217
- if (!$item->hasUk()) {
218
- $msg = sprintf("FATAL ERROR, %s customer has no UK record!", $item->getSubscriberEmail());
219
- $this->getTask()->addEvent($msg, true);
220
- throw new Exception($msg);
221
- }
222
- $toFill['entity_id'] = $item->getUk();
223
- $toFill = array_merge($toFill, $prefilled);
224
- $toFill['email'] = $item->getSubscriberEmail();
225
- $this->_manageNewsletterClsFlag($toFill, $item);
226
- $this->_fillStoreAttributes($toFill, $item);
227
-
228
- $this->found = true;
229
- $this->newsletterSubscribers++;
230
- $writer = new XMLWriter();
231
- $writer->openMemory();
232
- $writer->startElement("RECORD");
233
- $writer->writeAttribute('ACTION', 'U');
234
- foreach ($toFill as $k => $v) {
235
- if ($k !== $this->getSubscribedFlagName()) {
236
- $k = strtoupper($k);
237
- }
238
- $writer->writeElement($k, $v);
239
- }
240
- $writer->endElement();
241
- gzwrite($this->gz, $writer->outputMemory());
242
- if ($counter % 500 == 0) {
243
- Mage::helper("contactlab_commons")->logNotice(sprintf("Exporting %6s / %-6s", $counter, $max));
244
- $this->getTask()->setProgressValue($counter);
245
- }
246
  }
 
 
247
  }
248
 
 
 
 
 
249
  private function _addDeletedRecords() {
 
250
  $deletedEntities = Mage::getModel('contactlab_commons/deleted')
251
  ->getCollection()
252
  ->addFieldToFilter('task_id', array('null' => true));
253
 
254
  $counter = 0;
 
255
  $max = $deletedEntities->count();
256
 
257
  Mage::helper("contactlab_commons")->logDebug($deletedEntities->getSelect()->assemble());
258
  $this->deletedEntities = array();
259
- $prefilled = array_fill_keys(array_keys($this->fAttributesMap), '');
 
260
 
261
- foreach ($deletedEntities as $deletedEntity) {
 
262
  $counter++;
263
- $toFill = array();
264
 
265
  $this->found = true;
266
  $this->deleted++;
267
 
268
- $toFill['is_customer'] = $deletedEntity->getIsCustomer();
269
- $toFill['entity_id'] = $deletedEntity->getEntityId();
270
- $toFill = array_merge($toFill, $prefilled);
271
  $toFill['email'] = $deletedEntity->getEmail();
 
 
 
272
 
273
  $writer = new XMLWriter();
274
  $writer->openMemory();
@@ -291,16 +436,32 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
291
  }
292
  }
293
 
294
- private function _setAddressesAttributeKeys(array &$toFill, Mage_Core_Model_Abstract $data) {
 
 
 
 
 
295
  $this->_setAddressAttributeKeys($toFill, $data, "shipping");
296
  $this->_setAddressAttributeKeys($toFill, $data, "billing");
297
  }
298
 
 
 
 
 
 
299
  private function _mustExportAddress($addressType) {
300
  return $this->getTask()->getConfigFlag("contactlab_subscribers/global/export_" . $addressType . "_address");
301
  }
302
 
303
- private function _setAddressAttributeKeys(array &$toFill, Mage_Core_Model_Abstract $data, $addressType) {
 
 
 
 
 
 
304
  if (!$this->_mustExportAddress($addressType)) {
305
  return;
306
  }
@@ -310,7 +471,7 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
310
  return;
311
  }
312
  $values = explode($this->limiter, $data->getData($addressType . '_' . $type . '_value'));
313
- foreach ($values as $index => $key) {
314
  $pos = strpos($key, '_');
315
  if ($pos === false) {
316
  continue;
@@ -326,14 +487,19 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
326
  }
327
  }
328
 
329
- private function _setAttributeKeys(array &$toFill, Mage_Core_Model_Abstract $data) {
 
 
 
 
 
330
  $entityTypes = array('int', 'varchar', 'text', 'decimal', 'datetime');
331
  foreach ($entityTypes as $type) {
332
  if (!array_key_exists($type . '_value', $data->getData())) {
333
  continue;
334
  }
335
  $values = explode($this->limiter, $data->getData($type . '_value'));
336
- foreach ($values as $index => $key) {
337
  $pos = strpos($key, '_');
338
  if ($pos === false) {
339
  continue;
@@ -343,49 +509,109 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
343
  if (!array_key_exists($k, $this->customerAttributes)) {
344
  continue;
345
  }
346
- $toFill[$this->fAttributesMap[$this->customerAttributes[$k]]] =
347
- $this->helper->decode($this->customerModel, 'customer', $this->customerAttributes[$k], $v);
 
 
 
 
348
  }
349
  }
 
350
  }
351
 
352
- /** Add store, group and website attributes. */
353
- private function _fillStoreAttributes(array &$toFill, Mage_Core_Model_Abstract $item) {
354
- $store = $this->stores[$item->getStoreId()];
 
 
 
 
355
  foreach (array('store_id', 'store_name', 'website_id', 'website_name',
356
  'group_id', 'group_name', 'lang') as $k) {
357
  $toFill[$k] = $store[$k];
358
  }
359
  }
360
 
361
- /** Add stats to collection. */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
362
  private function _addStatsToSelect(Varien_Data_Collection_Db $collection) {
363
  $collection->getSelect()->joinLeft(
364
- array('stats' => $this->r->getTableName('contactlab_subscribers/stats')),
365
  'stats.customer_id = e.entity_id', $this->statsAttributesMap);
366
  }
367
 
368
- /** Add customer export to collection. */
 
 
 
369
  private function _addCustomerExportCollection(Varien_Data_Collection_Db $collection) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
370
  $collection->getSelect()->joinLeft(
371
- array('newsletter_subscriber' => $this->r->getTableName('newsletter/subscriber')),
372
- 'newsletter_subscriber.customer_id = e.entity_id',
373
- array('subscriber_status' => 'subscriber_status'));
374
- $collection->getSelect()->joinLeft(
375
- array('uk' => $this->r->getTableName('contactlab_subscribers/uk')),
376
  'uk.customer_id = e.entity_id',
377
  array('uk' => 'entity_id', 'is_exported' => 'is_exported'));
378
  }
379
 
380
- /** Add newsletter subscriber export to collection. */
 
 
 
381
  private function _addNewsletterSubscriberExportCollection(Varien_Data_Collection_Db $collection) {
382
  $collection->getSelect()->joinLeft(
383
- array('uk' => $this->r->getTableName('contactlab_subscribers/uk')),
384
  'uk.subscriber_id = main_table.subscriber_id',
385
  array('uk' => 'entity_id', 'is_exported' => 'is_exported'));
386
  }
387
 
388
- // Add export policy to sql statement.
 
 
 
 
389
  private function _manageExportPolicy(Varien_Data_Collection_Db $collection,
390
  array $fields) {
391
  if ($this->exportPolicy != '2') {
@@ -400,14 +626,10 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
400
  $clause = '';
401
  //$lastExport = Mage::getModel("core/date")->gmtDate(null, $lastExport);
402
 
403
- $first = true;
404
  foreach ($fields as $table => $field) {
405
  if (!is_array($field)) {
406
  $field = array($field);
407
- }/*
408
- if (!$first) {
409
- $clause .= ' and ';
410
- }*/
411
  foreach ($field as $item) {
412
  if (!empty($clause)) {
413
  $clause .= ' or ';
@@ -419,12 +641,16 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
419
  $clause .= sprintf(" or %s.%s is null", $table, $item);
420
  }
421
  }
422
- $first = false;
423
  }
424
  $collection->getSelect()->where($clause);
425
  }
426
 
427
- // Add export policy to sql statement.
 
 
 
 
 
428
  private function _manageExportPolicySql($w, array $fields) {
429
  if ($this->exportPolicy != '2') {
430
  // Ok, will export everything
@@ -435,11 +661,12 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
435
  // Ok, will export everything, no last import saved.
436
  return $w;
437
  }
438
- //$lastExport = Mage::getModel("core/date")->gmtDate(null, $lastExport);
439
 
440
  $w .= ' and (';
441
  $first = true;
442
  foreach ($fields as $table => $field) {
 
443
  if (!is_array($field)) {
444
  $field = array($field);
445
  }
@@ -460,18 +687,26 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
460
  return $w;
461
  }
462
 
463
-
 
 
 
464
  private function _addAddressesToSelect(Varien_Data_Collection_Db $collection) {
465
  $this->_addAddressToSelect($collection, "shipping");
466
  $this->_addAddressToSelect($collection, "billing");
467
  }
468
 
 
 
 
 
 
469
  private function _addAddressToSelect(Varien_Data_Collection_Db $collection, $type) {
470
  if (!$this->getTask()->getConfigFlag("contactlab_subscribers/global/export_" . $type . "_address")) {
471
  return;
472
  }
473
  $collection->getSelect()->joinLeft(
474
- array($type . '_addr' => $this->r->getTableName('customer_entity_int')),
475
  $type . '_addr.entity_id = e.entity_id and ' . $type . '_addr.attribute_id = '
476
  . $this->helper->getAttributeId('customer', 'default_' . $type),
477
  array('default_' . $type => 'value'));
@@ -485,12 +720,16 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
485
  . $alias . '.attribute_id IN (' . implode(',', $ids) . ')';
486
  $collection->getSelect()->joinLeft(
487
  array(
488
- $alias => $this->r->getTableName('customer_address_entity_' . $backendType)),
489
- $w, array($type . '_' . $backendType . '_value' => 'GROUP_CONCAT(DISTINCT CONCAT('
490
- . $alias . '.attribute_id, "_", '.$alias.'.value) SEPARATOR "' . $this->limiter . '")'));
491
  }
492
  }
493
 
 
 
 
 
494
  private function _removeDeletedEntity() {
495
  $toDelete = Mage::getModel('contactlab_commons/deleted')
496
  ->getCollection()
@@ -510,43 +749,60 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
510
  }
511
  }
512
 
 
 
 
 
513
  private function _loadStores() {
514
  $rv = array();
515
- $websiteTable = $this->r->getTableName('core/website');
516
- $storeGroupTable = $this->r->getTableName('core/store_group');
 
 
517
  $stores = Mage::getModel('core/store')
518
  ->getCollection()->setLoadDefault(true);
519
  $stores->addFieldToSelect('*')->getSelect()
520
  ->join(array('core_website' => $websiteTable),
521
- 'main_table.website_id = ' . $websiteTable . '.website_id',
522
- array('website_name' => $websiteTable . '.name'))
523
  ->join(array('core_store_group' => $storeGroupTable),
524
- 'main_table.group_id = ' . $storeGroupTable . '.group_id',
525
- array('group_name' => $storeGroupTable . '.name'));
 
526
  foreach ($stores as $store) {
527
- $rv[$store->getStoreId()] = array(
528
- 'store_id' => $store->getStoreId(),
529
- 'website_id' => $store->getWebsiteId(),
530
- 'group_id' => $store->getGroupId(),
531
- 'store_name' => $store->getName(),
532
- 'website_name' => $store->getWebsiteName(),
533
- 'group_name' => $store->getGroupName(),
 
534
  'lang' => $store->getConfig("general/locale/code"),
535
  );
536
  }
537
  return $rv;
538
  }
539
 
540
- /** Do I have to export all contacts? Or only subscribed ones? */
 
 
 
541
  private function _mustExportNotSubscribed() {
542
  return $this->getTask()->getConfigFlag("contactlab_subscribers/global/export_not_subscribed");
543
  }
544
 
545
- /** Do I have to reset export dates before export? */
 
 
 
546
  private function _mustResetExportDates() {
547
- return $this->getTask()->getConfig("contactlab_subscribers/global/reset_export_dates_before_next_export");
548
  }
549
 
 
 
 
550
  private function _resetMustResetExportDatesFlag() {
551
  Mage::helper("contactlab_commons")->logDebug("Reset reset_export_dates_before_next_export flag");
552
  Mage::getConfig()
@@ -556,14 +812,18 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
556
  }
557
 
558
  private function _resetExportDates() {
559
- $this->_query(sprintf("update %s set is_exported = 0;", $this->r->getTableName('contactlab_subscribers/uk')));
 
560
  }
561
 
562
- /** Run custom query. */
 
 
 
 
563
  private function _query($sql) {
564
  $write = Mage::getSingleton('core/resource')->getConnection('core_write');
565
- $write->query($sql);
566
- Mage::helper("contactlab_commons")->logDebug($sql);
567
  }
568
 
569
 
@@ -575,55 +835,67 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
575
  /**
576
  * Manage if include CLS tag and his value.
577
  * Fill the persistence table.
 
 
578
  */
579
- private function _manageCustomerClsFlag(array &$toFill, $item) {
580
- // FIXME No, nel caso di export globale, deve mettere sempre 0!!
581
- // 1 = Subscribed
582
- // 0 = Not subscribed
583
- // -1 = Unsubscribed
584
  if ($this->_manageClsFlag($toFill, $item)) {
585
  if ($this->ukQuery != '') {
586
  $this->ukQuery .= ', ';
587
  }
588
- $this->ukQuery .= $item->getUk();
589
  }
590
  }
591
 
592
  /**
593
  * Manage if include CLS tag and his value.
594
  * Fill the persistence table.
 
 
595
  */
596
- private function _manageNewsletterClsFlag(array &$toFill, $item) {
597
  if ($this->_manageClsFlag($toFill, $item, true)) {
598
  if ($this->ukQuery != '') {
599
  $this->ukQuery .= ', ';
600
  }
601
- $this->ukQuery .= $item->getUk();
602
  }
603
  }
604
 
605
  /**
606
  * Manage if include CLS tag and his value.
607
  * Fill the persistence table.
 
 
 
 
608
  */
609
- private function _manageClsFlag(array &$toFill, $item, $force = false) {
610
  // If processing record has (first) ExportDate, return.
611
- if ($item->hasIsExported() && $item->getIsExported() == 1 && !$force) {
612
  return false;
613
  }
614
  $toFill[$this->getSubscribedFlagName()]
615
- = $item->getSubscriberStatus() == Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED
616
  ? 1 : 0;
617
  return true;
618
  }
619
 
620
- /** Enabled? */
 
 
 
621
  protected function isEnabled() {
622
  return Mage::helper("contactlab_subscribers")->isEnabled($this->getTask());
623
  }
624
 
625
  /**
626
  * Get file name.
 
627
  */
628
  protected function getFileName() {
629
  return $this->getTask()->getConfig("contactlab_subscribers/global/export_filename");
@@ -639,4 +911,147 @@ class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commo
639
  $this->_resetMustResetExportDatesFlag();
640
  }
641
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
642
  }
2
 
3
  /**
4
  * Export subscribers.
5
+ * @property string limiter
6
+ * @property bool found
7
+ * @property int customers
8
+ * @property int newsletterSubscribers
9
+ * @property int deleted
10
+ * @property mixed exportPolicy
11
+ * @property Contactlab_Subscribers_Helper_Exporter helper
12
+ * @property Mage_Core_Model_Resource $resource
13
+ * @property string ukQuery
14
+ * @property array customerAttributes
15
+ * @property array addressAttributes
16
+ * @property Mage_Customer_Model_Customer customerModel
17
+ * @property Mage_Customer_Model_Address addressModel
18
+ * @property array statsAttributesMap
19
+ * @property array stores
20
+ * @property array fAttributesMap
21
+ * @property array fAddressAttributes
22
+ * @property array deletedEntities
23
  */
24
  class Contactlab_Subscribers_Model_Exporter_Subscribers extends Contactlab_Commons_Model_Exporter_Abstract {
25
  /**
26
+ * Get xml object.
27
  */
28
  protected function writeXml() {
29
+
30
  $this->limiter = '###';
31
  $this->found = false;
32
 
36
 
37
  $this->exportPolicy = $this->getTask()->getConfig('contactlab_subscribers/global/export_policy');
38
  $this->helper = Mage::helper("contactlab_subscribers/exporter");
39
+ $this->resource = Mage::getSingleton('core/resource');
40
 
41
  $this->ukQuery = "";
42
 
58
 
59
  // Define customer collection
60
  $attributesCustomer = $this->helper->getAttributesForEntityType('customer',
61
+ array_keys($this->helper->getAttributesMap($this->getTask())));
62
  $this->fAttributesMap = array_flip($this->helper->getAttributesMap($this->getTask()));
63
  $this->fAddressAttributes = array_flip($this->helper->getAddressesAttributesMap());
64
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
  $counter = 0;
66
  $start = microtime(true);
67
+ $max = $this->_createCounterSubscribersInCustomersCollection()->getSize();
68
  $this->getTask()->setMaxValue($max);
69
  Mage::helper("contactlab_commons")->logNotice(sprintf("Counting time: %0.4f", microtime(true) - $start));
70
 
71
+ $customKeys = array();
72
+ for ($ic = 1; $ic < 8; ++$ic) {
73
+ if ($this->getTask()->getConfigFlag("contactlab_subscribers/custom_fields/enable_field_" . $ic)) {
74
+ $customKeys[] = $this->getTask()->getConfig("contactlab_subscribers/custom_fields/field_" . $ic);
75
+ }
76
+ }
77
+
78
  $start = microtime(true);
79
 
80
+ $limit = 50000;
81
+ $page = 1;
82
+ $preFilled = array_fill_keys(array_values($this->fAttributesMap), '');
83
+ $this->_addAddressFields($preFilled);
84
+ while (true) {
85
+ $subscribersInCustomers = $this->_createSubscribersInCustomersCollection($attributesCustomer);
86
+ $subscribersInCustomers->getSelect()->limitPage($page, $limit);
87
+ Mage::helper("contactlab_commons")->logDebug($subscribersInCustomers->getSelect()->assemble());
88
+ $found = false;
89
+ while ($item = $subscribersInCustomers->fetchItem()) {
90
+ $toFill = array();
91
+ $found = true;
92
+ $counter++;
93
+ $toFill['is_customer'] = 1;
94
+ if (!$item->hasData('uk')) {
95
+ $msg = sprintf("FATAL ERROR, %s subscriber has no UK record!", $item->getData('email'));
96
+ $this->getTask()->addEvent($msg, true);
97
+ throw new Exception($msg);
98
+ }
99
+ $toFill['entity_id'] = $item->getData('uk');
100
 
101
+ $toFill = array_merge($toFill, $preFilled);
102
+ $toFill['email'] = $item->getData('email');
103
+ $this->_setAttributeKeys($toFill, $item);
104
+ $this->_setAddressesAttributeKeys($toFill, $item);
105
+
106
+ $this->_fillStoreAttributes($toFill, $item);
107
+ foreach ($this->statsAttributesMap as $k => $v) {
108
+ $toFill[$k] = $item->getData($v);
 
109
  }
110
+ $this->_fillCustomerGroupAttributes($toFill, $item);
111
+ $this->_manageCustomerClsFlag($toFill, $item);
112
+ /** Custom rispetto alla versione originale del modulo */
113
+ $this->customizeInfoCustomer($toFill, $item);
114
+
115
+ foreach ($customKeys as $icKey) {
116
+ if (empty($icKey)) {
117
+ continue;
118
+ }
119
+ $icValue = $item->getData($icKey);
120
+ if (isset($toFill[$icKey]) && empty($toFill[$icKey]) && !empty($icValue)) {
121
+ $toFill[$icKey] = $icValue;
122
+ }
123
+ }
124
+ $this->found = true;
125
+ $this->customers++;
126
+ $writer = new XMLWriter();
127
+ $writer->openMemory();
128
+ $writer->setIndent(true);
129
+ $writer->startElement("RECORD");
130
+ $writer->writeAttribute('ACTION', 'U');
131
+ foreach ($toFill as $k => $v) {
132
+
133
+ if (empty($k)) {
134
+ continue;
135
+ }
136
+ if ($k !== $this->getSubscribedFlagName()) {
137
+ $k = strtoupper($this->getOutputTagName($k));
138
+ }
139
+ $writer->writeElement($k, $v);
140
+ }
141
+ $writer->endElement();
142
+ gzwrite($this->gz, $writer->outputMemory());
143
 
144
+ if ($counter % 2000 == 0) {
145
+ Mage::helper("contactlab_commons")->logNotice(sprintf("Exporting %6s / %-6s", $counter, $max));
146
+ $this->getTask()->setProgressValue($counter);
147
+ }
148
+ }
149
+ $this->_setUkIsExported();
150
+ if (!$found) {
151
+ break;
152
  }
153
+ $page++;
154
  }
155
  Mage::helper("contactlab_commons")->logNotice(sprintf("Loop time: %0.4f", microtime(true) - $start));
156
 
157
  $this->_addNotCustomerRecords();
158
  $this->_addDeletedRecords();
159
 
160
+ $this->_setUkIsExported();
 
 
 
 
 
161
 
162
  Mage::helper("contactlab_commons")->flushDbProfiler();
163
  if (!$this->found) {
175
  }
176
  }
177
 
178
+ /**
179
+ * Create subscribers in customers collection.
180
+ * @param Mage_Eav_Model_Resource_Entity_Attribute_Collection $attributesCustomer
181
+ * @return Mage_Customer_Model_Resource_Customer_Collection
182
+ */
183
+ private function _createSubscribersInCustomersCollection(
184
+ Mage_Eav_Model_Resource_Entity_Attribute_Collection $attributesCustomer)
185
+ {
186
+ /**
187
+ * @var $subscribersInCustomers Mage_Customer_Model_Resource_Customer_Collection
188
+ */
189
+ $rv = Mage::getModel('customer/customer')->getCollection();
190
+ // $w = 'subscriber_status = ' . Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED;
191
+ // $w = $this->_manageExportPolicySql($w, array(
192
+ // 'e#1' => 'updated_at',
193
+ // 'e#2' => 'created_at',
194
+ // $this->resource->getTableName('newsletter_subscriber') => 'last_updated_at'
195
+ // ));
196
+
197
+
198
+ // if (!$this->_mustExportNotSubscribed()) {
199
+ // $rv->getSelect()
200
+ // ->where('e.entity_id in (select customer_id from ' . $this->resource->getTableName('newsletter_subscriber')
201
+ // . ' where ' . $w . ')');
202
+ // }
203
+
204
+ // Fills array of types with attributes id array
205
+ foreach ($this->helper->fillBackendTypesFromArray($attributesCustomer) as $backendType => $ids) {
206
+ $alias = 'ce' . $backendType;
207
+ $w = 'e.entity_id = ' . $alias . '.entity_id and length(' . $alias . '.value) > 0 and '
208
+ . $alias . '.attribute_id IN (' . implode(',', $ids) . ')';
209
+ $rv->getSelect()->joinLeft(
210
+ array(
211
+ $alias => $this->resource->getTableName('customer_entity_' . $backendType)),
212
+ $w, array($backendType . '_value' => new Zend_Db_Expr('GROUP_CONCAT(DISTINCT CONCAT('
213
+ . $alias . ".attribute_id, '_', " .$alias. ".value) SEPARATOR '" . $this->limiter . "')")));
214
+ }
215
+
216
+ // Stats
217
+ $this->_addStatsToSelect($rv);
218
+ $this->_addAddressesToSelect($rv);
219
+ $this->_addCustomerGroupToSelect($rv);
220
+ $this->_manageExportPolicy($rv,
221
+ array(
222
+ 'e' => array('created_at', 'updated_at'),
223
+ $this->resource->getTableName('newsletter_subscriber') => 'last_updated_at',
224
+ ));
225
+ $this->_addCustomerExportCollection($rv);
226
+ $this->_addSubscriberFields($rv);
227
+
228
+ $rv->getSelect()->group('e.entity_id');
229
+
230
+ return $rv;
231
+ }
232
+
233
+ /**
234
+ * Create count subscribers in customers collection.
235
+ * @return Mage_Customer_Model_Resource_Customer_Collection
236
+ */
237
+ private function _createCounterSubscribersInCustomersCollection()
238
+ {
239
+ /**
240
+ * @var $subscribersInCustomers Mage_Customer_Model_Resource_Customer_Collection
241
+ */
242
+ $rv = Mage::getModel('customer/customer')->getCollection();
243
+ // $w = 'subscriber_status = ' . Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED;
244
+ // $w = $this->_manageExportPolicySql($w, array(
245
+ // 'e#1' => 'updated_at',
246
+ // 'e#2' => 'created_at',
247
+ // $this->resource->getTableName('newsletter_subscriber') => 'last_updated_at'
248
+ // ));
249
+
250
+ // if (!$this->_mustExportNotSubscribed()) {
251
+ // $rv->getSelect()
252
+ // ->where('e.entity_id in (select customer_id from ' . $this->resource->getTableName('newsletter_subscriber')
253
+ // . ' where ' . $w . ')');
254
+ // }
255
+
256
+ $this->_manageExportPolicy($rv,
257
+ array(
258
+ 'e' => array('created_at', 'updated_at'),
259
+ $this->resource->getTableName('newsletter_subscriber') => 'last_updated_at',
260
+ ));
261
+ $this->_addCustomerExportCollection($rv);
262
+ return $rv;
263
+ }
264
+
265
  /**
266
  * Called after the export.
267
  */
272
  /** Not customer records. */
273
  private function _addNotCustomerRecords() {
274
  Mage::helper("contactlab_commons")->logDebug("_addNotCustomerRecords");
275
+ $preFilled = array_fill_keys(array_values($this->fAttributesMap), '');
276
+ $this->_addAddressFields($preFilled);
277
+ $subscribersNotInCustomers = $this->_createSubscribersNotInCustomers();
278
+ $customKeys = array();
279
+ for ($ic = 1; $ic < 8; ++$ic) {
280
+ if ($this->getTask()->getConfigFlag("contactlab_subscribers/custom_fields/enable_field_" . $ic)) {
281
+ $customKeys[] = $this->getTask()->getConfig("contactlab_subscribers/custom_fields/field_" . $ic);
282
+ }
283
  }
 
 
 
 
 
284
  $counter = 0;
285
+ $max = $subscribersNotInCustomers->getSize();
286
+ $this->getTask()->setMaxValue($max);
287
 
288
+ $limit = 200000;
289
+ $page = 1;
290
+ while (true) {
291
+ $subscribersNotInCustomers = $this->_createSubscribersNotInCustomers();
292
+ $subscribersNotInCustomers->getSelect()->limitPage($page, $limit);
293
+ Mage::helper("contactlab_commons")->logDebug($subscribersNotInCustomers->getSelect()->assemble());
294
+ $found = false;
295
+
296
+ while ($item = $subscribersNotInCustomers->fetchItem()) {
297
+ $counter++;
298
+ $found = true;
299
+ $toFill1 = array();
300
+
301
+ $toFill1['is_customer'] = 0;
302
+ if (!$item->hasData('uk')) {
303
+ $msg = sprintf("FATAL ERROR, %s customer has no UK record!", $item->getData('subscriber_email'));
304
+ $this->getTask()->addEvent($msg, true);
305
+ throw new Exception($msg);
306
+ }
307
+ $toFill1['entity_id'] = $item->getData('uk');
308
+
309
+ $toFill = array_merge($toFill1, $preFilled);
310
+ $toFill['email'] = $item->getData('subscriber_email');
311
+ $this->_manageNewsletterClsFlag($toFill, $item);
312
+ $this->_fillStoreAttributes($toFill, $item);
313
+ $this->_fillNewsletterAttributes($toFill, $item);
314
+ /** Custom rispetto alla versione originale del modulo */
315
+ $this->customizeInfoSubscriber($toFill, $item);
316
+
317
+ foreach ($customKeys as $icKey) {
318
+ if (empty($icKey)) {
319
+ continue;
320
+ }
321
+ $icValue = $item->getData($icKey);
322
+ if (isset($toFill[$icKey]) && empty($toFill[$icKey]) && !empty($icValue)) {
323
+ $toFill[$icKey] = $icValue;
324
+ }
325
+ }
326
 
327
+ $this->found = true;
328
+ $this->newsletterSubscribers++;
329
+ $writer = new XMLWriter();
330
+ $writer->openMemory();
331
+ $writer->setIndent(true);
332
+ $writer->startElement("RECORD");
333
+ $writer->writeAttribute('ACTION', 'U');
334
+ foreach ($toFill as $k => $v) {
335
+ if (empty($k)) {
336
+ continue;
337
+ }
338
+ if ($k !== $this->getSubscribedFlagName()) {
339
+ $k = strtoupper($this->getOutputTagName($k));
340
+ }
341
+ $writer->writeElement($k, $v);
342
  }
343
+ $writer->endElement();
344
+ gzwrite($this->gz, $writer->outputMemory());
345
+ if ($counter % 2000 == 0) {
346
+ Mage::helper("contactlab_commons")->logNotice(sprintf("Exporting %6s / %-6s", $counter, $max));
347
+ $this->getTask()->setProgressValue($counter);
348
+ }
349
+ }
350
+ $this->_setUkIsExported();
351
+ if (!$found) {
352
+ break;
353
  }
354
+ $page++;
355
  }
356
+ }
357
 
 
 
 
 
 
358
 
359
+ /**
360
+ * Create subscribers not in customers.
361
+ * @return Contactlab_Template_Model_Resource_Newsletter_Subscriber_Collection
362
+ */
363
+ private function _createSubscribersNotInCustomers()
364
+ {
365
+ /** @var $rv Contactlab_Template_Model_Resource_Newsletter_Subscriber_Collection */
366
+ $rv = Mage::getModel('contactlab_subscribers/uk')->getCollection();
367
+ $rv->addFieldToSelect(
368
+ array('uk' => 'entity_id', 'is_exported' => 'is_exported')
369
+ );
370
+ $this->_addSubscriberFields($rv, 'main_table');
371
+ $rv->getSelect()->joinLeft(
372
+ array('native_nl' => $this->resource->getTableName('newsletter/subscriber')),
373
+ 'native_nl.subscriber_id = main_table.subscriber_id');
374
+ $this->_manageExportPolicy($rv,
375
+ array('native_nl' => 'last_updated_at'));
376
+ if (!$this->_mustExportNotSubscribed()) {
377
+ $rv->addFieldToFilter('native_nl.subscriber_status', Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED);
 
 
 
 
 
 
 
 
 
 
 
378
  }
379
+ $rv->getSelect()->where('main_table.customer_id is null or main_table.customer_id = 0');
380
+ return $rv;
381
  }
382
 
383
+
384
+ /**
385
+ * Add delete records.
386
+ */
387
  private function _addDeletedRecords() {
388
+ /** @var $deletedEntities Contactlab_Commons_Model_Resource_Deleted_Collection */
389
  $deletedEntities = Mage::getModel('contactlab_commons/deleted')
390
  ->getCollection()
391
  ->addFieldToFilter('task_id', array('null' => true));
392
 
393
  $counter = 0;
394
+ // FIXME TODO count vs getSize
395
  $max = $deletedEntities->count();
396
 
397
  Mage::helper("contactlab_commons")->logDebug($deletedEntities->getSelect()->assemble());
398
  $this->deletedEntities = array();
399
+ $preFilled = array_fill_keys(array_keys($this->fAttributesMap), '');
400
+ $this->_addAddressFields($preFilled);
401
 
402
+ /** @var $deletedEntity Contactlab_Commons_Model_Deleted */
403
+ while ($deletedEntity = $deletedEntities->fetchItem()) {
404
  $counter++;
405
+ $toFill1 = array();
406
 
407
  $this->found = true;
408
  $this->deleted++;
409
 
410
+ $toFill1['is_customer'] = $deletedEntity->getIsCustomer();
411
+ $toFill1['entity_id'] = $deletedEntity->getEntityId();
412
+ $toFill = array_merge($toFill1, $preFilled);
413
  $toFill['email'] = $deletedEntity->getEmail();
414
+ /** Custom rispetto alla versione originale del modulo */
415
+ $this->customizeInfoDeleted($toFill, $deletedEntity);
416
+
417
 
418
  $writer = new XMLWriter();
419
  $writer->openMemory();
436
  }
437
  }
438
 
439
+ /**
440
+ * Set addresses attribute keys.
441
+ * @param array $toFill
442
+ * @param Varien_Object $data
443
+ */
444
+ private function _setAddressesAttributeKeys(array &$toFill, Varien_Object $data) {
445
  $this->_setAddressAttributeKeys($toFill, $data, "shipping");
446
  $this->_setAddressAttributeKeys($toFill, $data, "billing");
447
  }
448
 
449
+ /**
450
+ * Do export address with type.
451
+ * @param string $addressType
452
+ * @return bool
453
+ */
454
  private function _mustExportAddress($addressType) {
455
  return $this->getTask()->getConfigFlag("contactlab_subscribers/global/export_" . $addressType . "_address");
456
  }
457
 
458
+ /**
459
+ * Set address attribute keys.
460
+ * @param array $toFill
461
+ * @param Varien_Object $data
462
+ * @param $addressType
463
+ */
464
+ private function _setAddressAttributeKeys(array &$toFill, Varien_Object $data, $addressType) {
465
  if (!$this->_mustExportAddress($addressType)) {
466
  return;
467
  }
471
  return;
472
  }
473
  $values = explode($this->limiter, $data->getData($addressType . '_' . $type . '_value'));
474
+ foreach ($values as $key) {
475
  $pos = strpos($key, '_');
476
  if ($pos === false) {
477
  continue;
487
  }
488
  }
489
 
490
+ /**
491
+ * Set attribute keys.
492
+ * @param array $toFill
493
+ * @param Varien_Object $data
494
+ */
495
+ private function _setAttributeKeys(array &$toFill, Varien_Object $data) {
496
  $entityTypes = array('int', 'varchar', 'text', 'decimal', 'datetime');
497
  foreach ($entityTypes as $type) {
498
  if (!array_key_exists($type . '_value', $data->getData())) {
499
  continue;
500
  }
501
  $values = explode($this->limiter, $data->getData($type . '_value'));
502
+ foreach ($values as $key) {
503
  $pos = strpos($key, '_');
504
  if ($pos === false) {
505
  continue;
509
  if (!array_key_exists($k, $this->customerAttributes)) {
510
  continue;
511
  }
512
+ // use flipped array for cstm attributes
513
+ //$flip = array_flip($this->fAttributesMap);
514
+ //$toFill[$this->fAttributesMap[$this->customerAttributes[$k]]] =
515
+ // $toFill[$flip[$this->customerAttributes[$k]]] =
516
+ $toFill[$this->customerAttributes[$k]] =
517
+ $this->helper->decode($this->customerModel, 'customer', $this->customerAttributes[$k], $v);
518
  }
519
  }
520
+
521
  }
522
 
523
+ /**
524
+ * Add store, group and website attributes.
525
+ * @param array $toFill
526
+ * @param Varien_Object $item
527
+ */
528
+ private function _fillStoreAttributes(array &$toFill, Varien_Object $item) {
529
+ $store = $this->stores[$item->getData('store_id')];
530
  foreach (array('store_id', 'store_name', 'website_id', 'website_name',
531
  'group_id', 'group_name', 'lang') as $k) {
532
  $toFill[$k] = $store[$k];
533
  }
534
  }
535
 
536
+ private function _fillCustomerGroupAttributes(array &$toFill, Varien_Object $item)
537
+ {
538
+ $toFill['customer_group_id'] = $item->getData('customer_group_id');
539
+ $toFill['customer_group_name'] = $item->getData('customer_group_name');
540
+ //FIX
541
+ $toFill['created_at'] = $item->getData('created_at');
542
+ }
543
+
544
+ /**
545
+ * Fill Newsletter attributes fields.
546
+ * @param array $toFill
547
+ * @param Varien_Object $item
548
+ */
549
+ private function _fillNewsletterAttributes(array &$toFill, Varien_Object $item)
550
+ {
551
+ foreach ($this->helper->getSubscriberToCustomerAttributeMap() as $k => $v) {
552
+ if (!$this->_doManageAddressAttribute($v)) {
553
+ continue;
554
+ }
555
+ $toFill[$v] = $item->getData($k);
556
+ }
557
+ }
558
+
559
+ /**
560
+ * Add stats to collection.
561
+ * @param Varien_Data_Collection_Db $collection
562
+ */
563
  private function _addStatsToSelect(Varien_Data_Collection_Db $collection) {
564
  $collection->getSelect()->joinLeft(
565
+ array('stats' => $this->resource->getTableName('contactlab_subscribers/stats')),
566
  'stats.customer_id = e.entity_id', $this->statsAttributesMap);
567
  }
568
 
569
+ /**
570
+ * Add customer export to collection.
571
+ * @param Varien_Data_Collection_Db $collection
572
+ */
573
  private function _addCustomerExportCollection(Varien_Data_Collection_Db $collection) {
574
+ if (!$this->_mustExportNotSubscribed()) {
575
+ $w = 'subscriber_status = ' . Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED;
576
+ $w = $this->_manageExportPolicySql($w, array(
577
+ 'e#1' => 'updated_at',
578
+ 'e#2' => 'created_at',
579
+ $this->resource->getTableName('newsletter_subscriber') => 'last_updated_at'
580
+ ));
581
+
582
+ $collection->getSelect()->joinInner(
583
+ array('newsletter_subscriber' => $this->resource->getTableName('newsletter/subscriber')),
584
+ 'newsletter_subscriber.customer_id = e.entity_id AND ' . $w,
585
+ array('subscriber_status' => 'subscriber_status'));
586
+ }else{
587
+ $collection->getSelect()->joinLeft(
588
+ array('newsletter_subscriber' => $this->resource->getTableName('newsletter/subscriber')),
589
+ 'newsletter_subscriber.customer_id = e.entity_id',
590
+ array('subscriber_status' => 'subscriber_status'));
591
+ }
592
+
593
  $collection->getSelect()->joinLeft(
594
+ array('uk' => $this->resource->getTableName('contactlab_subscribers/uk')),
 
 
 
 
595
  'uk.customer_id = e.entity_id',
596
  array('uk' => 'entity_id', 'is_exported' => 'is_exported'));
597
  }
598
 
599
+ /**
600
+ * Add newsletter subscriber export to collection.
601
+ * @param Varien_Data_Collection_Db $collection
602
+ */
603
  private function _addNewsletterSubscriberExportCollection(Varien_Data_Collection_Db $collection) {
604
  $collection->getSelect()->joinLeft(
605
+ array('uk' => $this->resource->getTableName('contactlab_subscribers/uk')),
606
  'uk.subscriber_id = main_table.subscriber_id',
607
  array('uk' => 'entity_id', 'is_exported' => 'is_exported'));
608
  }
609
 
610
+ /**
611
+ * Add export policy to sql statement.
612
+ * @param Varien_Data_Collection_Db $collection
613
+ * @param array $fields
614
+ */
615
  private function _manageExportPolicy(Varien_Data_Collection_Db $collection,
616
  array $fields) {
617
  if ($this->exportPolicy != '2') {
626
  $clause = '';
627
  //$lastExport = Mage::getModel("core/date")->gmtDate(null, $lastExport);
628
 
 
629
  foreach ($fields as $table => $field) {
630
  if (!is_array($field)) {
631
  $field = array($field);
632
+ }
 
 
 
633
  foreach ($field as $item) {
634
  if (!empty($clause)) {
635
  $clause .= ' or ';
641
  $clause .= sprintf(" or %s.%s is null", $table, $item);
642
  }
643
  }
 
644
  }
645
  $collection->getSelect()->where($clause);
646
  }
647
 
648
+ /**
649
+ * Add export policy to sql statement.
650
+ * @param string $w
651
+ * @param array $fields
652
+ * @return string
653
+ */
654
  private function _manageExportPolicySql($w, array $fields) {
655
  if ($this->exportPolicy != '2') {
656
  // Ok, will export everything
661
  // Ok, will export everything, no last import saved.
662
  return $w;
663
  }
664
+ // $lastExport = Mage::getModel("core/date")->gmtDate(null, $lastExport);
665
 
666
  $w .= ' and (';
667
  $first = true;
668
  foreach ($fields as $table => $field) {
669
+ $table = preg_replace('|#.*|', '', $table);
670
  if (!is_array($field)) {
671
  $field = array($field);
672
  }
687
  return $w;
688
  }
689
 
690
+ /**
691
+ * Add addresses to select
692
+ * @param Varien_Data_Collection_Db $collection
693
+ */
694
  private function _addAddressesToSelect(Varien_Data_Collection_Db $collection) {
695
  $this->_addAddressToSelect($collection, "shipping");
696
  $this->_addAddressToSelect($collection, "billing");
697
  }
698
 
699
+ /**
700
+ * Add address to select.
701
+ * @param Varien_Data_Collection_Db $collection
702
+ * @param string $type
703
+ */
704
  private function _addAddressToSelect(Varien_Data_Collection_Db $collection, $type) {
705
  if (!$this->getTask()->getConfigFlag("contactlab_subscribers/global/export_" . $type . "_address")) {
706
  return;
707
  }
708
  $collection->getSelect()->joinLeft(
709
+ array($type . '_addr' => $this->resource->getTableName('customer_entity_int')),
710
  $type . '_addr.entity_id = e.entity_id and ' . $type . '_addr.attribute_id = '
711
  . $this->helper->getAttributeId('customer', 'default_' . $type),
712
  array('default_' . $type => 'value'));
720
  . $alias . '.attribute_id IN (' . implode(',', $ids) . ')';
721
  $collection->getSelect()->joinLeft(
722
  array(
723
+ $alias => $this->resource->getTableName('customer_address_entity_' . $backendType)),
724
+ $w, array($type . '_' . $backendType . '_value' => new Zend_Db_Expr('GROUP_CONCAT(DISTINCT CONCAT('
725
+ . $alias . ".attribute_id, '_', " .$alias. ".value) SEPARATOR '" . $this->limiter . "')")));
726
  }
727
  }
728
 
729
+ /**
730
+ * Remove deleted entity.
731
+ * @throws Exception
732
+ */
733
  private function _removeDeletedEntity() {
734
  $toDelete = Mage::getModel('contactlab_commons/deleted')
735
  ->getCollection()
749
  }
750
  }
751
 
752
+ /**
753
+ * Load stores.
754
+ * @return array
755
+ */
756
  private function _loadStores() {
757
  $rv = array();
758
+ $websiteTable = $this->resource->getTableName('core/website');
759
+ $storeGroupTable = $this->resource->getTableName('core/store_group');
760
+
761
+ /** @var Mage_Core_Model_Resource_Store_Collection $stores */
762
  $stores = Mage::getModel('core/store')
763
  ->getCollection()->setLoadDefault(true);
764
  $stores->addFieldToSelect('*')->getSelect()
765
  ->join(array('core_website' => $websiteTable),
766
+ 'main_table.website_id = ' . 'core_website.website_id',
767
+ array('website_name' => 'core_website.name'))
768
  ->join(array('core_store_group' => $storeGroupTable),
769
+ 'main_table.group_id = ' . 'core_store_group.group_id',
770
+ array('group_name' => 'core_store_group.name'));
771
+ /** @var $store Mage_Core_Model_Store */
772
  foreach ($stores as $store) {
773
+ $storeId = $store->getData('store_id');
774
+ $rv[$storeId] = array(
775
+ 'store_id' => $storeId,
776
+ 'website_id' => $store->getData('website_id'),
777
+ 'group_id' => $store->getData('group_id'),
778
+ 'store_name' => $store->getData('mame'),
779
+ 'website_name' => $store->getData('website_name'),
780
+ 'group_name' => $store->getData('group_name'),
781
  'lang' => $store->getConfig("general/locale/code"),
782
  );
783
  }
784
  return $rv;
785
  }
786
 
787
+ /**
788
+ * Do I have to export all contacts? Or only subscribed ones?
789
+ * @return bool
790
+ */
791
  private function _mustExportNotSubscribed() {
792
  return $this->getTask()->getConfigFlag("contactlab_subscribers/global/export_not_subscribed");
793
  }
794
 
795
+ /**
796
+ * Do I have to reset export dates before export?
797
+ * @return bool
798
+ */
799
  private function _mustResetExportDates() {
800
+ return $this->getTask()->getConfigFlag("contactlab_subscribers/global/reset_export_dates_before_next_export");
801
  }
802
 
803
+ /**
804
+ * Reset reset export flg.
805
+ */
806
  private function _resetMustResetExportDatesFlag() {
807
  Mage::helper("contactlab_commons")->logDebug("Reset reset_export_dates_before_next_export flag");
808
  Mage::getConfig()
812
  }
813
 
814
  private function _resetExportDates() {
815
+ $tableName = $this->resource->getTableName('contactlab_subscribers/uk');
816
+ $this->_query("update $tableName set is_exported = 0;");
817
  }
818
 
819
+ /**
820
+ * Run custom query.
821
+ * @param $sql
822
+ * @return Zend_Db_Statement_Interface
823
+ */
824
  private function _query($sql) {
825
  $write = Mage::getSingleton('core/resource')->getConnection('core_write');
826
+ return $write->query($sql);
 
827
  }
828
 
829
 
835
  /**
836
  * Manage if include CLS tag and his value.
837
  * Fill the persistence table.
838
+ * @param array $toFill
839
+ * @param Varien_Object $item
840
  */
841
+ private function _manageCustomerClsFlag(array &$toFill, Varien_Object $item) {
842
+ /* 1 = Subscribed
843
+ 0 = Not subscribed
844
+ -1 = Unsubscribed
845
+ */
846
  if ($this->_manageClsFlag($toFill, $item)) {
847
  if ($this->ukQuery != '') {
848
  $this->ukQuery .= ', ';
849
  }
850
+ $this->ukQuery .= $item->getData('uk');
851
  }
852
  }
853
 
854
  /**
855
  * Manage if include CLS tag and his value.
856
  * Fill the persistence table.
857
+ * @param array $toFill
858
+ * @param Varien_Object $item
859
  */
860
+ private function _manageNewsletterClsFlag(array &$toFill, Varien_Object $item) {
861
  if ($this->_manageClsFlag($toFill, $item, true)) {
862
  if ($this->ukQuery != '') {
863
  $this->ukQuery .= ', ';
864
  }
865
+ $this->ukQuery .= $item->getData('uk');
866
  }
867
  }
868
 
869
  /**
870
  * Manage if include CLS tag and his value.
871
  * Fill the persistence table.
872
+ * @param array $toFill
873
+ * @param Varien_Object $item
874
+ * @param bool $force
875
+ * @return bool
876
  */
877
+ private function _manageClsFlag(array &$toFill, Varien_Object $item, $force = false) {
878
  // If processing record has (first) ExportDate, return.
879
+ if ($item->hasData('is_exported') && $item->getData('is_exported') == 1 && !$force) {
880
  return false;
881
  }
882
  $toFill[$this->getSubscribedFlagName()]
883
+ = $item->getData('subscriber_status') == Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED
884
  ? 1 : 0;
885
  return true;
886
  }
887
 
888
+ /**
889
+ * Is enabled.
890
+ * @return bool
891
+ */
892
  protected function isEnabled() {
893
  return Mage::helper("contactlab_subscribers")->isEnabled($this->getTask());
894
  }
895
 
896
  /**
897
  * Get file name.
898
+ * @return string
899
  */
900
  protected function getFileName() {
901
  return $this->getTask()->getConfig("contactlab_subscribers/global/export_filename");
911
  $this->_resetMustResetExportDatesFlag();
912
  }
913
  }
914
+
915
+ /**
916
+ * Set uk is exported.
917
+ */
918
+ private function _setUkIsExported()
919
+ {
920
+ if ($this->ukQuery != "") {
921
+ $tableName = $this->resource->getTableName('contactlab_subscribers/uk');
922
+ $this->ukQuery = "update $tableName set is_exported = 1 where entity_id in ({$this->ukQuery})";
923
+ $this->_query($this->ukQuery);
924
+ $this->ukQuery = "";
925
+ }
926
+ }
927
+
928
+ /**
929
+ * Add subscriber fields.
930
+ * @param Varien_Data_Collection_Db $collection
931
+ * @param string $table Table name for join
932
+ * @return Varien_Db_Select
933
+ */
934
+ private function _addSubscriberFields(Varien_Data_Collection_Db $collection, $table = 'newsletter_subscriber')
935
+ {
936
+ return $collection->getSelect()->joinLeft(
937
+ array('fields' => $this->resource->getTableName('contactlab_subscribers/newsletter_subscriber_fields')),
938
+ "fields.subscriber_id = $table.subscriber_id"
939
+ );
940
+ }
941
+
942
+ /**
943
+ * Do include this field into xml element?
944
+ * @param String $attributeCode
945
+ * @return bool
946
+ */
947
+ private function _doManageAddressAttribute($attributeCode)
948
+ {
949
+ if (preg_match('|^billing_|', $attributeCode)) {
950
+ return $this->_mustExportAddress('billing');
951
+ } else if (preg_match('|^shipping|', $attributeCode)) {
952
+ return $this->_mustExportAddress('shipping');
953
+ }
954
+ return true;
955
+ }
956
+
957
+ /**
958
+ * Add address fields.
959
+ * @param array $preFilled
960
+ */
961
+ private function _addAddressFields(array &$preFilled)
962
+ {
963
+ foreach (array('billing', 'shipping') as $addressType) {
964
+ if ($this->_mustExportAddress($addressType)) {
965
+ foreach ($this->fAddressAttributes as $k) {
966
+ $preFilled[$addressType . '_' . $k] = '';
967
+ }
968
+ }
969
+ }
970
+ }
971
+
972
+ /**
973
+ * @param Varien_Data_Collection_Db $collection
974
+ * @return Varien_Db_Select
975
+ */
976
+ private function _addCustomerGroupToSelect(Varien_Data_Collection_Db $collection)
977
+ {
978
+ return $collection->getSelect()->joinInner(
979
+ array(
980
+ 'customer_group' => $this->resource->getTableName('customer/customer_group')
981
+ ),
982
+ "customer_group.customer_group_id = e.group_id",
983
+ array(
984
+ 'customer_group_name' => 'customer_group_code',
985
+ 'customer_group_id' => 'customer_group_id'
986
+ )
987
+ );
988
+ }
989
+
990
+ /**
991
+ * Use destination field name for cstm fields
992
+ * @param $k
993
+ * @return mixed
994
+ */
995
+ private function getOutputTagName($k) {
996
+ if (isset($this->fAttributesMap[$k]) && strpos($k, 'cstm') === 0) {
997
+ return $this->fAttributesMap[$k];
998
+ }
999
+ return $k;
1000
+ }
1001
+
1002
+ /**
1003
+ * Custom rispetto alla versione originale del modulo
1004
+ */
1005
+ protected function customizeInfoCustomer(array &$toFill, Varien_Object $customer){
1006
+ $tCustInfo = Mage::getModel('contactlab_subscribers/exporter_subscribers_infoTransporter_customer');
1007
+ $tCustInfo->setInfo($toFill);
1008
+ $tCustInfo->setCustomer($customer);
1009
+ $tCustInfo->setIsMod(false);
1010
+
1011
+ Mage::dispatchEvent("contactlab_export_subscribers_customer_info",array(
1012
+ 'customer_info' => $tCustInfo
1013
+ ));
1014
+
1015
+ if ($tCustInfo->isMod()){
1016
+ $toFill = $tCustInfo->getInfo();
1017
+ }
1018
+ }
1019
+
1020
+
1021
+ /**
1022
+ * Custom rispetto alla versione originale del modulo
1023
+ */
1024
+ protected function customizeInfoDeleted(array &$toFill, Varien_Object $deleted){
1025
+ $tDeletedInfo = Mage::getModel('contactlab_subscribers/exporter_subscribers_infoTransporter_deleted');
1026
+ $tDeletedInfo->setInfo($toFill);
1027
+ $tDeletedInfo->setDeleted($deleted);
1028
+ $tDeletedInfo->setIsMod(false);
1029
+
1030
+ Mage::dispatchEvent("contactlab_export_subscribers_deleted_info",array(
1031
+ 'deleted_info' => $tDeletedInfo
1032
+ ));
1033
+
1034
+ if ($tDeletedInfo->isMod()){
1035
+ $toFill = $tDeletedInfo->getInfo();
1036
+ }
1037
+ }
1038
+
1039
+
1040
+ /**
1041
+ * Custom rispetto alla versione originale del modulo
1042
+ */
1043
+ protected function customizeInfoSubscriber(array &$toFill, Varien_Object $subscriber){
1044
+ $tSubscriberInfo = Mage::getModel('contactlab_subscribers/exporter_subscribers_infoTransporter_subscriber');
1045
+ $tSubscriberInfo->setInfo($toFill);
1046
+ $tSubscriberInfo->setSubscriber($subscriber);
1047
+ $tSubscriberInfo->setIsMod(false);
1048
+
1049
+ Mage::dispatchEvent("contactlab_export_subscribers_subscriber_info",array(
1050
+ 'subscriber_info' => $tSubscriberInfo
1051
+ ));
1052
+
1053
+ if ($tSubscriberInfo->isMod()){
1054
+ $toFill = $tSubscriberInfo->getInfo();
1055
+ }
1056
+ }
1057
  }
app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/InfoTransporter/Abstract.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ abstract class Contactlab_Subscribers_Model_Exporter_Subscribers_InfoTransporter_Abstract {
3
+ protected $_info = array();
4
+ protected $_is_mod = false;
5
+
6
+ public function setInfo($_info){
7
+ $this->_info = $_info;
8
+ $this->setIsMod();
9
+ }
10
+
11
+ public function getInfo(){
12
+ return $this->_info;
13
+ }
14
+
15
+ public function isMod(){
16
+ return $this->_is_mod;
17
+ }
18
+
19
+ public function setIsMod($_is_mod = true){
20
+ $this->_is_mod = $_is_mod;
21
+ }
22
+ }
app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/InfoTransporter/Customer.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Contactlab_Subscribers_Model_Exporter_Subscribers_InfoTransporter_Customer extends Contactlab_Subscribers_Model_Exporter_Subscribers_InfoTransporter_Abstract{
3
+ protected $_customer = null;
4
+
5
+ public function getCustomer(){
6
+ return $this->_customer;
7
+ }
8
+
9
+ public function setCustomer($_customer){
10
+ $this->_customer = $_customer;
11
+ }
12
+ }
app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/InfoTransporter/Deleted.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Contactlab_Subscribers_Model_Exporter_Subscribers_InfoTransporter_Deleted extends Contactlab_Subscribers_Model_Exporter_Subscribers_InfoTransporter_Abstract{
3
+ protected $_deleted = null;
4
+
5
+ public function getDeleted(){
6
+ return $this->_deleted;
7
+ }
8
+
9
+ public function setDeleted($_deleted){
10
+ $this->_deleted = $_deleted;
11
+ }
12
+ }
app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/InfoTransporter/Subscriber.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class Contactlab_Subscribers_Model_Exporter_Subscribers_InfoTransporter_Subscriber extends Contactlab_Subscribers_Model_Exporter_Subscribers_InfoTransporter_Abstract{
3
+ protected $_subscriber = null;
4
+
5
+ public function getSubscriber(){
6
+ return $this->_subscriber;
7
+ }
8
+
9
+ public function setSubscriber($_subscriber){
10
+ $this->_subscriber = $_subscriber;
11
+ }
12
+ }
app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/MapTransporter/Abstract.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ abstract class Contactlab_Subscribers_Model_Exporter_Subscribers_MapTransporter_Abstract {
3
+ protected $_map = array();
4
+ protected $_is_mod = false;
5
+
6
+ public function setMap($_map){
7
+ $this->_map = $_map;
8
+ $this->setIsMod();
9
+ }
10
+
11
+ public function getMap(){
12
+ return $this->_map;
13
+ }
14
+
15
+ public function isMod(){
16
+ return $this->_is_mod;
17
+ }
18
+
19
+ public function setIsMod($_is_mod = true){
20
+ $this->_is_mod = $_is_mod;
21
+ }
22
+ }
app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/MapTransporter/Address.php ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?php
2
+ class Contactlab_Subscribers_Model_Exporter_Subscribers_MapTransporter_Address extends Contactlab_Subscribers_Model_Exporter_Subscribers_MapTransporter_Abstract {
3
+
4
+ }
app/code/community/Contactlab/Subscribers/Model/Exporter/Subscribers/MapTransporter/Attribute.php ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?php
2
+ class Contactlab_Subscribers_Model_Exporter_Subscribers_MapTransporter_Attribute extends Contactlab_Subscribers_Model_Exporter_Subscribers_MapTransporter_Abstract {
3
+
4
+ }
app/code/community/Contactlab/Subscribers/Model/Fields.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Fields table model.
5
+ * @method getNotes()
6
+ * @method getFirstName()
7
+ * @method getLastName()
8
+ * @method getCustom1()
9
+ * @method getCustom2()
10
+ * @method getZipCode()
11
+ * @method getPhone()
12
+ * @method getCellPhone()
13
+ * @method getDob()
14
+ * @method getPrivacyAccepted()
15
+ * @method getGender()
16
+ * @method getSubscriberEmail()
17
+ *
18
+ * @method Contactlab_Subscribers_Model_Fields setNotes($value)
19
+ * @method Contactlab_Subscribers_Model_Fields setFirstName($value)
20
+ * @method Contactlab_Subscribers_Model_Fields setLastName($value)
21
+ * @method Contactlab_Subscribers_Model_Fields setCustom1($value)
22
+ * @method Contactlab_Subscribers_Model_Fields setCustom2($value)
23
+ * @method Contactlab_Subscribers_Model_Fields setZipCode($value)
24
+ * @method Contactlab_Subscribers_Model_Fields setPhone($value)
25
+ * @method Contactlab_Subscribers_Model_Fields setCellPhone($value)
26
+ * @method Contactlab_Subscribers_Model_Fields setDob($value)
27
+ * @method Contactlab_Subscribers_Model_Fields setPrivacyAccepted($value)
28
+ * @method Contactlab_Subscribers_Model_Fields setGender($value)
29
+ * @method Contactlab_Subscribers_Model_Fields setSubscriberEmail($value)
30
+ */
31
+ class Contactlab_Subscribers_Model_Fields extends Mage_Core_Model_Abstract {
32
+ /**
33
+ * Constructor.
34
+ */
35
+ public function _construct() {
36
+ $this->_init("contactlab_subscribers/fields");
37
+ }
38
+
39
+ /**
40
+ * Load object data
41
+ *
42
+ * @param integer $id
43
+ * @return Mage_Core_Model_Abstract
44
+ */
45
+ public function load($id, $field=null)
46
+ {
47
+ $rv = parent::load($id, $field);
48
+ if (!$this->hasData('subscriber_id')) {
49
+ if ($field === 'subscriber_id') {
50
+ $this->createFromSubscriber($id);
51
+ } else if ($field === 'subscriber_email') {
52
+ $this->createFromSubscriberEmail($id);
53
+ }
54
+ }
55
+
56
+ return $rv;
57
+ }
58
+
59
+ /**
60
+ * @param $id
61
+ * @throws Exception
62
+ */
63
+ private function createFromSubscriber($id) {
64
+ $subscriber = Mage::getModel('newsletter/subscriber')->load($id);
65
+ $this->setSubscriberId($id);
66
+ $this->setSubscriberEmail($subscriber->getEmail());
67
+ $this->save();
68
+ }
69
+
70
+ /**
71
+ * @param $email
72
+ * @throws Exception
73
+ */
74
+ private function createFromSubscriberEmail($email) {
75
+ $subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);
76
+ $this->setSubscriberId($subscriber->getSubscriberId());
77
+ $this->setSubscriberEmail($subscriber->getEmail());
78
+ $this->save();
79
+ }
80
+ }
app/code/community/Contactlab/Subscribers/Model/Importer/Subscribers.php CHANGED
@@ -76,7 +76,11 @@ class Contactlab_Subscribers_Model_Importer_Subscribers extends Contactlab_Commo
76
  return false;
77
  }
78
  // Check WebForCode
79
- if ((string) $item->CATEGORY_DESC !== $this->getWebFormCode()) {
 
 
 
 
80
  return false;
81
  }
82
  return true;
76
  return false;
77
  }
78
  // Check WebForCode
79
+ $wfc = (string) $item->CATEGORY_DESC;
80
+
81
+ $enabledWfcCodes = array_map('trim', explode(',', $this->getWebFormCode()));
82
+
83
+ if (!in_array($wfc, $enabledWfcCodes)) {
84
  return false;
85
  }
86
  return true;
app/code/community/Contactlab/Subscribers/Model/Newsletter/Subscriber.php CHANGED
@@ -2,6 +2,15 @@
2
 
3
  /**
4
  * Newsletter subscribers model, get and set from SOAP.
 
 
 
 
 
 
 
 
 
5
  */
6
  class Contactlab_Subscribers_Model_Newsletter_Subscriber extends Mage_Newsletter_Model_Subscriber {
7
  // Is customer subscribed?
@@ -38,6 +47,19 @@ class Contactlab_Subscribers_Model_Newsletter_Subscriber extends Mage_Newsletter
38
  return parent::isSubscribed();
39
  }
40
 
 
 
 
 
 
 
 
 
 
 
 
 
 
41
  /**
42
  * Load subscriber by customer
43
  *
2
 
3
  /**
4
  * Newsletter subscribers model, get and set from SOAP.
5
+ * @method int getSubscriberId()
6
+ * @method int getLastSubscribedAt()
7
+ * @method bool hasSubscriberId()
8
+ * @method bool hasSubscriberConfirmCode()
9
+ * @method bool hasStoreId()
10
+ * @method bool hasLastSubscribedAt()
11
+ * @method array getProductIds()
12
+ *
13
+ * @method Contactlab_Subscribers_Model_Newsletter_Subscriber setLastSubscribedAt($value)
14
  */
15
  class Contactlab_Subscribers_Model_Newsletter_Subscriber extends Mage_Newsletter_Model_Subscriber {
16
  // Is customer subscribed?
47
  return parent::isSubscribed();
48
  }
49
 
50
+
51
+ /**
52
+ * Load subscriber data from resource model by email
53
+ *
54
+ * @param int $subscriberId
55
+ */
56
+ public function loadByEmail($subscriberEmail, $storeId=null)
57
+ {
58
+ $this->addData(Mage::getModel('newsletter_resource/subscriber')->loadByEmail($subscriberEmail, $storeId));
59
+ return $this;
60
+ }
61
+
62
+
63
  /**
64
  * Load subscriber by customer
65
  *
app/code/community/Contactlab/Subscribers/Model/Newsletter/Subscribers/Observer.php ADDED
@@ -0,0 +1,201 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Add custom fields to subscribers grid.
5
+ * Class Contactlab_Subscribers_Model_Newsletter_Subscribers_Observer
6
+ */
7
+ class Contactlab_Subscribers_Model_Newsletter_Subscribers_Observer extends Mage_Core_Model_Abstract
8
+ {
9
+
10
+ /**
11
+ * Remove old columns.
12
+ * @param Varien_Event_Observer $event
13
+ * @return $this
14
+ */
15
+ public function removeOldColumns(Varien_Event_Observer $event)
16
+ {
17
+ /* @var $block Mage_Adminhtml_Block_Newsletter_Subscriber_Grid */
18
+ $block = $event->getBlock();
19
+ if (!isset($block)) {
20
+ return $this;
21
+ }
22
+
23
+ if ($block instanceof Mage_Adminhtml_Block_Newsletter_Subscriber_Grid) {
24
+ $this->_removeColumnsToGrid($block);
25
+ }
26
+
27
+ return $this;
28
+ }
29
+
30
+
31
+ /**
32
+ * Append custom columns.
33
+ * @param Varien_Event_Observer $event
34
+ * @return $this
35
+ */
36
+ public function appendCustomColumns(Varien_Event_Observer $event)
37
+ {
38
+ /* @var $block Mage_Adminhtml_Block_Newsletter_Subscriber_Grid */
39
+ $block = $event->getBlock();
40
+ if (!isset($block)) {
41
+ return $this;
42
+ }
43
+
44
+ if ($block instanceof Mage_Adminhtml_Block_Newsletter_Subscriber_Grid) {
45
+ $this->_addColumnsToGrid($block);
46
+ }
47
+
48
+ return $this;
49
+ }
50
+
51
+ /**
52
+ * Remove columns to grid.
53
+ * @param Mage_Adminhtml_Block_Newsletter_Subscriber_Grid $block
54
+ * @return Mage_Adminhtml_Block_Newsletter_Subscriber_Grid
55
+ */
56
+ private function _removeColumnsToGrid(Mage_Adminhtml_Block_Newsletter_Subscriber_Grid $block)
57
+ {
58
+ $block->removeColumn('email')
59
+ ->removeColumn('firstname')
60
+ ->removeColumn('lastname')
61
+ ->sortColumnsByOrder();
62
+ return $block;
63
+ }
64
+
65
+
66
+ /**
67
+ * Add columns to grid.
68
+ * @param Mage_Adminhtml_Block_Newsletter_Subscriber_Grid $block
69
+ * @return Mage_Adminhtml_Block_Newsletter_Subscriber_Grid
70
+ */
71
+ private function _addColumnsToGrid(Mage_Adminhtml_Block_Newsletter_Subscriber_Grid $block)
72
+ {
73
+ $block
74
+ ->addColumnAfter('subscriber_email', array(
75
+ 'header' => Mage::helper('newsletter')->__('Email C'),
76
+ 'index' => 'subscriber_email',
77
+ 'filter_index' => 'main_table.subscriber_email',
78
+ 'default' => '---'), 'subscriber_id')
79
+ ->addColumnAfter('fname', array(
80
+ 'header' => Mage::helper('newsletter')->__('First Name'),
81
+ 'index' => 'fname2',
82
+ 'default' => '---'), 'type')
83
+ ->addColumnAfter('lname', array(
84
+ 'header' => Mage::helper('newsletter')->__('Last Name'),
85
+ 'index' => 'lname2',
86
+ 'default' => '---'), 'fname')
87
+ ->addColumnAfter('dob2', array(
88
+ 'header' => Mage::helper('newsletter')->__('Date of Birth'),
89
+ 'index' => 'dob2',
90
+ 'type' => 'date',
91
+ 'align' => 'center',
92
+ 'default' => '---'), 'lname')
93
+ ->addColumnAfter('gender2', array(
94
+ 'header' => Mage::helper('newsletter')->__('Gender'),
95
+ 'index' => 'gender2',
96
+ 'type' => 'options',
97
+ 'options' => array(
98
+ '',
99
+ Mage::helper('contactlab_subscribers')->__('M'),
100
+ Mage::helper('contactlab_subscribers')->__('F')),
101
+ 'default' => '---'), 'dob2')
102
+ ->addColumnAfter('country2', array(
103
+ 'header' => Mage::helper('newsletter')->__('Country'),
104
+ 'index' => 'country2',
105
+ 'default' => '---'), 'gender2')
106
+ ->addColumnAfter('city2', array(
107
+ 'header' => Mage::helper('newsletter')->__('City'),
108
+ 'index' => 'city2',
109
+ 'default' => '---'), 'country2')
110
+ ->addColumnAfter('zipcode2', array(
111
+ 'header' => Mage::helper('newsletter')->__('Zip Code'),
112
+ 'index' => 'zipcode2',
113
+ 'default' => '---'), 'city2')
114
+ ->addColumnAfter('address2', array(
115
+ 'header' => Mage::helper('newsletter')->__('Address'),
116
+ 'index' => 'address2',
117
+ 'default' => '---'), 'zipcode2')
118
+ ->addColumnAfter('phone2', array(
119
+ 'header' => Mage::helper('newsletter')->__('Landline Phone'),
120
+ 'index' => 'phone2',
121
+ 'default' => '---'), 'address2')
122
+ ->addColumnAfter('mphone', array(
123
+ 'header' => Mage::helper('newsletter')->__('Mobile Phone'),
124
+ 'index' => 'mphone',
125
+ 'default' => '---'), 'phone2')
126
+ ->addColumnAfter('company', array(
127
+ 'header' => Mage::helper('newsletter')->__('Company'),
128
+ 'index' => 'company',
129
+ 'default' => '---'), 'mphone')
130
+ ->addColumnAfter('privacy', array(
131
+ 'header' => Mage::helper('newsletter')->__('Privacy Terms Agreement'),
132
+ 'index' => 'privacy',
133
+ 'type' => 'options',
134
+ 'options' => array('no', 'si')), 'company')
135
+ ->addColumnAfter('custom_1', array(
136
+ 'header' => Mage::helper('newsletter')->__('Custom info 1'),
137
+ 'index' => 'custom_1',
138
+ 'default' => '---'), 'privacy')
139
+ ->addColumnAfter('custom_2', array(
140
+ 'header' => Mage::helper('newsletter')->__('Custom info 2'),
141
+ 'index' => 'custom_2',
142
+ 'default' => '---'), 'custom_1')
143
+ ->addColumnAfter('notes', array(
144
+ 'header' => Mage::helper('newsletter')->__('Notes'),
145
+ 'index' => 'notes',
146
+ 'width' => '100'), 'custom_2')
147
+ ;
148
+
149
+ return $block;
150
+ }
151
+
152
+ public function appendCustomAttributes(Varien_Event_Observer $event)
153
+ {
154
+ if ($this->_isGridAction() && $this->_isNewsletterSubscriberCollection($event)) {
155
+ $this->_addCustomAttributes($event->getCollection());
156
+ }
157
+ }
158
+
159
+ private function _isGridAction()
160
+ {
161
+ $request = Mage::app()->getRequest();
162
+ if ($request->getModuleName() !== 'admin') {
163
+ return false;
164
+ }
165
+ if ($request->getControllerName() !== 'newsletter_subscriber') {
166
+ return false;
167
+ }
168
+ return $request->getActionName() === 'index' ||$request->getActionName() === 'grid';
169
+ }
170
+
171
+ private function _isNewsletterSubscriberCollection($event)
172
+ {
173
+ return $event->hasCollection() && ($event->getCollection() instanceof Mage_Newsletter_Model_Resource_Subscriber_Collection);
174
+ }
175
+
176
+ private function _addCustomAttributes($collection)
177
+ {
178
+ $tablePrefix = (string) Mage::getConfig()->getTablePrefix();
179
+ $collection->getSelect()
180
+ ->joinLeft(array('csnsf' => $tablePrefix.'contactlab_subscribers_newsletter_subscriber_fields'),
181
+ 'csnsf.subscriber_id = main_table.subscriber_id',
182
+ array(
183
+ 'privacy' => 'csnsf.privacy_accepted',
184
+ 'company' => 'csnsf.company',
185
+ 'fname2' => 'csnsf.first_name',
186
+ 'lname2' => 'csnsf.last_name',
187
+ 'gender2' => 'csnsf.gender',
188
+ 'dob2' => 'csnsf.dob',
189
+ 'custom_1' => 'csnsf.custom_1',
190
+ 'custom_2' => 'csnsf.custom_2',
191
+ 'notes' => 'csnsf.notes',
192
+ 'country2' => 'csnsf.country',
193
+ 'address2' => 'csnsf.address',
194
+ 'zipcode2' => 'csnsf.zip_code',
195
+ 'phone2' => 'csnsf.phone',
196
+ 'mphone' => 'csnsf.cell_phone',
197
+ 'email' => 'csnsf.subscriber_email',
198
+ 'city2' => 'csnsf.city'));
199
+ }
200
+
201
+ }
app/code/community/Contactlab/Subscribers/Model/Observer.php CHANGED
@@ -9,7 +9,10 @@ class Contactlab_Subscribers_Model_Observer extends Mage_Core_Model_Abstract {
9
 
10
  private $_toUnsubscribe = array();
11
 
12
- /** Update customer stats, on order save and delete. */
 
 
 
13
  public function updateStats($observer) {
14
  try {
15
  Mage::helper("contactlab_subscribers")
@@ -20,7 +23,10 @@ class Contactlab_Subscribers_Model_Observer extends Mage_Core_Model_Abstract {
20
  }
21
  }
22
 
23
- /** Update customer stats, on order save and delete. */
 
 
 
24
  public function doUpdateStats($observer) {
25
  try {
26
  Mage::helper("contactlab_subscribers")->doUpdateStats();
@@ -30,7 +36,10 @@ class Contactlab_Subscribers_Model_Observer extends Mage_Core_Model_Abstract {
30
  }
31
 
32
 
33
- /** A subscriber has been saved. */
 
 
 
34
  public function subscriberSaved($observer) {
35
  $subscriber = $observer->getEvent()->getDataObject();
36
  $isSubscribed = $subscriber->getStatus() == Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED;
@@ -45,6 +54,7 @@ class Contactlab_Subscribers_Model_Observer extends Mage_Core_Model_Abstract {
45
  /**
46
  * A subscriber has been promoted to customer.
47
  * @param $observer Varien_Event_Observer
 
48
  */
49
  public function subscriberPromotedToCustomer(Varien_Event_Observer $observer) {
50
  $uk = $observer->getEvent()->getDataObject();
@@ -97,7 +107,6 @@ class Contactlab_Subscribers_Model_Observer extends Mage_Core_Model_Abstract {
97
  private function _doUnsubscribeLater(Mage_Newsletter_Model_Subscriber $subscriber) {
98
  Mage::helper("contactlab_commons")->logNotice(sprintf("Subscriber \"%s\" has been promoted to customer without confirm subscription",
99
  $subscriber->getSubscriberEmail()));
100
- $id = $subscriber->getId();
101
  $subscriber->setStatus(Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED)->save();
102
  Mage::log(Mage::getModel('newsletter/subscriber')->load($subscriber->getId())->getData());
103
  if (Mage::getStoreConfigFlag("contactlab_subscribers/subscriber_to_customer/email_on_unsubscribe")) {
@@ -110,20 +119,31 @@ class Contactlab_Subscribers_Model_Observer extends Mage_Core_Model_Abstract {
110
  }
111
 
112
 
113
-
114
- /** Update last subscribed at, before save. */
 
 
 
115
  private function _updateLastSubscribedAt(Mage_Newsletter_Model_Subscriber $subscriber) {
116
  $date = Mage::getModel('core/date')->gmtDate();
117
  $subscriber->setLastSubscribedAt($date);
118
  }
119
 
120
- /** Was unsubscribed? */
 
 
 
 
121
  private function _wasUnsubscribed(Mage_Newsletter_Model_Subscriber $subscriber) {
122
  $oldModel = new Mage_Newsletter_Model_Subscriber();
123
  $oldModel->load($subscriber->getSubscriberId());
124
  return $oldModel->getStatus() !== Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED;
125
  }
126
 
 
 
 
 
127
  private static function _isSubscribedLocally(Mage_Newsletter_Model_Subscriber $subscriber) {
128
  if ($subscriber->getId() && $subscriber->getStatus() == Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED) {
129
  return true;
9
 
10
  private $_toUnsubscribe = array();
11
 
12
+ /**
13
+ * Update customer stats, on order save and delete.
14
+ * @param $observer
15
+ */
16
  public function updateStats($observer) {
17
  try {
18
  Mage::helper("contactlab_subscribers")
23
  }
24
  }
25
 
26
+ /**
27
+ * Update customer stats, on order save and delete.
28
+ * @param $observer
29
+ */
30
  public function doUpdateStats($observer) {
31
  try {
32
  Mage::helper("contactlab_subscribers")->doUpdateStats();
36
  }
37
 
38
 
39
+ /**
40
+ * A subscriber has been saved.
41
+ * @param $observer
42
+ */
43
  public function subscriberSaved($observer) {
44
  $subscriber = $observer->getEvent()->getDataObject();
45
  $isSubscribed = $subscriber->getStatus() == Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED;
54
  /**
55
  * A subscriber has been promoted to customer.
56
  * @param $observer Varien_Event_Observer
57
+ * @return bool
58
  */
59
  public function subscriberPromotedToCustomer(Varien_Event_Observer $observer) {
60
  $uk = $observer->getEvent()->getDataObject();
107
  private function _doUnsubscribeLater(Mage_Newsletter_Model_Subscriber $subscriber) {
108
  Mage::helper("contactlab_commons")->logNotice(sprintf("Subscriber \"%s\" has been promoted to customer without confirm subscription",
109
  $subscriber->getSubscriberEmail()));
 
110
  $subscriber->setStatus(Mage_Newsletter_Model_Subscriber::STATUS_UNSUBSCRIBED)->save();
111
  Mage::log(Mage::getModel('newsletter/subscriber')->load($subscriber->getId())->getData());
112
  if (Mage::getStoreConfigFlag("contactlab_subscribers/subscriber_to_customer/email_on_unsubscribe")) {
119
  }
120
 
121
 
122
+ /**
123
+ * Update last subscribed at, before save.
124
+ * @param Mage_Newsletter_Model_Subscriber $subscriber
125
+ * @deprecated
126
+ */
127
  private function _updateLastSubscribedAt(Mage_Newsletter_Model_Subscriber $subscriber) {
128
  $date = Mage::getModel('core/date')->gmtDate();
129
  $subscriber->setLastSubscribedAt($date);
130
  }
131
 
132
+ /**
133
+ * Was unsubscribed?
134
+ * @param Mage_Newsletter_Model_Subscriber $subscriber
135
+ * @return bool
136
+ */
137
  private function _wasUnsubscribed(Mage_Newsletter_Model_Subscriber $subscriber) {
138
  $oldModel = new Mage_Newsletter_Model_Subscriber();
139
  $oldModel->load($subscriber->getSubscriberId());
140
  return $oldModel->getStatus() !== Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED;
141
  }
142
 
143
+ /**
144
+ * @param Mage_Newsletter_Model_Subscriber $subscriber
145
+ * @return bool
146
+ */
147
  private static function _isSubscribedLocally(Mage_Newsletter_Model_Subscriber $subscriber) {
148
  if ($subscriber->getId() && $subscriber->getStatus() == Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED) {
149
  return true;
app/code/community/Contactlab/Subscribers/Model/Observer/Fields.php ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Observer for manage uk table.
5
+ */
6
+ class Contactlab_Subscribers_Model_Observer_Fields extends Mage_Core_Model_Abstract
7
+ {
8
+
9
+ /**
10
+ * Fill Model.
11
+ * @param Contactlab_Subscribers_Model_Fields $model
12
+ * @param array $parameters
13
+ * @return mixed
14
+ */
15
+ private function fillModel(Contactlab_Subscribers_Model_Fields $model, array $parameters)
16
+ {
17
+ $model->addData($parameters);
18
+ // Parameter "email" has another name: we can't change the original or
19
+ // newsletter observer won't work
20
+ $model->setSubscriberEmail($parameters['email']);
21
+
22
+ // Privacy needs post-elaboration bcause it's a checkbox
23
+ if ($model->hasData('privacy')) {
24
+ $model->setPrivacyAccepted($parameters['privacy'] == 'on');
25
+ } else {
26
+ $model->setPrivacyAccepted(false);
27
+ }
28
+
29
+ /**
30
+ * Date of birth needs post-elaboration too: use locale date format
31
+ * to translate?
32
+ * Also, is it kosher to use php date functions?
33
+ */
34
+ $dateFormat = Mage::app()->getLocale()
35
+ ->getDateStrFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT);
36
+
37
+ // Translate date according to locale date format
38
+ if ($model->hasData('dob')) {
39
+ if (mb_strlen($model->getDob()) < 6) {
40
+ $model->unsDob();
41
+ } else {
42
+ $dateArray = strptime($model->getDob(), $dateFormat);
43
+ $model->setDob(($dateArray['tm_year'] + 1900) . '-' . ($dateArray['tm_mon'] + 1) . '-' . $dateArray['tm_mday']);
44
+ }
45
+ }
46
+ return $model;
47
+ }
48
+
49
+ /**
50
+ * Controller action pre dispatch, queues additional fields
51
+ * triggered by new subscriber action
52
+ * @param $observer
53
+ * @throws Exception
54
+ */
55
+ public function controllerActionPreDispatch($observer)
56
+ {
57
+ $action = $observer->getEvent()->getControllerAction();
58
+ $request = $action->getRequest();
59
+ if (!$request->isPost()) {
60
+ // Probably unnecessary
61
+ return;
62
+ }
63
+ if (!($action->getFullActionName() === 'newsletter_subscriber_new')) {
64
+ return;
65
+ }
66
+
67
+ $parameters = $request->getParams();
68
+
69
+ /** @var $fields Contactlab_Subscribers_Model_Fields */
70
+ $fields = Mage::getModel("contactlab_subscribers/fields");
71
+ $fields->setData($parameters);
72
+ // Parameter "email" has another name: we can't change the original or newsletter observer won't work
73
+ $fields->setSubscriberEmail($parameters['email']);
74
+ //privacy needs post-elaboration because it's a checkbox
75
+ if ($fields->hasData('privacy')) {
76
+ $fields->setPrivacyAccepted($parameters['privacy'] == 'on');
77
+ } else {
78
+ $fields->setPrivacyAccepted(false);
79
+ }
80
+ /**
81
+ * Date of birth needs post-elaboration too: use locale date format
82
+ * to translate?
83
+ * Also, is it kosher to use php date functions?
84
+ */
85
+ $dateFormat = Mage::app()->getLocale()->getDateStrFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT);
86
+
87
+ // Translate date according to locale date format
88
+ if ($fields->hasData('dob')) {
89
+ if (mb_strlen($fields->getDob()) < 6) {
90
+ $fields->unsDob();
91
+ } else {
92
+ $dateArray = strptime($fields->getDob(), $dateFormat);
93
+ $fields->setDob(($dateArray['tm_year'] + 1900) . '-' . ($dateArray['tm_mon'] + 1) . '-' . $dateArray['tm_mday']);
94
+ }
95
+ }
96
+ /**
97
+ * TODO: Server-side data validation
98
+ */
99
+ $fields->save();
100
+ }
101
+
102
+ public function afterSubscriberSaved($observer)
103
+ {
104
+ Mage::helper('contactlab_commons')->logInfo('AFTERSUBSAVED:' . print_r($observer->getEvent()->getDataObject(), true));
105
+ $email = $observer->getEvent()->getDataObject()->getSubscriberEmail();
106
+ $subs = Mage::getModel("contactlab_subscribers/fields")->load($email, 'subscriber_email');
107
+ if ($subs->hasData('entity_id')) {
108
+ /**
109
+ * If the subscriber was already present in our table, this means that
110
+ * the record was saved through a form submission
111
+ */
112
+ /*
113
+ * Set subscriberId only if not set yet
114
+ */
115
+ if (!$subs->hasSubscriberId()) {
116
+ Mage::helper('contactlab_commons')->logInfo('SAVING FIELDS FROM afterSubscriberSaved 1:');
117
+ $subs->setSubscriberId($observer->getDataObject()->getSubscriberId())->save();
118
+ }
119
+ } else {
120
+ /*
121
+ * Otherwise, subscriber was already a customer, so we require customer id
122
+ */
123
+ Mage::helper('contactlab_commons')->logInfo('empty data : ' . print_r($observer->getDataObject()->getData(), true));
124
+ if (!$observer->getDataObject()->hasCustomerId()) {
125
+ return;
126
+ }
127
+
128
+ $customerId = $observer->getDataObject()->getCustomerId();
129
+ /**
130
+ * Transfer all fields from customer data
131
+ */
132
+ $customer = Mage::getModel("customer/customer")->load($customerId);
133
+ $subs->setFirstName($customer->getFirstname());
134
+ $subs->setLastName($customer->getLastname());
135
+ $subs->setDob($customer->getDob());
136
+ $subs->setGender($customer->getGender());
137
+ /*
138
+ * Manage info saved in address attribute
139
+ * Using default billing address
140
+ */
141
+ $address = Mage::getModel('customer/address')->load($customer->getDefaultBilling());
142
+
143
+ $subs->setCity($address->getCity());
144
+ $subs->setCompany($address->getCompany());
145
+ $subs->setPhone($address->getTelephone());
146
+ $subs->setAddress(implode(',', $address->getStreet()));
147
+ $subs->setZipCode($address->getPostcode());
148
+ $name = Mage::getModel('directory/country')->load($address->getCountryId())->getName();
149
+ $subs->setCountry($name);
150
+ $subs->setSubscriberEmail($observer->getDataObject()->getSubscriberEmail());
151
+ $subs->setSubscriberId($observer->getDataObject()->getSubscriberId())->save();
152
+ }
153
+
154
+
155
+ }
156
+
157
+ /**
158
+ * Before subscriber deleted.
159
+ * @param $observer
160
+ * @throws Exception
161
+ * @deprecated uses cascade
162
+ */
163
+ public function beforeSubscriberDeleted($observer)
164
+ {
165
+ /*$id = $observer->getEvent()->getDataObject()->getSubscriberId();
166
+ Mage::getModel("contactlab_subscribers/fields")->load($id, 'subscriber_id')->delete();*/
167
+ }
168
+
169
+ /**
170
+ * @param Varien_Event_Observer $params
171
+ */
172
+ public function updateFields(Varien_Event_Observer $params)
173
+ {
174
+ /** @var $fields Contactlab_Subscribers_Model_Fields */
175
+ /*
176
+ $fields = Mage::getModel('contactlab_subscribers/fields')
177
+ ->load($params->getData('email'), 'subscriber_email');
178
+ */
179
+ $fields = $this->checkEditParams($params);
180
+
181
+ if ($fields && $fields->hasData()) {
182
+ $this->fillModel($fields, $params->getData())->save();
183
+ }
184
+ }
185
+
186
+ private function checkEditParams($params) {
187
+ //check params
188
+ if (!$params->getData('chkhash')
189
+ || !$params->getData('chkid')) {
190
+ return null;
191
+ }
192
+
193
+ // Load the subscriber and the additional fields entity
194
+
195
+ $subs = Mage::getModel('newsletter/subscriber')->load($params->getData('chkid'));
196
+ if (!$subs->hasData('subscriber_id')) {
197
+ return null;
198
+ }
199
+
200
+ /** @noinspection PhpUndefinedMethodInspection */
201
+ if (!$subs->hasSubscriberConfirmCode()) {
202
+ return null;
203
+ }
204
+
205
+ if ($subs->getSubscriberConfirmCode() != $params->getData('chkhash')) {
206
+ return null;
207
+ }
208
+
209
+ return Mage::getModel('contactlab_subscribers/fields')->load($subs->getSubscriberId(), 'subscriber_id');
210
+
211
+ }
212
+ }
app/code/community/Contactlab/Subscribers/Model/Observer/Uk.php CHANGED
@@ -10,9 +10,15 @@ class Contactlab_Subscribers_Model_Observer_Uk extends Mage_Core_Model_Abstract
10
  private $toUnsubscribeRecords = array();
11
 
12
  /** A subscriber has been saved. */
13
- public function subscriberSaved($observer) {
14
- $subscriber = $observer->getEvent()->getDataObject();
15
  $customerId = $subscriber->getCustomerId();
 
 
 
 
 
 
16
  if ($customerId == 0) {
17
  $customerId = NULL;
18
  }
@@ -43,6 +49,14 @@ class Contactlab_Subscribers_Model_Observer_Uk extends Mage_Core_Model_Abstract
43
  $source = $observer->getEvent()->getDataObject();
44
  $this->_doRecordDelete($source);
45
  $this->purge($observer);
 
 
 
 
 
 
 
 
46
  }
47
 
48
  /**
10
  private $toUnsubscribeRecords = array();
11
 
12
  /** A subscriber has been saved. */
13
+ public function subscriberSaved($observer) {
14
+ $subscriber = $observer->getEvent()->getDataObject();
15
  $customerId = $subscriber->getCustomerId();
16
+ /* Added this control to prevent UK Integrity constraint violation */
17
+ if($subscriber->getSavedCustomerId())
18
+ {
19
+ $customerId = $subscriber->getSavedCustomerId();
20
+ }
21
+
22
  if ($customerId == 0) {
23
  $customerId = NULL;
24
  }
49
  $source = $observer->getEvent()->getDataObject();
50
  $this->_doRecordDelete($source);
51
  $this->purge($observer);
52
+
53
+ /* This will delete the customer fixing the MultiWebsite Subscriber */
54
+ $customer = $observer->getEvent()->getCustomer();
55
+ $subscriber = Mage::getModel('newsletter/subscriber')
56
+ ->loadByEmail($customer->getEmail(), $customer->getStoreId());
57
+ if($subscriber->getId()) {
58
+ $subscriber->delete();
59
+ }
60
  }
61
 
62
  /**
app/code/community/Contactlab/Subscribers/Model/Resource/Fields.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Fields resource.
5
+ */
6
+ class Contactlab_Subscribers_Model_Resource_Fields extends Mage_Core_Model_Mysql4_Abstract {
7
+ /**
8
+ * Constructor.
9
+ */
10
+ public function _construct() {
11
+ $this->_init("contactlab_subscribers/newsletter_subscriber_fields", "entity_id");
12
+ }
13
+
14
+
15
+ }
app/code/community/Contactlab/Subscribers/Model/Resource/Fields/Collection.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Additional Fields collection.
5
+ */
6
+ class Contactlab_Subscribers_Model_Resource_Fields_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract {
7
+
8
+ /**
9
+ * Construct.
10
+ */
11
+ public function _construct() {
12
+ $this->_init("contactlab_subscribers/newsletter_subscriber_fields");
13
+ }
14
+ }
15
+
app/code/community/Contactlab/Subscribers/Model/Resource/Newsletter/Subscriber.php ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Allow multi website newsletter subscriber.
5
+ * Class Contactlab_Subscribers_Model_Resource_Newsletter_Subscriber
6
+ */
7
+ class Contactlab_Subscribers_Model_Resource_Newsletter_Subscriber
8
+ extends Mage_Newsletter_Model_Resource_Subscriber
9
+ {
10
+ /**
11
+ * Load subscriber from DB by email
12
+ *
13
+ * @param string $subscriberEmail
14
+ * @return array
15
+ */
16
+ public function loadByEmail($subscriberEmail, $storeId=null)
17
+ {
18
+ if (!$this->_isEnabledMultiWebsiteSubscriber()) {
19
+ return parent::loadByEmail($subscriberEmail);
20
+ }
21
+
22
+ if(!$storeId)
23
+ {
24
+ /** @var $customerSession Mage_Customer_Model_Session */
25
+ $customerSession = Mage::getSingleton('customer/session');
26
+ $ownerId = Mage::getModel('customer/customer')
27
+ ->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
28
+ ->loadByEmail($subscriberEmail)
29
+ ->getId();
30
+
31
+ $storeId = $customerSession->isLoggedIn() && $ownerId == $customerSession->getId()
32
+ ? $customerSession->getCustomer()->getStoreId()
33
+ : Mage::app()->getStore()->getId();
34
+ }
35
+
36
+ $select = $this->getReadConnection()->select()
37
+ ->from($this->getMainTable())
38
+ ->where('subscriber_email=:subscriber_email')
39
+ ->where('store_id=:store_id'); // Add store ID for newsletters
40
+
41
+ $result = $this->getReadConnection()->fetchRow($select, array(
42
+ 'subscriber_email' => $subscriberEmail,
43
+ 'store_id' => $storeId
44
+ ));
45
+ if (!$result) {
46
+ return array();
47
+ }
48
+
49
+ return $result;
50
+ }
51
+
52
+ /**
53
+ * Load subscriber by customer
54
+ *
55
+ * @param Mage_Customer_Model_Customer $customer
56
+ * @return array
57
+ */
58
+ public function loadByCustomer(Mage_Customer_Model_Customer $customer)
59
+ {
60
+ if (!$this->_isEnabledMultiWebsiteSubscriber()) {
61
+ return parent::loadByCustomer($customer);
62
+ }
63
+ $select = $this->_read->select()
64
+ ->from($this->getMainTable())
65
+ ->where('customer_id=:customer_id')
66
+ ->where('store_id=:store_id');
67
+
68
+ $result = $this->_read->fetchRow($select, array(
69
+ 'customer_id' => $customer->getId(),
70
+ 'store_id' => $customer->getStoreId()
71
+ ));
72
+
73
+ if ($result) {
74
+ return $result;
75
+ }
76
+
77
+ $select = $this->_read->select()
78
+ ->from($this->getMainTable())
79
+ ->where('subscriber_email=:subscriber_email')
80
+ ->where('store_id=:store_id');
81
+
82
+ $result = $this->_read->fetchRow($select, array(
83
+ 'subscriber_email' => $customer->getEmail(),
84
+ 'store_id' => $customer->getStoreId()
85
+ ));
86
+
87
+ if ($result) {
88
+ return $result;
89
+ }
90
+
91
+ return array();
92
+ }
93
+
94
+ /**
95
+ * Check configuration and Magento version.
96
+ * @return bool
97
+ */
98
+ private function _isEnabledMultiWebsiteSubscriber()
99
+ {
100
+ return $this->_isEnabledConfiguration() && $this->_greaterThan14();
101
+ }
102
+
103
+ /**
104
+ * Is rewrite enabled.
105
+ * @return bool
106
+ */
107
+ private function _isEnabledConfiguration()
108
+ {
109
+ return Mage::getStoreConfigFlag('contactlab_subscribers/global/enable_multiwebsite_subscription');
110
+ }
111
+
112
+ /**
113
+ * Is Mage > 1.4.
114
+ * @return bool
115
+ */
116
+ private function _greaterThan14()
117
+ {
118
+ if ($this->_isEnterprise()) {
119
+ return true;
120
+ }
121
+ $version = Mage::getVersionInfo();
122
+ return $version['major'] >= '1' && $version['minor'] > '4';
123
+ }
124
+
125
+ /**
126
+ * Is Enterprise edition.
127
+ * @return bool
128
+ */
129
+ private function _isEnterprise()
130
+ {
131
+ return Mage::getEdition() == Mage::EDITION_ENTERPRISE;
132
+ }
133
+ }
app/code/community/Contactlab/Subscribers/Model/Resource/Uk.php CHANGED
@@ -7,11 +7,15 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
7
  private $_task;
8
  private $_hasNotices = false;
9
 
 
 
 
10
  /**
11
  * Constructor.
12
  */
13
- public function _construct() {
14
- $this->_init("contactlab_subscribers/uk", "entity_id");
 
15
  }
16
 
17
  /** Remove null null records. */
@@ -28,6 +32,7 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
28
 
29
  /** Update keys. */
30
  public function update($doit = false) {
 
31
  $wr = $this->_getWriteAdapter();
32
  $session = Mage::getSingleton('adminhtml/session');
33
  $this->_purge($wr, $doit, true, $session);
@@ -36,20 +41,81 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
36
  }
37
 
38
  /** Insert existing records. */
39
- private function _insertExistingRecords($adapter, $doit, $session) {
40
- $this->_makeCouples($adapter, $doit, $session);
41
- $this->_deleteDuplicatedSubscribers($adapter, $doit, $session);
42
-
43
- $this->_insertFromNewsletterSubscriber($adapter, $doit, $session);
44
- $this->_updateSubscriberId($adapter, $doit, $session);
45
- $this->_insertFromCustomers($adapter, $doit, $session);
46
- $this->_updateCustomerId($adapter, $doit, $session);
 
 
 
 
 
 
 
 
 
47
  return $this;
48
  }
49
-
50
  /** Delete duplicated subscribers. */
51
- private function _deleteDuplicatedSubscribers($adapter, $doit, $session) {
52
- // FIXME: SURE!?
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
53
  $subscribers = "newsletter/subscriber";
54
  $subscribersTable = $this->getTable($subscribers);
55
  $select = $adapter
@@ -70,11 +136,11 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
70
  ->select()->from(array('s' => $subscribersTable), array('subscriber_id'))
71
  ->where("customer_id = " . $id['customer_id'])
72
  ->order("subscriber_status desc");
73
- Mage::log($select->assemble());
74
  $first = true;
75
  foreach ($adapter->fetchAll($select) as $id) {
76
  if (!$first) {
77
- Mage::log("Will delete " . $id['subscriber_id']);
78
  if ($doit) {
79
  $select = $adapter->query("delete from $subscribersTable where subscriber_id = " . $id['subscriber_id']);
80
  }
@@ -94,32 +160,54 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
94
  * Insert all record from newsletter_subscriber
95
  * where customer_id and subscriber_id are not in uk table
96
  */
97
- private function _insertFromNewsletterSubscriber($adapter, $doit, $session) {
 
 
98
  $ukTable = $this->getMainTable();
 
99
  $subscribers = "newsletter/subscriber";
100
  $subscribersTable = $this->getTable($subscribers);
 
 
 
 
 
101
  $select = $adapter
102
  ->select()->from(array('s' => $subscribersTable), array(
103
- 'subscriber_id' => 'subscriber_id',
104
- 'customer_id' => 'if(customer_id = 0, NULL, customer_id)')
105
- )
106
- ->where("customer_id not in (select customer_id from $ukTable where customer_id is not null) and subscriber_id not in (select subscriber_id from $ukTable where subscriber_id is not null)");
107
-
108
- $count = $this->_getCount($adapter, $select);
109
- if ($count === 0) {
110
- $this->addSuccess("No newsletter subscribers to insert", $session);
111
- return $this;
 
 
 
 
112
  }
113
  if ($doit) {
114
  // backward compatibility
115
  if ($this->_useCoreInsertFrom()) {
116
- $sql = $adapter->insertFromSelect($select, $ukTable, array('subscriber_id', 'customer_id'));
 
 
117
  } else {
118
- $sql = $this->_insertFromSelect($adapter, $select, $ukTable, array('subscriber_id', 'customer_id'));
 
 
 
 
 
 
 
 
 
 
119
  }
120
- Mage::log($sql);
121
- $this->addError("$count missing subscribers inserted", $session);
122
- return $adapter->query($sql);
123
  } else {
124
  $this->addNotice("Would insert $count missing subscribers", $session);
125
  return $this;
@@ -130,20 +218,28 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
130
  * Insert all record from customers
131
  * where customer_id is no in uk table and it's not a newsletter subscriber
132
  */
133
- private function _insertFromCustomers($adapter, $doit, $session) {
 
134
  $ukTable = $this->getMainTable();
135
  $customers = "customer/entity";
136
  $customersTable = $this->getTable($customers);
137
  $subscribers = "newsletter/subscriber";
138
  $subscribersTable = $this->getTable($subscribers);
 
139
  $select = $adapter
140
  ->select()->from(array('c' => $customersTable), array('entity_id'))
141
- ->where("entity_id not in (select customer_id from $ukTable where customer_id is not null) and entity_id not in (select customer_id from $subscribersTable)");
142
-
143
- $count = $this->_getCount($adapter, $select);
144
- if ($count === 0) {
145
- $this->addSuccess("No customer to insert", $session);
146
- return $this;
 
 
 
 
 
 
147
  }
148
  if ($doit) {
149
  // backward compatibility
@@ -152,28 +248,32 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
152
  } else {
153
  $sql = $this->_insertFromSelect($adapter, $select, $ukTable, array('customer_id'));
154
  }
155
- Mage::log($sql);
156
- $this->addError("$count missing customers inserted", $session);
157
- return $adapter->query($sql);
 
 
 
 
158
  } else {
159
- $this->addNotice("Would insert $count missing customers", $session);
160
- return $this;
161
  }
162
  }
163
 
164
  /**
165
  * Update all uk rows where subscriber_id is not set.
166
  */
167
- private function _updateSubscriberId($adapter, $doit, $session) {
 
 
168
  $ukTable = $this->getMainTable();
169
  $subscribers = "newsletter/subscriber";
170
  $subscribersTable = $this->getTable($subscribers);
171
-
172
  $select = $adapter
173
  ->select()->from(array('u' => $ukTable), array('entity_id'))
174
  ->join(array("s" => $subscribersTable), "s.customer_id = u.customer_id", array('subscriber_id'))
175
  ->where("s.subscriber_id != ifnull(u.subscriber_id, -1)");
176
- Mage::log($select->assemble());
177
 
178
  $count = $this->_getCount($adapter, $select);
179
  if ($count === 0) {
@@ -196,15 +296,20 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
196
  /**
197
  * Update all uk rows where customer_id is not set.
198
  */
199
- private function _updateCustomerId($adapter, $doit, $session) {
 
 
200
  $ukTable = $this->getMainTable();
201
  $subscribers = "newsletter/subscriber";
202
  $subscribersTable = $this->getTable($subscribers);
203
-
204
- $select = $adapter
205
- ->select()->from(array('u' => $ukTable), array('entity_id'))
206
- ->join(array("s" => $subscribersTable), "s.subscriber_id = u.subscriber_id", array('customer_id'))
207
- ->where("s.customer_id != ifnull(u.customer_id, -1) and s.customer_id != 0");
 
 
 
208
 
209
  $count = $this->_getCount($adapter, $select);
210
  if ($count === 0) {
@@ -212,11 +317,21 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
212
  return $this;
213
  }
214
 
 
 
215
  if ($doit) {
216
- Mage::log($select->assemble());
217
- foreach ($adapter->fetchAll($select) as $row) {
218
- $adapter->query("update $ukTable set customer_id = " .
 
 
 
 
 
 
219
  $row['customer_id'] . " where entity_id = " . $row['entity_id']);
 
 
220
  }
221
  $this->addError("$count missing customer_id updated", $session);
222
  } else {
@@ -228,7 +343,8 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
228
  /**
229
  * Couple rows discupled.
230
  */
231
- private function _makeCouples($adapter, $doit, $session) {
 
232
  $ukTable = $this->getMainTable();
233
  $subscribers = "newsletter/subscriber";
234
  $subscribersTable = $this->getTable($subscribers);
@@ -246,9 +362,8 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
246
  }
247
 
248
  if ($doit) {
249
- Mage::log($select->assemble());
250
  foreach ($adapter->fetchAll($select) as $row) {
251
- Mage::log($row);
252
  $adapter->query("delete from $ukTable where entity_id = " .
253
  $row['customer_uk_id']);
254
  $adapter->query("update $ukTable set customer_id = " . $row['customer_id'] . " where entity_id = " .
@@ -261,8 +376,8 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
261
  return $this;
262
  }
263
 
264
- private function _truncate($adapter, $session) {
265
- $sql = "truncate table " . $this->getMainTable();
266
  $adapter->query($sql);
267
  $this->addSuccess("Table truncated", $session);
268
  return $this;
@@ -277,7 +392,8 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
277
  }
278
 
279
  /** Remove null null records. */
280
- private function _purge($adapter, $doit, $messages, $session) {
 
281
  $select = $adapter->select()
282
  ->from($this->getMainTable())
283
  ->where('subscriber_id is null and customer_id is null');
@@ -305,7 +421,7 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
305
  return $this;
306
  }
307
 
308
- private function _getCount($adapter, Varien_Db_Select $select) {
309
  $countSelect = $adapter->select()
310
  ->from(
311
  array("t" => $select), array("c" => new Zend_Db_Expr('count(1)')));
@@ -318,7 +434,7 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
318
  /**
319
  * For backward compatibility
320
  */
321
- private function _insertFromSelect($adapter, Varien_Db_Select $select, $table, array $fields = array(), $mode = false) {
322
  $query = 'INSERT';
323
  if ($mode == $adapter::INSERT_IGNORE) {
324
  $query .= ' IGNORE';
@@ -376,6 +492,9 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
376
  * @param Mage_Adminhtml_Model_Session $session
377
  */
378
  public function addSuccess($message, $session) {
 
 
 
379
  if ($this->hasTask() && $this->getTask()->getSuppressSuccessUk()) {
380
  return;
381
  }
@@ -393,6 +512,9 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
393
  * @param Mage_Adminhtml_Model_Session $session
394
  */
395
  public function addError($message, $session) {
 
 
 
396
  if (!is_null($session) && $session instanceof Mage_Adminhtml_Model_Session) {
397
  $session->addError($message);
398
  }
@@ -408,6 +530,9 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
408
  */
409
  public function addNotice($message, $session) {
410
  $this->setHasNotices();
 
 
 
411
  if (!is_null($session) && $session instanceof Mage_Adminhtml_Model_Session) {
412
  $session->addNotice($message);
413
  }
@@ -416,12 +541,46 @@ class Contactlab_Subscribers_Model_Resource_Uk extends Mage_Core_Model_Mysql4_Ab
416
  }
417
  }
418
 
419
- public function setHasNotices() {
420
- $this->_hasNotices = true;
421
  }
422
 
423
  public function getHasNotices() {
424
  return $this->_hasNotices;
425
  }
426
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
427
  }
 
7
  private $_task;
8
  private $_hasNotices = false;
9
 
10
+ /** @var Contactlab_Commons_Helper_Data */
11
+ private $_helper;
12
+
13
  /**
14
  * Constructor.
15
  */
16
+ public function _construct() {
17
+ $this->_init("contactlab_subscribers/uk", "entity_id");
18
+ $this->_helper = Mage::helper('contactlab_commons');
19
  }
20
 
21
  /** Remove null null records. */
32
 
33
  /** Update keys. */
34
  public function update($doit = false) {
35
+ /* @var $wr Varien_Db_Adapter_Pdo_Mysql */
36
  $wr = $this->_getWriteAdapter();
37
  $session = Mage::getSingleton('adminhtml/session');
38
  $this->_purge($wr, $doit, true, $session);
41
  }
42
 
43
  /** Insert existing records. */
44
+ private function _insertExistingRecords(Varien_Db_Adapter_Pdo_Mysql $adapter, $doit, $session) {
45
+ $this->_helper->logNotice("----------- _insertExistingRecords");
46
+ $this->_createTmpTables($adapter);
47
+ try {
48
+ $this->_makeCouples($adapter, $doit, $session);
49
+ $this->_deleteDuplicatedSubscribers($adapter, $doit, $session);
50
+ $this->_deleteOrphanSubscribers($adapter, $doit, $session);
51
+ $this->_insertFromNewsletterSubscriber($adapter, $doit, $session);
52
+ $this->_updateSubscriberId($adapter, $doit, $session);
53
+ $this->_insertFromCustomers($adapter, $doit, $session);
54
+ $this->_updateCustomerId($adapter, $doit, $session);
55
+ $this->_helper->logNotice("----------- DONE");
56
+ } catch (Exception $e) {
57
+ $this->_dropTmpTables($adapter);
58
+ throw $e;
59
+ }
60
+ $this->_dropTmpTables($adapter);
61
  return $this;
62
  }
63
+
64
  /** Delete duplicated subscribers. */
65
+ private function _deleteOrphanSubscribers($adapter, $doit, $session) {
66
+ $subscribers = "newsletter/subscriber";
67
+ $tablePrefix = (string) Mage::getConfig()->getTablePrefix();
68
+
69
+ $subscribersTable = $this->getTable($subscribers);
70
+ $select = $adapter
71
+ ->select()->from(array('s' => $subscribersTable), array('customer_id','subscriber_id'))
72
+ ->where("customer_id > 0 AND customer_id NOT IN (select entity_id FROM {$tablePrefix}customer_entity)");
73
+
74
+ $count = $this->_getCount($adapter, $select);
75
+ if ($count === 0) {
76
+ $this->addSuccess("No orphan subscribers found", $session);
77
+ return $this;
78
+ }
79
+
80
+ if ($doit) {
81
+ /*
82
+ foreach ($adapter->fetchAll($select) as $id) {
83
+ $select = $adapter
84
+ ->select()->from(array('s' => $subscribersTable), array('subscriber_id'))
85
+ ->where("customer_id = " . $id['customer_id'])
86
+ ->order("subscriber_status desc");
87
+ Mage::log($select->assemble());
88
+ $first = true;
89
+ foreach ($adapter->fetchAll($select) as $id) {
90
+ if (!$first) {
91
+ Mage::log("Will delete " . $id['subscriber_id']);
92
+ if ($doit) {
93
+ $select = $adapter->query("delete from $subscribersTable where subscriber_id = " . $id['subscriber_id']);
94
+ }
95
+ }
96
+ $first = false;
97
+ }
98
+ }
99
+ $this->addError("$count duplicated subscribers removed", $session);
100
+ return $this;
101
+ */
102
+ } else {
103
+ $string='Table '.$subscribersTable.' subscriber_id: ';
104
+ foreach ($adapter->fetchAll($select) as $id) {
105
+ $string.= $id["subscriber_id"].",";
106
+ }
107
+ $bckNotice = $this->getHasNotices();
108
+ $this->addNotice("There are $count orphan subscribers :: $string", $session);
109
+ $this->setHasNotices($bckNotice);
110
+ return $this;
111
+ }
112
+ }
113
+
114
+
115
+ /** Delete duplicated subscribers. */
116
+ private function _deleteDuplicatedSubscribers(Varien_Db_Adapter_Pdo_Mysql $adapter, $doit, $session) {
117
+
118
+ $this->_helper->logNotice("----------- _deleteDuplicatedSubscribers");
119
  $subscribers = "newsletter/subscriber";
120
  $subscribersTable = $this->getTable($subscribers);
121
  $select = $adapter
136
  ->select()->from(array('s' => $subscribersTable), array('subscriber_id'))
137
  ->where("customer_id = " . $id['customer_id'])
138
  ->order("subscriber_status desc");
139
+ $this->_helper->logNotice($select->assemble());
140
  $first = true;
141
  foreach ($adapter->fetchAll($select) as $id) {
142
  if (!$first) {
143
+ $this->_helper->logNotice("Will delete " . $id['subscriber_id']);
144
  if ($doit) {
145
  $select = $adapter->query("delete from $subscribersTable where subscriber_id = " . $id['subscriber_id']);
146
  }
160
  * Insert all record from newsletter_subscriber
161
  * where customer_id and subscriber_id are not in uk table
162
  */
163
+ private function _insertFromNewsletterSubscriber(Varien_Db_Adapter_Pdo_Mysql $adapter, $doit, $session) {
164
+
165
+ $this->_helper->logNotice("----------- _insertFromNewsletterSubscriber");
166
  $ukTable = $this->getMainTable();
167
+
168
  $subscribers = "newsletter/subscriber";
169
  $subscribersTable = $this->getTable($subscribers);
170
+ $customers = "customer/entity";
171
+ $customersTable = $this->getTable($customers);
172
+
173
+ $tablePrefix = (string) Mage::getConfig()->getTablePrefix();
174
+
175
  $select = $adapter
176
  ->select()->from(array('s' => $subscribersTable), array(
177
+ 'subscriber_id' => 'subscriber_id')
178
+ )
179
+ ->joinLeft(array("c" => $customersTable), "s.customer_id = c.entity_id", array('customer_id' => 'entity_id'))
180
+ ->where("customer_id not in (select customer_id from {$tablePrefix}contactlab_customers_tmp_idx) and subscriber_id
181
+ not in (select subscriber_id from {$tablePrefix}contactlab_subscribers_tmp_idx)");
182
+
183
+ $this->_helper->logNotice($select->assemble());
184
+ if (!$doit) {
185
+ $count = $this->_getCount($adapter, $select);
186
+ if ($count === 0) {
187
+ $this->addSuccess("No newsletter subscribers to insert", $session);
188
+ return $this;
189
+ }
190
  }
191
  if ($doit) {
192
  // backward compatibility
193
  if ($this->_useCoreInsertFrom()) {
194
+ $sql = $adapter->insertFromSelect($select,
195
+ $ukTable, array('subscriber_id', 'customer_id')/*,
196
+ Varien_Db_Adapter_Interface::INSERT_IGNORE*/);
197
  } else {
198
+ $sql = $this->_insertFromSelect($adapter, $select,
199
+ $ukTable,
200
+ array('subscriber_id', 'customer_id')/*,
201
+ Varien_Db_Adapter_Interface::INSERT_IGNORE*/);
202
+ }
203
+ $this->_helper->logNotice($sql);
204
+
205
+ $rv = $adapter->query($sql);
206
+ $count = $rv->rowCount();
207
+ if ($count > 0) {
208
+ $this->addError("$count missing subscribers inserted", $session);
209
  }
210
+ return $rv;
 
 
211
  } else {
212
  $this->addNotice("Would insert $count missing subscribers", $session);
213
  return $this;
218
  * Insert all record from customers
219
  * where customer_id is no in uk table and it's not a newsletter subscriber
220
  */
221
+ private function _insertFromCustomers(Varien_Db_Adapter_Pdo_Mysql $adapter, $doit, $session) {
222
+ $this->_helper->logNotice("----------- _insertFromCustomers");
223
  $ukTable = $this->getMainTable();
224
  $customers = "customer/entity";
225
  $customersTable = $this->getTable($customers);
226
  $subscribers = "newsletter/subscriber";
227
  $subscribersTable = $this->getTable($subscribers);
228
+ $tablePrefix = (string) Mage::getConfig()->getTablePrefix();
229
  $select = $adapter
230
  ->select()->from(array('c' => $customersTable), array('entity_id'))
231
+ ->where("entity_id not in (select customer_id from {$tablePrefix}contactlab_customers_tmp_idx) and entity_id not in (select customer_id from $subscribersTable)");
232
+
233
+ $this->_helper->logNotice($select->assemble());
234
+ if (!$doit) {
235
+ $count = $this->_getCount($adapter, $select);
236
+ if ($count === 0) {
237
+ $this->addSuccess("No customer to insert", $session);
238
+ return $this;
239
+ } else {
240
+ $this->addNotice("Would insert $count missing customers", $session);
241
+ return $this;
242
+ }
243
  }
244
  if ($doit) {
245
  // backward compatibility
248
  } else {
249
  $sql = $this->_insertFromSelect($adapter, $select, $ukTable, array('customer_id'));
250
  }
251
+ $this->_helper->logNotice($sql);
252
+ $rv = $adapter->query($sql);
253
+ $count = $rv->rowCount();
254
+ if ($count > 0) {
255
+ $this->addError("$count missing customers inserted", $session);
256
+ }
257
+ return $rv;
258
  } else {
 
 
259
  }
260
  }
261
 
262
  /**
263
  * Update all uk rows where subscriber_id is not set.
264
  */
265
+ private function _updateSubscriberId(Varien_Db_Adapter_Pdo_Mysql $adapter, $doit, $session) {
266
+ $this->_helper->logNotice("----------- _updateSubscriberId");
267
+
268
  $ukTable = $this->getMainTable();
269
  $subscribers = "newsletter/subscriber";
270
  $subscribersTable = $this->getTable($subscribers);
271
+
272
  $select = $adapter
273
  ->select()->from(array('u' => $ukTable), array('entity_id'))
274
  ->join(array("s" => $subscribersTable), "s.customer_id = u.customer_id", array('subscriber_id'))
275
  ->where("s.subscriber_id != ifnull(u.subscriber_id, -1)");
276
+ $this->_helper->logNotice($select->assemble());
277
 
278
  $count = $this->_getCount($adapter, $select);
279
  if ($count === 0) {
296
  /**
297
  * Update all uk rows where customer_id is not set.
298
  */
299
+ private function _updateCustomerId(Varien_Db_Adapter_Pdo_Mysql $adapter, $doit, $session) {
300
+
301
+ $this->_helper->logNotice("----------- _updateCustomerId");
302
  $ukTable = $this->getMainTable();
303
  $subscribers = "newsletter/subscriber";
304
  $subscribersTable = $this->getTable($subscribers);
305
+ $customers = "customer/entity";
306
+ $customersTable = $this->getTable($customers);
307
+
308
+ $select = $adapter->select()->from(array('u' => $ukTable), array('entity_id'))
309
+ ->join(array("s" => $subscribersTable), "s.subscriber_id = u.subscriber_id", array(''))
310
+ ->joinLeft(array("c" => $customersTable), "s.customer_id = c.entity_id", array('customer_id' => 'entity_id'))
311
+ ->where("ifnull(c.entity_id, -1) != ifnull(u.customer_id, -1)");
312
+
313
 
314
  $count = $this->_getCount($adapter, $select);
315
  if ($count === 0) {
317
  return $this;
318
  }
319
 
320
+
321
+
322
  if ($doit) {
323
+ $this->_helper->logNotice($select->assemble());
324
+
325
+ foreach ($adapter->fetchAll($select) as $row) {
326
+ if(!$row['customer_id'])
327
+ {
328
+ $row['customer_id'] = 'NULL';
329
+ }
330
+
331
+ $sql = $adapter->query("update $ukTable set customer_id = " .
332
  $row['customer_id'] . " where entity_id = " . $row['entity_id']);
333
+
334
+
335
  }
336
  $this->addError("$count missing customer_id updated", $session);
337
  } else {
343
  /**
344
  * Couple rows discupled.
345
  */
346
+ private function _makeCouples(Varien_Db_Adapter_Pdo_Mysql $adapter, $doit, $session) {
347
+ $this->_helper->logNotice("----------- _makeCouples");
348
  $ukTable = $this->getMainTable();
349
  $subscribers = "newsletter/subscriber";
350
  $subscribersTable = $this->getTable($subscribers);
362
  }
363
 
364
  if ($doit) {
365
+ $this->_helper->logNotice($select->assemble());
366
  foreach ($adapter->fetchAll($select) as $row) {
 
367
  $adapter->query("delete from $ukTable where entity_id = " .
368
  $row['customer_uk_id']);
369
  $adapter->query("update $ukTable set customer_id = " . $row['customer_id'] . " where entity_id = " .
376
  return $this;
377
  }
378
 
379
+ private function _truncate(Varien_Db_Adapter_Pdo_Mysql $adapter, $session) {
380
+ $sql = "truncate table " . $this->getMainTable();
381
  $adapter->query($sql);
382
  $this->addSuccess("Table truncated", $session);
383
  return $this;
392
  }
393
 
394
  /** Remove null null records. */
395
+ private function _purge(Varien_Db_Adapter_Pdo_Mysql $adapter, $doit, $messages, $session) {
396
+ $this->_helper->logNotice("----------- Purge");
397
  $select = $adapter->select()
398
  ->from($this->getMainTable())
399
  ->where('subscriber_id is null and customer_id is null');
421
  return $this;
422
  }
423
 
424
+ private function _getCount(Varien_Db_Adapter_Pdo_Mysql $adapter, Varien_Db_Select $select) {
425
  $countSelect = $adapter->select()
426
  ->from(
427
  array("t" => $select), array("c" => new Zend_Db_Expr('count(1)')));
434
  /**
435
  * For backward compatibility
436
  */
437
+ private function _insertFromSelect(Varien_Db_Adapter_Pdo_Mysql $adapter, Varien_Db_Select $select, $table, array $fields = array(), $mode = false) {
438
  $query = 'INSERT';
439
  if ($mode == $adapter::INSERT_IGNORE) {
440
  $query .= ' IGNORE';
492
  * @param Mage_Adminhtml_Model_Session $session
493
  */
494
  public function addSuccess($message, $session) {
495
+ if ($this->skipMessages()) {
496
+ return;
497
+ }
498
  if ($this->hasTask() && $this->getTask()->getSuppressSuccessUk()) {
499
  return;
500
  }
512
  * @param Mage_Adminhtml_Model_Session $session
513
  */
514
  public function addError($message, $session) {
515
+ if ($this->skipMessages()) {
516
+ return;
517
+ }
518
  if (!is_null($session) && $session instanceof Mage_Adminhtml_Model_Session) {
519
  $session->addError($message);
520
  }
530
  */
531
  public function addNotice($message, $session) {
532
  $this->setHasNotices();
533
+ if ($this->skipMessages()) {
534
+ return;
535
+ }
536
  if (!is_null($session) && $session instanceof Mage_Adminhtml_Model_Session) {
537
  $session->addNotice($message);
538
  }
541
  }
542
  }
543
 
544
+ public function setHasNotices($value = true) {
545
+ $this->_hasNotices = $value;
546
  }
547
 
548
  public function getHasNotices() {
549
  return $this->_hasNotices;
550
  }
551
 
552
+ private function skipMessages()
553
+ {
554
+ if ($this->hasTask()) {
555
+ if ($this->getTask()->getSkipMessages()) {
556
+ return true;
557
+ }
558
+ }
559
+ return false;
560
+ }
561
+
562
+ private function _createTmpTables(Varien_Db_Adapter_Pdo_Mysql $adapter)
563
+ {
564
+ $tablePrefix = (string) Mage::getConfig()->getTablePrefix();
565
+
566
+ $this->_helper->logNotice("----------- _createTmpTables");
567
+ $this->_dropTmpTables($adapter);
568
+
569
+ $adapter->query("create table {$tablePrefix}contactlab_subscribers_tmp_idx as select subscriber_id from {$tablePrefix}contactlab_subscribers_uk where subscriber_id is not null;");
570
+ $adapter->query("create table {$tablePrefix}contactlab_customers_tmp_idx as select customer_id from {$tablePrefix}contactlab_subscribers_uk where customer_id is not null;");
571
+ $adapter->query("alter table {$tablePrefix}contactlab_subscribers_tmp_idx add unique key contactlab_subscribers_uks (subscriber_id);");
572
+ $adapter->query("alter table {$tablePrefix}contactlab_customers_tmp_idx add unique key contactlab_subscribers_ukc (customer_id);");
573
+
574
+ }
575
+
576
+ private function _dropTmpTables(Varien_Db_Adapter_Pdo_Mysql $adapter)
577
+ {
578
+ $tablePrefix = (string) Mage::getConfig()->getTablePrefix();
579
+
580
+ $this->_helper->logNotice("----------- _dropTmpTables");
581
+
582
+ $adapter->query("drop table if exists {$tablePrefix}contactlab_subscribers_tmp_idx;");
583
+ $adapter->query("drop table if exists {$tablePrefix}contactlab_customers_tmp_idx;");
584
+ }
585
  }
586
+
app/code/community/Contactlab/Subscribers/Model/Soap/SetSubscriptionStatus.php CHANGED
@@ -2,6 +2,10 @@
2
 
3
  /**
4
  * Model for SetSubscriptionStatus calls.
 
 
 
 
5
  */
6
  class Contactlab_Subscribers_Model_Soap_SetSubscriptionStatus extends Contactlab_Subscribers_Model_Soap_AbstractSubscriberCall {
7
  /** Do the SOAP call. */
2
 
3
  /**
4
  * Model for SetSubscriptionStatus calls.
5
+ * @method Contactlab_Subscribers_Model_Soap_SetSubscriptionStatus setStoreId($value)
6
+ * @method Contactlab_Subscribers_Model_Soap_SetSubscriptionStatus setEntityId($value)
7
+ * @method Contactlab_Subscribers_Model_Soap_SetSubscriptionStatus setSubscriberEmail($value)
8
+ * @method Contactlab_Subscribers_Model_Soap_SetSubscriptionStatus setSubscriberStatus($value)
9
  */
10
  class Contactlab_Subscribers_Model_Soap_SetSubscriptionStatus extends Contactlab_Subscribers_Model_Soap_AbstractSubscriberCall {
11
  /** Do the SOAP call. */
app/code/community/Contactlab/Subscribers/Model/Stats.php CHANGED
@@ -2,6 +2,15 @@
2
 
3
  /**
4
  * Exporter data helper.
 
 
 
 
 
 
 
 
 
5
  */
6
  class Contactlab_Subscribers_Model_Stats extends Mage_Core_Model_Abstract {
7
  /**
@@ -11,7 +20,11 @@ class Contactlab_Subscribers_Model_Stats extends Mage_Core_Model_Abstract {
11
  $this->_init("contactlab_subscribers/stats");
12
  }
13
 
14
- /** Update customer statistics*/
 
 
 
 
15
  public function updateFromCustomer(Mage_Customer_Model_Customer $customer) {
16
  $this->_updateLastOrder($customer);
17
  $this->_updateTotalOrder($customer);
@@ -20,8 +33,12 @@ class Contactlab_Subscribers_Model_Stats extends Mage_Core_Model_Abstract {
20
  return $this;
21
  }
22
 
23
- /** Update last order statistics. */
 
 
 
24
  private function _updateLastOrder(Mage_Customer_Model_Customer $customer) {
 
25
  $order = $this->_getLastOrder($customer);
26
  if ($order) {
27
  $this->setLastOrderDate($order->getCreatedAt());
@@ -34,12 +51,17 @@ class Contactlab_Subscribers_Model_Stats extends Mage_Core_Model_Abstract {
34
  }
35
  }
36
 
37
- /** Update orders statistics for period. */
 
 
 
 
38
  private function _updateTotalOrderPeriod(Mage_Customer_Model_Customer $customer, $period) {
39
  $periodLength = Mage::getStoreConfig("contactlab_subscribers/stats/period_" . $period);
40
  if (!is_numeric($periodLength) || $periodLength == 0) {
41
  return;
42
  }
 
43
  $coll = Mage::getModel('sales/order')
44
  ->getCollection()
45
  ->addExpressionFieldToSelect('grand_total', 'sum({{base_grand_total}})', 'base_grand_total')
@@ -57,8 +79,12 @@ class Contactlab_Subscribers_Model_Stats extends Mage_Core_Model_Abstract {
57
  }
58
  }
59
 
60
- /** Update all orders statistics. */
 
 
 
61
  private function _updateTotalOrder(Mage_Customer_Model_Customer $customer) {
 
62
  $coll = Mage::getModel('sales/order')
63
  ->getCollection()
64
  ->addExpressionFieldToSelect('grand_total', 'sum({{base_grand_total}})', 'base_grand_total')
@@ -79,6 +105,7 @@ class Contactlab_Subscribers_Model_Stats extends Mage_Core_Model_Abstract {
79
 
80
  /** Get last order of customer $customer. */
81
  private function _getLastOrder(Mage_Customer_Model_Customer $customer) {
 
82
  $coll = Mage::getModel('sales/order')
83
  ->getCollection()
84
  ->setOrder('created_at', 'desc')
2
 
3
  /**
4
  * Exporter data helper.
5
+ * @method Contactlab_Subscribers_Model_Stats setCustomerId($value)
6
+ * @method setTotalOrdersAmount($value)
7
+ * @method setTotalOrdersProducts($value)
8
+ * @method setTotalOrdersCount($value)
9
+ * @method setAvgOrdersAmount($value)
10
+ * @method setAvgOrdersProducts($value)
11
+ * @method setLastOrderDate($value)
12
+ * @method setLastOrderAmount($value)
13
+ * @method setLastOrderProducts($value)
14
  */
15
  class Contactlab_Subscribers_Model_Stats extends Mage_Core_Model_Abstract {
16
  /**
20
  $this->_init("contactlab_subscribers/stats");
21
  }
22
 
23
+ /**
24
+ * Update customer statistics
25
+ * @param Mage_Customer_Model_Customer $customer
26
+ * @return $this
27
+ */
28
  public function updateFromCustomer(Mage_Customer_Model_Customer $customer) {
29
  $this->_updateLastOrder($customer);
30
  $this->_updateTotalOrder($customer);
33
  return $this;
34
  }
35
 
36
+ /**
37
+ * Update last order statistics.
38
+ * @param Mage_Customer_Model_Customer $customer
39
+ */
40
  private function _updateLastOrder(Mage_Customer_Model_Customer $customer) {
41
+ /** @var $order Mage_Sales_Model_Order */
42
  $order = $this->_getLastOrder($customer);
43
  if ($order) {
44
  $this->setLastOrderDate($order->getCreatedAt());
51
  }
52
  }
53
 
54
+ /**
55
+ * Update orders statistics for period.
56
+ * @param Mage_Customer_Model_Customer $customer
57
+ * @param $period
58
+ */
59
  private function _updateTotalOrderPeriod(Mage_Customer_Model_Customer $customer, $period) {
60
  $periodLength = Mage::getStoreConfig("contactlab_subscribers/stats/period_" . $period);
61
  if (!is_numeric($periodLength) || $periodLength == 0) {
62
  return;
63
  }
64
+ /* @var $coll Mage_Sales_Model_Resource_Order_Collection */
65
  $coll = Mage::getModel('sales/order')
66
  ->getCollection()
67
  ->addExpressionFieldToSelect('grand_total', 'sum({{base_grand_total}})', 'base_grand_total')
79
  }
80
  }
81
 
82
+ /**
83
+ * Update all orders statistics.
84
+ * @param Mage_Customer_Model_Customer $customer
85
+ */
86
  private function _updateTotalOrder(Mage_Customer_Model_Customer $customer) {
87
+ /* @var $coll Mage_Sales_Model_Resource_Order_Collection */
88
  $coll = Mage::getModel('sales/order')
89
  ->getCollection()
90
  ->addExpressionFieldToSelect('grand_total', 'sum({{base_grand_total}})', 'base_grand_total')
105
 
106
  /** Get last order of customer $customer. */
107
  private function _getLastOrder(Mage_Customer_Model_Customer $customer) {
108
+ /* @var $coll Mage_Sales_Model_Resource_Order_Collection */
109
  $coll = Mage::getModel('sales/order')
110
  ->getCollection()
111
  ->setOrder('created_at', 'desc')
app/code/community/Contactlab/Subscribers/Model/System/Config/Source/Export/CheckUkPolicy.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Check Uk Policy.
5
+ */
6
+ class Contactlab_Subscribers_Model_System_Config_Source_Export_CheckUkPolicy {
7
+ /**
8
+ * Options getter
9
+ *
10
+ * @return array
11
+ */
12
+ public function toOptionArray() {
13
+ return array(
14
+ array('value' => 0, 'label' => Mage::helper('contactlab_subscribers')->__('No')),
15
+ array('value' => 1, 'label' => Mage::helper('contactlab_subscribers')->__('Only check')),
16
+ array('value' => 2, 'label' => Mage::helper('contactlab_subscribers')->__('Check and repair')),
17
+ );
18
+ }
19
+
20
+ /**
21
+ * Get options in "key-value" format
22
+ *
23
+ * @return array
24
+ */
25
+ public function toArray() {
26
+ return array(
27
+ 0 => Mage::helper('contactlab_subscribers')->__('No'),
28
+ 1 => Mage::helper('contactlab_subscribers')->__('Only check'),
29
+ 2 => Mage::helper('contactlab_subscribers')->__('Check and repair'),
30
+ );
31
+ }
32
+
33
+ }
app/code/community/Contactlab/Subscribers/Model/Task/ExportSubscribersRunner.php CHANGED
@@ -14,10 +14,20 @@ class Contactlab_Subscribers_Model_Task_ExportSubscribersRunner extends Contactl
14
  if ($task->getConfigFlag("contactlab_commons/soap/enable")) {
15
  $this->_checkSubscriberDataExchangeStatus();
16
  }
17
- if ($task->getConfigFlag("contactlab_subscribers/global/check_uk_before_export")) {
 
 
 
18
  if (!$this->_checkUk()) {
19
  throw new Exception("UK Table inconsistent, please fix it with the \"Update unique Keys\" button in the task page!");
20
  }
 
 
 
 
 
 
 
21
  }
22
  $this->setExporter(Mage::getModel("contactlab_subscribers/exporter_subscribers")
23
  ->setTask($this->getTask()));
@@ -48,11 +58,30 @@ class Contactlab_Subscribers_Model_Task_ExportSubscribersRunner extends Contactl
48
  return Mage::getStoreConfig("contactlab_subscribers/global/memory_limit");
49
  }
50
 
51
- public function _checkUk() {
 
 
 
 
 
52
  /* @var $helper Contactlab_Subscribers_Helper_Uk */
53
  $helper = Mage::helper('contactlab_subscribers/uk');
54
  $this->getTask()->setSuppressSuccessUk(true);
 
55
  return $helper->updateAll(false, $this->getTask());
56
  }
57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  }
14
  if ($task->getConfigFlag("contactlab_commons/soap/enable")) {
15
  $this->_checkSubscriberDataExchangeStatus();
16
  }
17
+ if (!Mage::helper('contactlab_subscribers/checks')->checkAvailableEssentialChecks()) {
18
+ throw Mage::helper('contactlab_subscribers/checks')->getLastCheckException($task);
19
+ }
20
+ if ($task->getConfig("contactlab_subscribers/global/check_uk_before_export") == '1') {
21
  if (!$this->_checkUk()) {
22
  throw new Exception("UK Table inconsistent, please fix it with the \"Update unique Keys\" button in the task page!");
23
  }
24
+ } else if ($task->getConfig("contactlab_subscribers/global/check_uk_before_export") == '2') {
25
+ if (!$this->_checkUk(true)) {
26
+ $this->_repairUk(true);
27
+ if (!$this->_checkUk()) {
28
+ throw new Exception("UK Table inconsistent, please fix it with the \"Update unique Keys\" button in the task page!");
29
+ }
30
+ }
31
  }
32
  $this->setExporter(Mage::getModel("contactlab_subscribers/exporter_subscribers")
33
  ->setTask($this->getTask()));
58
  return Mage::getStoreConfig("contactlab_subscribers/global/memory_limit");
59
  }
60
 
61
+ /**
62
+ * Check UK table.
63
+ * @param boolean $skipMessages
64
+ * @return boolean
65
+ */
66
+ private function _checkUk($skipMessages = false) {
67
  /* @var $helper Contactlab_Subscribers_Helper_Uk */
68
  $helper = Mage::helper('contactlab_subscribers/uk');
69
  $this->getTask()->setSuppressSuccessUk(true);
70
+ $this->getTask()->setSkipMessages($skipMessages);
71
  return $helper->updateAll(false, $this->getTask());
72
  }
73
 
74
+ /**
75
+ * Repair UK table.
76
+ * @param boolean $skipMessages
77
+ * @return boolean
78
+ */
79
+ private function _repairUk($skipMessages = false)
80
+ {
81
+ /* @var $helper Contactlab_Subscribers_Helper_Uk */
82
+ $helper = Mage::helper('contactlab_subscribers/uk');
83
+ $this->getTask()->setSuppressSuccessUk(true);
84
+ $this->getTask()->setSkipMessages($skipMessages);
85
+ return $helper->updateAll(true, $this->getTask());
86
+ }
87
  }
app/code/community/Contactlab/Subscribers/Model/Uk.php CHANGED
@@ -2,6 +2,25 @@
2
 
3
  /**
4
  * Uk table model.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  */
6
  class Contactlab_Subscribers_Model_Uk extends Mage_Core_Model_Abstract {
7
  /**
@@ -11,17 +30,25 @@ class Contactlab_Subscribers_Model_Uk extends Mage_Core_Model_Abstract {
11
  $this->_init("contactlab_subscribers/uk");
12
  }
13
 
14
- /** Remove null null records. */
15
- public function purge($doit = true) {
16
- $this->getResource()->purge($doit);
 
 
 
17
  }
18
 
19
- /** Update keys. */
20
- public function update($doit = false) {
 
 
 
21
  /* @var $resource Contactlab_Subscribers_Model_Resource_Uk */
22
  $resource = $this->getResource();
 
 
23
  $resource->setTask($this->getTask());
24
- $resource->update($doit);
25
  if ($resource->getHasNotices()) {
26
  $this->setHasNotices(true);
27
  }
2
 
3
  /**
4
  * Uk table model.
5
+ * @method bool getSubscriberId()
6
+ * @method bool hasEntityId()
7
+ * @method bool hasSubscriberId()
8
+ * @method Contactlab_Commons_Model_Task getTask()
9
+ * @method setHasNotices($true)
10
+ */
11
+
12
+ /**
13
+ * @method bool hasEntityId()
14
+ * @method bool getHasNotices()
15
+ * @method int getEntityId()
16
+ * @method Contactlab_Subscribers_Model_Uk setEntityId(int $value)
17
+ * @method int getSubscriberId()
18
+ * @method Contactlab_Subscribers_Model_Uk setSubscriberId(int $value)
19
+ * @method int getCustomerId()
20
+ * @method Contactlab_Subscribers_Model_Uk setCustomerId(int $value)
21
+ * @method int getIsExported()
22
+ * @method Contactlab_Subscribers_Model_Uk setIsExported(int $value)
23
+ * @method Contactlab_Subscribers_Model_Uk setTask(Contactlab_Commons_Model_Task $value)
24
  */
25
  class Contactlab_Subscribers_Model_Uk extends Mage_Core_Model_Abstract {
26
  /**
30
  $this->_init("contactlab_subscribers/uk");
31
  }
32
 
33
+ /**
34
+ * Remove null null records.
35
+ * @param bool $doIt
36
+ */
37
+ public function purge($doIt = true) {
38
+ $this->getResource()->purge($doIt);
39
  }
40
 
41
+ /**
42
+ * Update keys.
43
+ * @param bool $doIt
44
+ */
45
+ public function update($doIt = false) {
46
  /* @var $resource Contactlab_Subscribers_Model_Resource_Uk */
47
  $resource = $this->getResource();
48
+ $this->setHasNotices(false);
49
+ $resource->setHasNotices(false);
50
  $resource->setTask($this->getTask());
51
+ $resource->update($doIt);
52
  if ($resource->getHasNotices()) {
53
  $this->setHasNotices(true);
54
  }
app/code/community/Contactlab/Subscribers/Test/Helper/Checks.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Subscribers_Test_Helper_Checks extends EcomDev_PHPUnit_Test_Case
4
+ {
5
+ /**
6
+ * @var Contactlab_Subscribers_Helper_Checks
7
+ */
8
+ private $helper;
9
+
10
+ protected function setUp() {
11
+ $this->helper = Mage::helper("contactlab_subscribers/checks");
12
+ }
13
+
14
+
15
+ /**
16
+ * Get available checks.
17
+ * @test
18
+ */
19
+ public function getAvailableChecks() {
20
+ $essentials = $this->helper->getAvailableChecks(true);
21
+ $all = $this->helper->getAvailableChecks();
22
+ $this->assertInternalType('array', $essentials);
23
+ $this->assertInternalType('array', $all);
24
+ $this->assertNotEmpty($all);
25
+ $this->assertNotEmpty($essentials);
26
+ $this->assertGreaterThan(count($essentials), count($all));
27
+ $this->checkCheckInstances($all);
28
+ $this->checkCheckInstances($essentials);
29
+ }
30
+
31
+ /**
32
+ * Run all available checks.
33
+ * @test
34
+ */
35
+ public function runAvailableChecks() {
36
+ $this->doTestRunAvailableChecks(true);
37
+ $this->doTestRunAvailableChecks(false);
38
+ }
39
+
40
+ private function doTestRunAvailableChecks($bool) {
41
+ $checks = $this->helper->runAvailableChecks($bool);
42
+ $this->assertNotEmpty($checks);
43
+ foreach ($checks as $check) {
44
+ /* @var Contactlab_Subscribers_Model_Checks_CheckInterface $check */
45
+ $this->assertInstanceOf('Contactlab_Subscribers_Model_Checks_CheckInterface', $check);
46
+ if ($check->shouldFailInTest()) {
47
+ $this->assertEquals($check->getExitCode(), Contactlab_Subscribers_Model_Checks_CheckInterface::ERROR,
48
+ $check->getName() . ' success');
49
+ } else {
50
+ $this->assertEquals($check->getExitCode(), Contactlab_Subscribers_Model_Checks_CheckInterface::SUCCESS,
51
+ $check->getName() . ' failed');
52
+ }
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Get last checks exit code.
58
+ * @test
59
+ */
60
+ public function getLastExitCode() {
61
+ $this->helper->runAvailableChecks(true);
62
+ $this->assertEquals($this->helper->getLastExitCode(), Contactlab_Subscribers_Model_Checks_CheckInterface::ERROR);
63
+ }
64
+
65
+ /**
66
+ * Run available essential checks and return last status.
67
+ * @test
68
+ */
69
+ public function checkAvailableEssentialChecks() {
70
+ $this->assertFalse($this->helper->checkAvailableEssentialChecks());
71
+ }
72
+
73
+ /**
74
+ * Check Check instance.
75
+ * @param $all
76
+ */
77
+ private function checkCheckInstances($all) {
78
+ foreach ($all as $check) {
79
+ /* @var Contactlab_Subscribers_Model_Checks_CheckInterface $check */
80
+ $this->assertInstanceOf('Contactlab_Subscribers_Model_Checks_CheckInterface', $check);
81
+ }
82
+ }
83
+ }
app/code/community/Contactlab/Subscribers/Test/Model/Checks/ContactlabAuthApiKeyCheck.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Subscribers_Test_Model_Checks_ContactlabAuthApiKeyCheck extends EcomDev_PHPUnit_Test_Case
4
+ {
5
+ private $check;
6
+
7
+ protected function setUp() {
8
+ $this->check = Mage::getModel('contactlab_subscribers/checks_contactlabAuthApiKeyCheck');
9
+ }
10
+
11
+ /**
12
+ * @test
13
+ */
14
+ public function doCheck() {
15
+ $this->assertEquals($this->check->check(), Contactlab_Subscribers_Model_Checks_CheckInterface::ERROR);
16
+ }
17
+ }
app/code/community/Contactlab/Subscribers/Test/Model/Checks/FindDuplicatedCustomersCheck.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Subscribers_Test_Model_Checks_FindDuplicatedCustomersCheck extends EcomDev_PHPUnit_Test_Case
4
+ {
5
+ private $check;
6
+
7
+ protected function setUp() {
8
+ $this->check = Mage::getModel('contactlab_subscribers/checks_findDuplicatedCustomersCheck');
9
+ }
10
+
11
+ /**
12
+ * @test
13
+ */
14
+ public function doCheck() {
15
+ $this->assertEquals($this->check->check(), Contactlab_Subscribers_Model_Checks_CheckInterface::SUCCESS);
16
+ }
17
+ }
app/code/community/Contactlab/Subscribers/Test/Model/Checks/FindInvalidCustomersCheck.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Subscribers_Test_Model_Checks_FindInvalidCustomersCheck extends EcomDev_PHPUnit_Test_Case
4
+ {
5
+ private $check;
6
+
7
+ protected function setUp() {
8
+ $this->check = Mage::getModel('contactlab_subscribers/checks_findInvalidCustomersCheck');
9
+ }
10
+
11
+ /**
12
+ * @test
13
+ */
14
+ public function doCheck() {
15
+ $this->assertEquals($this->check->check(), Contactlab_Subscribers_Model_Checks_CheckInterface::SUCCESS);
16
+ }
17
+ }
app/code/community/Contactlab/Subscribers/Test/Model/Checks/RewritesCheck.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Subscribers_Test_Model_Checks_RewritesCheck extends EcomDev_PHPUnit_Test_Case
4
+ {
5
+ private $check;
6
+
7
+ protected function setUp() {
8
+ $this->check = Mage::getModel('contactlab_subscribers/checks_rewritesCheck');
9
+ }
10
+
11
+ /**
12
+ * @test
13
+ */
14
+ public function doCheck() {
15
+ $this->assertEquals($this->check->check(), Contactlab_Subscribers_Model_Checks_CheckInterface::SUCCESS);
16
+ }
17
+ }
app/code/community/Contactlab/Subscribers/Test/Model/Checks/WsdlCheck.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Subscribers_Test_Model_WsdlCheck extends EcomDev_PHPUnit_Test_Case
4
+ {
5
+ private $check;
6
+
7
+ protected function setUp() {
8
+ $this->check = Mage::getModel('contactlab_subscribers/checks_wsdlCheck');
9
+ }
10
+
11
+ /**
12
+ * @test
13
+ */
14
+ public function doCheck() {
15
+ $this->assertEquals($this->check->check(), Contactlab_Subscribers_Model_Checks_CheckInterface::ERROR);
16
+ }
17
+ }
app/code/community/Contactlab/Subscribers/Test/Model/Uk.php ADDED
@@ -0,0 +1,436 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Subscribers_Test_Model_Uk extends EcomDev_PHPUnit_Test_Case
4
+ {
5
+ const TEST_EMAIL = 'name.surname@example.com';
6
+ /** @var Contactlab_Subscribers_Model_Uk */
7
+ private $model;
8
+ /** @var Contactlab_Subscribers_Helper_Uk */
9
+ private $helper;
10
+
11
+
12
+ /**
13
+ * Setup.
14
+ */
15
+ protected function setUp() {
16
+ $sessionMock = $this->getModelMockBuilder('adminhtml/session')
17
+ ->disableOriginalConstructor() // This one removes session_start and other methods usage
18
+ ->setMethods(null) // Enables original methods usage, because by default it overrides all methods
19
+ ->getMock();
20
+ $this->replaceByMock('singleton', 'adminhtml/session', $sessionMock);
21
+
22
+
23
+ $this->model = Mage::getModel('contactlab_subscribers/uk');
24
+ $this->helper = Mage::helper('contactlab_subscribers/uk');
25
+ $this->model->truncate();
26
+ foreach (Mage::getModel('newsletter/subscriber')->getCollection() as $item) {
27
+ $item->delete();
28
+ }
29
+ foreach (Mage::getModel('customer/customer')->getCollection() as $item) {
30
+ $item->delete();
31
+ }
32
+ }
33
+
34
+
35
+ /**
36
+ * @test
37
+ */
38
+ public function firstTest() {
39
+ $this->assertEquals($this->getUkCount(), 0);
40
+ }
41
+
42
+ /**
43
+ * Test subscriber
44
+ */
45
+ public function testSubscriber() {
46
+ $this->assertEquals($this->getUkCount(), 0);
47
+ $subscriber = $this->createSubscriber();
48
+ $subscriberId = $subscriber->getSubscriberId();
49
+
50
+ $this->helper->update(null, $subscriberId);
51
+ $this->assertEquals($this->getUkCount(), 1);
52
+ $uk = $this->helper->searchBySubscriberId($subscriberId);
53
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
54
+ $this->assertNull($uk->getCustomerId());
55
+ $this->model->purge(true);
56
+ $this->assertEquals($this->getUkCount(), 1);
57
+ $this->model->truncate();
58
+ $this->assertEquals($this->getUkCount(), 0);
59
+ }
60
+
61
+ /**
62
+ * Test customer
63
+ */
64
+ public function testCustomer() {
65
+ $this->assertEquals($this->getUkCount(), 0);
66
+ $customer = $this->createCustomer();
67
+ $customerId = $customer->getEntityId();
68
+
69
+ $this->helper->update($customerId, null);
70
+ $this->assertEquals($this->getUkCount(), 1);
71
+ $uk = $this->helper->searchByCustomerId($customerId);
72
+ $this->assertEquals($uk->getCustomerId(), $customerId);
73
+ $this->assertNull($uk->getSubscriberId());
74
+ $this->model->purge(true);
75
+ $this->assertEquals($this->getUkCount(), 1);
76
+ $this->model->truncate();
77
+ $this->assertEquals($this->getUkCount(), 0);
78
+ }
79
+
80
+ /**
81
+ * Test customer
82
+ */
83
+ public function testSubscribeACustomer() {
84
+ $this->assertEquals($this->getUkCount(), 0);
85
+ $customer = $this->createCustomer();
86
+ $customerId = $customer->getEntityId();
87
+
88
+ $this->helper->update($customerId, null);
89
+ $this->assertEquals($this->getUkCount(), 1);
90
+ $uk = $this->helper->searchByCustomerId($customerId);
91
+ $this->assertEquals($uk->getCustomerId(), $customerId);
92
+ $this->assertNull($uk->getSubscriberId());
93
+
94
+ $subscriber = $this->createSubscriber();
95
+ $subscriber->subscribeCustomer($customer);
96
+ $subscriber->save();
97
+ $subscriberId = $subscriber->getSubscriberId();
98
+ $this->helper->update($customerId, null);
99
+
100
+
101
+ $uk = $this->helper->searchByCustomerId($customerId);
102
+ $this->assertNotNull($customerId);
103
+ $this->assertNotNull($subscriberId);
104
+ $this->assertNotNull($uk->getCustomerId());
105
+ $this->assertNotNull($uk->getSubscriberId());
106
+ $this->assertEquals($uk->getCustomerId(), $customerId);
107
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
108
+
109
+
110
+ $this->model->purge(true);
111
+ $this->assertEquals($this->getUkCount(), 1);
112
+ $this->model->truncate();
113
+ $this->assertEquals($this->getUkCount(), 0);
114
+ }
115
+
116
+ /**
117
+ * Test customer
118
+ */
119
+ public function testCustomerASubscriber() {
120
+ $this->assertEquals($this->getUkCount(), 0);
121
+ $subscriber = $this->createSubscriber();
122
+ $subscriber->save();
123
+ $subscriberId = $subscriber->getSubscriberId();
124
+
125
+ $customer = $this->createCustomer();
126
+ $customerId = $customer->getEntityId();
127
+ $subscriber->subscribeCustomer($customer)->save();
128
+ $this->helper->update($customerId, $subscriberId);
129
+
130
+ $uk = $this->helper->searchBySubscriberId($subscriberId);
131
+ $this->assertNotNull($customerId);
132
+ $this->assertNotNull($subscriberId);
133
+ $this->assertNotNull($uk->getCustomerId());
134
+ $this->assertNotNull($uk->getSubscriberId());
135
+ $this->assertEquals($uk->getCustomerId(), $customerId);
136
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
137
+
138
+
139
+ $this->model->purge(true);
140
+ $this->assertEquals($this->getUkCount(), 1);
141
+ $this->model->truncate();
142
+ $this->assertEquals($this->getUkCount(), 0);
143
+ }
144
+
145
+
146
+ /**
147
+ * Test insert Subscriber without related Customer
148
+ *
149
+ */
150
+ public function testCanInsertSubscriberWithoutRelatedCustomer()
151
+ {
152
+ $this->assertEquals($this->getUkCount(), 0);
153
+
154
+ $subscriber = $this->createSubscriber();
155
+ $subscriber->save();
156
+ $subscriberId = $subscriber->getSubscriberId();
157
+ $this->assertNotNull($subscriberId);
158
+
159
+ $this->helper->updateAll(true);
160
+
161
+ $uk = $this->helper->searchBySubscriberId($subscriberId);
162
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
163
+ $this->assertNull($uk->getCustomerId());
164
+ }
165
+
166
+ /**
167
+ * Test insert Subscriber with related Customer
168
+ *
169
+ * @depends testCanInsertSubscriberWithoutRelatedCustomer
170
+ */
171
+ public function testCanInsertSubscriberWithRelatedCustomer()
172
+ {
173
+ $this->assertEquals($this->getUkCount(), 0);
174
+
175
+ $customer = $this->createCustomer();
176
+ $customer->save();
177
+ $customerId = $customer->getEntityId();
178
+ $this->assertNotNull($customerId);
179
+
180
+ $subscriber = $this->createSubscriber();
181
+ $subscriber->setCustomerId($customerId);
182
+ $subscriber->save();
183
+ $subscriberId = $subscriber->getSubscriberId();
184
+ $this->assertNotNull($subscriberId);
185
+
186
+ $this->helper->updateAll(true);
187
+
188
+ $uk = $this->helper->searchBySubscriberId($subscriberId);
189
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
190
+ $this->assertEquals($uk->getCustomerId(), $customerId);
191
+ }
192
+
193
+ /**
194
+ * Test insert Subscriber with not existent related Customer as null
195
+ *
196
+ * @depends testCanInsertSubscriberWithoutRelatedCustomer
197
+ */
198
+ public function testCanInsertSubscriberWithNotExistentRelatedCustomerAsNull()
199
+ {
200
+ $notExistentCustomerId = 999;
201
+ $this->assertEquals($this->getUkCount(), 0);
202
+ $subscriber = $this->createSubscriber();
203
+ $subscriber->setCustomerId($notExistentCustomerId);
204
+ $subscriber->save();
205
+ $subscriberId = $subscriber->getSubscriberId();
206
+ $this->assertNotNull($subscriberId);
207
+
208
+ $this->helper->updateAll(true);
209
+
210
+ $uk = $this->helper->searchBySubscriberId($subscriberId);
211
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
212
+ $this->assertNull($uk->getCustomerId());
213
+ }
214
+
215
+ /**
216
+ * Test update Subscriber with related Customer
217
+ *
218
+ * @depends testCanInsertSubscriberWithoutRelatedCustomer
219
+ */
220
+ public function testCanUpdateSubscriberWithRelatedCustomer()
221
+ {
222
+ $this->assertEquals($this->getUkCount(), 0);
223
+
224
+ $subscriber = $this->createSubscriber();
225
+ $subscriber->save();
226
+ $subscriberId = $subscriber->getSubscriberId();
227
+ $this->assertNotNull($subscriberId);
228
+
229
+ $this->helper->updateAll(true);
230
+
231
+ $uk = $this->helper->searchBySubscriberId($subscriberId);
232
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
233
+ $this->assertNull($uk->getCustomerId());
234
+
235
+ $customer = $this->createCustomer();
236
+ $customer->save();
237
+ $customerId = $customer->getEntityId();
238
+ $this->assertNotNull($customerId);
239
+
240
+ $subscriber->setCustomerId($customerId);
241
+ $subscriber->save();
242
+
243
+ $this->helper->updateAll(true);
244
+
245
+ $uk = $this->helper->searchBySubscriberId($subscriberId);
246
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
247
+ $this->assertEquals($uk->getCustomerId(), $customerId);
248
+ }
249
+
250
+ /**
251
+ * Test update Subscriber without related Customer
252
+ *
253
+ * @depends testCanInsertSubscriberWithRelatedCustomer
254
+ */
255
+ public function testCanUpdateSubscriberWithoutRelatedCustomer()
256
+ {
257
+ $this->assertEquals($this->getUkCount(), 0);
258
+
259
+ $customer = $this->createCustomer();
260
+ $customer->save();
261
+ $customerId = $customer->getEntityId();
262
+ $this->assertNotNull($customerId);
263
+
264
+ $subscriber = $this->createSubscriber();
265
+ $subscriber->setCustomerId($customerId);
266
+ $subscriber->save();
267
+ $subscriberId = $subscriber->getSubscriberId();
268
+ $this->assertNotNull($subscriberId);
269
+
270
+ $this->helper->updateAll(true);
271
+
272
+ $uk = $this->helper->searchBySubscriberId($subscriberId);
273
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
274
+ $this->assertEquals($uk->getCustomerId(), $customerId);
275
+
276
+ $subscriber->setCustomerId(0);
277
+ $subscriber->save();
278
+ $this->assertEquals($subscriber->getCustomerId(), 0);
279
+
280
+ $this->helper->updateAll(true);
281
+
282
+ $uk = $this->helper->searchBySubscriberId($subscriberId);
283
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
284
+ $this->assertNull($uk->getCustomerId());
285
+ }
286
+
287
+ /**
288
+ * Test update Subscriber not existent related Customer as null
289
+ *
290
+ * @depends testCanInsertSubscriberWithoutRelatedCustomer
291
+ */
292
+ public function testCanUpdateSubscriberWithNotExistentRelatedCustomerAsNull()
293
+ {
294
+ $notExistentCustomerId = 999;
295
+ $this->assertEquals($this->getUkCount(), 0);
296
+ $subscriber = $this->createSubscriber();
297
+ $subscriber->save();
298
+ $subscriberId = $subscriber->getSubscriberId();
299
+ $this->assertNotNull($subscriberId);
300
+
301
+ $this->helper->updateAll(true);
302
+
303
+ $uk = $this->helper->searchBySubscriberId($subscriberId);
304
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
305
+ $this->assertNull($uk->getCustomerId());
306
+
307
+ $subscriber->setCustomerId($notExistentCustomerId);
308
+ $subscriber->save();
309
+ $this->assertEquals($subscriber->getCustomerId(), $notExistentCustomerId);
310
+
311
+ $this->helper->updateAll(true);
312
+
313
+ $uk = $this->helper->searchBySubscriberId($subscriberId);
314
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
315
+ $this->assertNull($uk->getCustomerId());
316
+ }
317
+
318
+ /**
319
+ * Test insert Customer not related to Subscriber
320
+ *
321
+ *
322
+ */
323
+ public function testCanInsertCustomerNotRelatedToSubscriber()
324
+ {
325
+ $this->assertEquals($this->getUkCount(), 0);
326
+
327
+ $customer = $this->createCustomer();
328
+ $customer->save();
329
+ $customerId = $customer->getEntityId();
330
+ $this->assertNotNull($customerId);
331
+
332
+ $this->helper->updateAll(true);
333
+
334
+ $uk = $this->helper->searchByCustomerId($customerId);
335
+ $this->assertEquals($uk->getCustomerId(), $customerId);
336
+ $this->assertNull($uk->getSubscriberId());
337
+ }
338
+
339
+ /**
340
+ * Test update Customer related to Subscriber
341
+ *
342
+ * @depends testCanInsertCustomerNotRelatedToSubscriber
343
+ */
344
+ public function testCanUpdateCustomerRelatedToSubscriber()
345
+ {
346
+ $this->assertEquals($this->getUkCount(), 0);
347
+
348
+ $customer = $this->createCustomer();
349
+ $customer->save();
350
+ $customerId = $customer->getEntityId();
351
+ $this->assertNotNull($customerId);
352
+
353
+ $this->helper->updateAll(true);
354
+
355
+ $uk = $this->helper->searchByCustomerId($customerId);
356
+ $this->assertEquals($uk->getCustomerId(), $customerId);
357
+ $this->assertNull($uk->getSubscriberId());
358
+
359
+ $subscriber = $this->createSubscriber();
360
+ $subscriber->setCustomerId($customerId);
361
+ $subscriber->save();
362
+ $subscriberId = $subscriber->getSubscriberId();
363
+ $this->assertNotNull($subscriberId);
364
+
365
+ $this->helper->updateAll(true);
366
+
367
+ $uk = $this->helper->searchByCustomerId($customerId);
368
+ $this->assertEquals($uk->getCustomerId(), $customerId);
369
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
370
+
371
+ $this->assertEquals($this->getUkCount(), 1);
372
+ }
373
+
374
+ /* *
375
+ * Test update Customer not related to Subscriber
376
+ *
377
+ * @depends testCanInsertSubscriberWithRelatedCustomer
378
+ * @depends testCanUpdateSubscriberWithoutRelatedCustomer
379
+ */
380
+ /* UNSUPPORTED FEATURE
381
+ public function testCanUpdateCustomerNotRelatedToSubscriber()
382
+ {
383
+ $this->assertEquals($this->getUkCount(), 0);
384
+
385
+ $customer = $this->createCustomer();
386
+ $customer->save();
387
+ $customerId = $customer->getEntityId();
388
+ $this->assertNotNull($customerId);
389
+
390
+ $subscriber = $this->createSubscriber();
391
+ $subscriber->setCustomerId($customerId);
392
+ $subscriber->save();
393
+ $subscriberId = $subscriber->getSubscriberId();
394
+ $this->assertNotNull($subscriberId);
395
+
396
+ $this->helper->updateAll(true);
397
+
398
+ $uk = $this->helper->searchByCustomerId($customerId);
399
+ $this->assertEquals($uk->getCustomerId(), $customerId);
400
+ $this->assertEquals($uk->getSubscriberId(), $subscriberId);
401
+
402
+ $subscriber->setCustomerId(0);
403
+ $subscriber->save();
404
+ $this->assertEquals($subscriber->getCustomerId(), 0);
405
+
406
+ $this->helper->updateAll(true);
407
+
408
+ $uk = $this->helper->searchByCustomerId($customerId);
409
+ $this->assertTrue($uk);
410
+ $this->assertEquals($uk->getCustomerId(), $customerId);
411
+ $this->assertNull($uk->getSubscriberId());
412
+
413
+ $this->assertEquals($this->getUkCount(), 2);
414
+ }*/
415
+
416
+ /**
417
+ * Get Count.
418
+ * @return int
419
+ */
420
+ private function getUkCount() {
421
+ $collection = Mage::getModel('contactlab_subscribers/uk')->getCollection();
422
+ return $collection->getSize();
423
+ }
424
+
425
+ private function createCustomer() {
426
+ $customer = Mage::getModel('customer/customer');
427
+ $customer->setData('email', self::TEST_EMAIL);
428
+ return $customer->save();
429
+ }
430
+
431
+ private function createSubscriber() {
432
+ $subscriber = Mage::getModel('newsletter/subscriber');
433
+ $subscriber->setSubscriberEmail(self::TEST_EMAIL);
434
+ return $subscriber->save();
435
+ }
436
+ }
app/code/community/Contactlab/Subscribers/controllers/Adminhtml/Contactlab/Subscribers/ExportController.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Controller that manage the queue of exporting tasks.
5
+ */
6
+ class Contactlab_Subscribers_Adminhtml_Contactlab_Subscribers_ExportController extends Mage_Adminhtml_Controller_Action {
7
+ /**
8
+ * Queue action.
9
+ */
10
+ public function queueAction() {
11
+ Mage::getModel("contactlab_subscribers/cron")->addExportSubscribersQueue();
12
+ return $this->_redirect('adminhtml/contactlab_commons_tasks');
13
+ }
14
+
15
+ /**
16
+ * Is this controller allowed?
17
+ * @return bool
18
+ */
19
+ protected function _isAllowed()
20
+ {
21
+ return Mage::getSingleton('admin/session')->isAllowed('newsletter/contactlab/subscribers/actions/queue');
22
+ }
23
+ }
app/code/community/Contactlab/Subscribers/controllers/Adminhtml/Contactlab/Subscribers/ImportController.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Controller that manage the queue of exporting tasks.
5
+ */
6
+ class Contactlab_Subscribers_Adminhtml_Contactlab_Subscribers_ImportController extends Mage_Adminhtml_Controller_Action {
7
+ /**
8
+ * Queue action.
9
+ */
10
+ public function queueAction() {
11
+ Mage::getModel("contactlab_subscribers/cron")->addImportSubscribersQueue();
12
+ return $this->_redirect('adminhtml/contactlab_commons_tasks');
13
+ }
14
+
15
+ /**
16
+ * Is this controller allowed?
17
+ * @return bool
18
+ */
19
+ protected function _isAllowed()
20
+ {
21
+ return Mage::getSingleton('admin/session')->isAllowed('newsletter/contactlab/subscribers/actions/import');
22
+ }
23
+ }
app/code/community/Contactlab/Subscribers/controllers/Adminhtml/Contactlab/Subscribers/StatsController.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Customer Statistics controller.
5
+ */
6
+ class Contactlab_Subscribers_Adminhtml_Contactlab_Subscribers_StatsController extends Mage_Adminhtml_Controller_Action {
7
+
8
+ /**
9
+ * Queue action.
10
+ * @deprecated
11
+ */
12
+ public function clearAction() {
13
+ Mage::helper("contactlab_subscribers")->addClearStatsQueue();
14
+ return $this->_redirect('adminhtml/contactlab_commons_tasks');
15
+ }
16
+
17
+ /**
18
+ * Queue action.
19
+ */
20
+ public function fillAction() {
21
+ Mage::helper("contactlab_subscribers")->addCalcStatsQueue();
22
+ return $this->_redirect('adminhtml/contactlab_commons_tasks');
23
+ }
24
+
25
+ /**
26
+ * Is this controller allowed?
27
+ * @return bool
28
+ */
29
+ protected function _isAllowed()
30
+ {
31
+ return Mage::getSingleton('admin/session')->isAllowed('newsletter/contactlab/stats');
32
+ }
33
+ }
app/code/community/Contactlab/Subscribers/controllers/Adminhtml/{UkController.php → Contactlab/Subscribers/UkController.php} RENAMED
@@ -3,7 +3,7 @@
3
  /**
4
  * Controller that manage the queue of exporting tasks.
5
  */
6
- class Contactlab_Subscribers_Adminhtml_UkController extends Mage_Adminhtml_Controller_Action {
7
  /**
8
  * Update UK Table action.
9
  */
@@ -16,11 +16,13 @@ class Contactlab_Subscribers_Adminhtml_UkController extends Mage_Adminhtml_Contr
16
  throw new Zend_Exception("Unique keys update not allowed");
17
  }
18
  $this->doUpdate($doIt);
19
- $session->addSuccess($helper->__('Unique keys updated successfully.'));
 
 
20
  } catch (Exception $e) {
21
  $session->addError($e);
22
  }
23
- return $this->_redirect('contactlab_commons/adminhtml_tasks');
24
  }
25
 
26
  /**
@@ -38,7 +40,7 @@ class Contactlab_Subscribers_Adminhtml_UkController extends Mage_Adminhtml_Contr
38
  } catch (Exception $e) {
39
  $session->addError($e);
40
  }
41
- return $this->_redirect('contactlab_commons/adminhtml_tasks');
42
  }
43
 
44
  /** Really update uk. */
@@ -58,4 +60,13 @@ class Contactlab_Subscribers_Adminhtml_UkController extends Mage_Adminhtml_Contr
58
  $helper = Mage::helper('contactlab_subscribers/uk');
59
  $helper->addTruncateUkTask();
60
  }
 
 
 
 
 
 
 
 
 
61
  }
3
  /**
4
  * Controller that manage the queue of exporting tasks.
5
  */
6
+ class Contactlab_Subscribers_Adminhtml_Contactlab_Subscribers_UkController extends Mage_Adminhtml_Controller_Action {
7
  /**
8
  * Update UK Table action.
9
  */
16
  throw new Zend_Exception("Unique keys update not allowed");
17
  }
18
  $this->doUpdate($doIt);
19
+ if ($doIt) {
20
+ $session->addSuccess($helper->__('Unique keys updated successfully.'));
21
+ }
22
  } catch (Exception $e) {
23
  $session->addError($e);
24
  }
25
+ return $this->_redirect('adminhtml/contactlab_commons_tasks');
26
  }
27
 
28
  /**
40
  } catch (Exception $e) {
41
  $session->addError($e);
42
  }
43
+ return $this->_redirect('adminhtml/contactlab_commons_tasks');
44
  }
45
 
46
  /** Really update uk. */
60
  $helper = Mage::helper('contactlab_subscribers/uk');
61
  $helper->addTruncateUkTask();
62
  }
63
+
64
+ /**
65
+ * Is this controller allowed?
66
+ * @return bool
67
+ */
68
+ protected function _isAllowed()
69
+ {
70
+ return Mage::getSingleton('admin/session')->isAllowed('newsletter/contactlab/stats');
71
+ }
72
  }
app/code/community/Contactlab/Subscribers/controllers/Adminhtml/ExportSubscribersController.php DELETED
@@ -1,14 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Controller that manage the queue of exporting tasks.
5
- */
6
- class Contactlab_Subscribers_Adminhtml_ExportSubscribersController extends Mage_Adminhtml_Controller_Action {
7
- /**
8
- * Queue action.
9
- */
10
- public function queueAction() {
11
- Mage::getModel("contactlab_subscribers/cron")->addExportSubscribersQueue();
12
- return $this->_redirect('contactlab_commons/adminhtml_tasks');
13
- }
14
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Contactlab/Subscribers/controllers/Adminhtml/ImportSubscribersController.php DELETED
@@ -1,14 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Controller that manage the queue of exporting tasks.
5
- */
6
- class Contactlab_Subscribers_Adminhtml_ImportSubscribersController extends Mage_Adminhtml_Controller_Action {
7
- /**
8
- * Queue action.
9
- */
10
- public function queueAction() {
11
- Mage::getModel("contactlab_subscribers/cron")->addImportSubscribersQueue();
12
- return $this->_redirect('contactlab_commons/adminhtml_tasks');
13
- }
14
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Contactlab/Subscribers/controllers/Adminhtml/StatsController.php DELETED
@@ -1,23 +0,0 @@
1
- <?php
2
-
3
- /**
4
- * Customer Statistics controller.
5
- */
6
- class Contactlab_Subscribers_Adminhtml_StatsController extends Mage_Adminhtml_Controller_Action {
7
-
8
- /**
9
- * Queue action.
10
- */
11
- public function clearAction() {
12
- Mage::helper("contactlab_subscribers")->addClearStatsQueue();
13
- return $this->_redirect('contactlab_commons/adminhtml_tasks');
14
- }
15
-
16
- /**
17
- * Queue action.
18
- */
19
- public function fillAction() {
20
- Mage::helper("contactlab_subscribers")->addCalcStatsQueue();
21
- return $this->_redirect('contactlab_commons/adminhtml_tasks');
22
- }
23
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Contactlab/Subscribers/controllers/EditController.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Manages insertion of mail from user who wants to unsubscribe/change her data
5
+ */
6
+ class Contactlab_Subscribers_EditController extends Mage_Core_Controller_Front_Action
7
+ {
8
+ /**
9
+ * index action
10
+ * takes as query parameter the mail of the subscriber
11
+ */
12
+ public function indexAction()
13
+ {
14
+ $params = $this->getRequest()->getParams();
15
+ //check params
16
+ if (!array_key_exists('hash', $params)
17
+ || !array_key_exists('id', $params)) {
18
+ Mage::throwException($this->__('Not a valid URL'));
19
+ }
20
+
21
+ // Load the subscriber and the additional fields entity
22
+
23
+ $subs = Mage::getModel('newsletter/subscriber')->load($params['id']);
24
+ if (!$subs->hasData('subscriber_id')) {
25
+ Mage::throwException($this->__('Subscriber not present'));
26
+ }
27
+
28
+ /** @noinspection PhpUndefinedMethodInspection */
29
+ if (!$subs->hasSubscriberConfirmCode()) {
30
+ Mage::throwException($this->__('Subscriber has no confirm code'));
31
+ }
32
+
33
+ if ($subs->getSubscriberConfirmCode() != $params['hash']) {
34
+ Mage::throwException($this->__('Confirm code does not match subscriber'));
35
+ }
36
+
37
+ $fields = Mage::getModel('contactlab_subscribers/fields')->load($subs->getSubscriberId(), 'subscriber_id');
38
+
39
+ $fields->setSubscriberConfirmCode($params['hash']);
40
+ /*if (!$fields->hasData('subscriber_id')) {
41
+ Mage::throwException($this->__('No additional fields for this subscriber'));
42
+ }*/
43
+ // End of checks
44
+ // Register our fields entity, it will be used to fill input fields by the Modify block
45
+ Mage::register('contactlab/fields', $fields);
46
+
47
+ $this->loadLayout();
48
+ $this->renderLayout();
49
+ }
50
+ }
app/code/community/Contactlab/Subscribers/controllers/ModifyController.php ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Manages insertion of mail from user who wants to unsubscribe/change her data
5
+ */
6
+ class Contactlab_Subscribers_ModifyController extends Mage_Core_Controller_Front_Action
7
+ {
8
+ /**
9
+ * index action
10
+ * takes as query parameter the mail of the subscriber
11
+ */
12
+ public function indexAction()
13
+ {
14
+ if ($this->getRequest()->isPost() && $this->getRequest()->getPost('email')) {
15
+ $session = Mage::getSingleton('core/session');
16
+ $email = (string) $this->getRequest()->getPost('email');
17
+ try {
18
+ if (!Zend_Validate::is($email, 'EmailAddress')) {
19
+ Mage::throwException($this->__('Please enter a valid email address.'));
20
+ }
21
+ if (!$this->_isEmailPresent($email)) {
22
+ Mage::throwException($this->__('This email is not in our subscribers database'));
23
+ }
24
+ Mage::helper('contactlab_subscribers')->sendSubscriberEditEmail($email);
25
+ Mage::getSingleton('core/session')->addSuccess($this->__('Follow the link sent to your email to modify your data'));
26
+ } catch (Mage_Core_Exception $e) {
27
+ $session->addException($e, $this->__('There was a problem with your request: %s', $e->getMessage()));
28
+ } catch (Exception $e) {
29
+ $session->addException($e, $this->__('There was a problem with your request.'));
30
+ }
31
+ }
32
+ $this->_redirectReferer();
33
+
34
+ }
35
+
36
+ public function personalAction()
37
+ {
38
+ $params = $this->getRequest()->getParams();
39
+ Mage::dispatchEvent('contactlab_subscribers_subscriber_update', $params);
40
+ $this->_redirectUrl(Mage::getBaseUrl());
41
+ }
42
+
43
+ /**
44
+ * Is mail present
45
+ * @param $email
46
+ * @return bool
47
+ */
48
+ private function _isEmailPresent($email)
49
+ {
50
+ /** @noinspection PhpUndefinedMethodInspection */
51
+ $ownerId = Mage::getModel('customer/customer')
52
+ ->setWebsiteId(Mage::app()->getStore()->getWebsiteId())
53
+ ->loadByEmail($email)
54
+ ->getId();
55
+ if ($ownerId) {
56
+ return true;
57
+ }
58
+ /** @var $subscriber Contactlab_Subscribers_Model_Newsletter_Subscriber */
59
+ $subscriber = Mage::getModel('newsletter/subscriber')->load($email, 'subscriber_email');
60
+ return $subscriber->hasSubscriberId();
61
+ }
62
+ }
app/code/community/Contactlab/Subscribers/docs/release-notes/0.8.16.html CHANGED
@@ -1,5 +1,5 @@
1
  <ul>
2
- <li><del>Attemps</del> <strong>label</strong> fixed to <q>Attempts</q></li>
3
  <li><q>No record exported</q> message removed</li>
4
  <li>If the subscriber module is disabled, import and export task won't be queued</li>
5
  </ul>
1
  <ul>
2
+ <li><del>Attempts</del> <strong>label</strong> fixed to <q>Attempts</q></li>
3
  <li><q>No record exported</q> message removed</li>
4
  <li>If the subscriber module is disabled, import and export task won't be queued</li>
5
  </ul>
app/code/community/Contactlab/Subscribers/docs/release-notes/0.8.18.html ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <ul>
2
+ <li><strong>Improvement</strong> multiple WFC separated by "," allowed</li>
3
+ <li><strong>Improvement</strong> auto repair of UK table before export</li>
4
+ </ul>
app/code/community/Contactlab/Subscribers/docs/release-notes/0.8.20.html ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <ul>
2
+ <li>Removed default values from <code>config.xml</code>.</li>
3
+ <li>Performance tuning on uk fix query.</li>
4
+ </ul>
app/code/community/Contactlab/Subscribers/docs/release-notes/0.8.21.html ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <ul>
2
+ <li>Removed fatal error from Subscriber Export procedure.</li>
3
+ <li>Tuning of subscriber export for > 1G records.</li>
4
+ </ul>
app/code/community/Contactlab/Subscribers/docs/release-notes/0.9.0.html ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <ul>
2
+ <li>Modified adminhtml controllers due to SUPEE-6788 Magento patch.</li>
3
+ <li><strong>Feature</strong>: Runs essential checks before subscriber exports.</li>
4
+ <li><strong>Feature</strong>: Custom subscribers fields added to frontend.</li>
5
+ <li><strong>Feature</strong>: Added "customer_group_id" and "customer_group_name" to customers' export.</li>
6
+ </ul>
app/code/community/Contactlab/Subscribers/docs/release-notes/0.9.1.html ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <ul>
2
+ <li><strong>Fix</strong>: Generate subscribers fields record if not present, in edit page</li>
3
+ </ul>
app/code/community/Contactlab/Subscribers/docs/release-notes/1.0.0.html ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <ul>
2
+ <li><strong>Feature</strong>: you can now show/hide custom newsletter subscription from from configuration section in backend</li>
3
+ <li><strong>Fix</strong>: several fixes to the sync process</li>
4
+ </ul>
app/code/community/Contactlab/Subscribers/docs/release-notes/1.0.1.html ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <ul>
2
+ <li><strong>Improvement and fixes</strong></li>
3
+ </ul>
app/code/community/Contactlab/Subscribers/etc/config.xml CHANGED
@@ -2,8 +2,8 @@
2
  <config>
3
  <modules>
4
  <Contactlab_Subscribers>
5
- <version>0.8.17</version>
6
- <description>Subscriber sync Magento/ContactLab and ContactLab/Magento</description>
7
  </Contactlab_Subscribers>
8
  </modules>
9
  <global>
@@ -43,6 +43,11 @@
43
  <subscriber>Contactlab_Subscribers_Model_Newsletter_Subscriber</subscriber>
44
  </rewrite>
45
  </newsletter>
 
 
 
 
 
46
  <contactlab_subscribers>
47
  <class>Contactlab_Subscribers_Model</class>
48
  <resourceModel>contactlab_subscribers_resource</resourceModel>
@@ -62,10 +67,41 @@
62
  <newsletter_subscriber_export>
63
  <table>contactlab_subscribers_newsletter_subscriber_export</table>
64
  </newsletter_subscriber_export>
 
 
 
65
  </entities>
66
  </contactlab_subscribers_resource>
67
  </models>
68
  <events>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
69
  <sales_order_save_after>
70
  <observers>
71
  <contactlab_commons_model_delete_after>
@@ -94,16 +130,25 @@
94
  </observers>
95
  </controller_front_send_response_after>
96
  </events>
 
 
 
 
 
 
 
 
 
97
  </global>
98
  <admin>
99
  <routers>
100
- <contactlab_subscribers>
101
- <use>admin</use>
102
  <args>
103
- <module>Contactlab_Subscribers</module>
104
- <frontName>contactlab_subscribers</frontName>
 
105
  </args>
106
- </contactlab_subscribers>
107
  </routers>
108
  </admin>
109
  <adminhtml>
@@ -196,9 +241,44 @@
196
  </contactlab_subscribers_newsletter_controller_action_postdispatch>
197
  </observers>
198
  </controller_action_postdispatch>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
199
  </events>
200
  </adminhtml>
201
  <frontend>
 
 
 
 
 
 
 
202
  <events>
203
  <newsletter_subscriber_save_after>
204
  <observers>
@@ -263,6 +343,15 @@
263
  </contactlab_subscribers_newsletter_subscriber_save_after>
264
  </observers>
265
  </newsletter_subscriber_save_after>
 
 
 
 
 
 
 
 
 
266
  <controller_action_postdispatch>
267
  <observers>
268
  <contactlab_subscribers_newsletter_controller_action_postdispatch>
@@ -282,11 +371,20 @@
282
  </observers>
283
  </contactlab_subscribers_uk_subscriber_promoted_to_customer>
284
  </events>
 
 
 
 
 
 
 
 
 
285
  </frontend>
286
  <default>
287
  <contactlab_subscribers>
288
  <global>
289
- <enabled>0</enabled>
290
  <debug>0</debug>
291
  <export_filename>subscribers_{Ymd}.xml</export_filename>
292
  <import_filename>event_info_{Ymd}.xml</import_filename>
@@ -296,10 +394,10 @@
296
  <check_uk_before_export>1</check_uk_before_export>
297
  <subscribed_flag_name>__cls1</subscribed_flag_name>
298
  <export_not_subscribed>1</export_not_subscribed>
299
- <reset_export_dates_before_next_export>0</reset_export_dates_before_next_export>
300
  </global>
301
  <queue>
302
- <contactlab_subscribers_model_task_exportsubscribersrunner_interval>15</contactlab_subscribers_model_task_exportsubscribersrunner_interval>
303
  <contactlab_subscribers_model_task_exportsubscribersrunner_retries>5</contactlab_subscribers_model_task_exportsubscribersrunner_retries>
304
  <contactlab_subscribers_model_task_importsubscribersrunner_interval>10</contactlab_subscribers_model_task_importsubscribersrunner_interval>
305
  <contactlab_subscribers_model_task_importsubscribersrunner_retries>3</contactlab_subscribers_model_task_importsubscribersrunner_retries>
@@ -310,11 +408,11 @@
310
  <contactlab_subscribers_model_task_startsubscriberdataexchangerunner_interval>5</contactlab_subscribers_model_task_startsubscriberdataexchangerunner_interval>
311
  <contactlab_subscribers_model_task_startsubscriberdataexchangerunner_retries>5</contactlab_subscribers_model_task_startsubscriberdataexchangerunner_retries>
312
  <contactlab_subscribers_model_task_updatesubscriberstatusrunner_interval>1</contactlab_subscribers_model_task_updatesubscriberstatusrunner_interval>
313
- <contactlab_subscribers_model_task_updatesubscriberstatusrunner_retries>10</contactlab_subscribers_model_task_updatesubscriberstatusrunner_retries>
314
  </queue>
315
  <stats>
316
- <period_1>30</period_1>
317
- <period_2>120</period_2>
318
  </stats>
319
  </contactlab_subscribers>
320
  </default>
@@ -328,6 +426,13 @@
328
  </contactlab_subscribers_import_subscribers>
329
  </jobs>
330
  </crontab>
 
 
 
 
 
 
 
331
  <!--crontab>
332
  <jobs>
333
  <contactlab_subscribers_stats_recalc>
2
  <config>
3
  <modules>
4
  <Contactlab_Subscribers>
5
+ <version>1.0.1</version>
6
+ <description>Subscriber sync Magento/ContactLab and ContactLab/Magento.</description>
7
  </Contactlab_Subscribers>
8
  </modules>
9
  <global>
43
  <subscriber>Contactlab_Subscribers_Model_Newsletter_Subscriber</subscriber>
44
  </rewrite>
45
  </newsletter>
46
+ <newsletter_resource>
47
+ <rewrite>
48
+ <subscriber>Contactlab_Subscribers_Model_Resource_Newsletter_Subscriber</subscriber>
49
+ </rewrite>
50
+ </newsletter_resource>
51
  <contactlab_subscribers>
52
  <class>Contactlab_Subscribers_Model</class>
53
  <resourceModel>contactlab_subscribers_resource</resourceModel>
67
  <newsletter_subscriber_export>
68
  <table>contactlab_subscribers_newsletter_subscriber_export</table>
69
  </newsletter_subscriber_export>
70
+ <newsletter_subscriber_fields>
71
+ <table>contactlab_subscribers_newsletter_subscriber_fields</table>
72
+ </newsletter_subscriber_fields>
73
  </entities>
74
  </contactlab_subscribers_resource>
75
  </models>
76
  <events>
77
+ <contactlab_subscribers_subscriber_update>
78
+ <observers>
79
+ <contactlab_subscribers_subscriber_update_fields>
80
+ <type>singleton</type>
81
+ <class>contactlab_subscribers/observer_fields</class>
82
+ <method>updateFields</method>
83
+ </contactlab_subscribers_subscriber_update_fields>
84
+ </observers>
85
+ </contactlab_subscribers_subscriber_update>
86
+ <newsletter_subscriber_save_after>
87
+ <observers>
88
+ <contactlab_subscribers_newsletter_subscriber_save_after_fields>
89
+ <type>singleton</type>
90
+ <class>contactlab_subscribers/observer_fields</class>
91
+ <method>afterSubscriberSaved</method>
92
+ </contactlab_subscribers_newsletter_subscriber_save_after_fields>
93
+ </observers>
94
+ </newsletter_subscriber_save_after>
95
+ <!-- Driven by cascade database -->
96
+ <!--newsletter_subscriber_delete_before>
97
+ <observers>
98
+ <contactlab_subscribers_newsletter_subscriber_delete_before_fields>
99
+ <type>singleton</type>
100
+ <class>contactlab_subscribers/observer_fields</class>
101
+ <method>beforeSubscriberDeleted</method>
102
+ </contactlab_subscribers_newsletter_subscriber_delete_before_fields>
103
+ </observers>
104
+ </newsletter_subscriber_delete_before-->
105
  <sales_order_save_after>
106
  <observers>
107
  <contactlab_commons_model_delete_after>
130
  </observers>
131
  </controller_front_send_response_after>
132
  </events>
133
+ <template>
134
+ <email>
135
+ <contactlab_subscribers_modify_email_send_email_template translate="label" module="contactlab_subscribers">
136
+ <label>Modify subscriber data email</label>
137
+ <file>contactlab_subscribers/modify_subscriber_data.html</file>
138
+ <type>html</type>
139
+ </contactlab_subscribers_modify_email_send_email_template>
140
+ </email>
141
+ </template>
142
  </global>
143
  <admin>
144
  <routers>
145
+ <adminhtml>
 
146
  <args>
147
+ <modules>
148
+ <contactlab_subscribers before="Mage_Adminhtml">Contactlab_Subscribers_Adminhtml</contactlab_subscribers>
149
+ </modules>
150
  </args>
151
+ </adminhtml>
152
  </routers>
153
  </admin>
154
  <adminhtml>
241
  </contactlab_subscribers_newsletter_controller_action_postdispatch>
242
  </observers>
243
  </controller_action_postdispatch>
244
+
245
+ <adminhtml_block_html_before>
246
+ <observers>
247
+ <contactlab_subscribers_newsletter_fields_remove_grid>
248
+ <type>model</type>
249
+ <class>contactlab_subscribers/newsletter_subscribers_observer</class>
250
+ <method>removeOldColumns</method>
251
+ </contactlab_subscribers_newsletter_fields_remove_grid>
252
+ </observers>
253
+ </adminhtml_block_html_before>
254
+ <core_block_abstract_prepare_layout_after>
255
+ <observers>
256
+ <contactlab_subscribers_newsletter_fields_add_grid>
257
+ <type>model</type>
258
+ <class>contactlab_subscribers/newsletter_subscribers_observer</class>
259
+ <method>appendCustomColumns</method>
260
+ </contactlab_subscribers_newsletter_fields_add_grid>
261
+ </observers>
262
+ </core_block_abstract_prepare_layout_after>
263
+ <core_collection_abstract_load_before>
264
+ <observers>
265
+ <contactlab_subscribers_newsletter_fields_add_grid>
266
+ <type>model</type>
267
+ <class>contactlab_subscribers/newsletter_subscribers_observer</class>
268
+ <method>appendCustomAttributes</method>
269
+ </contactlab_subscribers_newsletter_fields_add_grid>
270
+ </observers>
271
+ </core_collection_abstract_load_before>
272
  </events>
273
  </adminhtml>
274
  <frontend>
275
+ <layout>
276
+ <updates>
277
+ <contactlab_subscribers>
278
+ <file>contactlab/subscribers.xml</file>
279
+ </contactlab_subscribers>
280
+ </updates>
281
+ </layout>
282
  <events>
283
  <newsletter_subscriber_save_after>
284
  <observers>
343
  </contactlab_subscribers_newsletter_subscriber_save_after>
344
  </observers>
345
  </newsletter_subscriber_save_after>
346
+ <controller_action_predispatch>
347
+ <observers>
348
+ <contactlab_subscribers_newsletter_controller_action_predispatch>
349
+ <type>singleton</type>
350
+ <class>contactlab_subscribers/observer_fields</class>
351
+ <method>controllerActionPreDispatch</method>
352
+ </contactlab_subscribers_newsletter_controller_action_predispatch>
353
+ </observers>
354
+ </controller_action_predispatch>
355
  <controller_action_postdispatch>
356
  <observers>
357
  <contactlab_subscribers_newsletter_controller_action_postdispatch>
371
  </observers>
372
  </contactlab_subscribers_uk_subscriber_promoted_to_customer>
373
  </events>
374
+ <routers>
375
+ <contactlab_subscribers>
376
+ <use>standard</use>
377
+ <args>
378
+ <module>Contactlab_Subscribers</module>
379
+ <frontName>contactlab</frontName>
380
+ </args>
381
+ </contactlab_subscribers>
382
+ </routers>
383
  </frontend>
384
  <default>
385
  <contactlab_subscribers>
386
  <global>
387
+ <!--enabled>0</enabled>
388
  <debug>0</debug>
389
  <export_filename>subscribers_{Ymd}.xml</export_filename>
390
  <import_filename>event_info_{Ymd}.xml</import_filename>
394
  <check_uk_before_export>1</check_uk_before_export>
395
  <subscribed_flag_name>__cls1</subscribed_flag_name>
396
  <export_not_subscribed>1</export_not_subscribed>
397
+ <reset_export_dates_before_next_export>0</reset_export_dates_before_next_export-->
398
  </global>
399
  <queue>
400
+ <!--contactlab_subscribers_model_task_exportsubscribersrunner_interval>15</contactlab_subscribers_model_task_exportsubscribersrunner_interval>
401
  <contactlab_subscribers_model_task_exportsubscribersrunner_retries>5</contactlab_subscribers_model_task_exportsubscribersrunner_retries>
402
  <contactlab_subscribers_model_task_importsubscribersrunner_interval>10</contactlab_subscribers_model_task_importsubscribersrunner_interval>
403
  <contactlab_subscribers_model_task_importsubscribersrunner_retries>3</contactlab_subscribers_model_task_importsubscribersrunner_retries>
408
  <contactlab_subscribers_model_task_startsubscriberdataexchangerunner_interval>5</contactlab_subscribers_model_task_startsubscriberdataexchangerunner_interval>
409
  <contactlab_subscribers_model_task_startsubscriberdataexchangerunner_retries>5</contactlab_subscribers_model_task_startsubscriberdataexchangerunner_retries>
410
  <contactlab_subscribers_model_task_updatesubscriberstatusrunner_interval>1</contactlab_subscribers_model_task_updatesubscriberstatusrunner_interval>
411
+ <contactlab_subscribers_model_task_updatesubscriberstatusrunner_retries>10</contactlab_subscribers_model_task_updatesubscriberstatusrunner_retries-->
412
  </queue>
413
  <stats>
414
+ <!--period_1>30</period_1>
415
+ <period_2>120</period_2-->
416
  </stats>
417
  </contactlab_subscribers>
418
  </default>
426
  </contactlab_subscribers_import_subscribers>
427
  </jobs>
428
  </crontab>
429
+ <phpunit>
430
+ <suite>
431
+ <modules>
432
+ <Contactlab_Subscribers/>
433
+ </modules>
434
+ </suite>
435
+ </phpunit>
436
  <!--crontab>
437
  <jobs>
438
  <contactlab_subscribers_stats_recalc>
app/code/community/Contactlab/Subscribers/etc/system.xml CHANGED
@@ -27,7 +27,7 @@
27
  <show_in_default>1</show_in_default>
28
  <show_in_website>0</show_in_website>
29
  <show_in_store>0</show_in_store>
30
- <comment>Enable or disable Contactlab Subscribers module</comment>
31
  </enabled>
32
  <export_filename translate="label">
33
  <label>Export filename</label>
@@ -36,7 +36,7 @@
36
  <show_in_default>1</show_in_default>
37
  <show_in_website>1</show_in_website>
38
  <show_in_store>1</show_in_store>
39
- <comment><![CDATA[Export filename (es, subscribers_{Ymd}.xml)<br>Use {Ymd} syntax to replace current data.<br>The <a href='http://php.net/manual/en/function.date.php'>date() php function</a>'s style is used.]]></comment>
40
  </export_filename>
41
  <export_shipping_address translate="label">
42
  <label>Export shipping address</label>
@@ -57,7 +57,7 @@
57
  <show_in_store>1</show_in_store>
58
  </export_billing_address>
59
  <export_policy>
60
- <label>Export Policy</label>
61
  <frontend_type>select</frontend_type>
62
  <source_model>contactlab_subscribers/system_config_source_export_policy</source_model>
63
  <sort_order>50</sort_order>
@@ -66,7 +66,7 @@
66
  <show_in_store>1</show_in_store>
67
  </export_policy>
68
  <last_export>
69
- <label>Last export's date and time</label>
70
  <frontend_type>text</frontend_type>
71
  <sort_order>60</sort_order>
72
  <show_in_default>1</show_in_default>
@@ -75,10 +75,10 @@
75
  <depends>
76
  <export_policy>2</export_policy>
77
  </depends>
78
- <comment>GMT timezone</comment>
79
  </last_export>
80
  <export_not_subscribed>
81
- <label>Always export not subscribed users</label>
82
  <frontend_type>select</frontend_type>
83
  <source_model>adminhtml/system_config_source_yesno</source_model>
84
  <sort_order>70</sort_order>
@@ -96,14 +96,15 @@
96
  <show_in_store>1</show_in_store>
97
  </reset_export_dates_before_next_export>
98
  <check_uk_before_export translate="label">
99
- <label>Check UK Table consistency before every export</label>
100
  <frontend_type>select</frontend_type>
101
  <source_model>adminhtml/system_config_source_yesno</source_model>
 
102
  <sort_order>90</sort_order>
103
  <show_in_default>1</show_in_default>
104
  <show_in_website>1</show_in_website>
105
  <show_in_store>1</show_in_store>
106
- <comment>Attention: this could slow down the export process</comment>
107
  </check_uk_before_export>
108
  <soap_call_after_export translate="label">
109
  <label>Enable import execution after export</label>
@@ -121,7 +122,7 @@
121
  <show_in_default>1</show_in_default>
122
  <show_in_website>1</show_in_website>
123
  <show_in_store>1</show_in_store>
124
- <comment><![CDATA[Specify here the field that contain the subscription flag in ContactLab database (es. __cls1).]]></comment>
125
  </subscribed_flag_name>
126
  <export_remote_path translate="label">
127
  <label>Remote path for export</label>
@@ -133,7 +134,7 @@
133
  <config_path>contactlab_commons/connection/export_remote_path</config_path>
134
  </export_remote_path>
135
  <data_updater_config_identifier translate="label" module="contactlab_commons">
136
- <label>Data updater config identifier</label>
137
  <frontend_type>text</frontend_type>
138
  <sort_order>120</sort_order>
139
  <show_in_default>1</show_in_default>
@@ -156,6 +157,7 @@
156
  <show_in_default>1</show_in_default>
157
  <show_in_website>1</show_in_website>
158
  <show_in_store>1</show_in_store>
 
159
  </web_form_code>
160
  <memory_limit>
161
  <label>Memory limit</label>
@@ -164,7 +166,7 @@
164
  <show_in_default>1</show_in_default>
165
  <show_in_website>1</show_in_website>
166
  <show_in_store>1</show_in_store>
167
- <comment><![CDATA[Leave empty to use environment memory limit (see <a href="http://php.net/manual/en/faq.using.php#faq.using.shorthandbytes">this page</a> for more info about the right syntax)]]></comment>
168
  </memory_limit>
169
  </fields>
170
  </global>
@@ -328,7 +330,7 @@
328
  <show_in_website>0</show_in_website>
329
  <show_in_store>0</show_in_store>
330
  <expanded>0</expanded>
331
- <comment><![CDATA[Please do <strong>Recalc Customer Statistics</strong> into <strong>Tasks</strong> page after you change one or both statistics period length.<br>To ensure that all customers statistics' are updated in Contactlab, please select <strong>All subscribers only for the next export</strong> option in <strong>Export Policy</strong> configuration option.]]></comment>
332
  <fields>
333
  <period_1 translate="label">
334
  <label>First period length</label>
@@ -349,7 +351,7 @@
349
  <comment>Second period length in days</comment>
350
  </period_2>
351
  <contactlab_subscribers_model_task_clearstatsrunner_interval translate="label">
352
- <label>Interval between statistic clear attempts</label>
353
  <frontend_type>text</frontend_type>
354
  <sort_order>30</sort_order>
355
  <show_in_default>1</show_in_default>
@@ -358,7 +360,7 @@
358
  <config_path>contactlab_subscribers/queue/contactlab_subscribers_model_task_clearstatsrunner_interval</config_path>
359
  </contactlab_subscribers_model_task_clearstatsrunner_interval>
360
  <contactlab_subscribers_model_task_clearstatsrunner_retries translate="label">
361
- <label>Number of statistic clear attempts</label>
362
  <frontend_type>text</frontend_type>
363
  <sort_order>40</sort_order>
364
  <show_in_default>1</show_in_default>
@@ -367,7 +369,7 @@
367
  <config_path>contactlab_subscribers/queue/contactlab_subscribers_model_task_clearstatsrunner_retries</config_path>
368
  </contactlab_subscribers_model_task_clearstatsrunner_retries>
369
  <contactlab_subscribers_model_task_calcstatsrunner_interval translate="label">
370
- <label>Interval between statistic fill attempts</label>
371
  <frontend_type>text</frontend_type>
372
  <sort_order>50</sort_order>
373
  <show_in_default>1</show_in_default>
@@ -376,7 +378,7 @@
376
  <config_path>contactlab_subscribers/queue/contactlab_subscribers_model_task_calcstatsrunner_interval</config_path>
377
  </contactlab_subscribers_model_task_calcstatsrunner_interval>
378
  <contactlab_subscribers_model_task_calcstatsrunner_retries translate="label">
379
- <label>Number of statistic fill attempts</label>
380
  <frontend_type>text</frontend_type>
381
  <sort_order>60</sort_order>
382
  <show_in_default>1</show_in_default>
@@ -386,6 +388,62 @@
386
  </contactlab_subscribers_model_task_calcstatsrunner_retries>
387
  </fields>
388
  </stats>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
389
  <queue translate="label">
390
  <label>Queue parameters</label>
391
  <frontend_type>text</frontend_type>
@@ -394,7 +452,7 @@
394
  <show_in_website>1</show_in_website>
395
  <show_in_store>1</show_in_store>
396
  <expanded>0</expanded>
397
- <comment><![CDATA[All values are specified in <strong>minutes</strong>.]]></comment>
398
  <fields>
399
  <contactlab_subscribers_model_task_exportsubscribersrunner_interval translate="label">
400
  <label>Interval between export attempts</label>
@@ -413,7 +471,7 @@
413
  <show_in_store>1</show_in_store>
414
  </contactlab_subscribers_model_task_exportsubscribersrunner_retries>
415
  <contactlab_subscribers_model_task_startsubscriberdataexchangerunner_interval translate="label">
416
- <label>Interval between StartSubscriberDataExchangeRunner SOAP Calls</label>
417
  <frontend_type>text</frontend_type>
418
  <sort_order>30</sort_order>
419
  <show_in_default>1</show_in_default>
@@ -421,7 +479,7 @@
421
  <show_in_store>1</show_in_store>
422
  </contactlab_subscribers_model_task_startsubscriberdataexchangerunner_interval>
423
  <contactlab_subscribers_model_task_startsubscriberdataexchangerunner_retries translate="label">
424
- <label>Number of StartSubscriberDataExchangeRunner SOAP Calls attempts</label>
425
  <frontend_type>text</frontend_type>
426
  <sort_order>40</sort_order>
427
  <show_in_default>1</show_in_default>
@@ -430,6 +488,26 @@
430
  </contactlab_subscribers_model_task_startsubscriberdataexchangerunner_retries>
431
  </fields>
432
  </queue>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
433
  <example_configuration translate="label">
434
  <label>Cron configuration example</label>
435
  <frontend_type>text</frontend_type>
@@ -438,7 +516,7 @@
438
  <show_in_website>0</show_in_website>
439
  <show_in_store>0</show_in_store>
440
  <comment><![CDATA[<h3>Example configuration</h3>
441
- <p>This is an example of configuration that queues an export job every day at 9:30PM</p>
442
  <pre>&lt;crontab&gt;
443
  &lt;jobs&gt;
444
  &lt;contactlab_subscribers_export_subscribers&gt;
@@ -489,10 +567,10 @@
489
  <show_in_website>1</show_in_website>
490
  <show_in_store>1</show_in_store>
491
  <config_path>contactlab_subscribers/global/import_filename</config_path>
492
- <comment><![CDATA[Import filename (es, event_info_{Ymd}.xml)<br>Use {Ymd} syntax to replace current data.<br>The <a href='http://php.net/manual/en/function.date.php'>date() php function</a>'s style is used.]]></comment>
493
  </import_filename>
494
  <import_remote_path translate="label">
495
- <label>Path server importer</label>
496
  <frontend_type>text</frontend_type>
497
  <sort_order>20</sort_order>
498
  <show_in_default>1</show_in_default>
@@ -501,7 +579,7 @@
501
  <config_path>contactlab_commons/connection/import_remote_path</config_path>
502
  </import_remote_path>
503
  <data_exporter_config_identifier translate="label">
504
- <label>DataExporter Configuration Id</label>
505
  <frontend_type>text</frontend_type>
506
  <sort_order>30</sort_order>
507
  <show_in_default>1</show_in_default>
@@ -512,14 +590,14 @@
512
  </fields>
513
  </setup>
514
  <queue translate="label">
515
- <label>Manage Queue</label>
516
  <frontend_type>text</frontend_type>
517
  <sort_order>20</sort_order>
518
  <show_in_default>1</show_in_default>
519
  <show_in_website>1</show_in_website>
520
  <show_in_store>1</show_in_store>
521
  <expanded>0</expanded>
522
- <comment><![CDATA[All values are in <strong>minute</strong>.]]></comment>
523
  <fields>
524
  <contactlab_subscribers_model_task_importsubscribersrunner_interval translate="label">
525
  <label>Interval between import attempts</label>
@@ -531,7 +609,7 @@
531
  <config_path>contactlab_subscribers/queue/contactlab_subscribers_model_task_importsubscribersrunner_interval</config_path>
532
  </contactlab_subscribers_model_task_importsubscribersrunner_interval>
533
  <contactlab_subscribers_model_task_importsubscribersrunner_retries translate="label">
534
- <label>Total number of import attempts</label>
535
  <frontend_type>text</frontend_type>
536
  <sort_order>20</sort_order>
537
  <show_in_default>1</show_in_default>
27
  <show_in_default>1</show_in_default>
28
  <show_in_website>0</show_in_website>
29
  <show_in_store>0</show_in_store>
30
+ <comment>Enable or disable ContactLab Subscribers module</comment>
31
  </enabled>
32
  <export_filename translate="label">
33
  <label>Export filename</label>
36
  <show_in_default>1</show_in_default>
37
  <show_in_website>1</show_in_website>
38
  <show_in_store>1</show_in_store>
39
+ <comment><![CDATA[Export filename (for example: subscribers_{Ymd}.xml)<br>Use {Ymd} syntax to replace the date.<br>The <a href='http://php.net/manual/en/function.date.php'>PHP date() function</a>'s format is used.]]></comment>
40
  </export_filename>
41
  <export_shipping_address translate="label">
42
  <label>Export shipping address</label>
57
  <show_in_store>1</show_in_store>
58
  </export_billing_address>
59
  <export_policy>
60
+ <label>Export policy</label>
61
  <frontend_type>select</frontend_type>
62
  <source_model>contactlab_subscribers/system_config_source_export_policy</source_model>
63
  <sort_order>50</sort_order>
66
  <show_in_store>1</show_in_store>
67
  </export_policy>
68
  <last_export>
69
+ <label>Last export date and time</label>
70
  <frontend_type>text</frontend_type>
71
  <sort_order>60</sort_order>
72
  <show_in_default>1</show_in_default>
75
  <depends>
76
  <export_policy>2</export_policy>
77
  </depends>
78
+ <comment>GMT time zone.</comment>
79
  </last_export>
80
  <export_not_subscribed>
81
+ <label>Always export non-subscribed users</label>
82
  <frontend_type>select</frontend_type>
83
  <source_model>adminhtml/system_config_source_yesno</source_model>
84
  <sort_order>70</sort_order>
96
  <show_in_store>1</show_in_store>
97
  </reset_export_dates_before_next_export>
98
  <check_uk_before_export translate="label">
99
+ <label>Check UK table consistency before every export</label>
100
  <frontend_type>select</frontend_type>
101
  <source_model>adminhtml/system_config_source_yesno</source_model>
102
+ <source_model>contactlab_subscribers/system_config_source_export_checkUkPolicy</source_model>
103
  <sort_order>90</sort_order>
104
  <show_in_default>1</show_in_default>
105
  <show_in_website>1</show_in_website>
106
  <show_in_store>1</show_in_store>
107
+ <comment>Note: This can slow down the export process.</comment>
108
  </check_uk_before_export>
109
  <soap_call_after_export translate="label">
110
  <label>Enable import execution after export</label>
122
  <show_in_default>1</show_in_default>
123
  <show_in_website>1</show_in_website>
124
  <show_in_store>1</show_in_store>
125
+ <comment><![CDATA[Specify the field that contains the subscription flag in ContactLab database (for example: _cls1).]]></comment>
126
  </subscribed_flag_name>
127
  <export_remote_path translate="label">
128
  <label>Remote path for export</label>
134
  <config_path>contactlab_commons/connection/export_remote_path</config_path>
135
  </export_remote_path>
136
  <data_updater_config_identifier translate="label" module="contactlab_commons">
137
+ <label>DataUpdater configuration ID</label>
138
  <frontend_type>text</frontend_type>
139
  <sort_order>120</sort_order>
140
  <show_in_default>1</show_in_default>
157
  <show_in_default>1</show_in_default>
158
  <show_in_website>1</show_in_website>
159
  <show_in_store>1</show_in_store>
160
+ <comment><![CDATA[ContactLab <code>WebFormCode</code>. Multiple comma separated values are also permitted.]]></comment>
161
  </web_form_code>
162
  <memory_limit>
163
  <label>Memory limit</label>
166
  <show_in_default>1</show_in_default>
167
  <show_in_website>1</show_in_website>
168
  <show_in_store>1</show_in_store>
169
+ <comment><![CDATA[Leave blank to use the memory limit of your environment (follow <a href="http://php.net/manual/en/faq.using.php#faq.using.shorthandbytes">this link</a> for more about the correct syntax)]]></comment>
170
  </memory_limit>
171
  </fields>
172
  </global>
330
  <show_in_website>0</show_in_website>
331
  <show_in_store>0</show_in_store>
332
  <expanded>0</expanded>
333
+ <comment><![CDATA[To ensure that all customer statistics are updated in ContactLab, select <strong>All subscribers only for the next export</strong> in the <strong>Export policy</strong> field of the <strong>Magento to ContactLab Configuration > Setup</strong> dialog.]]></comment>
334
  <fields>
335
  <period_1 translate="label">
336
  <label>First period length</label>
351
  <comment>Second period length in days</comment>
352
  </period_2>
353
  <contactlab_subscribers_model_task_clearstatsrunner_interval translate="label">
354
+ <label>Interval between clear statistics attempts</label>
355
  <frontend_type>text</frontend_type>
356
  <sort_order>30</sort_order>
357
  <show_in_default>1</show_in_default>
360
  <config_path>contactlab_subscribers/queue/contactlab_subscribers_model_task_clearstatsrunner_interval</config_path>
361
  </contactlab_subscribers_model_task_clearstatsrunner_interval>
362
  <contactlab_subscribers_model_task_clearstatsrunner_retries translate="label">
363
+ <label>Number of clear statistics attempts</label>
364
  <frontend_type>text</frontend_type>
365
  <sort_order>40</sort_order>
366
  <show_in_default>1</show_in_default>
369
  <config_path>contactlab_subscribers/queue/contactlab_subscribers_model_task_clearstatsrunner_retries</config_path>
370
  </contactlab_subscribers_model_task_clearstatsrunner_retries>
371
  <contactlab_subscribers_model_task_calcstatsrunner_interval translate="label">
372
+ <label>Interval between fill statistics attempts</label>
373
  <frontend_type>text</frontend_type>
374
  <sort_order>50</sort_order>
375
  <show_in_default>1</show_in_default>
378
  <config_path>contactlab_subscribers/queue/contactlab_subscribers_model_task_calcstatsrunner_interval</config_path>
379
  </contactlab_subscribers_model_task_calcstatsrunner_interval>
380
  <contactlab_subscribers_model_task_calcstatsrunner_retries translate="label">
381
+ <label>Number of fill statistics attempts</label>
382
  <frontend_type>text</frontend_type>
383
  <sort_order>60</sort_order>
384
  <show_in_default>1</show_in_default>
388
  </contactlab_subscribers_model_task_calcstatsrunner_retries>
389
  </fields>
390
  </stats>
391
+
392
+ <modify_email translate="label">
393
+ <label>Email template for custom subscriber fields edit</label>
394
+ <frontend_type>text</frontend_type>
395
+ <sort_order>35</sort_order>
396
+ <show_in_default>1</show_in_default>
397
+ <show_in_website>0</show_in_website>
398
+ <show_in_store>0</show_in_store>
399
+ <expanded>0</expanded>
400
+ <fields>
401
+ <enable translate="label">
402
+ <label>Enable custom subscriber fields edit email</label>
403
+ <frontend_type>select</frontend_type>
404
+ <sort_order>10</sort_order>
405
+ <show_in_default>1</show_in_default>
406
+ <show_in_website>0</show_in_website>
407
+ <show_in_store>0</show_in_store>
408
+ <source_model>adminhtml/system_config_source_yesno</source_model>
409
+ </enable>
410
+ <email_sender translate="label">
411
+ <label>Sender email</label>
412
+ <frontend_type>text</frontend_type>
413
+ <sort_order>20</sort_order>
414
+ <show_in_default>1</show_in_default>
415
+ <show_in_website>0</show_in_website>
416
+ <show_in_store>0</show_in_store>
417
+ <depends>
418
+ <enable>1</enable>
419
+ </depends>
420
+ </email_sender>
421
+ <email_sender_name translate="label">
422
+ <label>Sender name</label>
423
+ <frontend_type>text</frontend_type>
424
+ <sort_order>30</sort_order>
425
+ <show_in_default>1</show_in_default>
426
+ <show_in_website>0</show_in_website>
427
+ <show_in_store>0</show_in_store>
428
+ <depends>
429
+ <enable>1</enable>
430
+ </depends>
431
+ </email_sender_name>
432
+ <send_email_template translate="label">
433
+ <label>Email template</label>
434
+ <frontend_type>select</frontend_type>
435
+ <source_model>adminhtml/system_config_source_email_template</source_model>
436
+ <sort_order>50</sort_order>
437
+ <show_in_default>1</show_in_default>
438
+ <show_in_website>0</show_in_website>
439
+ <show_in_store>0</show_in_store>
440
+ <depends>
441
+ <enable>1</enable>
442
+ </depends>
443
+ </send_email_template>
444
+ </fields>
445
+ </modify_email>
446
+
447
  <queue translate="label">
448
  <label>Queue parameters</label>
449
  <frontend_type>text</frontend_type>
452
  <show_in_website>1</show_in_website>
453
  <show_in_store>1</show_in_store>
454
  <expanded>0</expanded>
455
+ <comment><![CDATA[All time values are specified in <strong>minutes</strong>.]]></comment>
456
  <fields>
457
  <contactlab_subscribers_model_task_exportsubscribersrunner_interval translate="label">
458
  <label>Interval between export attempts</label>
471
  <show_in_store>1</show_in_store>
472
  </contactlab_subscribers_model_task_exportsubscribersrunner_retries>
473
  <contactlab_subscribers_model_task_startsubscriberdataexchangerunner_interval translate="label">
474
+ <label>Interval between StartSubscriberDataExchangeRunner SOAP calls</label>
475
  <frontend_type>text</frontend_type>
476
  <sort_order>30</sort_order>
477
  <show_in_default>1</show_in_default>
479
  <show_in_store>1</show_in_store>
480
  </contactlab_subscribers_model_task_startsubscriberdataexchangerunner_interval>
481
  <contactlab_subscribers_model_task_startsubscriberdataexchangerunner_retries translate="label">
482
+ <label>Number of StartSubscriberDataExchangeRunner SOAP call attempts</label>
483
  <frontend_type>text</frontend_type>
484
  <sort_order>40</sort_order>
485
  <show_in_default>1</show_in_default>
488
  </contactlab_subscribers_model_task_startsubscriberdataexchangerunner_retries>
489
  </fields>
490
  </queue>
491
+ <newsletter>
492
+ <label>Newsletter custom block</label>
493
+ <frontend_type>text</frontend_type>
494
+ <sort_order>45</sort_order>
495
+ <show_in_default>1</show_in_default>
496
+ <show_in_website>1</show_in_website>
497
+ <show_in_store>1</show_in_store>
498
+ <expanded>0</expanded>
499
+ <fields>
500
+ <enable translate="label">
501
+ <label>Enable custom newsletter block</label>
502
+ <frontend_type>select</frontend_type>
503
+ <sort_order>10</sort_order>
504
+ <show_in_default>1</show_in_default>
505
+ <show_in_website>0</show_in_website>
506
+ <show_in_store>0</show_in_store>
507
+ <source_model>adminhtml/system_config_source_yesno</source_model>
508
+ </enable>
509
+ </fields>
510
+ </newsletter>
511
  <example_configuration translate="label">
512
  <label>Cron configuration example</label>
513
  <frontend_type>text</frontend_type>
516
  <show_in_website>0</show_in_website>
517
  <show_in_store>0</show_in_store>
518
  <comment><![CDATA[<h3>Example configuration</h3>
519
+ <p>This configuration example queues an export job every day at 9:30 PM.</p>
520
  <pre>&lt;crontab&gt;
521
  &lt;jobs&gt;
522
  &lt;contactlab_subscribers_export_subscribers&gt;
567
  <show_in_website>1</show_in_website>
568
  <show_in_store>1</show_in_store>
569
  <config_path>contactlab_subscribers/global/import_filename</config_path>
570
+ <comment><![CDATA[Import filename (for example: event_info_{Ymd}.xml)<br>Use {Ymd} syntax to replace the date.<br>The <a href='http://php.net/manual/en/function.date.php'>PHP date() function</a>'s format is used.]]></comment>
571
  </import_filename>
572
  <import_remote_path translate="label">
573
+ <label>Server importer path</label>
574
  <frontend_type>text</frontend_type>
575
  <sort_order>20</sort_order>
576
  <show_in_default>1</show_in_default>
579
  <config_path>contactlab_commons/connection/import_remote_path</config_path>
580
  </import_remote_path>
581
  <data_exporter_config_identifier translate="label">
582
+ <label>DataExporter configuration ID</label>
583
  <frontend_type>text</frontend_type>
584
  <sort_order>30</sort_order>
585
  <show_in_default>1</show_in_default>
590
  </fields>
591
  </setup>
592
  <queue translate="label">
593
+ <label>Manage queue</label>
594
  <frontend_type>text</frontend_type>
595
  <sort_order>20</sort_order>
596
  <show_in_default>1</show_in_default>
597
  <show_in_website>1</show_in_website>
598
  <show_in_store>1</show_in_store>
599
  <expanded>0</expanded>
600
+ <comment><![CDATA[All time values are specified in <strong>minutes</strong>.]]></comment>
601
  <fields>
602
  <contactlab_subscribers_model_task_importsubscribersrunner_interval translate="label">
603
  <label>Interval between import attempts</label>
609
  <config_path>contactlab_subscribers/queue/contactlab_subscribers_model_task_importsubscribersrunner_interval</config_path>
610
  </contactlab_subscribers_model_task_importsubscribersrunner_interval>
611
  <contactlab_subscribers_model_task_importsubscribersrunner_retries translate="label">
612
+ <label>Number of import attempts</label>
613
  <frontend_type>text</frontend_type>
614
  <sort_order>20</sort_order>
615
  <show_in_default>1</show_in_default>
app/code/community/Contactlab/Subscribers/shell/make-csv.php DELETED
@@ -1,78 +0,0 @@
1
- <?php
2
-
3
- function randomFirstName() {
4
- return random("Mario", "Dario", "Lara", "Giulia", "Luisa", "Tania", "Marco", "Andrea", "Diego", "Gianluca", "Michele", "Ernesto", "Davide", "Carlo", "Carla", "Gianni", "Gianna", "Francesco", "Francesca");
5
- }
6
-
7
- function randomLastName() {
8
- return random("Rossi", "Verdi", "Pasquali", "Peresson", "De Francesco", "Lorenzon", "Pinto", "De Luigi", "Bersani", "Speranza", "Girondi", "Fatrane", "Allegri", "Dello", "De Preti", "Mieli", "Paulate", "Verri", "Siniscalco");
9
- }
10
- function randomId() {
11
- return "EMPL_AW_" . str_pad(mt_rand(500, 1000), 4, '0', STR_PAD_LEFT);
12
- }
13
- function randomStoreCode() {
14
- return "AW" . str_pad(mt_rand(500, 1000), 4, '0', STR_PAD_LEFT);
15
- }
16
- function randomStreet() {
17
- return random("Viale Verdi", "Via Roma", "Via Udine", "Viale Montecristo", "Vicolo Corto", "Vicolo stretto");
18
- }
19
- function randomNr() {
20
- return random("1", "7", "12", "14/c", "19", "52", "44", "7/b", "20", "20/a", "25", "34", "35/b", "17");
21
- }
22
- function randomCity() {
23
- return random("Pero", "Romano", "Desenzano", "Merano", "Villanova");
24
- }
25
- function randomCountry() {
26
- return random("IT");
27
- }
28
- function randomRegion() {
29
- return random("UD", "PN", "TS", "FI", "RM", "TO");
30
- }
31
- function randomPostcode() {
32
- return mt_rand(12345, 99999);
33
- }
34
- function randomTelephone() {
35
- return mt_rand(4012345, 4999999);
36
- }
37
- function randomStore() {
38
- return random("Retail", "Franchising");
39
- }
40
- function random() {
41
- $a = func_get_args();
42
- return $a[mt_rand(0, func_num_args() - 1)];
43
- }
44
-
45
- function mkMail($n, $l) {
46
- return "name.surname+" . preg_replace('|\s+|', '_', strtolower($n . "." . $l . '.' . mt_rand(100000000, 999999999) . '_' . mt_rand(100000000, 999999999) . '@example.com'));
47
- }
48
-
49
- /*
50
- * first_name
51
- * last_name
52
- * aw_store_code
53
- * aw_employee_id
54
- * email
55
- * street
56
- * city
57
- * country
58
- * region
59
- * postcode
60
- * telephone
61
- * group
62
- */
63
-
64
- # 989999
65
- echo "_address_firstname,_address_lastname,firstname,lastname,email,_address_street,_address_city," . "_address_country_id,_address_region,_address_postcode,_address_telephone,group_id,_website,_store,_address_default_billing_,_address_default_shipping_\n";
66
- for ($i = 0; $i < 10000; $i++) {
67
- $firstname = randomFirstName();
68
- $lastname = randomLastName();
69
- $email = mkMail($firstname, $lastname);
70
- $street = randomStreet();
71
- $nr = randomNr();
72
- $city = randomCity();
73
- $country = randomCountry();
74
- $region = randomRegion();
75
- $postcode = randomPostcode();
76
- $phone = randomTelephone();
77
- echo "\"$firstname\",\"$lastname\",\"$firstname\",\"$lastname\",\"$email\",\"$street, $nr\",\"$city\",\"$country\",\"$region\",\"$postcode\",\"$phone\",1,\"base\",\"default\",1,1\n";
78
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Contactlab/Subscribers/sql/contactlab_subscribers_setup/upgrade-0.8.21-0.8.22.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+
5
+ /* @var $installer Mage_Core_Model_Resource_Setup */
6
+ $installer->startSetup();
7
+
8
+ // Create subscriber fields table
9
+ $table = "contactlab_subscribers/newsletter_subscriber_fields";
10
+ $tableName = $installer->getTable($table);
11
+
12
+ /** @var $connection Varien_Db_Adapter_Pdo_Mysql */
13
+ $connection = $installer->getConnection();
14
+
15
+ if (!$connection->isTableExists($tableName)) {
16
+ $newTable = $connection->newTable($tableName)
17
+ ->addColumn('entity_id', Varien_Db_Ddl_Table::TYPE_INTEGER, null, array(
18
+ 'identity' => true,
19
+ 'unsigned' => true,
20
+ 'nullable' => false,
21
+ 'primary' => true), 'ContactLab Entity id')
22
+ ->addColumn('subscriber_id',
23
+ Varien_Db_Ddl_Table::TYPE_INTEGER,
24
+ null,
25
+ array('nullable' => true),
26
+ 'Newsletter subscribers table entity Id')
27
+ ->addColumn('subscriber_email',
28
+ Varien_Db_Ddl_Table::TYPE_TEXT,
29
+ 150, array(
30
+ 'nullable' => true,
31
+ 'default' => null),
32
+ 'Subscriber Email')
33
+ ->addColumn('first_name',
34
+ Varien_Db_Ddl_Table::TYPE_TEXT,
35
+ 255,
36
+ array('nullable' => true),
37
+ 'First name')
38
+ ->addColumn('last_name',
39
+ Varien_Db_Ddl_Table::TYPE_TEXT,
40
+ 255,
41
+ array('nullable' => true),
42
+ 'Last name')
43
+ ->addColumn('company',
44
+ Varien_Db_Ddl_Table::TYPE_TEXT, 255,
45
+ array('nullable' => true), 'Company')
46
+ ->addColumn('gender',
47
+ Varien_Db_Ddl_Table::TYPE_TEXT, 10,
48
+ array('nullable' => true), 'Gender')
49
+ ->addColumn('dob',
50
+ Varien_Db_Ddl_Table::TYPE_DATETIME,
51
+ null, array('nullable' => true), 'Date of birth')
52
+ ->addColumn('privacy_accepted',
53
+ Varien_Db_Ddl_Table::TYPE_BOOLEAN,
54
+ null, array('nullable' => false), 'Privacy acceptance flag')
55
+ ->addColumn('custom_1',
56
+ Varien_Db_Ddl_Table::TYPE_TEXT,
57
+ 255, array('nullable' => true), 'Custom text field #1')
58
+ ->addColumn('custom_2',
59
+ Varien_Db_Ddl_Table::TYPE_TEXT,
60
+ 255, array('nullable' => true), 'Custom text field #2')
61
+ ->addColumn('country',
62
+ Varien_Db_Ddl_Table::TYPE_TEXT,
63
+ 255, array('nullable' => true), 'Country')
64
+ ->addColumn('city',
65
+ Varien_Db_Ddl_Table::TYPE_TEXT,
66
+ 255, array('nullable' => true), 'City')
67
+ ->addColumn('address',
68
+ Varien_Db_Ddl_Table::TYPE_TEXT,
69
+ 255, array('nullable' => true), 'Address')
70
+ ->addColumn('zip_code',
71
+ Varien_Db_Ddl_Table::TYPE_TEXT,
72
+ 10, array('nullable' => true), 'Zip code')
73
+ ->addColumn('phone',
74
+ Varien_Db_Ddl_Table::TYPE_TEXT,
75
+ 12, array('nullable' => true), 'Landline phone number')
76
+ ->addColumn('cell_phone',
77
+ Varien_Db_Ddl_Table::TYPE_TEXT,
78
+ 12, array('nullable' => true), 'Mobile phone number')
79
+ ->addColumn('notes',
80
+ Varien_Db_Ddl_Table::TYPE_TEXT,
81
+ 255, array('nullable' => true),
82
+ 'Notes')
83
+ ->addForeignKey($installer->getFkName($table, 'subscriber_id', 'newsletter/subscriber', 'subscriber_id'),
84
+ 'subscriber_id', $installer->getTable('newsletter/subscriber'), 'subscriber_id',
85
+ Varien_Db_Ddl_Table::ACTION_CASCADE, Varien_Db_Ddl_Table::ACTION_CASCADE)
86
+ ->setComment("ContactLab Id -> Newsletter subscriber mapping table");
87
+
88
+ $connection->createTable($newTable);
89
+ }
90
+
91
+ $installer->endSetup();
app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Edit/Form.php CHANGED
@@ -2,10 +2,6 @@
2
 
3
  /**
4
  * Adminhtml Newsletter Template Edit Form Block
5
- *
6
- * @category Mage
7
- * @package Mage_Adminhtml
8
- * @author Magento Core Team <core@magentocommerce.com>
9
  */
10
  class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends Mage_Adminhtml_Block_Newsletter_Template_Edit_Form
11
  {
@@ -18,19 +14,22 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
18
  protected function _prepareForm() {
19
  $returnValue = parent::_prepareForm();
20
 
 
21
  $model = $this->getModel();
22
  $h = Mage::helper('contactlab_template');
23
  $form = $this->getForm();
24
  $yesNo = Mage::getModel('adminhtml/system_config_source_yesno');
 
25
 
26
- $fieldset = $form->getElement('base_fieldset');
 
27
 
28
  // Remove fields.
29
- $fieldset->removeField('text');
30
- $fieldset->removeField('template_styles');
31
 
32
 
33
- $fieldset->addField('enable_xml_delivery', 'select', array(
34
  'required' => false,
35
  'name' => 'enable_xml_delivery',
36
  'default' => '1',
@@ -38,32 +37,39 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
38
  'values' => $yesNo->toOptionArray(),
39
  'value' => $model->getId() !== null ? $model->getEnableXmlDelivery() : 1));
40
 
 
 
 
 
 
 
 
41
 
42
  $types = Mage::getModel('contactlab_template/system_config_source_template_type');
43
 
44
- $fieldset->addField('reply_to', 'text', array(
45
  'required' => false,
46
  'name' => 'reply_to',
47
  'label' => $h->__('Reply to'),
48
  'value' => $model->getId() !== null ? $model->getReplyTo() : ''));
49
- $fieldset->addField('template_type_id', 'select', array(
50
  'required' => false,
51
  'name' => 'template_type_id',
52
  'values' => $types->toOptionArray(),
53
  'label' => $h->__('Template type'),
54
  'value' => $model->getId() !== null ? $model->getTemplateTypeId() : ''));
55
- $fieldset->addField('text', 'textarea', array(
56
  'required' => true,
57
  'name' => 'text',
58
  'label' => $h->__('Template (html format)'),
59
  'value' => $model->getTemplateText()));
60
- $fieldset->addField('template_text_plain', 'textarea', array(
61
  'required' => true,
62
  'name' => 'template_text_plain',
63
  'label' => $h->__('Template (text format)'),
64
  'value' => $model->getTemplateTextPlain()));
65
  $formats = Mage::getModel('contactlab_template/system_config_source_template_format');
66
- $fieldset->addField('flg_html_txt', 'select', array(
67
  'required' => true,
68
  'name' => 'flg_html_txt',
69
  'label' => $h->__('Email format type'),
@@ -71,13 +77,13 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
71
  'values' => $formats->toOptionArray(),
72
  'value' => $model->getId() !== null ? $model->getFlgHtmlTxt() : 'B'));
73
 
74
- $fieldset->addField('template_styles', 'textarea', array(
75
  'name' =>'styles',
76
  'label' => Mage::helper('newsletter')->__('Template Styles'),
77
  'container_id' => 'field_template_styles',
78
  'value' => $model->getTemplateStyles()
79
  ));
80
- $fieldset->addField('is_test_mode', 'select', array(
81
  'name' => 'is_test_mode',
82
  'label' => Mage::helper('contactlab_template')->__('Send to test recipients'),
83
  'title' => Mage::helper('contactlab_template')->__('Send to test recipients'),
@@ -89,9 +95,9 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
89
  ));
90
 
91
 
92
- $this->_addProductFieldset();
93
  $this->_addCustomerFilterOptions();
94
- $this->_addCronFieldset();
95
 
96
  return $returnValue;
97
  }
@@ -100,24 +106,25 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
100
  /**
101
  * Add product fields fileset
102
  */
103
- private function _addProductFieldset() {
 
104
  $model = $this->getModel();
105
  $h = Mage::helper('contactlab_template');
106
  $form = $this->getForm();
107
 
108
- $fieldset = $form->addFieldset('product_fieldset', array(
109
  'legend' => $h->__('Product templates'),
110
  'class' => 'fieldset-wide'
111
  ));
112
 
113
  foreach (range(1, 5) as $i) {
114
- $fieldset->addField("template_pr_txt_$i", 'textarea', array(
115
  'required' => false,
116
  'name' => "template_pr_txt_$i",
117
  'label' => $h->__("Product template nr %d (text)", $i),
118
  'title' => $h->__("Template nr %d for product (text/plain)", $i),
119
  'value' => $model->getId() !== null ? $model->getData("template_pr_txt_$i") : ''));
120
- $fieldset->addField("template_pr_html_$i", 'textarea', array(
121
  'required' => false,
122
  'name' => "template_pr_html_$i",
123
  'label' => $h->__("Product template nr %d (html)", $i),
@@ -125,14 +132,14 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
125
  'value' => $model->getId() !== null ? $model->getData("template_pr_html_$i") : ''));
126
  }
127
 
128
- $fieldset->addField('default_product_snippet', 'text', array(
129
  'required' => false,
130
  'name' => 'default_product_snippet',
131
  'label' => $h->__('Default product snippet (1-5)'),
132
  'title' => $h->__('Default product snippet number'),
133
  'value' => $model->getId() !== null ? $model->getDefaultProductSnippet() : ''));
134
 
135
- $fieldset->addField('product_image_size', 'text', array(
136
  'required' => false,
137
  'name' => 'product_image_size',
138
  'label' => $h->__('Product image size (width x height)'),
@@ -144,51 +151,51 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
144
  /**
145
  * Add cron fields fileset
146
  */
147
- private function _addCronFieldset() {
 
148
  $model = $this->getModel();
149
  $h = Mage::helper('contactlab_template');
150
  $form = $this->getForm();
151
  $yesNo = Mage::getModel('adminhtml/system_config_source_yesno');
152
 
153
- $form = $this->getForm();
154
- $fieldset = $form->addFieldset('cron_fieldset', array(
155
  'legend' => $h->__('Cron Information'),
156
  'class' => 'fieldset-narrow'
157
  ));
158
 
159
- $fieldset->addField('is_cron_enabled', 'select', array(
160
- 'label' => $h->__('Activate for cron execution'),
161
- 'title' => $h->__('Does the template is active for cron?'),
162
  'name' => 'is_cron_enabled',
163
  'values' => $yesNo->toOptionArray(),
164
  'value' => $model->getId() !== null ? $model->getIsCronEnabled() : 0));
165
  $dateFormatIso = Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT);
166
- $fieldset->addField('cron_date_range_start', 'date', array(
167
  'label' => $h->__('Enabled start date'),
168
- 'title' => $h->__('Start date for cron'),
169
  'image' => $this->getSkinUrl('images/grid-cal.gif'),
170
  'input_format' => Varien_Date::DATE_INTERNAL_FORMAT,
171
  'format' => $dateFormatIso,
172
  'required' => false,
173
  'name' => 'cron_date_range_start',
174
  'value' => $model->getId() !== null ? $model->getCronDateRangeStart() : ''));
175
- $fieldset->addField('cron_date_range_end', 'date', array(
176
  'label' => $h->__('Enabled end date'),
177
- 'title' => $h->__('End date for cron'),
178
  'image' => $this->getSkinUrl('images/grid-cal.gif'),
179
  'input_format' => Varien_Date::DATE_INTERNAL_FORMAT,
180
  'format' => $dateFormatIso,
181
  'required' => false,
182
  'name' => 'cron_date_range_end',
183
  'value' => $model->getId() !== null ? $model->getCronDateRangeEnd() : ''));
184
- $fieldset->addField('queue_delay_time', 'text', array(
185
  'label' => $h->__('Queue delay time'),
186
  'title' => $h->__('Optional queue delay time'),
187
  'required' => false,
188
  'name' => 'queue_delay_time',
189
  'value' => $model->getId() !== null ? $model->getQueueDelayTime() : 0));
190
 
191
- $fieldset->addField('priority', 'text', array(
192
  'required' => true,
193
  'name' => 'priority',
194
  'label' => $h->__('Priority'),
@@ -201,18 +208,20 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
201
  * @return $this
202
  */
203
  public function _addCustomerFilterOptions() {
 
204
  $model = $this->getModel();
 
205
  /* @var $h Contactlab_Template_Helper_Data */
206
  $h = Mage::helper('contactlab_template');
207
  $form = $this->getForm();
208
  $andOr = Mage::getModel('contactlab_template/system_config_source_andOr');
209
 
210
- $fieldset = $form->addFieldset('customer_filter_fieldset', array(
211
  'legend' => $h->__('Customer filter options'),
212
  'class' => 'fieldset-narrow'
213
  ));
214
 
215
- $fieldset->addField('min_minutes_from_last_update', 'text', array(
216
  'required' => false,
217
  'class' => 'validate-not-negative-number validate-digits validate-is-min-of-range',
218
  'label' => $h->__('Minimum number of minutes'),
@@ -220,7 +229,7 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
220
  'name' => 'min_minutes_from_last_update',
221
  'value' => $model->getId() !== null ? $model->getMinMinutesFromLastUpdate() : ''));
222
 
223
- $fieldset->addField('max_minutes_from_last_update', 'text', array(
224
  'required' => false,
225
  'class' => 'validate-not-negative-number validate-digits validate-is-max-of-range',
226
  'label' => $h->__('Maximum number of minutes'),
@@ -228,7 +237,7 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
228
  'name' => 'max_minutes_from_last_update',
229
  'value' => $model->getId() !== null ? $model->getMaxMinutesFromLastUpdate() : ''));
230
 
231
- $fieldset->addField('min_value', 'text', array(
232
  'required' => false,
233
  'class' => 'validate-number validate-not-negative-number validate-is-min-of-range',
234
  'label' => $h->__('Minimum value'),
@@ -237,7 +246,7 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
237
  'name' => 'min_value',
238
  'value' => $model->getId() !== null ? $h->formatPrice($model->getMinValue()) : ''));
239
 
240
- $fieldset->addField('max_value', 'text', array(
241
  'required' => false,
242
  'class' => 'validate-number validate-not-negative-number validate-is-max-of-range',
243
  'label' => $h->__('Maximum value'),
@@ -245,7 +254,7 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
245
  'name' => 'max_value',
246
  'value' => $model->getId() !== null ? $h->formatPrice($model->getMaxValue()) : ''));
247
 
248
- $fieldset->addField('min_products', 'text', array(
249
  'required' => false,
250
  'class' => 'validate-greater-than-zero validate-digits validate-is-min-of-range',
251
  'label' => $h->__('Minimum number of products'),
@@ -253,7 +262,7 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
253
  'name' => 'min_products',
254
  'value' => $model->getId() !== null ? $model->getMinProducts() : ''));
255
 
256
- $fieldset->addField('max_products', 'text', array(
257
  'required' => false,
258
  'class' => 'validate-greater-than-zero validate-digits validate-is-max-of-range',
259
  'label' => $h->__('Maximum number of products'),
@@ -261,14 +270,29 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends
261
  'name' => 'max_products',
262
  'value' => $model->getId() !== null ? $model->getMaxProducts() : ''));
263
 
264
- $fieldset->addField('and_or', 'select', array(
265
  'required' => true,
266
- 'label' => $h->__('And / Or condition values'),
267
- 'title' => $h->__('And / Or condition values'),
268
  'name' => 'and_or',
269
  'values' => $andOr->toOptionArray(),
270
  'value' => $model->getId() !== null ? $model->getAndOr() : 'AND'));
271
 
272
  return $this;
273
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
274
  }
2
 
3
  /**
4
  * Adminhtml Newsletter Template Edit Form Block
 
 
 
 
5
  */
6
  class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Edit_Form extends Mage_Adminhtml_Block_Newsletter_Template_Edit_Form
7
  {
14
  protected function _prepareForm() {
15
  $returnValue = parent::_prepareForm();
16
 
17
+ /** @var $model Contactlab_Template_Model_Newsletter_Template */
18
  $model = $this->getModel();
19
  $h = Mage::helper('contactlab_template');
20
  $form = $this->getForm();
21
  $yesNo = Mage::getModel('adminhtml/system_config_source_yesno');
22
+ $stores = $this->getStoresOptions();
23
 
24
+ /** @var $fieldSet Varien_Data_Form_Element_Fieldset */
25
+ $fieldSet = $form->getElement('base_fieldset');
26
 
27
  // Remove fields.
28
+ $fieldSet->removeField('text');
29
+ $fieldSet->removeField('template_styles');
30
 
31
 
32
+ $fieldSet->addField('enable_xml_delivery', 'select', array(
33
  'required' => false,
34
  'name' => 'enable_xml_delivery',
35
  'default' => '1',
37
  'values' => $yesNo->toOptionArray(),
38
  'value' => $model->getId() !== null ? $model->getEnableXmlDelivery() : 1));
39
 
40
+ $fieldSet->addField('store_id', 'select', array(
41
+ 'required' => false,
42
+ 'name' => 'store_id',
43
+ 'label' => Mage::helper('adminhtml')->__('Store View'),
44
+ 'values' => $stores,
45
+ 'value' => $model->getStoreId()));
46
+
47
 
48
  $types = Mage::getModel('contactlab_template/system_config_source_template_type');
49
 
50
+ $fieldSet->addField('reply_to', 'text', array(
51
  'required' => false,
52
  'name' => 'reply_to',
53
  'label' => $h->__('Reply to'),
54
  'value' => $model->getId() !== null ? $model->getReplyTo() : ''));
55
+ $fieldSet->addField('template_type_id', 'select', array(
56
  'required' => false,
57
  'name' => 'template_type_id',
58
  'values' => $types->toOptionArray(),
59
  'label' => $h->__('Template type'),
60
  'value' => $model->getId() !== null ? $model->getTemplateTypeId() : ''));
61
+ $fieldSet->addField('text', 'textarea', array(
62
  'required' => true,
63
  'name' => 'text',
64
  'label' => $h->__('Template (html format)'),
65
  'value' => $model->getTemplateText()));
66
+ $fieldSet->addField('template_text_plain', 'textarea', array(
67
  'required' => true,
68
  'name' => 'template_text_plain',
69
  'label' => $h->__('Template (text format)'),
70
  'value' => $model->getTemplateTextPlain()));
71
  $formats = Mage::getModel('contactlab_template/system_config_source_template_format');
72
+ $fieldSet->addField('flg_html_txt', 'select', array(
73
  'required' => true,
74
  'name' => 'flg_html_txt',
75
  'label' => $h->__('Email format type'),
77
  'values' => $formats->toOptionArray(),
78
  'value' => $model->getId() !== null ? $model->getFlgHtmlTxt() : 'B'));
79
 
80
+ $fieldSet->addField('template_styles', 'textarea', array(
81
  'name' =>'styles',
82
  'label' => Mage::helper('newsletter')->__('Template Styles'),
83
  'container_id' => 'field_template_styles',
84
  'value' => $model->getTemplateStyles()
85
  ));
86
+ $fieldSet->addField('is_test_mode', 'select', array(
87
  'name' => 'is_test_mode',
88
  'label' => Mage::helper('contactlab_template')->__('Send to test recipients'),
89
  'title' => Mage::helper('contactlab_template')->__('Send to test recipients'),
95
  ));
96
 
97
 
98
+ $this->_addProductFieldSet();
99
  $this->_addCustomerFilterOptions();
100
+ $this->_addCronFieldSet();
101
 
102
  return $returnValue;
103
  }
106
  /**
107
  * Add product fields fileset
108
  */
109
+ private function _addProductFieldSet() {
110
+ /** @var $model Contactlab_Template_Model_Newsletter_Template */
111
  $model = $this->getModel();
112
  $h = Mage::helper('contactlab_template');
113
  $form = $this->getForm();
114
 
115
+ $fieldSet = $form->addFieldset('product_fieldset', array(
116
  'legend' => $h->__('Product templates'),
117
  'class' => 'fieldset-wide'
118
  ));
119
 
120
  foreach (range(1, 5) as $i) {
121
+ $fieldSet->addField("template_pr_txt_$i", 'textarea', array(
122
  'required' => false,
123
  'name' => "template_pr_txt_$i",
124
  'label' => $h->__("Product template nr %d (text)", $i),
125
  'title' => $h->__("Template nr %d for product (text/plain)", $i),
126
  'value' => $model->getId() !== null ? $model->getData("template_pr_txt_$i") : ''));
127
+ $fieldSet->addField("template_pr_html_$i", 'textarea', array(
128
  'required' => false,
129
  'name' => "template_pr_html_$i",
130
  'label' => $h->__("Product template nr %d (html)", $i),
132
  'value' => $model->getId() !== null ? $model->getData("template_pr_html_$i") : ''));
133
  }
134
 
135
+ $fieldSet->addField('default_product_snippet', 'text', array(
136
  'required' => false,
137
  'name' => 'default_product_snippet',
138
  'label' => $h->__('Default product snippet (1-5)'),
139
  'title' => $h->__('Default product snippet number'),
140
  'value' => $model->getId() !== null ? $model->getDefaultProductSnippet() : ''));
141
 
142
+ $fieldSet->addField('product_image_size', 'text', array(
143
  'required' => false,
144
  'name' => 'product_image_size',
145
  'label' => $h->__('Product image size (width x height)'),
151
  /**
152
  * Add cron fields fileset
153
  */
154
+ private function _addCronFieldSet() {
155
+ /** @var $model Contactlab_Template_Model_Newsletter_Template */
156
  $model = $this->getModel();
157
  $h = Mage::helper('contactlab_template');
158
  $form = $this->getForm();
159
  $yesNo = Mage::getModel('adminhtml/system_config_source_yesno');
160
 
161
+ $fieldSet = $form->addFieldset('cron_fieldset', array(
 
162
  'legend' => $h->__('Cron Information'),
163
  'class' => 'fieldset-narrow'
164
  ));
165
 
166
+ $fieldSet->addField('is_cron_enabled', 'select', array(
167
+ 'label' => $h->__('Activate for Cron execution'),
168
+ 'title' => $h->__('Does the template is active for Cron?'),
169
  'name' => 'is_cron_enabled',
170
  'values' => $yesNo->toOptionArray(),
171
  'value' => $model->getId() !== null ? $model->getIsCronEnabled() : 0));
172
  $dateFormatIso = Mage::app()->getLocale()->getDateFormat(Mage_Core_Model_Locale::FORMAT_TYPE_SHORT);
173
+ $fieldSet->addField('cron_date_range_start', 'date', array(
174
  'label' => $h->__('Enabled start date'),
175
+ 'title' => $h->__('Start date for Cron'),
176
  'image' => $this->getSkinUrl('images/grid-cal.gif'),
177
  'input_format' => Varien_Date::DATE_INTERNAL_FORMAT,
178
  'format' => $dateFormatIso,
179
  'required' => false,
180
  'name' => 'cron_date_range_start',
181
  'value' => $model->getId() !== null ? $model->getCronDateRangeStart() : ''));
182
+ $fieldSet->addField('cron_date_range_end', 'date', array(
183
  'label' => $h->__('Enabled end date'),
184
+ 'title' => $h->__('End date for Cron'),
185
  'image' => $this->getSkinUrl('images/grid-cal.gif'),
186
  'input_format' => Varien_Date::DATE_INTERNAL_FORMAT,
187
  'format' => $dateFormatIso,
188
  'required' => false,
189
  'name' => 'cron_date_range_end',
190
  'value' => $model->getId() !== null ? $model->getCronDateRangeEnd() : ''));
191
+ $fieldSet->addField('queue_delay_time', 'text', array(
192
  'label' => $h->__('Queue delay time'),
193
  'title' => $h->__('Optional queue delay time'),
194
  'required' => false,
195
  'name' => 'queue_delay_time',
196
  'value' => $model->getId() !== null ? $model->getQueueDelayTime() : 0));
197
 
198
+ $fieldSet->addField('priority', 'text', array(
199
  'required' => true,
200
  'name' => 'priority',
201
  'label' => $h->__('Priority'),
208
  * @return $this
209
  */
210
  public function _addCustomerFilterOptions() {
211
+ /** @var $model Contactlab_Template_Model_Newsletter_Template */
212
  $model = $this->getModel();
213
+
214
  /* @var $h Contactlab_Template_Helper_Data */
215
  $h = Mage::helper('contactlab_template');
216
  $form = $this->getForm();
217
  $andOr = Mage::getModel('contactlab_template/system_config_source_andOr');
218
 
219
+ $fieldSet = $form->addFieldset('customer_filter_fieldset', array(
220
  'legend' => $h->__('Customer filter options'),
221
  'class' => 'fieldset-narrow'
222
  ));
223
 
224
+ $fieldSet->addField('min_minutes_from_last_update', 'text', array(
225
  'required' => false,
226
  'class' => 'validate-not-negative-number validate-digits validate-is-min-of-range',
227
  'label' => $h->__('Minimum number of minutes'),
229
  'name' => 'min_minutes_from_last_update',
230
  'value' => $model->getId() !== null ? $model->getMinMinutesFromLastUpdate() : ''));
231
 
232
+ $fieldSet->addField('max_minutes_from_last_update', 'text', array(
233
  'required' => false,
234
  'class' => 'validate-not-negative-number validate-digits validate-is-max-of-range',
235
  'label' => $h->__('Maximum number of minutes'),
237
  'name' => 'max_minutes_from_last_update',
238
  'value' => $model->getId() !== null ? $model->getMaxMinutesFromLastUpdate() : ''));
239
 
240
+ $fieldSet->addField('min_value', 'text', array(
241
  'required' => false,
242
  'class' => 'validate-number validate-not-negative-number validate-is-min-of-range',
243
  'label' => $h->__('Minimum value'),
246
  'name' => 'min_value',
247
  'value' => $model->getId() !== null ? $h->formatPrice($model->getMinValue()) : ''));
248
 
249
+ $fieldSet->addField('max_value', 'text', array(
250
  'required' => false,
251
  'class' => 'validate-number validate-not-negative-number validate-is-max-of-range',
252
  'label' => $h->__('Maximum value'),
254
  'name' => 'max_value',
255
  'value' => $model->getId() !== null ? $h->formatPrice($model->getMaxValue()) : ''));
256
 
257
+ $fieldSet->addField('min_products', 'text', array(
258
  'required' => false,
259
  'class' => 'validate-greater-than-zero validate-digits validate-is-min-of-range',
260
  'label' => $h->__('Minimum number of products'),
262
  'name' => 'min_products',
263
  'value' => $model->getId() !== null ? $model->getMinProducts() : ''));
264
 
265
+ $fieldSet->addField('max_products', 'text', array(
266
  'required' => false,
267
  'class' => 'validate-greater-than-zero validate-digits validate-is-max-of-range',
268
  'label' => $h->__('Maximum number of products'),
270
  'name' => 'max_products',
271
  'value' => $model->getId() !== null ? $model->getMaxProducts() : ''));
272
 
273
+ $fieldSet->addField('and_or', 'select', array(
274
  'required' => true,
275
+ 'label' => $h->__('And/or condition values'),
276
+ 'title' => $h->__('And/or condition values'),
277
  'name' => 'and_or',
278
  'values' => $andOr->toOptionArray(),
279
  'value' => $model->getId() !== null ? $model->getAndOr() : 'AND'));
280
 
281
  return $this;
282
  }
283
+
284
+ /**
285
+ * Get stores options.
286
+ * @return array
287
+ */
288
+ private function getStoresOptions()
289
+ {
290
+ /* @var $h Contactlab_Template_Helper_Data */
291
+ $h = Mage::helper('contactlab_template');
292
+ $stores = Mage::getModel('adminhtml/system_config_source_store')->toOptionArray();
293
+ $stores = array_reverse($stores);
294
+ $stores['none'] = $h->__('Any');
295
+ $stores = array_reverse($stores);
296
+ return $stores;
297
+ }
298
  }
app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Grid.php CHANGED
@@ -18,10 +18,18 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Grid extends Mage_
18
  'index'=>'template_code',
19
  'width' => 1
20
  ));
 
 
 
 
 
 
 
 
21
 
22
  $this->addColumn('template_type_name',
23
  array(
24
- 'header'=>Mage::helper('newsletter')->__('Template type'),
25
  'index'=>'template_type_name',
26
  'width' => 1
27
  ));
@@ -103,7 +111,8 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Grid extends Mage_
103
  /* @var $collection Mage_Newsletter_Model_Resource_Template_Collection */
104
  $collection = Mage::getResourceSingleton('newsletter/template_collection')
105
  ->useOnlyActual();
106
- $collection->join(array('template_types' => 'contactlab_template/type'),
 
107
  "main_table.template_type_id = template_types.entity_id",
108
  array('template_type_name' => 'name'));
109
  $this->setCollection($collection);
18
  'index'=>'template_code',
19
  'width' => 1
20
  ));
21
+ $this->addColumn('store_id',
22
+ array(
23
+ 'header'=>Mage::helper('newsletter')->__('Store View'),
24
+ 'index'=>'store_id',
25
+ 'width' => 1,
26
+ 'type' => 'store',
27
+ 'renderer' => 'contactlab_commons/adminhtml_tasks_renderer_store'
28
+ ));
29
 
30
  $this->addColumn('template_type_name',
31
  array(
32
+ 'header'=>Mage::helper('newsletter')->__('Template Type'),
33
  'index'=>'template_type_name',
34
  'width' => 1
35
  ));
111
  /* @var $collection Mage_Newsletter_Model_Resource_Template_Collection */
112
  $collection = Mage::getResourceSingleton('newsletter/template_collection')
113
  ->useOnlyActual();
114
+ $collection->getSelect()
115
+ ->joinLeft(array('template_types' => $collection->getTable('contactlab_template/type')),
116
  "main_table.template_type_id = template_types.entity_id",
117
  array('template_type_name' => 'name'));
118
  $this->setCollection($collection);
app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Grid/Renderer/XmlDeliveryStatus.php CHANGED
@@ -1,33 +1,76 @@
1
  <?php
2
 
3
  /**
4
- * Configure link renderer.
5
  */
6
- class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Grid_Renderer_XmlDeliveryStatus extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract {
 
 
7
 
8
  /**
9
  * Renders grid column
10
  *
11
- * @param Varien_Object $row
12
  * @return string
13
  */
14
- public function render(Varien_Object $row) {
15
- return $this->renderTasks($row->getTemplateId());
 
 
16
  }
17
 
18
- public function renderTasks($templateId) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
  $rv = "";
20
- /* @var $queueCollection Mage_Newsletter_Model_Resource_Queue_Collection */
21
  $queueCollection = Mage::getResourceModel("newsletter/queue_collection");
22
- $queueCollection->addFieldToFilter('template_id', $templateId);
23
- $queueCollection->join(array('task' => 'contactlab_commons/task'),
24
- 'main_table.task_id = task.task_id and task.status != \'hidden\'',
25
- array(
26
- 'status' => 'status',
27
- 'task_created_at' => 'created_at',
28
- 'task_planned_at' => 'planned_at'
29
- ));
30
- $queueCollection->addOrder('task_id', Varien_Data_Collection::SORT_ORDER_DESC);
31
  if ($queueCollection->count() == 0) {
32
  return $rv;
33
  }
@@ -38,13 +81,13 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Grid_Renderer_XmlD
38
  $rv .= "<table class=\"data\" cellspacing=\"0\">";
39
  $rv .= "<thead>";
40
  $rv .= "<tr class=\"headings\">";
41
- $rv .= "<th>" . $helper->__('Created at') ."</th>";
42
- $rv .= "<th>" . $helper->__('Planned at') ."</th>";
43
- $rv .= "<th>" . $helper->__('Status') ."</th>";
44
  $rv .= "</tr>";
45
  $rv .= "</thead>";
46
  $rv .= "<tbody>";
47
-
48
  $found = false;
49
  $nr = 0;
50
  foreach ($queueCollection as $queue) {
@@ -52,8 +95,8 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Grid_Renderer_XmlD
52
  $nr = $nr + 1;
53
  }
54
  $a = sprintf('<a href="%s" title="%s">',
55
- Mage::helper("adminhtml")->getUrl("contactlab_commons/adminhtml_events",
56
- array('id' => $queue->getTaskId())), $helper->__('Task events'));
57
  $rv .= "<tr";
58
  if ($queue->getStatus() === 'closed' && $nr > 1) {
59
  $rv .= ' style="display: none" class="template-' . $templateId . '-row"';
@@ -62,6 +105,9 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Grid_Renderer_XmlD
62
  $rv .= ">";
63
  $rv .= "<td>" . $a . $queue->getTaskCreatedAt() . "</a></td>";
64
  $rv .= "<td>" . $a . ($queue->hasTaskPlannedAt() ? $queue->getTaskPlannedAt() : '&mdash;') . "</a></td>";
 
 
 
65
  $rv .= "<td>" . $a . Contactlab_Commons_Block_Adminhtml_Events_Renderer_Status::renderTask($queue) . "</a></td>";
66
  $rv .= "</tr>";
67
  }
@@ -79,4 +125,16 @@ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Grid_Renderer_XmlD
79
  $rv .= "</table>";
80
  return $rv;
81
  }
 
 
 
 
 
 
 
 
 
 
 
 
82
  }
1
  <?php
2
 
3
  /**
4
+ * XML Delivery status column renderer
5
  */
6
+ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Grid_Renderer_XmlDeliveryStatus
7
+ extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
8
+ {
9
 
10
  /**
11
  * Renders grid column
12
  *
13
+ * @param Varien_Object $row
14
  * @return string
15
  */
16
+ public function render(Varien_Object $row)
17
+ {
18
+ /** @noinspection PhpUndefinedMethodInspection */
19
+ return $this->renderTasksCount($row->getTemplateId());
20
  }
21
 
22
+ /**
23
+ * Render tasks with status count.
24
+ * @param $templateId
25
+ * @return string
26
+ */
27
+ public function renderTasksCount($templateId)
28
+ {
29
+ /* @var $queueCollection Contactlab_Template_Model_Resource_Newsletter_Queue_Collection */
30
+ $queueCollection = Mage::getResourceModel("newsletter/queue_collection");
31
+ $queueCollection->getQueueByTemplateId($templateId)->addTaskData();
32
+
33
+ // Hidden tasks shown as closed.
34
+ $statusHiddenClosedExpr = new Zend_Db_Expr("if (task.status = 'hidden', 'closed', task.status)");
35
+ $queueCollection->getSelect()
36
+ ->group($statusHiddenClosedExpr)
37
+ ->reset(Zend_Db_Select::COLUMNS)
38
+ ->columns(array('status' => $statusHiddenClosedExpr, 'queue_count' => new Zend_Db_Expr('count(1)')));
39
+ $rv = array();
40
+ while ($item = $queueCollection->fetchItem()) {
41
+ if ($item->getStatus() === 'hidden') {
42
+ $item->setStatus('closed');
43
+ }
44
+ $rv[] = sprintf('%s: %d',
45
+ Contactlab_Commons_Block_Adminhtml_Events_Renderer_Status::renderTask($item),
46
+ $item->getQueueCount());
47
+ }
48
+ if (empty($rv)) {
49
+ return '';
50
+ }
51
+ /* @var $helper Contactlab_Template_Helper_Data */
52
+ $helper = Mage::helper('contactlab_commons');
53
+ $link = sprintf('<a title="%s" href="%s">%s</a>',
54
+ $helper->__('Show full XML Delivery status information for this template'),
55
+ $this->_getUrlForTemplateId($templateId),
56
+ $helper->__('Full XML Delivery status'));
57
+
58
+ return sprintf('%s<br>%s', implode('<br />', $rv), $link);
59
+ }
60
+
61
+ /**
62
+ * Render tasks with status.
63
+ * @param $templateId
64
+ * @deprecated
65
+ * @return string
66
+ */
67
+ public function renderTasks($templateId)
68
+ {
69
  $rv = "";
70
+ /* @var $queueCollection Contactlab_Template_Model_Resource_Newsletter_Queue_Collection */
71
  $queueCollection = Mage::getResourceModel("newsletter/queue_collection");
72
+ $queueCollection->getQueueByTemplateId($templateId)->addTaskData();
73
+
 
 
 
 
 
 
 
74
  if ($queueCollection->count() == 0) {
75
  return $rv;
76
  }
81
  $rv .= "<table class=\"data\" cellspacing=\"0\">";
82
  $rv .= "<thead>";
83
  $rv .= "<tr class=\"headings\">";
84
+ $rv .= "<th>" . $helper->__('Created') . "</th>";
85
+ $rv .= "<th>" . $helper->__('Planned') . "</th>";
86
+ $rv .= "<th>" . $helper->__('Status') . "</th>";
87
  $rv .= "</tr>";
88
  $rv .= "</thead>";
89
  $rv .= "<tbody>";
90
+
91
  $found = false;
92
  $nr = 0;
93
  foreach ($queueCollection as $queue) {
95
  $nr = $nr + 1;
96
  }
97
  $a = sprintf('<a href="%s" title="%s">',
98
+ Mage::helper("adminhtml")->getUrl("contactlab_commons/adminhtml_events",
99
+ array('id' => $queue->getTaskId())), $helper->__('Task events'));
100
  $rv .= "<tr";
101
  if ($queue->getStatus() === 'closed' && $nr > 1) {
102
  $rv .= ' style="display: none" class="template-' . $templateId . '-row"';
105
  $rv .= ">";
106
  $rv .= "<td>" . $a . $queue->getTaskCreatedAt() . "</a></td>";
107
  $rv .= "<td>" . $a . ($queue->hasTaskPlannedAt() ? $queue->getTaskPlannedAt() : '&mdash;') . "</a></td>";
108
+ if ($queue->getStatus() === 'hidden') {
109
+ $queue->setStatus('closed');
110
+ }
111
  $rv .= "<td>" . $a . Contactlab_Commons_Block_Adminhtml_Events_Renderer_Status::renderTask($queue) . "</a></td>";
112
  $rv .= "</tr>";
113
  }
125
  $rv .= "</table>";
126
  return $rv;
127
  }
128
+
129
+ /**
130
+ * Get Url for template task list.
131
+ * @param int $templateId
132
+ * @return string
133
+ */
134
+ private function _getUrlForTemplateId($templateId)
135
+ {
136
+ return Mage::helper('adminhtml')
137
+ ->getUrl('adminhtml/contactlab_template_tasks/list',
138
+ array('template_id' => $templateId));
139
+ }
140
  }
app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Tasks/Detail.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Tasks_Detail
5
+ */
6
+ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Tasks_Detail
7
+ extends Mage_Adminhtml_Block_Widget_Grid_Container
8
+ {
9
+ /**
10
+ * Construct the block.
11
+ */
12
+ public function __construct() {
13
+ $this->_blockGroup = 'contactlab_template';
14
+ $this->_controller = 'adminhtml_newsletter_template_tasks_detail';
15
+ $this->_headerText = $this->__("Queue Detail");
16
+
17
+ parent::__construct();
18
+ $this->_removeButton('add');
19
+ $this->_addBackButton();
20
+ }
21
+
22
+ /**
23
+ * Back url to newsletter template page.
24
+ * @return string
25
+ */
26
+ public function getBackUrl() {
27
+ return $this->getUrl('*/*/list',
28
+ array('template_id' => Mage::registry('template_id')));
29
+ }
30
+ }
app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Tasks/Detail/Grid.php ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /** Adminhtml type grid. */
4
+ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Tasks_Detail_Grid
5
+ extends Mage_Adminhtml_Block_Widget_Grid {
6
+
7
+ /**
8
+ * Construct the block.
9
+ *
10
+ * @param array $attributes = array()
11
+ */
12
+ public function __construct($attributes = array()) {
13
+ parent::__construct($attributes);
14
+ $this->setId('queue_link_id');
15
+ $this->setDefaultSort('queue_link_id');
16
+ $this->setDefaultDir('DESC');
17
+ $this->setSaveParametersInSession(false);
18
+ }
19
+
20
+ /**
21
+ * Setting collection to show.
22
+ *
23
+ * @return Mage_Adminhtml_Block_Widget_Grid
24
+ */
25
+ protected function _prepareCollection() {
26
+ /* @var $queueCollection Contactlab_Template_Model_Resource_Newsletter_Queue_Link_Collection */
27
+ $queueCollection = Mage::getResourceModel("contactlab_template/newsletter_queue_link_collection");
28
+ $queueCollection->addFieldToFilter('queue_id', Mage::registry('queue_id'));
29
+ $queueCollection->addCustomerInfo();
30
+ $queueCollection->addSubscriberInfo();
31
+ $this->setCollection($queueCollection);
32
+ return parent::_prepareCollection();
33
+ }
34
+
35
+ /**
36
+ * Configuration of grid.
37
+ *
38
+ * @return Mage_Adminhtml_Block_Widget_Grid
39
+ */
40
+ protected function _prepareColumns() {
41
+ $this->addColumn('queued_at', array(
42
+ 'header' => $this->__('Queued'),
43
+ 'align' => 'left',
44
+ 'index' => 'queued_at',
45
+ 'width' => 1,
46
+ 'type' => 'range'
47
+ ));
48
+ $this->addColumn('subscriber_email', array(
49
+ 'header' => Mage::helper('newsletter')->__('Subscriber'),
50
+ 'align' => 'left',
51
+ 'index' => 'subscriber_email',
52
+ 'width' => 1,
53
+ 'filter' => false,
54
+ 'order' => false,
55
+ 'type' => 'range'
56
+ ));
57
+ $this->addColumn('customer_email', array(
58
+ 'header' => Mage::helper('customer')->__('Customer'),
59
+ 'align' => 'left',
60
+ 'index' => 'customer_email',
61
+ 'width' => 1,
62
+ 'filter' => false,
63
+ 'order' => false,
64
+ 'type' => 'range',
65
+ 'renderer' => 'contactlab_template/adminhtml_newsletter_template_tasks_renderer_customer'
66
+ ));
67
+ }
68
+
69
+ /**
70
+ * Get grid url.
71
+ *
72
+ * @return string
73
+ */
74
+ public function getGridUrl() {
75
+ return false;
76
+ }
77
+
78
+ /**
79
+ * Get row url.
80
+ *
81
+ * @param Varien_Object $row
82
+ * @return string
83
+ */
84
+ public function getRowUrl($row) {
85
+ return false;
86
+ }
87
+ }
app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Tasks/List.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Tasks_List
4
+ extends Mage_Adminhtml_Block_Widget_Grid_Container
5
+ {
6
+ /**
7
+ * Construct the block.
8
+ */
9
+ public function __construct() {
10
+ $this->_blockGroup = 'contactlab_template';
11
+ $this->_controller = 'adminhtml_newsletter_template_tasks_list';
12
+ $this->_headerText = $this->__("XML Delivery Status");
13
+
14
+ parent::__construct();
15
+ $this->_removeButton('add');
16
+ $this->_addBackButton();
17
+ }
18
+
19
+ /**
20
+ * Back url to newsletter template page.
21
+ * @return string
22
+ */
23
+ public function getBackUrl() {
24
+ return $this->getUrl('adminhtml/newsletter_template');
25
+ }
26
+ }
app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Tasks/List/Grid.php ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /** Adminhtml type grid. */
4
+ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Tasks_List_Grid
5
+ extends Mage_Adminhtml_Block_Widget_Grid {
6
+
7
+ /**
8
+ * Construct the block.
9
+ *
10
+ * @param array $attributes = array()
11
+ */
12
+ public function __construct($attributes = array()) {
13
+ parent::__construct($attributes);
14
+ $this->setId('task_id');
15
+ $this->setDefaultSort('task_id');
16
+ $this->setDefaultDir('DESC');
17
+ $this->setSaveParametersInSession(false);
18
+ }
19
+
20
+ /**
21
+ * Setting collection to show.
22
+ *
23
+ * @return Mage_Adminhtml_Block_Widget_Grid
24
+ */
25
+ protected function _prepareCollection() {
26
+ /* @var $queueCollection Contactlab_Template_Model_Resource_Newsletter_Queue_Collection */
27
+ $queueCollection = Mage::getResourceModel("newsletter/queue_collection");
28
+ $queueCollection->getQueueByTemplateId(Mage::registry('template_id'))->addTaskData();
29
+ $this->setCollection($queueCollection);
30
+ return parent::_prepareCollection();
31
+ }
32
+
33
+ /**
34
+ * Configuration of grid.
35
+ *
36
+ * @return Mage_Adminhtml_Block_Widget_Grid
37
+ */
38
+ protected function _prepareColumns() {
39
+ $this->addColumn('task_id', array(
40
+ 'header' => $this->__('ID'),
41
+ 'align' => 'left',
42
+ 'index' => 'task_id',
43
+ 'width' => 1,
44
+ 'filter' => false,
45
+ 'order' => false,
46
+ 'type' => 'range'
47
+ ));
48
+ $this->addColumn('task_description', array(
49
+ 'header' => $this->__('Description'),
50
+ 'align' => 'left',
51
+ 'index' => 'task_description',
52
+ 'filter' => false,
53
+ 'order' => false,
54
+ 'type' => 'range',
55
+ 'renderer' => 'contactlab_commons/adminhtml_tasks_renderer_task'
56
+ ));
57
+ $this->addColumn('queue_status', array(
58
+ 'header' => $this->__('Queue status'),
59
+ 'align' => 'left',
60
+ 'index' => 'queue_status',
61
+ 'filter' => false,
62
+ 'order' => false,
63
+ 'type' => 'range',
64
+ 'renderer' => 'contactlab_template/adminhtml_newsletter_template_tasks_renderer_queueStatus'
65
+ ));
66
+ $this->addColumn('status', array(
67
+ 'header' => $this->__('Status'),
68
+ 'align' => 'left',
69
+ 'index' => 'status',
70
+ 'width' => 200,
71
+ 'type' => 'range',
72
+ 'filter' => false,
73
+ 'order' => false,
74
+ 'renderer' => 'contactlab_commons/adminhtml_events_renderer_status'
75
+ ));
76
+ $this->addColumn('task_created_at', array(
77
+ 'header' => $this->__('Created'),
78
+ 'align' => 'left',
79
+ 'index' => 'task_created_at',
80
+ 'width' => 200,
81
+ 'filter' => false,
82
+ 'order' => false,
83
+ 'type' => 'range'
84
+ ));
85
+ $this->addColumn('task_planned_at', array(
86
+ 'header' => $this->__('Planned'),
87
+ 'align' => 'left',
88
+ 'index' => 'task_planned_at',
89
+ 'width' => 200,
90
+ 'filter' => false,
91
+ 'order' => false,
92
+ 'type' => 'range'
93
+ ));
94
+ }
95
+
96
+ /**
97
+ * Get grid url.
98
+ *
99
+ * @return string
100
+ */
101
+ public function getGridUrl() {
102
+ return false;
103
+ }
104
+
105
+ /**
106
+ * Get row url.
107
+ *
108
+ * @param Varien_Object $row
109
+ * @return string
110
+ */
111
+ public function getRowUrl($row) {
112
+ return false;
113
+ }
114
+ }
app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Tasks/Renderer/Customer.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Tasks_Renderer_Customer
4
+ extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
5
+ {
6
+
7
+
8
+ /**
9
+ * Renders grid column
10
+ *
11
+ * @param Varien_Object $row
12
+ * @return string
13
+ */
14
+ public function render(Varien_Object $row)
15
+ {
16
+ if (!$row->hasCustomerId()) {
17
+ return '';
18
+ }
19
+ $customer = Mage::getModel('customer/customer')->load($row->getCustomerId());
20
+ return sprintf('<a href="%s">%s [<strong>%s</strong>]</a>',
21
+ Mage::helper('adminhtml')->getUrl('adminhtml/customer/edit', array('id' => $row->getCustomerId())),
22
+ $customer->getName(), $customer->getEmail());
23
+ }
24
+
25
+ }
app/code/community/Contactlab/Template/Block/Adminhtml/Newsletter/Template/Tasks/Renderer/QueueStatus.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Template_Block_Adminhtml_Newsletter_Template_Tasks_Renderer_QueueStatus
4
+ extends Mage_Adminhtml_Block_Widget_Grid_Column_Renderer_Abstract
5
+ {
6
+ private $_helper;
7
+
8
+ public function __construct()
9
+ {
10
+ $this->_helper = Mage::helper('contactlab_template');
11
+ }
12
+
13
+ /**
14
+ * Renders grid column
15
+ *
16
+ * @param Varien_Object $row
17
+ * @return string
18
+ */
19
+ public function render(Varien_Object $row)
20
+ {
21
+ $count = $this->_getQueueRecipients($row->getQueueId());
22
+ if (!$count) {
23
+ return '<em>None</em>';
24
+ } else if ($count === 1) {
25
+ $label = 'recipient';
26
+ } else {
27
+ $label = 'recipients';
28
+ }
29
+ return sprintf('<a title="%s" href="%s">%s [%s %s]</a>',
30
+ $this->_helper->__('Queue Detail'),
31
+ $this->_getQueueDetailUrl($row->getQueueId(), $row->getTemplateId()),
32
+ $this->_getQueueStatus($row->getQueueStatus()),
33
+ $count, $label);
34
+ }
35
+
36
+ /**
37
+ * Get queue status.
38
+ * @param $status
39
+ * @return string
40
+ */
41
+ private function _getQueueStatus($status)
42
+ {
43
+ switch ($status) {
44
+ case Mage_Newsletter_Model_Queue::STATUS_NEVER:
45
+ return $this->_helper->__('Never');
46
+ case Mage_Newsletter_Model_Queue::STATUS_SENDING:
47
+ return $this->_helper->__('Sending');
48
+ case Mage_Newsletter_Model_Queue::STATUS_CANCEL:
49
+ return $this->_helper->__('Cancel');
50
+ case Mage_Newsletter_Model_Queue::STATUS_SENT:
51
+ return $this->_helper->__('Sent');
52
+ case Mage_Newsletter_Model_Queue::STATUS_PAUSE:
53
+ return $this->_helper->__('Pause');
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Get Recipient information
59
+ * @param $queueId
60
+ * @return array
61
+ */
62
+ private function _getQueueRecipients($queueId)
63
+ {
64
+ $resource = Mage::getSingleton('core/resource');
65
+ $adapter = $resource->getConnection('core_read');
66
+ $select = $adapter->select();
67
+ $select
68
+ ->from($resource->getTableName('newsletter/queue_link'),
69
+ new Zend_Db_Expr('count(1)'))
70
+ ->where('queue_id = ?', $queueId);
71
+
72
+ return $adapter->fetchOne($select);
73
+ }
74
+
75
+ /**
76
+ * @param $queueId
77
+ * @param $templateId
78
+ * @return string
79
+ */
80
+ private function _getQueueDetailUrl($queueId, $templateId)
81
+ {
82
+ return Mage::helper('adminhtml')
83
+ ->getUrl('adminhtml/contactlab_template_tasks/detail',
84
+ array('queue_id' => $queueId, 'template_id' => $templateId));
85
+ }
86
+ }
app/code/community/Contactlab/Template/Block/Adminhtml/Type.php CHANGED
@@ -11,7 +11,7 @@ class Contactlab_Template_Block_Adminhtml_Type extends Mage_Adminhtml_Block_Widg
11
  public function __construct() {
12
  $this->_blockGroup = 'contactlab_template';
13
  $this->_controller = 'adminhtml_type';
14
- $this->_headerText = $this->__("Template types");
15
 
16
  parent::__construct();
17
  }
11
  public function __construct() {
12
  $this->_blockGroup = 'contactlab_template';
13
  $this->_controller = 'adminhtml_type';
14
+ $this->_headerText = $this->__("Template Types");
15
 
16
  parent::__construct();
17
  }
app/code/community/Contactlab/Template/Block/Adminhtml/Type/Edit/Form.php CHANGED
@@ -114,8 +114,8 @@ class Contactlab_Template_Block_Adminhtml_Type_Edit_Form extends Mage_Adminhtml_
114
  ));
115
  $toDisable[] = $fieldset->addField('is_cron_enabled', 'select', array(
116
  'name' => 'is_cron_enabled',
117
- 'label' => Mage::helper('contactlab_template')->__('Enable for cron execution'),
118
- 'title' => Mage::helper('contactlab_template')->__('Enable for cron execution'),
119
  'after_element_html' => "<small>" . Mage::helper('contactlab_template')->__('Default for new templates') . "</small>",
120
  'options' => array(
121
  1 => Mage::helper('adminhtml')->__('Yes'),
@@ -133,16 +133,16 @@ class Contactlab_Template_Block_Adminhtml_Type_Edit_Form extends Mage_Adminhtml_
133
  $fieldsetDnd->addField('dnd_period', 'text', array(
134
  'name' => 'dnd_period',
135
  'class' => 'validate-not-negative-number validate-digits',
136
- 'label' => Mage::helper('contactlab_template')->__('Dnd period length'),
137
- 'title' => Mage::helper('contactlab_template')->__('Dnd period length'),
138
  'required' => false,
139
  'value' => $model->getDndPeriod(),
140
  ));
141
  $fieldsetDnd->addField('dnd_mail_number', 'text', array(
142
  'name' => 'dnd_mail_number',
143
  'class' => 'validate-not-negative-number validate-digits',
144
- 'label' => Mage::helper('contactlab_template')->__('Dnd max mail number'),
145
- 'title' => Mage::helper('contactlab_template')->__('Dnd max mail number'),
146
  'required' => false,
147
  'value' => $model->getDndMailNumber(),
148
  ));
114
  ));
115
  $toDisable[] = $fieldset->addField('is_cron_enabled', 'select', array(
116
  'name' => 'is_cron_enabled',
117
+ 'label' => Mage::helper('contactlab_template')->__('Enable for Cron execution'),
118
+ 'title' => Mage::helper('contactlab_template')->__('Enable for Cron execution'),
119
  'after_element_html' => "<small>" . Mage::helper('contactlab_template')->__('Default for new templates') . "</small>",
120
  'options' => array(
121
  1 => Mage::helper('adminhtml')->__('Yes'),
133
  $fieldsetDnd->addField('dnd_period', 'text', array(
134
  'name' => 'dnd_period',
135
  'class' => 'validate-not-negative-number validate-digits',
136
+ 'label' => Mage::helper('contactlab_template')->__('DND period length'),
137
+ 'title' => Mage::helper('contactlab_template')->__('DND period length'),
138
  'required' => false,
139
  'value' => $model->getDndPeriod(),
140
  ));
141
  $fieldsetDnd->addField('dnd_mail_number', 'text', array(
142
  'name' => 'dnd_mail_number',
143
  'class' => 'validate-not-negative-number validate-digits',
144
+ 'label' => Mage::helper('contactlab_template')->__('DND max mail number'),
145
+ 'title' => Mage::helper('contactlab_template')->__('DND max mail number'),
146
  'required' => false,
147
  'value' => $model->getDndMailNumber(),
148
  ));
app/code/community/Contactlab/Template/Block/Adminhtml/Type/Grid.php CHANGED
@@ -35,7 +35,7 @@ class Contactlab_Template_Block_Adminhtml_Type_Grid extends Mage_Adminhtml_Block
35
  */
36
  protected function _prepareColumns() {
37
  $this->addColumn('entity_id', array(
38
- 'header' => $this->__('Id'),
39
  'align' => 'left',
40
  'index' => 'entity_id',
41
  'width' => 1,
@@ -64,13 +64,13 @@ class Contactlab_Template_Block_Adminhtml_Type_Grid extends Mage_Adminhtml_Block
64
  ),
65
  ));
66
  $this->addColumn('dnd_period', array(
67
- 'header' => $this->__('Dnd period length'),
68
  'index' => 'dnd_period',
69
  'width' => 1,
70
  'type' => 'text'
71
  ));
72
  $this->addColumn('dnd_mail_number', array(
73
- 'header' => $this->__('Dnd max mail number'),
74
  'index' => 'dnd_mail_number',
75
  'width' => 1,
76
  'type' => 'text'
@@ -78,7 +78,7 @@ class Contactlab_Template_Block_Adminhtml_Type_Grid extends Mage_Adminhtml_Block
78
 
79
 
80
  $this->addColumn('is_cron_enabled', array(
81
- 'header' => $this->__('Enable for cron execution'),
82
  'index' => 'is_cron_enabled',
83
  'type' => 'options',
84
  'width' => 1,
35
  */
36
  protected function _prepareColumns() {
37
  $this->addColumn('entity_id', array(
38
+ 'header' => $this->__('ID'),
39
  'align' => 'left',
40
  'index' => 'entity_id',
41
  'width' => 1,
64
  ),
65
  ));
66
  $this->addColumn('dnd_period', array(
67
+ 'header' => $this->__('DND period length'),
68
  'index' => 'dnd_period',
69
  'width' => 1,
70
  'type' => 'text'
71
  ));
72
  $this->addColumn('dnd_mail_number', array(
73
+ 'header' => $this->__('DND max mail number'),
74
  'index' => 'dnd_mail_number',
75
  'width' => 1,
76
  'type' => 'text'
78
 
79
 
80
  $this->addColumn('is_cron_enabled', array(
81
+ 'header' => $this->__('Enable for Cron execution'),
82
  'index' => 'is_cron_enabled',
83
  'type' => 'options',
84
  'width' => 1,
app/code/community/Contactlab/Template/Helper/Data.php CHANGED
@@ -1,20 +1,24 @@
1
  <?php
2
 
3
- /** Template helper. */
 
 
 
4
  class Contactlab_Template_Helper_Data extends Mage_Core_Helper_Abstract {
5
 
6
  /**
7
  * Scan for template to be sent.
8
  *
9
- * @param string $storeId = 0
10
  * @param string $debugAddress
 
11
  * @return array
12
  */
13
- public function scan($storeId = 0, $debugAddress = null) {
14
  $rv = array();
15
  /* @var $templates Mage_Newsletter_Model_Resource_Template_Collection */
16
  $templates = Mage::getResourceModel("newsletter/template_collection")
17
- ->loadActiveTemplatesForCron();
18
 
19
  // $helper->logDebug("Scan " . $templates->count() . " templates found");
20
  $info = array();
@@ -22,6 +26,7 @@ class Contactlab_Template_Helper_Data extends Mage_Core_Helper_Abstract {
22
  $this->addSessionWarning("No <strong>templates</strong> found.");
23
  } else {
24
  $message = "Scanning <strong>" . $templates->count() . " templates</strong> found: ";
 
25
  foreach ($templates as $template) {
26
  /* @var $template Contactlab_Template_Model_Newsletter_Template */
27
  $message .= $template->getTemplateSubject() . ", ";
@@ -64,7 +69,7 @@ class Contactlab_Template_Helper_Data extends Mage_Core_Helper_Abstract {
64
  /**
65
  * Is this store enabled for sending in cron?
66
  * @param Mage_Core_Model_Store $store
67
- * @return void
68
  */
69
  public function isStoreEnabled(Mage_Core_Model_Store $store) {
70
  return Mage::getStoreConfigFlag('contactlab_template/global/enabled', $store);
@@ -78,7 +83,10 @@ class Contactlab_Template_Helper_Data extends Mage_Core_Helper_Abstract {
78
  * @param Contactlab_Commons_Model_Task $parentTask
79
  * @param string $xmlFile
80
  * @param string $storeId
 
81
  * @return string
 
 
82
  */
83
  public function checkNewsletterQueueReport(Contactlab_Commons_Model_Task $task,
84
  Contactlab_Commons_Model_Task $parentTask, $xmlFile, $storeId, $queueId) {
@@ -106,7 +114,7 @@ class Contactlab_Template_Helper_Data extends Mage_Core_Helper_Abstract {
106
 
107
  /**
108
  * Add session message.
109
- * @param type $message
110
  */
111
  public function addSessionMessage($message) {
112
  /* @var $session Mage_Adminhtml_Model_Session */
@@ -118,7 +126,7 @@ class Contactlab_Template_Helper_Data extends Mage_Core_Helper_Abstract {
118
 
119
  /**
120
  * Add session message.
121
- * @param type $message
122
  */
123
  public function addSessionWarning($message) {
124
  /* @var $session Mage_Adminhtml_Model_Session */
1
  <?php
2
 
3
+ /**
4
+ * Template helper.
5
+ * Manages template scan.
6
+ */
7
  class Contactlab_Template_Helper_Data extends Mage_Core_Helper_Abstract {
8
 
9
  /**
10
  * Scan for template to be sent.
11
  *
12
+ * @param int|string $storeId = 0
13
  * @param string $debugAddress
14
+ * @param bool $excludeTest Exclude test mode templates
15
  * @return array
16
  */
17
+ public function scan($storeId = 0, $debugAddress = null, $excludeTest = true) {
18
  $rv = array();
19
  /* @var $templates Mage_Newsletter_Model_Resource_Template_Collection */
20
  $templates = Mage::getResourceModel("newsletter/template_collection")
21
+ ->loadActiveTemplatesForCron($storeId, $excludeTest);
22
 
23
  // $helper->logDebug("Scan " . $templates->count() . " templates found");
24
  $info = array();
26
  $this->addSessionWarning("No <strong>templates</strong> found.");
27
  } else {
28
  $message = "Scanning <strong>" . $templates->count() . " templates</strong> found: ";
29
+ /** @var $template Contactlab_Template_Model_Newsletter_Template */
30
  foreach ($templates as $template) {
31
  /* @var $template Contactlab_Template_Model_Newsletter_Template */
32
  $message .= $template->getTemplateSubject() . ", ";
69
  /**
70
  * Is this store enabled for sending in cron?
71
  * @param Mage_Core_Model_Store $store
72
+ * @return boolean
73
  */
74
  public function isStoreEnabled(Mage_Core_Model_Store $store) {
75
  return Mage::getStoreConfigFlag('contactlab_template/global/enabled', $store);
83
  * @param Contactlab_Commons_Model_Task $parentTask
84
  * @param string $xmlFile
85
  * @param string $storeId
86
+ * @param int $queueId
87
  * @return string
88
+ * @throws Exception
89
+ * @throws Zend_Exception
90
  */
91
  public function checkNewsletterQueueReport(Contactlab_Commons_Model_Task $task,
92
  Contactlab_Commons_Model_Task $parentTask, $xmlFile, $storeId, $queueId) {
114
 
115
  /**
116
  * Add session message.
117
+ * @param String $message
118
  */
119
  public function addSessionMessage($message) {
120
  /* @var $session Mage_Adminhtml_Model_Session */
126
 
127
  /**
128
  * Add session message.
129
+ * @param String $message
130
  */
131
  public function addSessionWarning($message) {
132
  /* @var $session Mage_Adminhtml_Model_Session */
app/code/community/Contactlab/Template/Helper/SampleData.php ADDED
@@ -0,0 +1,147 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /** Template sample data helper helper. */
4
+ class Contactlab_Template_Helper_SampleData extends Mage_Core_Helper_Abstract {
5
+ /**
6
+ * Create sample data record.
7
+ */
8
+ public function createSampleData() {
9
+ if ($handle = opendir($this->_getSampleDataPath())) {
10
+ while (false !== ($entry = readdir($handle))) {
11
+ if (preg_match('|\.json$|', $entry)) {
12
+ $this->_createSampleData($entry);
13
+ }
14
+ }
15
+ }
16
+ return $this;
17
+ }
18
+
19
+ /**
20
+ * Create sample data json files.
21
+ * @return Contactlab_Template_Helper_SampleData
22
+ */
23
+ public function createSampleDataJSON() {
24
+ $this->_createSampleDataFromSubject("Subject WL");
25
+ $this->_createSampleDataFromSubject("Subject AC");
26
+ return $this;
27
+ }
28
+
29
+ /**
30
+ * Create sample data from subject.
31
+ * @param string $subject
32
+ * @return Contactlab_Template_Helper_SampleData
33
+ */
34
+ private function _createSampleDataFromSubject($subject)
35
+ {
36
+ /* @var $templateCollection Mage_Newsletter_Model_Resource_Template_Collection */
37
+ $templateCollection = Mage::getResourceModel('newsletter/template_collection');
38
+ $templateCollection->addFieldToFilter('template_subject', $subject);
39
+ foreach ($templateCollection as $template) {
40
+ /* @var $template Mage_Newsletter_Model_Template */
41
+ $this->_createSampleDataFromTemplate($template);
42
+ }
43
+ return $this;
44
+ }
45
+
46
+ /**
47
+ *
48
+ * @param Mage_Newsletter_Model_Template $template
49
+ * @return Contactlab_Template_Helper_SampleData
50
+ */
51
+ private function _createSampleDataFromTemplate(Mage_Newsletter_Model_Template $template)
52
+ {
53
+ return $this->_writeToFile(
54
+ $this->_normalizeData($template->getData()),
55
+ $this->_getFileNameFor($template->getTemplateSubject())
56
+ );
57
+ }
58
+
59
+ /**
60
+ * Write data.
61
+ * @param array $data
62
+ * @param string $file
63
+ * @return Contactlab_Template_Helper_SampleData
64
+ */
65
+ private function _writeToFile(array $data, $file)
66
+ {
67
+ /* @var $helper Mage_Core_Helper_Data */
68
+ $helper = Mage::helper('core');
69
+ file_put_contents($file, $helper->jsonEncode($data));
70
+ return $this;
71
+ }
72
+
73
+ /**
74
+ * Normalize data.
75
+ * @param array $data
76
+ * @return array
77
+ */
78
+ private function _normalizeData(array $data)
79
+ {
80
+ unset($data['template_id']);
81
+ return $data;
82
+ }
83
+
84
+ /**
85
+ * Get filename.
86
+ * @param string $subject
87
+ */
88
+ private function _getFileNameFor($subject)
89
+ {
90
+ return $this->_getSampleDataPath()
91
+ . DS . $this->_normalizeFileName($subject);
92
+ }
93
+
94
+ /**
95
+ * Get sample data path.
96
+ * @return string
97
+ */
98
+ private function _getSampleDataPath()
99
+ {
100
+ return realpath(__DIR__ . DS . '..' . DS . 'docs' . DS . 'example-templates');
101
+ }
102
+
103
+ /**
104
+ * Normalize file name.
105
+ * @param string $subject
106
+ * return string
107
+ */
108
+ private function _normalizeFileName($subject)
109
+ {
110
+ return str_replace(' ', '_', strtolower($subject)) . '.json';
111
+ }
112
+
113
+ /**
114
+ * Create sample data record
115
+ * @param type $fileName
116
+ * return Mage_Newsletter_Model_Template
117
+ */
118
+ private function _createSampleData($fileName)
119
+ {
120
+ /* @var $helper Mage_Core_Helper_Data */
121
+ $helper = Mage::helper('core');
122
+ $data = $helper->jsonDecode(file_get_contents($this->_getSampleDataPath() . DS . $fileName));
123
+ if ($this->_findForExisting($data['template_subject'])) {
124
+ return false;
125
+ }
126
+ $template = Mage::getModel('newsletter/template');
127
+ $template->setData($data);
128
+ return $template->save();
129
+ }
130
+
131
+ /**
132
+ * Find for existing records.
133
+ * @param string $subject
134
+ * @return boolean
135
+ */
136
+ private function _findForExisting($subject)
137
+ {
138
+ /* @var $templateCollection Mage_Newsletter_Model_Resource_Template_Collection */
139
+ $templateCollection = Mage::getResourceModel('newsletter/template_collection');
140
+ $templateCollection->addFieldToFilter('template_subject', $subject);
141
+ foreach ($templateCollection as $template) {
142
+ return true;
143
+ }
144
+ return false;
145
+ }
146
+
147
+ }
app/code/community/Contactlab/Template/Model/Cron.php CHANGED
@@ -8,17 +8,20 @@ class Contactlab_Template_Model_Cron {
8
 
9
  /**
10
  * Scan for template to be sent.
11
- * @param string $storeId
12
  */
13
- public function scan($storeId = -1) {
14
  $this->logCronCall('scan', $storeId);
 
 
15
  $h = Mage::helper('contactlab_template');
16
  foreach ($h->getAvailableStores() as $store) {
 
17
  if (!$h->isStoreEnabled($store)) {
18
  continue;
19
  }
20
  // If a store id has been passed as argument,
21
- // check before acll helper.
22
  try {
23
  Mage::helper('contactlab_template')->scan($store->getStoreId());
24
  } catch (Zend_Exception $e) {
@@ -30,7 +33,7 @@ class Contactlab_Template_Model_Cron {
30
  /**
31
  * Log function call.
32
  * @param String $functionName
33
- * @param String $storeId
34
  */
35
  public function logCronCall($functionName, $storeId = false)
36
  {
8
 
9
  /**
10
  * Scan for template to be sent.
11
+ * @param int|string $storeId
12
  */
13
+ public function scan($schedule = -1, $storeId = -1) {
14
  $this->logCronCall('scan', $storeId);
15
+
16
+ /** @var $h Contactlab_Template_Helper_Data */
17
  $h = Mage::helper('contactlab_template');
18
  foreach ($h->getAvailableStores() as $store) {
19
+ /** @var $store Mage_Core_Model_Store */
20
  if (!$h->isStoreEnabled($store)) {
21
  continue;
22
  }
23
  // If a store id has been passed as argument,
24
+ // check before acl helper.
25
  try {
26
  Mage::helper('contactlab_template')->scan($store->getStoreId());
27
  } catch (Zend_Exception $e) {
33
  /**
34
  * Log function call.
35
  * @param String $functionName
36
+ * @param bool|String $storeId
37
  */
38
  public function logCronCall($functionName, $storeId = false)
39
  {
app/code/community/Contactlab/Template/Model/Newsletter/Processor/Abstract.php CHANGED
@@ -4,6 +4,26 @@
4
  * Abstract processor.
5
  * This abstract class and each implementing class is designed for
6
  * search and filter subscribers for each template to be queued.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
7
  */
8
  abstract class Contactlab_Template_Model_Newsletter_Processor_Abstract
9
  extends Varien_Object
@@ -14,17 +34,17 @@ abstract class Contactlab_Template_Model_Newsletter_Processor_Abstract
14
  $this->setFilters(array());
15
  }
16
 
17
- /* @var Mage_Core_Model_Resource_Db_Collection_Abstract $_collection The collection. */
18
  private $_collection;
19
 
20
  /**
21
  * Load subscribers.
22
  *
23
- * @param Mage_Newsletter_Model_Template $template
24
  * @param boolean $onlyCustomers
25
- * @return a collection
26
  */
27
- public final function loadSubscribers(Mage_Newsletter_Model_Template $template, $onlyCustomers) {
28
  /* @var $rv Mage_Core_Model_Resource_Db_Collection_Abstract */
29
  if ($onlyCustomers) {
30
  $rv = $this->loadCustomers($template);
@@ -35,16 +55,23 @@ abstract class Contactlab_Template_Model_Newsletter_Processor_Abstract
35
  return $rv;
36
  }
37
 
38
- protected final function loadNewsletterSubscribers(Mage_Newsletter_Model_Template $template, $onlyCustomers) {
 
 
 
 
 
 
 
39
  $this->_collection = Mage::getResourceModel('newsletter/subscriber_collection');
40
  if (!$onlyCustomers) {
41
  $this->_collection->useOnlySubscribed();
42
  }
 
43
  $this->setIsTestMode($template->getIsTestMode());
44
  if ($this->getIsTestMode()) {
45
  $this->applyFilter('contactlab_template/newsletter_processor_filter_testMode');
46
  }
47
- $this->setTemplate($template);
48
 
49
  if ($template->hasDebugAddress() && $template->getDebugAddress() != '') {
50
  $this->applyFilter('contactlab_template/newsletter_processor_filter_emailLike',
@@ -69,10 +96,10 @@ abstract class Contactlab_Template_Model_Newsletter_Processor_Abstract
69
 
70
  /**
71
  * Load customers.
72
- * @param Mage_Newsletter_Model_Template $template
73
  * @return Mage_Customer_Model_Resource_Customer_Collection
74
  */
75
- protected final function loadCustomers(Mage_Newsletter_Model_Template $template) {
76
  /* @var $subscribers Mage_Core_Model_Resource_Db_Abstract */
77
  $subscribers = Mage::getResourceModel("newsletter/subscriber");
78
  $subscribersTable = $subscribers->getMainTable();
@@ -108,14 +135,18 @@ abstract class Contactlab_Template_Model_Newsletter_Processor_Abstract
108
  /**
109
  * Apply filter $filter withi $params array to the cached collection.
110
  *
111
- * @param Contactlab_Template_Model_Newsletter_Processor_Filter_Interface instance $filter
112
- * @param $parameters = array()
113
  * @return $this
 
114
  */
115
  public function applyFilter($filter, $parameters = array()) {
116
  if ($this->hasStop() && $this->getStop()) {
117
  return $this;
118
  }
 
 
 
119
  $filterModel = Mage::getModel($filter);
120
  if (!is_object($filterModel)) {
121
  throw new Zend_Exception("Could not find $filter model");
@@ -126,6 +157,7 @@ abstract class Contactlab_Template_Model_Newsletter_Processor_Abstract
126
  if ($this->getIsTestMode() && !$filterModel->doRunInTestMode()) {
127
  return $this;
128
  }
 
129
  if ($this->doOutputRows()) {
130
  $countBefore = $this->_collection->getRealSize();
131
  }
@@ -160,10 +192,10 @@ abstract class Contactlab_Template_Model_Newsletter_Processor_Abstract
160
  /**
161
  * applySubscribersFilter: Load collection (abstract).
162
  *
163
- * @param Mage_Newsletter_Model_Template $template
164
  * @return void
165
  */
166
- protected abstract function applySubscribersFilter(Mage_Newsletter_Model_Template $template);
167
 
168
  /**
169
  * Get processor code.
@@ -179,7 +211,7 @@ abstract class Contactlab_Template_Model_Newsletter_Processor_Abstract
179
  * @return $this
180
  */
181
  public function setStoreId($storeId) {
182
- return parent::setStoreId($storeId);
183
  }
184
 
185
  /**
@@ -188,7 +220,7 @@ abstract class Contactlab_Template_Model_Newsletter_Processor_Abstract
188
  * @return string
189
  */
190
  public function getStoreId() {
191
- return parent::getStoreId();
192
  }
193
 
194
  /**
4
  * Abstract processor.
5
  * This abstract class and each implementing class is designed for
6
  * search and filter subscribers for each template to be queued.
7
+ *
8
+ * @method getSendToAllCustomers()
9
+ * @method getDebugInfo()
10
+ * @method array getFilters()
11
+ * @method bool getIsTestMode()
12
+ * @method Mage_Newsletter_Model_Template getTemplate()
13
+ * @method bool getStop()
14
+ *
15
+ * @method bool hasDebugInfo()
16
+ * @method bool hasTemplate()
17
+ * @method bool hasStop()
18
+ *
19
+ * @method unsStop()
20
+ *
21
+ * @method Contactlab_Template_Model_Newsletter_Processor_Abstract setSendToAllCustomers($value)
22
+ * @method Contactlab_Template_Model_Newsletter_Processor_Abstract setDebugInfo($value)
23
+ * @method Contactlab_Template_Model_Newsletter_Processor_Abstract setFilters($value)
24
+ * @method Contactlab_Template_Model_Newsletter_Processor_Abstract setIsTestMode($value)
25
+ * @method Contactlab_Template_Model_Newsletter_Processor_Abstract setTemplate(Mage_Newsletter_Model_Template $template)
26
+ * @method Contactlab_Template_Model_Newsletter_Processor_Abstract setStop($value)
27
  */
28
  abstract class Contactlab_Template_Model_Newsletter_Processor_Abstract
29
  extends Varien_Object
34
  $this->setFilters(array());
35
  }
36
 
37
+ /* @var Contactlab_Template_Model_Resource_Newsletter_Subscriber_Collection $_collection The collection. */
38
  private $_collection;
39
 
40
  /**
41
  * Load subscribers.
42
  *
43
+ * @param Contactlab_Template_Model_Newsletter_Template $template
44
  * @param boolean $onlyCustomers
45
+ * @return Mage_Core_Model_Resource_Db_Collection_Abstract
46
  */
47
+ public final function loadSubscribers(Contactlab_Template_Model_Newsletter_Template $template, $onlyCustomers) {
48
  /* @var $rv Mage_Core_Model_Resource_Db_Collection_Abstract */
49
  if ($onlyCustomers) {
50
  $rv = $this->loadCustomers($template);
55
  return $rv;
56
  }
57
 
58
+ /**
59
+ * Load newsletter subscribers.
60
+ * @param Contactlab_Template_Model_Newsletter_Template $template
61
+ * @param $onlyCustomers
62
+ * @return Contactlab_Template_Model_Resource_Newsletter_Subscriber_Collection|Mage_Newsletter_Model_Resource_Subscriber_Collection
63
+ * @throws Zend_Exception
64
+ */
65
+ protected final function loadNewsletterSubscribers(Contactlab_Template_Model_Newsletter_Template $template, $onlyCustomers) {
66
  $this->_collection = Mage::getResourceModel('newsletter/subscriber_collection');
67
  if (!$onlyCustomers) {
68
  $this->_collection->useOnlySubscribed();
69
  }
70
+ $this->setTemplate($template);
71
  $this->setIsTestMode($template->getIsTestMode());
72
  if ($this->getIsTestMode()) {
73
  $this->applyFilter('contactlab_template/newsletter_processor_filter_testMode');
74
  }
 
75
 
76
  if ($template->hasDebugAddress() && $template->getDebugAddress() != '') {
77
  $this->applyFilter('contactlab_template/newsletter_processor_filter_emailLike',
96
 
97
  /**
98
  * Load customers.
99
+ * @param Contactlab_Template_Model_Newsletter_Template $template
100
  * @return Mage_Customer_Model_Resource_Customer_Collection
101
  */
102
+ protected final function loadCustomers(Contactlab_Template_Model_Newsletter_Template $template) {
103
  /* @var $subscribers Mage_Core_Model_Resource_Db_Abstract */
104
  $subscribers = Mage::getResourceModel("newsletter/subscriber");
105
  $subscribersTable = $subscribers->getMainTable();
135
  /**
136
  * Apply filter $filter withi $params array to the cached collection.
137
  *
138
+ * @param $filter
139
+ * @param array $parameters = array()
140
  * @return $this
141
+ * @throws Zend_Exception
142
  */
143
  public function applyFilter($filter, $parameters = array()) {
144
  if ($this->hasStop() && $this->getStop()) {
145
  return $this;
146
  }
147
+ /**
148
+ * @var $filterModel Contactlab_Template_Model_Newsletter_Processor_Filter_Abstract
149
+ */
150
  $filterModel = Mage::getModel($filter);
151
  if (!is_object($filterModel)) {
152
  throw new Zend_Exception("Could not find $filter model");
157
  if ($this->getIsTestMode() && !$filterModel->doRunInTestMode()) {
158
  return $this;
159
  }
160
+ $countBefore = 0;
161
  if ($this->doOutputRows()) {
162
  $countBefore = $this->_collection->getRealSize();
163
  }
192
  /**
193
  * applySubscribersFilter: Load collection (abstract).
194
  *
195
+ * @param Contactlab_Template_Model_Newsletter_Template $template
196
  * @return void
197
  */
198
+ protected abstract function applySubscribersFilter(Contactlab_Template_Model_Newsletter_Template $template);
199
 
200
  /**
201
  * Get processor code.
211
  * @return $this
212
  */
213
  public function setStoreId($storeId) {
214
+ return parent::setData('store_id', $storeId);
215
  }
216
 
217
  /**
220
  * @return string
221
  */
222
  public function getStoreId() {
223
+ return parent::getData('store_id');
224
  }
225
 
226
  /**
app/code/community/Contactlab/Template/Model/Newsletter/Processor/Cart.php CHANGED
@@ -17,10 +17,10 @@ class Contactlab_Template_Model_Newsletter_Processor_Cart extends Contactlab_Tem
17
  /**
18
  * Apply subscribers filter.
19
  *
20
- * @param Mage_Newsletter_Model_Template $template
21
  * @return $this
22
  */
23
- public function applySubscribersFilter(Mage_Newsletter_Model_Template $template) {
24
  $this->applyFilter('contactlab_template/newsletter_processor_filter_onlyCustomers');
25
  $this->applyFilter('contactlab_template/newsletter_processor_filter_cart_distinctByType');
26
 
17
  /**
18
  * Apply subscribers filter.
19
  *
20
+ * @param Contactlab_Template_Model_Newsletter_Template $template
21
  * @return $this
22
  */
23
+ public function applySubscribersFilter(Contactlab_Template_Model_Newsletter_Template $template) {
24
  $this->applyFilter('contactlab_template/newsletter_processor_filter_onlyCustomers');
25
  $this->applyFilter('contactlab_template/newsletter_processor_filter_cart_distinctByType');
26
 
app/code/community/Contactlab/Template/Model/Newsletter/Processor/Filter/Abstract.php CHANGED
@@ -3,6 +3,8 @@
3
  /**
4
  * Contactlab template model newsletter processor filter abstract.
5
  *
 
 
6
  * @abstract
7
  */
8
  abstract class Contactlab_Template_Model_Newsletter_Processor_Filter_Abstract
@@ -10,18 +12,16 @@ abstract class Contactlab_Template_Model_Newsletter_Processor_Filter_Abstract
10
  implements Contactlab_Template_Model_Newsletter_Processor_Filter_Interface {
11
 
12
  /**
13
- * Set store id.
14
- *
15
- * @param String $storeId
16
- * @return $this
17
  */
18
  public function setStoreId($storeId) {
19
  return parent::setStoreId($storeId);
20
  }
21
 
22
  /**
23
- * Get store id.
24
- *
25
  * @return string
26
  */
27
  public function getStoreId() {
@@ -41,6 +41,8 @@ abstract class Contactlab_Template_Model_Newsletter_Processor_Filter_Abstract
41
  * Get offset where.
42
  *
43
  * @param array $parameters
 
 
44
  * @return string
45
  */
46
  public function getOffsetWhere(array $parameters, $min = 'min', $max = 'max') {
@@ -61,6 +63,8 @@ abstract class Contactlab_Template_Model_Newsletter_Processor_Filter_Abstract
61
  * Get offset where.
62
  *
63
  * @param array $parameters
 
 
64
  * @return string
65
  */
66
  public function getOffsetWhereQty(array $parameters, $min = 'min', $max = 'max') {
@@ -98,9 +102,10 @@ abstract class Contactlab_Template_Model_Newsletter_Processor_Filter_Abstract
98
 
99
  /**
100
  * Is this collection a customer collection?
101
- * @param Mage_Core_Model_Resource_Db_Collection_Abstract $collection
 
102
  */
103
- public function isCustomerCollection($collection) {
104
  return $collection instanceof Mage_Customer_Model_Resource_Customer_Collection;
105
  }
106
 
3
  /**
4
  * Contactlab template model newsletter processor filter abstract.
5
  *
6
+ * @method bool getSendToAllCustomers()
7
+ * @method Contactlab_Template_Model_Newsletter_Processor_Filter_Abstract setSendToAllCustomers($value)
8
  * @abstract
9
  */
10
  abstract class Contactlab_Template_Model_Newsletter_Processor_Filter_Abstract
12
  implements Contactlab_Template_Model_Newsletter_Processor_Filter_Interface {
13
 
14
  /**
15
+ * Set Store Id.
16
+ * @param String $value
17
+ * @return mixed
 
18
  */
19
  public function setStoreId($storeId) {
20
  return parent::setStoreId($storeId);
21
  }
22
 
23
  /**
24
+ * Get Store Id.
 
25
  * @return string
26
  */
27
  public function getStoreId() {
41
  * Get offset where.
42
  *
43
  * @param array $parameters
44
+ * @param string $min
45
+ * @param string $max
46
  * @return string
47
  */
48
  public function getOffsetWhere(array $parameters, $min = 'min', $max = 'max') {
63
  * Get offset where.
64
  *
65
  * @param array $parameters
66
+ * @param string $min
67
+ * @param string $max
68
  * @return string
69
  */
70
  public function getOffsetWhereQty(array $parameters, $min = 'min', $max = 'max') {
102
 
103
  /**
104
  * Is this collection a customer collection?
105
+ * @param Varien_Data_Collection_Db $collection
106
+ * @return bool
107
  */
108
+ public function isCustomerCollection(Varien_Data_Collection_Db $collection) {
109
  return $collection instanceof Mage_Customer_Model_Resource_Customer_Collection;
110
  }
111
 
app/code/community/Contactlab/Template/Model/Newsletter/Processor/Filter/Cart/Products.php CHANGED
@@ -9,7 +9,7 @@ class Contactlab_Template_Model_Newsletter_Processor_Filter_Cart_Products
9
  *
10
  * @param Varien_Data_Collection_Db $collection
11
  * @param array $parameters = array()
12
- * @return $collection
13
  */
14
  public function applyFilter(Varien_Data_Collection_Db $collection, $parameters = array()) {
15
  $rs = $resource = Mage::getSingleton('core/resource');
9
  *
10
  * @param Varien_Data_Collection_Db $collection
11
  * @param array $parameters = array()
12
+ * @return Varien_Data_Collection_Db $collection
13
  */
14
  public function applyFilter(Varien_Data_Collection_Db $collection, $parameters = array()) {
15
  $rs = $resource = Mage::getSingleton('core/resource');
app/code/community/Contactlab/Template/Model/Newsletter/Processor/Filter/TestMode.php CHANGED
@@ -22,7 +22,6 @@ class Contactlab_Template_Model_Newsletter_Processor_Filter_TestMode
22
  }
23
  }
24
 
25
-
26
  /**
27
  * Do run in test mode?
28
  *
@@ -34,11 +33,11 @@ class Contactlab_Template_Model_Newsletter_Processor_Filter_TestMode
34
 
35
  /**
36
  * Get test subscribers mail.
37
- *
38
  * @return array
 
39
  */
40
  public function getTestSubscribersMail() {
41
- $rv = explode(',', Mage::getStoreConfig('contactlab_template/global/test_recipients', $this->getStoreId()));
42
  if (count($rv) == 0) {
43
  throw new Zend_Exception("Could not send test email, empty \"Test Recipients\" configuration!");
44
  }
22
  }
23
  }
24
 
 
25
  /**
26
  * Do run in test mode?
27
  *
33
 
34
  /**
35
  * Get test subscribers mail.
 
36
  * @return array
37
+ * @throws Zend_Exception
38
  */
39
  public function getTestSubscribersMail() {
40
+ $rv = explode(';', Mage::getStoreConfig('contactlab_template/global/test_recipients', $this->getStoreId()));
41
  if (count($rv) == 0) {
42
  throw new Zend_Exception("Could not send test email, empty \"Test Recipients\" configuration!");
43
  }
app/code/community/Contactlab/Template/Model/Newsletter/Processor/Filter/Wishlist/DistinctByType.php CHANGED
@@ -16,6 +16,6 @@ class Contactlab_Template_Model_Newsletter_Processor_Filter_Wishlist_DistinctByT
16
  * @return string
17
  */
18
  public function getName() {
19
- return "Filter only addresses that has not a mail in queue with the same template type (Wishlist Remind)";
20
  }
21
  }
16
  * @return string
17
  */
18
  public function getName() {
19
+ return "Filter only addresses that has not a mail in queue with the same template type (Wishlist Reminder)";
20
  }
21
  }
app/code/community/Contactlab/Template/Model/Newsletter/Processor/Filter/Wishlist/Products.php CHANGED
@@ -9,9 +9,10 @@ class Contactlab_Template_Model_Newsletter_Processor_Filter_Wishlist_Products
9
  *
10
  * @param Varien_Data_Collection_Db $collection
11
  * @param array $parameters = array()
12
- * @return $collection
13
  */
14
  public function applyFilter(Varien_Data_Collection_Db $collection, $parameters = array()) {
 
15
  $rs = $resource = Mage::getSingleton('core/resource');
16
  $wishlist = $rs->getTablename('wishlist/wishlist');
17
  $wishlistItem = $rs->getTablename('wishlist/item');
9
  *
10
  * @param Varien_Data_Collection_Db $collection
11
  * @param array $parameters = array()
12
+ * @return Varien_Data_Collection_Db $collection
13
  */
14
  public function applyFilter(Varien_Data_Collection_Db $collection, $parameters = array()) {
15
+ /** @var $rs Mage_Core_Model_Resource */
16
  $rs = $resource = Mage::getSingleton('core/resource');
17
  $wishlist = $rs->getTablename('wishlist/wishlist');
18
  $wishlistItem = $rs->getTablename('wishlist/item');
app/code/community/Contactlab/Template/Model/Newsletter/Processor/Generic.php CHANGED
@@ -7,10 +7,10 @@ class Contactlab_Template_Model_Newsletter_Processor_Generic extends Contactlab_
7
  /**
8
  * Apply subscribers filter.
9
  *
10
- * @param Mage_Newsletter_Model_Template $template
11
  * @return $this
12
  */
13
- public function applySubscribersFilter(Mage_Newsletter_Model_Template $template) {
14
  // FIXME is it right?
15
  $this->applyFilter('contactlab_template/newsletter_processor_filter_onlyCustomers');
16
  $this->applyFilter('contactlab_template/newsletter_processor_filter_store',
7
  /**
8
  * Apply subscribers filter.
9
  *
10
+ * @param Contactlab_Template_Model_Newsletter_Template $template
11
  * @return $this
12
  */
13
+ public function applySubscribersFilter(Contactlab_Template_Model_Newsletter_Template $template) {
14
  // FIXME is it right?
15
  $this->applyFilter('contactlab_template/newsletter_processor_filter_onlyCustomers');
16
  $this->applyFilter('contactlab_template/newsletter_processor_filter_store',
app/code/community/Contactlab/Template/Model/Newsletter/Processor/Interface.php CHANGED
@@ -6,11 +6,11 @@ interface Contactlab_Template_Model_Newsletter_Processor_Interface {
6
  /**
7
  * Load subscribers interface function.
8
  *
9
- * @param Mage_Newsletter_Model_Template $template
10
  * @param boolean $onlyCustomers
11
  * @return $this
12
  */
13
- function loadSubscribers(Mage_Newsletter_Model_Template $template, $onlyCustomers);
14
 
15
  /**
16
  * Set store id.
6
  /**
7
  * Load subscribers interface function.
8
  *
9
+ * @param Contactlab_Template_Model_Newsletter_Template $template
10
  * @param boolean $onlyCustomers
11
  * @return $this
12
  */
13
+ function loadSubscribers(Contactlab_Template_Model_Newsletter_Template $template, $onlyCustomers);
14
 
15
  /**
16
  * Set store id.
app/code/community/Contactlab/Template/Model/Newsletter/Processor/Wishlist.php CHANGED
@@ -17,10 +17,10 @@ class Contactlab_Template_Model_Newsletter_Processor_Wishlist extends Contactlab
17
  /**
18
  * Apply subscribers filter.
19
  *
20
- * @param Mage_Newsletter_Model_Template $template
21
  * @return $this
22
  */
23
- public function applySubscribersFilter(Mage_Newsletter_Model_Template $template) {
24
  $this->applyFilter('contactlab_template/newsletter_processor_filter_onlyCustomers');
25
  $this->applyFilter('contactlab_template/newsletter_processor_filter_wishlist_distinctByType');
26
 
17
  /**
18
  * Apply subscribers filter.
19
  *
20
+ * @param Contactlab_Template_Model_Newsletter_Template $template
21
  * @return $this
22
  */
23
+ public function applySubscribersFilter(Contactlab_Template_Model_Newsletter_Template $template) {
24
  $this->applyFilter('contactlab_template/newsletter_processor_filter_onlyCustomers');
25
  $this->applyFilter('contactlab_template/newsletter_processor_filter_wishlist_distinctByType');
26
 
app/code/community/Contactlab/Template/Model/Newsletter/Queue.php CHANGED
@@ -1,6 +1,17 @@
1
  <?php
2
 
3
- /** Newsletter queue model rewrite. */
 
 
 
 
 
 
 
 
 
 
 
4
  class Contactlab_Template_Model_Newsletter_Queue extends Mage_Newsletter_Model_Queue {
5
  /**
6
  * Subscribers collection
@@ -175,9 +186,11 @@ class Contactlab_Template_Model_Newsletter_Queue extends Mage_Newsletter_Model_Q
175
  'main_table.queue_id = link.queue_id',
176
  array('letter_sent_at', 'product_ids', 'customer_id' => 'customer_id'));
177
  /* @var $helper Contactlab_Commons_Helper_Data */
 
178
  $helper = Mage::helper("contactlab_commons");
179
  $helper->logWarn($this->_subscribersCustomerCollection
180
  ->getSelect()->assemble());
 
181
  }
182
  return $this->_subscribersCustomerCollection;
183
  }
@@ -190,6 +203,7 @@ class Contactlab_Template_Model_Newsletter_Queue extends Mage_Newsletter_Model_Q
190
  public function finishQueueAndLinks() {
191
  $this->_finishQueue();
192
  $this->_finishQueueLinks();
 
193
  return $this;
194
  }
195
 
1
  <?php
2
 
3
+ /**
4
+ * Newsletter queue model rewrite.
5
+ *
6
+ * @method getQueueId()
7
+ * @method getTaskId()
8
+ *
9
+ * @method Contactlab_Template_Model_Newsletter_Queue setQueueId($value)
10
+ * @method Contactlab_Template_Model_Newsletter_Queue setTaskId($value)
11
+ * @method Contactlab_Template_Model_Newsletter_Queue setXmlDelivery(Contactlab_Template_Model_Newsletter_XmlDelivery $value)
12
+ *
13
+ * @method hasQueueId()
14
+ */
15
  class Contactlab_Template_Model_Newsletter_Queue extends Mage_Newsletter_Model_Queue {
16
  /**
17
  * Subscribers collection
186
  'main_table.queue_id = link.queue_id',
187
  array('letter_sent_at', 'product_ids', 'customer_id' => 'customer_id'));
188
  /* @var $helper Contactlab_Commons_Helper_Data */
189
+ /*
190
  $helper = Mage::helper("contactlab_commons");
191
  $helper->logWarn($this->_subscribersCustomerCollection
192
  ->getSelect()->assemble());
193
+ */
194
  }
195
  return $this->_subscribersCustomerCollection;
196
  }
203
  public function finishQueueAndLinks() {
204
  $this->_finishQueue();
205
  $this->_finishQueueLinks();
206
+
207
  return $this;
208
  }
209
 
app/code/community/Contactlab/Template/Model/Newsletter/Queue/Link.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Template_Model_Newsletter_Queue_Link extends Mage_Core_Model_Abstract
4
+ {
5
+
6
+ protected function _construct()
7
+ {
8
+ $this->_init('contactlab_template/newsletter_queue_link');
9
+ }
10
+
11
+ }
app/code/community/Contactlab/Template/Model/Newsletter/Template.php CHANGED
@@ -1,6 +1,65 @@
1
  <?php
2
 
3
- /** Newsletter template model rewrite. */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  class Contactlab_Template_Model_Newsletter_Template extends Mage_Newsletter_Model_Template {
5
  /**
6
  * Process template queue.
@@ -22,6 +81,7 @@ class Contactlab_Template_Model_Newsletter_Template extends Mage_Newsletter_Mode
22
  $c = 0;
23
  $queue = null;
24
  foreach ($processor->loadSubscribers($this, false) as $item) {
 
25
  if (is_null($queue)) {
26
  $queue = Mage::getModel('newsletter/queue');
27
  $queue->setTemplateId($this->getId());
@@ -40,7 +100,6 @@ class Contactlab_Template_Model_Newsletter_Template extends Mage_Newsletter_Mode
40
 
41
  $c++;
42
  }
43
-
44
  if ($processor->getSendToAllCustomers()) {
45
  foreach ($processor->loadSubscribers($this, true) as $item) {
46
  if (is_null($queue)) {
@@ -92,6 +151,8 @@ class Contactlab_Template_Model_Newsletter_Template extends Mage_Newsletter_Mode
92
 
93
  /**
94
  * Get Template type model.
 
 
95
  */
96
  public function getTemplateTypeModel() {
97
  if (!$this->hasTemplateTypeId()) {
@@ -102,6 +163,7 @@ class Contactlab_Template_Model_Newsletter_Template extends Mage_Newsletter_Mode
102
  Mage::getModel('contactlab_template/type')
103
  ->load($this->getTemplateTypeId()));
104
  }
 
105
  return parent::getTemplateTypeModel();
106
  }
107
 
@@ -120,9 +182,13 @@ class Contactlab_Template_Model_Newsletter_Template extends Mage_Newsletter_Mode
120
  *
121
  * @param Mage_Newsletter_Model_Queue $queue
122
  * @param string $storeId
 
123
  * @return Contactlab_Commons_Model_Task
 
124
  */
125
  private function _createTask(Mage_Newsletter_Model_Queue $queue, $storeId, $max) {
 
 
126
  $rv = Mage::getModel("contactlab_commons/task")
127
  ->setDescription(sprintf('Process "%s" queue [%d]',
128
  $this->getTemplateSubject(), $queue->getId()))
@@ -167,10 +233,11 @@ class Contactlab_Template_Model_Newsletter_Template extends Mage_Newsletter_Mode
167
  * Send to all customers?
168
  * @param string $code
169
  * @param string $storeId
 
170
  */
171
  public function doSendToAllCustomers($code, $storeId) {
172
  if ($code !== 'CART' && $code !== 'WISHLIST') {
173
- $code = 'GENERIG';
174
  }
175
  $code = strtolower($code);
176
  return Mage::getStoreConfigFlag("contactlab_template/$code/send_to_not_subscribed", $storeId);
@@ -218,7 +285,7 @@ class Contactlab_Template_Model_Newsletter_Template extends Mage_Newsletter_Mode
218
 
219
  /**
220
  * Validate min and max value
221
- * @param type $field
222
  * @param array $labels
223
  * @param Contactlab_Template_Helper_Data $helper
224
  * @param array $errors
@@ -235,4 +302,18 @@ class Contactlab_Template_Model_Newsletter_Template extends Mage_Newsletter_Mode
235
  $helper->__($labels['max']));
236
  }
237
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
238
  }
1
  <?php
2
 
3
+ /**
4
+ * Newsletter template model rewrite.
5
+ * @method getAndOr()
6
+ * @method getMaxProducts()
7
+ * @method getMinProducts()
8
+ * @method getMaxValue()
9
+ * @method getMinValue()
10
+ * @method getMaxMinutesFromLastUpdate()
11
+ * @method getMinMinutesFromLastUpdate()
12
+ * @method getPriority()
13
+ * @method getQueueDelayTime()
14
+ * @method getCronDateRangeEnd()
15
+ * @method getCronDateRangeStart()
16
+ * @method getIsCronEnabled()
17
+ * @method getProductImageSize()
18
+ * @method getDefaultProductSnippet()
19
+ * @method getIsTestMode()
20
+ * @method getFlgHtmlTxt()
21
+ * @method getTemplateTextPlain()
22
+ * @method getTemplateTypeId()
23
+ * @method getReplyTo()
24
+ * @method getEnableXmlDelivery()
25
+ * @method getDontRunNow()
26
+ * @method getStoreId()
27
+ * @method getDebugAddress()
28
+ * @method getDebugInfo()
29
+ * @method getTemplateId()
30
+ *
31
+ * @method Contactlab_Template_Model_Newsletter_Template setAndOr($value)
32
+ * @method Contactlab_Template_Model_Newsletter_Template setMaxProducts($value)
33
+ * @method Contactlab_Template_Model_Newsletter_Template setMinProducts($value)
34
+ * @method Contactlab_Template_Model_Newsletter_Template setMaxValue($value)
35
+ * @method Contactlab_Template_Model_Newsletter_Template setMinValue($value)
36
+ * @method Contactlab_Template_Model_Newsletter_Template setMaxMinutesFromLastUpdate($value)
37
+ * @method Contactlab_Template_Model_Newsletter_Template setMinMinutesFromLastUpdate($value)
38
+ * @method Contactlab_Template_Model_Newsletter_Template setPriority($value)
39
+ * @method Contactlab_Template_Model_Newsletter_Template setQueueDelayTime($value)
40
+ * @method Contactlab_Template_Model_Newsletter_Template setCronDateRangeEnd($value)
41
+ * @method Contactlab_Template_Model_Newsletter_Template setCronDateRangeStart($value)
42
+ * @method Contactlab_Template_Model_Newsletter_Template setIsCronEnabled($value)
43
+ * @method Contactlab_Template_Model_Newsletter_Template setProductImageSize($value)
44
+ * @method Contactlab_Template_Model_Newsletter_Template setDefaultProductSnippet($value)
45
+ * @method Contactlab_Template_Model_Newsletter_Template setIsTestMode($value)
46
+ * @method Contactlab_Template_Model_Newsletter_Template setFlgHtmlTxt($value)
47
+ * @method Contactlab_Template_Model_Newsletter_Template setTemplateTextPlain($value)
48
+ * @method Contactlab_Template_Model_Newsletter_Template setTemplateTypeId($value)
49
+ * @method Contactlab_Template_Model_Newsletter_Template setReplyTo($value)
50
+ * @method Contactlab_Template_Model_Newsletter_Template setEnableXmlDelivery($value)
51
+ * @method Contactlab_Template_Model_Newsletter_Template setDebugInfo($value)
52
+ * @method Contactlab_Template_Model_Newsletter_Template setTemplateTypeModel($value)
53
+ * @method Contactlab_Template_Model_Newsletter_Template setDebugAddress($value)
54
+ *
55
+ * @method bool hasTemplateTypeId()
56
+ * @method bool hasTemplateTypeModel()
57
+ * @method bool hasQueueDelayTime()
58
+ * @method bool hasDebugAddress()
59
+ * @method bool hasDebugInfo()
60
+ * @method bool hasMinProducts()
61
+ * @method bool hasMaxProducts()
62
+ */
63
  class Contactlab_Template_Model_Newsletter_Template extends Mage_Newsletter_Model_Template {
64
  /**
65
  * Process template queue.
81
  $c = 0;
82
  $queue = null;
83
  foreach ($processor->loadSubscribers($this, false) as $item) {
84
+ /** @var $item Contactlab_Subscribers_Model_Newsletter_Subscriber */
85
  if (is_null($queue)) {
86
  $queue = Mage::getModel('newsletter/queue');
87
  $queue->setTemplateId($this->getId());
100
 
101
  $c++;
102
  }
 
103
  if ($processor->getSendToAllCustomers()) {
104
  foreach ($processor->loadSubscribers($this, true) as $item) {
105
  if (is_null($queue)) {
151
 
152
  /**
153
  * Get Template type model.
154
+ *
155
+ * @return Contactlab_Template_Model_Type
156
  */
157
  public function getTemplateTypeModel() {
158
  if (!$this->hasTemplateTypeId()) {
163
  Mage::getModel('contactlab_template/type')
164
  ->load($this->getTemplateTypeId()));
165
  }
166
+ /** @noinspection PhpUndefinedMethodInspection */
167
  return parent::getTemplateTypeModel();
168
  }
169
 
182
  *
183
  * @param Mage_Newsletter_Model_Queue $queue
184
  * @param string $storeId
185
+ * @param int $max
186
  * @return Contactlab_Commons_Model_Task
187
+ * @throws Exception
188
  */
189
  private function _createTask(Mage_Newsletter_Model_Queue $queue, $storeId, $max) {
190
+ /** @var $queue Contactlab_Template_Model_Newsletter_Queue */
191
+ /** @var $rv Contactlab_Commons_Model_Task */
192
  $rv = Mage::getModel("contactlab_commons/task")
193
  ->setDescription(sprintf('Process "%s" queue [%d]',
194
  $this->getTemplateSubject(), $queue->getId()))
233
  * Send to all customers?
234
  * @param string $code
235
  * @param string $storeId
236
+ * @return bool
237
  */
238
  public function doSendToAllCustomers($code, $storeId) {
239
  if ($code !== 'CART' && $code !== 'WISHLIST') {
240
+ $code = 'GENERIC';
241
  }
242
  $code = strtolower($code);
243
  return Mage::getStoreConfigFlag("contactlab_template/$code/send_to_not_subscribed", $storeId);
285
 
286
  /**
287
  * Validate min and max value
288
+ * @param String $field
289
  * @param array $labels
290
  * @param Contactlab_Template_Helper_Data $helper
291
  * @param array $errors
302
  $helper->__($labels['max']));
303
  }
304
  }
305
+
306
+ /**
307
+ * Processing object before save data
308
+ *
309
+ * @return Mage_Newsletter_Model_Template
310
+ */
311
+ protected function _beforeSave()
312
+ {
313
+ // manage "none" store value.
314
+ if ($this->getStoreId() == 'none') {
315
+ $this->setData('store_id', null);
316
+ }
317
+ return parent::_beforeSave();
318
+ }
319
  }
app/code/community/Contactlab/Template/Model/Newsletter/XmlDelivery.php CHANGED
@@ -1,7 +1,10 @@
1
  <?php
2
 
3
 
4
- /** Newsletter XmlDelivery Model. */
 
 
 
5
  class Contactlab_Template_Model_Newsletter_XmlDelivery extends Mage_Core_Model_Abstract {
6
  /**
7
  * Send.
1
  <?php
2
 
3
 
4
+ /**
5
+ * Newsletter XmlDelivery Model.
6
+ * @method Contactlab_Template_Model_Newsletter_XmlDelivery setTask($value)
7
+ */
8
  class Contactlab_Template_Model_Newsletter_XmlDelivery extends Mage_Core_Model_Abstract {
9
  /**
10
  * Send.
app/code/community/Contactlab/Template/Model/Newsletter/XmlDelivery/Check.php CHANGED
@@ -2,15 +2,26 @@
2
 
3
  /**
4
  * XMLDelivery report file check.
 
 
 
 
 
5
  *
 
 
 
 
 
6
  */
7
  class Contactlab_Template_Model_Newsletter_XmlDelivery_Check extends Varien_Object {
8
  /**
9
  * Do check.
10
- *
11
  * @return string
 
12
  */
13
  public function doCheck() {
 
14
  $sftp = new Contactlab_Commons_Model_Ssh_Net_SFTP(
15
  $this->_getConfig("contactlab_commons/connection/remote_server"));
16
  if (!$sftp->login(
@@ -79,6 +90,7 @@ class Contactlab_Template_Model_Newsletter_XmlDelivery_Check extends Varien_Obje
79
  * @return void
80
  */
81
  public function finishQueueAndLinks() {
 
82
  $queue = Mage::getModel('newsletter/queue')->load($this->getQueueId());
83
  if ($queue->hasQueueId()) {
84
  $queue->finishQueueAndLinks();
@@ -112,7 +124,7 @@ class Contactlab_Template_Model_Newsletter_XmlDelivery_Check extends Varien_Obje
112
  * Get config.
113
  *
114
  * @param string $path
115
- * @return void
116
  */
117
  private function _getConfig($path) {
118
  return Mage::getStoreConfig($path, $this->getStoreId());
2
 
3
  /**
4
  * XMLDelivery report file check.
5
+ * @method Contactlab_Template_Model_Newsletter_XmlDelivery_Check setTask(Contactlab_Commons_Model_Task $task)
6
+ * @method Contactlab_Template_Model_Newsletter_XmlDelivery_Check setParentTask(Contactlab_Commons_Model_Task $task)
7
+ * @method Contactlab_Template_Model_Newsletter_XmlDelivery_Check setXmlFile(String $xmlFile)
8
+ * @method Contactlab_Template_Model_Newsletter_XmlDelivery_Check setStoreId(String $storeId)
9
+ * @method Contactlab_Template_Model_Newsletter_XmlDelivery_Check setQueueId(int $queueId)
10
  *
11
+ * @method Contactlab_Commons_Model_Task getTask()
12
+ * @method Contactlab_Commons_Model_Task getParentTask()
13
+ * @method String getXmlFile()
14
+ * @method String getStoreId()
15
+ * @method int getQueueId()
16
  */
17
  class Contactlab_Template_Model_Newsletter_XmlDelivery_Check extends Varien_Object {
18
  /**
19
  * Do check.
 
20
  * @return string
21
+ * @throws Exception
22
  */
23
  public function doCheck() {
24
+ $rv = false;
25
  $sftp = new Contactlab_Commons_Model_Ssh_Net_SFTP(
26
  $this->_getConfig("contactlab_commons/connection/remote_server"));
27
  if (!$sftp->login(
90
  * @return void
91
  */
92
  public function finishQueueAndLinks() {
93
+ /** @var $queue Contactlab_Template_Model_Newsletter_Queue */
94
  $queue = Mage::getModel('newsletter/queue')->load($this->getQueueId());
95
  if ($queue->hasQueueId()) {
96
  $queue->finishQueueAndLinks();
124
  * Get config.
125
  *
126
  * @param string $path
127
+ * @return String
128
  */
129
  private function _getConfig($path) {
130
  return Mage::getStoreConfig($path, $this->getStoreId());
app/code/community/Contactlab/Template/Model/Resource/Newsletter/Queue/Collection.php CHANGED
@@ -2,11 +2,12 @@
2
 
3
 
4
  /** Newsletter queue collection. */
5
- class Contactlab_Template_Model_Resource_Newsletter_Queue_Collection extends Mage_Newsletter_Model_Resource_Queue_Collection {
 
6
  private $_disableIdCheck = false;
7
 
8
  /**
9
- * Add filter by only ready fot sending item
10
  *
11
  * @return Mage_Newsletter_Model_Resource_Queue_Collection
12
  */
@@ -16,13 +17,15 @@ class Contactlab_Template_Model_Resource_Newsletter_Queue_Collection extends Mag
16
  $this->getSelect()->where('main_table.task_id is null');
17
  return $this;
18
  }
 
19
  /**
20
- * Adding item to item array
21
  *
22
  * @param Varien_Object $item
23
  * @return Varien_Data_Collection
24
  */
25
- public function addItem(Varien_Object $item) {
 
26
  if ($this->_disableIdCheck) {
27
  return $this->_addItem($item);
28
  } else {
@@ -33,14 +36,43 @@ class Contactlab_Template_Model_Resource_Newsletter_Queue_Collection extends Mag
33
  /**
34
  * Disable id check.
35
  */
36
- public function disableIdCheck() {
 
37
  $this->_disableIdCheck = true;
38
  }
39
 
40
  /**
41
  * Enable id check.
42
  */
43
- public function enableIdCheck() {
 
44
  $this->_disableIdCheck = false;
45
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
46
  }
2
 
3
 
4
  /** Newsletter queue collection. */
5
+ class Contactlab_Template_Model_Resource_Newsletter_Queue_Collection extends Mage_Newsletter_Model_Resource_Queue_Collection
6
+ {
7
  private $_disableIdCheck = false;
8
 
9
  /**
10
+ * Add filter by only ready fot sending item.
11
  *
12
  * @return Mage_Newsletter_Model_Resource_Queue_Collection
13
  */
17
  $this->getSelect()->where('main_table.task_id is null');
18
  return $this;
19
  }
20
+
21
  /**
22
+ * Adding item to item array.
23
  *
24
  * @param Varien_Object $item
25
  * @return Varien_Data_Collection
26
  */
27
+ public function addItem(Varien_Object $item)
28
+ {
29
  if ($this->_disableIdCheck) {
30
  return $this->_addItem($item);
31
  } else {
36
  /**
37
  * Disable id check.
38
  */
39
+ public function disableIdCheck()
40
+ {
41
  $this->_disableIdCheck = true;
42
  }
43
 
44
  /**
45
  * Enable id check.
46
  */
47
+ public function enableIdCheck()
48
+ {
49
  $this->_disableIdCheck = false;
50
  }
51
+
52
+ /**
53
+ * Get Tasks by Template Id
54
+ * @param int $templateId
55
+ * @return Contactlab_Template_Model_Resource_Newsletter_Queue_Collection
56
+ */
57
+ public function getQueueByTemplateId($templateId)
58
+ {
59
+ return $this->addFieldToFilter('template_id', $templateId);
60
+ }
61
+
62
+ /**
63
+ * Add task data.
64
+ * @return Contactlab_Template_Model_Resource_Newsletter_Queue_Collection
65
+ */
66
+ public function addTaskData()
67
+ {
68
+ $this->join(array('task' => 'contactlab_commons/task'),
69
+ 'main_table.task_id = task.task_id',
70
+ array(
71
+ 'status' => 'status',
72
+ 'task_created_at' => 'created_at',
73
+ 'task_planned_at' => 'planned_at',
74
+ 'task_description' => 'description'
75
+ ));
76
+ return $this->addOrder('task_id', Varien_Data_Collection::SORT_ORDER_DESC);
77
+ }
78
  }
app/code/community/Contactlab/Template/Model/Resource/Newsletter/Queue/Link.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Template_Model_Resource_Newsletter_Queue_Link extends Mage_Core_Model_Resource_Db_Abstract
4
+ {
5
+
6
+ protected function _construct()
7
+ {
8
+ $this->_init('newsletter/queue_link', 'queue_link_id');
9
+ }
10
+
11
+ }
app/code/community/Contactlab/Template/Model/Resource/Newsletter/Queue/Link/Collection.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Template_Model_Resource_Newsletter_Queue_Link_Collection extends Mage_Core_Model_Resource_Db_Collection_Abstract
4
+ {
5
+ protected function _construct()
6
+ {
7
+ $this->_init('contactlab_template/newsletter_queue_link');
8
+ }
9
+
10
+ public function addCustomerInfo()
11
+ {
12
+ $this->getSelect()->joinLeft(
13
+ array('customer' => $this->getTable('customer/entity')),
14
+ 'main_table.customer_id = customer.entity_id',
15
+ array('customer_email' => 'email'));
16
+ return $this;
17
+ }
18
+
19
+ public function addSubscriberInfo()
20
+ {
21
+ $this->getSelect()->joinLeft(
22
+ array('newsletter_subscriber' => $this->getTable('newsletter/subscriber')),
23
+ 'main_table.subscriber_id = newsletter_subscriber.subscriber_id',
24
+ array('subscriber_email' => 'subscriber_email'));
25
+ return $this;
26
+ }
27
+ }
app/code/community/Contactlab/Template/Model/Resource/Newsletter/Template/Collection.php CHANGED
@@ -7,13 +7,22 @@ class Contactlab_Template_Model_Resource_Newsletter_Template_Collection extends
7
  /**
8
  * Load active templates for cron.
9
  *
10
- * @return collection
 
 
11
  */
12
- public function loadActiveTemplatesForCron() {
13
  $this->getSelect()->where('(cron_date_range_start is null or cron_date_range_start <= date(now()))');
14
  $this->getSelect()->where('(cron_date_range_start is null or cron_date_range_end >= date(now()))');
15
- $this->getSelect()->where('is_test_mode = 0');
 
 
 
 
 
16
  $this->getSelect()->order('priority desc');
17
- return $this->addFieldToFilter('is_cron_enabled', 1);
 
 
18
  }
19
  }
7
  /**
8
  * Load active templates for cron.
9
  *
10
+ * @param int $storeId
11
+ * @param bool $excludeTest Exclude test mode templates
12
+ * @return Contactlab_Template_Model_Resource_Newsletter_Template_Collection
13
  */
14
+ public function loadActiveTemplatesForCron($storeId = -1, $excludeTest = true) {
15
  $this->getSelect()->where('(cron_date_range_start is null or cron_date_range_start <= date(now()))');
16
  $this->getSelect()->where('(cron_date_range_start is null or cron_date_range_end >= date(now()))');
17
+ if ($excludeTest) {
18
+ $this->getSelect()->where('is_test_mode = 0');
19
+ }
20
+ if ($storeId >= 0) {
21
+ $this->getSelect()->where('store_id is null or store_id = ?', intval($storeId));
22
+ }
23
  $this->getSelect()->order('priority desc');
24
+ $this->addFieldToFilter('is_cron_enabled', 1);
25
+
26
+ return $this;
27
  }
28
  }
app/code/community/Contactlab/Template/Model/Task/Observer.php CHANGED
@@ -27,8 +27,9 @@ class Contactlab_Template_Model_Task_Observer {
27
  * @return void
28
  */
29
  public function loadOldTasks(Varien_Event_Observer $observer) {
30
- $collection = $observer->getCollection();
31
- $collection->getSelect()->orWhere("status = ? and main_table.task_id not in (select task_id from newsletter_queue)",
 
32
  Contactlab_Commons_Model_Task::STATUS_HIDDEN);
33
  }
34
 
@@ -56,7 +57,7 @@ class Contactlab_Template_Model_Task_Observer {
56
  * @return void
57
  */
58
  private function _deleteNewsletterQueue(Contactlab_Commons_Model_Task $task) {
59
- $resource = Mage::getResourceModel('newsletter/queue');
60
  $adapter = Mage::getSingleton('core/resource')->getConnection('core_write');
61
 
62
  $collection = Mage::getResourceModel('newsletter/queue_collection')
27
  * @return void
28
  */
29
  public function loadOldTasks(Varien_Event_Observer $observer) {
30
+ $tablePrefix = (string) Mage::getConfig()->getTablePrefix();
31
+ $collection = $observer->getCollection();
32
+ $collection->getSelect()->orWhere("status = ? and main_table.task_id not in (select task_id from {$tablePrefix}newsletter_queue)",
33
  Contactlab_Commons_Model_Task::STATUS_HIDDEN);
34
  }
35
 
57
  * @return void
58
  */
59
  private function _deleteNewsletterQueue(Contactlab_Commons_Model_Task $task) {
60
+ /* @var $adapter Varien_Db_Adapter_Pdo_Mysql */
61
  $adapter = Mage::getSingleton('core/resource')->getConnection('core_write');
62
 
63
  $collection = Mage::getResourceModel('newsletter/queue_collection')
app/code/community/Contactlab/Template/Model/Type.php CHANGED
@@ -2,6 +2,25 @@
2
 
3
  /**
4
  * Template type model.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5
  */
6
  class Contactlab_Template_Model_Type extends Mage_Core_Model_Abstract {
7
 
2
 
3
  /**
4
  * Template type model.
5
+ *
6
+ * @method String getTemplateTypeCode()
7
+ */
8
+
9
+ /**
10
+ * @method int getEntityId()
11
+ * @method Contactlab_Template_Model_Type setEntityId($value)
12
+ * @method string getName()
13
+ * @method Contactlab_Template_Model_Type setName($value)
14
+ * @method string getTemplateTypeCode()
15
+ * @method Contactlab_Template_Model_Type setTemplateTypeCode($value)
16
+ * @method int getIsSystem()
17
+ * @method Contactlab_Template_Model_Type setIsSystem($value)
18
+ * @method int getIsCronEnabled()
19
+ * @method Contactlab_Template_Model_Type setIsCronEnabled($value)
20
+ * @method int getDndPeriod()
21
+ * @method Contactlab_Template_Model_Type setDndPeriod($value)
22
+ * @method int getDndMailNumber()
23
+ * @method Contactlab_Template_Model_Type setDndMailNumber($value)
24
  */
25
  class Contactlab_Template_Model_Type extends Mage_Core_Model_Abstract {
26
 
app/code/community/Contactlab/Template/controllers/Adminhtml/Contactlab/Template/TasksController.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Template_Adminhtml_Contactlab_Template_TasksController
4
+ extends Mage_Adminhtml_Controller_Action {
5
+
6
+ /**
7
+ * Check is allowed access
8
+ *
9
+ * @return bool
10
+ */
11
+ protected function _isAllowed ()
12
+ {
13
+ return Mage::getSingleton('admin/session')
14
+ ->isAllowed('newsletter/template');
15
+ }
16
+
17
+ /**
18
+ * List tasks action.
19
+ */
20
+ public function listAction() {
21
+ $this->_title($this->__('Newsletter Templates'))->_title($this->__('XML Delivery Status'));
22
+ $this->loadLayout();
23
+ $templateId = $this->getRequest()->getParam('template_id');
24
+ if (!$templateId) {
25
+ $this->_redirectError("Invalid template id parameter");
26
+ }
27
+ Mage::register('template_id', $templateId);
28
+ $this->_setActiveMenu('newsletter/template');
29
+ $this->_addBreadcrumb(Mage::helper('newsletter')->__('Newsletter Templates'),
30
+ Mage::helper('newsletter')->__('XML Delivery Status'));
31
+
32
+ $this->renderLayout();
33
+ }
34
+
35
+ /**
36
+ * Queue detail action.
37
+ */
38
+ public function detailAction() {
39
+ $this->_title($this->__('Newsletter Templates'))->_title($this->__('Queue Detail'));
40
+ $queueId = $this->getRequest()->getParam('queue_id');
41
+ if (!$queueId) {
42
+ $this->_redirectError("Invalid queue id parameter");
43
+ }
44
+ $templateId = $this->getRequest()->getParam('template_id');
45
+ if (!$templateId) {
46
+ $this->_redirectError("Invalid template id parameter");
47
+ }
48
+ Mage::register('queue_id', $queueId);
49
+ Mage::register('template_id', $templateId);
50
+ $this->loadLayout();
51
+ $this->_setActiveMenu('newsletter/template');
52
+ $this->_addBreadcrumb(Mage::helper('newsletter')->__('Newsletter Templates'),
53
+ Mage::helper('newsletter')->__('Queue Detail'));
54
+
55
+ $this->renderLayout();
56
+ }
57
+ }
app/code/community/Contactlab/Template/controllers/Adminhtml/{TypesController.php → Contactlab/Template/TypesController.php} RENAMED
@@ -1,11 +1,11 @@
1
  <?php
2
 
3
  /** Template types controller. */
4
- class Contactlab_Template_Adminhtml_TypesController extends Mage_Adminhtml_Controller_Action {
5
 
6
  /** Index action. */
7
  public function indexAction() {
8
- $this->_title($this->__('Template types'));
9
  $this->loadLayout()->_setActiveMenu('newsletter/contactlab');
10
  return $this->renderLayout();
11
  }
1
  <?php
2
 
3
  /** Template types controller. */
4
+ class Contactlab_Template_Adminhtml_Contactlab_Template_TypesController extends Mage_Adminhtml_Controller_Action {
5
 
6
  /** Index action. */
7
  public function indexAction() {
8
+ $this->_title($this->__('Template Types'));
9
  $this->loadLayout()->_setActiveMenu('newsletter/contactlab');
10
  return $this->renderLayout();
11
  }
app/code/community/Contactlab/Template/controllers/Adminhtml/{TemplateController.php → Contactlab/TemplateController.php} RENAMED
@@ -1,7 +1,7 @@
1
  <?php
2
 
3
  /** Template types controller. */
4
- class Contactlab_Template_Adminhtml_TemplateController extends Mage_Adminhtml_Controller_Action {
5
 
6
  /**
7
  * Scan for template in cron.
@@ -21,7 +21,7 @@ class Contactlab_Template_Adminhtml_TemplateController extends Mage_Adminhtml_Co
21
  Mage::helper('contactlab_commons')->logEmerg($e);
22
  $session->addError($e->getMessage());
23
  }
24
- $this->_redirect('contactlab_commons/adminhtml_tasks/',
25
  array('address' => $this->getRequest()->getParam('address')));
26
  }
27
 
@@ -33,11 +33,20 @@ class Contactlab_Template_Adminhtml_TemplateController extends Mage_Adminhtml_Co
33
  */
34
  private function _scanByStore($storeId, $debugAddress) {
35
  $session = Mage::getSingleton('adminhtml/session');
36
- $rv = Mage::helper('contactlab_template')->scan($storeId, $debugAddress);
37
  if (is_array($rv)) {
38
  foreach ($rv as $k => $v) {
39
  $session->addSuccess(sprintf("%s: %s", $k, $v));
40
  }
41
  }
42
  }
 
 
 
 
 
 
 
 
 
43
  }
1
  <?php
2
 
3
  /** Template types controller. */
4
+ class Contactlab_Template_Adminhtml_Contactlab_TemplateController extends Mage_Adminhtml_Controller_Action {
5
 
6
  /**
7
  * Scan for template in cron.
21
  Mage::helper('contactlab_commons')->logEmerg($e);
22
  $session->addError($e->getMessage());
23
  }
24
+ $this->_redirect('adminhtml/contactlab_commons_tasks',
25
  array('address' => $this->getRequest()->getParam('address')));
26
  }
27
 
33
  */
34
  private function _scanByStore($storeId, $debugAddress) {
35
  $session = Mage::getSingleton('adminhtml/session');
36
+ $rv = Mage::helper('contactlab_template')->scan($storeId, $debugAddress, false);
37
  if (is_array($rv)) {
38
  foreach ($rv as $k => $v) {
39
  $session->addSuccess(sprintf("%s: %s", $k, $v));
40
  }
41
  }
42
  }
43
+
44
+ /**
45
+ * Is this controller allowed?
46
+ * @return bool
47
+ */
48
+ protected function _isAllowed()
49
+ {
50
+ return Mage::getSingleton('admin/session')->isAllowed('newsletter/contactlab/template_scan');
51
+ }
52
  }
app/code/community/Contactlab/Template/controllers/Adminhtml/Newsletter/QueueController.php CHANGED
@@ -30,7 +30,7 @@ class Contactlab_Template_Adminhtml_Newsletter_QueueController
30
  }
31
  }
32
 
33
- $this->_redirect('contactlab_commons/adminhtml_tasks');
34
  } else {
35
  return parent::editAction();
36
  }
30
  }
31
  }
32
 
33
+ $this->_redirect('adminhtml/contactlab_commons_tasks');
34
  } else {
35
  return parent::editAction();
36
  }
app/code/community/Contactlab/Template/controllers/SampleDataController.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /** Sample data controller. */
4
+ class Contactlab_Template_SampleDataController extends Mage_Core_Controller_Front_Action {
5
+ public function createAction() {
6
+ /* @var $helper Contactlab_Template_Helper_SampleData */
7
+ $helper = Mage::helper('contactlab_template/sampleData');
8
+ $helper->createSampleDataJSON();
9
+ return $this->_redirect('/');
10
+ }
11
+ }
app/code/community/Contactlab/Template/data/contactlab_template_setup/data-upgrade-0.8.20-0.8.21.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+
3
+ /* @var $helper Contactlab_Template_Helper_SampleData */
4
+ $helper = Mage::helper('contactlab_template/sampleData');
5
+ $helper->createSampleData();
app/code/community/Contactlab/Template/docs/example-templates/subject_ac.json ADDED
@@ -0,0 +1 @@
 
1
+ {"template_code":"Abandoned Cart","template_text":"<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd\">\r\n<html>\r\n<head>\r\n\r\n <title>Contactlab<\/title>\r\n\r\n <meta name=\"viewport\" content=\"height=device-height, width=device-width, minimum-scale=1.0, user-scalable=no\" \/>\r\n <meta name=\"format-detection\" content=\"telephone=no\">\r\n <style type=\"text\/css\">\r\n <!--\r\n html { -webkit-text-size-adjust:none; }\r\n body, .ReadMsgBody, .ExternalClass, .multi-col .column {width: 100%; width:100% !important; margin: 0px; padding: 0px; display: block;}\r\n .ExternalClass * {line-height: 100%;}\r\n table, tr, td {margin:0; padding: 0;border-collapse:collapse; mso-line-height-alt:0px; mso-margin-top-alt:0px; mso-table-lspace:0px; mso-table-rspace:0px; }\r\n td { vertical-align: top; }\r\n a img, img{margin: 0px; padding: 0px; display: block;}\r\n a[href^=\"tel\"], a[href^=\"sms\"] {color:inherit; cursor:default; text-decoration:none;}\r\n .preheader{display:none !important; visibility:hidden; opacity:0; color:transparent; height:0; width:0; color:#ffffff; font-size:1px; line-height:0; overflow:hidden; mso-hide:all;}\r\n .two-col .column { width: 300px; }\r\n .two-col .padded { width: 280px; }\r\n .three-col .column {width: 190px;}\r\n .three-col .padded {width: 280px;}\r\n .four-col .column {width: 145px;}\r\n .four-col .padded {width: 280px;}\r\n .five-col .column {width: 116px;}\r\n .five-col .padded {width: 280px;}\r\n .multi-col .padded {min-width: 65px;}\r\n @media only screen\r\n and (max-width: 568px)\r\n {\r\n [class*=mobileversion] {display:block !important; float:none !important; width:100% !important; height:auto !important; overflow:visible !important; line-height: normal !important; max-height:none !important; margin: 0; padding: 0px;}\r\n [class*=onlydesktop] {display:none !important; width:0 !important;}\r\n [class*=wrp] { min-width: 320px !important;}\r\n [class*=wrp] .padded320 { width: 320px !important; height:auto !important;}\r\n [class*=wrp] img { max-width: 100%; height: auto; }\r\n [class*=wrp] .image_responsive320 { -ms-interpolation-mode: bicubic; width:100%; width:320px; height:auto!important; }\r\n [class*=wrp] .image_responsive { -ms-interpolation-mode: bicubic; width:100%; width:280px; height:auto!important; }\r\n [class*=wrp] .columns, [class*=wrp] .column, [class*=wrp] .column-left, [class*=wrp] .column-right,\r\n [class*=wrp] .padded, [class*=wrp] .padded-left, [class*=wrp] .padded-right { width: 280px !important; height:auto !important;}\r\n [class*=wrp] .button { width: 260px !important; height:auto !important;}\r\n [class*=wrp] .padded-internal { width: 254px !important; height:auto !important;}\r\n [class*=wrp] .padding { width: 20px !important; }\r\n [class*=wrp] .center { text-align:center !important; margin: 0 auto;}\r\n [class*=wrp] .separator {border-bottom:1px solid #ffffff;}\r\n [class*=wrp] .separator_dark {border-bottom:1px solid #818181;}\r\n }\r\n -->\r\n <\/style>\r\n\r\n<\/head>\r\n<body style=\"margin: 0; padding: 0px; background: #FFFFFF; \">\r\n\r\n<table class=\"wrp\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; min-width:600px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\" bgcolor=\"#FFFFFF\">\r\n<tr>\r\n <td class=\"wrp\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; min-width:600px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px; color:#a0a0a0;\" class=\"padded\" align=\"center\">\r\n Ogni tuo desiderio &egrave; un ordine: noi ti aiutiamo ad esaudirlo.\r\n <\/td>\r\n <td class=\"padding\" style=\"padding: 0px; vertical-align:top; width:10px;\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\"><\/td>\r\n <\/tr>\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px; color:#a0a0a0;\" class=\"padded\" align=\"center\">\r\n <!-- init:ecovu -->\r\n <a href=\"${online_version_url}$\" style=\"font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color:#a0a0a0;\">Web version<\/a> |\r\n <!-- end:ecovu -->\r\n <a href=\"{{var subscriber.getUnsubscriptionLink()}}\" style=\"font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color:#a0a0a0;\">\r\n Unsubscribe\r\n <\/a>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; width:580px; font-size:0; line-height:1px; height: 1px; vertical-align: top\" class=\"padded\" align=\"left\">\r\n <a href=\"#\" target=\"_blank\">\r\n <img style=\"font-size:0; margin: 0px; padding: 0px; display: inline;\" src=\"http:\/\/static.contactlab.it\/contactlab\/responsive_2\/images\/logo.gif\" width=\"200\" height=\"68\" border=\"0\" alt=\"Your Logo Here\" class=\"image_responsive\">\r\n <\/a>\r\n <\/td>\r\n <\/tr>\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#FFFFFF\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"5\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table class=\"multi-col\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"left\">\r\n <table class=\"columns\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; min-width: 65px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; text-align: left;\" align=\"left\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" class=\"column separator_dark\">\r\n <table class=\"padded\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:middle; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" height=\"30\" class=\"padded\" align=\"center\">\r\n <a href=\"#\" style=\"color:#4D4C4C; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; text-decoration: none;\">link1<\/a>\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:6px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"6\" height=\"30\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\">\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" class=\"column separator_dark\">\r\n <table class=\"padded\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align: middle; width:19px; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" align=\"center\" class=\"onlydesktop\">\r\n |\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:middle; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" height=\"30\" class=\"padded\" align=\"center\">\r\n <a href=\"#\" style=\"color:#4D4C4C; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; text-decoration: none;\">link1<\/a>\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:6px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"6\" height=\"30\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\">\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" class=\"column separator_dark\">\r\n <table class=\"padded\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align: middle; width:19px; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" align=\"center\" class=\"onlydesktop\">\r\n |\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:middle; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" height=\"30\" class=\"padded\" align=\"center\">\r\n <a href=\"#\" style=\"color:#4D4C4C; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; text-decoration: none;\">link1<\/a>\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:6px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"6\" height=\"30\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\">\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" class=\"column separator_dark\">\r\n <table class=\"padded\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align: middle; width:19px; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" align=\"center\" class=\"onlydesktop\">\r\n |\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:middle; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" height=\"30\" class=\"padded\" align=\"center\">\r\n <a href=\"#\" style=\"color:#4D4C4C; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; text-decoration: none;\">link1<\/a>\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:6px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"6\" height=\"30\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\">\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" class=\"column separator_dark\">\r\n <table class=\"padded\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align: middle; width:19px; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" align=\"center\" class=\"onlydesktop\">\r\n |\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:middle; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" height=\"30\" class=\"padded\" align=\"center\">\r\n <a href=\"#\" style=\"color:#4D4C4C; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; text-decoration: none;\">link1<\/a>\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:6px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"6\" height=\"30\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\">\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" class=\"column separator_dark\">\r\n <table class=\"padded\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align: middle; width:19px; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" align=\"center\" class=\"onlydesktop\">\r\n |\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:middle; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" height=\"30\" class=\"padded\" align=\"center\">\r\n <a href=\"#\" style=\"color:#4D4C4C; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; text-decoration: none;\">link1<\/a>\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:6px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"6\" height=\"30\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\">\r\n <![endif]-->\r\n\r\n\r\n\r\n\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"2\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 2px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"2\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"2\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"left\">\r\n\r\n <span style=\"font-family: Arial, Helvetica, sans-serif; font-size: 25px; line-height: 48px; color:#A0A0A0;\">\r\n Ciao {{var subscriber.getCustomerFirstname()}}!\r\n <\/span>\r\n\r\n\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"left\">\r\n\r\n <span style=\"font-family: Arial, Helvetica, sans-serif; font-size: 21px; line-height: 20px; color:#a0a0a0;\">\r\n hai dimenticato qualcosa nel tuo carello.\r\n <\/span>\r\n\r\n\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"left\">\r\n\r\n <span style=\"font-family: Arial, Helvetica, sans-serif; font-size: 18px; line-height: 20px; color:#4d4c4c;\">\r\n Vuoi completare il tuo acquisto?\r\n <\/span>\r\n\r\n\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n{{var products.getProduct1()}}\r\n{{var products.getProduct2()}}\r\n{{var products.getProduct3()}}\r\n{{var products.getProduct4()}}\r\n{{var products.getProduct5()}}\r\n","template_text_preprocessed":null,"template_styles":null,"template_type":"2","template_subject":"Subject AC","template_sender_name":"CustomerSupport","template_sender_email":"name.surname@example.com","template_actual":"1","added_at":"2015-03-23 16:08:24","modified_at":"2015-04-01 13:41:03","enable_xml_delivery":"1","template_type_id":"1","flg_html_txt":"H","template_text_plain":"","template_pr_txt_1":null,"template_pr_html_1":"<!-- prod -->\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" bgcolor=\"#D2D2D2\"><img style=\"margin: 0px; padding: 0px; display: block; height: 2px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"2\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table class=\"two-col\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\">\r\n <table class=\"columns\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; width:580px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:188px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\" align=\"left\">\r\n <a href=\"#\" target=\"_blank\">\r\n <img style=\"margin:0px; padding:0px; display:inline;\" src=\"{{var product.getThumbnail()}}\" width=\"180\" height=\"90\" alt=\"Testo Alternativo\" border=\"0\" class=\"image_responsive\" \/>\r\n <\/a>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\">\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:388px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#4d4c4c; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px; font-weight: bold;\" class=\"padded\" align=\"left\">\r\n <span style=\"color:#009688; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px;\">x{{var product.getQty()}}<\/span>&nbsp;&nbsp;&nbsp;{{var product.getName()}}\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#a0a0a0; font-family: Arial, Helvetica, sans-serif; font-size:15px; line-height:20px;\" class=\"padded\" align=\"left\">\r\n {{var product.getSku()}}<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Non sint temporibus commodi sed dignissimos dicta possimus repudiandae fuga nobis illum, saepe porro ut rerum expedita, voluptate dolor unde rem vitae.\r\n <br \/>\r\n <b style=\"color:#4d4c4c\">{{var price}}\u00e2\u201a\u00ac<\/b>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n<!-- \/prod -->\r\n","template_pr_txt_2":null,"template_pr_html_2":"<!-- prod -->\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" bgcolor=\"#D2D2D2\"><img style=\"margin: 0px; padding: 0px; display: block; height: 2px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"2\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table class=\"two-col\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\">\r\n <table class=\"columns\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; width:580px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:188px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\" align=\"left\">\r\n <a href=\"#\" target=\"_blank\">\r\n <img style=\"margin:0px; padding:0px; display:inline;\" src=\"{{var product.getThumbnail()}}\" width=\"180\" height=\"90\" alt=\"Testo Alternativo\" border=\"0\" class=\"image_responsive\" \/>\r\n <\/a>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\">\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:388px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#4d4c4c; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px; font-weight: bold;\" class=\"padded\" align=\"left\">\r\n <span style=\"color:#009688; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px;\">x{{var product.getQty()}}<\/span>&nbsp;&nbsp;&nbsp;{{var product.getName()}}\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#a0a0a0; font-family: Arial, Helvetica, sans-serif; font-size:15px; line-height:20px;\" class=\"padded\" align=\"left\">\r\n {{var product.getSku()}}<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Non sint temporibus commodi sed dignissimos dicta possimus repudiandae fuga nobis illum, saepe porro ut rerum expedita, voluptate dolor unde rem vitae.\r\n <br \/>\r\n <b style=\"color:#4d4c4c\">{{var price}}\u00e2\u201a\u00ac<\/b>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n<!-- \/prod -->\r\n","template_pr_txt_3":null,"template_pr_html_3":"<!-- prod -->\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" bgcolor=\"#D2D2D2\"><img style=\"margin: 0px; padding: 0px; display: block; height: 2px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"2\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table class=\"two-col\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\">\r\n <table class=\"columns\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; width:580px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:188px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\" align=\"left\">\r\n <a href=\"#\" target=\"_blank\">\r\n <img style=\"margin:0px; padding:0px; display:inline;\" src=\"{{var product.getThumbnail()}}\" width=\"180\" height=\"90\" alt=\"Testo Alternativo\" border=\"0\" class=\"image_responsive\" \/>\r\n <\/a>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\">\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:388px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#4d4c4c; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px; font-weight: bold;\" class=\"padded\" align=\"left\">\r\n <span style=\"color:#009688; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px;\">x{{var product.getQty()}}<\/span>&nbsp;&nbsp;&nbsp;{{var product.getName()}}\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#a0a0a0; font-family: Arial, Helvetica, sans-serif; font-size:15px; line-height:20px;\" class=\"padded\" align=\"left\">\r\n {{var product.getSku()}}<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Non sint temporibus commodi sed dignissimos dicta possimus repudiandae fuga nobis illum, saepe porro ut rerum expedita, voluptate dolor unde rem vitae.\r\n <br \/>\r\n <b style=\"color:#4d4c4c\">{{var price}}\u00e2\u201a\u00ac<\/b>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n<!-- \/prod -->\r\n","template_pr_txt_4":null,"template_pr_html_4":"<!-- prod -->\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" bgcolor=\"#D2D2D2\"><img style=\"margin: 0px; padding: 0px; display: block; height: 2px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"2\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table class=\"two-col\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\">\r\n <table class=\"columns\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; width:580px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:188px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\" align=\"left\">\r\n <a href=\"#\" target=\"_blank\">\r\n <img style=\"margin:0px; padding:0px; display:inline;\" src=\"{{var product.getThumbnail()}}\" width=\"180\" height=\"90\" alt=\"Testo Alternativo\" border=\"0\" class=\"image_responsive\" \/>\r\n <\/a>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\">\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:388px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#4d4c4c; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px; font-weight: bold;\" class=\"padded\" align=\"left\">\r\n <span style=\"color:#009688; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px;\">x{{var product.getQty()}}<\/span>&nbsp;&nbsp;&nbsp;{{var product.getName()}}\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#a0a0a0; font-family: Arial, Helvetica, sans-serif; font-size:15px; line-height:20px;\" class=\"padded\" align=\"left\">\r\n {{var product.getSku()}}<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Non sint temporibus commodi sed dignissimos dicta possimus repudiandae fuga nobis illum, saepe porro ut rerum expedita, voluptate dolor unde rem vitae.\r\n <br \/>\r\n <b style=\"color:#4d4c4c\">{{var price}}\u00e2\u201a\u00ac<\/b>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n<!-- \/prod -->\r\n","template_pr_txt_5":null,"template_pr_html_5":"<!-- prod -->\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" bgcolor=\"#D2D2D2\"><img style=\"margin: 0px; padding: 0px; display: block; height: 2px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"2\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table class=\"two-col\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\">\r\n <table class=\"columns\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; width:580px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:188px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\" align=\"left\">\r\n <a href=\"#\" target=\"_blank\">\r\n <img style=\"margin:0px; padding:0px; display:inline;\" src=\"{{var product.getThumbnail()}}\" width=\"180\" height=\"90\" alt=\"Testo Alternativo\" border=\"0\" class=\"image_responsive\" \/>\r\n <\/a>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\">\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:388px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#4d4c4c; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px; font-weight: bold;\" class=\"padded\" align=\"left\">\r\n <span style=\"color:#009688; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px;\">x{{var product.getQty()}}<\/span>&nbsp;&nbsp;&nbsp;{{var product.getName()}}\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#a0a0a0; font-family: Arial, Helvetica, sans-serif; font-size:15px; line-height:20px;\" class=\"padded\" align=\"left\">\r\n {{var product.getSku()}}<br>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Non sint temporibus commodi sed dignissimos dicta possimus repudiandae fuga nobis illum, saepe porro ut rerum expedita, voluptate dolor unde rem vitae.\r\n <br \/>\r\n <b style=\"color:#4d4c4c\">{{var price}}\u00e2\u201a\u00ac<\/b>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n<!-- \/prod -->\r\n","default_product_snippet":"1","is_cron_enabled":"1","cron_date_range_start":null,"cron_date_range_end":null,"queue_delay_time":"0","reply_to":null,"is_test_mode":"0","product_image_size":"180x90","priority":"1","min_minutes_from_last_update":"2","max_minutes_from_last_update":"2880","min_value":"1.0000","max_value":null,"min_products":"1","max_products":null,"and_or":"AND"}
app/code/community/Contactlab/Template/docs/example-templates/subject_wl.json ADDED
@@ -0,0 +1 @@
 
1
+ {"template_code":"Wish List","template_text":"<!DOCTYPE html PUBLIC \"-\/\/W3C\/\/DTD XHTML 1.0 Transitional\/\/EN\" \"http:\/\/www.w3.org\/TR\/xhtml1\/DTD\/xhtml1-transitional.dtd\">\r\n<html>\r\n<head>\r\n\r\n <title>Wishlist<\/title>\r\n\r\n <meta name=\"viewport\" content=\"height=device-height, width=device-width, minimum-scale=1.0, user-scalable=no\" \/>\r\n <meta name=\"format-detection\" content=\"telephone=no\">\r\n <style type=\"text\/css\">\r\n <!--\r\n html { -webkit-text-size-adjust:none; }\r\n body, .ReadMsgBody, .ExternalClass, .multi-col .column {width: 100%; width:100% !important; margin: 0px; padding: 0px; display: block;}\r\n .ExternalClass * {line-height: 100%;}\r\n table, tr, td {margin:0; padding: 0;border-collapse:collapse; mso-line-height-alt:0px; mso-margin-top-alt:0px; mso-table-lspace:0px; mso-table-rspace:0px; }\r\n td { vertical-align: top; }\r\n a img, img{margin: 0px; padding: 0px; display: block;}\r\n a[href^=\"tel\"], a[href^=\"sms\"] {color:inherit; cursor:default; text-decoration:none;}\r\n .preheader{display:none !important; visibility:hidden; opacity:0; color:transparent; height:0; width:0; color:#ffffff; font-size:1px; line-height:0; overflow:hidden; mso-hide:all;}\r\n .two-col .column { width: 300px; }\r\n .two-col .padded { width: 280px; }\r\n .three-col .column {width: 190px;}\r\n .three-col .padded {width: 280px;}\r\n .four-col .column {width: 145px;}\r\n .four-col .padded {width: 280px;}\r\n .five-col .column {width: 116px;}\r\n .five-col .padded {width: 280px;}\r\n .multi-col .padded {min-width: 65px;}\r\n @media only screen\r\n and (max-width: 568px)\r\n {\r\n [class*=mobileversion] {display:block !important; float:none !important; width:100% !important; height:auto !important; overflow:visible !important; line-height: normal !important; max-height:none !important; margin: 0; padding: 0px;}\r\n [class*=onlydesktop] {display:none !important; width:0 !important;}\r\n [class*=wrp] { min-width: 320px !important;}\r\n [class*=wrp] .padded320 { width: 320px !important; height:auto !important;}\r\n [class*=wrp] img { max-width: 100%; height: auto; }\r\n [class*=wrp] .image_responsive320 { -ms-interpolation-mode: bicubic; width:100%; width:320px; height:auto!important; }\r\n [class*=wrp] .image_responsive { -ms-interpolation-mode: bicubic; width:100%; width:280px; height:auto!important; }\r\n [class*=wrp] .columns, [class*=wrp] .column, [class*=wrp] .column-left, [class*=wrp] .column-right,\r\n [class*=wrp] .padded, [class*=wrp] .padded-left, [class*=wrp] .padded-right { width: 280px !important; height:auto !important;}\r\n [class*=wrp] .button { width: 260px !important; height:auto !important;}\r\n [class*=wrp] .padded-internal { width: 254px !important; height:auto !important;}\r\n [class*=wrp] .padding { width: 20px !important; }\r\n [class*=wrp] .center { text-align:center !important; margin: 0 auto;}\r\n [class*=wrp] .separator {border-bottom:1px solid #ffffff;}\r\n [class*=wrp] .separator_dark {border-bottom:1px solid #818181;}\r\n }\r\n -->\r\n <\/style>\r\n\r\n<\/head>\r\n<body style=\"margin: 0; padding: 0px; background: url('http:\/\/static.contactlab.it\/magento\/images\/sfondo.jpg');\" background=\"http:\/\/static.contactlab.it\/magento\/images\/sfondo.jpg\">\r\n\r\n<table class=\"wrp\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; min-width:600px; background: url('http:\/\/static.contactlab.it\/magento\/images\/sfondo.jpg');\" background=\"http:\/\/static.contactlab.it\/magento\/images\/sfondo.jpg\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\" bgcolor=\"#FFFFFF\">\r\n<tr>\r\n <td class=\"wrp\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; min-width:600px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px; color:#a0a0a0;\" class=\"padded\" align=\"center\">\r\n Ogni tuo desiderio &egrave; un ordine: noi ti aiutiamo ad esaudirlo.\r\n <\/td>\r\n <td class=\"padding\" style=\"padding: 0px; vertical-align:top; width:10px;\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" ><\/td>\r\n <\/tr>\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px; color:#a0a0a0;\" class=\"padded\" align=\"center\">\r\n <!-- init:ecovu -->\r\n <a href=\"${online_version_url}$\" style=\"font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color:#a0a0a0;\">Web version<\/a> |\r\n <!-- end:ecovu -->\r\n <a href=\"{{var subscriber.getUnsubscriptionLink()}}\" style=\"font-family: Arial, Helvetica, sans-serif; font-size: 12px; line-height: 18px; color:#a0a0a0;\">\r\n Unsubscribe\r\n <\/a>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; width:580px; font-size:0; line-height:1px; height: 1px; vertical-align: top\" class=\"padded\" align=\"left\">\r\n <a href=\"#\" target=\"_blank\">\r\n <img style=\"font-size:0; margin: 0px; padding: 0px; display: inline;\" src=\"http:\/\/static.contactlab.it\/contactlab\/responsive_2\/images\/logo.gif\" width=\"200\" height=\"68\" border=\"0\" alt=\"Your Logo Here\" class=\"image_responsive\">\r\n <\/a>\r\n <\/td>\r\n <\/tr>\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#FFFFFF\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"5\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table class=\"multi-col\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"left\">\r\n <table class=\"columns\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; min-width: 65px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; text-align: left;\" align=\"left\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" class=\"column separator_dark\">\r\n <table class=\"padded\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:middle; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" height=\"30\" class=\"padded\" align=\"center\" >\r\n <a href=\"#\" style=\"color:#4D4C4C; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; text-decoration: none;\">link1<\/a>\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:6px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"6\" height=\"30\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\" >\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" class=\"column separator_dark\">\r\n <table class=\"padded\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align: middle; width:19px; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" align=\"center\" class=\"onlydesktop\">\r\n |\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:middle; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" height=\"30\" class=\"padded\" align=\"center\" >\r\n <a href=\"#\" style=\"color:#4D4C4C; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; text-decoration: none;\">link1<\/a>\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:6px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"6\" height=\"30\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\" >\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" class=\"column separator_dark\">\r\n <table class=\"padded\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align: middle; width:19px; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" align=\"center\" class=\"onlydesktop\">\r\n |\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:middle; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" height=\"30\" class=\"padded\" align=\"center\" >\r\n <a href=\"#\" style=\"color:#4D4C4C; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; text-decoration: none;\">link1<\/a>\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:6px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"6\" height=\"30\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\" >\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" class=\"column separator_dark\">\r\n <table class=\"padded\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align: middle; width:19px; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" align=\"center\" class=\"onlydesktop\">\r\n |\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:middle; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" height=\"30\" class=\"padded\" align=\"center\" >\r\n <a href=\"#\" style=\"color:#4D4C4C; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; text-decoration: none;\">link1<\/a>\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:6px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"6\" height=\"30\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\" >\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" class=\"column separator_dark\">\r\n <table class=\"padded\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align: middle; width:19px; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" align=\"center\" class=\"onlydesktop\">\r\n |\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:middle; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" height=\"30\" class=\"padded\" align=\"center\" >\r\n <a href=\"#\" style=\"color:#4D4C4C; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; text-decoration: none;\">link1<\/a>\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:6px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"6\" height=\"30\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\" >\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" class=\"column separator_dark\">\r\n <table class=\"padded\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align: middle; width:19px; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" align=\"center\" class=\"onlydesktop\">\r\n |\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:3px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"3\" height=\"30\" border=\"0\"><\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:middle; height: 30px; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; color:#999999;\" height=\"30\" class=\"padded\" align=\"center\" >\r\n <a href=\"#\" style=\"color:#4D4C4C; font-family: Arial, Helvetica, sans-serif; font-size:12px; line-height:16px; text-decoration: none;\">link1<\/a>\r\n <\/td>\r\n\r\n <td style=\"padding: 0px; vertical-align:top; width:6px;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 30px;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"6\" height=\"30\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\" >\r\n <![endif]-->\r\n\r\n\r\n\r\n\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"2\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 2px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"2\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"2\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"left\">\r\n\r\n <span style=\"font-family: Arial, Helvetica, sans-serif; font-size: 25px; line-height: 48px; color:#f9a825;\">\r\n Ciao {{var subscriber.getCustomerFirstname()}}!\r\n <\/span>\r\n\r\n\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"left\">\r\n\r\n <span style=\"font-family: Arial, Helvetica, sans-serif; font-size: 21px; line-height: 20px; color:#f9a825;\">\r\n ecco i prodotti che hai selezionato per la tua wishlist\r\n <\/span>\r\n\r\n\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n\r\n\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" align=\"right\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" bgcolor=\"#f9a825\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px; height: 30px;\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"30\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align: middle; font-family: Arial, Helvetica, sans-serif; font-size: 18px; line-height: 24px; color:#FFFFFF; text-decoration: none;\" class=\"button\" align=\"center\" valign=\"middle\">\r\n <a href=\"http:\/\/magento.contactlab.com\" target=\"_blank\" style=\"font-family: Arial, Helvetica, sans-serif; font-size: 18px; line-height: 24px; color:#FFFFFF; text-decoration: none;\">\r\n ACQUISTA ORA\r\n <\/a>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px; height: 30px;\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"30\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"left\">\r\n\r\n <span style=\"font-family: Arial, Helvetica, sans-serif; font-size: 18px; line-height: 20px; color:#4d4c4c;\">\r\n I tuoi prodotti:\r\n <\/span>\r\n\r\n\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" bgcolor=\"#D2D2D2\"><img style=\"margin: 0px; padding: 0px; display: block; height: 2px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"2\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n\r\n{{var products.getProduct1()}}\r\n{{var products.getProduct2()}}\r\n{{var products.getProduct3()}}\r\n{{var products.getProduct4()}}\r\n{{var products.getProduct5()}}","template_text_preprocessed":null,"template_styles":null,"template_type":"2","template_subject":"Subject WL","template_sender_name":"CustomerSupport","template_sender_email":"name.surname@example.com","template_actual":"1","added_at":"2015-03-03 14:34:21","modified_at":"2015-05-18 11:41:40","enable_xml_delivery":"1","template_type_id":"2","flg_html_txt":"B","template_text_plain":"<!-- Start Template(text) -->\r\n\r\nWishlist Reminder in txt\r\n\r\nHi, {{var subscriber.getCustomerFirstname()}}!\r\nFollow this link to unsubscribe {{var subscriber.getUnsubscriptionLink()}}\r\nLorem ipsum dolor sit amet.\r\n\r\n{{var products.getProduct1()}}{{var products.getProduct2()}}{{var products.getProduct3()}}{{var products.getProduct4()}}{{var products.getProduct5()}}\r\n\r\nFine dei prodotti\r\n\r\n<!-- End Template(text) -->","template_pr_txt_1":"<!-- Start Template prodotto nr 1 (text) -->\r\n\r\n{{var product.getSku()}} {{var product.getName()}} [{{var product.getQty()}}]\r\n{{var price}}\r\n\r\n<!-- End Template prodotto nr 1 (text) -->","template_pr_html_1":"<!-- prod init -->\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table class=\"two-col\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\">\r\n <table class=\"columns\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; width:580px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:188px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\" align=\"left\">\r\n <a href=\"#\" target=\"_blank\" >\r\n <img style=\"margin:0px; padding:0px; display:inline;\" src=\"{{var product.getThumbnail()}}\" width=\"180\" height=\"90\" alt=\"Testo Alternativo\" border=\"0\" class=\"image_responsive\" \/>\r\n <\/a>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\" >\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:388px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#4d4c4c; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px; font-weight: bold;\" class=\"padded\" align=\"left\">\r\n <span style=\"color:#f9a825; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px;\">x{{var product.getQty()}}<\/span>&nbsp;&nbsp;&nbsp;{{var product.getName()}}\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#a0a0a0; font-family: Arial, Helvetica, sans-serif; font-size:15px; line-height:20px;\" class=\"padded\" align=\"left\">\r\n {{var product.getSku()}}<br>{{var product.getDescription()}}\r\n <br \/>\r\n <b style=\"color:#4d4c4c\">{{var price}}\u00e2\u201a\u00ac<\/b>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" bgcolor=\"#D2D2D2\"><img style=\"margin: 0px; padding: 0px; display: block; height: 2px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"2\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n<!-- prod end -->","template_pr_txt_2":"<!-- Start Template prodotto nr 2 (text) -->\r\n\r\n{{var product.getSku()}} {{var product.getName()}} [{{var product.getQty()}}]\r\n{{var price}}\r\n\r\n<!-- End Template prodotto nr 2 (text) -->","template_pr_html_2":"<!-- prod init -->\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table class=\"two-col\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\">\r\n <table class=\"columns\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; width:580px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:188px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\" align=\"left\">\r\n <a href=\"#\" target=\"_blank\" >\r\n <img style=\"margin:0px; padding:0px; display:inline;\" src=\"{{var product.getThumbnail()}}\" width=\"180\" height=\"90\" alt=\"Testo Alternativo\" border=\"0\" class=\"image_responsive\" \/>\r\n <\/a>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\" >\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:388px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#4d4c4c; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px; font-weight: bold;\" class=\"padded\" align=\"left\">\r\n <span style=\"color:#f9a825; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px;\">x{{var product.getQty()}}<\/span>&nbsp;&nbsp;&nbsp;{{var product.getName()}}\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#a0a0a0; font-family: Arial, Helvetica, sans-serif; font-size:15px; line-height:20px;\" class=\"padded\" align=\"left\">\r\n {{var product.getSku()}}<br>{{var product.getDescription()}}\r\n <br \/>\r\n <b style=\"color:#4d4c4c\">{{var price}}\u00e2\u201a\u00ac<\/b>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" bgcolor=\"#D2D2D2\"><img style=\"margin: 0px; padding: 0px; display: block; height: 2px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"2\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n<!-- prod end -->","template_pr_txt_3":"<!-- Start Template prodotto nr 3 (text) -->\r\n\r\n{{var product.getSku()}} {{var product.getName()}} [{{var product.getQty()}}]\r\n{{var price}}\r\n\r\n<!-- End Template prodotto nr 3 (text) -->","template_pr_html_3":"<!-- prod init -->\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table class=\"two-col\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\">\r\n <table class=\"columns\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; width:580px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:188px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\" align=\"left\">\r\n <a href=\"#\" target=\"_blank\" >\r\n <img style=\"margin:0px; padding:0px; display:inline;\" src=\"{{var product.getThumbnail()}}\" width=\"180\" height=\"90\" alt=\"Testo Alternativo\" border=\"0\" class=\"image_responsive\" \/>\r\n <\/a>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\" >\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:388px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#4d4c4c; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px; font-weight: bold;\" class=\"padded\" align=\"left\">\r\n <span style=\"color:#f9a825; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px;\">x{{var product.getQty()}}<\/span>&nbsp;&nbsp;&nbsp;{{var product.getName()}}\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#a0a0a0; font-family: Arial, Helvetica, sans-serif; font-size:15px; line-height:20px;\" class=\"padded\" align=\"left\">\r\n {{var product.getSku()}}<br>{{var product.getDescription()}}\r\n <br \/>\r\n <b style=\"color:#4d4c4c\">{{var price}}\u00e2\u201a\u00ac<\/b>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" bgcolor=\"#D2D2D2\"><img style=\"margin: 0px; padding: 0px; display: block; height: 2px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"2\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n<!-- prod end -->","template_pr_txt_4":"<!-- Start Template prodotto nr 4 (text) -->\r\n\r\n{{var product.getSku()}} {{var product.getName()}} [{{var product.getQty()}}]\r\n{{var price}}\r\n\r\n<!-- End Template prodotto nr 4 (text) -->","template_pr_html_4":"<!-- prod init -->\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table class=\"two-col\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\">\r\n <table class=\"columns\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; width:580px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:188px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\" align=\"left\">\r\n <a href=\"#\" target=\"_blank\" >\r\n <img style=\"margin:0px; padding:0px; display:inline;\" src=\"{{var product.getThumbnail()}}\" width=\"180\" height=\"90\" alt=\"Testo Alternativo\" border=\"0\" class=\"image_responsive\" \/>\r\n <\/a>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\" >\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:388px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#4d4c4c; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px; font-weight: bold;\" class=\"padded\" align=\"left\">\r\n <span style=\"color:#f9a825; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px;\">x{{var product.getQty()}}<\/span>&nbsp;&nbsp;&nbsp;{{var product.getName()}}\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#a0a0a0; font-family: Arial, Helvetica, sans-serif; font-size:15px; line-height:20px;\" class=\"padded\" align=\"left\">\r\n {{var product.getSku()}}<br>{{var product.getDescription()}}\r\n <br \/>\r\n <b style=\"color:#4d4c4c\">{{var price}}\u00e2\u201a\u00ac<\/b>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" bgcolor=\"#D2D2D2\"><img style=\"margin: 0px; padding: 0px; display: block; height: 2px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"2\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n<!-- prod end -->","template_pr_txt_5":"<!-- Start Template prodotto nr 5 (text) -->\r\n\r\n{{var product.getSku()}} {{var product.getName()}} [{{var product.getQty()}}]\r\n{{var price}}\r\n\r\n<!-- End Template prodotto nr 5 (text) -->","template_pr_html_5":"<!-- prod init -->\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table class=\"two-col\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\" >\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\">\r\n <table class=\"columns\" style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none; width:580px;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\">\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:188px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\" align=\"left\">\r\n <a href=\"#\" target=\"_blank\" >\r\n <img style=\"margin:0px; padding:0px; display:inline;\" src=\"{{var product.getThumbnail()}}\" width=\"180\" height=\"90\" alt=\"Testo Alternativo\" border=\"0\" class=\"image_responsive\" \/>\r\n <\/a>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:180px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <!--[if mso]>\r\n <\/td>\r\n <td style=\"padding-top:0;padding-bottom:0;padding-right:0;padding-left:0;vertical-align:top;\" >\r\n <![endif]-->\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:388px;\" class=\"column\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"right\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#4d4c4c; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px; font-weight: bold;\" class=\"padded\" align=\"left\">\r\n <span style=\"color:#f9a825; font-family: Arial, Helvetica, sans-serif; font-size:18px; line-height:20px;\">x{{var product.getQty()}}<\/span>&nbsp;&nbsp;&nbsp;{{var product.getName()}}\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px; color:#a0a0a0; font-family: Arial, Helvetica, sans-serif; font-size:15px; line-height:20px;\" class=\"padded\" align=\"left\">\r\n {{var product.getSku()}}<br>{{var product.getDescription()}}\r\n <br \/>\r\n <b style=\"color:#4d4c4c\">{{var price}}\u00e2\u201a\u00ac<\/b>\r\n <\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:380px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 5px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"5\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <\/tr>\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n <\/table>\r\n\r\n\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" bgcolor=\"#ffffff\">\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\" align=\"center\">\r\n <table style=\"border-collapse:collapse; border-spacing:0; -webkit-text-size-adjust:none;\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" width=\"100%\">\r\n\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top;\" bgcolor=\"#D2D2D2\"><img style=\"margin: 0px; padding: 0px; display: block; height: 2px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"2\" border=\"0\"><\/td>\r\n <\/tr>\r\n <tr>\r\n <td style=\"padding: 0px; vertical-align:top; width:580px;\" class=\"padded\"><img style=\"margin: 0px; padding: 0px; display: block; height: 10px;\" src=\"http:\/\/static.contactlab.it\/spacer.gif\" width=\"1\" height=\"10\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n\r\n\r\n <\/table>\r\n <\/td>\r\n <td style=\"padding: 0px; vertical-align:top; width:10px;\" class=\"padding\"><img style=\"margin: 0px; padding: 0px; display: block;\" src=\"http:\/\/static.contactlab.it\/img\/spacer.gif\" width=\"10\" height=\"1\" border=\"0\"><\/td>\r\n <\/tr>\r\n\r\n <\/table>\r\n<!-- prod end -->","default_product_snippet":"1","is_cron_enabled":"1","cron_date_range_start":null,"cron_date_range_end":null,"queue_delay_time":"0","reply_to":null,"is_test_mode":"0","product_image_size":"180x90","priority":"0","min_minutes_from_last_update":"1","max_minutes_from_last_update":"5000","min_value":"1.0000","max_value":null,"min_products":"1","max_products":null,"and_or":"AND"}
app/code/community/Contactlab/Template/docs/release-notes/0.8.18.html CHANGED
@@ -1,4 +1,4 @@
1
  <ul>
2
- <li><del>Attemps</del> <strong>label</strong> fixed to <q>Attempts</q></li>
3
  <li>Removed <del>_prepareColumns</del> debug echo</li>
4
  </ul>
1
  <ul>
2
+ <li><del>Attempts</del> <strong>label</strong> fixed to <q>Attempts</q></li>
3
  <li>Removed <del>_prepareColumns</del> debug echo</li>
4
  </ul>
app/code/community/Contactlab/Template/docs/release-notes/0.8.20.html CHANGED
@@ -1,4 +1,4 @@
1
  <ul>
2
  <li><strong>Fixed</strong> removed redundant system template types added during extension install process.</li>
3
- <li><strong>Feature</strong> sort products by row value in abandoned cart and by qty in wishlist remind.</li>
4
  </ul>
1
  <ul>
2
  <li><strong>Fixed</strong> removed redundant system template types added during extension install process.</li>
3
+ <li><strong>Feature</strong> sort products by row value in abandoned cart and by qty in Wishlist Reminder.</li>
4
  </ul>
app/code/community/Contactlab/Template/docs/release-notes/0.8.21.html ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <ul>
2
+ <li><strong>Feature</strong> created two sample templates during upgrade process</li>
3
+ </ul>
app/code/community/Contactlab/Template/docs/release-notes/0.8.22.html ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <ul>
2
+ <li>Removed default values from <code>config.xml</code>.</li>
3
+ <li>XML Delivery status, shows now all hidden tasks.</li>
4
+ </ul>
app/code/community/Contactlab/Template/docs/release-notes/0.8.23.html ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <ul>
2
+ <li>Altered <code style="font-weight: bold">template_text</code>,
3
+ <code style="font-weight: bold">template_text_preprocessed</code>
4
+ and <code style="font-weight: bold">template_text_plain</code> columns type
5
+ in <code style="font-weight: bold">mediumtext</code>.</li>
6
+ </ul>
app/code/community/Contactlab/Template/docs/release-notes/0.8.24.html ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <ul>
2
+ <li><strong>Feature</strong> Added store view attribute to Newsletter Template table.</li>
3
+ <li><strong>Feature</strong> Scan of newsletter templates by store view.</li>
4
+ <li><strong>Fix</strong> Restored some missing validation on Template edit form.</li>
5
+ </ul>
app/code/community/Contactlab/Template/docs/release-notes/0.9.0.html ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <ul>
2
+ <li>Modified adminhtml controllers due to SUPEE-6788 Magento patch.</li>
3
+ </ul>
app/code/community/Contactlab/Template/etc/adminhtml.xml CHANGED
@@ -6,9 +6,9 @@
6
  <contactlab>
7
  <children>
8
  <template_types translate="title" module="contactlab_template">
9
- <title>Template types</title>
10
  <sort_order>50</sort_order>
11
- <action>contactlab_template/adminhtml_types</action>
12
  </template_types>
13
  </children>
14
  </contactlab>
@@ -24,9 +24,13 @@
24
  <contactlab>
25
  <children>
26
  <template_types translate="title" module="contactlab_template">
27
- <title>Template types</title>
28
  <sort_order>50</sort_order>
29
  </template_types>
 
 
 
 
30
  </children>
31
  </contactlab>
32
  </children>
@@ -44,7 +48,7 @@
44
  <sort_order>110</sort_order>
45
  </contactlab_template_cart>
46
  <contactlab_template_wishlist translate="title" module="contactlab_template">
47
- <title><![CDATA[Recurring Email &mdash; Wishlist Remind]]></title>
48
  <sort_order>120</sort_order>
49
  </contactlab_template_wishlist>
50
  </children>
6
  <contactlab>
7
  <children>
8
  <template_types translate="title" module="contactlab_template">
9
+ <title>Template Types</title>
10
  <sort_order>50</sort_order>
11
+ <action>adminhtml/contactlab_template_types</action>
12
  </template_types>
13
  </children>
14
  </contactlab>
24
  <contactlab>
25
  <children>
26
  <template_types translate="title" module="contactlab_template">
27
+ <title>Template Types</title>
28
  <sort_order>50</sort_order>
29
  </template_types>
30
+ <template_scan translate="title" module="contactlab_template">
31
+ <title>Template scan</title>
32
+ <sort_order>55</sort_order>
33
+ </template_scan>
34
  </children>
35
  </contactlab>
36
  </children>
48
  <sort_order>110</sort_order>
49
  </contactlab_template_cart>
50
  <contactlab_template_wishlist translate="title" module="contactlab_template">
51
+ <title><![CDATA[Recurring Email &mdash; Wishlist Reminder]]></title>
52
  <sort_order>120</sort_order>
53
  </contactlab_template_wishlist>
54
  </children>
app/code/community/Contactlab/Template/etc/config.xml CHANGED
@@ -2,8 +2,8 @@
2
  <config>
3
  <modules>
4
  <Contactlab_Template>
5
- <version>0.8.20</version>
6
- <description>Abandoned cart / Wishlist remind and generic email sending through ContactLab XML Delivery</description>
7
  </Contactlab_Template>
8
  </modules>
9
  <global>
@@ -90,15 +90,19 @@
90
  </contactlab_commons_task_collection_load_old_tasks>
91
  </events>
92
  </global>
93
- <admin>
94
  <routers>
95
  <contactlab_template>
96
- <use>admin</use>
97
  <args>
98
  <module>Contactlab_Template</module>
99
  <frontName>contactlab_template</frontName>
100
  </args>
101
  </contactlab_template>
 
 
 
 
102
  <adminhtml>
103
  <args>
104
  <modules>
@@ -143,36 +147,36 @@
143
  <default>
144
  <contactlab_template>
145
  <global>
146
- <enabled>0</enabled>
147
  </global>
148
  <queue>
149
- <delivery_method>manual</delivery_method>
150
  <export_remote_path>xmld</export_remote_path>
151
  <contactlab_template_model_task_processnewsletterqueuerunner_interval>10</contactlab_template_model_task_processnewsletterqueuerunner_interval>
152
  <contactlab_template_model_task_processnewsletterqueuerunner_retries>3</contactlab_template_model_task_processnewsletterqueuerunner_retries>
153
  <contactlab_template_model_task_checknewsletterqueuerunner_interval>2</contactlab_template_model_task_checknewsletterqueuerunner_interval>
154
- <contactlab_template_model_task_checknewsletterqueuerunner_retries>30</contactlab_template_model_task_checknewsletterqueuerunner_retries>
155
  </queue>
156
  <generic>
157
- <send_to_not_subscribed>0</send_to_not_subscribed>
158
  </generic>
159
  <wishlist>
160
- <enabled>0</enabled>
161
  <send_to_not_subscribed>0</send_to_not_subscribed>
162
  <min_minutes_from_last_update>120</min_minutes_from_last_update>
163
  <min_value>5</min_value>
164
  <max_value></max_value>
165
  <min_products>1</min_products>
166
- <and_or>AND</and_or>
167
  </wishlist>
168
  <cart>
169
- <enabled>0</enabled>
170
  <send_to_not_subscribed>0</send_to_not_subscribed>
171
  <min_minutes_from_last_update>120</min_minutes_from_last_update>
172
  <min_value>5</min_value>
173
  <max_value></max_value>
174
  <min_products>1</min_products>
175
- <and_or>AND</and_or>
176
  </cart>
177
  </contactlab_template>
178
  </default>
2
  <config>
3
  <modules>
4
  <Contactlab_Template>
5
+ <version>0.9.1</version>
6
+ <description>Abandoned Cart, Wishlist Reminder and generic emails sent using ContactLab XML Delivery.</description>
7
  </Contactlab_Template>
8
  </modules>
9
  <global>
90
  </contactlab_commons_task_collection_load_old_tasks>
91
  </events>
92
  </global>
93
+ <frontend>
94
  <routers>
95
  <contactlab_template>
96
+ <use>default</use>
97
  <args>
98
  <module>Contactlab_Template</module>
99
  <frontName>contactlab_template</frontName>
100
  </args>
101
  </contactlab_template>
102
+ </routers>
103
+ </frontend>
104
+ <admin>
105
+ <routers>
106
  <adminhtml>
107
  <args>
108
  <modules>
147
  <default>
148
  <contactlab_template>
149
  <global>
150
+ <!--enabled>0</enabled-->
151
  </global>
152
  <queue>
153
+ <!--delivery_method>manual</delivery_method>
154
  <export_remote_path>xmld</export_remote_path>
155
  <contactlab_template_model_task_processnewsletterqueuerunner_interval>10</contactlab_template_model_task_processnewsletterqueuerunner_interval>
156
  <contactlab_template_model_task_processnewsletterqueuerunner_retries>3</contactlab_template_model_task_processnewsletterqueuerunner_retries>
157
  <contactlab_template_model_task_checknewsletterqueuerunner_interval>2</contactlab_template_model_task_checknewsletterqueuerunner_interval>
158
+ <contactlab_template_model_task_checknewsletterqueuerunner_retries>30</contactlab_template_model_task_checknewsletterqueuerunner_retries-->
159
  </queue>
160
  <generic>
161
+ <!--send_to_not_subscribed>0</send_to_not_subscribed-->
162
  </generic>
163
  <wishlist>
164
+ <!--enabled>0</enabled>
165
  <send_to_not_subscribed>0</send_to_not_subscribed>
166
  <min_minutes_from_last_update>120</min_minutes_from_last_update>
167
  <min_value>5</min_value>
168
  <max_value></max_value>
169
  <min_products>1</min_products>
170
+ <and_or>AND</and_or-->
171
  </wishlist>
172
  <cart>
173
+ <!--enabled>0</enabled>
174
  <send_to_not_subscribed>0</send_to_not_subscribed>
175
  <min_minutes_from_last_update>120</min_minutes_from_last_update>
176
  <min_value>5</min_value>
177
  <max_value></max_value>
178
  <min_products>1</min_products>
179
+ <and_or>AND</and_or-->
180
  </cart>
181
  </contactlab_template>
182
  </default>
app/code/community/Contactlab/Template/etc/system.xml CHANGED
@@ -20,7 +20,7 @@
20
  <expanded>0</expanded>
21
  <fields>
22
  <enabled translate="label">
23
- <label>Enable cron sending for this store</label>
24
  <frontend_type>select</frontend_type>
25
  <source_model>adminhtml/system_config_source_yesno</source_model>
26
  <sort_order>10</sort_order>
@@ -35,7 +35,7 @@
35
  <show_in_default>1</show_in_default>
36
  <show_in_website>1</show_in_website>
37
  <show_in_store>1</show_in_store>
38
- <comment>Comma separated values</comment>
39
  </test_recipients>
40
  </fields>
41
  </global>
@@ -58,7 +58,7 @@
58
  <show_in_store>1</show_in_store>
59
  </enabled>
60
  <send_to_not_subscribed translate="label">
61
- <label>Send generic campaign to not subscribed customers</label>
62
  <frontend_type>select</frontend_type>
63
  <source_model>adminhtml/system_config_source_yesno</source_model>
64
  <sort_order>20</sort_order>
@@ -128,17 +128,17 @@
128
 
129
 
130
  <queue translate="label">
131
- <label>XML Delivery Queue</label>
132
  <frontend_type>text</frontend_type>
133
  <sort_order>70</sort_order>
134
  <show_in_default>1</show_in_default>
135
  <show_in_website>1</show_in_website>
136
  <show_in_store>1</show_in_store>
137
  <expanded>0</expanded>
138
- <comment><![CDATA[All values are specified in <strong>minutes</strong>.]]></comment>
139
  <fields>
140
  <contactlab_template_model_task_processnewsletterqueuerunner_interval translate="label">
141
- <label>Interval between sending attempts</label>
142
  <frontend_type>text</frontend_type>
143
  <sort_order>200</sort_order>
144
  <show_in_default>1</show_in_default>
@@ -146,7 +146,7 @@
146
  <show_in_store>1</show_in_store>
147
  </contactlab_template_model_task_processnewsletterqueuerunner_interval>
148
  <contactlab_template_model_task_processnewsletterqueuerunner_retries translate="label">
149
- <label>Number of sending attempts</label>
150
  <frontend_type>text</frontend_type>
151
  <sort_order>210</sort_order>
152
  <show_in_default>1</show_in_default>
@@ -209,7 +209,7 @@
209
  <config_path>contactlab_template/cart/enabled</config_path>
210
  </enabled>
211
  <send_to_not_subscribed translate="label">
212
- <label>Send abandoned cart email to not subscribed customers</label>
213
  <frontend_type>select</frontend_type>
214
  <source_model>adminhtml/system_config_source_yesno</source_model>
215
  <sort_order>20</sort_order>
@@ -219,7 +219,7 @@
219
  <config_path>contactlab_template/cart/send_to_not_subscribed</config_path>
220
  </send_to_not_subscribed>
221
  <min_minutes_from_last_update translate="label">
222
- <label>Minimum minutes value to consider a Abandoned Cart in email sending</label>
223
  <frontend_type>text</frontend_type>
224
  <sort_order>30</sort_order>
225
  <show_in_default>1</show_in_default>
@@ -229,7 +229,7 @@
229
  <config_path>contactlab_template/cart/min_minutes_from_last_update</config_path>
230
  </min_minutes_from_last_update>
231
  <max_minutes_from_last_update translate="label">
232
- <label>Maximum minutes value to consider a Abandoned Cart in email sending</label>
233
  <frontend_type>text</frontend_type>
234
  <sort_order>40</sort_order>
235
  <show_in_default>1</show_in_default>
@@ -239,7 +239,7 @@
239
  <config_path>contactlab_template/cart/max_minutes_from_last_update</config_path>
240
  </max_minutes_from_last_update>
241
  <min_value translate="label">
242
- <label>Cart minimum amount value</label>
243
  <frontend_type>text</frontend_type>
244
  <sort_order>50</sort_order>
245
  <show_in_default>1</show_in_default>
@@ -249,7 +249,7 @@
249
  <config_path>contactlab_template/cart/min_value</config_path>
250
  </min_value>
251
  <max_value translate="label">
252
- <label>Cart maximum amount value</label>
253
  <frontend_type>text</frontend_type>
254
  <sort_order>60</sort_order>
255
  <show_in_default>1</show_in_default>
@@ -279,7 +279,7 @@
279
  <config_path>contactlab_template/cart/max_products</config_path>
280
  </max_products>
281
  <and_or translate="label">
282
- <label>And / Or condition values</label>
283
  <frontend_type>select</frontend_type>
284
  <source_model>contactlab_template/system_config_source_andOr</source_model>
285
  <sort_order>90</sort_order>
@@ -295,7 +295,7 @@
295
 
296
 
297
  <contactlab_template_wishlist translate="label" module="contactlab_template">
298
- <label><![CDATA[Recurring Email &mdash; Wishlist Remind]]></label>
299
  <tab>contactlab</tab>
300
  <frontend_type>text</frontend_type>
301
  <sort_order>70</sort_order>
@@ -304,7 +304,7 @@
304
  <show_in_store>1</show_in_store>
305
  <groups>
306
  <wishlist translate="label">
307
- <label>Wishlist remind</label>
308
  <frontend_type>text</frontend_type>
309
  <sort_order>10</sort_order>
310
  <show_in_default>1</show_in_default>
@@ -313,7 +313,7 @@
313
  <expanded>0</expanded>
314
  <fields>
315
  <enabled translate="label">
316
- <label>Enable Wishlist remind</label>
317
  <frontend_type>select</frontend_type>
318
  <source_model>adminhtml/system_config_source_yesno</source_model>
319
  <sort_order>10</sort_order>
@@ -323,7 +323,7 @@
323
  <config_path>contactlab_template/wishlist/enabled</config_path>
324
  </enabled>
325
  <send_to_not_subscribed translate="label">
326
- <label>Send wishlist remind email to not subscribed customers</label>
327
  <frontend_type>select</frontend_type>
328
  <source_model>adminhtml/system_config_source_yesno</source_model>
329
  <sort_order>20</sort_order>
@@ -333,7 +333,7 @@
333
  <config_path>contactlab_template/wishlist/send_to_not_subscribed</config_path>
334
  </send_to_not_subscribed>
335
  <min_minutes_from_last_update translate="label">
336
- <label>Minimum minutes value to consider a Wishlist in email sending</label>
337
  <frontend_type>text</frontend_type>
338
  <sort_order>30</sort_order>
339
  <show_in_default>1</show_in_default>
@@ -343,7 +343,7 @@
343
  <config_path>contactlab_template/wishlist/min_minutes_from_last_update</config_path>
344
  </min_minutes_from_last_update>
345
  <max_minutes_from_last_update translate="label">
346
- <label>Maximum minutes value to consider a Wishlist in email sending</label>
347
  <frontend_type>text</frontend_type>
348
  <sort_order>40</sort_order>
349
  <show_in_default>1</show_in_default>
@@ -353,7 +353,7 @@
353
  <config_path>contactlab_template/wishlist/max_minutes_from_last_update</config_path>
354
  </max_minutes_from_last_update>
355
  <min_value translate="label">
356
- <label>Wishlist minimum amount value</label>
357
  <frontend_type>text</frontend_type>
358
  <sort_order>50</sort_order>
359
  <show_in_default>1</show_in_default>
@@ -363,7 +363,7 @@
363
  <config_path>contactlab_template/wishlist/min_value</config_path>
364
  </min_value>
365
  <max_value translate="label">
366
- <label>Wishlist maximum amount value</label>
367
  <frontend_type>text</frontend_type>
368
  <sort_order>60</sort_order>
369
  <show_in_default>1</show_in_default>
@@ -373,7 +373,7 @@
373
  <config_path>contactlab_template/wishlist/max_value</config_path>
374
  </max_value>
375
  <min_products translate="label">
376
- <label>Wishlist minimum item number</label>
377
  <frontend_type>text</frontend_type>
378
  <sort_order>70</sort_order>
379
  <show_in_default>1</show_in_default>
@@ -383,7 +383,7 @@
383
  <config_path>contactlab_template/wishlist/min_products</config_path>
384
  </min_products>
385
  <max_products translate="label">
386
- <label>Wishlist maximum item number</label>
387
  <frontend_type>text</frontend_type>
388
  <sort_order>80</sort_order>
389
  <show_in_default>1</show_in_default>
@@ -393,7 +393,7 @@
393
  <config_path>contactlab_template/wishlist/max_products</config_path>
394
  </max_products>
395
  <and_or translate="label">
396
- <label>And / Or condition values</label>
397
  <frontend_type>select</frontend_type>
398
  <source_model>contactlab_template/system_config_source_andOr</source_model>
399
  <sort_order>90</sort_order>
20
  <expanded>0</expanded>
21
  <fields>
22
  <enabled translate="label">
23
+ <label>Enable Cron to send from this store</label>
24
  <frontend_type>select</frontend_type>
25
  <source_model>adminhtml/system_config_source_yesno</source_model>
26
  <sort_order>10</sort_order>
35
  <show_in_default>1</show_in_default>
36
  <show_in_website>1</show_in_website>
37
  <show_in_store>1</show_in_store>
38
+ <comment>Use ; as the delimiter to separate recipients.</comment>
39
  </test_recipients>
40
  </fields>
41
  </global>
58
  <show_in_store>1</show_in_store>
59
  </enabled>
60
  <send_to_not_subscribed translate="label">
61
+ <label>Send generic campaign to non-subscribed customers</label>
62
  <frontend_type>select</frontend_type>
63
  <source_model>adminhtml/system_config_source_yesno</source_model>
64
  <sort_order>20</sort_order>
128
 
129
 
130
  <queue translate="label">
131
+ <label>XML Delivery queue</label>
132
  <frontend_type>text</frontend_type>
133
  <sort_order>70</sort_order>
134
  <show_in_default>1</show_in_default>
135
  <show_in_website>1</show_in_website>
136
  <show_in_store>1</show_in_store>
137
  <expanded>0</expanded>
138
+ <comment><![CDATA[All time values are specified in <strong>minutes</strong>.]]></comment>
139
  <fields>
140
  <contactlab_template_model_task_processnewsletterqueuerunner_interval translate="label">
141
+ <label>Interval between send attempts</label>
142
  <frontend_type>text</frontend_type>
143
  <sort_order>200</sort_order>
144
  <show_in_default>1</show_in_default>
146
  <show_in_store>1</show_in_store>
147
  </contactlab_template_model_task_processnewsletterqueuerunner_interval>
148
  <contactlab_template_model_task_processnewsletterqueuerunner_retries translate="label">
149
+ <label>Number of send attempts</label>
150
  <frontend_type>text</frontend_type>
151
  <sort_order>210</sort_order>
152
  <show_in_default>1</show_in_default>
209
  <config_path>contactlab_template/cart/enabled</config_path>
210
  </enabled>
211
  <send_to_not_subscribed translate="label">
212
+ <label>Send Abandoned Cart email to non-subscribed customers</label>
213
  <frontend_type>select</frontend_type>
214
  <source_model>adminhtml/system_config_source_yesno</source_model>
215
  <sort_order>20</sort_order>
219
  <config_path>contactlab_template/cart/send_to_not_subscribed</config_path>
220
  </send_to_not_subscribed>
221
  <min_minutes_from_last_update translate="label">
222
+ <label>Minimum number of minutes before sending an Abandoned Cart email</label>
223
  <frontend_type>text</frontend_type>
224
  <sort_order>30</sort_order>
225
  <show_in_default>1</show_in_default>
229
  <config_path>contactlab_template/cart/min_minutes_from_last_update</config_path>
230
  </min_minutes_from_last_update>
231
  <max_minutes_from_last_update translate="label">
232
+ <label>Maximum number of minutes before sending an Abandoned Cart email</label>
233
  <frontend_type>text</frontend_type>
234
  <sort_order>40</sort_order>
235
  <show_in_default>1</show_in_default>
239
  <config_path>contactlab_template/cart/max_minutes_from_last_update</config_path>
240
  </max_minutes_from_last_update>
241
  <min_value translate="label">
242
+ <label>Cart minimum value</label>
243
  <frontend_type>text</frontend_type>
244
  <sort_order>50</sort_order>
245
  <show_in_default>1</show_in_default>
249
  <config_path>contactlab_template/cart/min_value</config_path>
250
  </min_value>
251
  <max_value translate="label">
252
+ <label>Cart maximum value</label>
253
  <frontend_type>text</frontend_type>
254
  <sort_order>60</sort_order>
255
  <show_in_default>1</show_in_default>
279
  <config_path>contactlab_template/cart/max_products</config_path>
280
  </max_products>
281
  <and_or translate="label">
282
+ <label>And/or condition values</label>
283
  <frontend_type>select</frontend_type>
284
  <source_model>contactlab_template/system_config_source_andOr</source_model>
285
  <sort_order>90</sort_order>
295
 
296
 
297
  <contactlab_template_wishlist translate="label" module="contactlab_template">
298
+ <label><![CDATA[Recurring Email &mdash; Wishlist Reminder]]></label>
299
  <tab>contactlab</tab>
300
  <frontend_type>text</frontend_type>
301
  <sort_order>70</sort_order>
304
  <show_in_store>1</show_in_store>
305
  <groups>
306
  <wishlist translate="label">
307
+ <label>Wishlist Reminder</label>
308
  <frontend_type>text</frontend_type>
309
  <sort_order>10</sort_order>
310
  <show_in_default>1</show_in_default>
313
  <expanded>0</expanded>
314
  <fields>
315
  <enabled translate="label">
316
+ <label>Enable Wishlist Reminder</label>
317
  <frontend_type>select</frontend_type>
318
  <source_model>adminhtml/system_config_source_yesno</source_model>
319
  <sort_order>10</sort_order>
323
  <config_path>contactlab_template/wishlist/enabled</config_path>
324
  </enabled>
325
  <send_to_not_subscribed translate="label">
326
+ <label>Send Wishlist Reminder email to non-subscribed customers</label>
327
  <frontend_type>select</frontend_type>
328
  <source_model>adminhtml/system_config_source_yesno</source_model>
329
  <sort_order>20</sort_order>
333
  <config_path>contactlab_template/wishlist/send_to_not_subscribed</config_path>
334
  </send_to_not_subscribed>
335
  <min_minutes_from_last_update translate="label">
336
+ <label>Minimum number of minutes before sending a Wishlist Reminder email</label>
337
  <frontend_type>text</frontend_type>
338
  <sort_order>30</sort_order>
339
  <show_in_default>1</show_in_default>
343
  <config_path>contactlab_template/wishlist/min_minutes_from_last_update</config_path>
344
  </min_minutes_from_last_update>
345
  <max_minutes_from_last_update translate="label">
346
+ <label>Maximum number of minutes before sending a Wishlist Reminder email</label>
347
  <frontend_type>text</frontend_type>
348
  <sort_order>40</sort_order>
349
  <show_in_default>1</show_in_default>
353
  <config_path>contactlab_template/wishlist/max_minutes_from_last_update</config_path>
354
  </max_minutes_from_last_update>
355
  <min_value translate="label">
356
+ <label>Wishlist minimum value</label>
357
  <frontend_type>text</frontend_type>
358
  <sort_order>50</sort_order>
359
  <show_in_default>1</show_in_default>
363
  <config_path>contactlab_template/wishlist/min_value</config_path>
364
  </min_value>
365
  <max_value translate="label">
366
+ <label>Wishlist maximum value</label>
367
  <frontend_type>text</frontend_type>
368
  <sort_order>60</sort_order>
369
  <show_in_default>1</show_in_default>
373
  <config_path>contactlab_template/wishlist/max_value</config_path>
374
  </max_value>
375
  <min_products translate="label">
376
+ <label>Minimum number of items in wishlist</label>
377
  <frontend_type>text</frontend_type>
378
  <sort_order>70</sort_order>
379
  <show_in_default>1</show_in_default>
383
  <config_path>contactlab_template/wishlist/min_products</config_path>
384
  </min_products>
385
  <max_products translate="label">
386
+ <label>Maximum number of items in wishlist</label>
387
  <frontend_type>text</frontend_type>
388
  <sort_order>80</sort_order>
389
  <show_in_default>1</show_in_default>
393
  <config_path>contactlab_template/wishlist/max_products</config_path>
394
  </max_products>
395
  <and_or translate="label">
396
+ <label>And/or condition values</label>
397
  <frontend_type>select</frontend_type>
398
  <source_model>contactlab_template/system_config_source_andOr</source_model>
399
  <sort_order>90</sort_order>
app/code/community/Contactlab/Template/sql/contactlab_template_setup/old/mysql4-install-0.8.0.php DELETED
@@ -1,26 +0,0 @@
1
- <?php
2
-
3
- $installer = $this;
4
- $installer->startSetup();
5
-
6
-
7
-
8
- $installer->run(<<<EOT
9
-
10
- DROP TABLE IF EXISTS `contactlab_template_type_entity`;
11
- EOT
12
- );
13
-
14
- $installer->run(<<<EOT
15
- CREATE TABLE `contactlab_template_type_entity` (
16
- `entity_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Template type Id',
17
- `name` varchar(255) NOT NULL COMMENT 'Template type name',
18
- `template_type_code` varchar(32) NOT NULL COMMENT 'Code of template type',
19
- `is_system` smallint(6) NOT NULL COMMENT 'Is a system defined type',
20
- `is_cron_enabled` smallint(6) NOT NULL COMMENT 'Enable for cron execution (default for new templates)',
21
- PRIMARY KEY (`entity_id`)
22
- ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Template types';
23
- EOT
24
- );
25
-
26
- $installer->endSetup();
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/code/community/Contactlab/Template/sql/contactlab_template_setup/upgrade-0.8.22-0.8.23.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+ $installer->startSetup();
5
+
6
+ /* @var $connection Varien_Db_Adapter_Pdo_Mysql */
7
+ $connection = $installer->getConnection();
8
+
9
+ /* @var $table newsletter template table name */
10
+ $table = $installer->getTable('newsletter/template');
11
+
12
+ /** @var $columns array with column name => comment*/
13
+ $columns = array(
14
+ 'template_text' => 'Template Text',
15
+ 'template_text_preprocessed' => 'Template Text Preprocessed',
16
+ 'template_text_plain' => 'Template Text (txt)',
17
+ );
18
+
19
+ // Alter each column table
20
+ foreach ($columns as $columnName => $comment) {
21
+ $connection->modifyColumn($table, $columnName, "mediumtext comment '$comment'");
22
+ }
23
+
24
+ $installer->endSetup();
app/code/community/Contactlab/Template/sql/contactlab_template_setup/upgrade-0.8.23-0.8.24.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+ $installer->startSetup();
5
+
6
+ /* @var $connection Varien_Db_Adapter_Pdo_Mysql */
7
+ $connection = $installer->getConnection();
8
+
9
+ $tableName = $installer->getTable('newsletter/template');
10
+
11
+ $connection->addColumn($tableName, 'store_id', array(
12
+ 'type' => Varien_Db_Ddl_Table::TYPE_INTEGER,
13
+ 'unsigned' => true,
14
+ 'nullable' => true,
15
+ 'comment' => 'Store id'
16
+ ));
17
+
18
+ $connection->addForeignKey(
19
+ $installer->getFkName('newsletter/template',
20
+ 'store_id', 'core/store',
21
+ 'store_id'),
22
+ $tableName, 'store_id',
23
+ $installer->getTable('core/store'),
24
+ 'store_id',
25
+ Varien_Db_Ddl_Table::ACTION_CASCADE,
26
+ Varien_Db_Ddl_Table::ACTION_CASCADE);
27
+
28
+ $installer->endSetup();
app/code/community/Contactlab/Template/sql/contactlab_template_setup/upgrade-0.9.0-0.9.1.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+ $installer->startSetup();
5
+
6
+ /* @var $connection Varien_Db_Adapter_Pdo_Mysql */
7
+ $connection = $installer->getConnection();
8
+
9
+ /* @var $table newsletter template table name */
10
+ $table = $installer->getTable('newsletter/template');
11
+
12
+ /** @var $columns array with column name => comment*/
13
+ $columns = array(
14
+ 'template_text' => 'Template Text',
15
+ 'template_text_preprocessed' => 'Template Text Preprocessed',
16
+ 'template_text_plain' => 'Template Text (txt)',
17
+ );
18
+
19
+ // Alter each column table
20
+ foreach ($columns as $columnName => $comment) {
21
+ $connection->modifyColumn($table, $columnName, "blob comment '$comment'");
22
+ }
23
+
24
+ $installer->endSetup();
app/code/community/Contactlab/Transactional/Model/Email/Queue.php ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Contactlab_Transactional_Model_Email_Queue extends Mage_Core_Model_Email_Queue
4
+ {
5
+ public function send() {
6
+ /** @var $collection Mage_Core_Model_Resource_Email_Queue_Collection */
7
+ $collection = Mage::getModel('core/email_queue')->getCollection()
8
+ ->addOnlyForSendingFilter()
9
+ ->setPageSize(self::MESSAGES_LIMIT_PER_CRON_RUN)
10
+ ->setCurPage(1)
11
+ ->load();
12
+
13
+
14
+ ini_set('SMTP', Mage::getStoreConfig('system/smtp/host'));
15
+ ini_set('smtp_port', Mage::getStoreConfig('system/smtp/port'));
16
+
17
+ /** @var $message Mage_Core_Model_Email_Queue */
18
+ foreach ($collection as $message) {
19
+ if ($message->getId()) {
20
+ $parameters = new Varien_Object($message->getMessageParameters());
21
+ if ($parameters->getReturnPathEmail() !== null) {
22
+ $mailTransport = new Zend_Mail_Transport_Sendmail("-f" . $parameters->getReturnPathEmail());
23
+ Zend_Mail::setDefaultTransport($mailTransport);
24
+ }
25
+
26
+ // SMART RELAY
27
+ if ($this->_isEnabled()) {
28
+ $mailer = Mage::getModel('contactlab_transactional/zend_mail', 'utf-8');
29
+ } else {
30
+ $mailer = new Zend_Mail('utf-8');
31
+ }
32
+
33
+ foreach ($message->getRecipients() as $recipient) {
34
+ list($email, $name, $type) = $recipient;
35
+ switch ($type) {
36
+ case self::EMAIL_TYPE_BCC:
37
+ $mailer->addBcc($email, '=?utf-8?B?' . base64_encode($name) . '?=');
38
+ break;
39
+ case self::EMAIL_TYPE_TO:
40
+ case self::EMAIL_TYPE_CC:
41
+ default:
42
+ $mailer->addTo($email, '=?utf-8?B?' . base64_encode($name) . '?=');
43
+ break;
44
+ }
45
+ }
46
+
47
+ if ($parameters->getIsPlain()) {
48
+ $mailer->setBodyText($message->getMessageBody());
49
+ } else {
50
+ $mailer->setBodyHTML($message->getMessageBody());
51
+ }
52
+
53
+ $mailer->setSubject('=?utf-8?B?' . base64_encode($parameters->getSubject()) . '?=');
54
+ $mailer->setFrom($parameters->getFromEmail(), $parameters->getFromName());
55
+ if ($parameters->getReplyTo() !== null) {
56
+ $mailer->setReplyTo($parameters->getReplyTo());
57
+ }
58
+ if ($parameters->getReturnTo() !== null) {
59
+ $mailer->setReturnPath($parameters->getReturnTo());
60
+ }
61
+
62
+ try {
63
+ $mailer->send();
64
+ unset($mailer);
65
+ $message->setProcessedAt(Varien_Date::formatDate(true));
66
+ $message->save();
67
+ }
68
+ catch (Exception $e) {
69
+ unset($mailer);
70
+ $oldDevMode = Mage::getIsDeveloperMode();
71
+ Mage::setIsDeveloperMode(true);
72
+ Mage::logException($e);
73
+ Mage::setIsDeveloperMode($oldDevMode);
74
+
75
+ return false;
76
+ }
77
+ }
78
+ }
79
+
80
+ return $this;
81
+ }
82
+
83
+ /**
84
+ * Is sending with Smart Realy abled?
85
+ */
86
+ private function _isEnabled() {
87
+ return Mage::getStoreConfigFlag("contactlab_transactional/global/enabled");
88
+ }
89
+ }
app/code/community/Contactlab/Transactional/Model/Email/Template.php CHANGED
@@ -3,29 +3,29 @@
3
  /**
4
  * Transactional email data helper.
5
  */
6
- class Contactlab_Transactional_Model_Email_Template extends Mage_Core_Model_Email_Template {
 
7
  /**
8
  * Retrieve mail object instance
9
  * @return Contactlab_Transactional_Model_Zend_Mail
10
  */
11
- public function getMail()
12
- {
13
  if (is_null($this->_mail)) {
14
- if ($this->_isEnabled()) {
15
- $this->_mail = Mage::getModel('contactlab_transactional/zend_mail', 'utf-8');
16
- } else {
17
- $this->_mail = new Zend_Mail('utf-8');
18
- }
19
  }
20
  return $this->_mail;
21
  }
22
-
23
- /**
24
- * Is sending with Smart Realy abled?
25
- */
26
- private function _isEnabled() {
27
- return Mage::getStoreConfigFlag("contactlab_transactional/global/enabled");
28
- }
29
 
30
  /**
31
  * Load default email template from locale translate
@@ -33,8 +33,7 @@ class Contactlab_Transactional_Model_Email_Template extends Mage_Core_Model_Emai
33
  * @param string $templateId
34
  * @param string $locale
35
  */
36
- public function loadDefault($templateId, $locale=null)
37
- {
38
  $rv = parent::loadDefault($templateId, $locale);
39
  if ($this->_isEnabled()) {
40
  $code = $this->_getHtmlFileName($templateId);
@@ -62,8 +61,7 @@ class Contactlab_Transactional_Model_Email_Template extends Mage_Core_Model_Emai
62
  * @param integer $id
63
  * @return Mage_Core_Model_Abstract
64
  */
65
- public function load($id, $field=null)
66
- {
67
  $rv = parent::load($id, $field);
68
  if ($this->_isEnabled()) {
69
  $code = $this->getTemplateId();
@@ -71,7 +69,7 @@ class Contactlab_Transactional_Model_Email_Template extends Mage_Core_Model_Emai
71
  $code = $this->_getHtmlFileName($id);
72
  } else if ($this->hasTemplateCode()) {
73
  $code = $this->getTemplateCode();
74
- }
75
  $this->getMail()->setTemplateCode($code);
76
  $this->getMail()->setTemplateId($this->getTemplateType());
77
  }
3
  /**
4
  * Transactional email data helper.
5
  */
6
+ class Contactlab_Transactional_Model_Email_Template extends Mage_Core_Model_Email_Template
7
+ {
8
  /**
9
  * Retrieve mail object instance
10
  * @return Contactlab_Transactional_Model_Zend_Mail
11
  */
12
+ public function getMail() {
 
13
  if (is_null($this->_mail)) {
14
+ if ($this->_isEnabled()) {
15
+ $this->_mail = Mage::getModel('contactlab_transactional/zend_mail', 'utf-8');
16
+ } else {
17
+ $this->_mail = new Zend_Mail('utf-8');
18
+ }
19
  }
20
  return $this->_mail;
21
  }
22
+
23
+ /**
24
+ * Is sending with Smart Realy abled?
25
+ */
26
+ private function _isEnabled() {
27
+ return Mage::getStoreConfigFlag("contactlab_transactional/global/enabled");
28
+ }
29
 
30
  /**
31
  * Load default email template from locale translate
33
  * @param string $templateId
34
  * @param string $locale
35
  */
36
+ public function loadDefault($templateId, $locale = null) {
 
37
  $rv = parent::loadDefault($templateId, $locale);
38
  if ($this->_isEnabled()) {
39
  $code = $this->_getHtmlFileName($templateId);
61
  * @param integer $id
62
  * @return Mage_Core_Model_Abstract
63
  */
64
+ public function load($id, $field = null) {
 
65
  $rv = parent::load($id, $field);
66
  if ($this->_isEnabled()) {
67
  $code = $this->getTemplateId();
69
  $code = $this->_getHtmlFileName($id);
70
  } else if ($this->hasTemplateCode()) {
71
  $code = $this->getTemplateCode();
72
+ }
73
  $this->getMail()->setTemplateCode($code);
74
  $this->getMail()->setTemplateId($this->getTemplateType());
75
  }
app/code/community/Contactlab/Transactional/Model/Zend/Mail.php CHANGED
@@ -3,24 +3,23 @@
3
  /**
4
  * Transactional email data helper.
5
  */
6
- class Contactlab_Transactional_Model_Zend_Mail extends Zend_Mail {
7
- public $enqueue = true;
 
8
 
9
- private $_bccTmp = array();
10
- private $_ccTmp = array();
11
- private $_toTmp = array();
12
 
13
  private $_templateCode = "";
14
  private $_templateId = "";
15
 
16
- /**
17
  * Public constructor
18
  *
19
  * @param string $charset
20
- * @return void
21
  */
22
- public function __construct($charset = null)
23
- {
24
  parent::__construct($charset);
25
  }
26
 
@@ -29,15 +28,15 @@ class Contactlab_Transactional_Model_Zend_Mail extends Zend_Mail {
29
  * set DefaultTransport or the internal mail function if no
30
  * default transport had been set.
31
  *
32
- * @param Zend_Mail_Transport_Abstract $transport
33
- * @return Zend_Mail Provides fluent interface
 
34
  */
35
- public function reallySend(Contactlab_Commons_Model_Task $task)
36
- {
37
  $transport = new Zend_Mail_Transport_Smtp(
38
- $task->getConfig("contactlab_transactional/global/smtp"));
39
- parent::send($transport);
40
- }
41
 
42
  /**
43
  * Sends this email using the given transport or a previously
@@ -47,25 +46,23 @@ class Contactlab_Transactional_Model_Zend_Mail extends Zend_Mail {
47
  * @param Zend_Mail_Transport_Abstract $transport
48
  * @return Zend_Mail Provides fluent interface
49
  */
50
- public function send($transport = null)
51
- {
52
- $this->_addCustomHeaders();
53
  // TODO always store id 0?
54
- $this->_queueCcAndBcc(Mage::app()->getStore()->getStoreId());
55
- return $this;
56
- }
57
 
58
  /**
59
  * Adds Bcc recipient, $email can be an array, or a single string address
60
  *
61
- * @param string|array $email
62
  * @return Zend_Mail Provides fluent interface
63
  */
64
- public function addBcc($email)
65
- {
66
- $this->_bccTmp[] = $email;
67
- return $this;
68
- }
69
 
70
  /**
71
  * Adds To-header and recipient, $email can be an array, or a single string address
@@ -74,10 +71,9 @@ class Contactlab_Transactional_Model_Zend_Mail extends Zend_Mail {
74
  * @param string $name
75
  * @return Zend_Mail Provides fluent interface
76
  */
77
- public function reallyAddTo($email, $name='')
78
- {
79
- parent::addTo($email, $name);
80
- }
81
 
82
  /**
83
  * Adds To-header and recipient, $email can be an array, or a single string address
@@ -86,79 +82,80 @@ class Contactlab_Transactional_Model_Zend_Mail extends Zend_Mail {
86
  * @param string $name
87
  * @return Zend_Mail Provides fluent interface
88
  */
89
- public function addTo($email, $name='')
90
- {
91
- $this->_toTmp[] = array('email' => $email, 'name' => $name);
92
- }
93
 
94
  /**
95
  * Adds Bcc recipient, $email can be an array, or a single string address
96
  *
97
- * @param string|array $email
98
  * @return Zend_Mail Provides fluent interface
99
  */
100
- public function addCc($email, $name='')
101
- {
102
- $this->_ccTmp[] = array('email' => $email, 'name' => $name);
103
- return $this;
104
- }
105
-
106
- /**
107
- * Queue Cc and Bcc recipients emails.
108
- *
109
  * @return Zend_Mail Provides fluent interface
110
- */
111
- protected function _queueCcAndBcc($storeId) {
112
- // Copy to local variables
113
- $to = $this->_toTmp;
114
- $cc = $this->_ccTmp;
115
- $bcc = $this->_bccTmp;
116
-
117
- // Empty variables
118
- $this->_toTmp = array();
119
- $this->_ccTmp = array();
120
- $this->_bccTmp = array();
121
-
122
- $this->_queueArray($to, $storeId);
123
- $this->_queueArray($cc, $storeId);
124
- $this->_queueArray($bcc, $storeId);
125
-
126
- return $this;
127
- }
128
-
129
- /**
130
- * Queue array of emails.
131
- *
132
  * @return Zend_Mail Provides fluent interface
133
- */
134
- protected function _queueArray(array &$emails, $storeId) {
135
- foreach ($emails as $email) {
136
- $this->_queueEmail($email, $storeId);
137
- }
138
- }
139
-
140
- /**
141
- * Queue array of emails.
142
- *
143
  * @return Zend_Mail Provides fluent interface
144
- */
145
- protected function _queueEmail($email, $storeId) {
146
- $newMail = clone $this;
147
- if (is_array($email)) {
148
- $newMail->reallyAddTo($email['email'], $email['name']);
149
- $emailDescription = $email['email'];
150
- } else {
151
- $newMail->reallyAddTo($email);
152
- $emailDescription = $email;
153
- }
154
- Mage::getModel("contactlab_commons/task")
155
- ->setStoreId($storeId)
156
- ->setTaskCode("Transactional email to $emailDescription")
157
- ->setModelName('contactlab_transactional/task_sendEmailRunner')
158
- ->setDescription("Send transactional email to $emailDescription")
159
- ->setTaskData(serialize($newMail))
160
- ->save();
161
- }
 
 
 
162
 
163
  private function _crc16($string) {
164
  $crc = 0xFFFF;
@@ -175,19 +172,19 @@ class Contactlab_Transactional_Model_Zend_Mail extends Zend_Mail {
175
  return $crc;
176
  }
177
 
178
- /**
179
- * Adds Contactlab Custom Headers
180
- */
181
- protected function _addCustomHeaders() {
182
- // FIXME ExternalDesc is not into the mail..
183
  //$this->addHeader("X-Clab-SmartRelay-External", $this->_templateId);
184
  //$this->addHeader("X-Clab-SmartRelay-ExternalDesc", $this->_templateCode);
185
 
186
- $this->addHeader("X-Clab-SmartRelay-DeliveryId", sprintf("%u", $this->_crc16($this->_templateCode)));
187
  $this->addHeader("X-Clab-SmartRelay-DeliveryLabel", $this->_templateCode);
188
  // Mage::log("Template code is: ". $this->_templateCode, null, null, true);
189
- }
190
-
191
  public function setTemplateCode($value) {
192
  $this->_templateCode = $value;
193
  }
3
  /**
4
  * Transactional email data helper.
5
  */
6
+ class Contactlab_Transactional_Model_Zend_Mail extends Zend_Mail
7
+ {
8
+ public $enqueue = true;
9
 
10
+ private $_bccTmp = array();
11
+ private $_ccTmp = array();
12
+ private $_toTmp = array();
13
 
14
  private $_templateCode = "";
15
  private $_templateId = "";
16
 
17
+ /**
18
  * Public constructor
19
  *
20
  * @param string $charset
 
21
  */
22
+ public function __construct($charset = null) {
 
23
  parent::__construct($charset);
24
  }
25
 
28
  * set DefaultTransport or the internal mail function if no
29
  * default transport had been set.
30
  *
31
+ * @param Contactlab_Commons_Model_Task $task
32
+ * @return Zend_Mail Provides fluent interface
33
+ * @internal param Zend_Mail_Transport_Abstract $transport
34
  */
35
+ public function reallySend(Contactlab_Commons_Model_Task $task) {
 
36
  $transport = new Zend_Mail_Transport_Smtp(
37
+ $task->getConfig("contactlab_transactional/global/smtp"));
38
+ parent::send($transport);
39
+ }
40
 
41
  /**
42
  * Sends this email using the given transport or a previously
46
  * @param Zend_Mail_Transport_Abstract $transport
47
  * @return Zend_Mail Provides fluent interface
48
  */
49
+ public function send($transport = null) {
50
+ $this->_addCustomHeaders();
 
51
  // TODO always store id 0?
52
+ $this->_queueCcAndBcc(Mage::app()->getStore()->getStoreId());
53
+ return $this;
54
+ }
55
 
56
  /**
57
  * Adds Bcc recipient, $email can be an array, or a single string address
58
  *
59
+ * @param string|array $email
60
  * @return Zend_Mail Provides fluent interface
61
  */
62
+ public function addBcc($email) {
63
+ $this->_bccTmp[] = $email;
64
+ return $this;
65
+ }
 
66
 
67
  /**
68
  * Adds To-header and recipient, $email can be an array, or a single string address
71
  * @param string $name
72
  * @return Zend_Mail Provides fluent interface
73
  */
74
+ public function reallyAddTo($email, $name = '') {
75
+ parent::addTo($email, $name);
76
+ }
 
77
 
78
  /**
79
  * Adds To-header and recipient, $email can be an array, or a single string address
82
  * @param string $name
83
  * @return Zend_Mail Provides fluent interface
84
  */
85
+ public function addTo($email, $name = '') {
86
+ $this->_toTmp[] = array('email' => $email, 'name' => $name);
87
+ }
 
88
 
89
  /**
90
  * Adds Bcc recipient, $email can be an array, or a single string address
91
  *
92
+ * @param string|array $email
93
  * @return Zend_Mail Provides fluent interface
94
  */
95
+ public function addCc($email, $name = '') {
96
+ $this->_ccTmp[] = array('email' => $email, 'name' => $name);
97
+ return $this;
98
+ }
99
+
100
+ /**
101
+ * Queue Cc and Bcc recipients emails.
102
+ *
 
103
  * @return Zend_Mail Provides fluent interface
104
+ */
105
+ protected function _queueCcAndBcc($storeId) {
106
+ // Copy to local variables
107
+ $to = $this->_toTmp;
108
+ $cc = $this->_ccTmp;
109
+ $bcc = $this->_bccTmp;
110
+
111
+ // Empty variables
112
+ $this->_toTmp = array();
113
+ $this->_ccTmp = array();
114
+ $this->_bccTmp = array();
115
+
116
+ $this->_queueArray($to, $storeId);
117
+ $this->_queueArray($cc, $storeId);
118
+ $this->_queueArray($bcc, $storeId);
119
+
120
+ return $this;
121
+ }
122
+
123
+ /**
124
+ * Queue array of emails.
125
+ *
126
  * @return Zend_Mail Provides fluent interface
127
+ */
128
+ protected function _queueArray(array &$emails, $storeId) {
129
+ foreach ($emails as $email) {
130
+ $this->_queueEmail($email, $storeId);
131
+ }
132
+ }
133
+
134
+ /**
135
+ * Queue array of emails.
136
+ *
137
  * @return Zend_Mail Provides fluent interface
138
+ */
139
+ protected function _queueEmail($email, $storeId) {
140
+ $newMail = clone $this;
141
+ if (is_array($email)) {
142
+ $newMail->reallyAddTo($email['email'], $email['name']);
143
+ $emailDescription = $email['email'];
144
+ } else {
145
+ $newMail->reallyAddTo($email);
146
+ $emailDescription = $email;
147
+ }
148
+ $task = Mage::getModel("contactlab_commons/task")
149
+ ->setStoreId($storeId)
150
+ ->setTaskCode("Transactional email to $emailDescription")
151
+ ->setModelName('contactlab_transactional/task_sendEmailRunner')
152
+ ->setDescription("Send transactional email to $emailDescription")
153
+ ->setTaskData(serialize($newMail))
154
+ ->save();
155
+ if (Mage::getStoreConfigFlag('contactlab_transactional/global/runtask')) {
156
+ $task->runTask()->save();
157
+ }
158
+ }
159
 
160
  private function _crc16($string) {
161
  $crc = 0xFFFF;
172
  return $crc;
173
  }
174
 
175
+ /**
176
+ * Adds Contactlab Custom Headers
177
+ */
178
+ protected function _addCustomHeaders() {
179
+ // FIXME ExternalDesc is not into the mail..
180
  //$this->addHeader("X-Clab-SmartRelay-External", $this->_templateId);
181
  //$this->addHeader("X-Clab-SmartRelay-ExternalDesc", $this->_templateCode);
182
 
183
+ $this->addHeader("X-Clab-SmartRelay-DeliveryId", sprintf("%u", $this->_crc16($this->_templateCode)));
184
  $this->addHeader("X-Clab-SmartRelay-DeliveryLabel", $this->_templateCode);
185
  // Mage::log("Template code is: ". $this->_templateCode, null, null, true);
186
+ }
187
+
188
  public function setTemplateCode($value) {
189
  $this->_templateCode = $value;
190
  }
app/code/community/Contactlab/Transactional/docs/release-notes/0.8.2.html CHANGED
@@ -1,4 +1,4 @@
1
  <ul>
2
- <li><del>Beetwen</del> <strong>label</strong> fixed to <q>Between</q></li>
3
- <li><del>Attemps</del> <strong>label</strong> fixed to <q>Attempts</q></li>
4
  </ul>
1
  <ul>
2
+ <li><del>Betweenen</del> <strong>label</strong> fixed to <q>Between</q></li>
3
+ <li><del>Attempts</del> <strong>label</strong> fixed to <q>Attempts</q></li>
4
  </ul>
app/code/community/Contactlab/Transactional/docs/release-notes/0.8.3.html ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <ul>
2
+ <li>Removed default values from <code>config.xml</code>.</li>
3
+ </ul>
app/code/community/Contactlab/Transactional/docs/release-notes/0.8.31.html ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <ul>
2
+ <li><strong>FIX</strong>: <code>Magento 1.9</code> cron based email will be sent via Contactlab.</li>
3
+ </ul>
app/code/community/Contactlab/Transactional/docs/release-notes/0.9.0.html ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <ul>
2
+ <li><strong>Feature</strong>: transactional communications may now be immediately delivered (you may control this from the configuration section)</li>
3
+ </ul>
app/code/community/Contactlab/Transactional/etc/config.xml CHANGED
@@ -2,8 +2,8 @@
2
  <config>
3
  <modules>
4
  <Contactlab_Transactional>
5
- <version>0.8.2</version>
6
- <description>Magento transactional email sending through ContactLab Smart Relay</description>
7
  </Contactlab_Transactional>
8
  </modules>
9
  <global>
@@ -19,6 +19,7 @@
19
  <core>
20
  <rewrite>
21
  <email_template>Contactlab_Transactional_Model_Email_Template</email_template>
 
22
  </rewrite>
23
  </core>
24
  </models>
@@ -37,11 +38,11 @@
37
  <default>
38
  <contactlab_transactional>
39
  <global>
40
- <enabled>0</enabled>
41
  </global>
42
  <queue>
43
- <contactlab_transactional_model_task_sendemailrunner_interval>1</contactlab_transactional_model_task_sendemailrunner_interval>
44
- <contactlab_transactional_model_task_sendemailrunner_retries>10</contactlab_transactional_model_task_sendemailrunner_retries>
45
  </queue>
46
  </contactlab_transactional>
47
  </default>
2
  <config>
3
  <modules>
4
  <Contactlab_Transactional>
5
+ <version>0.9.0</version>
6
+ <description>Magento transactional emails sent using ContactLab Smart Relay.</description>
7
  </Contactlab_Transactional>
8
  </modules>
9
  <global>
19
  <core>
20
  <rewrite>
21
  <email_template>Contactlab_Transactional_Model_Email_Template</email_template>
22
+ <email_queue>Contactlab_Transactional_Model_Email_Queue</email_queue>
23
  </rewrite>
24
  </core>
25
  </models>
38
  <default>
39
  <contactlab_transactional>
40
  <global>
41
+ <!--enabled>0</enabled-->
42
  </global>
43
  <queue>
44
+ <!--contactlab_transactional_model_task_sendemailrunner_interval>1</contactlab_transactional_model_task_sendemailrunner_interval>
45
+ <contactlab_transactional_model_task_sendemailrunner_retries>10</contactlab_transactional_model_task_sendemailrunner_retries-->
46
  </queue>
47
  </contactlab_transactional>
48
  </default>
app/code/community/Contactlab/Transactional/etc/system.xml CHANGED
@@ -27,7 +27,7 @@
27
  <show_in_default>1</show_in_default>
28
  <show_in_website>0</show_in_website>
29
  <show_in_store>0</show_in_store>
30
- <comment>Enable or disable Contactlab Transactional Emails module</comment>
31
  </enabled>
32
  <smtp translate="label">
33
  <label>SMTP Server</label>
@@ -37,6 +37,15 @@
37
  <show_in_website>1</show_in_website>
38
  <show_in_store>1</show_in_store>
39
  </smtp>
 
 
 
 
 
 
 
 
 
40
  </fields>
41
  </global>
42
  <queue translate="label">
@@ -47,6 +56,7 @@
47
  <show_in_website>1</show_in_website>
48
  <show_in_store>1</show_in_store>
49
  <expanded>0</expanded>
 
50
  <fields>
51
  <contactlab_transactional_model_task_sendemailrunner_interval translate="label">
52
  <label>Interval between email send attempts</label>
@@ -57,7 +67,7 @@
57
  <show_in_store>1</show_in_store>
58
  </contactlab_transactional_model_task_sendemailrunner_interval>
59
  <contactlab_transactional_model_task_sendemailrunner_retries translate="label">
60
- <label>Total number of email send attempts</label>
61
  <frontend_type>text</frontend_type>
62
  <sort_order>120</sort_order>
63
  <show_in_default>1</show_in_default>
27
  <show_in_default>1</show_in_default>
28
  <show_in_website>0</show_in_website>
29
  <show_in_store>0</show_in_store>
30
+ <comment>Enable or disable ContactLab Transactional emails module.</comment>
31
  </enabled>
32
  <smtp translate="label">
33
  <label>SMTP Server</label>
37
  <show_in_website>1</show_in_website>
38
  <show_in_store>1</show_in_store>
39
  </smtp>
40
+ <runtask translate="label">
41
+ <label>Run task immediately after the insertion.</label>
42
+ <frontend_type>select</frontend_type>
43
+ <source_model>adminhtml/system_config_source_yesno</source_model>
44
+ <sort_order>30</sort_order>
45
+ <show_in_default>1</show_in_default>
46
+ <show_in_website>1</show_in_website>
47
+ <show_in_store>1</show_in_store>
48
+ </runtask>
49
  </fields>
50
  </global>
51
  <queue translate="label">
56
  <show_in_website>1</show_in_website>
57
  <show_in_store>1</show_in_store>
58
  <expanded>0</expanded>
59
+ <comment><![CDATA[All time values are specified in <strong>minutes</strong>.]]></comment>
60
  <fields>
61
  <contactlab_transactional_model_task_sendemailrunner_interval translate="label">
62
  <label>Interval between email send attempts</label>
67
  <show_in_store>1</show_in_store>
68
  </contactlab_transactional_model_task_sendemailrunner_interval>
69
  <contactlab_transactional_model_task_sendemailrunner_retries translate="label">
70
+ <label>Number of email send attempts</label>
71
  <frontend_type>text</frontend_type>
72
  <sort_order>120</sort_order>
73
  <show_in_default>1</show_in_default>
app/design/adminhtml/default/default/layout/contactlab/commons.xml CHANGED
@@ -1,56 +1,56 @@
1
- <?xml version="1.0"?>
2
- <layout version="0.1.0">
3
- <contactlab_commons_adminhtml_logs_index>
4
- <reference name="content">
5
- <block type="contactlab_commons/adminhtml_logs" name="contactlab.commons.log" />
6
- </reference>
7
- </contactlab_commons_adminhtml_logs_index>
8
- <contactlab_commons_adminhtml_logs_grid>
9
- <reference name="content">
10
- <block type="contactlab_commons/adminhtml_logs_grid" name="contactlab.commons.logs.grid" output="toHtml"/>
11
- </reference>
12
- </contactlab_commons_adminhtml_logs_grid>
13
- <contactlab_commons_adminhtml_tasks_index>
14
- <reference name="content">
15
- <block type="contactlab_commons/adminhtml_tasks" name="contactlab.commons.tasks" as="tasks" />
16
- <block type="contactlab_commons/adminhtml_tasks_js" name="contactlab.commons.tasks.js" as="tasks.js" />
17
- <block type="contactlab_commons/adminhtml_tasks_status" name="contactlab.commons.tasks.status" as="tasks.status" />
18
- <block type="contactlab_commons/adminhtml_version" name="contactlab.commons.version" as="version" after="-" />
19
- </reference>
20
- <reference name="head">
21
- <action method="addJs"><file>contactlab_commons/adminhtml/tasks.js</file></action>
22
- </reference>
23
- </contactlab_commons_adminhtml_tasks_index>
24
- <contactlab_commons_adminhtml_tasks_grid>
25
- <reference name="content">
26
- <block type="contactlab_commons/adminhtml_tasks_grid" name="contactlab.commons.tasks.grid" output="toHtml"/>
27
- </reference>
28
- </contactlab_commons_adminhtml_tasks_grid>
29
- <contactlab_commons_adminhtml_events_index>
30
- <reference name="content">
31
- <block type="contactlab_commons/adminhtml_events" name="contactlab.commons.events" />
32
- </reference>
33
- </contactlab_commons_adminhtml_events_index>
34
- <contactlab_commons_adminhtml_events_grid>
35
- <reference name="content">
36
- <block type="contactlab_commons/adminhtml_events_grid" name="contactlab.commons.events.grid" output="toHtml"/>
37
- </reference>
38
- </contactlab_commons_adminhtml_events_grid>
39
- <contactlab_commons_adminhtml_test_index>
40
- <reference name="content">
41
- <block type="contactlab_commons/adminhtml_test" name="contactlab.commons.test" />
42
- </reference>
43
- </contactlab_commons_adminhtml_test_index>
44
- <contactlab_commons_adminhtml_releasenotes_index>
45
- <reference name="content">
46
- <block type="contactlab_commons/adminhtml_releaseNotes" name="contactlab_commons_adminhtml_releasenotes"
47
- template="contactlab/commons/releasenotes.phtml"/>
48
- </reference>
49
- </contactlab_commons_adminhtml_releasenotes_index>
50
- <contactlab_commons_adminhtml_configurationcheck_index>
51
- <reference name="content">
52
- <block type="contactlab_commons/adminhtml_configurationCheck" name="contactlab_commons_adminhtml_configurationcheck"
53
- template="contactlab/commons/configurationcheck.phtml"/>
54
- </reference>
55
- </contactlab_commons_adminhtml_configurationcheck_index>
56
- </layout>
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <adminhtml_contactlab_commons_logs_index>
4
+ <reference name="content">
5
+ <block type="contactlab_commons/adminhtml_logs" name="contactlab.commons.log" />
6
+ </reference>
7
+ </adminhtml_contactlab_commons_logs_index>
8
+ <adminhtml_contactlab_commons_logs_grid>
9
+ <reference name="content">
10
+ <block type="contactlab_commons/adminhtml_logs_grid" name="contactlab.commons.logs.grid" output="toHtml"/>
11
+ </reference>
12
+ </adminhtml_contactlab_commons_logs_grid>
13
+ <adminhtml_contactlab_commons_tasks_index>
14
+ <reference name="content">
15
+ <block type="contactlab_commons/adminhtml_tasks" name="contactlab.commons.tasks" as="tasks" />
16
+ <block type="contactlab_commons/adminhtml_tasks_js" name="contactlab.commons.tasks.js" as="tasks.js" />
17
+ <block type="contactlab_commons/adminhtml_tasks_status" name="contactlab.commons.tasks.status" as="tasks.status" />
18
+ <block type="contactlab_commons/adminhtml_version" name="contactlab.commons.version" as="version" after="-" />
19
+ </reference>
20
+ <reference name="head">
21
+ <action method="addJs"><file>contactlab_commons/adminhtml/tasks.js</file></action>
22
+ </reference>
23
+ </adminhtml_contactlab_commons_tasks_index>
24
+ <adminhtml_contactlab_commons_tasks_grid>
25
+ <reference name="content">
26
+ <block type="contactlab_commons/adminhtml_tasks_grid" name="contactlab.commons.tasks.grid" output="toHtml"/>
27
+ </reference>
28
+ </adminhtml_contactlab_commons_tasks_grid>
29
+ <adminhtml_contactlab_commons_events_index>
30
+ <reference name="content">
31
+ <block type="contactlab_commons/adminhtml_events" name="contactlab.commons.events" />
32
+ </reference>
33
+ </adminhtml_contactlab_commons_events_index>
34
+ <adminhtml_contactlab_commons_events_grid>
35
+ <reference name="content">
36
+ <block type="contactlab_commons/adminhtml_events_grid" name="contactlab.commons.events.grid" output="toHtml"/>
37
+ </reference>
38
+ </adminhtml_contactlab_commons_events_grid>
39
+ <adminhtml_contactlab_commons_test_index>
40
+ <reference name="content">
41
+ <block type="contactlab_commons/adminhtml_test" name="contactlab.commons.test" />
42
+ </reference>
43
+ </adminhtml_contactlab_commons_test_index>
44
+ <adminhtml_contactlab_commons_releasenotes_index>
45
+ <reference name="content">
46
+ <block type="contactlab_commons/adminhtml_releaseNotes" name="contactlab_commons_adminhtml_releasenotes"
47
+ template="contactlab/commons/releasenotes.phtml"/>
48
+ </reference>
49
+ </adminhtml_contactlab_commons_releasenotes_index>
50
+ <adminhtml_contactlab_commons_configurationcheck_index>
51
+ <reference name="content">
52
+ <block type="contactlab_commons/adminhtml_configurationCheck" name="contactlab_commons_adminhtml_configurationcheck"
53
+ template="contactlab/commons/configurationcheck.phtml"/>
54
+ </reference>
55
+ </adminhtml_contactlab_commons_configurationcheck_index>
56
+ </layout>
app/design/adminhtml/default/default/layout/contactlab/subscribers.xml CHANGED
@@ -1,86 +1,81 @@
1
- <?xml version="1.0"?>
2
- <layout version="0.1.0">
3
- <contactlab_subscribers_adminhtml_exportsubscribers_index>
4
- <reference name="content">
5
- <block type="contactlab_subscribers/adminhtml_export" name="contactlab.subscribers.export" />
6
- </reference>
7
- </contactlab_subscribers_adminhtml_exportsubscribers_index>
8
- <contactlab_commons_adminhtml_tasks_index>
9
- <reference name="content">
10
- <block type="adminhtml/template" name="contactlab.commons.uk" before="contactlab.commons.version"
11
- template="contactlab/subscribers/uk.phtml">
12
- <block type="contactlab_commons/adminhtml_widget_button" name="contactlab.commons.uk.check" as="contactlab.commons.uk.check">
13
- <action method="setLabel" translate="label">
14
- <label>Check unique Keys</label>
15
- </action>
16
- <action method="setUrl">
17
- <url>contactlab_subscribers/adminhtml_uk/update</url>
18
- </action>
19
- </block>
20
- <block type="contactlab_commons/adminhtml_widget_button" name="contactlab.commons.uk.update" as="contactlab.commons.uk.update">
21
- <action method="setLabel" translate="label">
22
- <label>Update unique Keys</label>
23
- </action>
24
- <action method="setUrl">
25
- <url>contactlab_subscribers/adminhtml_uk/update</url>
26
- <params><![CDATA[doit=yes]]></params>
27
- </action>
28
- </block>
29
- <block type="contactlab_commons/adminhtml_widget_button" name="contactlab.commons.uk.truncate" as="contactlab.commons.uk.truncate">
30
- <action method="setLabel" translate="label">
31
- <label>Truncate unique Keys</label>
32
- </action>
33
- <action method="setUrl">
34
- <url>contactlab_subscribers/adminhtml_uk/truncate</url>
35
- </action>
36
- <action method="setConfirm" translate="confirm">
37
- <confirm>Are you sure to truncate the UK table?</confirm>
38
- </action>
39
- </block>
40
- </block>
41
-
42
- <block type="adminhtml/template" name="contactlab.commons.subscribers" before="contactlab.commons.uk"
43
- template="contactlab/subscribers/subscribers.phtml">
44
- <block type="contactlab_commons/adminhtml_widget_button"
45
- name="contactlab.commons.subscribe.export"
46
- as="contactlab.commons.subscribe.export">
47
- <action method="setLabel" translate="label">
48
- <label>Queue Subscribers export job</label>
49
- </action>
50
- <action method="setUrl">
51
- <url>contactlab_subscribers/adminhtml_exportSubscribers/queue</url>
52
- </action>
53
- <action method="setConfirm" translate="confirm">
54
- <confirm>Are you sure you want to do this?</confirm>
55
- </action>
56
- </block>
57
- <block type="contactlab_commons/adminhtml_widget_button"
58
- name="contactlab.commons.subscribe.import"
59
- as="contactlab.commons.subscribe.import">
60
- <action method="setLabel" translate="label">
61
- <label>Queue Subscribers import job</label>
62
- </action>
63
- <action method="setUrl">
64
- <url>contactlab_subscribers/adminhtml_importSubscribers/queue</url>
65
- </action>
66
- <action method="setConfirm" translate="confirm">
67
- <confirm>Are you sure you want to do this?</confirm>
68
- </action>
69
- </block>
70
- <block type="contactlab_commons/adminhtml_widget_button"
71
- name="contactlab.commons.subscribe.stats"
72
- as="contactlab.commons.subscribe.stats">
73
- <action method="setLabel" translate="label">
74
- <label>Fill statistics</label>
75
- </action>
76
- <action method="setUrl">
77
- <url>contactlab_subscribers/adminhtml_stats/fill</url>
78
- </action>
79
- <action method="setConfirm" translate="confirm">
80
- <confirm>Are you sure you want to do this?</confirm>
81
- </action>
82
- </block>
83
- </block>
84
- </reference>
85
- </contactlab_commons_adminhtml_tasks_index>
86
- </layout>
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <adminhtml_contactlab_commons_tasks_index>
4
+ <reference name="content">
5
+ <block type="adminhtml/template" name="contactlab.commons.uk" before="contactlab.commons.version"
6
+ template="contactlab/subscribers/uk.phtml">
7
+ <block type="contactlab_commons/adminhtml_widget_button" name="contactlab.commons.uk.check" as="contactlab.commons.uk.check">
8
+ <action method="setLabel" translate="label">
9
+ <label>Check unique Keys</label>
10
+ </action>
11
+ <action method="setUrl">
12
+ <url>adminhtml/contactlab_subscribers_uk/update</url>
13
+ </action>
14
+ </block>
15
+ <block type="contactlab_commons/adminhtml_widget_button" name="contactlab.commons.uk.update" as="contactlab.commons.uk.update">
16
+ <action method="setLabel" translate="label">
17
+ <label>Update unique Keys</label>
18
+ </action>
19
+ <action method="setUrl">
20
+ <url>adminhtml/contactlab_subscribers_uk/update</url>
21
+ <params><![CDATA[doit=yes]]></params>
22
+ </action>
23
+ </block>
24
+ <block type="contactlab_commons/adminhtml_widget_button" name="contactlab.commons.uk.truncate" as="contactlab.commons.uk.truncate">
25
+ <action method="setLabel" translate="label">
26
+ <label>Truncate unique Keys</label>
27
+ </action>
28
+ <action method="setUrl">
29
+ <url>adminhtml/contactlab_subscribers_uk/truncate</url>
30
+ </action>
31
+ <action method="setConfirm" translate="confirm">
32
+ <confirm>Are you sure to truncate the UK table?</confirm>
33
+ </action>
34
+ </block>
35
+ </block>
36
+
37
+ <block type="adminhtml/template" name="contactlab.commons.subscribers" before="contactlab.commons.uk"
38
+ template="contactlab/subscribers/subscribers.phtml">
39
+ <block type="contactlab_commons/adminhtml_widget_button"
40
+ name="contactlab.commons.subscribe.export"
41
+ as="contactlab.commons.subscribe.export">
42
+ <action method="setLabel" translate="label">
43
+ <label>Queue Subscribers export job</label>
44
+ </action>
45
+ <action method="setUrl">
46
+ <url>adminhtml/contactlab_subscribers_export/queue</url>
47
+ </action>
48
+ <action method="setConfirm" translate="confirm">
49
+ <confirm>Are you sure you want to do this?</confirm>
50
+ </action>
51
+ </block>
52
+ <block type="contactlab_commons/adminhtml_widget_button"
53
+ name="contactlab.commons.subscribe.import"
54
+ as="contactlab.commons.subscribe.import">
55
+ <action method="setLabel" translate="label">
56
+ <label>Queue Subscribers import job</label>
57
+ </action>
58
+ <action method="setUrl">
59
+ <url>adminhtml/contactlab_subscribers_import/queue</url>
60
+ </action>
61
+ <action method="setConfirm" translate="confirm">
62
+ <confirm>Are you sure you want to do this?</confirm>
63
+ </action>
64
+ </block>
65
+ <block type="contactlab_commons/adminhtml_widget_button"
66
+ name="contactlab.commons.subscribe.stats"
67
+ as="contactlab.commons.subscribe.stats">
68
+ <action method="setLabel" translate="label">
69
+ <label>Fill statistics</label>
70
+ </action>
71
+ <action method="setUrl">
72
+ <url>adminhtml/contactlab_subscribers_stats/fill</url>
73
+ </action>
74
+ <action method="setConfirm" translate="confirm">
75
+ <confirm>Are you sure you want to do this?</confirm>
76
+ </action>
77
+ </block>
78
+ </block>
79
+ </reference>
80
+ </adminhtml_contactlab_commons_tasks_index>
81
+ </layout>
 
 
 
 
 
app/design/adminhtml/default/default/layout/contactlab/template.xml CHANGED
@@ -1,50 +1,64 @@
1
- <?xml version="1.0"?>
2
- <layout version="0.1.0">
3
- <contactlab_template_adminhtml_types_index>
4
- <reference name="content">
5
- <block type="contactlab_template/adminhtml_type" name="contactlab_template_type" />
6
- </reference>
7
- </contactlab_template_adminhtml_types_index>
8
- <contactlab_template_adminhtml_types_grid>
9
- <reference name="content">
10
- <block type="contactlab_template/adminhtml_type_grid" name="contactlab_template_type_grid" output="toHtml"/>
11
- </reference>
12
- </contactlab_template_adminhtml_types_grid>
13
- <contactlab_template_adminhtml_types_edit>
14
- <update handle="editor"/>
15
- <reference name="content">
16
- <block type="contactlab_template/adminhtml_type_edit" name="contactlab_template_edit" template="contactlab/template/type/edit.phtml" />
17
- </reference>
18
- </contactlab_template_adminhtml_types_edit>
19
- <adminhtml_newsletter_template_edit>
20
- <reference name="content">
21
- <block type="contactlab_template/adminhtml_newsletter_template_edit_js" name="template_edit_js" template="contactlab/template/edit/js.phtml" after="-"/>
22
- <block type="contactlab_template/adminhtml_newsletter_template_edit_validation" name="template_edit_validation" template="contactlab/template/edit/validation.phtml" after="-"/>
23
- </reference>
24
- </adminhtml_newsletter_template_edit>
25
- <adminhtml_system_config_edit>
26
- <reference name="content">
27
- <block type="core/template" name="adminhtml_system_config_edit_validation_min_max" template="contactlab/template/edit/validation.phtml" after="-"/>
28
- </reference>
29
- </adminhtml_system_config_edit>
30
- <contactlab_commons_adminhtml_tasks_index>
31
- <reference name="content">
32
- <block type="adminhtml/template" name="contactlab.template" after="contactlab.commons.uk"
33
- template="contactlab/template/tasks/buttons.phtml">
34
- <block type="contactlab_template/adminhtml_widget_button_queue"
35
- name="contactlab.template.queue"
36
- as="contactlab.template.queue">
37
- <action method="setLabel" translate="label">
38
- <label>Scan templates</label>
39
- </action>
40
- <action method="setUrl">
41
- <url>contactlab_template/adminhtml_template/scan</url>
42
- </action>
43
- </block>
44
- <block type="adminhtml/template"
45
- name="contactlab.template.email"
46
- template="contactlab/template/tasks/debugemail.phtml" />
47
- </block>
48
- </reference>
49
- </contactlab_commons_adminhtml_tasks_index>
50
- </layout>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <layout version="0.1.0">
3
+ <adminhtml_contactlab_template_types_index>
4
+ <reference name="content">
5
+ <block type="contactlab_template/adminhtml_type" name="contactlab_template_type"/>
6
+ </reference>
7
+ </adminhtml_contactlab_template_types_index>
8
+ <adminhtml_contactlab_template_types_grid>
9
+ <reference name="content">
10
+ <block type="contactlab_template/adminhtml_type_grid" name="contactlab_template_type_grid" output="toHtml"/>
11
+ </reference>
12
+ </adminhtml_contactlab_template_types_grid>
13
+ <adminhtml_contactlab_template_types_edit>
14
+ <update handle="editor"/>
15
+ <reference name="content">
16
+ <block type="contactlab_template/adminhtml_type_edit" name="contactlab_template_edit"
17
+ template="contactlab/template/type/edit.phtml"/>
18
+ </reference>
19
+ </adminhtml_contactlab_template_types_edit>
20
+ <adminhtml_contactlab_template_edit>
21
+ <reference name="content">
22
+ <block type="contactlab_template/adminhtml_newsletter_template_edit_js" name="template_edit_js"
23
+ template="contactlab/template/edit/js.phtml" after="-"/>
24
+ <block type="core/template"
25
+ name="template_edit_validation" template="contactlab/template/edit/validation.phtml" after="-"/>
26
+ </reference>
27
+ </adminhtml_contactlab_template_edit>
28
+ <adminhtml_system_config_edit>
29
+ <reference name="content">
30
+ <block type="core/template" name="adminhtml_system_config_edit_validation_min_max"
31
+ template="contactlab/template/edit/validation.phtml" after="-"/>
32
+ </reference>
33
+ </adminhtml_system_config_edit>
34
+ <adminhtml_contactlab_commons_tasks_index>
35
+ <reference name="content">
36
+ <block type="adminhtml/template" name="contactlab.template" after="contactlab.commons.uk"
37
+ template="contactlab/template/tasks/buttons.phtml">
38
+ <block type="contactlab_template/adminhtml_widget_button_queue"
39
+ name="contactlab.template.queue"
40
+ as="contactlab.template.queue">
41
+ <action method="setLabel" translate="label">
42
+ <label>Scan templates</label>
43
+ </action>
44
+ <action method="setUrl">
45
+ <url>adminhtml/contactlab_template/scan</url>
46
+ </action>
47
+ </block>
48
+ <block type="adminhtml/template"
49
+ name="contactlab.template.email"
50
+ template="contactlab/template/tasks/debugemail.phtml"/>
51
+ </block>
52
+ </reference>
53
+ </adminhtml_contactlab_commons_tasks_index>
54
+ <adminhtml_contactlab_template_tasks_list>
55
+ <reference name="content">
56
+ <block type="contactlab_template/adminhtml_newsletter_template_tasks_list" name="contactlab_template_adminhtml_newsletter_template_tasks_list"/>
57
+ </reference>
58
+ </adminhtml_contactlab_template_tasks_list>
59
+ <adminhtml_contactlab_template_tasks_detail>
60
+ <reference name="content">
61
+ <block type="contactlab_template/adminhtml_newsletter_template_tasks_detail" name="contactlab_template_adminhtml_newsletter_template_tasks_detail"/>
62
+ </reference>
63
+ </adminhtml_contactlab_template_tasks_detail>
64
+ </layout>
app/design/adminhtml/default/default/template/contactlab/commons/configurationcheck.phtml CHANGED
@@ -1,14 +1,33 @@
1
- <div class="content-header">
2
- <h1 class="<?php echo $this->getHeaderHtmlProperty() ?>"><?php echo $this->getHeaderHtml() ?></h1>
3
- </div>
4
- <?php foreach ($this->getCronConfiguration() as $item): ?>
5
- <h3><?php echo $item->getModule() ?> - <?php echo $item->getName() ?></h3>
6
- <?php if ($item->hasDescription()): ?>
7
- <p><em><?php echo $item->getDescription() ?></em></p>
8
- <?php endif; ?>
9
- <?php if ($item->getSchedule()): ?>
10
- <p>Scheduled: <code><?php echo $item->getSchedule() ?></code></p>
11
- <?php else: ?>
12
- <p> Scheduled: <code class="error">Never</code></p>
13
- <?php endif; ?>
14
- <?php endforeach; ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="content-header">
2
+ <h1 class="<?php echo $this->getHeaderHtmlProperty() ?>"><?php echo $this->getHeaderHtml() ?></h1>
3
+ </div>
4
+ <div class="box-left">
5
+ <?php /** @var $check Contactlab_Subscribers_Model_Checks_CheckInterface */ ?>
6
+ <?php foreach ($this->getSubscribersChecks() as $check): ?>
7
+ <h3 <?php echo $check->getExitCode() === Contactlab_Subscribers_Model_Checks_CheckInterface::ERROR ? 'class="error"' : '' ?>><?php echo $check->getDescription(); ?></h3>
8
+ <ul class="messages">
9
+ <?php foreach ($check->getErrors() as $error): ?>
10
+ <li class="error-msg"><?php echo $error ?></li>
11
+ <?php endforeach; ?>
12
+ </ul>
13
+ <ul class="messages">
14
+ <?php foreach ($check->getSuccess() as $success): ?>
15
+ <li class="success-msg"><?php echo $success ?></li>
16
+ <?php endforeach; ?>
17
+ </ul>
18
+ <?php endforeach; ?>
19
+ </div>
20
+ <div class="box-right">
21
+ <h2><?php echo $this->__('Crontab scheduled tasks') ?></h2>
22
+ <?php foreach ($this->getCronConfiguration() as $item): ?>
23
+ <h3><?php echo $item->getModule() ?> - <?php echo $item->getName() ?></h3>
24
+ <?php if ($item->hasDescription()): ?>
25
+ <p><em><?php echo $item->getDescription() ?></em></p>
26
+ <?php endif; ?>
27
+ <?php if ($item->getSchedule()): ?>
28
+ <p>Scheduled: <code><?php echo $item->getSchedule() ?></code></p>
29
+ <?php else: ?>
30
+ <p> Scheduled: <code class="error">Never</code></p>
31
+ <?php endif; ?>
32
+ <?php endforeach; ?>
33
+ </div>
app/design/adminhtml/default/default/template/contactlab/commons/releasenotes.phtml CHANGED
@@ -1,33 +1,33 @@
1
- <style type="text/css">
2
- .rn-content {
3
- margin-bottom: 30px;
4
- }
5
- .rn-content q {
6
- font-weight: bold;
7
- }
8
- .rn-content q {
9
- quotes: "“" "”" "‘" "’";
10
- }
11
- .rn-content q:before {
12
- content: open-quote;
13
- }
14
- .rn-content q:after {
15
- content: close-quote;
16
- }
17
- .rn-content ul, .rn-content ol {
18
- list-style-type: inherit;
19
- list-style: inherit;
20
- padding-left: 40px;
21
- }
22
- </style>
23
- <div class="content-header">
24
- <h3 class="<?php echo $this->getHeaderHtmlProperty() ?>"><?php echo $this->getHeaderHtml() ?></h3>
25
- </div>
26
- <h3><?php echo $this->__('Installed version: %s', $this->getPlatformVersion()); ?></h3>
27
- <?php foreach ($this->getReleaseNotes() as $releaseNotes): ?>
28
- <h2><?php echo $releaseNotes->getTitle() ?></h2>
29
- <p><em><?php echo $releaseNotes->getDescription() ?></em></p>
30
- <div class="rn-content">
31
- <?php echo $releaseNotes->getText() ?>
32
- </div>
33
- <?php endforeach; ?>
1
+ <style type="text/css">
2
+ .rn-content {
3
+ margin-bottom: 30px;
4
+ }
5
+ .rn-content q {
6
+ font-weight: bold;
7
+ }
8
+ .rn-content q {
9
+ quotes: "“" "”" "‘" "’";
10
+ }
11
+ .rn-content q:before {
12
+ content: open-quote;
13
+ }
14
+ .rn-content q:after {
15
+ content: close-quote;
16
+ }
17
+ .rn-content ul, .rn-content ol {
18
+ list-style-type: inherit;
19
+ list-style: inherit;
20
+ padding-left: 40px;
21
+ }
22
+ </style>
23
+ <div class="content-header">
24
+ <h3 class="<?php echo $this->getHeaderHtmlProperty() ?>"><?php echo $this->getHeaderHtml() ?></h3>
25
+ </div>
26
+ <h3><?php echo $this->__('Installed version: %s', $this->getPlatformVersion()); ?></h3>
27
+ <?php foreach ($this->getReleaseNotes() as $releaseNotes): ?>
28
+ <h2><?php echo $releaseNotes->getTitle() ?></h2>
29
+ <p><em><?php echo $releaseNotes->getDescription() ?></em></p>
30
+ <div class="rn-content">
31
+ <?php echo $releaseNotes->getText() ?>
32
+ </div>
33
+ <?php endforeach; ?>
app/design/adminhtml/default/default/template/contactlab/commons/send_mail.phtml CHANGED
@@ -1,33 +1,33 @@
1
- <?php $h = Mage::helper('contactlab_commons'); ?>
2
- <table cellpadding="0" cellspacing="0" border="0" style="font-family: arial; font-size: 12px; color: #666666; border-left: 1px solid #999999; border-top: 1px solid #999999">
3
- <tr>
4
- <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Task code'); ?></td>
5
- <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Created at'); ?></td>
6
- <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Planned at'); ?></td>
7
- <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Description'); ?></td>
8
- <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Task data'); ?></td>
9
- <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Number of retries'); ?></td>
10
- <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Max retries'); ?></td>
11
- <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Retries interval'); ?></td>
12
- <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Task status'); ?></td>
13
- <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Created at'); ?></td>
14
- <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Description'); ?></td>
15
- <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Task status'); ?></td>
16
- </tr>
17
- <?php
18
- foreach ($this->getErrorTasks() as $item) {
19
- $row = $item->getData();
20
- $cell = '';
21
- foreach ($row as $key => $value) {
22
- if ($key == 'task_event_id') {
23
- continue;
24
- }
25
- if (preg_match('/....\-..\-../', $value)) {
26
- $row[$key] = date('d/m/Y H:i:s', strtotime($value));
27
- }
28
- $cell .= '<td valign="top" style="padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999">'.(empty($row[$key]) ? '&nbsp;' : $row[$key]).'</td>';
29
- }
30
- print '<tr>' . $cell . '</tr>';
31
- }
32
- ?>
33
- </table>
1
+ <?php $h = Mage::helper('contactlab_commons'); ?>
2
+ <table cellpadding="0" cellspacing="0" border="0" style="font-family: arial; font-size: 12px; color: #666666; border-left: 1px solid #999999; border-top: 1px solid #999999">
3
+ <tr>
4
+ <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Task code'); ?></td>
5
+ <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Created'); ?></td>
6
+ <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Planned'); ?></td>
7
+ <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Description'); ?></td>
8
+ <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Task data'); ?></td>
9
+ <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Number of retries'); ?></td>
10
+ <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Max retries'); ?></td>
11
+ <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Retries interval'); ?></td>
12
+ <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Task status'); ?></td>
13
+ <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Created'); ?></td>
14
+ <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Description'); ?></td>
15
+ <td valign="top" style="background-color: #dddddd; padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999; font-weight: bold"><?php print $h->__('Task status'); ?></td>
16
+ </tr>
17
+ <?php
18
+ foreach ($this->getErrorTasks() as $item) {
19
+ $row = $item->getData();
20
+ $cell = '';
21
+ foreach ($row as $key => $value) {
22
+ if ($key == 'task_event_id') {
23
+ continue;
24
+ }
25
+ if (preg_match('/....\-..\-../', $value)) {
26
+ $row[$key] = date('d/m/Y H:i:s', strtotime($value));
27
+ }
28
+ $cell .= '<td valign="top" style="padding: 3px 10px 3px 10px; border-right: 1px solid #999999; border-bottom: 1px solid #999999">'.(empty($row[$key]) ? '&nbsp;' : $row[$key]).'</td>';
29
+ }
30
+ print '<tr>' . $cell . '</tr>';
31
+ }
32
+ ?>
33
+ </table>
app/design/adminhtml/default/default/template/contactlab/commons/tasks/js.phtml CHANGED
@@ -1,4 +1,4 @@
1
- <script type="text/javascript">
2
- contactLabTaskUpdateManager = new ContactLabTaskUpdateManager();
3
- contactLabTaskUpdateManager.setUrls({"getStatus": "<?php echo $this->getStatusUrl() ?>"});
4
- </script>
1
+ <script type="text/javascript">
2
+ contactLabTaskUpdateManager = new ContactLabTaskUpdateManager();
3
+ contactLabTaskUpdateManager.setUrls({"getStatus": "<?php echo $this->getStatusUrl() ?>"});
4
+ </script>
app/design/adminhtml/default/default/template/contactlab/commons/tasks/status.phtml CHANGED
@@ -1,3 +1,3 @@
1
- <script type="text/javascript">
2
- contactLabTaskUpdateManager.setRequestStatusUrl("<?php echo $this->getRequestStatus() ?>");
3
- </script>
1
+ <script type="text/javascript">
2
+ contactLabTaskUpdateManager.setRequestStatusUrl("<?php echo $this->getRequestStatus() ?>");
3
+ </script>
app/design/adminhtml/default/default/template/contactlab/commons/test.phtml CHANGED
@@ -1,6 +1,6 @@
1
- <div class="content-header">
2
- <?php echo $this->getHeaderHtml() ?>
3
- <p class="content-buttons form-buttons"><?php echo $this->getButtonsHtml() ?></p>
4
- </div>
5
-
6
  <?php echo $this->getChildHtml() ?>
1
+ <div class="content-header">
2
+ <?php echo $this->getHeaderHtml() ?>
3
+ <p class="content-buttons form-buttons"><?php echo $this->getButtonsHtml() ?></p>
4
+ </div>
5
+
6
  <?php echo $this->getChildHtml() ?>
app/design/adminhtml/default/default/template/contactlab/commons/version.phtml CHANGED
@@ -1,26 +1,26 @@
1
- <?php /* @var $this Contactlab_Commons_Block_Adminhtml_Version */ ?>
2
- <?php if ($this->doPrintVersion()): ?>
3
- <div class="grid" style="padding-top: 50px; clear: both">
4
- <div class="hor-scroll">
5
- <h3><?php echo $this->__('Installed version: %s', $this->getPlatformVersion()); ?></h3>
6
- <table class="data" cellspacing="0" style="width: 40%">
7
- <thead>
8
- <tr class="headings">
9
- <th><?php echo $this->__('Plugin') ?></th>
10
- <th><?php echo $this->__('Description') ?></th>
11
- <th><?php echo $this->__('Version') ?></th>
12
- </tr>
13
- </thead>
14
- <tbody>
15
- <?php foreach ($this->getModulesVersion() as $module): ?>
16
- <tr class="<?php echo $module->getClass() ?>">
17
- <td><strong><?php echo $module->getName() ?></strong></td>
18
- <td><?php echo $module->getDescription() ?></td>
19
- <td class="a-right"><code><?php echo $module->getVersion() ?></code></td>
20
- </tr>
21
- <?php endforeach; ?>
22
- </tbody>
23
- </table>
24
- </div>
25
- </div>
26
- <?php endif; ?>
1
+ <?php /* @var $this Contactlab_Commons_Block_Adminhtml_Version */ ?>
2
+ <?php if ($this->doPrintVersion()): ?>
3
+ <div class="grid" style="padding-top: 50px; clear: both">
4
+ <div class="hor-scroll">
5
+ <h3><?php echo $this->__('Installed version: %s', $this->getPlatformVersion()); ?></h3>
6
+ <table class="data" cellspacing="0" style="width: 40%">
7
+ <thead>
8
+ <tr class="headings">
9
+ <th><?php echo $this->__('Plugin') ?></th>
10
+ <th><?php echo $this->__('Description') ?></th>
11
+ <th><?php echo $this->__('Version') ?></th>
12
+ </tr>
13
+ </thead>
14
+ <tbody>
15
+ <?php foreach ($this->getModulesVersion() as $module): ?>
16
+ <tr class="<?php echo $module->getClass() ?>">
17
+ <td><strong><?php echo $module->getName() ?></strong></td>
18
+ <td><?php echo $module->getDescription() ?></td>
19
+ <td class="a-right"><code><?php echo $module->getVersion() ?></code></td>
20
+ </tr>
21
+ <?php endforeach; ?>
22
+ </tbody>
23
+ </table>
24
+ </div>
25
+ </div>
26
+ <?php endif; ?>
app/design/adminhtml/default/default/template/contactlab/subscribers/export.phtml CHANGED
@@ -1,6 +1,6 @@
1
- <div class="content-header">
2
- <?php echo $this->getHeaderHtml() ?>
3
- <p class="content-buttons form-buttons"><?php echo $this->getButtonsHtml() ?></p>
4
- </div>
5
-
6
  <?php echo $this->getChildHtml() ?>
1
+ <div class="content-header">
2
+ <?php echo $this->getHeaderHtml() ?>
3
+ <p class="content-buttons form-buttons"><?php echo $this->getButtonsHtml() ?></p>
4
+ </div>
5
+
6
  <?php echo $this->getChildHtml() ?>
app/design/adminhtml/default/default/template/contactlab/subscribers/subscribers.phtml CHANGED
@@ -1,26 +1,29 @@
1
- <div class="grid box-left" style="margin-top: 50px">
2
- <div class="hor-scroll">
3
- <h3 style="margin-top: 30px">Import/export subscribers</h3>
4
- <table class="data" cellspacing="0">
5
- <thead>
6
- <tr class="headings">
7
- <th colspan="2"><?php echo $this->__('Use this panel to manually queue import, export and statistics reset tasks') ?></th>
8
- </tr>
9
- </thead>
10
- <tbody>
11
- <tr class="even">
12
- <td><?php echo $this->__('Queue <strong>import subscribers</strong> task') ?></td>
13
- <td><?php echo $this->getChildHtml('contactlab.commons.subscribe.import') ?></td>
14
- </tr>
15
- <tr class="even">
16
- <td><?php echo $this->__('Queue <strong>export subscribers</strong> task') ?></td>
17
- <td><?php echo $this->getChildHtml('contactlab.commons.subscribe.export') ?></td>
18
- </tr>
19
- <tr class="even">
20
- <td><?php echo $this->__('Queue <strong>statistics update</strong> task') ?></td>
21
- <td><?php echo $this->getChildHtml('contactlab.commons.subscribe.stats') ?></td>
22
- </tr>
23
- </tbody>
24
- </table>
25
- </div>
 
 
 
26
  </div>
1
+ <div class="grid box-left" style="margin-top: 50px">
2
+ <div class="hor-scroll">
3
+ <h3 style="margin-top: 30px">Import/export subscribers</h3>
4
+ <table class="data" cellspacing="0">
5
+ <thead>
6
+ <tr class="headings">
7
+ <th colspan="3"><?php echo $this->__('Use this panel to manually queue import, export and statistics reset tasks') ?></th>
8
+ </tr>
9
+ </thead>
10
+ <tbody>
11
+ <tr class="even">
12
+ <td><?php echo $this->__('Queue <strong>import subscribers</strong> task') ?></td>
13
+ <td><?php echo $this->getChildHtml('contactlab.commons.subscribe.import') ?></td>
14
+ <td><a href="<?php echo $this->getUrl('adminhtml/system_config/edit', array('section' => 'contactlab_subscribers_2')) ?>"><?php echo $this->__('Configure') ?></a></td>
15
+ </tr>
16
+ <tr class="even">
17
+ <td><?php echo $this->__('Queue <strong>export subscribers</strong> task') ?></td>
18
+ <td><?php echo $this->getChildHtml('contactlab.commons.subscribe.export') ?></td>
19
+ <td><a href="<?php echo $this->getUrl('adminhtml/system_config/edit', array('section' => 'contactlab_subscribers')) ?>"><?php echo $this->__('Configure') ?></a></td>
20
+ </tr>
21
+ <tr class="even">
22
+ <td><?php echo $this->__('Queue <strong>statistics update</strong> task') ?></td>
23
+ <td><?php echo $this->getChildHtml('contactlab.commons.subscribe.stats') ?></td>
24
+ <td><a href="<?php echo $this->getUrl('adminhtml/system_config/edit', array('section' => 'contactlab_subscribers')) ?>"><?php echo $this->__('Configure') ?></a></td>
25
+ </tr>
26
+ </tbody>
27
+ </table>
28
+ </div>
29
  </div>
app/design/adminhtml/default/default/template/contactlab/subscribers/uk.phtml CHANGED
@@ -1,28 +1,28 @@
1
- <div class="grid box-right" style="margin-top: 50px">
2
- <div class="hor-scroll">
3
- <h3 style="margin-top: 30px">Uk table</h3>
4
- <table class="data" cellspacing="0">
5
- <thead>
6
- <tr class="headings">
7
- <th colspan="2"><?php echo $this->__('Use these panel to reset, check and update UK table') ?></th>
8
- </tr>
9
- </thead>
10
- <tbody>
11
- <tr class="even">
12
- <td><?php echo $this->__('Use this function to completely remove all the associated UK records.<br/>After this operation, it will be neccessary queue an UK update task.') ?></td>
13
- <td><?php echo $this->getChildHtml('contactlab.commons.uk.truncate') ?></td>
14
- </tr>
15
- <tr class="even">
16
- <td><?php echo $this->__('Use this function to check the integrity of the UK table. If some errors have been found, please queue an UK update task.') ?></td>
17
- <td><?php echo $this->getChildHtml('contactlab.commons.uk.check') ?></td>
18
- </tr>
19
- <tr>
20
- <td><?php echo $this->__('Use this function to queue an update UK table task.') ?></td>
21
- <td><?php echo $this->getChildHtml('contactlab.commons.uk.update') ?></td>
22
- </tr>
23
- </tbody>
24
- </table>
25
- <p><em><?php echo $this->__('UK table contains ContactLab Identifiers that are associated with Magento Customers and Newsletter Subscribers') ?>.</em></p>
26
- <p><strong><?php echo $this->__('Every reset operation neet to be agreed with the Contactlab customer care.') ?></strong></p>
27
- </div>
28
  </div>
1
+ <div class="grid box-right" style="margin-top: 50px">
2
+ <div class="hor-scroll">
3
+ <h3 style="margin-top: 30px">UK table</h3>
4
+ <table class="data" cellspacing="0">
5
+ <thead>
6
+ <tr class="headings">
7
+ <th colspan="2"><?php echo $this->__('Use this panel to reset, check and update the UK table') ?></th>
8
+ </tr>
9
+ </thead>
10
+ <tbody>
11
+ <tr class="even">
12
+ <td><?php echo $this->__('Use this to completely remove all the associated UK records.<br/>After this operation, you need to queue a UK table update task.') ?></td>
13
+ <td><?php echo $this->getChildHtml('contactlab.commons.uk.truncate') ?></td>
14
+ </tr>
15
+ <tr class="even">
16
+ <td><?php echo $this->__('Use this to check the integrity of the UK table.<br/>If some errors are found, please queue a UK table update task.') ?></td>
17
+ <td><?php echo $this->getChildHtml('contactlab.commons.uk.check') ?></td>
18
+ </tr>
19
+ <tr>
20
+ <td><?php echo $this->__('Use this to queue a UK table update task.') ?></td>
21
+ <td><?php echo $this->getChildHtml('contactlab.commons.uk.update') ?></td>
22
+ </tr>
23
+ </tbody>
24
+ </table>
25
+ <p><em><?php echo $this->__('UK table contains ContactLab Identifiers that are associated with Magento Customers and Newsletter Subscribers') ?>.</em></p>
26
+ <p><strong><?php echo $this->__('Every reset operation needs to be agreed with ContactLab customer care.') ?></strong></p>
27
+ </div>
28
  </div>
app/design/adminhtml/default/default/template/contactlab/template/edit/js.phtml CHANGED
@@ -1,172 +1,178 @@
1
- <script type="text/javascript">
2
- var templateTypeOptionsUpdater = (function ($) {
3
- var my = {}, that = {};
4
-
5
- my.updateTemplateTypeOptions = function () {
6
- var options = my.templateTypeOptions[$("template_type_id").getValue()],
7
- showFilterProducts = options.visible,
8
- isXmlEnabled = $('enable_xml_delivery').getValue() === '1';
9
- if ($('is_cron_enabled').getValue() !== (options.useCron ? '1' : '0')) {
10
- if (confirm(options.alertCronChange)) {
11
- $('is_cron_enabled').setValue(options.useCron ? '1' : '0');
12
- }
13
- }
14
-
15
- if (showFilterProducts && isXmlEnabled
16
- && ($('min_minutes_from_last_update').getValue() !== options.min_minutes_from_last_update
17
- || $('max_minutes_from_last_update').getValue() !== options.max_minutes_from_last_update
18
- || $('min_value').getValue() !== options.min_value
19
- || $('max_value').getValue() !== options.max_value
20
- || $('min_products').getValue() !== options.min_products
21
- || $('max_products').getValue() !== options.max_products
22
- || $('and_or').getValue() !== options.and_or)) {
23
- if (confirm(options.alertOptionChange)) {
24
- $('min_minutes_from_last_update').setValue(options.min_minutes_from_last_update || '');
25
- $('max_minutes_from_last_update').setValue(options.max_minutes_from_last_update || '');
26
- $('min_value').setValue(options.min_value || '');
27
- $('max_value').setValue(options.max_value || '');
28
- $('min_products').setValue(options.min_products || '');
29
- $('max_products').setValue(options.max_products || '');
30
- $('and_or').setValue(options.and_or);
31
- }
32
-
33
- }
34
- my.recalcVisible();
35
- };
36
-
37
- my.updateDefault = function (el, value) {
38
- if ($('default-' + el)) {
39
- $('default-' + el).remove();
40
- }
41
- if (value) {
42
- $(el).insert({
43
- after: new Element('span', {'style': 'margin-left: 20px'})
44
- .update("Default value: \"" + value + "\"")});
45
- }
46
- };
47
-
48
- my.updateTemplateTypeOptionsDefaults = function () {
49
- var options = my.templateTypeOptions[$("template_type_id").getValue()];
50
- my.updateDefault('min_minutes_from_last_update', options.min_minutes_from_last_update);
51
- my.updateDefault('max_minutes_from_last_update', options.max_minutes_from_last_update);
52
- my.updateDefault('min_value', options.min_value);
53
- my.updateDefault('max_value', options.max_value);
54
- my.updateDefault('min_products', options.min_products);
55
- my.updateDefault('max_products', options.max_products);
56
- my.updateDefault('and_or', options.and_or);
57
- my.recalcVisible();
58
- };
59
-
60
- my.recalcVisible = function () {
61
- var options = my.templateTypeOptions[$("template_type_id").getValue()],
62
- showFilterProducts = options.visible,
63
- isXmlEnabled = $('enable_xml_delivery').getValue() === '1',
64
- isCronEnabled = $('is_cron_enabled').getValue() === '1',
65
- mode = $('flg_html_txt').getValue(),
66
- isTxtMode = mode === 'T' || mode === 'B',
67
- isHtmlMode = mode === 'H' || mode === 'B';
68
-
69
- if (showFilterProducts && isXmlEnabled) {
70
- $('customer_filter_fieldset').previous().show();
71
- $('customer_filter_fieldset').show();
72
- $('product_fieldset').previous().show();
73
- $('product_fieldset').show();
74
- } else {
75
- $('customer_filter_fieldset').previous().hide();
76
- $('customer_filter_fieldset').hide();
77
- $('product_fieldset').previous().hide();
78
- $('product_fieldset').hide();
79
- }
80
- if (isCronEnabled && isXmlEnabled) {
81
- $('cron_date_range_start').up().up().show();
82
- $('cron_date_range_end').up().up().show();
83
- $('queue_delay_time').up().up().show();
84
- $('priority').up().up().show();
85
- } else {
86
- $('cron_date_range_start').up().up().hide();
87
- $('cron_date_range_end').up().up().hide();
88
- $('queue_delay_time').up().up().hide();
89
- $('priority').up().up().hide();
90
- }
91
- if (isXmlEnabled) {
92
- $('cron_fieldset').previous().show();
93
- $('cron_fieldset').show();
94
- $('reply_to').up().up().show();
95
- $('template_type_id').up().up().show();
96
- $('template_text_plain').up().up().show();
97
- $('flg_html_txt').up().up().show();
98
- $('is_test_mode').up().up().show();
99
- } else {
100
- $('cron_fieldset').previous().hide();
101
- $('cron_fieldset').hide();
102
- $('reply_to').up().up().hide();
103
- $('template_type_id').up().up().hide();
104
- $('template_text_plain').up().up().hide();
105
- $('flg_html_txt').up().up().hide();
106
- $('is_test_mode').up().up().hide();
107
- }
108
-
109
- if (isHtmlMode || !isXmlEnabled) {
110
- $('text').up().up().show();
111
- $('text').addClassName('required-entry');
112
- } else {
113
- $('text').up().up().hide();
114
- $('text').removeClassName('required-entry');
115
- }
116
-
117
- if (isXmlEnabled) {
118
- if (isTxtMode) {
119
- $('template_text_plain').up().up().show();
120
- $('template_text_plain').addClassName('required-entry');
121
- } else {
122
- $('template_text_plain').up().up().hide();
123
- $('template_text_plain').removeClassName('required-entry');
124
- }
125
- if (isHtmlMode) {
126
- $('template_styles').up().up().show();
127
- } else {
128
- $('template_styles').up().up().hide();
129
- }
130
- } else {
131
- $('template_text_plain').removeClassName('required-entry');
132
- $('template_text_plain').up().up().hide();
133
- $('template_styles').up().up().hide();
134
- }
135
-
136
-
137
- if (isHtmlMode) {
138
- my.onlyHtml.each(function (item) { item.up().up().show(); });
139
- } else {
140
- my.onlyHtml.each(function (item) { item.up().up().hide(); });
141
- }
142
- if (isTxtMode) {
143
- my.onlyTxt.each(function (item) { item.up().up().show(); });
144
- } else {
145
- my.onlyTxt.each(function (item) { item.up().up().hide(); });
146
- }
147
- };
148
-
149
-
150
- my.init = function () {
151
- my.templateTypeOptions = <?php echo $this->getTemplateTypeOptionsJson() ?>;
152
- Event.observe('template_type_id', 'change', my.updateTemplateTypeOptions);
153
- Event.observe('is_cron_enabled', 'change', my.recalcVisible);
154
- Event.observe('flg_html_txt', 'change', my.recalcVisible);
155
- Event.observe('enable_xml_delivery', 'change', my.recalcVisible);
156
-
157
- my.onlyTxt = [];
158
- my.onlyHtml = [];
159
- [1, 2, 3, 4, 5].each(function (item) {
160
- my.onlyHtml.push($('template_pr_html_' + item));
161
- my.onlyTxt.push($('template_pr_txt_' + item));
162
- });
163
- my.recalcVisible();
164
- my.updateTemplateTypeOptionsDefaults();
165
- };
166
-
167
- my.init();
168
-
169
- return that;
170
- }($));
171
-
172
- </script>
 
 
 
 
 
 
1
+ <script type="text/javascript">
2
+ var templateTypeOptionsUpdater = (function ($) {
3
+ var my = {}, that = {};
4
+
5
+
6
+ my.getTemplateTypeId = function () {
7
+ return $("template_type_id").getValue() || 'undefined';
8
+ };
9
+
10
+ my.updateTemplateTypeOptions = function () {
11
+ var options = my.templateTypeOptions[my.getTemplateTypeId()],
12
+ showFilterProducts = options.visible,
13
+ isXmlEnabled = $('enable_xml_delivery').getValue() === '1';
14
+ if ($('is_cron_enabled').getValue() !== (options.useCron ? '1' : '0')) {
15
+ if (confirm(options.alertCronChange)) {
16
+ $('is_cron_enabled').setValue(options.useCron ? '1' : '0');
17
+ }
18
+ }
19
+
20
+ if (showFilterProducts && isXmlEnabled
21
+ && ($('min_minutes_from_last_update').getValue() !== options.min_minutes_from_last_update
22
+ || $('max_minutes_from_last_update').getValue() !== options.max_minutes_from_last_update
23
+ || $('min_value').getValue() !== options.min_value
24
+ || $('max_value').getValue() !== options.max_value
25
+ || $('min_products').getValue() !== options.min_products
26
+ || $('max_products').getValue() !== options.max_products
27
+ || $('and_or').getValue() !== options.and_or)) {
28
+ if (confirm(options.alertOptionChange)) {
29
+ $('min_minutes_from_last_update').setValue(options.min_minutes_from_last_update || '');
30
+ $('max_minutes_from_last_update').setValue(options.max_minutes_from_last_update || '');
31
+ $('min_value').setValue(options.min_value || '');
32
+ $('max_value').setValue(options.max_value || '');
33
+ $('min_products').setValue(options.min_products || '');
34
+ $('max_products').setValue(options.max_products || '');
35
+ $('and_or').setValue(options.and_or);
36
+ }
37
+
38
+ }
39
+ my.recalcVisible();
40
+ };
41
+
42
+ my.updateDefault = function (el, value) {
43
+ if ($('default-' + el)) {
44
+ $('default-' + el).remove();
45
+ }
46
+ if (value) {
47
+ $(el).insert({
48
+ after: new Element('span', {'style': 'margin-left: 20px'})
49
+ .update("Default value: \"" + value + "\"")});
50
+ }
51
+ };
52
+
53
+ my.updateTemplateTypeOptionsDefaults = function () {
54
+ var options = my.templateTypeOptions[my.getTemplateTypeId()];
55
+ my.updateDefault('min_minutes_from_last_update', options.min_minutes_from_last_update);
56
+ my.updateDefault('max_minutes_from_last_update', options.max_minutes_from_last_update);
57
+ my.updateDefault('min_value', options.min_value);
58
+ my.updateDefault('max_value', options.max_value);
59
+ my.updateDefault('min_products', options.min_products);
60
+ my.updateDefault('max_products', options.max_products);
61
+ my.updateDefault('and_or', options.and_or);
62
+ my.recalcVisible();
63
+ };
64
+
65
+ my.recalcVisible = function () {
66
+ var options = my.templateTypeOptions[my.getTemplateTypeId()],
67
+ showFilterProducts = options.visible,
68
+ isXmlEnabled = $('enable_xml_delivery').getValue() === '1',
69
+ isCronEnabled = $('is_cron_enabled').getValue() === '1',
70
+ mode = $('flg_html_txt').getValue(),
71
+ isTxtMode = mode === 'T' || mode === 'B',
72
+ isHtmlMode = mode === 'H' || mode === 'B';
73
+
74
+ if (showFilterProducts && isXmlEnabled) {
75
+ $('customer_filter_fieldset').previous().show();
76
+ $('customer_filter_fieldset').show();
77
+ $('product_fieldset').previous().show();
78
+ $('product_fieldset').show();
79
+ } else {
80
+ $('customer_filter_fieldset').previous().hide();
81
+ $('customer_filter_fieldset').hide();
82
+ $('product_fieldset').previous().hide();
83
+ $('product_fieldset').hide();
84
+ }
85
+ if (isCronEnabled && isXmlEnabled) {
86
+ $('cron_date_range_start').up().up().show();
87
+ $('cron_date_range_end').up().up().show();
88
+ $('queue_delay_time').up().up().show();
89
+ $('priority').up().up().show();
90
+ } else {
91
+ $('cron_date_range_start').up().up().hide();
92
+ $('cron_date_range_end').up().up().hide();
93
+ $('queue_delay_time').up().up().hide();
94
+ $('priority').up().up().hide();
95
+ }
96
+ if (isXmlEnabled) {
97
+ $('cron_fieldset').previous().show();
98
+ $('cron_fieldset').show();
99
+ $('reply_to').up().up().show();
100
+ $('template_type_id').up().up().show();
101
+ $('template_text_plain').up().up().show();
102
+ $('flg_html_txt').up().up().show();
103
+ $('is_test_mode').up().up().show();
104
+ } else {
105
+ $('cron_fieldset').previous().hide();
106
+ $('cron_fieldset').hide();
107
+ $('reply_to').up().up().hide();
108
+ $('template_type_id').up().up().hide();
109
+ $('template_text_plain').up().up().hide();
110
+ $('flg_html_txt').up().up().hide();
111
+ $('is_test_mode').up().up().hide();
112
+ }
113
+
114
+ if (isHtmlMode || !isXmlEnabled) {
115
+ $('text').up().up().show();
116
+ $('text').addClassName('required-entry');
117
+ } else {
118
+ $('text').up().up().hide();
119
+ $('text').removeClassName('required-entry');
120
+ }
121
+
122
+ if (isXmlEnabled) {
123
+ if (isTxtMode) {
124
+ $('template_text_plain').up().up().show();
125
+ $('template_text_plain').addClassName('required-entry');
126
+ } else {
127
+ $('template_text_plain').up().up().hide();
128
+ $('template_text_plain').removeClassName('required-entry');
129
+ }
130
+ if (isHtmlMode) {
131
+ $('template_styles').up().up().show();
132
+ } else {
133
+ $('template_styles').up().up().hide();
134
+ }
135
+ } else {
136
+ $('template_text_plain').removeClassName('required-entry');
137
+ $('template_text_plain').up().up().hide();
138
+ $('template_styles').up().up().hide();
139
+ }
140
+
141
+
142
+ if (isHtmlMode) {
143
+ my.onlyHtml.each(function (item) { item.up().up().show(); });
144
+ } else {
145
+ my.onlyHtml.each(function (item) { item.up().up().hide(); });
146
+ }
147
+ if (isTxtMode) {
148
+ my.onlyTxt.each(function (item) { item.up().up().show(); });
149
+ } else {
150
+ my.onlyTxt.each(function (item) { item.up().up().hide(); });
151
+ }
152
+ };
153
+
154
+
155
+ my.init = function () {
156
+ my.templateTypeOptions = <?php echo $this->getTemplateTypeOptionsJson() ?>;
157
+ my.templateTypeOptions['undefined'] = {};
158
+ Event.observe('template_type_id', 'change', my.updateTemplateTypeOptions);
159
+ Event.observe('is_cron_enabled', 'change', my.recalcVisible);
160
+ Event.observe('flg_html_txt', 'change', my.recalcVisible);
161
+ Event.observe('enable_xml_delivery', 'change', my.recalcVisible);
162
+
163
+ my.onlyTxt = [];
164
+ my.onlyHtml = [];
165
+ [1, 2, 3, 4, 5].each(function (item) {
166
+ my.onlyHtml.push($('template_pr_html_' + item));
167
+ my.onlyTxt.push($('template_pr_txt_' + item));
168
+ });
169
+ my.recalcVisible();
170
+ my.updateTemplateTypeOptionsDefaults();
171
+ };
172
+
173
+ my.init();
174
+
175
+ return that;
176
+ }($));
177
+
178
+ </script>
app/design/adminhtml/default/default/template/contactlab/template/edit/validation.phtml CHANGED
@@ -1,45 +1,45 @@
1
- <script type="text/javascript">
2
-
3
- var getOppositeElement = function (elId) {
4
- var oppositeId;
5
- if (elId.replace(/[_-]/g, ' ').match(/\bmax\b/)) {
6
- oppositeId = elId.replace(/max/, 'min');
7
- } else if (elId.replace(/[_-]/g, ' ').match(/\bmin\b/)) {
8
- oppositeId = elId.replace(/min/, 'max');
9
- }
10
- return $(oppositeId);
11
- };
12
-
13
- // Custom validation
14
- Validation.add('validate-is-min-of-range', 'Minor value cannot be greater than maximum value', function (value, minEl) {
15
- var minValue = parseNumber(value), maxEl, maxValue;
16
- if (isNaN(minValue)) {
17
- return true;
18
- }
19
- maxEl = getOppositeElement(minEl.id);
20
- if (!maxEl) {
21
- return true;
22
- }
23
- maxValue = parseNumber(maxEl.value);
24
- if (isNaN(maxValue)) {
25
- return true;
26
- }
27
- return maxValue >= minValue;
28
- });
29
-
30
- Validation.add('validate-is-max-of-range', 'Maximum value cannot be lower than minimum value', function (value, maxEl) {
31
- var maxValue = parseNumber(value), minEl, minValue;
32
- if (isNaN(maxValue)) {
33
- return true;
34
- }
35
- minEl = getOppositeElement(maxEl.id);
36
- if (!minEl) {
37
- return true;
38
- }
39
- minValue = parseNumber(minEl.value);
40
- if (isNaN(minValue)) {
41
- return true;
42
- }
43
- return maxValue >= minValue;
44
- });
45
- </script>
1
+ <script type="text/javascript">
2
+
3
+ var getOppositeElement = function (elId) {
4
+ var oppositeId;
5
+ if (elId.replace(/[_-]/g, ' ').match(/\bmax\b/)) {
6
+ oppositeId = elId.replace(/max/, 'min');
7
+ } else if (elId.replace(/[_-]/g, ' ').match(/\bmin\b/)) {
8
+ oppositeId = elId.replace(/min/, 'max');
9
+ }
10
+ return $(oppositeId);
11
+ };
12
+
13
+ // Custom validation
14
+ Validation.add('validate-is-min-of-range', 'Minor value cannot be greater than maximum value', function (value, minEl) {
15
+ var minValue = parseNumber(value), maxEl, maxValue;
16
+ if (isNaN(minValue)) {
17
+ return true;
18
+ }
19
+ maxEl = getOppositeElement(minEl.id);
20
+ if (!maxEl) {
21
+ return true;
22
+ }
23
+ maxValue = parseNumber(maxEl.value);
24
+ if (isNaN(maxValue)) {
25
+ return true;
26
+ }
27
+ return maxValue >= minValue;
28
+ });
29
+
30
+ Validation.add('validate-is-max-of-range', 'Maximum value cannot be lower than minimum value', function (value, maxEl) {
31
+ var maxValue = parseNumber(value), minEl, minValue;
32
+ if (isNaN(maxValue)) {
33
+ return true;
34
+ }
35
+ minEl = getOppositeElement(maxEl.id);
36
+ if (!minEl) {
37
+ return true;
38
+ }
39
+ minValue = parseNumber(minEl.value);
40
+ if (isNaN(minValue)) {
41
+ return true;
42
+ }
43
+ return maxValue >= minValue;
44
+ });
45
+ </script>
app/design/adminhtml/default/default/template/contactlab/template/tasks/buttons.phtml CHANGED
@@ -1,13 +1,16 @@
1
- <div class="grid box-left" style="margin-top: 5px">
2
- <div class="hor-scroll">
3
- <h3 style="margin-top: 10px">Recurring email</h3>
4
- <table style="border-collapse: collapse">
5
- <colgroup>
6
- <col style="width: 200px"/>
7
- <col/>
8
- </colgroup>
9
- <tr><td/><td><?php echo $this->getChildHtml('contactlab.template.queue') ?></td></tr>
10
- <tr><?php echo $this->getChildHtml('contactlab.template.email') ?></tr>
11
- </table>
12
- </div>
13
- </div>
 
 
 
1
+ <div class="grid box-left" style="margin-top: 5px">
2
+ <div class="hor-scroll">
3
+ <h3 style="margin-top: 10px">Recurring email</h3>
4
+ <table style="border-collapse: collapse">
5
+ <colgroup>
6
+ <col style="width: 200px"/>
7
+ <col/>
8
+ <col/>
9
+ </colgroup>
10
+ <tr><td/><td colspan="2"><?php echo $this->getChildHtml('contactlab.template.queue') ?></td></tr>
11
+ <tr><?php echo $this->getChildHtml('contactlab.template.email') ?>
12
+ <td><a href="<?php echo $this->getUrl('adminhtml/system_config/edit', array('section' => 'contactlab_template')) ?>"><?php echo $this->__('Configure') ?></a></td>
13
+ </tr>
14
+ </table>
15
+ </div>
16
+ </div>
app/design/adminhtml/default/default/template/contactlab/template/tasks/debugemail.phtml CHANGED
@@ -1,3 +1,3 @@
1
- <td><label for="email-address-debug"><?php echo $this->__('Debug an email address') ?>:</label></td>
2
- <td><input type="text" name="email-address-debug" id="email-address-debug" value="<?php
3
- echo filter_var(Mage::app()->getRequest()->getParam('address'), FILTER_VALIDATE_EMAIL) ?>" class="input-text"></td>
1
+ <td><label for="email-address-debug"><?php echo $this->__('Debug an email address') ?>:</label></td>
2
+ <td><input type="text" name="email-address-debug" id="email-address-debug" value="<?php
3
+ echo filter_var(Mage::app()->getRequest()->getParam('address'), FILTER_VALIDATE_EMAIL) ?>" class="input-text"></td>
app/design/adminhtml/default/default/template/contactlab/template/type/edit.phtml CHANGED
@@ -1,69 +1,69 @@
1
- <?php
2
- /**
3
- * Magento
4
- *
5
- * NOTICE OF LICENSE
6
- *
7
- * This source file is subject to the Academic Free License (AFL 3.0)
8
- * that is bundled with this package in the file LICENSE_AFL.txt.
9
- * It is also available through the world-wide-web at this URL:
10
- * http://opensource.org/licenses/afl-3.0.php
11
- * If you did not receive a copy of the license and are unable to
12
- * obtain it through the world-wide-web, please send an email
13
- * to license@magentocommerce.com so we can send you a copy immediately.
14
- *
15
- * DISCLAIMER
16
- *
17
- * Do not edit or add to this file if you wish to upgrade Magento to newer
18
- * versions in the future. If you wish to customize Magento for your
19
- * needs please refer to http://www.magentocommerce.com for more information.
20
- *
21
- * @category design
22
- * @package default_default
23
- * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
- * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
- */
26
- /* @var $this Mage_Adminhtml_Block_Newsletter_Template_Edit */
27
- ?>
28
- <div class="content-header">
29
- <h3 class="icon-head head-newsletter-list"><?php echo $this->getHeaderText() ?></h3>
30
- <p class="content-buttons form-buttons">
31
- <?php echo $this->getBackButtonHtml(); ?>
32
- <?php echo $this->getResetButtonHtml(); ?>
33
- <?php if($this->getEditMode()): ?>
34
- <?php echo $this->getDeleteButtonHtml(); ?>
35
- <?php endif ?>
36
- <?php echo $this->getSaveButtonHtml(); ?>
37
- </p>
38
- </div>
39
- <form action="<?php echo $this->getSaveUrl() ?>" method="post" id="contactlab_template_type_edit_form">
40
- <?php echo $this->getBlockHtml('formkey')?>
41
- <div class="no-display">
42
- <input type="hidden" id="change_flag_element" name="_change_type_flag" value="" />
43
- </div>
44
- <?php echo $this->getForm() ?>
45
- </form>
46
- <form action="<?php echo $this->getPreviewUrl() ?>" method="post" id="contactlab_template_type_edit_form" target="_blank">
47
- <?php echo $this->getBlockHtml('formkey')?>
48
- <div class="no-display">
49
- <input type="hidden" id="preview_text" name="text" value="" />
50
- <input type="hidden" id="preview_styles" name="styles" value="" />
51
- <input type="hidden" id="preview_id" name="id" value="" />
52
- </div>
53
- </form>
54
- <script type="text/javascript">
55
- //<![CDATA[
56
- var templateForm = new varienForm('contactlab_template_type_edit_form');
57
- var templateControl = {
58
- save: function() {
59
- templateForm.submit();
60
- return false;
61
- },
62
- deleteTemplate: function() {
63
- if (window.confirm("<?php echo Mage::helper('newsletter')->__('Are you sure that you want to delete this template type?') ?>")) {
64
- window.location.href = '<?php echo $this->getDeleteUrl() ?>';
65
- }
66
- },
67
- };
68
- //]]>
69
- </script>
1
+ <?php
2
+ /**
3
+ * Magento
4
+ *
5
+ * NOTICE OF LICENSE
6
+ *
7
+ * This source file is subject to the Academic Free License (AFL 3.0)
8
+ * that is bundled with this package in the file LICENSE_AFL.txt.
9
+ * It is also available through the world-wide-web at this URL:
10
+ * http://opensource.org/licenses/afl-3.0.php
11
+ * If you did not receive a copy of the license and are unable to
12
+ * obtain it through the world-wide-web, please send an email
13
+ * to license@magentocommerce.com so we can send you a copy immediately.
14
+ *
15
+ * DISCLAIMER
16
+ *
17
+ * Do not edit or add to this file if you wish to upgrade Magento to newer
18
+ * versions in the future. If you wish to customize Magento for your
19
+ * needs please refer to http://www.magentocommerce.com for more information.
20
+ *
21
+ * @category design
22
+ * @package default_default
23
+ * @copyright Copyright (c) 2012 Magento Inc. (http://www.magentocommerce.com)
24
+ * @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
25
+ */
26
+ /* @var $this Mage_Adminhtml_Block_Newsletter_Template_Edit */
27
+ ?>
28
+ <div class="content-header">
29
+ <h3 class="icon-head head-newsletter-list"><?php echo $this->getHeaderText() ?></h3>
30
+ <p class="content-buttons form-buttons">
31
+ <?php echo $this->getBackButtonHtml(); ?>
32
+ <?php echo $this->getResetButtonHtml(); ?>
33
+ <?php if($this->getEditMode()): ?>
34
+ <?php echo $this->getDeleteButtonHtml(); ?>
35
+ <?php endif ?>
36
+ <?php echo $this->getSaveButtonHtml(); ?>
37
+ </p>
38
+ </div>
39
+ <form action="<?php echo $this->getSaveUrl() ?>" method="post" id="contactlab_template_type_edit_form">
40
+ <?php echo $this->getBlockHtml('formkey')?>
41
+ <div class="no-display">
42
+ <input type="hidden" id="change_flag_element" name="_change_type_flag" value="" />
43
+ </div>
44
+ <?php echo $this->getForm() ?>
45
+ </form>
46
+ <form action="<?php echo $this->getPreviewUrl() ?>" method="post" id="contactlab_template_type_edit_form" target="_blank">
47
+ <?php echo $this->getBlockHtml('formkey')?>
48
+ <div class="no-display">
49
+ <input type="hidden" id="preview_text" name="text" value="" />
50
+ <input type="hidden" id="preview_styles" name="styles" value="" />
51
+ <input type="hidden" id="preview_id" name="id" value="" />
52
+ </div>
53
+ </form>
54
+ <script type="text/javascript">
55
+ //<![CDATA[
56
+ var templateForm = new varienForm('contactlab_template_type_edit_form');
57
+ var templateControl = {
58
+ save: function() {
59
+ templateForm.submit();
60
+ return false;
61
+ },
62
+ deleteTemplate: function() {
63
+ if (window.confirm("<?php echo Mage::helper('newsletter')->__('Are you sure that you want to delete this template type?') ?>")) {
64
+ window.location.href = '<?php echo $this->getDeleteUrl() ?>';
65
+ }
66
+ },
67
+ };
68
+ //]]>
69
+ </script>
app/design/frontend/base/default/layout/contactlab/layout.xml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <layout version="0.1.0">
3
+ <catalog_product_view>
4
+ <reference name="head">
5
+ <block type="core/text" name="your_external_file">
6
+ <action method="setText"><text><![CDATA[<script>console.log("ContactHub EventTracker loaded.");</script>]]></text></action>
7
+ </block>
8
+ </reference>
9
+ </catalog_product_view>
10
+ </layout>
app/design/frontend/base/default/layout/contactlab/subscribers.xml ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <layout version="0.1.0">
3
+ <default>
4
+ <reference name="footer">
5
+ <action method="unsetChild" ifconfig="contactlab_subscribers/newsletter/enable">
6
+ <name>newsletter</name>
7
+ </action>
8
+ <block type="contactlab_subscribers/newsletter_subscribers_subscribe" name="contactlab.newsletter"
9
+ template="contactlab/subscribers/newsletter/subscribers/subscribe.phtml"/>
10
+ <block type="contactlab_subscribers/newsletter_subscribers_modify" name="contactlab.newsletter.modify"
11
+ template="contactlab/subscribers/newsletter/subscribers/modify.phtml"/>
12
+ </reference>
13
+ <reference name="left">
14
+ <action method="unsetChild" ifconfig="contactlab_subscribers/newsletter/enable">
15
+ <name>left.newsletter</name>
16
+ </action>
17
+ <block type="contactlab_subscribers/newsletter_subscribers_subscribe" name="contactlab.newsletter"
18
+ template="contactlab/subscribers/newsletter/subscribers/subscribe.phtml"/>
19
+ <block type="contactlab_subscribers/newsletter_subscribers_modify" name="contactlab.newsletter.modify"
20
+ template="contactlab/subscribers/newsletter/subscribers/modify.phtml"/>
21
+ </reference>
22
+ </default>
23
+ <contactlab_subscribers_edit_index>
24
+ <reference name="root">
25
+ <action method="setTemplate"><template>page/empty.phtml</template></action>
26
+ <reference name="content">
27
+ <block type="contactlab_subscribers/newsletter_subscribers_update" name="contactlab.newsletter"
28
+ template="contactlab/subscribers/newsletter/subscribers/update.phtml"/>
29
+ </reference>
30
+ </reference>
31
+ </contactlab_subscribers_edit_index>
32
+ </layout>
app/design/frontend/base/default/template/contactlab/subscribers/newsletter/subscribers/modify.phtml ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="block block-subscribe">
2
+ <div class="block-title">
3
+ <strong><span><?php echo $this->__('Subscribed users') ?></span></strong>
4
+ </div>
5
+ <form action="<?php echo $this->getFormActionUrl() ?>" method="post" id="newsletter-validate-detail">
6
+ <div class="block-content">
7
+ <div class="form-subscribe-header">
8
+ <label for="newsletter"><?php echo $this->__('Modify your data?') ?></label>
9
+ </div>
10
+ <div class="input-box">
11
+ <input type="<?php echo $this->getInputType()?>" name="email" id="newsletter" value="<?php echo $this->getCustomerEmail()?>" title="<?php echo $this->__('Your email') ?>" class="input-text required-entry validate-email" />
12
+ </div>
13
+ <div class="actions">
14
+ <button type="submit" title="<?php echo $this->__('Submit') ?>" class="button"><span><span><?php echo $this->__('Submit') ?></span></span></button>
15
+ </div>
16
+ </div>
17
+ </form>
18
+ <script type="text/javascript">
19
+ //<![CDATA[
20
+ var newsletterSubscriberFormDetail = new VarienForm('newsletter-validate-detail');
21
+ //]]>
22
+ </script>
23
+ </div>
app/design/frontend/base/default/template/contactlab/subscribers/newsletter/subscribers/subscribe.phtml ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="block block-subscribe">
2
+ <div class="block-title">
3
+ <strong><span><?php echo $this->__('Newsletter') ?></span></strong>
4
+ </div>
5
+ <form action="<?php echo $this->getFormActionUrl() ?>" method="post" id="newsletter-validate-detail">
6
+ <div class="block-content">
7
+ <div class="input-box">
8
+ <label for="newsletter"><?php echo $this->fieldLabel('email') ?></label>
9
+ <?php if($this->fieldChoices('email') < 1 ):?>
10
+ <input type="<?php echo $this->fieldInputType('email') ?>" name="email" id="newsletter" title="<?php echo $this->fieldTitle('email') ?>" class="input-text required-entry validate-email" />
11
+ <?php else: foreach (range(1, $this->fieldChoices('email')) as $choice) :?>
12
+ <input type="<?php echo $this->fieldInputType('email') ?>" name="email" id="newsletter" class="input-text required-entry validate-email"><?php echo $this->fieldChoice('email',$choice) ?><br>
13
+ <?php endforeach; endif;?>
14
+ </div>
15
+
16
+ <div class="input-box">
17
+ <label for="first-name"><?php echo $this->fieldLabel('fname') ?></label>
18
+ <?php if($this->fieldChoices('fname') < 1 ):?>
19
+ <input type="<?php echo $this->fieldInputType('fname') ?>" name="first_name" id="first-name" title="<?php echo $this->fieldTitle('fname') ?>" class="input-text" />
20
+ <?php else: foreach (range(1, $this->fieldChoices('fname')) as $choice) :?>
21
+ <input type="<?php echo $this->fieldInputType('fname') ?>" name="first_name" id="first-name" class="input-text"><?php echo $this->fieldChoice('fname',$choice) ?><br>
22
+ <?php endforeach; endif;?>
23
+ </div>
24
+
25
+ <div class="input-box">
26
+ <label for="last-name"><?php echo $this->fieldLabel('lname') ?></label>
27
+ <?php if($this->fieldChoices('lname') < 1 ):?>
28
+ <input type="<?php echo $this->fieldInputType('lname') ?>" name='last_name' id="last-name" title="<?php echo $this->fieldTitle('lname') ?>" class="input-text" />
29
+ <?php else: foreach (range(1, $this->fieldChoices('lname')) as $choice) :?>
30
+ <input type="<?php echo $this->fieldInputType('lname') ?>" name='last_name' id="last-name" class="input-text"><?php echo $this->fieldChoice('lname',$choice) ?><br>
31
+ <?php endforeach; endif;?>
32
+ </div>
33
+
34
+ <div class="input-box">
35
+ <label for="id-company"><?php echo $this->fieldLabel('company') ?></label>
36
+ <?php if($this->fieldChoices('company') < 1 ):?>
37
+ <input type="<?php echo $this->fieldInputType('company') ?>" name='company' id="id-company" title="<?php echo $this->fieldTitle('company') ?>" class="input-text" />
38
+ <?php else: foreach (range(1, $this->fieldChoices('company')) as $choice) :?>
39
+ <input type="<?php echo $this->fieldInputType('company') ?>" name='company' id="id-company" class="input-text"><?php echo $this->fieldChoice('company',$choice) ?><br>
40
+ <?php endforeach; endif;?>
41
+ </div>
42
+
43
+ <div class="input-box">
44
+ <label for="id-gender"><?php echo $this->fieldLabel('gender') ?></label><br>
45
+ <?php if($this->fieldChoices('gender') < 1 ):?>
46
+ <input type="<?php echo $this->fieldInputType('gender') ?>" name='gender' id="id-gender" title="<?php echo $this->fieldTitle('gender') ?>" class="radio"/>
47
+ <?php else: foreach (range(1, $this->fieldChoices('gender')) as $choice) :?>
48
+ <input type="<?php echo $this->fieldInputType('gender') ?>" name='gender' id="id-gender" value="<?php echo $this->fieldValue('gender',$choice) ?>" class="radio"/><?php echo $this->fieldChoice('gender',$choice) ?><br>
49
+ <?php endforeach; endif;?>
50
+ </div>
51
+
52
+ <div class="input-box">
53
+ <label for="id-dob"><?php echo $this->fieldLabel('dob') ?></label><br>
54
+ <?php if($this->fieldChoices('dob') < 1 ):?>
55
+ <input type="<?php echo $this->fieldInputType('dob') ?>" name='dob' id="id-dob" title="<?php echo $this->fieldTitle('dob') ?>" class="input-text"/>
56
+ <?php else: foreach (range(1, $this->fieldChoices('dob')) as $choice) :?>
57
+ <input type="<?php echo $this->fieldInputType('dob') ?>" name='dob' id="id-dob" value="<?php echo $this->fieldValue('dob',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('dob',$choice) ?><br>
58
+ <?php endforeach; endif;?>
59
+ </div>
60
+
61
+ <div class="input-box">
62
+ <label for="id-privacy"><?php echo $this->fieldLabel('privacy') ?></label><br>
63
+ <?php if($this->fieldChoices('privacy') < 1 ):?>
64
+ <input type="<?php echo $this->fieldInputType('privacy') ?>" name='privacy' id="id-privacy" title="<?php echo $this->fieldTitle('privacy') ?>" class="radio"/>
65
+ <?php else: foreach (range(1, $this->fieldChoices('privacy')) as $choice) :?>
66
+ <input type="<?php echo $this->fieldInputType('privacy') ?>" name='privacy' id="id-privacy" value="<?php echo $this->fieldValue('privacy',$choice) ?>" class="radio"/><?php echo $this->fieldChoice('privacy',$choice) ?><br>
67
+ <?php endforeach; endif;?>
68
+ </div>
69
+
70
+ <div class="input-box">
71
+ <label for="id-custom1"><?php echo $this->fieldLabel('custom1') ?></label><br>
72
+ <?php if($this->fieldChoices('custom1') < 1 ):?>
73
+ <input type="<?php echo $this->fieldInputType('custom1') ?>" name='custom_1' id="id-custom1" title="<?php echo $this->fieldTitle('custom1') ?>" class="input-text"/>
74
+ <?php else: foreach (range(1, $this->fieldChoices('custom1')) as $choice) :?>
75
+ <input type="<?php echo $this->fieldInputType('custom1') ?>" name='custom_1' id="id-custom1" value="<?php echo $this->fieldValue('custom1',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('custom1',$choice) ?><br>
76
+ <?php endforeach; endif;?>
77
+ </div>
78
+
79
+ <div class="input-box">
80
+ <label for="id-custom2"><?php echo $this->fieldLabel('custom2') ?></label><br>
81
+ <?php if($this->fieldChoices('custom2') < 1 ):?>
82
+ <input type="<?php echo $this->fieldInputType('custom2') ?>" name='custom_2' id="id-custom2" title="<?php echo $this->fieldTitle('custom2') ?>" class="input-text"/>
83
+ <?php else: foreach (range(1, $this->fieldChoices('custom2')) as $choice) :?>
84
+ <input type="<?php echo $this->fieldInputType('custom2') ?>" name='custom_2' id="id-custom2" value="<?php echo $this->fieldValue('custom2',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('custom2',$choice) ?><br>
85
+ <?php endforeach; endif;?>
86
+ </div>
87
+
88
+ <div class="input-box">
89
+ <label for="id-country"><?php echo $this->fieldLabel('country') ?></label><br>
90
+ <?php if($this->fieldChoices('country') < 1 ):?>
91
+ <input type="<?php echo $this->fieldInputType('country') ?>" name='country' id="id-country" title="<?php echo $this->fieldTitle('country') ?>" class="input-text"/>
92
+ <?php else: foreach (range(1, $this->fieldChoices('country')) as $choice) :?>
93
+ <input type="<?php echo $this->fieldInputType('country') ?>" name='country' id="id-country" value="<?php echo $this->fieldValue('country',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('country',$choice) ?><br>
94
+ <?php endforeach; endif;?>
95
+ </div>
96
+
97
+ <div class="input-box">
98
+ <label for="id-city"><?php echo $this->fieldLabel('city') ?></label><br>
99
+ <?php if($this->fieldChoices('city') < 1 ):?>
100
+ <input type="<?php echo $this->fieldInputType('city') ?>" name='city' id="id-city" title="<?php echo $this->fieldTitle('city') ?>" class="input-text"/>
101
+ <?php else: foreach (range(1, $this->fieldChoices('city')) as $choice) :?>
102
+ <input type="<?php echo $this->fieldInputType('city') ?>" name='city' id="id-city" value="<?php echo $this->fieldValue('city',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('city',$choice) ?><br>
103
+ <?php endforeach; endif;?>
104
+ </div>
105
+
106
+ <div class="input-box">
107
+ <label for="id-address"><?php echo $this->fieldLabel('address') ?></label><br>
108
+ <?php if($this->fieldChoices('address') < 1 ):?>
109
+ <input type="<?php echo $this->fieldInputType('address') ?>" name='address' id="id-address" title="<?php echo $this->fieldTitle('address') ?>" class="input-text"/>
110
+ <?php else: foreach (range(1, $this->fieldChoices('address')) as $choice) :?>
111
+ <input type="<?php echo $this->fieldInputType('address') ?>" name='address' id="id-address" value="<?php echo $this->fieldValue('address',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('address',$choice) ?><br>
112
+ <?php endforeach; endif;?>
113
+ </div>
114
+
115
+ <div class="input-box">
116
+ <label for="id-zip"><?php echo $this->fieldLabel('zipcode') ?></label><br>
117
+ <?php if($this->fieldChoices('zipcode') < 1 ):?>
118
+ <input type="<?php echo $this->fieldInputType('zipcode') ?>" name='zip_code' id="id-zip" title="<?php echo $this->fieldTitle('zipcode') ?>" class="input-text"/>
119
+ <?php else: foreach (range(1, $this->fieldChoices('zipcode')) as $choice) :?>
120
+ <input type="<?php echo $this->fieldInputType('zipcode') ?>" name='zip_code' id="id-zip" value="<?php echo $this->fieldValue('zipcode',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('zipcode',$choice) ?><br>
121
+ <?php endforeach; endif;?>
122
+ </div>
123
+
124
+ <div class="input-box">
125
+ <label for="id-phone1"><?php echo $this->fieldLabel('landphone') ?></label><br>
126
+ <?php if($this->fieldChoices('landphone') < 1 ):?>
127
+ <input type="<?php echo $this->fieldInputType('landphone') ?>" name='phone' id="id-phone1" title="<?php echo $this->fieldTitle('landphone') ?>" class="input-text"/>
128
+ <?php else: foreach (range(1, $this->fieldChoices('landphone')) as $choice) :?>
129
+ <input type="<?php echo $this->fieldInputType('landphone') ?>" name='phone' id="id-phone1" value="<?php echo $this->fieldValue('landphone',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('landphone',$choice) ?><br>
130
+ <?php endforeach; endif;?>
131
+ </div>
132
+
133
+ <div class="input-box">
134
+ <label for="id-phone2"><?php echo $this->fieldLabel('mobilephone') ?></label><br>
135
+ <?php if($this->fieldChoices('mobilephone') < 1 ):?>
136
+ <input type="<?php echo $this->fieldInputType('mobilephone') ?>" name='cell_phone' id="id-phone2" title="<?php echo $this->fieldTitle('mobilephone') ?>" class="input-text"/>
137
+ <?php else: foreach (range(1, $this->fieldChoices('mobilephone')) as $choice) :?>
138
+ <input type="<?php echo $this->fieldInputType('mobilephone') ?>" name='cell_phone' id="id-phone2" value="<?php echo $this->fieldValue('mobilephone',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('mobilephone',$choice) ?><br>
139
+ <?php endforeach; endif;?>
140
+ </div>
141
+
142
+ <div class="input-box">
143
+ <label for="id-notes"><?php echo $this->fieldLabel('notes') ?></label><br>
144
+ <textarea name="notes" id="id-notes" title="<?php echo $this->fieldTitle('notes') ?>" class="input-text"></textarea>
145
+ </div>
146
+
147
+ <div class="actions">
148
+ <button type="submit" title="<?php echo $this->__('Subscribe') ?>" class="button"><span><span><?php echo $this->__('Subscribe') ?></span></span></button>
149
+ </div>
150
+ </div>
151
+ </form>
152
+ <script type="text/javascript">
153
+ //<![CDATA[
154
+ var newsletterSubscriberFormDetail = new VarienForm('newsletter-validate-detail');
155
+ //]]>
156
+ </script>
157
+ </div>
158
+
app/design/frontend/base/default/template/contactlab/subscribers/newsletter/subscribers/update.phtml ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="block block-subscribe">
2
+ <div class="block-title">
3
+ <strong><span><?php echo $this->__('Modify your data') ?></span></strong>
4
+ </div>
5
+ <form action="<?php echo $this->getModifyFormActionUrl() ?>" method="post" id="newsletter-validate-detail">
6
+ <div class="block-content">
7
+
8
+ <input type="hidden" name="chkid" value="<?php echo $this->getSubsId();?>" />
9
+ <input type="hidden" name="chkhash" value="<?php echo $this->getSubsHash();?>" />
10
+
11
+ <div class="input-box">
12
+ <label for="first-name"><?php echo $this->fieldLabel('fname') ?></label>
13
+ <?php if($this->fieldChoices('fname') < 1 ):?>
14
+ <input <?php echo $this->fieldActualValue('fname') ?> type="<?php echo $this->fieldInputType('fname') ?>" name="first_name" id="first-name" title="<?php echo $this->fieldTitle('fname') ?>" class="input-text" />
15
+ <?php else: foreach (range(1, $this->fieldChoices('fname')) as $choice) :?>
16
+ <input type="<?php echo $this->fieldInputType('fname') ?>" name="first_name" id="first-name" class="input-text"><?php echo $this->fieldChoice('fname',$choice) ?><br>
17
+ <?php endforeach; endif;?>
18
+ </div>
19
+
20
+ <div class="input-box">
21
+ <label for="last-name"><?php echo $this->fieldLabel('lname') ?></label>
22
+ <?php if($this->fieldChoices('lname') < 1 ):?>
23
+ <input <?php echo $this->fieldActualValue('lname') ?> type="<?php echo $this->fieldInputType('lname') ?>" name='last_name' id="last-name" title="<?php echo $this->fieldTitle('lname') ?>" class="input-text" />
24
+ <?php else: foreach (range(1, $this->fieldChoices('lname')) as $choice) :?>
25
+ <input type="<?php echo $this->fieldInputType('lname') ?>" name='last_name' id="last-name" class="input-text"><?php echo $this->fieldChoice('lname',$choice) ?><br>
26
+ <?php endforeach; endif;?>
27
+ </div>
28
+
29
+ <div class="input-box">
30
+ <label for="id-company"><?php echo $this->fieldLabel('company') ?></label>
31
+ <?php if($this->fieldChoices('company') < 1 ):?>
32
+ <input <?php echo $this->fieldActualValue('company') ?> type="<?php echo $this->fieldInputType('company') ?>" name='company' id="id-company" title="<?php echo $this->fieldTitle('company') ?>" class="input-text" />
33
+ <?php else: foreach (range(1, $this->fieldChoices('company')) as $choice) :?>
34
+ <input type="<?php echo $this->fieldInputType('company') ?>" name='company' id="id-company" class="input-text"><?php echo $this->fieldChoice('company',$choice) ?><br>
35
+ <?php endforeach; endif;?>
36
+ </div>
37
+
38
+ <div class="input-box">
39
+ <label for="id-gender"><?php echo $this->fieldLabel('gender') ?></label><br>
40
+ <?php if($this->fieldChoices('gender') < 1 ):?>
41
+ <input type="<?php echo $this->fieldInputType('gender') ?>" name='gender' id="id-gender" title="<?php echo $this->fieldTitle('gender') ?>" class="radio"/>
42
+ <?php else: foreach (range(1, $this->fieldChoices('gender')) as $choice) :?>
43
+ <input <?php echo $this->fieldActualValue('gender',$choice) ?> type="<?php echo $this->fieldInputType('gender') ?>" name='gender' id="id-gender" value="<?php echo $this->fieldValue('gender',$choice) ?>" class="radio"/><?php echo $this->fieldChoice('gender',$choice) ?><br>
44
+ <?php endforeach; endif;?>
45
+ </div>
46
+
47
+ <div class="input-box">
48
+ <label for="id-dob"><?php echo $this->fieldLabel('dob') ?></label><br>
49
+ <?php if($this->fieldChoices('dob') < 1 ):?>
50
+ <input <?php echo $this->fieldActualValue('dob') ?> type="<?php echo $this->fieldInputType('dob') ?>" name='dob' id="id-dob" title="<?php echo $this->fieldTitle('dob') ?>" class="input-text"/>
51
+ <?php else: foreach (range(1, $this->fieldChoices('dob')) as $choice) :?>
52
+ <input type="<?php echo $this->fieldInputType('dob') ?>" name='dob' id="id-dob" value="<?php echo $this->fieldValue('dob',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('dob',$choice) ?><br>
53
+ <?php endforeach; endif;?>
54
+ </div>
55
+
56
+ <div class="input-box">
57
+ <label for="id-privacy"><?php echo $this->fieldLabel('privacy') ?></label><br>
58
+ <?php if($this->fieldChoices('privacy') < 1 ):?>
59
+ <input <?php echo $this->fieldActualValue('privacy') ?> type="<?php echo $this->fieldInputType('privacy') ?>" name='privacy' id="id-privacy" title="<?php echo $this->fieldTitle('privacy') ?>" class="radio"/>
60
+ <?php else: foreach (range(1, $this->fieldChoices('privacy')) as $choice) :?>
61
+ <input type="<?php echo $this->fieldInputType('privacy') ?>" name='privacy' id="id-privacy" value="<?php echo $this->fieldValue('privacy',$choice) ?>" class="radio"/><?php echo $this->fieldChoice('privacy',$choice) ?><br>
62
+ <?php endforeach; endif;?>
63
+ </div>
64
+
65
+ <div class="input-box">
66
+ <label for="id-custom1"><?php echo $this->fieldLabel('custom1') ?></label><br>
67
+ <?php if($this->fieldChoices('custom1') < 1 ):?>
68
+ <input <?php echo $this->fieldActualValue('custom1') ?> type="<?php echo $this->fieldInputType('custom1') ?>" name='custom_1' id="id-custom1" title="<?php echo $this->fieldTitle('custom1') ?>" class="input-text"/>
69
+ <?php else: foreach (range(1, $this->fieldChoices('custom1')) as $choice) :?>
70
+ <input type="<?php echo $this->fieldInputType('custom1') ?>" name='custom_1' id="id-custom1" value="<?php echo $this->fieldValue('custom1',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('custom1',$choice) ?><br>
71
+ <?php endforeach; endif;?>
72
+ </div>
73
+
74
+ <div class="input-box">
75
+ <label for="id-custom2"><?php echo $this->fieldLabel('custom2') ?></label><br>
76
+ <?php if($this->fieldChoices('custom2') < 1 ):?>
77
+ <input <?php echo $this->fieldActualValue('custom2') ?> type="<?php echo $this->fieldInputType('custom2') ?>" name='custom_2' id="id-custom2" title="<?php echo $this->fieldTitle('custom2') ?>" class="input-text"/>
78
+ <?php else: foreach (range(1, $this->fieldChoices('custom2')) as $choice) :?>
79
+ <input type="<?php echo $this->fieldInputType('custom2') ?>" name='custom_2' id="id-custom2" value="<?php echo $this->fieldValue('custom2',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('custom2',$choice) ?><br>
80
+ <?php endforeach; endif;?>
81
+ </div>
82
+
83
+ <div class="input-box">
84
+ <label for="id-country"><?php echo $this->fieldLabel('country') ?></label><br>
85
+ <?php if($this->fieldChoices('country') < 1 ):?>
86
+ <input <?php echo $this->fieldActualValue('country') ?> type="<?php echo $this->fieldInputType('country') ?>" name='country' id="id-country" title="<?php echo $this->fieldTitle('country') ?>" class="input-text"/>
87
+ <?php else: foreach (range(1, $this->fieldChoices('country')) as $choice) :?>
88
+ <input type="<?php echo $this->fieldInputType('country') ?>" name='country' id="id-country" value="<?php echo $this->fieldValue('country',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('country',$choice) ?><br>
89
+ <?php endforeach; endif;?>
90
+ </div>
91
+
92
+ <div class="input-box">
93
+ <label for="id-city"><?php echo $this->fieldLabel('city') ?></label><br>
94
+ <?php if($this->fieldChoices('city') < 1 ):?>
95
+ <input <?php echo $this->fieldActualValue('city') ?> type="<?php echo $this->fieldInputType('city') ?>" name='city' id="id-city" title="<?php echo $this->fieldTitle('city') ?>" class="input-text"/>
96
+ <?php else: foreach (range(1, $this->fieldChoices('city')) as $choice) :?>
97
+ <input type="<?php echo $this->fieldInputType('city') ?>" name='city' id="id-city" value="<?php echo $this->fieldValue('city',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('city',$choice) ?><br>
98
+ <?php endforeach; endif;?>
99
+ </div>
100
+
101
+ <div class="input-box">
102
+ <label for="id-address"><?php echo $this->fieldLabel('address') ?></label><br>
103
+ <?php if($this->fieldChoices('address') < 1 ):?>
104
+ <input <?php echo $this->fieldActualValue('address') ?> type="<?php echo $this->fieldInputType('address') ?>" name='address' id="id-address" title="<?php echo $this->fieldTitle('address') ?>" class="input-text"/>
105
+ <?php else: foreach (range(1, $this->fieldChoices('address')) as $choice) :?>
106
+ <input type="<?php echo $this->fieldInputType('address') ?>" name='address' id="id-address" value="<?php echo $this->fieldValue('address',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('address',$choice) ?><br>
107
+ <?php endforeach; endif;?>
108
+ </div>
109
+
110
+ <div class="input-box">
111
+ <label for="id-zip"><?php echo $this->fieldLabel('zipcode') ?></label><br>
112
+ <?php if($this->fieldChoices('zipcode') < 1 ):?>
113
+ <input <?php echo $this->fieldActualValue('zipcode') ?> type="<?php echo $this->fieldInputType('zipcode') ?>" name='zip_code' id="id-zip" title="<?php echo $this->fieldTitle('zipcode') ?>" class="input-text"/>
114
+ <?php else: foreach (range(1, $this->fieldChoices('zipcode')) as $choice) :?>
115
+ <input type="<?php echo $this->fieldInputType('zipcode') ?>" name='zip_code' id="id-zip" value="<?php echo $this->fieldValue('zipcode',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('zipcode',$choice) ?><br>
116
+ <?php endforeach; endif;?>
117
+ </div>
118
+
119
+ <div class="input-box">
120
+ <label for="id-phone1"><?php echo $this->fieldLabel('landphone') ?></label><br>
121
+ <?php if($this->fieldChoices('landphone') < 1 ):?>
122
+ <input <?php echo $this->fieldActualValue('landphone') ?> type="<?php echo $this->fieldInputType('landphone') ?>" name='phone' id="id-phone1" title="<?php echo $this->fieldTitle('landphone') ?>" class="input-text"/>
123
+ <?php else: foreach (range(1, $this->fieldChoices('landphone')) as $choice) :?>
124
+ <input type="<?php echo $this->fieldInputType('landphone') ?>" name='phone' id="id-phone1" value="<?php echo $this->fieldValue('landphone',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('landphone',$choice) ?><br>
125
+ <?php endforeach; endif;?>
126
+ </div>
127
+
128
+ <div class="input-box">
129
+ <label for="id-phone2"><?php echo $this->fieldLabel('mobilephone') ?></label><br>
130
+ <?php if($this->fieldChoices('mobilephone') < 1 ):?>
131
+ <input <?php echo $this->fieldActualValue('mobilephone') ?> type="<?php echo $this->fieldInputType('mobilephone') ?>" name='cell_phone' id="id-phone2" title="<?php echo $this->fieldTitle('mobilephone') ?>" class="input-text"/>
132
+ <?php else: foreach (range(1, $this->fieldChoices('mobilephone')) as $choice) :?>
133
+ <input type="<?php echo $this->fieldInputType('mobilephone') ?>" name='cell_phone' id="id-phone2" value="<?php echo $this->fieldValue('mobilephone',$choice) ?>" class="input-text"/><?php echo $this->fieldChoice('mobilephone',$choice) ?><br>
134
+ <?php endforeach; endif;?>
135
+ </div>
136
+
137
+ <div class="input-box">
138
+ <label for="id-notes"><?php echo $this->fieldLabel('notes') ?></label><br>
139
+ <textarea name="notes" id="id-notes" title="<?php echo $this->fieldTitle('notes') ?>" class="input-text"><?php echo $this->fieldActualValue('notes'); ?></textarea>
140
+ </div>
141
+
142
+ <div class="actions">
143
+ <button type="submit" title="<?php echo $this->__('Submit') ?>" class="button"><span><span><?php echo $this->__('Modify') ?></span></span></button>
144
+ </div>
145
+ </div>
146
+ </form>
147
+ </div>
148
+
app/etc/modules/Contactlab_Commons.xml CHANGED
@@ -1,26 +1,12 @@
1
- <?xml version="1.0"?>
2
- <!--
3
- Copyright (C) 2013 Webformat S.r.l.
4
- http://www.webformat.com
5
-
6
- This program is free software: you can redistribute it and/or modify
7
- it under the terms of the GNU General Public License as published by
8
- the Free Software Foundation, either version 3 of the License, or
9
- (at your option) any later version.
10
-
11
- This program is distributed in the hope that it will be useful,
12
- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- GNU General Public License for more details.
15
-
16
- You should have received a copy of the GNU General Public License
17
- along with this program. If not, see <http://www.gnu.org/licenses/>.
18
- -->
19
- <config>
20
- <modules>
21
- <Contactlab_Commons>
22
- <active>true</active>
23
- <codePool>community</codePool>
24
- </Contactlab_Commons>
25
- </modules>
26
- </config>
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Contactlab_Commons>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ <depends>
8
+ <Mage_AdminNotification />
9
+ </depends>
10
+ </Contactlab_Commons>
11
+ </modules>
12
+ </config>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/etc/modules/Contactlab_Subscribers.xml CHANGED
@@ -1,29 +1,12 @@
1
- <?xml version="1.0"?>
2
- <!--
3
- Copyright (C) 2013 Webformat S.r.l.
4
- http://www.webformat.com
5
-
6
- This program is free software: you can redistribute it and/or modify
7
- it under the terms of the GNU General Public License as published by
8
- the Free Software Foundation, either version 3 of the License, or
9
- (at your option) any later version.
10
-
11
- This program is distributed in the hope that it will be useful,
12
- but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- GNU General Public License for more details.
15
-
16
- You should have received a copy of the GNU General Public License
17
- along with this program. If not, see <http://www.gnu.org/licenses/>.
18
- -->
19
- <config>
20
- <modules>
21
- <Contactlab_Subscribers>
22
- <active>true</active>
23
- <codePool>community</codePool>
24
- <depends>
25
- <Contactlab_Commons/>
26
- </depends>
27
- </Contactlab_Subscribers>
28
- </modules>
29
- </config>
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Contactlab_Subscribers>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ <depends>
8
+ <Contactlab_Commons/>
9
+ </depends>
10
+ </Contactlab_Subscribers>
11
+ </modules>
12
+ </config>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
app/etc/modules/Contactlab_Template.xml CHANGED
@@ -1,12 +1,12 @@
1
- <?xml version="1.0"?>
2
- <config>
3
- <modules>
4
- <Contactlab_Template>
5
- <active>true</active>
6
- <codePool>community</codePool>
7
- <depends>
8
- <Contactlab_Commons />
9
- </depends>
10
- </Contactlab_Template>
11
- </modules>
12
- </config>
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Contactlab_Template>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ <depends>
8
+ <Contactlab_Commons />
9
+ </depends>
10
+ </Contactlab_Template>
11
+ </modules>
12
+ </config>
app/etc/modules/Contactlab_Transactional.xml CHANGED
@@ -1,12 +1,12 @@
1
- <?xml version="1.0"?>
2
- <config>
3
- <modules>
4
- <Contactlab_Transactional>
5
- <active>true</active>
6
- <codePool>community</codePool>
7
- <depends>
8
- <Contactlab_Commons />
9
- </depends>
10
- </Contactlab_Transactional>
11
- </modules>
12
- </config>
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Contactlab_Transactional>
5
+ <active>true</active>
6
+ <codePool>community</codePool>
7
+ <depends>
8
+ <Contactlab_Commons />
9
+ </depends>
10
+ </Contactlab_Transactional>
11
+ </modules>
12
+ </config>
app/locale/en_US/contactlab/Contactlab_Commons.csv CHANGED
@@ -1,6 +1,6 @@
1
- "Backend Page Title","Backend Page Title"
2
- "Enable","Enable"
3
- "Enable or disable Contactlab module","Enable or disable Contactlab module"
4
- "Configuration","Configuration"
5
- "Global configuration","Global configuration"
6
- "Contactlab","ContactLab"
1
+ "Backend Page Title","Backend Page Title"
2
+ "Enable","Enable"
3
+ "Enable or disable ContactLab module","Enable or disable ContactLab module"
4
+ "Configuration","Configuration"
5
+ "Global configuration","Global configuration"
6
+ "Contactlab","ContactLab"
app/locale/en_US/template/email/contactlab_commons/send_mail.html DELETED
@@ -1,2 +0,0 @@
1
- <!--@subject ContactLab Tasks Error@-->
2
- {{block type='contactlab_commons/adminhtml_email_template' area='adminhtml' template='contactlab/commons/send_mail.phtml'}}
 
 
app/locale/it_IT/contactlab/Contactlab_Commons.csv CHANGED
@@ -1,129 +1,136 @@
1
- "Actions","Azioni"
2
- "An error occurred while cancelling task.","C'è stato un errore durante l'annullamento del task."
3
- "An error occurred while changing the status %1$s to %2$s.","Errore durante il cambiamento di stato %1$s del task %2$s."
4
- "An error occurred while changing the status %s of task nr. %d","Errore durante il cambiamento di stato in &quot;%s&quot; del task nr. %d"
5
- "An error occurred while clearing queue.","C'è stato un errore durante la pulizia della coda."
6
- "An error occurred while retrying task.","C'è stato un errore durante il reset del task."
7
- "An error occurred while running task.","C'è stato un errore durante l'esecuzione del task."
8
- "An error occurred while running the task %d","Errore durante l'esecuzione del task %d"
9
- "An error occurred while suspending task.","C'è stato un errore durante la sospesione del task."
10
- "An error occurred while unsuspending task.","C'è stato un errore durante la ripresa del task."
11
- "Are you sure?","Si è sicuri?"
12
- "Are you sure to empty log table?","Sicuro di voler svuotare la tabella di log?"
13
- "cancelled","Annullato"
14
- "Cancel task","Annulla il task"
15
- "Cancel task","Annulla task"
16
- "Cancel task is not allowed.","Annullamento non consentito."
17
- "Cancel tasks","Annulla task"
18
- "Clear old tasks","Rimuovi task obsoleti"
19
- "Clear queue is not allowed.","Pulizia della coda non consentita."
20
- "Clear Queue","Pulisci la coda dei task"
21
- "closed","Chiuso"
22
- "Code","Codice"
23
- "Configuration","Configurazione"
24
- "Connection","Connessione"
25
- "File Transfer Configuration", "Configurazione trasferimento file"
26
- "Contactlab","ContactLab"
27
- "Created at","Data e ora"
28
- "Created At","Data e ora"
29
- "Description","Descrizione"
30
- "Delete task","Elimina task"
31
- "Enable","Abilita"
32
- "Enable debug","Abilita debug"
33
- "Enable or disable Contactlab module","Abilita/Disabilita il modulo Contactlab"
34
- "Error occured after all retries","Errore dopo tutti i tentativi"
35
- "Events","Eventi dei task"
36
- "failed","Fallito"
37
- "Failed, waiting for a new retry","In attesa di un nuovo tentativo"
38
- "General","Generale"
39
- "hidden","Nascosto"
40
- "Id","Id"
41
- "Local or remote connection","Connessione remota o locale"
42
- "Local path for export","Path locale per l'export"
43
- "Local path for import","Path locale per l'import"
44
- "Local server","Server locale"
45
- "Log level","Livello di log"
46
- "Logs","Logs del sistema"
47
- "new","Nuovo"
48
- "New task","Nuovo task"
49
- "No","No"
50
- "Number of days to consider a task as an obsolete task","Numero di giorni per considerare un task obsoleto"
51
- "Planned at","Pianificazione"
52
- "Remote path for export","Path server remoto per l'export"
53
- "Remote path for import","Path server remoto per l'import"
54
- "Remote server","Host remoto"
55
- "Remote server (SFTP)","Server remoto (SFTP)"
56
- "Retries","Tentativi"
57
- "Retry is not allowed.","Reset del task non consentito."
58
- "Retry","Reset"
59
- "Retry","Retry"
60
- "Retry tasks","Retry dei task"
61
- "running","In esecuzione"
62
- "Running","In esecuzione"
63
- "Run now","Esegui"
64
- "Run task","Esegui task"
65
- "Run task is not allowed.","Esecuzione del task non consentito."
66
- "Run tasks","Esegui task"
67
- "SFTP Password","SFTP Password"
68
- "SFTP Username","SFTP Username"
69
- "Show as alert","Allarme"
70
- "Status","Stato"
71
- "Success","Chiuso con successo"
72
- "suspended","Sospeso"
73
- "Suspend task is not allowed.","Sospensione del task non consentita."
74
- "Suspend task","Sospendi"
75
- "Suspend task","Sospendi task"
76
- "Suspend tasks","Sospendi task"
77
- "Task event description","Descrizione dell'evento"
78
- "Task Id","Task"
79
- "Tasks","Tasks"
80
- "Task status","Stato"
81
- "Task","Task"
82
- "Total of %1$s record(s) have been marked as %2$s.","Lo stato di %1$s record(s) è stato modificato in &quot;%2$s&quot;."
83
- "Truncate log table","Svuota la tabella di log"
84
- "Type","Tipo"
85
- "Unsuspend task is not allowed.","Ripresa dei task non consentita."
86
- "Unsuspend task","Riprendi"
87
- "Unsuspend task","Riprendi task"
88
- "Unsuspend tasks","Riprendi task"
89
- "User cancelled execution","L'utente ha annullato l'esecuzione"
90
- "User id","Utente"
91
- "User suspended execution","L'utente ha sospeso l'esecuzione"
92
- "User","Utente"
93
- "waiting_for_retry","In attesa"
94
- "Yes","Sì"
95
- "SOAP options", "Opzioni SOAP"
96
- "SOAP configuration", "Configurazione SOAP"
97
- "Behavior", "Comportamento"
98
- "Enable SOAP calls","Abilita chiamate SOAP a ContactLab"
99
- "Data updater config identifier","ID Configurazione Data updater"
100
- "Data exporter config identifier","ID Configurazione Data exporter"
101
- "<strong>Subscriber DataExchange is in Status <em>%s</em></stong>","<strong>DataExchange è <em>%s</em></stong>"
102
- "<strong>Subscriber DataExchange is in Status <em>%s</em></stong>","<strong>DataExchange è <em>%s</em></stong>"
103
- "INREQUEST","inserito ma non ancora preso in carico"
104
- "RUNNING","in esecuzione"
105
- "COMPLETED","completato con successo"
106
- "FAILED","fallito"
107
- "TIMED_OUT","in timeout"
108
- "RETRY","in attesa di essere nuovamente eseguito"
109
- "Error email", "Email di errore"
110
- "Enable email", "Abilitazione email di errore"
111
- "Sender email", "Email del mittente"
112
- "Sender name", "Nome del mittente"
113
- "Recipients", "Destinatari"
114
- "Use ; delimiter for recipients separator", "Utilizzare il carattere ; per seperare destinatari multipli"
115
- "Email Template", "Template email"
116
- "Cron configuration example", "Esempio configurazione Cron"
117
- "Error notify email", "Email di errore"
118
- "Enable error notify email", "Abilitazione email di errore"
119
- "Recipients email", "Destinatari"
120
- "API Soap service up and running", "Servizio API Soap up and running"
121
- "Plugin versions", "Versione del plugin installata"
122
- "Consume tasks", "Esecuzione dei task accodati"
123
- "Check unique Keys", "Check integrità tabella UK"
124
- "Update unique Keys", "Aggiornamento tabella UK"
125
- "Truncate unique Keys", "Reset tabella UK"
126
- "Scan templates", "Accodamento email ricorrenti"
127
- "Debug an email address", "Test di invio su una mail di test"
128
- "Installed version: %s", "Versione installata: %s"
129
- "Cron configuration check", "Check della configurazione dei cron"
 
 
 
 
 
 
 
1
+ "Actions","Azioni"
2
+ "An error occurred while cancelling task.","C'è stato un errore durante l'annullamento del task."
3
+ "An error occurred while changing the status %1$s to %2$s.","Errore durante il cambiamento di stato %1$s del task %2$s."
4
+ "An error occurred while changing the status %s of task nr. %d","Errore durante il cambiamento di stato in &quot;%s&quot; del task nr. %d"
5
+ "An error occurred while clearing queue.","C'è stato un errore durante la pulizia della coda."
6
+ "An error occurred while retrying task.","C'è stato un errore durante il reset del task."
7
+ "An error occurred while running task.","C'è stato un errore durante l'esecuzione del task."
8
+ "An error occurred while running the task %d","Errore durante l'esecuzione del task %d"
9
+ "An error occurred while suspending task.","C'è stato un errore durante la sospesione del task."
10
+ "An error occurred while unsuspending task.","C'è stato un errore durante la ripresa del task."
11
+ "Are you sure?","Si è sicuri?"
12
+ "Are you sure to empty log table?","Sicuro di voler svuotare la tabella di log?"
13
+ "cancelled","Annullato"
14
+ "Cancel task","Annulla il task"
15
+ "Cancel task","Annulla task"
16
+ "Cancel task is not allowed.","Annullamento non consentito."
17
+ "Cancel tasks","Annulla task"
18
+ "Clear old tasks","Rimuovi task obsoleti"
19
+ "Clear queue is not allowed.","Pulizia della coda non consentita."
20
+ "Clear Queue","Pulisci la coda dei task"
21
+ "closed","Chiuso"
22
+ "Code","Codice"
23
+ "Configuration","Configurazione"
24
+ "Connection","Connessione"
25
+ "File Transfer configuration", "Configurazione trasferimento file"
26
+ "Contactlab","ContactLab"
27
+ "Created","Creato"
28
+ "Description","Descrizione"
29
+ "Delete task","Elimina task"
30
+ "Enable","Abilita"
31
+ "Enable debug","Abilita debug"
32
+ "Enable or disable ContactLab module","Abilita/Disabilita il modulo ContactLab"
33
+ "Error occured after all retries","Errore dopo tutti i tentativi"
34
+ "Events","Eventi dei task"
35
+ "failed","Fallito"
36
+ "Failed, waiting for a new retry","In attesa di un nuovo tentativo"
37
+ "General","Generale"
38
+ "hidden","Nascosto"
39
+ "Id","Id"
40
+ "ID","ID"
41
+ "Local or remote connection","Connessione remota o locale"
42
+ "Local path for export","Path locale per l'export"
43
+ "Local path for import","Path locale per l'import"
44
+ "Local server","Server locale"
45
+ "Log level","Livello di log"
46
+ "Logs","Logs del sistema"
47
+ "new","Nuovo"
48
+ "New task","Nuovo task"
49
+ "No","No"
50
+ "Days before a task is regarded as obsolete","Numero di giorni prima di considerare un task obsoleto"
51
+ "Planned","Pianificazione"
52
+ "Remote path for export","Path server remoto per l'export"
53
+ "Remote path for import","Path server remoto per l'import"
54
+ "Remote server","Host remoto"
55
+ "Remote server (SFTP)","Server remoto (SFTP)"
56
+ "Retries","Tentativi"
57
+ "Retry is not allowed.","Reset del task non consentito."
58
+ "Retry","Reset"
59
+ "Retry","Retry"
60
+ "Retry tasks","Retry dei task"
61
+ "running","In esecuzione"
62
+ "Running","In esecuzione"
63
+ "Run now","Esegui"
64
+ "Run task","Esegui task"
65
+ "Run task is not allowed.","Esecuzione del task non consentito."
66
+ "Run tasks","Esegui task"
67
+ "SFTP Password","SFTP Password"
68
+ "SFTP Username","SFTP Username"
69
+ "Show as alert","Allarme"
70
+ "Status","Stato"
71
+ "Success","Chiuso con successo"
72
+ "suspended","Sospeso"
73
+ "Suspend task is not allowed.","Sospensione del task non consentita."
74
+ "Suspend task","Sospendi"
75
+ "Suspend task","Sospendi task"
76
+ "Suspend tasks","Sospendi task"
77
+ "Task event description","Descrizione dell'evento"
78
+ "Task Id","Task"
79
+ "Tasks","Tasks"
80
+ "Task status","Stato"
81
+ "Task","Task"
82
+ "Total of %1$s record(s) have been marked as %2$s.","Lo stato di %1$s record(s) è stato modificato in &quot;%2$s&quot;."
83
+ "Truncate log table","Svuota la tabella di log"
84
+ "Type","Tipo"
85
+ "Unsuspend task is not allowed.","Ripresa dei task non consentita."
86
+ "Unsuspend task","Riprendi"
87
+ "Unsuspend task","Riprendi task"
88
+ "Unsuspend tasks","Riprendi task"
89
+ "User cancelled execution","L'utente ha annullato l'esecuzione"
90
+ "User id","Utente"
91
+ "User suspended execution","L'utente ha sospeso l'esecuzione"
92
+ "User","Utente"
93
+ "waiting_for_retry","In attesa"
94
+ "Yes","Sì"
95
+ "SOAP options", "Opzioni SOAP"
96
+ "SOAP configuration", "Configurazione SOAP"
97
+ "Behavior", "Comportamento"
98
+ "Enable SOAP calls","Abilita chiamate SOAP a ContactLab"
99
+ "DataUpdater configuration ID","ID configurazione DataUpdater"
100
+ "Data exporter config identifier","ID Configurazione Data exporter"
101
+ "<strong>Subscriber DataExchange is in Status <em>%s</em></stong>","<strong>DataExchange è <em>%s</em></stong>"
102
+ "<strong>Subscriber DataExchange is in Status <em>%s</em></stong>","<strong>DataExchange è <em>%s</em></stong>"
103
+ "INREQUEST","inserito ma non ancora preso in carico"
104
+ "RUNNING","in esecuzione"
105
+ "COMPLETED","completato con successo"
106
+ "FAILED","fallito"
107
+ "TIMED_OUT","in timeout"
108
+ "RETRY","in attesa di essere nuovamente eseguito"
109
+ "Error email", "Email di errore"
110
+ "Enable email", "Abilitazione email di errore"
111
+ "Sender email", "Email del mittente"
112
+ "Sender name", "Nome del mittente"
113
+ "Recipients", "Destinatari"
114
+ "Use ; as the delimiter to separate recipients.", "Utilizzare il carattere ; per separare destinatari multipli"
115
+ "Email Template", "Template email"
116
+ "Cron configuration example", "Esempio configurazione Cron"
117
+ "Error notification email", "Email di errore"
118
+ "Enable error notification email", "Abilitazione email di errore"
119
+ "Recipient email", "Destinatari"
120
+ "API Soap service up and running", "Servizio API Soap up and running"
121
+ "Plugin version", "Versione del plugin installata"
122
+ "Run tasks", "Esecuzione dei task accodati"
123
+ "Check unique Keys", "Check integrità tabella UK"
124
+ "Update unique Keys", "Aggiornamento tabella UK"
125
+ "Truncate unique Keys", "Reset tabella UK"
126
+ "Scan templates", "Accodamento email ricorrenti"
127
+ "Debug an email address", "Test di invio su una mail di test"
128
+ "Installed version: %s", "Versione installata: %s"
129
+ "Configuration Check", "Check configurazione"
130
+ "Closed / Hidden", "Chiuso / Nascosto"
131
+ "hidden/close", "Chiuso / Nascosto"
132
+ "Enable multi-website subscription", "Abilita iscrizione alla newsletter multi-website"
133
+ "Enable multi-website newsletter subscription", "Abilita iscrizione alla newsletter multi-website"
134
+ "Queue status", "Stato coda"
135
+ "Queue Detail", "Dettagli coda"
136
+ "Crontab scheduled tasks", "Task schedulati"
app/locale/it_IT/contactlab/Contactlab_Subscribers.csv CHANGED
@@ -1,88 +1,91 @@
1
- "All subscribers only for the next export","Tutti i subscribers limitatamente alla prossima esportazione"
2
- "All values are specified in <strong>minutes</strong>.","Tutti i valori sono da intendersi in <strong>minuti</strong>."
3
- "All values are in <strong>minute</strong>.","Tutti i valori sono da intendersi in <strong>minuti</strong>."
4
- "Always all subscribers","Sempre tutti i subscribers"
5
- "Always export not subscribed users","Esporta sempre anche gli account che non hanno sottoscritto la newsletter"
6
- "Attention: this could slow down the export process","Attenzione: il processo di export potrebbe rallentare notevolmente"
7
- "Check UK Table consistency before every export","Controlla consistenza della tabella UK prima dell'export"
8
- "Clear statistics","Rimuovi statistiche"
9
- "Custom fields","Campi personalizzati"
10
- "Enable field 1 (text)","Abilita il campo custom 1<br><strong>Tipo testo</strong>"
11
- "Enable field 2 (text)","Abilita il campo custom 2<br><strong>tipo testo</strong>"
12
- "Enable field 3 (text)","Abilita il campo custom 3<br><strong>tipo testo</strong>"
13
- "Enable field 4 (text)","Abilita il campo custom 4<br><strong>tipo testo</strong>"
14
- "Enable field 5 (text)","Abilita il campo custom 5<br><strong>tipo testo</strong>"
15
- "Enable field 6 (date/time)","Abilita il campo custom 6<br><strong>tipo data/ora</strong>"
16
- "Enable field 7 (date/time)","Abilita il campo custom 7<br><strong>tipo data/ora</strong>"
17
- "Enable or disable Contactlab Subscribers module", "Abilita o disabilita l'esportazione degli iscritti"
18
- "Enable import execution after export","Abilita esecuzione Importer dopo l'export"
19
- "Enable inscription state receptions SOAP call","Abilita chiamata SOAP per la ricezione dello stato iscrizione"
20
- "Enable inscription state settings SOAP call","Abilita chiamata SOAP per l'impostazione dello stato iscrizione"
21
- "Export billing address","Esporta indirizzo di fatturazione"
22
- "Export filename (es, subscribers_{Ymd}.xml)<br>Use {Ymd} syntax to replace current data.<br>The <a href='http://php.net/manual/en/function.date.php'>date() php function</a>'s style is used.","Nome del file di export (es, subscribers_{Ymd}.xml)<br>Utilizzare la sintassi {Ymd} per specificare la data corrente.<br>Fare riferimento alla sintassi della <a href='http://php.net/manual/it/function.date.php'>funzione php date()</a>."
23
- "Export Policy","Modalità di export"
24
- "Export shipping address","Esporta indirizzo di spedizione"
25
- "Export subscribers","Esporta iscritti"
26
- "Field 1 name","Nome del campo 1"
27
- "Field 2 name","Nome del campo 2"
28
- "Field 3 name","Nome del campo 3"
29
- "Field 4 name","Nome del campo 4"
30
- "Field 5 name","Nome del campo 5"
31
- "Field 6 name","Nome del campo 6"
32
- "Field 7 name","Nome del campo 7"
33
- "Fill statistics","Calcola statistiche"
34
- "First period length in days","Lunghezza del primo periodo in giorni"
35
- "First period length","Lunghezza del primo periodo"
36
- "Import filename (es, event_info_{Ymd}.xml)<br>Use {Ymd} syntax to replace current data.<br>The <a href='http://php.net/manual/en/function.date.php'>date() php function</a>'s style is used.","Nome del file di import (es, event_info_{Ymd}.xml)<br>Utilizzare la sintassi {Ymd} per specificare la data corrente.<br>Fare riferimento alla sintassi della <a href='http://php.net/manual/it/function.date.php'>funzione php date()</a>."
37
- "Interval between export attempts","Intervallo tra tentativi di export"
38
- "Interval between import attempts","Intervallo tra tentativi di import"
39
- "Interval between StartSubscriberDataExchangeRunner SOAP Calls","Intervallo tra tentativi di chiamata SOAP StartSubscriberDataExchangeRunner"
40
- "Interval between statistic clear attempts","Intervallo tra tentativi di pulizia delle statistiche"
41
- "Interval between statistic fill attempts","Intervallo tra tentativi di calcolo delle statistiche"
42
- "Interval between syncronous inscription state update attempts","Intervallo tra successivi tentativi di aggiornamento sincrono stato iscrizione"
43
- "Last export's date and time","Data ultima esportazione"
44
- "Newsletter subscriber to customer operation","Operazione di iscrizione cliente già subscriber"
45
- "Number of export attempts","Numero di tentativi di export"
46
- "Total number of import attempts","Numero di tentativi di import"
47
- "Number of StartSubscriberDataExchangeRunner SOAP Calls attempts","Numero di tentativi di chiamata SOAP StartSubscriberDataExchangeRunner"
48
- "Number of statistic clear attempts","Numero di tentativi di pulizia delle statistiche"
49
- "Number of statistic fill attempts","Numero di tentativi di calcolo delle statistiche"
50
- "Total number of syncronous inscription state update attempts","Numero di tentativi di aggiornamento sincrono stato iscrizione"
51
- "Only modified subscribers since last export","Solo i subscribers modificati dall'ultima esportazione"
52
- "Queue parameters","Parametri gestione della coda"
53
- "Manage Queue", "Opzioni della coda"
54
- "Queue Subscribers export job","Esporta iscritti"
55
- "Queue Subscribers import job","Importa disiscrizioni"
56
- "Reset export dates before next export","Annulla la data di export prima del prossimo export"
57
- "Second period length in days","Lunghezza del secondo periodo in giorni"
58
- "Second period length","Lunghezza del secondo periodo"
59
- "Send disinscription notify email","Manda l'email di conferma disiscrizione"
60
- "Specify here the field that contain the subscription flag in ContactLab database (es. __cls1).","Specificare qui il nome del campo che contiene il flag di sottoscrizione nel database ContactLab (es. __cls1)."
61
- "Statistics","Statistiche"
62
- "Subscribed flag name","Name del campo &quot;__clsX&quot;"
63
- "Subscribers configuration","Configurazione iscritti alla newsletter"
64
- "Subscribers","Iscritti alla newsletter"
65
- "The fields enabled in this section will be <strong>included</strong> during the subscribers export.","I campi abilitati in questa sezione saranno <strong>inclusi</strong> nell'export dei subscribers."
66
- "Delete inscription if user doesn't confirm","Togliere iscrizione se l'utente non conferma"
67
- "Unsubscribe the customer during Newsletter subscriber to customer operation if the check of subscription is left unchecked.","Togliere l'iscrizione alla newsletter se l'utente lascia vuota la casella dell'iscrizione in fase di registrazione"
68
- "Please do <strong>Recalc Customer Statistics</strong> into <strong>Tasks</strong> page after you change one or both statistics period length.<br>To ensure that all customers statistics' are updated in Contactlab, please select <strong>All subscribers only for the next export</strong> option in <strong>Export Policy</strong> configuration option.","Ricalcolare le <strong>Statistiche clienti</strong> dalla pagina dei <strong>Tasks</strong> dopo aver modificato la lunghezza di uno o di entrambi i periodi. Per garantire che tutte le statistiche vengano esportate durante la prossima esportazione, selezionare il valore <strong>Tutti i subscribers limitatamente alla prossima esportazione</strong> nell'opzione <strong>Modalità di export</strong>"
69
-
70
- "Magento &rArr; ContactLab Configuration", "Configurazione Magento &rArr; ContactLab"
71
- "ContactLab &rArr; Magento Configuration", "Configurazione ContactLab &rArr; Magento"
72
-
73
- "Aggregated fields (Statistics)", "Campi Aggregati (Statistiche)"
74
- "Path server importer", "Percorso file importazione"
75
- "DataExporter Configuration Id", "ID Configurazione Data exporter"
76
- "Leave empty to use environment memory limit (see <a href=""http://php.net/manual/en/faq.using.php#faq.using.shorthandbytes"">this page</a> for more info about the right syntax)", "Lasciare vuoto per usare il memory limit di default (fare riferimento a <a href=""http://php.net/manual/en/faq.using.php#faq.using.shorthandbytes"">questa pagina</a> per maggiori informazioni sulla corretta sintassi del parametro)"
77
- "Are you sure to truncate the UK table?", "Si è sicuri di voler troncare i dati della tabella UK?"
78
- "UK table contains ContactLab Identifiers that are associated with Magento Customers and Newsletter Subscribers", "La tabella UK contiene gli ID ContactLab associati ai Customers Magento ed ai Newsletter Subscribers"
79
- "Use these panel to reset, check and update UK table", "Usare questo pannello per resettare, controllare ed aggiornare la tabella UK"
80
- "Unique keys truncation successfully queued.", "Reset della Tabella UK accodato."
81
- "Use this function to queue an update UK table task.", Usare questa funzionalità per accodare un task di aggiornamento della tabella UK."
82
- "Use this function to check the integrity of the UK table. If some errors have been found, please queue an UK update task.", "Usare questa funzionalità per fare un check di integrità della tabella UK. Se sono stati riportati degli errori, accodare un task di aggiornamento della tabella."
83
- "Use this function to completely remove all the associated UK records.<br/>After this operation, it will be neccessary queue an UK update task.", "Usare questa funzionalità per rimuovere ogni riga dalla tabella UK.<br/>Dopo che questa operazione è stata eseguita, sarà neccesario accodare un task di aggiornamento della tabella."
84
- "Every reset operation neet to be agreed with the Contactlab customer care.", "Ogni operazione di reset della tabella dovrà essere eseguito solo dopo aver contattato il customer care Contaclab."
85
- "Queue <strong>statistics update</strong> task", "Accoda manualmente un task di <strong>aggiornamento delle statistiche</strong> da esportare"
86
- "Queue <strong>export subscribers</strong> task", "Accoda manualmente un task di <strong>esportazione</strong>"
87
- "Queue <strong>import subscribers</strong> task", "Accoda manualmente un task di <strong>importazione</strong>"
88
- "Use this panel to manually queue import, export and statistics reset tasks", "Utilizzare le funzioni di questo pannello per<br>accodare manualmente i task di import, export e ricalcolo delle statistiche"
 
 
 
1
+ "All subscribers only for the next export","Tutti i subscribers limitatamente alla prossima esportazione"
2
+ "All time values are specified in <strong>minutes</strong>.","Tutti i valori sono da intendersi in <strong>minuti</strong>."
3
+ "All time values are specified in <strong>minutes</strong>.","Tutti i valori sono da intendersi in <strong>minuti</strong>."
4
+ "Always all subscribers","Sempre tutti i subscribers"
5
+ "Always export non-subscribed users","Esporta sempre anche gli account che non hanno sottoscritto la newsletter"
6
+ "Note: This can slow down the export process.","Attenzione: il processo di export potrebbe rallentare notevolmente"
7
+ "Check UK table consistency before every export","Controlla consistenza della tabella UK prima dell'export"
8
+ "Clear statistics","Rimuovi statistiche"
9
+ "Custom fields","Campi personalizzati"
10
+ "Enable field 1 (text)","Abilita il campo custom 1<br><strong>Tipo testo</strong>"
11
+ "Enable field 2 (text)","Abilita il campo custom 2<br><strong>tipo testo</strong>"
12
+ "Enable field 3 (text)","Abilita il campo custom 3<br><strong>tipo testo</strong>"
13
+ "Enable field 4 (text)","Abilita il campo custom 4<br><strong>tipo testo</strong>"
14
+ "Enable field 5 (text)","Abilita il campo custom 5<br><strong>tipo testo</strong>"
15
+ "Enable field 6 (date/time)","Abilita il campo custom 6<br><strong>tipo data/ora</strong>"
16
+ "Enable field 7 (date/time)","Abilita il campo custom 7<br><strong>tipo data/ora</strong>"
17
+ "Enable or disable ContactLab Subscribers module", "Abilita o disabilita l'esportazione degli iscritti"
18
+ "Enable import execution after export","Abilita esecuzione Importer dopo l'export"
19
+ "Receive subscription states using SOAP calls","Abilita chiamata SOAP per la ricezione dello stato iscrizione"
20
+ "Set subscription states using SOAP calls","Abilita chiamata SOAP per l'impostazione dello stato iscrizione"
21
+ "Export billing address","Esporta indirizzo di fatturazione"
22
+ "Export filename (for example: subscribers_{Ymd}.xml)<br>Use {Ymd} syntax to replace the date.<br>The <a href='http://php.net/manual/en/function.date.php'>PHP date() function</a>'s format is used.","Nome del file di export (es, subscribers_{Ymd}.xml)<br>Utilizzare la sintassi {Ymd} per specificare la data corrente.<br>Fare riferimento alla sintassi della <a href='http://php.net/manual/it/function.date.php'>funzione php date()</a>."
23
+ "Export policy","Modalità di export"
24
+ "Export shipping address","Esporta indirizzo di spedizione"
25
+ "Export subscribers","Esporta iscritti"
26
+ "Field 1 name","Nome del campo 1"
27
+ "Field 2 name","Nome del campo 2"
28
+ "Field 3 name","Nome del campo 3"
29
+ "Field 4 name","Nome del campo 4"
30
+ "Field 5 name","Nome del campo 5"
31
+ "Field 6 name","Nome del campo 6"
32
+ "Field 7 name","Nome del campo 7"
33
+ "Fill statistics","Calcola statistiche"
34
+ "First period length in days","Lunghezza del primo periodo in giorni"
35
+ "First period length","Lunghezza del primo periodo"
36
+ "Import filename (for example: event_info_{Ymd}.xml)<br>Use {Ymd} syntax to replace the date.<br>The <a href='http://php.net/manual/en/function.date.php'>PHP date() function</a>'s format is used.","Nome del file di import (es, event_info_{Ymd}.xml)<br>Utilizzare la sintassi {Ymd} per specificare la data corrente.<br>Fare riferimento alla sintassi della <a href='http://php.net/manual/it/function.date.php'>funzione php date()</a>."
37
+ "Interval between export attempts","Intervallo tra tentativi di export"
38
+ "Interval between import attempts","Intervallo tra tentativi di import"
39
+ "Interval between StartSubscriberDataExchangeRunner SOAP calls","Intervallo tra tentativi di chiamata SOAP StartSubscriberDataExchangeRunner"
40
+ "Interval between clear statistics attempts","Intervallo tra tentativi di pulizia delle statistiche"
41
+ "Interval between fill statistics attempts","Intervallo tra tentativi di calcolo delle statistiche"
42
+ "Interval between synchronous subscription state update attempts","Intervallo tra successivi tentativi di aggiornamento sincrono stato iscrizione"
43
+ "Last export date and time","Data ultima esportazione"
44
+ "Newsletter subscriber to customer operation","Operazione di iscrizione cliente già subscriber"
45
+ "Number of export attempts","Numero di tentativi di export"
46
+ "Number of import attempts","Numero di tentativi di import"
47
+ "Number of StartSubscriberDataExchangeRunner SOAP calls attempts","Numero di tentativi di chiamata SOAP StartSubscriberDataExchangeRunner"
48
+ "Number of clear statistics attempts","Numero di tentativi di pulizia delle statistiche"
49
+ "Number of fill statistics attempts","Numero di tentativi di calcolo delle statistiche"
50
+ "Total number of synchronous subscription state update attempts","Numero di tentativi di aggiornamento sincrono stato iscrizione"
51
+ "Only modified subscribers since last export","Solo i subscribers modificati dall'ultima esportazione"
52
+ "Queue parameters","Parametri gestione della coda"
53
+ "Manage queue", "Opzioni della coda"
54
+ "Queue Subscribers export job","Esporta iscritti"
55
+ "Queue Subscribers import job","Importa disiscrizioni"
56
+ "Reset export dates before next export","Annulla la data di export prima del prossimo export"
57
+ "Second period length in days","Lunghezza del secondo periodo in giorni"
58
+ "Second period length","Lunghezza del secondo periodo"
59
+ "Send unsubscribed notification email","Manda l'email di conferma disiscrizione"
60
+ "Specify the field that contains the subscription flag in ContactLab database (for example: _cls1).","Specificare qui il nome del campo che contiene il flag di sottoscrizione nel database ContactLab (es. __cls1)."
61
+ "Statistics","Statistiche"
62
+ "Subscribed flag name","Nome del campo &quot;__clsX&quot;"
63
+ "Subscribers configuration","Configurazione iscritti alla newsletter"
64
+ "Subscribers","Iscritti alla newsletter"
65
+ "The fields enabled in this section will be <strong>included</strong> during the subscribers export.","I campi abilitati in questa sezione saranno <strong>inclusi</strong> nell'export dei subscribers."
66
+ "Delete subscription if user does not confirm","Togliere iscrizione se l'utente non conferma"
67
+ "Unsubscribe the customer from the Newsletter if they do not select the subscription checkbox.","Togliere l'iscrizione alla newsletter se l'utente lascia vuota la casella dell'iscrizione in fase di registrazione"
68
+ "To ensure that all customer statistics are updated in ContactLab, select <strong>All subscribers only for the next export</strong> in the <strong>Export policy</strong> field of the <strong>Magento to ContactLab Configuration > Setup</strong> dialog.","Ricalcolare le <strong>Statistiche clienti</strong> dalla pagina dei <strong>Tasks</strong> dopo aver modificato la lunghezza di uno o di entrambi i periodi. Per garantire che tutte le statistiche vengano esportate durante la prossima esportazione, selezionare il valore <strong>Tutti i subscribers limitatamente alla prossima esportazione</strong> nell'opzione <strong>Modalità di export</strong>"
69
+
70
+ "Magento &rArr; ContactLab Configuration", "Configurazione Magento &rArr; ContactLab"
71
+ "ContactLab &rArr; Magento Configuration", "Configurazione ContactLab &rArr; Magento"
72
+
73
+ "Aggregated fields (Statistics)", "Campi Aggregati (Statistiche)"
74
+ "Server importer path", "Percorso file importazione"
75
+ "DataExporter configuration ID", "ID Configurazione Data exporter"
76
+ "Leave blank to use the memory limit of your environment (follow <a href=""http://php.net/manual/en/faq.using.php#faq.using.shorthandbytes"">this link</a> for more about the correct syntax)", "Lasciare vuoto per usare il memory limit di default (fare riferimento a <a href=""http://php.net/manual/en/faq.using.php#faq.using.shorthandbytes"">questa pagina</a> per maggiori informazioni sulla corretta sintassi del parametro)"
77
+ "Are you sure to truncate the UK table?", "Si è sicuri di voler troncare i dati della tabella UK?"
78
+ "UK table contains ContactLab Identifiers that are associated with Magento Customers and Newsletter Subscribers", "La tabella UK contiene gli ID ContactLab associati ai Customers Magento ed ai Newsletter Subscribers"
79
+ "Use this panel to reset, check and update the UK table", "Usare questo pannello per resettare, controllare ed aggiornare la tabella UK"
80
+ "Unique keys truncation successfully queued.", "Reset della Tabella UK accodato."
81
+ "Use this to queue a UK table update task.", Usare questa funzionalità per accodare un task di aggiornamento della tabella UK."
82
+ "Use this to check the integrity of the UK table.<br/>If some errors are found, please queue a UK table update task.", "Usare questa funzionalità per fare un check di integrità della tabella UK. Se sono stati riportati degli errori, accodare un task di aggiornamento della tabella."
83
+ "Use this to completely remove all the associated UK records.<br/>After this operation, you need to queue a UK table update task.", "Usare questa funzionalità per rimuovere ogni riga dalla tabella UK.<br/>Dopo che questa operazione è stata eseguita, sarà neccesario accodare un task di aggiornamento della tabella."
84
+ "Every reset operation needs to be agreed with ContactLab customer care.", "Ogni operazione di reset della tabella dovrà essere eseguito solo dopo aver contattato il customer care Contaclab."
85
+ "Queue <strong>statistics update</strong> task", "Accoda manualmente un task di <strong>aggiornamento delle statistiche</strong> da esportare"
86
+ "Queue <strong>export subscribers</strong> task", "Accoda manualmente un task di <strong>esportazione</strong>"
87
+ "Queue <strong>import subscribers</strong> task", "Accoda manualmente un task di <strong>importazione</strong>"
88
+ "Use this panel to manually queue import, export and statistics reset tasks", "Utilizzare le funzioni di questo pannello per<br>accodare manualmente i task di import, export e ricalcolo delle statistiche"
89
+ "ContactLab <code>WebFormCode</code>. Multiple comma separated values are also permitted.", "ContactLab <code>WebFormCode</code>. Sono permessi anche valori multipli, separati da virgola."
90
+ "Only check", "Controlla solamente"
91
+ "Check and repair", "Controlla e ripara eventuali errori"
app/locale/it_IT/contactlab/Contactlab_Template.csv CHANGED
@@ -1,115 +1,120 @@
1
- "Template Type Information","Imformazioni sul tipo di template"
2
- "Template type name","Nome del tipo di template"
3
- "Code of template type","Codice del tipo template"
4
- "Is a system defined type","Tipo template di sistema"
5
- "Enable for cron execution","Abilita all'esecuzione in Cron"
6
- "Default for new templates","Valore di default per i nuovi template"
7
- "Back","Indietro"
8
- "Reset","Annulla"
9
- "Save Template Type","Salva"
10
- "Delete Template Type","Elimina"
11
- "Edit Template Type","Modifica"
12
- "New Template Type","Nuovo"
13
- "Create Template Type","Nuovo"
14
- "An error occurred while saving this template type.","Errore durante il salvataggio"
15
- "Can't delete a system defined template!","Impossibile eliminare un tipo di template di sistema!"
16
- "An error occurred while deleting this template type.","Errore durante l'eliminazione"
17
- "Activate for cron execution","Abilita esecuzione in cron"
18
- "An error occurred while saving this template.","Errore durante il salvataggio del template."
19
- "Both HTML and Text/Plain","HTML e Testo"
20
- "Cron Information","Informazioni esecuzione in cron"
21
- "Default product snippet (1-5)","Snippet prodotto di default"
22
- "Default product snippet number","Snippet prodotto di default"
23
- "Delete Template Type","Elimina il tipo di template"
24
- "Does the template is active for cron?","Questo tipo di template è attivo per l'esecuzione in cron?"
25
- "Email format type","Formato email"
26
- "Enabled end date","Data inizio abilitazione"
27
- "Enabled start date","Data fine abilitazione"
28
- "End date for cron","Data fine per l'esecuzione in cron"
29
- "HTML only","Solo HTML"
30
- "Newsletter Templates Types","Tipi di template"
31
- "XML Delivery Queue", "Coda XML Delivery"
32
- "Optional queue delay time","Delay di esecuzion (opzionale)"
33
- "Product template nr %d (html)","Template prodotto nr %d (html)"
34
- "Product template nr %d (text)","Template prodotto nr %d (text)"
35
- "Product templates","Template prodotti"
36
- "Queue delay time","Ritardo esecuzione in coda"
37
- "Start date for cron","Data inizio per l'esecuzione in cron"
38
- "Template (html format)","Template (html)"
39
- "Template nr %d for product (html)","Template prodotto nr %d (html)"
40
- "Template nr %d for product (text/plain)","Template prodotto nr %d (testo)"
41
- "Template Styles","Stile template"
42
- "Template (text format)","Template (text)"
43
- "Template type","Tipo di template"
44
- "Template types","Tipi di template"
45
- "Text, html or both","Testo, HTML o entrambi"
46
- "Text/Plain only","Solo testo"
47
- "Use XML Delivery","Abilita XMLDelivery"
48
- "Templates configuration","Configurazione template"
49
- "Dnd period length","Periodo dnd"
50
- "Dnd max mail number","Numero di email dnd"
51
- "Do not disturb values","Impostazioni politiche di non disturbo (Dnd)"
52
- "Enable cron sending for this store", "Abilitare invio in cron per questo Store"
53
- "Test recipients", "Indirizzi email di test"
54
- "Abandoned cart","Carrello abbandonato"
55
- "Enable Abandoned Cart","Abilita invio Abandoned Cart"
56
- "Minimum minutes value to consider a Abandoned Cart in email sending","Numero minimo di minuti perché un carrello sia considerato <em>abbandonato</em>"
57
- "Maximum minutes value to consider a Abandoned Cart in email sending","Numero massimo di minuti perché un carrello sia considerato <em>abbandonato</em>"
58
- "Cart minimum amount value","Valore minimo del carrello"
59
- "Cart maximum amount value","Valore massimo del carrello"
60
- "Minimum number of products in cart","Numero di prodotti minimo nel carrello"
61
- "Maximum number of products in cart","Numero di prodotti massimo nel carrello"
62
- "And / Or condition values","Considerare le condizioni numero/valore in and/or?"
63
-
64
- "Enable Wishlist remind","Abilita invio wishlist remind"
65
- "Minimum minutes value to consider a Wishlist in email sending","Numero minimo di minuti per considerare una wishlist nell'invio dell'email"
66
- "Maximum minutes value to consider a Wishlist in email sending","Numero massimo di minuti per considerare una wishlist nell'invio dell'email"
67
- "Wishlist minimum amount value","Valore minimo wishlist"
68
- "Wishlist maximum amount value","Valore massimo wishlist"
69
- "Wishlist minimum item number","Numero minimo di prodotti in wishlist"
70
- "Wishlist maximum item number","Numero massimo di prodotti in wishlist"
71
-
72
- "XML Delivery parameters", "Parametri XML Delivery"
73
- "API Authentication UID", "UID Autenticazione API"
74
- "API Authentication key", "Chiave Autenticazione API"
75
- "Delivery method", "Metodo di delivery"
76
- "Email group ID", "ID Gruppo email"
77
- "Interval between sending attempts", "Intervallo tra tentativi di invio"
78
- "Number of sending attempts", "Numero di tentativi di invio"
79
- "Interval between check attempts", "Intervallo tra check report invio"
80
- "Number of check attempts", "Numero di tentativi di check report invio"
81
-
82
- "Automatic", "Automatico"
83
- "Manual", "Manuale"
84
-
85
- "Send to test recipients","Invio di test"
86
- "Product image size (width x height)","Dimensione immagine prodotti (larghezza x altezza)"
87
-
88
- "Generic email campaign","Campagna di email generica"
89
- "Enable generic campaign email","Abilita invio campagne generiche"
90
- "Recurring Email","Email ricorrenti"
91
-
92
- "Customer filter options", "Opzioni di selezione dei destinatari"
93
-
94
- "Minimum number of minutes", "Numero minimo di minuti"
95
- "Maximum number of minutes", "Numero massimo di minuti"
96
- "Minimum value", "Valore minimo"
97
- "Maximum value", "Valore massimo"
98
- "Minimum number of products", "Numero minimo di prodotti"
99
- "Maximum number of products", "Numero massimo di prodotti"
100
-
101
- "Send generic campaign to not subscribed customers", "Invia campagne generiche ai clienti non iscritti alla newsletter"
102
- "Send abandoned cart email to not subscribed customers", "Invia il Carrello Abbandonato ai clienti non iscritti"
103
- "Send wishlist remind email to not subscribed customers", "Invia la Wishlist remind ai clienti non iscritti"
104
-
105
-
106
-
107
- "Priority", "Priorità"
108
- "Content Type", "Tipo di contenuto"
109
- "XML Delivery Status", "Stato XML Delivery"
110
-
111
- "Recurring Email &mdash; Abandoned Cart", "Email ricorrenti &mdash; Carrello abbandonato"
112
- "Recurring Email &mdash; Wishlist Remind", "Email ricorrenti &mdash; Wishlist remind"
113
-
114
- "Show all", "Mostra tutti"
115
- "Hide", "Nascondi"
 
 
 
 
 
1
+ "Template Type Information","Imformazioni sul tipo di template"
2
+ "Template type name","Nome del tipo di template"
3
+ "Code of template type","Codice del tipo template"
4
+ "Is a system defined type","Tipo template di sistema"
5
+ "Enable for Cron execution","Abilita all'esecuzione in Cron"
6
+ "Default for new templates","Valore di default per i nuovi template"
7
+ "Back","Indietro"
8
+ "Reset","Annulla"
9
+ "Save Template Type","Salva"
10
+ "Delete Template Type","Elimina"
11
+ "Edit Template Type","Modifica"
12
+ "New Template Type","Nuovo"
13
+ "Create Template Type","Nuovo"
14
+ "An error occurred while saving this template type.","Errore durante il salvataggio"
15
+ "Can't delete a system defined template!","Impossibile eliminare un tipo di template di sistema!"
16
+ "An error occurred while deleting this template type.","Errore durante l'eliminazione"
17
+ "Activate for Cron execution","Abilita esecuzione in Cron"
18
+ "An error occurred while saving this template.","Errore durante il salvataggio del template."
19
+ "Both HTML and Text/Plain","HTML e Testo"
20
+ "Cron Information","Informazioni esecuzione in Cron"
21
+ "Default product snippet (1-5)","Snippet prodotto di default"
22
+ "Default product snippet number","Snippet prodotto di default"
23
+ "Delete Template Type","Elimina il tipo di template"
24
+ "Does the template is active for Cron?","Questo tipo di template è attivo per l'esecuzione in Cron?"
25
+ "Email format type","Formato email"
26
+ "Enabled end date","Data inizio abilitazione"
27
+ "Enabled start date","Data fine abilitazione"
28
+ "End date for Cron","Data fine per l'esecuzione in Cron"
29
+ "HTML only","Solo HTML"
30
+ "Newsletter Templates Types","Tipi di template"
31
+ "XML Delivery queue", "Coda XML Delivery"
32
+ "Optional queue delay time","Delay di esecuzion (opzionale)"
33
+ "Product template nr %d (html)","Template prodotto nr %d (html)"
34
+ "Product template nr %d (text)","Template prodotto nr %d (text)"
35
+ "Product templates","Template prodotti"
36
+ "Queue delay time","Ritardo esecuzione in coda"
37
+ "Start date for Cron","Data inizio per l'esecuzione in Cron"
38
+ "Template (html format)","Template (html)"
39
+ "Template nr %d for product (html)","Template prodotto nr %d (html)"
40
+ "Template nr %d for product (text/plain)","Template prodotto nr %d (testo)"
41
+ "Template Styles","Stile template"
42
+ "Template (text format)","Template (text)"
43
+ "Template type","Tipo di template"
44
+ "Template Type","Tipo di template"
45
+ "Template Types","Tipi di template"
46
+ "Text, html or both","Testo, HTML o entrambi"
47
+ "Text/Plain only","Solo testo"
48
+ "Use XML Delivery","Abilita XMLDelivery"
49
+ "Templates configuration","Configurazione template"
50
+ "DND period length","Periodo DND"
51
+ "DND max mail number","Numero di email DND"
52
+ "Do not disturb values","Impostazioni politiche di non disturbo (DND)"
53
+ "Enable Cron to send from this store", "Abilitare invio in Cron per questo Store"
54
+ "Test recipients", "Indirizzi email di test"
55
+ "Abandoned cart","Carrello abbandonato"
56
+ "Enable Abandoned Cart","Abilita invio Abandoned Cart"
57
+ "Minimum number of minutes before sending an Abandoned Cart email","Numero minimo di minuti perché un carrello sia considerato <em>abbandonato</em>"
58
+ "Maximum number of minutes before sending an Abandoned Cart email","Numero massimo di minuti perché un carrello sia considerato <em>abbandonato</em>"
59
+ "Cart minimum value","Valore minimo del carrello"
60
+ "Cart maximum value","Valore massimo del carrello"
61
+ "Minimum number of products in cart","Numero di prodotti minimo nel carrello"
62
+ "Maximum number of products in cart","Numero di prodotti massimo nel carrello"
63
+ "And/or condition values","Considerare le condizioni numero/valore in and/or?"
64
+
65
+ "Enable Wishlist Reminder","Abilita invio Wishlist Reminder"
66
+ "Minimum number of minutes before sending a Wishlist Reminder email","Numero minimo di minuti per considerare una wishlist nell'invio dell'email"
67
+ "Maximum number of minutes before sending a Wishlist Reminder email","Numero massimo di minuti per considerare una wishlist nell'invio dell'email"
68
+ "Wishlist minimum value","Valore minimo wishlist"
69
+ "Wishlist maximum value","Valore massimo wishlist"
70
+ "Minimum number of items in wishlist","Numero minimo di prodotti in wishlist"
71
+ "Maximum number of items in wishlist","Numero massimo di prodotti in wishlist"
72
+
73
+ "XML Delivery parameters", "Parametri XML Delivery"
74
+ "API Authentication UID", "UID Autenticazione API"
75
+ "API Authentication key", "Chiave Autenticazione API"
76
+ "Delivery method", "Metodo di delivery"
77
+ "Email group ID", "ID Gruppo email"
78
+ "Interval between send attempts", "Intervallo tra tentativi di invio"
79
+ "Number of send attempts", "Numero di tentativi di invio"
80
+ "Interval between check attempts", "Intervallo tra check report invio"
81
+ "Number of check attempts", "Numero di tentativi di check report invio"
82
+
83
+ "Automatic", "Automatico"
84
+ "Manual", "Manuale"
85
+
86
+ "Send to test recipients","Invio di test"
87
+ "Product image size (width x height)","Dimensione immagine prodotti (larghezza x altezza)"
88
+
89
+ "Generic email campaign","Campagna di email generica"
90
+ "Enable generic campaign email","Abilita invio campagne generiche"
91
+ "Recurring Email","Email ricorrenti"
92
+
93
+ "Customer filter options", "Opzioni di selezione dei destinatari"
94
+
95
+ "Minimum number of minutes", "Numero minimo di minuti"
96
+ "Maximum number of minutes", "Numero massimo di minuti"
97
+ "Minimum value", "Valore minimo"
98
+ "Maximum value", "Valore massimo"
99
+ "Minimum number of products", "Numero minimo di prodotti"
100
+ "Maximum number of products", "Numero massimo di prodotti"
101
+
102
+ "Send generic campaign to non-subscribed customers", "Invia campagne generiche ai clienti non iscritti alla newsletter"
103
+ "Send Abandoned Cart email to non-subscribed customers", "Invia il Carrello Abbandonato ai clienti non iscritti"
104
+ "Send Wishlist Reminder email to non-subscribed customers", "Invia la Wishlist Reminder ai clienti non iscritti"
105
+
106
+
107
+
108
+ "Priority", "Priorità"
109
+ "Content Type", "Tipo di contenuto"
110
+ "XML Delivery Status", "Stato XML Delivery"
111
+
112
+ "Recurring Email &mdash; Abandoned Cart", "Email ricorrenti &mdash; Carrello Abbandonato"
113
+ "Recurring Email &mdash; Wishlist Reminder", "Email ricorrenti &mdash; Wishlist Reminder"
114
+
115
+ "Show all", "Mostra tutti"
116
+ "Hide", "Nascondi"
117
+ "Show full XML Delivery status information for this template","Dettaglio dello stato XML Delivery per questo template"
118
+ "Full XML Delivery status","Dettaglio XML Delivery"
119
+ "Any", "Tutti"
120
+ "Use ; as the delimiter to separate recipients.", "Utilizzare il carattere ; per separare destinatari multipli"
app/locale/it_IT/contactlab/Contactlab_Transactional.csv CHANGED
@@ -1,7 +1,7 @@
1
- "Interval between email send attempts","Intervallo tra tentativi di invio email"
2
- "Total number of email send attempts","Numero di tentativi di invio email"
3
- "Transactional emails","Email transazionali"
4
- "Transactional email configuration","Configurazione email transazionali"
5
- "Enable or disable Contactlab Transactional Emails module","Abilita o disabilita il modulo Contactlab Transactional Emails"
6
- "Configure default values", "Configura valori di default"
7
- "Configure", "Configura"
1
+ "Interval between email send attempts","Intervallo tra tentativi di invio email"
2
+ "Number of email send attempts","Numero di tentativi di invio email"
3
+ "Transactional emails","Email transazionali"
4
+ "Transactional email configuration","Configurazione email transazionali"
5
+ "Enable or disable ContactLab Transactional emails module.","Abilita o disabilita il modulo Contactlab Transactional Emails"
6
+ "Configure default values", "Configura valori di default"
7
+ "Configure", "Configura"
js/contactlab_commons/adminhtml/tasks.js CHANGED
@@ -1,82 +1,82 @@
1
- /** Ajax task update manager. */
2
-
3
- /*global jQuery,alert*/
4
-
5
- var ContactLabTaskUpdateManager = function () {
6
- // my and that
7
- var my = {}, that = {};
8
-
9
- // Init.
10
- my.init = function () {
11
- Event.observe(document, 'dom:loaded', my.onLoad);
12
- };
13
-
14
- // Onload.
15
- my.onLoad = function () {
16
- var tasks = $$('span.task-status-running, span.task-status-new');
17
- if (tasks) {
18
- new PeriodicalExecuter(function (pe) {
19
- my.updateTasks(tasks);
20
- }, 5);
21
- }
22
- };
23
-
24
- my.updateTasks = function (tasks) {
25
- var ids = [];
26
- tasks.each(function (el) {
27
- var id = parseInt(el.id.replace(/[a-z-]*/, ''));
28
- if (id) {
29
- ids.push(id);
30
- }
31
- });
32
- var sf = JSON.stringify(ids).replace(/"/g, '');
33
- new Ajax.Request(my.urls.getStatus, {
34
- method: 'post',
35
- parameters: 'ids=' + sf,
36
- loaderArea: false,
37
- onSuccess: function(response) {
38
- my.updateTasksSuccess(JSON.parse(response.responseText));
39
- }
40
- });
41
- };
42
-
43
- my.updateTasksSuccess = function (tasks) {
44
- tasks.each(function(item) {
45
- $(item.id).replace(item.html);
46
- $(item.id2).replace(item.statusHtml);
47
- $(item.id3).replace(item.actionsHtml);
48
- });
49
- };
50
-
51
- // Set urls
52
- that.setUrls = function (urls) {
53
- my.urls = urls;
54
- };
55
-
56
- that.setRequestStatusUrl = function (url) {
57
- my.updateRequestStatusUrl = url;
58
-
59
- $$('#task_id .pager')[0].insert('<div style="display: inline-block; margin-left: 50px" id="get-subscriber-data-exchange-status"/>');
60
-
61
- new PeriodicalExecuter(my.updateRequestStatus, 20);
62
- my.updateRequestStatus();
63
- };
64
-
65
- my.updateRequestStatus = function () {
66
- new Ajax.Request(my.updateRequestStatusUrl, {
67
- loaderArea: false,
68
- onSuccess: my.doUpdateRequestStatus
69
- });
70
- };
71
-
72
- my.doUpdateRequestStatus = function (response) {
73
- response = JSON.parse(response.responseText);
74
- $('get-subscriber-data-exchange-status').innerHTML = response.label;
75
- };
76
-
77
- // Calls init.
78
- my.init();
79
-
80
- return that;
81
- };
82
-
1
+ /** Ajax task update manager. */
2
+
3
+ /*global jQuery,alert*/
4
+
5
+ var ContactLabTaskUpdateManager = function () {
6
+ // my and that
7
+ var my = {}, that = {};
8
+
9
+ // Init.
10
+ my.init = function () {
11
+ Event.observe(document, 'dom:loaded', my.onLoad);
12
+ };
13
+
14
+ // Onload.
15
+ my.onLoad = function () {
16
+ var tasks = $$('span.task-status-running, span.task-status-new');
17
+ if (tasks) {
18
+ new PeriodicalExecuter(function (pe) {
19
+ my.updateTasks(tasks);
20
+ }, 5);
21
+ }
22
+ };
23
+
24
+ my.updateTasks = function (tasks) {
25
+ var ids = [];
26
+ tasks.each(function (el) {
27
+ var id = parseInt(el.id.replace(/[a-z-]*/, ''));
28
+ if (id) {
29
+ ids.push(id);
30
+ }
31
+ });
32
+ var sf = JSON.stringify(ids).replace(/"/g, '');
33
+ new Ajax.Request(my.urls.getStatus, {
34
+ method: 'post',
35
+ parameters: 'ids=' + sf,
36
+ loaderArea: false,
37
+ onSuccess: function(response) {
38
+ my.updateTasksSuccess(JSON.parse(response.responseText));
39
+ }
40
+ });
41
+ };
42
+
43
+ my.updateTasksSuccess = function (tasks) {
44
+ tasks.each(function(item) {
45
+ $(item.id).replace(item.html);
46
+ $(item.id2).replace(item.statusHtml);
47
+ $(item.id3).replace(item.actionsHtml);
48
+ });
49
+ };
50
+
51
+ // Set urls
52
+ that.setUrls = function (urls) {
53
+ my.urls = urls;
54
+ };
55
+
56
+ that.setRequestStatusUrl = function (url) {
57
+ my.updateRequestStatusUrl = url;
58
+
59
+ $$('#task_id .pager')[0].insert('<div style="display: inline-block; margin-left: 50px" id="get-subscriber-data-exchange-status"/>');
60
+
61
+ new PeriodicalExecuter(my.updateRequestStatus, 20);
62
+ my.updateRequestStatus();
63
+ };
64
+
65
+ my.updateRequestStatus = function () {
66
+ new Ajax.Request(my.updateRequestStatusUrl, {
67
+ loaderArea: false,
68
+ onSuccess: my.doUpdateRequestStatus
69
+ });
70
+ };
71
+
72
+ my.doUpdateRequestStatus = function (response) {
73
+ response = JSON.parse(response.responseText);
74
+ $('get-subscriber-data-exchange-status').innerHTML = response.label;
75
+ };
76
+
77
+ // Calls init.
78
+ my.init();
79
+
80
+ return that;
81
+ };
82
+
lib/contactlab/Attachment.php CHANGED
@@ -1,41 +1,41 @@
1
- <?php
2
-
3
- class Attachment
4
- {
5
-
6
- /**
7
- *
8
- * @var int $identifier
9
- * @access public
10
- */
11
- public $identifier;
12
-
13
- /**
14
- *
15
- * @var int $campaignIdentifier
16
- * @access public
17
- */
18
- public $campaignIdentifier;
19
-
20
- /**
21
- *
22
- * @var string $name
23
- * @access public
24
- */
25
- public $name;
26
-
27
- /**
28
- *
29
- * @var MimeType $mimeType
30
- * @access public
31
- */
32
- public $mimeType;
33
-
34
- /**
35
- *
36
- * @var base64Binary $content
37
- * @access public
38
- */
39
- public $content;
40
-
41
- }
1
+ <?php
2
+
3
+ class Attachment
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $identifier
9
+ * @access public
10
+ */
11
+ public $identifier;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignIdentifier
16
+ * @access public
17
+ */
18
+ public $campaignIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var string $name
23
+ * @access public
24
+ */
25
+ public $name;
26
+
27
+ /**
28
+ *
29
+ * @var MimeType $mimeType
30
+ * @access public
31
+ */
32
+ public $mimeType;
33
+
34
+ /**
35
+ *
36
+ * @var base64Binary $content
37
+ * @access public
38
+ */
39
+ public $content;
40
+
41
+ }
lib/contactlab/AuthToken.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class AuthToken
4
- {
5
-
6
- /**
7
- *
8
- * @var string $content
9
- * @access public
10
- */
11
- public $content;
12
-
13
- }
1
+ <?php
2
+
3
+ class AuthToken
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $content
9
+ * @access public
10
+ */
11
+ public $content;
12
+
13
+ }
lib/contactlab/BounceDetail.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class BounceDetail
4
- {
5
-
6
- /**
7
- *
8
- * @var int $code
9
- * @access public
10
- */
11
- public $code;
12
-
13
- /**
14
- *
15
- * @var string $description
16
- * @access public
17
- */
18
- public $description;
19
-
20
- /**
21
- *
22
- * @var int $count
23
- * @access public
24
- */
25
- public $count;
26
-
27
- }
1
+ <?php
2
+
3
+ class BounceDetail
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $code
9
+ * @access public
10
+ */
11
+ public $code;
12
+
13
+ /**
14
+ *
15
+ * @var string $description
16
+ * @access public
17
+ */
18
+ public $description;
19
+
20
+ /**
21
+ *
22
+ * @var int $count
23
+ * @access public
24
+ */
25
+ public $count;
26
+
27
+ }
lib/contactlab/Campaign.php CHANGED
@@ -1,90 +1,90 @@
1
- <?php
2
-
3
- class Campaign
4
- {
5
-
6
- /**
7
- *
8
- * @var int $identifier
9
- * @access public
10
- */
11
- public $identifier;
12
-
13
- /**
14
- *
15
- * @var string $name
16
- * @access public
17
- */
18
- public $name;
19
-
20
- /**
21
- *
22
- * @var string $alias
23
- * @access public
24
- */
25
- public $alias;
26
-
27
- /**
28
- *
29
- * @var Message $message
30
- * @access public
31
- */
32
- public $message;
33
-
34
- /**
35
- *
36
- * @var CampaignType $modifier
37
- * @access public
38
- */
39
- public $modifier;
40
-
41
- /**
42
- *
43
- * @var boolean $isDeferred
44
- * @access public
45
- */
46
- public $isDeferred;
47
-
48
- /**
49
- *
50
- * @var dateTime $deferredTo
51
- * @access public
52
- */
53
- public $deferredTo;
54
-
55
- /**
56
- *
57
- * @var dateTime $startDate
58
- * @access public
59
- */
60
- public $startDate;
61
-
62
- /**
63
- *
64
- * @var dateTime $endDate
65
- * @access public
66
- */
67
- public $endDate;
68
-
69
- /**
70
- *
71
- * @var boolean $executeTestRender
72
- * @access public
73
- */
74
- public $executeTestRender;
75
-
76
- /**
77
- *
78
- * @var int $parentId
79
- * @access public
80
- */
81
- public $parentId;
82
-
83
- /**
84
- *
85
- * @var deliveryRoleType $roleType
86
- * @access public
87
- */
88
- public $roleType;
89
-
90
- }
1
+ <?php
2
+
3
+ class Campaign
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $identifier
9
+ * @access public
10
+ */
11
+ public $identifier;
12
+
13
+ /**
14
+ *
15
+ * @var string $name
16
+ * @access public
17
+ */
18
+ public $name;
19
+
20
+ /**
21
+ *
22
+ * @var string $alias
23
+ * @access public
24
+ */
25
+ public $alias;
26
+
27
+ /**
28
+ *
29
+ * @var Message $message
30
+ * @access public
31
+ */
32
+ public $message;
33
+
34
+ /**
35
+ *
36
+ * @var CampaignType $modifier
37
+ * @access public
38
+ */
39
+ public $modifier;
40
+
41
+ /**
42
+ *
43
+ * @var boolean $isDeferred
44
+ * @access public
45
+ */
46
+ public $isDeferred;
47
+
48
+ /**
49
+ *
50
+ * @var dateTime $deferredTo
51
+ * @access public
52
+ */
53
+ public $deferredTo;
54
+
55
+ /**
56
+ *
57
+ * @var dateTime $startDate
58
+ * @access public
59
+ */
60
+ public $startDate;
61
+
62
+ /**
63
+ *
64
+ * @var dateTime $endDate
65
+ * @access public
66
+ */
67
+ public $endDate;
68
+
69
+ /**
70
+ *
71
+ * @var boolean $executeTestRender
72
+ * @access public
73
+ */
74
+ public $executeTestRender;
75
+
76
+ /**
77
+ *
78
+ * @var int $parentId
79
+ * @access public
80
+ */
81
+ public $parentId;
82
+
83
+ /**
84
+ *
85
+ * @var deliveryRoleType $roleType
86
+ * @access public
87
+ */
88
+ public $roleType;
89
+
90
+ }
lib/contactlab/CampaignFeedback.php CHANGED
@@ -1,174 +1,174 @@
1
- <?php
2
-
3
- class CampaignFeedback
4
- {
5
-
6
- /**
7
- *
8
- * @var int $campaignIdentifier
9
- * @access public
10
- */
11
- public $campaignIdentifier;
12
-
13
- /**
14
- *
15
- * @var int $campaignSize
16
- * @access public
17
- */
18
- public $campaignSize;
19
-
20
- /**
21
- *
22
- * @var int $views
23
- * @access public
24
- */
25
- public $views;
26
-
27
- /**
28
- *
29
- * @var int $uniqueViews
30
- * @access public
31
- */
32
- public $uniqueViews;
33
-
34
- /**
35
- *
36
- * @var int $hiddenViews
37
- * @access public
38
- */
39
- public $hiddenViews;
40
-
41
- /**
42
- *
43
- * @var int $webMailViews
44
- * @access public
45
- */
46
- public $webMailViews;
47
-
48
- /**
49
- *
50
- * @var int $clicks
51
- * @access public
52
- */
53
- public $clicks;
54
-
55
- /**
56
- *
57
- * @var int $uniqueClicks
58
- * @access public
59
- */
60
- public $uniqueClicks;
61
-
62
- /**
63
- *
64
- * @var int $bounces
65
- * @access public
66
- */
67
- public $bounces;
68
-
69
- /**
70
- *
71
- * @var int $fblComplaints
72
- * @access public
73
- */
74
- public $fblComplaints;
75
-
76
- /**
77
- *
78
- * @var int $tafClicks
79
- * @access public
80
- */
81
- public $tafClicks;
82
-
83
- /**
84
- *
85
- * @var int $uniqueTafClicks
86
- * @access public
87
- */
88
- public $uniqueTafClicks;
89
-
90
- /**
91
- *
92
- * @var int $blacklistMatches
93
- * @access public
94
- */
95
- public $blacklistMatches;
96
-
97
- /**
98
- *
99
- * @var int $listunsubscribe
100
- * @access public
101
- */
102
- public $listunsubscribe;
103
-
104
- /**
105
- *
106
- * @var int $delivered
107
- * @access public
108
- */
109
- public $delivered;
110
-
111
- /**
112
- *
113
- * @var int $cancelled
114
- * @access public
115
- */
116
- public $cancelled;
117
-
118
- /**
119
- *
120
- * @var int $temporaryBlacklistMatches
121
- * @access public
122
- */
123
- public $temporaryBlacklistMatches;
124
-
125
- /**
126
- *
127
- * @var int $errors
128
- * @access public
129
- */
130
- public $errors;
131
-
132
- /**
133
- *
134
- * @var int $unsubscribed
135
- * @access public
136
- */
137
- public $unsubscribed;
138
-
139
- /**
140
- *
141
- * @var int $updates
142
- * @access public
143
- */
144
- public $updates;
145
-
146
- /**
147
- *
148
- * @var int $temporaryBlacklisted
149
- * @access public
150
- */
151
- public $temporaryBlacklisted;
152
-
153
- /**
154
- *
155
- * @var int $blacklisted
156
- * @access public
157
- */
158
- public $blacklisted;
159
-
160
- /**
161
- *
162
- * @var TrackedLink $trackingDetails
163
- * @access public
164
- */
165
- public $trackingDetails;
166
-
167
- /**
168
- *
169
- * @var BounceDetail $bounceDetails
170
- * @access public
171
- */
172
- public $bounceDetails;
173
-
174
- }
1
+ <?php
2
+
3
+ class CampaignFeedback
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $campaignIdentifier
9
+ * @access public
10
+ */
11
+ public $campaignIdentifier;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignSize
16
+ * @access public
17
+ */
18
+ public $campaignSize;
19
+
20
+ /**
21
+ *
22
+ * @var int $views
23
+ * @access public
24
+ */
25
+ public $views;
26
+
27
+ /**
28
+ *
29
+ * @var int $uniqueViews
30
+ * @access public
31
+ */
32
+ public $uniqueViews;
33
+
34
+ /**
35
+ *
36
+ * @var int $hiddenViews
37
+ * @access public
38
+ */
39
+ public $hiddenViews;
40
+
41
+ /**
42
+ *
43
+ * @var int $webMailViews
44
+ * @access public
45
+ */
46
+ public $webMailViews;
47
+
48
+ /**
49
+ *
50
+ * @var int $clicks
51
+ * @access public
52
+ */
53
+ public $clicks;
54
+
55
+ /**
56
+ *
57
+ * @var int $uniqueClicks
58
+ * @access public
59
+ */
60
+ public $uniqueClicks;
61
+
62
+ /**
63
+ *
64
+ * @var int $bounces
65
+ * @access public
66
+ */
67
+ public $bounces;
68
+
69
+ /**
70
+ *
71
+ * @var int $fblComplaints
72
+ * @access public
73
+ */
74
+ public $fblComplaints;
75
+
76
+ /**
77
+ *
78
+ * @var int $tafClicks
79
+ * @access public
80
+ */
81
+ public $tafClicks;
82
+
83
+ /**
84
+ *
85
+ * @var int $uniqueTafClicks
86
+ * @access public
87
+ */
88
+ public $uniqueTafClicks;
89
+
90
+ /**
91
+ *
92
+ * @var int $blacklistMatches
93
+ * @access public
94
+ */
95
+ public $blacklistMatches;
96
+
97
+ /**
98
+ *
99
+ * @var int $listunsubscribe
100
+ * @access public
101
+ */
102
+ public $listunsubscribe;
103
+
104
+ /**
105
+ *
106
+ * @var int $delivered
107
+ * @access public
108
+ */
109
+ public $delivered;
110
+
111
+ /**
112
+ *
113
+ * @var int $cancelled
114
+ * @access public
115
+ */
116
+ public $cancelled;
117
+
118
+ /**
119
+ *
120
+ * @var int $temporaryBlacklistMatches
121
+ * @access public
122
+ */
123
+ public $temporaryBlacklistMatches;
124
+
125
+ /**
126
+ *
127
+ * @var int $errors
128
+ * @access public
129
+ */
130
+ public $errors;
131
+
132
+ /**
133
+ *
134
+ * @var int $unsubscribed
135
+ * @access public
136
+ */
137
+ public $unsubscribed;
138
+
139
+ /**
140
+ *
141
+ * @var int $updates
142
+ * @access public
143
+ */
144
+ public $updates;
145
+
146
+ /**
147
+ *
148
+ * @var int $temporaryBlacklisted
149
+ * @access public
150
+ */
151
+ public $temporaryBlacklisted;
152
+
153
+ /**
154
+ *
155
+ * @var int $blacklisted
156
+ * @access public
157
+ */
158
+ public $blacklisted;
159
+
160
+ /**
161
+ *
162
+ * @var TrackedLink $trackingDetails
163
+ * @access public
164
+ */
165
+ public $trackingDetails;
166
+
167
+ /**
168
+ *
169
+ * @var BounceDetail $bounceDetails
170
+ * @access public
171
+ */
172
+ public $bounceDetails;
173
+
174
+ }
lib/contactlab/CampaignLookupPreferences.php CHANGED
@@ -1,15 +1,15 @@
1
- <?php
2
-
3
- include_once('LookupPreferences.php');
4
-
5
- class CampaignLookupPreferences extends LookupPreferences
6
- {
7
-
8
- /**
9
- *
10
- * @var CampaignSortingOption $sortingBy
11
- * @access public
12
- */
13
- public $sortingBy;
14
-
15
- }
1
+ <?php
2
+
3
+ include_once('LookupPreferences.php');
4
+
5
+ class CampaignLookupPreferences extends LookupPreferences
6
+ {
7
+
8
+ /**
9
+ *
10
+ * @var CampaignSortingOption $sortingBy
11
+ * @access public
12
+ */
13
+ public $sortingBy;
14
+
15
+ }
lib/contactlab/CampaignNote.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class CampaignNote
4
- {
5
-
6
- /**
7
- *
8
- * @var int $identifier
9
- * @access public
10
- */
11
- public $identifier;
12
-
13
- /**
14
- *
15
- * @var string $name
16
- * @access public
17
- */
18
- public $name;
19
-
20
- /**
21
- *
22
- * @var string $content
23
- * @access public
24
- */
25
- public $content;
26
-
27
- }
1
+ <?php
2
+
3
+ class CampaignNote
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $identifier
9
+ * @access public
10
+ */
11
+ public $identifier;
12
+
13
+ /**
14
+ *
15
+ * @var string $name
16
+ * @access public
17
+ */
18
+ public $name;
19
+
20
+ /**
21
+ *
22
+ * @var string $content
23
+ * @access public
24
+ */
25
+ public $content;
26
+
27
+ }
lib/contactlab/CampaignNotes.php CHANGED
@@ -1,15 +1,15 @@
1
- <?php
2
-
3
- include_once('SlicedDataSet.php');
4
-
5
- class CampaignNotes extends SlicedDataSet
6
- {
7
-
8
- /**
9
- *
10
- * @var CampaignNote $currentPageItems
11
- * @access public
12
- */
13
- public $currentPageItems;
14
-
15
- }
1
+ <?php
2
+
3
+ include_once('SlicedDataSet.php');
4
+
5
+ class CampaignNotes extends SlicedDataSet
6
+ {
7
+
8
+ /**
9
+ *
10
+ * @var CampaignNote $currentPageItems
11
+ * @access public
12
+ */
13
+ public $currentPageItems;
14
+
15
+ }
lib/contactlab/Campaigns.php CHANGED
@@ -1,15 +1,15 @@
1
- <?php
2
-
3
- include_once('SlicedDataSet.php');
4
-
5
- class Campaigns extends SlicedDataSet
6
- {
7
-
8
- /**
9
- *
10
- * @var Campaign $currentPageItems
11
- * @access public
12
- */
13
- public $currentPageItems;
14
-
15
- }
1
+ <?php
2
+
3
+ include_once('SlicedDataSet.php');
4
+
5
+ class Campaigns extends SlicedDataSet
6
+ {
7
+
8
+ /**
9
+ *
10
+ * @var Campaign $currentPageItems
11
+ * @access public
12
+ */
13
+ public $currentPageItems;
14
+
15
+ }
lib/contactlab/ClabService.php CHANGED
@@ -1,1128 +1,1128 @@
1
- <?php
2
-
3
- include_once('AuthToken.php');
4
- include_once('CommunicationCategory.php');
5
- include_once('SubscriberSourceFilter.php');
6
- include_once('LookupPreferences.php');
7
- include_once('CampaignLookupPreferences.php');
8
- include_once('XMLDeliveryInfos.php');
9
- include_once('SlicedDataSet.php');
10
- include_once('Campaigns.php');
11
- include_once('Campaign.php');
12
- include_once('Message.php');
13
- include_once('Recipients.php');
14
- include_once('Sender.php');
15
- include_once('TextMessage.php');
16
- include_once('EmailMessage.php');
17
- include_once('FaxMessage.php');
18
- include_once('SubscriberSources.php');
19
- include_once('SubscriberSource.php');
20
- include_once('SubscriberSourceField.php');
21
- include_once('MessageModels.php');
22
- include_once('SubscriberSourceFilters.php');
23
- include_once('CampaignNotes.php');
24
- include_once('CampaignNote.php');
25
- include_once('TrackedLinks.php');
26
- include_once('TrackedLink.php');
27
- include_once('Subscribers.php');
28
- include_once('Subscriber.php');
29
- include_once('SubscriberAttribute.php');
30
- include_once('Attachment.php');
31
- include_once('CampaignFeedback.php');
32
- include_once('BounceDetail.php');
33
- include_once('keepaliveToken.php');
34
- include_once('keepaliveTokenResponse.php');
35
- include_once('triggerDeliveryByAlias.php');
36
- include_once('triggerDeliveryByAliasResponse.php');
37
- include_once('getAvailableCommunicationCategories.php');
38
- include_once('getAvailableCommunicationCategoriesResponse.php');
39
- include_once('addSubscriberSourceFilter.php');
40
- include_once('addSubscriberSourceFilterResponse.php');
41
- include_once('getArchivedSubscriberSourceFilter.php');
42
- include_once('getArchivedSubscriberSourceFilterResponse.php');
43
- include_once('getXMLDeliveries.php');
44
- include_once('getXMLDeliveriesResponse.php');
45
- include_once('xmlDeliveryInfo.php');
46
- include_once('sendCampaign.php');
47
- include_once('sendCampaignResponse.php');
48
- include_once('findCampaignsSentBetween.php');
49
- include_once('findCampaignsSentBetweenResponse.php');
50
- include_once('countSubscribers.php');
51
- include_once('countSubscribersResponse.php');
52
- include_once('sendImmediateMessageSdataCAlCA.php');
53
- include_once('sendImmediateMessageSdataCAlCAResponse.php');
54
- include_once('getXMLDeliveryTransitions.php');
55
- include_once('getXMLDeliveryTransitionsResponse.php');
56
- include_once('xmlDeliveryTransitionInfo.php');
57
- include_once('findCampaignsByNameOrSubject.php');
58
- include_once('findCampaignsByNameOrSubjectResponse.php');
59
- include_once('sendImmediateMessageSidCAlCA.php');
60
- include_once('sendImmediateMessageSidCAlCAResponse.php');
61
- include_once('addCampaignNote.php');
62
- include_once('addCampaignNoteResponse.php');
63
- include_once('triggerDeliveryById.php');
64
- include_once('triggerDeliveryByIdResponse.php');
65
- include_once('getRequestStatus.php');
66
- include_once('getRequestStatusResponse.php');
67
- include_once('findCampaigns.php');
68
- include_once('findCampaignsResponse.php');
69
- include_once('updateSubscriber.php');
70
- include_once('updateSubscriberResponse.php');
71
- include_once('getCryptoKey.php');
72
- include_once('getCryptoKeyResponse.php');
73
- include_once('archiveSubscriberSourceFilter.php');
74
- include_once('archiveSubscriberSourceFilterResponse.php');
75
- include_once('cloneAndSendCampaign.php');
76
- include_once('cloneAndSendCampaignResponse.php');
77
- include_once('uploadMediaContent.php');
78
- include_once('uploadMediaContentResponse.php');
79
- include_once('findMessageModels.php');
80
- include_once('findMessageModelsResponse.php');
81
- include_once('sendImmediateMessageSDataCDataCA.php');
82
- include_once('sendImmediateMessageSDataCDataCAResponse.php');
83
- include_once('getCampaign.php');
84
- include_once('getCampaignResponse.php');
85
- include_once('addSubscribers.php');
86
- include_once('addSubscribersResponse.php');
87
- include_once('sendImmediateMessageSidCid.php');
88
- include_once('sendImmediateMessageSidCidResponse.php');
89
- include_once('sendImmediateMessageSDataCIdCA.php');
90
- include_once('sendImmediateMessageSDataCIdCAResponse.php');
91
- include_once('getSubscriberSourceFilter.php');
92
- include_once('getSubscriberSourceFilterResponse.php');
93
- include_once('findArchivedFiltersBySubscriberSource.php');
94
- include_once('findArchivedFiltersBySubscriberSourceResponse.php');
95
- include_once('getMessageModelById.php');
96
- include_once('getMessageModelByIdResponse.php');
97
- include_once('getAttachmentByCampaignId.php');
98
- include_once('getAttachmentByCampaignIdResponse.php');
99
- include_once('getSubscriber.php');
100
- include_once('getSubscriberResponse.php');
101
- include_once('findPeriodicCampaigns.php');
102
- include_once('findPeriodicCampaignsResponse.php');
103
- include_once('modifySubscriberSubscriptionStatus.php');
104
- include_once('modifySubscriberSubscriptionStatusResponse.php');
105
- include_once('borrowToken.php');
106
- include_once('borrowTokenResponse.php');
107
- include_once('findNotesByCampaign.php');
108
- include_once('findNotesByCampaignResponse.php');
109
- include_once('modifySubscriberSubscriptionStatusByMailqId.php');
110
- include_once('modifySubscriberSubscriptionStatusByMailqIdResponse.php');
111
- include_once('startSubscriberDataExchange.php');
112
- include_once('startSubscriberDataExchangeResponse.php');
113
- include_once('getCampaignDeliveryStatus.php');
114
- include_once('getCampaignDeliveryStatusResponse.php');
115
- include_once('removeSubscriber.php');
116
- include_once('removeSubscriberResponse.php');
117
- include_once('addAttachment.php');
118
- include_once('addAttachmentResponse.php');
119
- include_once('setCampaignRecurrency.php');
120
- include_once('setCampaignRecurrencyResponse.php');
121
- include_once('findFiltersBySubscriberSource.php');
122
- include_once('findFiltersBySubscriberSourceResponse.php');
123
- include_once('countSubscribersIncludedInFilter.php');
124
- include_once('countSubscribersIncludedInFilterResponse.php');
125
- include_once('sendImmediateMessageSidCidCA.php');
126
- include_once('sendImmediateMessageSidCidCAResponse.php');
127
- include_once('findSubscriberSources.php');
128
- include_once('findSubscriberSourcesResponse.php');
129
- include_once('addSubscriberSource.php');
130
- include_once('addSubscriberSourceResponse.php');
131
- include_once('findMessageModelsBySubscriberSource.php');
132
- include_once('findMessageModelsBySubscriberSourceResponse.php');
133
- include_once('sendImmediateMessageSdataCAl.php');
134
- include_once('sendImmediateMessageSdataCAlResponse.php');
135
- include_once('findCampaignsByModel.php');
136
- include_once('findCampaignsByModelResponse.php');
137
- include_once('sendImmediateMessageSDataCData.php');
138
- include_once('sendImmediateMessageSDataCDataResponse.php');
139
- include_once('getSubscriberDataExchangeStatus.php');
140
- include_once('getSubscriberDataExchangeStatusResponse.php');
141
- include_once('sendImmediateMessageSIdCDataCA.php');
142
- include_once('sendImmediateMessageSIdCDataCAResponse.php');
143
- include_once('sendImmediateMessage.php');
144
- include_once('sendImmediateMessageResponse.php');
145
- include_once('sendImmediateMessageSIdCData.php');
146
- include_once('sendImmediateMessageSIdCDataResponse.php');
147
- include_once('sendImmediateMessageSidCAl.php');
148
- include_once('sendImmediateMessageSidCAlResponse.php');
149
- include_once('findCampaignsByStatus.php');
150
- include_once('findCampaignsByStatusResponse.php');
151
- include_once('getSubscriberSource.php');
152
- include_once('getSubscriberSourceResponse.php');
153
- include_once('findSubscribers.php');
154
- include_once('findSubscribersResponse.php');
155
- include_once('findTriggerableCampaigns.php');
156
- include_once('findTriggerableCampaignsResponse.php');
157
- include_once('findCampaignsByNote.php');
158
- include_once('findCampaignsByNoteResponse.php');
159
- include_once('publishOnWeb.php');
160
- include_once('publishOnWebResponse.php');
161
- include_once('invalidateToken.php');
162
- include_once('invalidateTokenResponse.php');
163
- include_once('reuseSubscriberSourceFilter.php');
164
- include_once('reuseSubscriberSourceFilterResponse.php');
165
- include_once('createCampaign.php');
166
- include_once('createCampaignResponse.php');
167
- include_once('addSubscriber.php');
168
- include_once('addSubscriberResponse.php');
169
- include_once('getTrackedLinks.php');
170
- include_once('getTrackedLinksResponse.php');
171
- include_once('getCampaignFeedback.php');
172
- include_once('getCampaignFeedbackResponse.php');
173
- include_once('requestCampaignFeedbackReport.php');
174
- include_once('requestCampaignFeedbackReportResponse.php');
175
- include_once('createMessageModel.php');
176
- include_once('createMessageModelResponse.php');
177
- include_once('cancelCampaign.php');
178
- include_once('cancelCampaignResponse.php');
179
- include_once('findSubscribersIncludedInFilter.php');
180
- include_once('findSubscribersIncludedInFilterResponse.php');
181
-
182
-
183
- /**
184
- *
185
- */
186
- class ClabService extends SoapClient
187
- {
188
-
189
- /**
190
- *
191
- * @var array $classmap The defined classes
192
- * @access private
193
- */
194
- private static $classmap = array(
195
- 'AuthToken' => 'AuthToken',
196
- 'CommunicationCategory' => 'CommunicationCategory',
197
- 'SubscriberSourceFilter' => 'SubscriberSourceFilter',
198
- 'LookupPreferences' => 'LookupPreferences',
199
- 'CampaignLookupPreferences' => 'CampaignLookupPreferences',
200
- 'XMLDeliveryInfos' => 'XMLDeliveryInfos',
201
- 'SlicedDataSet' => 'SlicedDataSet',
202
- 'Campaigns' => 'Campaigns',
203
- 'Campaign' => 'Campaign',
204
- 'Message' => 'Message',
205
- 'Recipients' => 'Recipients',
206
- 'Sender' => 'Sender',
207
- 'TextMessage' => 'TextMessage',
208
- 'EmailMessage' => 'EmailMessage',
209
- 'FaxMessage' => 'FaxMessage',
210
- 'SubscriberSources' => 'SubscriberSources',
211
- 'SubscriberSource' => 'SubscriberSource',
212
- 'SubscriberSourceField' => 'SubscriberSourceField',
213
- 'MessageModels' => 'MessageModels',
214
- 'SubscriberSourceFilters' => 'SubscriberSourceFilters',
215
- 'CampaignNotes' => 'CampaignNotes',
216
- 'CampaignNote' => 'CampaignNote',
217
- 'TrackedLinks' => 'TrackedLinks',
218
- 'TrackedLink' => 'TrackedLink',
219
- 'Subscribers' => 'Subscribers',
220
- 'Subscriber' => 'Subscriber',
221
- 'SubscriberAttribute' => 'SubscriberAttribute',
222
- 'Attachment' => 'Attachment',
223
- 'CampaignFeedback' => 'CampaignFeedback',
224
- 'BounceDetail' => 'BounceDetail',
225
- 'keepaliveToken' => 'keepaliveToken',
226
- 'keepaliveTokenResponse' => 'keepaliveTokenResponse',
227
- 'triggerDeliveryByAlias' => 'triggerDeliveryByAlias',
228
- 'triggerDeliveryByAliasResponse' => 'triggerDeliveryByAliasResponse',
229
- 'getAvailableCommunicationCategories' => 'getAvailableCommunicationCategories',
230
- 'getAvailableCommunicationCategoriesResponse' => 'getAvailableCommunicationCategoriesResponse',
231
- 'addSubscriberSourceFilter' => 'addSubscriberSourceFilter',
232
- 'addSubscriberSourceFilterResponse' => 'addSubscriberSourceFilterResponse',
233
- 'getArchivedSubscriberSourceFilter' => 'getArchivedSubscriberSourceFilter',
234
- 'getArchivedSubscriberSourceFilterResponse' => 'getArchivedSubscriberSourceFilterResponse',
235
- 'getXMLDeliveries' => 'getXMLDeliveries',
236
- 'getXMLDeliveriesResponse' => 'getXMLDeliveriesResponse',
237
- 'xmlDeliveryInfo' => 'xmlDeliveryInfo',
238
- 'sendCampaign' => 'sendCampaign',
239
- 'sendCampaignResponse' => 'sendCampaignResponse',
240
- 'findCampaignsSentBetween' => 'findCampaignsSentBetween',
241
- 'findCampaignsSentBetweenResponse' => 'findCampaignsSentBetweenResponse',
242
- 'countSubscribers' => 'countSubscribers',
243
- 'countSubscribersResponse' => 'countSubscribersResponse',
244
- 'sendImmediateMessageSdataCAlCA' => 'sendImmediateMessageSdataCAlCA',
245
- 'sendImmediateMessageSdataCAlCAResponse' => 'sendImmediateMessageSdataCAlCAResponse',
246
- 'getXMLDeliveryTransitions' => 'getXMLDeliveryTransitions',
247
- 'getXMLDeliveryTransitionsResponse' => 'getXMLDeliveryTransitionsResponse',
248
- 'xmlDeliveryTransitionInfo' => 'xmlDeliveryTransitionInfo',
249
- 'findCampaignsByNameOrSubject' => 'findCampaignsByNameOrSubject',
250
- 'findCampaignsByNameOrSubjectResponse' => 'findCampaignsByNameOrSubjectResponse',
251
- 'sendImmediateMessageSidCAlCA' => 'sendImmediateMessageSidCAlCA',
252
- 'sendImmediateMessageSidCAlCAResponse' => 'sendImmediateMessageSidCAlCAResponse',
253
- 'addCampaignNote' => 'addCampaignNote',
254
- 'addCampaignNoteResponse' => 'addCampaignNoteResponse',
255
- 'triggerDeliveryById' => 'triggerDeliveryById',
256
- 'triggerDeliveryByIdResponse' => 'triggerDeliveryByIdResponse',
257
- 'getRequestStatus' => 'getRequestStatus',
258
- 'getRequestStatusResponse' => 'getRequestStatusResponse',
259
- 'findCampaigns' => 'findCampaigns',
260
- 'findCampaignsResponse' => 'findCampaignsResponse',
261
- 'updateSubscriber' => 'updateSubscriber',
262
- 'updateSubscriberResponse' => 'updateSubscriberResponse',
263
- 'getCryptoKey' => 'getCryptoKey',
264
- 'getCryptoKeyResponse' => 'getCryptoKeyResponse',
265
- 'archiveSubscriberSourceFilter' => 'archiveSubscriberSourceFilter',
266
- 'archiveSubscriberSourceFilterResponse' => 'archiveSubscriberSourceFilterResponse',
267
- 'cloneAndSendCampaign' => 'cloneAndSendCampaign',
268
- 'cloneAndSendCampaignResponse' => 'cloneAndSendCampaignResponse',
269
- 'uploadMediaContent' => 'uploadMediaContent',
270
- 'uploadMediaContentResponse' => 'uploadMediaContentResponse',
271
- 'findMessageModels' => 'findMessageModels',
272
- 'findMessageModelsResponse' => 'findMessageModelsResponse',
273
- 'sendImmediateMessageSDataCDataCA' => 'sendImmediateMessageSDataCDataCA',
274
- 'sendImmediateMessageSDataCDataCAResponse' => 'sendImmediateMessageSDataCDataCAResponse',
275
- 'getCampaign' => 'getCampaign',
276
- 'getCampaignResponse' => 'getCampaignResponse',
277
- 'addSubscribers' => 'addSubscribers',
278
- 'addSubscribersResponse' => 'addSubscribersResponse',
279
- 'sendImmediateMessageSidCid' => 'sendImmediateMessageSidCid',
280
- 'sendImmediateMessageSidCidResponse' => 'sendImmediateMessageSidCidResponse',
281
- 'sendImmediateMessageSDataCIdCA' => 'sendImmediateMessageSDataCIdCA',
282
- 'sendImmediateMessageSDataCIdCAResponse' => 'sendImmediateMessageSDataCIdCAResponse',
283
- 'getSubscriberSourceFilter' => 'getSubscriberSourceFilter',
284
- 'getSubscriberSourceFilterResponse' => 'getSubscriberSourceFilterResponse',
285
- 'findArchivedFiltersBySubscriberSource' => 'findArchivedFiltersBySubscriberSource',
286
- 'findArchivedFiltersBySubscriberSourceResponse' => 'findArchivedFiltersBySubscriberSourceResponse',
287
- 'getMessageModelById' => 'getMessageModelById',
288
- 'getMessageModelByIdResponse' => 'getMessageModelByIdResponse',
289
- 'getAttachmentByCampaignId' => 'getAttachmentByCampaignId',
290
- 'getAttachmentByCampaignIdResponse' => 'getAttachmentByCampaignIdResponse',
291
- 'getSubscriber' => 'getSubscriber',
292
- 'getSubscriberResponse' => 'getSubscriberResponse',
293
- 'findPeriodicCampaigns' => 'findPeriodicCampaigns',
294
- 'findPeriodicCampaignsResponse' => 'findPeriodicCampaignsResponse',
295
- 'modifySubscriberSubscriptionStatus' => 'modifySubscriberSubscriptionStatus',
296
- 'modifySubscriberSubscriptionStatusResponse' => 'modifySubscriberSubscriptionStatusResponse',
297
- 'borrowToken' => 'borrowToken',
298
- 'borrowTokenResponse' => 'borrowTokenResponse',
299
- 'findNotesByCampaign' => 'findNotesByCampaign',
300
- 'findNotesByCampaignResponse' => 'findNotesByCampaignResponse',
301
- 'modifySubscriberSubscriptionStatusByMailqId' => 'modifySubscriberSubscriptionStatusByMailqId',
302
- 'modifySubscriberSubscriptionStatusByMailqIdResponse' => 'modifySubscriberSubscriptionStatusByMailqIdResponse',
303
- 'startSubscriberDataExchange' => 'startSubscriberDataExchange',
304
- 'startSubscriberDataExchangeResponse' => 'startSubscriberDataExchangeResponse',
305
- 'getCampaignDeliveryStatus' => 'getCampaignDeliveryStatus',
306
- 'getCampaignDeliveryStatusResponse' => 'getCampaignDeliveryStatusResponse',
307
- 'removeSubscriber' => 'removeSubscriber',
308
- 'removeSubscriberResponse' => 'removeSubscriberResponse',
309
- 'addAttachment' => 'addAttachment',
310
- 'addAttachmentResponse' => 'addAttachmentResponse',
311
- 'setCampaignRecurrency' => 'setCampaignRecurrency',
312
- 'setCampaignRecurrencyResponse' => 'setCampaignRecurrencyResponse',
313
- 'findFiltersBySubscriberSource' => 'findFiltersBySubscriberSource',
314
- 'findFiltersBySubscriberSourceResponse' => 'findFiltersBySubscriberSourceResponse',
315
- 'countSubscribersIncludedInFilter' => 'countSubscribersIncludedInFilter',
316
- 'countSubscribersIncludedInFilterResponse' => 'countSubscribersIncludedInFilterResponse',
317
- 'sendImmediateMessageSidCidCA' => 'sendImmediateMessageSidCidCA',
318
- 'sendImmediateMessageSidCidCAResponse' => 'sendImmediateMessageSidCidCAResponse',
319
- 'findSubscriberSources' => 'findSubscriberSources',
320
- 'findSubscriberSourcesResponse' => 'findSubscriberSourcesResponse',
321
- 'addSubscriberSource' => 'addSubscriberSource',
322
- 'addSubscriberSourceResponse' => 'addSubscriberSourceResponse',
323
- 'findMessageModelsBySubscriberSource' => 'findMessageModelsBySubscriberSource',
324
- 'findMessageModelsBySubscriberSourceResponse' => 'findMessageModelsBySubscriberSourceResponse',
325
- 'sendImmediateMessageSdataCAl' => 'sendImmediateMessageSdataCAl',
326
- 'sendImmediateMessageSdataCAlResponse' => 'sendImmediateMessageSdataCAlResponse',
327
- 'findCampaignsByModel' => 'findCampaignsByModel',
328
- 'findCampaignsByModelResponse' => 'findCampaignsByModelResponse',
329
- 'sendImmediateMessageSDataCData' => 'sendImmediateMessageSDataCData',
330
- 'sendImmediateMessageSDataCDataResponse' => 'sendImmediateMessageSDataCDataResponse',
331
- 'getSubscriberDataExchangeStatus' => 'getSubscriberDataExchangeStatus',
332
- 'getSubscriberDataExchangeStatusResponse' => 'getSubscriberDataExchangeStatusResponse',
333
- 'sendImmediateMessageSIdCDataCA' => 'sendImmediateMessageSIdCDataCA',
334
- 'sendImmediateMessageSIdCDataCAResponse' => 'sendImmediateMessageSIdCDataCAResponse',
335
- 'sendImmediateMessage' => 'sendImmediateMessage',
336
- 'sendImmediateMessageResponse' => 'sendImmediateMessageResponse',
337
- 'sendImmediateMessageSIdCData' => 'sendImmediateMessageSIdCData',
338
- 'sendImmediateMessageSIdCDataResponse' => 'sendImmediateMessageSIdCDataResponse',
339
- 'sendImmediateMessageSidCAl' => 'sendImmediateMessageSidCAl',
340
- 'sendImmediateMessageSidCAlResponse' => 'sendImmediateMessageSidCAlResponse',
341
- 'findCampaignsByStatus' => 'findCampaignsByStatus',
342
- 'findCampaignsByStatusResponse' => 'findCampaignsByStatusResponse',
343
- 'getSubscriberSource' => 'getSubscriberSource',
344
- 'getSubscriberSourceResponse' => 'getSubscriberSourceResponse',
345
- 'findSubscribers' => 'findSubscribers',
346
- 'findSubscribersResponse' => 'findSubscribersResponse',
347
- 'findTriggerableCampaigns' => 'findTriggerableCampaigns',
348
- 'findTriggerableCampaignsResponse' => 'findTriggerableCampaignsResponse',
349
- 'findCampaignsByNote' => 'findCampaignsByNote',
350
- 'findCampaignsByNoteResponse' => 'findCampaignsByNoteResponse',
351
- 'publishOnWeb' => 'publishOnWeb',
352
- 'publishOnWebResponse' => 'publishOnWebResponse',
353
- 'invalidateToken' => 'invalidateToken',
354
- 'invalidateTokenResponse' => 'invalidateTokenResponse',
355
- 'reuseSubscriberSourceFilter' => 'reuseSubscriberSourceFilter',
356
- 'reuseSubscriberSourceFilterResponse' => 'reuseSubscriberSourceFilterResponse',
357
- 'createCampaign' => 'createCampaign',
358
- 'createCampaignResponse' => 'createCampaignResponse',
359
- 'addSubscriber' => 'addSubscriber',
360
- 'addSubscriberResponse' => 'addSubscriberResponse',
361
- 'getTrackedLinks' => 'getTrackedLinks',
362
- 'getTrackedLinksResponse' => 'getTrackedLinksResponse',
363
- 'getCampaignFeedback' => 'getCampaignFeedback',
364
- 'getCampaignFeedbackResponse' => 'getCampaignFeedbackResponse',
365
- 'requestCampaignFeedbackReport' => 'requestCampaignFeedbackReport',
366
- 'requestCampaignFeedbackReportResponse' => 'requestCampaignFeedbackReportResponse',
367
- 'createMessageModel' => 'createMessageModel',
368
- 'createMessageModelResponse' => 'createMessageModelResponse',
369
- 'cancelCampaign' => 'cancelCampaign',
370
- 'cancelCampaignResponse' => 'cancelCampaignResponse',
371
- 'findSubscribersIncludedInFilter' => 'findSubscribersIncludedInFilter',
372
- 'findSubscribersIncludedInFilterResponse' => 'findSubscribersIncludedInFilterResponse');
373
-
374
- /**
375
- *
376
- * @param array $config A array of config values
377
- * @param string $wsdl The wsdl file to use
378
- * @access public
379
- */
380
- public function __construct(array $options = array('soap_version' => SOAP_1_2,'connection_timeout' => 30,'trace'=>true,'keep_alive' => true), $wsdl = 'https://soap.contactlab.it/soap/services?wsdl')
381
- {
382
- foreach(self::$classmap as $key => $value)
383
- {
384
- if(!isset($options['classmap'][$key]))
385
- {
386
- $options['classmap'][$key] = $value;
387
- }
388
- }
389
-
390
- if (isset($options['features']) == false)
391
- {
392
- $options['features'] = 2 | 30 | 1 | 1;
393
- }
394
-
395
- parent::__construct($wsdl, $options);
396
- }
397
-
398
- /**
399
- *
400
- * @param getAvailableCommunicationCategories $parameters
401
- * @access public
402
- */
403
- public function getAvailableCommunicationCategories(getAvailableCommunicationCategories $parameters)
404
- {
405
- return $this->__soapCall('getAvailableCommunicationCategories', array($parameters));
406
- }
407
-
408
- /**
409
- *
410
- * @param getCampaignDeliveryStatus $parameters
411
- * @access public
412
- */
413
- public function getCampaignDeliveryStatus(getCampaignDeliveryStatus $parameters)
414
- {
415
- return $this->__soapCall('getCampaignDeliveryStatus', array($parameters));
416
- }
417
-
418
- /**
419
- *
420
- * @param publishOnWeb $parameters
421
- * @access public
422
- */
423
- public function publishOnWeb(publishOnWeb $parameters)
424
- {
425
- return $this->__soapCall('publishOnWeb', array($parameters));
426
- }
427
-
428
- /**
429
- *
430
- * @param updateSubscriber $parameters
431
- * @access public
432
- */
433
- public function updateSubscriber(updateSubscriber $parameters)
434
- {
435
- return $this->__soapCall('updateSubscriber', array($parameters));
436
- }
437
-
438
- /**
439
- *
440
- * @param modifySubscriberSubscriptionStatus $parameters
441
- * @access public
442
- */
443
- public function modifySubscriberSubscriptionStatus(modifySubscriberSubscriptionStatus $parameters)
444
- {
445
- return $this->__soapCall('modifySubscriberSubscriptionStatus', array($parameters));
446
- }
447
-
448
- /**
449
- *
450
- * @param countSubscribers $parameters
451
- * @access public
452
- */
453
- public function countSubscribers(countSubscribers $parameters)
454
- {
455
- return $this->__soapCall('countSubscribers', array($parameters));
456
- }
457
-
458
- /**
459
- *
460
- * @param addCampaignNote $parameters
461
- * @access public
462
- */
463
- public function addCampaignNote(addCampaignNote $parameters)
464
- {
465
- return $this->__soapCall('addCampaignNote', array($parameters));
466
- }
467
-
468
- /**
469
- *
470
- * @param findNotesByCampaign $parameters
471
- * @access public
472
- */
473
- public function findNotesByCampaign(findNotesByCampaign $parameters)
474
- {
475
- return $this->__soapCall('findNotesByCampaign', array($parameters));
476
- }
477
-
478
- /**
479
- *
480
- * @param addAttachment $parameters
481
- * @access public
482
- */
483
- public function addAttachment(addAttachment $parameters)
484
- {
485
- return $this->__soapCall('addAttachment', array($parameters));
486
- }
487
-
488
- /**
489
- *
490
- * @param getCampaignFeedback $parameters
491
- * @access public
492
- */
493
- public function getCampaignFeedback(getCampaignFeedback $parameters)
494
- {
495
- return $this->__soapCall('getCampaignFeedback', array($parameters));
496
- }
497
-
498
- /**
499
- *
500
- * @param requestCampaignFeedbackReport $parameters
501
- * @access public
502
- */
503
- public function requestCampaignFeedbackReport(requestCampaignFeedbackReport $parameters)
504
- {
505
- return $this->__soapCall('requestCampaignFeedbackReport', array($parameters));
506
- }
507
-
508
- /**
509
- *
510
- * @param uploadMediaContent $parameters
511
- * @access public
512
- */
513
- public function uploadMediaContent(uploadMediaContent $parameters)
514
- {
515
- return $this->__soapCall('uploadMediaContent', array($parameters));
516
- }
517
-
518
- /**
519
- *
520
- * @param getCampaign $parameters
521
- * @access public
522
- */
523
- public function getCampaign(getCampaign $parameters)
524
- {
525
- return $this->__soapCall('getCampaign', array($parameters));
526
- }
527
-
528
- /**
529
- *
530
- * @param findCampaignsByNameOrSubject $parameters
531
- * @access public
532
- */
533
- public function findCampaignsByNameOrSubject(findCampaignsByNameOrSubject $parameters)
534
- {
535
- return $this->__soapCall('findCampaignsByNameOrSubject', array($parameters));
536
- }
537
-
538
- /**
539
- *
540
- * @param findCampaignsByStatus $parameters
541
- * @access public
542
- */
543
- public function findCampaignsByStatus(findCampaignsByStatus $parameters)
544
- {
545
- return $this->__soapCall('findCampaignsByStatus', array($parameters));
546
- }
547
-
548
- /**
549
- *
550
- * @param findCampaignsSentBetween $parameters
551
- * @access public
552
- */
553
- public function findCampaignsSentBetween(findCampaignsSentBetween $parameters)
554
- {
555
- return $this->__soapCall('findCampaignsSentBetween', array($parameters));
556
- }
557
-
558
- /**
559
- *
560
- * @param findCampaignsByNote $parameters
561
- * @access public
562
- */
563
- public function findCampaignsByNote(findCampaignsByNote $parameters)
564
- {
565
- return $this->__soapCall('findCampaignsByNote', array($parameters));
566
- }
567
-
568
- /**
569
- *
570
- * @param findCampaignsByModel $parameters
571
- * @access public
572
- */
573
- public function findCampaignsByModel(findCampaignsByModel $parameters)
574
- {
575
- return $this->__soapCall('findCampaignsByModel', array($parameters));
576
- }
577
-
578
- /**
579
- *
580
- * @param findTriggerableCampaigns $parameters
581
- * @access public
582
- */
583
- public function findTriggerableCampaigns(findTriggerableCampaigns $parameters)
584
- {
585
- return $this->__soapCall('findTriggerableCampaigns', array($parameters));
586
- }
587
-
588
- /**
589
- *
590
- * @param findPeriodicCampaigns $parameters
591
- * @access public
592
- */
593
- public function findPeriodicCampaigns(findPeriodicCampaigns $parameters)
594
- {
595
- return $this->__soapCall('findPeriodicCampaigns', array($parameters));
596
- }
597
-
598
- /**
599
- *
600
- * @param startSubscriberDataExchange $parameters
601
- * @access public
602
- */
603
- public function startSubscriberDataExchange(startSubscriberDataExchange $parameters)
604
- {
605
- return $this->__soapCall('startSubscriberDataExchange', array($parameters));
606
- }
607
-
608
- /**
609
- *
610
- * @param getSubscriberDataExchangeStatus $parameters
611
- * @access public
612
- */
613
- public function getSubscriberDataExchangeStatus(getSubscriberDataExchangeStatus $parameters)
614
- {
615
- return $this->__soapCall('getSubscriberDataExchangeStatus', array($parameters));
616
- }
617
-
618
- /**
619
- *
620
- * @param setCampaignRecurrency $parameters
621
- * @access public
622
- */
623
- public function setCampaignRecurrency(setCampaignRecurrency $parameters)
624
- {
625
- return $this->__soapCall('setCampaignRecurrency', array($parameters));
626
- }
627
-
628
- /**
629
- *
630
- * @param sendCampaign $parameters
631
- * @access public
632
- */
633
- public function sendCampaign(sendCampaign $parameters)
634
- {
635
- return $this->__soapCall('sendCampaign', array($parameters));
636
- }
637
-
638
- /**
639
- *
640
- * @param cloneAndSendCampaign $parameters
641
- * @access public
642
- */
643
- public function cloneAndSendCampaign(cloneAndSendCampaign $parameters)
644
- {
645
- return $this->__soapCall('cloneAndSendCampaign', array($parameters));
646
- }
647
-
648
- /**
649
- *
650
- * @param getRequestStatus $parameters
651
- * @access public
652
- */
653
- public function getRequestStatus(getRequestStatus $parameters)
654
- {
655
- return $this->__soapCall('getRequestStatus', array($parameters));
656
- }
657
-
658
- /**
659
- *
660
- * @param createCampaign $parameters
661
- * @access public
662
- */
663
- public function createCampaign(createCampaign $parameters)
664
- {
665
- return $this->__soapCall('createCampaign', array($parameters));
666
- }
667
-
668
- /**
669
- *
670
- * @param getXMLDeliveries $parameters
671
- * @access public
672
- */
673
- public function getXMLDeliveries(getXMLDeliveries $parameters)
674
- {
675
- return $this->__soapCall('getXMLDeliveries', array($parameters));
676
- }
677
-
678
- /**
679
- *
680
- * @param getXMLDeliveryTransitions $parameters
681
- * @access public
682
- */
683
- public function getXMLDeliveryTransitions(getXMLDeliveryTransitions $parameters)
684
- {
685
- return $this->__soapCall('getXMLDeliveryTransitions', array($parameters));
686
- }
687
-
688
- /**
689
- *
690
- * @param cancelCampaign $parameters
691
- * @access public
692
- */
693
- public function cancelCampaign(cancelCampaign $parameters)
694
- {
695
- return $this->__soapCall('cancelCampaign', array($parameters));
696
- }
697
-
698
- /**
699
- *
700
- * @param getMessageModelById $parameters
701
- * @access public
702
- */
703
- public function getMessageModelById(getMessageModelById $parameters)
704
- {
705
- return $this->__soapCall('getMessageModelById', array($parameters));
706
- }
707
-
708
- /**
709
- *
710
- * @param createMessageModel $parameters
711
- * @access public
712
- */
713
- public function createMessageModel(createMessageModel $parameters)
714
- {
715
- return $this->__soapCall('createMessageModel', array($parameters));
716
- }
717
-
718
- /**
719
- *
720
- * @param findMessageModels $parameters
721
- * @access public
722
- */
723
- public function findMessageModels(findMessageModels $parameters)
724
- {
725
- return $this->__soapCall('findMessageModels', array($parameters));
726
- }
727
-
728
- /**
729
- *
730
- * @param findMessageModelsBySubscriberSource $parameters
731
- * @access public
732
- */
733
- public function findMessageModelsBySubscriberSource(findMessageModelsBySubscriberSource $parameters)
734
- {
735
- return $this->__soapCall('findMessageModelsBySubscriberSource', array($parameters));
736
- }
737
-
738
- /**
739
- *
740
- * @param getSubscriberSourceFilter $parameters
741
- * @access public
742
- */
743
- public function getSubscriberSourceFilter(getSubscriberSourceFilter $parameters)
744
- {
745
- return $this->__soapCall('getSubscriberSourceFilter', array($parameters));
746
- }
747
-
748
- /**
749
- *
750
- * @param addSubscriberSourceFilter $parameters
751
- * @access public
752
- */
753
- public function addSubscriberSourceFilter(addSubscriberSourceFilter $parameters)
754
- {
755
- return $this->__soapCall('addSubscriberSourceFilter', array($parameters));
756
- }
757
-
758
- /**
759
- *
760
- * @param findFiltersBySubscriberSource $parameters
761
- * @access public
762
- */
763
- public function findFiltersBySubscriberSource(findFiltersBySubscriberSource $parameters)
764
- {
765
- return $this->__soapCall('findFiltersBySubscriberSource', array($parameters));
766
- }
767
-
768
- /**
769
- *
770
- * @param getSubscriberSource $parameters
771
- * @access public
772
- */
773
- public function getSubscriberSource(getSubscriberSource $parameters)
774
- {
775
- return $this->__soapCall('getSubscriberSource', array($parameters));
776
- }
777
-
778
- /**
779
- *
780
- * @param findSubscriberSources $parameters
781
- * @access public
782
- */
783
- public function findSubscriberSources(findSubscriberSources $parameters)
784
- {
785
- return $this->__soapCall('findSubscriberSources', array($parameters));
786
- }
787
-
788
- /**
789
- *
790
- * @param getSubscriber $parameters
791
- * @access public
792
- */
793
- public function getSubscriber(getSubscriber $parameters)
794
- {
795
- return $this->__soapCall('getSubscriber', array($parameters));
796
- }
797
-
798
- /**
799
- *
800
- * @param addSubscriber $parameters
801
- * @access public
802
- */
803
- public function addSubscriber(addSubscriber $parameters)
804
- {
805
- return $this->__soapCall('addSubscriber', array($parameters));
806
- }
807
-
808
- /**
809
- *
810
- * @param addSubscribers $parameters
811
- * @access public
812
- */
813
- public function addSubscribers(addSubscribers $parameters)
814
- {
815
- return $this->__soapCall('addSubscribers', array($parameters));
816
- }
817
-
818
- /**
819
- *
820
- * @param removeSubscriber $parameters
821
- * @access public
822
- */
823
- public function removeSubscriber(removeSubscriber $parameters)
824
- {
825
- return $this->__soapCall('removeSubscriber', array($parameters));
826
- }
827
-
828
- /**
829
- *
830
- * @param findSubscribersIncludedInFilter $parameters
831
- * @access public
832
- */
833
- public function findSubscribersIncludedInFilter(findSubscribersIncludedInFilter $parameters)
834
- {
835
- return $this->__soapCall('findSubscribersIncludedInFilter', array($parameters));
836
- }
837
-
838
- /**
839
- *
840
- * @param borrowToken $parameters
841
- * @access public
842
- */
843
- public function borrowToken(borrowToken $parameters)
844
- {
845
- return $this->__soapCall('borrowToken', array($parameters));
846
- }
847
-
848
- /**
849
- *
850
- * @param keepaliveToken $parameters
851
- * @access public
852
- */
853
- public function keepaliveToken(keepaliveToken $parameters)
854
- {
855
- return $this->__soapCall('keepaliveToken', array($parameters));
856
- }
857
-
858
- /**
859
- *
860
- * @param invalidateToken $parameters
861
- * @access public
862
- */
863
- public function invalidateToken(invalidateToken $parameters)
864
- {
865
- return $this->__soapCall('invalidateToken', array($parameters));
866
- }
867
-
868
- /**
869
- *
870
- * @param findCampaigns $parameters
871
- * @access public
872
- */
873
- public function findCampaigns(findCampaigns $parameters)
874
- {
875
- return $this->__soapCall('findCampaigns', array($parameters));
876
- }
877
-
878
- /**
879
- *
880
- * @param getAttachmentByCampaignId $parameters
881
- * @access public
882
- */
883
- public function getAttachmentByCampaignId(getAttachmentByCampaignId $parameters)
884
- {
885
- return $this->__soapCall('getAttachmentByCampaignId', array($parameters));
886
- }
887
-
888
- /**
889
- *
890
- * @param getTrackedLinks $parameters
891
- * @access public
892
- */
893
- public function getTrackedLinks(getTrackedLinks $parameters)
894
- {
895
- return $this->__soapCall('getTrackedLinks', array($parameters));
896
- }
897
-
898
- /**
899
- *
900
- * @param triggerDeliveryById $parameters
901
- * @access public
902
- */
903
- public function triggerDeliveryById(triggerDeliveryById $parameters)
904
- {
905
- return $this->__soapCall('triggerDeliveryById', array($parameters));
906
- }
907
-
908
- /**
909
- *
910
- * @param triggerDeliveryByAlias $parameters
911
- * @access public
912
- */
913
- public function triggerDeliveryByAlias(triggerDeliveryByAlias $parameters)
914
- {
915
- return $this->__soapCall('triggerDeliveryByAlias', array($parameters));
916
- }
917
-
918
- /**
919
- *
920
- * @param addSubscriberSource $parameters
921
- * @access public
922
- */
923
- public function addSubscriberSource(addSubscriberSource $parameters)
924
- {
925
- return $this->__soapCall('addSubscriberSource', array($parameters));
926
- }
927
-
928
- /**
929
- *
930
- * @param countSubscribersIncludedInFilter $parameters
931
- * @access public
932
- */
933
- public function countSubscribersIncludedInFilter(countSubscribersIncludedInFilter $parameters)
934
- {
935
- return $this->__soapCall('countSubscribersIncludedInFilter', array($parameters));
936
- }
937
-
938
- /**
939
- *
940
- * @param findSubscribers $parameters
941
- * @access public
942
- */
943
- public function findSubscribers(findSubscribers $parameters)
944
- {
945
- return $this->__soapCall('findSubscribers', array($parameters));
946
- }
947
-
948
- /**
949
- *
950
- * @param getCryptoKey $parameters
951
- * @access public
952
- */
953
- public function getCryptoKey(getCryptoKey $parameters)
954
- {
955
- return $this->__soapCall('getCryptoKey', array($parameters));
956
- }
957
-
958
- /**
959
- *
960
- * @param archiveSubscriberSourceFilter $parameters
961
- * @access public
962
- */
963
- public function archiveSubscriberSourceFilter(archiveSubscriberSourceFilter $parameters)
964
- {
965
- return $this->__soapCall('archiveSubscriberSourceFilter', array($parameters));
966
- }
967
-
968
- /**
969
- *
970
- * @param reuseSubscriberSourceFilter $parameters
971
- * @access public
972
- */
973
- public function reuseSubscriberSourceFilter(reuseSubscriberSourceFilter $parameters)
974
- {
975
- return $this->__soapCall('reuseSubscriberSourceFilter', array($parameters));
976
- }
977
-
978
- /**
979
- *
980
- * @param findArchivedFiltersBySubscriberSource $parameters
981
- * @access public
982
- */
983
- public function findArchivedFiltersBySubscriberSource(findArchivedFiltersBySubscriberSource $parameters)
984
- {
985
- return $this->__soapCall('findArchivedFiltersBySubscriberSource', array($parameters));
986
- }
987
-
988
- /**
989
- *
990
- * @param getArchivedSubscriberSourceFilter $parameters
991
- * @access public
992
- */
993
- public function getArchivedSubscriberSourceFilter(getArchivedSubscriberSourceFilter $parameters)
994
- {
995
- return $this->__soapCall('getArchivedSubscriberSourceFilter', array($parameters));
996
- }
997
-
998
- /**
999
- *
1000
- * @param modifySubscriberSubscriptionStatusByMailqId $parameters
1001
- * @access public
1002
- */
1003
- public function modifySubscriberSubscriptionStatusByMailqId(modifySubscriberSubscriptionStatusByMailqId $parameters)
1004
- {
1005
- return $this->__soapCall('modifySubscriberSubscriptionStatusByMailqId', array($parameters));
1006
- }
1007
-
1008
- /**
1009
- *
1010
- * @param sendImmediateMessage $parameters
1011
- * @access public
1012
- */
1013
- public function sendImmediateMessage(sendImmediateMessage $parameters)
1014
- {
1015
- return $this->__soapCall('sendImmediateMessage', array($parameters));
1016
- }
1017
-
1018
- /**
1019
- *
1020
- * @param sendImmediateMessageSidCid $parameters
1021
- * @access public
1022
- */
1023
- public function sendImmediateMessageSidCid(sendImmediateMessageSidCid $parameters)
1024
- {
1025
- return $this->__soapCall('sendImmediateMessageSidCid', array($parameters));
1026
- }
1027
-
1028
- /**
1029
- *
1030
- * @param sendImmediateMessageSDataCData $parameters
1031
- * @access public
1032
- */
1033
- public function sendImmediateMessageSDataCData(sendImmediateMessageSDataCData $parameters)
1034
- {
1035
- return $this->__soapCall('sendImmediateMessageSDataCData', array($parameters));
1036
- }
1037
-
1038
- /**
1039
- *
1040
- * @param sendImmediateMessageSIdCData $parameters
1041
- * @access public
1042
- */
1043
- public function sendImmediateMessageSIdCData(sendImmediateMessageSIdCData $parameters)
1044
- {
1045
- return $this->__soapCall('sendImmediateMessageSIdCData', array($parameters));
1046
- }
1047
-
1048
- /**
1049
- *
1050
- * @param sendImmediateMessageSdataCAl $parameters
1051
- * @access public
1052
- */
1053
- public function sendImmediateMessageSdataCAl(sendImmediateMessageSdataCAl $parameters)
1054
- {
1055
- return $this->__soapCall('sendImmediateMessageSdataCAl', array($parameters));
1056
- }
1057
-
1058
- /**
1059
- *
1060
- * @param sendImmediateMessageSidCAl $parameters
1061
- * @access public
1062
- */
1063
- public function sendImmediateMessageSidCAl(sendImmediateMessageSidCAl $parameters)
1064
- {
1065
- return $this->__soapCall('sendImmediateMessageSidCAl', array($parameters));
1066
- }
1067
-
1068
- /**
1069
- *
1070
- * @param sendImmediateMessageSDataCIdCA $parameters
1071
- * @access public
1072
- */
1073
- public function sendImmediateMessageSDataCIdCA(sendImmediateMessageSDataCIdCA $parameters)
1074
- {
1075
- return $this->__soapCall('sendImmediateMessageSDataCIdCA', array($parameters));
1076
- }
1077
-
1078
- /**
1079
- *
1080
- * @param sendImmediateMessageSidCidCA $parameters
1081
- * @access public
1082
- */
1083
- public function sendImmediateMessageSidCidCA(sendImmediateMessageSidCidCA $parameters)
1084
- {
1085
- return $this->__soapCall('sendImmediateMessageSidCidCA', array($parameters));
1086
- }
1087
-
1088
- /**
1089
- *
1090
- * @param sendImmediateMessageSDataCDataCA $parameters
1091
- * @access public
1092
- */
1093
- public function sendImmediateMessageSDataCDataCA(sendImmediateMessageSDataCDataCA $parameters)
1094
- {
1095
- return $this->__soapCall('sendImmediateMessageSDataCDataCA', array($parameters));
1096
- }
1097
-
1098
- /**
1099
- *
1100
- * @param sendImmediateMessageSIdCDataCA $parameters
1101
- * @access public
1102
- */
1103
- public function sendImmediateMessageSIdCDataCA(sendImmediateMessageSIdCDataCA $parameters)
1104
- {
1105
- return $this->__soapCall('sendImmediateMessageSIdCDataCA', array($parameters));
1106
- }
1107
-
1108
- /**
1109
- *
1110
- * @param sendImmediateMessageSdataCAlCA $parameters
1111
- * @access public
1112
- */
1113
- public function sendImmediateMessageSdataCAlCA(sendImmediateMessageSdataCAlCA $parameters)
1114
- {
1115
- return $this->__soapCall('sendImmediateMessageSdataCAlCA', array($parameters));
1116
- }
1117
-
1118
- /**
1119
- *
1120
- * @param sendImmediateMessageSidCAlCA $parameters
1121
- * @access public
1122
- */
1123
- public function sendImmediateMessageSidCAlCA(sendImmediateMessageSidCAlCA $parameters)
1124
- {
1125
- return $this->__soapCall('sendImmediateMessageSidCAlCA', array($parameters));
1126
- }
1127
-
1128
- }
1
+ <?php
2
+
3
+ include_once('AuthToken.php');
4
+ include_once('CommunicationCategory.php');
5
+ include_once('SubscriberSourceFilter.php');
6
+ include_once('LookupPreferences.php');
7
+ include_once('CampaignLookupPreferences.php');
8
+ include_once('XMLDeliveryInfos.php');
9
+ include_once('SlicedDataSet.php');
10
+ include_once('Campaigns.php');
11
+ include_once('Campaign.php');
12
+ include_once('Message.php');
13
+ include_once('Recipients.php');
14
+ include_once('Sender.php');
15
+ include_once('TextMessage.php');
16
+ include_once('EmailMessage.php');
17
+ include_once('FaxMessage.php');
18
+ include_once('SubscriberSources.php');
19
+ include_once('SubscriberSource.php');
20
+ include_once('SubscriberSourceField.php');
21
+ include_once('MessageModels.php');
22
+ include_once('SubscriberSourceFilters.php');
23
+ include_once('CampaignNotes.php');
24
+ include_once('CampaignNote.php');
25
+ include_once('TrackedLinks.php');
26
+ include_once('TrackedLink.php');
27
+ include_once('Subscribers.php');
28
+ include_once('Subscriber.php');
29
+ include_once('SubscriberAttribute.php');
30
+ include_once('Attachment.php');
31
+ include_once('CampaignFeedback.php');
32
+ include_once('BounceDetail.php');
33
+ include_once('keepaliveToken.php');
34
+ include_once('keepaliveTokenResponse.php');
35
+ include_once('triggerDeliveryByAlias.php');
36
+ include_once('triggerDeliveryByAliasResponse.php');
37
+ include_once('getAvailableCommunicationCategories.php');
38
+ include_once('getAvailableCommunicationCategoriesResponse.php');
39
+ include_once('addSubscriberSourceFilter.php');
40
+ include_once('addSubscriberSourceFilterResponse.php');
41
+ include_once('getArchivedSubscriberSourceFilter.php');
42
+ include_once('getArchivedSubscriberSourceFilterResponse.php');
43
+ include_once('getXMLDeliveries.php');
44
+ include_once('getXMLDeliveriesResponse.php');
45
+ include_once('xmlDeliveryInfo.php');
46
+ include_once('sendCampaign.php');
47
+ include_once('sendCampaignResponse.php');
48
+ include_once('findCampaignsSentBetween.php');
49
+ include_once('findCampaignsSentBetweenResponse.php');
50
+ include_once('countSubscribers.php');
51
+ include_once('countSubscribersResponse.php');
52
+ include_once('sendImmediateMessageSdataCAlCA.php');
53
+ include_once('sendImmediateMessageSdataCAlCAResponse.php');
54
+ include_once('getXMLDeliveryTransitions.php');
55
+ include_once('getXMLDeliveryTransitionsResponse.php');
56
+ include_once('xmlDeliveryTransitionInfo.php');
57
+ include_once('findCampaignsByNameOrSubject.php');
58
+ include_once('findCampaignsByNameOrSubjectResponse.php');
59
+ include_once('sendImmediateMessageSidCAlCA.php');
60
+ include_once('sendImmediateMessageSidCAlCAResponse.php');
61
+ include_once('addCampaignNote.php');
62
+ include_once('addCampaignNoteResponse.php');
63
+ include_once('triggerDeliveryById.php');
64
+ include_once('triggerDeliveryByIdResponse.php');
65
+ include_once('getRequestStatus.php');
66
+ include_once('getRequestStatusResponse.php');
67
+ include_once('findCampaigns.php');
68
+ include_once('findCampaignsResponse.php');
69
+ include_once('updateSubscriber.php');
70
+ include_once('updateSubscriberResponse.php');
71
+ include_once('getCryptoKey.php');
72
+ include_once('getCryptoKeyResponse.php');
73
+ include_once('archiveSubscriberSourceFilter.php');
74
+ include_once('archiveSubscriberSourceFilterResponse.php');
75
+ include_once('cloneAndSendCampaign.php');
76
+ include_once('cloneAndSendCampaignResponse.php');
77
+ include_once('uploadMediaContent.php');
78
+ include_once('uploadMediaContentResponse.php');
79
+ include_once('findMessageModels.php');
80
+ include_once('findMessageModelsResponse.php');
81
+ include_once('sendImmediateMessageSDataCDataCA.php');
82
+ include_once('sendImmediateMessageSDataCDataCAResponse.php');
83
+ include_once('getCampaign.php');
84
+ include_once('getCampaignResponse.php');
85
+ include_once('addSubscribers.php');
86
+ include_once('addSubscribersResponse.php');
87
+ include_once('sendImmediateMessageSidCid.php');
88
+ include_once('sendImmediateMessageSidCidResponse.php');
89
+ include_once('sendImmediateMessageSDataCIdCA.php');
90
+ include_once('sendImmediateMessageSDataCIdCAResponse.php');
91
+ include_once('getSubscriberSourceFilter.php');
92
+ include_once('getSubscriberSourceFilterResponse.php');
93
+ include_once('findArchivedFiltersBySubscriberSource.php');
94
+ include_once('findArchivedFiltersBySubscriberSourceResponse.php');
95
+ include_once('getMessageModelById.php');
96
+ include_once('getMessageModelByIdResponse.php');
97
+ include_once('getAttachmentByCampaignId.php');
98
+ include_once('getAttachmentByCampaignIdResponse.php');
99
+ include_once('getSubscriber.php');
100
+ include_once('getSubscriberResponse.php');
101
+ include_once('findPeriodicCampaigns.php');
102
+ include_once('findPeriodicCampaignsResponse.php');
103
+ include_once('modifySubscriberSubscriptionStatus.php');
104
+ include_once('modifySubscriberSubscriptionStatusResponse.php');
105
+ include_once('borrowToken.php');
106
+ include_once('borrowTokenResponse.php');
107
+ include_once('findNotesByCampaign.php');
108
+ include_once('findNotesByCampaignResponse.php');
109
+ include_once('modifySubscriberSubscriptionStatusByMailqId.php');
110
+ include_once('modifySubscriberSubscriptionStatusByMailqIdResponse.php');
111
+ include_once('startSubscriberDataExchange.php');
112
+ include_once('startSubscriberDataExchangeResponse.php');
113
+ include_once('getCampaignDeliveryStatus.php');
114
+ include_once('getCampaignDeliveryStatusResponse.php');
115
+ include_once('removeSubscriber.php');
116
+ include_once('removeSubscriberResponse.php');
117
+ include_once('addAttachment.php');
118
+ include_once('addAttachmentResponse.php');
119
+ include_once('setCampaignRecurrency.php');
120
+ include_once('setCampaignRecurrencyResponse.php');
121
+ include_once('findFiltersBySubscriberSource.php');
122
+ include_once('findFiltersBySubscriberSourceResponse.php');
123
+ include_once('countSubscribersIncludedInFilter.php');
124
+ include_once('countSubscribersIncludedInFilterResponse.php');
125
+ include_once('sendImmediateMessageSidCidCA.php');
126
+ include_once('sendImmediateMessageSidCidCAResponse.php');
127
+ include_once('findSubscriberSources.php');
128
+ include_once('findSubscriberSourcesResponse.php');
129
+ include_once('addSubscriberSource.php');
130
+ include_once('addSubscriberSourceResponse.php');
131
+ include_once('findMessageModelsBySubscriberSource.php');
132
+ include_once('findMessageModelsBySubscriberSourceResponse.php');
133
+ include_once('sendImmediateMessageSdataCAl.php');
134
+ include_once('sendImmediateMessageSdataCAlResponse.php');
135
+ include_once('findCampaignsByModel.php');
136
+ include_once('findCampaignsByModelResponse.php');
137
+ include_once('sendImmediateMessageSDataCData.php');
138
+ include_once('sendImmediateMessageSDataCDataResponse.php');
139
+ include_once('getSubscriberDataExchangeStatus.php');
140
+ include_once('getSubscriberDataExchangeStatusResponse.php');
141
+ include_once('sendImmediateMessageSIdCDataCA.php');
142
+ include_once('sendImmediateMessageSIdCDataCAResponse.php');
143
+ include_once('sendImmediateMessage.php');
144
+ include_once('sendImmediateMessageResponse.php');
145
+ include_once('sendImmediateMessageSIdCData.php');
146
+ include_once('sendImmediateMessageSIdCDataResponse.php');
147
+ include_once('sendImmediateMessageSidCAl.php');
148
+ include_once('sendImmediateMessageSidCAlResponse.php');
149
+ include_once('findCampaignsByStatus.php');
150
+ include_once('findCampaignsByStatusResponse.php');
151
+ include_once('getSubscriberSource.php');
152
+ include_once('getSubscriberSourceResponse.php');
153
+ include_once('findSubscribers.php');
154
+ include_once('findSubscribersResponse.php');
155
+ include_once('findTriggerableCampaigns.php');
156
+ include_once('findTriggerableCampaignsResponse.php');
157
+ include_once('findCampaignsByNote.php');
158
+ include_once('findCampaignsByNoteResponse.php');
159
+ include_once('publishOnWeb.php');
160
+ include_once('publishOnWebResponse.php');
161
+ include_once('invalidateToken.php');
162
+ include_once('invalidateTokenResponse.php');
163
+ include_once('reuseSubscriberSourceFilter.php');
164
+ include_once('reuseSubscriberSourceFilterResponse.php');
165
+ include_once('createCampaign.php');
166
+ include_once('createCampaignResponse.php');
167
+ include_once('addSubscriber.php');
168
+ include_once('addSubscriberResponse.php');
169
+ include_once('getTrackedLinks.php');
170
+ include_once('getTrackedLinksResponse.php');
171
+ include_once('getCampaignFeedback.php');
172
+ include_once('getCampaignFeedbackResponse.php');
173
+ include_once('requestCampaignFeedbackReport.php');
174
+ include_once('requestCampaignFeedbackReportResponse.php');
175
+ include_once('createMessageModel.php');
176
+ include_once('createMessageModelResponse.php');
177
+ include_once('cancelCampaign.php');
178
+ include_once('cancelCampaignResponse.php');
179
+ include_once('findSubscribersIncludedInFilter.php');
180
+ include_once('findSubscribersIncludedInFilterResponse.php');
181
+
182
+
183
+ /**
184
+ *
185
+ */
186
+ class ClabService extends SoapClient
187
+ {
188
+
189
+ /**
190
+ *
191
+ * @var array $classmap The defined classes
192
+ * @access private
193
+ */
194
+ private static $classmap = array(
195
+ 'AuthToken' => 'AuthToken',
196
+ 'CommunicationCategory' => 'CommunicationCategory',
197
+ 'SubscriberSourceFilter' => 'SubscriberSourceFilter',
198
+ 'LookupPreferences' => 'LookupPreferences',
199
+ 'CampaignLookupPreferences' => 'CampaignLookupPreferences',
200
+ 'XMLDeliveryInfos' => 'XMLDeliveryInfos',
201
+ 'SlicedDataSet' => 'SlicedDataSet',
202
+ 'Campaigns' => 'Campaigns',
203
+ 'Campaign' => 'Campaign',
204
+ 'Message' => 'Message',
205
+ 'Recipients' => 'Recipients',
206
+ 'Sender' => 'Sender',
207
+ 'TextMessage' => 'TextMessage',
208
+ 'EmailMessage' => 'EmailMessage',
209
+ 'FaxMessage' => 'FaxMessage',
210
+ 'SubscriberSources' => 'SubscriberSources',
211
+ 'SubscriberSource' => 'SubscriberSource',
212
+ 'SubscriberSourceField' => 'SubscriberSourceField',
213
+ 'MessageModels' => 'MessageModels',
214
+ 'SubscriberSourceFilters' => 'SubscriberSourceFilters',
215
+ 'CampaignNotes' => 'CampaignNotes',
216
+ 'CampaignNote' => 'CampaignNote',
217
+ 'TrackedLinks' => 'TrackedLinks',
218
+ 'TrackedLink' => 'TrackedLink',
219
+ 'Subscribers' => 'Subscribers',
220
+ 'Subscriber' => 'Subscriber',
221
+ 'SubscriberAttribute' => 'SubscriberAttribute',
222
+ 'Attachment' => 'Attachment',
223
+ 'CampaignFeedback' => 'CampaignFeedback',
224
+ 'BounceDetail' => 'BounceDetail',
225
+ 'keepaliveToken' => 'keepaliveToken',
226
+ 'keepaliveTokenResponse' => 'keepaliveTokenResponse',
227
+ 'triggerDeliveryByAlias' => 'triggerDeliveryByAlias',
228
+ 'triggerDeliveryByAliasResponse' => 'triggerDeliveryByAliasResponse',
229
+ 'getAvailableCommunicationCategories' => 'getAvailableCommunicationCategories',
230
+ 'getAvailableCommunicationCategoriesResponse' => 'getAvailableCommunicationCategoriesResponse',
231
+ 'addSubscriberSourceFilter' => 'addSubscriberSourceFilter',
232
+ 'addSubscriberSourceFilterResponse' => 'addSubscriberSourceFilterResponse',
233
+ 'getArchivedSubscriberSourceFilter' => 'getArchivedSubscriberSourceFilter',
234
+ 'getArchivedSubscriberSourceFilterResponse' => 'getArchivedSubscriberSourceFilterResponse',
235
+ 'getXMLDeliveries' => 'getXMLDeliveries',
236
+ 'getXMLDeliveriesResponse' => 'getXMLDeliveriesResponse',
237
+ 'xmlDeliveryInfo' => 'xmlDeliveryInfo',
238
+ 'sendCampaign' => 'sendCampaign',
239
+ 'sendCampaignResponse' => 'sendCampaignResponse',
240
+ 'findCampaignsSentBetween' => 'findCampaignsSentBetween',
241
+ 'findCampaignsSentBetweenResponse' => 'findCampaignsSentBetweenResponse',
242
+ 'countSubscribers' => 'countSubscribers',
243
+ 'countSubscribersResponse' => 'countSubscribersResponse',
244
+ 'sendImmediateMessageSdataCAlCA' => 'sendImmediateMessageSdataCAlCA',
245
+ 'sendImmediateMessageSdataCAlCAResponse' => 'sendImmediateMessageSdataCAlCAResponse',
246
+ 'getXMLDeliveryTransitions' => 'getXMLDeliveryTransitions',
247
+ 'getXMLDeliveryTransitionsResponse' => 'getXMLDeliveryTransitionsResponse',
248
+ 'xmlDeliveryTransitionInfo' => 'xmlDeliveryTransitionInfo',
249
+ 'findCampaignsByNameOrSubject' => 'findCampaignsByNameOrSubject',
250
+ 'findCampaignsByNameOrSubjectResponse' => 'findCampaignsByNameOrSubjectResponse',
251
+ 'sendImmediateMessageSidCAlCA' => 'sendImmediateMessageSidCAlCA',
252
+ 'sendImmediateMessageSidCAlCAResponse' => 'sendImmediateMessageSidCAlCAResponse',
253
+ 'addCampaignNote' => 'addCampaignNote',
254
+ 'addCampaignNoteResponse' => 'addCampaignNoteResponse',
255
+ 'triggerDeliveryById' => 'triggerDeliveryById',
256
+ 'triggerDeliveryByIdResponse' => 'triggerDeliveryByIdResponse',
257
+ 'getRequestStatus' => 'getRequestStatus',
258
+ 'getRequestStatusResponse' => 'getRequestStatusResponse',
259
+ 'findCampaigns' => 'findCampaigns',
260
+ 'findCampaignsResponse' => 'findCampaignsResponse',
261
+ 'updateSubscriber' => 'updateSubscriber',
262
+ 'updateSubscriberResponse' => 'updateSubscriberResponse',
263
+ 'getCryptoKey' => 'getCryptoKey',
264
+ 'getCryptoKeyResponse' => 'getCryptoKeyResponse',
265
+ 'archiveSubscriberSourceFilter' => 'archiveSubscriberSourceFilter',
266
+ 'archiveSubscriberSourceFilterResponse' => 'archiveSubscriberSourceFilterResponse',
267
+ 'cloneAndSendCampaign' => 'cloneAndSendCampaign',
268
+ 'cloneAndSendCampaignResponse' => 'cloneAndSendCampaignResponse',
269
+ 'uploadMediaContent' => 'uploadMediaContent',
270
+ 'uploadMediaContentResponse' => 'uploadMediaContentResponse',
271
+ 'findMessageModels' => 'findMessageModels',
272
+ 'findMessageModelsResponse' => 'findMessageModelsResponse',
273
+ 'sendImmediateMessageSDataCDataCA' => 'sendImmediateMessageSDataCDataCA',
274
+ 'sendImmediateMessageSDataCDataCAResponse' => 'sendImmediateMessageSDataCDataCAResponse',
275
+ 'getCampaign' => 'getCampaign',
276
+ 'getCampaignResponse' => 'getCampaignResponse',
277
+ 'addSubscribers' => 'addSubscribers',
278
+ 'addSubscribersResponse' => 'addSubscribersResponse',
279
+ 'sendImmediateMessageSidCid' => 'sendImmediateMessageSidCid',
280
+ 'sendImmediateMessageSidCidResponse' => 'sendImmediateMessageSidCidResponse',
281
+ 'sendImmediateMessageSDataCIdCA' => 'sendImmediateMessageSDataCIdCA',
282
+ 'sendImmediateMessageSDataCIdCAResponse' => 'sendImmediateMessageSDataCIdCAResponse',
283
+ 'getSubscriberSourceFilter' => 'getSubscriberSourceFilter',
284
+ 'getSubscriberSourceFilterResponse' => 'getSubscriberSourceFilterResponse',
285
+ 'findArchivedFiltersBySubscriberSource' => 'findArchivedFiltersBySubscriberSource',
286
+ 'findArchivedFiltersBySubscriberSourceResponse' => 'findArchivedFiltersBySubscriberSourceResponse',
287
+ 'getMessageModelById' => 'getMessageModelById',
288
+ 'getMessageModelByIdResponse' => 'getMessageModelByIdResponse',
289
+ 'getAttachmentByCampaignId' => 'getAttachmentByCampaignId',
290
+ 'getAttachmentByCampaignIdResponse' => 'getAttachmentByCampaignIdResponse',
291
+ 'getSubscriber' => 'getSubscriber',
292
+ 'getSubscriberResponse' => 'getSubscriberResponse',
293
+ 'findPeriodicCampaigns' => 'findPeriodicCampaigns',
294
+ 'findPeriodicCampaignsResponse' => 'findPeriodicCampaignsResponse',
295
+ 'modifySubscriberSubscriptionStatus' => 'modifySubscriberSubscriptionStatus',
296
+ 'modifySubscriberSubscriptionStatusResponse' => 'modifySubscriberSubscriptionStatusResponse',
297
+ 'borrowToken' => 'borrowToken',
298
+ 'borrowTokenResponse' => 'borrowTokenResponse',
299
+ 'findNotesByCampaign' => 'findNotesByCampaign',
300
+ 'findNotesByCampaignResponse' => 'findNotesByCampaignResponse',
301
+ 'modifySubscriberSubscriptionStatusByMailqId' => 'modifySubscriberSubscriptionStatusByMailqId',
302
+ 'modifySubscriberSubscriptionStatusByMailqIdResponse' => 'modifySubscriberSubscriptionStatusByMailqIdResponse',
303
+ 'startSubscriberDataExchange' => 'startSubscriberDataExchange',
304
+ 'startSubscriberDataExchangeResponse' => 'startSubscriberDataExchangeResponse',
305
+ 'getCampaignDeliveryStatus' => 'getCampaignDeliveryStatus',
306
+ 'getCampaignDeliveryStatusResponse' => 'getCampaignDeliveryStatusResponse',
307
+ 'removeSubscriber' => 'removeSubscriber',
308
+ 'removeSubscriberResponse' => 'removeSubscriberResponse',
309
+ 'addAttachment' => 'addAttachment',
310
+ 'addAttachmentResponse' => 'addAttachmentResponse',
311
+ 'setCampaignRecurrency' => 'setCampaignRecurrency',
312
+ 'setCampaignRecurrencyResponse' => 'setCampaignRecurrencyResponse',
313
+ 'findFiltersBySubscriberSource' => 'findFiltersBySubscriberSource',
314
+ 'findFiltersBySubscriberSourceResponse' => 'findFiltersBySubscriberSourceResponse',
315
+ 'countSubscribersIncludedInFilter' => 'countSubscribersIncludedInFilter',
316
+ 'countSubscribersIncludedInFilterResponse' => 'countSubscribersIncludedInFilterResponse',
317
+ 'sendImmediateMessageSidCidCA' => 'sendImmediateMessageSidCidCA',
318
+ 'sendImmediateMessageSidCidCAResponse' => 'sendImmediateMessageSidCidCAResponse',
319
+ 'findSubscriberSources' => 'findSubscriberSources',
320
+ 'findSubscriberSourcesResponse' => 'findSubscriberSourcesResponse',
321
+ 'addSubscriberSource' => 'addSubscriberSource',
322
+ 'addSubscriberSourceResponse' => 'addSubscriberSourceResponse',
323
+ 'findMessageModelsBySubscriberSource' => 'findMessageModelsBySubscriberSource',
324
+ 'findMessageModelsBySubscriberSourceResponse' => 'findMessageModelsBySubscriberSourceResponse',
325
+ 'sendImmediateMessageSdataCAl' => 'sendImmediateMessageSdataCAl',
326
+ 'sendImmediateMessageSdataCAlResponse' => 'sendImmediateMessageSdataCAlResponse',
327
+ 'findCampaignsByModel' => 'findCampaignsByModel',
328
+ 'findCampaignsByModelResponse' => 'findCampaignsByModelResponse',
329
+ 'sendImmediateMessageSDataCData' => 'sendImmediateMessageSDataCData',
330
+ 'sendImmediateMessageSDataCDataResponse' => 'sendImmediateMessageSDataCDataResponse',
331
+ 'getSubscriberDataExchangeStatus' => 'getSubscriberDataExchangeStatus',
332
+ 'getSubscriberDataExchangeStatusResponse' => 'getSubscriberDataExchangeStatusResponse',
333
+ 'sendImmediateMessageSIdCDataCA' => 'sendImmediateMessageSIdCDataCA',
334
+ 'sendImmediateMessageSIdCDataCAResponse' => 'sendImmediateMessageSIdCDataCAResponse',
335
+ 'sendImmediateMessage' => 'sendImmediateMessage',
336
+ 'sendImmediateMessageResponse' => 'sendImmediateMessageResponse',
337
+ 'sendImmediateMessageSIdCData' => 'sendImmediateMessageSIdCData',
338
+ 'sendImmediateMessageSIdCDataResponse' => 'sendImmediateMessageSIdCDataResponse',
339
+ 'sendImmediateMessageSidCAl' => 'sendImmediateMessageSidCAl',
340
+ 'sendImmediateMessageSidCAlResponse' => 'sendImmediateMessageSidCAlResponse',
341
+ 'findCampaignsByStatus' => 'findCampaignsByStatus',
342
+ 'findCampaignsByStatusResponse' => 'findCampaignsByStatusResponse',
343
+ 'getSubscriberSource' => 'getSubscriberSource',
344
+ 'getSubscriberSourceResponse' => 'getSubscriberSourceResponse',
345
+ 'findSubscribers' => 'findSubscribers',
346
+ 'findSubscribersResponse' => 'findSubscribersResponse',
347
+ 'findTriggerableCampaigns' => 'findTriggerableCampaigns',
348
+ 'findTriggerableCampaignsResponse' => 'findTriggerableCampaignsResponse',
349
+ 'findCampaignsByNote' => 'findCampaignsByNote',
350
+ 'findCampaignsByNoteResponse' => 'findCampaignsByNoteResponse',
351
+ 'publishOnWeb' => 'publishOnWeb',
352
+ 'publishOnWebResponse' => 'publishOnWebResponse',
353
+ 'invalidateToken' => 'invalidateToken',
354
+ 'invalidateTokenResponse' => 'invalidateTokenResponse',
355
+ 'reuseSubscriberSourceFilter' => 'reuseSubscriberSourceFilter',
356
+ 'reuseSubscriberSourceFilterResponse' => 'reuseSubscriberSourceFilterResponse',
357
+ 'createCampaign' => 'createCampaign',
358
+ 'createCampaignResponse' => 'createCampaignResponse',
359
+ 'addSubscriber' => 'addSubscriber',
360
+ 'addSubscriberResponse' => 'addSubscriberResponse',
361
+ 'getTrackedLinks' => 'getTrackedLinks',
362
+ 'getTrackedLinksResponse' => 'getTrackedLinksResponse',
363
+ 'getCampaignFeedback' => 'getCampaignFeedback',
364
+ 'getCampaignFeedbackResponse' => 'getCampaignFeedbackResponse',
365
+ 'requestCampaignFeedbackReport' => 'requestCampaignFeedbackReport',
366
+ 'requestCampaignFeedbackReportResponse' => 'requestCampaignFeedbackReportResponse',
367
+ 'createMessageModel' => 'createMessageModel',
368
+ 'createMessageModelResponse' => 'createMessageModelResponse',
369
+ 'cancelCampaign' => 'cancelCampaign',
370
+ 'cancelCampaignResponse' => 'cancelCampaignResponse',
371
+ 'findSubscribersIncludedInFilter' => 'findSubscribersIncludedInFilter',
372
+ 'findSubscribersIncludedInFilterResponse' => 'findSubscribersIncludedInFilterResponse');
373
+
374
+ /**
375
+ *
376
+ * @param array $config A array of config values
377
+ * @param string $wsdl The wsdl file to use
378
+ * @access public
379
+ */
380
+ public function __construct(array $options = array('soap_version' => SOAP_1_2,'connection_timeout' => 30,'trace'=>true,'keep_alive' => true), $wsdl = 'https://soap.contactlab.it/soap/services?wsdl')
381
+ {
382
+ foreach(self::$classmap as $key => $value)
383
+ {
384
+ if(!isset($options['classmap'][$key]))
385
+ {
386
+ $options['classmap'][$key] = $value;
387
+ }
388
+ }
389
+
390
+ if (isset($options['features']) == false)
391
+ {
392
+ $options['features'] = 2 | 30 | 1 | 1;
393
+ }
394
+
395
+ parent::__construct($wsdl, $options);
396
+ }
397
+
398
+ /**
399
+ *
400
+ * @param getAvailableCommunicationCategories $parameters
401
+ * @access public
402
+ */
403
+ public function getAvailableCommunicationCategories(getAvailableCommunicationCategories $parameters)
404
+ {
405
+ return $this->__soapCall('getAvailableCommunicationCategories', array($parameters));
406
+ }
407
+
408
+ /**
409
+ *
410
+ * @param getCampaignDeliveryStatus $parameters
411
+ * @access public
412
+ */
413
+ public function getCampaignDeliveryStatus(getCampaignDeliveryStatus $parameters)
414
+ {
415
+ return $this->__soapCall('getCampaignDeliveryStatus', array($parameters));
416
+ }
417
+
418
+ /**
419
+ *
420
+ * @param publishOnWeb $parameters
421
+ * @access public
422
+ */
423
+ public function publishOnWeb(publishOnWeb $parameters)
424
+ {
425
+ return $this->__soapCall('publishOnWeb', array($parameters));
426
+ }
427
+
428
+ /**
429
+ *
430
+ * @param updateSubscriber $parameters
431
+ * @access public
432
+ */
433
+ public function updateSubscriber(updateSubscriber $parameters)
434
+ {
435
+ return $this->__soapCall('updateSubscriber', array($parameters));
436
+ }
437
+
438
+ /**
439
+ *
440
+ * @param modifySubscriberSubscriptionStatus $parameters
441
+ * @access public
442
+ */
443
+ public function modifySubscriberSubscriptionStatus(modifySubscriberSubscriptionStatus $parameters)
444
+ {
445
+ return $this->__soapCall('modifySubscriberSubscriptionStatus', array($parameters));
446
+ }
447
+
448
+ /**
449
+ *
450
+ * @param countSubscribers $parameters
451
+ * @access public
452
+ */
453
+ public function countSubscribers(countSubscribers $parameters)
454
+ {
455
+ return $this->__soapCall('countSubscribers', array($parameters));
456
+ }
457
+
458
+ /**
459
+ *
460
+ * @param addCampaignNote $parameters
461
+ * @access public
462
+ */
463
+ public function addCampaignNote(addCampaignNote $parameters)
464
+ {
465
+ return $this->__soapCall('addCampaignNote', array($parameters));
466
+ }
467
+
468
+ /**
469
+ *
470
+ * @param findNotesByCampaign $parameters
471
+ * @access public
472
+ */
473
+ public function findNotesByCampaign(findNotesByCampaign $parameters)
474
+ {
475
+ return $this->__soapCall('findNotesByCampaign', array($parameters));
476
+ }
477
+
478
+ /**
479
+ *
480
+ * @param addAttachment $parameters
481
+ * @access public
482
+ */
483
+ public function addAttachment(addAttachment $parameters)
484
+ {
485
+ return $this->__soapCall('addAttachment', array($parameters));
486
+ }
487
+
488
+ /**
489
+ *
490
+ * @param getCampaignFeedback $parameters
491
+ * @access public
492
+ */
493
+ public function getCampaignFeedback(getCampaignFeedback $parameters)
494
+ {
495
+ return $this->__soapCall('getCampaignFeedback', array($parameters));
496
+ }
497
+
498
+ /**
499
+ *
500
+ * @param requestCampaignFeedbackReport $parameters
501
+ * @access public
502
+ */
503
+ public function requestCampaignFeedbackReport(requestCampaignFeedbackReport $parameters)
504
+ {
505
+ return $this->__soapCall('requestCampaignFeedbackReport', array($parameters));
506
+ }
507
+
508
+ /**
509
+ *
510
+ * @param uploadMediaContent $parameters
511
+ * @access public
512
+ */
513
+ public function uploadMediaContent(uploadMediaContent $parameters)
514
+ {
515
+ return $this->__soapCall('uploadMediaContent', array($parameters));
516
+ }
517
+
518
+ /**
519
+ *
520
+ * @param getCampaign $parameters
521
+ * @access public
522
+ */
523
+ public function getCampaign(getCampaign $parameters)
524
+ {
525
+ return $this->__soapCall('getCampaign', array($parameters));
526
+ }
527
+
528
+ /**
529
+ *
530
+ * @param findCampaignsByNameOrSubject $parameters
531
+ * @access public
532
+ */
533
+ public function findCampaignsByNameOrSubject(findCampaignsByNameOrSubject $parameters)
534
+ {
535
+ return $this->__soapCall('findCampaignsByNameOrSubject', array($parameters));
536
+ }
537
+
538
+ /**
539
+ *
540
+ * @param findCampaignsByStatus $parameters
541
+ * @access public
542
+ */
543
+ public function findCampaignsByStatus(findCampaignsByStatus $parameters)
544
+ {
545
+ return $this->__soapCall('findCampaignsByStatus', array($parameters));
546
+ }
547
+
548
+ /**
549
+ *
550
+ * @param findCampaignsSentBetween $parameters
551
+ * @access public
552
+ */
553
+ public function findCampaignsSentBetween(findCampaignsSentBetween $parameters)
554
+ {
555
+ return $this->__soapCall('findCampaignsSentBetween', array($parameters));
556
+ }
557
+
558
+ /**
559
+ *
560
+ * @param findCampaignsByNote $parameters
561
+ * @access public
562
+ */
563
+ public function findCampaignsByNote(findCampaignsByNote $parameters)
564
+ {
565
+ return $this->__soapCall('findCampaignsByNote', array($parameters));
566
+ }
567
+
568
+ /**
569
+ *
570
+ * @param findCampaignsByModel $parameters
571
+ * @access public
572
+ */
573
+ public function findCampaignsByModel(findCampaignsByModel $parameters)
574
+ {
575
+ return $this->__soapCall('findCampaignsByModel', array($parameters));
576
+ }
577
+
578
+ /**
579
+ *
580
+ * @param findTriggerableCampaigns $parameters
581
+ * @access public
582
+ */
583
+ public function findTriggerableCampaigns(findTriggerableCampaigns $parameters)
584
+ {
585
+ return $this->__soapCall('findTriggerableCampaigns', array($parameters));
586
+ }
587
+
588
+ /**
589
+ *
590
+ * @param findPeriodicCampaigns $parameters
591
+ * @access public
592
+ */
593
+ public function findPeriodicCampaigns(findPeriodicCampaigns $parameters)
594
+ {
595
+ return $this->__soapCall('findPeriodicCampaigns', array($parameters));
596
+ }
597
+
598
+ /**
599
+ *
600
+ * @param startSubscriberDataExchange $parameters
601
+ * @access public
602
+ */
603
+ public function startSubscriberDataExchange(startSubscriberDataExchange $parameters)
604
+ {
605
+ return $this->__soapCall('startSubscriberDataExchange', array($parameters));
606
+ }
607
+
608
+ /**
609
+ *
610
+ * @param getSubscriberDataExchangeStatus $parameters
611
+ * @access public
612
+ */
613
+ public function getSubscriberDataExchangeStatus(getSubscriberDataExchangeStatus $parameters)
614
+ {
615
+ return $this->__soapCall('getSubscriberDataExchangeStatus', array($parameters));
616
+ }
617
+
618
+ /**
619
+ *
620
+ * @param setCampaignRecurrency $parameters
621
+ * @access public
622
+ */
623
+ public function setCampaignRecurrency(setCampaignRecurrency $parameters)
624
+ {
625
+ return $this->__soapCall('setCampaignRecurrency', array($parameters));
626
+ }
627
+
628
+ /**
629
+ *
630
+ * @param sendCampaign $parameters
631
+ * @access public
632
+ */
633
+ public function sendCampaign(sendCampaign $parameters)
634
+ {
635
+ return $this->__soapCall('sendCampaign', array($parameters));
636
+ }
637
+
638
+ /**
639
+ *
640
+ * @param cloneAndSendCampaign $parameters
641
+ * @access public
642
+ */
643
+ public function cloneAndSendCampaign(cloneAndSendCampaign $parameters)
644
+ {
645
+ return $this->__soapCall('cloneAndSendCampaign', array($parameters));
646
+ }
647
+
648
+ /**
649
+ *
650
+ * @param getRequestStatus $parameters
651
+ * @access public
652
+ */
653
+ public function getRequestStatus(getRequestStatus $parameters)
654
+ {
655
+ return $this->__soapCall('getRequestStatus', array($parameters));
656
+ }
657
+
658
+ /**
659
+ *
660
+ * @param createCampaign $parameters
661
+ * @access public
662
+ */
663
+ public function createCampaign(createCampaign $parameters)
664
+ {
665
+ return $this->__soapCall('createCampaign', array($parameters));
666
+ }
667
+
668
+ /**
669
+ *
670
+ * @param getXMLDeliveries $parameters
671
+ * @access public
672
+ */
673
+ public function getXMLDeliveries(getXMLDeliveries $parameters)
674
+ {
675
+ return $this->__soapCall('getXMLDeliveries', array($parameters));
676
+ }
677
+
678
+ /**
679
+ *
680
+ * @param getXMLDeliveryTransitions $parameters
681
+ * @access public
682
+ */
683
+ public function getXMLDeliveryTransitions(getXMLDeliveryTransitions $parameters)
684
+ {
685
+ return $this->__soapCall('getXMLDeliveryTransitions', array($parameters));
686
+ }
687
+
688
+ /**
689
+ *
690
+ * @param cancelCampaign $parameters
691
+ * @access public
692
+ */
693
+ public function cancelCampaign(cancelCampaign $parameters)
694
+ {
695
+ return $this->__soapCall('cancelCampaign', array($parameters));
696
+ }
697
+
698
+ /**
699
+ *
700
+ * @param getMessageModelById $parameters
701
+ * @access public
702
+ */
703
+ public function getMessageModelById(getMessageModelById $parameters)
704
+ {
705
+ return $this->__soapCall('getMessageModelById', array($parameters));
706
+ }
707
+
708
+ /**
709
+ *
710
+ * @param createMessageModel $parameters
711
+ * @access public
712
+ */
713
+ public function createMessageModel(createMessageModel $parameters)
714
+ {
715
+ return $this->__soapCall('createMessageModel', array($parameters));
716
+ }
717
+
718
+ /**
719
+ *
720
+ * @param findMessageModels $parameters
721
+ * @access public
722
+ */
723
+ public function findMessageModels(findMessageModels $parameters)
724
+ {
725
+ return $this->__soapCall('findMessageModels', array($parameters));
726
+ }
727
+
728
+ /**
729
+ *
730
+ * @param findMessageModelsBySubscriberSource $parameters
731
+ * @access public
732
+ */
733
+ public function findMessageModelsBySubscriberSource(findMessageModelsBySubscriberSource $parameters)
734
+ {
735
+ return $this->__soapCall('findMessageModelsBySubscriberSource', array($parameters));
736
+ }
737
+
738
+ /**
739
+ *
740
+ * @param getSubscriberSourceFilter $parameters
741
+ * @access public
742
+ */
743
+ public function getSubscriberSourceFilter(getSubscriberSourceFilter $parameters)
744
+ {
745
+ return $this->__soapCall('getSubscriberSourceFilter', array($parameters));
746
+ }
747
+
748
+ /**
749
+ *
750
+ * @param addSubscriberSourceFilter $parameters
751
+ * @access public
752
+ */
753
+ public function addSubscriberSourceFilter(addSubscriberSourceFilter $parameters)
754
+ {
755
+ return $this->__soapCall('addSubscriberSourceFilter', array($parameters));
756
+ }
757
+
758
+ /**
759
+ *
760
+ * @param findFiltersBySubscriberSource $parameters
761
+ * @access public
762
+ */
763
+ public function findFiltersBySubscriberSource(findFiltersBySubscriberSource $parameters)
764
+ {
765
+ return $this->__soapCall('findFiltersBySubscriberSource', array($parameters));
766
+ }
767
+
768
+ /**
769
+ *
770
+ * @param getSubscriberSource $parameters
771
+ * @access public
772
+ */
773
+ public function getSubscriberSource(getSubscriberSource $parameters)
774
+ {
775
+ return $this->__soapCall('getSubscriberSource', array($parameters));
776
+ }
777
+
778
+ /**
779
+ *
780
+ * @param findSubscriberSources $parameters
781
+ * @access public
782
+ */
783
+ public function findSubscriberSources(findSubscriberSources $parameters)
784
+ {
785
+ return $this->__soapCall('findSubscriberSources', array($parameters));
786
+ }
787
+
788
+ /**
789
+ *
790
+ * @param getSubscriber $parameters
791
+ * @access public
792
+ */
793
+ public function getSubscriber(getSubscriber $parameters)
794
+ {
795
+ return $this->__soapCall('getSubscriber', array($parameters));
796
+ }
797
+
798
+ /**
799
+ *
800
+ * @param addSubscriber $parameters
801
+ * @access public
802
+ */
803
+ public function addSubscriber(addSubscriber $parameters)
804
+ {
805
+ return $this->__soapCall('addSubscriber', array($parameters));
806
+ }
807
+
808
+ /**
809
+ *
810
+ * @param addSubscribers $parameters
811
+ * @access public
812
+ */
813
+ public function addSubscribers(addSubscribers $parameters)
814
+ {
815
+ return $this->__soapCall('addSubscribers', array($parameters));
816
+ }
817
+
818
+ /**
819
+ *
820
+ * @param removeSubscriber $parameters
821
+ * @access public
822
+ */
823
+ public function removeSubscriber(removeSubscriber $parameters)
824
+ {
825
+ return $this->__soapCall('removeSubscriber', array($parameters));
826
+ }
827
+
828
+ /**
829
+ *
830
+ * @param findSubscribersIncludedInFilter $parameters
831
+ * @access public
832
+ */
833
+ public function findSubscribersIncludedInFilter(findSubscribersIncludedInFilter $parameters)
834
+ {
835
+ return $this->__soapCall('findSubscribersIncludedInFilter', array($parameters));
836
+ }
837
+
838
+ /**
839
+ *
840
+ * @param borrowToken $parameters
841
+ * @access public
842
+ */
843
+ public function borrowToken(borrowToken $parameters)
844
+ {
845
+ return $this->__soapCall('borrowToken', array($parameters));
846
+ }
847
+
848
+ /**
849
+ *
850
+ * @param keepaliveToken $parameters
851
+ * @access public
852
+ */
853
+ public function keepaliveToken(keepaliveToken $parameters)
854
+ {
855
+ return $this->__soapCall('keepaliveToken', array($parameters));
856
+ }
857
+
858
+ /**
859
+ *
860
+ * @param invalidateToken $parameters
861
+ * @access public
862
+ */
863
+ public function invalidateToken(invalidateToken $parameters)
864
+ {
865
+ return $this->__soapCall('invalidateToken', array($parameters));
866
+ }
867
+
868
+ /**
869
+ *
870
+ * @param findCampaigns $parameters
871
+ * @access public
872
+ */
873
+ public function findCampaigns(findCampaigns $parameters)
874
+ {
875
+ return $this->__soapCall('findCampaigns', array($parameters));
876
+ }
877
+
878
+ /**
879
+ *
880
+ * @param getAttachmentByCampaignId $parameters
881
+ * @access public
882
+ */
883
+ public function getAttachmentByCampaignId(getAttachmentByCampaignId $parameters)
884
+ {
885
+ return $this->__soapCall('getAttachmentByCampaignId', array($parameters));
886
+ }
887
+
888
+ /**
889
+ *
890
+ * @param getTrackedLinks $parameters
891
+ * @access public
892
+ */
893
+ public function getTrackedLinks(getTrackedLinks $parameters)
894
+ {
895
+ return $this->__soapCall('getTrackedLinks', array($parameters));
896
+ }
897
+
898
+ /**
899
+ *
900
+ * @param triggerDeliveryById $parameters
901
+ * @access public
902
+ */
903
+ public function triggerDeliveryById(triggerDeliveryById $parameters)
904
+ {
905
+ return $this->__soapCall('triggerDeliveryById', array($parameters));
906
+ }
907
+
908
+ /**
909
+ *
910
+ * @param triggerDeliveryByAlias $parameters
911
+ * @access public
912
+ */
913
+ public function triggerDeliveryByAlias(triggerDeliveryByAlias $parameters)
914
+ {
915
+ return $this->__soapCall('triggerDeliveryByAlias', array($parameters));
916
+ }
917
+
918
+ /**
919
+ *
920
+ * @param addSubscriberSource $parameters
921
+ * @access public
922
+ */
923
+ public function addSubscriberSource(addSubscriberSource $parameters)
924
+ {
925
+ return $this->__soapCall('addSubscriberSource', array($parameters));
926
+ }
927
+
928
+ /**
929
+ *
930
+ * @param countSubscribersIncludedInFilter $parameters
931
+ * @access public
932
+ */
933
+ public function countSubscribersIncludedInFilter(countSubscribersIncludedInFilter $parameters)
934
+ {
935
+ return $this->__soapCall('countSubscribersIncludedInFilter', array($parameters));
936
+ }
937
+
938
+ /**
939
+ *
940
+ * @param findSubscribers $parameters
941
+ * @access public
942
+ */
943
+ public function findSubscribers(findSubscribers $parameters)
944
+ {
945
+ return $this->__soapCall('findSubscribers', array($parameters));
946
+ }
947
+
948
+ /**
949
+ *
950
+ * @param getCryptoKey $parameters
951
+ * @access public
952
+ */
953
+ public function getCryptoKey(getCryptoKey $parameters)
954
+ {
955
+ return $this->__soapCall('getCryptoKey', array($parameters));
956
+ }
957
+
958
+ /**
959
+ *
960
+ * @param archiveSubscriberSourceFilter $parameters
961
+ * @access public
962
+ */
963
+ public function archiveSubscriberSourceFilter(archiveSubscriberSourceFilter $parameters)
964
+ {
965
+ return $this->__soapCall('archiveSubscriberSourceFilter', array($parameters));
966
+ }
967
+
968
+ /**
969
+ *
970
+ * @param reuseSubscriberSourceFilter $parameters
971
+ * @access public
972
+ */
973
+ public function reuseSubscriberSourceFilter(reuseSubscriberSourceFilter $parameters)
974
+ {
975
+ return $this->__soapCall('reuseSubscriberSourceFilter', array($parameters));
976
+ }
977
+
978
+ /**
979
+ *
980
+ * @param findArchivedFiltersBySubscriberSource $parameters
981
+ * @access public
982
+ */
983
+ public function findArchivedFiltersBySubscriberSource(findArchivedFiltersBySubscriberSource $parameters)
984
+ {
985
+ return $this->__soapCall('findArchivedFiltersBySubscriberSource', array($parameters));
986
+ }
987
+
988
+ /**
989
+ *
990
+ * @param getArchivedSubscriberSourceFilter $parameters
991
+ * @access public
992
+ */
993
+ public function getArchivedSubscriberSourceFilter(getArchivedSubscriberSourceFilter $parameters)
994
+ {
995
+ return $this->__soapCall('getArchivedSubscriberSourceFilter', array($parameters));
996
+ }
997
+
998
+ /**
999
+ *
1000
+ * @param modifySubscriberSubscriptionStatusByMailqId $parameters
1001
+ * @access public
1002
+ */
1003
+ public function modifySubscriberSubscriptionStatusByMailqId(modifySubscriberSubscriptionStatusByMailqId $parameters)
1004
+ {
1005
+ return $this->__soapCall('modifySubscriberSubscriptionStatusByMailqId', array($parameters));
1006
+ }
1007
+
1008
+ /**
1009
+ *
1010
+ * @param sendImmediateMessage $parameters
1011
+ * @access public
1012
+ */
1013
+ public function sendImmediateMessage(sendImmediateMessage $parameters)
1014
+ {
1015
+ return $this->__soapCall('sendImmediateMessage', array($parameters));
1016
+ }
1017
+
1018
+ /**
1019
+ *
1020
+ * @param sendImmediateMessageSidCid $parameters
1021
+ * @access public
1022
+ */
1023
+ public function sendImmediateMessageSidCid(sendImmediateMessageSidCid $parameters)
1024
+ {
1025
+ return $this->__soapCall('sendImmediateMessageSidCid', array($parameters));
1026
+ }
1027
+
1028
+ /**
1029
+ *
1030
+ * @param sendImmediateMessageSDataCData $parameters
1031
+ * @access public
1032
+ */
1033
+ public function sendImmediateMessageSDataCData(sendImmediateMessageSDataCData $parameters)
1034
+ {
1035
+ return $this->__soapCall('sendImmediateMessageSDataCData', array($parameters));
1036
+ }
1037
+
1038
+ /**
1039
+ *
1040
+ * @param sendImmediateMessageSIdCData $parameters
1041
+ * @access public
1042
+ */
1043
+ public function sendImmediateMessageSIdCData(sendImmediateMessageSIdCData $parameters)
1044
+ {
1045
+ return $this->__soapCall('sendImmediateMessageSIdCData', array($parameters));
1046
+ }
1047
+
1048
+ /**
1049
+ *
1050
+ * @param sendImmediateMessageSdataCAl $parameters
1051
+ * @access public
1052
+ */
1053
+ public function sendImmediateMessageSdataCAl(sendImmediateMessageSdataCAl $parameters)
1054
+ {
1055
+ return $this->__soapCall('sendImmediateMessageSdataCAl', array($parameters));
1056
+ }
1057
+
1058
+ /**
1059
+ *
1060
+ * @param sendImmediateMessageSidCAl $parameters
1061
+ * @access public
1062
+ */
1063
+ public function sendImmediateMessageSidCAl(sendImmediateMessageSidCAl $parameters)
1064
+ {
1065
+ return $this->__soapCall('sendImmediateMessageSidCAl', array($parameters));
1066
+ }
1067
+
1068
+ /**
1069
+ *
1070
+ * @param sendImmediateMessageSDataCIdCA $parameters
1071
+ * @access public
1072
+ */
1073
+ public function sendImmediateMessageSDataCIdCA(sendImmediateMessageSDataCIdCA $parameters)
1074
+ {
1075
+ return $this->__soapCall('sendImmediateMessageSDataCIdCA', array($parameters));
1076
+ }
1077
+
1078
+ /**
1079
+ *
1080
+ * @param sendImmediateMessageSidCidCA $parameters
1081
+ * @access public
1082
+ */
1083
+ public function sendImmediateMessageSidCidCA(sendImmediateMessageSidCidCA $parameters)
1084
+ {
1085
+ return $this->__soapCall('sendImmediateMessageSidCidCA', array($parameters));
1086
+ }
1087
+
1088
+ /**
1089
+ *
1090
+ * @param sendImmediateMessageSDataCDataCA $parameters
1091
+ * @access public
1092
+ */
1093
+ public function sendImmediateMessageSDataCDataCA(sendImmediateMessageSDataCDataCA $parameters)
1094
+ {
1095
+ return $this->__soapCall('sendImmediateMessageSDataCDataCA', array($parameters));
1096
+ }
1097
+
1098
+ /**
1099
+ *
1100
+ * @param sendImmediateMessageSIdCDataCA $parameters
1101
+ * @access public
1102
+ */
1103
+ public function sendImmediateMessageSIdCDataCA(sendImmediateMessageSIdCDataCA $parameters)
1104
+ {
1105
+ return $this->__soapCall('sendImmediateMessageSIdCDataCA', array($parameters));
1106
+ }
1107
+
1108
+ /**
1109
+ *
1110
+ * @param sendImmediateMessageSdataCAlCA $parameters
1111
+ * @access public
1112
+ */
1113
+ public function sendImmediateMessageSdataCAlCA(sendImmediateMessageSdataCAlCA $parameters)
1114
+ {
1115
+ return $this->__soapCall('sendImmediateMessageSdataCAlCA', array($parameters));
1116
+ }
1117
+
1118
+ /**
1119
+ *
1120
+ * @param sendImmediateMessageSidCAlCA $parameters
1121
+ * @access public
1122
+ */
1123
+ public function sendImmediateMessageSidCAlCA(sendImmediateMessageSidCAlCA $parameters)
1124
+ {
1125
+ return $this->__soapCall('sendImmediateMessageSidCAlCA', array($parameters));
1126
+ }
1127
+
1128
+ }
lib/contactlab/CommunicationCategory.php CHANGED
@@ -1,41 +1,41 @@
1
- <?php
2
-
3
- class CommunicationCategory
4
- {
5
-
6
- /**
7
- *
8
- * @var boolean $active
9
- * @access public
10
- */
11
- public $active;
12
-
13
- /**
14
- *
15
- * @var string $code
16
- * @access public
17
- */
18
- public $code;
19
-
20
- /**
21
- *
22
- * @var int $identifier
23
- * @access public
24
- */
25
- public $identifier;
26
-
27
- /**
28
- *
29
- * @var string $name
30
- * @access public
31
- */
32
- public $name;
33
-
34
- /**
35
- *
36
- * @var boolean $transactional
37
- * @access public
38
- */
39
- public $transactional;
40
-
41
- }
1
+ <?php
2
+
3
+ class CommunicationCategory
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var boolean $active
9
+ * @access public
10
+ */
11
+ public $active;
12
+
13
+ /**
14
+ *
15
+ * @var string $code
16
+ * @access public
17
+ */
18
+ public $code;
19
+
20
+ /**
21
+ *
22
+ * @var int $identifier
23
+ * @access public
24
+ */
25
+ public $identifier;
26
+
27
+ /**
28
+ *
29
+ * @var string $name
30
+ * @access public
31
+ */
32
+ public $name;
33
+
34
+ /**
35
+ *
36
+ * @var boolean $transactional
37
+ * @access public
38
+ */
39
+ public $transactional;
40
+
41
+ }
lib/contactlab/EmailMessage.php CHANGED
@@ -1,36 +1,36 @@
1
- <?php
2
-
3
- include_once('Message.php');
4
-
5
- class EmailMessage extends Message
6
- {
7
-
8
- /**
9
- *
10
- * @var string $subject
11
- * @access public
12
- */
13
- public $subject;
14
-
15
- /**
16
- *
17
- * @var string $htmlContent
18
- * @access public
19
- */
20
- public $htmlContent;
21
-
22
- /**
23
- *
24
- * @var string $textContent
25
- * @access public
26
- */
27
- public $textContent;
28
-
29
- /**
30
- *
31
- * @var PreferredContent $preferredContent
32
- * @access public
33
- */
34
- public $preferredContent;
35
-
36
- }
1
+ <?php
2
+
3
+ include_once('Message.php');
4
+
5
+ class EmailMessage extends Message
6
+ {
7
+
8
+ /**
9
+ *
10
+ * @var string $subject
11
+ * @access public
12
+ */
13
+ public $subject;
14
+
15
+ /**
16
+ *
17
+ * @var string $htmlContent
18
+ * @access public
19
+ */
20
+ public $htmlContent;
21
+
22
+ /**
23
+ *
24
+ * @var string $textContent
25
+ * @access public
26
+ */
27
+ public $textContent;
28
+
29
+ /**
30
+ *
31
+ * @var PreferredContent $preferredContent
32
+ * @access public
33
+ */
34
+ public $preferredContent;
35
+
36
+ }
lib/contactlab/FaxMessage.php CHANGED
@@ -1,36 +1,36 @@
1
- <?php
2
-
3
- include_once('Message.php');
4
-
5
- class FaxMessage extends Message
6
- {
7
-
8
- /**
9
- *
10
- * @var base64Binary $content
11
- * @access public
12
- */
13
- public $content;
14
-
15
- /**
16
- *
17
- * @var string $fileName
18
- * @access public
19
- */
20
- public $fileName;
21
-
22
- /**
23
- *
24
- * @var MimeType $mimeType
25
- * @access public
26
- */
27
- public $mimeType;
28
-
29
- /**
30
- *
31
- * @var int $numberOfPages
32
- * @access public
33
- */
34
- public $numberOfPages;
35
-
36
- }
1
+ <?php
2
+
3
+ include_once('Message.php');
4
+
5
+ class FaxMessage extends Message
6
+ {
7
+
8
+ /**
9
+ *
10
+ * @var base64Binary $content
11
+ * @access public
12
+ */
13
+ public $content;
14
+
15
+ /**
16
+ *
17
+ * @var string $fileName
18
+ * @access public
19
+ */
20
+ public $fileName;
21
+
22
+ /**
23
+ *
24
+ * @var MimeType $mimeType
25
+ * @access public
26
+ */
27
+ public $mimeType;
28
+
29
+ /**
30
+ *
31
+ * @var int $numberOfPages
32
+ * @access public
33
+ */
34
+ public $numberOfPages;
35
+
36
+ }
lib/contactlab/LookupPreferences.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class LookupPreferences
4
- {
5
-
6
- /**
7
- *
8
- * @var int $pageNumber
9
- * @access public
10
- */
11
- public $pageNumber;
12
-
13
- /**
14
- *
15
- * @var LookupMatchingMode $matchingMode
16
- * @access public
17
- */
18
- public $matchingMode;
19
-
20
- /**
21
- *
22
- * @var LookupSortingMode $sortingMode
23
- * @access public
24
- */
25
- public $sortingMode;
26
-
27
- }
1
+ <?php
2
+
3
+ class LookupPreferences
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $pageNumber
9
+ * @access public
10
+ */
11
+ public $pageNumber;
12
+
13
+ /**
14
+ *
15
+ * @var LookupMatchingMode $matchingMode
16
+ * @access public
17
+ */
18
+ public $matchingMode;
19
+
20
+ /**
21
+ *
22
+ * @var LookupSortingMode $sortingMode
23
+ * @access public
24
+ */
25
+ public $sortingMode;
26
+
27
+ }
lib/contactlab/Message.php CHANGED
@@ -1,62 +1,62 @@
1
- <?php
2
-
3
- class Message
4
- {
5
-
6
- /**
7
- *
8
- * @var charset $charset
9
- * @access public
10
- */
11
- public $charset;
12
-
13
- /**
14
- *
15
- * @var int $modelIdentifier
16
- * @access public
17
- */
18
- public $modelIdentifier;
19
-
20
- /**
21
- *
22
- * @var Recipients $recipients
23
- * @access public
24
- */
25
- public $recipients;
26
-
27
- /**
28
- *
29
- * @var Sender $sender
30
- * @access public
31
- */
32
- public $sender;
33
-
34
- /**
35
- *
36
- * @var int $prefAttachmentCount
37
- * @access public
38
- */
39
- public $prefAttachmentCount;
40
-
41
- /**
42
- *
43
- * @var int $minAttachmentCount
44
- * @access public
45
- */
46
- public $minAttachmentCount;
47
-
48
- /**
49
- *
50
- * @var int $maxAttachmentCount
51
- * @access public
52
- */
53
- public $maxAttachmentCount;
54
-
55
- /**
56
- *
57
- * @var int $communicationCategoryIdentifier
58
- * @access public
59
- */
60
- public $communicationCategoryIdentifier;
61
-
62
- }
1
+ <?php
2
+
3
+ class Message
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var charset $charset
9
+ * @access public
10
+ */
11
+ public $charset;
12
+
13
+ /**
14
+ *
15
+ * @var int $modelIdentifier
16
+ * @access public
17
+ */
18
+ public $modelIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var Recipients $recipients
23
+ * @access public
24
+ */
25
+ public $recipients;
26
+
27
+ /**
28
+ *
29
+ * @var Sender $sender
30
+ * @access public
31
+ */
32
+ public $sender;
33
+
34
+ /**
35
+ *
36
+ * @var int $prefAttachmentCount
37
+ * @access public
38
+ */
39
+ public $prefAttachmentCount;
40
+
41
+ /**
42
+ *
43
+ * @var int $minAttachmentCount
44
+ * @access public
45
+ */
46
+ public $minAttachmentCount;
47
+
48
+ /**
49
+ *
50
+ * @var int $maxAttachmentCount
51
+ * @access public
52
+ */
53
+ public $maxAttachmentCount;
54
+
55
+ /**
56
+ *
57
+ * @var int $communicationCategoryIdentifier
58
+ * @access public
59
+ */
60
+ public $communicationCategoryIdentifier;
61
+
62
+ }
lib/contactlab/MessageModels.php CHANGED
@@ -1,15 +1,15 @@
1
- <?php
2
-
3
- include_once('SlicedDataSet.php');
4
-
5
- class MessageModels extends SlicedDataSet
6
- {
7
-
8
- /**
9
- *
10
- * @var Message $currentPageItems
11
- * @access public
12
- */
13
- public $currentPageItems;
14
-
15
- }
1
+ <?php
2
+
3
+ include_once('SlicedDataSet.php');
4
+
5
+ class MessageModels extends SlicedDataSet
6
+ {
7
+
8
+ /**
9
+ *
10
+ * @var Message $currentPageItems
11
+ * @access public
12
+ */
13
+ public $currentPageItems;
14
+
15
+ }
lib/contactlab/Recipients.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class Recipients
4
- {
5
-
6
- /**
7
- *
8
- * @var int $subscriberSourceIdentifier
9
- * @access public
10
- */
11
- public $subscriberSourceIdentifier;
12
-
13
- /**
14
- *
15
- * @var int $subscriberSourceFilterIdentifier
16
- * @access public
17
- */
18
- public $subscriberSourceFilterIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class Recipients
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $subscriberSourceIdentifier
9
+ * @access public
10
+ */
11
+ public $subscriberSourceIdentifier;
12
+
13
+ /**
14
+ *
15
+ * @var int $subscriberSourceFilterIdentifier
16
+ * @access public
17
+ */
18
+ public $subscriberSourceFilterIdentifier;
19
+
20
+ }
lib/contactlab/Sender.php CHANGED
@@ -1,34 +1,34 @@
1
- <?php
2
-
3
- class Sender
4
- {
5
-
6
- /**
7
- *
8
- * @var string $name
9
- * @access public
10
- */
11
- public $name;
12
-
13
- /**
14
- *
15
- * @var string $phone
16
- * @access public
17
- */
18
- public $phone;
19
-
20
- /**
21
- *
22
- * @var string $email
23
- * @access public
24
- */
25
- public $email;
26
-
27
- /**
28
- *
29
- * @var string $replyTo
30
- * @access public
31
- */
32
- public $replyTo;
33
-
34
- }
1
+ <?php
2
+
3
+ class Sender
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $name
9
+ * @access public
10
+ */
11
+ public $name;
12
+
13
+ /**
14
+ *
15
+ * @var string $phone
16
+ * @access public
17
+ */
18
+ public $phone;
19
+
20
+ /**
21
+ *
22
+ * @var string $email
23
+ * @access public
24
+ */
25
+ public $email;
26
+
27
+ /**
28
+ *
29
+ * @var string $replyTo
30
+ * @access public
31
+ */
32
+ public $replyTo;
33
+
34
+ }
lib/contactlab/SlicedDataSet.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class SlicedDataSet
4
- {
5
-
6
- /**
7
- *
8
- * @var int $currentPageNumber
9
- * @access public
10
- */
11
- public $currentPageNumber;
12
-
13
- /**
14
- *
15
- * @var int $maxPageNumber
16
- * @access public
17
- */
18
- public $maxPageNumber;
19
-
20
- }
1
+ <?php
2
+
3
+ class SlicedDataSet
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $currentPageNumber
9
+ * @access public
10
+ */
11
+ public $currentPageNumber;
12
+
13
+ /**
14
+ *
15
+ * @var int $maxPageNumber
16
+ * @access public
17
+ */
18
+ public $maxPageNumber;
19
+
20
+ }
lib/contactlab/Subscriber.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class Subscriber
4
- {
5
-
6
- /**
7
- *
8
- * @var int $identifier
9
- * @access public
10
- */
11
- public $identifier;
12
-
13
- /**
14
- *
15
- * @var SubscriberAttribute $attributes
16
- * @access public
17
- */
18
- public $attributes;
19
-
20
- }
1
+ <?php
2
+
3
+ class Subscriber
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $identifier
9
+ * @access public
10
+ */
11
+ public $identifier;
12
+
13
+ /**
14
+ *
15
+ * @var SubscriberAttribute $attributes
16
+ * @access public
17
+ */
18
+ public $attributes;
19
+
20
+ }
lib/contactlab/SubscriberAttribute.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class SubscriberAttribute
4
- {
5
-
6
- /**
7
- *
8
- * @var string $key
9
- * @access public
10
- */
11
- public $key;
12
-
13
- /**
14
- *
15
- * @var anyType $value
16
- * @access public
17
- */
18
- public $value;
19
-
20
- }
1
+ <?php
2
+
3
+ class SubscriberAttribute
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $key
9
+ * @access public
10
+ */
11
+ public $key;
12
+
13
+ /**
14
+ *
15
+ * @var anyType $value
16
+ * @access public
17
+ */
18
+ public $value;
19
+
20
+ }
lib/contactlab/SubscriberSource.php CHANGED
@@ -1,62 +1,62 @@
1
- <?php
2
-
3
- class SubscriberSource
4
- {
5
-
6
- /**
7
- *
8
- * @var int $identifier
9
- * @access public
10
- */
11
- public $identifier;
12
-
13
- /**
14
- *
15
- * @var string $name
16
- * @access public
17
- */
18
- public $name;
19
-
20
- /**
21
- *
22
- * @var string $description
23
- * @access public
24
- */
25
- public $description;
26
-
27
- /**
28
- *
29
- * @var string $subscriberIdentifierFieldName
30
- * @access public
31
- */
32
- public $subscriberIdentifierFieldName;
33
-
34
- /**
35
- *
36
- * @var SubscriberSourceField $fields
37
- * @access public
38
- */
39
- public $fields;
40
-
41
- /**
42
- *
43
- * @var charset $charset
44
- * @access public
45
- */
46
- public $charset;
47
-
48
- /**
49
- *
50
- * @var boolean $locked
51
- * @access public
52
- */
53
- public $locked;
54
-
55
- /**
56
- *
57
- * @var boolean $readOnly
58
- * @access public
59
- */
60
- public $readOnly;
61
-
62
- }
1
+ <?php
2
+
3
+ class SubscriberSource
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $identifier
9
+ * @access public
10
+ */
11
+ public $identifier;
12
+
13
+ /**
14
+ *
15
+ * @var string $name
16
+ * @access public
17
+ */
18
+ public $name;
19
+
20
+ /**
21
+ *
22
+ * @var string $description
23
+ * @access public
24
+ */
25
+ public $description;
26
+
27
+ /**
28
+ *
29
+ * @var string $subscriberIdentifierFieldName
30
+ * @access public
31
+ */
32
+ public $subscriberIdentifierFieldName;
33
+
34
+ /**
35
+ *
36
+ * @var SubscriberSourceField $fields
37
+ * @access public
38
+ */
39
+ public $fields;
40
+
41
+ /**
42
+ *
43
+ * @var charset $charset
44
+ * @access public
45
+ */
46
+ public $charset;
47
+
48
+ /**
49
+ *
50
+ * @var boolean $locked
51
+ * @access public
52
+ */
53
+ public $locked;
54
+
55
+ /**
56
+ *
57
+ * @var boolean $readOnly
58
+ * @access public
59
+ */
60
+ public $readOnly;
61
+
62
+ }
lib/contactlab/SubscriberSourceField.php CHANGED
@@ -1,41 +1,41 @@
1
- <?php
2
-
3
- class SubscriberSourceField
4
- {
5
-
6
- /**
7
- *
8
- * @var string $name
9
- * @access public
10
- */
11
- public $name;
12
-
13
- /**
14
- *
15
- * @var field $type
16
- * @access public
17
- */
18
- public $type;
19
-
20
- /**
21
- *
22
- * @var boolean $emailField
23
- * @access public
24
- */
25
- public $emailField;
26
-
27
- /**
28
- *
29
- * @var boolean $phoneField
30
- * @access public
31
- */
32
- public $phoneField;
33
-
34
- /**
35
- *
36
- * @var boolean $faxField
37
- * @access public
38
- */
39
- public $faxField;
40
-
41
- }
1
+ <?php
2
+
3
+ class SubscriberSourceField
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $name
9
+ * @access public
10
+ */
11
+ public $name;
12
+
13
+ /**
14
+ *
15
+ * @var field $type
16
+ * @access public
17
+ */
18
+ public $type;
19
+
20
+ /**
21
+ *
22
+ * @var boolean $emailField
23
+ * @access public
24
+ */
25
+ public $emailField;
26
+
27
+ /**
28
+ *
29
+ * @var boolean $phoneField
30
+ * @access public
31
+ */
32
+ public $phoneField;
33
+
34
+ /**
35
+ *
36
+ * @var boolean $faxField
37
+ * @access public
38
+ */
39
+ public $faxField;
40
+
41
+ }
lib/contactlab/SubscriberSourceFilter.php CHANGED
@@ -1,48 +1,48 @@
1
- <?php
2
-
3
- class SubscriberSourceFilter
4
- {
5
-
6
- /**
7
- *
8
- * @var int $identifier
9
- * @access public
10
- */
11
- public $identifier;
12
-
13
- /**
14
- *
15
- * @var string $name
16
- * @access public
17
- */
18
- public $name;
19
-
20
- /**
21
- *
22
- * @var int $subscriberSourceIdentifier
23
- * @access public
24
- */
25
- public $subscriberSourceIdentifier;
26
-
27
- /**
28
- *
29
- * @var string $content
30
- * @access public
31
- */
32
- public $content;
33
-
34
- /**
35
- *
36
- * @var string $extensions
37
- * @access public
38
- */
39
- public $extensions;
40
-
41
- /**
42
- *
43
- * @var SubscriberSourceFilterType $type
44
- * @access public
45
- */
46
- public $type;
47
-
48
- }
1
+ <?php
2
+
3
+ class SubscriberSourceFilter
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $identifier
9
+ * @access public
10
+ */
11
+ public $identifier;
12
+
13
+ /**
14
+ *
15
+ * @var string $name
16
+ * @access public
17
+ */
18
+ public $name;
19
+
20
+ /**
21
+ *
22
+ * @var int $subscriberSourceIdentifier
23
+ * @access public
24
+ */
25
+ public $subscriberSourceIdentifier;
26
+
27
+ /**
28
+ *
29
+ * @var string $content
30
+ * @access public
31
+ */
32
+ public $content;
33
+
34
+ /**
35
+ *
36
+ * @var string $extensions
37
+ * @access public
38
+ */
39
+ public $extensions;
40
+
41
+ /**
42
+ *
43
+ * @var SubscriberSourceFilterType $type
44
+ * @access public
45
+ */
46
+ public $type;
47
+
48
+ }
lib/contactlab/SubscriberSourceFilters.php CHANGED
@@ -1,15 +1,15 @@
1
- <?php
2
-
3
- include_once('SlicedDataSet.php');
4
-
5
- class SubscriberSourceFilters extends SlicedDataSet
6
- {
7
-
8
- /**
9
- *
10
- * @var SubscriberSourceFilter $currentPageItems
11
- * @access public
12
- */
13
- public $currentPageItems;
14
-
15
- }
1
+ <?php
2
+
3
+ include_once('SlicedDataSet.php');
4
+
5
+ class SubscriberSourceFilters extends SlicedDataSet
6
+ {
7
+
8
+ /**
9
+ *
10
+ * @var SubscriberSourceFilter $currentPageItems
11
+ * @access public
12
+ */
13
+ public $currentPageItems;
14
+
15
+ }
lib/contactlab/SubscriberSources.php CHANGED
@@ -1,15 +1,15 @@
1
- <?php
2
-
3
- include_once('SlicedDataSet.php');
4
-
5
- class SubscriberSources extends SlicedDataSet
6
- {
7
-
8
- /**
9
- *
10
- * @var SubscriberSource $currentPageItems
11
- * @access public
12
- */
13
- public $currentPageItems;
14
-
15
- }
1
+ <?php
2
+
3
+ include_once('SlicedDataSet.php');
4
+
5
+ class SubscriberSources extends SlicedDataSet
6
+ {
7
+
8
+ /**
9
+ *
10
+ * @var SubscriberSource $currentPageItems
11
+ * @access public
12
+ */
13
+ public $currentPageItems;
14
+
15
+ }
lib/contactlab/Subscribers.php CHANGED
@@ -1,15 +1,15 @@
1
- <?php
2
-
3
- include_once('SlicedDataSet.php');
4
-
5
- class Subscribers extends SlicedDataSet
6
- {
7
-
8
- /**
9
- *
10
- * @var Subscriber $currentPageItems
11
- * @access public
12
- */
13
- public $currentPageItems;
14
-
15
- }
1
+ <?php
2
+
3
+ include_once('SlicedDataSet.php');
4
+
5
+ class Subscribers extends SlicedDataSet
6
+ {
7
+
8
+ /**
9
+ *
10
+ * @var Subscriber $currentPageItems
11
+ * @access public
12
+ */
13
+ public $currentPageItems;
14
+
15
+ }
lib/contactlab/TextMessage.php CHANGED
@@ -1,15 +1,15 @@
1
- <?php
2
-
3
- include_once('Message.php');
4
-
5
- class TextMessage extends Message
6
- {
7
-
8
- /**
9
- *
10
- * @var string $content
11
- * @access public
12
- */
13
- public $content;
14
-
15
- }
1
+ <?php
2
+
3
+ include_once('Message.php');
4
+
5
+ class TextMessage extends Message
6
+ {
7
+
8
+ /**
9
+ *
10
+ * @var string $content
11
+ * @access public
12
+ */
13
+ public $content;
14
+
15
+ }
lib/contactlab/TrackedLink.php CHANGED
@@ -1,41 +1,41 @@
1
- <?php
2
-
3
- class TrackedLink
4
- {
5
-
6
- /**
7
- *
8
- * @var int $identifier
9
- * @access public
10
- */
11
- public $identifier;
12
-
13
- /**
14
- *
15
- * @var string $url
16
- * @access public
17
- */
18
- public $url;
19
-
20
- /**
21
- *
22
- * @var int $clicks
23
- * @access public
24
- */
25
- public $clicks;
26
-
27
- /**
28
- *
29
- * @var int $uniqueClicks
30
- * @access public
31
- */
32
- public $uniqueClicks;
33
-
34
- /**
35
- *
36
- * @var string $category
37
- * @access public
38
- */
39
- public $category;
40
-
41
- }
1
+ <?php
2
+
3
+ class TrackedLink
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $identifier
9
+ * @access public
10
+ */
11
+ public $identifier;
12
+
13
+ /**
14
+ *
15
+ * @var string $url
16
+ * @access public
17
+ */
18
+ public $url;
19
+
20
+ /**
21
+ *
22
+ * @var int $clicks
23
+ * @access public
24
+ */
25
+ public $clicks;
26
+
27
+ /**
28
+ *
29
+ * @var int $uniqueClicks
30
+ * @access public
31
+ */
32
+ public $uniqueClicks;
33
+
34
+ /**
35
+ *
36
+ * @var string $category
37
+ * @access public
38
+ */
39
+ public $category;
40
+
41
+ }
lib/contactlab/TrackedLinks.php CHANGED
@@ -1,15 +1,15 @@
1
- <?php
2
-
3
- include_once('SlicedDataSet.php');
4
-
5
- class TrackedLinks extends SlicedDataSet
6
- {
7
-
8
- /**
9
- *
10
- * @var TrackedLink $currentPageItems
11
- * @access public
12
- */
13
- public $currentPageItems;
14
-
15
- }
1
+ <?php
2
+
3
+ include_once('SlicedDataSet.php');
4
+
5
+ class TrackedLinks extends SlicedDataSet
6
+ {
7
+
8
+ /**
9
+ *
10
+ * @var TrackedLink $currentPageItems
11
+ * @access public
12
+ */
13
+ public $currentPageItems;
14
+
15
+ }
lib/contactlab/XMLDeliveryInfos.php CHANGED
@@ -1,15 +1,15 @@
1
- <?php
2
-
3
- include_once('SlicedDataSet.php');
4
-
5
- class XMLDeliveryInfos extends SlicedDataSet
6
- {
7
-
8
- /**
9
- *
10
- * @var xmlDeliveryInfo $currentPageItems
11
- * @access public
12
- */
13
- public $currentPageItems;
14
-
15
- }
1
+ <?php
2
+
3
+ include_once('SlicedDataSet.php');
4
+
5
+ class XMLDeliveryInfos extends SlicedDataSet
6
+ {
7
+
8
+ /**
9
+ *
10
+ * @var xmlDeliveryInfo $currentPageItems
11
+ * @access public
12
+ */
13
+ public $currentPageItems;
14
+
15
+ }
lib/contactlab/addAttachment.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class addAttachment
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $campaignIdentifier
16
- * @access public
17
- */
18
- public $campaignIdentifier;
19
-
20
- /**
21
- *
22
- * @var Attachment $attachments
23
- * @access public
24
- */
25
- public $attachments;
26
-
27
- }
1
+ <?php
2
+
3
+ class addAttachment
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignIdentifier
16
+ * @access public
17
+ */
18
+ public $campaignIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var Attachment $attachments
23
+ * @access public
24
+ */
25
+ public $attachments;
26
+
27
+ }
lib/contactlab/addAttachmentResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class addAttachmentResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Attachment $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class addAttachmentResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Attachment $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/addCampaignNote.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class addCampaignNote
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $campaignIdentifier
16
- * @access public
17
- */
18
- public $campaignIdentifier;
19
-
20
- /**
21
- *
22
- * @var CampaignNote $note
23
- * @access public
24
- */
25
- public $note;
26
-
27
- }
1
+ <?php
2
+
3
+ class addCampaignNote
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignIdentifier
16
+ * @access public
17
+ */
18
+ public $campaignIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var CampaignNote $note
23
+ * @access public
24
+ */
25
+ public $note;
26
+
27
+ }
lib/contactlab/addCampaignNoteResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class addCampaignNoteResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var CampaignNote $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class addCampaignNoteResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var CampaignNote $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/addSubscriber.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class addSubscriber
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $sourceIdentifier
16
- * @access public
17
- */
18
- public $sourceIdentifier;
19
-
20
- /**
21
- *
22
- * @var Subscriber $subscriber
23
- * @access public
24
- */
25
- public $subscriber;
26
-
27
- }
1
+ <?php
2
+
3
+ class addSubscriber
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $sourceIdentifier
16
+ * @access public
17
+ */
18
+ public $sourceIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var Subscriber $subscriber
23
+ * @access public
24
+ */
25
+ public $subscriber;
26
+
27
+ }
lib/contactlab/addSubscriberResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class addSubscriberResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Subscriber $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class addSubscriberResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Subscriber $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/addSubscriberSource.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class addSubscriberSource
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var SubscriberSource $subscriberSource
16
- * @access public
17
- */
18
- public $subscriberSource;
19
-
20
- }
1
+ <?php
2
+
3
+ class addSubscriberSource
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var SubscriberSource $subscriberSource
16
+ * @access public
17
+ */
18
+ public $subscriberSource;
19
+
20
+ }
lib/contactlab/addSubscriberSourceFilter.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class addSubscriberSourceFilter
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var SubscriberSourceFilter $filter
16
- * @access public
17
- */
18
- public $filter;
19
-
20
- }
1
+ <?php
2
+
3
+ class addSubscriberSourceFilter
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var SubscriberSourceFilter $filter
16
+ * @access public
17
+ */
18
+ public $filter;
19
+
20
+ }
lib/contactlab/addSubscriberSourceFilterResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class addSubscriberSourceFilterResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var SubscriberSourceFilter $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class addSubscriberSourceFilterResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var SubscriberSourceFilter $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/addSubscriberSourceResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class addSubscriberSourceResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var SubscriberSource $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class addSubscriberSourceResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var SubscriberSource $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/addSubscribers.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class addSubscribers
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $sourceIdentifier
16
- * @access public
17
- */
18
- public $sourceIdentifier;
19
-
20
- /**
21
- *
22
- * @var Subscribers $subscribers
23
- * @access public
24
- */
25
- public $subscribers;
26
-
27
- }
1
+ <?php
2
+
3
+ class addSubscribers
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $sourceIdentifier
16
+ * @access public
17
+ */
18
+ public $sourceIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var Subscribers $subscribers
23
+ * @access public
24
+ */
25
+ public $subscribers;
26
+
27
+ }
lib/contactlab/addSubscribersResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class addSubscribersResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var int $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class addSubscribersResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/archiveSubscriberSourceFilter.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class archiveSubscriberSourceFilter
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $filterIdentifier
16
- * @access public
17
- */
18
- public $filterIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class archiveSubscriberSourceFilter
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $filterIdentifier
16
+ * @access public
17
+ */
18
+ public $filterIdentifier;
19
+
20
+ }
lib/contactlab/archiveSubscriberSourceFilterResponse.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
-
3
- class archiveSubscriberSourceFilterResponse
4
- {
5
-
6
- }
1
+ <?php
2
+
3
+ class archiveSubscriberSourceFilterResponse
4
+ {
5
+
6
+ }
lib/contactlab/borrowToken.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class borrowToken
4
- {
5
-
6
- /**
7
- *
8
- * @var string $apiKey
9
- * @access public
10
- */
11
- public $apiKey;
12
-
13
- /**
14
- *
15
- * @var string $userKey
16
- * @access public
17
- */
18
- public $userKey;
19
-
20
- }
1
+ <?php
2
+
3
+ class borrowToken
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $apiKey
9
+ * @access public
10
+ */
11
+ public $apiKey;
12
+
13
+ /**
14
+ *
15
+ * @var string $userKey
16
+ * @access public
17
+ */
18
+ public $userKey;
19
+
20
+ }
lib/contactlab/borrowTokenResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class borrowTokenResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class borrowTokenResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/cancelCampaign.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class cancelCampaign
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $campaignIdentifier
16
- * @access public
17
- */
18
- public $campaignIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class cancelCampaign
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignIdentifier
16
+ * @access public
17
+ */
18
+ public $campaignIdentifier;
19
+
20
+ }
lib/contactlab/cancelCampaignResponse.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
-
3
- class cancelCampaignResponse
4
- {
5
-
6
- }
1
+ <?php
2
+
3
+ class cancelCampaignResponse
4
+ {
5
+
6
+ }
lib/contactlab/cloneAndSendCampaign.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class cloneAndSendCampaign
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $campaignIdentifier
16
- * @access public
17
- */
18
- public $campaignIdentifier;
19
-
20
- /**
21
- *
22
- * @var dateTime $notBefore
23
- * @access public
24
- */
25
- public $notBefore;
26
-
27
- }
1
+ <?php
2
+
3
+ class cloneAndSendCampaign
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignIdentifier
16
+ * @access public
17
+ */
18
+ public $campaignIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var dateTime $notBefore
23
+ * @access public
24
+ */
25
+ public $notBefore;
26
+
27
+ }
lib/contactlab/cloneAndSendCampaignResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class cloneAndSendCampaignResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var int $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class cloneAndSendCampaignResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/countSubscribers.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class countSubscribers
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $sourceIdentifier
16
- * @access public
17
- */
18
- public $sourceIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class countSubscribers
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $sourceIdentifier
16
+ * @access public
17
+ */
18
+ public $sourceIdentifier;
19
+
20
+ }
lib/contactlab/countSubscribersIncludedInFilter.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class countSubscribersIncludedInFilter
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $sourceIdentifier
16
- * @access public
17
- */
18
- public $sourceIdentifier;
19
-
20
- /**
21
- *
22
- * @var int $filterIdentifier
23
- * @access public
24
- */
25
- public $filterIdentifier;
26
-
27
- }
1
+ <?php
2
+
3
+ class countSubscribersIncludedInFilter
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $sourceIdentifier
16
+ * @access public
17
+ */
18
+ public $sourceIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var int $filterIdentifier
23
+ * @access public
24
+ */
25
+ public $filterIdentifier;
26
+
27
+ }
lib/contactlab/countSubscribersIncludedInFilterResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class countSubscribersIncludedInFilterResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var int $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class countSubscribersIncludedInFilterResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/countSubscribersResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class countSubscribersResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var int $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class countSubscribersResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/createCampaign.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class createCampaign
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var Campaign $campaign
16
- * @access public
17
- */
18
- public $campaign;
19
-
20
- }
1
+ <?php
2
+
3
+ class createCampaign
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var Campaign $campaign
16
+ * @access public
17
+ */
18
+ public $campaign;
19
+
20
+ }
lib/contactlab/createCampaignResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class createCampaignResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Campaign $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class createCampaignResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Campaign $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/createMessageModel.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class createMessageModel
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var Message $model
16
- * @access public
17
- */
18
- public $model;
19
-
20
- }
1
+ <?php
2
+
3
+ class createMessageModel
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var Message $model
16
+ * @access public
17
+ */
18
+ public $model;
19
+
20
+ }
lib/contactlab/createMessageModelResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class createMessageModelResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Message $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class createMessageModelResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Message $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findArchivedFiltersBySubscriberSource.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class findArchivedFiltersBySubscriberSource
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $sourceIdentifier
16
- * @access public
17
- */
18
- public $sourceIdentifier;
19
-
20
- /**
21
- *
22
- * @var LookupPreferences $lookupPrefs
23
- * @access public
24
- */
25
- public $lookupPrefs;
26
-
27
- }
1
+ <?php
2
+
3
+ class findArchivedFiltersBySubscriberSource
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $sourceIdentifier
16
+ * @access public
17
+ */
18
+ public $sourceIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var LookupPreferences $lookupPrefs
23
+ * @access public
24
+ */
25
+ public $lookupPrefs;
26
+
27
+ }
lib/contactlab/findArchivedFiltersBySubscriberSourceResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findArchivedFiltersBySubscriberSourceResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var SubscriberSourceFilters $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findArchivedFiltersBySubscriberSourceResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var SubscriberSourceFilters $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findCampaigns.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class findCampaigns
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var channel $channel
16
- * @access public
17
- */
18
- public $channel;
19
-
20
- /**
21
- *
22
- * @var CampaignLookupPreferences $lookupPrefs
23
- * @access public
24
- */
25
- public $lookupPrefs;
26
-
27
- }
1
+ <?php
2
+
3
+ class findCampaigns
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var channel $channel
16
+ * @access public
17
+ */
18
+ public $channel;
19
+
20
+ /**
21
+ *
22
+ * @var CampaignLookupPreferences $lookupPrefs
23
+ * @access public
24
+ */
25
+ public $lookupPrefs;
26
+
27
+ }
lib/contactlab/findCampaignsByModel.php CHANGED
@@ -1,34 +1,34 @@
1
- <?php
2
-
3
- class findCampaignsByModel
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var channel $channel
16
- * @access public
17
- */
18
- public $channel;
19
-
20
- /**
21
- *
22
- * @var int $modelIdentifier
23
- * @access public
24
- */
25
- public $modelIdentifier;
26
-
27
- /**
28
- *
29
- * @var CampaignLookupPreferences $lookupPrefs
30
- * @access public
31
- */
32
- public $lookupPrefs;
33
-
34
- }
1
+ <?php
2
+
3
+ class findCampaignsByModel
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var channel $channel
16
+ * @access public
17
+ */
18
+ public $channel;
19
+
20
+ /**
21
+ *
22
+ * @var int $modelIdentifier
23
+ * @access public
24
+ */
25
+ public $modelIdentifier;
26
+
27
+ /**
28
+ *
29
+ * @var CampaignLookupPreferences $lookupPrefs
30
+ * @access public
31
+ */
32
+ public $lookupPrefs;
33
+
34
+ }
lib/contactlab/findCampaignsByModelResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findCampaignsByModelResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Campaigns $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findCampaignsByModelResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Campaigns $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findCampaignsByNameOrSubject.php CHANGED
@@ -1,34 +1,34 @@
1
- <?php
2
-
3
- class findCampaignsByNameOrSubject
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var channel $channel
16
- * @access public
17
- */
18
- public $channel;
19
-
20
- /**
21
- *
22
- * @var string $nameOrSubject
23
- * @access public
24
- */
25
- public $nameOrSubject;
26
-
27
- /**
28
- *
29
- * @var CampaignLookupPreferences $lookupPrefs
30
- * @access public
31
- */
32
- public $lookupPrefs;
33
-
34
- }
1
+ <?php
2
+
3
+ class findCampaignsByNameOrSubject
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var channel $channel
16
+ * @access public
17
+ */
18
+ public $channel;
19
+
20
+ /**
21
+ *
22
+ * @var string $nameOrSubject
23
+ * @access public
24
+ */
25
+ public $nameOrSubject;
26
+
27
+ /**
28
+ *
29
+ * @var CampaignLookupPreferences $lookupPrefs
30
+ * @access public
31
+ */
32
+ public $lookupPrefs;
33
+
34
+ }
lib/contactlab/findCampaignsByNameOrSubjectResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findCampaignsByNameOrSubjectResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Campaigns $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findCampaignsByNameOrSubjectResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Campaigns $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findCampaignsByNote.php CHANGED
@@ -1,34 +1,34 @@
1
- <?php
2
-
3
- class findCampaignsByNote
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var channel $channel
16
- * @access public
17
- */
18
- public $channel;
19
-
20
- /**
21
- *
22
- * @var CampaignNote $note
23
- * @access public
24
- */
25
- public $note;
26
-
27
- /**
28
- *
29
- * @var CampaignLookupPreferences $lookupPrefs
30
- * @access public
31
- */
32
- public $lookupPrefs;
33
-
34
- }
1
+ <?php
2
+
3
+ class findCampaignsByNote
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var channel $channel
16
+ * @access public
17
+ */
18
+ public $channel;
19
+
20
+ /**
21
+ *
22
+ * @var CampaignNote $note
23
+ * @access public
24
+ */
25
+ public $note;
26
+
27
+ /**
28
+ *
29
+ * @var CampaignLookupPreferences $lookupPrefs
30
+ * @access public
31
+ */
32
+ public $lookupPrefs;
33
+
34
+ }
lib/contactlab/findCampaignsByNoteResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findCampaignsByNoteResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Campaigns $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findCampaignsByNoteResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Campaigns $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findCampaignsByStatus.php CHANGED
@@ -1,34 +1,34 @@
1
- <?php
2
-
3
- class findCampaignsByStatus
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var channel $channel
16
- * @access public
17
- */
18
- public $channel;
19
-
20
- /**
21
- *
22
- * @var deliveryStatus $status
23
- * @access public
24
- */
25
- public $status;
26
-
27
- /**
28
- *
29
- * @var CampaignLookupPreferences $lookupPrefs
30
- * @access public
31
- */
32
- public $lookupPrefs;
33
-
34
- }
1
+ <?php
2
+
3
+ class findCampaignsByStatus
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var channel $channel
16
+ * @access public
17
+ */
18
+ public $channel;
19
+
20
+ /**
21
+ *
22
+ * @var deliveryStatus $status
23
+ * @access public
24
+ */
25
+ public $status;
26
+
27
+ /**
28
+ *
29
+ * @var CampaignLookupPreferences $lookupPrefs
30
+ * @access public
31
+ */
32
+ public $lookupPrefs;
33
+
34
+ }
lib/contactlab/findCampaignsByStatusResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findCampaignsByStatusResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Campaigns $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findCampaignsByStatusResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Campaigns $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findCampaignsResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findCampaignsResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Campaigns $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findCampaignsResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Campaigns $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findCampaignsSentBetween.php CHANGED
@@ -1,41 +1,41 @@
1
- <?php
2
-
3
- class findCampaignsSentBetween
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var channel $channel
16
- * @access public
17
- */
18
- public $channel;
19
-
20
- /**
21
- *
22
- * @var dateTime $periodStart
23
- * @access public
24
- */
25
- public $periodStart;
26
-
27
- /**
28
- *
29
- * @var dateTime $periodEnd
30
- * @access public
31
- */
32
- public $periodEnd;
33
-
34
- /**
35
- *
36
- * @var CampaignLookupPreferences $lookupPrefs
37
- * @access public
38
- */
39
- public $lookupPrefs;
40
-
41
- }
1
+ <?php
2
+
3
+ class findCampaignsSentBetween
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var channel $channel
16
+ * @access public
17
+ */
18
+ public $channel;
19
+
20
+ /**
21
+ *
22
+ * @var dateTime $periodStart
23
+ * @access public
24
+ */
25
+ public $periodStart;
26
+
27
+ /**
28
+ *
29
+ * @var dateTime $periodEnd
30
+ * @access public
31
+ */
32
+ public $periodEnd;
33
+
34
+ /**
35
+ *
36
+ * @var CampaignLookupPreferences $lookupPrefs
37
+ * @access public
38
+ */
39
+ public $lookupPrefs;
40
+
41
+ }
lib/contactlab/findCampaignsSentBetweenResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findCampaignsSentBetweenResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Campaigns $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findCampaignsSentBetweenResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Campaigns $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findFiltersBySubscriberSource.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class findFiltersBySubscriberSource
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $sourceIdentifier
16
- * @access public
17
- */
18
- public $sourceIdentifier;
19
-
20
- /**
21
- *
22
- * @var LookupPreferences $lookupPrefs
23
- * @access public
24
- */
25
- public $lookupPrefs;
26
-
27
- }
1
+ <?php
2
+
3
+ class findFiltersBySubscriberSource
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $sourceIdentifier
16
+ * @access public
17
+ */
18
+ public $sourceIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var LookupPreferences $lookupPrefs
23
+ * @access public
24
+ */
25
+ public $lookupPrefs;
26
+
27
+ }
lib/contactlab/findFiltersBySubscriberSourceResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findFiltersBySubscriberSourceResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var SubscriberSourceFilters $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findFiltersBySubscriberSourceResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var SubscriberSourceFilters $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findMessageModels.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class findMessageModels
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var channel $channel
16
- * @access public
17
- */
18
- public $channel;
19
-
20
- /**
21
- *
22
- * @var LookupPreferences $lookupPrefs
23
- * @access public
24
- */
25
- public $lookupPrefs;
26
-
27
- }
1
+ <?php
2
+
3
+ class findMessageModels
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var channel $channel
16
+ * @access public
17
+ */
18
+ public $channel;
19
+
20
+ /**
21
+ *
22
+ * @var LookupPreferences $lookupPrefs
23
+ * @access public
24
+ */
25
+ public $lookupPrefs;
26
+
27
+ }
lib/contactlab/findMessageModelsBySubscriberSource.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class findMessageModelsBySubscriberSource
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $sourceId
16
- * @access public
17
- */
18
- public $sourceId;
19
-
20
- /**
21
- *
22
- * @var LookupPreferences $lookupPrefs
23
- * @access public
24
- */
25
- public $lookupPrefs;
26
-
27
- }
1
+ <?php
2
+
3
+ class findMessageModelsBySubscriberSource
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $sourceId
16
+ * @access public
17
+ */
18
+ public $sourceId;
19
+
20
+ /**
21
+ *
22
+ * @var LookupPreferences $lookupPrefs
23
+ * @access public
24
+ */
25
+ public $lookupPrefs;
26
+
27
+ }
lib/contactlab/findMessageModelsBySubscriberSourceResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findMessageModelsBySubscriberSourceResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var MessageModels $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findMessageModelsBySubscriberSourceResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var MessageModels $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findMessageModelsResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findMessageModelsResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var MessageModels $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findMessageModelsResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var MessageModels $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findNotesByCampaign.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class findNotesByCampaign
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $campaignIdentifier
16
- * @access public
17
- */
18
- public $campaignIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class findNotesByCampaign
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignIdentifier
16
+ * @access public
17
+ */
18
+ public $campaignIdentifier;
19
+
20
+ }
lib/contactlab/findNotesByCampaignResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findNotesByCampaignResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var CampaignNotes $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findNotesByCampaignResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var CampaignNotes $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findPeriodicCampaigns.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class findPeriodicCampaigns
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var channel $channel
16
- * @access public
17
- */
18
- public $channel;
19
-
20
- /**
21
- *
22
- * @var CampaignLookupPreferences $lookupPrefs
23
- * @access public
24
- */
25
- public $lookupPrefs;
26
-
27
- }
1
+ <?php
2
+
3
+ class findPeriodicCampaigns
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var channel $channel
16
+ * @access public
17
+ */
18
+ public $channel;
19
+
20
+ /**
21
+ *
22
+ * @var CampaignLookupPreferences $lookupPrefs
23
+ * @access public
24
+ */
25
+ public $lookupPrefs;
26
+
27
+ }
lib/contactlab/findPeriodicCampaignsResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findPeriodicCampaignsResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Campaigns $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findPeriodicCampaignsResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Campaigns $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findSubscriberSources.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class findSubscriberSources
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var LookupPreferences $lookupPrefs
16
- * @access public
17
- */
18
- public $lookupPrefs;
19
-
20
- }
1
+ <?php
2
+
3
+ class findSubscriberSources
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var LookupPreferences $lookupPrefs
16
+ * @access public
17
+ */
18
+ public $lookupPrefs;
19
+
20
+ }
lib/contactlab/findSubscriberSourcesResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findSubscriberSourcesResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var SubscriberSources $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findSubscriberSourcesResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var SubscriberSources $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findSubscribers.php CHANGED
@@ -1,34 +1,34 @@
1
- <?php
2
-
3
- class findSubscribers
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $sourceIdentifier
16
- * @access public
17
- */
18
- public $sourceIdentifier;
19
-
20
- /**
21
- *
22
- * @var SubscriberAttribute $attribute
23
- * @access public
24
- */
25
- public $attribute;
26
-
27
- /**
28
- *
29
- * @var LookupPreferences $lookupPrefs
30
- * @access public
31
- */
32
- public $lookupPrefs;
33
-
34
- }
1
+ <?php
2
+
3
+ class findSubscribers
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $sourceIdentifier
16
+ * @access public
17
+ */
18
+ public $sourceIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var SubscriberAttribute $attribute
23
+ * @access public
24
+ */
25
+ public $attribute;
26
+
27
+ /**
28
+ *
29
+ * @var LookupPreferences $lookupPrefs
30
+ * @access public
31
+ */
32
+ public $lookupPrefs;
33
+
34
+ }
lib/contactlab/findSubscribersIncludedInFilter.php CHANGED
@@ -1,34 +1,34 @@
1
- <?php
2
-
3
- class findSubscribersIncludedInFilter
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $sourceIdentifier
16
- * @access public
17
- */
18
- public $sourceIdentifier;
19
-
20
- /**
21
- *
22
- * @var int $filterIdentifier
23
- * @access public
24
- */
25
- public $filterIdentifier;
26
-
27
- /**
28
- *
29
- * @var LookupPreferences $lookupPrefs
30
- * @access public
31
- */
32
- public $lookupPrefs;
33
-
34
- }
1
+ <?php
2
+
3
+ class findSubscribersIncludedInFilter
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $sourceIdentifier
16
+ * @access public
17
+ */
18
+ public $sourceIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var int $filterIdentifier
23
+ * @access public
24
+ */
25
+ public $filterIdentifier;
26
+
27
+ /**
28
+ *
29
+ * @var LookupPreferences $lookupPrefs
30
+ * @access public
31
+ */
32
+ public $lookupPrefs;
33
+
34
+ }
lib/contactlab/findSubscribersIncludedInFilterResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findSubscribersIncludedInFilterResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Subscribers $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findSubscribersIncludedInFilterResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Subscribers $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findSubscribersResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findSubscribersResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Subscribers $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findSubscribersResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Subscribers $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/findTriggerableCampaigns.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class findTriggerableCampaigns
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var channel $channel
16
- * @access public
17
- */
18
- public $channel;
19
-
20
- /**
21
- *
22
- * @var CampaignLookupPreferences $lookupPrefs
23
- * @access public
24
- */
25
- public $lookupPrefs;
26
-
27
- }
1
+ <?php
2
+
3
+ class findTriggerableCampaigns
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var channel $channel
16
+ * @access public
17
+ */
18
+ public $channel;
19
+
20
+ /**
21
+ *
22
+ * @var CampaignLookupPreferences $lookupPrefs
23
+ * @access public
24
+ */
25
+ public $lookupPrefs;
26
+
27
+ }
lib/contactlab/findTriggerableCampaignsResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class findTriggerableCampaignsResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Campaigns $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class findTriggerableCampaignsResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Campaigns $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getArchivedSubscriberSourceFilter.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class getArchivedSubscriberSourceFilter
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $filterIdentifier
16
- * @access public
17
- */
18
- public $filterIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class getArchivedSubscriberSourceFilter
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $filterIdentifier
16
+ * @access public
17
+ */
18
+ public $filterIdentifier;
19
+
20
+ }
lib/contactlab/getArchivedSubscriberSourceFilterResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getArchivedSubscriberSourceFilterResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var SubscriberSourceFilter $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getArchivedSubscriberSourceFilterResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var SubscriberSourceFilter $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getAttachmentByCampaignId.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class getAttachmentByCampaignId
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $campaignIdentifier
16
- * @access public
17
- */
18
- public $campaignIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class getAttachmentByCampaignId
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignIdentifier
16
+ * @access public
17
+ */
18
+ public $campaignIdentifier;
19
+
20
+ }
lib/contactlab/getAttachmentByCampaignIdResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getAttachmentByCampaignIdResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Attachment $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getAttachmentByCampaignIdResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Attachment $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getAvailableCommunicationCategories.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getAvailableCommunicationCategories
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- }
1
+ <?php
2
+
3
+ class getAvailableCommunicationCategories
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ }
lib/contactlab/getAvailableCommunicationCategoriesResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getAvailableCommunicationCategoriesResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var CommunicationCategory $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getAvailableCommunicationCategoriesResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var CommunicationCategory $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getCampaign.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class getCampaign
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $campaignIdentifier
16
- * @access public
17
- */
18
- public $campaignIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class getCampaign
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignIdentifier
16
+ * @access public
17
+ */
18
+ public $campaignIdentifier;
19
+
20
+ }
lib/contactlab/getCampaignDeliveryStatus.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class getCampaignDeliveryStatus
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $campaignIdentifier
16
- * @access public
17
- */
18
- public $campaignIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class getCampaignDeliveryStatus
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignIdentifier
16
+ * @access public
17
+ */
18
+ public $campaignIdentifier;
19
+
20
+ }
lib/contactlab/getCampaignDeliveryStatusResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getCampaignDeliveryStatusResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var deliveryStatus $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getCampaignDeliveryStatusResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var deliveryStatus $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getCampaignFeedback.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class getCampaignFeedback
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $campaignIdentifier
16
- * @access public
17
- */
18
- public $campaignIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class getCampaignFeedback
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignIdentifier
16
+ * @access public
17
+ */
18
+ public $campaignIdentifier;
19
+
20
+ }
lib/contactlab/getCampaignFeedbackResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getCampaignFeedbackResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var CampaignFeedback $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getCampaignFeedbackResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var CampaignFeedback $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getCampaignResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getCampaignResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Campaign $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getCampaignResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Campaign $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getCryptoKey.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class getCryptoKey
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var string $recipient
16
- * @access public
17
- */
18
- public $recipient;
19
-
20
- }
1
+ <?php
2
+
3
+ class getCryptoKey
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var string $recipient
16
+ * @access public
17
+ */
18
+ public $recipient;
19
+
20
+ }
lib/contactlab/getCryptoKeyResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getCryptoKeyResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var string $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getCryptoKeyResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getMessageModelById.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class getMessageModelById
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $modelId
16
- * @access public
17
- */
18
- public $modelId;
19
-
20
- }
1
+ <?php
2
+
3
+ class getMessageModelById
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $modelId
16
+ * @access public
17
+ */
18
+ public $modelId;
19
+
20
+ }
lib/contactlab/getMessageModelByIdResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getMessageModelByIdResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Message $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getMessageModelByIdResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Message $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getRequestStatus.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class getRequestStatus
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $requestIdentifier
16
- * @access public
17
- */
18
- public $requestIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class getRequestStatus
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $requestIdentifier
16
+ * @access public
17
+ */
18
+ public $requestIdentifier;
19
+
20
+ }
lib/contactlab/getRequestStatusResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getRequestStatusResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var ActivityStatus $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getRequestStatusResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var ActivityStatus $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getSubscriber.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class getSubscriber
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $sourceIdentifier
16
- * @access public
17
- */
18
- public $sourceIdentifier;
19
-
20
- /**
21
- *
22
- * @var int $subscriberIdentifier
23
- * @access public
24
- */
25
- public $subscriberIdentifier;
26
-
27
- }
1
+ <?php
2
+
3
+ class getSubscriber
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $sourceIdentifier
16
+ * @access public
17
+ */
18
+ public $sourceIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var int $subscriberIdentifier
23
+ * @access public
24
+ */
25
+ public $subscriberIdentifier;
26
+
27
+ }
lib/contactlab/getSubscriberDataExchangeStatus.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class getSubscriberDataExchangeStatus
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $dataExchangeConfigIdentifier
16
- * @access public
17
- */
18
- public $dataExchangeConfigIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class getSubscriberDataExchangeStatus
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $dataExchangeConfigIdentifier
16
+ * @access public
17
+ */
18
+ public $dataExchangeConfigIdentifier;
19
+
20
+ }
lib/contactlab/getSubscriberDataExchangeStatusResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getSubscriberDataExchangeStatusResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var ActivityStatus $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getSubscriberDataExchangeStatusResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var ActivityStatus $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getSubscriberResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getSubscriberResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var Subscriber $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getSubscriberResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var Subscriber $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getSubscriberSource.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class getSubscriberSource
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $sourceIdentifier
16
- * @access public
17
- */
18
- public $sourceIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class getSubscriberSource
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $sourceIdentifier
16
+ * @access public
17
+ */
18
+ public $sourceIdentifier;
19
+
20
+ }
lib/contactlab/getSubscriberSourceFilter.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class getSubscriberSourceFilter
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $filterIdentifier
16
- * @access public
17
- */
18
- public $filterIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class getSubscriberSourceFilter
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $filterIdentifier
16
+ * @access public
17
+ */
18
+ public $filterIdentifier;
19
+
20
+ }
lib/contactlab/getSubscriberSourceFilterResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getSubscriberSourceFilterResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var SubscriberSourceFilter $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getSubscriberSourceFilterResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var SubscriberSourceFilter $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getSubscriberSourceResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getSubscriberSourceResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var SubscriberSource $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getSubscriberSourceResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var SubscriberSource $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getTrackedLinks.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class getTrackedLinks
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $campaignId
16
- * @access public
17
- */
18
- public $campaignId;
19
-
20
- /**
21
- *
22
- * @var int $categoryId
23
- * @access public
24
- */
25
- public $categoryId;
26
-
27
- }
1
+ <?php
2
+
3
+ class getTrackedLinks
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignId
16
+ * @access public
17
+ */
18
+ public $campaignId;
19
+
20
+ /**
21
+ *
22
+ * @var int $categoryId
23
+ * @access public
24
+ */
25
+ public $categoryId;
26
+
27
+ }
lib/contactlab/getTrackedLinksResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getTrackedLinksResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var TrackedLink $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getTrackedLinksResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var TrackedLink $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getXMLDeliveries.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class getXMLDeliveries
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var xmlDeliveryStatusType $xmlDeliveryStatus
16
- * @access public
17
- */
18
- public $xmlDeliveryStatus;
19
-
20
- /**
21
- *
22
- * @var LookupPreferences $lookupPrefs
23
- * @access public
24
- */
25
- public $lookupPrefs;
26
-
27
- }
1
+ <?php
2
+
3
+ class getXMLDeliveries
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var xmlDeliveryStatusType $xmlDeliveryStatus
16
+ * @access public
17
+ */
18
+ public $xmlDeliveryStatus;
19
+
20
+ /**
21
+ *
22
+ * @var LookupPreferences $lookupPrefs
23
+ * @access public
24
+ */
25
+ public $lookupPrefs;
26
+
27
+ }
lib/contactlab/getXMLDeliveriesResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getXMLDeliveriesResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var XMLDeliveryInfos $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getXMLDeliveriesResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var XMLDeliveryInfos $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/getXMLDeliveryTransitions.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class getXMLDeliveryTransitions
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $xmlDeliveryId
16
- * @access public
17
- */
18
- public $xmlDeliveryId;
19
-
20
- }
1
+ <?php
2
+
3
+ class getXMLDeliveryTransitions
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $xmlDeliveryId
16
+ * @access public
17
+ */
18
+ public $xmlDeliveryId;
19
+
20
+ }
lib/contactlab/getXMLDeliveryTransitionsResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class getXMLDeliveryTransitionsResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var xmlDeliveryTransitionInfo $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class getXMLDeliveryTransitionsResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var xmlDeliveryTransitionInfo $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/invalidateToken.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class invalidateToken
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- }
1
+ <?php
2
+
3
+ class invalidateToken
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ }
lib/contactlab/invalidateTokenResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class invalidateTokenResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var boolean $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class invalidateTokenResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var boolean $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/keepaliveToken.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class keepaliveToken
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- }
1
+ <?php
2
+
3
+ class keepaliveToken
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ }
lib/contactlab/keepaliveTokenResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class keepaliveTokenResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var boolean $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class keepaliveTokenResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var boolean $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/modifySubscriberSubscriptionStatus.php CHANGED
@@ -1,34 +1,34 @@
1
- <?php
2
-
3
- class modifySubscriberSubscriptionStatus
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var string $webFormCode
16
- * @access public
17
- */
18
- public $webFormCode;
19
-
20
- /**
21
- *
22
- * @var int $subscriberIdentifier
23
- * @access public
24
- */
25
- public $subscriberIdentifier;
26
-
27
- /**
28
- *
29
- * @var boolean $isSubscribed
30
- * @access public
31
- */
32
- public $isSubscribed;
33
-
34
- }
1
+ <?php
2
+
3
+ class modifySubscriberSubscriptionStatus
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var string $webFormCode
16
+ * @access public
17
+ */
18
+ public $webFormCode;
19
+
20
+ /**
21
+ *
22
+ * @var int $subscriberIdentifier
23
+ * @access public
24
+ */
25
+ public $subscriberIdentifier;
26
+
27
+ /**
28
+ *
29
+ * @var boolean $isSubscribed
30
+ * @access public
31
+ */
32
+ public $isSubscribed;
33
+
34
+ }
lib/contactlab/modifySubscriberSubscriptionStatusByMailqId.php CHANGED
@@ -1,41 +1,41 @@
1
- <?php
2
-
3
- class modifySubscriberSubscriptionStatusByMailqId
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var string $webFormCode
16
- * @access public
17
- */
18
- public $webFormCode;
19
-
20
- /**
21
- *
22
- * @var int $subscriberIdentifier
23
- * @access public
24
- */
25
- public $subscriberIdentifier;
26
-
27
- /**
28
- *
29
- * @var int $mailqId
30
- * @access public
31
- */
32
- public $mailqId;
33
-
34
- /**
35
- *
36
- * @var boolean $isSubscribed
37
- * @access public
38
- */
39
- public $isSubscribed;
40
-
41
- }
1
+ <?php
2
+
3
+ class modifySubscriberSubscriptionStatusByMailqId
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var string $webFormCode
16
+ * @access public
17
+ */
18
+ public $webFormCode;
19
+
20
+ /**
21
+ *
22
+ * @var int $subscriberIdentifier
23
+ * @access public
24
+ */
25
+ public $subscriberIdentifier;
26
+
27
+ /**
28
+ *
29
+ * @var int $mailqId
30
+ * @access public
31
+ */
32
+ public $mailqId;
33
+
34
+ /**
35
+ *
36
+ * @var boolean $isSubscribed
37
+ * @access public
38
+ */
39
+ public $isSubscribed;
40
+
41
+ }
lib/contactlab/modifySubscriberSubscriptionStatusByMailqIdResponse.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
-
3
- class modifySubscriberSubscriptionStatusByMailqIdResponse
4
- {
5
-
6
- }
1
+ <?php
2
+
3
+ class modifySubscriberSubscriptionStatusByMailqIdResponse
4
+ {
5
+
6
+ }
lib/contactlab/modifySubscriberSubscriptionStatusResponse.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
-
3
- class modifySubscriberSubscriptionStatusResponse
4
- {
5
-
6
- }
1
+ <?php
2
+
3
+ class modifySubscriberSubscriptionStatusResponse
4
+ {
5
+
6
+ }
lib/contactlab/publishOnWeb.php CHANGED
@@ -1,48 +1,48 @@
1
- <?php
2
-
3
- class publishOnWeb
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $campaignIdentifier
16
- * @access public
17
- */
18
- public $campaignIdentifier;
19
-
20
- /**
21
- *
22
- * @var int $testCampaignIdentifier
23
- * @access public
24
- */
25
- public $testCampaignIdentifier;
26
-
27
- /**
28
- *
29
- * @var string $fileName
30
- * @access public
31
- */
32
- public $fileName;
33
-
34
- /**
35
- *
36
- * @var base64Binary $content
37
- * @access public
38
- */
39
- public $content;
40
-
41
- /**
42
- *
43
- * @var boolean $overwrite
44
- * @access public
45
- */
46
- public $overwrite;
47
-
48
- }
1
+ <?php
2
+
3
+ class publishOnWeb
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignIdentifier
16
+ * @access public
17
+ */
18
+ public $campaignIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var int $testCampaignIdentifier
23
+ * @access public
24
+ */
25
+ public $testCampaignIdentifier;
26
+
27
+ /**
28
+ *
29
+ * @var string $fileName
30
+ * @access public
31
+ */
32
+ public $fileName;
33
+
34
+ /**
35
+ *
36
+ * @var base64Binary $content
37
+ * @access public
38
+ */
39
+ public $content;
40
+
41
+ /**
42
+ *
43
+ * @var boolean $overwrite
44
+ * @access public
45
+ */
46
+ public $overwrite;
47
+
48
+ }
lib/contactlab/publishOnWebResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class publishOnWebResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var string $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class publishOnWebResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/removeSubscriber.php CHANGED
@@ -1,27 +1,27 @@
1
- <?php
2
-
3
- class removeSubscriber
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $sourceIdentifier
16
- * @access public
17
- */
18
- public $sourceIdentifier;
19
-
20
- /**
21
- *
22
- * @var int $recipientIdentifier
23
- * @access public
24
- */
25
- public $recipientIdentifier;
26
-
27
- }
1
+ <?php
2
+
3
+ class removeSubscriber
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $sourceIdentifier
16
+ * @access public
17
+ */
18
+ public $sourceIdentifier;
19
+
20
+ /**
21
+ *
22
+ * @var int $recipientIdentifier
23
+ * @access public
24
+ */
25
+ public $recipientIdentifier;
26
+
27
+ }
lib/contactlab/removeSubscriberResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class removeSubscriberResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var boolean $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class removeSubscriberResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var boolean $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/requestCampaignFeedbackReport.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class requestCampaignFeedbackReport
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $campaignIdentifier
16
- * @access public
17
- */
18
- public $campaignIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class requestCampaignFeedbackReport
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignIdentifier
16
+ * @access public
17
+ */
18
+ public $campaignIdentifier;
19
+
20
+ }
lib/contactlab/requestCampaignFeedbackReportResponse.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
-
3
- class requestCampaignFeedbackReportResponse
4
- {
5
-
6
- }
1
+ <?php
2
+
3
+ class requestCampaignFeedbackReportResponse
4
+ {
5
+
6
+ }
lib/contactlab/reuseSubscriberSourceFilter.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class reuseSubscriberSourceFilter
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $filterIdentifier
16
- * @access public
17
- */
18
- public $filterIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class reuseSubscriberSourceFilter
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $filterIdentifier
16
+ * @access public
17
+ */
18
+ public $filterIdentifier;
19
+
20
+ }
lib/contactlab/reuseSubscriberSourceFilterResponse.php CHANGED
@@ -1,6 +1,6 @@
1
- <?php
2
-
3
- class reuseSubscriberSourceFilterResponse
4
- {
5
-
6
- }
1
+ <?php
2
+
3
+ class reuseSubscriberSourceFilterResponse
4
+ {
5
+
6
+ }
lib/contactlab/sendCampaign.php CHANGED
@@ -1,20 +1,20 @@
1
- <?php
2
-
3
- class sendCampaign
4
- {
5
-
6
- /**
7
- *
8
- * @var AuthToken $token
9
- * @access public
10
- */
11
- public $token;
12
-
13
- /**
14
- *
15
- * @var int $campaignIdentifier
16
- * @access public
17
- */
18
- public $campaignIdentifier;
19
-
20
- }
1
+ <?php
2
+
3
+ class sendCampaign
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var AuthToken $token
9
+ * @access public
10
+ */
11
+ public $token;
12
+
13
+ /**
14
+ *
15
+ * @var int $campaignIdentifier
16
+ * @access public
17
+ */
18
+ public $campaignIdentifier;
19
+
20
+ }
lib/contactlab/sendCampaignResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class sendCampaignResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var int $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class sendCampaignResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/sendImmediateMessage.php CHANGED
@@ -1,34 +1,34 @@
1
- <?php
2
-
3
- class sendImmediateMessage
4
- {
5
-
6
- /**
7
- *
8
- * @var string $apiKey
9
- * @access public
10
- */
11
- public $apiKey;
12
-
13
- /**
14
- *
15
- * @var string $userKey
16
- * @access public
17
- */
18
- public $userKey;
19
-
20
- /**
21
- *
22
- * @var int $campaignIdentifier
23
- * @access public
24
- */
25
- public $campaignIdentifier;
26
-
27
- /**
28
- *
29
- * @var Subscriber $userData
30
- * @access public
31
- */
32
- public $userData;
33
-
34
- }
1
+ <?php
2
+
3
+ class sendImmediateMessage
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $apiKey
9
+ * @access public
10
+ */
11
+ public $apiKey;
12
+
13
+ /**
14
+ *
15
+ * @var string $userKey
16
+ * @access public
17
+ */
18
+ public $userKey;
19
+
20
+ /**
21
+ *
22
+ * @var int $campaignIdentifier
23
+ * @access public
24
+ */
25
+ public $campaignIdentifier;
26
+
27
+ /**
28
+ *
29
+ * @var Subscriber $userData
30
+ * @access public
31
+ */
32
+ public $userData;
33
+
34
+ }
lib/contactlab/sendImmediateMessageResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class sendImmediateMessageResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var int $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/sendImmediateMessageSDataCData.php CHANGED
@@ -1,34 +1,34 @@
1
- <?php
2
-
3
- class sendImmediateMessageSDataCData
4
- {
5
-
6
- /**
7
- *
8
- * @var string $apiKey
9
- * @access public
10
- */
11
- public $apiKey;
12
-
13
- /**
14
- *
15
- * @var string $userKey
16
- * @access public
17
- */
18
- public $userKey;
19
-
20
- /**
21
- *
22
- * @var Campaign $campaign
23
- * @access public
24
- */
25
- public $campaign;
26
-
27
- /**
28
- *
29
- * @var Subscriber $userData
30
- * @access public
31
- */
32
- public $userData;
33
-
34
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSDataCData
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $apiKey
9
+ * @access public
10
+ */
11
+ public $apiKey;
12
+
13
+ /**
14
+ *
15
+ * @var string $userKey
16
+ * @access public
17
+ */
18
+ public $userKey;
19
+
20
+ /**
21
+ *
22
+ * @var Campaign $campaign
23
+ * @access public
24
+ */
25
+ public $campaign;
26
+
27
+ /**
28
+ *
29
+ * @var Subscriber $userData
30
+ * @access public
31
+ */
32
+ public $userData;
33
+
34
+ }
lib/contactlab/sendImmediateMessageSDataCDataCA.php CHANGED
@@ -1,48 +1,48 @@
1
- <?php
2
-
3
- class sendImmediateMessageSDataCDataCA
4
- {
5
-
6
- /**
7
- *
8
- * @var string $apiKey
9
- * @access public
10
- */
11
- public $apiKey;
12
-
13
- /**
14
- *
15
- * @var string $userKey
16
- * @access public
17
- */
18
- public $userKey;
19
-
20
- /**
21
- *
22
- * @var Campaign $campaign
23
- * @access public
24
- */
25
- public $campaign;
26
-
27
- /**
28
- *
29
- * @var Subscriber $userData
30
- * @access public
31
- */
32
- public $userData;
33
-
34
- /**
35
- *
36
- * @var boolean $includeDefaultAttachments
37
- * @access public
38
- */
39
- public $includeDefaultAttachments;
40
-
41
- /**
42
- *
43
- * @var Attachment $attachments
44
- * @access public
45
- */
46
- public $attachments;
47
-
48
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSDataCDataCA
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $apiKey
9
+ * @access public
10
+ */
11
+ public $apiKey;
12
+
13
+ /**
14
+ *
15
+ * @var string $userKey
16
+ * @access public
17
+ */
18
+ public $userKey;
19
+
20
+ /**
21
+ *
22
+ * @var Campaign $campaign
23
+ * @access public
24
+ */
25
+ public $campaign;
26
+
27
+ /**
28
+ *
29
+ * @var Subscriber $userData
30
+ * @access public
31
+ */
32
+ public $userData;
33
+
34
+ /**
35
+ *
36
+ * @var boolean $includeDefaultAttachments
37
+ * @access public
38
+ */
39
+ public $includeDefaultAttachments;
40
+
41
+ /**
42
+ *
43
+ * @var Attachment $attachments
44
+ * @access public
45
+ */
46
+ public $attachments;
47
+
48
+ }
lib/contactlab/sendImmediateMessageSDataCDataCAResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class sendImmediateMessageSDataCDataCAResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var int $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSDataCDataCAResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/sendImmediateMessageSDataCDataResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class sendImmediateMessageSDataCDataResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var int $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSDataCDataResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/sendImmediateMessageSDataCIdCA.php CHANGED
@@ -1,48 +1,48 @@
1
- <?php
2
-
3
- class sendImmediateMessageSDataCIdCA
4
- {
5
-
6
- /**
7
- *
8
- * @var string $apiKey
9
- * @access public
10
- */
11
- public $apiKey;
12
-
13
- /**
14
- *
15
- * @var string $userKey
16
- * @access public
17
- */
18
- public $userKey;
19
-
20
- /**
21
- *
22
- * @var int $campaignIdentifier
23
- * @access public
24
- */
25
- public $campaignIdentifier;
26
-
27
- /**
28
- *
29
- * @var Subscriber $userData
30
- * @access public
31
- */
32
- public $userData;
33
-
34
- /**
35
- *
36
- * @var boolean $includeDefaultAttachments
37
- * @access public
38
- */
39
- public $includeDefaultAttachments;
40
-
41
- /**
42
- *
43
- * @var Attachment $attachments
44
- * @access public
45
- */
46
- public $attachments;
47
-
48
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSDataCIdCA
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $apiKey
9
+ * @access public
10
+ */
11
+ public $apiKey;
12
+
13
+ /**
14
+ *
15
+ * @var string $userKey
16
+ * @access public
17
+ */
18
+ public $userKey;
19
+
20
+ /**
21
+ *
22
+ * @var int $campaignIdentifier
23
+ * @access public
24
+ */
25
+ public $campaignIdentifier;
26
+
27
+ /**
28
+ *
29
+ * @var Subscriber $userData
30
+ * @access public
31
+ */
32
+ public $userData;
33
+
34
+ /**
35
+ *
36
+ * @var boolean $includeDefaultAttachments
37
+ * @access public
38
+ */
39
+ public $includeDefaultAttachments;
40
+
41
+ /**
42
+ *
43
+ * @var Attachment $attachments
44
+ * @access public
45
+ */
46
+ public $attachments;
47
+
48
+ }
lib/contactlab/sendImmediateMessageSDataCIdCAResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class sendImmediateMessageSDataCIdCAResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var int $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSDataCIdCAResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/sendImmediateMessageSIdCData.php CHANGED
@@ -1,41 +1,41 @@
1
- <?php
2
-
3
- class sendImmediateMessageSIdCData
4
- {
5
-
6
- /**
7
- *
8
- * @var string $apiKey
9
- * @access public
10
- */
11
- public $apiKey;
12
-
13
- /**
14
- *
15
- * @var string $userKey
16
- * @access public
17
- */
18
- public $userKey;
19
-
20
- /**
21
- *
22
- * @var Campaign $campaign
23
- * @access public
24
- */
25
- public $campaign;
26
-
27
- /**
28
- *
29
- * @var int $sourceIdentifier
30
- * @access public
31
- */
32
- public $sourceIdentifier;
33
-
34
- /**
35
- *
36
- * @var int $subscriberIdentifier
37
- * @access public
38
- */
39
- public $subscriberIdentifier;
40
-
41
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSIdCData
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $apiKey
9
+ * @access public
10
+ */
11
+ public $apiKey;
12
+
13
+ /**
14
+ *
15
+ * @var string $userKey
16
+ * @access public
17
+ */
18
+ public $userKey;
19
+
20
+ /**
21
+ *
22
+ * @var Campaign $campaign
23
+ * @access public
24
+ */
25
+ public $campaign;
26
+
27
+ /**
28
+ *
29
+ * @var int $sourceIdentifier
30
+ * @access public
31
+ */
32
+ public $sourceIdentifier;
33
+
34
+ /**
35
+ *
36
+ * @var int $subscriberIdentifier
37
+ * @access public
38
+ */
39
+ public $subscriberIdentifier;
40
+
41
+ }
lib/contactlab/sendImmediateMessageSIdCDataCA.php CHANGED
@@ -1,55 +1,55 @@
1
- <?php
2
-
3
- class sendImmediateMessageSIdCDataCA
4
- {
5
-
6
- /**
7
- *
8
- * @var string $apiKey
9
- * @access public
10
- */
11
- public $apiKey;
12
-
13
- /**
14
- *
15
- * @var string $userKey
16
- * @access public
17
- */
18
- public $userKey;
19
-
20
- /**
21
- *
22
- * @var Campaign $campaign
23
- * @access public
24
- */
25
- public $campaign;
26
-
27
- /**
28
- *
29
- * @var int $sourceIdentifier
30
- * @access public
31
- */
32
- public $sourceIdentifier;
33
-
34
- /**
35
- *
36
- * @var int $subscriberIdentifier
37
- * @access public
38
- */
39
- public $subscriberIdentifier;
40
-
41
- /**
42
- *
43
- * @var boolean $includeDefaultAttachments
44
- * @access public
45
- */
46
- public $includeDefaultAttachments;
47
-
48
- /**
49
- *
50
- * @var Attachment $attachments
51
- * @access public
52
- */
53
- public $attachments;
54
-
55
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSIdCDataCA
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $apiKey
9
+ * @access public
10
+ */
11
+ public $apiKey;
12
+
13
+ /**
14
+ *
15
+ * @var string $userKey
16
+ * @access public
17
+ */
18
+ public $userKey;
19
+
20
+ /**
21
+ *
22
+ * @var Campaign $campaign
23
+ * @access public
24
+ */
25
+ public $campaign;
26
+
27
+ /**
28
+ *
29
+ * @var int $sourceIdentifier
30
+ * @access public
31
+ */
32
+ public $sourceIdentifier;
33
+
34
+ /**
35
+ *
36
+ * @var int $subscriberIdentifier
37
+ * @access public
38
+ */
39
+ public $subscriberIdentifier;
40
+
41
+ /**
42
+ *
43
+ * @var boolean $includeDefaultAttachments
44
+ * @access public
45
+ */
46
+ public $includeDefaultAttachments;
47
+
48
+ /**
49
+ *
50
+ * @var Attachment $attachments
51
+ * @access public
52
+ */
53
+ public $attachments;
54
+
55
+ }
lib/contactlab/sendImmediateMessageSIdCDataCAResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class sendImmediateMessageSIdCDataCAResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var int $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSIdCDataCAResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/sendImmediateMessageSIdCDataResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class sendImmediateMessageSIdCDataResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var int $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSIdCDataResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/sendImmediateMessageSdataCAl.php CHANGED
@@ -1,34 +1,34 @@
1
- <?php
2
-
3
- class sendImmediateMessageSdataCAl
4
- {
5
-
6
- /**
7
- *
8
- * @var string $apiKey
9
- * @access public
10
- */
11
- public $apiKey;
12
-
13
- /**
14
- *
15
- * @var string $userKey
16
- * @access public
17
- */
18
- public $userKey;
19
-
20
- /**
21
- *
22
- * @var string $campaignAlias
23
- * @access public
24
- */
25
- public $campaignAlias;
26
-
27
- /**
28
- *
29
- * @var Subscriber $userData
30
- * @access public
31
- */
32
- public $userData;
33
-
34
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSdataCAl
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $apiKey
9
+ * @access public
10
+ */
11
+ public $apiKey;
12
+
13
+ /**
14
+ *
15
+ * @var string $userKey
16
+ * @access public
17
+ */
18
+ public $userKey;
19
+
20
+ /**
21
+ *
22
+ * @var string $campaignAlias
23
+ * @access public
24
+ */
25
+ public $campaignAlias;
26
+
27
+ /**
28
+ *
29
+ * @var Subscriber $userData
30
+ * @access public
31
+ */
32
+ public $userData;
33
+
34
+ }
lib/contactlab/sendImmediateMessageSdataCAlCA.php CHANGED
@@ -1,48 +1,48 @@
1
- <?php
2
-
3
- class sendImmediateMessageSdataCAlCA
4
- {
5
-
6
- /**
7
- *
8
- * @var string $apiKey
9
- * @access public
10
- */
11
- public $apiKey;
12
-
13
- /**
14
- *
15
- * @var string $userKey
16
- * @access public
17
- */
18
- public $userKey;
19
-
20
- /**
21
- *
22
- * @var string $campaignAlias
23
- * @access public
24
- */
25
- public $campaignAlias;
26
-
27
- /**
28
- *
29
- * @var Subscriber $userData
30
- * @access public
31
- */
32
- public $userData;
33
-
34
- /**
35
- *
36
- * @var boolean $includeDefaultAttachments
37
- * @access public
38
- */
39
- public $includeDefaultAttachments;
40
-
41
- /**
42
- *
43
- * @var Attachment $attachments
44
- * @access public
45
- */
46
- public $attachments;
47
-
48
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSdataCAlCA
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $apiKey
9
+ * @access public
10
+ */
11
+ public $apiKey;
12
+
13
+ /**
14
+ *
15
+ * @var string $userKey
16
+ * @access public
17
+ */
18
+ public $userKey;
19
+
20
+ /**
21
+ *
22
+ * @var string $campaignAlias
23
+ * @access public
24
+ */
25
+ public $campaignAlias;
26
+
27
+ /**
28
+ *
29
+ * @var Subscriber $userData
30
+ * @access public
31
+ */
32
+ public $userData;
33
+
34
+ /**
35
+ *
36
+ * @var boolean $includeDefaultAttachments
37
+ * @access public
38
+ */
39
+ public $includeDefaultAttachments;
40
+
41
+ /**
42
+ *
43
+ * @var Attachment $attachments
44
+ * @access public
45
+ */
46
+ public $attachments;
47
+
48
+ }
lib/contactlab/sendImmediateMessageSdataCAlCAResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class sendImmediateMessageSdataCAlCAResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var int $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSdataCAlCAResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/sendImmediateMessageSdataCAlResponse.php CHANGED
@@ -1,13 +1,13 @@
1
- <?php
2
-
3
- class sendImmediateMessageSdataCAlResponse
4
- {
5
-
6
- /**
7
- *
8
- * @var int $return
9
- * @access public
10
- */
11
- public $return;
12
-
13
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSdataCAlResponse
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var int $return
9
+ * @access public
10
+ */
11
+ public $return;
12
+
13
+ }
lib/contactlab/sendImmediateMessageSidCAl.php CHANGED
@@ -1,41 +1,41 @@
1
- <?php
2
-
3
- class sendImmediateMessageSidCAl
4
- {
5
-
6
- /**
7
- *
8
- * @var string $apiKey
9
- * @access public
10
- */
11
- public $apiKey;
12
-
13
- /**
14
- *
15
- * @var string $userKey
16
- * @access public
17
- */
18
- public $userKey;
19
-
20
- /**
21
- *
22
- * @var string $campaignAlias
23
- * @access public
24
- */
25
- public $campaignAlias;
26
-
27
- /**
28
- *
29
- * @var int $sourceIdentifier
30
- * @access public
31
- */
32
- public $sourceIdentifier;
33
-
34
- /**
35
- *
36
- * @var int $subscriberIdentifier
37
- * @access public
38
- */
39
- public $subscriberIdentifier;
40
-
41
- }
1
+ <?php
2
+
3
+ class sendImmediateMessageSidCAl
4
+ {
5
+
6
+ /**
7
+ *
8
+ * @var string $apiKey
9
+ * @access public
10
+ */
11
+ public $apiKey;
12
+
13
+ /**
14
+ *
15
+ * @var string $userKey
16
+ * @access public
17
+ */
18
+ public $userKey;
19
+
20
+ /**
21
+ *
22
+ * @var string $campaignAlias
23
+ * @access public
24
+ */
25
+ public $campaignAlias;
26
+
27
+ /**
28
+ *
29
+ * @var int $sourceIdentifier
30
+ * @access public
31
+ */
32
+ public $sourceIdentifier;
33
+
34
+ /**
35
+ *
36
+ * @var int $subscriberIdentifier
37
+ * @access public
38
+ */
39
+ public $subscriberIdentifier;
40
+
41
+ }