smartslider3 - Version 3.0.37

Version Notes

No notes

Download this release

Release Info

Developer Nextendweb.com
Extension smartslider3
Version 3.0.37
Comparing to
See all releases


Version 3.0.37

Files changed (329) hide show
  1. app/code/community/Nextend2/Nextend2/Helper/Data.php +5 -0
  2. app/code/community/Nextend2/Nextend2/Model/Observer.php +30 -0
  3. app/code/community/Nextend2/Nextend2/Model/Resource/Setup.php +6 -0
  4. app/code/community/Nextend2/Nextend2/controllers/Adminhtml/Nextend2Controller.php +38 -0
  5. app/code/community/Nextend2/Nextend2/etc/adminhtml.xml +21 -0
  6. app/code/community/Nextend2/Nextend2/etc/config.xml +66 -0
  7. app/code/community/Nextend2/Nextend2/sql/nextend2_setup/mysql4-install-1.0.0.php +15 -0
  8. app/code/community/Nextend2/SmartSlider3/Block/Slider.php +14 -0
  9. app/code/community/Nextend2/SmartSlider3/Helper/Data.php +5 -0
  10. app/code/community/Nextend2/SmartSlider3/Model/Observer.php +104 -0
  11. app/code/community/Nextend2/SmartSlider3/Model/Resource/Setup.php +5 -0
  12. app/code/community/Nextend2/SmartSlider3/Model/Sliders.php +26 -0
  13. app/code/community/Nextend2/SmartSlider3/controllers/Adminhtml/Smartslider3Controller.php +33 -0
  14. app/code/community/Nextend2/SmartSlider3/etc/adminhtml.xml +28 -0
  15. app/code/community/Nextend2/SmartSlider3/etc/config.xml +88 -0
  16. app/code/community/Nextend2/SmartSlider3/etc/system.xml +4 -0
  17. app/code/community/Nextend2/SmartSlider3/etc/widget.xml +16 -0
  18. app/code/community/Nextend2/SmartSlider3/library/magento/N2SmartsliderApplicationInfoFilter.php +13 -0
  19. app/code/community/Nextend2/SmartSlider3/library/magento/backend/inline/publish.phtml +23 -0
  20. app/code/community/Nextend2/SmartSlider3/library/magento/init.php +19 -0
  21. app/code/community/Nextend2/SmartSlider3/library/magento/install.php +4 -0
  22. app/code/community/Nextend2/SmartSlider3/library/magento/libraries/slider/slider.php +20 -0
  23. app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/loadplugin.php +10 -0
  24. app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/magento/magento.php +31 -0
  25. app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/magento/product/config.xml +46 -0
  26. app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/magento/product/element/magentoattributesets.php +23 -0
  27. app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/magento/product/element/magentocategories.php +30 -0
  28. app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/magento/product/element/magentoproducttypes.php +23 -0
  29. app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/magento/product/generator.php +113 -0
  30. app/code/community/Nextend2/SmartSlider3/library/magento/plugins/loadplugin.php +11 -0
  31. app/code/community/Nextend2/SmartSlider3/library/smartslider/N2SmartsliderApplication.php +27 -0
  32. app/code/community/Nextend2/SmartSlider3/library/smartslider/N2SmartsliderApplicationInfo.php +158 -0
  33. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/N2SmartsliderApplicationTypeBackend.php +25 -0
  34. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Backgroundanimation.php +25 -0
  35. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Generator.php +203 -0
  36. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Install.php +20 -0
  37. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Layout.php +32 -0
  38. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/License.php +1 -0
  39. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Preview.php +82 -0
  40. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Settings.php +87 -0
  41. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Slider.php +119 -0
  42. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Sliders.php +198 -0
  43. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Slides.php +148 -0
  44. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Update.php +43 -0
  45. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Backgroundanimation.php +21 -0
  46. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Generator.php +149 -0
  47. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Guide.php +19 -0
  48. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Layout.php +16 -0
  49. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Settings.php +17 -0
  50. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Slider.php +213 -0
  51. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Slides.php +372 -0
  52. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/helpers/controller/N2SmartSliderController.php +56 -0
  53. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/_sidebar_settings.phtml +36 -0
  54. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/_sidebar_slide.phtml +100 -0
  55. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/_sliders.phtml +253 -0
  56. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/font.phtml +6 -0
  57. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/sidebar/backgroundanimation.phtml +17 -0
  58. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/sidebar/layout.phtml +51 -0
  59. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/slidemanager.phtml +57 -0
  60. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/default.phtml +66 -0
  61. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/full.phtml +46 -0
  62. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/lightbox.phtml +2 -0
  63. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/preview.phtml +10 -0
  64. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/sidebar.phtml +8 -0
  65. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/backgroundanimation/index.phtml +105 -0
  66. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/backgroundanimation/topbar.phtml +17 -0
  67. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/defaults/noaccess.phtml +7 -0
  68. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/_view.php +180 -0
  69. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/check_configuration.phtml +35 -0
  70. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/create.phtml +58 -0
  71. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/create_settings.phtml +61 -0
  72. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/edit.phtml +111 -0
  73. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/layout/index.phtml +2 -0
  74. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/layout/topbar.phtml +2 -0
  75. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/_preview.phtml +149 -0
  76. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/_view.php +16 -0
  77. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/generator.phtml +5 -0
  78. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/index.phtml +3 -0
  79. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/slide.phtml +21 -0
  80. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/settings/_view.php +53 -0
  81. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/settings/cache.phtml +29 -0
  82. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/settings/default.phtml +24 -0
  83. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/settings/defaults.phtml +22 -0
  84. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/_slider_edit.phtml +154 -0
  85. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/_view.php +117 -0
  86. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/cachedslider.phtml +51 -0
  87. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/edit.phtml +7 -0
  88. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/_view.php +25 -0
  89. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/importByUpload.phtml +36 -0
  90. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/importFromServer.phtml +34 -0
  91. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/index.phtml +179 -0
  92. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/restoreByUpload.phtml +36 -0
  93. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/restoreFromServer.phtml +35 -0
  94. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slides/_view.php +6 -0
  95. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slides/edit.phtml +286 -0
  96. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slides/slidebox.phtml +2 -0
  97. app/code/community/Nextend2/SmartSlider3/library/smartslider/form/element/backgroundanimation.php +35 -0
  98. app/code/community/Nextend2/SmartSlider3/library/smartslider/form/element/sliderwidgetarea.php +36 -0
  99. app/code/community/Nextend2/SmartSlider3/library/smartslider/form/element/widgetpluginmatrix.php +63 -0
  100. app/code/community/Nextend2/SmartSlider3/library/smartslider/form/element/widgetposition.php +138 -0
  101. app/code/community/Nextend2/SmartSlider3/library/smartslider/languages/de_DE.mo +0 -0
  102. app/code/community/Nextend2/SmartSlider3/library/smartslider/languages/es_ES.mo +0 -0
  103. app/code/community/Nextend2/SmartSlider3/library/smartslider/languages/hu_HU.mo +0 -0
  104. app/code/community/Nextend2/SmartSlider3/library/smartslider/languages/it_IT.mo +0 -0
  105. app/code/community/Nextend2/SmartSlider3/library/smartslider/languages/ru_RU.mo +0 -0
  106. app/code/community/Nextend2/SmartSlider3/library/smartslider/languages/zh_TW.mo +0 -0
  107. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/backgroundanimation/manager.php +26 -0
  108. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/backgroundanimation/storage.php +73 -0
  109. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/backup.php +11 -0
  110. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/export.php +396 -0
  111. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/import.php +208 -0
  112. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/layout/storage.php +73 -0
  113. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/link.php +74 -0
  114. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/plugins/N2SliderGeneratorPluginAbstract.php +66 -0
  115. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/plugins/N2SliderItemAbstract.php +209 -0
  116. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/plugins/N2SliderWidgetAbstract.php +99 -0
  117. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/settings/settings.php +34 -0
  118. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/abstract.php +293 -0
  119. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/backend.php +16 -0
  120. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/cache/generator.php +36 -0
  121. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/cache/slider.php +67 -0
  122. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/css.php +85 -0
  123. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/align.php +57 -0
  124. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/autoplay.php +84 -0
  125. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/blockrightclick.php +21 -0
  126. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/controls.php +38 -0
  127. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/fadeonload.php +100 -0
  128. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/features.php +181 -0
  129. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/layermode.php +61 -0
  130. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/lazyload.php +52 -0
  131. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/maintainsession.php +21 -0
  132. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/margin.php +29 -0
  133. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/optimize.php +50 -0
  134. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/responsive.php +445 -0
  135. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/slidebackground.php +284 -0
  136. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/spinner.php +371 -0
  137. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/translateUrl.php +26 -0
  138. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/generator/abstract.php +66 -0
  139. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/helper.php +33 -0
  140. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/manager.php +71 -0
  141. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/generator.php +108 -0
  142. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/item.php +145 -0
  143. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/layer.php +317 -0
  144. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/slide.php +510 -0
  145. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/slides.php +193 -0
  146. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/slidesadmin.php +207 -0
  147. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/type.php +68 -0
  148. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/widget/widgets.php +351 -0
  149. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/storage.php +1934 -0
  150. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Ajax.php +55 -0
  151. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Install.php +68 -0
  152. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Item.php +20 -0
  153. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Layers.php +21 -0
  154. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/License.php +71 -0
  155. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Modules.php +13 -0
  156. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/ModulesMenu.php +12 -0
  157. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Settings.php +91 -0
  158. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Sliders.php +276 -0
  159. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Slides.php +686 -0
  160. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Update.php +86 -0
  161. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/backgroundanimation.php +20 -0
  162. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/backgroundanimation/sets.xml +5 -0
  163. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/halign.php +30 -0
  164. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/items.php +32 -0
  165. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/layerpicker.php +15 -0
  166. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/sliderresponsive.php +37 -0
  167. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/slidertype.php +76 -0
  168. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/valign.php +30 -0
  169. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/generator_edit.xml +12 -0
  170. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/import/restore.xml +6 -0
  171. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/import/restorefromserver.xml +13 -0
  172. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/import/server.xml +7 -0
  173. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/import/upload.xml +6 -0
  174. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/layer.xml +62 -0
  175. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/layout/sets.xml +5 -0
  176. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/license.xml +6 -0
  177. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/multigenerator.xml +12 -0
  178. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/settings/default.xml +103 -0
  179. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/settings/joomla.xml +12 -0
  180. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/slide.xml +64 -0
  181. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/slide_generator.xml +7 -0
  182. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/slider.xml +125 -0
  183. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/translateurl.xml +8 -0
  184. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/generator.php +357 -0
  185. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/generator/loadplugin.php +10 -0
  186. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/button/button.php +138 -0
  187. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/button/button/configuration.xml +21 -0
  188. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/heading/heading.php +163 -0
  189. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/heading/heading/configuration.xml +21 -0
  190. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/image/image.php +131 -0
  191. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/image/image/configuration.xml +13 -0
  192. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/loadplugin.php +10 -0
  193. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/text/text.php +276 -0
  194. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/text/text/configuration.xml +20 -0
  195. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/vimeo/vimeo.php +83 -0
  196. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/vimeo/vimeo/configuration.xml +20 -0
  197. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/youtube/youtube.php +127 -0
  198. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/youtube/youtube/configuration.xml +36 -0
  199. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/loadplugin.php +10 -0
  200. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/auto/auto.php +40 -0
  201. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/auto/auto/responsive.xml +23 -0
  202. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/fullwidth/fullwidth.php +65 -0
  203. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/fullwidth/fullwidth/responsive.xml +63 -0
  204. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/loadplugin.php +10 -0
  205. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/loadplugin.php +10 -0
  206. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple.php +18 -0
  207. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/backup.php +22 -0
  208. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/css.php +51 -0
  209. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/slide.xml +17 -0
  210. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/slider.xml +26 -0
  211. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/type.php +207 -0
  212. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/arrow/arrow.php +21 -0
  213. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/arrow/arrow/config.xml +8 -0
  214. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/autoplay/autoplay.php +21 -0
  215. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/autoplay/autoplay/config.xml +8 -0
  216. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/bar/bar.php +21 -0
  217. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/bar/bar/config.xml +8 -0
  218. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/bullet/bullet.php +21 -0
  219. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/bullet/bullet/config.xml +24 -0
  220. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/loadplugin.php +10 -0
  221. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/shadow/shadow.php +21 -0
  222. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/shadow/shadow/config.xml +6 -0
  223. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/thumbnail/thumbnail.php +21 -0
  224. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/thumbnail/thumbnail/config.xml +16 -0
  225. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetarrow/image/image.php +263 -0
  226. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetarrow/image/image/config.xml +14 -0
  227. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetarrow/loadplugin.php +10 -0
  228. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetautoplay/image/image.php +156 -0
  229. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetautoplay/image/image/config.xml +11 -0
  230. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetautoplay/loadplugin.php +10 -0
  231. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbar/horizontal/horizontal.php +146 -0
  232. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbar/horizontal/horizontal/config.xml +26 -0
  233. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbar/loadplugin.php +10 -0
  234. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbullet/loadplugin.php +10 -0
  235. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbullet/transition/transition.php +156 -0
  236. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbullet/transition/transition/config.xml +11 -0
  237. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetshadow/loadplugin.php +10 -0
  238. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetshadow/shadow/shadow.php +95 -0
  239. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetshadow/shadow/shadow/config.xml +6 -0
  240. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetthumbnail/default/default.php +335 -0
  241. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetthumbnail/default/default/config.xml +44 -0
  242. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetthumbnail/loadplugin.php +10 -0
  243. app/code/community/Nextend2/SmartSlider3/library/smartslider/smartslider3.php +102 -0
  244. app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/N2SmartsliderApplicationTypeWidget.php +26 -0
  245. app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/controllers/Home.php +38 -0
  246. app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/layouts/default.phtml +4 -0
  247. app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/views/home/magento.phtml +5 -0
  248. app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/views/home/native.phtml +1 -0
  249. app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/views/home/wordpress.phtml +1 -0
  250. app/code/community/Nextend2/SmartSlider3/sql/smartslider3_setup/mysql4-install-1.0.0.php +18 -0
  251. app/code/community/Nextend2/library/applications/system/N2SystemApplication.php +15 -0
  252. app/code/community/Nextend2/library/applications/system/N2SystemApplicationInfo.php +45 -0
  253. app/code/community/Nextend2/library/applications/system/backend/N2SystemApplicationTypeBackend.php +14 -0
  254. app/code/community/Nextend2/library/applications/system/backend/controllers/Animation.php +22 -0
  255. app/code/community/Nextend2/library/applications/system/backend/controllers/Browse.php +19 -0
  256. app/code/community/Nextend2/library/applications/system/backend/controllers/Dashboard.php +13 -0
  257. app/code/community/Nextend2/library/applications/system/backend/controllers/Font.php +22 -0
  258. app/code/community/Nextend2/library/applications/system/backend/controllers/Help.php +12 -0
  259. app/code/community/Nextend2/library/applications/system/backend/controllers/Image.php +26 -0
  260. app/code/community/Nextend2/library/applications/system/backend/controllers/Install.php +20 -0
  261. app/code/community/Nextend2/library/applications/system/backend/controllers/Login.php +3 -0
  262. app/code/community/Nextend2/library/applications/system/backend/controllers/Settings.php +87 -0
  263. app/code/community/Nextend2/library/applications/system/backend/controllers/Style.php +23 -0
  264. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Animation.php +10 -0
  265. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Aviary.php +69 -0
  266. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Browse.php +448 -0
  267. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Content.php +13 -0
  268. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Font.php +10 -0
  269. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Image.php +109 -0
  270. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Link.php +13 -0
  271. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Style.php +11 -0
  272. app/code/community/Nextend2/library/applications/system/backend/helpers/controllers/VisualManager.php +86 -0
  273. app/code/community/Nextend2/library/applications/system/backend/helpers/controllers/VisualManagerAjax.php +185 -0
  274. app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/animation.phtml +34 -0
  275. app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/font.phtml +34 -0
  276. app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/image.phtml +0 -0
  277. app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/settings.phtml +30 -0
  278. app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/style.phtml +34 -0
  279. app/code/community/Nextend2/library/applications/system/backend/layouts/default.phtml +59 -0
  280. app/code/community/Nextend2/library/applications/system/backend/layouts/full.phtml +63 -0
  281. app/code/community/Nextend2/library/applications/system/backend/layouts/fulllightbox.phtml +37 -0
  282. app/code/community/Nextend2/library/applications/system/backend/layouts/lightbox.phtml +35 -0
  283. app/code/community/Nextend2/library/applications/system/backend/layouts/modal.phtml +35 -0
  284. app/code/community/Nextend2/library/applications/system/backend/views/animation/index.phtml +104 -0
  285. app/code/community/Nextend2/library/applications/system/backend/views/animation/topbar.phtml +17 -0
  286. app/code/community/Nextend2/library/applications/system/backend/views/dashboard/index.phtml +25 -0
  287. app/code/community/Nextend2/library/applications/system/backend/views/defaults/noaccess.phtml +1 -0
  288. app/code/community/Nextend2/library/applications/system/backend/views/font/index.phtml +102 -0
  289. app/code/community/Nextend2/library/applications/system/backend/views/font/topbar.phtml +27 -0
  290. app/code/community/Nextend2/library/applications/system/backend/views/help/index.phtml +21 -0
  291. app/code/community/Nextend2/library/applications/system/backend/views/image/index.phtml +12 -0
  292. app/code/community/Nextend2/library/applications/system/backend/views/image/topbar.phtml +17 -0
  293. app/code/community/Nextend2/library/applications/system/backend/views/login/index.phtml +18 -0
  294. app/code/community/Nextend2/library/applications/system/backend/views/settings/_view.php +83 -0
  295. app/code/community/Nextend2/library/applications/system/backend/views/settings/aviary.phtml +57 -0
  296. app/code/community/Nextend2/library/applications/system/backend/views/settings/fonts.phtml +21 -0
  297. app/code/community/Nextend2/library/applications/system/backend/views/settings/index.phtml +16 -0
  298. app/code/community/Nextend2/library/applications/system/backend/views/style/index.phtml +99 -0
  299. app/code/community/Nextend2/library/applications/system/backend/views/style/topbar.phtml +27 -0
  300. app/code/community/Nextend2/library/applications/system/models/Install.php +40 -0
  301. app/code/community/Nextend2/library/applications/system/models/animation.php +23 -0
  302. app/code/community/Nextend2/library/applications/system/models/font.php +23 -0
  303. app/code/community/Nextend2/library/applications/system/models/forms/animation/extra.xml +65 -0
  304. app/code/community/Nextend2/library/applications/system/models/forms/animation/form.xml +63 -0
  305. app/code/community/Nextend2/library/applications/system/models/forms/animation/sets.xml +5 -0
  306. app/code/community/Nextend2/library/applications/system/models/forms/aviary.xml +7 -0
  307. app/code/community/Nextend2/library/applications/system/models/forms/font/element/decoration.php +36 -0
  308. app/code/community/Nextend2/library/applications/system/models/forms/font/element/family.php +19 -0
  309. app/code/community/Nextend2/library/applications/system/models/forms/font/element/fontpreset.php +26 -0
  310. app/code/community/Nextend2/library/applications/system/models/forms/font/element/textalign.php +31 -0
  311. app/code/community/Nextend2/library/applications/system/models/forms/font/extra.xml +6 -0
  312. app/code/community/Nextend2/library/applications/system/models/forms/font/form.xml +42 -0
  313. app/code/community/Nextend2/library/applications/system/models/forms/font/sets.xml +5 -0
  314. app/code/community/Nextend2/library/applications/system/models/forms/fonts.xml +12 -0
  315. app/code/community/Nextend2/library/applications/system/models/forms/globalconfig.xml +19 -0
  316. app/code/community/Nextend2/library/applications/system/models/forms/image/form.xml +73 -0
  317. app/code/community/Nextend2/library/applications/system/models/forms/login.xml +7 -0
  318. app/code/community/Nextend2/library/applications/system/models/forms/style/extra.xml +6 -0
  319. app/code/community/Nextend2/library/applications/system/models/forms/style/form.xml +58 -0
  320. app/code/community/Nextend2/library/applications/system/models/forms/style/sets.xml +5 -0
  321. app/code/community/Nextend2/library/applications/system/models/image.php +50 -0
  322. app/code/community/Nextend2/library/applications/system/models/login.php +19 -0
  323. app/code/community/Nextend2/library/applications/system/models/style.php +23 -0
  324. app/code/community/Nextend2/library/applications/system/models/visual.php +109 -0
  325. app/code/community/Nextend2/library/applications/system/plugins/loadplugin.php +10 -0
  326. app/code/community/Nextend2/library/applications/system/plugins/nextendfontservices/google/google.php +809 -0
  327. app/code/community/Nextend2/library/applications/system/plugins/nextendfontservices/google/google/config.xml +37 -0
  328. app/code/community/Nextend2/library/applications/system/plugins/nextendfontservices/loadplugin.php +10 -0
  329. app/code/community/Nextend2/library/cacert.pem +890 -0
app/code/community/Nextend2/Nextend2/Helper/Data.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+
3
+ class Nextend2_Nextend2_Helper_Data extends Mage_Core_Helper_Abstract {
4
+
5
+ }
app/code/community/Nextend2/Nextend2/Model/Observer.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Nextend2_Nextend2_Model_Observer
4
+ {
5
+
6
+ public function onPageCache($observer){
7
+ if(Mage::app()->useCache('full_page')){
8
+ $frontController = $observer->getEvent()->getFront();
9
+ $this->buildCSSJS($frontController);
10
+ }
11
+ }
12
+
13
+ public function buildCSSJS($observer) {
14
+ /** @var Mage_Core_Controller_Response_Http $response */
15
+ $response = $observer->getResponse();
16
+ Mage::dispatchEvent('n2_http_response_send_before', array('response' => $response));
17
+
18
+ if (class_exists('N2AssetsManager', false)) {
19
+ ob_start();
20
+ if (class_exists('N2AssetsManager')) {
21
+ echo N2AssetsManager::getCSS();
22
+ echo N2AssetsManager::getJs();
23
+ }
24
+
25
+ $head = ob_get_clean();
26
+ $response->setBody(preg_replace('/<\/head>/', $head . '</head>', $response->getBody(), 1));
27
+ }
28
+ }
29
+
30
+ }
app/code/community/Nextend2/Nextend2/Model/Resource/Setup.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Nextend2_Nextend2_Model_Resource_Setup extends Mage_Core_Model_Resource_Setup
4
+ {
5
+
6
+ }
app/code/community/Nextend2/Nextend2/controllers/Adminhtml/Nextend2Controller.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Nextend2_Nextend2_Adminhtml_Nextend2Controller extends Mage_Adminhtml_Controller_Action
4
+ {
5
+
6
+
7
+ public function initNextend() {
8
+ require_once(Mage::getBaseDir("app") . '/code/community/Nextend2/magento/library.php');
9
+ }
10
+
11
+
12
+ public function indexAction() {
13
+ $this->initNextend();
14
+
15
+
16
+ if ($this->getRequest()
17
+ ->getParam('nextendajax', 0)
18
+ ) {
19
+ $controller = 'dashboard';
20
+ $action = 'index';
21
+ N2Base::getApplication("system")
22
+ ->getApplicationType('backend')
23
+ ->setCurrent()
24
+ ->render(array(
25
+ "controller" => $controller,
26
+ "action" => $action
27
+ ));
28
+ } else {
29
+ $this->loadLayout();
30
+ $this->renderLayout();
31
+ }
32
+ }
33
+
34
+ protected function _isAllowed(){
35
+ return Mage::getSingleton('admin/session')->isAllowed('admin/nextend2_nextend2');
36
+ }
37
+
38
+ }
app/code/community/Nextend2/Nextend2/etc/adminhtml.xml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <config>
3
+ <acl>
4
+ <resources>
5
+ <admin>
6
+ <children>
7
+ <nextend2_nextend2 translate="title" module="nextend2_nextend2">
8
+ <title>Nextend2 Library</title>
9
+ <sort_order>-100</sort_order>
10
+ <children>
11
+ <index translate="title">
12
+ <title>Index Action</title>
13
+ <sort_order>1</sort_order>
14
+ </index>
15
+ </children>
16
+ </nextend2_nextend2>
17
+ </children>
18
+ </admin>
19
+ </resources>
20
+ </acl>
21
+ </config>
app/code/community/Nextend2/Nextend2/etc/config.xml ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Nextend2_Nextend2>
5
+ <version>2.0.21</version>
6
+ </Nextend2_Nextend2>
7
+ </modules>
8
+ <admin>
9
+ <routers>
10
+ <adminhtml>
11
+ <args>
12
+ <modules>
13
+ <nextend2 before="Mage_Adminhtml">Nextend2_Nextend2_Adminhtml</nextend2>
14
+ </modules>
15
+ </args>
16
+ </adminhtml>
17
+ </routers>
18
+ </admin>
19
+ <adminhtml>
20
+ <layout>
21
+ <updates>
22
+ <nextend2>
23
+ <file>nextend2.xml</file>
24
+ </nextend2>
25
+ </updates>
26
+ </layout>
27
+ </adminhtml>
28
+ <global>
29
+ <helpers>
30
+ <nextend2_nextend2>
31
+ <class>Nextend2_Nextend2_Helper</class>
32
+ </nextend2_nextend2>
33
+ </helpers>
34
+ <models>
35
+ <nextend2>
36
+ <class>Nextend2_Nextend2_Model</class>
37
+ </nextend2>
38
+ </models>
39
+ <events>
40
+ <controller_front_send_response_before>
41
+ <observers>
42
+ <nextend2_pagecache>
43
+ <class>Nextend2_Nextend2_Model_Observer</class>
44
+ <method>onPageCache</method>
45
+ </nextend2_pagecache>
46
+ </observers>
47
+ </controller_front_send_response_before>
48
+ <http_response_send_before>
49
+ <observers>
50
+ <nextend2_css_js>
51
+ <class>Nextend2_Nextend2_Model_Observer</class>
52
+ <method>buildCSSJS</method>
53
+ </nextend2_css_js>
54
+ </observers>
55
+ </http_response_send_before>
56
+ </events>
57
+ <resources>
58
+ <nextend2_setup>
59
+ <setup>
60
+ <module>Nextend2_Nextend2</module>
61
+ <class>Nextend2_Nextend2_Model_Resource_Setup</class>
62
+ </setup>
63
+ </nextend2_setup>
64
+ </resources>
65
+ </global>
66
+ </config>
app/code/community/Nextend2/Nextend2/sql/nextend2_setup/mysql4-install-1.0.0.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ function nextend_install($installer){
3
+ $installer->startSetup();
4
+
5
+ defined('NEXTEND_INSTALL') || define('NEXTEND_INSTALL', true);
6
+ require_once(dirname(__FILE__) . '/../../../magento/library.php');
7
+ N2Base::getApplication("system")->getApplicationType('backend')->render(array(
8
+ "controller" => "install",
9
+ "action" => "index"
10
+ ), array(true));
11
+
12
+ $installer->endSetup();
13
+
14
+ }
15
+ nextend_install($this);
app/code/community/Nextend2/SmartSlider3/Block/Slider.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Nextend2_SmartSlider3_Block_Slider extends Mage_Core_Block_Abstract implements Mage_Widget_Block_Interface
4
+ {
5
+
6
+ protected function _toHtml() {
7
+ $sliderId = intval($this->getData('slider'));
8
+ if ($sliderId > 0) {
9
+ return 'smartslider3[' . $sliderId . ']';
10
+ }
11
+ return '';
12
+ }
13
+
14
+ }
app/code/community/Nextend2/SmartSlider3/Helper/Data.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+
3
+ class Nextend2_SmartSlider3_Helper_Data extends Mage_Core_Helper_Abstract {
4
+
5
+ }
app/code/community/Nextend2/SmartSlider3/Model/Observer.php ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Nextend2_SmartSlider3_Model_Observer
4
+ {
5
+
6
+ static $sliders = array();
7
+
8
+ private static $products = array();
9
+ private static $categories = array();
10
+
11
+ function buildCSS() {
12
+ if (count(self::$sliders)) {
13
+ foreach (self::$sliders AS $callable) {
14
+ if (is_callable($callable)) {
15
+ call_user_func($callable);
16
+ } else {
17
+ $css = NextendCss::getInstance();
18
+ foreach (self::$sliders AS $id) {
19
+ $css->generateCSS($id);
20
+ }
21
+ }
22
+ }
23
+ }
24
+ }
25
+
26
+ public function nextendLoaded() {
27
+ require_once(Mage::getBaseDir("app") . '/code/community/Nextend2/SmartSlider3/library/magento/init.php');
28
+ }
29
+
30
+ function shortcode($observer) {
31
+ if (Mage::app()
32
+ ->getStore()
33
+ ->isAdmin()
34
+ ) {
35
+ return;
36
+ }
37
+ /** @var Mage_Core_Controller_Response_Http $response */
38
+ $response = $observer->getResponse();
39
+
40
+ $body = $response->getBody();
41
+ //var_dump(strpos($body, 'smartslider3'));exit;
42
+
43
+
44
+ // Simple performance check to determine whether bot should process further
45
+ if (strpos($body, 'smartslider3[') === false) {
46
+ return;
47
+ }
48
+ $parts = explode('<body', $body);
49
+ $parts[1] = preg_replace_callback('/smartslider3\[([0-9]+)\]/', 'Nextend2_SmartSlider3_Model_Observer::prepare', $parts[1]);
50
+ $response->setBody(implode('<body', $parts));
51
+ }
52
+
53
+ public static function prepare($matches) {
54
+ require_once(Mage::getBaseDir("app") . '/code/community/Nextend2/magento/library.php');
55
+ ob_start();
56
+ nextend_smartslider3($matches[1]);
57
+
58
+ return preg_replace_callback('/\[([a-z_]+) ([0-9]+)\]/', array(
59
+ 'Nextend2_SmartSlider3_Model_Observer',
60
+ 'makeUrl'
61
+ ), ob_get_clean());
62
+ }
63
+
64
+ public static function makeUrl($out) {
65
+ $id = intval($out[2]);
66
+ if ($id) {
67
+ switch ($out[1]) {
68
+ case 'url':
69
+ return self::getProduct($id)
70
+ ->getProductUrl();
71
+ break;
72
+ case 'addtocart':
73
+ return Mage::helper('checkout/cart')
74
+ ->getAddUrl(self::getProduct($id));
75
+ break;
76
+ case 'wishlist_url':
77
+ return Mage::helper('wishlist')
78
+ ->getAddUrl(self::getProduct($id));
79
+ break;
80
+ case 'category_url':
81
+ return self::getCategory($id)
82
+ ->getUrl();
83
+ break;
84
+ }
85
+ }
86
+ return '#';
87
+ }
88
+
89
+ private static function getProduct($id) {
90
+ if (!isset(self::$products[$id])) {
91
+ self::$products[$id] = Mage::getModel('catalog/product')
92
+ ->load($id);
93
+ }
94
+ return self::$products[$id];
95
+ }
96
+
97
+ private static function getCategory($id) {
98
+ if (!isset(self::$categories[$id])) {
99
+ self::$categories[$id] = Mage::getModel('catalog/category')
100
+ ->load($id);
101
+ }
102
+ return self::$categories[$id];
103
+ }
104
+ }
app/code/community/Nextend2/SmartSlider3/Model/Resource/Setup.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+
3
+ class Nextend2_SmartSlider3_Model_Resource_Setup extends Mage_Core_Model_Resource_Setup {
4
+
5
+ }
app/code/community/Nextend2/SmartSlider3/Model/Sliders.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Nextend2_SmartSlider3_Model_Sliders
4
+ {
5
+
6
+ public function toOptionArray() {
7
+ require_once(Mage::getBaseDir("app") . '/code/community/Nextend2/magento/library.php');
8
+
9
+ N2Loader::import(array(
10
+ 'models.Sliders'
11
+ ), 'smartslider');
12
+
13
+ $slidersModel = new N2SmartsliderSlidersModel();
14
+ $sliders = $slidersModel->getAll();
15
+
16
+ $return = array();
17
+ foreach ($sliders AS $slider) {
18
+ $return[] = array(
19
+ 'value' => $slider['id'],
20
+ 'label' => $slider['title'] . ' [#' . $slider['id'] . ']'
21
+ );
22
+ }
23
+
24
+ return $return;
25
+ }
26
+ }
app/code/community/Nextend2/SmartSlider3/controllers/Adminhtml/Smartslider3Controller.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Nextend2_SmartSlider3_Adminhtml_Smartslider3Controller extends Mage_Adminhtml_Controller_Action
4
+ {
5
+
6
+ public function initNextend() {
7
+ require_once(Mage::getBaseDir("app") . '/code/community/Nextend2/magento/library.php');
8
+ }
9
+
10
+
11
+ public function indexAction() {
12
+ $this->initNextend();
13
+ $request = $this->getRequest();
14
+ if ($request->getParam('nextendajax', 0) || $request->getParam('download', 0)) {
15
+ $controller = 'sliders';
16
+ $action = 'index';
17
+ N2Base::getApplication("smartslider")
18
+ ->getApplicationType('backend')
19
+ ->setCurrent()
20
+ ->render(array(
21
+ "controller" => $controller,
22
+ "action" => $action
23
+ ));
24
+ } else {
25
+ $this->loadLayout();
26
+ $this->renderLayout();
27
+ }
28
+ }
29
+
30
+ protected function _isAllowed(){
31
+ return Mage::getSingleton('admin/session')->isAllowed('admin/nextend2_smartslider3');
32
+ }
33
+ }
app/code/community/Nextend2/SmartSlider3/etc/adminhtml.xml ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <menu>
4
+ <nextend2_smartslider3 translate="title" module="nextend2smartslider3">
5
+ <title>Smart Slider 3</title>
6
+ <sort_order>86</sort_order>
7
+ <action>adminhtml/smartslider3/index</action>
8
+ </nextend2_smartslider3>
9
+ </menu>
10
+ <acl>
11
+ <resources>
12
+ <admin>
13
+ <children>
14
+ <nextend2_smartslider3 translate="title" module="nextend2smartslider3">
15
+ <title>Smart Slider 3</title>
16
+ <sort_order>-100</sort_order>
17
+ <children>
18
+ <index translate="title">
19
+ <title>Index Action</title>
20
+ <sort_order>1</sort_order>
21
+ </index>
22
+ </children>
23
+ </nextend2_smartslider3>
24
+ </children>
25
+ </admin>
26
+ </resources>
27
+ </acl>
28
+ </config>
app/code/community/Nextend2/SmartSlider3/etc/config.xml ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Nextend2_SmartSlider3>
5
+ <version>3.0.37</version>
6
+ </Nextend2_SmartSlider3>
7
+ </modules>
8
+ <global>
9
+ <blocks>
10
+ <nextend2smartslider3>
11
+ <class>Nextend2_SmartSlider3_Block</class>
12
+ </nextend2smartslider3>
13
+ </blocks>
14
+ <helpers>
15
+ <nextend2smartslider3>
16
+ <class>Nextend2_SmartSlider3_Helper</class>
17
+ </nextend2smartslider3>
18
+ </helpers>
19
+ <models>
20
+ <nextend2smartslider3>
21
+ <class>Nextend2_SmartSlider3_Model</class>
22
+ </nextend2smartslider3>
23
+ </models>
24
+ <events>
25
+ <n2_http_response_send_before>
26
+ <observers>
27
+ <nextend2_shortcode>
28
+ <class>Nextend2_SmartSlider3_Model_Observer</class>
29
+ <method>shortcode</method>
30
+ </nextend2_shortcode>
31
+ </observers>
32
+ </n2_http_response_send_before>
33
+
34
+ <nextend_loaded>
35
+ <observers>
36
+ <nextend_loaded_smartslider3>
37
+ <class>Nextend2_SmartSlider3_Model_Observer</class>
38
+ <method>nextendLoaded</method>
39
+ </nextend_loaded_smartslider3>
40
+ </observers>
41
+ </nextend_loaded>
42
+ </events>
43
+ <resources>
44
+ <smartslider3_setup>
45
+ <setup>
46
+ <module>Nextend2_SmartSlider3</module>
47
+ <class>Nextend2_SmartSlider3_Model_Resource_Setup</class>
48
+ </setup>
49
+ </smartslider3_setup>
50
+ </resources>
51
+ </global>
52
+ <admin>
53
+ <routers>
54
+ <adminhtml>
55
+ <args>
56
+ <modules>
57
+ <smartslider3 before="Mage_Adminhtml">Nextend2_SmartSlider3_Adminhtml</smartslider3>
58
+ </modules>
59
+ </args>
60
+ </adminhtml>
61
+ </routers>
62
+ </admin>
63
+ <adminhtml>
64
+ <layout>
65
+ <updates>
66
+ <smartslider3>
67
+ <file>smartslider3.xml</file>
68
+ </smartslider3>
69
+ </updates>
70
+ </layout>
71
+ <acl>
72
+ <resources>
73
+ <admin>
74
+ <children>
75
+ <nextend2smartslider3>
76
+ <title>Smart Slider 3</title>
77
+ <children>
78
+ <sliders translate="title">
79
+ <title>Smart Slider 3 access</title>
80
+ </sliders>
81
+ </children>
82
+ </nextend2smartslider3>
83
+ </children>
84
+ </admin>
85
+ </resources>
86
+ </acl>
87
+ </adminhtml>
88
+ </config>
app/code/community/Nextend2/SmartSlider3/etc/system.xml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+
4
+ </config>
app/code/community/Nextend2/SmartSlider3/etc/widget.xml ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <widgets>
3
+ <smartslider3 type="nextend2smartslider3/slider">
4
+ <name>Smart Slider 3</name>
5
+ <description type="desc"></description>
6
+ <parameters>
7
+ <slider>
8
+ <label>Slider</label>
9
+ <visible>1</visible>
10
+ <required>1</required>
11
+ <type>select</type>
12
+ <source_model>nextend2smartslider3/sliders</source_model>
13
+ </slider>
14
+ </parameters>
15
+ </smartslider3>
16
+ </widgets>
app/code/community/Nextend2/SmartSlider3/library/magento/N2SmartsliderApplicationInfoFilter.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderApplicationInfoFilter
4
+ {
5
+
6
+ /**
7
+ * @param $info N2ApplicationInfo
8
+ */
9
+ public static function filter($info) {
10
+ $info->setAssetsPath(Mage::getBaseDir('media') . '/smartslider3/media');
11
+ $info->setUrl(Mage::helper("adminhtml")->getUrl("adminhtml/smartslider3/index"));
12
+ }
13
+ }
app/code/community/Nextend2/SmartSlider3/library/magento/backend/inline/publish.phtml ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="n2-table n2-table-fixed n2-ss-slider-publish">
2
+ <div class="n2-tr">
3
+ <div class="n2-td n2-first">
4
+ <div class="n2-h2"><?php n2_ex('Insert widget', 'magento'); ?></div>
5
+
6
+ <div class="n2-h4"><?php n2_e('Copy and paste this shortcode into your pages:'); ?></div>
7
+ <div class="n2-code" onclick="return selectText(this);">{{widget type="nextend2smartslider3/slider" slider="<?php echo $sliderid; ?>"}}</div>
8
+ </div>
9
+ <div class="n2-td">
10
+ <div class="n2-h2"><?php n2_e('Page or Post editor'); ?></div>
11
+
12
+ <div class="n2-h4"><?php n2_e('Insert the slider into pages with the icon:'); ?></div>
13
+ <img
14
+ src="<?php echo N2ImageHelper::fixed('$ss$/admin/images/magento-publish.png') ?>"/>
15
+ </div>
16
+ <div class="n2-td n2-last">
17
+ <div class="n2-h2"><?php n2_e('Shortcode'); ?></div>
18
+
19
+ <div class="n2-h4"><?php n2_e('Copy and paste this shortcode anywhere:'); ?></div>
20
+ <div class="n2-code" onclick="return selectText(this);">smartslider3[<?php echo $sliderid; ?>]</div>
21
+ </div>
22
+ </div>
23
+ </div>
app/code/community/Nextend2/SmartSlider3/library/magento/init.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ if (!defined('N2SSPRO')) {
4
+ define('N2SSPRO', 0);
5
+
6
+ }
7
+
8
+ N2Base::registerApplication(dirname(__FILE__) . '/../smartslider/N2SmartsliderApplicationInfo.php');
9
+
10
+ function nextend_smartslider3($sliderId, $usage = 'Used in PHP') {
11
+ N2Base::getApplication("smartslider")->getApplicationType('widget')->render(array(
12
+ "controller" => 'home',
13
+ "action" => 'magento',
14
+ "useRequest" => false
15
+ ), array(
16
+ $sliderId,
17
+ $usage
18
+ ));
19
+ }
app/code/community/Nextend2/SmartSlider3/library/magento/install.php ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?php
2
+ if (class_exists('N2Platform', false)) {
3
+
4
+ }
app/code/community/Nextend2/SmartSlider3/library/magento/libraries/slider/slider.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSlider extends N2SmartSliderAbstract
4
+ {
5
+
6
+ public function __construct($sliderId, $parameters) {
7
+ parent::__construct($sliderId, $parameters);
8
+ }
9
+
10
+ public function parseSlider($slider) {
11
+ // TODO: Implement parseSlider() method.
12
+ return $slider;
13
+ }
14
+
15
+ public function addCMSFunctions($slider) {
16
+ return $slider;
17
+ }
18
+
19
+
20
+ }
app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ foreach (N2Filesystem::folders($dir) AS $folder) {
6
+ $file = $dir . $folder . DIRECTORY_SEPARATOR . $folder . '.php';
7
+ if (N2Filesystem::fileexists($file)) {
8
+ require_once($file);
9
+ }
10
+ }
app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/magento/magento.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderGeneratorPluginAbstract', 'smartslider');
4
+
5
+ class N2SSPluginGeneratorMagento extends N2SliderGeneratorPluginAbstract
6
+ {
7
+
8
+ public static $group = 'magento';
9
+ public static $groupLabel = 'magento';
10
+
11
+ function onGeneratorList(&$group, &$list, $showall = false) {
12
+
13
+ $group[self::$group] = self::$groupLabel;
14
+
15
+ if (!isset($list[self::$group])) {
16
+ $list[self::$group] = array();
17
+ }
18
+
19
+ $product = new N2GeneratorInfo(self::$groupLabel, n2_('Product'), $this->getPath() . 'product');
20
+ $product->type = 'product';
21
+
22
+ $list[self::$group]['product'] = $product;
23
+ }
24
+
25
+ function getPath() {
26
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR;
27
+ }
28
+
29
+ }
30
+
31
+ N2Plugin::addPlugin('ssgenerator', 'N2SSPluginGeneratorMagento');
app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/magento/product/config.xml ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="Magento_product_settings" label="Settings">
3
+ <param label="Image size" name="magentoimagesize" type="mixed" default="0|*|0">
4
+ <param type="text" label="Width" style="width:40px;">
5
+ <unit>pixel</unit>
6
+ </param>
7
+ <param type="text" label="Height" style="width:40px;">
8
+ <unit>pixel</unit>
9
+ </param>
10
+ </param>
11
+ </params>
12
+ <params name="Magento_product" label="Filter_by">
13
+ <param label="Source_category" name="magentocategory" size="10" multiple="1" default="0" type="magentocategories"/>
14
+ <param label="Product types" name="magentoproducttype" size="10" multiple="1" default="0" type="magentoproducttypes"/>
15
+ <param label="Attribute sets" name="magentoattributeset" size="10" multiple="1" default="0" type="magentoattributesets"/>
16
+ <param label="Only special price" name="magentoonsale" type="onoff" default="0"/>
17
+ </params>
18
+ <params name="order" label="Order_by">
19
+ <param name="magentoorder" type="mixed" label="Order_1" default="price|*|desc">
20
+ <param type="list" label="Field" translateable="1">
21
+ <option value="">None</option>
22
+ <option value="name">Product name</option>
23
+ <option value="price">Product price</option>
24
+ <option value="rand">Random</option>
25
+ <option value="created_at">Creation time</option>
26
+ </param>
27
+ <param type="radio" label="order">
28
+ <option value="asc">Ascending</option>
29
+ <option value="desc">Descending</option>
30
+ </param>
31
+ </param>
32
+ <param name="magentoorder2" type="mixed" label="Order_2" default="name|*|asc">
33
+ <param type="list" label="Field" translateable="1">
34
+ <option value="">None</option>
35
+ <option value="name">Product name</option>
36
+ <option value="price">Product price</option>
37
+ <option value="rand">Random</option>
38
+ <option value="created_at">Creation time</option>
39
+ </param>
40
+ <param type="radio" label="order">
41
+ <option value="asc">Ascending</option>
42
+ <option value="desc">Descending</option>
43
+ </param>
44
+ </param>
45
+ </params>
46
+ </root>
app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/magento/product/element/magentoattributesets.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.form.element.list');
4
+
5
+ class N2ElementMagentoAttributesets extends N2ElementList {
6
+
7
+
8
+ function fetchElement() {
9
+
10
+ $this->_xml->addChild('option', 'All')->addAttribute('value', 0);
11
+
12
+ $entityType = Mage::getModel('catalog/product')->getResource()->getTypeId();
13
+ $collection = Mage::getResourceModel('eav/entity_attribute_set_collection')->setEntityTypeFilter($entityType);
14
+
15
+ foreach ($collection as $id => $attributeSet) {
16
+ $this->_xml->addChild('option', ' - '.$attributeSet->getAttributeSetName())->addAttribute('value', $attributeSet->getAttributeSetId());
17
+ }
18
+
19
+ $this->_value = $this->_form->get($this->_name, $this->_default);
20
+
21
+ return parent::fetchElement();
22
+ }
23
+ }
app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/magento/product/element/magentocategories.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.form.element.list');
4
+
5
+ class N2ElementMagentoCategories extends N2ElementList
6
+ {
7
+
8
+ function fetchElement() {
9
+ $rootcatId = Mage::app()->getWebsite(1)->getDefaultStore()->getRootCategoryId();
10
+ $realRootcatId = Mage::getModel('catalog/category')->load($rootcatId)->getParentCategory()->getId();
11
+ $categories = Mage::getModel('catalog/category')->getCategories($realRootcatId);
12
+ $this->_xml->addChild('option', 'Root')->addAttribute('value', 0);
13
+ $this->add_categories($categories, ' - ');
14
+
15
+ $this->_value = $this->_form->get($this->_name, $this->_default);
16
+
17
+ return parent::fetchElement();
18
+ }
19
+
20
+ function add_categories($categories, $pre) {
21
+ foreach ($categories as $category) {
22
+ $this->_xml->addChild('option', htmlspecialchars($pre . $category->getName()))->addAttribute('value', $category->getId());
23
+ if ($category->hasChildren()) {
24
+ $children = Mage::getModel('catalog/category')->getCategories($category->getId());
25
+ $this->add_categories($children, $pre . '- ');
26
+ }
27
+ }
28
+ }
29
+
30
+ }
app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/magento/product/element/magentoproducttypes.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.form.element.list');
4
+
5
+ class N2ElementMagentoProducttypes extends N2ElementList
6
+ {
7
+
8
+
9
+ function fetchElement() {
10
+
11
+ $this->_xml->addChild('option', 'All')->addAttribute('value', 0);
12
+
13
+ $types = Mage::getModel('catalog/product_type')->getTypes();
14
+
15
+ foreach ($types as $id => $type) {
16
+ $this->_xml->addChild('option', ' - ' . $type['label'])->addAttribute('value', $id);
17
+ }
18
+
19
+ $this->_value = $this->_form->get($this->_name, $this->_default);
20
+
21
+ return parent::fetchElement();
22
+ }
23
+ }
app/code/community/Nextend2/SmartSlider3/library/magento/plugins/generator/magento/product/generator.php ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.slider.generator.abstract', 'smartslider');
4
+
5
+ class N2GeneratorMagentoProduct extends N2GeneratorAbstract
6
+ {
7
+
8
+ protected function _getData($count, $startIndex) {
9
+ $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')->addAttributeToFilter('status', array('eq' => 1));
10
+
11
+ $categories = array_map('intval', explode('||', $this->data->get('magentocategory', '0')));
12
+ if (is_array($categories) && !in_array(0, $categories)) {
13
+ $finset = array();
14
+ foreach ($categories AS $cat) {
15
+ $finset[] = array('finset' => $cat);
16
+ }
17
+ $collection->joinField('category_id', 'catalog/category_product', 'category_id', 'product_id = entity_id', null, 'left');
18
+ $collection->addAttributeToFilter('category_id', array('in' => $finset));
19
+ }
20
+
21
+ $producttype = explode('||', $this->data->get('magentoproducttype', '0'));
22
+ if (is_array($producttype) && !in_array('0', $producttype)) {
23
+ $collection->addAttributeToFilter('type_id', array('in' => $producttype));
24
+ }
25
+
26
+ $attributeset = array_map('intval', explode('||', $this->data->get('magentoattributeset', '0')));
27
+ if (is_array($attributeset) && !in_array(0, $attributeset)) {
28
+ $collection->addAttributeToFilter('attribute_set_id', array('in' => $attributeset));
29
+ }
30
+
31
+ if ($this->data->get('magentoonsale', '0')) {
32
+ $dateToday = date('m/d/y');
33
+ $tomorrow = mktime(0, 0, 0, date('m'), date('d') + 1, date('y'));
34
+ $dateTomorrow = date('m/d/y', $tomorrow);
35
+
36
+ $collection->addAttributeToFilter('special_price', array('gt' => 0))->addAttributeToFilter('special_from_date', array(
37
+ 'date' => true,
38
+ 'to' => $dateToday
39
+ ))->addAttributeToFilter('special_to_date', array(
40
+ 'or' => array(
41
+ 0 => array(
42
+ 'date' => true,
43
+ 'from' => $dateTomorrow
44
+ ),
45
+ 1 => array('is' => new Zend_Db_Expr('null'))
46
+ )
47
+ ), 'left');
48
+ }
49
+
50
+ $order = N2Parse::parse($this->data->get('magentoorder', 'price|*|desc'));
51
+ if ($order[0]) {
52
+ if ($order[0] == 'rand') $order[0] = 'rand()';
53
+ $collection->addAttributeToSort($order[0], $order[1]);
54
+ $order = N2Parse::parse($this->data->get('magentoorder2', 'name|*|asc'));
55
+ if ($order[0]) {
56
+ if ($order[0] == 'rand') $order[0] = 'rand()';
57
+ $collection->addAttributeToSort($order[0], $order[1]);
58
+ }
59
+ }
60
+
61
+ $imageSize = array_map('intval', N2Parse::parse($this->data->get('magentoimagesize', '0|*|0')));
62
+ $collection->getSelect()->limit($count, $startIndex);
63
+
64
+ $data = array();
65
+ $i = 0;
66
+ foreach ($collection as $product) {
67
+
68
+ $categoryIds = $product->getCategoryIds();
69
+ if (count($categoryIds)) {
70
+ $category = Mage::getModel('catalog/category')->load($categoryIds[0]);
71
+ } else {
72
+ $category = Mage::getModel('catalog/category')->load(0);
73
+ }
74
+ $image = '';
75
+ if ($product->getImage() != 'no_selection') {
76
+ if ($imageSize[0] > 0 && $imageSize[1] > 0) {
77
+ $image = Mage::helper('catalog/image')->init($product, 'image')->resize($imageSize[0], $imageSize[1]);
78
+ } else {
79
+ $image = '$/media/catalog/product' . $product->getImage();
80
+ }
81
+ }
82
+
83
+ $record = array_map('strval', array(
84
+ 'title' => $product->getName(),
85
+ 'description' => $product->getDescription(),
86
+ 'short_description' => $product->getShortDescription(),
87
+ 'final_price' => Mage::helper('core')->currency($product->getFinalPrice()),
88
+ 'url' => '[url ' . $product->getId() . ']',
89
+ 'addtocart' => '[addtocart ' . $product->getId() . ']',
90
+ 'wishlist_url' => '[wishlist_url ' . $product->getId() . ']',
91
+ 'image' => $image,
92
+ 'thumbnail' => $image,
93
+ 'category_name' => $category->getName(),
94
+ 'category_url' => '[category_url ' . $category->getId() . ']',
95
+ 'addtocart_label' => 'Add to cart'
96
+ ));
97
+
98
+ $attributes = $product->getAttributes();
99
+ foreach ($attributes as $attribute) {
100
+ if ($attribute->getIsVisibleOnFront() || $attribute->getIsFilterable() || $attribute->getIsSearchable() || $attribute->getIsComparable()) {
101
+ $record[$attribute->getAttributeCode()] = $attribute->getFrontend()->getValue($product);
102
+ }
103
+ }
104
+
105
+ $record['price'] = Mage::helper('core')->currency($product->getPrice());
106
+
107
+ $data[] = $record;
108
+ $i++;
109
+ }
110
+
111
+ return $data;
112
+ }
113
+ }
app/code/community/Nextend2/SmartSlider3/library/magento/plugins/loadplugin.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $mdir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ N2Filesystem::registerTranslate(realpath($mdir), N2Base::getApplicationInfo('smartslider')->getAssetsPath() . '/../' . N2Platform::getPlatform() . '/plugins');
6
+ foreach (N2Filesystem::folders($mdir) AS $mfolder) {
7
+ $mfile = $mdir . $mfolder . DIRECTORY_SEPARATOR . 'loadplugin.php';
8
+ if (N2Filesystem::fileexists($mfile)) {
9
+ require_once($mfile);
10
+ }
11
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/N2SmartsliderApplication.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import("smartslider3", "smartslider");
3
+
4
+ class N2SmartSliderApplication extends N2Application
5
+ {
6
+
7
+ public $name = "smartslider";
8
+
9
+ protected function autoload() {
10
+ N2Loader::import("libraries.slider.helper", "smartslider");
11
+ N2Loader::import("libraries.slider.manager", "smartslider");
12
+ N2Form::$importPaths[] = dirname(__FILE__) . '/form';
13
+
14
+ N2Filesystem::registerTranslate(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'plugins', $this->info->getAssetsPath() . '/plugins');
15
+ require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . 'loadplugin.php';
16
+
17
+ N2Loader::import('plugins.loadplugin', 'smartslider.platform');
18
+
19
+ N2Pluggable::doAction('n2_ss_plugins_loaded');
20
+
21
+ N2Loader::import('libraries.link', 'smartslider');
22
+ }
23
+
24
+ public function hasExpertMode() {
25
+ return !!N2SSPRO;
26
+ }
27
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/N2SmartsliderApplicationInfo.php ADDED
@@ -0,0 +1,158 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderApplicationInfo extends N2ApplicationInfo {
4
+
5
+ public function __construct() {
6
+ $this->path = dirname(__FILE__);
7
+ $this->assetPath = realpath(dirname(__FILE__) . "/../media");
8
+ parent::__construct();
9
+ }
10
+
11
+ public function isPublic() {
12
+ return true;
13
+ }
14
+
15
+ public function getName() {
16
+ return 'smartslider';
17
+ }
18
+
19
+ public function getLabel() {
20
+ return 'Smart Slider';
21
+ }
22
+
23
+ public function getInstance() {
24
+ require_once $this->path . NDS . "N2SmartsliderApplication.php";
25
+ return new N2SmartSliderApplication($this);
26
+ }
27
+
28
+ public function getPathKey() {
29
+ return '$ss$';
30
+ }
31
+
32
+ public function onNextendBaseReady() {
33
+ parent::onNextendBaseReady();
34
+
35
+ require_once dirname(__FILE__) . '/libraries/storage.php';
36
+ }
37
+
38
+ public function assetsBackend() {
39
+ static $once;
40
+ if ($once != null) {
41
+ return;
42
+ }
43
+ $once = true;
44
+
45
+ $path = $this->getAssetsPath();
46
+ N2CSS::addInline('.n2-expert {display: none !important;');
47
+
48
+ N2CSS::addStaticGroup($path . '/admin/css/smartslider.min.css', 'smartslider-backend');
49
+
50
+ if (intval(N2SmartSliderSettings::get('improved-small-screen', 1))) {
51
+ N2CSS::addStaticGroup($path . '/admin/css/smallscreen.min.css', 'smartslider-smallscreen-backend');
52
+ }
53
+
54
+
55
+ N2Localization::addJS(array(
56
+ 'Insert',
57
+ 'Insert variable',
58
+ 'Choose the group',
59
+ 'Choose the variable',
60
+ 'Result',
61
+ 'Filter',
62
+ 'No',
63
+ 'Clean HTML',
64
+ 'Remove HTML',
65
+ 'Split',
66
+ 'Chars',
67
+ 'Words',
68
+ 'Start',
69
+ 'Length',
70
+ 'Find image',
71
+ 'Index',
72
+ 'Find link',
73
+ 'Index'
74
+ ));
75
+ N2JS::addStaticGroup($path . '/dist/smartslider-backend.min.js', 'smartslider-backend');
76
+ if (!N2Base::getApplication('smartslider')->storage->get('free', 'rated')) {
77
+ N2JS::addInline('window.N2SSWHYPRO="' . N2SS3::getWhyProUrl(array(
78
+ 'utm_source' => 'why-pro',
79
+ 'utm_medium' => 'smartslider-' . N2Platform::getPlatform() . '-free',
80
+ 'utm_campaign' => N2SS3::$campaign
81
+ )) . '";', true);
82
+ N2JS::addStaticGroup($path . '/dist/smartslider-free.min.js', 'smartslider-free');
83
+ }
84
+
85
+ if (!N2Base::getApplication('smartslider')->storage->get('free', 'subscribeOnImport')) {
86
+ N2JS::addInline('
87
+ nextend.joinCommunity = function(cb){
88
+ var $ = n2;
89
+ var modal = new NextendModal({
90
+ zero: {
91
+ size: [
92
+ 600, 460
93
+ ],
94
+ title: n2_(\'' . n2_('Join the Nextend community!') . '\'),
95
+ back: false,
96
+ close: true,
97
+ content: \'<form class="n2-form"></form>\',
98
+ fn: {
99
+ show: function () {
100
+
101
+ var form = this.content.find(\'.n2-form\');
102
+
103
+ form.append(\'<img src="' . N2ImageHelper::fixed('$ss$/admin/images/free/newsletter.jpg') . '" />\');
104
+ form.append(this.createHeading("Join more than 12,000 subscribers and get access to the latest Sample Sliders, Tip & tricks and other exclusive contents directly to your inbox!"));
105
+
106
+ form.append(\'<div class="n2-input-button"><input type="email" id="EMAIL" name="EMAIL" value="" /><a href="#" class="n2-button n2-button-big n2-button-green n2-uc n2-h4">Get Free Sliders</a></div>\');
107
+
108
+
109
+ form.append(\'<input type="hidden" name="' . strtoupper(N2Platform::getPlatform()) . '" value="Yes" />\');
110
+ form.append(\'<input type="hidden" name="SOURCE" value="Smart Slider 3" />\');
111
+
112
+ var key = $(\'#EMAIL\').val(\'' . N2Platform::getUserEmail() . '\').focus(),
113
+ button = form.find(\'.n2-button-green\');
114
+ form.on(\'submit\', function (e) {
115
+ e.preventDefault();
116
+ button.trigger(\'click\');
117
+ });
118
+
119
+ button.on(\'click\', $.proxy(function (e) {
120
+ NextendAjaxHelper.ajax({
121
+ type: "POST",
122
+ url: "//secure.nextendweb.com/mailchimp/subscribe.php",
123
+ data: form.serialize(),
124
+ dataType: \'json\'
125
+ }).done($.proxy(function (response) {
126
+ cb();
127
+ }, this));
128
+ }, this));
129
+ },
130
+ hide: function () {
131
+ cb();
132
+ }
133
+ }
134
+ }
135
+ });
136
+ modal.setCustomClass(\'n2-ss-modal-subscribe\');
137
+ modal.show();
138
+ };
139
+ ', true);
140
+ }
141
+
142
+ }
143
+
144
+ public function assetsFrontend() {
145
+ if (N2Platform::$isAdmin) {
146
+ N2JS::addInline('window.N2SSPRO=' . N2SSPRO . ';', true);
147
+ N2JS::addInline('window.N2SS3C="' . N2SS3::$campaign . '";', true);
148
+ }
149
+
150
+
151
+
152
+ $path = $this->getAssetsPath();
153
+ N2JS::addStaticGroup($path . '/dist/smartslider-frontend.min.js', 'smartslider-frontend');
154
+
155
+ }
156
+ }
157
+
158
+ return new N2SmartsliderApplicationInfo();
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/N2SmartsliderApplicationTypeBackend.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderApplicationTypeBackend extends N2ApplicationType
4
+ {
5
+
6
+ public $type = "backend";
7
+
8
+ protected function autoload() {
9
+ N2Loader::import(array(
10
+ 'libraries.embedwidget.embedwidget',
11
+ 'libraries.plugin.plugin',
12
+ 'libraries.form.form',
13
+ 'libraries.image.color',
14
+ 'libraries.mobiledetect.Mobile_Detect',
15
+ 'libraries.parse.parse'
16
+ ));
17
+
18
+ N2Loader::import(array(
19
+ 'libraries.settings.settings'
20
+ ), 'smartslider');
21
+
22
+ N2Loader::import('helpers.controller.N2SmartSliderController', 'smartslider.backend');
23
+ }
24
+
25
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Backgroundanimation.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('helpers.controllers.VisualManager', 'system.backend');
3
+
4
+ class N2SmartSliderBackendBackgroundAnimationController extends N2SystemBackendVisualManagerController
5
+ {
6
+
7
+ protected $type = 'backgroundanimation';
8
+
9
+ public function __construct($appType, $defaultParams) {
10
+ $this->logoText = n2_('Background animation');
11
+ parent::__construct($appType, $defaultParams);
12
+ }
13
+
14
+ protected function loadModel() {
15
+
16
+ N2Loader::import(array(
17
+ 'models.' . $this->type
18
+ ), 'smartslider');
19
+ }
20
+
21
+ public function getModel() {
22
+ return new N2SmartSliderBackgroundAnimationModel();
23
+ }
24
+
25
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Generator.php ADDED
@@ -0,0 +1,203 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendGeneratorController extends N2SmartSliderController
4
+ {
5
+
6
+ public $layoutName = 'default';
7
+
8
+ public function initialize() {
9
+ parent::initialize();
10
+
11
+ N2Loader::import(array(
12
+ 'models.generator',
13
+ 'models.Sliders',
14
+ 'models.Slides'
15
+ ), 'smartslider');
16
+ }
17
+
18
+ public function actionCreate() {
19
+ if ($this->validatePermission('smartslider_edit')) {
20
+
21
+ $sliderID = N2Request::getInt("sliderid", 0);
22
+ $slidersModel = new N2SmartsliderSlidersModel();
23
+ $slider = $slidersModel->get($sliderID);
24
+ if ($this->validateDatabase($slider)) {
25
+ $this->addView("create", array(
26
+ "slider" => $slider
27
+ ));
28
+ $this->render();
29
+ }
30
+ }
31
+ }
32
+
33
+ public function actionEdit() {
34
+ if ($this->validatePermission('smartslider_edit')) {
35
+
36
+ $generatorId = N2Request::getInt('generator_id');
37
+
38
+ $generatorModel = new N2SmartsliderGeneratorModel();
39
+ $generator = $generatorModel->get($generatorId);
40
+ if ($this->validateDatabase($generator)) {
41
+
42
+ $slidesModel = new N2SmartsliderSlidesModel();
43
+ $slides = $slidesModel->getAll(-1, 'OR generator_id = ' . $generator['id'] . '');
44
+ if (count($slides) > 0) {
45
+ $slide = $slides[0];
46
+
47
+
48
+ if (N2Request::getInt('save')) {
49
+ $request = new N2Data(N2Request::getVar('generator'));
50
+
51
+ $slideParams = new N2Data($slide['params'], true);
52
+ $slideParams->set('record-slides', $request->get('record-slides', 1));
53
+ $slidesModel->updateParams($slide['id'], $slideParams->toArray());
54
+
55
+ $request->un_set('record-slides');
56
+ $generatorModel->save($generatorId, $request->toArray());
57
+
58
+ N2SmartsliderSlidesModel::markChanged($slide['slider']);
59
+ N2Message::success(n2_('Generator updated and cache cleared.'));
60
+
61
+ $this->redirect(array(
62
+ "generator/edit",
63
+ array(
64
+ "generator_id" => $generatorId
65
+ )
66
+ ), 302, true);
67
+ }
68
+
69
+ N2Request::set('sliderid', $slide['slider']);
70
+
71
+ $this->addView("../../inline/_sliders", array(
72
+ "appObj" => $this
73
+ ), "sidebar");
74
+ $this->addView("edit", array(
75
+ "generatorModel" => $generatorModel,
76
+ "generator" => $generator,
77
+ "slide" => $slide
78
+ ));
79
+ $this->render();
80
+ } else {
81
+ $this->redirect(array(
82
+ "sliders/index"
83
+ ), 302, true);
84
+ }
85
+ } else {
86
+ $this->redirect(array(
87
+ "sliders/index"
88
+ ), 302, true);
89
+
90
+ }
91
+ }
92
+ }
93
+
94
+ public function actionCreateSettings() {
95
+ if ($this->validatePermission('smartslider_edit')) {
96
+ $slidersModel = new N2SmartsliderSlidersModel();
97
+ if (!($slider = $slidersModel->get(N2Request::getInt('sliderid')))) {
98
+ $this->redirectToSliders();
99
+ }
100
+
101
+ if (N2Request::getInt('save')) {
102
+
103
+ $generatorModel = new N2SmartsliderGeneratorModel();
104
+ $result = $generatorModel->createGenerator($slider['id'], N2Request::getVar('generator'));
105
+
106
+ N2Message::success(n2_('Generator created.'));
107
+
108
+ $this->redirect(array(
109
+ "slides/edit",
110
+ array(
111
+ "sliderid" => $slider['id'],
112
+ "slideid" => $result['slideId']
113
+ )
114
+ ), 302, true);
115
+ }
116
+
117
+ $this->addView("create_settings", array(
118
+ 'slider' => $slider
119
+ ));
120
+ $this->render();
121
+ }
122
+ }
123
+
124
+ public function actionCheckConfiguration() {
125
+ if ($this->validatePermission('smartslider_edit')) {
126
+ $this->actionConfigure(true);
127
+ }
128
+ }
129
+
130
+ public function actionConfigure($create = false) {
131
+ if ($this->validatePermission('smartslider_config')) {
132
+
133
+ $generatorModel = new N2SmartsliderGeneratorModel();
134
+
135
+ $group = N2Request::getVar('group');
136
+ $type = N2Request::getVar('type');
137
+
138
+ $info = $generatorModel->getGeneratorInfo($group, $type);
139
+
140
+ $configuration = $info->getConfiguration();
141
+
142
+ if (N2Request::getInt('save')) {
143
+ if ($this->validateToken()) {
144
+ $configuration->addData(N2Request::getVar('generator'));
145
+ $this->refresh();
146
+ } else {
147
+ $this->refresh();
148
+ }
149
+ }
150
+
151
+
152
+ $this->addView("../../inline/_sidebar_settings", array(), "sidebar");
153
+
154
+ if ($create == false || !$configuration->wellConfigured()) {
155
+
156
+ $this->addView("check_configuration", array(
157
+ 'configuration' => $configuration
158
+ ));
159
+ $this->render();
160
+
161
+
162
+ } else {
163
+
164
+ $this->redirect(array(
165
+ "generator/createsettings",
166
+ array(
167
+ "sliderid" => N2Request::getInt('sliderid'),
168
+ "group" => $group,
169
+ "type" => $type
170
+ )
171
+ ), 302, true);
172
+ }
173
+ }
174
+
175
+ }
176
+
177
+ public function actionFinishAuth() {
178
+ if ($this->validatePermission('smartslider_config')) {
179
+
180
+ $generatorModel = new N2SmartsliderGeneratorModel();
181
+
182
+ $group = N2Request::getVar('group');
183
+ $type = N2Request::getVar('type');
184
+
185
+ $info = $generatorModel->getGeneratorInfo($group, $type);
186
+
187
+ $configuration = $info->getConfiguration();
188
+ $result = $configuration->finishAuth();
189
+ if ($result === true) {
190
+ N2Message::success(n2_('Authentication successful.'));
191
+ echo '<script>window.opener.location.reload();self.close();</script>';
192
+ } else {
193
+ if ($result instanceof Exception) {
194
+ $message = $result->getMessage();
195
+ } else {
196
+ $message = 'Something wrong with the credentials';
197
+ }
198
+ echo '<script>window.opener.nextend.notificationCenter.error("' . htmlspecialchars($message) . '");self.close();</script>';
199
+ }
200
+ n2_exit(true);
201
+ }
202
+ }
203
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Install.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class N2SmartsliderBackendInstallController extends N2SmartSliderController
5
+ {
6
+
7
+ public function initialize() {
8
+
9
+ }
10
+
11
+ public function actionIndex($secured = false) {
12
+ if ($secured) {
13
+ N2Loader::import('models.Install', 'smartslider');
14
+
15
+ $installModel = new N2SmartsliderInstallModel();
16
+
17
+ $installModel->install();
18
+ }
19
+ }
20
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Layout.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('helpers.controllers.VisualManager', 'system.backend');
3
+
4
+ class N2SmartSliderBackendLayoutController extends N2SystemBackendVisualManagerController
5
+ {
6
+
7
+ public $layoutName = "sidebar";
8
+
9
+ protected $type = 'layout';
10
+
11
+ public function initialize() {
12
+ parent::initialize();
13
+
14
+ N2Localization::addJS(array(
15
+ 'Load layout',
16
+ 'Load whole slide',
17
+ 'Load only layers'
18
+ ));
19
+ }
20
+
21
+ protected function loadModel() {
22
+
23
+ N2Loader::import(array(
24
+ 'models.' . $this->type
25
+ ), 'smartslider');
26
+ }
27
+
28
+ public function getModel() {
29
+ return new N2SmartSliderLayoutModel();
30
+ }
31
+
32
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/License.php ADDED
@@ -0,0 +1 @@
 
1
+ <?php
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Preview.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendPreviewController extends N2SmartSliderController
4
+ {
5
+
6
+ public $layoutName = 'preview';
7
+
8
+ private $sliderId = 0;
9
+
10
+ public function initialize() {
11
+ parent::initialize();
12
+
13
+ N2Loader::import(array(
14
+ 'models.Sliders',
15
+ 'models.Slides',
16
+ 'models.generator'
17
+ ), 'smartslider');
18
+
19
+ $this->sliderId = N2Request::getInt('sliderid');
20
+ }
21
+
22
+ public function actionIndex() {
23
+ if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
24
+ $sliderData = N2Post::getVar('slider', false);
25
+ if (count($sliderData)) {
26
+ $this->addView("index", array(
27
+ 'sliderData' => $sliderData,
28
+ 'sliderId' => $this->sliderId
29
+ ));
30
+ $this->render();
31
+ }
32
+ }
33
+ }
34
+
35
+ public function actionSlide() {
36
+ if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
37
+ $sliderId = N2Request::getInt('sliderId');
38
+ $slideId = N2Request::getInt('slideId');
39
+ if ($sliderId) {
40
+ $slidesData = array();
41
+ $slidesModel = new N2SmartsliderSlidesModel();
42
+ $_slide = N2Request::getVar('slide');
43
+ if (is_array($_slide)) {
44
+ $slide = $slidesModel->getRowFromPost($sliderId, $_slide);
45
+ if ($slideId) {
46
+ $slide['id'] = $slideId;
47
+ $slidesData[$slideId] = $slide;
48
+ } else {
49
+ $slide['id'] = '-1000';
50
+ $slidesData['add'] = $slide;
51
+ }
52
+ }
53
+ $this->addView("slide", array(
54
+ 'slidesData' => $slidesData,
55
+ 'sliderId' => $sliderId
56
+ ));
57
+ $this->render();
58
+ }
59
+ }
60
+ }
61
+
62
+ public function actionGenerator() {
63
+ if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
64
+ $generator_id = N2Request::getInt('generator_id');
65
+
66
+ $generatorModel = new N2SmartsliderGeneratorModel();
67
+ $sliderId = $generatorModel->getSliderId($generator_id);
68
+
69
+ if ($sliderId) {
70
+ $generatorData = array();
71
+
72
+ $generatorData[$generator_id] = N2Request::getVar('generator');
73
+
74
+ $this->addView("generator", array(
75
+ 'generatorData' => $generatorData,
76
+ 'sliderId' => $sliderId
77
+ ));
78
+ $this->render();
79
+ }
80
+ }
81
+ }
82
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Settings.php ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSettingsController extends N2SmartSliderController
4
+ {
5
+
6
+ public function initialize() {
7
+ parent::initialize();
8
+
9
+ N2Loader::import(array(
10
+ 'models.Settings',
11
+ 'models.Sliders'
12
+ ), 'smartslider');
13
+ }
14
+
15
+ public function actionDefault() {
16
+
17
+ if ($this->validatePermission('smartslider_config')) {
18
+
19
+ if (N2Request::getInt('save')) {
20
+ if ($this->validateToken()) {
21
+ $settingsModel = new N2SmartsliderSettingsModel();
22
+ if ($settingsModel->save()) {
23
+ $this->refresh();
24
+ }
25
+ } else {
26
+ $this->refresh();
27
+ }
28
+ }
29
+
30
+ $this->addView("../../inline/_sidebar_settings", array(), "sidebar");
31
+ $this->addView('default', array(
32
+ "action" => N2Request::getVar("nextendaction")
33
+ ));
34
+ $this->render();
35
+
36
+ }
37
+ }
38
+
39
+ public function actionItemDefaults() {
40
+
41
+ if ($this->validatePermission('smartslider_config')) {
42
+
43
+ if (N2Request::getInt('save')) {
44
+ if ($this->validateToken()) {
45
+ $settingsModel = new N2SmartsliderSettingsModel();
46
+ if ($settingsModel->saveDefaults(N2Request::getVar('defaults', array()))) {
47
+ $this->refresh();
48
+ }
49
+ } else {
50
+ $this->refresh();
51
+ }
52
+ }
53
+
54
+ $this->addView("../../inline/_sidebar_settings", array(), "sidebar");
55
+ $this->addView("defaults");
56
+ $this->render();
57
+
58
+ }
59
+ }
60
+
61
+ public function actionJoomla() {
62
+ //if (N2Platform::$isJoomla) $this->actionDefault('joomla');
63
+ }
64
+
65
+ public function actionClearCache() {
66
+ if ($this->validatePermission('smartslider_config')) {
67
+ if ($this->validateToken()) {
68
+ $slidersModel = new N2SmartsliderSlidersModel();
69
+ foreach ($slidersModel->getAll() AS $slider) {
70
+ $slidersModel->refreshCache($slider['id']);
71
+ }
72
+ N2Cache::clearGroup('n2-ss-0');
73
+ N2Cache::clearGroup('combined');
74
+ N2Message::success(n2_('Cache cleared.'));
75
+ }
76
+
77
+ $this->redirect(array("settings/default"));
78
+ }
79
+ }
80
+
81
+ public function actionAviary() {
82
+ if ($this->validatePermission('nextend') && $this->validatePermission('nextend_config')) {
83
+ $this->redirect(N2Base::getApplication('system')->getApplicationType('backend')->router->createUrl("settings/aviary"));
84
+ }
85
+ }
86
+
87
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Slider.php ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSliderController extends N2SmartSliderController {
4
+
5
+ public $sliderId = 0;
6
+
7
+ public function initialize() {
8
+ parent::initialize();
9
+
10
+ N2Loader::import(array(
11
+ 'models.Sliders',
12
+ 'models.Slides',
13
+ 'models.generator'
14
+ ), 'smartslider');
15
+
16
+ $this->sliderId = N2Request::getInt('sliderid');
17
+ }
18
+
19
+ public function actionClearCache() {
20
+ if ($this->validateToken()) {
21
+ $slidersModel = new N2SmartsliderSlidersModel();
22
+ $slider = $slidersModel->get($this->sliderId);
23
+ if ($this->validateDatabase($slider)) {
24
+
25
+ $slidersModel->refreshCache($this->sliderId);
26
+ N2Message::success(n2_('Cache cleared.'));
27
+ $this->redirect(array(
28
+ "slider/edit",
29
+ array("sliderid" => $this->sliderId)
30
+ ));
31
+ }
32
+ }
33
+ }
34
+
35
+ public function actionCachedSlider() {
36
+ if ($this->validateToken()) {
37
+ $slidersModel = new N2SmartsliderSlidersModel();
38
+ $slider = $slidersModel->get($this->sliderId);
39
+ if ($this->validateDatabase($slider)) {
40
+
41
+ $this->addView('cachedslider', array(
42
+ 'slider' => $slider
43
+ ));
44
+ $this->render();
45
+
46
+ }
47
+ }
48
+ }
49
+
50
+ public function actionEdit() {
51
+
52
+ if ($this->validatePermission('smartslider_edit')) {
53
+
54
+ $slidersModel = new N2SmartsliderSlidersModel();
55
+
56
+ $slider = $slidersModel->get($this->sliderId);
57
+
58
+ if (!$slider) {
59
+ $this->redirectToSliders();
60
+ }
61
+
62
+ N2Loader::import('libraries.fonts.fontmanager');
63
+ N2Loader::import('libraries.stylemanager.stylemanager');
64
+
65
+ $this->addView("edit", array(
66
+ 'slider' => $slider
67
+ ));
68
+
69
+ $this->render();
70
+
71
+ }
72
+ }
73
+
74
+ public function actionDelete() {
75
+ if ($this->validateToken() && $this->validatePermission('smartslider_delete')) {
76
+ $slidersModel = new N2SmartsliderSlidersModel();
77
+ $slidersModel->delete($this->sliderId);
78
+ N2Message::success(n2_('Slider deleted.'));
79
+ $this->redirectToSliders();
80
+ }
81
+ }
82
+
83
+ public function actionDuplicate() {
84
+ if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
85
+ $slidersModel = new N2SmartsliderSlidersModel();
86
+ if (($sliderid = N2Request::getInt('sliderid')) && $slidersModel->get($sliderid)) {
87
+ $newSliderId = $slidersModel->duplicate($sliderid);
88
+ N2Message::success(n2_('Slider duplicated.'));
89
+ $this->redirect(array(
90
+ "slider/edit",
91
+ array("sliderid" => $newSliderId)
92
+ ));
93
+ }
94
+ $this->redirectToSliders();
95
+ }
96
+ }
97
+
98
+ public function actionExport() {
99
+ if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
100
+ N2Loader::import('libraries.export', 'smartslider');
101
+ $export = new N2SmartSliderExport($this->sliderId);
102
+ $export->create();
103
+ }
104
+
105
+ }
106
+
107
+ public function actionExportHTML() {
108
+ if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
109
+ N2Loader::import('libraries.export', 'smartslider');
110
+ $export = new N2SmartSliderExport($this->sliderId);
111
+ $export->createHTML();
112
+ }
113
+
114
+ }
115
+
116
+ public function actionPublishHTML() {
117
+ }
118
+
119
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Sliders.php ADDED
@@ -0,0 +1,198 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSlidersController extends N2SmartSliderController {
4
+
5
+ public function initialize() {
6
+ parent::initialize();
7
+
8
+ N2Loader::import(array(
9
+ 'models.Sliders',
10
+ 'models.Slides',
11
+ 'models.generator'
12
+ ), 'smartslider');
13
+ }
14
+
15
+ public function actionIndex() {
16
+ N2Loader::import(array(
17
+ 'models.SliderItems'
18
+ ), 'smartslider');
19
+
20
+ N2Localization::addJS(array(
21
+ 'License key',
22
+ 'Forgot your license key?',
23
+ 'Add license',
24
+ 'Authorize'
25
+ ));
26
+
27
+ $this->addView(null);
28
+ $this->render();
29
+ }
30
+
31
+ public function actionOrderBy() {
32
+ $time = N2Request::getCmd('time', null);
33
+ if ($time == 'DESC' || $time == 'ASC') {
34
+ N2SmartSliderSettings::set('slidersOrder', 'time');
35
+ N2SmartSliderSettings::set('slidersOrderDirection', $time);
36
+ }
37
+ $title = N2Request::getCmd('title', null);
38
+ if ($title == 'DESC' || $title == 'ASC') {
39
+ N2SmartSliderSettings::set('slidersOrder', 'title');
40
+ N2SmartSliderSettings::set('slidersOrderDirection', $title);
41
+ }
42
+ $this->redirectToSliders();
43
+ }
44
+
45
+ public function actionExportAll() {
46
+ N2Loader::import('libraries.export', 'smartslider');
47
+ $slidersModel = new N2SmartsliderSlidersModel();
48
+ $sliders = $slidersModel->getAll();
49
+ foreach ($sliders AS $slider) {
50
+ $export = new N2SmartSliderExport($slider['id']);
51
+ $export->create(true);
52
+ }
53
+
54
+ $folder = N2Platform::getPublicDir();
55
+ $folder .= '/export/';
56
+ $zip = new N2ZipFile();
57
+
58
+ foreach (N2Filesystem::files($folder) AS $file) {
59
+ $zip->addFile(file_get_contents($folder . $file), $file);
60
+ }
61
+ ob_end_clean();
62
+ header('Content-disposition: attachment; filename=sliders_unzip_to_import.zip');
63
+ header('Content-type: application/zip');
64
+ echo $zip->file();
65
+ n2_exit(true);
66
+
67
+ }
68
+
69
+ public function actionRestoreByUpload() {
70
+ $this->actionImportByUpload(true);
71
+ }
72
+
73
+ public function actionImportByUpload($restore = false) {
74
+ if ($this->validatePermission('smartslider_edit')) {
75
+ if (empty($_FILES) && empty($_POST) && isset($_SERVER['REQUEST_METHOD']) && strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
76
+ N2Message::error(sprintf(n2_('You were not allowed to upload this file to the server (upload limit %s). Please you this alternative method!'), @ini_get('post_max_size')));
77
+
78
+ $this->redirect(array(
79
+ "sliders/importFromServer"
80
+ ));
81
+ } else if (N2Request::getInt('save')) {
82
+ if ($this->validateToken() && isset($_FILES['slider']) && isset($_FILES['slider']['tmp_name']['import-file'])) {
83
+
84
+ switch ($_FILES['slider']['error']['import-file']) {
85
+ case UPLOAD_ERR_OK:
86
+ break;
87
+ case UPLOAD_ERR_NO_FILE:
88
+ throw new RuntimeException('No file sent.');
89
+ case UPLOAD_ERR_INI_SIZE:
90
+ case UPLOAD_ERR_FORM_SIZE:
91
+ throw new RuntimeException('Exceeded filesize limit.');
92
+ default:
93
+ throw new RuntimeException('Unknown errors.');
94
+ }
95
+
96
+ if (N2Filesystem::fileexists($_FILES['slider']['tmp_name']['import-file'])) {
97
+
98
+ $data = new N2Data(N2Request::getVar('slider'));
99
+
100
+ N2Loader::import('libraries.import', 'smartslider');
101
+ $import = new N2SmartSliderImport();
102
+ if ($restore) {
103
+ $import->enableRestore();
104
+ }
105
+ $sliderId = $import->import($_FILES['slider']['tmp_name']['import-file'], $data->get('image-mode', 'clone'), $data->get('linked-visuals', 0));
106
+
107
+ if ($sliderId !== false) {
108
+ N2Message::success(n2_('Slider imported.'));
109
+ $this->redirect(array(
110
+ "slider/edit",
111
+ array("sliderid" => $sliderId)
112
+ ));
113
+ } else {
114
+ N2Message::error(n2_('Import error!'));
115
+ $this->refresh();
116
+ }
117
+ } else {
118
+ N2Message::error(n2_('The imported file is not readable!'));
119
+ $this->refresh();
120
+ }
121
+
122
+
123
+ } else {
124
+
125
+ }
126
+ }
127
+
128
+ if ($restore) {
129
+ $this->addView('restoreByUpload');
130
+ } else {
131
+ $this->addView('importByUpload');
132
+ }
133
+ $this->render();
134
+ }
135
+
136
+ }
137
+
138
+ public function actionRestoreFromServer() {
139
+ $this->actionImportFromServer(true);
140
+
141
+ }
142
+
143
+ public function actionImportFromServer($restore = false) {
144
+ if ($this->validatePermission('smartslider_edit')) {
145
+
146
+ if (N2Request::getInt('save')) {
147
+
148
+ if ($this->validateToken()) {
149
+ $data = new N2Data(N2Request::getVar('slider'));
150
+ $file = $data->get('import-file');
151
+ if (empty($file)) {
152
+ N2Message::error(n2_('Please select a file!'));
153
+ $this->refresh();
154
+ } else {
155
+ $dir = N2Platform::getPublicDir();
156
+ if (N2Filesystem::fileexists($dir . '/' . $file)) {
157
+ N2Loader::import('libraries.import', 'smartslider');
158
+ $import = new N2SmartSliderImport();
159
+ if ($restore) {
160
+ $import->enableRestore();
161
+ }
162
+ $sliderId = $import->import($dir . '/' . $file, $data->get('image-mode', 'clone'), $data->get('linked-visuals', 0));
163
+
164
+ if ($sliderId !== false) {
165
+
166
+ if ($data->get('delete')) {
167
+ @unlink($dir . '/' . $file);
168
+ }
169
+
170
+ N2Message::success(n2_('Slider imported.'));
171
+ $this->redirect(array(
172
+ "slider/edit",
173
+ array("sliderid" => $sliderId)
174
+ ));
175
+ } else {
176
+ N2Message::error(n2_('Import error!'));
177
+ $this->refresh();
178
+ }
179
+ } else {
180
+ N2Message::error(n2_('The chosen file is missing!'));
181
+ $this->refresh();
182
+ }
183
+ }
184
+ } else {
185
+ $this->refresh();
186
+ }
187
+ }
188
+
189
+ if ($restore) {
190
+ $this->addView('restoreFromServer');
191
+ } else {
192
+ $this->addView('importFromServer');
193
+ }
194
+ $this->render();
195
+ }
196
+
197
+ }
198
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Slides.php ADDED
@@ -0,0 +1,148 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSlidesController extends N2SmartSliderController {
4
+
5
+ public $layoutName = 'default';
6
+
7
+ public function initialize() {
8
+ parent::initialize();
9
+
10
+ N2Loader::import(array(
11
+ 'models.Sliders',
12
+ 'models.generator',
13
+ 'models.Layers',
14
+ 'models.Item',
15
+ 'models.Slides'
16
+ ), 'smartslider');
17
+
18
+ N2Localization::addJS(array(
19
+ 'In animation',
20
+ 'Loop animation',
21
+ 'Out animation'
22
+ ));
23
+ }
24
+
25
+ private function initAdminSlider() {
26
+ $sliderManager = new N2SmartSliderManager(N2Get::getInt('sliderid'), true, array(
27
+ 'disableResponsive' => true
28
+ ));
29
+ $this->appType->app->set('sliderManager', $sliderManager);
30
+ }
31
+
32
+ public function actionCreate() {
33
+ if ($this->validatePermission('smartslider_edit')) {
34
+
35
+ $slidersModel = new N2SmartsliderSlidersModel();
36
+ $sliderId = N2Request::getInt('sliderid');
37
+ $slider = $slidersModel->get($sliderId);
38
+ if ($this->validateDatabase($slider)) {
39
+ $this->initAdminSlider();
40
+
41
+ $this->addView("../../inline/_sidebar_slide", array(
42
+ "appObj" => $this,
43
+ "slider" => $slider
44
+ ), "sidebar");
45
+ $this->addView("edit", array(
46
+ "slidesModel" => new N2SmartsliderSlidesModel(),
47
+ "sliderId" => $sliderId,
48
+ "slider" => $slider
49
+ ));
50
+ $this->render();
51
+
52
+ }
53
+ }
54
+ }
55
+
56
+ public function actionEdit() {
57
+ if ($this->validatePermission('smartslider_edit')) {
58
+ $slidersModel = new N2SmartsliderSlidersModel();
59
+ $sliderId = N2Request::getInt('sliderid');
60
+ $slider = $slidersModel->get($sliderId);
61
+ if ($this->validateDatabase($slider)) {
62
+ $slidesModel = new N2SmartsliderSlidesModel();
63
+ if (!$slidesModel->get(N2Request::getInt('slideid'))) {
64
+ $this->redirect("sliders/index");
65
+ }
66
+
67
+ $this->initAdminSlider();
68
+
69
+ $this->addView("../../inline/_sidebar_slide", array(
70
+ "appObj" => $this,
71
+ "slider" => $slider
72
+ ), "sidebar");
73
+ $this->addView("edit", array(
74
+ "slidesModel" => new N2SmartsliderSlidesModel(),
75
+ "sliderId" => $sliderId,
76
+ "slider" => $slider
77
+ ));
78
+ $this->render();
79
+ }
80
+ }
81
+ }
82
+
83
+
84
+ public function actionDelete() {
85
+ if ($this->validateToken() && $this->validatePermission('smartslider_delete')) {
86
+ if ($slideId = N2Request::getInt('slideid')) {
87
+ $slidesModel = new N2SmartsliderSlidesModel();
88
+ $slidesModel->delete($slideId);
89
+ $this->redirect(N2Request::getUrlReferrer());
90
+ }
91
+ $this->redirect(array("sliders/index"));
92
+ }
93
+ }
94
+
95
+ public function actionDuplicate() {
96
+ if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
97
+ if ($slideId = N2Request::getInt('slideid')) {
98
+ $slidesModel = new N2SmartsliderSlidesModel();
99
+ $newSlideId = $slidesModel->duplicate($slideId);
100
+
101
+ N2Message::success(n2_('Slide duplicated.'));
102
+
103
+ $this->redirect(array(
104
+ "slides/edit",
105
+ array(
106
+ "sliderid" => N2Request::getInt("sliderid"),
107
+ "slideid" => $newSlideId
108
+ )
109
+ ));
110
+ }
111
+ $this->redirect(array("sliders/index"));
112
+ }
113
+ }
114
+
115
+ public function actionFirst() {
116
+ if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
117
+ if (($slideId = N2Request::getInt('slideid')) && ($sliderid = N2Request::getInt('sliderid'))) {
118
+ $slidesModel = new N2SmartsliderSlidesModel();
119
+ $slidesModel->first($sliderid, $slideId);
120
+ $this->redirect(N2Request::getUrlReferrer());
121
+ }
122
+ $this->redirect(array("sliders/index"));
123
+ }
124
+ }
125
+
126
+ public function actionPublish() {
127
+ if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
128
+ if ($slideId = N2Request::getInt('slideid')) {
129
+ $slidesModel = new N2SmartsliderSlidesModel();
130
+ $slidesModel->publish($slideId);
131
+ $this->redirect(N2Request::getUrlReferrer());
132
+ }
133
+ $this->redirect(array("sliders/index"));
134
+ }
135
+ }
136
+
137
+ public function actionUnPublish() {
138
+ if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
139
+ if ($slideId = N2Request::getInt('slideid')) {
140
+ $slidesModel = new N2SmartsliderSlidesModel();
141
+ $slidesModel->unpublish($slideId);
142
+ $this->redirect(N2Request::getUrlReferrer());
143
+ }
144
+ $this->redirect(array("sliders/index"));
145
+ }
146
+ }
147
+
148
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Update.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class N2SmartsliderBackendUpdateController extends N2SmartSliderController {
3
+
4
+ public function actionCheck() {
5
+ if ($this->validateToken()) {
6
+ $status = N2SmartsliderUpdateModel::getInstance()
7
+ ->check();
8
+
9
+ $hasError = N2SS3::hasApiError($status);
10
+ if (is_array($hasError)) {
11
+ $this->redirect($hasError);
12
+ }
13
+
14
+ $this->redirectToSliders();
15
+ } else {
16
+ $this->refresh();
17
+ }
18
+
19
+ }
20
+
21
+
22
+ public function actionUpdate() {
23
+ if ($this->validateToken()) {
24
+ $status = N2SmartsliderUpdateModel::getInstance()
25
+ ->update();
26
+ // Used when WP need to request FTP credentials
27
+ if ($status != 'CREDENTIALS') {
28
+ $hasError = N2SS3::hasApiError($status);
29
+ if (is_array($hasError)) {
30
+ $this->redirect($hasError);
31
+ } else if ($hasError === false) {
32
+ N2Message::success(n2_('Smart Slider 3 updated to the latest version!'));
33
+ }
34
+
35
+ $this->redirectToSliders();
36
+ }
37
+ } else {
38
+ $this->refresh();
39
+ }
40
+
41
+ }
42
+
43
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Backgroundanimation.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Base::getApplication('system')->getApplicationType('backend');
3
+ N2Loader::import('helpers.controllers.VisualManagerAjax', 'system.backend');
4
+
5
+ class N2SmartSliderBackendBackgroundAnimationControllerAjax extends N2SystemBackendVisualManagerControllerAjax
6
+ {
7
+
8
+ protected $type = 'backgroundanimation';
9
+
10
+ public function initialize() {
11
+ parent::initialize();
12
+
13
+ N2Loader::import(array(
14
+ 'models.' . $this->type
15
+ ), 'smartslider');
16
+ }
17
+
18
+ public function getModel() {
19
+ return new N2SmartSliderBackgroundAnimationModel();
20
+ }
21
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Generator.php ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import("backend.controllers.Generator", 'smartslider');
4
+ N2Loader::import('libraries.slider.generator.abstract', 'smartslider');
5
+
6
+ class N2SmartsliderBackendGeneratorControllerAjax extends N2SmartSliderControllerAjax
7
+ {
8
+
9
+ public function initialize() {
10
+ parent::initialize();
11
+
12
+ N2Loader::import(array(
13
+ 'models.generator',
14
+ 'models.Sliders',
15
+ 'models.Slides'
16
+ ), 'smartslider');
17
+ }
18
+
19
+ public function actionRecordsTable() {
20
+
21
+ $this->validateToken();
22
+
23
+ $this->validatePermission('smartslider_edit');
24
+
25
+ $generatorId = N2Request::getInt('generator_id');
26
+
27
+ $generatorModel = new N2SmartsliderGeneratorModel();
28
+
29
+ if ($generatorId > 0) {
30
+ $generator = $generatorModel->get($generatorId);
31
+
32
+ $this->validateDatabase($generator);
33
+ } else {
34
+ $info = new N2Data(N2Request::getVar('generator'));
35
+ $generator = array(
36
+ 'group' => $info->get('group'),
37
+ 'type' => $info->get('type'),
38
+ 'params' => '{}'
39
+ );
40
+ }
41
+
42
+ $info = $generatorModel->getGeneratorInfo($generator['group'], $generator['type']);
43
+
44
+ $generator['params'] = new N2Data($generator['params'], true);
45
+
46
+ $generator['params']->loadArray(N2Request::getVar('generator'));
47
+
48
+ require_once($info->path . '/generator.php');
49
+ $class = 'N2Generator' . $generator['group'] . $generator['type'];
50
+ /** @var N2GeneratorAbstract $dataSource */
51
+ $dataSource = new $class($info, $generator['params']);
52
+
53
+
54
+ $request = new N2Data(N2Request::getVar('generator'));
55
+
56
+ $group = max(intval($request->get('record-group', 1)), 1);
57
+
58
+ $result = $dataSource->getData(max($request->get('record-slides', 1), 1), max($request->get('record-start', 1), 1), $group);
59
+
60
+ if (count($result)) {
61
+ ob_start();
62
+
63
+ $headings = array();
64
+
65
+ for ($i = 1; $i <= $group; $i++) {
66
+ $headings[] = '#';
67
+ foreach ($result[0][0] AS $k => $v) {
68
+ $headings[] = '{' . $k . '/' . $i . '}';
69
+ }
70
+ }
71
+
72
+ $headingHTML = N2Html::tag('thead', array(), N2Html::tag('tr', array(), '<th>' . implode('</th><th>', $headings) . '</th>'));
73
+
74
+
75
+ $rows = array();
76
+
77
+ $i = 0;
78
+ foreach ($result AS $records) {
79
+ foreach ($records AS $g => $record) {
80
+ $rows[$i][] = $i + 1;
81
+ foreach ($record AS $k => $v) {
82
+ $rows[$i][] = N2Html::tag('div', array(), htmlspecialchars($v, ENT_QUOTES, "UTF-8"));
83
+ }
84
+ }
85
+ $i++;
86
+ }
87
+
88
+ for ($i = 0; $i < count($rows); $i++) {
89
+ $rows[$i] = '<td>' . implode('</td><td>', $rows[$i]) . '</td>';
90
+ }
91
+ $recordHTML = N2Html::tag('tbody', array(), '<tr>' . implode('</tr><tr>', $rows) . '</tr>');
92
+
93
+
94
+ echo N2Html::tag('div', array('style' => 'width: 100%; height: 100%; overflow: auto;'), N2Html::tag('table', array(
95
+ 'class' => 'n2-generator-records n2-table n2-table-fancy',
96
+ 'style' => 'margin: 10px; width: auto; table-layout: fixed;'
97
+ ), $headingHTML . $recordHTML));
98
+
99
+ $this->response->respond(array(
100
+ 'html' => ob_get_clean()
101
+ ));
102
+
103
+ } else {
104
+ N2Message::notice('No records found for the filter');
105
+ $this->response->error();
106
+ }
107
+ }
108
+
109
+ public function actionGetAuthUrl() {
110
+ $this->validateToken();
111
+ $this->validatePermission('smartslider_config');
112
+ $group = N2Request::getVar('group');
113
+ $type = N2Request::getVar('type');
114
+
115
+ $generatorModel = new N2SmartsliderGeneratorModel();
116
+ $info = $generatorModel->getGeneratorInfo($group, $type);
117
+
118
+ try {
119
+ $configuration = $info->getConfiguration();
120
+ $this->response->respond(array('authUrl' => $configuration->startAuth()));
121
+ } catch (Exception $e) {
122
+ N2Message::error($e->getMessage());
123
+ $this->response->error();
124
+ }
125
+ }
126
+
127
+ public function actionGetData() {
128
+ $this->validateToken();
129
+ $this->validatePermission('smartslider_edit');
130
+
131
+ $group = N2Request::getVar('group');
132
+ $type = N2Request::getVar('type');
133
+
134
+
135
+ $generatorModel = new N2SmartsliderGeneratorModel();
136
+ $info = $generatorModel->getGeneratorInfo($group, $type);
137
+
138
+ $configuration = $info->getConfiguration();
139
+ try {
140
+ $this->response->respond(call_user_func(array(
141
+ $configuration,
142
+ N2Request::getCmd('method')
143
+ )));
144
+ } catch (Exception $e) {
145
+ N2Message::error($e->getMessage());
146
+ $this->response->error();
147
+ }
148
+ }
149
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Guide.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendGuideControllerAjax extends N2SmartSliderControllerAjax
4
+ {
5
+
6
+ public function actionEnd() {
7
+
8
+ $this->validateToken();
9
+
10
+ $this->validatePermission('smartslider_edit');
11
+
12
+ $key = N2Request::getCmd('key');
13
+ N2SmartSliderSettings::set('guide-' . $key, 0);
14
+
15
+ N2Message::notice('The ' . $key . ' guide completed. If you need it again, you can turn it on in the "Settings"!');
16
+
17
+ $this->response->respond();
18
+ }
19
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Layout.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Base::getApplication('system')->getApplicationType('backend');
3
+ N2Loader::import('helpers.controllers.VisualManagerAjax', 'system.backend');
4
+
5
+ class N2SmartSliderBackendLayoutControllerAjax extends N2SystemBackendVisualManagerControllerAjax
6
+ {
7
+
8
+ protected $type = 'layout';
9
+
10
+ public function getModel() {
11
+ N2Loader::import(array(
12
+ 'models.' . $this->type
13
+ ), 'smartslider');
14
+ return new N2SmartSliderLayoutModel();
15
+ }
16
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Settings.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSettingsControllerAjax extends N2SmartSliderControllerAjax {
4
+
5
+ public function actionRated() {
6
+ $this->validateToken();
7
+ $this->appType->app->storage->set('free', 'rated', 1);
8
+ $this->response->respond();
9
+ }
10
+
11
+ public function actionSubscribed() {
12
+ $this->validateToken();
13
+ $this->appType->app->storage->set('free', 'subscribeOnImport', 1);
14
+
15
+ $this->response->respond();
16
+ }
17
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Slider.php ADDED
@@ -0,0 +1,213 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSliderControllerAjax extends N2SmartSliderControllerAjax {
4
+
5
+ public function initialize() {
6
+ parent::initialize();
7
+
8
+ N2Loader::import(array(
9
+ 'models.Ajax',
10
+ 'models.Sliders'
11
+ ), 'smartslider');
12
+ }
13
+
14
+ public function actionCreate() {
15
+ $this->validateToken();
16
+ $this->validatePermission('smartslider_edit');
17
+ $slidersModel = new N2SmartsliderSlidersModel();
18
+
19
+ $title = N2Request::getVar('sliderTitle');
20
+ $this->validateVariable(!empty($title), 'slider name');
21
+
22
+ $slider = array(
23
+ 'type' => 'simple',
24
+ 'title' => N2Request::getVar('sliderTitle'),
25
+ 'width' => max(N2Request::getInt('sliderSizeWidth', 800), 50),
26
+ 'height' => max(N2Request::getInt('sliderSizeHeight', 500), 50)
27
+ );
28
+
29
+ $preset = N2Request::getVar('preset');
30
+ switch ($preset) {
31
+ case 'fullwidth':
32
+ $slider['responsive-mode'] = 'fullwidth';
33
+ $slider['widgetarrow'] = 'imageEmpty';
34
+ break;
35
+ case 'fullpage':
36
+ $slider['responsive-mode'] = 'fullpage';
37
+ $slider['widgetarrow'] = 'imageEmpty';
38
+ break;
39
+ case 'block':
40
+ $slider['type'] = 'block';
41
+ $slider['responsive-mode'] = 'fullwidth';
42
+ break;
43
+ case 'showcase':
44
+ $slider['type'] = 'showcase';
45
+ $slider['slide-width'] = intval($slider['width'] * 0.8);
46
+ $slider['slide-height'] = intval($slider['height'] * 0.8);
47
+ break;
48
+ case 'carousel':
49
+ $slider['responsiveScaleUp'] = 1;
50
+ $slider['type'] = 'carousel';
51
+ $slider['slide-width'] = intval(($slider['width'] - 40) * 0.32);
52
+ $slider['slide-height'] = intval($slider['height'] * 0.8);
53
+ $slider['widgetbullet'] = 'transitionRectangle';
54
+ $slider['widgetarrow'] = 'disabled';
55
+ break;
56
+ case 'thumbnailhorizontal':
57
+ $slider['widgetthumbnail'] = 'default';
58
+ break;
59
+ case 'thumbnailvertical':
60
+ $slider['widgetthumbnail'] = 'default';
61
+ $slider['widget-thumbnail-position-area'] = '8';
62
+ break;
63
+ case 'caption':
64
+ $slider['widgetarrow'] = 'imageEmpty';
65
+ $slider['widgetbar'] = 'horizontalFull';
66
+ break;
67
+ case 'horizontalaccordion':
68
+ $slider['type'] = 'accordion';
69
+ $slider['orientation'] = 'horizontal';
70
+ break;
71
+ case 'verticalaccordion':
72
+ $slider['type'] = 'accordion';
73
+ $slider['orientation'] = 'vertical';
74
+ break;
75
+ default:
76
+ $slider['widgetarrow'] = 'imageEmpty';
77
+ }
78
+
79
+ $sliderid = $slidersModel->create($slider);
80
+
81
+ N2Message::success(n2_('Slider created.'));
82
+
83
+ $this->response->redirect(array(
84
+ "slider/edit",
85
+ array("sliderid" => $sliderid)
86
+ ));
87
+ }
88
+
89
+ public function actionEdit() {
90
+ $this->validateToken();
91
+ $this->validatePermission('smartslider_edit');
92
+
93
+ if (N2Request::getInt('save')) {
94
+
95
+ $slidersModel = new N2SmartsliderSlidersModel();
96
+
97
+ $slider = $slidersModel->get(N2Request::getInt('sliderid'));
98
+ $this->validateDatabase($slider);
99
+ if ($sliderid = $slidersModel->save($slider['id'], N2Request::getVar('slider'))) {
100
+ N2Message::success(n2_('Slider saved.'));
101
+ $this->response->respond();
102
+ }
103
+ }
104
+
105
+ $response = null;
106
+
107
+ $id = N2Request::getCmd('id');
108
+
109
+ $ajaxModel = new N2SmartSliderAjaxModel();
110
+
111
+ ob_start();
112
+ switch ($id) {
113
+ case 'slidertype':
114
+ $response = $ajaxModel->sliderType($this->appType);
115
+ break;
116
+ case 'sliderresponsivemode':
117
+ $response = $ajaxModel->sliderResponsiveMode($this->appType);
118
+ break;
119
+ case 'sliderwidgetarrow':
120
+ $response = $ajaxModel->sliderWidget($this->appType, 'arrow');
121
+ break;
122
+ case 'sliderwidgetbullet':
123
+ $response = $ajaxModel->sliderWidget($this->appType, 'bullet');
124
+ break;
125
+ case 'sliderwidgetautoplay':
126
+ $response = $ajaxModel->sliderWidget($this->appType, 'autoplay');
127
+ break;
128
+ case 'sliderwidgetindicator':
129
+ $response = $ajaxModel->sliderWidget($this->appType, 'indicator');
130
+ break;
131
+ case 'sliderwidgetfullscreen':
132
+ $response = $ajaxModel->sliderWidget($this->appType, 'fullscreen');
133
+ break;
134
+ case 'sliderwidgetbar':
135
+ $response = $ajaxModel->sliderWidget($this->appType, 'bar');
136
+ break;
137
+ case 'sliderwidgetthumbnail':
138
+ $response = $ajaxModel->sliderWidget($this->appType, 'thumbnail');
139
+ break;
140
+ case 'sliderwidgetshadow':
141
+ $response = $ajaxModel->sliderWidget($this->appType, 'shadow');
142
+ break;
143
+ case 'sliderwidgethtml':
144
+ $response = $ajaxModel->sliderWidget($this->appType, 'html');
145
+ break;
146
+ }
147
+
148
+ if ($response == null) {
149
+ $response = array(
150
+ 'html' => '',
151
+ 'script' => ''
152
+ );
153
+ }
154
+ $response['html'] .= ob_get_clean();
155
+
156
+ $this->response->respond($response);
157
+ }
158
+
159
+ public function actionImportDemo() {
160
+ $this->validateToken();
161
+ $this->validatePermission('smartslider_edit');
162
+
163
+ $key = 'http:' . base64_decode(N2Request::getVar('key'));
164
+ if (strpos($key, 'http://smartslider3.com/') !== 0) {
165
+ N2Message::error(sprintf(n2_('Import url is not valid: %s'), $key));
166
+ $this->response->error();
167
+ }
168
+ N2Base::getApplication('smartslider')->storage->set('free', 'subscribeOnImport', 1);
169
+
170
+
171
+ $posts = array(
172
+ 'action' => 'asset',
173
+ 'asset' => $key
174
+ );
175
+ $result = N2SS3::api($posts);
176
+
177
+ if (!is_string($result)) {
178
+ $hasError = N2SS3::hasApiError($result['status'], array(
179
+ 'key' => $key
180
+ ));
181
+ if (is_array($hasError)) {
182
+ $this->redirect($hasError);
183
+ } else if ($hasError !== false) {
184
+ $this->response->error();
185
+ }
186
+ } else {
187
+
188
+ N2Loader::import(array(
189
+ 'models.Sliders',
190
+ 'models.Slides'
191
+ ), 'smartslider');
192
+
193
+ N2Loader::import('libraries.import', 'smartslider');
194
+
195
+ $import = new N2SmartSliderImport();
196
+ $sliderId = $import->import($result, 'clone', 1, false);
197
+
198
+ if ($sliderId !== false) {
199
+ N2Message::success(n2_('Slider imported.'));
200
+
201
+ $this->response->redirect(array(
202
+ "slider/edit",
203
+ array("sliderid" => $sliderId)
204
+ ));
205
+ } else {
206
+ N2Message::error(n2_('Import error!'));
207
+ $this->response->error();
208
+ }
209
+ }
210
+
211
+ $this->response->respond();
212
+ }
213
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Slides.php ADDED
@@ -0,0 +1,372 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSlidesControllerAjax extends N2SmartSliderControllerAjax {
4
+
5
+ public function initialize() {
6
+ parent::initialize();
7
+
8
+ N2Loader::import(array(
9
+ 'models.Slides',
10
+ 'models.Sliders',
11
+ 'models.generator'
12
+ ), 'smartslider');
13
+ }
14
+
15
+ public function actionCreate() {
16
+ $this->validateToken();
17
+ $this->validatePermission('smartslider_edit');
18
+
19
+ $slidersModel = new N2SmartsliderSlidersModel();
20
+ $sliderId = N2Request::getInt('sliderid');
21
+ $slider = $slidersModel->get($sliderId);
22
+ $this->validateDatabase($slider);
23
+
24
+ if (N2Request::getInt('save')) {
25
+
26
+ if (N2SmartSliderSettings::get('slide-as-file', 0) && isset($_FILES['slide']) && isset(N2Request::$storage['slide'])) {
27
+ N2Request::$storage['slide']['slide'] = N2Filesystem::readFile($_FILES['slide']['tmp_name']);
28
+ }
29
+
30
+ $slidesModel = new N2SmartsliderSlidesModel();
31
+ $slideId = $slidesModel->create($sliderId, N2Request::getVar('slide'));
32
+ $this->validateDatabase($slideId);
33
+
34
+ $this->response->redirect(array(
35
+ "slides/edit",
36
+ array(
37
+ "sliderid" => N2Request::getInt("sliderid"),
38
+ "slideid" => $slideId
39
+ )
40
+ ));
41
+ }
42
+ }
43
+
44
+ public function actionEdit() {
45
+ $this->validateToken();
46
+ $this->validatePermission('smartslider_edit');
47
+
48
+ $slidersModel = new N2SmartsliderSlidersModel();
49
+ $sliderId = N2Request::getInt('sliderid');
50
+ $slider = $slidersModel->get($sliderId);
51
+
52
+ $this->validateDatabase($slider);
53
+
54
+ $slidesModel = new N2SmartsliderSlidesModel();
55
+ $this->validateDatabase($slidesModel->get(N2Request::getInt('slideid')));
56
+
57
+ $response = array();
58
+
59
+ if (N2Request::getInt('save')) {
60
+
61
+ if (N2SmartSliderSettings::get('slide-as-file', 0) && isset($_FILES['slide']) && isset(N2Request::$storage['slide'])) {
62
+ N2Request::$storage['slide']['slide'] = N2Filesystem::readFile($_FILES['slide']['tmp_name']);
63
+ }
64
+
65
+ if ($slideId = $slidesModel->save(N2Request::getInt('slideid'), N2Request::getVar('slide'))) {
66
+ N2Message::success(n2_('Slide saved.'));
67
+ if (N2Request::getInt('static') == 1) {
68
+ $slideCount = $slidesModel->makeStatic(N2Request::getInt('slideid'));
69
+ if ($slideCount) {
70
+ N2Message::success(sprintf(n2_('%d static slides generated.'), $slideCount));
71
+
72
+ $this->response->redirect(array(
73
+ "slider/edit",
74
+ array(
75
+ "sliderid" => $sliderId
76
+ )
77
+ ));
78
+ }
79
+ }
80
+ }
81
+ }
82
+ $this->response->respond($response);
83
+ }
84
+
85
+ public function actionFirst() {
86
+ $this->validateToken();
87
+
88
+ $this->validatePermission('smartslider_edit');
89
+
90
+ $slideId = N2Request::getInt('id');
91
+ $this->validateVariable($slideId > 0, 'Slide id');
92
+
93
+ $slidesModel = new N2SmartsliderSlidesModel();
94
+ $slidesModel->first($slideId);
95
+ N2Message::success(n2_('First slide changed.'));
96
+
97
+ $this->response->respond();
98
+ }
99
+
100
+ public function actionPublish() {
101
+ $this->validateToken();
102
+
103
+ $this->validatePermission('smartslider_edit');
104
+
105
+ $ids = array_map('intval', array_filter((array)N2Request::getVar('slides'), 'is_numeric'));
106
+
107
+ $this->validateVariable(count($ids), 'Slides');
108
+
109
+ $slidesModel = new N2SmartsliderSlidesModel();
110
+ foreach ($ids AS $id) {
111
+ if ($id > 0) {
112
+ $slidesModel->publish($id);
113
+ }
114
+ }
115
+ N2Message::success(n2_('Slide published.'));
116
+ $this->response->respond();
117
+ }
118
+
119
+ public function actionUnPublish() {
120
+ $this->validateToken();
121
+
122
+ $this->validatePermission('smartslider_edit');
123
+
124
+ $ids = array_map('intval', array_filter((array)N2Request::getVar('slides'), 'is_numeric'));
125
+ $this->validateVariable(count($ids), 'Slides');
126
+
127
+ $slidesModel = new N2SmartsliderSlidesModel();
128
+ foreach ($ids AS $id) {
129
+ if ($id > 0) {
130
+ $slidesModel->unpublish($id);
131
+ }
132
+ }
133
+ N2Message::success(n2_('Slide unpublished.'));
134
+ $this->response->respond();
135
+ }
136
+
137
+ public function actionOrder() {
138
+ $this->validateToken();
139
+
140
+ $this->validatePermission('smartslider_edit');
141
+
142
+ $sliderid = N2Request::getInt('sliderid');
143
+ $this->validateVariable($sliderid > 0, 'Slider');
144
+
145
+ $slidesModel = new N2SmartsliderSlidesModel();
146
+
147
+ $result = $slidesModel->order($sliderid, N2Request::getVar('slideorder'));
148
+ $this->validateDatabase($result);
149
+
150
+ N2Message::success(n2_('Slide order saved.'));
151
+ $this->response->respond();
152
+ }
153
+
154
+
155
+ public function actionDuplicate() {
156
+ $this->validateToken();
157
+
158
+ $this->validatePermission('smartslider_edit');
159
+
160
+ $slideId = N2Request::getInt('slideid');
161
+ $this->validateVariable($slideId > 0, 'Slide');
162
+
163
+ $slidesModel = new N2SmartsliderSlidesModel();
164
+ $newSlideId = $slidesModel->duplicate($slideId);
165
+ $slide = $slidesModel->get($newSlideId);
166
+
167
+ $this->validateDatabase($slide);
168
+
169
+ N2Message::success(n2_('Slide duplicated.'));
170
+
171
+ $sliderObj = new N2SmartSlider($slide['slider'], array());
172
+ $sliderObj->loadSliderParams();
173
+ $optimize = new N2SmartSliderFeatureOptimize($sliderObj);
174
+
175
+ $slideObj = new N2SmartSliderSlide($sliderObj, $slide);
176
+ $slideObj->initGenerator();
177
+ $slideObj->fillSample();
178
+
179
+ $this->addView('slidebox', array(
180
+ 'slider' => $sliderObj,
181
+ 'slide' => $slideObj,
182
+ 'optimize' => $optimize
183
+ ));
184
+ ob_start();
185
+ $this->render();
186
+ $box = ob_get_clean();
187
+ $this->response->respond($box);
188
+ }
189
+
190
+
191
+ public function actionDelete() {
192
+ $this->validateToken();
193
+
194
+ $this->validatePermission('smartslider_delete');
195
+
196
+ $ids = array_map('intval', array_filter((array)N2Request::getVar('slides'), 'is_numeric'));
197
+
198
+ $this->validateVariable(count($ids), 'Slide');
199
+
200
+ $slidesModel = new N2SmartsliderSlidesModel();
201
+ foreach ($ids AS $id) {
202
+ if ($id > 0) {
203
+ $slidesModel->delete($id);
204
+ }
205
+ }
206
+ N2Message::success(n2_('Slide deleted.'));
207
+ $this->response->respond();
208
+ }
209
+
210
+ public function actionQuickImages() {
211
+ $this->validateToken();
212
+
213
+ $this->validatePermission('smartslider_edit');
214
+
215
+ $sliderId = N2Request::getInt('sliderid');
216
+ $this->validateVariable($sliderId > 0, 'Slider');
217
+
218
+ $images = json_decode(base64_decode(N2Request::getVar('images')), true);
219
+ $this->validateVariable(count($images), 'Images');
220
+
221
+ $sliderObj = new N2SmartSlider($sliderId, array());
222
+ $sliderObj->loadSliderParams();
223
+ $optimize = new N2SmartSliderFeatureOptimize($sliderObj);
224
+
225
+ $slidesModel = new N2SmartsliderSlidesModel();
226
+ foreach ($images AS $image) {
227
+ $newSlideId = $slidesModel->createQuickImage($image, $sliderId);
228
+ $slide = $slidesModel->get($newSlideId);
229
+
230
+ $slideObj = new N2SmartSliderSlide($sliderObj, $slide);
231
+ $slideObj->initGenerator();
232
+ $slideObj->fillSample();
233
+
234
+ $this->addView('slidebox', array(
235
+ 'slider' => $sliderObj,
236
+ 'slide' => $slideObj,
237
+ 'optimize' => $optimize
238
+ ));
239
+ }
240
+
241
+ ob_start();
242
+ $this->render();
243
+ $box = ob_get_clean();
244
+ N2Message::success(n2_n('Slide created.', 'Slides created.', count($images)));
245
+ $this->response->respond($box);
246
+ }
247
+
248
+ public function actionQuickVideo() {
249
+ $this->validateToken();
250
+
251
+ $this->validatePermission('smartslider_edit');
252
+
253
+ $sliderId = N2Request::getInt('sliderid');
254
+ $this->validateVariable($sliderId > 0, 'Slider');
255
+
256
+ $slidesModel = new N2SmartsliderSlidesModel();
257
+ $video = json_decode(base64_decode(N2Request::getVar('video')), true);
258
+ $this->validateVariable($video, 'Video');
259
+
260
+ $newSlideId = $slidesModel->createQuickVideo($video, $sliderId);
261
+ $slide = $slidesModel->get($newSlideId);
262
+ $this->validateDatabase($slide);
263
+
264
+ $sliderObj = new N2SmartSlider($slide['slider'], array());
265
+ $sliderObj->loadSliderParams();
266
+ $optimize = new N2SmartSliderFeatureOptimize($sliderObj);
267
+
268
+ $slideObj = new N2SmartSliderSlide($sliderObj, $slide);
269
+ $slideObj->initGenerator();
270
+ $slideObj->fillSample();
271
+
272
+ $this->addView('slidebox', array(
273
+ 'slider' => $sliderObj,
274
+ 'slide' => $slideObj,
275
+ 'optimize' => $optimize
276
+ ));
277
+
278
+ ob_start();
279
+ $this->render();
280
+ $box = ob_get_clean();
281
+ N2Message::success(n2_('Slide created.'));
282
+ $this->response->respond($box);
283
+ }
284
+
285
+ public function actionQuickPost() {
286
+ $this->validateToken();
287
+
288
+ $this->validatePermission('smartslider_edit');
289
+
290
+ $sliderId = N2Request::getInt('sliderid');
291
+ $this->validateVariable($sliderId > 0, 'Slider');
292
+
293
+ $slidesModel = new N2SmartsliderSlidesModel();
294
+ $post = N2Request::getVar('post');
295
+ $this->validateVariable($post, 'Post');
296
+
297
+ $newSlideId = $slidesModel->createQuickPost($post, $sliderId);
298
+ $slide = $slidesModel->get($newSlideId);
299
+ $this->validateDatabase($slide);
300
+
301
+ $sliderObj = new N2SmartSlider($slide['slider'], array());
302
+ $sliderObj->loadSliderParams();
303
+ $optimize = new N2SmartSliderFeatureOptimize($sliderObj);
304
+
305
+ $slideObj = new N2SmartSliderSlide($sliderObj, $slide);
306
+ $slideObj->initGenerator();
307
+ $slideObj->fillSample();
308
+
309
+ $this->addView('slidebox', array(
310
+ 'slider' => $sliderObj,
311
+ 'slide' => $slideObj,
312
+ 'optimize' => $optimize
313
+ ));
314
+
315
+ ob_start();
316
+ $this->render();
317
+ $box = ob_get_clean();
318
+ N2Message::success(n2_('Slide created.'));
319
+ $this->response->respond($box);
320
+ }
321
+
322
+ public function actionQuickEdit() {
323
+ $this->validateToken();
324
+
325
+ $this->validatePermission('smartslider_edit');
326
+
327
+ $sliderId = N2Request::getInt('sliderid');
328
+ $this->validateVariable($sliderId > 0, 'Slider');
329
+
330
+ $slidesModel = new N2SmartsliderSlidesModel();
331
+ $slides = $slidesModel->getAll($sliderId);
332
+
333
+ $changed = json_decode(base64_decode(N2Request::getVar('changed')), true);
334
+
335
+ if (!$changed || !is_array($changed)) {
336
+ $changed = array();
337
+ }
338
+
339
+ foreach ($slides AS $slide) {
340
+ if (!empty($changed[$slide['id']])) {
341
+ $slidesModel->quickSlideUpdate($slide, $changed[$slide['id']]['name'], $changed[$slide['id']]['description'], $changed[$slide['id']]['link']);
342
+ }
343
+ }
344
+
345
+ $sliderObj = new N2SmartSlider($sliderId, array());
346
+ $slides = $slidesModel->getAll($sliderId);
347
+
348
+ $slidesObj = array();
349
+ foreach ($slides AS $i => $slide) {
350
+ if (!empty($changed[$slide['id']])) {
351
+ $slidesObj[$i] = new N2SmartSliderSlide($sliderObj, $slide);
352
+ $slidesObj[$i]->initGenerator();
353
+ }
354
+ }
355
+
356
+ $updateSlideBox = array();
357
+ /** @var N2SmartSliderSlide $slideObj */
358
+ foreach ($slidesObj AS $slideObj) {
359
+ $slideObj->fillSample();
360
+ $updateSlideBox[$slideObj->id] = array(
361
+ 'title' => $slideObj->getTitle() . ($slideObj->hasGenerator() ? ' [' . $slideObj->getSlideStat() . ']' : ''),
362
+ 'rawTitle' => $slideObj->getRawTitle(),
363
+ 'rawDescription' => $slideObj->getRawDescription(),
364
+ 'rawLink' => $slideObj->getRawLink()
365
+ );
366
+ }
367
+
368
+ N2Message::success(sprintf(n2_('%d slide(s) modified!'), count($slidesObj)));
369
+
370
+ $this->response->respond($updateSlideBox);
371
+ }
372
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/helpers/controller/N2SmartSliderController.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderController extends N2BackendController
4
+ {
5
+
6
+ public function initialize() {
7
+ parent::initialize();
8
+
9
+ N2JS::addFirstCode('window.ss2lang = {};');
10
+
11
+ N2Loader::import(array(
12
+ 'models.License',
13
+ 'models.Update'
14
+ ), 'smartslider');
15
+ N2JS::addInline("new NextendSmartSliderCreateSlider('" . $this->appType->router->createUrl(array('slider/create')) . "');");
16
+
17
+ N2Localization::addJS(array(
18
+ 'Create Slider',
19
+ 'Slider name',
20
+ 'Slider',
21
+ 'Width',
22
+ 'Height',
23
+ 'Create',
24
+ 'Preset',
25
+ 'Default',
26
+ 'Full width',
27
+ 'Full page',
28
+ 'Block',
29
+ 'Thumbnail - horizontal',
30
+ 'Thumbnail - vertical',
31
+ 'Caption',
32
+ 'Horizontal accordion',
33
+ 'Vertical accordion',
34
+ 'Showcase',
35
+ 'Saved slide',
36
+ 'Carousel'
37
+ ));
38
+ }
39
+
40
+ public function redirectToSliders() {
41
+ $this->redirect(array("sliders/index"));
42
+ }
43
+
44
+ }
45
+
46
+ class N2SmartSliderControllerAjax extends N2BackendControllerAjax
47
+ {
48
+
49
+ public function initialize() {
50
+ parent::initialize();
51
+
52
+ N2Loader::import(array(
53
+ 'models.License'
54
+ ), 'smartslider');
55
+ }
56
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/_sidebar_settings.phtml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $action = N2Request::getCmd('nextendaction', 'default');
3
+
4
+
5
+ $settings = array(
6
+ 'default' => array(
7
+ 'title' => n2_('General settings'),
8
+ 'url' => array("settings/default")
9
+ ),
10
+ 'itemDefaults' => array(
11
+ 'title' => n2_('Item defaults'),
12
+ 'url' => array("settings/itemDefaults")
13
+ ),
14
+ 'nextend' => array(
15
+ 'title' => n2_('Nextend settings'),
16
+ 'url' => N2Base::getApplication('system')->router->createUrl("dashboard/index")
17
+ )
18
+ );
19
+
20
+ N2Plugin::callPlugin('ssgenerator', 'onSmartSliderConfigurationList', array(&$settings));
21
+
22
+ $dl = array();
23
+
24
+ foreach ($settings AS $id => $setting) {
25
+ $linkOptions = isset($setting['linkOptions']) ? $setting['linkOptions'] : array();
26
+ $linkOptions['href'] = $this->appType->router->createUrl($setting['url']);
27
+ $dl[] = array(
28
+ 'title' => $setting['title'],
29
+ 'class' => ($action == $id ? 'n2-active ' : ''),
30
+ 'linkOptions' => $linkOptions
31
+ );
32
+ }
33
+
34
+ echo $this->widget->init("definitionlist", array(
35
+ "dl" => $dl
36
+ ));
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/_sidebar_slide.phtml ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import("models.Layers", "smartslider");
3
+ N2Loader::import("models.Item", "smartslider");
4
+ ?>
5
+
6
+ <div id="n2-ss-slide-sidebar" class="smartslider-slide-toolbox-slide-active smartslider-slide-layout-default-active">
7
+ <div id="n2-ss-slide-editor-main-tab" class="n2-table n2-table-fixed n2-sidebar-tab-switcher n2-sidebar-tab-bg">
8
+ <div class="n2-tr">
9
+ <div class="n2-td n2-h3 n2-uc n2-has-underline n2-slides-tab-label">
10
+ <span class="n2-underline"><?php n2_e('Slides'); ?></span>
11
+ </div>
12
+
13
+ <div style="<?php if (N2SSPRO) echo 'width:40%;'; ?>"
14
+ class="n2-td n2-h3 n2-uc n2-has-underline n2-layers-tab-label n2-active">
15
+ <span class="n2-underline"><?php n2_e('Layers'); ?></span>
16
+ </div>
17
+ <?php
18
+ ?>
19
+ </div>
20
+ </div>
21
+
22
+ <div class="n2-slides-tab" style="display:none;">
23
+ <?php
24
+ $this->renderInline("_sliders");
25
+ ?>
26
+ </div>
27
+
28
+ <div class="n2-layers-tab" style="display:block;">
29
+
30
+ <div id="smartslider-slide-toolbox-layer">
31
+ <?php
32
+
33
+ $class = 'N2SSPluginType' . $slider['type'];
34
+
35
+ N2Loader::importPath(call_user_func(array(
36
+ $class,
37
+ "getPath"
38
+ )) . NDS . 'type');
39
+ $itemDefaults = call_user_func(array(
40
+ 'N2SmartSliderType' . $slider['type'],
41
+ 'getItemDefaults'
42
+ ));
43
+ ?>
44
+ <script type="text/javascript">
45
+ window.ssitemmarker = true;
46
+ </script>
47
+ <div id="n2-ss-item-container" class="n2-sidebar-list-bg">
48
+ <?php
49
+ $items = array();
50
+ N2Plugin::callPlugin('ssitem', 'onNextendSliderItemList', array(&$items));
51
+ N2SSPluginItemAbstract::sortItems($items);
52
+
53
+ foreach ($items AS $type => $item) {
54
+ echo N2Html::tag('div', array(
55
+ 'class' => 'n2-h5 n2-ss-core-item n2-ss-core-item-' . $type,
56
+ 'data-layerproperties' => json_encode((object)array_merge($item[5], $itemDefaults)),
57
+ 'data-item' => $type
58
+ ), N2Html::tag('div', array(), $item[0]));
59
+ }
60
+ ?>
61
+ </div>
62
+ <script type="text/javascript">
63
+ delete window.ssitemmarker;
64
+ </script>
65
+
66
+ <div id="n2-ss-layers-items-list">
67
+ <ul class="n2-list n2-h4 n2-list-orderable">
68
+
69
+ </ul>
70
+ </div>
71
+
72
+ <div class="n2-sidebar-pane-sizer">
73
+ <i class="n2-i n2-it n2-i-drag"></i>
74
+ </div>
75
+
76
+ <div id="layeritemeditorpanel" class="n2-form-dark">
77
+ <?php
78
+
79
+ $layerModel = new N2SmartsliderLayersModel();
80
+ $layerModel->renderForm();
81
+ ?>
82
+ </div>
83
+ </div>
84
+
85
+ </div>
86
+
87
+ <?php
88
+ ?>
89
+
90
+
91
+ <script type="text/javascript">
92
+ nextend.ready(function ($) {
93
+ new NextendHeadingPane($('#n2-ss-slide-editor-main-tab .n2-td'), [
94
+ $('.n2-slides-tab'),
95
+ $('.n2-layers-tab'),
96
+ $('.n2-layouts-tab')
97
+ ]);
98
+ });
99
+ </script>
100
+ </div>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/_sliders.phtml ADDED
@@ -0,0 +1,253 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="n2-sidebar-inner">
2
+ <?php
3
+ N2Loader::import('libraries.browse.browse');
4
+
5
+ $app = N2Base::getApplication('smartslider');
6
+ $accessEdit = N2Acl::canDo('smartslider_edit', $app->info);
7
+ $accessDelete = N2Acl::canDo('smartslider_delete', $app->info);
8
+
9
+ $sliderid = N2Request::getInt('sliderid', 0);
10
+ $generatorId = N2Request::getInt('generator_id', 0);
11
+ $controller = N2Request::getCmd('nextendcontroller');
12
+
13
+ $slidersModel = new N2SmartsliderSlidersModel();
14
+
15
+ $showSlideManager = false;
16
+ $dl = array();
17
+
18
+ if (!$sliderid) {
19
+
20
+ $orderBy = N2SmartSliderSettings::get('slidersOrder', 'time');
21
+ $orderByDirection = N2SmartSliderSettings::get('slidersOrderDirection', 'DESC');
22
+
23
+ $actions = N2Html::tag('a', array(
24
+ "class" => 'n2-button n2-button-grey n2-button-medium' . ($orderBy == 'title' ? ' n2-active' : ''),
25
+ "href" => $this->appType->router->createUrl(array(
26
+ 'sliders/orderby',
27
+ array(
28
+ 'title' => ($orderBy == 'title' ? ($orderByDirection == 'ASC' ? 'DESC' : 'ASC') : 'ASC')
29
+ ) + N2Form::tokenizeUrl()
30
+ ))
31
+ ), N2Html::tag('i', array('class' => 'n2-i n2-it n2-i-16' . ($orderBy == 'title' ? ($orderByDirection == 'ASC' ? ' n2-i-sortalphabetic1' : ' n2-i-sortalphabetic2') : ' n2-i-sortalphabetic1')), ''));
32
+
33
+ $actions .= N2Html::tag('a', array(
34
+ "class" => 'n2-button n2-button-grey n2-button-medium' . ($orderBy == 'time' ? ' n2-active' : ''),
35
+ "href" => $this->appType->router->createUrl(array(
36
+ 'sliders/orderby',
37
+ array(
38
+ 'time' => ($orderBy == 'time' ? ($orderByDirection == 'ASC' ? 'DESC' : 'ASC') : 'DESC')
39
+ ) + N2Form::tokenizeUrl()
40
+ ))
41
+ ), N2Html::tag('i', array('class' => 'n2-i n2-it n2-i-16' . ($orderBy == 'time' ? ($orderByDirection == 'ASC' ? ' n2-i-sortdate1' : ' n2-i-sortdate2') : ' n2-i-sortdate2')), ''));
42
+
43
+ $dl[] = array(
44
+ 'title' => '<span>' . n2_('SLIDER LIST') . '</span>',
45
+ 'class' => 'n2-ss-slider-ordering n2-ss-slide2-list',
46
+ 'tooltip' => null,
47
+ 'actions' => $actions
48
+ );
49
+ $sliders = $slidersModel->getAll($orderBy, $orderByDirection);
50
+ } else {
51
+ // Show only one sliders's sidebar in this context
52
+ $sliders = array($slidersModel->get($sliderid));
53
+ }
54
+
55
+ if ($sliders) {
56
+ foreach ($sliders AS $slider) {
57
+ $active = $sliderid == $slider['id'];
58
+ $preUl = '';
59
+ if ($active) {
60
+ $showSlideManager = true;
61
+ ob_start();
62
+ $this->widget->init("buttonmenu", array(
63
+ "content" => N2Html::tag('div', array(
64
+ 'class' => 'n2-button-menu'
65
+ ), N2Html::tag('div', array(
66
+ 'class' => 'n2-button-menu-inner n2-border-radius'
67
+ ), N2Html::link(n2_('Add images'), '#', array(
68
+ 'class' => 'n2-add-quick-image n2-h4'
69
+ )) . N2Html::link(n2_('Add video'), '#', array(
70
+ 'class' => 'n2-add-quick-video n2-h4' . (N2Platform::$hasPosts ? '' : ' n2-separator')
71
+ )) . (N2Platform::$hasPosts ? N2Html::link(n2_('Add post'), '#', array(
72
+ 'class' => 'n2-add-quick-post n2-h4'
73
+ )) : '') . N2Html::link(n2_('Create empty slide'), $app->router->createUrl(array(
74
+ "slides/create",
75
+ array(
76
+ "sliderid" => N2Request::getInt('sliderid'),
77
+ "static" => 0
78
+ )
79
+ )), array(
80
+ 'class' => 'n2-h4 n2-separator'
81
+ )) . N2Html::link(n2_('Create static slide'), $app->router->createUrl(array(
82
+ "slides/create",
83
+ array(
84
+ "sliderid" => N2Request::getInt('sliderid'),
85
+ "static" => 1
86
+ )
87
+ )), array(
88
+ 'class' => 'n2-h4'
89
+ )) . N2Html::link(n2_('Create dynamic slides'), $app->router->createUrl(array(
90
+ "generator/create",
91
+ array(
92
+ "sliderid" => N2Request::getInt('sliderid')
93
+ )
94
+ )), array(
95
+ 'class' => 'n2-h4'
96
+ ))))
97
+ ));
98
+ $buttonMenu = ob_get_clean();
99
+
100
+ ob_start();
101
+ $this->widget->init("buttonmenu", array(
102
+ "content" => N2Html::tag('div', array(
103
+ 'class' => 'n2-button-menu'
104
+ ), N2Html::tag('div', array(
105
+ 'class' => 'n2-button-menu-inner n2-border-radius'
106
+ ), N2Html::link(n2_('Select all'), '#', array(
107
+ 'class' => 'n2-h4'
108
+ )) . N2Html::link(n2_('Select none'), '#', array(
109
+ 'class' => 'n2-h4'
110
+ )) . N2Html::link(n2_('Select published'), '#', array(
111
+ 'class' => 'n2-h4'
112
+ )) . N2Html::link(n2_('Select unpublished'), '#', array(
113
+ 'class' => 'n2-h4'
114
+ ))))
115
+ ));
116
+ $selectButtonMenu = ob_get_clean();
117
+
118
+ ob_start();
119
+ $this->widget->init("buttonmenu", array(
120
+ "content" => N2Html::tag('div', array(
121
+ 'class' => 'n2-button-menu'
122
+ ), N2Html::tag('div', array(
123
+ 'class' => 'n2-button-menu-inner n2-border-radius'
124
+ ), N2Html::link(n2_('Duplicate'), '#', array(
125
+ 'class' => 'n2-h4'
126
+ )) . N2Html::link(n2_('Publish'), '#', array(
127
+ 'class' => 'n2-h4'
128
+ )) . N2Html::link(n2_('Unpublish'), '#', array(
129
+ 'class' => 'n2-h4'
130
+ ))))
131
+ ));
132
+ $actionButtonMenu = ob_get_clean();
133
+
134
+ ob_start();
135
+ ?>
136
+ <div class="n2-sidebar-list-bg n2-ss-slides-control">
137
+ <?php
138
+ echo N2Html::tag('div', array(
139
+ 'class' => 'n2-button n2-button-big n2-button-grey n2-slides-bulk'
140
+ ), N2Html::tag('i', array('class' => 'n2-i n2-i-bulk n2-it'), ''));
141
+ echo N2Html::tag('div', array('class' => 'n2-button n2-button-with-menu n2-button-big n2-button-green n2-slides-add'), N2Html::link(n2_('Add image slide'), '#', array(
142
+ 'class' => 'n2-button-inner n2-add-quick-image n2-uc n2-h3'
143
+ )) . $buttonMenu);
144
+
145
+ echo N2Html::tag('div', array('class' => 'n2-button n2-button-with-menu n2-button-big n2-button-grey n2-bulk-select'), N2Html::link(n2_('Select'), '#', array(
146
+ 'class' => 'n2-button-inner n2-uc n2-h4'
147
+ )) . $selectButtonMenu);
148
+ echo N2Html::tag('div', array('class' => 'n2-button n2-button-with-menu n2-button-big n2-button-grey n2-bulk-action'), N2Html::link(n2_('Delete'), '#', array(
149
+ 'class' => 'n2-button-inner n2-uc n2-h4'
150
+ )) . $actionButtonMenu);
151
+
152
+ echo N2Html::tag('div', array(
153
+ 'class' => 'n2-button n2-button-big n2-button-red n2-bulk-cancel n2-uc n2-h4'
154
+ ), n2_('Cancel'));
155
+ ?>
156
+ </div>
157
+ <?php
158
+ $preUl = ob_get_clean();
159
+ }
160
+
161
+ $actions = '';
162
+
163
+ if (!$sliderid) {
164
+ $actions .= N2Html::tag('a', array(
165
+ "class" => 'n2-ss-preview-slider',
166
+ "href" => $this->appType->router->createUrl(array(
167
+ "preview/index",
168
+ array('sliderid' => $slider['id']) + N2Form::tokenizeUrl()
169
+ ))
170
+ ), N2Html::tag('i', array('class' => 'n2-i n2-i-16 n2-i-eye n2-i-grey-opacity'), ''));
171
+ }
172
+
173
+ if ($accessEdit) {
174
+ $actions .= N2Html::tag('a', array(
175
+ "href" => $this->appType->router->createUrl(array(
176
+ 'slider/duplicate',
177
+ array(
178
+ 'sliderid' => $slider["id"]
179
+ ) + N2Form::tokenizeUrl()
180
+ ))
181
+ ), N2Html::tag('i', array('class' => 'n2-i n2-i-16 n2-i-duplicate n2-i-grey-opacity'), ''));
182
+ }
183
+
184
+ if ($accessDelete) {
185
+ $actions .= N2Html::tag('a', array(
186
+ "onclick" => "return NextendDeleteModalLink(this, 'slider-delete', " . json_encode($slider['title']) . ");",
187
+ "href" => $this->appType->router->createUrl(array(
188
+ 'slider/delete',
189
+ array(
190
+ 'sliderid' => $slider["id"]
191
+ ) + N2Form::tokenizeUrl()
192
+ ))
193
+ ), N2Html::tag('i', array('class' => 'n2-i n2-i-16 n2-i-delete n2-i-grey-opacity'), ''));
194
+ }
195
+
196
+ $dl[] = array(
197
+ 'title' => '<i class="n2-i n2-i-slider"></i><span>' . $slider['title'] . '</span><span class="n2-id n2-h5">#' . $slider['id'] . '</span>',
198
+ 'link' => $this->appType->router->createUrl(array(
199
+ 'slider/edit',
200
+ array(
201
+ 'sliderid' => $slider["id"]
202
+ )
203
+ )),
204
+ 'class' => 'n2-ss-slide2-list ' . ($active ? 'n2-open ' : '') . ($active && $controller == 'sliders' ? 'active ' : ''),
205
+ 'preUl' => $preUl,
206
+ 'tooltip' => null,
207
+ 'actions' => $actions
208
+ );
209
+ }
210
+ }
211
+ /**
212
+ * @see Definitionlist
213
+ */
214
+ $this->widget->init("definitionlist", array(
215
+ "dl" => $dl
216
+ ));
217
+
218
+ if ($showSlideManager) {
219
+ $this->renderInline("slidemanager", array(
220
+ 'slider' => $slider
221
+ ));
222
+ }
223
+ ?>
224
+ </div>
225
+ <?php if (!$sliderid): ?>
226
+ <script type="text/javascript">
227
+
228
+ nextend.ready(
229
+ function ($) {
230
+ var newWindow = <?php echo intval(N2SmartSliderSettings::get('preview-new-window', 0)); ?>;
231
+ if (!newWindow) {
232
+ var modal = new NextendSimpleModal('<iframe name="n2-tab-preview" src="about:blank" style="width: 100%;height:100%;"></iframe>', {
233
+ class: 'n2-ss-preview-modal'
234
+ });
235
+ modal.modal.on('ModalHide', function () {
236
+ modal.modal.find('iframe').attr('src', 'about:blank');
237
+ $(window).trigger('SSPreviewHide');
238
+ });
239
+ }
240
+
241
+ $('.n2-ss-preview-slider').on('click', function (e) {
242
+ e.preventDefault();
243
+ if (!newWindow) {
244
+ modal.show();
245
+ modal.modal.find('iframe').attr('src', $(e.currentTarget).attr('href'));
246
+ } else {
247
+ NextendNewFullWindow($(e.currentTarget).attr('href'), 'n2-tab-preview');
248
+ }
249
+ });
250
+ }
251
+ );
252
+ </script>
253
+ <?php endif; ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/font.phtml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * User: David
4
+ * Date: 2014.06.10.
5
+ * Time: 9:52
6
+ */
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/sidebar/backgroundanimation.phtml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="n2-sidebar-row n2-sidebar-header-bg n2-form-dark n2-sets-header">
2
+ <div class="n2-table">
3
+ <div class="n2-tr">
4
+ <div class="n2-td n2-set-label">
5
+ <div class="n2-h3 n2-uc"><?php n2_e('Set'); ?></div>
6
+ </div>
7
+ <div class="n2-td n2-manage-set">
8
+ <?php
9
+ $model->renderSetsForm();
10
+ ?>
11
+ </div>
12
+ </div>
13
+ </div>
14
+ </div>
15
+ <div class="n2-lightbox-sidebar-list">
16
+
17
+ </div>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/sidebar/layout.phtml ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="n2-sidebar-row n2-sidebar-header-bg n2-form-dark n2-sets-header">
2
+ <div class="n2-table">
3
+ <div class="n2-tr">
4
+ <div class="n2-td n2-set-label">
5
+ <div class="n2-h3 n2-uc"><?php n2_e('Set'); ?></div>
6
+ </div>
7
+ <div class="n2-td n2-manage-set">
8
+ <?php
9
+ $model->renderSetsForm();
10
+ ?>
11
+ <div id="layoutset-manage"
12
+ class="n2-button n2-button-medium n2-button-grey n2-h5 n2-uc"><?php n2_e('Manage'); ?></div>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </div>
17
+ <?php
18
+ $ul = array();
19
+
20
+ $ul[] = array(
21
+ 'class' => 'n2-button-container n2-save-as-new-container',
22
+ 'contents' => N2Html::tag('a', array(
23
+ 'class' => 'n2-button n2-button-big n2-button-green n2-uc n2-layout-save-as-new',
24
+ 'href' => '#'
25
+ ), n2_('Save as new layout')),
26
+ );
27
+
28
+ $this->widget->init("listn", array(
29
+ "ul" => $ul
30
+ ));
31
+ ?>
32
+ <div class="n2-lightbox-sidebar-list">
33
+
34
+ </div>
35
+
36
+ <?php
37
+
38
+ $sets = $model->getSets();
39
+ $setId = $sets[0]['id'];
40
+
41
+ $layouts = array();
42
+ $layouts[$setId] = $model->getVisuals($setId);
43
+
44
+ N2JS::addFirstCode("
45
+ new NextendLayoutManager({
46
+ setsIdentifier: '" . $model->type . "set',
47
+ sets: " . json_encode($sets) . ",
48
+ visuals: " . json_encode($layouts) . ",
49
+ ajaxUrl: '" . $this->appType->router->createAjaxUrl(array('layout/index')) . "'
50
+ });
51
+ ");
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/slidemanager.phtml ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $slidesModel = new N2SmartsliderSlidesModel();
3
+ $slides = $slidesModel->getAll($slider['id']);
4
+ $sliderObj = new N2SmartSlider($slider['id'], array());
5
+
6
+ $sliderObj->params = new N2Data($slider['params'], true);
7
+ $optimize = new N2SmartSliderFeatureOptimize($sliderObj);
8
+ ?>
9
+ <div id="n2-ss-slides" class="<?php if (count($slides)) echo "n2-ss-has-slides"; ?>">
10
+
11
+ <div class="n2-ss-slides-container">
12
+ <?php
13
+
14
+ $parameters = array();
15
+ if (N2Platform::$isWordpress) {
16
+ $parameters['nonce'] = wp_create_nonce('internal-linking');
17
+ $parameters['wpAjaxUrl'] = admin_url('admin-ajax.php');
18
+ }
19
+ N2JS::addInline('new NextendSmartSliderAdminSidebarSlides("' . $this->appType->router->createAjaxUrl(array(
20
+ "slides/index",
21
+ array(
22
+ "sliderid" => $slider['id'],
23
+ )
24
+ )) . '","' . N2Base::getApplication('system')
25
+ ->getApplicationType('backend')->router->createUrl("content/search") . '", ' . json_encode($parameters) . ', ' . (defined('N2_IMAGE_UPLOAD_DISABLE') ? 1 : 0) . ", '" . N2Base::getApplication('system')->router->createAjaxUrl(array('browse/upload')) . "', 'slider" . $slider['id'] . "');");
26
+
27
+ N2Localization::addJS(array(
28
+ 'Add video',
29
+ 'Video url',
30
+ 'Examples',
31
+ 'Add post',
32
+ 'Keyword',
33
+ 'No search term specified. Showing recent items.',
34
+ 'Showing items match for "%s"',
35
+ 'Select'
36
+ ));
37
+
38
+ $slidesObj = array();
39
+ foreach ($slides AS $i => $slide) {
40
+ $slidesObj[$i] = new N2SmartSliderSlide($sliderObj, $slide);
41
+ $slidesObj[$i]->initGenerator();
42
+ }
43
+
44
+ foreach ($slidesObj AS $slideObj) {
45
+ $slideObj->fillSample();
46
+ echo N2SmartsliderSlidesModel::box($slideObj, $sliderObj, $this->widget, $this->appType, $optimize);
47
+ }
48
+ ?>
49
+ <a class="n2-box n2-box-slide-add n2-h3 n2-uc" href="#"><?php printf(n2_('SLIDE #%d'), 1); ?></a>
50
+ <a class="n2-box n2-box-slide-add n2-h3 n2-uc" href="#"><?php printf(n2_('SLIDE #%d'), 2); ?></a>
51
+ <a class="n2-box n2-box-slide-add n2-h3 n2-uc" href="#"><?php printf(n2_('SLIDE #%d'), 3); ?></a>
52
+ <a class="n2-box n2-box-slide-drag-upload n2-h3 n2-uc"
53
+ href="#"><?php echo n2_('Drop images to create slides'); ?></a>
54
+
55
+ <div class="n2-clear"></div>
56
+ </div>
57
+ </div>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/default.phtml ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* @var $this N2Layout */
3
+ ?>
4
+
5
+ <div id="n2-admin" class="n2 n2-border-radius">
6
+
7
+ <?php
8
+ $cmd = N2Request::getVar("nextendcontroller", "sliders");
9
+ /**
10
+ * @see Nav
11
+ */
12
+ $views = array(
13
+ N2Html::tag('a', array(
14
+ 'href' => $this->appType->router->createUrl("sliders/index"),
15
+ 'class' => 'n2-h4 n2-uc ' . ($cmd == "sliders" ? "n2-active" : "")
16
+ ), n2_('Sliders'))
17
+ );
18
+ $views[] = N2Html::tag('a', array(
19
+ 'href' => $this->appType->router->createUrl("settings/default"),
20
+ 'class' => 'n2-h4 n2-uc ' . ($cmd == "settings" ? "n2-active" : "")
21
+ ), n2_('Settings'));
22
+
23
+ $views[] = N2Html::tag('a', array(
24
+ 'href' => N2SS3::getProUrlPricing(array(
25
+ 'utm_source' => 'go-pro-button-top-menu',
26
+ 'utm_medium' => 'smartslider-' . N2Platform::getPlatform() . '-free',
27
+ 'utm_campaign' => N2SS3::$campaign
28
+ )),
29
+ 'target' => '_blank',
30
+ 'class' => 'n2-h4 n2-uc '
31
+ ), n2_('Go Pro!'));
32
+
33
+ $this->widget->init('nav', array(
34
+ 'logoUrl' => $this->appType->router->createUrl("sliders/index"),
35
+ 'logoImageUrl' => $this->appType->app->getLogo(),
36
+ 'views' => $views,
37
+ 'actions' => $this->getFragmentValue('actions')
38
+ ));
39
+ ?>
40
+
41
+ <div class="n2-table n2-table-fixed n2-content">
42
+ <div class="n2-tr">
43
+ <div class="n2-td n2-sidebar n2-sidebar-base-bg n2-border-radius-bl">
44
+ <?php
45
+ $this->renderFragmentBlock('nextend_sidebar', '_sliders');
46
+ ?>
47
+ </div>
48
+
49
+ <div class="n2-td n2-content-base-bg n2-content-area n2-border-radius-br">
50
+ <!-- Begin Content -->
51
+ <?php
52
+ $this->renderFragmentBlock('nextend_content');
53
+ ?>
54
+ <!-- End Content -->
55
+ </div>
56
+ </div>
57
+ </div>
58
+ <?php
59
+ N2Pluggable::doAction('afterApplicationContent');
60
+ ?>
61
+ </div>
62
+ <?php
63
+
64
+ N2Message::show();
65
+
66
+ N2JS::addInline("new NextendExpertMode('smartslider', " . N2SSPRO . ");");
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/full.phtml ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* @var $this N2Layout */
3
+ ?>
4
+
5
+ <div id="n2-admin" class="n2 n2-sidebar-hidden n2-border-radius">
6
+
7
+ <?php
8
+ /**
9
+ * @var $widget Nav
10
+ */
11
+ $cmd = N2Request::getVar("nextendcontroller", "dashboard");
12
+ $this->widget->init('nav', array(
13
+ 'logoUrl' => $this->appType->router->createUrl("dashboard/index"),
14
+ 'logoImageUrl' => $this->appType->app->getLogo(),
15
+ 'views' => array(
16
+ N2Html::tag('a', array(
17
+ 'href' => $this->appType->router->createUrl("dashboard/index"),
18
+ 'class' => 'n2-h4 n2-uc ' . ($cmd == "dashboard" ? "n2-active" : "")
19
+ ), n2_('Dashboard')),
20
+ N2Html::tag('a', array(
21
+ 'href' => $this->appType->router->createUrl("settings/index"),
22
+ 'class' => 'n2-h4 n2-uc ' . ($cmd == "settings" ? "n2-active" : "")
23
+ ), n2_('Settings'))
24
+ ),
25
+ 'actions' => $this->getFragmentValue('actions')
26
+ ));
27
+ ?>
28
+
29
+ <div class="n2-table n2-table-fixed n2-content">
30
+ <div class="n2-tr">
31
+ <div class="n2-td n2-content-base-bg">
32
+ <!-- Begin Content -->
33
+ <div class="n2-content-area n2-border-radius-br">
34
+ <?php
35
+ $this->renderFragmentBlock('nextend_content');
36
+ ?>
37
+ </div>
38
+ <!-- End Content -->
39
+ </div>
40
+ </div>
41
+ </div>
42
+
43
+ </div>
44
+ <?php
45
+
46
+ N2Message::show();
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/lightbox.phtml ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ require(N2Base::getApplication('system')->getApplicationType('backend')->path . '/layouts/lightbox.phtml');
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/preview.phtml ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* @var $this N2Layout */
3
+ ?>
4
+ <div id="n2-admin" class="n2 n2-border-radius">
5
+ <?php
6
+ $this->renderFragmentBlock('nextend_content');
7
+ ?>
8
+ </div>
9
+ <?php
10
+ N2JS::addInline("new NextendExpertMode('smartslider', " . N2SSPRO . ");");
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/sidebar.phtml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* @var $this N2Layout */
3
+ ?>
4
+ <div id="<?php echo $lightboxId; ?>">
5
+ <?php
6
+ $this->renderFragmentBlock('nextend_sidebar');
7
+ ?>
8
+ </div>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/backgroundanimation/index.phtml ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $model N2SystemAnimationModel
4
+ */
5
+
6
+ $sets = $model->getSets();
7
+
8
+ $backgroundAnimations = new stdClass();
9
+ N2JS::addFirstCode("
10
+ new NextendBackgroundAnimationManager({
11
+ setsIdentifier: '" . $model->type . "set',
12
+ sets: " . json_encode($sets) . ",
13
+ visuals: " . json_encode($backgroundAnimations) . ",
14
+ ajaxUrl: '" . $this->appType->router->createAjaxUrl(array('backgroundanimation/index')) . "'
15
+ });
16
+ ");
17
+ ?>
18
+ <div class="n2-form-tab ">
19
+ <div class="n2-heading-controls n2-content-box-title-bg">
20
+ <div class="n2-table n2-table-fixed">
21
+ <div class="n2-tr">
22
+ <div class="n2-td n2-h2">
23
+ <?php n2_e('Preview'); ?>
24
+ </div>
25
+
26
+ <div class="n2-td n2-last n2-visual-editor-tabs">
27
+ <div class="n2-form-element-radio-tab">
28
+ <div class="n2-radio-option n2-h4 n2-first n2-active">
29
+ <?php n2_e('Forward'); ?>
30
+ </div><!-- --><div class="n2-radio-option n2-h4 n2-last">
31
+ <?php n2_e('Backward'); ?>
32
+ </div>
33
+ <input type="hidden" autocomplete="off" value="0" name="n2-background-animation-preview-tabs"
34
+ id="n2-background-animation-preview-tabs">
35
+ </div>
36
+ </div>
37
+ </div>
38
+ </div>
39
+ </div>
40
+
41
+ <div>
42
+ <div class="n2-bg-animation-slider">
43
+
44
+ <div class="n2-bg-animation">
45
+ </div>
46
+
47
+ <div class="n2-bg-animation-slide">
48
+ <div class="n2-bg-animation-slide-bg">
49
+ <img
50
+ src="<?php echo N2ImageHelperAbstract::SVGToBase64('$system$/images/placeholder/image.svg'); ?>"/>
51
+ </div>
52
+ </div>
53
+
54
+ <div class="n2-bg-animation-slide" style="opacity: 0;">
55
+ <div class="n2-bg-animation-slide-bg">
56
+ <img
57
+ src="<?php echo N2ImageHelperAbstract::SVGToBase64('$system$/images/placeholder/imageback.svg'); ?>"/>
58
+ </div>
59
+ </div>
60
+ </div>
61
+
62
+ <style>
63
+ #n2-lightbox-backgroundanimation .n2-content-area {
64
+ overflow: hidden;
65
+ }
66
+
67
+ .n2-bg-animation-slider {
68
+ position: relative;
69
+ width: 770px;
70
+ height: 532px;
71
+ margin: 20px;
72
+ /*overflow: hidden;*/
73
+ z-index: 3;
74
+ }
75
+
76
+ .n2-bg-animation,
77
+ .n2-bg-animation-slide {
78
+ position: absolute;
79
+ left: 0;
80
+ top: 0;
81
+ width: 770px;
82
+ height: 532px;
83
+ }
84
+
85
+ .n2-bg-animation-slide {
86
+ z-index: 2;
87
+ }
88
+
89
+ .n2-bg-animation-slider img {
90
+ display: block;
91
+ width: 100%;
92
+ }
93
+
94
+ .n2-3d-side {
95
+ position: absolute;
96
+ left: 0;
97
+ top: 0;
98
+ overflow: hidden;
99
+ background: #333;
100
+ outline: 1px solid rgba(0, 0, 0, 0);
101
+ }
102
+
103
+ </style>
104
+ </div>
105
+ </div>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/backgroundanimation/topbar.phtml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $this->widget->init('topbar', array(
3
+ "actions" => array(
4
+ N2Html::tag('a', array(
5
+ 'href' => '#',
6
+ 'id' => 'n2-backgroundanimation-editor-cancel',
7
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc'
8
+ ), n2_('Cancel')),
9
+ N2Html::tag('a', array(
10
+ 'href' => '#',
11
+ 'id' => 'n2-backgroundanimation-editor-save',
12
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
13
+ ), n2_('Apply'))
14
+ ),
15
+ 'fixTo' => false
16
+ ));
17
+
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/defaults/noaccess.phtml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <div class="n2-form-tab ">
2
+ <div class="n2-h2 n2-content-box-title-bg"><?php n2_e('Limited access'); ?></div>
3
+
4
+ <div class="n2-description">
5
+ <p><?php n2_e('Access to this resource not allowed!'); ?></p>
6
+ </div>
7
+ </div>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/_view.php ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendGeneratorView extends N2ViewBase
4
+ {
5
+
6
+ public static $sources;
7
+
8
+ public static function loadSources() {
9
+ if (!self::$sources) {
10
+
11
+ list($groups, $list) = N2SmartsliderGeneratorModel::getGenerators();
12
+
13
+
14
+ self::$sources = array(
15
+ 'available' => array(),
16
+ 'notavailable' => array()
17
+ );
18
+ foreach ($list AS $group => $sources) {
19
+ foreach ($sources AS $type => $info) {
20
+ /**
21
+ * @var $info N2GeneratorInfo
22
+ */
23
+ if (is_object($info)) {
24
+ if (!$info->installed) {
25
+ if (!isset(self::$sources['notavailable'][$group])) {
26
+ self::$sources['notavailable'][$group] = array();
27
+ }
28
+ self::$sources['notavailable'][$group][$type] = $info;
29
+ } else {
30
+ if (!isset(self::$sources['available'][$group])) {
31
+ self::$sources['available'][$group] = array();
32
+ }
33
+ self::$sources['available'][$group][$type] = $info;
34
+ }
35
+ }
36
+ }
37
+ }
38
+ }
39
+ }
40
+
41
+ /**
42
+ * @param $list
43
+ */
44
+ function _renderSourceList($list) {
45
+ foreach ($list AS $group => $sources) {
46
+ $this->renderGroupOption($group, $sources);
47
+ }
48
+ }
49
+
50
+ public function renderGroupOption($group, $sources) {
51
+
52
+ $button = false;
53
+ $buttons = array();
54
+
55
+
56
+ foreach ($sources AS $type => $info) {
57
+ /**
58
+ * @var $info N2GeneratorInfo
59
+ */
60
+
61
+ if ($info->hasConfiguration) {
62
+ $buttons[$this->appType->router->createUrl(array(
63
+ "generator/checkConfiguration",
64
+ array(
65
+ "sliderid" => N2Request::getInt('sliderid'),
66
+ "group" => $group,
67
+ "type" => $type
68
+ )
69
+ ))] = $info->title;
70
+ } elseif (!$info->installed) {
71
+ $button = N2Html::link(n2_("Visit site"), $info->readMore, array(
72
+ "target" => "_blank",
73
+ "class" => "n2-button n2-button-big n2-button-grey"
74
+ ));
75
+ break;
76
+ } else {
77
+ $buttons[$this->appType->router->createUrl(array(
78
+ "generator/createSettings",
79
+ array(
80
+ "sliderid" => N2Request::getInt('sliderid'),
81
+ "group" => $group,
82
+ "type" => $type
83
+ )
84
+ ))] = $info->title;
85
+ }
86
+ }
87
+ if (!$button && ($count = count($buttons))) {
88
+ if ($count == 1) {
89
+ reset($buttons);
90
+ $key = key($buttons);
91
+ $button = N2Html::link($buttons[$key], $key, array(
92
+ "class" => "n2-button n2-button-small n2-button-blue n2-h5"
93
+ ));
94
+ } else {
95
+ $keys = array_keys($buttons);
96
+ $actions = array();
97
+ for ($i = 0; $i < count($keys); $i++) {
98
+ $actions[] = N2Html::link($buttons[$keys[$i]], $keys[$i], array(
99
+ 'class' => 'n2-h4'
100
+ ));
101
+ }
102
+ ob_start();
103
+ $this->widget->init("buttonmenu", array(
104
+ "content" => N2Html::tag('div', array(
105
+ 'class' => 'n2-button-menu'
106
+ ), N2Html::tag('div', array(
107
+ 'class' => 'n2-button-menu-inner n2-border-radius'
108
+ ), implode('', $actions)))
109
+ ));
110
+ $buttonMenu = ob_get_clean();
111
+ $button = N2Html::tag('div', array('class' => 'n2-button n2-button-with-menu n2-button-small n2-h5 n2-button-blue'), N2Html::link($buttons[$keys[0]], $keys[0], array(
112
+ 'class' => 'n2-button-inner'
113
+ )) . $buttonMenu);
114
+ }
115
+ }
116
+
117
+
118
+ $this->widget->init("box", array(
119
+ 'attributes' => array(
120
+ 'class' => 'n2-box-generator'
121
+ ),
122
+ 'image' => N2ImageHelper::fixed(N2Uri::pathToUri(N2Filesystem::translate($info->path . '/../dynamic.png'))),
123
+ 'firstCol' => $button
124
+ ));
125
+ }
126
+
127
+ public function _renderGroupOption($group, $sources) {
128
+ $options = array();
129
+ foreach ($sources AS $type => $info) {
130
+ /**
131
+ * @var $info N2GeneratorInfo
132
+ */
133
+ $options[$type] = $info->title;
134
+
135
+ if ($info->hasConfiguration) {
136
+ $button = N2Html::link("Next", $this->appType->router->createUrl(array(
137
+ "generator/checkConfiguration",
138
+ array(
139
+ "sliderid" => N2Request::getInt('sliderid'),
140
+ "group" => $group
141
+ )
142
+ )), array(
143
+ "onclick" => "var el = n2(this); el.attr('href', el.attr('href') + '&type='+el.parents('.n2-box-placeholder').find('select').val());",
144
+ "class" => "n2-button n2-button-small n2-button-blue"
145
+ ));
146
+
147
+ } elseif (!$info->installed) {
148
+ $button = N2Html::link("Check extension", $info->readMore, array(
149
+ "target" => "_blank",
150
+ "class" => "n2-button n2-button-small n2-button-grey"
151
+ ));
152
+ } else {
153
+ $button = N2Html::link("Next", $this->appType->router->createUrl(array(
154
+ "generator/createSettings",
155
+ array(
156
+ "sliderid" => N2Request::getInt('sliderid'),
157
+ "group" => $group
158
+ )
159
+ )), array(
160
+ "onclick" => "var el = n2(this); el.attr('href', el.attr('href') + '&type='+el.parents('.n2-box-placeholder').find('select').val());",
161
+ "class" => "n2-button n2-button-small n2-button-blue"
162
+ ));
163
+ }
164
+ }
165
+ $optionsHTML = '';
166
+ foreach ($options AS $k => $v) {
167
+ $optionsHTML .= N2Html::tag('option', array('value' => $k), $v);
168
+ }
169
+
170
+ echo N2Html::tag('div', array('class' => 'n2-box'), N2Html::image(N2Uri::pathToUri(N2Filesystem::translate($info->path . '/../dynamic.png'))) . N2Html::tag("div", array(
171
+ 'class' => 'n2-box-placeholder'
172
+ ), N2Html::tag("table", array(), N2Html::tag("tr", array(), N2Html::tag("td", array(
173
+ 'class' => 'n2-box-label'
174
+ ), N2Html::tag('select', array(
175
+ 'name' => 'generator-type'
176
+ ), $optionsHTML)) . N2Html::tag("td", array(
177
+ 'class' => 'n2-box-button'
178
+ ), $button)))));
179
+ }
180
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/check_configuration.phtml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $actions = array();
4
+
5
+ if (isset($slider)) {
6
+ $actions[] = N2Html::tag('a', array(
7
+ 'href' => $this->appType->router->createUrl(array(
8
+ "generator/create",
9
+ array(
10
+ "sliderid" => $slider['id']
11
+ )
12
+ )),
13
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc'
14
+ ), n2_('Cancel'));
15
+ }
16
+
17
+ $actions[] = N2Html::tag('a', array(
18
+ 'href' => '#',
19
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
20
+ 'onclick' => 'return NextendForm.submit("#smartslider-form");'
21
+ ), n2_('Save'));
22
+
23
+ $this->widget->init('topbar', array(
24
+ "actions" => $actions
25
+ ));
26
+
27
+ ?>
28
+
29
+ <form id="smartslider-form" action="" method="post">
30
+ <?php
31
+ echo $configuration->render();
32
+ ?>
33
+ <input name="save" value="1" type="hidden"/>
34
+ </form>
35
+ <?php N2SS3::showBeacon(ucfirst(N2Request::getCmd('group')) . ' generator'); ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/create.phtml ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $_class N2SmartsliderBackendGeneratorView
4
+ */
5
+ N2SmartsliderBackendGeneratorView::loadSources();
6
+ ?>
7
+
8
+ <div id="n2-tab-slide" class="n2-form-tab ">
9
+ <div class="n2-h2 n2-content-box-title-bg"><?php n2_e('Choose dynamic source'); ?></div>
10
+ <?php
11
+ $_class->_renderSourceList(N2SmartsliderBackendGeneratorView::$sources['available']);
12
+ ?>
13
+ <div class="n2-clear"></div>
14
+ </div>
15
+
16
+ <?php if (count(N2SmartsliderBackendGeneratorView::$sources['notavailable'])): ?>
17
+ <div id="n2-tab-slide" class="n2-form-tab ">
18
+ <div class="n2-h2 n2-content-box-title-bg"><?php n2_e('Not installed'); ?></div>
19
+ <?php
20
+ $_class->_renderSourceList(N2SmartsliderBackendGeneratorView::$sources['notavailable']);
21
+ ?>
22
+ <div class="n2-clear"></div>
23
+ </div>
24
+ <?php endif; ?>
25
+
26
+ <?php
27
+ ?>
28
+
29
+ <div id="n2-tab-slide" class="n2-form-tab ">
30
+ <div class="n2-h2 n2-content-box-title-bg"><?php n2_e('Pro sources'); ?></div>
31
+
32
+ <div class="n2-description">
33
+ <?php
34
+ ?>
35
+ <?php
36
+ ?>
37
+ <?php
38
+ ?>
39
+ <ul>
40
+ <li>Magento products</li>
41
+ <li>Images from folder</li>
42
+ <li>Facebook</li>
43
+ <li>Twitter</li>
44
+ <li>Instagram</li>
45
+ </ul>
46
+ <?php
47
+
48
+ ?>
49
+ <?php
50
+ ?>
51
+ </div>
52
+ </div>
53
+ <?php
54
+
55
+ ?>
56
+
57
+ <?php
58
+ ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/create_settings.phtml ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $this->widget->init('topbar', array(
3
+ "actions" => array(
4
+ N2Html::tag('a', array(
5
+ 'href' => $this->appType->router->createUrl(array(
6
+ "slider/edit",
7
+ array(
8
+ "sliderid" => $slider['id']
9
+ )
10
+ )),
11
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc'
12
+ ), n2_('Cancel')),
13
+ N2Html::tag('a', array(
14
+ 'href' => '#',
15
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
16
+ 'onclick' => 'return NextendForm.submit("#smartslider-form");'
17
+ ), n2_('Save'))
18
+ )
19
+ ));
20
+ ?>
21
+
22
+ <form id="smartslider-form" action="" method="post">
23
+ <?php
24
+
25
+ $group = N2Request::getCmd('group');
26
+ $type = N2Request::getCmd('type');
27
+
28
+ $generatorModel = new N2SmartsliderGeneratorModel();
29
+
30
+ $info = $generatorModel->getGeneratorInfo($group, $type);
31
+ $this->widget->init('heading', array(
32
+ 'title' => $info->group . ' - ' . $info->title
33
+ ));
34
+
35
+ $xml = $generatorModel->generatorSpecificForm($group, $type);
36
+
37
+ $generatorModel->generatorCommonForm();
38
+ ?>
39
+ <input name="generator[group]" value="<?php echo $group; ?>" type="hidden"/>
40
+ <input name="generator[type]" value="<?php echo $type; ?>" type="hidden"/>
41
+ <input name="slider-id" value="<?php echo N2Request::getInt('sliderid'); ?>" type="hidden"/>
42
+ <input name="save" value="1" type="hidden"/>
43
+ </form>
44
+ <style>
45
+ #generatorrecords {
46
+ overflow: auto;
47
+ width: 100%;
48
+ }
49
+
50
+ #generatorrecords table div {
51
+ max-width: 200px;
52
+ max-height: 200px;
53
+ overflow: auto;
54
+ }
55
+ </style>
56
+
57
+ <?php
58
+
59
+ N2JS::addInline('new NextendSmartSliderGeneratorRecords("' . $this->appType->router->createAjaxUrl(array(
60
+ 'generator/recordstable'
61
+ )) . '");');
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/edit.phtml ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $this->widget->init('topbar', array(
3
+ "menu" => array(
4
+ N2Html::tag('a', array(
5
+ 'id' => 'n2-ss-preview',
6
+ 'href' => '#',
7
+ 'class' => 'n2-h3 n2-uc n2-has-underline n2-button n2-button-blue n2-button-big',
8
+ 'style' => 'font-size: 12px;'
9
+ ), n2_('Preview'))
10
+ ),
11
+ "actions" => array(
12
+ N2Html::tag('a', array(
13
+ 'href' => $this->appType->router->createUrl(array(
14
+ "slider/edit",
15
+ array(
16
+ "sliderid" => N2Request::getInt('sliderid')
17
+ )
18
+ )),
19
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc'
20
+ ), n2_('Cancel')),
21
+ N2Html::tag('a', array(
22
+ 'href' => '#',
23
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
24
+ 'onclick' => 'return NextendForm.submit("#smartslider-form");'
25
+ ), n2_('Save'))
26
+ )
27
+ ));
28
+ ?>
29
+
30
+ <form id="smartslider-form" action="" method="post">
31
+ <?php
32
+ $params = new N2Data($generator['params'], true);
33
+
34
+ $group = $generator['group'];
35
+ $type = $generator['type'];
36
+
37
+ $generatorModel = new N2SmartsliderGeneratorModel();
38
+
39
+ $info = $generatorModel->getGeneratorInfo($group, $type);
40
+ $this->widget->init('heading', array(
41
+ 'title' => $info->group . ' - ' . $info->title
42
+ ));
43
+
44
+ $xml = $generatorModel->generatorSpecificForm($group, $type, $params->toArray());
45
+
46
+ $slideParams = new N2Data($slide['params'], true);
47
+ $params->set('record-slides', $slideParams->get('record-slides', 1));
48
+
49
+ $generatorModel->generatorEditForm($params->toArray());
50
+ ?>
51
+ <input name="save" value="1" type="hidden"/>
52
+ </form>
53
+ <style>
54
+ #generatorrecords {
55
+ overflow: auto;
56
+ width: 100%;
57
+ }
58
+
59
+ #generatorrecords table div {
60
+ max-width: 200px;
61
+ max-height: 200px;
62
+ overflow: auto;
63
+ }
64
+ </style>
65
+ <?php
66
+
67
+ N2JS::addInline('new NextendSmartSliderGeneratorRecords("' . $this->appType->router->createAjaxUrl(array(
68
+ 'generator/recordstable',
69
+ array('generator_id' => $generator['id'])
70
+ )) . '");');
71
+ ?>
72
+ <script type="text/javascript">
73
+
74
+ nextend.ready(
75
+ function ($) {
76
+
77
+ var form = $('#smartslider-form'),
78
+ formAction = form.attr('action'),
79
+ isPreview = false;
80
+ var newWindow = <?php echo intval(N2SmartSliderSettings::get('preview-new-window', 0)); ?>;
81
+
82
+ if (!newWindow) {
83
+ var modal = new NextendSimpleModal('<iframe name="n2-tab-preview" src="about:blank" style="width: 100%;height:100%;"></iframe>', {
84
+ class: 'n2-ss-preview-modal'
85
+ });
86
+ modal.modal.on('ModalHide', function () {
87
+ modal.modal.find('iframe').attr('src', 'about:blank');
88
+ $(window).trigger('SSPreviewHide');
89
+ });
90
+ }
91
+
92
+ $('#n2-ss-preview').on('click', function (e) {
93
+ isPreview = true;
94
+ e.preventDefault();
95
+ if (!newWindow) {
96
+ modal.show();
97
+ } else {
98
+ NextendNewFullWindow('', 'n2-tab-preview');
99
+ }
100
+ form.attr({
101
+ action: '<?php echo $this->appType->router->createUrl(array("preview/generator", N2Form::tokenizeUrl() + array('generator_id' => $generator['id'])))?>',
102
+ target: 'n2-tab-preview'
103
+ }).submit().attr({
104
+ action: formAction,
105
+ target: null
106
+ });
107
+ isPreview = false;
108
+ });
109
+ }
110
+ );
111
+ </script>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/layout/index.phtml ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/layout/topbar.phtml ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/_preview.phtml ADDED
@@ -0,0 +1,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <style type="text/css">
2
+
3
+ #n2-admin {
4
+ margin: 0 !important;
5
+ }
6
+
7
+ .n2-form-tab {
8
+ margin: 0;
9
+ border: 0;
10
+ }
11
+
12
+ body,
13
+ .n2-form-tab {
14
+ background-color: #e9edf0;
15
+ }
16
+
17
+ <?php N2Platform::adminHideCSS(); ?>
18
+ </style>
19
+
20
+ <?php
21
+
22
+ N2JS::addFirstCode("
23
+ if(window.parent != window){
24
+ parentDocument = window.parent.n2(window.parent.document);
25
+ $(window).on('keydown keyup keypress', function(e){
26
+ if(e.keyCode == 27){
27
+ parentDocument.trigger(e);
28
+ }
29
+ });
30
+ }
31
+
32
+ var container = n2('.n2-ss-container-device'),
33
+ autoHeight = function(){
34
+ var minHeight = n2(window).height() - container.offset().top ;
35
+ container.css('height', 'auto');
36
+ if(container.height() < minHeight){
37
+ container.height(minHeight);
38
+ }
39
+ };
40
+
41
+ autoHeight();
42
+ n2(window).on('resize', autoHeight);
43
+ n2('.n2-ss-slider').on('SliderResize', autoHeight);
44
+ window[n2('.n2-ss-slider').attr('id')].startedDeferred.done(function(slider){
45
+ slider.ready(autoHeight);
46
+ });
47
+ ");
48
+
49
+ ?>
50
+
51
+
52
+ <div class="n2-form-tab " style="display: block;">
53
+ <div class="n2-heading-controls n2-content-box-title-bg">
54
+ <div class="n2-table">
55
+ <div class="n2-tr">
56
+ <div class="n2-td n2-h2">
57
+ <?php
58
+ echo n2_('Preview');
59
+ ?>
60
+ </div>
61
+
62
+ <div class="n2-td" id="n2-ss-zoom">
63
+ <div class="n2-ss-slider-zoom-container">
64
+ <i class="n2-i n2-i-minus"></i>
65
+ <i class="n2-i n2-i-plus"></i>
66
+
67
+ <div class="n2-ss-slider-zoom-bg"></div>
68
+
69
+ <div class="n2-ss-slider-zoom-1"></div>
70
+
71
+ <div id="n2-ss-slider-zoom"></div>
72
+
73
+ <div class="n2-expert" id="n2-ss-lock">
74
+ <i class="n2-i n2-i-unlock"></i>
75
+ </div>
76
+ </div>
77
+ </div>
78
+
79
+ <div class="n2-td" id="n2-ss-devices">
80
+ <div class="n2-controls-panel n2-table n2-table-auto">
81
+ <div class="n2-tr">
82
+ </div>
83
+ </div>
84
+ </div>
85
+ </div>
86
+ </div>
87
+ </div>
88
+
89
+ <div class="n2-ss-container-device">
90
+ <?php
91
+ echo $slider;
92
+ ?>
93
+ </div>
94
+
95
+ <div class="n2-clear"></div>
96
+ </div>
97
+ <?php
98
+ if (!N2Base::getApplication('smartslider')->storage->get('free', 'subscribeOnImport')) {
99
+ ?>
100
+ <div class="n2-ss-preview-subscribe">
101
+ <div class="n2-ss-preview-subscribe-close"></div>
102
+ <form>
103
+ <div class="n2-input-button"><input id="EMAIL" name="EMAIL" value="<?php echo N2Platform::getUserEmail(); ?>" type="email"><a href="#" class="n2-button n2-button-big n2-button-green n2-uc n2-h4">SIGNUP</a></div>
104
+ <input type="hidden" name="<?php echo strtoupper(N2Platform::getPlatform()); ?>" value="Yes"/>
105
+ <input type="hidden" name="SOURCE" value="Smart Slider 3"/>
106
+ </form>
107
+ </div>
108
+ <script type="text/javascript">
109
+ n2(document).ready(function ($) {
110
+ var subscribe = $('.n2-ss-preview-subscribe'),
111
+ form = subscribe.find('form'),
112
+ button = form.find('.n2-button-green');
113
+ form.on('submit', function (e) {
114
+ e.preventDefault();
115
+ button.trigger('click');
116
+ }),
117
+ hideSubscriptionForm = function () {
118
+ subscribe.removeClass('n2-active');
119
+ NextendAjaxHelper.ajax({
120
+ type: "GET",
121
+ url: NextendAjaxHelper.makeAjaxUrl('<?php echo $this->appType->router->createAjaxUrl(array('settings/subscribed')); ?>'),
122
+ dataType: 'json'
123
+ });
124
+ };
125
+
126
+ button.on('click', $.proxy(function (e) {
127
+ e.preventDefault();
128
+ NextendAjaxHelper.ajax({
129
+ type: "POST",
130
+ url: "//secure.nextendweb.com/mailchimp/subscribe.php",
131
+ data: form.serialize(),
132
+ dataType: 'json'
133
+ }).done($.proxy(function (response) {
134
+ hideSubscriptionForm();
135
+ }, this));
136
+ }, this));
137
+
138
+ subscribe.find('.n2-ss-preview-subscribe-close').on('click', $.proxy(function (e) {
139
+ e.preventDefault();
140
+ hideSubscriptionForm();
141
+ }, this));
142
+
143
+ setTimeout(function () {
144
+ subscribe.addClass('n2-active');
145
+ }, 3000)
146
+ })
147
+ </script>
148
+ <?php
149
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/_view.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class N2SmartsliderBackendPreviewView extends N2ViewBase
5
+ {
6
+
7
+ public function _renderSlider($sliderId, $extendSlider = array()) {
8
+ $slider = new N2SmartSliderManager($sliderId, false, array(
9
+ 'disableResponsive' => true,
10
+ 'extend' => $extendSlider,
11
+ 'addDummySlidesIfEmpty' => true
12
+ ));
13
+ return $slider->render();
14
+ }
15
+
16
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/generator.phtml ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+ $slider = $_class->_renderSlider($sliderId, array(
3
+ 'generatorData' => $generatorData
4
+ ));
5
+ include(dirname(__FILE__) . '/_preview.phtml');
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/index.phtml ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ $slider = $_class->_renderSlider($sliderId, array('sliderData' => $sliderData));
3
+ include(dirname(__FILE__) . '/_preview.phtml');
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/slide.phtml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $slider = $_class->_renderSlider($sliderId, array(
3
+ 'slidesData' => $slidesData
4
+ ));
5
+ include(dirname(__FILE__) . '/_preview.phtml');
6
+
7
+
8
+ if (!empty($slidesData)) {
9
+ $slideId = key($slidesData);
10
+ if ($slideId > 0) {
11
+ ?>
12
+ <script type="text/javascript">
13
+ n2ss.ready(<?php echo $sliderId; ?>, function (slider) {
14
+ slider.visible(function () {
15
+ slider.slideToID(<?php echo key($slidesData); ?>);
16
+ });
17
+ });
18
+ </script>
19
+ <?php
20
+ }
21
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/settings/_view.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSettingsView extends N2ViewBase
4
+ {
5
+
6
+ public $xml;
7
+ public $viewName = 'default';
8
+
9
+ public function __set($name, $value) {
10
+ if (!is_null($name)) {
11
+ $this->$name = $value;
12
+ }
13
+ }
14
+
15
+ private function _renderForm() {
16
+ $settingsModel = new N2SmartsliderSettingsModel();
17
+ $settingsModel->form($this->viewName);
18
+ echo '<input name="namespace" value="' . $this->viewName . '" type="hidden" />';
19
+ }
20
+
21
+ public function _renderDefaultForm() {
22
+ $this->viewName = 'default';
23
+ $this->_renderForm();
24
+ }
25
+
26
+ public function renderDefaultsForm() {
27
+
28
+ $settings = array(
29
+ 'font' => array(),
30
+ 'style' => array()
31
+ );
32
+ N2Pluggable::doAction('smartsliderDefault', array(&$settings));
33
+
34
+ $xmlString = '<root>';
35
+ $this->defaultsAddTab($xmlString, $settings['font'], 'font', 'Font');
36
+ $this->defaultsAddTab($xmlString, $settings['style'], 'style', 'Style');
37
+
38
+ $xmlString .= '</root>';
39
+
40
+ $form = new N2Form();
41
+ $xml = simplexml_load_string($xmlString);
42
+ $form->setXML($xml);
43
+ $form->render('defaults');
44
+ }
45
+
46
+ public function defaultsAddTab(&$xml, $settings, $key, $label) {
47
+ $xml .= '<params name="' . $key . '" label="' . $label . '"><param type="token"/>';
48
+ foreach ($settings AS $field) {
49
+ $xml .= $field;
50
+ }
51
+ $xml .= '</params>';
52
+ }
53
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/settings/cache.phtml ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <h2>Cache</h2>
2
+ <?php
3
+ $buttons = array();
4
+
5
+ $buttons[] = array(
6
+ 'title' => n2_('Clear sliders'),
7
+ 'htmlOptions' => array(
8
+ 'href' => $this->appType->router->createUrl(array(
9
+ 'settings/cache',
10
+ array(
11
+ 'refreshcache' => 1
12
+ )
13
+ ))
14
+ ),
15
+ 'iconclass' => 'nii nii-24x42 nii-global-action-icon nii-refresh'
16
+ );
17
+
18
+ $buttons[] = array(
19
+ 'title' => n2_('Clear generators'),
20
+ 'htmlOptions' => array(
21
+ 'href' => $this->appType->router->createUrl(array(
22
+ 'settings/cache',
23
+ array(
24
+ 'refreshcache' => 2
25
+ )
26
+ ))
27
+ ),
28
+ 'iconclass' => 'nii nii-24x42 nii-global-action-icon nii-refresh'
29
+ );
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/settings/default.phtml ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $_class N2SmartsliderBackendSettingsView
4
+ */
5
+
6
+ $this->widget->init('topbar', array(
7
+ "actions" => array(
8
+ N2Html::tag('a', array(
9
+ 'href' => '#',
10
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
11
+ 'onclick' => 'return NextendForm.submit("#smartslider-form");'
12
+ ), n2_('Save'))
13
+ )
14
+ ));
15
+
16
+ ?>
17
+
18
+ <form id="smartslider-form" action="" method="post">
19
+ <?php
20
+ $_class->_renderDefaultForm();
21
+ ?>
22
+ <input name="save" value="1" type="hidden"/>
23
+ </form>
24
+ <?php N2SS3::showBeacon('Global settings'); ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/settings/defaults.phtml ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $_class N2SmartsliderBackendSettingsView
4
+ */
5
+
6
+ $this->widget->init('topbar', array(
7
+ "actions" => array(
8
+ N2Html::tag('a', array(
9
+ 'href' => '#',
10
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
11
+ 'onclick' => 'return NextendForm.submit("#n2-form");'
12
+ ), n2_('Save'))
13
+ )
14
+ ));
15
+ ?>
16
+ <form id="n2-form" action="" method="post">
17
+ <?php
18
+ $_class->renderDefaultsForm();
19
+ ?>
20
+ <input name="save" value="1" type="hidden"/>
21
+ </form>
22
+ <?php N2SS3::showBeacon('Item defaults'); ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/_slider_edit.phtml ADDED
@@ -0,0 +1,154 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $_class N2SmartsliderBackendSliderView
4
+ */
5
+
6
+ // Background animations are required for simple type. We need to load the lightbox, because it is not working over AJAX slider type change.
7
+ N2Loader::import('libraries.backgroundanimation.manager', 'smartslider');
8
+ N2Loader::import('libraries.postbackgroundanimation.manager', 'smartslider');
9
+
10
+ N2JS::addInline("new NextendSmartSliderQuickSlides('" . $this->appType->router->createUrl(array(
11
+ 'slides/quickedit',
12
+ array('sliderid' => $slider['id'])
13
+ )) . "');");
14
+
15
+ $menu[] = N2Html::tag('a', array(
16
+ 'id' => 'n2-ss-preview',
17
+ 'href' => '#',
18
+ 'class' => 'n2-h3 n2-uc n2-has-underline n2-button n2-button-blue n2-button-big',
19
+ 'style' => 'font-size: 12px;'
20
+ ), n2_('Preview'));
21
+
22
+ $this->widget->init('topbar', array(
23
+ /*'back' => $back,*/
24
+ 'menu' => $menu,
25
+ "actions" => array(
26
+ N2Html::tag('a', array(
27
+ 'href' => $this->appType->router->createUrl(array(
28
+ "sliders/index"
29
+ )),
30
+ 'onclick' => 'return nextend.cancel(this.href);',
31
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc',
32
+ ), n2_('Cancel')),
33
+ N2Html::tag('a', array(
34
+ 'href' => '#',
35
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
36
+ 'onclick' => 'return NextendForm.submit("#smartslider-form");'
37
+ ), n2_('Save'))
38
+ )
39
+ ));
40
+ $this->widget->init('heading', array(
41
+ 'title' => $slider['title'],
42
+ 'actions' => $_class->getDashboardButtons($slider)
43
+ ));
44
+ ?>
45
+ <script type="text/javascript">
46
+ function selectText(container) {
47
+ if (document.selection) {
48
+ var range = document.body.createTextRange();
49
+ range.moveToElementText(container);
50
+ range.select();
51
+ } else if (window.getSelection) {
52
+ var range = document.createRange();
53
+ range.selectNode(container);
54
+ window.getSelection().addRange(range);
55
+ }
56
+ return false;
57
+ }
58
+ </script>
59
+
60
+ <div class="n2-form-tab " style="display: block;">
61
+ <?php
62
+ echo N2Html::tag('div', array('class' => 'n2-h2 n2-content-box-title-bg'), n2_('Publish slider'));
63
+
64
+ $this->renderInlineInNamespace("publish", 'backend.inline', 'smartslider.platform', array(
65
+ 'sliderid' => $slider['id']
66
+ ));
67
+
68
+ ?>
69
+
70
+ </div>
71
+
72
+ <script type="text/javascript">
73
+ nextend.ready(
74
+ function ($) {
75
+
76
+ var form = $('#smartslider-form'),
77
+ formAction = form.attr('action'),
78
+ headings = $('.n2-top-bar-menu .n2-tab-heading'),
79
+ newWindow = <?php echo intval(N2SmartSliderSettings::get('preview-new-window', 0)); ?>;
80
+
81
+ if (!newWindow) {
82
+ var modal = new NextendSimpleModal('<iframe name="n2-tab-preview" src="about:blank" style="width: 100%;height:100%;"></iframe>', {
83
+ class: 'n2-ss-preview-modal'
84
+ });
85
+ modal.modal.on('ModalHide', function () {
86
+ modal.modal.find('iframe').attr('src', 'about:blank');
87
+ $(window).trigger('SSPreviewHide');
88
+ });
89
+ }
90
+
91
+ var isPreview = false;
92
+
93
+ n2('#smartslider-form').on('submit', function (e) {
94
+ if (!isPreview) {
95
+ e.preventDefault();
96
+ nextend.askToSave = false;
97
+ NextendAjaxHelper.ajax({
98
+ type: 'POST',
99
+ url: NextendAjaxHelper.makeAjaxUrl(window.location.href),
100
+ data: $('#smartslider-form').serialize(),
101
+ dataType: 'json'
102
+ }).done(function () {
103
+ $('.n2-heading-bar .n2-heading').html($('#slidertitle').val());
104
+ $('dt.n2-ss-slide2-list > a > span').eq(0).html($('#slidertitle').val());
105
+ nextend.askToSave = true;
106
+ n2('#smartslider-form').trigger('saved');
107
+ });
108
+ }
109
+ });
110
+
111
+ $('#n2-ss-preview').on('click', function (e) {
112
+ isPreview = true;
113
+ e.preventDefault();
114
+ if (!newWindow) {
115
+ modal.show();
116
+ } else {
117
+ NextendNewFullWindow('', 'n2-tab-preview');
118
+ }
119
+ form.attr({
120
+ action: '<?php echo $this->appType->router->createUrl(array("preview/index", N2Form::tokenizeUrl() + array('sliderid' => $slider['id'])))?>',
121
+ target: 'n2-tab-preview'
122
+ }).submit().attr({
123
+ action: formAction,
124
+ target: null
125
+ });
126
+ isPreview = false;
127
+ });
128
+
129
+
130
+ new NextendHeadingScrollToPane(headings, [
131
+ $('#n2-tab-slider, #n2-tab-slider-size, #n2-tab-slider-size-tablet, #n2-tab-slider-size-mobile, #n2-tab-slider-responsive, #nextend-responsive-mode-panel, #n2-tab-slides, #n2-tab-slider-layer, #n2-tab-autoplay, #n2-tab-slider-advanced'),
132
+ $('#n2-tab-widgets'),
133
+ $('#n2-tab-slider-responsive')
134
+ ], 'ss-slider-edit');
135
+
136
+
137
+ $('#n2-form-matrix-slider-settings .n2-form-matrix-views').fixTo('#n2-form-matrix-slider-settings', {
138
+ top: $('#wpadminbar, .navbar-fixed-top').height() + $('.n2-main-top-bar').height()
139
+ });
140
+
141
+ $('#n2-form-matrix-sliderwidgets .n2-form-matrix-views').fixTo('#n2-form-matrix-sliderwidgets', {
142
+ top: $('#wpadminbar, .navbar-fixed-top').height() + $('.n2-main-top-bar').height()
143
+ });
144
+ }
145
+ );
146
+ </script>
147
+
148
+ <form id="smartslider-form" action="" method="post">
149
+ <?php
150
+ $_class->renderForm($slider);
151
+ ?>
152
+ <input name="save" value="1" type="hidden"/>
153
+ </form>
154
+ <?php N2SS3::showBeacon('Slider settings'); ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/_view.php ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class N2SmartsliderBackendSliderView extends N2ViewBase {
5
+
6
+ public function _renderSlider($sliderId, $responsive = 'auto') {
7
+
8
+ $slider = new N2SmartSliderManager($sliderId, false, array(
9
+ 'disableResponsive' => true,
10
+ 'addDummySlidesIfEmpty' => true
11
+ ));
12
+ echo $slider->render();
13
+ }
14
+
15
+ public function _renderSliderCached($sliderId, $responsive = 'auto') {
16
+
17
+ $slider = new N2SmartSliderManager($sliderId, false, array(
18
+ 'disableResponsive' => true
19
+ ));
20
+ echo $slider->render(true);
21
+ }
22
+
23
+ public function renderForm($slider) {
24
+
25
+
26
+ $values = N2SmartsliderSlidersModel::renderEditForm($slider);
27
+
28
+ // Used by AJAX widget subforms
29
+ N2JS::addFirstCode("
30
+ new NextendForm(
31
+ 'smartslider-form',
32
+ '" . $this->appType->router->createAjaxUrl(array(
33
+ 'slider/edit',
34
+ array('sliderid' => $slider['id'])
35
+ )) . "',
36
+ " . json_encode($values) . "
37
+ );
38
+ ");
39
+
40
+ }
41
+
42
+ public function getDashboardButtons($slider) {
43
+ $sliderid = $slider['id'];
44
+
45
+ $app = N2Base::getApplication('smartslider');
46
+ $accessEdit = N2Acl::canDo('smartslider_edit', $app->info);
47
+ $accessDelete = N2Acl::canDo('smartslider_delete', $app->info);
48
+
49
+ $buttons = '';
50
+
51
+ if ($accessEdit) {
52
+
53
+ $buttons .= N2Html::tag('a', array(
54
+ 'data-label' => n2_('Quick Edit - Slides'),
55
+ 'href' => '#',
56
+ 'id' => 'n2-quick-slides-edit'
57
+ ), N2Html::tag('i', array('class' => 'n2-i n2-i-slideedit')));
58
+
59
+ $buttons .= N2Html::tag('a', array(
60
+ 'data-label' => n2_('Clear slider cache'),
61
+ 'href' => $this->appType->router->createUrl(array(
62
+ 'slider/clearcache',
63
+ array(
64
+ 'sliderid' => $sliderid
65
+ ) + N2Form::tokenizeUrl()
66
+ ))
67
+ ), N2Html::tag('i', array('class' => 'n2-i n2-i-a-refresh')));
68
+ $buttons .= N2Html::tag('a', array(
69
+ 'data-label' => n2_('Export slider as HTML'),
70
+ 'href' => $this->appType->router->createUrl(array(
71
+ 'slider/exporthtml',
72
+ array(
73
+ 'sliderid' => $sliderid,
74
+ ) + N2Form::tokenizeUrl()
75
+ ))
76
+ ), N2Html::tag('i', array('class' => 'n2-i n2-i-a-html')));
77
+
78
+ $buttons .= N2Html::tag('a', array(
79
+ 'data-label' => n2_('Export'),
80
+ 'href' => $this->appType->router->createUrl(array(
81
+ 'slider/export',
82
+ array(
83
+ 'sliderid' => $sliderid,
84
+ ) + N2Form::tokenizeUrl()
85
+ ))
86
+ ), N2Html::tag('i', array('class' => 'n2-i n2-i-a-export')));
87
+
88
+
89
+ $buttons .= N2Html::tag('a', array(
90
+ 'data-label' => n2_('Duplicate slider'),
91
+ 'href' => $this->appType->router->createUrl(array(
92
+ 'slider/duplicate',
93
+ array(
94
+ 'sliderid' => $sliderid,
95
+ ) + N2Form::tokenizeUrl()
96
+ ))
97
+ ), N2Html::tag('i', array('class' => 'n2-i n2-i-a-duplicate')));
98
+
99
+ }
100
+
101
+ if ($accessDelete) {
102
+ $buttons .= N2Html::tag('a', array(
103
+ 'data-label' => n2_('Delete slider'),
104
+ "onclick" => "return NextendDeleteModalLink(this, 'slider-delete', " . json_encode($slider['title']) . ");",
105
+ 'href' => $this->appType->router->createUrl(array(
106
+ 'slider/delete',
107
+ array(
108
+ 'sliderid' => $sliderid,
109
+ ) + N2Form::tokenizeUrl()
110
+ ))
111
+ ), N2Html::tag('i', array('class' => 'n2-i n2-i-a-delete')));
112
+ }
113
+
114
+ return $buttons;
115
+ }
116
+
117
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/cachedslider.phtml ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $_class N2SmartsliderBackendSliderView
4
+ */
5
+ ?>
6
+
7
+
8
+ <div class="n2-form-tab " style="display: block;">
9
+ <div class="n2-heading-controls n2-content-box-title-bg">
10
+ <div class="n2-table">
11
+ <div class="n2-tr">
12
+ <div class="n2-td n2-h2">
13
+ <?php
14
+ echo n2_('Live Preview');
15
+ ?>
16
+ </div>
17
+
18
+ <div class="n2-td" id="n2-ss-zoom">
19
+ <div class="n2-ss-slider-zoom-container">
20
+ <i class="n2-i n2-i-minus"></i>
21
+ <i class="n2-i n2-i-plus"></i>
22
+
23
+ <div class="n2-ss-slider-zoom-bg"></div>
24
+
25
+ <div class="n2-ss-slider-zoom-1"></div>
26
+
27
+ <div id="n2-ss-slider-zoom"></div>
28
+
29
+ <div class="n2-expert" id="n2-ss-lock">
30
+ <i class="n2-i n2-i-unlock"></i>
31
+ </div>
32
+ </div>
33
+ </div>
34
+
35
+ <div class="n2-td" id="n2-ss-devices">
36
+ <div class="n2-controls-panel n2-table n2-table-auto">
37
+ <div class="n2-tr">
38
+ </div>
39
+ </div>
40
+ </div>
41
+ </div>
42
+ </div>
43
+ </div>
44
+
45
+ <div style="margin: 20px; min-height: 1200px;">
46
+ <?php
47
+ echo $_class->_renderSliderCached($slider['id'], true);
48
+ ?>
49
+ </div>
50
+ </div>
51
+
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/edit.phtml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $_class N2SmartsliderBackendSliderView
4
+ */
5
+ $title = $slider['title'];
6
+
7
+ include dirname(__FILE__) . '/_slider_edit.phtml';
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/_view.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class N2SmartsliderBackendSlidersView extends N2ViewBase
5
+ {
6
+
7
+ public function renderImportByUploadForm() {
8
+
9
+ N2SmartsliderSlidersModel::renderImportByUploadForm();
10
+ }
11
+
12
+ public function renderRestoreByUploadForm() {
13
+
14
+ N2SmartsliderSlidersModel::renderRestoreByUploadForm();
15
+ }
16
+
17
+ public function renderImportFromServerForm() {
18
+
19
+ N2SmartsliderSlidersModel::renderImportFromServerForm();
20
+ }
21
+
22
+ public function renderRestoreFromServerForm(){
23
+ N2SmartsliderSlidersModel::renderRestoreFromServerForm();
24
+ }
25
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/importByUpload.phtml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "actions" => array(
5
+ N2Html::tag('a', array(
6
+ 'href' => $this->appType->router->createUrl(array('sliders/index')),
7
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc'
8
+ ), n2_('Cancel')),
9
+ N2Html::tag('a', array(
10
+ 'href' => '#',
11
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
12
+ 'onclick' => 'return NextendForm.submit("#smartslider-form");'
13
+ ), n2_('Import'))
14
+ )
15
+ ));
16
+ ?>
17
+
18
+ <form id="smartslider-form" enctype="multipart/form-data" action="" method="post">
19
+ <?php
20
+ $_class->renderImportByUploadForm();
21
+ ?>
22
+ <input name="save" value="1" type="hidden"/>
23
+ </form>
24
+
25
+ <div class="n2-form ">
26
+ <div class="n2-form-tab ">
27
+ <div class="n2-h2 n2-content-box-title-bg"><?php n2_e('Instructions'); ?></div>
28
+
29
+ <div class="n2-description">
30
+ <p><?php n2_e('You can upload the files which exported by Smart Slider 3.'); ?></p>
31
+
32
+ <p><?php printf(n2_('Your server has an upload file limit at %s, so if you have bigger export file, please use the <a href="%s">alternate method</a>.'), @ini_get('post_max_size'), $this->appType->router->createUrl(array('sliders/importFromServer'))); ?></p>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ <?php N2SS3::showBeacon('Import slider'); ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/importFromServer.phtml ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "actions" => array(
5
+ N2Html::tag('a', array(
6
+ 'href' => $this->appType->router->createUrl(array('sliders/index')),
7
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc'
8
+ ), n2_('Cancel')),
9
+ N2Html::tag('a', array(
10
+ 'href' => '#',
11
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
12
+ 'onclick' => 'return NextendForm.submit("#smartslider-form");'
13
+ ), n2_('Import'))
14
+ )
15
+ ));
16
+ ?>
17
+ <form id="smartslider-form" action="" method="post">
18
+ <?php
19
+ $_class->renderImportFromServerForm();
20
+ ?>
21
+ <input name="save" value="1" type="hidden"/>
22
+ </form>
23
+
24
+ <div class="n2-form ">
25
+ <div class="n2-form-tab ">
26
+ <div class="n2-h2 n2-content-box-title-bg"><?php n2_e('Instructions'); ?></div>
27
+
28
+ <div class="n2-description">
29
+ <p><?php printf(n2_('Smart Slider export files are listed from the directory only with <i>ss3</i> extension: %s'), N2Platform::getPublicDir()); ?>
30
+ </p>
31
+ </div>
32
+ </div>
33
+ </div>
34
+ <?php N2SS3::showBeacon('Import slider'); ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/index.phtml ADDED
@@ -0,0 +1,179 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $this N2View
4
+ * @var $_class N2SmartsliderBackendSlidersView
5
+ */
6
+
7
+ $this->widget->init('topbar', array());
8
+ ?>
9
+ <div class="n2-ss-dashboard">
10
+ <div class="n2-box n2-box-border n2-box-huge n2-ss-create-slider">
11
+ <img src="<?php echo N2ImageHelper::fixed('$ss$/admin/images/create-slider.png') ?>">
12
+
13
+ <div class="n2-box-placeholder">
14
+ <table>
15
+ <tbody>
16
+ <tr>
17
+ <td class="n2-box-button">
18
+ <div class="n2-h2"><?php n2_e('It\'s a great day to start something new.'); ?></div>
19
+
20
+ <div
21
+ class="n2-h3"><?php n2_e('Click on the \'Create Slider\' button to get started.'); ?></div>
22
+ <a href="#"
23
+ class="n2-button n2-button-x-big n2-button-green n2-uc n2-h3 n2-ss-create-slider"><?php n2_e('Create slider'); ?></a>
24
+ </td>
25
+ </tr>
26
+ </tbody>
27
+ </table>
28
+ </div>
29
+ </div>
30
+
31
+ <?php
32
+
33
+ function n2GetBox($class, $image, $html, $hasBorder = true) {
34
+ echo N2Html::tag('div', array(
35
+ 'class' => 'n2-box n2-box-title ' . $class . ($hasBorder ? ' n2-box-border' : '')
36
+ ), N2Html::image(N2ImageHelper::fixed('$ss$/admin/images/' . $image)) . N2Html::tag("div", array(
37
+ 'class' => 'n2-box-placeholder'
38
+ ), N2Html::tag("table", array(), N2Html::tag("tr", array(), N2Html::tag("td", array(
39
+ 'class' => 'n2-box-button'
40
+ ), $html)))));
41
+ }
42
+
43
+ n2GetBox('n2-ss-demo-slider', 'add-demo.png', '<div>' . n2_('100+ Sample slide with one click.') . '</div><a href="#" class="n2-button n2-button-small n2-button-green n2-uc n2-h5">' . n2_('add sample slider') . '</a>');
44
+ ob_start();
45
+ $this->widget->init("buttonmenu", array(
46
+ "content" => N2Html::tag('div', array(
47
+ 'class' => 'n2-button-menu'
48
+ ), N2Html::tag('div', array(
49
+ 'class' => 'n2-button-menu-inner n2-border-radius'
50
+ ), N2Html::link(n2_('Import by upload'), $this->appType->router->createUrl(array('sliders/importbyupload')), array(
51
+ 'class' => 'n2-h4'
52
+ )) . N2Html::link(n2_('Restore by upload'), $this->appType->router->createUrl(array('sliders/restorebyupload')), array(
53
+ 'class' => 'n2-h4'
54
+ )) . N2Html::link(n2_('Import from server'), $this->appType->router->createUrl(array('sliders/importfromserver')), array(
55
+ 'class' => 'n2-h4'
56
+ )) . N2Html::link(n2_('Restore from server'), $this->appType->router->createUrl(array('sliders/restorefromserver')), array(
57
+ 'class' => 'n2-h4'
58
+ )) . N2Html::link(n2_('Export all slider'), $this->appType->router->createUrl(array('sliders/exportall')), array(
59
+ 'class' => 'n2-h4',
60
+ 'target' => '_blank'
61
+ ))))
62
+ ));
63
+
64
+ n2GetBox('', 'import-upload.png', '<div>' . n2_('Import slider from different sources.') . '</div>' . N2Html::tag('div', array('class' => 'n2-button n2-button-with-menu n2-button-small n2-button-green'), N2Html::link(n2_('Import by upload'), $this->appType->router->createUrl(array('sliders/importbyupload')), array(
65
+ 'class' => 'n2-button-inner n2-uc n2-h5'
66
+ )) . ob_get_clean()));
67
+
68
+
69
+ n2GetBox('n2-box-wide n2-box-overflow n2-box-free', 'free/box2.png', N2Html::tag('div', array(), 'Take your slider to the next level with Smart Slider 3 PRO!') . N2Html::link('See all features', N2SS3::getWhyProUrl(), array(
70
+ 'target' => '_blank',
71
+ 'class' => 'n2-button n2-button-blue n2-button-medium n2-h5 n2-uc'
72
+ )), false);
73
+ $updateModel = N2SmartsliderUpdateModel::getInstance();
74
+ $hasUpdate = $updateModel->hasUpdate();
75
+ $this->appType->router->setMultiSite();
76
+ $updateUrl = $this->appType->router->createUrl(array(
77
+ 'update/update',
78
+ N2Form::tokenizeUrl() + array('download' => 1)
79
+ ));
80
+ $this->appType->router->unSetMultiSite();
81
+
82
+ $versionsTXT = '<div>' . sprintf(n2_('Installed version: %s'), N2SS3::$version . (N2SSPRO ? ' Pro' : '')) . ($hasUpdate ? '<br/>' . sprintf(n2_('Latest version: %s'), $updateModel->getVersion() . (N2SSPRO ? ' Pro' : '')) : '<br/>' . sprintf(n2_('Last check: %s'), $updateModel->lastCheck())) . '</div>';
83
+
84
+ n2GetBox('', 'Update.png', $versionsTXT . ($hasUpdate ? '<a href="' . $updateUrl . '" class="n2-button n2-button-small n2-button-blue n2-uc n2-h5">' . n2_('Update') . '</a>' : '') . (!$hasUpdate ? '<a href="' . $this->appType->router->createUrl(array(
85
+ 'update/check',
86
+ N2Form::tokenizeUrl()
87
+ )) . '" class="n2-button n2-button-small n2-button-blue n2-uc n2-h5">' . n2_('Check') . '</a>' : '') . '<a href="#" onclick="NextendModalDocumentation(\'' . n2_('Changelog') . '\', \'//doc.smartslider3.com/article/432-changelog?utm_campaign=' . N2SS3::$campaign . '&utm_source=changelog&utm_medium=smartslider-' . N2Platform::getPlatform() . '-' . (N2SSPRO ? 'pro' : 'free') . '\');return false;" class="n2-button n2-button-small n2-button-grey n2-uc n2-h5">' . n2_('Changelog') . '</a>');
88
+ if ($hasUpdate) {
89
+ ?>
90
+ <script type="text/javascript">
91
+ n2(window).ready(function ($) {
92
+ $('.n2-main-top-bar').append('<div class="n2-left n2-top-bar-menu"><span><?php printf(n2_('Version %s available!'), $updateModel->getVersion()); ?></span> <a style="font-size: 12px;margin-right: 10px;" class="n2-h3 n2-uc n2-has-underline n2-button n2-button-blue n2-button-medium" href="<?php echo $updateUrl; ?>"><?php n2_e('Update'); ?></a> <a style="font-size: 12px;" class="n2-h3 n2-uc n2-has-underline n2-button n2-button-grey n2-button-medium" href="#" onclick="NextendModalDocumentation(\'<?php n2_e('Changelog'); ?>\', \'//doc.smartslider3.com/article/432-changelog?utm_campaign=<?php echo N2SS3::$campaign; ?>&utm_source=changelog&utm_medium=smartslider-' + N2PLATFORM + '-' + (N2SSPRO ? 'pro' : 'free') + '\');return false;"><?php n2_e('Changelog'); ?></a></div>');
93
+ });
94
+ </script>
95
+ <?php
96
+ }
97
+
98
+
99
+ n2GetBox('', 'Documentation.png', N2Html::tag('div', array(), n2_('Interactive online documentation.')) . N2Html::link(n2_('Read'), 'http://doc.smartslider3.com?utm_campaign=' . N2SS3::$campaign . '&utm_source=dashboard-documentation&utm_medium=smartslider-' . N2Platform::getPlatform() . '-' . (N2SSPRO ? 'pro' : 'free'), array(
100
+ 'target' => '_blank',
101
+ 'class' => 'n2-button n2-button-grey n2-button-small n2-h5 n2-uc'
102
+ )));
103
+ n2GetBox('', 'Videos.png', N2Html::tag('div', array(), n2_('Helpful tutorial videos.')) . N2Html::link(n2_('Watch'), 'https://www.youtube.com/watch?v=MKmIwHAFjSU&list=PLSawiBnEUNfvzcI3pBHs4iKcbtMCQU0dB&utm_campaign=' . N2SS3::$campaign . '&utm_source=dashboard-watch-videos&utm_medium=smartslider-' . N2Platform::getPlatform() . '-' . (N2SSPRO ? 'pro' : 'free'), array(
104
+ 'target' => '_blank',
105
+ 'class' => 'n2-button n2-button-grey n2-button-small n2-h5 n2-uc'
106
+ )));
107
+ n2GetBox('', 'Help.png', N2Html::tag('div', array(), n2_('First class support with real people.')) . N2Html::link(n2_('Write'), 'http://smartslider3.com/contact-us/?utm_campaign=' . N2SS3::$campaign . '&utm_source=dashboard-write-support&utm_medium=smartslider-' . N2Platform::getPlatform() . '-' . (N2SSPRO ? 'pro' : 'free'), array(
108
+ 'target' => '_blank',
109
+ 'class' => 'n2-button n2-button-grey n2-button-small n2-h5 n2-uc'
110
+ )));
111
+ n2GetBox('', 'Newsletter.png', N2Html::tag('div', array(), n2_('Receive the latest news.')) . N2Html::link(n2_('Subscribe'), 'http://eepurl.com/bDp_8b?utm_campaign=' . N2SS3::$campaign . '&utm_source=dashboard-subscribe-newsletter&utm_medium=smartslider-' . N2Platform::getPlatform() . '-' . (N2SSPRO ? 'pro' : 'free'), array(
112
+ 'target' => '_blank',
113
+ 'class' => 'n2-button n2-button-grey n2-button-small n2-h5 n2-uc'
114
+ )));
115
+
116
+ n2GetBox('', 'Facebook.png', N2Html::tag('div', array(), n2_('Join the community on Facebook.')) . N2Html::link(n2_('Join'), 'https://www.facebook.com/nextendweb?utm_campaign=' . N2SS3::$campaign . '&utm_source=dashboard-like&utm_medium=smartslider-' . N2Platform::getPlatform() . '-' . (N2SSPRO ? 'pro' : 'free'), array(
117
+ 'class' => 'n2-button n2-button-grey n2-button-small n2-h5 n2-uc',
118
+ 'target' => '_blank'
119
+ )));
120
+ n2GetBox('', 'Love.png', N2Html::tag('div', array(), n2_('Are you satisfied with Smart Slider 3?')) . N2Html::link(n2_('Yes'), 'http://smartslider3.com/satisfied-customer/?utm_campaign=' . N2SS3::$campaign . '&utm_source=dashboard-satisfied&utm_medium=smartslider-' . N2Platform::getPlatform() . '-' . (N2SSPRO ? 'pro' : 'free'), array(
121
+ 'target' => '_blank',
122
+ 'class' => 'n2-button n2-button-green n2-button-small n2-h5 n2-uc'
123
+ )) . N2Html::link(n2_('No'), 'http://smartslider3.com/suggestion/?utm_campaign=' . N2SS3::$campaign . '&utm_source=dashboard-not-satisfied&utm_medium=smartslider-' . N2Platform::getPlatform() . '-' . (N2SSPRO ? 'pro' : 'free'), array(
124
+ 'target' => '_blank',
125
+ 'class' => 'n2-button n2-button-red n2-button-small n2-h5 n2-uc'
126
+ )));
127
+ n2GetBox('n2-box-add-license', 'AddLicense.png', '<div>' . n2_('You got the PRO license key?') . '</div><a href="http://doc.smartslider3.com/article/484-updating-the-free-version-to-the-full?utm_campaign=' . N2SS3::$campaign . '&utm_source=changelog&utm_medium=smartslider-' . N2Platform::getPlatform() . '-' . (N2SSPRO ? 'pro' : 'free') . '" target="_blank" class="n2-button n2-button-small n2-button-blue n2-uc n2-h5">' . n2_('Install PRO version') . '</a>');
128
+
129
+
130
+ ?>
131
+
132
+ <div class="n2-clear"></div>
133
+ </div>
134
+
135
+ <?php
136
+ if (intval(N2SmartSliderSettings::get('discover', 1)) == 1):
137
+ N2SmartSliderSettings::set('discover', 0);
138
+ $video = 'https://www.youtube.com/embed/fjmENHah_oY?autoplay=1';
139
+
140
+ ?>
141
+
142
+ <script type="text/javascript">
143
+ n2(window).ready(function () {
144
+ new NextendModal({
145
+ zero: {
146
+ size: [
147
+ 913,
148
+ 710
149
+ ],
150
+ title: n2_('Discover Smart Slider 3'),
151
+ back: false,
152
+ close: true,
153
+ content: '<iframe style="margin:20px 10px 0;" width="854" height="480" src="<?php echo $video; ?>" frameborder="0" allowfullscreen></iframe>',
154
+ controls: ['<a href="#" class="n2-button n2-button-big n2-button-green n2-uc n2-h4">' + n2_('Close') + '</a>'],
155
+ fn: {
156
+ show: function () {
157
+ this.createHeading(n2_("We've created a simple tutorial video to guide you through the basic steps of making your first slider. Good luck with the sliders!")).css({
158
+ width: '520px',
159
+ textAlign: 'center',
160
+ margin: '15px auto',
161
+ lineHeight: '24px'
162
+ }).appendTo(this.content);
163
+ this.controls.find('.n2-button-green')
164
+ .on('click', n2.proxy(function (e) {
165
+ e.preventDefault();
166
+ this.hide(e);
167
+ }, this));
168
+ }
169
+ }
170
+ }
171
+ }, true);
172
+
173
+ });
174
+ </script>
175
+
176
+ <?php
177
+ endif;
178
+ ?>
179
+ <?php N2SS3::showBeacon('Main page, Import, Update'); ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/restoreByUpload.phtml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "actions" => array(
5
+ N2Html::tag('a', array(
6
+ 'href' => $this->appType->router->createUrl(array('sliders/index')),
7
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc'
8
+ ), n2_('Cancel')),
9
+ N2Html::tag('a', array(
10
+ 'href' => '#',
11
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
12
+ 'onclick' => 'return NextendForm.submit("#smartslider-form");'
13
+ ), n2_('Restore'))
14
+ )
15
+ ));
16
+ ?>
17
+
18
+ <form id="smartslider-form" enctype="multipart/form-data" action="" method="post">
19
+ <?php
20
+ $_class->renderRestoreByUploadForm();
21
+ ?>
22
+ <input name="save" value="1" type="hidden"/>
23
+ </form>
24
+
25
+ <div class="n2-form ">
26
+ <div class="n2-form-tab ">
27
+ <div class="n2-h2 n2-content-box-title-bg"><?php n2_e('Instructions'); ?></div>
28
+
29
+ <div class="n2-description">
30
+ <p><?php n2_e('You can upload the files which exported by Smart Slider 3.'); ?></p>
31
+
32
+ <p><?php printf(n2_('Your server has an upload file limit at %s, so if you have bigger export file, please use the <a href="%s">alternate method</a>.'), @ini_get('post_max_size'), $this->appType->router->createUrl(array('sliders/importFromServer'))); ?></p>
33
+ </div>
34
+ </div>
35
+ </div>
36
+ <?php N2SS3::showBeacon('Restore slider'); ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/restoreFromServer.phtml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "actions" => array(
5
+ N2Html::tag('a', array(
6
+ 'href' => $this->appType->router->createUrl(array('sliders/index')),
7
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc'
8
+ ), n2_('Cancel')),
9
+ N2Html::tag('a', array(
10
+ 'href' => '#',
11
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
12
+ 'onclick' => 'return NextendForm.submit("#smartslider-form");'
13
+ ), n2_('Restore'))
14
+ )
15
+ ));
16
+ ?>
17
+
18
+ <form id="smartslider-form" action="" method="post">
19
+ <?php
20
+ $_class->renderRestoreFromServerForm();
21
+ ?>
22
+ <input name="save" value="1" type="hidden"/>
23
+ </form>
24
+
25
+ <div class="n2-form ">
26
+ <div class="n2-form-tab ">
27
+ <div class="n2-h2 n2-content-box-title-bg"><?php n2_e('Instructions'); ?></div>
28
+
29
+ <div class="n2-description">
30
+ <p><?php printf(n2_('Smart Slider export files are listed from the directory only with <i>ss3</i> extension: %s'), N2Platform::getPublicDir()); ?>
31
+ </p>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ <?php N2SS3::showBeacon('Restore slider'); ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slides/_view.php ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSlidesView extends N2ViewBase
4
+ {
5
+
6
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slides/edit.phtml ADDED
@@ -0,0 +1,286 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $slidesModel N2SmartsliderSlidesModel
4
+ */
5
+ $slide = $slidesModel->get(N2Request::getInt('slideid', 0));
6
+
7
+ $actions = array(
8
+ N2Html::tag('a', array(
9
+ 'href' => $this->appType->router->createUrl(array(
10
+ "slider/edit",
11
+ array(
12
+ "sliderid" => $sliderId
13
+ )
14
+ )),
15
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc',
16
+ 'onclick' => 'return nextend.cancel(this.href);'
17
+ ), n2_('Cancel'))
18
+ );
19
+
20
+ if ($slide && $slide['generator_id'] > 0) {
21
+ $actions[] = N2Html::tag('a', array(
22
+ 'href' => '#',
23
+ 'class' => 'n2-button n2-button-blue n2-button-big n2-h4 n2-b n2-uc',
24
+ 'onclick' => 'nextend.askToSave = false;setTimeout(function() {var static = n2("<input name=\'static\' value=\'1\' />"); n2(\'#smartslider-form\').append(static).submit(); static.remove();}, 300); return false;'
25
+ ), n2_('Static save'));
26
+ }
27
+
28
+ $actions[] = N2Html::tag('a', array(
29
+ 'href' => '#',
30
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
31
+ 'onclick' => 'return NextendForm.submit("#smartslider-form");'
32
+ ), n2_('Save'));
33
+
34
+ $this->widget->init('topbar', array(
35
+ 'back' => N2Html::tag('a', array(
36
+ 'class' => 'n2-h4 n2-uc',
37
+ 'href' => $this->appType->router->createUrl(array(
38
+ "slider/edit",
39
+ array(
40
+ "sliderid" => $sliderId
41
+ )
42
+ ))
43
+ ), n2_('Slider settings')),
44
+ "actions" => $actions,
45
+ 'menu' => array(
46
+ N2Html::tag('a', array(
47
+ 'id' => 'n2-ss-preview',
48
+ 'href' => '#',
49
+ 'class' => 'n2-h3 n2-uc n2-has-underline n2-button n2-button-blue n2-button-big',
50
+ 'style' => 'font-size: 12px;'
51
+ ), n2_('Preview')),
52
+ N2Html::tag('a', array(
53
+ 'id' => 'n2-ss-undo',
54
+ 'href' => '#',
55
+ 'class' => 'n2-h3 n2-uc n2-has-underline n2-button n2-button-grey n2-button-big n2-icon-button',
56
+ 'style' => 'font-size: 12px;'
57
+ ), '<i class="n2-i n2-it n2-i-16 n2-i-undo"></i>'),
58
+ N2Html::tag('a', array(
59
+ 'id' => 'n2-ss-redo',
60
+ 'href' => '#',
61
+ 'class' => 'n2-h3 n2-uc n2-has-underline n2-button n2-button-grey n2-button-big n2-icon-button',
62
+ 'style' => 'font-size: 12px;'
63
+ ), '<i class="n2-i n2-it n2-i-16 n2-i-redo"></i>')
64
+ ),
65
+ "hideSidebar" => true
66
+ ));
67
+ ?>
68
+
69
+ <script type="text/javascript">
70
+ nextend.isPreview = false;
71
+ nextend.ready(
72
+ function ($) {
73
+
74
+ var form = $('#smartslider-form'),
75
+ formAction = form.attr('action');
76
+ var newWindow = <?php echo intval(N2SmartSliderSettings::get('preview-new-window', 0)); ?>;
77
+
78
+ if (!newWindow) {
79
+ var modal = new NextendSimpleModal('<iframe name="n2-tab-preview" src="" style="width: 100%;height:100%;"></iframe>', {
80
+ class: 'n2-ss-preview-modal'
81
+ });
82
+ modal.modal.on('ModalHide', function () {
83
+ modal.modal.find('iframe').attr('src', 'about:blank');
84
+ $(window).trigger('SSPreviewHide');
85
+ });
86
+ }
87
+
88
+ $('#n2-ss-preview').on('click', function (e) {
89
+ nextend.isPreview = true;
90
+ e.preventDefault();
91
+ nextend.smartSlider.slide.prepareForm();
92
+ if (!newWindow) {
93
+ modal.show();
94
+ } else {
95
+ NextendNewFullWindow('', 'n2-tab-preview');
96
+ }
97
+ //var currentRequest = form.serialize();
98
+ form.attr({
99
+ action: '<?php echo $this->appType->router->createUrl(array("preview/slide", N2Form::tokenizeUrl() + array('slideId' => $slide ? $slide['id'] : 0, 'sliderId' => $sliderId)))?>',
100
+ target: 'n2-tab-preview'
101
+ }).submit().attr({
102
+ action: formAction,
103
+ target: null
104
+ });
105
+ nextend.isPreview = false;
106
+ });
107
+
108
+ }
109
+ );
110
+ </script>
111
+
112
+ <form id="smartslider-form" action="" method="post">
113
+ <?php
114
+ $slideData = $slidesModel->renderEditForm($slide);
115
+ ?>
116
+ <input name="save" value="1" type="hidden"/>
117
+ </form>
118
+
119
+ <script type="text/javascript">
120
+
121
+ nextend.ready(
122
+ function ($) {
123
+ var topOffset = $('#wpadminbar, .navbar-fixed-top').height() + $('.n2-top-bar').height() + 2;
124
+ $('#n2-tab-smartslider-editor .n2-heading-controls').each(function () {
125
+ var bar = $(this);
126
+ bar.fixTo(bar.parent(), {
127
+ top: topOffset
128
+ });
129
+ });
130
+ }
131
+ );
132
+
133
+ </script>
134
+
135
+ <div id='n2-tab-smartslider-editor' class='n2-form-tab'>
136
+ <div class="n2-heading-controls n2-content-box-title-bg">
137
+ <div class="">
138
+ <div class="n2-table" style="table-layout:fixed;">
139
+ <div class="n2-tr">
140
+ <div class="n2-td">
141
+ <div class="n2-ss-snap-to-parent">
142
+ <div id="n2-ss-control-line" class="n2-content-box-title-bg">
143
+ <div class="n2-form-element-onoff-button n2-onoff-on">
144
+ <div class="n2-onoffb-label"><?php n2_e('Snap'); ?></div>
145
+
146
+ <div class="n2-onoffb-container">
147
+ <div class="n2-onoffb-slider"><!--
148
+ --><div class="n2-onoffb-round"></div><!--
149
+ --></div>
150
+ </div>
151
+ <input type="hidden" autocomplete="off" value="1" id="n2-ss-snap">
152
+ </div>
153
+
154
+ <div id="n2-ss-theme" href="#" class="n2-button n2-button-grey n2-button-small"
155
+ title="<?php n2_e('Light | Dark'); ?>"><i class="n2-i n2-it n2-i-16 n2-i-sun"></i>
156
+ </div>
157
+
158
+ <div id="n2-ss-horizontal-align"
159
+ class="n2-form-element-radio-tab n2-form-element-icon-radio"
160
+ title="<?php n2_e('Horizontal align'); ?>">
161
+ <div
162
+ class="n2-radio-option n2-first" data-align="left"><i
163
+ class="n2-i n2-it n2-i-horizontal-left"></i></div>
164
+
165
+ <div class="n2-radio-option" data-align="center"><i
166
+ class="n2-i n2-it n2-i-horizontal-center"></i>
167
+ </div>
168
+
169
+ <div class="n2-radio-option n2-last" data-align="right"><i
170
+ class="n2-i n2-it n2-i-horizontal-right"></i></div>
171
+ </div>
172
+
173
+ <div id="n2-ss-vertical-align" title="<?php n2_e('Vertical align'); ?>"
174
+ class="n2-form-element-radio-tab n2-form-element-icon-radio">
175
+ <div
176
+ class="n2-radio-option n2-first" data-align="top"><i
177
+ class="n2-i n2-it n2-i-vertical-top"></i></div>
178
+
179
+ <div class="n2-radio-option" data-align="middle"><i
180
+ class="n2-i n2-it n2-i-vertical-middle"></i>
181
+ </div>
182
+
183
+ <div class="n2-radio-option n2-last" data-align="bottom"><i
184
+ class="n2-i n2-it n2-i-vertical-bottom"></i></div></div>
185
+
186
+ <?php
187
+ ?>
188
+
189
+ <div id="n2-ss-show-on-device" class="n2-button n2-button-grey n2-button-small"
190
+ title="<?php n2_e('Show on device'); ?>"><i
191
+ class="n2-i n2-it n2-i-16 n2-i-hide"></i></div>
192
+
193
+ <div id="n2-ss-adaptive-font" class="n2-button n2-button-grey n2-button-small n2-expert"
194
+ title="<?php n2_e('Adaptive font'); ?>"><i
195
+ class="n2-i n2-it n2-i-16 n2-i-adaptive"></i></div>
196
+
197
+ <div title="<?php n2_e('Font size modifier'); ?>"
198
+ class="n2-form-element-text n2-form-element-autocomplete ui-front n2-form-element-number n2-text-has-unit n2-border-radius">
199
+ <div class="n2-text-sub-label n2-h5 n2-uc"><i
200
+ class="n2-i n2-it n2-i-16 n2-i-fontmodifier"></i></div>
201
+ <input type="text" autocomplete="off" style="width:32px"
202
+ class="n2-h5 ui-autocomplete-input" value="100" name="n2-ss-font-size"
203
+ id="n2-ss-font-size">
204
+
205
+ <div class="n2-text-unit n2-h5 n2-uc">%</div></div>
206
+ <div id="n2-ss-reset-to-desktop" class="n2-button n2-button-grey n2-button-small"
207
+ title="<?php n2_e('Reset to desktop'); ?>"><i
208
+ class="n2-i n2-it n2-i-16 n2-i-reset"></i></div>
209
+ </div>
210
+ </div>
211
+ </div>
212
+ <div class="n2-td" id="n2-ss-zoom">
213
+ <div class="n2-ss-slider-zoom-container">
214
+ <i class="n2-i n2-i-minus"></i>
215
+ <i class="n2-i n2-i-plus"></i>
216
+
217
+ <div class="n2-ss-slider-zoom-bg"></div>
218
+
219
+ <div class="n2-ss-slider-zoom-1"></div>
220
+
221
+ <div id="n2-ss-slider-zoom"></div>
222
+
223
+ <div class="n2-expert" id="n2-ss-lock">
224
+ <i class="n2-i n2-i-unlock"></i>
225
+ </div>
226
+ </div>
227
+ </div>
228
+
229
+ <div class="n2-td" id="n2-ss-devices">
230
+ <div class="n2-controls-panel n2-table n2-table-auto">
231
+ <div class="n2-tr">
232
+ </div>
233
+ </div>
234
+ </div>
235
+ </div>
236
+ </div>
237
+ </div>
238
+ </div>
239
+ <?php
240
+
241
+ $sliderManager = $this->appType->app->get('sliderManager');
242
+ $slider = $sliderManager->getSlider();
243
+
244
+ echo N2Html::tag('div', array(
245
+ 'id' => 'smartslider-adjust-height',
246
+ 'style' => 'overflow: auto; margin: 5px; padding: 5px'
247
+ ), N2Html::tag('div', array(), $sliderManager->render()));
248
+
249
+ N2Localization::addJS(array(
250
+ 'Add',
251
+ 'Clear',
252
+ 'in',
253
+ 'loop',
254
+ 'out',
255
+ 'LOOP',
256
+ 'Show',
257
+ 'Hide'
258
+ ));
259
+
260
+ $options = array(
261
+ 'slideAsFile' => intval(N2SmartSliderSettings::get('slide-as-file', 0))
262
+ );
263
+
264
+ echo N2Html::script("
265
+ nextend.ready(function($){
266
+ var cb = function(){
267
+ nextend.smartSlider.slideBackgroundMode = '" . $slider->params->get('backgroundMode', 'fill') . "';
268
+ nextend.smartSlider.startEditor('" . $slider->elementId . "', 'slideslide', " . (defined('N2_IMAGE_UPLOAD_DISABLE') ? 1 : 0) . ", '" . N2Base::getApplication('system')->router->createAjaxUrl(array('browse/upload')) . "', 'slider" . $slider->sliderId . "', " . json_encode($options) . ");
269
+ };
270
+ if(typeof nextend.fontsDeferred !== 'undefined'){
271
+ nextend.fontsDeferred.done(cb);
272
+ }else {
273
+ cb();
274
+ }
275
+ });
276
+ ");
277
+ ?>
278
+ </div>
279
+ <?php
280
+ ?>
281
+ <?php
282
+ ?>
283
+ <div style="height: 600px;"></div>
284
+ <?php
285
+
286
+ ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slides/slidebox.phtml ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ echo N2SmartsliderSlidesModel::box($slide, $slider, $this->widget, $this->appType, $optimize);
app/code/community/Nextend2/SmartSlider3/library/smartslider/form/element/backgroundanimation.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Form::importElement('hidden');
3
+ N2Loader::import('libraries.backgroundanimation.manager', 'smartslider');
4
+
5
+ class N2ElementBackgroundAnimation extends N2ElementHidden
6
+ {
7
+
8
+ public $_tooltip = true;
9
+
10
+ function fetchElement() {
11
+
12
+ N2Localization::addJS(array(
13
+ 'Disabled',
14
+ 'Multiple animations',
15
+ 'Single animation'
16
+ ));
17
+
18
+ N2JS::addInline('new NextendElementAnimationManager("' . $this->_id . '", "backgroundanimationManager");');
19
+
20
+ return N2Html::tag('div', array(
21
+ 'class' => 'n2-form-element-option-chooser n2-border-radius'
22
+ ), parent::fetchElement() . N2Html::tag('input', array(
23
+ 'type' => 'text',
24
+ 'class' => 'n2-h5',
25
+ 'style' => 'width: 130px;' . N2XmlHelper::getAttribute($this->_xml, 'css'),
26
+ 'disabled' => 'disabled'
27
+ ), false) . N2Html::tag('a', array(
28
+ 'href' => '#',
29
+ 'class' => 'n2-form-element-clear'
30
+ ), N2Html::tag('i', array('class' => 'n2-i n2-it n2-i-empty n2-i-grey-opacity'), '')) . N2Html::tag('a', array(
31
+ 'href' => '#',
32
+ 'class' => 'n2-form-element-button n2-h5 n2-uc'
33
+ ), n2_('Animations')));
34
+ }
35
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/form/element/sliderwidgetarea.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.form.element.hidden');
3
+
4
+ class N2ElementSliderWidgetArea extends N2ElementHidden
5
+ {
6
+
7
+ function fetchElement() {
8
+
9
+ $areas = '';
10
+ for ($i = 1; $i <= 12; $i++) {
11
+ $areas .= N2Html::tag('div', array(
12
+ 'class' => 'n2-area n2-area-' . $i . $this->isSelected($i),
13
+ 'data-area' => $i
14
+ ));
15
+ }
16
+
17
+ $html = N2Html::tag('div', array(
18
+ 'id' => $this->_id . '_area',
19
+ 'class' => 'n2-widget-area'
20
+ ), N2Html::tag('div', array(
21
+ 'class' => 'n2-widget-area-inner'
22
+ )) . $areas);
23
+ $html .= parent::fetchElement();
24
+
25
+ N2JS::addInline('new NextendElementSliderWidgetArea("' . $this->_id . '");');
26
+
27
+ return $html;
28
+ }
29
+
30
+ function isSelected($i) {
31
+ if ($i == $this->getValue()) {
32
+ return ' n2-active';
33
+ }
34
+ return '';
35
+ }
36
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/form/element/widgetpluginmatrix.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.form.element.subpluginmatrix');
4
+
5
+ class N2ElementWidgetPluginMatrix extends N2ElementSubPluginMatrix
6
+ {
7
+
8
+ private $group = '';
9
+
10
+ private function getWidgetClass($key) {
11
+ return 'N2SSPluginWidget' . $this->getGroup() . $key;
12
+ }
13
+
14
+ private function getGroup() {
15
+ if (empty($this->group)) {
16
+ $this->group = N2XmlHelper::getAttribute($this->_xml, 'method');
17
+ }
18
+ return $this->group;
19
+ }
20
+
21
+ function fetchElement() {
22
+ return parent::fetchElement();
23
+ }
24
+
25
+ function loadList() {
26
+ parent::loadList();
27
+ $this->_list = array_merge(array('disabled' => $this->_form->xmlFolder . '/'), $this->_list);
28
+ }
29
+
30
+ function renderForm() {
31
+ $value = $this->getValue();
32
+ if ($value == 'disabled') {
33
+ return '';
34
+ } else {
35
+ $class = $this->getWidgetClass($value);
36
+ if (class_exists($class, false)) {
37
+ $this->_form->fillDefault(call_user_func(array(
38
+ $class,
39
+ 'getDefaults'
40
+ )));
41
+ }
42
+
43
+ return parent::renderForm();
44
+ }
45
+ }
46
+
47
+ function getImage($path, $key) {
48
+ return N2Uri::pathToUri(N2Filesystem::translate($path . $key . '.png'));
49
+ }
50
+
51
+ function getOptionHtml($path, $k) {
52
+ return N2Html::tag('div', array(
53
+ 'class' => 'n2-subform-image-option n2-subform-image-option-simple ' . $this->isActive($k)
54
+ ), N2Html::tag('div', array(
55
+ 'class' => 'n2-subform-image-element',
56
+ 'style' => 'background-image: url(' . $this->getImage($path, $k) . ');'
57
+ )));
58
+ }
59
+
60
+ protected function getClass() {
61
+ return 'n2-subform-2-rows';
62
+ }
63
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/form/element/widgetposition.php ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.form.element.group');
4
+
5
+ class N2ElementWidgetPosition extends N2ElementGroup
6
+ {
7
+
8
+ function fetchElement() {
9
+ $values = explode('|*|', $this->getValue());
10
+ if (!isset($values[6]) || $values[6] == '') {
11
+ $values[6] = 1;
12
+ }
13
+ $values[6] = intval($values[6]);
14
+ $this->_form->set($this->_name, implode('|*|', $values));
15
+
16
+ $mode = $this->_xml->addChild('param');
17
+ $mode->addAttribute('name', $this->_name . '-mode');
18
+ $mode->addAttribute('type', 'switcher');
19
+ $mode->addAttribute('label', 'Mode');
20
+ $mode->addAttribute('default', 'simple');
21
+ $mode->addAttribute('translateable', '1');
22
+ $mode->addAttribute('class', 'n2-expert');
23
+ $mode->addAttribute('post', 'break');
24
+
25
+ $simple = $mode->addChild('unit', 'Simple');
26
+ $simple->addAttribute('value', 'simple');
27
+ $advanced = $mode->addChild('unit', 'Advanced');
28
+ $advanced->addAttribute('value', 'advanced');
29
+
30
+ $this->addSimple();
31
+
32
+ $this->addAdvanced();
33
+
34
+ N2JS::addInline('new NextendElementWidgetPosition("' . $this->_id . '");');
35
+
36
+ return parent::fetchElement();
37
+ }
38
+
39
+ protected function addSimple() {
40
+
41
+ $simple = $this->_xml->addChild('param');
42
+ $simple->addAttribute('type', 'group');
43
+
44
+ $area = $simple->addChild('param');
45
+ $area->addAttribute('type', 'sliderwidgetarea');
46
+ $area->addAttribute('name', $this->_name . '-area');
47
+ $area->addAttribute('default', N2XmlHelper::getAttribute($this->_xml, 'area'));
48
+
49
+ $priority = $simple->addChild('param');
50
+ $priority->addAttribute('type', 'list');
51
+ $priority->addAttribute('name', $this->_name . '-stack');
52
+ $priority->addAttribute('label', n2_('Stack'));
53
+ $priority->addAttribute('default', N2XmlHelper::getAttribute($this->_xml, 'stack', '1'));
54
+ $priority->addAttribute('class', 'n2-expert');
55
+
56
+ for ($i = 1; $i < 5; $i++) {
57
+ $pri = $priority->addChild('option', $i);
58
+ $pri->addAttribute('value', $i);
59
+ }
60
+
61
+ $offset = $simple->addChild('param');
62
+ $offset->addAttribute('type', 'text');
63
+ $offset->addAttribute('name', $this->_name . '-offset');
64
+ $offset->addAttribute('label', 'Offset');
65
+ $offset->addAttribute('style', 'width:30px;');
66
+ $offset->addAttribute('default', N2XmlHelper::getAttribute($this->_xml, 'offset', '0'));
67
+
68
+ $offset->addChild('unit', 'px')->addAttribute('value', 'px');
69
+ }
70
+
71
+ protected function addAdvanced() {
72
+
73
+ $advanced = $this->_xml->addChild('param');
74
+ $advanced->addAttribute('type', 'group');
75
+ $advanced->addAttribute('style', 'width:350px;');
76
+
77
+ $horizontal = $advanced->addChild('param');
78
+ $horizontal->addAttribute('name', $this->_name . '-horizontal');
79
+ $horizontal->addAttribute('type', 'switcher');
80
+ $horizontal->addAttribute('label', 'Horizontal');
81
+ $horizontal->addAttribute('default', 'left');
82
+ $horizontal->addAttribute('translateable', '1');
83
+
84
+ $left = $horizontal->addChild('unit', 'Left');
85
+ $left->addAttribute('value', 'left');
86
+ $right = $horizontal->addChild('unit', 'Right');
87
+ $right->addAttribute('value', 'right');
88
+
89
+ $position = $advanced->addChild('param');
90
+ $position->addAttribute('name', $this->_name . '-horizontal-position');
91
+ $position->addAttribute('type', 'text');
92
+ $position->addAttribute('label', n2_x('Position', "position for controls"));
93
+ $position->addAttribute('default', '0');
94
+ $position->addAttribute('style', 'width:30px;');
95
+
96
+ $switcher = $advanced->addChild('param');
97
+ $switcher->addAttribute('name', $this->_name . '-horizontal-unit');
98
+ $switcher->addAttribute('type', 'switcher');
99
+ $switcher->addAttribute('label', n2_('Unit'));
100
+ $switcher->addAttribute('default', 'px');
101
+
102
+ $px = $switcher->addChild('unit', 'px');
103
+ $px->addAttribute('value', 'px');
104
+ $percent = $switcher->addChild('unit', n2_('%'));
105
+ $percent->addAttribute('value', '%');
106
+
107
+
108
+ $vertical = $advanced->addChild('param');
109
+ $vertical->addAttribute('name', $this->_name . '-vertical');
110
+ $vertical->addAttribute('type', 'switcher');
111
+ $vertical->addAttribute('label', 'Vertical');
112
+ $vertical->addAttribute('default', 'top');
113
+ $vertical->addAttribute('translateable', '1');
114
+
115
+ $left = $vertical->addChild('unit', 'Top');
116
+ $left->addAttribute('value', 'top');
117
+ $right = $vertical->addChild('unit', 'Bottom');
118
+ $right->addAttribute('value', 'bottom');
119
+
120
+ $position = $advanced->addChild('param');
121
+ $position->addAttribute('name', $this->_name . '-vertical-position');
122
+ $position->addAttribute('type', 'text');
123
+ $position->addAttribute('label', n2_x('Position', "position for controls"));
124
+ $position->addAttribute('default', '0');
125
+ $position->addAttribute('style', 'width:30px;');
126
+
127
+ $switcher = $advanced->addChild('param');
128
+ $switcher->addAttribute('name', $this->_name . '-vertical-unit');
129
+ $switcher->addAttribute('type', 'switcher');
130
+ $switcher->addAttribute('label', n2_('Unit'));
131
+ $switcher->addAttribute('default', 'px');
132
+
133
+ $px = $switcher->addChild('unit', 'px');
134
+ $px->addAttribute('value', 'px');
135
+ $percent = $switcher->addChild('unit', n2_('%'));
136
+ $percent->addAttribute('value', '%');
137
+ }
138
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/languages/de_DE.mo ADDED
Binary file
app/code/community/Nextend2/SmartSlider3/library/smartslider/languages/es_ES.mo ADDED
Binary file
app/code/community/Nextend2/SmartSlider3/library/smartslider/languages/hu_HU.mo ADDED
Binary file
app/code/community/Nextend2/SmartSlider3/library/smartslider/languages/it_IT.mo ADDED
Binary file
app/code/community/Nextend2/SmartSlider3/library/smartslider/languages/ru_RU.mo ADDED
Binary file
app/code/community/Nextend2/SmartSlider3/library/smartslider/languages/zh_TW.mo ADDED
Binary file
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/backgroundanimation/manager.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.backgroundanimation.storage', 'smartslider');
3
+
4
+ class N2BackgroundAnimationManager
5
+ {
6
+
7
+ public static function init() {
8
+ static $inited = false;
9
+ if (!$inited) {
10
+
11
+ N2Pluggable::addAction('afterApplicationContent', 'N2BackgroundAnimationManager::load');
12
+ $inited = true;
13
+ }
14
+ }
15
+
16
+ public static function load() {
17
+ N2Base::getApplication('system')->getApplicationType('backend');
18
+ N2Base::getApplication('smartslider')->getApplicationType('backend')->run(array(
19
+ 'useRequest' => false,
20
+ 'controller' => 'backgroundanimation',
21
+ 'action' => 'index'
22
+ ));
23
+ }
24
+ }
25
+
26
+ N2BackgroundAnimationManager::init();
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/backgroundanimation/storage.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderBackgroundAnimationStorage
4
+ {
5
+
6
+ private static $sets = array();
7
+
8
+ private static $animation = array();
9
+
10
+ private static $animationBySet = array();
11
+
12
+ private static $animationById = array();
13
+
14
+ public static function init() {
15
+ N2Pluggable::addAction('smartsliderbackgroundanimationset', 'N2SmartSliderBackgroundAnimationStorage::animationSet');
16
+ N2Pluggable::addAction('smartsliderbackgroundanimation', 'N2SmartSliderBackgroundAnimationStorage::animations');
17
+ N2Pluggable::addAction('backgroundanimation', 'N2SmartSliderBackgroundAnimationStorage::animation');
18
+ }
19
+
20
+ private static function load() {
21
+ static $loaded;
22
+ if (!$loaded) {
23
+ N2Pluggable::doAction('backgroundAnimationStorage', array(
24
+ &self::$sets,
25
+ &self::$animation
26
+ ));
27
+
28
+ for ($i = 0; $i < count(self::$animation); $i++) {
29
+ if (!isset(self::$animationBySet[self::$animation[$i]['referencekey']])) {
30
+ self::$animationBySet[self::$animation[$i]['referencekey']] = array();
31
+ }
32
+ self::$animationBySet[self::$animation[$i]['referencekey']][] = &self::$animation[$i];
33
+ self::$animationById[self::$animation[$i]['id']] = &self::$animation[$i];
34
+ }
35
+ $loaded = true;
36
+ }
37
+ }
38
+
39
+ public static function animationSet($referenceKey, &$sets) {
40
+ self::load();
41
+
42
+ for ($i = count(self::$sets) - 1; $i >= 0; $i--) {
43
+ self::$sets[$i]['system'] = 1;
44
+ self::$sets[$i]['editable'] = 0;
45
+ array_unshift($sets, self::$sets[$i]);
46
+ }
47
+
48
+ }
49
+
50
+ public static function animations($referenceKey, &$animation) {
51
+ self::load();
52
+ if (isset(self::$animationBySet[$referenceKey])) {
53
+ $_animation = &self::$animationBySet[$referenceKey];
54
+ for ($i = count($_animation) - 1; $i >= 0; $i--) {
55
+ $_animation[$i]['system'] = 1;
56
+ $_animation[$i]['editable'] = 0;
57
+ array_unshift($animation, $_animation[$i]);
58
+ }
59
+
60
+ }
61
+ }
62
+
63
+ public static function animation($id, &$animation) {
64
+ self::load();
65
+ if (isset(self::$animationById[$id])) {
66
+ self::$animationById[$id]['system'] = 1;
67
+ self::$animationById[$id]['editable'] = 0;
68
+ $animation = self::$animationById[$id];
69
+ }
70
+ }
71
+ }
72
+
73
+ N2SmartSliderBackgroundAnimationStorage::init();
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/backup.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderBackup
4
+ {
5
+
6
+ public $NextendImageHelper_Export, $slider, $slides, $generators = array(), $NextendImageManager_ImageData = array(), $imageTranslation = array(), $visuals = array();
7
+
8
+ public function __construct() {
9
+ $this->NextendImageHelper_Export = N2ImageHelper::export();
10
+ }
11
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/export.php ADDED
@@ -0,0 +1,396 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.zip.zip_lib');
3
+ N2Loader::import('libraries.backup', 'smartslider');
4
+
5
+ class N2SmartSliderExport {
6
+
7
+ private $uniqueCounter = 1;
8
+
9
+ /**
10
+ * @var N2SmartSliderBackup
11
+ */
12
+ private $backup;
13
+ private $sliderId = 0;
14
+
15
+ public $images = array(), $visuals = array();
16
+
17
+ private $files, $usedNames = array(), $imageTranslation = array();
18
+
19
+ public function __construct($sliderId) {
20
+ $this->sliderId = $sliderId;
21
+ }
22
+
23
+ public function create($saveAsFile = false) {
24
+ $this->backup = new N2SmartSliderBackup();
25
+ $slidersModel = new N2SmartsliderSlidersModel();
26
+ if ($this->backup->slider = $slidersModel->get($this->sliderId)) {
27
+ $this->backup->slider['params'] = new N2Data($this->backup->slider['params'], true);
28
+ $slidesModel = new N2SmartsliderSlidesModel();
29
+ $this->backup->slides = $slidesModel->getAll($this->backup->slider['id']);
30
+
31
+ if (empty($this->backup->slider['type'])) {
32
+ $this->backup->slider['type'] = 'simple';
33
+ }
34
+
35
+ $class = 'N2SSPluginType' . $this->backup->slider['type'];
36
+ N2Loader::importPath(call_user_func(array(
37
+ $class,
38
+ "getPath"
39
+ )) . NDS . 'backup');
40
+
41
+ $class = 'N2SmartSliderBackup' . $this->backup->slider['type'];
42
+ call_user_func_array(array(
43
+ $class,
44
+ 'export'
45
+ ), array(
46
+ $this,
47
+ $this->backup->slider
48
+ ));
49
+
50
+ $enabledWidgets = array();
51
+ $plugins = array();
52
+ N2Plugin::callPlugin('sswidget', 'onWidgetList', array(&$plugins));
53
+
54
+ $params = $this->backup->slider['params'];
55
+ foreach ($plugins AS $k => $v) {
56
+ $widget = $params->get('widget' . $k);
57
+ if ($widget && $widget != 'disabled') {
58
+ $enabledWidgets[$k] = $widget;
59
+ }
60
+ }
61
+
62
+ foreach ($enabledWidgets AS $k => $v) {
63
+ $class = 'N2SSPluginWidget' . $k . $v;
64
+ if (class_exists($class, false)) {
65
+ $params->fillDefault(call_user_func(array(
66
+ $class,
67
+ 'getDefaults'
68
+ )));
69
+
70
+ call_user_func_array(array(
71
+ $class,
72
+ 'prepareExport'
73
+ ), array(
74
+ $this,
75
+ &$params
76
+ ));
77
+ } else {
78
+ unset($enabledWidgets);
79
+ }
80
+ }
81
+
82
+ for ($i = 0; $i < count($this->backup->slides); $i++) {
83
+ $slide = $this->backup->slides[$i];
84
+ self::addImage($slide['thumbnail']);
85
+ $slide['params'] = new N2Data($slide['params'], true);
86
+
87
+ self::addImage($slide['params']->get('backgroundImage'));
88
+ self::addImage($slide['params']->get('ligthboxImage'));
89
+ self::addLightbox($slide['params']->get('link'));
90
+
91
+
92
+ N2SmartSliderLayer::prepareExport($this, $slide['slide']);
93
+
94
+ if (!empty($slide['generator_id'])) {
95
+ N2Loader::import("models.generator", "smartslider");
96
+ $generatorModel = new N2SmartsliderGeneratorModel();
97
+ $this->backup->generators[] = $generatorModel->get($slide['generator_id']);
98
+ }
99
+ }
100
+
101
+ $zip = new N2ZipFile();
102
+
103
+ $this->images = array_unique($this->images);
104
+ $this->visuals = array_unique($this->visuals);
105
+
106
+ foreach ($this->images AS $image) {
107
+ $this->backup->NextendImageManager_ImageData[$image] = N2ImageManager::getImageData($image, true);
108
+ if ($this->backup->NextendImageManager_ImageData[$image]) {
109
+ self::addImage($this->backup->NextendImageManager_ImageData[$image]['tablet']['image']);
110
+ self::addImage($this->backup->NextendImageManager_ImageData[$image]['mobile']['image']);
111
+ } else {
112
+ unset($this->backup->NextendImageManager_ImageData[$image]);
113
+ }
114
+ }
115
+
116
+ $this->images = array_unique($this->images);
117
+
118
+ $usedNames = array();
119
+ foreach ($this->images AS $image) {
120
+ $file = N2ImageHelper::fixed($image, true);
121
+ if (N2Filesystem::fileexists($file)) {
122
+ $fileName = strtolower(basename($file));
123
+ while (in_array($fileName, $usedNames)) {
124
+ $fileName = $this->uniqueCounter . $fileName;
125
+ $this->uniqueCounter++;
126
+ }
127
+ $usedNames[] = $fileName;
128
+
129
+ $this->backup->imageTranslation[$image] = $fileName;
130
+ $zip->addFile(file_get_contents($file), 'images/' . $fileName);
131
+ }
132
+ }
133
+
134
+ foreach ($this->visuals AS $visual) {
135
+ $this->backup->visuals[] = N2StorageSectionAdmin::getById($visual);
136
+ }
137
+ $zip->addFile(serialize($this->backup), 'data');
138
+ if (!$saveAsFile) {
139
+ ob_end_clean();
140
+ header('Content-disposition: attachment; filename*=UTF-8\'\'' . rawurlencode($this->backup->slider['title'] . '.ss3'));
141
+ header('Content-type: application/zip');
142
+ echo $zip->file();
143
+ n2_exit(true);
144
+ } else {
145
+ $file = preg_replace('/[^a-zA-Z0-9_-]/', '', $this->backup->slider['title']) . '.ss3';
146
+ $folder = N2Platform::getPublicDir();
147
+ $folder .= '/export/';
148
+ if (!N2Filesystem::existsFolder($folder)) {
149
+ N2Filesystem::createFolder($folder);
150
+ }
151
+ N2Filesystem::createFile($folder . $file, $zip->file());
152
+ }
153
+ }
154
+ }
155
+
156
+ public function createHTML($isZIP = true) {
157
+ $this->files = array();
158
+ ob_end_clean();
159
+ N2AssetsManager::createStack();
160
+
161
+ N2AssetsPredefined::frontend(true);
162
+
163
+ ob_start();
164
+ N2Base::getApplication("smartslider")
165
+ ->getApplicationType('widget')
166
+ ->render(array(
167
+ "controller" => 'home',
168
+ "action" => N2Platform::getPlatform(),
169
+ "useRequest" => false
170
+ ), array(
171
+ $this->sliderId,
172
+ 'Export as HTML'
173
+ ));
174
+
175
+ $slidersModel = new N2SmartsliderSlidersModel();
176
+ $slider = $slidersModel->get($this->sliderId);
177
+ $sliderHTML = ob_get_clean();
178
+ $headHTML = '';
179
+
180
+ $css = N2AssetsManager::getCSS(true);
181
+ foreach ($css['url'] AS $url) {
182
+ $headHTML .= N2Html::style($url, true, array(
183
+ 'media' => 'screen, print'
184
+ )) . "\n";
185
+ }
186
+ array_unshift($css['files'], N2LIBRARYASSETS . '/normalize.min.css');
187
+
188
+
189
+ foreach ($css['files'] AS $file) {
190
+ $path = 'css/' . basename($file);
191
+
192
+ $this->basePath = dirname($file);
193
+ $this->baseUrl = N2Filesystem::pathToAbsoluteURL($this->basePath);
194
+
195
+ $this->files[$path] = preg_replace_callback('#url\([\'"]?([^"\'\)]+)[\'"]?\)#', array(
196
+ $this,
197
+ 'replaceCSSImage'
198
+ ), file_get_contents($file));
199
+
200
+ $headHTML .= N2Html::style($path, true, array(
201
+ 'media' => 'screen, print'
202
+ )) . "\n";
203
+ }
204
+
205
+ if ($css['inline'] != '') {
206
+ $headHTML .= N2Html::style($css['inline']) . "\n";
207
+ }
208
+
209
+ $js = N2AssetsManager::getJs(true);
210
+
211
+ if ($js['globalInline'] != '') {
212
+ $headHTML .= N2Html::script($js['globalInline']) . "\n";
213
+ }
214
+
215
+ foreach ($js['url'] AS $url) {
216
+ $headHTML .= N2Html::script($url, true) . "\n";
217
+ }
218
+ foreach ($js['files'] AS $file) {
219
+ $path = 'js/' . basename($file);
220
+ $this->files[$path] = file_get_contents($file);
221
+ $headHTML .= N2Html::script($path, true) . "\n";
222
+ }
223
+
224
+ if ($js['inline'] != '') {
225
+ $headHTML .= N2Html::script($js['inline']) . "\n";
226
+ }
227
+
228
+ $sliderHTML = preg_replace_callback('/(src|data-desktop|data-tablet|data-mobile)=["|\'](.*?)["|\']/i', array(
229
+ $this,
230
+ 'replaceHTMLImage'
231
+ ), $sliderHTML);
232
+
233
+ $sliderHTML = preg_replace_callback('/url\(\s*([\'"]|(&#039;))?(\S*\.(?:jpe?g|gif|png))([\'"]|(&#039;))?\s*\)[^;}]*?/i', array(
234
+ $this,
235
+ 'replaceHTMLBGImage'
236
+ ), $sliderHTML);
237
+
238
+ $sliderHTML = preg_replace_callback('/(data-href)=["|\'](.*?)["|\']/i', array(
239
+ $this,
240
+ 'replaceHTMLImage'
241
+ ), $sliderHTML);
242
+
243
+ $sliderHTML = preg_replace_callback('/(n2-lightbox-urls)=["|\'](.*?)["|\']/i', array(
244
+ $this,
245
+ 'replaceLightboxImages'
246
+ ), $sliderHTML);
247
+
248
+ $sliderHTML = preg_replace_callback('/n2\-lightbox=[^<>]*?(href)=["|\'](.*?)["|\']/i', array(
249
+ $this,
250
+ 'replaceHTMLImageHrefLightbox'
251
+ ), $sliderHTML);
252
+
253
+ $headHTML = preg_replace_callback('/"([^"]*?\.(jpg|png|gif|jpeg))"/i', array(
254
+ $this,
255
+ 'replaceJSON'
256
+ ), $headHTML);
257
+
258
+ $this->files['index.html'] = "<!doctype html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge, chrome=1\">\n<title>" . $slider['title'] . "</title>\n" . $headHTML . "</head>\n<body>\n" . $sliderHTML . "</body>\n</html>";
259
+
260
+ if (!$isZIP) {
261
+ return $this->files;
262
+ }
263
+
264
+ $zip = new N2ZipFile();
265
+ foreach ($this->files AS $path => $content) {
266
+ $zip->addFile($content, $path);
267
+ }
268
+ if (ob_get_length()) ob_end_clean();
269
+ header('Content-disposition: attachment; filename*=UTF-8\'\'' . rawurlencode($slider['title'] . '.zip'));
270
+ header('Content-type: application/zip');
271
+ echo $zip->file();
272
+ n2_exit(true);
273
+ }
274
+
275
+ private static function addProtocol($image) {
276
+ if (substr($image, 0, 2) == '//') {
277
+ return N2Uri::$scheme . ':' . $image;
278
+ }
279
+ return $image;
280
+ }
281
+
282
+ public function replaceHTMLImage($found) {
283
+ $path = N2Filesystem::absoluteURLToPath(self::addProtocol($found[2]));
284
+ if ($path == $found[2]) {
285
+ return $found[0];
286
+ }
287
+ if (N2Filesystem::fileexists($path)) {
288
+ if (!isset($this->imageTranslation[$path])) {
289
+ $fileName = strtolower(basename($path));
290
+ while (in_array($fileName, $this->usedNames)) {
291
+ $fileName = $this->uniqueCounter . $fileName;
292
+ $this->uniqueCounter++;
293
+ }
294
+ $this->usedNames[] = $fileName;
295
+ $this->files['images/' . $fileName] = file_get_contents($path);
296
+ $this->imageTranslation[$path] = $fileName;
297
+ } else {
298
+ $fileName = $this->imageTranslation[$path];
299
+ }
300
+ return str_replace($found[2], 'images/' . $fileName, $found[0]);
301
+ } else {
302
+ return $found[0];
303
+ }
304
+ }
305
+
306
+ public function replaceHTMLImageHrefLightbox($found) {
307
+ return $this->replaceHTMLImage($found);
308
+ }
309
+
310
+ public function replaceCSSImage($matches) {
311
+ if (substr($matches[1], 0, 5) == 'data:') return $matches[0];
312
+ if (substr($matches[1], 0, 4) == 'http') return $matches[0];
313
+ if (substr($matches[1], 0, 2) == '//') return $matches[0];
314
+
315
+ $exploded = explode('?', $matches[1]);
316
+
317
+ $path = realpath($this->basePath . '/' . $exploded[0]);
318
+ if ($path === false) {
319
+ return 'url(' . str_replace(array(
320
+ 'http://',
321
+ 'https://'
322
+ ), '//', $this->baseUrl) . '/' . $matches[1] . ')';
323
+ }
324
+
325
+ $path = N2Filesystem::fixPathSeparator($path);
326
+
327
+ if (!isset($this->imageTranslation[$path])) {
328
+ $fileName = strtolower(basename($path));
329
+ while (in_array($fileName, $this->usedNames)) {
330
+ $fileName = $this->uniqueCounter . $fileName;
331
+ $this->uniqueCounter++;
332
+ }
333
+ $this->usedNames[] = $fileName;
334
+ $this->files['images/' . $fileName] = file_get_contents($path);
335
+ $this->imageTranslation[$path] = $fileName;
336
+ } else {
337
+ $fileName = $this->imageTranslation[$path];
338
+ }
339
+ return str_replace($matches[1], '../images/' . $fileName, $matches[0]);
340
+ }
341
+
342
+ public function replaceLightboxImages($found) {
343
+ $images = explode(',', $found[2]);
344
+ foreach ($images AS $k => $image) {
345
+ $images[$k] = $this->replaceHTMLImage(array(
346
+ $image,
347
+ '',
348
+ $image
349
+ ));
350
+ }
351
+ return 'n2-lightbox-urls="' . implode(',', $images) . '"';
352
+ }
353
+
354
+ public function replaceHTMLBGImage($found) {
355
+ $path = $this->replaceHTMLImage(array(
356
+ $found[3],
357
+ '',
358
+ $found[3]
359
+ ));
360
+ return str_replace($found[3], $path, $found[0]);
361
+ }
362
+
363
+ public function replaceJSON($found) {
364
+ $image = str_replace('\\/', '/', $found[1]);
365
+ $path = $this->replaceHTMLImage(array(
366
+ $image,
367
+ '',
368
+ $image
369
+ ));
370
+ return str_replace($found[1], str_replace('/', '\\/', $path), $found[0]);
371
+ }
372
+
373
+ public function addImage($image) {
374
+ if (!empty($image)) {
375
+ $this->images[] = $image;
376
+ }
377
+ }
378
+
379
+ public function addLightbox($url) {
380
+ preg_match('/^([a-zA-Z]+)\[(.*)]/', $url, $matches);
381
+ if (!empty($matches)) {
382
+ if ($matches[1] == 'lightbox') {
383
+ $images = explode(',', $matches[2]);
384
+ foreach ($images AS $image) {
385
+ $this->addImage($image);
386
+ }
387
+ }
388
+ }
389
+ }
390
+
391
+ public function addVisual($id) {
392
+ if (is_numeric($id) && $id > 10000) {
393
+ $this->visuals[] = $id;
394
+ }
395
+ }
396
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/import.php ADDED
@@ -0,0 +1,208 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.zip.zip_read');
3
+ N2Loader::import('libraries.backup', 'smartslider');
4
+
5
+ class N2SmartSliderImport {
6
+
7
+ /**
8
+ * @var N2SmartSliderBackup
9
+ */
10
+ private $backup;
11
+ private $imageTranslation = array();
12
+ private $sectionTranslation = array();
13
+
14
+ private $sliderId = 0;
15
+
16
+ private $restore = false;
17
+
18
+ public function enableRestore() {
19
+ $this->restore = true;
20
+ }
21
+
22
+ public function import($filePathOrData, $imageImportMode = 'clone', $linkedVisuals = 1, $isFilePath = true) {
23
+ $zip = new N2ZipRead();
24
+ $importData = $zip->read_zip($filePathOrData, $isFilePath);
25
+ if (!isset($importData['data'])) {
26
+ if (array_key_exists("slider.ss2", $importData)) {
27
+ N2Message::error(n2_('You can\'t import sliders from Smart Slider 2.'));
28
+ }
29
+ return false;
30
+ }
31
+
32
+ $this->backup = unserialize($importData['data']);
33
+
34
+ $this->sectionTranslation = array();
35
+ $this->importVisuals($this->backup->visuals, $linkedVisuals);
36
+
37
+
38
+ $sliderModel = new N2SmartsliderSlidersModel();
39
+ if ($this->restore) {
40
+ $this->sliderId = $sliderModel->restore($this->backup->slider);
41
+ } else {
42
+ $this->sliderId = $sliderModel->import($this->backup->slider);
43
+ }
44
+ if (!$this->sliderId) {
45
+ return false;
46
+ }
47
+ switch ($imageImportMode) {
48
+ case 'clone':
49
+ $images = $importData['images'];
50
+ $imageStore = new N2StoreImage('slider' . $this->sliderId, true);
51
+ foreach ($images AS $file => $content) {
52
+ $localImage = $imageStore->makeCache($file, $content);
53
+ if ($localImage) {
54
+ $this->imageTranslation[$file] = N2ImageHelper::dynamic(N2Uri::pathToUri($localImage));
55
+ } else {
56
+ $this->imageTranslation[$file] = $file;
57
+ }
58
+ if (!$this->imageTranslation[$file]) {
59
+ $this->imageTranslation[$file] = array_search($file, $this->backup->imageTranslation);
60
+ }
61
+ }
62
+ break;
63
+ case 'update':
64
+ $keys = array_keys($this->backup->NextendImageHelper_Export);
65
+ $values = array_values($this->backup->NextendImageHelper_Export);
66
+ foreach ($this->backup->imageTranslation AS $image => $value) {
67
+ $this->imageTranslation[$value] = str_replace($keys, $values, $image);
68
+ }
69
+ break;
70
+ default:
71
+ break;
72
+ }
73
+
74
+ foreach ($this->backup->NextendImageManager_ImageData AS $image => $data) {
75
+ $data['tablet']['image'] = $this->fixImage($data['tablet']['image']);
76
+ $data['mobile']['image'] = $this->fixImage($data['mobile']['image']);
77
+ N2ImageManager::addImageData($this->fixImage($image), $data);
78
+ }
79
+
80
+ unset($importData);
81
+
82
+ if (empty($this->backup->slider['type'])) {
83
+ $this->backup->slider['type'] = 'simple';
84
+ }
85
+
86
+ $class = 'N2SSPluginType' . $this->backup->slider['type'];
87
+ N2Loader::importPath(call_user_func(array(
88
+ $class,
89
+ "getPath"
90
+ )) . NDS . 'backup');
91
+
92
+ $class = 'N2SmartSliderBackup' . $this->backup->slider['type'];
93
+ call_user_func_array(array(
94
+ $class,
95
+ 'import'
96
+ ), array(
97
+ $this,
98
+ &$this->backup->slider
99
+ ));
100
+
101
+
102
+ $enabledWidgets = array();
103
+ $plugins = array();
104
+ N2Plugin::callPlugin('sswidget', 'onWidgetList', array(&$plugins));
105
+
106
+ $params = $this->backup->slider['params'];
107
+ foreach ($plugins AS $k => $v) {
108
+ $widget = $params->get('widget' . $k);
109
+ if ($widget && $widget != 'disabled') {
110
+ $enabledWidgets[$k] = $widget;
111
+ }
112
+ }
113
+
114
+ foreach ($enabledWidgets AS $k => $v) {
115
+ $class = 'N2SSPluginWidget' . $k . $v;
116
+ if (class_exists($class, false)) {
117
+ $params->fillDefault(call_user_func(array(
118
+ $class,
119
+ 'getDefaults'
120
+ )));
121
+
122
+ call_user_func_array(array(
123
+ $class,
124
+ 'prepareImport'
125
+ ), array(
126
+ $this,
127
+ $params
128
+ ));
129
+ } else {
130
+ unset($enabledWidgets);
131
+ }
132
+ }
133
+
134
+ $sliderModel->importUpdate($this->sliderId, $params);
135
+
136
+ $generatorTranslation = array();
137
+ N2Loader::import("models.generator", "smartslider");
138
+ $generatorModel = new N2SmartsliderGeneratorModel();
139
+ foreach ($this->backup->generators as $generator) {
140
+ $generatorTranslation[$generator['id']] = $generatorModel->import($generator);
141
+ }
142
+
143
+
144
+ $slidesModel = new N2SmartsliderSlidesModel();
145
+ for ($i = 0; $i < count($this->backup->slides); $i++) {
146
+ $slide = $this->backup->slides[$i];
147
+ $slide['params'] = new N2Data($slide['params'], true);
148
+ $slide['thumbnail'] = $this->fixImage($slide['thumbnail']);
149
+ $slide['params']->set('backgroundImage', $this->fixImage($slide['params']->get('backgroundImage')));
150
+ $slide['params']->set('ligthboxImage', $this->fixImage($slide['params']->get('ligthboxImage')));
151
+ $slide['params']->set('link', $this->fixLightbox($slide['params']->get('link')));
152
+
153
+ $slide['slide'] = N2SmartSliderLayer::prepareImport($this, $slide['slide']);
154
+
155
+ if (isset($generatorTranslation[$slide['generator_id']])) {
156
+ $slide['generator_id'] = $generatorTranslation[$slide['generator_id']];
157
+ }
158
+ $slidesModel->import($slide, $this->sliderId);
159
+ }
160
+ return $this->sliderId;
161
+ }
162
+
163
+ public function fixImage($image) {
164
+ if (isset($this->backup->imageTranslation[$image]) && isset($this->imageTranslation[$this->backup->imageTranslation[$image]])) {
165
+ return $this->imageTranslation[$this->backup->imageTranslation[$image]];
166
+ }
167
+ return $image;
168
+ }
169
+
170
+ public function fixSection($idOrRaw) {
171
+ if (isset($this->sectionTranslation[$idOrRaw])) {
172
+ return $this->sectionTranslation[$idOrRaw];
173
+ }
174
+ return $idOrRaw;
175
+ }
176
+
177
+ public function fixLightbox($url) {
178
+ preg_match('/^([a-zA-Z]+)\[(.*)](.*)/', $url, $matches);
179
+ if (!empty($matches) && $matches[1] == 'lightbox') {
180
+ $images = explode(',', $matches[2]);
181
+ $newImages = array();
182
+ foreach ($images AS $image) {
183
+ $newImages[] = $this->fixImage($image);
184
+ }
185
+ $url = 'lightbox[' . implode(',', $newImages) . ']' . $matches[3];
186
+ }
187
+ return $url;
188
+ }
189
+
190
+ private function importVisuals($records, $linkedVisuals) {
191
+ if (count($records)) {
192
+ if (!$linkedVisuals) {
193
+ foreach ($records AS $record) {
194
+ $this->sectionTranslation[$record['id']] = $record['value'];
195
+ }
196
+ } else {
197
+ $sets = array();
198
+ foreach ($records AS $record) {
199
+ $storage = N2Base::getApplication($record['application'])->storage;
200
+ if (!isset($sets[$record['application'] . '_' . $record['section']])) {
201
+ $sets[$record['application'] . '_' . $record['section']] = $storage->add($record['section'] . 'set', null, $this->backup->slider['title']);
202
+ }
203
+ $this->sectionTranslation[$record['id']] = $storage->add($record['section'], $sets[$record['application'] . '_' . $record['section']], $record['value']);
204
+ }
205
+ }
206
+ }
207
+ }
208
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/layout/storage.php ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderLayoutStorage
4
+ {
5
+
6
+ private static $sets = array();
7
+
8
+ private static $visual = array();
9
+
10
+ private static $visualBySet = array();
11
+
12
+ private static $visualById = array();
13
+
14
+ public static function init() {
15
+ N2Pluggable::addAction('smartsliderlayoutset', 'N2SmartSliderLayoutStorage::visualSet');
16
+ N2Pluggable::addAction('smartsliderlayout', 'N2SmartSliderLayoutStorage::visuals');
17
+ N2Pluggable::addAction('layout', 'N2SmartSliderLayoutStorage::visual');
18
+ }
19
+
20
+ private static function load() {
21
+ static $loaded;
22
+ if (!$loaded) {
23
+ N2Pluggable::doAction('layoutStorage', array(
24
+ &self::$sets,
25
+ &self::$visual
26
+ ));
27
+
28
+ for ($i = 0; $i < count(self::$visual); $i++) {
29
+ if (!is_array(self::$visualBySet[self::$visual[$i]['referencekey']])) {
30
+ self::$visualBySet[self::$visual[$i]['referencekey']] = array();
31
+ }
32
+ self::$visualBySet[self::$visual[$i]['referencekey']][] = &self::$visual[$i];
33
+ self::$visualById[self::$visual[$i]['id']] = &self::$visual[$i];
34
+ }
35
+ $loaded = true;
36
+ }
37
+ }
38
+
39
+ public static function visualSet($referenceKey, &$sets) {
40
+ self::load();
41
+
42
+ for ($i = count(self::$sets) - 1; $i >= 0; $i--) {
43
+ self::$sets[$i]['system'] = 1;
44
+ self::$sets[$i]['editable'] = 0;
45
+ array_unshift($sets, self::$sets[$i]);
46
+ }
47
+
48
+ }
49
+
50
+ public static function visuals($referenceKey, &$visuals) {
51
+ self::load();
52
+ if (isset(self::$visualBySet[$referenceKey])) {
53
+ $_visual = &self::$visualBySet[$referenceKey];
54
+ for ($i = count($_visual) - 1; $i >= 0; $i--) {
55
+ $_visual[$i]['system'] = 1;
56
+ $_visual[$i]['editable'] = 0;
57
+ array_unshift($visuals, $_visual[$i]);
58
+ }
59
+
60
+ }
61
+ }
62
+
63
+ public static function visual($id, &$visual) {
64
+ self::load();
65
+ if (isset(self::$visualById[$id])) {
66
+ self::$visualById[$id]['system'] = 1;
67
+ self::$visualById[$id]['editable'] = 0;
68
+ $visual = self::$visualById[$id];
69
+ }
70
+ }
71
+ }
72
+
73
+ N2SmartSliderLayoutStorage::init();
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/link.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.link.link');
3
+
4
+ class N2LinkNextSlide {
5
+
6
+ public static function parse($argument, &$attributes, $isEditor = false) {
7
+ if (!$isEditor) {
8
+ $attributes['onclick'] = "n2ss.applyAction(this, 'next'); return false";
9
+ }
10
+ return '#';
11
+ }
12
+ }
13
+
14
+ class N2LinkPreviousSlide {
15
+
16
+ public static function parse($argument, &$attributes, $isEditor = false) {
17
+ if (!$isEditor) {
18
+ $attributes['onclick'] = "n2ss.applyAction(this, 'previous'); return false";
19
+ }
20
+ return '#';
21
+ }
22
+ }
23
+
24
+ class N2LinkGoToSlide {
25
+
26
+ public static function parse($argument, &$attributes, $isEditor = false) {
27
+ if (!$isEditor) {
28
+ $attributes['onclick'] = "n2ss.applyAction(this, 'slide', " . intval($argument) . "); return false";
29
+ }
30
+ return '#';
31
+ }
32
+ }
33
+
34
+ class N2LinkToSlide {
35
+
36
+ public static function parse($argument, &$attributes, $isEditor = false) {
37
+
38
+
39
+ if (!$isEditor) {
40
+ preg_match('/([0-9]+)(,([0-1]))?/', $argument, $matches);
41
+ if (!isset($matches[3])) {
42
+ $attributes['onclick'] = "n2ss.applyAction(this, 'slide', " . (intval($matches[1]) - 1) . "); return false";
43
+ } else {
44
+ $attributes['onclick'] = "n2ss.applyAction(this, 'slide', " . (intval($matches[1]) - 1) . ", " . intval($matches[3]) . "); return false";
45
+ }
46
+ }
47
+ return '#';
48
+ }
49
+ }
50
+
51
+ class N2LinkToSlideID {
52
+
53
+ public static function parse($argument, &$attributes, $isEditor = false) {
54
+ if (!$isEditor) {
55
+ preg_match('/([0-9]+)(,([0-1]))?/', $argument, $matches);
56
+ if (!isset($matches[3])) {
57
+ $attributes['onclick'] = "n2ss.applyAction(this, 'slideToID', " . intval($matches[1]) . "); return false";
58
+ } else {
59
+ $attributes['onclick'] = "n2ss.applyAction(this, 'slideToID', " . intval($matches[1]) . ", " . intval($matches[3]) . "); return false";
60
+ }
61
+ }
62
+ return '#';
63
+ }
64
+ }
65
+
66
+ class N2LinkSlideEvent {
67
+
68
+ public static function parse($argument, &$attributes, $isEditor = false) {
69
+ if (!$isEditor) {
70
+ $attributes['onclick'] = "n2ss.trigger(this, '" . $argument . "'); return false";
71
+ }
72
+ return '#';
73
+ }
74
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/plugins/N2SliderGeneratorPluginAbstract.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.parse.parse');
4
+
5
+ abstract class N2SliderGeneratorPluginAbstract extends N2PluginBase
6
+ {
7
+
8
+ public abstract function onGeneratorList(&$group, &$list);
9
+ }
10
+
11
+ class N2GeneratorInfo
12
+ {
13
+
14
+ public $group, $title, $path, $installed = true, $type = '', $readMore = '', $hasConfiguration = false, $configurationClass = '';
15
+
16
+ private $configuration;
17
+
18
+ public static function getInstance($group, $title, $path) {
19
+ return new N2GeneratorInfo($group, $title, $path);
20
+ }
21
+
22
+ public function __construct($group, $title, $path) {
23
+ $this->group = $group;
24
+ $this->title = $title;
25
+ $this->path = $path;
26
+ }
27
+
28
+ public function getConfiguration() {
29
+ if (!$this->configuration) {
30
+ require_once $this->path . '/../configuration.php';
31
+ $class = $this->configurationClass;
32
+ $this->configuration = new $class($this);
33
+ }
34
+ return $this->configuration;
35
+ }
36
+
37
+ public function setInstalled($installed = true) {
38
+ $this->installed = $installed;
39
+ return $this;
40
+ }
41
+
42
+ public function isInstalled() {
43
+ return $this->installed;
44
+ }
45
+
46
+ public function setUrl($url) {
47
+ $this->readMore = $url;
48
+ return $this;
49
+ }
50
+
51
+ public function setType($type) {
52
+ $this->type = $type;
53
+ return $this;
54
+ }
55
+
56
+ public function setConfiguration($configurationClass) {
57
+ $this->configurationClass = $configurationClass;
58
+ $this->hasConfiguration = true;
59
+ return $this;
60
+ }
61
+
62
+ public function setData($key, $value) {
63
+ $this->{$key} = $value;
64
+ return $this;
65
+ }
66
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/plugins/N2SliderItemAbstract.php ADDED
@@ -0,0 +1,209 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.parse.parse');
4
+
5
+ abstract class N2SSPluginItemAbstract extends N2PluginBase {
6
+
7
+ public $_identifier = 'identifier';
8
+
9
+ public $_title = '';
10
+
11
+ protected $layerProperties = array();
12
+
13
+ protected $priority = 1;
14
+
15
+ protected $isEditor = false;
16
+
17
+ public function onNextendSliderItemList(&$list) {
18
+ $slider = N2Base::getApplication('smartslider')
19
+ ->get('sliderManager')
20
+ ->getSlider();
21
+ $list[$this->_identifier] = array(
22
+ $this->_title,
23
+ $this->getTemplate($slider),
24
+ $this->getPrefilledTemplate($slider),
25
+ json_encode($this->getValues()),
26
+ $this->getPath(),
27
+ $this->layerProperties,
28
+ $this->priority
29
+ );
30
+ }
31
+
32
+ public function onNextendSliderItemShortcode(&$list) {
33
+ $list[$this->_identifier] = $this;
34
+ }
35
+
36
+ public function getLayerProperties() {
37
+ return $this->layerProperties;
38
+ }
39
+
40
+ /**
41
+ * Here comes the HTML source of the item. {param_name} are identifier for the parameters in the configuration.xml params(linked with the parameter name).
42
+ * Parser.js may define custom variables for this.
43
+ *
44
+ * @param $slider N2SmartSliderAbstract
45
+ *
46
+ * @return string
47
+ */
48
+ public function getTemplate($slider) {
49
+ return "{nothing}";
50
+ }
51
+
52
+ /**
53
+ * @param $data
54
+ * @param $id
55
+ * @param $slider N2SmartSliderAbstract
56
+ * @param $slide
57
+ *
58
+ * @return string
59
+ */
60
+ public function render($data, $id, $slider, $slide) {
61
+ return $this->_render($data, $id, $slider, $slide);
62
+ }
63
+
64
+ public function renderAdmin($data, $id, $slider, $slide) {
65
+ $this->isEditor = true;
66
+
67
+ $json = $data->toJson();
68
+ return N2Html::tag("div", array(
69
+ "class" => "n2-ss-item n2-ss-item-" . $this->_identifier,
70
+ "data-item" => $this->_identifier,
71
+ "data-itemvalues" => $json
72
+ ), $this->_renderAdmin($data, $id, $slider, $slide));
73
+ }
74
+
75
+ /**
76
+ * @param $data
77
+ * @param $itemId
78
+ * @param $slider N2SmartSliderAbstract
79
+ * @param $slide N2SmartSliderSlide
80
+ *
81
+ * @return string
82
+ */
83
+ public function _render($data, $itemId, $slider, $slide) {
84
+ return $this->getTemplate($slider);
85
+ }
86
+
87
+ /**
88
+ * @param $data
89
+ * @param $itemId
90
+ * @param $slider N2SmartSliderAbstract
91
+ * @param $slide N2SmartSliderSlide
92
+ *
93
+ * @return string
94
+ */
95
+ public function _renderAdmin($data, $itemId, $slider, $slide) {
96
+ return $this->getTemplate($slider);
97
+ }
98
+
99
+ /*
100
+ * Set default values into the template
101
+ */
102
+ public function getPrefilledTemplate($slider) {
103
+ $html = $this->getTemplate($slider);
104
+ foreach ($this->getValues() AS $k => $v) {
105
+ $html = str_replace('{' . $k . '}', $v, $html);
106
+ }
107
+ return $html;
108
+ }
109
+
110
+ /*
111
+ * Default values, which will be parsed by JS on the admin for default values. It should contain only the fields from the configuration.xml.
112
+ */
113
+ public function getValues() {
114
+ return array(
115
+ 'nothing' => 'Abstract'
116
+ );
117
+ }
118
+
119
+ public function getPath() {
120
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . $this->_identifier . DIRECTORY_SEPARATOR;
121
+ }
122
+
123
+ public static function sortItems(&$items) {
124
+ uasort($items, 'N2SSPluginItemAbstract::compareItems');
125
+ }
126
+
127
+ public static function compareItems($a, $b) {
128
+ return ($a[6] < $b[6]) ? -1 : 1;
129
+ }
130
+
131
+ protected function getLink($slide, $data, $content, $attributes = array(), $renderEmpty = false) {
132
+
133
+ N2Loader::import('libraries.link.link');
134
+
135
+ list($link, $target) = (array)N2Parse::parse($data->get('link', '#|*|'));
136
+ if (!$target) {
137
+ $target = '';
138
+ }
139
+
140
+ if ($link != '#' || $renderEmpty === true) {
141
+ $link = N2LinkParser::parse($slide->fill($link), $attributes, $this->isEditor);
142
+ return N2Html::link($content, $link, $attributes + array(
143
+ "target" => $target
144
+ ));
145
+ }
146
+ return $content;
147
+ }
148
+
149
+ /**
150
+ * @param $slide N2SmartSliderSlide
151
+ * @param $data N2Data
152
+ *
153
+ * @return N2Data
154
+ */
155
+ public function getFilled($slide, $data) {
156
+ return $data;
157
+ }
158
+
159
+ /**
160
+ * @param N2SmartSliderExport $export
161
+ * @param $data
162
+ */
163
+ public function prepareExport($export, $data) {
164
+ }
165
+
166
+ /**
167
+ * @param N2SmartSliderImport $import
168
+ * @param N2Data $data
169
+ *
170
+ * @return N2Data
171
+ */
172
+ public function prepareImport($import, $data) {
173
+ return $data;
174
+ }
175
+
176
+ protected static function optimizeImage($image, $data, $slider) {
177
+ $lazyLoad = $slider->features->lazyLoad;
178
+
179
+ $imagePath = N2ImageHelper::fixed($image, true);
180
+ if ($imagePath[0] == '/' && $imagePath[1] != '/' && $lazyLoad->layerImageSizeBase64 && $lazyLoad->layerImageSizeBase64Size && filesize($imagePath) < $lazyLoad->layerImageSizeBase64Size) {
181
+ return array(
182
+ 'src' => N2Image::base64($imagePath, $image)
183
+ );
184
+ }
185
+ if (!$lazyLoad->layerImageOptimize || !$data->get('image-optimize', 1)) {
186
+ return array(
187
+ 'src' => N2ImageHelper::fixed($image)
188
+ );
189
+ }
190
+
191
+ $quality = intval($slider->params->get('optimize-quality', 70));
192
+
193
+ $tablet = N2Image::scaleImage('image', $image, $lazyLoad->layerImageTablet, false, $quality);
194
+ $mobile = N2Image::scaleImage('image', $image, $lazyLoad->layerImageMobile, false, $quality);
195
+
196
+ if ($image == $tablet && $image == $mobile) {
197
+ return array(
198
+ 'src' => N2ImageHelper::fixed($image)
199
+ );
200
+ }
201
+ return array(
202
+ 'src' => N2Image::base64Transparent(),
203
+ 'data-desktop' => N2ImageHelper::fixed($image),
204
+ 'data-tablet' => N2ImageHelper::fixed($tablet),
205
+ 'data-mobile' => N2ImageHelper::fixed($mobile),
206
+ 'data-device' => '1'
207
+ );
208
+ }
209
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/plugins/N2SliderWidgetAbstract.php ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.parse.parse');
4
+
5
+ class N2SSPluginWidgetAbstract extends N2PluginBase
6
+ {
7
+
8
+ static function getDefaults() {
9
+ return array();
10
+ }
11
+
12
+ public static function getDisplayAttributes(&$params, $key) {
13
+ $class = 'n2-ss-widget ';
14
+
15
+ if ($params->get($key . 'display-desktop', 1)) $class .= 'n2-ss-widget-display-desktop ';
16
+ if ($params->get($key . 'display-tablet', 1)) $class .= 'n2-ss-widget-display-tablet ';
17
+ if ($params->get($key . 'display-mobile', 1)) $class .= 'n2-ss-widget-display-mobile ';
18
+
19
+ if ($params->get($key . 'display-hover', 0)) $class .= 'n2-ss-widget-display-hover ';
20
+
21
+ $attributes = array();
22
+
23
+ $excludeSlides = $params->get($key . 'exclude-slides', '');
24
+ if (!empty($excludeSlides)) {
25
+ $attributes['data-exclude-slides'] = $excludeSlides;
26
+ }
27
+
28
+ return array(
29
+ $class,
30
+ $attributes
31
+ );
32
+ }
33
+
34
+ static function getPositions(&$params) {
35
+ return array();
36
+ }
37
+
38
+ public static function getPosition(&$params, $key) {
39
+ $attributes = array();
40
+ $style = 'position: absolute;';
41
+
42
+ $side = $params->get($key . 'position-horizontal', 'left');
43
+ $position = $params->get($key . 'position-horizontal-position', 0);
44
+ $unit = $params->get($key . 'position-horizontal-unit', 'px');
45
+
46
+ if (!is_numeric($position)) {
47
+ $attributes['data-ss' . $side] = $position;
48
+ } else {
49
+ $style .= $side . ':' . $position . $unit . ';';
50
+ }
51
+
52
+ $side = $params->get($key . 'position-vertical', 'top');
53
+ $position = $params->get($key . 'position-vertical-position', 0);
54
+ $unit = $params->get($key . 'position-vertical-unit', 'px');
55
+
56
+ if (!is_numeric($position)) {
57
+ $attributes['data-ss' . $side] = $position;
58
+ } else {
59
+ $style .= $side . ':' . $position . $unit . ';';
60
+ }
61
+
62
+ return array(
63
+ $style,
64
+ $attributes
65
+ );
66
+ }
67
+
68
+ public static function getOrientationByPosition($mode, $area, $default = 'horizontal') {
69
+ if ($mode == 'advanced') {
70
+ return $default;
71
+ }
72
+ switch ($area) {
73
+ case '5':
74
+ case '6':
75
+ case '7':
76
+ case '8':
77
+ return 'vertical';
78
+ break;
79
+ }
80
+ return 'horizontal';
81
+ }
82
+
83
+ public static function prepareExport($export, $params) {
84
+ }
85
+
86
+ public static function prepareImport($import, $params) {
87
+
88
+ }
89
+
90
+ /**
91
+ * @param N2SmartSlider $slider
92
+ * @param $id
93
+ * @param $params
94
+ */
95
+ static function render($slider, $id, $params) {
96
+
97
+ }
98
+
99
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/settings/settings.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderSettings
4
+ {
5
+
6
+ static $settings = null;
7
+
8
+ private static $_type = "settings";
9
+
10
+ static function getAll() {
11
+ if (self::$settings === null) {
12
+ self::$settings = json_decode(N2Base::getApplication('smartslider')->storage->get(self::$_type), true);
13
+ if (self::$settings === null || !is_array(self::$settings)) self::$settings = array();
14
+ }
15
+ return self::$settings;
16
+ }
17
+
18
+ static function get($key, $default = null) {
19
+ if (self::$settings === null) self::getAll();
20
+ if (!array_key_exists($key, self::$settings)) return $default;
21
+ return self::$settings[$key];
22
+ }
23
+
24
+ static function set($key, $value) {
25
+ self::getAll();
26
+ self::$settings[$key] = $value;
27
+ N2SmartSliderSettings::store(self::$_type, json_encode(self::$settings));
28
+ }
29
+
30
+ static function store($key, $value) {
31
+ N2Base::getApplication('smartslider')->storage->set($key, '', $value);
32
+ }
33
+
34
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/abstract.php ADDED
@@ -0,0 +1,293 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.mobiledetect.Mobile_Detect');
4
+ N2Loader::import('libraries.parse.font');
5
+
6
+ N2Loader::import('libraries.slider.type', 'smartslider');
7
+ N2Loader::import('libraries.slider.css', 'smartslider');
8
+ N2Loader::importAll('libraries.slider.features', 'smartslider');
9
+ N2Loader::importAll('libraries.slider.slide', 'smartslider');
10
+ N2Loader::import('libraries.settings.settings', 'smartslider');
11
+ N2Loader::import('libraries.slider.widget.widgets', 'smartslider');
12
+
13
+ abstract class N2SmartSliderAbstract {
14
+
15
+ public $sliderId = 0;
16
+
17
+ public $elementId = '';
18
+
19
+ public $cacheId = '';
20
+
21
+ public $data;
22
+
23
+ public $params;
24
+
25
+ /**
26
+ * @var N2SmartSliderFeatures
27
+ */
28
+ public $features;
29
+
30
+ public $disableResponsive = false;
31
+
32
+ protected $parameters = null;
33
+
34
+ /**
35
+ * @var N2SmartSliderSlides
36
+ */
37
+ public $slidesBuilder;
38
+
39
+ /**
40
+ * @var N2SmartSliderSlide[]
41
+ */
42
+ public $slides;
43
+
44
+ public $isAdmin = false;
45
+
46
+ public $_activeSlide = 0;
47
+ /**
48
+ * @var Mobile_Detect
49
+ */
50
+ protected $device;
51
+ /**
52
+ * @var NextendSmartSliderCSS
53
+ */
54
+ public $assets;
55
+ protected $cache = false;
56
+
57
+ public static $_identifier = 'n2-ss';
58
+
59
+ public $fontSize = 16;
60
+
61
+ /** @var N2SmartSliderSlide[] */
62
+ public $staticSlides = array();
63
+
64
+ /** @var N2SmartSliderType */
65
+ protected $sliderType;
66
+
67
+ public $staticHtml = '';
68
+
69
+ public $isStaticEdited = false;
70
+
71
+ public function __construct($sliderId, $parameters) {
72
+
73
+ $this->sliderId = $sliderId;
74
+
75
+ $this->setElementId();
76
+
77
+ if ($this->isAdmin) {
78
+ $this->cacheId = self::getAdminCacheId($this->sliderId);
79
+ } else {
80
+ $this->cacheId = self::getCacheId($this->sliderId);
81
+ }
82
+
83
+ $this->parameters = array_merge(array(
84
+ 'extend' => array(),
85
+ 'disableResponsive' => false,
86
+ 'addDummySlidesIfEmpty' => false
87
+ ), $parameters);
88
+
89
+ $this->disableResponsive = $this->parameters['disableResponsive'];
90
+
91
+
92
+ $this->device = new Mobile_Detect();
93
+
94
+ N2Loader::import("models.Sliders", "smartslider");
95
+
96
+ }
97
+
98
+ public function setElementId() {
99
+ $this->elementId = self::$_identifier . '-' . $this->sliderId;
100
+ }
101
+
102
+ public static function getCacheId($sliderId) {
103
+ return self::$_identifier . '-' . $sliderId;
104
+ }
105
+
106
+ public static function getAdminCacheId($sliderId) {
107
+ return self::$_identifier . '-admin-' . $sliderId;
108
+ }
109
+
110
+
111
+ public function getSliderTypeResource($resourceName) {
112
+
113
+ $type = $this->data->get('type', 'simple');
114
+
115
+ $class = 'N2SSPluginType' . $type;
116
+
117
+ N2Loader::importPath(call_user_func(array(
118
+ $class,
119
+ "getPath"
120
+ )) . NDS . $resourceName);
121
+
122
+ $class = 'N2SmartSlider' . $resourceName . $type;
123
+ return new $class($this);
124
+ }
125
+
126
+ abstract public function parseSlider($slider);
127
+
128
+ abstract public function addCMSFunctions($slider);
129
+
130
+ public function loadSliderParams() {
131
+
132
+ $slidersModel = new N2SmartsliderSlidersModel();
133
+ $slider = $slidersModel->get($this->sliderId);
134
+ if (empty($slider)) {
135
+ return false;
136
+ }
137
+ $this->data = new N2Data($slider);
138
+ $this->params = new N2Data($slider['params'], true);
139
+ }
140
+
141
+ public function loadSlider() {
142
+
143
+ $slidersModel = new N2SmartsliderSlidersModel();
144
+ $slider = $slidersModel->get($this->sliderId);
145
+ if (empty($slider)) {
146
+ return false;
147
+ }
148
+ if (isset($this->parameters['extend']['sliderData']) && is_array($this->parameters['extend']['sliderData'])) {
149
+ $sliderData = $this->parameters['extend']['sliderData'];
150
+ $slider['title'] = $sliderData['title'];
151
+ unset($sliderData['title']);
152
+ $slider['type'] = $sliderData['type'];
153
+ unset($sliderData['type']);
154
+
155
+ $this->data = new N2Data($slider);
156
+ $this->params = new N2Data($sliderData);
157
+ } else {
158
+ $this->data = new N2Data($slider);
159
+ $this->params = new N2Data($slider['params'], true);
160
+ }
161
+
162
+ $this->sliderType = $this->getSliderTypeResource('type');
163
+ $this->params->fillDefault($this->sliderType->getDefaults());
164
+ $this->sliderType->limitParams($this->params);
165
+
166
+ $this->features = new N2SmartSliderFeatures($this);
167
+
168
+ $this->initSlides();
169
+ return true;
170
+ }
171
+
172
+ private function initSlides() {
173
+ if ($this->isAdmin) {
174
+ $this->slidesBuilder = new N2SmartSliderSlidesAdmin($this);
175
+ } else {
176
+ $this->slidesBuilder = new N2SmartSliderSlides($this);
177
+ }
178
+ $this->slides = $this->slidesBuilder->getSlides(isset($this->parameters['extend']) ? $this->parameters['extend'] : array(), $this->parameters['addDummySlidesIfEmpty']);
179
+ }
180
+
181
+ public function render() {
182
+
183
+ if (!$this->loadSlider()) {
184
+ return false;
185
+ }
186
+
187
+ if (count($this->slides) == 0) {
188
+ return false;
189
+ }
190
+
191
+ $this->assets = $this->getSliderTypeResource('css');
192
+ $this->assets->render();
193
+ $this->slides[$this->_activeSlide]->setActive();
194
+ for ($i = 0; $i < count($this->slides); $i++) {
195
+ $this->slides[$i]->prepare();
196
+ $this->slides[$i]->setSlidesParams();
197
+ }
198
+
199
+ $this->renderStaticSlide();
200
+ $slider = $this->sliderType->render();
201
+
202
+ if (!$this->isAdmin) {
203
+ N2Plugin::callPlugin('ssitem', 'onNextendSliderRender', array(
204
+ &$slider,
205
+ $this->elementId
206
+ ));
207
+ }
208
+
209
+
210
+ $slider = str_replace('n2-ss-0', $this->elementId, $slider);
211
+ if (!N2Platform::$isAdmin) {
212
+ $rocketAttributes = '';
213
+ $dependency = max(0, intval($this->params->get('dependency')));
214
+ if ($dependency) {
215
+ $rocketAttributes .= 'data-dependency="' . $dependency . '"';
216
+ } else {
217
+ $delay = max(0, intval($this->params->get('delay'), 0));
218
+ if ($delay > 0) {
219
+ $rocketAttributes .= 'data-delay="' . $delay . '"';
220
+ }
221
+ }
222
+
223
+ if (!empty($rocketAttributes)) {
224
+ $slider = '<script id="' . $this->elementId . '" ' . $rocketAttributes . ' type="rocket/slider">' . str_replace(array(
225
+ '<script',
226
+ '</script'
227
+ ), array(
228
+ '<_s_c_r_i_p_t',
229
+ '<_/_s_c_r_i_p_t'
230
+ ), $slider) . '</script>';
231
+ }
232
+ }
233
+
234
+ $slider = $this->features->translateUrl->renderSlider($slider);
235
+
236
+ $slider = $this->features->loadSpinner->renderSlider($this, $slider);
237
+ $slider = $this->features->align->renderSlider($slider, $this->assets->sizes['width']);
238
+ $slider = $this->features->margin->renderSlider($slider);
239
+
240
+ $slider .= $this->features->fadeOnLoad->renderPlaceholder($this->assets->sizes);
241
+
242
+ return "\n<!-- Nextend Smart Slider 3 #" . $this->sliderId . " - BEGIN -->\n" . $slider . "\n<!-- Nextend Smart Slider 3 #" . $this->sliderId . " - END -->\n";
243
+ }
244
+
245
+ public function addStaticSlide($slide) {
246
+ $this->staticSlides[] = $slide;
247
+ }
248
+
249
+ public function renderStaticSlide() {
250
+ $this->staticHtml = '';
251
+ if (count($this->staticSlides)) {
252
+ for ($i = 0; $i < count($this->staticSlides); $i++) {
253
+ $this->staticHtml .= $this->staticSlides[$i]->getAsStatic();
254
+ }
255
+ }
256
+ }
257
+
258
+ /**
259
+ * @return N2SmartSliderSlide
260
+ */
261
+ public function getPreviousSlide() {
262
+ $length = count($this->slides);
263
+
264
+ if ($this->_activeSlide == 0) {
265
+ return $this->slides[$length - 1];
266
+ }
267
+ return $this->slides[$this->_activeSlide - 1];
268
+ }
269
+
270
+ /**
271
+ * @return N2SmartSliderSlide
272
+ */
273
+ public function getNextSlide() {
274
+ $length = count($this->slides);
275
+ if ($this->_activeSlide == $length - 1) {
276
+ return $this->slides[0];
277
+ }
278
+ return $this->slides[$this->_activeSlide + 1];
279
+ }
280
+
281
+ public static function removeShortcode($content) {
282
+ $content = preg_replace('/smartslider3\[([0-9]+)\]/', '', $content);
283
+ $content = preg_replace('/\[smartslider3 slider="([0-9]+)"\]/', '', $content);
284
+ $content = preg_replace('/\[smartslider3 slider=([0-9]+)\]/', '', $content);
285
+ return $content;
286
+ }
287
+
288
+ public function setStatic($isStaticEdited) {
289
+ $this->isStaticEdited = $isStaticEdited;
290
+ }
291
+ }
292
+
293
+ N2Loader::import("libraries.slider.slider", "smartslider.platform");
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/backend.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import("libraries.slider.abstract", "smartslider");
3
+
4
+ class N2SmartSliderBackend extends N2SmartSlider
5
+ {
6
+
7
+ public $isAdmin = true;
8
+
9
+ public function setElementId() {
10
+ $this->elementId = self::$_identifier . '-' . 0;
11
+ }
12
+
13
+ public function setCacheId() {
14
+ $this->cacheId = self::$_identifier . '-' . $this->sliderId . '-backend';
15
+ }
16
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/cache/generator.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2CacheManifestGenerator extends N2CacheManifest
4
+ {
5
+
6
+ /**
7
+ * @var N2SmartSliderAbstract
8
+ */
9
+ private $slider;
10
+
11
+ private $generator;
12
+
13
+ /**
14
+ * @param N2SmartSliderAbstract $slider
15
+ * @param N2SmartSliderSlidesGenerator $generator
16
+ */
17
+ public function __construct($slider, $generator) {
18
+ parent::__construct($slider->cacheId, false);
19
+ $this->slider = $slider;
20
+ $this->generator = $generator;
21
+ }
22
+
23
+ protected function isCacheValid(&$manifestData) {
24
+ $nextRefresh = $manifestData['cacheTime'] + max(0, $this->generator->currentGenerator['params']->get('cache-expiration', 1)) * 60 * 60;
25
+ if ($manifestData['cacheTime'] + max(0, $this->generator->currentGenerator['params']->get('cache-expiration', 1)) * 60 * 60 < N2Platform::getTime()) {
26
+ return false;
27
+ }
28
+ $this->generator->setNextCacheRefresh($nextRefresh);
29
+ return true;
30
+ }
31
+
32
+ protected function addManifestData(&$manifestData) {
33
+ $manifestData['cacheTime'] = N2Platform::getTime();
34
+ $this->generator->setNextCacheRefresh($manifestData['cacheTime'] + max(0, $this->generator->currentGenerator['params']->get('cache-expiration', 1)) * 60 * 60);
35
+ }
36
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/cache/slider.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2CacheManifestSlider extends N2CacheManifest {
4
+
5
+ private $parameters = array();
6
+
7
+ public function __construct($cacheId, $parameters = array()) {
8
+ parent::__construct($cacheId, false);
9
+ $this->parameters = $parameters;
10
+
11
+ }
12
+
13
+ public function makeCache($fileName, $hash, $callable) {
14
+ $variations = 1;
15
+ if (N2Filesystem::existsFile($this->getManifestFilePath('variations'))) {
16
+ $variations = intval(N2Filesystem::readFile($this->getManifestFilePath('variations')));
17
+ }
18
+ return parent::makeCache($fileName . mt_rand(1, $variations), $hash, $callable);
19
+ }
20
+
21
+ protected function isCacheValid(&$manifestData) {
22
+
23
+ if (!isset($manifestData['version']) || $manifestData['version'] != N2SS3::$version) {
24
+ return false;
25
+ }
26
+
27
+ if (N2SmartSliderHelper::getInstance()
28
+ ->isSliderChanged($this->parameters['slider']->sliderId, 1)
29
+ ) {
30
+ $this->clearCurrentGroup();
31
+ N2SmartSliderHelper::getInstance()
32
+ ->setSliderChanged($this->parameters['slider']->sliderId, 0);
33
+ return false;
34
+ }
35
+
36
+ $time = N2Platform::getTime();
37
+
38
+ if ($manifestData['nextCacheRefresh'] < $time) {
39
+ return false;
40
+ }
41
+
42
+ if (!isset($manifestData['currentPath']) || $manifestData['currentPath'] != md5($this->currentPath)) {
43
+ return false;
44
+ }
45
+
46
+ return true;
47
+ }
48
+
49
+ protected function addManifestData(&$manifestData) {
50
+
51
+ $manifestData['nextCacheRefresh'] = N2Pluggable::applyFilters('SSNextCacheRefresh', $this->parameters['slider']->slidesBuilder->getNextCacheRefresh(), array($this->parameters['slider']));
52
+ $manifestData['currentPath'] = md5($this->currentPath);
53
+ $manifestData['version'] = N2SS3::$version;
54
+
55
+ $variations = 1;
56
+
57
+ $params = $this->parameters['slider']->params;
58
+ if ($params->get('randomize', 0) || $params->get('randomizeFirst', 0)) {
59
+ $variations = intval($params->get('variations', 5));
60
+ if ($variations < 1) {
61
+ $variations = 1;
62
+ }
63
+ }
64
+
65
+ N2Filesystem::createFile($this->getManifestFilePath('variations'), $variations);
66
+ }
67
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/css.php ADDED
@@ -0,0 +1,85 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.parse.font');
4
+ N2Loader::import('libraries.parse.style');
5
+
6
+ abstract class N2SmartSliderCSSAbstract {
7
+
8
+ /**
9
+ * @var N2SmartSliderAbstract
10
+ */
11
+ protected $slider;
12
+
13
+ public $sizes = array();
14
+
15
+ public function __construct($slider) {
16
+ $this->slider = $slider;
17
+ }
18
+
19
+ public function render() {
20
+ $slider = $this->slider;
21
+ $params = $slider->params;
22
+
23
+ $width = intval($params->get('width', 900));
24
+ $height = intval($params->get('height', 500));
25
+ if ($width < 10) {
26
+ N2Message::error(n2_('Slider width is not valid number!'));
27
+ }
28
+ if ($height < 10) {
29
+ N2Message::error(n2_('Slider height is not valid number!'));
30
+ }
31
+ $context = array(
32
+ 'id' => "~'#{$slider->elementId}'",
33
+ 'width' => $width . 'px',
34
+ 'height' => $height . 'px',
35
+ 'canvas' => 0,
36
+ 'count' => count($slider->slides),
37
+ 'margin' => '0px 0px 0px 0px',
38
+ 'clear' => ($params->get('weaker-selector', 0) ? 'clearv2.n2less' : 'clear.n2less'),
39
+ 'hasPerspective' => 0
40
+ );
41
+
42
+ $perspective = intval($params->get('perspective', 1500));
43
+ if ($perspective > 0) {
44
+ $context['hasPerspective'] = 1;
45
+ $context['perspective'] = $perspective . 'px';
46
+ }
47
+
48
+ $this->renderType($context);
49
+
50
+ if ($params->get('imageload', 0)) {
51
+ N2LESS::addFile(NEXTEND_SMARTSLIDER_ASSETS . '/less/spinner.n2less', $slider->cacheId, $context, NEXTEND_SMARTSLIDER_ASSETS . '/less' . NDS);
52
+ }
53
+
54
+ $this->sizes['marginVertical'] = 0;
55
+ $this->sizes['marginHorizontal'] = 0;
56
+
57
+ $this->sizes['width'] = intval($context['width']);
58
+ $this->sizes['height'] = intval($context['height']);
59
+ $this->sizes['canvasWidth'] = intval($context['canvaswidth']);
60
+ $this->sizes['canvasHeight'] = intval($context['canvasheight']);
61
+ }
62
+
63
+ protected abstract function renderType(&$context);
64
+
65
+ protected function setContextFonts($matches, &$context, $fonts, $value) {
66
+ $context['font' . $fonts] = '~".' . $matches[0] . '"';
67
+
68
+ $font = new N2ParseFont($value);
69
+ $context['font' . $fonts . 'text'] = '";' . $font->printTab() . '"';
70
+ $font->mixinTab('Link');
71
+ $context['font' . $fonts . 'link'] = '";' . $font->printTab('Link') . '"';
72
+ $font->mixinTab('Link:Hover', 'Link');
73
+ $context['font' . $fonts . 'hover'] = '";' . $font->printTab('Link:Hover') . '"';
74
+ }
75
+
76
+ protected function setContextStyles($selector, &$context, $styles, $value) {
77
+ $context['style' . $styles] = '~".' . $selector . '"';
78
+
79
+ $style = new N2ParseStyle($value);
80
+ $context['style' . $styles . 'normal'] = '";' . $style->printTab('Normal') . '"';
81
+ $context['style' . $styles . 'hover'] = '";' . $style->printTab('Hover') . '"';
82
+
83
+ }
84
+
85
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/align.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureAlign
4
+ {
5
+
6
+ private $slider;
7
+
8
+ public $align = 'normal';
9
+
10
+ public function __construct($slider) {
11
+
12
+ $this->slider = $slider;
13
+
14
+ $this->align = $slider->params->get('align', 'normal');
15
+ }
16
+
17
+ public function renderSlider($sliderHTML, $maxWidth) {
18
+ $aligned = false;
19
+
20
+ $htmlOptions = array(
21
+ "id" => $this->slider->elementId . '-align',
22
+ "class" => "n2-ss-align",
23
+ "encode" => false
24
+ );
25
+
26
+ $htmlOptionsPadding = array(
27
+ "class" => 'n2-padding'
28
+ );
29
+
30
+ if (!$this->slider->features->responsive->scaleUp && $this->align != 'normal') {
31
+ switch ($this->align) {
32
+ case 'left':
33
+ case 'right':
34
+ $width = $this->slider->assets->sizes['width'];
35
+ $htmlOptions["style"] = "float: {$this->align}; width: {$width}px;";
36
+ break;
37
+ case 'center':
38
+ $htmlOptions["style"] = "margin: 0 auto; max-width: {$maxWidth}px;";
39
+ break;
40
+ }
41
+ $aligned = true;
42
+ }
43
+
44
+ $sliderHTML = N2Html::tag("div", $htmlOptions, N2Html::tag("div", $htmlOptionsPadding, $sliderHTML));
45
+
46
+ if ($aligned == true) {
47
+ $sliderHTML .= N2Html::tag("div", array("style" => "clear: both"), "");
48
+ }
49
+
50
+ return $sliderHTML;
51
+ }
52
+
53
+ public function makeJavaScriptProperties(&$properties) {
54
+ $properties['align'] = $this->align;
55
+ $properties['isDelayed'] = intval($this->slider->params->get('is-delayed', 0));
56
+ }
57
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/autoplay.php ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureAutoplay {
4
+
5
+ private $slider;
6
+
7
+ public $isEnabled = 0, $isStart = 0, $duration = 8000;
8
+ public $interval = 0, $intervalModifier = 'loop', $intervalSlide = 'current', $allowReStart = 0;
9
+ public $stopOnClick = 1, $stopOnMouseEnter = 1, $stopOnMediaStarted = 1;
10
+ public $resumeOnMouseLeave = 0, $resumeOnMediaEnded = 1, $resumeOnSlideChanged = 0;
11
+
12
+
13
+ public function __construct($slider) {
14
+
15
+ $this->slider = $slider;
16
+ $params = $slider->params;
17
+
18
+ $this->isEnabled = intval($params->get('autoplay', 0));
19
+ $this->isStart = intval($params->get('autoplayStart', 1));
20
+ $this->duration = intval($params->get('autoplayDuration', 8000));
21
+
22
+ if ($this->duration < 1) {
23
+ $this->duration = 1500;
24
+ }
25
+
26
+
27
+ list($this->interval, $this->intervalModifier, $this->intervalSlide) = (array)N2Parse::parse($slider->params->get('autoplayfinish', '0|*|loop|*|current'));
28
+
29
+
30
+ $this->allowReStart = intval($params->get('autoplayAllowReStart', 0));
31
+
32
+ $this->interval = intval($this->interval);
33
+
34
+ $this->stopOnClick = intval($params->get('autoplayStopClick', 1));
35
+ $this->stopOnMouse = $params->get('autoplayStopMouse', 'enter');
36
+ $this->stopOnMediaStarted = intval($params->get('autoplayStopMedia', 1));
37
+
38
+
39
+ $this->resumeOnClick = intval($params->get('autoplayResumeClick', 0));
40
+ $this->resumeOnMouse = $params->get('autoplayResumeMouse', 0);
41
+ $this->resumeOnMediaEnded = intval($params->get('autoplayResumeMedia', 1));
42
+
43
+
44
+ }
45
+
46
+ public function makeJavaScriptProperties(&$properties) {
47
+ $properties['autoplay'] = array(
48
+ 'enabled' => $this->isEnabled,
49
+ 'start' => $this->isStart,
50
+ 'duration' => $this->duration,
51
+ 'autoplayToSlide' => 0,
52
+ 'autoplayToSlideIndex' => -1,
53
+ 'allowReStart' => $this->allowReStart,
54
+ 'pause' => array(
55
+ 'click' => $this->stopOnClick,
56
+ 'mouse' => $this->stopOnMouse,
57
+ 'mediaStarted' => $this->stopOnMediaStarted
58
+ ),
59
+ 'resume' => array(
60
+ 'click' => $this->resumeOnClick,
61
+ 'mouse' => $this->resumeOnMouse,
62
+ 'mediaEnded' => $this->resumeOnMediaEnded,
63
+ 'slidechanged' => $this->resumeOnSlideChanged
64
+ )
65
+ );
66
+
67
+ switch ($this->intervalModifier) {
68
+ case 'slide':
69
+ $properties['autoplay']['autoplayToSlide'] = $this->interval;
70
+ if ($this->intervalSlide == 'next') {
71
+ $properties['autoplay']['autoplayToSlide']++;
72
+ }
73
+ break;
74
+ case 'slideindex':
75
+ $properties['autoplay']['autoplayToSlideIndex'] = $this->interval;
76
+ default:
77
+ $properties['autoplay']['autoplayToSlide'] = $this->interval * count($this->slider->slides) - 1;
78
+ if ($this->intervalSlide == 'next') {
79
+ $properties['autoplay']['autoplayToSlide']++;
80
+ }
81
+ break;
82
+ }
83
+ }
84
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/blockrightclick.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureBlockRightClick
4
+ {
5
+
6
+ private $slider;
7
+
8
+ public $isEnabled = 0;
9
+
10
+ public function __construct($slider) {
11
+
12
+ $this->slider = $slider;
13
+
14
+ $this->isEnabled = intval($slider->params->get('blockrightclick', 0));
15
+ }
16
+
17
+ public function makeJavaScriptProperties(&$properties) {
18
+
19
+ $properties['blockrightclick'] = $this->isEnabled;
20
+ }
21
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/controls.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureControls
4
+ {
5
+
6
+ private $slider;
7
+
8
+ public $scroll = 0;
9
+
10
+ public $drag = 0;
11
+
12
+ public $touch = 1;
13
+
14
+ public $keyboard = 0;
15
+
16
+ public $tilt = 0;
17
+
18
+ public function __construct($slider) {
19
+
20
+ $this->slider = $slider;
21
+
22
+ $this->scroll = intval($slider->params->get('controlsScroll', 0));
23
+ $this->drag = intval($slider->params->get('controlsDrag', 1));
24
+ $this->touch = $slider->params->get('controlsTouch', 'horizontal');
25
+ $this->keyboard = intval($slider->params->get('controlsKeyboard', 1));
26
+ $this->tilt = intval($slider->params->get('controlsTilt', 0));
27
+ }
28
+
29
+ public function makeJavaScriptProperties(&$properties) {
30
+ $properties['controls'] = array(
31
+ 'scroll' => $this->scroll,
32
+ 'drag' => $this->drag,
33
+ 'touch' => $this->touch,
34
+ 'keyboard' => $this->keyboard,
35
+ 'tilt' => $this->tilt
36
+ );
37
+ }
38
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/fadeonload.php ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureFadeOnLoad
4
+ {
5
+
6
+ private $slider;
7
+
8
+ public $fadeOnLoad = 1;
9
+
10
+ public $fadeOnScroll = 0;
11
+
12
+ public $playWhenVisible = 1;
13
+
14
+ public function __construct($slider) {
15
+
16
+ $this->slider = $slider;
17
+
18
+ $this->fadeOnLoad = intval($slider->params->get('fadeOnLoad', 1));
19
+ $this->fadeOnScroll = intval($slider->params->get('fadeOnScroll', 0));
20
+ $this->playWhenVisible = intval($slider->params->get('playWhenVisible', 1));
21
+
22
+ if (!empty($this->fadeOnScroll) && $this->fadeOnScroll) {
23
+ $this->fadeOnLoad = 1;
24
+ $this->fadeOnScroll = 1;
25
+ } else {
26
+ $this->fadeOnScroll = 0;
27
+ }
28
+ }
29
+
30
+ public function forceFadeOnLoad() {
31
+ if (!$this->fadeOnScroll && !$this->fadeOnLoad) {
32
+ $this->fadeOnLoad = 1;
33
+ }
34
+ }
35
+
36
+ public function getSliderClass() {
37
+ if ($this->fadeOnLoad) {
38
+ return 'n2-ss-load-fade ';
39
+ }
40
+ return '';
41
+ }
42
+
43
+ public function renderPlaceholder($sizes) {
44
+
45
+ if (!$this->slider->isAdmin && $this->fadeOnLoad && ($this->slider->features->responsive->scaleDown || $this->slider->features->responsive->scaleUp)) {
46
+
47
+ if (N2SystemHelper::testMemoryLimit()) {
48
+ if ($sizes['width'] + $sizes['marginHorizontal'] > 0 && $sizes['height'] > 0 && function_exists('imagecreatetruecolor')) {
49
+ return N2Html::tag("div", array(
50
+ "id" => $this->slider->elementId . "-placeholder",
51
+ "encode" => false,
52
+ "style" => 'position: relative;z-index:2;'
53
+ ), $this->makeImage($sizes));
54
+ } else {
55
+ N2CSS::addCode("#{$this->slider->elementId} .n2-ss-load-fade{position: relative !important;}", $this->slider->cacheId);
56
+ }
57
+
58
+ } else {
59
+ N2Message::error(n2_("It seems like the <a href='http://php.net/manual/en/ini.core.php#ini.memory-limit'>memory_limit</a> on the server is too low for the fade on load feature. Please set it minimum 60M and reload the page!"));
60
+ }
61
+ } else {
62
+ N2CSS::addCode("#{$this->slider->elementId}.n2-ss-load-fade{position: relative !important;}", $this->slider->cacheId);
63
+ }
64
+ return '';
65
+ }
66
+
67
+ public function makeJavaScriptProperties(&$properties) {
68
+ $properties['load'] = array(
69
+ 'fade' => $this->fadeOnLoad,
70
+ 'scroll' => ($this->fadeOnScroll & !$this->slider->isAdmin)
71
+ );
72
+ $properties['playWhenVisible'] = $this->playWhenVisible;
73
+ }
74
+
75
+
76
+ private function makeImage($sizes) {
77
+ $html = N2Html::image("data:image/svg+xml;base64," . $this->transparentImage($sizes['width'] + $sizes['marginHorizontal'], $sizes['height']), 'Slider', array(
78
+ 'style' => 'width: 100%; max-width:' . ($this->slider->features->responsive->maximumSlideWidth + $sizes['marginHorizontal']) . 'px;',
79
+ 'class' => 'n2-ow'
80
+ ));
81
+
82
+ if ($sizes['marginVertical'] > 0) {
83
+ $html .= N2Html::image("data:image/svg+xml;base64," . $this->transparentImage($sizes['width'] + $sizes['marginHorizontal'], $sizes['marginVertical']), 'Slider', array(
84
+ 'style' => 'width: 100%;',
85
+ 'class' => 'n2-ow'
86
+ ));
87
+ }
88
+
89
+ return $html;
90
+ }
91
+
92
+ private function transparentImage($width, $height) {
93
+
94
+ return base64_encode('<svg xmlns="http://www.w3.org/2000/svg" version="1.0" width="' . $width . '" height="' . $height . '" ></svg>');
95
+ }
96
+
97
+ private static function gcd($a, $b) {
98
+ return ($a % $b) ? self::gcd($b, $a % $b) : $b;
99
+ }
100
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/features.php ADDED
@@ -0,0 +1,181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.image.image');
4
+ N2Loader::import('libraries.image.manager');
5
+
6
+ class N2SmartSliderFeatures {
7
+
8
+ private $slider;
9
+
10
+ /**
11
+ * @var N2SmartSliderFeatureFadeOnLoad
12
+ */
13
+ public $fadeOnLoad;
14
+
15
+ /**
16
+ * @var N2SmartSliderFeatureResponsive
17
+ */
18
+ public $responsive;
19
+
20
+ /**
21
+ * @var N2SmartSliderFeatureControls
22
+ */
23
+ public $controls;
24
+
25
+ /**
26
+ * @var N2SmartSliderFeatureLazyLoad
27
+ */
28
+ public $lazyLoad;
29
+
30
+ /**
31
+ * @var N2SmartSliderFeatureAlign
32
+ */
33
+ public $align;
34
+
35
+ /**
36
+ * @var N2SmartSliderFeatureBlockRightClick
37
+ */
38
+ public $blockRightClick;
39
+ /**
40
+ * @var N2SmartSliderFeatureAutoplay
41
+ */
42
+ public $autoplay;
43
+
44
+ /**
45
+ * @var N2SmartSliderFeatureTranslateUrl
46
+ */
47
+ public $translateUrl;
48
+
49
+ /**
50
+ * @var N2SmartSliderFeatureLayerMode
51
+ */
52
+ public $layerMode;
53
+
54
+ /**
55
+ * @var N2SmartSliderFeatureSlideBackground
56
+ */
57
+ public $slideBackground;
58
+
59
+ public $slideBackgroundVideo;
60
+
61
+ /**
62
+ * @var N2SmartSliderFeaturePostBackgroundAnimation
63
+ */
64
+ public $postBackgroundAnimation;
65
+
66
+ /**
67
+ * @var N2SmartSliderFeatureSpinner
68
+ */
69
+ public $loadSpinner;
70
+
71
+ public $optimize;
72
+
73
+ private $initCallbacks = array();
74
+
75
+ public function __construct($slider) {
76
+ $this->slider = $slider;
77
+
78
+ $this->optimize = new N2SmartSliderFeatureOptimize($slider);
79
+ $this->fadeOnLoad = new N2SmartSliderFeatureFadeOnLoad($slider);
80
+ $this->align = new N2SmartSliderFeatureAlign($slider);
81
+ $this->responsive = new N2SmartSliderFeatureResponsive($slider, $this);
82
+ $this->controls = new N2SmartSliderFeatureControls($slider);
83
+ $this->lazyLoad = new N2SmartSliderFeatureLazyLoad($slider);
84
+ $this->margin = new N2SmartSliderFeatureMargin($slider);
85
+ $this->blockRightClick = new N2SmartSliderFeatureBlockRightClick($slider);
86
+ $this->maintainSession = new N2SmartSliderFeatureMaintainSession($slider);
87
+ $this->autoplay = new N2SmartSliderFeatureAutoplay($slider);
88
+ $this->translateUrl = new N2SmartSliderFeatureTranslateUrl($slider);
89
+ $this->layerMode = new N2SmartSliderFeatureLayerMode($slider);
90
+ $this->slideBackground = new N2SmartSliderFeatureSlideBackground($slider);
91
+ $this->loadSpinner = new N2SmartSliderFeatureSpinner($slider);
92
+ }
93
+
94
+ public function generateJSProperties() {
95
+
96
+ $return = array(
97
+ 'admin' => $this->slider->isAdmin,
98
+ 'isStaticEdited' => intval($this->slider->isStaticEdited),
99
+ 'translate3d' => intval(N2SmartSliderSettings::get('hardware-acceleration', 1)),
100
+ 'callbacks' => $this->slider->params->get('callbacks', '')
101
+ );
102
+ $randomizeCache = $this->slider->params->get('randomize-cache', 0);
103
+ if (!$this->slider->isAdmin && $randomizeCache) {
104
+ $return['randomize'] = array(
105
+ 'randomize' => intval($this->slider->params->get('randomize', 0)),
106
+ 'randomizeFirst' => intval($this->slider->params->get('randomizeFirst', 0))
107
+ );
108
+ }
109
+
110
+ $this->makeJavaScriptProperties($return);
111
+
112
+ return $return;
113
+ }
114
+
115
+ protected function makeJavaScriptProperties(&$properties) {
116
+ $this->align->makeJavaScriptProperties($properties);
117
+ $this->fadeOnLoad->makeJavaScriptProperties($properties);
118
+ $this->responsive->makeJavaScriptProperties($properties);
119
+ $this->controls->makeJavaScriptProperties($properties);
120
+ $this->lazyLoad->makeJavaScriptProperties($properties);
121
+ $this->blockRightClick->makeJavaScriptProperties($properties);
122
+ $this->maintainSession->makeJavaScriptProperties($properties);
123
+ $this->autoplay->makeJavaScriptProperties($properties);
124
+ $this->layerMode->makeJavaScriptProperties($properties);
125
+ $properties['initCallbacks'] = $this->initCallbacks;
126
+ }
127
+
128
+ /**
129
+ * @param $slide N2SmartSliderSlide
130
+ */
131
+ public function makeSlide($slide) {
132
+ }
133
+
134
+ /**
135
+ * @param $slide N2SmartSliderSlide
136
+ *
137
+ * @return string
138
+ */
139
+ public function makeBackground($slide) {
140
+
141
+ $background = $this->slideBackground->make($slide);
142
+
143
+ return $background;
144
+ }
145
+
146
+ protected function setDevices() {
147
+
148
+ if (intval($this->_data->get('showmobile', 1)) == 0) {
149
+ if (!$this->device->isTablet() && $this->device->isMobile()) {
150
+ $this->norender = true;
151
+ return;
152
+ }
153
+ }
154
+
155
+ $custommobile = N2Parse::parse($this->_data->get('showcustommobile', '0|*|'));
156
+ if ($custommobile[0] == 1) {
157
+ if (!$this->device->isTablet() && $this->device->isMobile()) {
158
+ $this->_data->set('slider', $custommobile[1]);
159
+ }
160
+ }
161
+
162
+ if (intval($this->_data->get('showtablet', 1)) == 0) {
163
+ if ($this->device->isTablet()) {
164
+ $this->norender = true;
165
+ return;
166
+ }
167
+ }
168
+
169
+ $customtablet = N2Parse::parse($this->_data->get('showcustomtablet', '0|*|'));
170
+ if ($customtablet[0] == 1) {
171
+ if ($this->device->isTablet()) {
172
+ $this->_data->set('slider', $customtablet[1]);
173
+ }
174
+ }
175
+
176
+ }
177
+
178
+ public function addInitCallback($callback) {
179
+ $this->initCallbacks[] = $callback;
180
+ }
181
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/layermode.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureLayerMode
4
+ {
5
+
6
+ private $slider;
7
+
8
+ public $playOnce = 0;
9
+
10
+ public $playFirstLayer = 1;
11
+
12
+ public $mode = 'skippable';
13
+
14
+ public $inAnimation = 'mainInEnd';
15
+
16
+ public function __construct($slider) {
17
+
18
+ $this->slider = $slider;
19
+
20
+ $this->playOnce = intval($slider->params->get('playonce', 0));
21
+
22
+ $this->playFirstLayer = intval($slider->params->get('playfirstlayer', 1));
23
+
24
+ switch ($slider->params->get('layer-animation-play-mode', 'skippable')) {
25
+ case 'forced':
26
+ $this->mode = 'forced';
27
+ break;
28
+ default:
29
+ $this->mode = 'skippable';
30
+ }
31
+
32
+ switch ($slider->params->get('layer-animation-play-in', 'end')) {
33
+ case 'end':
34
+ $this->inAnimation = 'mainInEnd';
35
+ break;
36
+ default:
37
+ $this->inAnimation = 'mainInStart';
38
+ }
39
+ }
40
+
41
+ public function makeJavaScriptProperties(&$properties) {
42
+ $properties['layerMode'] = array(
43
+ 'playOnce' => $this->playOnce,
44
+ 'playFirstLayer' => $this->playFirstLayer,
45
+ 'mode' => $this->mode,
46
+ 'inAnimation' => $this->inAnimation
47
+ );
48
+
49
+ $params = $this->slider->params;
50
+ $properties['parallax'] = array(
51
+ 'enabled' => intval($params->get('parallax-enabled', 1)),
52
+ 'mobile' => intval($params->get('parallax-enabled-mobile', 0)),
53
+ 'is3D' => intval($params->get('parallax-3d', 0)),
54
+ 'animate' => intval($params->get('parallax-animate', 1)),
55
+ 'horizontal' => $params->get('parallax-horizontal', 'mouse'),
56
+ 'vertical' => $params->get('parallax-vertical', 'mouse'),
57
+ 'origin' => $params->get('parallax-mouse-origin', 'slider'),
58
+ 'scrollmove' => $params->get('parallax-scroll-move', 'both')
59
+ );
60
+ }
61
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/lazyload.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureLazyLoad
4
+ {
5
+
6
+ private $slider;
7
+
8
+ public $isEnabled = 0, $neighborCount = 0, $layerImageOptimize = 0, $layerImageTablet = 50, $layerImageMobile = 30;
9
+
10
+ public function __construct($slider) {
11
+
12
+ $this->slider = $slider;
13
+
14
+ $this->isEnabled = intval($slider->params->get('imageload', 0));
15
+ $this->neighborCount = intval($slider->params->get('imageloadNeighborSlides', 0));
16
+
17
+ $this->layerImageOptimize = intval($slider->params->get('layer-image-optimize', 0)) && !$slider->isAdmin;
18
+ $this->layerImageTablet = min(100, max(1, intval($slider->params->get('layer-image-tablet', 50)))) / 100;
19
+ $this->layerImageMobile = min(100, max(1, intval($slider->params->get('layer-image-mobile', 30)))) / 100;
20
+
21
+ $this->layerImageSizeBase64 = intval($slider->params->get('layer-image-base64', 0)) && !$slider->isAdmin;
22
+ $this->layerImageSizeBase64Size = max(0, intval($slider->params->get('layer-image-base64-size', 5))) * 1024;
23
+
24
+ }
25
+
26
+ public function makeJavaScriptProperties(&$properties) {
27
+
28
+ $properties['lazyLoad'] = $this->isEnabled;
29
+ $properties['lazyLoadNeighbor'] = $this->neighborCount;
30
+ }
31
+
32
+ public function isSlideLazyLoaded($slideIndex) {
33
+ if ($this->isEnabled == 0) {
34
+ return false;
35
+ }
36
+ if ($this->slider->_activeSlide == $slideIndex) {
37
+ return false;
38
+ }
39
+
40
+ if ($this->lazyLoad->neighborCount) {
41
+ $dist = abs($this->slider->_activeSlide - $slideIndex);
42
+ $distanceBack = abs($slideIndex - count($this->_slides) - 1);
43
+ if ($distanceBack < $dist) {
44
+ $dist = $distanceBack;
45
+ }
46
+ if ($dist <= $this->lazyLoad->neighborCount) {
47
+ return false;
48
+ }
49
+ }
50
+ return true;
51
+ }
52
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/maintainsession.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureMaintainSession
4
+ {
5
+
6
+ private $slider;
7
+
8
+ public $isEnabled = 0;
9
+
10
+ public function __construct($slider) {
11
+
12
+ $this->slider = $slider;
13
+
14
+ $this->isEnabled = intval($slider->params->get('maintain-session', 0));
15
+ }
16
+
17
+ public function makeJavaScriptProperties(&$properties) {
18
+
19
+ $properties['maintainSession'] = $this->isEnabled;
20
+ }
21
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/margin.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureMargin
4
+ {
5
+
6
+ private $slider;
7
+
8
+ public function __construct($slider) {
9
+
10
+ $this->slider = $slider;
11
+
12
+ $this->margin = explode('|*|', $slider->params->get('margin', '0|*|0|*|0|*|0'));
13
+ }
14
+
15
+ public function renderSlider($sliderHTML) {
16
+ if (!N2Platform::$isAdmin && count($this->margin) >= 4) {
17
+ array_splice($this->margin, 4);
18
+ if ($this->margin[0] != 0 || $this->margin[1] != 0 || $this->margin[2] != 0 || $this->margin[3] != 0) {
19
+ $sliderHTML = N2Html::tag("div", array(
20
+ "class" => "n2-ss-margin",
21
+ "encode" => false,
22
+ "style" => "margin: " . implode('px ', $this->margin) . "px;"
23
+ ), $sliderHTML);
24
+ }
25
+ }
26
+
27
+ return $sliderHTML;
28
+ }
29
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/optimize.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureOptimize {
4
+
5
+ private $slider;
6
+
7
+ private $optimize = false, $thumbnailWidth = 100, $thumbnailHeight = 60, $quality = 70;
8
+
9
+ public function __construct($slider) {
10
+
11
+ $this->slider = $slider;
12
+
13
+ $this->optimize = $slider->params->get('optimize', 0);
14
+
15
+ $this->backgroundImageCustom = intval($slider->params->get('optimize-background-image-custom', 0));
16
+ $this->backgroundImageWidth = intval($slider->params->get('optimize-background-image-width', 800));
17
+ $this->backgroundImageHeight = intval($slider->params->get('optimize-background-image-height', 600));
18
+ if ($this->backgroundImageWidth < 50 || $this->backgroundImageHeight < 50) {
19
+ $this->backgroundImageCustom = false;
20
+ }
21
+
22
+ $this->thumbnailWidth = $slider->params->get('optimizeThumbnailWidth', 100);
23
+ $this->thumbnailHeight = $slider->params->get('optimizeThumbnailHeight', 60);
24
+
25
+ $this->quality = intval($slider->params->get('optimize-quality', 70));
26
+ }
27
+
28
+ public function optimizeBackground($image, $x = 50, $y = 50) {
29
+ if ($this->optimize) {
30
+ try {
31
+ $sizes = $this->slider->assets->sizes;
32
+ return N2Image::resizeImage('resized', N2ImageHelper::fixed($image, true), ($this->backgroundImageCustom ? $this->backgroundImageWidth : $sizes['canvasWidth']), ($this->backgroundImageCustom ? $this->backgroundImageHeight : $sizes['canvasHeight']), 'normal', 'ffffff', true, $this->quality, true, $x, $y);
33
+ } catch (Exception $e) {
34
+ return $image;
35
+ }
36
+ }
37
+ return $image;
38
+ }
39
+
40
+ public function optimizeThumbnail($image) {
41
+ if ($this->optimize) {
42
+ try {
43
+ return N2Image::resizeImage('resized', N2ImageHelper::fixed($image, true), $this->thumbnailWidth, $this->thumbnailHeight, 'normal', 'ffffff', true, $this->quality, true);
44
+ } catch (Exception $e) {
45
+ return $image;
46
+ }
47
+ }
48
+ return $image;
49
+ }
50
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/responsive.php ADDED
@@ -0,0 +1,445 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureResponsive {
4
+
5
+ /** @var N2SmartSliderAbstract */
6
+ public $slider;
7
+
8
+ public $desktop = 1;
9
+
10
+ public $tablet = 1;
11
+
12
+ public $mobile = 1;
13
+
14
+ public $onResizeEnabled = 1;
15
+
16
+ public $type = 'auto';
17
+
18
+ public $modeObject = null;
19
+
20
+ public $scaleDown = 0;
21
+
22
+ public $scaleUp = 0;
23
+
24
+ public $forceFull = 0;
25
+
26
+ public $constrainRatio = 1;
27
+
28
+ public $minimumHeight = -1;
29
+
30
+ public $maximumHeight = -1;
31
+
32
+ public $maximumSlideWidth = 10000;
33
+ public $maximumSlideWidthLandscape = -1;
34
+
35
+ public $maximumSlideWidthTablet = -1;
36
+ public $maximumSlideWidthTabletLandscape = -1;
37
+
38
+ public $maximumSlideWidthMobile = -1;
39
+ public $maximumSlideWidthMobileLandscape = -1;
40
+
41
+ public $maximumSlideWidthConstrainHeight = 0;
42
+
43
+ public $verticalOffsetSelectors = '';
44
+
45
+ public $basedOn = 'combined';
46
+
47
+ public $desktopPortraitScreenWidth = 1200;
48
+
49
+ public $tabletPortraitScreenWidth = 800;
50
+
51
+ public $mobilePortraitScreenWidth = 440;
52
+
53
+ public $tabletLandscapeScreenWidth = 1024;
54
+
55
+ public $mobileLandscapeScreenWidth = 740;
56
+
57
+ public $focusUser = 0, $focusAutoplay = 0;
58
+
59
+ public $orientationMode = 'width_and_height';
60
+
61
+ public function __construct($slider, $features) {
62
+
63
+ $this->slider = $slider;
64
+
65
+ $this->desktop = intval($slider->params->get('desktop', 1));
66
+ $this->tablet = intval($slider->params->get('tablet', 1));
67
+ $this->mobile = intval($slider->params->get('mobile', 1));
68
+
69
+ $this->type = $slider->params->get('responsive-mode', 'auto');
70
+ $class = 'N2SSResponsive' . $this->type;
71
+ if (!class_exists($class)) {
72
+ $class = 'N2SSResponsiveAuto';
73
+ }
74
+ $this->modeObject = new $class($slider->params, $this, $features);
75
+ $this->onResizeEnabled = !$slider->disableResponsive;
76
+
77
+ if (!$this->scaleDown && !$this->scaleUp) {
78
+ $this->onResizeEnabled = 0;
79
+ }
80
+
81
+
82
+ $this->basedOn = N2SmartSliderSettings::get('responsive-basedon', 'combined');
83
+
84
+ $this->desktopPortraitScreenWidth = intval(N2SmartSliderSettings::get('responsive-screen-width-desktop-portrait', 1200));
85
+
86
+ $this->tabletPortraitScreenWidth = intval(N2SmartSliderSettings::get('responsive-screen-width-tablet-portrait', 800));
87
+ $this->mobilePortraitScreenWidth = intval(N2SmartSliderSettings::get('responsive-screen-width-mobile-portrait', 440));
88
+
89
+ if ($this->tabletPortraitScreenWidth < $this->mobilePortraitScreenWidth) {
90
+ $this->mobilePortraitScreenWidth = $this->tabletPortraitScreenWidth;
91
+ }
92
+
93
+ $this->tabletLandscapeScreenWidth = intval(N2SmartSliderSettings::get('responsive-screen-width-tablet-landscape', 1024));
94
+ $this->mobileLandscapeScreenWidth = intval(N2SmartSliderSettings::get('responsive-screen-width-mobile-landscape', 740));
95
+
96
+ if ($this->tabletLandscapeScreenWidth < $this->mobileLandscapeScreenWidth) {
97
+ $this->mobileLandscapeScreenWidth = $this->tabletLandscapeScreenWidth;
98
+ }
99
+
100
+ $modes = array(
101
+ 'desktopPortrait' => 1,
102
+ 'desktopLandscape' => 0,
103
+ 'tabletPortrait' => 0,
104
+ 'tabletLandscape' => 0,
105
+ 'mobilePortrait' => 0,
106
+ 'mobileLandscape' => 0
107
+ );
108
+ $min = intval($slider->params->get('desktop-portrait-minimum-font-size', 4));
109
+ $minimumFontSize = array(
110
+ 'desktopPortrait' => $min,
111
+ 'desktopLandscape' => $min,
112
+ 'tabletPortrait' => $min,
113
+ 'tabletLandscape' => $min,
114
+ 'mobilePortrait' => $min,
115
+ 'mobileLandscape' => $min
116
+ );
117
+ $ratioModifiers = array(
118
+ 'unknownUnknown' => 1,
119
+ 'desktopPortrait' => 1,
120
+ 'desktopLandscape' => 1,
121
+ 'tabletPortrait' => 1,
122
+ 'tabletLandscape' => 1,
123
+ 'mobilePortrait' => 1,
124
+ 'mobileLandscape' => 1
125
+ );
126
+
127
+ $sliderWidth = intval($slider->params->get('width', 1000));
128
+ $sliderHeight = intval($slider->params->get('height', 500));
129
+
130
+ $modeSwitchWidth = array(
131
+ 'desktopPortrait' => $sliderWidth,
132
+ 'desktopLandscape' => $sliderWidth,
133
+ 'tabletPortrait' => 0,
134
+ 'tabletLandscape' => 0,
135
+ 'mobilePortrait' => 0,
136
+ 'mobileLandscape' => 0
137
+ );
138
+
139
+ if ($slider->params->get('desktop-landscape', 0)) {
140
+ $modes['desktopLandscape'] = 1;
141
+
142
+ $landscapeWidth = intval($slider->params->get('desktop-landscape-width', 1440));
143
+ $modeSwitchWidth['desktopLandscape'] = $landscapeWidth;
144
+
145
+ $landscapeHeight = intval($slider->params->get('desktop-landscape-height'));
146
+ if ($landscapeHeight) {
147
+ $ratioModifiers['desktopLandscape'] = $landscapeHeight / ($modeSwitchWidth['desktopLandscape'] / $sliderWidth * $sliderHeight);
148
+ }
149
+ $minimumFontSize['desktopLandscape'] = intval($slider->params->get('desktop-landscape-minimum-font-size', 4));
150
+ }
151
+
152
+ $tabletPortraitEnabled = $slider->params->get('tablet-portrait', 0);
153
+ if ($tabletPortraitEnabled) {
154
+ $tabletWidth = intval($slider->params->get('tablet-portrait-width', 800));
155
+ } else {
156
+ $tabletWidth = intval($sliderWidth * N2SmartSliderSettings::get('responsive-default-ratio-tablet-portrait', 70) / 100);
157
+ }
158
+ if ($tabletWidth > 0) {
159
+ if ($tabletWidth >= $modeSwitchWidth['desktopPortrait']) {
160
+ $tabletWidth = $modeSwitchWidth['desktopPortrait'] - 1;
161
+ }
162
+ if ($tabletWidth > 0) {
163
+ $modes['tabletPortrait'] = 1;
164
+ $modeSwitchWidth['tabletPortrait'] = $tabletWidth;
165
+ $portraitHeight = intval($slider->params->get('tablet-portrait-height'));
166
+ if ($tabletPortraitEnabled && $portraitHeight) {
167
+ $ratioModifiers['tabletPortrait'] = $portraitHeight / ($modeSwitchWidth['tabletPortrait'] / $sliderWidth * $sliderHeight);
168
+ } else {
169
+ $ratioModifiers['tabletPortrait'] = $ratioModifiers['desktopPortrait'];
170
+ }
171
+ $minimumFontSize['tabletPortrait'] = intval($slider->params->get('tablet-portrait-minimum-font-size', 4));
172
+ }
173
+ }
174
+
175
+ if ($slider->params->get('tablet-landscape', 0)) {
176
+ $tabletWidth = intval($slider->params->get('tablet-landscape-width', 1024));
177
+ if ($tabletWidth >= $modeSwitchWidth['desktopLandscape']) {
178
+ $tabletWidth = $modeSwitchWidth['desktopLandscape'] - 1;
179
+ }
180
+ if ($tabletWidth > 0) {
181
+ $modes['tabletLandscape'] = 1;
182
+ $modeSwitchWidth['tabletLandscape'] = $tabletWidth;
183
+ $landscapeHeight = intval($slider->params->get('tablet-landscape-height'));
184
+ if ($landscapeHeight) {
185
+ $ratioModifiers['tabletLandscape'] = $landscapeHeight / ($modeSwitchWidth['tabletLandscape'] / $sliderWidth * $sliderHeight);
186
+ } else {
187
+ $ratioModifiers['tabletLandscape'] = $ratioModifiers['desktopLandscape'];
188
+ }
189
+ $minimumFontSize['tabletLandscape'] = intval($slider->params->get('tablet-landscape-minimum-font-size', 4));
190
+ }
191
+ } else {
192
+ $this->tabletLandscapeScreenWidth = $this->tabletPortraitScreenWidth;
193
+ $ratioModifiers['tabletLandscape'] = $ratioModifiers['tabletPortrait'];
194
+ }
195
+
196
+ $mobilePortraitEnabled = $slider->params->get('mobile-portrait', 0);
197
+ if ($mobilePortraitEnabled) {
198
+ $mobileWidth = intval($slider->params->get('mobile-portrait-width', 440));
199
+ } else {
200
+ $mobileWidth = intval($sliderWidth * N2SmartSliderSettings::get('responsive-default-ratio-mobile-portrait', 50) / 100);
201
+ }
202
+
203
+ if ($mobileWidth > 0) {
204
+ if ($modeSwitchWidth['tabletPortrait'] > 0) {
205
+ if ($mobileWidth >= $modeSwitchWidth['tabletPortrait']) {
206
+ $mobileWidth = $modeSwitchWidth['tabletPortrait'] - 1;
207
+ }
208
+ } else {
209
+ if ($mobileWidth >= $modeSwitchWidth['desktopPortrait']) {
210
+ $mobileWidth = $modeSwitchWidth['desktopPortrait'] - 1;
211
+ }
212
+ }
213
+ if ($mobileWidth > 0) {
214
+ $modes['mobilePortrait'] = 1;
215
+ $modeSwitchWidth['mobilePortrait'] = $mobileWidth;
216
+ $portraitHeight = intval($slider->params->get('mobile-portrait-height'));
217
+ if ($mobilePortraitEnabled && $portraitHeight) {
218
+ $ratioModifiers['mobilePortrait'] = $portraitHeight / ($modeSwitchWidth['mobilePortrait'] / $sliderWidth * $sliderHeight);
219
+ } else {
220
+ $ratioModifiers['mobilePortrait'] = $ratioModifiers['tabletPortrait'];
221
+ }
222
+ $minimumFontSize['mobilePortrait'] = intval($slider->params->get('mobile-portrait-minimum-font-size', 4));
223
+ }
224
+ }
225
+
226
+ if ($slider->params->get('mobile-landscape', 0)) {
227
+ $mobileWidth = intval($slider->params->get('mobile-landscape-width', 740));
228
+ if ($modeSwitchWidth['tabletLandscape'] > 0) {
229
+ if ($mobileWidth >= $modeSwitchWidth['tabletLandscape']) {
230
+ $mobileWidth = $modeSwitchWidth['tabletLandscape'] - 1;
231
+ }
232
+ } else {
233
+ if ($mobileWidth >= $modeSwitchWidth['desktopLandscape']) {
234
+ $mobileWidth = $modeSwitchWidth['desktopLandscape'] - 1;
235
+ }
236
+ }
237
+ if ($mobileWidth > 0) {
238
+ $modes['mobileLandscape'] = 1;
239
+ $modeSwitchWidth['mobileLandscape'] = $mobileWidth;
240
+ $landscapeHeight = intval($slider->params->get('mobile-landscape-height'));
241
+ if ($landscapeHeight) {
242
+ $ratioModifiers['mobileLandscape'] = $landscapeHeight / ($modeSwitchWidth['mobileLandscape'] / $sliderWidth * $sliderHeight);
243
+ } else {
244
+ $ratioModifiers['mobileLandscape'] = $ratioModifiers['tabletLandscape'];
245
+ }
246
+ $minimumFontSize['mobileLandscape'] = intval($slider->params->get('mobile-landscape-minimum-font-size', 4));
247
+ }
248
+ } else {
249
+ $this->mobileLandscapeScreenWidth = $this->mobilePortraitScreenWidth;
250
+ $ratioModifiers['mobileLandscape'] = $ratioModifiers['mobilePortrait'];
251
+ }
252
+ $this->modes = $modes;
253
+ $this->sliderWidthToDevice = $modeSwitchWidth;
254
+ $this->sliderRatioToDevice = array(
255
+ 'Portrait' => array(
256
+ 'tablet' => $modeSwitchWidth['tabletPortrait'] / $modeSwitchWidth['desktopPortrait'],
257
+ 'mobile' => $modeSwitchWidth['mobilePortrait'] / $modeSwitchWidth['desktopPortrait']
258
+ ),
259
+ 'Landscape' => array(
260
+ 'tablet' => $modeSwitchWidth['tabletLandscape'] / $modeSwitchWidth['desktopPortrait'],
261
+ 'mobile' => $modeSwitchWidth['mobileLandscape'] / $modeSwitchWidth['desktopPortrait']
262
+ )
263
+ );
264
+ $this->minimumFontSizes = $minimumFontSize;
265
+ $this->verticalRatioModifiers = $ratioModifiers;
266
+
267
+ }
268
+
269
+ public function makeJavaScriptProperties(&$properties) {
270
+ $normalizedDeviceModes = array(
271
+ 'unknownUnknown' => array(
272
+ 'unknown',
273
+ 'Unknown'
274
+ ),
275
+ 'desktopPortrait' => array(
276
+ 'desktop',
277
+ 'Portrait'
278
+ )
279
+ );
280
+ if ($this->orientationMode == 'width') {
281
+ if (!$this->modes['desktopLandscape']) {
282
+ $normalizedDeviceModes['desktopLandscape'] = $normalizedDeviceModes['desktopPortrait'];
283
+ } else {
284
+ $normalizedDeviceModes['desktopLandscape'] = array(
285
+ 'desktop',
286
+ 'Landscape'
287
+ );
288
+ }
289
+ if (!$this->modes['tabletLandscape']) {
290
+ $normalizedDeviceModes['tabletLandscape'] = $normalizedDeviceModes['desktopPortrait'];
291
+
292
+ } else {
293
+ $normalizedDeviceModes['tabletLandscape'] = array(
294
+ 'tablet',
295
+ 'Landscape'
296
+ );
297
+ }
298
+ if (!$this->modes['tabletPortrait']) {
299
+ $normalizedDeviceModes['tabletPortrait'] = $normalizedDeviceModes['tabletLandscape'];
300
+ } else {
301
+ $normalizedDeviceModes['tabletPortrait'] = array(
302
+ 'tablet',
303
+ 'Portrait'
304
+ );
305
+ }
306
+ if (!$this->modes['mobileLandscape']) {
307
+ $normalizedDeviceModes['mobileLandscape'] = $normalizedDeviceModes['tabletPortrait'];
308
+ } else {
309
+ $normalizedDeviceModes['mobileLandscape'] = array(
310
+ 'mobile',
311
+ 'Landscape'
312
+ );
313
+ }
314
+ if (!$this->modes['mobilePortrait']) {
315
+ $normalizedDeviceModes['mobilePortrait'] = $normalizedDeviceModes['mobileLandscape'];
316
+ } else {
317
+ $normalizedDeviceModes['mobilePortrait'] = array(
318
+ 'mobile',
319
+ 'Portrait'
320
+ );
321
+ }
322
+ } else {
323
+ if (!$this->modes['desktopLandscape']) {
324
+ $normalizedDeviceModes['desktopLandscape'] = $normalizedDeviceModes['desktopPortrait'];
325
+ } else {
326
+ $normalizedDeviceModes['desktopLandscape'] = array(
327
+ 'desktop',
328
+ 'Landscape'
329
+ );
330
+ }
331
+ if (!$this->modes['tabletPortrait']) {
332
+ $normalizedDeviceModes['tabletPortrait'] = $normalizedDeviceModes['desktopPortrait'];
333
+ } else {
334
+ $normalizedDeviceModes['tabletPortrait'] = array(
335
+ 'tablet',
336
+ 'Portrait'
337
+ );
338
+ }
339
+ if (!$this->modes['tabletLandscape']) {
340
+ if ($normalizedDeviceModes['desktopLandscape'][1] == 'Landscape') {
341
+ $normalizedDeviceModes['tabletLandscape'] = $normalizedDeviceModes['desktopLandscape'];
342
+ } else {
343
+ $normalizedDeviceModes['tabletLandscape'] = $normalizedDeviceModes['tabletPortrait'];
344
+ }
345
+ } else {
346
+ $normalizedDeviceModes['tabletLandscape'] = array(
347
+ 'tablet',
348
+ 'Landscape'
349
+ );
350
+ }
351
+ if (!$this->modes['mobilePortrait']) {
352
+ $normalizedDeviceModes['mobilePortrait'] = $normalizedDeviceModes['tabletPortrait'];
353
+ } else {
354
+ $normalizedDeviceModes['mobilePortrait'] = array(
355
+ 'mobile',
356
+ 'Portrait'
357
+ );
358
+ }
359
+ if (!$this->modes['mobileLandscape']) {
360
+ if ($normalizedDeviceModes['tabletLandscape'][1] == 'Landscape') {
361
+ $normalizedDeviceModes['mobileLandscape'] = $normalizedDeviceModes['tabletLandscape'];
362
+ } else {
363
+ $normalizedDeviceModes['mobileLandscape'] = $normalizedDeviceModes['mobilePortrait'];
364
+ }
365
+ } else {
366
+ $normalizedDeviceModes['mobileLandscape'] = array(
367
+ 'mobile',
368
+ 'Landscape'
369
+ );
370
+ }
371
+ }
372
+
373
+ if ($this->maximumSlideWidthLandscape <= 0) {
374
+ $this->maximumSlideWidthLandscape = $this->maximumSlideWidth;
375
+ }
376
+
377
+ if ($this->maximumSlideWidthTablet <= 0) {
378
+ $this->maximumSlideWidthTablet = $this->maximumSlideWidth;
379
+ }
380
+
381
+ if ($this->maximumSlideWidthTabletLandscape <= 0) {
382
+ $this->maximumSlideWidthTabletLandscape = $this->maximumSlideWidthTablet;
383
+ }
384
+
385
+ if ($this->maximumSlideWidthMobile <= 0) {
386
+ $this->maximumSlideWidthMobile = $this->maximumSlideWidth;
387
+ }
388
+
389
+ if ($this->maximumSlideWidthMobileLandscape <= 0) {
390
+ $this->maximumSlideWidthMobileLandscape = $this->maximumSlideWidthMobile;
391
+ }
392
+
393
+
394
+ $properties['responsive'] = array(
395
+ 'desktop' => N2Platform::$isAdmin ? 1 : $this->desktop,
396
+ 'tablet' => $this->tablet,
397
+ 'mobile' => $this->mobile,
398
+
399
+ 'onResizeEnabled' => $this->onResizeEnabled,
400
+ 'type' => $this->type,
401
+ 'downscale' => $this->scaleDown,
402
+ 'upscale' => $this->scaleUp,
403
+ 'minimumHeight' => $this->minimumHeight,
404
+ 'maximumHeight' => $this->maximumHeight,
405
+ 'maximumSlideWidth' => $this->maximumSlideWidth,
406
+ 'maximumSlideWidthLandscape' => $this->maximumSlideWidthLandscape,
407
+ 'maximumSlideWidthTablet' => $this->maximumSlideWidthTablet,
408
+ 'maximumSlideWidthTabletLandscape' => $this->maximumSlideWidthTabletLandscape,
409
+ 'maximumSlideWidthMobile' => $this->maximumSlideWidthMobile,
410
+ 'maximumSlideWidthMobileLandscape' => $this->maximumSlideWidthMobileLandscape,
411
+ 'maximumSlideWidthConstrainHeight' => intval($this->maximumSlideWidthConstrainHeight),
412
+ 'forceFull' => $this->forceFull,
413
+ 'constrainRatio' => $this->constrainRatio,
414
+ 'verticalOffsetSelectors' => $this->verticalOffsetSelectors,
415
+
416
+ 'focusUser' => $this->focusUser,
417
+ 'focusAutoplay' => $this->focusAutoplay,
418
+
419
+ 'deviceModes' => $this->modes,
420
+ 'normalizedDeviceModes' => $normalizedDeviceModes,
421
+ 'verticalRatioModifiers' => $this->verticalRatioModifiers,
422
+ 'minimumFontSizes' => $this->minimumFontSizes,
423
+ 'ratioToDevice' => $this->sliderRatioToDevice,
424
+ 'sliderWidthToDevice' => $this->sliderWidthToDevice,
425
+
426
+ 'basedOn' => $this->basedOn,
427
+ 'tabletPortraitScreenWidth' => $this->tabletPortraitScreenWidth,
428
+ 'mobilePortraitScreenWidth' => $this->mobilePortraitScreenWidth,
429
+ 'tabletLandscapeScreenWidth' => $this->tabletLandscapeScreenWidth,
430
+ 'mobileLandscapeScreenWidth' => $this->mobileLandscapeScreenWidth,
431
+ 'orientationMode' => $this->orientationMode,
432
+
433
+ 'scrollFix' => intval($this->slider->params->get('scroll-fix', 0)),
434
+ 'overflowHiddenPage' => intval($this->slider->params->get('overflow-hidden-page', 0))
435
+ );
436
+ }
437
+
438
+ public function getMinimumFontSizeAttributes() {
439
+ $return = array();
440
+ foreach ($this->minimumFontSizes AS $k => $v) {
441
+ $return['data-minFontSize' . $k] = $v;
442
+ }
443
+ return $return;
444
+ }
445
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/slidebackground.php ADDED
@@ -0,0 +1,284 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureSlideBackground {
4
+
5
+ private $slider;
6
+
7
+ public function __construct($slider) {
8
+
9
+ $this->slider = $slider;
10
+ }
11
+
12
+ /**
13
+ * @param $slide N2SmartSliderSlide
14
+ *
15
+ * @return string
16
+ */
17
+ public function make($slide) {
18
+
19
+ $dynamicHeight = intval($this->slider->params->get('dynamic-height', 0));
20
+
21
+ $backgroundImageOpacity = min(100, max(0, $slide->parameters->get('backgroundImageOpacity', 100))) / 100;
22
+
23
+ if ($slide->hasGenerator()) {
24
+
25
+ $rawBackgroundImage = $slide->parameters->get('backgroundImage', '');
26
+ $backgroundImage = $slide->fill($rawBackgroundImage);
27
+
28
+ $imageData = N2ImageManager::getImageData($rawBackgroundImage);
29
+
30
+ $imageData['desktop-retina']['image'] = $slide->fill($imageData['desktop-retina']['image']);
31
+ $imageData['tablet']['image'] = $slide->fill($imageData['tablet']['image']);
32
+ $imageData['tablet-retina']['image'] = $slide->fill($imageData['tablet-retina']['image']);
33
+ $imageData['mobile']['image'] = $slide->fill($imageData['mobile']['image']);
34
+ $imageData['mobile-retina']['image'] = $slide->fill($imageData['mobile-retina']['image']);
35
+ } else {
36
+ $backgroundImage = $slide->fill($slide->parameters->get('backgroundImage', ''));
37
+
38
+ $imageData = N2ImageManager::getImageData($backgroundImage);
39
+ }
40
+ $sizes = $this->slider->assets->sizes;
41
+
42
+ $backgroundColor = '';
43
+ $color = $slide->parameters->get('backgroundColor', '');
44
+ if (strlen($color) == 8 && substr($color, 6, 2) != '00') {
45
+ $backgroundColor = 'background-color: #' . substr($color, 0, 6) . ';';
46
+
47
+ if (!class_exists('N2Color')) {
48
+ N2Loader::import("libraries.image.color");
49
+ }
50
+
51
+ $rgba = N2Color::hex2rgba($color);
52
+ $rgba[3] = round($rgba[3] / 127, 2);
53
+ $backgroundColor .= "background-color: RGBA({$rgba[0]}, {$rgba[1]}, {$rgba[2]}, {$rgba[3]});";
54
+ }
55
+ $x = max(0, min(100, $slide->parameters->get('backgroundFocusX', 50)));
56
+ $y = max(0, min(100, $slide->parameters->get('backgroundFocusY', 50)));
57
+
58
+ if (empty($backgroundImage)) {
59
+ $src = N2Image::base64Transparent();
60
+ } else {
61
+ $src = N2ImageHelper::dynamic($this->slider->features->optimize->optimizeBackground($backgroundImage, $x, $y));
62
+ }
63
+
64
+
65
+ $alt = $slide->fill($slide->parameters->get('backgroundAlt', ''));
66
+ $title = $slide->fill($slide->parameters->get('backgroundTitle', ''));
67
+ $fillMode = $slide->parameters->get('backgroundMode', 'default');
68
+ if ($fillMode == 'default') {
69
+ $fillMode = $this->slider->params->get('backgroundMode', 'fill');
70
+ }
71
+
72
+ if ($dynamicHeight) {
73
+ return $this->simple($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $title, $sizes, $x, $y);
74
+ }
75
+ switch ($fillMode) {
76
+ case 'fit':
77
+ return $this->fit($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $title, $sizes, $x, $y);
78
+ case 'stretch':
79
+ return $this->stretch($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $title, $x, $y);
80
+ case 'center':
81
+ return $this->center($backgroundColor, $backgroundImageOpacity, $src, $imageData, $x, $y);
82
+ case 'tile':
83
+ return $this->tile($backgroundColor, $backgroundImageOpacity, $src, $imageData, $x, $y);
84
+ }
85
+
86
+ return $this->fill($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $title, $sizes, $x, $y);
87
+ }
88
+
89
+ private function getSize($image, $imageData) {
90
+ $size = N2Parse::parse($imageData['desktop']['size']);
91
+ if ($size[0] > 0 && $size[1] > 0) {
92
+ return $size;
93
+ } else {
94
+ list($width, $height) = @getimagesize($image);
95
+ if ($width != null && $height != null) {
96
+ $imageData['desktop']['size'] = $width . '|*|' . $height;
97
+ N2ImageManager::setImageData($image, $imageData);
98
+ return array(
99
+ $width,
100
+ $height
101
+ );
102
+ }
103
+ }
104
+ return null;
105
+ }
106
+
107
+ private function getDeviceAttributes($image, $imageData) {
108
+ $attributes = array();
109
+ $attributes['data-hash'] = md5($image);
110
+ $attributes['data-desktop'] = N2ImageHelper::fixed($image);
111
+
112
+ if ($imageData['desktop-retina']['image'] == '' && $imageData['tablet']['image'] == '' && $imageData['tablet-retina']['image'] == '' && $imageData['mobile']['image'] == '' && $imageData['mobile-retina']['image'] == '') {
113
+
114
+ } else {
115
+ if ($imageData['desktop-retina']['image'] != '') {
116
+ $attributes['data-desktop-retina'] = N2ImageHelper::fixed($imageData['desktop-retina']['image']);
117
+ }
118
+ if ($imageData['tablet']['image'] != '') {
119
+ $attributes['data-tablet'] = N2ImageHelper::fixed($imageData['tablet']['image']);
120
+ }
121
+ if ($imageData['tablet-retina']['image'] != '') {
122
+ $attributes['data-tablet-retina'] = N2ImageHelper::fixed($imageData['tablet-retina']['image']);
123
+ }
124
+ if ($imageData['mobile']['image'] != '') {
125
+ $attributes['data-mobile'] = N2ImageHelper::fixed($imageData['mobile']['image']);
126
+ }
127
+ if ($imageData['mobile-retina']['image'] != '') {
128
+ $attributes['data-mobile-retina'] = N2ImageHelper::fixed($imageData['mobile-retina']['image']);
129
+ }
130
+
131
+ //We have to force the fade on load enabled to make sure the user get great result.
132
+ $this->slider->features->fadeOnLoad->forceFadeOnLoad();
133
+ }
134
+ return $attributes;
135
+ }
136
+
137
+ private function getDefaultImage($src, $deviceAttributes) {
138
+ if (count($deviceAttributes) > 2 || $this->slider->features->lazyLoad->isEnabled > 0) {
139
+ return N2Image::base64Transparent();
140
+ } else {
141
+ return N2ImageHelper::fixed($src);
142
+ }
143
+ }
144
+
145
+ private function fill($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $title, $sizes, $x, $y) {
146
+
147
+ $outerRatio = $sizes['canvasWidth'] / $sizes['canvasHeight'];
148
+
149
+ list($width, $height) = $this->getSize($src, $imageData);
150
+ if (!$width || !$height) {
151
+ $style = '';
152
+ } else {
153
+ $ratio = $width / $height;
154
+
155
+ if ($outerRatio > $ratio) {
156
+ $style = 'width: 100%;height: auto;';
157
+ $height = ($sizes['canvasHeight'] - $sizes['canvasWidth'] / $width * $height) / 2;
158
+ $style .= 'margin-top: ' . $height . 'px;';
159
+ } else {
160
+ $style = 'width: auto;height: 100%;';
161
+ $width = ($sizes['canvasWidth'] - $sizes['canvasHeight'] / $height * $width) / 2;
162
+ $style .= 'margin-left: ' . $width . 'px;';
163
+ }
164
+ }
165
+
166
+ $deviceAttributes = $this->getDeviceAttributes($src, $imageData);
167
+
168
+ return N2Html::tag('div', $deviceAttributes + array(
169
+ "style" => $backgroundColor,
170
+ "class" => "n2-ss-slide-background",
171
+ "data-opacity" => $backgroundImageOpacity
172
+ ), N2Html::image($this->getDefaultImage($src, $deviceAttributes), $alt, array(
173
+ "title" => $title,
174
+ "style" => $style . 'opacity:' . $backgroundImageOpacity . ';',
175
+ "class" => "n2-ss-slide-background-image n2-ss-slide-fill n2-ow",
176
+ "data-x" => $x,
177
+ "data-y" => $y
178
+ )));
179
+ }
180
+
181
+ private function simple($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $title, $sizes, $x, $y) {
182
+
183
+ $style = 'width: 100%;height: auto;';
184
+
185
+
186
+ $deviceAttributes = $this->getDeviceAttributes($src, $imageData);
187
+ return N2Html::tag('div', $deviceAttributes + array(
188
+ "style" => $backgroundColor,
189
+ "class" => "n2-ss-slide-background",
190
+ "data-opacity" => $backgroundImageOpacity
191
+ ), N2Html::image($this->getDefaultImage($src, $deviceAttributes), $alt, array(
192
+ "title" => $title,
193
+ "style" => $style . 'opacity:' . $backgroundImageOpacity . ';',
194
+ "class" => "n2-ss-slide-background-image n2-ss-slide-simple n2-ow",
195
+ "data-x" => $x,
196
+ "data-y" => $y
197
+ )));
198
+ }
199
+
200
+ private function fit($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $title, $sizes, $x, $y) {
201
+
202
+ $outerRatio = $sizes['canvasWidth'] / $sizes['canvasHeight'];
203
+
204
+ list($width, $height) = $this->getSize($src, $imageData);
205
+ if (!$width || !$height) {
206
+ $style = '';
207
+ } else {
208
+ $ratio = $width / $height;
209
+ if ($outerRatio < $ratio) {
210
+ $style = 'width: 100%;height: auto;';
211
+ $height = ($sizes['canvasHeight'] - $sizes['canvasWidth'] / $width * $height) / 2;
212
+ $style .= 'margin-top: ' . $height . 'px;';
213
+ } else {
214
+ $style = 'width: auto;height: 100%;';
215
+ $width = ($sizes['canvasWidth'] - $sizes['canvasHeight'] / $height * $width) / 2;
216
+ $style .= 'margin-left: ' . $width . 'px;';
217
+ }
218
+ }
219
+
220
+ $deviceAttributes = $this->getDeviceAttributes($src, $imageData);
221
+ return N2Html::tag('div', $deviceAttributes + array(
222
+ "style" => $backgroundColor,
223
+ "class" => "n2-ss-slide-background",
224
+ "data-opacity" => $backgroundImageOpacity
225
+ ), N2Html::image($this->getDefaultImage($src, $deviceAttributes), $alt, array(
226
+ "title" => $title,
227
+ "style" => $style . 'opacity:' . $backgroundImageOpacity . ';',
228
+ "class" => "n2-ss-slide-background-image n2-ss-slide-fit n2-ow",
229
+ "data-x" => $x,
230
+ "data-y" => $y
231
+ )));
232
+ }
233
+
234
+ private function stretch($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $title, $x, $y) {
235
+ $deviceAttributes = $this->getDeviceAttributes($src, $imageData);
236
+ return N2Html::tag('div', $deviceAttributes + array(
237
+ "style" => $backgroundColor,
238
+ "class" => "n2-ss-slide-background",
239
+ "data-opacity" => $backgroundImageOpacity
240
+ ), N2Html::image($this->getDefaultImage($src, $deviceAttributes), $alt, array(
241
+ "title" => $title,
242
+ "style" => 'opacity:' . $backgroundImageOpacity . ';',
243
+ "class" => "n2-ss-slide-background-image n2-ss-slide-stretch n2-ow",
244
+ "data-x" => $x,
245
+ "data-y" => $y
246
+ )));
247
+ }
248
+
249
+ private function center($backgroundColor, $backgroundImageOpacity, $src, $imageData, $x, $y) {
250
+ $deviceAttributes = $this->getDeviceAttributes($src, $imageData);
251
+ return N2Html::tag('div', $deviceAttributes + array(
252
+ "style" => $backgroundColor,
253
+ "class" => "n2-ss-slide-background",
254
+ "data-opacity" => $backgroundImageOpacity
255
+ ), N2Html::tag('div', array(
256
+ "class" => "n2-ss-slide-background-image n2-ss-slide-center",
257
+ "style" => "background-image: url(" . $this->getDefaultImage($src, $deviceAttributes) . ");" . 'opacity:' . $backgroundImageOpacity . ';background-position: ' . $x . '% ' . $y . '%;'
258
+ )));
259
+ }
260
+
261
+ private function tile($backgroundColor, $backgroundImageOpacity, $src, $imageData, $x, $y) {
262
+ $deviceAttributes = $this->getDeviceAttributes($src, $imageData);
263
+ return N2Html::tag('div', $deviceAttributes + array(
264
+ "style" => $backgroundColor,
265
+ "class" => "n2-ss-slide-background",
266
+ "data-opacity" => $backgroundImageOpacity
267
+ ), N2Html::tag('div', array(
268
+ "class" => "n2-ss-slide-background-image n2-ss-slide-tile",
269
+ "style" => "background-image: url(" . $this->getDefaultImage($src, $deviceAttributes) . ");" . 'opacity:' . $backgroundImageOpacity . ';background-position: ' . $x . '% ' . $y . '%;'
270
+ )));
271
+ }
272
+
273
+ private function fixed($backgroundColor, $backgroundImageOpacity, $src, $imageData, $x, $y) {
274
+ $deviceAttributes = $this->getDeviceAttributes($src, $imageData);
275
+ return N2Html::tag('div', $deviceAttributes + array(
276
+ "style" => $backgroundColor,
277
+ "class" => "n2-ss-slide-background",
278
+ "data-opacity" => $backgroundImageOpacity
279
+ ), N2Html::tag('div', array(
280
+ "class" => "n2-ss-slide-background-image n2-ss-slide-fixed",
281
+ "style" => "background-image: url(" . $this->getDefaultImage($src, $deviceAttributes) . ");" . 'opacity:' . $backgroundImageOpacity . ';background-position: ' . $x . '% ' . $y . '%;'
282
+ )));
283
+ }
284
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/spinner.php ADDED
@@ -0,0 +1,371 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureSpinner {
4
+
5
+ private $slider;
6
+
7
+ private static $spinners = array(
8
+ '-1' => '',
9
+ '0' => '',
10
+ 'rectangleDark' => array(
11
+ '<div><div class="n2-ss-spinner-rectangle-dark-container"><div class="n2-ss-spinner-rectangle-dark"><div class="n2-ss-spinner-rectangle-1"></div><div class="n2-ss-spinner-rectangle-2"></div><div class="n2-ss-spinner-rectangle-3"></div><div class="n2-ss-spinner-rectangle-4"></div></div></div></div>',
12
+ '.n2-ss-spinner-rectangle-dark-container {
13
+ position: absolute;
14
+ top: 50%;
15
+ left: 50%;
16
+ margin: -20px -30px;
17
+ background: RGBA(0,0,0,0.8);
18
+ width: 50px;
19
+ height: 30px;
20
+ padding: 5px;
21
+ border-radius: 3px;
22
+ z-index: 1000;
23
+ }
24
+ .n2-ss-spinner-rectangle-dark {
25
+ width:100%;
26
+ height: 100%;
27
+ outline: 1px solid RGBA(0,0,0,0);
28
+ text-align: center;
29
+ font-size: 10px;
30
+ }
31
+
32
+ .n2-ss-spinner-rectangle-dark > div {
33
+ background-color: #fff;
34
+ margin: 0 1px;
35
+ height: 100%;
36
+ width: 6px;
37
+ display: inline-block;
38
+ -webkit-animation: n2RectangleDark 1.2s infinite ease-in-out;
39
+ animation: n2RectangleDark 1.2s infinite ease-in-out;
40
+ }
41
+ div.n2-ss-spinner-rectangle-2 {
42
+ -webkit-animation-delay: -1.1s;
43
+ animation-delay: -1.1s;
44
+ }
45
+ div.n2-ss-spinner-rectangle-3 {
46
+ -webkit-animation-delay: -1.0s;
47
+ animation-delay: -1.0s;
48
+ }
49
+ div.n2-ss-spinner-rectangle-4 {
50
+ -webkit-animation-delay: -0.9s;
51
+ animation-delay: -0.9s;
52
+ }
53
+
54
+ @-webkit-keyframes n2RectangleDark {
55
+ 0%, 40%, 100% { -webkit-transform: scaleY(0.4) }
56
+ 20% { -webkit-transform: scaleY(1.0) }
57
+ }
58
+
59
+ @keyframes n2RectangleDark {
60
+ 0%, 40%, 100% {
61
+ transform: scaleY(0.4);
62
+ -webkit-transform: scaleY(0.4);
63
+ } 20% {
64
+ transform: scaleY(1.0);
65
+ -webkit-transform: scaleY(1.0);
66
+ }
67
+ }'
68
+ ),
69
+ 'simpleDark' => array(
70
+ '<div><div class="n2-ss-spinner-simple-dark-container"><div class="n2-ss-spinner-simple-dark"></div></div></div>',
71
+ '.n2-ss-spinner-simple-dark-container {
72
+ position: absolute;
73
+ top: 50%;
74
+ left: 50%;
75
+ margin: -20px;
76
+ background: RGBA(0,0,0,0.8);
77
+ width: 20px;
78
+ height: 20px;
79
+ padding: 10px;
80
+ border-radius: 50%;
81
+ z-index: 1000;
82
+ }
83
+
84
+ .n2-ss-spinner-simple-dark {
85
+ outline: 1px solid RGBA(0,0,0,0);
86
+ width:100%;
87
+ height: 100%;
88
+ }
89
+
90
+ .n2-ss-spinner-simple-dark:before {
91
+ position: absolute;
92
+ top: 50%;
93
+ left: 50%;
94
+ width: 20px;
95
+ height: 20px;
96
+ margin-top: -11px;
97
+ margin-left: -11px;
98
+ }
99
+
100
+ .n2-ss-spinner-simple-dark:not(:required):before {
101
+ content: \'\';
102
+ border-radius: 50%;
103
+ border-top: 2px solid #fff;
104
+ border-right: 2px solid transparent;
105
+ animation: n2SimpleDark .6s linear infinite;
106
+ -webkit-animation: n2SimpleDark .6s linear infinite;
107
+ }
108
+ @keyframes n2SimpleDark {
109
+ to {transform: rotate(360deg);}
110
+ }
111
+
112
+ @-webkit-keyframes n2SimpleDark {
113
+ to {-webkit-transform: rotate(360deg);}
114
+ }'
115
+ ),
116
+ 'simpleDarkCounter' => array(
117
+ '<div><div class="n2-ss-spinner-simple-dark-counter-container"><div class="n2-ss-spinner-simple-dark-counter n2-ss-spinner-counter"></div></div></div>',
118
+ '.n2-ss-spinner-simple-dark-counter-container {
119
+ position: absolute;
120
+ top: 50%;
121
+ left: 50%;
122
+ margin: -27px;
123
+ background: RGBA(0,0,0,0.8);
124
+ width: 34px;
125
+ height: 34px;
126
+ padding: 10px;
127
+ border-radius: 50%;
128
+ z-index: 1000;
129
+ -moz-box-sizing: initial;
130
+ box-sizing: initial;
131
+ }
132
+
133
+ .n2-ss-spinner-simple-dark-counter {
134
+ outline: 1px solid RGBA(0,0,0,0);
135
+ width: 100%;
136
+ height: 100%;
137
+ color: #fff;
138
+ line-height: 34px;
139
+ text-align: center;
140
+ font-size: 12px;
141
+ }
142
+
143
+ .n2-ss-spinner-simple-dark-counter:before {
144
+ position: absolute;
145
+ top: 50%;
146
+ left: 50%;
147
+ width: 41px;
148
+ height: 41px;
149
+ margin-top: -23px;
150
+ margin-left: -23px;
151
+ }
152
+
153
+ .n2-ss-spinner-simple-dark-counter:not(:required):before {
154
+ content: \'\';
155
+ border-radius: 50%;
156
+ border-top: 2px solid #fff;
157
+ border-right: 2px solid transparent;
158
+ animation: n2SimpleDarkCounter .6s linear infinite;
159
+ -webkit-animation: n2SimpleDarkCounter .6s linear infinite;
160
+ }
161
+ @keyframes n2SimpleDarkCounter {
162
+ to {transform: rotate(360deg);}
163
+ }
164
+
165
+ @-webkit-keyframes n2SimpleDarkCounter {
166
+ to {-webkit-transform: rotate(360deg);}
167
+ }'
168
+ ),
169
+ 'simpleWhite' => array(
170
+ '<div><div class="n2-ss-spinner-simple-white-container"><div class="n2-ss-spinner-simple-white"></div></div></div>',
171
+ '.n2-ss-spinner-simple-white-container {
172
+ position: absolute;
173
+ top: 50%;
174
+ left: 50%;
175
+ margin: -20px;
176
+ background: #fff;
177
+ width: 20px;
178
+ height: 20px;
179
+ padding: 10px;
180
+ border-radius: 50%;
181
+ z-index: 1000;
182
+ }
183
+
184
+ .n2-ss-spinner-simple-white {
185
+ outline: 1px solid RGBA(0,0,0,0);
186
+ width:100%;
187
+ height: 100%;
188
+ }
189
+
190
+ .n2-ss-spinner-simple-white:before {
191
+ position: absolute;
192
+ top: 50%;
193
+ left: 50%;
194
+ width: 20px;
195
+ height: 20px;
196
+ margin-top: -11px;
197
+ margin-left: -11px;
198
+ }
199
+
200
+ .n2-ss-spinner-simple-white:not(:required):before {
201
+ content: \'\';
202
+ border-radius: 50%;
203
+ border-top: 2px solid #333;
204
+ border-right: 2px solid transparent;
205
+ animation: n2SimpleWhite .6s linear infinite;
206
+ -webkit-animation: n2SimpleWhite .6s linear infinite;
207
+ }
208
+ @keyframes n2SimpleWhite {
209
+ to {transform: rotate(360deg);}
210
+ }
211
+
212
+ @-webkit-keyframes n2SimpleWhite {
213
+ to {-webkit-transform: rotate(360deg);}
214
+ }'
215
+ ),
216
+ 'simpleWhiteCounter' => array(
217
+ '<div><div class="n2-ss-spinner-simple-white-counter-container"><div class="n2-ss-spinner-simple-white-counter n2-ss-spinner-counter"></div></div></div>',
218
+ '.n2-ss-spinner-simple-white-counter-container {
219
+ position: absolute;
220
+ top: 50%;
221
+ left: 50%;
222
+ margin: -27px;
223
+ background: #fff;
224
+ width: 34px;
225
+ height: 34px;
226
+ padding: 10px;
227
+ border-radius: 50%;
228
+ z-index: 1000;
229
+ -moz-box-sizing: initial;
230
+ box-sizing: initial;
231
+ }
232
+
233
+ .n2-ss-spinner-simple-white-counter {
234
+ outline: 1px solid RGBA(0,0,0,0);
235
+ width:100%;
236
+ height: 100%;
237
+ color: #000;
238
+ line-height: 34px;
239
+ text-align: center;
240
+ font-size: 12px;
241
+ }
242
+
243
+ .n2-ss-spinner-simple-white-counter:before {
244
+ position: absolute;
245
+ top: 50%;
246
+ left: 50%;
247
+ width: 41px;
248
+ height: 41px;
249
+ margin-top: -23px;
250
+ margin-left: -23px;
251
+ }
252
+
253
+ .n2-ss-spinner-simple-white-counter:not(:required):before {
254
+ content: \'\';
255
+ border-radius: 50%;
256
+ border-top: 2px solid #333;
257
+ border-right: 2px solid transparent;
258
+ animation: n2SimpleWhiteCounter .6s linear infinite;
259
+ -webkit-animation: n2SimpleWhiteCounter .6s linear infinite;
260
+ }
261
+ @keyframes n2SimpleWhiteCounter {
262
+ to {transform: rotate(360deg);}
263
+ }
264
+
265
+ @-webkit-keyframes n2SimpleWhiteCounter {
266
+ to {-webkit-transform: rotate(360deg);}
267
+ }'
268
+ ),
269
+ 'infiniteDark' => array(
270
+ '<div><div class="n2-ss-spinner-infinite-dark-container"><div class="n2-ss-spinner-infinite-dark"></div></div></div>',
271
+ '.n2-ss-spinner-infinite-dark-container {
272
+ position: absolute;
273
+ top: 50%;
274
+ left: 50%;
275
+ margin: -15px;
276
+ background: RGBA(0,0,0,0.8);
277
+ width: 20px;
278
+ height: 20px;
279
+ padding: 5px;
280
+ border-radius: 50%;
281
+ z-index: 1000;
282
+ }
283
+ .n2-ss-spinner-infinite-dark {
284
+ outline: 1px solid RGBA(0,0,0,0);
285
+ width:100%;
286
+ height: 100%;
287
+ }
288
+ .n2-ss-spinner-infinite-dark:before {
289
+ position: absolute;
290
+ top: 50%;
291
+ left: 50%;
292
+ width: 16px;
293
+ height: 16px;
294
+ margin-top: -10px;
295
+ margin-left: -10px;
296
+ }
297
+ .n2-ss-spinner-infinite-dark:not(:required):before {
298
+ content: \'\';
299
+ border-radius: 50%;
300
+ border: 2px solid rgba(255, 255, 255, .3);
301
+ border-top-color: #fff;
302
+ animation: n2InfiniteDark .6s linear infinite;
303
+ -webkit-animation: n2InfiniteDark .6s linear infinite;
304
+ }
305
+ @keyframes n2InfiniteDark {
306
+ to {transform: rotate(360deg);}
307
+ }
308
+ @-webkit-keyframes n2InfiniteDark {
309
+ to {-webkit-transform: rotate(360deg);}
310
+ }'
311
+ ),
312
+ 'infiniteWhite' => array(
313
+ '<div><div class="n2-ss-spinner-infinite-white-container"><div class="n2-ss-spinner-infinite-white"></div></div></div>',
314
+ '.n2-ss-spinner-infinite-white-container {
315
+ position: absolute;
316
+ top: 50%;
317
+ left: 50%;
318
+ margin: -10px;
319
+ background: #fff;
320
+ width: 20px;
321
+ height: 20px;
322
+ padding: 5px;
323
+ border-radius: 50%;
324
+ z-index: 1000;
325
+ }
326
+ .n2-ss-spinner-infinite-white {
327
+ outline: 1px solid RGBA(0,0,0,0);
328
+ width:100%;
329
+ height: 100%;
330
+ }
331
+ .n2-ss-spinner-infinite-white:before {
332
+ position: absolute;
333
+ top: 50%;
334
+ left: 50%;
335
+ width: 16px;
336
+ height: 16px;
337
+ margin-top: -10px;
338
+ margin-left: -10px;
339
+ }
340
+ .n2-ss-spinner-infinite-white:not(:required):before {
341
+ content: \'\';
342
+ border-radius: 50%;
343
+ border: 2px solid rgba(0, 0, 0, .3);
344
+ border-top-color: rgba(0, 0, 0, .6);
345
+ animation: n2InfiniteWhite .6s linear infinite;
346
+ -webkit-animation: n2InfiniteWhite .6s linear infinite;
347
+ }
348
+ @keyframes n2InfiniteWhite {
349
+ to {transform: rotate(360deg);}
350
+ }
351
+ @-webkit-keyframes n2InfiniteWhite {
352
+ to {-webkit-transform: rotate(360deg);}
353
+ }'
354
+ )
355
+ );
356
+
357
+ public function __construct($slider) {
358
+
359
+ $this->slider = $slider;
360
+ }
361
+
362
+ public function renderSlider($slider, $sliderHTML) {
363
+
364
+ if (isset(self::$spinners[$this->slider->params->get('spinner', 'simpleWhite')]) && !empty(self::$spinners[$this->slider->params->get('spinner', 'simpleWhite')])) {
365
+ N2CSS::addInline(self::$spinners[$this->slider->params->get('spinner', 'simpleWhite')][1]);
366
+ return $sliderHTML . '<div id="' . $slider->elementId . '-spinner">' . self::$spinners[$this->slider->params->get('spinner', 'simpleWhite')][0] . '</div>';
367
+ }
368
+
369
+ return $sliderHTML;
370
+ }
371
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/translateUrl.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureTranslateUrl
4
+ {
5
+
6
+ private $slider;
7
+
8
+ public $from = '';
9
+
10
+ public $to = '';
11
+
12
+ public function __construct($slider) {
13
+
14
+ $this->slider = $slider;
15
+ list($this->from, $this->to) = (array)N2Parse::parse(N2SmartSliderSettings::get('translate-url', '||'));
16
+ }
17
+
18
+ public function renderSlider($sliderHTML) {
19
+
20
+ if (!$this->slider->isAdmin && !empty($this->from) && !empty($this->to)) {
21
+ return str_replace($this->from, $this->to, $sliderHTML);
22
+ }
23
+
24
+ return $sliderHTML;
25
+ }
26
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/generator/abstract.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ abstract class N2GeneratorAbstract {
4
+
5
+ /** @var N2GeneratorInfo */
6
+ protected $info;
7
+
8
+ protected $data;
9
+
10
+ public function __construct($info, $data) {
11
+ $this->info = $info;
12
+ $this->data = $data;
13
+ }
14
+
15
+ public final function getData($slides, $startIndex, $group) {
16
+ $data = array();
17
+ $linearData = $this->_getData($slides * $group, $startIndex - 1);
18
+ $keys = array();
19
+ for ($i = 0; $i < count($linearData); $i++) {
20
+ $keys = array_merge($keys, array_keys($linearData[$i]));
21
+ }
22
+
23
+ $columns = array_fill_keys($keys, '');
24
+
25
+ for ($i = 0; $i < count($linearData); $i++) {
26
+ $firstIndex = intval($i / $group);
27
+ if (!isset($data[$firstIndex])) {
28
+ $data[$firstIndex] = array();
29
+ }
30
+ $data[$firstIndex][$i % $group] = array_merge($columns, $linearData[$i]);
31
+ }
32
+
33
+ if (count($data) && count($data[count($data) - 1]) != $group) {
34
+ if (count($data) - 1 == 0 && count($data[count($data) - 1]) > 0) {
35
+ for ($i = 0; count($data[0]) < $group; $i++) {
36
+ $data[0][] = $data[0][$i];
37
+ }
38
+ } else {
39
+ array_pop($data);
40
+ }
41
+ }
42
+ return $data;
43
+ }
44
+
45
+ protected abstract function _getData($count, $startIndex);
46
+
47
+ function makeClickableLinks($s) {
48
+ return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $s);
49
+ }
50
+
51
+ protected function getIDs() {
52
+ return array_map('intval', explode("\n", str_replace(array(
53
+ "\r\n",
54
+ "\n\r",
55
+ "\r"
56
+ ), "\n", $this->data->get('ids'))));
57
+ }
58
+
59
+ public function filterName($name) {
60
+ return $name;
61
+ }
62
+
63
+ public function hash($key) {
64
+ return md5($key);
65
+ }
66
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/helper.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderHelper
4
+ {
5
+
6
+ /**
7
+ * @var N2Application
8
+ */
9
+ private $application;
10
+
11
+ public function __construct($application) {
12
+ $this->application = $application;
13
+ }
14
+
15
+ /**
16
+ * @return N2SmartSliderHelper
17
+ */
18
+ public static function getInstance() {
19
+ static $instance = null;
20
+ if ($instance === null) {
21
+ $instance = new self(N2Base::getApplication('smartslider'));
22
+ }
23
+ return $instance;
24
+ }
25
+
26
+ public function isSliderChanged($sliderId, $value = 1) {
27
+ return intval($this->application->storage->get('sliderChanged', $sliderId, $value));
28
+ }
29
+
30
+ public function setSliderChanged($sliderId, $value = 1) {
31
+ $this->application->storage->set('sliderChanged', $sliderId, $value);
32
+ }
33
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/manager.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderManager {
4
+
5
+ protected $usage = 'Unknown';
6
+
7
+ public $slider;
8
+
9
+ public function __construct($sliderId, $backend = false, $parameters = array()) {
10
+
11
+ if ($backend) {
12
+ N2Loader::import("libraries.slider.backend", "smartslider");
13
+ $this->slider = new N2SmartSliderBackend($sliderId, $parameters);
14
+ } else {
15
+ N2Loader::import("libraries.slider.abstract", "smartslider");
16
+ $this->slider = new N2SmartSlider($sliderId, $parameters);
17
+ }
18
+
19
+ N2AssetsManager::addCachedGroup($this->slider->cacheId);
20
+ }
21
+
22
+ public function setUsage($usage) {
23
+ $this->usage = $usage;
24
+ }
25
+
26
+ public function getSlider() {
27
+ return $this->slider;
28
+ }
29
+
30
+ public function render($cache = false) {
31
+ if (!$cache) {
32
+ return $this->slider->render();
33
+ }
34
+ N2Loader::import("libraries.slider.cache.slider", "smartslider");
35
+ return $this->slider->addCMSFunctions($this->cacheSlider());
36
+ }
37
+
38
+ private function cacheSlider() {
39
+ $cache = new N2CacheManifestSlider($this->slider->cacheId, array(
40
+ 'slider' => $this->slider
41
+ ));
42
+ $cachedSlider = $cache->makeCache('slider' . N2Translation::getCurrentLocale(), '', array(
43
+ $this,
44
+ 'renderCachedSlider'
45
+ ));
46
+
47
+ if ($cachedSlider === false) {
48
+ return '<h3>Smart Slider with ID #' . $this->slider->sliderId . ' does NOT EXIST or has NO SLIDES!</h3><h4>Usage: ' . $this->usage . '</h4>';
49
+ }
50
+ N2AssetsManager::loadFromArray($cachedSlider['assets']);
51
+
52
+ return $cachedSlider['html'];
53
+ }
54
+
55
+ public function renderCachedSlider() {
56
+ N2AssetsManager::createStack();
57
+
58
+ $content = array();
59
+ $content['html'] = $this->slider->render();
60
+
61
+ $assets = N2AssetsManager::removeStack();
62
+
63
+ if ($content['html'] === false) {
64
+ return false;
65
+ }
66
+
67
+ $content['assets'] = $assets;
68
+
69
+ return $content;
70
+ }
71
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/generator.php ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.slider.generator.abstract', 'smartslider');
3
+
4
+ class N2SmartSliderSlidesGenerator {
5
+
6
+ private static $localCache = array();
7
+
8
+ /**
9
+ * @var N2SmartSliderSlide
10
+ */
11
+ private $slide;
12
+
13
+ private $generatorModel;
14
+
15
+ public $currentGenerator;
16
+
17
+ private $slider;
18
+
19
+ /** @var N2GeneratorAbstract */
20
+ private $dataSource;
21
+
22
+ /**
23
+ * @param $slide N2SmartSliderSlide
24
+ * @param $slider
25
+ * @param $extend
26
+ */
27
+ public function __construct($slide, $slider, $extend) {
28
+ N2Loader::import("libraries.slider.cache.generator", "smartslider");
29
+ N2Loader::import("models.generator", "smartslider");
30
+
31
+ $this->slide = $slide;
32
+ $this->slider = $slider;
33
+
34
+ $this->generatorModel = new N2SmartsliderGeneratorModel();
35
+ $this->currentGenerator = $this->generatorModel->get($this->slide->generator_id);
36
+ $this->currentGenerator['params'] = new N2Data($this->currentGenerator['params'], true);
37
+
38
+ if (isset($extend[$this->slide->generator_id])) {
39
+ $extend = new N2Data($extend[$this->slide->generator_id]);
40
+ $slide->parameters->set('record-slides', $extend->get('record-slides', 1));
41
+ $extend->un_set('record-slides');
42
+ $this->currentGenerator['params']->loadArray($extend->toArray());
43
+ }
44
+ }
45
+
46
+ public function getSlides() {
47
+ $slides = array();
48
+ $data = $this->getData();
49
+ for ($i = 0; $i < count($data); $i++) {
50
+ $newSlide = clone $this->slide;
51
+ $newSlide->setVariables($data[$i]);
52
+ $slides[] = $newSlide;
53
+ }
54
+ if (count($slides) == 0) {
55
+ $slides[] = $this->slide;
56
+ }
57
+ return $slides;
58
+ }
59
+
60
+ public function fillSample() {
61
+ $data = $this->getData();
62
+ if (count($data) > 0) {
63
+ $this->slide->setVariables($data[0]);
64
+ }
65
+ }
66
+
67
+ private function getData() {
68
+ if (!isset(self::$localCache[$this->slide->generator_id])) {
69
+
70
+
71
+ $info = $this->generatorModel->getGeneratorInfo($this->currentGenerator['group'], $this->currentGenerator['type']);
72
+
73
+ require_once($info->path . '/generator.php');
74
+ $class = 'N2Generator' . $this->currentGenerator['group'] . $this->currentGenerator['type'];
75
+ /** @var N2GeneratorAbstract $dataSource */
76
+ $this->dataSource = new $class($info, $this->currentGenerator['params']);
77
+
78
+ $cache = new N2CacheManifestGenerator($this->slider, $this);
79
+ $name = $this->dataSource->filterName('generator' . $this->currentGenerator['id']);
80
+ self::$localCache[$this->slide->generator_id] = $cache->makeCache($name, $this->dataSource->hash(json_encode($this->currentGenerator) . max($this->slide->parameters->get('record-slides'), 1)), array(
81
+ $this,
82
+ 'getNotCachedData'
83
+ ));
84
+ }
85
+
86
+ return self::$localCache[$this->slide->generator_id];
87
+ }
88
+
89
+ public function getNotCachedData() {
90
+ return $this->dataSource->getData(max($this->slide->parameters->get('record-slides'), 1), max($this->currentGenerator['params']->get('record-start'), 1), $this->getSlideGroup());
91
+ }
92
+
93
+ public function setNextCacheRefresh($time) {
94
+ $this->slide->setNextCacheRefresh($time);
95
+ }
96
+
97
+ public function getSlideCount() {
98
+ return max($this->slide->parameters->get('record-slides'), 1);
99
+ }
100
+
101
+ public function getSlideGroup() {
102
+ return max($this->currentGenerator['params']->get('record-group'), 1);
103
+ }
104
+
105
+ public function getSlideStat() {
106
+ return count($this->getData()) . '/' . $this->getSlideCount();
107
+ }
108
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/item.php ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderItem
4
+ {
5
+
6
+ public static $i = array();
7
+
8
+ public $slider, $slide;
9
+
10
+ /**
11
+ * @var N2SSPluginItemAbstract[]
12
+ */
13
+ private static $items = array();
14
+
15
+ private static function _load() {
16
+ static $loaded;
17
+ if (!$loaded) {
18
+ N2Plugin::callPlugin('ssitem', 'onNextendSliderItemShortcode', array(&self::$items));
19
+ $loaded = true;
20
+ }
21
+ }
22
+
23
+ /**
24
+ * @param $slider N2SmartSliderAbstract
25
+ * @param $slide N2SmartSliderSlide
26
+ */
27
+ public function __construct($slider, $slide) {
28
+ self::_load();
29
+
30
+ $this->slider = $slider;
31
+ $this->slide = $slide;
32
+
33
+ if (!isset(self::$i[$slider->elementId])) {
34
+ self::$i[$slider->elementId] = 0;
35
+ }
36
+
37
+ }
38
+
39
+ public function render($item) {
40
+ $type = $item['type'];
41
+ if (isset(self::$items[$type])) {
42
+ $data = new N2Data($item['values']);
43
+ self::$i[$this->slider->elementId]++;
44
+
45
+
46
+ $itemId = $this->slider->elementId . 'item' . self::$i[$this->slider->elementId];
47
+ /**
48
+ * @var N2SSPluginItemAbstract
49
+ */
50
+ if ($this->slider->isAdmin) {
51
+ return self::$items[$type]->renderAdmin($data, $itemId, $this->slider, $this->slide);
52
+ }
53
+
54
+ return self::$items[$type]->render($data, $itemId, $this->slider, $this->slide);
55
+ }
56
+
57
+ return '';
58
+ }
59
+
60
+ public function getFilled($item) {
61
+ $type = $item['type'];
62
+ if (isset(self::$items[$type])) {
63
+ $item['values'] = self::$items[$type]->getFilled($this->slide, new N2Data($item['values']))
64
+ ->toArray();
65
+ }
66
+ return $item;
67
+ }
68
+
69
+ /**
70
+ * @param N2SmartSliderExport $export
71
+ * @param $item
72
+ */
73
+ public static function prepareExport($export, $item) {
74
+ self::_load();
75
+ $type = $item['type'];
76
+ if (isset(self::$items[$type])) {
77
+ self::$items[$type]->prepareExport($export, new N2Data($item['values']));
78
+ }
79
+ }
80
+
81
+ /**
82
+ * @param N2SmartSliderImport $import
83
+ * @param $item
84
+ *
85
+ * @return mixed
86
+ */
87
+ public static function prepareImport($import, $item) {
88
+ self::_load();
89
+ $type = $item['type'];
90
+ if (isset(self::$items[$type])) {
91
+ $item['values'] = self::$items[$type]->prepareImport($import, new N2Data($item['values']))
92
+ ->toArray();
93
+ }
94
+ return $item;
95
+ }
96
+ }
97
+
98
+
99
+ class N2SmartSliderItemHelper
100
+ {
101
+
102
+ public $layer;
103
+ public $data = array(
104
+ 'type' => null,
105
+ 'values' => array()
106
+ );
107
+
108
+ public function __construct($slide, $type, $layerProperties = array(), $properties = array()) {
109
+
110
+ $this->layer = new N2SmartSliderLayerHelper();
111
+ $this->set('type', $type);
112
+ $class = 'N2SSPluginItem' . $type;
113
+ $item = new $class();
114
+ $properties = array_merge($item->getValues(), $properties);
115
+ foreach ($properties as $k => $v) {
116
+ $this->setValues($k, $v);
117
+ }
118
+ foreach ($item->getLayerProperties() AS $k => $v) {
119
+ if ($k == 'width' || $k == 'height' || $k == 'top' || $k == 'left') {
120
+
121
+ $this->layer->set('desktopportrait' . $k, $v);
122
+ } else {
123
+ $this->layer->set($k, $v);
124
+ }
125
+ }
126
+ $this->layer->set('name', $item->_title . ' layer')
127
+ ->set('items', array($this->data));
128
+
129
+ foreach ($layerProperties AS $k => $v) {
130
+ $this->layer->set($k, $v);
131
+ }
132
+ $slide->addLayer($this->layer);
133
+ }
134
+
135
+ public function set($key, $value) {
136
+ $this->data[$key] = $value;
137
+ return $this;
138
+ }
139
+
140
+ public function setValues($key, $value) {
141
+ $this->data['values'][$key] = $value;
142
+ return $this;
143
+ }
144
+
145
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/layer.php ADDED
@@ -0,0 +1,317 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderLayer {
4
+
5
+ private $slider, $slide, $item;
6
+
7
+ /**
8
+ * @param $slider N2SmartSliderAbstract
9
+ * @param $slide N2SmartSliderSlide
10
+ */
11
+ public function __construct($slider, $slide) {
12
+ $this->slider = $slider;
13
+ $this->slide = $slide;
14
+ $this->item = new N2SmartSliderItem($slider, $slide);
15
+ }
16
+
17
+ private function WHUnit($value) {
18
+ if ($value == 'auto' || substr($value, -1) == '%') {
19
+ return $value;
20
+ }
21
+ return $value . 'px';
22
+ }
23
+
24
+ public function render($layer) {
25
+
26
+ $innerHTML = '';
27
+ for ($i = 0; $i < count($layer['items']); $i++) {
28
+ $innerHTML .= $this->item->render($layer['items'][$i]);
29
+ }
30
+ unset($layer['items']);
31
+
32
+ $cropStyle = $layer['crop'];
33
+
34
+ if ($this->slider->isAdmin) {
35
+ if ($layer['crop'] == 'auto') {
36
+ $cropStyle = 'hidden';
37
+ }
38
+ } else {
39
+ if ($layer['crop'] == 'auto') {
40
+ $layer['class'] .= ' n2-scrollable';
41
+ }
42
+ }
43
+
44
+ if ($layer['crop'] == 'mask') {
45
+ $cropStyle = 'hidden';
46
+ $innerHTML = N2Html::tag('div', array('class' => 'n2-ss-layer-mask'), $innerHTML);
47
+ } else if (!$this->slider->isAdmin && $layer['parallax'] > 0) {
48
+ $innerHTML = N2Html::tag('div', array(
49
+ 'class' => 'n2-ss-layer-parallax'
50
+ ), $innerHTML);
51
+ }
52
+
53
+ if (!isset($layer['responsiveposition'])) {
54
+ $layer['responsiveposition'] = 1;
55
+ }
56
+
57
+ if (!isset($layer['responsivesize'])) {
58
+ $layer['responsivesize'] = 1;
59
+ }
60
+
61
+
62
+ $style = '';
63
+ /*if (isset($layer['adaptivefont']) && $layer['adaptivefont']) {
64
+ $style .= 'font-size: ' . $this->slider->fontSize . 'px;';
65
+ }*/
66
+ if (isset($layer['inneralign'])) {
67
+ $style .= 'text-align:' . $layer['inneralign'];
68
+ }
69
+
70
+ $style .= ';left:' . $layer['desktopportraitleft'] . 'px';
71
+ $style .= ';top:' . $layer['desktopportraittop'] . 'px';
72
+ $style .= ';width:' . $this->WHUnit($layer['desktopportraitwidth']);
73
+ $style .= ';height:' . $this->WHUnit($layer['desktopportraitheight']);
74
+
75
+ if (isset($layer['zIndex'])) {
76
+ $zIndex = $layer['zIndex'];
77
+ unset($layer['zIndex']);
78
+ } else {
79
+ preg_match('/z\-index:.*?([0-9]+);/', $layer['style'], $out);
80
+ $zIndex = $out[1];
81
+ unset($layer['style']);
82
+ }
83
+
84
+ $attributes = array(
85
+ 'class' => 'n2-ss-layer' . (empty($layer['class']) ? '' : ' ' . $layer['class']),
86
+ 'style' => 'z-index:' . $zIndex . ';overflow:' . $cropStyle . ';' . $style . ';',
87
+ 'data-animations' => base64_encode(json_encode($layer['animations']))
88
+ );
89
+
90
+ if (!empty($layer['id'])) {
91
+ $attributes['id'] = $layer['id'];
92
+ unset($layer['id']);
93
+ }
94
+
95
+ unset($layer['animations']);
96
+
97
+ if (!$this->slider->isAdmin && $layer['parallax'] < 1) {
98
+ unset($layer['parallax']);
99
+ }
100
+
101
+ if (!$this->slider->isAdmin) {
102
+ $this->getEventAttributes($attributes, $layer, $this->slider->elementId);
103
+
104
+ unset($layer['name']);
105
+ unset($layer['namesynced']);
106
+ unset($layer['eye']);
107
+ unset($layer['lock']);
108
+ unset($layer['inneralign']);
109
+ unset($layer['crop']);
110
+ unset($layer['zIndex']);
111
+ }
112
+
113
+ foreach ($layer AS $k => $data) {
114
+ $attributes['data-' . $k] = $data;
115
+ }
116
+ return N2Html::tag('div', $attributes, $innerHTML);
117
+ }
118
+
119
+ public function getFilled($layer) {
120
+ $items = array();
121
+ for ($i = 0; $i < count($layer['items']); $i++) {
122
+ $items [] = $this->item->getFilled($layer['items'][$i]);
123
+ }
124
+ $layer['items'] = $items;
125
+ return $layer;
126
+ }
127
+
128
+ /**
129
+ * @param N2SmartSliderExport $export
130
+ * @param $rawLayers
131
+ */
132
+ public static function prepareExport($export, $rawLayers) {
133
+ $layers = json_decode($rawLayers, true);
134
+ foreach ($layers AS $layer) {
135
+
136
+ foreach ($layer['items'] AS $item) {
137
+ N2SmartSliderItem::prepareExport($export, $item);
138
+ }
139
+ }
140
+ }
141
+
142
+ /**
143
+ * @param N2SmartSliderImport $import
144
+ * @param $rawLayers
145
+ *
146
+ * @return mixed|string|void
147
+ */
148
+ public static function prepareImport($import, $rawLayers) {
149
+ $layers = json_decode($rawLayers, true);
150
+ for ($i = 0; $i < count($layers); $i++) {
151
+ for ($j = 0; $j < count($layers[$i]['items']); $j++) {
152
+ $layers[$i]['items'][$j] = N2SmartSliderItem::prepareImport($import, $layers[$i]['items'][$j]);
153
+ }
154
+ }
155
+ return json_encode($layers);
156
+ }
157
+
158
+ public static function sort($layers) {
159
+ $children = array();
160
+ for ($i = count($layers) - 1; $i >= 0; $i--) {
161
+ if (!empty($layers[$i]['parentid'])) {
162
+ $parentId = $layers[$i]['parentid'];
163
+ if (!isset($children[$parentId])) {
164
+ $children[$parentId] = array();
165
+ }
166
+ $children[$parentId][] = $layers[$i];
167
+ array_splice($layers, $i, 1);
168
+ }
169
+ }
170
+
171
+ for ($i = 0; $i < count($layers); $i++) {
172
+ if (isset($layers[$i]['id']) && isset($children[$layers[$i]['id']])) {
173
+ array_splice($layers, $i + 1, 0, $children[$layers[$i]['id']]);
174
+ unset($children[$layers[$i]['id']]);
175
+ }
176
+ }
177
+ return $layers;
178
+ }
179
+
180
+ private static function uid($length = 12) {
181
+ $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
182
+ $charactersLength = strlen($characters);
183
+ $randomString = '';
184
+ for ($i = 0; $i < $length; $i++) {
185
+ $randomString .= $characters[mt_rand(0, $charactersLength - 1)];
186
+ }
187
+ return $randomString;
188
+ }
189
+
190
+ public static function translateIds($layers) {
191
+ $layers = self::sort($layers);
192
+ $idTranslation = array();
193
+ for ($i = 0; $i < count($layers); $i++) {
194
+ if (!empty($layers[$i]['id'])) {
195
+ $newId = 'd' . self::uid();
196
+ $idTranslation[$layers[$i]['id']] = $newId;
197
+ $layers[$i]['id'] = $newId;
198
+ }
199
+ if (!empty($layers[$i]['parentid'])) {
200
+ if (isset($idTranslation[$layers[$i]['parentid']])) {
201
+ $layers[$i]['parentid'] = $idTranslation[$layers[$i]['parentid']];
202
+ } else {
203
+ $layers[$i]['parentid'] = '';
204
+ }
205
+ }
206
+ }
207
+ return $layers;
208
+ }
209
+
210
+ protected function getEventAttributes(&$attributes, &$layer, $sliderId) {
211
+ if (!empty($layer['mouseenter'])) {
212
+ $attributes['data-mouseenter'] = $this->parseEventCode($layer['mouseenter'], $sliderId);
213
+ unset($layer['mouseenter']);
214
+ }
215
+ if (!empty($layer['click'])) {
216
+ $attributes['data-click'] = $this->parseEventCode($layer['click'], $sliderId);
217
+ $attributes['style'] .= 'cursor:pointer;';
218
+ unset($layer['click']);
219
+ }
220
+ if (!empty($layer['mouseleave'])) {
221
+ $attributes['data-mouseleave'] = $this->parseEventCode($layer['mouseleave'], $sliderId);
222
+ unset($layer['mouseleave']);
223
+ }
224
+ if (!empty($layer['play'])) {
225
+ $attributes['data-play'] = $this->parseEventCode($layer['play'], $sliderId);
226
+ unset($layer['play']);
227
+ }
228
+ if (!empty($layer['pause'])) {
229
+ $attributes['data-pause'] = $this->parseEventCode($layer['pause'], $sliderId);
230
+ unset($layer['pause']);
231
+ }
232
+ if (!empty($layer['stop'])) {
233
+ $attributes['data-stop'] = $this->parseEventCode($layer['stop'], $sliderId);
234
+ unset($layer['stop']);
235
+ }
236
+ }
237
+
238
+ protected function parseEventCode($code, $elementId) {
239
+ if (preg_match('/^[a-zA-Z0-9_\-,]+$/', $code)) {
240
+ if (is_numeric($code)) {
241
+ $code = "window['" . $elementId . "'].changeTo(" . ($code - 1) . ");";
242
+ } else if ($code == 'next') {
243
+ $code = "window['" . $elementId . "'].next();";
244
+ } else if ($code == 'previous') {
245
+ $code = "window['" . $elementId . "'].previous();";
246
+ } else {
247
+ $code = "n2ss.trigger(this, '" . $code . "');";
248
+ }
249
+ }
250
+ return $code;
251
+ }
252
+ }
253
+
254
+
255
+ class N2SmartSliderLayerHelper {
256
+
257
+ public $data = array(
258
+ "zIndex" => 1,
259
+ "eye" => false,
260
+ "lock" => false,
261
+ "animations" => array(
262
+ "specialZeroIn" => 0,
263
+ "transformOriginIn" => "50|*|50|*|0",
264
+ "inPlayEvent" => "",
265
+ "repeatCount" => 0,
266
+ "repeatStartDelay" => 0,
267
+ "transformOriginLoop" => "50|*|50|*|0",
268
+ "loopPlayEvent" => "",
269
+ "loopPauseEvent" => "",
270
+ "loopStopEvent" => "",
271
+ "transformOriginOut" => "50|*|50|*|0",
272
+ "outPlayEvent" => "",
273
+ "instantOut" => 1,
274
+ "in" => array(),
275
+ "loop" => array(),
276
+ "out" => array()
277
+ ),
278
+ "id" => null,
279
+ "parentid" => null,
280
+ "name" => "Layer",
281
+ "namesynced" => 1,
282
+ "crop" => "visible",
283
+ "inneralign" => "left",
284
+ "parallax" => 0,
285
+ "adaptivefont" => 0,
286
+ "desktopportrait" => 1,
287
+ "desktoplandscape" => 1,
288
+ "tabletportrait" => 1,
289
+ "tabletlandscape" => 1,
290
+ "mobileportrait" => 1,
291
+ "mobilelandscape" => 1,
292
+ "responsiveposition" => 1,
293
+ "responsivesize" => 1,
294
+ "desktopportraitleft" => 0,
295
+ "desktopportraittop" => 0,
296
+ "desktopportraitwidth" => "auto",
297
+ "desktopportraitheight" => "auto",
298
+ "desktopportraitalign" => "center",
299
+ "desktopportraitvalign" => "middle",
300
+ "desktopportraitparentalign" => "center",
301
+ "desktopportraitparentvalign" => "middle",
302
+ "desktopportraitfontsize" => 100,
303
+ "items" => array()
304
+
305
+ );
306
+
307
+ public function __construct($properties = array()) {
308
+ foreach ($properties as $k => $v) {
309
+ $this->data[$k] = $v;
310
+ }
311
+ }
312
+
313
+ public function set($key, $value) {
314
+ $this->data[$key] = $value;
315
+ return $this;
316
+ }
317
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/slide.php ADDED
@@ -0,0 +1,510 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderSlide {
4
+
5
+ /**
6
+ * @var N2SmartSliderAbstract
7
+ */
8
+ protected $sliderObject;
9
+ public $id = 0, $slider = 0, $publish_up, $publish_down, $published = 1, $first = 0, $slide = '', $ordering = 0, $generator_id = 0;
10
+
11
+ protected $title = '', $description = '', $thumbnail = '';
12
+
13
+ public $parameters, $background = '';
14
+
15
+ protected $active = false;
16
+
17
+ protected $html = '';
18
+
19
+ protected $visible = 1;
20
+
21
+ protected $underEdit = false;
22
+
23
+ public $hasLink = false;
24
+
25
+ /**
26
+ * @var bool|N2SmartSliderSlidesGenerator
27
+ */
28
+ protected $generator = false;
29
+ protected $variables = array();
30
+
31
+ public $index = -1;
32
+
33
+ public $attributes = array(), $containerAttributes = array(
34
+ 'class' => 'n2-ss-layers-container',
35
+ 'style' => ''
36
+ ), $classes = '', $style = '';
37
+
38
+ public $nextCacheRefresh = 2145916800; // 2038
39
+
40
+ public function __construct($slider, $data) {
41
+ $this->parameters = new N2Data($data['params'], true);
42
+ unset($data['params']);
43
+ foreach ($data as $key => $value) {
44
+ $this->$key = $value;
45
+ }
46
+
47
+ $this->sliderObject = $slider;
48
+ $this->onCreate();
49
+ }
50
+
51
+ public function __clone() {
52
+ $this->parameters = clone $this->parameters;
53
+ }
54
+
55
+ protected function onCreate() {
56
+ N2Pluggable::doAction('ssSlide', array($this));
57
+ }
58
+
59
+ public function initGenerator($extend = array()) {
60
+ if ($this->generator_id > 0) {
61
+ $this->generator = new N2SmartSliderSlidesGenerator($this, $this->sliderObject, $extend);
62
+ }
63
+ }
64
+
65
+ public function hasGenerator() {
66
+ return !!$this->generator;
67
+ }
68
+
69
+ /**
70
+ * @return N2SmartSliderSlide[]
71
+ */
72
+ public function expandSlide() {
73
+ return $this->generator->getSlides();
74
+ }
75
+
76
+ public function fillSample() {
77
+ if ($this->hasGenerator()) {
78
+ $this->generator->fillSample();
79
+ }
80
+ }
81
+
82
+ public function setVariables($variables) {
83
+ $this->variables = array_merge($this->variables, (array)$variables);
84
+ }
85
+
86
+ public function isFirst() {
87
+ return !!$this->first;
88
+ }
89
+
90
+ public function isActive() {
91
+ return $this->active;
92
+ }
93
+
94
+ public function isCurrentlyEdited() {
95
+ return N2Request::getInt('slideid') == $this->id;
96
+ }
97
+
98
+ public function setIndex($index) {
99
+ $this->index = $index;
100
+ }
101
+
102
+ public function setActive() {
103
+ $this->classes .= ' n2-ss-slide-active';
104
+ $this->active = true;
105
+ }
106
+
107
+ public function prepare() {
108
+ $this->variables['slide'] = array(
109
+ 'name' => $this->getTitle(),
110
+ 'description' => $this->getDescription()
111
+ );
112
+ }
113
+
114
+ public function setSlidesParams() {
115
+
116
+ $this->background = $this->sliderObject->features->makeBackground($this);
117
+
118
+ $this->addSlideLink();
119
+
120
+ $this->attributes['data-slide-duration'] = n2_floatval($this->parameters->get('slide-duration', 0) / 1000);
121
+ $this->attributes['data-id'] = $this->id;
122
+
123
+ $this->classes .= ' n2-ss-slide-' . $this->id;
124
+
125
+ $this->sliderObject->features->makeSlide($this);
126
+
127
+ $this->renderHtml();
128
+ }
129
+
130
+ protected function addSlideLink() {
131
+ list($url, $target) = (array)N2Parse::parse($this->parameters->getIfEmpty('link', '|*|'));
132
+
133
+ if (!empty($url) && $url != '#') {
134
+
135
+ if (empty($target)) {
136
+ $target = '_self';
137
+ }
138
+
139
+ $url = N2ImageHelper::fixed($this->fill($url));
140
+
141
+ $this->containerAttributes['onclick'] = '';
142
+ if (strpos($url, 'javascript:') === 0) {
143
+ $this->containerAttributes['onclick'] = $url;
144
+ } else {
145
+
146
+ N2Loader::import('libraries.link.link');
147
+ $url = N2LinkParser::parse($url, $this->containerAttributes);
148
+
149
+ $this->containerAttributes['data-href'] = (N2Platform::$isJoomla ? JRoute::_($url, false) : $url);
150
+ if (empty($this->containerAttributes['onclick'])) {
151
+ if ($target == '_blank') {
152
+ $this->containerAttributes['data-n2click'] = "window.open(this.getAttribute('data-href'),'_blank');";
153
+ } else {
154
+ $this->containerAttributes['data-n2click'] = "window.location=this.getAttribute('data-href')";
155
+ }
156
+ $this->containerAttributes['data-n2middleclick'] = "window.open(this.getAttribute('data-href'),'_blank');";
157
+ }
158
+ }
159
+ $this->containerAttributes['style'] .= 'cursor:pointer;';
160
+ $this->hasLink = true;
161
+ }
162
+ }
163
+
164
+ public function getRawLink() {
165
+ return $this->parameters->getIfEmpty('link', '|*|');
166
+ }
167
+
168
+ protected function renderHtml() {
169
+ if (empty($this->html)) {
170
+
171
+ $layerRenderer = new N2SmartSliderLayer($this->sliderObject, $this);
172
+
173
+ $html = '';
174
+ $layers = json_decode($this->slide, true);
175
+ if (!$this->underEdit) {
176
+ $layers = N2SmartSliderLayer::translateIds($layers);
177
+ }
178
+ if (is_array($layers)) {
179
+ foreach ($layers AS $layer) {
180
+ $html .= $layerRenderer->render($layer);
181
+ }
182
+ }
183
+ $this->html = N2Html::tag('div', $this->containerAttributes, $html);
184
+ }
185
+ }
186
+
187
+ public function getHTML() {
188
+ return $this->html;
189
+ }
190
+
191
+ public function getAsStatic() {
192
+
193
+ $layerRenderer = new N2SmartSliderLayer($this->sliderObject, $this);
194
+
195
+ $html = '';
196
+ $layers = json_decode($this->slide, true);
197
+ if (!$this->underEdit) {
198
+ $layers = N2SmartSliderLayer::translateIds($layers);
199
+ }
200
+ if (is_array($layers)) {
201
+ foreach ($layers AS $layer) {
202
+ $html .= $layerRenderer->render($layer);
203
+ }
204
+ }
205
+ return N2Html::tag('div', array('class' => 'n2-ss-static-slide'), $html);
206
+ }
207
+
208
+ public function isStatic() {
209
+ if ($this->parameters->get('static-slide', 0)) {
210
+ return true;
211
+ }
212
+ return false;
213
+ }
214
+
215
+ public function fill($value) {
216
+ if (!empty($this->variables)) {
217
+ return preg_replace_callback('/{((([a-z]+)\(([0-9a-zA-Z_,\/\(\)]+)\))|([a-zA-Z0-9][a-zA-Z0-9_\/]*))}/', array(
218
+ $this,
219
+ 'parseFunction'
220
+ ), $value);
221
+ }
222
+ return $value;
223
+ }
224
+
225
+ private function parseFunction($match) {
226
+ if (!isset($match[5])) {
227
+ $args = preg_split('/,(?!.*\))/', $match[4]);
228
+ for ($i = 0; $i < count($args); $i++) {
229
+ $args[$i] = $this->parseVariable($args[$i]);
230
+ }
231
+ return call_user_func_array(array(
232
+ $this,
233
+ '_' . $match[3]
234
+ ), $args);
235
+
236
+ } else {
237
+ return $this->parseVariable($match[5]);
238
+ }
239
+ }
240
+
241
+ private function parseVariable($variable) {
242
+ preg_match('/((([a-z]+)\(([0-9a-zA-Z_,\/\(\)]+)\)))/', $variable, $match);
243
+ if (!empty($match)) {
244
+ return call_user_func(array(
245
+ $this,
246
+ 'parseFunction'
247
+ ), $match);
248
+ } else {
249
+ preg_match('/([a-zA-Z][0-9a-zA-Z_]*)(\/([0-9a-z]+))?/', $variable, $match);
250
+ if ($match) {
251
+ $index = empty($match[3]) ? 0 : $match[3];
252
+ if (is_numeric($index)) {
253
+ $index = max(1, intval($index)) - 1;
254
+ }
255
+
256
+ if (isset($this->variables[$index]) && isset($this->variables[$index][$match[1]])) {
257
+ return $this->variables[$index][$match[1]];
258
+ } else {
259
+ return '';
260
+ }
261
+ }
262
+ return $variable;
263
+ }
264
+ }
265
+
266
+ private function _cleanhtml($s) {
267
+ return strip_tags($s, '<p><a><b><br><br/><i>');
268
+ }
269
+
270
+ private function _removehtml($s) {
271
+ return strip_tags($s);
272
+ }
273
+
274
+ private function _splitbychars($s, $start, $length) {
275
+ return N2String::substr($s, $start, $length);
276
+ }
277
+
278
+ private function _splitbywords($s, $start, $length) {
279
+ $len = N2String::strlen($s);
280
+ $posStart = max(0, $start == 0 ? 0 : N2String::strpos($s, ' ', $start));
281
+ $posEnd = max(0, $length > $len ? $len : N2String::strpos($s, ' ', $length));
282
+ return N2String::substr($s, $posStart, $posEnd);
283
+ }
284
+
285
+ private function _findimage($s, $index) {
286
+ $index = isset($index) ? intval($index) - 1 : 0;
287
+ preg_match_all('/(<img.*?src=[\'"](.*?)[\'"][^>]*>)|(background(-image)??\s*?:.*?url\((["|\']?)?(.+?)(["|\']?)?\))/i', $s, $r);
288
+ if (isset($r[2]) && !empty($r[2][$index])) {
289
+ $s = $r[2][$index];
290
+ } else if (isset($r[6]) && !empty($r[6][$index])) {
291
+ $s = trim($r[6][$index], "'\" \t\n\r\0\x0B");
292
+ } else {
293
+ $s = '';
294
+ }
295
+ return $s;
296
+ }
297
+
298
+ private function _findlink($s, $index) {
299
+ $index = isset($index) ? intval($index) - 1 : 0;
300
+ preg_match_all('/href=["\']?([^"\'>]+)["\']?/i', $s, $r);
301
+ if (isset($r[1]) && !empty($r[1][$index])) {
302
+ $s = $r[1][$index];
303
+ } else {
304
+ $s = '';
305
+ }
306
+ return $s;
307
+ }
308
+
309
+ private function __removevarlink($s) {
310
+ return preg_replace('/<a href=\"(.*?)\">(.*?)<\/a>/', '', $s);
311
+ }
312
+
313
+ public function getTitle() {
314
+ return $this->fill($this->title);
315
+ }
316
+
317
+ public function getDescription() {
318
+ return $this->fill($this->description);
319
+ }
320
+
321
+ public function getRawTitle() {
322
+ return $this->title;
323
+ }
324
+
325
+ public function getRawDescription() {
326
+ return $this->description;
327
+ }
328
+
329
+ public function getBackgroundImage() {
330
+ return $this->fill($this->parameters->get('backgroundImage'));
331
+ }
332
+
333
+ public function getThumbnail() {
334
+ $image = $this->thumbnail;
335
+ if (empty($image)) {
336
+ $image = $this->parameters->get('backgroundImage');
337
+ }
338
+ return N2ImageHelper::fixed($this->fill($image));
339
+ }
340
+
341
+ public function getThumbnailTypeHTML() {
342
+ $type = $this->parameters->get('thumbnailType', 'default');
343
+
344
+ if ($type == 'default') {
345
+ return '';
346
+ }
347
+
348
+ return '<img class="n2-ss-thumbnail-type n2-ow" src="' . N2ImageHelperAbstract::SVGToBase64('$ss$/images/thumbnail-types/' . $type . '.svg') . '"/>';
349
+ }
350
+
351
+ public function getLightboxImage() {
352
+ $image = $this->fill($this->parameters->get('ligthboxImage'));
353
+ if (empty($image)) {
354
+ return $this->getBackgroundImage();
355
+ }
356
+ return $image;
357
+ }
358
+
359
+ public function getRow() {
360
+ $this->fillParameters();
361
+ return array(
362
+ 'title' => $this->getTitle(),
363
+ 'slide' => $this->getFilledSlide(),
364
+ 'description' => $this->getDescription(),
365
+ 'thumbnail' => N2ImageHelper::dynamic($this->getThumbnail()),
366
+ 'published' => $this->published,
367
+ 'publish_up' => $this->publish_up,
368
+ 'publish_down' => $this->publish_down,
369
+ 'first' => $this->first,
370
+ 'params' => $this->parameters->toJSON(),
371
+ 'slider' => $this->slider,
372
+ 'ordering' => $this->ordering,
373
+ 'generator_id' => 0
374
+ );
375
+ }
376
+
377
+ public function fillParameters() {
378
+ $this->parameters->set('backgroundImage', $this->fill($this->parameters->get('backgroundImage')));
379
+ $this->parameters->set('backgroundAlt', $this->fill($this->parameters->get('backgroundAlt')));
380
+ $this->parameters->set('backgroundTitle', $this->fill($this->parameters->get('backgroundTitle')));
381
+ $this->parameters->set('backgroundVideoMp4', $this->fill($this->parameters->get('backgroundVideoMp4')));
382
+ $this->parameters->set('backgroundVideoWebm', $this->fill($this->parameters->get('backgroundVideoWebm')));
383
+ $this->parameters->set('backgroundVideoOgg', $this->fill($this->parameters->get('backgroundVideoOgg')));
384
+ $this->parameters->set('link', $this->fill($this->parameters->get('link')));
385
+ }
386
+
387
+ public function getFilledSlide() {
388
+ $layerRenderer = new N2SmartSliderLayer($this->sliderObject, $this);
389
+
390
+ $rawSlide = array();
391
+ $layers = json_decode($this->slide, true);
392
+ if (!$this->underEdit) {
393
+ $layers = N2SmartSliderLayer::translateIds($layers);
394
+ }
395
+ if (is_array($layers)) {
396
+ foreach ($layers AS $layer) {
397
+ $rawSlide[] = $layerRenderer->getFilled($layer);
398
+ }
399
+ }
400
+ return json_encode($rawSlide);
401
+ }
402
+
403
+ public function setNextCacheRefresh($time) {
404
+ $this->nextCacheRefresh = min($this->nextCacheRefresh, $time);
405
+ }
406
+
407
+ public function setVisibility($visibility) {
408
+ $this->visible = $visibility;
409
+ }
410
+
411
+ public function isVisible() {
412
+
413
+ if (!$this->visible) {
414
+ return false;
415
+ }
416
+
417
+ $time = N2Platform::getTime();
418
+
419
+ $publish_up = strtotime($this->publish_up);
420
+ $publish_down = strtotime($this->publish_down);
421
+
422
+ if ($publish_down) {
423
+ if ($publish_down > $time) {
424
+ $this->setNextCacheRefresh($publish_down);
425
+ } else {
426
+ return false;
427
+ }
428
+ }
429
+
430
+ if ($publish_up) {
431
+ if ($publish_up > $time) {
432
+ $this->setNextCacheRefresh($publish_up);
433
+ return false;
434
+ }
435
+ }
436
+ return true;
437
+ }
438
+
439
+ public function getSlideCount() {
440
+ if ($this->hasGenerator()) {
441
+ return $this->generator->getSlideCount();
442
+ }
443
+ return 1;
444
+ }
445
+
446
+ public function getSlideStat() {
447
+ if ($this->hasGenerator()) {
448
+ return $this->generator->getSlideStat();
449
+ }
450
+ return '1/1';
451
+ }
452
+
453
+ public function setCurrentlyEdited() {
454
+ $this->underEdit = true;
455
+ }
456
+ }
457
+
458
+ class N2SmartSliderSlideHelper {
459
+
460
+ public $data = array(
461
+ 'id' => 0,
462
+ 'title' => '',
463
+ 'publishdates' => '|*|',
464
+ 'published' => 1,
465
+ 'first' => 0,
466
+ 'slide' => array(),
467
+ 'description' => '',
468
+ 'thumbnail' => '',
469
+ 'ordering' => 0,
470
+ 'generator_id' => 0,
471
+ "static-slide" => 0,
472
+ "backgroundColor" => "ffffff00",
473
+ "backgroundImage" => "",
474
+ "backgroundImageOpacity" => 100,
475
+ "backgroundAlt" => "",
476
+ "backgroundTitle" => "",
477
+ "backgroundMode" => "default",
478
+ "backgroundVideoMp4" => "",
479
+ "backgroundVideoWebm" => "",
480
+ "backgroundVideoOgg" => "",
481
+ "backgroundVideoMuted" => 1,
482
+ "backgroundVideoLoop" => 1,
483
+ "backgroundVideoMode" => "fill",
484
+ "link" => "|*|_self",
485
+ "slide-duration" => 0
486
+ );
487
+
488
+ public function __construct($properties = array()) {
489
+ foreach ($properties as $k => $v) {
490
+ $this->data[$k] = $v;
491
+ }
492
+ }
493
+
494
+ public function set($key, $value) {
495
+ $this->data[$key] = $value;
496
+ return $this;
497
+ }
498
+
499
+ /**
500
+ * @param $layer N2SmartSliderLayerHelper
501
+ */
502
+ public function addLayer($layer) {
503
+ $this->data['slide'][] = &$layer->data;
504
+ $layer->set('zIndex', count($this->data['slide']));
505
+ }
506
+
507
+ public function toArray() {
508
+ return $this->data;
509
+ }
510
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/slides.php ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderSlides {
4
+
5
+ /**
6
+ * @var N2SmartSlider
7
+ */
8
+ protected $slider;
9
+
10
+ /**
11
+ * @var N2SmartSliderSlide[]
12
+ */
13
+ protected $slides = array();
14
+
15
+ /**
16
+ * @var N2SmartSliderSlide[]
17
+ */
18
+ protected $allEnabledSlides = array();
19
+
20
+ private $randomize = false;
21
+ private $randomizeFirst = false;
22
+ private $randomizeCache = false;
23
+ protected $maximumSlideCount = 100;
24
+
25
+ public function __construct($slider) {
26
+ $this->slider = $slider;
27
+
28
+ $params = $slider->params;
29
+ $this->randomize = intval($params->get('randomize', 0));
30
+ $this->randomizeFirst = intval($params->get('randomizeFirst', 0));
31
+ $this->randomizeCache = intval($params->get('randomize-cache', 0));
32
+ $this->maximumSlideCount = intval($params->get('maximumslidecount', '100'));
33
+ $this->maximumSlideCount = 10000;
34
+
35
+ }
36
+
37
+ /**
38
+ * @return mixed
39
+ */
40
+ public function getSlides($extend = array(), $dummy = false) {
41
+
42
+ $this->loadSlides(isset($extend['slidesData']) ? $extend['slidesData'] : array(), $dummy);
43
+
44
+ if (!$this->hasSlides()) {
45
+ return array();
46
+ }
47
+
48
+ $this->makeSlides(isset($extend['generatorData']) ? $extend['generatorData'] : array());
49
+
50
+ return $this->slides;
51
+ }
52
+
53
+ public function hasSlides() {
54
+ //check slide number
55
+ if (count($this->slides) === 0) {
56
+ if (N2Platform::$isAdmin) {
57
+ N2Message::error(n2_('0 slides available for this slider.'));
58
+ }
59
+ $this->slider->norender = true;
60
+ return false;
61
+ }
62
+ return true;
63
+ }
64
+
65
+ public function makeSlides($extend = array()) {
66
+
67
+ $slides = &$this->slides;
68
+
69
+ for ($i = 0; $i < count($slides); $i++) {
70
+ $slides[$i]->initGenerator($extend);
71
+ }
72
+
73
+ for ($i = count($slides) - 1; $i >= 0; $i--) {
74
+ if ($slides[$i]->hasGenerator()) {
75
+ array_splice($slides, $i, 1, $slides[$i]->expandSlide());
76
+ }
77
+ }
78
+
79
+ $staticSlidesCount = 0;
80
+ for ($i = 0; $i < count($slides); $i++) {
81
+ if ($slides[$i]->isStatic()) {
82
+ $staticSlidesCount++;
83
+ }
84
+ }
85
+
86
+ $countSlides = count($slides);
87
+
88
+ for ($i = 0; $i < count($slides) && $countSlides > $staticSlidesCount; $i++) {
89
+ if ($slides[$i]->isStatic()) {
90
+ $this->slider->addStaticSlide($slides[$i]);
91
+ array_splice($slides, $i, 1);
92
+ $i--;
93
+ }
94
+ }
95
+
96
+ if (!$this->randomizeCache && $this->randomize) {
97
+ shuffle($slides);
98
+ }
99
+ if ($this->maximumSlideCount > 0) {
100
+ array_splice($slides, $this->maximumSlideCount);
101
+ }
102
+
103
+ if (!$this->randomizeCache && $this->randomizeFirst) {
104
+ $this->slider->_activeSlide = mt_rand(0, count($slides) - 1);
105
+ } else {
106
+ for ($i = 0; $i < count($slides); $i++) {
107
+ if ($slides[$i]->isFirst()) {
108
+ $this->slider->_activeSlide = $i;
109
+ break;
110
+ }
111
+ }
112
+ }
113
+
114
+ if (count($slides) == 1 && $this->slider->params->get('loop-single-slide', 0)) {
115
+ $slides[1] = clone $slides[0];
116
+ }
117
+
118
+ for ($i = 0; $i < count($slides); $i++) {
119
+ $slides[$i]->setIndex($i);
120
+ }
121
+ }
122
+
123
+ protected function loadSlides($extend, $dummy) {
124
+ $this->slider->_activeSlide = 0;
125
+
126
+ $where = $this->slidesWhereQuery();
127
+
128
+ N2Loader::import("models.Slides", "smartslider");
129
+ $slidesModel = new N2SmartsliderSlidesModel();
130
+ $slideRows = $slidesModel->getAll($this->slider->sliderId, $where);
131
+
132
+ if (isset($extend['add'])) {
133
+ if (!is_array($slideRows)) {
134
+ $slideRows = array();
135
+ }
136
+ array_push($slideRows, $extend['add']);
137
+ }
138
+
139
+ if (count($slideRows) == 0 && $dummy) {
140
+ $images = array(
141
+ '$ss$/admin/images/dummyslide.png',
142
+ '$ss$/admin/images/dummyslide.png',
143
+ '$ss$/admin/images/dummyslide.png',
144
+ );
145
+ for ($i = 0; $i <= 7; $i++) {
146
+ $index = $i % count($images);
147
+ $slideRows[] = $slidesModel->getRowFromPost($this->slider->sliderId, array(
148
+ 'title' => 'Dummy slide #' . $i,
149
+ 'publish_up' => '',
150
+ 'publish_down' => '',
151
+ 'generator_id' => 0,
152
+ 'slide' => '',
153
+ 'description' => '',
154
+ 'thumbnail' => $images[$index],
155
+ 'published' => 1,
156
+ 'first' => 0,
157
+ 'backgroundImage' => $images[$index]
158
+ ), false);
159
+ $slideRows[$i]['id'] = $i;
160
+ }
161
+ }
162
+ for ($i = 0; $i < count($slideRows); $i++) {
163
+ if (isset($extend[$slideRows[$i]['id']])) {
164
+ $slideRows[$i] = $extend[$slideRows[$i]['id']];
165
+ }
166
+ $slide = $this->createSlide($slideRows[$i]);
167
+ if ($slide->isVisible()) {
168
+ $this->slides[] = $slide;
169
+ }
170
+ $this->allEnabledSlides[$i] = $slide;
171
+ }
172
+ }
173
+
174
+ protected function createSlide($slideRow) {
175
+ return new N2SmartSliderSlide($this->slider, $slideRow);
176
+ }
177
+
178
+ protected function slidesWhereQuery() {
179
+ return " AND published = 1 ";
180
+ }
181
+
182
+ public function getNextCacheRefresh() {
183
+ $earlier = 2145916800;
184
+ for ($i = 0; $i < count($this->allEnabledSlides); $i++) {
185
+ $earlier = min($this->allEnabledSlides[$i]->nextCacheRefresh, $earlier);
186
+ }
187
+ return $earlier;
188
+ }
189
+
190
+ public function getDummySlides($count) {
191
+
192
+ }
193
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/slidesadmin.php ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.slider.slide.slides', 'smartslider');
4
+
5
+ class N2SmartSliderSlidesAdmin extends N2SmartSliderSlides
6
+ {
7
+
8
+ protected function slidesWhereQuery() {
9
+ $date = N2Platform::getDate();
10
+ return " AND ((published = 1 AND (publish_up = '0000-00-00 00:00:00' OR publish_up < '{$date}')
11
+ AND (publish_down = '0000-00-00 00:00:00' OR publish_down > '{$date}'))
12
+ OR id = " . N2Request::getInt('slideid') . ") ";
13
+ }
14
+
15
+ public function hasSlides() {
16
+ return true;
17
+ }
18
+
19
+ protected function createSlide($slideRow) {
20
+ return new N2SmartSliderSlideAdmin($this->slider, $slideRow);
21
+ }
22
+
23
+ public function makeSlides($extend = array()) {
24
+
25
+ if (N2Request::getCmd('nextendcontroller') == 'slides') {
26
+
27
+ $slides = &$this->slides;
28
+
29
+ if (N2Request::getCmd('nextendaction') == 'create') {
30
+ if ($this->maximumSlideCount > 0) {
31
+ array_splice($slides, $this->maximumSlideCount - 1);
32
+ }
33
+
34
+ $staticSlide = N2Request::getInt('static', 0);
35
+ $slide = $this->createSlide(array(
36
+ 'id' => 0,
37
+ 'title' => 'Title',
38
+ 'slider' => N2Request::getInt('sliderid'),
39
+ 'publish_up' => '0000-00-00 00:00:00',
40
+ 'publish_down' => '0000-00-00 00:00:00',
41
+ 'published' => 1,
42
+ 'first' => 0,
43
+ 'slide' => '',
44
+ 'description' => '',
45
+ 'thumbnail' => '',
46
+ 'background' => 'ffffff00|*|',
47
+ 'params' => json_encode(array('static-slide' => $staticSlide)),
48
+ 'ordering' => count($slides),
49
+ 'generator_id' => 0
50
+ ));
51
+ if ($slide->isStatic()) {
52
+ $this->slider->addStaticSlide($slide);
53
+
54
+ $this->slider->setStatic(1);
55
+
56
+ if (count($slides) == 0) {
57
+ $slide2 = $this->createSlide(array(
58
+ 'id' => 0,
59
+ 'title' => 'Title',
60
+ 'slider' => N2Request::getInt('sliderid'),
61
+ 'publish_up' => '0000-00-00 00:00:00',
62
+ 'publish_down' => '0000-00-00 00:00:00',
63
+ 'published' => 1,
64
+ 'first' => 0,
65
+ 'slide' => '',
66
+ 'description' => '',
67
+ 'thumbnail' => '',
68
+ 'background' => 'ffffff00|*|',
69
+ 'params' => '',
70
+ 'ordering' => count($slides),
71
+ 'generator_id' => 0
72
+ ));
73
+ array_push($slides, $slide2);
74
+ }
75
+ } else {
76
+
77
+ for ($i = 0; $i < count($slides); $i++) {
78
+ if ($slides[$i]->isStatic()) {
79
+ $this->slider->addStaticSlide($slides[$i]);
80
+ array_splice($slides, $i, 1);
81
+ $i--;
82
+ }
83
+ }
84
+
85
+ array_push($slides, $slide);
86
+ $this->slider->_activeSlide = count($slides) - 1;
87
+ }
88
+ } else {
89
+
90
+ $currentlyEdited = N2Request::getInt('slideid');
91
+ $currentlyEditedSlide = null;
92
+ $isStatic = false;
93
+
94
+ $staticSlidesCount = 0;
95
+ for ($i = 0; $i < count($slides); $i++) {
96
+ if ($slides[$i]->isStatic()) {
97
+ $staticSlidesCount++;
98
+ }
99
+ }
100
+
101
+ $countSlides = count($slides);
102
+
103
+ for ($i = 0; $i < count($slides) && $countSlides > $staticSlidesCount; $i++) {
104
+ if ($slides[$i]->isStatic()) {
105
+ if ($slides[$i]->id == $currentlyEdited) {
106
+ $isStatic = true;
107
+ $this->slider->setStatic(1);
108
+ }
109
+ $this->slider->addStaticSlide($slides[$i]);
110
+ array_splice($slides, $i, 1);
111
+ $i--;
112
+ }
113
+ }
114
+
115
+ if ($isStatic) {
116
+ for ($i = 0; $i < count($this->slider->staticSlides); $i++) {
117
+ if ($this->slider->staticSlides[$i]->id != $currentlyEdited) {
118
+ array_splice($this->slider->staticSlides, $i, 1);
119
+ $i--;
120
+ }
121
+ }
122
+ }
123
+
124
+ for ($i = 0; $i < count($slides); $i++) {
125
+ $slides[$i]->initGenerator($extend);
126
+ }
127
+
128
+ for ($i = count($slides) - 1; $i >= 0; $i--) {
129
+ if ($slides[$i]->hasGenerator()) {
130
+ array_splice($slides, $i, 1, $slides[$i]->expandSlide());
131
+ }
132
+ }
133
+
134
+ if (!$isStatic) {
135
+ for ($i = 0; $i < count($slides); $i++) {
136
+ if ($slides[$i]->id == $currentlyEdited) {
137
+ $this->slider->_activeSlide = $i;
138
+ $currentlyEditedSlide = $slides[$i];
139
+ break;
140
+ }
141
+ }
142
+ } else {
143
+ if (count($slides) == 0) {
144
+ if (count($slides) == 0) {
145
+ $slide2 = $this->createSlide(array(
146
+ 'id' => 0,
147
+ 'title' => 'Title',
148
+ 'slider' => N2Request::getInt('sliderid'),
149
+ 'publish_up' => '0000-00-00 00:00:00',
150
+ 'publish_down' => '0000-00-00 00:00:00',
151
+ 'published' => 1,
152
+ 'first' => 0,
153
+ 'slide' => '',
154
+ 'description' => '',
155
+ 'thumbnail' => '',
156
+ 'background' => 'ffffff00|*|',
157
+ 'params' => '',
158
+ 'ordering' => count($slides),
159
+ 'generator_id' => 0
160
+ ));
161
+ array_push($slides, $slide2);
162
+ }
163
+ }
164
+ $this->slider->_activeSlide = 0;
165
+ $currentlyEditedSlide = $slides[0];
166
+ }
167
+ if ($this->maximumSlideCount > 0) {
168
+ array_splice($slides, $this->maximumSlideCount);
169
+ $found = false;
170
+ for ($i = 0; $i < count($slides); $i++) {
171
+ if ($slides[$i] == $currentlyEditedSlide) {
172
+ $found = true;
173
+ break;
174
+ }
175
+ }
176
+ if (!$found) {
177
+ $this->slider->_activeSlide = count($slides) - 1;
178
+ $slides[$this->slider->_activeSlide] = $currentlyEditedSlide;
179
+ }
180
+ }
181
+ if ($currentlyEditedSlide) {
182
+ $currentlyEditedSlide->setCurrentlyEdited();
183
+ }
184
+ }
185
+ }
186
+ }
187
+ }
188
+
189
+ class N2SmartSliderSlideAdmin extends N2SmartSliderSlide
190
+ {
191
+
192
+ public function setSlidesParams() {
193
+ $this->attributes['data-variables'] = json_encode($this->variables);
194
+ parent::setSlidesParams();
195
+ }
196
+
197
+ protected function addSlideLink() {
198
+
199
+ }
200
+
201
+ public function isVisible() {
202
+ return true;
203
+ }
204
+
205
+ protected function onCreate() {
206
+ }
207
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/type.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ abstract class N2SmartSliderType
4
+ {
5
+
6
+ /**
7
+ * @var N2SmartSliderAbstract
8
+ */
9
+ protected $slider;
10
+
11
+ protected $javaScriptProperties;
12
+
13
+ protected $widgets;
14
+
15
+ public function __construct($slider) {
16
+ $this->slider = $slider;
17
+ $slider->fontSize = intval($slider->params->get('fontsize', '16'));
18
+ }
19
+
20
+ public static function getItemDefaults() {
21
+ return array();
22
+ }
23
+
24
+ public function render() {
25
+
26
+ $this->javaScriptProperties = $this->slider->features->generateJSProperties();
27
+
28
+ $this->widgets = new N2SmartSliderWidgets($this->slider);
29
+
30
+ ob_start();
31
+ $this->renderType();
32
+ return ob_get_clean();
33
+ }
34
+
35
+ protected abstract function renderType();
36
+
37
+ protected function getSliderClasses() {
38
+ return $this->slider->features->fadeOnLoad->getSliderClass();
39
+ }
40
+
41
+ protected function openSliderElement() {
42
+ return N2Html::openTag('div', array(
43
+ 'id' => $this->slider->elementId,
44
+ 'class' => 'n2-ss-slider n2notransition ' . $this->getSliderClasses(),
45
+
46
+ ) + $this->getFontSizeAttributes());
47
+ }
48
+
49
+ private function getFontSizeAttributes() {
50
+ $params = $this->slider->params;
51
+
52
+ return $this->slider->features->responsive->getMinimumFontSizeAttributes() + array(
53
+ 'style' => "font-size: " . $this->slider->fontSize . "px;",
54
+ 'data-fontsize' => $this->slider->fontSize
55
+ );
56
+ }
57
+
58
+ public function getDefaults() {
59
+ return array();
60
+ }
61
+
62
+ /**
63
+ * @param $params N2Data
64
+ */
65
+ public function limitParams($params) {
66
+
67
+ }
68
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/widget/widgets.php ADDED
@@ -0,0 +1,351 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderWidgets
4
+ {
5
+
6
+ public $enabledWidgets = array();
7
+
8
+ public $widgets = array();
9
+
10
+ private $positions = array(
11
+ 1 => array(
12
+ 'side' => 'vertical',
13
+ 'modifierH' => 1,
14
+ 'modifierV' => 1,
15
+ 'stack' => 'vertical',
16
+ 'horizontal' => array(
17
+ 'side' => 'left',
18
+ 'position' => 'width/2-{widgetname}width/2'
19
+ ),
20
+
21
+ 'vertical' => array(
22
+ 'side' => 'bottom',
23
+ 'position' => 'height'
24
+ )
25
+ ),
26
+ 2 => array(
27
+ 'side' => 'both',
28
+ 'modifierH' => 1,
29
+ 'modifierV' => 1,
30
+ 'stack' => 'horizontal',
31
+ 'horizontal' => array(
32
+ 'side' => 'left',
33
+ 'position' => '0'
34
+ ),
35
+
36
+ 'vertical' => array(
37
+ 'side' => 'top',
38
+ 'position' => '0'
39
+ )
40
+ ),
41
+ 3 => array(
42
+ 'side' => 'vertical',
43
+ 'modifierH' => 1,
44
+ 'modifierV' => 1,
45
+ 'stack' => 'vertical',
46
+ 'horizontal' => array(
47
+ 'side' => 'left',
48
+ 'position' => 'width/2-{widgetname}width/2'
49
+ ),
50
+
51
+ 'vertical' => array(
52
+ 'side' => 'top',
53
+ 'position' => '0'
54
+ )
55
+ ),
56
+ 4 => array(
57
+ 'side' => 'both',
58
+ 'modifierH' => 1,
59
+ 'modifierV' => 1,
60
+ 'stack' => 'horizontal',
61
+ 'horizontal' => array(
62
+ 'side' => 'right',
63
+ 'position' => '0'
64
+ ),
65
+
66
+ 'vertical' => array(
67
+ 'side' => 'top',
68
+ 'position' => '0'
69
+ )
70
+ ),
71
+ 5 => array(
72
+ 'side' => 'horizontal',
73
+ 'modifierH' => 1,
74
+ 'modifierV' => 1,
75
+ 'stack' => 'horizontal',
76
+ 'horizontal' => array(
77
+ 'side' => 'right',
78
+ 'position' => 'width'
79
+ ),
80
+
81
+ 'vertical' => array(
82
+ 'side' => 'top',
83
+ 'position' => 'height/2-{widgetname}height/2'
84
+ )
85
+ ),
86
+ 6 => array(
87
+ 'side' => 'horizontal',
88
+ 'modifierH' => 1,
89
+ 'modifierV' => 1,
90
+ 'stack' => 'horizontal',
91
+ 'horizontal' => array(
92
+ 'side' => 'left',
93
+ 'position' => '0'
94
+ ),
95
+
96
+ 'vertical' => array(
97
+ 'side' => 'top',
98
+ 'position' => 'height/2-{widgetname}height/2'
99
+ )
100
+ ),
101
+ 7 => array(
102
+ 'side' => 'horizontal',
103
+ 'modifierH' => 1,
104
+ 'modifierV' => 1,
105
+ 'stack' => 'horizontal',
106
+ 'horizontal' => array(
107
+ 'side' => 'right',
108
+ 'position' => '0'
109
+ ),
110
+
111
+ 'vertical' => array(
112
+ 'side' => 'top',
113
+ 'position' => 'height/2-{widgetname}height/2'
114
+ )
115
+ ),
116
+ 8 => array(
117
+ 'side' => 'horizontal',
118
+ 'modifierH' => 1,
119
+ 'modifierV' => 1,
120
+ 'stack' => 'horizontal',
121
+ 'horizontal' => array(
122
+ 'side' => 'left',
123
+ 'position' => 'width'
124
+ ),
125
+
126
+ 'vertical' => array(
127
+ 'side' => 'top',
128
+ 'position' => 'height/2-{widgetname}height/2'
129
+ )
130
+ ),
131
+ 9 => array(
132
+ 'side' => 'both',
133
+ 'modifierH' => 1,
134
+ 'modifierV' => 1,
135
+ 'stack' => 'horizontal',
136
+ 'horizontal' => array(
137
+ 'side' => 'left',
138
+ 'position' => '0'
139
+ ),
140
+
141
+ 'vertical' => array(
142
+ 'side' => 'bottom',
143
+ 'position' => '0'
144
+ )
145
+ ),
146
+ 10 => array(
147
+ 'side' => 'vertical',
148
+ 'modifierH' => 1,
149
+ 'modifierV' => 1,
150
+ 'stack' => 'vertical',
151
+ 'horizontal' => array(
152
+ 'side' => 'left',
153
+ 'position' => 'width/2-{widgetname}width/2'
154
+ ),
155
+
156
+ 'vertical' => array(
157
+ 'side' => 'bottom',
158
+ 'position' => '0'
159
+ )
160
+ ),
161
+ 11 => array(
162
+ 'side' => 'both',
163
+ 'modifierH' => 1,
164
+ 'modifierV' => 1,
165
+ 'stack' => 'horizontal',
166
+ 'horizontal' => array(
167
+ 'side' => 'right',
168
+ 'position' => '0'
169
+ ),
170
+
171
+ 'vertical' => array(
172
+ 'side' => 'bottom',
173
+ 'position' => '0'
174
+ )
175
+ ),
176
+ 12 => array(
177
+ 'side' => 'vertical',
178
+ 'modifierH' => 1,
179
+ 'modifierV' => 1,
180
+ 'stack' => 'vertical',
181
+ 'horizontal' => array(
182
+ 'side' => 'left',
183
+ 'position' => 'width/2-{widgetname}width/2'
184
+ ),
185
+
186
+ 'vertical' => array(
187
+ 'side' => 'top',
188
+ 'position' => 'height'
189
+ )
190
+ )
191
+ );
192
+
193
+ /**
194
+ * @param $slider N2SmartSlider
195
+ */
196
+ public function __construct($slider) {
197
+
198
+ if (!$slider->isAdmin) {
199
+ $params = $slider->params;
200
+ $plugins = array();
201
+
202
+ N2Plugin::callPlugin('sswidget', 'onWidgetList', array(&$plugins));
203
+
204
+ foreach ($plugins AS $k => $v) {
205
+ $widget = $params->get('widget' . $k);
206
+ if ($widget && $widget != 'disabled') {
207
+ $this->enabledWidgets[$k] = $widget;
208
+ }
209
+ }
210
+
211
+ $positions = array();
212
+ foreach ($this->enabledWidgets AS $k => $v) {
213
+ $class = 'N2SSPluginWidget' . $k . $v;
214
+ if (class_exists($class, false)) {
215
+ $params->fillDefault(call_user_func(array(
216
+ $class,
217
+ 'getDefaults'
218
+ )));
219
+
220
+ $positions += call_user_func_array(array(
221
+ $class,
222
+ 'getPositions'
223
+ ), array(&$params));
224
+ } else {
225
+ unset($this->enabledWidgets[$k]);
226
+ }
227
+ }
228
+
229
+ $this->makePositions($positions, $params);
230
+ foreach ($this->enabledWidgets AS $k => $v) {
231
+ $class = 'N2SSPluginWidget' . $k . $v;
232
+
233
+ $this->widgets[$k] = call_user_func(array(
234
+ $class,
235
+ 'render'
236
+ ), $slider, $slider->elementId, $params);
237
+ }
238
+ }
239
+ }
240
+
241
+ function echoOnce($k) {
242
+ if (isset($this->widgets[$k])) {
243
+ echo $this->widgets[$k];
244
+ unset($this->widgets[$k]);
245
+ }
246
+ }
247
+
248
+ function echoOne($k) {
249
+ if (isset($this->widgets[$k])) {
250
+ echo $this->widgets[$k];
251
+ }
252
+ }
253
+
254
+ function echoRemainder() {
255
+ foreach ($this->widgets AS $v) {
256
+ echo $v . "\n";
257
+ }
258
+ }
259
+
260
+ function makePositions($positions, &$params) {
261
+ $priority = array(
262
+ array(),
263
+ array(),
264
+ array(),
265
+ array()
266
+ );
267
+ foreach ($positions AS $k => $v) {
268
+ list($key, $name) = $v;
269
+ if ($params->get($key . 'mode') == 'simple') {
270
+ $priority[intval($params->get($key . 'stack', 1)) - 1][] = array(
271
+ $k => $positions[$k]
272
+ );
273
+ } else {
274
+ unset($positions[$k]);
275
+ }
276
+ }
277
+
278
+ foreach ($priority AS $current) {
279
+ foreach ($current AS $positions) {
280
+ foreach ($positions AS $k => $v) {
281
+ $this->makePositionByIndex($params, $v[0], $v[1]);
282
+ }
283
+ }
284
+ }
285
+ }
286
+
287
+ function makePositionByIndex(&$params, $key, $name) {
288
+
289
+ $values = array();
290
+
291
+ $area = intval($params->get($key . 'area'));
292
+
293
+ $position = $this->positions[$area];
294
+
295
+ $values['horizontal'] = $position['horizontal']['side'];
296
+ $values['horizontal-position'] = str_replace('{widgetname}', $name, $position['horizontal']['position']);
297
+ $values['horizontal-unit'] = 'px';
298
+
299
+ $values['vertical'] = $position['vertical']['side'];
300
+ $values['vertical-position'] = str_replace('{widgetname}', $name, $position['vertical']['position']);
301
+ $values['vertical-unit'] = 'px';
302
+
303
+ $offset = intval($params->get($key . 'offset', 0));
304
+
305
+ if ($offset != 0 && ($position['side'] == 'vertical' || $position['side'] == 'both')) {
306
+ $values['vertical-position'] .= "+" . $position['modifierV'] * $offset;
307
+ }
308
+
309
+ if ($offset != 0 && ($position['side'] == 'horizontal' || $position['side'] == 'both')) {
310
+ $values['horizontal-position'] .= "+" . $position['modifierH'] * $offset;
311
+ }
312
+
313
+ if ($position['stack'] == 'vertical') {
314
+ if ($offset > 0) {
315
+ $calc = "({$name}height > 0 ? {$name}height+{$offset} : 0)";
316
+ } else {
317
+ $calc = "{$name}height";
318
+ }
319
+ if ($position['modifierV'] != 1) {
320
+ $calc = $position['modifierV'] . "*{$calc}";
321
+ }
322
+ $this->positions[$area]['vertical']['position'] .= '+' . $calc;
323
+ /* check if we need stacking on both side
324
+ if ($position['side'] == 'both') {
325
+ $this->positions[$area]['horizontal']['position'] .= '+(' . $position['modifierH'] . "*{$offset})";
326
+ }
327
+ */
328
+ }
329
+
330
+ if ($position['stack'] == 'horizontal') {
331
+ if ($offset > 0) {
332
+ $calc = "({$name}width > 0 ? {$name}width+{$offset} : 0)";
333
+ } else {
334
+ $calc = "{$name}width";
335
+ }
336
+ if ($position['modifierH'] != 1) {
337
+ $calc = $position['modifierH'] . "*{$calc}";
338
+ }
339
+ $this->positions[$area]['horizontal']['position'] .= '+' . $calc;
340
+ /* check if we need stacking on both side
341
+ if ($position['side'] == 'both') {
342
+ $this->positions[$area]['vertical']['position'] .= '+(' . $position['modifierV'] . "*{$offset})";
343
+ }
344
+ */
345
+ }
346
+
347
+ foreach ($values AS $k => $v) {
348
+ $params->set($key . $k, $v);
349
+ }
350
+ }
351
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/storage.php ADDED
@@ -0,0 +1,1934 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderStorage
4
+ {
5
+
6
+
7
+ public static function init() {
8
+ N2Pluggable::addAction('fontStorage', 'N2SmartSliderStorage::fontStorage');
9
+ N2Pluggable::addAction('styleStorage', 'N2SmartSliderStorage::styleStorage');
10
+ N2Pluggable::addAction('animationStorage', 'N2SmartSliderStorage::animationStorage');
11
+ N2Pluggable::addAction('splitTextAnimationStorage', 'N2SmartSliderStorage::splitTextAnimationStorage');
12
+ N2Pluggable::addAction('backgroundAnimationStorage', 'N2SmartSliderStorage::backgroundAnimationStorage');
13
+ N2Pluggable::addAction('postBackgroundAnimationStorage', 'N2SmartSliderStorage::postBackgroundAnimationStorage');
14
+ N2Pluggable::addAction('layoutStorage', 'N2SmartSliderStorage::layoutStorage');
15
+ }
16
+
17
+ public static function styleStorage(&$sets, &$styles) {
18
+ N2Base::getApplicationInfo('smartslider')
19
+ ->loadLocale();
20
+
21
+ array_push($sets, array(
22
+ 'id' => 1000,
23
+ 'referencekey' => '',
24
+ 'value' => n2_('Heading')
25
+ ));
26
+
27
+ array_push($styles, array(
28
+ 'id' => 1001,
29
+ 'referencekey' => 1000,
30
+ 'value' => array(
31
+ 'name' => n2_('Blue'),
32
+ 'data' => array(
33
+ array(
34
+ 'backgroundcolor' => '01add3ff',
35
+ 'padding' => '5|*|20|*|5|*|20|*|px',
36
+ ),
37
+
38
+ ),
39
+ )
40
+ ));
41
+
42
+ array_push($styles, array(
43
+ 'id' => 1002,
44
+ 'referencekey' => 1000,
45
+ 'value' => array(
46
+ 'name' => n2_('White'),
47
+ 'data' => array(
48
+ array(
49
+ 'backgroundcolor' => 'ffffffcc',
50
+ 'padding' => '5|*|20|*|5|*|20|*|px',
51
+ ),
52
+
53
+ ),
54
+ )
55
+ ));
56
+
57
+ array_push($styles, array(
58
+ 'id' => 1003,
59
+ 'referencekey' => 1000,
60
+ 'value' => array(
61
+ 'name' => n2_('Green'),
62
+ 'data' => array(
63
+ array(
64
+ 'backgroundcolor' => '5cba3cff',
65
+ 'padding' => '5|*|20|*|5|*|20|*|px',
66
+ ),
67
+
68
+ ),
69
+ )
70
+ ));
71
+
72
+ array_push($styles, array(
73
+ 'id' => 1004,
74
+ 'referencekey' => 1000,
75
+ 'value' => array(
76
+ 'name' => n2_('Purple'),
77
+ 'data' => array(
78
+ array(
79
+ 'backgroundcolor' => '8757b2ff',
80
+ 'padding' => '5|*|20|*|5|*|20|*|px',
81
+ ),
82
+
83
+ ),
84
+ )
85
+ ));
86
+
87
+ array_push($styles, array(
88
+ 'id' => 1005,
89
+ 'referencekey' => 1000,
90
+ 'value' => array(
91
+ 'name' => n2_('Grey'),
92
+ 'data' => array(
93
+ array(
94
+ 'backgroundcolor' => '81898dff',
95
+ 'padding' => '5|*|20|*|5|*|20|*|px',
96
+ ),
97
+
98
+ ),
99
+ )
100
+ ));
101
+
102
+ array_push($styles, array(
103
+ 'id' => 1006,
104
+ 'referencekey' => 1000,
105
+ 'value' => array(
106
+ 'name' => n2_('Black'),
107
+ 'data' => array(
108
+ array(
109
+ 'backgroundcolor' => '000000cc',
110
+ 'padding' => '5|*|20|*|5|*|20|*|px',
111
+ ),
112
+
113
+ ),
114
+ )
115
+ ));
116
+
117
+ array_push($styles, array(
118
+ 'id' => 1007,
119
+ 'referencekey' => 1000,
120
+ 'value' => array(
121
+ 'name' => n2_('Rounded Blue'),
122
+ 'data' => array(
123
+ array(
124
+ 'backgroundcolor' => '01add3ff',
125
+ 'padding' => '5|*|20|*|5|*|20|*|px',
126
+ 'borderradius' => '3',
127
+ ),
128
+
129
+ ),
130
+ )
131
+ ));
132
+
133
+ array_push($styles, array(
134
+ 'id' => 1008,
135
+ 'referencekey' => 1000,
136
+ 'value' => array(
137
+ 'name' => n2_('Rounded Green'),
138
+ 'data' => array(
139
+ array(
140
+ 'backgroundcolor' => '5cba3cff',
141
+ 'padding' => '5|*|20|*|5|*|20|*|px',
142
+ 'borderradius' => '3',
143
+ ),
144
+
145
+ ),
146
+ )
147
+ ));
148
+
149
+ array_push($styles, array(
150
+ 'id' => 1009,
151
+ 'referencekey' => 1000,
152
+ 'value' => array(
153
+ 'name' => n2_('Rounded Purple'),
154
+ 'data' => array(
155
+ array(
156
+ 'backgroundcolor' => '8757b2ff',
157
+ 'padding' => '5|*|20|*|5|*|20|*|px',
158
+ 'borderradius' => '3',
159
+ ),
160
+
161
+ ),
162
+ )
163
+ ));
164
+
165
+ array_push($styles, array(
166
+ 'id' => 1010,
167
+ 'referencekey' => 1000,
168
+ 'value' => array(
169
+ 'name' => n2_('Rounded Grey'),
170
+ 'data' => array(
171
+ array(
172
+ 'backgroundcolor' => '81898dff',
173
+ 'padding' => '5|*|20|*|5|*|20|*|px',
174
+ 'borderradius' => '3',
175
+ ),
176
+
177
+ ),
178
+ )
179
+ ));
180
+
181
+ array_push($styles, array(
182
+ 'id' => 1011,
183
+ 'referencekey' => 1000,
184
+ 'value' => array(
185
+ 'name' => n2_('Rounded White'),
186
+ 'data' => array(
187
+ array(
188
+ 'backgroundcolor' => 'ffffffcc',
189
+ 'padding' => '5|*|20|*|5|*|20|*|px',
190
+ 'borderradius' => '3',
191
+ ),
192
+
193
+ ),
194
+ )
195
+ ));
196
+
197
+ array_push($styles, array(
198
+ 'id' => 1012,
199
+ 'referencekey' => 1000,
200
+ 'value' => array(
201
+ 'name' => n2_('Rounded Black'),
202
+ 'data' => array(
203
+ array(
204
+ 'backgroundcolor' => '000000cc',
205
+ 'padding' => '5|*|20|*|5|*|20|*|px',
206
+ 'borderradius' => '3',
207
+ ),
208
+
209
+ ),
210
+ )
211
+ ));
212
+
213
+ array_push($styles, array(
214
+ 'id' => 1013,
215
+ 'referencekey' => 1000,
216
+ 'value' => array(
217
+ 'name' => n2_('Border White'),
218
+ 'data' => array(
219
+ array(
220
+ 'backgroundcolor' => '00000000',
221
+ 'padding' => '5|*|20|*|5|*|20|*|px',
222
+ 'border' => '2|*|solid|*|ffffffff',
223
+ ),
224
+
225
+ ),
226
+ )
227
+ ));
228
+
229
+ array_push($styles, array(
230
+ 'id' => 1014,
231
+ 'referencekey' => 1000,
232
+ 'value' => array(
233
+ 'name' => n2_('Border Dark'),
234
+ 'data' => array(
235
+ array(
236
+ 'backgroundcolor' => '00000000',
237
+ 'padding' => '5|*|20|*|5|*|20|*|px',
238
+ 'border' => '2|*|solid|*|000000cc',
239
+ ),
240
+
241
+ ),
242
+ )
243
+ ));
244
+
245
+
246
+ array_push($sets, array(
247
+ 'id' => 1100,
248
+ 'referencekey' => '',
249
+ 'value' => n2_('Button')
250
+ ));
251
+
252
+ array_push($styles, array(
253
+ 'id' => 1101,
254
+ 'referencekey' => 1100,
255
+ 'value' => array(
256
+ 'name' => n2_('Rectangle Green'),
257
+ 'data' => array(
258
+ array(
259
+ 'backgroundcolor' => '5cba3cff',
260
+ 'padding' => '10|*|30|*|10|*|30|*|px',
261
+ ),
262
+
263
+ ),
264
+ )
265
+ ));
266
+
267
+ array_push($styles, array(
268
+ 'id' => 1102,
269
+ 'referencekey' => 1100,
270
+ 'value' => array(
271
+ 'name' => n2_('Rectangle Blue'),
272
+ 'data' => array(
273
+ array(
274
+ 'backgroundcolor' => '01add3ff',
275
+ 'padding' => '10|*|30|*|10|*|30|*|px',
276
+ ),
277
+
278
+ ),
279
+ )
280
+ ));
281
+
282
+ array_push($styles, array(
283
+ 'id' => 1103,
284
+ 'referencekey' => 1100,
285
+ 'value' => array(
286
+ 'name' => n2_('Rectangle Purple'),
287
+ 'data' => array(
288
+ array(
289
+ 'backgroundcolor' => '8757b2ff',
290
+ 'padding' => '10|*|30|*|10|*|30|*|px',
291
+ ),
292
+
293
+ ),
294
+ )
295
+ ));
296
+
297
+ array_push($styles, array(
298
+ 'id' => 1104,
299
+ 'referencekey' => 1100,
300
+ 'value' => array(
301
+ 'name' => n2_('Rectangle Grey'),
302
+ 'data' => array(
303
+ array(
304
+ 'backgroundcolor' => '81898dff',
305
+ 'padding' => '10|*|30|*|10|*|30|*|px',
306
+ ),
307
+
308
+ ),
309
+ )
310
+ ));
311
+
312
+ array_push($styles, array(
313
+ 'id' => 1105,
314
+ 'referencekey' => 1100,
315
+ 'value' => array(
316
+ 'name' => n2_('Rounded Rectangle Green'),
317
+ 'data' => array(
318
+ array(
319
+ 'backgroundcolor' => '5cba3cff',
320
+ 'padding' => '10|*|30|*|10|*|30|*|px',
321
+ 'borderradius' => '3',
322
+ ),
323
+ array(
324
+ 'backgroundcolor' => '58ad3bff',
325
+ ),
326
+ ),
327
+ )
328
+ ));
329
+
330
+ array_push($styles, array(
331
+ 'id' => 1106,
332
+ 'referencekey' => 1100,
333
+ 'value' => array(
334
+ 'name' => n2_('Rounded Rectangle Blue'),
335
+ 'data' => array(
336
+ array(
337
+ 'backgroundcolor' => '01add3ff',
338
+ 'padding' => '10|*|30|*|10|*|30|*|px',
339
+ 'borderradius' => '3',
340
+ ),
341
+ array(
342
+ 'backgroundcolor' => '04a0c3ff',
343
+ ),
344
+ ),
345
+ )
346
+ ));
347
+
348
+ array_push($styles, array(
349
+ 'id' => 1107,
350
+ 'referencekey' => 1100,
351
+ 'value' => array(
352
+ 'name' => n2_('Rounded Rectangle Purple'),
353
+ 'data' => array(
354
+ array(
355
+ 'backgroundcolor' => '8757b2ff',
356
+ 'padding' => '10|*|30|*|10|*|30|*|px',
357
+ 'borderradius' => '3',
358
+ ),
359
+ array(
360
+ 'backgroundcolor' => '7b51a1ff',
361
+ ),
362
+ ),
363
+ )
364
+ ));
365
+
366
+ array_push($styles, array(
367
+ 'id' => 1108,
368
+ 'referencekey' => 1100,
369
+ 'value' => array(
370
+ 'name' => n2_('Rounded Grey'),
371
+ 'data' => array(
372
+ array(
373
+ 'backgroundcolor' => '81898dff',
374
+ 'padding' => '10|*|30|*|10|*|30|*|px',
375
+ 'borderradius' => '3',
376
+ ),
377
+
378
+ ),
379
+ )
380
+ ));
381
+
382
+ array_push($styles, array(
383
+ 'id' => 1109,
384
+ 'referencekey' => 1100,
385
+ 'value' => array(
386
+ 'name' => n2_('Rounded Green'),
387
+ 'data' => array(
388
+ array(
389
+ 'backgroundcolor' => '5cba3cff',
390
+ 'padding' => '10|*|30|*|10|*|30|*|px',
391
+ 'borderradius' => '30',
392
+ ),
393
+
394
+ ),
395
+ )
396
+ ));
397
+
398
+ array_push($styles, array(
399
+ 'id' => 1110,
400
+ 'referencekey' => 1100,
401
+ 'value' => array(
402
+ 'name' => n2_('Rounded Blue'),
403
+ 'data' => array(
404
+ array(
405
+ 'backgroundcolor' => '01add3ff',
406
+ 'padding' => '10|*|30|*|10|*|30|*|px',
407
+ 'borderradius' => '30',
408
+ ),
409
+
410
+ ),
411
+ )
412
+ ));
413
+
414
+ array_push($styles, array(
415
+ 'id' => 1111,
416
+ 'referencekey' => 1100,
417
+ 'value' => array(
418
+ 'name' => n2_('Rounded Purple'),
419
+ 'data' => array(
420
+ array(
421
+ 'backgroundcolor' => '8757b2ff',
422
+ 'padding' => '10|*|30|*|10|*|30|*|px',
423
+ 'borderradius' => '30',
424
+ ),
425
+
426
+ ),
427
+ )
428
+ ));
429
+
430
+ array_push($styles, array(
431
+ 'id' => 1112,
432
+ 'referencekey' => 1100,
433
+ 'value' => array(
434
+ 'name' => n2_('Rounded Grey'),
435
+ 'data' => array(
436
+ array(
437
+ 'backgroundcolor' => '81898dff',
438
+ 'padding' => '10|*|30|*|10|*|30|*|px',
439
+ 'borderradius' => '30',
440
+ ),
441
+
442
+ ),
443
+ )
444
+ ));
445
+
446
+ array_push($styles, array(
447
+ 'id' => 1113,
448
+ 'referencekey' => 1100,
449
+ 'value' => array(
450
+ 'name' => n2_('Border Dark'),
451
+ 'data' => array(
452
+ array(
453
+ 'backgroundcolor' => '00000000',
454
+ 'padding' => '10|*|30|*|10|*|30|*|px',
455
+ 'border' => '2|*|solid|*|000000cc',
456
+ ),
457
+
458
+ ),
459
+ )
460
+ ));
461
+
462
+ array_push($styles, array(
463
+ 'id' => 1114,
464
+ 'referencekey' => 1100,
465
+ 'value' => array(
466
+ 'name' => n2_('Border Light'),
467
+ 'data' => array(
468
+ array(
469
+ 'backgroundcolor' => '00000000',
470
+ 'padding' => '10|*|30|*|10|*|30|*|px',
471
+ 'border' => '2|*|solid|*|ffffffff',
472
+ ),
473
+
474
+ ),
475
+ )
476
+ ));
477
+
478
+ array_push($sets, array(
479
+ 'id' => 1800,
480
+ 'referencekey' => '',
481
+ 'value' => n2_('Other')
482
+ ));
483
+
484
+ array_push($styles, array(
485
+ 'id' => 1801,
486
+ 'referencekey' => 1800,
487
+ 'value' => array(
488
+ 'name' => n2_('List'),
489
+ 'data' => array(
490
+ array(
491
+ 'padding' => '10|*|20|*|10|*|20|*|px',
492
+ 'extra' => 'margin:0;'
493
+ ),
494
+
495
+ ),
496
+ )
497
+ ));
498
+
499
+ array_push($sets, array(
500
+ 'id' => 1900,
501
+ 'referencekey' => '',
502
+ 'value' => n2_('My styles')
503
+ ));
504
+ }
505
+
506
+ public static function fontStorage(&$sets, &$fonts) {
507
+ N2Base::getApplicationInfo('smartslider')
508
+ ->loadLocale();
509
+
510
+ array_push($sets, array(
511
+ 'id' => 1000,
512
+ 'referencekey' => '',
513
+ 'value' => n2_('Default')
514
+ ));
515
+
516
+ array_push($fonts, array(
517
+ 'id' => 1001,
518
+ 'referencekey' => 1000,
519
+ 'value' => array(
520
+ 'name' => n2_('X-small Light'),
521
+ 'data' => array(
522
+ array(
523
+ 'color' => 'ffffffff',
524
+ 'size' => '12||px',
525
+ ),
526
+
527
+
528
+ ),
529
+ )
530
+ ));
531
+ array_push($fonts, array(
532
+ 'id' => 1002,
533
+ 'referencekey' => 1000,
534
+ 'value' => array(
535
+ 'name' => n2_('X-small Dark'),
536
+ 'data' => array(
537
+ array(
538
+ 'color' => '282828ff',
539
+ 'size' => '12||px',
540
+ ),
541
+
542
+
543
+ ),
544
+ )
545
+ ));
546
+ array_push($fonts, array(
547
+ 'id' => 1003,
548
+ 'referencekey' => 1000,
549
+ 'value' => array(
550
+ 'name' => n2_('Small Light'),
551
+ 'data' => array(
552
+ array(
553
+ 'color' => 'ffffffff',
554
+ 'size' => '14||px',
555
+ ),
556
+
557
+
558
+ ),
559
+ )
560
+ ));
561
+ array_push($fonts, array(
562
+ 'id' => 1004,
563
+ 'referencekey' => 1000,
564
+ 'value' => array(
565
+ 'name' => n2_('Small Dark'),
566
+ 'data' => array(
567
+ array(
568
+ 'color' => '282828ff',
569
+ 'size' => '14||px',
570
+ ),
571
+
572
+
573
+ ),
574
+ )
575
+ ));
576
+ array_push($fonts, array(
577
+ 'id' => 1005,
578
+ 'referencekey' => 1000,
579
+ 'value' => array(
580
+ 'name' => n2_('Medium Light'),
581
+ 'data' => array(
582
+ array(
583
+ 'color' => 'ffffffff',
584
+ 'size' => '24||px',
585
+ ),
586
+
587
+
588
+ ),
589
+ )
590
+ ));
591
+ array_push($fonts, array(
592
+ 'id' => 1006,
593
+ 'referencekey' => 1000,
594
+ 'value' => array(
595
+ 'name' => n2_('Medium Dark'),
596
+ 'data' => array(
597
+ array(
598
+ 'color' => '282828ff',
599
+ 'size' => '24||px',
600
+ ),
601
+
602
+
603
+ ),
604
+ )
605
+ ));
606
+ array_push($fonts, array(
607
+ 'id' => 1007,
608
+ 'referencekey' => 1000,
609
+ 'value' => array(
610
+ 'name' => n2_('Large Light'),
611
+ 'data' => array(
612
+ array(
613
+ 'color' => 'ffffffff',
614
+ 'size' => '30||px',
615
+ ),
616
+
617
+
618
+ ),
619
+ )
620
+ ));
621
+ array_push($fonts, array(
622
+ 'id' => 1008,
623
+ 'referencekey' => 1000,
624
+ 'value' => array(
625
+ 'name' => n2_('Large Dark'),
626
+ 'data' => array(
627
+ array(
628
+ 'color' => '282828ff',
629
+ 'size' => '30||px',
630
+ ),
631
+
632
+
633
+ ),
634
+ )
635
+ ));
636
+ array_push($fonts, array(
637
+ 'id' => 1009,
638
+ 'referencekey' => 1000,
639
+ 'value' => array(
640
+ 'name' => n2_('X-large Light'),
641
+ 'data' => array(
642
+ array(
643
+ 'color' => 'ffffffff',
644
+ 'size' => '36||px',
645
+ ),
646
+
647
+
648
+ ),
649
+ )
650
+ ));
651
+ array_push($fonts, array(
652
+ 'id' => 1010,
653
+ 'referencekey' => 1000,
654
+ 'value' => array(
655
+ 'name' => n2_('X-large Dark'),
656
+ 'data' => array(
657
+ array(
658
+ 'color' => '282828ff',
659
+ 'size' => '36||px',
660
+ ),
661
+
662
+
663
+ ),
664
+ )
665
+ ));
666
+
667
+ array_push($sets, array(
668
+ 'id' => 1100,
669
+ 'referencekey' => '',
670
+ 'value' => n2_('Center')
671
+ ));
672
+
673
+ array_push($fonts, array(
674
+ 'id' => 1101,
675
+ 'referencekey' => 1100,
676
+ 'value' => array(
677
+ 'name' => n2_('X-small Light'),
678
+ 'data' => array(
679
+ array(
680
+ 'color' => 'ffffffff',
681
+ 'size' => '12||px',
682
+ 'align' => 'center'
683
+ ),
684
+
685
+
686
+ ),
687
+ )
688
+ ));
689
+ array_push($fonts, array(
690
+ 'id' => 1102,
691
+ 'referencekey' => 1100,
692
+ 'value' => array(
693
+ 'name' => n2_('X-small Dark'),
694
+ 'data' => array(
695
+ array(
696
+ 'color' => '282828ff',
697
+ 'size' => '12||px',
698
+ 'align' => 'center'
699
+ ),
700
+
701
+
702
+ ),
703
+ )
704
+ ));
705
+ array_push($fonts, array(
706
+ 'id' => 1103,
707
+ 'referencekey' => 1100,
708
+ 'value' => array(
709
+ 'name' => n2_('Small Light'),
710
+ 'data' => array(
711
+ array(
712
+ 'color' => 'ffffffff',
713
+ 'size' => '14||px',
714
+ 'align' => 'center'
715
+ ),
716
+
717
+
718
+ ),
719
+ )
720
+ ));
721
+ array_push($fonts, array(
722
+ 'id' => 1104,
723
+ 'referencekey' => 1100,
724
+ 'value' => array(
725
+ 'name' => n2_('Small Dark'),
726
+ 'data' => array(
727
+ array(
728
+ 'color' => '282828ff',
729
+ 'size' => '14||px',
730
+ 'align' => 'center'
731
+ ),
732
+
733
+
734
+ ),
735
+ )
736
+ ));
737
+ array_push($fonts, array(
738
+ 'id' => 1105,
739
+ 'referencekey' => 1100,
740
+ 'value' => array(
741
+ 'name' => n2_('Medium Light'),
742
+ 'data' => array(
743
+ array(
744
+ 'color' => 'ffffffff',
745
+ 'size' => '24||px',
746
+ 'align' => 'center'
747
+ ),
748
+
749
+
750
+ ),
751
+ )
752
+ ));
753
+ array_push($fonts, array(
754
+ 'id' => 1106,
755
+ 'referencekey' => 1100,
756
+ 'value' => array(
757
+ 'name' => n2_('Medium Dark'),
758
+ 'data' => array(
759
+ array(
760
+ 'color' => '282828ff',
761
+ 'size' => '24||px',
762
+ 'align' => 'center'
763
+ ),
764
+
765
+
766
+ ),
767
+ )
768
+ ));
769
+ array_push($fonts, array(
770
+ 'id' => 1107,
771
+ 'referencekey' => 1100,
772
+ 'value' => array(
773
+ 'name' => n2_('Large Light'),
774
+ 'data' => array(
775
+ array(
776
+ 'color' => 'ffffffff',
777
+ 'size' => '30||px',
778
+ 'align' => 'center'
779
+ ),
780
+
781
+
782
+ ),
783
+ )
784
+ ));
785
+ array_push($fonts, array(
786
+ 'id' => 1108,
787
+ 'referencekey' => 1100,
788
+ 'value' => array(
789
+ 'name' => n2_('Large Dark'),
790
+ 'data' => array(
791
+ array(
792
+ 'color' => '282828ff',
793
+ 'size' => '30||px',
794
+ 'align' => 'center'
795
+ ),
796
+
797
+
798
+ ),
799
+ )
800
+ ));
801
+ array_push($fonts, array(
802
+ 'id' => 1109,
803
+ 'referencekey' => 1100,
804
+ 'value' => array(
805
+ 'name' => n2_('X-large Light'),
806
+ 'data' => array(
807
+ array(
808
+ 'color' => 'ffffffff',
809
+ 'size' => '36||px',
810
+ 'align' => 'center'
811
+ ),
812
+
813
+
814
+ ),
815
+ )
816
+ ));
817
+ array_push($fonts, array(
818
+ 'id' => 1110,
819
+ 'referencekey' => 1100,
820
+ 'value' => array(
821
+ 'name' => n2_('X-large Dark'),
822
+ 'data' => array(
823
+ array(
824
+ 'color' => '282828ff',
825
+ 'size' => '36||px',
826
+ 'align' => 'center'
827
+ ),
828
+
829
+
830
+ ),
831
+ )
832
+ ));
833
+
834
+ array_push($sets, array(
835
+ 'id' => 1300,
836
+ 'referencekey' => '',
837
+ 'value' => n2_('Link')
838
+ ));
839
+ array_push($fonts, array(
840
+ 'id' => 1303,
841
+ 'referencekey' => 1300,
842
+ 'value' => array(
843
+ 'name' => n2_('Small Light'),
844
+ 'data' => array(
845
+ array(
846
+ 'color' => 'ffffffff',
847
+ 'size' => '14||px',
848
+ 'align' => 'left'
849
+ ),
850
+ array(
851
+ 'color' => '1890d7ff'
852
+ ),
853
+
854
+ ),
855
+ )
856
+ ));
857
+ array_push($fonts, array(
858
+ 'id' => 1304,
859
+ 'referencekey' => 1300,
860
+ 'value' => array(
861
+ 'name' => n2_('Small Dark'),
862
+ 'data' => array(
863
+ array(
864
+ 'color' => '282828ff',
865
+ 'size' => '14||px',
866
+ 'align' => 'left'
867
+ ),
868
+ array(
869
+ 'color' => '1890d7ff'
870
+ ),
871
+
872
+ ),
873
+ )
874
+ ));
875
+
876
+ array_push($sets, array(
877
+ 'id' => 1900,
878
+ 'referencekey' => '',
879
+ 'value' => n2_('My fonts')
880
+ ));
881
+ }
882
+
883
+ public static function animationStorage(&$sets, &$animations) {
884
+ N2Base::getApplicationInfo('smartslider')
885
+ ->loadLocale();
886
+
887
+ array_push($sets, array(
888
+ 'id' => 1000,
889
+ 'referencekey' => '',
890
+ 'value' => n2_('Simple')
891
+ ));
892
+ }
893
+
894
+ public static function splitTextAnimationStorage(&$sets, &$animations) {
895
+ N2Base::getApplicationInfo('smartslider')
896
+ ->loadLocale();
897
+
898
+ array_push($sets, array(
899
+ 'id' => 1000,
900
+ 'referencekey' => '',
901
+ 'value' => n2_('Default')
902
+ ));
903
+
904
+ array_push($animations, array(
905
+ 'id' => 1001,
906
+ 'referencekey' => 1000,
907
+ 'value' => array(
908
+ 'name' => n2_('Fade'),
909
+ 'data' => array(
910
+ 'transformOrigin' => '50|*|50|*|0',
911
+ 'animation' => array(
912
+ 'opacity' => 0
913
+ )
914
+ )
915
+ )
916
+ ));
917
+
918
+ array_push($animations, array(
919
+ 'id' => 1002,
920
+ 'referencekey' => 1000,
921
+ 'value' => array(
922
+ 'name' => n2_('Left'),
923
+ 'data' => array(
924
+ 'transformOrigin' => '50|*|50|*|0',
925
+ 'animation' => array(
926
+ 'opacity' => 0,
927
+ 'x' => -100
928
+ )
929
+ )
930
+ )
931
+ ));
932
+
933
+ array_push($animations, array(
934
+ 'id' => 1003,
935
+ 'referencekey' => 1000,
936
+ 'value' => array(
937
+ 'name' => n2_('Right'),
938
+ 'data' => array(
939
+ 'transformOrigin' => '50|*|50|*|0',
940
+ 'animation' => array(
941
+ 'opacity' => 0,
942
+ 'x' => 100
943
+ )
944
+ )
945
+ )
946
+ ));
947
+
948
+ array_push($animations, array(
949
+ 'id' => 1004,
950
+ 'referencekey' => 1000,
951
+ 'value' => array(
952
+ 'name' => n2_('Top'),
953
+ 'data' => array(
954
+ 'transformOrigin' => '50|*|50|*|0',
955
+ 'animation' => array(
956
+ 'opacity' => 0,
957
+ 'y' => -80
958
+ )
959
+ )
960
+ )
961
+ ));
962
+
963
+ array_push($animations, array(
964
+ 'id' => 1005,
965
+ 'referencekey' => 1000,
966
+ 'value' => array(
967
+ 'name' => n2_('Bottom'),
968
+ 'data' => array(
969
+ 'transformOrigin' => '50|*|50|*|0',
970
+ 'animation' => array(
971
+ 'opacity' => 0,
972
+ 'y' => 80
973
+ )
974
+ )
975
+ )
976
+ ));
977
+
978
+ array_push($animations, array(
979
+ 'id' => 1006,
980
+ 'referencekey' => 1000,
981
+ 'value' => array(
982
+ 'name' => n2_('Scale up'),
983
+ 'data' => array(
984
+ 'transformOrigin' => '50|*|50|*|0',
985
+ 'animation' => array(
986
+ 'opacity' => 0,
987
+ 'scale' => 0
988
+ )
989
+ )
990
+ )
991
+ ));
992
+
993
+ array_push($animations, array(
994
+ 'id' => 1007,
995
+ 'referencekey' => 1000,
996
+ 'value' => array(
997
+ 'name' => n2_('Scale down'),
998
+ 'data' => array(
999
+ 'transformOrigin' => '50|*|50|*|0',
1000
+ 'animation' => array(
1001
+ 'opacity' => 0,
1002
+ 'scale' => 5
1003
+ )
1004
+ )
1005
+ )
1006
+ ));
1007
+
1008
+ array_push($animations, array(
1009
+ 'id' => 1008,
1010
+ 'referencekey' => 1000,
1011
+ 'value' => array(
1012
+ 'name' => n2_('Warp'),
1013
+ 'data' => array(
1014
+ 'transformOrigin' => '50|*|50|*|0',
1015
+ 'animation' => array(
1016
+ 'ease' => 'easeInBack',
1017
+ 'opacity' => 0,
1018
+ 'x' => 20,
1019
+ 'scale' => 5,
1020
+ 'rotationX' => 90
1021
+ )
1022
+ )
1023
+ )
1024
+ ));
1025
+
1026
+ array_push($animations, array(
1027
+ 'id' => 1009,
1028
+ 'referencekey' => 1000,
1029
+ 'value' => array(
1030
+ 'name' => n2_('Twirl'),
1031
+ 'data' => array(
1032
+ 'transformOrigin' => '100|*|100|*|0',
1033
+ 'animation' => array(
1034
+ 'ease' => 'easeInOutBack',
1035
+ 'opacity' => 0,
1036
+ 'scale' => 5,
1037
+ 'rotationX' => 360,
1038
+ 'rotationY' => -360,
1039
+ 'rotationZ' => 360
1040
+ )
1041
+ )
1042
+ )
1043
+ ));
1044
+
1045
+ array_push($animations, array(
1046
+ 'id' => 1010,
1047
+ 'referencekey' => 1000,
1048
+ 'value' => array(
1049
+ 'name' => n2_('Domino'),
1050
+ 'data' => array(
1051
+ 'transformOrigin' => '0|*|0|*|0',
1052
+ 'animation' => array(
1053
+ 'ease' => 'easeInBack',
1054
+ 'rotationY' => 90
1055
+ )
1056
+ )
1057
+ )
1058
+ ));
1059
+
1060
+ array_push($animations, array(
1061
+ 'id' => 1011,
1062
+ 'referencekey' => 1000,
1063
+ 'value' => array(
1064
+ 'name' => n2_('Stand up'),
1065
+ 'data' => array(
1066
+ 'transformOrigin' => '100|*|100|*|0',
1067
+ 'animation' => array(
1068
+ 'ease' => 'easeInOutBack',
1069
+ 'opacity' => 0,
1070
+ 'rotationZ' => 90
1071
+ )
1072
+ )
1073
+ )
1074
+ ));
1075
+
1076
+ array_push($animations, array(
1077
+ 'id' => 1012,
1078
+ 'referencekey' => 1000,
1079
+ 'value' => array(
1080
+ 'name' => n2_('Rotate down'),
1081
+ 'data' => array(
1082
+ 'transformOrigin' => '50|*|0|*|0',
1083
+ 'animation' => array(
1084
+ 'ease' => 'easeInBack',
1085
+ 'rotationX' => 90
1086
+ )
1087
+ )
1088
+ )
1089
+ ));
1090
+
1091
+ array_push($sets, array(
1092
+ 'id' => 1900,
1093
+ 'referencekey' => '',
1094
+ 'value' => n2_('My split text animations')
1095
+ ));
1096
+ }
1097
+
1098
+ public static function backgroundAnimationStorage(&$sets, &$animations) {
1099
+ N2Base::getApplicationInfo('smartslider')
1100
+ ->loadLocale();
1101
+
1102
+ array_push($sets, array(
1103
+ 'id' => 1000,
1104
+ 'referencekey' => '',
1105
+ 'value' => n2_('Default')
1106
+ ));
1107
+
1108
+ array_push($animations, array(
1109
+ "id" => 1402,
1110
+ 'referencekey' => 1000,
1111
+ "value" => array(
1112
+ 'name' => n2_('Scale to left'),
1113
+ 'data' => array(
1114
+ 'type' => 'Flat',
1115
+ 'tiles' => array(
1116
+ 'crop' => true,
1117
+ 'delay' => 0,
1118
+ 'sequence' => 'ForwardDiagonal'
1119
+ ),
1120
+ 'main' => array(
1121
+ 'type' => 'both',
1122
+ 'duration' => 1,
1123
+ 'current' => array(
1124
+ 'ease' => 'easeOutCubic',
1125
+ 'scale' => 0.7
1126
+ ),
1127
+ 'next' => array(
1128
+ 'ease' => 'easeOutCubic',
1129
+ 'left' => "100%"
1130
+ )
1131
+ ),
1132
+ 'invert' => array(
1133
+ 'zIndex' => 2,
1134
+ 'current' => array(
1135
+ 'left' => "100%",
1136
+ 'scale' => 1
1137
+ ),
1138
+ 'next' => array(
1139
+ 'scale' => 0.7,
1140
+ 'left' => 0
1141
+ )
1142
+ )
1143
+ )
1144
+ )
1145
+ ));
1146
+
1147
+ array_push($animations, array(
1148
+ "id" => 1012,
1149
+ 'referencekey' => 1000,
1150
+ "value" => array(
1151
+ 'name' => n2_('Zoom'),
1152
+ 'data' => array(
1153
+ 'type' => 'Flat',
1154
+ 'tiles' => array(
1155
+ 'crop' => false,
1156
+ 'delay' => 0,
1157
+ 'sequence' => 'ForwardDiagonal'
1158
+ ),
1159
+ 'main' => array(
1160
+ 'type' => 'both',
1161
+ 'duration' => .75,
1162
+ 'current' => array(
1163
+ 'ease' => 'easeOutCubic',
1164
+ 'scale' => 0.5,
1165
+ 'opacity' => 0
1166
+ ),
1167
+ 'next' => array(
1168
+ 'ease' => 'easeOutCubic',
1169
+ 'opacity' => 0,
1170
+ 'scale' => 1.5
1171
+ )
1172
+ ),
1173
+ 'invert' => array(
1174
+ 'current' => array(
1175
+ 'scale' => 1.5
1176
+ ),
1177
+ 'next' => array(
1178
+ 'scale' => 0.5
1179
+ )
1180
+ )
1181
+ )
1182
+ )
1183
+ ));
1184
+
1185
+ array_push($animations, array(
1186
+ "id" => 1025,
1187
+ 'referencekey' => 1000,
1188
+ "value" => array(
1189
+ 'name' => n2_('Zoom out'),
1190
+ 'data' => array(
1191
+ 'type' => 'Flat',
1192
+ 'tiles' => array(
1193
+ 'crop' => false,
1194
+ 'delay' => 0,
1195
+ 'sequence' => 'ForwardDiagonal'
1196
+ ),
1197
+ 'main' => array(
1198
+ 'type' => 'both',
1199
+ 'duration' => .75,
1200
+ 'current' => array(
1201
+ 'ease' => 'easeOutCubic',
1202
+ 'scale' => 1.5,
1203
+ 'opacity' => 0
1204
+ ),
1205
+ 'next' => array(
1206
+ 'ease' => 'easeOutCubic',
1207
+ 'opacity' => 0,
1208
+ 'scale' => 0.5
1209
+ )
1210
+ ),
1211
+ 'invert' => array(
1212
+ 'current' => array(
1213
+ 'scale' => 0.5
1214
+ ),
1215
+ 'next' => array(
1216
+ 'scale' => 1.5
1217
+ )
1218
+ )
1219
+ )
1220
+ )
1221
+ ));
1222
+
1223
+ array_push($animations, array(
1224
+ "id" => 1013,
1225
+ 'referencekey' => 1000,
1226
+ "value" => array(
1227
+ 'name' => n2_('Fade'),
1228
+ 'data' => array(
1229
+ 'type' => 'Flat',
1230
+ 'tiles' => array(
1231
+ 'delay' => 0,
1232
+ 'sequence' => 'ForwardDiagonal'
1233
+ ),
1234
+ 'main' => array(
1235
+ 'type' => 'both',
1236
+ 'duration' => 1,
1237
+ 'zIndex' => 2,
1238
+ 'current' => array(
1239
+ 'ease' => 'easeOutCubic',
1240
+ 'opacity' => 0
1241
+ )
1242
+ )
1243
+ )
1244
+ )
1245
+ ));
1246
+
1247
+ array_push($animations, array(
1248
+ "id" => 1014,
1249
+ 'referencekey' => 1000,
1250
+ "value" => array(
1251
+ 'name' => n2_('Curtain to left'),
1252
+ 'data' => array(
1253
+ 'type' => 'Flat',
1254
+ 'rows' => 1,
1255
+ 'columns' => 25,
1256
+ 'tiles' => array(
1257
+ 'delay' => .03,
1258
+ 'sequence' => 'BackwardCol'
1259
+ ),
1260
+ 'main' => array(
1261
+ 'type' => 'next',
1262
+ 'duration' => .35,
1263
+ 'next' => array(
1264
+ 'ease' => 'easeInOutQuart',
1265
+ 'opacity' => "0",
1266
+ 'left' => '-100%'
1267
+ )
1268
+ ),
1269
+ 'invert' => array(
1270
+ 'next' => array(
1271
+ 'left' => '100%'
1272
+ )
1273
+ ),
1274
+ 'invertTiles' => array(
1275
+ 'sequence' => 'ForwardCol'
1276
+ )
1277
+ )
1278
+ )
1279
+ ));
1280
+
1281
+ array_push($animations, array(
1282
+ "id" => 1024,
1283
+ 'referencekey' => 1000,
1284
+ "value" => array(
1285
+ 'name' => n2_('Puzzle'),
1286
+ 'data' => array(
1287
+ 'type' => 'Flat',
1288
+ 'rows' => 5,
1289
+ 'columns' => 7,
1290
+ 'tiles' => array(
1291
+ 'delay' => 1,
1292
+ 'sequence' => 'Random'
1293
+ ),
1294
+ 'main' => array(
1295
+ 'type' => 'next',
1296
+ 'duration' => 0.8,
1297
+ 'next' => array(
1298
+ 'ease' => 'easeInOutQuart',
1299
+ 'opacity' => 0
1300
+ )
1301
+ )
1302
+ )
1303
+ )
1304
+ ));
1305
+
1306
+ array_push($sets, array(
1307
+ 'id' => 1100,
1308
+ 'referencekey' => '',
1309
+ 'value' => n2_('Vertical')
1310
+ ));
1311
+
1312
+ array_push($animations, array(
1313
+ "id" => 1404,
1314
+ 'referencekey' => 1100,
1315
+ "value" => array(
1316
+ 'name' => n2_('Scale to top'),
1317
+ 'data' => array(
1318
+ 'type' => 'Flat',
1319
+ 'tiles' => array(
1320
+ 'crop' => true,
1321
+ 'delay' => 0,
1322
+ 'sequence' => 'ForwardDiagonal'
1323
+ ),
1324
+ 'main' => array(
1325
+ 'type' => 'both',
1326
+ 'duration' => 1,
1327
+ 'current' => array(
1328
+ 'ease' => 'easeOutCubic',
1329
+ 'scale' => 0.7
1330
+ ),
1331
+ 'next' => array(
1332
+ 'ease' => 'easeOutCubic',
1333
+ 'top' => "100%"
1334
+ )
1335
+ ),
1336
+ 'invert' => array(
1337
+ 'zIndex' => 2,
1338
+ 'current' => array(
1339
+ 'top' => "100%",
1340
+ 'scale' => 1
1341
+ ),
1342
+ 'next' => array(
1343
+ 'scale' => 0.7,
1344
+ 'top' => 0
1345
+ )
1346
+ )
1347
+ )
1348
+ )
1349
+ ));
1350
+
1351
+ array_push($animations, array(
1352
+ "id" => 1403,
1353
+ 'referencekey' => 1100,
1354
+ "value" => array(
1355
+ 'name' => n2_('Scale to bottom'),
1356
+ 'data' => array(
1357
+ 'type' => 'Flat',
1358
+ 'tiles' => array(
1359
+ 'crop' => true,
1360
+ 'delay' => 0,
1361
+ 'sequence' => 'ForwardDiagonal'
1362
+ ),
1363
+ 'main' => array(
1364
+ 'type' => 'both',
1365
+ 'duration' => 1,
1366
+ 'current' => array(
1367
+ 'ease' => 'easeOutCubic',
1368
+ 'scale' => 0.7
1369
+ ),
1370
+ 'next' => array(
1371
+ 'ease' => 'easeOutCubic',
1372
+ 'top' => "-100%"
1373
+ )
1374
+ ),
1375
+ 'invert' => array(
1376
+ 'zIndex' => 2,
1377
+ 'current' => array(
1378
+ 'top' => "-100%",
1379
+ 'scale' => 1
1380
+ ),
1381
+ 'next' => array(
1382
+ 'scale' => 0.7,
1383
+ 'top' => 0
1384
+ )
1385
+ )
1386
+ )
1387
+ )
1388
+ ));
1389
+
1390
+ array_push($animations, array(
1391
+ "id" => 1016,
1392
+ 'referencekey' => 1100,
1393
+ "value" => array(
1394
+ 'name' => n2_('Curtain to bottom'),
1395
+ 'data' => array(
1396
+ 'type' => 'Flat',
1397
+ 'rows' => 25,
1398
+ 'columns' => 1,
1399
+ 'tiles' => array(
1400
+ 'delay' => .03,
1401
+ 'sequence' => 'ForwardRow'
1402
+ ),
1403
+ 'main' => array(
1404
+ 'type' => 'next',
1405
+ 'duration' => .35,
1406
+ 'next' => array(
1407
+ 'ease' => 'easeInOutQuart',
1408
+ 'opacity' => "0",
1409
+ 'top' => '100%'
1410
+ )
1411
+ ),
1412
+ 'invert' => array(
1413
+ 'next' => array(
1414
+ 'top' => '-100%'
1415
+ )
1416
+ ),
1417
+ 'invertTiles' => array(
1418
+ 'sequence' => 'BackwardRow'
1419
+ )
1420
+ )
1421
+ )
1422
+ ));
1423
+
1424
+ array_push($animations, array(
1425
+ "id" => 1017,
1426
+ 'referencekey' => 1100,
1427
+ "value" => array(
1428
+ 'name' => n2_('Curtain to top'),
1429
+ 'data' => array(
1430
+ 'type' => 'Flat',
1431
+ 'rows' => 25,
1432
+ 'columns' => 1,
1433
+ 'tiles' => array(
1434
+ 'delay' => .03,
1435
+ 'sequence' => 'BackwardRow'
1436
+ ),
1437
+ 'main' => array(
1438
+ 'type' => 'next',
1439
+ 'duration' => .35,
1440
+ 'next' => array(
1441
+ 'ease' => 'easeInOutQuart',
1442
+ 'opacity' => "0",
1443
+ 'top' => '-100%'
1444
+ )
1445
+ ),
1446
+ 'invert' => array(
1447
+ 'next' => array(
1448
+ 'top' => '100%'
1449
+ )
1450
+ ),
1451
+ 'invertTiles' => array(
1452
+ 'sequence' => 'ForwardRow'
1453
+ )
1454
+ )
1455
+ )
1456
+ ));
1457
+
1458
+ array_push($sets, array(
1459
+ 'id' => 1200,
1460
+ 'referencekey' => '',
1461
+ 'value' => 'RTL'
1462
+ ));
1463
+
1464
+ array_push($animations, array(
1465
+ "id" => 1401,
1466
+ 'referencekey' => 1200,
1467
+ "value" => array(
1468
+ 'name' => n2_('Scale to right'),
1469
+ 'data' => array(
1470
+ 'type' => 'Flat',
1471
+ 'tiles' => array(
1472
+ 'crop' => true,
1473
+ 'delay' => 0,
1474
+ 'sequence' => 'ForwardDiagonal'
1475
+ ),
1476
+ 'main' => array(
1477
+ 'type' => 'both',
1478
+ 'duration' => 1,
1479
+ 'current' => array(
1480
+ 'ease' => 'easeOutCubic',
1481
+ 'scale' => 0.7
1482
+ ),
1483
+ 'next' => array(
1484
+ 'ease' => 'easeOutCubic',
1485
+ 'left' => "-100%"
1486
+ )
1487
+ ),
1488
+ 'invert' => array(
1489
+ 'zIndex' => 2,
1490
+ 'current' => array(
1491
+ 'left' => "-100%",
1492
+ 'scale' => 1
1493
+ ),
1494
+ 'next' => array(
1495
+ 'scale' => 0.7,
1496
+ 'left' => 0
1497
+ )
1498
+ )
1499
+ )
1500
+ )
1501
+ ));
1502
+
1503
+ array_push($animations, array(
1504
+ "id" => 1015,
1505
+ 'referencekey' => 1200,
1506
+ "value" => array(
1507
+ 'name' => n2_('Curtain to right'),
1508
+ 'data' => array(
1509
+ 'type' => 'Flat',
1510
+ 'rows' => 1,
1511
+ 'columns' => 25,
1512
+ 'tiles' => array(
1513
+ 'delay' => .03,
1514
+ 'sequence' => 'ForwardCol'
1515
+ ),
1516
+ 'main' => array(
1517
+ 'type' => 'next',
1518
+ 'duration' => .35,
1519
+ 'next' => array(
1520
+ 'ease' => 'easeInOutQuart',
1521
+ 'opacity' => "0",
1522
+ 'left' => '100%'
1523
+ )
1524
+ ),
1525
+ 'invert' => array(
1526
+ 'next' => array(
1527
+ 'left' => '-100%'
1528
+ )
1529
+ ),
1530
+ 'invertTiles' => array(
1531
+ 'sequence' => 'BackwardCol'
1532
+ )
1533
+ )
1534
+ )
1535
+ ));
1536
+
1537
+ }
1538
+
1539
+ public static function postBackgroundAnimationStorage(&$sets, &$animations) {
1540
+ N2Base::getApplicationInfo('smartslider')
1541
+ ->loadLocale();
1542
+
1543
+ array_push($sets, array(
1544
+ 'id' => 1000,
1545
+ 'referencekey' => '',
1546
+ 'value' => n2_('Default')
1547
+ ));
1548
+
1549
+ array_push($animations, array(
1550
+ "id" => 1001,
1551
+ 'referencekey' => 1000,
1552
+ "value" => array(
1553
+ 'name' => n2_('Downscale'),
1554
+ 'data' => array(
1555
+ 'duration' => 5,
1556
+ 'strength' => array('scale'),
1557
+ 'from' => array(
1558
+ 'scale' => 1.5
1559
+ ),
1560
+ 'to' => array(
1561
+ 'scale' => 1.2
1562
+ )
1563
+ )
1564
+ )
1565
+ ));
1566
+
1567
+ array_push($animations, array(
1568
+ "id" => 1002,
1569
+ 'referencekey' => 1000,
1570
+ "value" => array(
1571
+ 'name' => n2_('Downscale left'),
1572
+ 'data' => array(
1573
+ 'duration' => 5,
1574
+ 'strength' => array('scale','x'),
1575
+ 'from' => array(
1576
+ 'scale' => 1.5,
1577
+ 'x' => 0
1578
+
1579
+ ),
1580
+ 'to' => array(
1581
+ 'scale' => 1.2,
1582
+ 'x' => -100
1583
+ )
1584
+ )
1585
+ )
1586
+ ));
1587
+
1588
+ array_push($animations, array(
1589
+ "id" => 1003,
1590
+ 'referencekey' => 1000,
1591
+ "value" => array(
1592
+ 'name' => n2_('Downscale right'),
1593
+ 'data' => array(
1594
+ 'duration' => 5,
1595
+ 'strength' => array('scale','x'),
1596
+ 'from' => array(
1597
+ 'scale' => 1.5,
1598
+ 'x' => 0
1599
+
1600
+ ),
1601
+ 'to' => array(
1602
+ 'scale' => 1.2,
1603
+ 'x' => 100
1604
+ )
1605
+ )
1606
+ )
1607
+ ));
1608
+
1609
+ array_push($animations, array(
1610
+ "id" => 1004,
1611
+ 'referencekey' => 1000,
1612
+ "value" => array(
1613
+ 'name' => n2_('Downscale top'),
1614
+ 'data' => array(
1615
+ 'duration' => 5,
1616
+ 'strength' => array('scale','y'),
1617
+ 'from' => array(
1618
+ 'scale' => 1.5,
1619
+ 'y' => 0
1620
+
1621
+ ),
1622
+ 'to' => array(
1623
+ 'scale' => 1.2,
1624
+ 'y' => -100
1625
+ )
1626
+ )
1627
+ )
1628
+ ));
1629
+
1630
+ array_push($animations, array(
1631
+ "id" => 1005,
1632
+ 'referencekey' => 1000,
1633
+ "value" => array(
1634
+ 'name' => n2_('Downscale bottom'),
1635
+ 'data' => array(
1636
+ 'duration' => 5,
1637
+ 'strength' => array('scale','y'),
1638
+ 'from' => array(
1639
+ 'scale' => 1.5,
1640
+ 'y' => 0
1641
+
1642
+ ),
1643
+ 'to' => array(
1644
+ 'scale' => 1.2,
1645
+ 'y' => 100
1646
+ )
1647
+ )
1648
+ )
1649
+ ));
1650
+
1651
+ array_push($animations, array(
1652
+ "id" => 1006,
1653
+ 'referencekey' => 1000,
1654
+ "value" => array(
1655
+ 'name' => n2_('Upscale'),
1656
+ 'data' => array(
1657
+ 'duration' => 5,
1658
+ 'strength' => array('scale'),
1659
+ 'from' => array(
1660
+ 'scale' => 1.2
1661
+ ),
1662
+ 'to' => array(
1663
+ 'scale' => 1.5
1664
+ )
1665
+ )
1666
+ )
1667
+ ));
1668
+
1669
+ array_push($animations, array(
1670
+ "id" => 1007,
1671
+ 'referencekey' => 1000,
1672
+ "value" => array(
1673
+ 'name' => n2_('Upscale left'),
1674
+ 'data' => array(
1675
+ 'duration' => 5,
1676
+ 'strength' => array('scale','x'),
1677
+ 'from' => array(
1678
+ 'scale' => 1.2,
1679
+ 'x' => 0
1680
+
1681
+ ),
1682
+ 'to' => array(
1683
+ 'scale' => 1.5,
1684
+ 'x' => 100
1685
+ )
1686
+ )
1687
+ )
1688
+ ));
1689
+
1690
+ array_push($animations, array(
1691
+ "id" => 1008,
1692
+ 'referencekey' => 1000,
1693
+ "value" => array(
1694
+ 'name' => n2_('Upscale right'),
1695
+ 'data' => array(
1696
+ 'duration' => 5,
1697
+ 'strength' => array('scale','x'),
1698
+ 'from' => array(
1699
+ 'scale' => 1.2,
1700
+ 'x' => 0
1701
+
1702
+ ),
1703
+ 'to' => array(
1704
+ 'scale' => 1.5,
1705
+ 'x' => -100
1706
+ )
1707
+ )
1708
+ )
1709
+ ));
1710
+
1711
+ array_push($animations, array(
1712
+ "id" => 1009,
1713
+ 'referencekey' => 1000,
1714
+ "value" => array(
1715
+ 'name' => n2_('Upscale top'),
1716
+ 'data' => array(
1717
+ 'duration' => 5,
1718
+ 'strength' => array('scale','y'),
1719
+ 'from' => array(
1720
+ 'scale' => 1.2,
1721
+ 'y' => 0
1722
+
1723
+ ),
1724
+ 'to' => array(
1725
+ 'scale' => 1.5,
1726
+ 'y' => 100
1727
+ )
1728
+ )
1729
+ )
1730
+ ));
1731
+
1732
+ array_push($animations, array(
1733
+ "id" => 1010,
1734
+ 'referencekey' => 1000,
1735
+ "value" => array(
1736
+ 'name' => n2_('Upscale bottom'),
1737
+ 'data' => array(
1738
+ 'duration' => 5,
1739
+ 'strength' => array('scale','y'),
1740
+ 'from' => array(
1741
+ 'scale' => 1.2,
1742
+ 'y' => 0
1743
+
1744
+ ),
1745
+ 'to' => array(
1746
+ 'scale' => 1.5,
1747
+ 'y' => -100
1748
+ )
1749
+ )
1750
+ )
1751
+ ));
1752
+
1753
+ array_push($animations, array(
1754
+ "id" => 1011,
1755
+ 'referencekey' => 1000,
1756
+ "value" => array(
1757
+ 'name' => n2_('To left'),
1758
+ 'data' => array(
1759
+ 'duration' => 5,
1760
+ 'strength' => array('x'),
1761
+ 'from' => array(
1762
+ 'scale' => 1.5,
1763
+ 'x' => 0
1764
+ ),
1765
+ 'to' => array(
1766
+ 'scale' => 1.5,
1767
+ 'x' => 100
1768
+ )
1769
+ )
1770
+ )
1771
+ ));
1772
+
1773
+ array_push($animations, array(
1774
+ "id" => 1012,
1775
+ 'referencekey' => 1000,
1776
+ "value" => array(
1777
+ 'name' => n2_('To right'),
1778
+ 'data' => array(
1779
+ 'duration' => 5,
1780
+ 'strength' => array('x'),
1781
+ 'from' => array(
1782
+ 'scale' => 1.5,
1783
+ 'x' => 0
1784
+ ),
1785
+ 'to' => array(
1786
+ 'scale' => 1.5,
1787
+ 'x' => -100
1788
+ )
1789
+ )
1790
+ )
1791
+ ));
1792
+
1793
+ array_push($animations, array(
1794
+ "id" => 1013,
1795
+ 'referencekey' => 1000,
1796
+ "value" => array(
1797
+ 'name' => n2_('To top'),
1798
+ 'data' => array(
1799
+ 'duration' => 5,
1800
+ 'strength' => array('y'),
1801
+ 'from' => array(
1802
+ 'scale' => 1.5,
1803
+ 'y' => 0
1804
+ ),
1805
+ 'to' => array(
1806
+ 'scale' => 1.5,
1807
+ 'y' => 100
1808
+ )
1809
+ )
1810
+ )
1811
+ ));
1812
+
1813
+ array_push($animations, array(
1814
+ "id" => 1014,
1815
+ 'referencekey' => 1000,
1816
+ "value" => array(
1817
+ 'name' => n2_('To bottom'),
1818
+ 'data' => array(
1819
+ 'duration' => 5,
1820
+ 'strength' => array('y'),
1821
+ 'from' => array(
1822
+ 'scale' => 1.5,
1823
+ 'y' => 0
1824
+ ),
1825
+ 'to' => array(
1826
+ 'scale' => 1.5,
1827
+ 'y' => -100
1828
+ )
1829
+ )
1830
+ )
1831
+ ));
1832
+
1833
+ array_push($animations, array(
1834
+ "id" => 1015,
1835
+ 'referencekey' => 1000,
1836
+ "value" => array(
1837
+ 'name' => n2_('To bottom left'),
1838
+ 'data' => array(
1839
+ 'duration' => 5,
1840
+ 'strength' => array('x', 'y'),
1841
+ 'from' => array(
1842
+ 'scale' => 1.5,
1843
+ 'x' => 0,
1844
+ 'y' => 0
1845
+ ),
1846
+ 'to' => array(
1847
+ 'scale' => 1.5,
1848
+ 'x' => 100,
1849
+ 'y' => -100
1850
+ )
1851
+ )
1852
+ )
1853
+ ));
1854
+
1855
+ array_push($animations, array(
1856
+ "id" => 1016,
1857
+ 'referencekey' => 1000,
1858
+ "value" => array(
1859
+ 'name' => n2_('To top right'),
1860
+ 'data' => array(
1861
+ 'duration' => 5,
1862
+ 'strength' => array('x', 'y'),
1863
+ 'from' => array(
1864
+ 'scale' => 1.5,
1865
+ 'x' => 0,
1866
+ 'y' => 0
1867
+ ),
1868
+ 'to' => array(
1869
+ 'scale' => 1.5,
1870
+ 'x' => -100,
1871
+ 'y' => 100
1872
+ )
1873
+ )
1874
+ )
1875
+ ));
1876
+
1877
+ array_push($animations, array(
1878
+ "id" => 1017,
1879
+ 'referencekey' => 1000,
1880
+ "value" => array(
1881
+ 'name' => n2_('To bottom left'),
1882
+ 'data' => array(
1883
+ 'duration' => 5,
1884
+ 'strength' => array('x', 'y'),
1885
+ 'from' => array(
1886
+ 'scale' => 1.5,
1887
+ 'x' => 0,
1888
+ 'y' => 0
1889
+ ),
1890
+ 'to' => array(
1891
+ 'scale' => 1.5,
1892
+ 'x' => 100,
1893
+ 'y' => -100
1894
+ )
1895
+ )
1896
+ )
1897
+ ));
1898
+
1899
+ array_push($animations, array(
1900
+ "id" => 1018,
1901
+ 'referencekey' => 1000,
1902
+ "value" => array(
1903
+ 'name' => n2_('To bottom right'),
1904
+ 'data' => array(
1905
+ 'duration' => 5,
1906
+ 'strength' => array('x', 'y'),
1907
+ 'from' => array(
1908
+ 'scale' => 1.5,
1909
+ 'x' => 0,
1910
+ 'y' => 0
1911
+ ),
1912
+ 'to' => array(
1913
+ 'scale' => 1.5,
1914
+ 'x' => -100,
1915
+ 'y' => -100
1916
+ )
1917
+ )
1918
+ )
1919
+ ));
1920
+ }
1921
+
1922
+ public static function layoutStorage(&$sets, &$layouts) {
1923
+ N2Base::getApplicationInfo('smartslider')
1924
+ ->loadLocale();
1925
+
1926
+ array_push($sets, array(
1927
+ 'id' => 1900,
1928
+ 'referencekey' => '',
1929
+ 'value' => n2_('My layouts')
1930
+ ));
1931
+ }
1932
+ }
1933
+
1934
+ N2SmartSliderStorage::init();
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Ajax.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ N2Loader::import("libraries.ajax.ajax");
5
+ N2Loader::import('libraries.form.form');
6
+
7
+ class N2SmartSliderAjaxModel extends N2Ajax
8
+ {
9
+
10
+ public function sliderType($appType) {
11
+ $configurationXmlFile = dirname(__FILE__) . '/forms/slider.xml';
12
+
13
+ $values = N2Request::getVar('values', array());
14
+ $values['type'] = N2Post::getVar('value');
15
+
16
+ return $this->subform($appType, $configurationXmlFile, $values, 'slider', 'type');
17
+ }
18
+
19
+ public function sliderResponsiveMode($appType) {
20
+ $configurationXmlFile = dirname(__FILE__) . '/forms/slider.xml';
21
+
22
+ $values = N2Request::getVar('values', array());
23
+ $values['responsive-mode'] = N2Post::getVar('value');
24
+
25
+ return $this->subform($appType, $configurationXmlFile, $values, 'slider', 'responsive-mode');
26
+ }
27
+
28
+ private function getWidgetPath($name) {
29
+ $list = array();
30
+ N2Plugin::callPlugin('sswidget', 'onWidgetList', array(&$list));
31
+ if (isset($list[$name])) {
32
+ return $list[$name][1];
33
+ }
34
+
35
+ return false;
36
+ }
37
+
38
+ public function sliderWidget($appType, $name) {
39
+
40
+ $configurationXmlFile = $this->getWidgetPath($name) . 'config.xml';
41
+
42
+ $values = (array)N2Request::getVar('values', array());
43
+ $values['widget' . $name] = N2Post::getVar('value');
44
+
45
+ $class = 'N2SSPluginWidget' . $name . N2Post::getVar('value');
46
+ if (class_exists($class, false)) {
47
+ $values = array_merge(call_user_func(array(
48
+ $class,
49
+ 'getDefaults'
50
+ )), $values);
51
+ }
52
+
53
+ return $this->subform($appType, $configurationXmlFile, $values, 'slider', 'widget' . $name);
54
+ }
55
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Install.php ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class N2SmartsliderInstallModel extends N2Model {
5
+
6
+ private static $sql = array(
7
+ "CREATE TABLE IF NOT EXISTS `#__nextend2_smartslider3_generators` (
8
+ `id` INT(11) NOT NULL AUTO_INCREMENT,
9
+ `group` VARCHAR(254) NOT NULL,
10
+ `type` VARCHAR(254) NOT NULL,
11
+ `params` TEXT NOT NULL,
12
+ PRIMARY KEY (`id`)
13
+ )
14
+ DEFAULT CHARSET = utf8;",
15
+ "CREATE TABLE IF NOT EXISTS `#__nextend2_smartslider3_sliders` (
16
+ `id` INT(11) NOT NULL AUTO_INCREMENT,
17
+ `title` VARCHAR(100) NOT NULL,
18
+ `type` VARCHAR(30) NOT NULL,
19
+ `params` MEDIUMTEXT NOT NULL,
20
+ `time` DATETIME NOT NULL,
21
+ PRIMARY KEY (`id`)
22
+ )
23
+ DEFAULT CHARSET = utf8;",
24
+ "CREATE TABLE IF NOT EXISTS `#__nextend2_smartslider3_slides` (
25
+ `id` INT(11) NOT NULL AUTO_INCREMENT,
26
+ `title` VARCHAR(200) NOT NULL,
27
+ `slider` INT(11) NOT NULL,
28
+ `publish_up` DATETIME NOT NULL,
29
+ `publish_down` DATETIME NOT NULL,
30
+ `published` TINYINT(1) NOT NULL,
31
+ `first` INT(11) NOT NULL,
32
+ `slide` LONGTEXT,
33
+ `description` TEXT NOT NULL,
34
+ `thumbnail` VARCHAR(255) NOT NULL,
35
+ `params` TEXT NOT NULL,
36
+ `ordering` INT(11) NOT NULL,
37
+ `generator_id` INT(11) NOT NULL,
38
+ PRIMARY KEY (`id`)
39
+ )
40
+ DEFAULT CHARSET = utf8;",
41
+
42
+ "UPDATE `#__nextend2_section_storage` SET `value` = 1 WHERE `application` LIKE 'smartslider' AND `section` LIKE 'sliderChanged';"
43
+
44
+ );
45
+
46
+ private static $sampleSlider = array(
47
+ 'INSERT INTO `#__nextend2_smartslider3_sliders` (`id`, `title`, `type`, `params`, `time`) VALUES (1, \'Sample Slider\', \'simple\', \'{"widget-bullet-position-mode":"simple","widget-bullet-position-area":"12","widget-bullet-position-offset":"10","widget-bullet-action":"click","widget-bullet-style":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiNXwqfDV8Knw1fCp8NXwqfHB4IiwiYm94c2hhZG93IjoiMHwqfDB8KnwwfCp8MHwqfDAwMDAwMGZmIiwiYm9yZGVyIjoiMHwqfHNvbGlkfCp8MDAwMDAwZmYiLCJib3JkZXJyYWRpdXMiOiI1MCIsImV4dHJhIjoibWFyZ2luOiA0cHg7In0seyJleHRyYSI6IiIsImJhY2tncm91bmRjb2xvciI6IjA5YjQ3NGZmIn1dfQ==","widget-bullet-bar":"","widget-bullet-align":"center","widget-bullet-orientation":"auto","widget-bullet-bar-full-size":0,"widget-bullet-overlay":0,"widget-bullet-thumbnail-show-image":"1","widget-bullet-thumbnail-width":"120","widget-bullet-thumbnail-style":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwODAiLCJwYWRkaW5nIjoiM3wqfDN8KnwzfCp8M3wqfHB4IiwiYm94c2hhZG93IjoiMHwqfDB8KnwwfCp8MHwqfDAwMDAwMGZmIiwiYm9yZGVyIjoiMHwqfHNvbGlkfCp8MDAwMDAwZmYiLCJib3JkZXJyYWRpdXMiOiIzIiwiZXh0cmEiOiJtYXJnaW46IDVweDsifV19","widget-bullet-thumbnail-side":"before","widget-arrow-responsive-desktop":1,"widget-arrow-responsive-tablet":0.7,"widget-arrow-responsive-mobile":0.5,"widget-arrow-previous-image":"","widget-arrow-previous":"$ss$\\/plugins\\/widgetarrow\\/image\\/image\\/previous\\/thin-horizontal.svg","widget-arrow-previous-color":"ffffffcc","widget-arrow-previous-hover":"0","widget-arrow-previous-hover-color":"ffffffcc","widget-arrow-style":"","widget-arrow-previous-position-mode":"simple","widget-arrow-previous-position-area":"6","widget-arrow-previous-position-offset":"15","widget-arrow-next-position-mode":"simple","widget-arrow-next-position-area":"7","widget-arrow-next-position-offset":"15","widget-arrow-animation":"fade","widget-arrow-mirror":1,"widget-arrow-next-image":"","widget-arrow-next":"$ss$\\/plugins\\/widgetarrow\\/image\\/image\\/next\\/thin-horizontal.svg","widget-arrow-next-color":"ffffffcc","widget-arrow-next-hover":0,"widget-arrow-next-hover-color":"ffffffcc","controlsScroll":"0","controlsDrag":"1","controlsTouch":"horizontal","controlsKeyboard":"1","align":"normal","animation":"horizontal","animation-duration":"600","background-animation":"","background-animation-speed":"normal","width":"1200","height":"600","fontsize":"16","margin":"0|*|0|*|0|*|0","responsive-mode":"auto","responsiveScaleDown":"1","responsiveScaleUp":"1","responsiveSliderHeightMin":"0","responsiveSliderHeightMax":"3000","responsiveSlideWidthMax":"3000","autoplay":"1","autoplayDuration":"8000","autoplayStopClick":"1","autoplayStopMouse":"0","autoplayStopMedia":"1","widgetarrow":"imageEmpty","widget-arrow-display-hover":"0","widget-arrow-previous-position-stack":"1","widget-arrow-previous-position-horizontal":"left","widget-arrow-previous-position-horizontal-position":"0","widget-arrow-previous-position-horizontal-unit":"px","widget-arrow-previous-position-vertical":"top","widget-arrow-previous-position-vertical-position":"0","widget-arrow-previous-position-vertical-unit":"px","widget-arrow-next-position-stack":"1","widget-arrow-next-position-horizontal":"left","widget-arrow-next-position-horizontal-position":"0","widget-arrow-next-position-horizontal-unit":"px","widget-arrow-next-position-vertical":"top","widget-arrow-next-position-vertical-position":"0","widget-arrow-next-position-vertical-unit":"px","widgetbullet":"transition","widget-bullet-display-hover":"0","widget-bullet-thumbnail-height":"81","widget-bullet-position-stack":"1","widget-bullet-position-horizontal":"left","widget-bullet-position-horizontal-position":"0","widget-bullet-position-horizontal-unit":"px","widget-bullet-position-vertical":"top","widget-bullet-position-vertical-position":"0","widget-bullet-position-vertical-unit":"px","widgetautoplay":"disabled","widget-autoplay-display-hover":"0","widgetbar":"disabled","widget-bar-display-hover":"0","widgetthumbnail":"disabled","widget-thumbnail-display-hover":"0","widget-thumbnail-width":"100","widget-thumbnail-height":"60","widgetshadow":"disabled","widgets":"bullet","background":""}\', \'2015-11-01 14:14:20\');',
48
+ 'INSERT INTO `#__nextend2_smartslider3_slides` (`id`, `title`, `slider`, `publish_up`, `publish_down`, `published`, `first`, `slide`, `description`, `thumbnail`, `params`, `ordering`, `generator_id`) VALUES
49
+ (1, \'Slide One\', 1, \'2015-11-01 12:27:34\', \'2025-11-11 12:27:34\', 1, 0, \'[{"zIndex":1,"eye":false,"lock":false,"animations":{"repeatable":0,"specialZeroIn":0,"transformOriginIn":"50|*|50|*|0","inPlayEvent":"","repeatCount":0,"repeatStartDelay":0,"transformOriginLoop":"50|*|50|*|0","loopPlayEvent":"","loopPauseEvent":"","loopStopEvent":"","transformOriginOut":"50|*|50|*|0","outPlayEvent":"","instantOut":1,"in":[],"loop":[],"out":[]},"id":null,"parentid":null,"class":"","name":"MartinDwyer","namesynced":1,"crop":"visible","inneralign":"left","parallax":0,"adaptivefont":0,"desktopportrait":1,"desktoplandscape":1,"tabletportrait":1,"tabletlandscape":1,"mobileportrait":1,"mobilelandscape":1,"responsiveposition":1,"responsivesize":1,"desktopportraitleft":0,"desktopportraittop":-267,"desktopportraitwidth":"auto","desktopportraitheight":"auto","desktopportraitalign":"center","desktopportraitvalign":"bottom","desktopportraitparentalign":"center","desktopportraitparentvalign":"middle","desktopportraitfontsize":100,"mobileportraitleft":0,"mobileportraittop":-319,"mobileportraitalign":"center","mobileportraitvalign":"bottom","mobileportraitfontsize":120,"items":[{"type":"heading","values":{"link":"#|*|_self","font":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siZXh0cmEiOiIiLCJjb2xvciI6IjBiMGIwYmZmIiwic2l6ZSI6IjM2fHxweCIsInRzaGFkb3ciOiIwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImFmb250IjoiUmFsZXdheSxBcmlhbCIsImxpbmVoZWlnaHQiOiIxIiwiYm9sZCI6MCwiaXRhbGljIjowLCJ1bmRlcmxpbmUiOjAsImFsaWduIjoiY2VudGVyIiwibGV0dGVyc3BhY2luZyI6IjEwcHgiLCJ3b3Jkc3BhY2luZyI6Im5vcm1hbCIsInRleHR0cmFuc2Zvcm0iOiJ1cHBlcmNhc2UifSx7ImV4dHJhIjoiIn0seyJleHRyYSI6IiJ9XX0=","style":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiZmZmZmZmY2MiLCJwYWRkaW5nIjoiMC44fCp8MXwqfDAuOHwqfDF8KnxlbSIsImJveHNoYWRvdyI6IjB8KnwwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImJvcmRlciI6IjB8Knxzb2xpZHwqfDAwMDAwMGZmIiwiYm9yZGVycmFkaXVzIjoiMCIsImV4dHJhIjoiIn0seyJleHRyYSI6IiJ9XX0=","heading":"Martin Dwyer","fullwidth":"1","nowrap":"1"}}]},{"zIndex":2,"eye":false,"lock":false,"animations":{"repeatable":0,"specialZeroIn":0,"transformOriginIn":"50|*|50|*|0","inPlayEvent":"","repeatCount":0,"repeatStartDelay":0,"transformOriginLoop":"50|*|50|*|0","loopPlayEvent":"","loopPauseEvent":"","loopStopEvent":"","transformOriginOut":"50|*|50|*|0","outPlayEvent":"","instantOut":1,"in":[],"loop":[],"out":[]},"id":null,"parentid":null,"class":"","name":"ApplicationDeveloper","namesynced":1,"crop":"visible","inneralign":"left","parallax":0,"adaptivefont":0,"desktopportrait":1,"desktoplandscape":1,"tabletportrait":1,"tabletlandscape":1,"mobileportrait":1,"mobilelandscape":1,"responsiveposition":1,"responsivesize":1,"desktopportraitleft":0,"desktopportraittop":338,"desktopportraitwidth":"auto","desktopportraitheight":"auto","desktopportraitalign":"center","desktopportraitvalign":"top","desktopportraitparentalign":"center","desktopportraitparentvalign":"middle","desktopportraitfontsize":100,"mobileportraitleft":0,"mobileportraittop":291,"mobileportraitalign":"center","mobileportraitvalign":"top","mobileportraitfontsize":120,"items":[{"type":"heading","values":{"link":"#|*|_self","font":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siZXh0cmEiOiIiLCJjb2xvciI6ImZmZmZmZmZmIiwic2l6ZSI6IjIyfHxweCIsInRzaGFkb3ciOiIwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImFmb250IjoiUmFsZXdheSxBcmlhbCIsImxpbmVoZWlnaHQiOiIxIiwiYm9sZCI6MCwiaXRhbGljIjowLCJ1bmRlcmxpbmUiOjAsImFsaWduIjoiY2VudGVyIiwibGV0dGVyc3BhY2luZyI6IjJweCIsIndvcmRzcGFjaW5nIjoibm9ybWFsIiwidGV4dHRyYW5zZm9ybSI6Im5vbmUifSx7ImV4dHJhIjoiIn0seyJleHRyYSI6IiJ9XX0=","style":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwY2MiLCJwYWRkaW5nIjoiMC44fCp8MXwqfDAuOHwqfDF8KnxlbSIsImJveHNoYWRvdyI6IjB8KnwwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImJvcmRlciI6IjB8Knxzb2xpZHwqfDAwMDAwMGZmIiwiYm9yZGVycmFkaXVzIjoiMCIsImV4dHJhIjoiIn0seyJleHRyYSI6IiJ9XX0=","heading":"Application Developer","fullwidth":"1","nowrap":"1"}}]}]\', \'\', \'http://smartslider3.com/sample/developerthumbnail.jpg\', \'{"generator_id":"0","first":"0","static-slide":"0","backgroundColor":"ffffff00","backgroundImage":"http:\\/\\/smartslider3.com\\/sample\\/programmer.jpg","backgroundImageOpacity":"100","backgroundMode":"default","link":"|*|_self","slide-duration":"0","background-animation":"","background-animation-speed":"default"}\', 0, 0),
50
+ (2, \'Slide Two\', 1, \'2015-11-01 12:27:34\', \'2025-11-11 12:27:34\', 1, 0, \'[{"zIndex":1,"eye":false,"lock":false,"animations":{"repeatable":0,"specialZeroIn":0,"transformOriginIn":"50|*|50|*|0","inPlayEvent":"","repeatCount":0,"repeatStartDelay":0,"transformOriginLoop":"50|*|50|*|0","loopPlayEvent":"","loopPauseEvent":"","loopStopEvent":"","transformOriginOut":"50|*|50|*|0","outPlayEvent":"","instantOut":1,"in":[],"loop":[],"out":[]},"id":null,"parentid":null,"class":"","name":"RachelWright","namesynced":1,"crop":"visible","inneralign":"left","parallax":0,"adaptivefont":0,"desktopportrait":1,"desktoplandscape":1,"tabletportrait":1,"tabletlandscape":1,"mobileportrait":1,"mobilelandscape":1,"responsiveposition":1,"responsivesize":1,"desktopportraitleft":0,"desktopportraittop":-267,"desktopportraitwidth":"auto","desktopportraitheight":"auto","desktopportraitalign":"center","desktopportraitvalign":"bottom","desktopportraitparentalign":"center","desktopportraitparentvalign":"middle","desktopportraitfontsize":100,"mobileportraitleft":0,"mobileportraittop":-319,"mobileportraitalign":"center","mobileportraitvalign":"bottom","mobileportraitfontsize":120,"items":[{"type":"heading","values":{"link":"#|*|_self","font":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siZXh0cmEiOiIiLCJjb2xvciI6IjBiMGIwYmZmIiwic2l6ZSI6IjM2fHxweCIsInRzaGFkb3ciOiIwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImFmb250IjoiUmFsZXdheSxBcmlhbCIsImxpbmVoZWlnaHQiOiIxIiwiYm9sZCI6MCwiaXRhbGljIjowLCJ1bmRlcmxpbmUiOjAsImFsaWduIjoiY2VudGVyIiwibGV0dGVyc3BhY2luZyI6IjEwcHgiLCJ3b3Jkc3BhY2luZyI6Im5vcm1hbCIsInRleHR0cmFuc2Zvcm0iOiJ1cHBlcmNhc2UifSx7ImV4dHJhIjoiIn0seyJleHRyYSI6IiJ9XX0=","style":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiZmZmZmZmY2MiLCJwYWRkaW5nIjoiMC44fCp8MXwqfDAuOHwqfDF8KnxlbSIsImJveHNoYWRvdyI6IjB8KnwwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImJvcmRlciI6IjB8Knxzb2xpZHwqfDAwMDAwMGZmIiwiYm9yZGVycmFkaXVzIjoiMCIsImV4dHJhIjoiIn0seyJleHRyYSI6IiJ9XX0=","heading":"Rachel Wright","fullwidth":"1","nowrap":"1"}}]},{"zIndex":2,"eye":false,"lock":false,"animations":{"repeatable":0,"specialZeroIn":0,"transformOriginIn":"50|*|50|*|0","inPlayEvent":"","repeatCount":0,"repeatStartDelay":0,"transformOriginLoop":"50|*|50|*|0","loopPlayEvent":"","loopPauseEvent":"","loopStopEvent":"","transformOriginOut":"50|*|50|*|0","outPlayEvent":"","instantOut":1,"in":[],"loop":[],"out":[]},"id":null,"parentid":null,"class":"","name":"ArtDirector&Photographer","namesynced":1,"crop":"visible","inneralign":"left","parallax":0,"adaptivefont":0,"desktopportrait":1,"desktoplandscape":1,"tabletportrait":1,"tabletlandscape":1,"mobileportrait":1,"mobilelandscape":1,"responsiveposition":1,"responsivesize":1,"desktopportraitleft":0,"desktopportraittop":338,"desktopportraitwidth":"auto","desktopportraitheight":"auto","desktopportraitalign":"center","desktopportraitvalign":"top","desktopportraitparentalign":"center","desktopportraitparentvalign":"middle","desktopportraitfontsize":100,"mobileportraitleft":0,"mobileportraittop":291,"mobileportraitalign":"center","mobileportraitvalign":"top","mobileportraitfontsize":120,"items":[{"type":"heading","values":{"link":"#|*|_self","font":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siZXh0cmEiOiIiLCJjb2xvciI6ImZmZmZmZmZmIiwic2l6ZSI6IjIyfHxweCIsInRzaGFkb3ciOiIwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImFmb250IjoiUmFsZXdheSxBcmlhbCIsImxpbmVoZWlnaHQiOiIxIiwiYm9sZCI6MCwiaXRhbGljIjowLCJ1bmRlcmxpbmUiOjAsImFsaWduIjoiY2VudGVyIiwibGV0dGVyc3BhY2luZyI6IjJweCIsIndvcmRzcGFjaW5nIjoibm9ybWFsIiwidGV4dHRyYW5zZm9ybSI6Im5vbmUifSx7ImV4dHJhIjoiIn0seyJleHRyYSI6IiJ9XX0=","style":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwY2MiLCJwYWRkaW5nIjoiMC44fCp8MXwqfDAuOHwqfDF8KnxlbSIsImJveHNoYWRvdyI6IjB8KnwwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImJvcmRlciI6IjB8Knxzb2xpZHwqfDAwMDAwMGZmIiwiYm9yZGVycmFkaXVzIjoiMCIsImV4dHJhIjoiIn0seyJleHRyYSI6IiJ9XX0=","heading":"Art Director & Photographer","fullwidth":"1","nowrap":"1"}}]}]\', \'\', \'http://smartslider3.com/sample/artdirectorthumbnail.jpg\', \'{"generator_id":"0","first":"0","static-slide":"0","backgroundColor":"ffffff00","backgroundImage":"http:\\/\\/smartslider3.com\\/sample\\/free1.jpg","backgroundImageOpacity":"100","backgroundMode":"default","link":"|*|_self","slide-duration":"0","background-animation":"","background-animation-speed":"default"}\', 1, 0),
51
+ (3, \'Slide Three\', 1, \'2015-11-01 12:27:34\', \'2025-11-11 12:27:34\', 1, 0, \'[{"zIndex":1,"eye":false,"lock":false,"animations":{"repeatable":0,"specialZeroIn":0,"transformOriginIn":"50|*|50|*|0","inPlayEvent":"","repeatCount":0,"repeatStartDelay":0,"transformOriginLoop":"50|*|50|*|0","loopPlayEvent":"","loopPauseEvent":"","loopStopEvent":"","transformOriginOut":"50|*|50|*|0","outPlayEvent":"","instantOut":1,"in":[],"loop":[],"out":[]},"id":null,"parentid":null,"class":"","name":"AndrewButler","namesynced":1,"crop":"visible","inneralign":"left","parallax":0,"adaptivefont":0,"desktopportrait":1,"desktoplandscape":1,"tabletportrait":1,"tabletlandscape":1,"mobileportrait":1,"mobilelandscape":1,"responsiveposition":1,"responsivesize":1,"desktopportraitleft":0,"desktopportraittop":-267,"desktopportraitwidth":"auto","desktopportraitheight":"auto","desktopportraitalign":"center","desktopportraitvalign":"bottom","desktopportraitparentalign":"center","desktopportraitparentvalign":"middle","desktopportraitfontsize":100,"mobileportraitleft":0,"mobileportraittop":-319,"mobileportraitalign":"center","mobileportraitvalign":"bottom","mobileportraitfontsize":120,"items":[{"type":"heading","values":{"link":"#|*|_self","font":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siZXh0cmEiOiIiLCJjb2xvciI6IjBiMGIwYmZmIiwic2l6ZSI6IjM2fHxweCIsInRzaGFkb3ciOiIwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImFmb250IjoiUmFsZXdheSxBcmlhbCIsImxpbmVoZWlnaHQiOiIxIiwiYm9sZCI6MCwiaXRhbGljIjowLCJ1bmRlcmxpbmUiOjAsImFsaWduIjoiY2VudGVyIiwibGV0dGVyc3BhY2luZyI6IjEwcHgiLCJ3b3Jkc3BhY2luZyI6Im5vcm1hbCIsInRleHR0cmFuc2Zvcm0iOiJ1cHBlcmNhc2UifSx7ImV4dHJhIjoiIn0seyJleHRyYSI6IiJ9XX0=","style":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiZmZmZmZmY2MiLCJwYWRkaW5nIjoiMC44fCp8MXwqfDAuOHwqfDF8KnxlbSIsImJveHNoYWRvdyI6IjB8KnwwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImJvcmRlciI6IjB8Knxzb2xpZHwqfDAwMDAwMGZmIiwiYm9yZGVycmFkaXVzIjoiMCIsImV4dHJhIjoiIn0seyJleHRyYSI6IiJ9XX0=","heading":"Andrew Butler","fullwidth":"1","nowrap":"1"}}]},{"zIndex":2,"eye":false,"lock":false,"animations":{"repeatable":0,"specialZeroIn":0,"transformOriginIn":"50|*|50|*|0","inPlayEvent":"","repeatCount":0,"repeatStartDelay":0,"transformOriginLoop":"50|*|50|*|0","loopPlayEvent":"","loopPauseEvent":"","loopStopEvent":"","transformOriginOut":"50|*|50|*|0","outPlayEvent":"","instantOut":1,"in":[],"loop":[],"out":[]},"id":null,"parentid":null,"class":"","name":"Photographer&Illustrator","namesynced":1,"crop":"visible","inneralign":"left","parallax":0,"adaptivefont":0,"desktopportrait":1,"desktoplandscape":1,"tabletportrait":1,"tabletlandscape":1,"mobileportrait":1,"mobilelandscape":1,"responsiveposition":1,"responsivesize":1,"desktopportraitleft":0,"desktopportraittop":338,"desktopportraitwidth":"auto","desktopportraitheight":"auto","desktopportraitalign":"center","desktopportraitvalign":"top","desktopportraitparentalign":"center","desktopportraitparentvalign":"middle","desktopportraitfontsize":100,"mobileportraitleft":0,"mobileportraittop":291,"mobileportraitalign":"center","mobileportraitvalign":"top","mobileportraitfontsize":120,"items":[{"type":"heading","values":{"link":"#|*|_self","font":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siZXh0cmEiOiIiLCJjb2xvciI6ImZmZmZmZmZmIiwic2l6ZSI6IjIyfHxweCIsInRzaGFkb3ciOiIwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImFmb250IjoiUmFsZXdheSxBcmlhbCIsImxpbmVoZWlnaHQiOiIxIiwiYm9sZCI6MCwiaXRhbGljIjowLCJ1bmRlcmxpbmUiOjAsImFsaWduIjoiY2VudGVyIiwibGV0dGVyc3BhY2luZyI6IjJweCIsIndvcmRzcGFjaW5nIjoibm9ybWFsIiwidGV4dHRyYW5zZm9ybSI6Im5vbmUifSx7ImV4dHJhIjoiIn0seyJleHRyYSI6IiJ9XX0=","style":"eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwY2MiLCJwYWRkaW5nIjoiMC44fCp8MXwqfDAuOHwqfDF8KnxlbSIsImJveHNoYWRvdyI6IjB8KnwwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImJvcmRlciI6IjB8Knxzb2xpZHwqfDAwMDAwMGZmIiwiYm9yZGVycmFkaXVzIjoiMCIsImV4dHJhIjoiIn0seyJleHRyYSI6IiJ9XX0=","heading":"Photographer & Illustrator","fullwidth":"1","nowrap":"1"}}]}]\', \'\', \'http://smartslider3.com/sample/photographerthumbnail.jpg\', \'{"generator_id":"0","first":"0","static-slide":"0","backgroundColor":"ffffff00","backgroundImage":"http:\\/\\/smartslider3.com\\/sample\\/photographer.jpg","backgroundImageOpacity":"100","backgroundMode":"default","link":"|*|_self","slide-duration":"0","background-animation":"","background-animation-speed":"default"}\', 2, 0);'
52
+ );
53
+
54
+ public function install() {
55
+ foreach (self::$sql AS $query) {
56
+ $this->db->query($this->db->parsePrefix($query));
57
+ }
58
+
59
+ N2Loader::import('install', 'smartslider.platform');
60
+
61
+ $sliders = $this->db->queryAll($this->db->parsePrefix('SELECT * FROM #__nextend2_smartslider3_sliders LIMIT 1'));
62
+ if (empty($sliders)) {
63
+ foreach (self::$sampleSlider AS $query) {
64
+ $this->db->query($this->db->parsePrefix($query));
65
+ }
66
+ }
67
+ }
68
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Item.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.form.form');
4
+
5
+ class N2SmartsliderItemModel extends N2Model
6
+ {
7
+
8
+ function renderForm($type, $item, $data = array()) {
9
+
10
+ $configurationXmlFile = $item[4] . 'configuration.xml';
11
+
12
+ $form = new N2Form(N2Base::getApplication('smartslider')->getApplicationType('backend'));
13
+ $form->loadArray($data);
14
+
15
+ $form->loadXMLFile($configurationXmlFile);
16
+
17
+ echo $form->render('item_' . $type);
18
+ }
19
+
20
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Layers.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderLayersModel extends N2Model
4
+ {
5
+
6
+ function renderForm($data = array()) {
7
+
8
+ N2Loader::import('libraries.animations.manager');
9
+
10
+ $configurationXmlFile = dirname(__FILE__) . '/forms/layer.xml';
11
+
12
+ N2Loader::import('libraries.form.form');
13
+ $form = new N2Form();
14
+ $form->loadArray($data);
15
+
16
+ $form->loadXMLFile($configurationXmlFile);
17
+
18
+ echo $form->render('layer');
19
+ }
20
+
21
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/License.php ADDED
@@ -0,0 +1,71 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderLicenseModel {
4
+
5
+ private $key;
6
+
7
+ public function __construct() {
8
+ $this->key = N2Base::getApplication('smartslider')->storage->get('license', 'key');
9
+
10
+ }
11
+
12
+ public static function getInstance() {
13
+ static $ins;
14
+ if (!$ins) {
15
+ $ins = new N2SmartsliderLicenseModel();
16
+ }
17
+ return $ins;
18
+ }
19
+
20
+ public function hasKey() {
21
+ return !empty($this->key);
22
+ }
23
+
24
+ public function maybeActive() {
25
+ $lastActive = N2Base::getApplication('smartslider')->storage->get('license', 'isActive');
26
+ if ($lastActive && $lastActive > strtotime("-1 week")) {
27
+ return true;
28
+ }
29
+ return false;
30
+ }
31
+
32
+ public function getKey() {
33
+ return $this->key;
34
+ }
35
+
36
+ public function setKey($licenseKey) {
37
+ N2Base::getApplication('smartslider')->storage->set('license', 'key', $licenseKey);
38
+ $this->key = $licenseKey;
39
+
40
+ }
41
+
42
+ public function checkKey($license, $action = 'licensecheck') {
43
+ return 0;
44
+
45
+ }
46
+
47
+ public function isActive($cacheAccepted = true) {
48
+ if ($cacheAccepted && $this->maybeActive()) {
49
+ return 'OK';
50
+ }
51
+ $status = $this->checkKey($this->key);
52
+ if ($this->hasKey() && $status == 'OK') {
53
+ N2Base::getApplication('smartslider')->storage->set('license', 'isActive', time());
54
+ return $status;
55
+ }
56
+ N2Base::getApplication('smartslider')->storage->set('license', 'isActive', 0);
57
+ return $status;
58
+ }
59
+
60
+ public function deAuthorize() {
61
+ if ($this->hasKey()) {
62
+ $status = $this->checkKey($this->key, 'licensedeauthorize');
63
+ if ($status == 'OK' || $status == 'LICENSE_EXPIRED' || $status == 'PLATFORM_NOT_ALLOWED') {
64
+ $this->setKey('');
65
+ N2Message::notice('Smart Slider deauthorized on this site!');
66
+ }
67
+ return $status;
68
+ }
69
+ return false;
70
+ }
71
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Modules.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderModulesModel extends NextendModel
4
+ {
5
+
6
+ public function __construct() {
7
+ parent::__construct();
8
+
9
+ $this->db->setTableName("modules");
10
+ }
11
+
12
+
13
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/ModulesMenu.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderModulesMenuModel extends NextendModel
4
+ {
5
+
6
+ public function __construct() {
7
+ parent::__construct();
8
+
9
+ $this->db->setTableName("modules_menu");
10
+ }
11
+
12
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Settings.php ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderSettingsModel extends N2Model
4
+ {
5
+
6
+ public function form($xml) {
7
+
8
+ /** @noinspection PhpUnusedLocalVariableInspection */
9
+ $data = array();
10
+ switch ($xml) {
11
+ case 'joomla':
12
+ $data = N2SmartSliderJoomlaSettings::getAll();
13
+ break;
14
+ default:
15
+ $data = N2SmartSliderSettings::getAll();
16
+ break;
17
+ }
18
+ $this->render(dirname(__FILE__) . '/forms/settings/' . $xml . '.xml', $data);
19
+ }
20
+
21
+ public function render($xmlpath, $data) {
22
+ N2Loader::import('libraries.form.form');
23
+ $form = new N2Form(N2Base::getApplication('smartslider')->getApplicationType('backend'));
24
+
25
+ $form->loadArray($data);
26
+
27
+ $form->loadXMLFile($xmlpath);
28
+
29
+ echo $form->render('settings');
30
+
31
+ N2JS::addFirstCode('
32
+ new NextendForm("smartslider-form", ' . json_encode($form->_data) . ', null, "' . N2Filesystem::toLinux(N2Filesystem::pathToRelativePath($xmlpath)) . '", "settings", "' . N2Uri::ajaxUri('nextend', 'smartslider') . '");
33
+ ');
34
+ }
35
+
36
+ public function save() {
37
+ $namespace = N2Request::getCmd('namespace', 'default');
38
+ $settings = N2Request::getVar('settings');
39
+ if ($namespace && $settings) {
40
+ if ($namespace == 'default') $namespace = 'settings';
41
+ if ($namespace == 'font' && N2Request::getInt('sliderid')) {
42
+ $namespace .= N2Request::getInt('sliderid');
43
+ self::markChanged(N2Request::getInt('sliderid'));
44
+ }
45
+ if ($namespace == 'joomla') {
46
+ $license = empty($settings['license']) ? '' : $settings['license'];
47
+
48
+ $updates = $this->db->queryAll("SELECT b.update_site_id FROM " . $this->db->tableAlias("extensions") . " AS a LEFT JOIN " . $this->db->tableAlias("update_sites_extensions") . " AS b ON a.extension_id = b.extension_id WHERE a.element = 'com_smartslider3'");
49
+
50
+ if (count($updates)) {
51
+ $id = $updates[0]['update_site_id'];
52
+ unset($updates[0]);
53
+ if (count($updates)) {
54
+ foreach ($updates AS $u) {
55
+ $this->db->setTableName("update_sites");
56
+ $this->db->deleteByAttributes(array(
57
+ "update_site_id" => $u['update_site_id']
58
+ ));
59
+ $this->db->setTableName("update_sites_extensions");
60
+ $this->db->deleteByAttributes(array(
61
+ "update_site_id" => $u['update_site_id']
62
+ ));
63
+ }
64
+ }
65
+ $this->db->setTableName("update_sites");
66
+ $this->db->update(array(
67
+ "location" => 'http://www.nextendweb.com/update2/joomla/update.php?license=' . urlencode($license) . '&fake=extension.xml',
68
+ ), array(
69
+ "update_site_id" => $id
70
+ ));
71
+ }
72
+ }
73
+ N2SmartSliderSettings::store($namespace, json_encode($settings));
74
+ }
75
+ return true;
76
+ }
77
+
78
+ public static function markChanged($id) {
79
+ N2SmartSliderHelper::getInstance()->setSliderChanged($id, 1);
80
+ }
81
+
82
+ public function saveDefaults($defaults) {
83
+ if (!empty($defaults)) {
84
+ foreach ($defaults AS $referenceKey => $value) {
85
+ N2StorageSectionAdmin::set('smartslider', 'default', $referenceKey, $value);
86
+ }
87
+ }
88
+ return true;
89
+ }
90
+
91
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Sliders.php ADDED
@@ -0,0 +1,276 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import("libraries.slider.abstract", "smartslider");
4
+
5
+ class N2SmartsliderSlidersModel extends N2Model
6
+ {
7
+
8
+ public function __construct() {
9
+ parent::__construct("nextend2_smartslider3_sliders");
10
+ }
11
+
12
+ public function get($id) {
13
+ return $this->db->queryRow("SELECT * FROM " . $this->db->tableName . " WHERE id = :id", array(
14
+ ":id" => $id
15
+ ));
16
+ }
17
+
18
+ public function refreshCache($sliderid) {
19
+ N2Cache::clearGroup(N2SmartSliderAbstract::getCacheId($sliderid));
20
+ N2Cache::clearGroup(N2SmartSliderAbstract::getAdminCacheId($sliderid));
21
+ self::markChanged($sliderid);
22
+ }
23
+
24
+
25
+ /**
26
+ * @return mixed
27
+ */
28
+ public function getAll($orderBy = 'time', $orderByDirection = 'DESC') {
29
+ return $this->db->findAll($orderBy . ' ' . $orderByDirection);
30
+ }
31
+
32
+ public static function renderAddForm($data = array()) {
33
+ return self::editForm($data);
34
+ }
35
+
36
+ public static function renderEditForm($slider) {
37
+
38
+ $data = json_decode($slider['params'], true);
39
+ if ($data == null) $data = array();
40
+ $data['title'] = $slider['title'];
41
+ $data['type'] = $slider['type'];
42
+ return self::editForm($data);
43
+ }
44
+
45
+ private static function editForm($data = array()) {
46
+
47
+ $configurationXmlFile = dirname(__FILE__) . '/forms/slider.xml';
48
+
49
+ N2Loader::import('libraries.form.form');
50
+ $form = new N2Form(N2Base::getApplication('smartslider')
51
+ ->getApplicationType('backend'));
52
+ $form->set('class', 'nextend-smart-slider-admin');
53
+
54
+ $form->loadArray($data);
55
+
56
+ $form->loadXMLFile($configurationXmlFile);
57
+
58
+ echo $form->render('slider');
59
+
60
+ N2Loader::import('libraries.form.element.url');
61
+ N2JS::addFirstCode('nextend.NextendElementUrlParams=' . N2ElementUrl::getNextendElementUrlParameters() . ';');
62
+
63
+ return $data;
64
+ }
65
+
66
+ public static function renderImportByUploadForm() {
67
+
68
+ $configurationXmlFile = dirname(__FILE__) . '/forms/import/upload.xml';
69
+
70
+ N2Loader::import('libraries.form.form');
71
+ $form = new N2Form(N2Base::getApplication('smartslider')
72
+ ->getApplicationType('backend'));
73
+
74
+ $form->loadXMLFile($configurationXmlFile);
75
+
76
+ echo $form->render('slider');
77
+ }
78
+
79
+ public static function renderRestoreByUploadForm() {
80
+
81
+ $configurationXmlFile = dirname(__FILE__) . '/forms/import/restore.xml';
82
+
83
+ N2Loader::import('libraries.form.form');
84
+ $form = new N2Form(N2Base::getApplication('smartslider')
85
+ ->getApplicationType('backend'));
86
+
87
+ $form->loadXMLFile($configurationXmlFile);
88
+
89
+ echo $form->render('slider');
90
+ }
91
+
92
+ public static function renderImportFromServerForm() {
93
+
94
+ $configurationXmlFile = dirname(__FILE__) . '/forms/import/server.xml';
95
+
96
+ N2Loader::import('libraries.form.form');
97
+ $form = new N2Form(N2Base::getApplication('smartslider')
98
+ ->getApplicationType('backend'));
99
+
100
+ $form->loadXMLFile($configurationXmlFile);
101
+
102
+ echo $form->render('slider');
103
+ }
104
+
105
+ public static function renderRestoreFromServerForm(){
106
+ $configurationXmlFile = dirname(__FILE__) . '/forms/import/restorefromserver.xml';
107
+
108
+ N2Loader::import('libraries.form.form');
109
+ $form = new N2Form(N2Base::getApplication('smartslider')
110
+ ->getApplicationType('backend'));
111
+
112
+ $form->loadXMLFile($configurationXmlFile);
113
+
114
+ echo $form->render('slider');
115
+ }
116
+
117
+ function import($slider) {
118
+ try {
119
+ $this->db->insert(array(
120
+ 'title' => $slider['title'],
121
+ 'type' => $slider['type'],
122
+ 'params' => $slider['params']->toJSON(),
123
+ 'time' => date('Y-m-d H:i:s', N2Platform::getTime())
124
+ ));
125
+
126
+ return $this->db->insertId();
127
+ } catch (Exception $e) {
128
+ throw new Exception($e->getMessage());
129
+ }
130
+ }
131
+
132
+ function restore($slider) {
133
+
134
+ if (isset($slider['id']) && $slider['id'] > 0) {
135
+
136
+ $this->delete($slider['id']);
137
+
138
+ try {
139
+ $this->db->insert(array(
140
+ 'id' => $slider['id'],
141
+ 'title' => $slider['title'],
142
+ 'type' => $slider['type'],
143
+ 'params' => $slider['params']->toJSON(),
144
+ 'time' => date('Y-m-d H:i:s', N2Platform::getTime())
145
+ ));
146
+
147
+ return $this->db->insertId();
148
+ } catch (Exception $e) {
149
+ throw new Exception($e->getMessage());
150
+ }
151
+ }
152
+
153
+ return $this->import($slider);
154
+ }
155
+
156
+ /**
157
+ * @param $sliderId
158
+ * @param $params N2Data
159
+ */
160
+ function importUpdate($sliderId, $params) {
161
+
162
+ $this->db->update(array(
163
+ 'params' => $params->toJson()
164
+ ), array(
165
+ "id" => $sliderId
166
+ ));
167
+ }
168
+
169
+ function create($slider) {
170
+ if (!isset($slider['title'])) return false;
171
+ if ($slider['title'] == '') $slider['title'] = n2_('New slider');
172
+
173
+ $title = $slider['title'];
174
+ unset($slider['title']);
175
+ $type = $slider['type'];
176
+ unset($slider['type']);
177
+
178
+ try {
179
+ $this->db->insert(array(
180
+ 'title' => $title,
181
+ 'type' => $type,
182
+ 'params' => json_encode($slider),
183
+ 'time' => date('Y-m-d H:i:s', N2Platform::getTime())
184
+ ));
185
+
186
+ return $this->db->insertId();
187
+ } catch (Exception $e) {
188
+ throw new Exception($e->getMessage());
189
+ }
190
+ }
191
+
192
+ function save($id, $slider) {
193
+ if (!isset($slider['title']) || $id <= 0) return false;
194
+ if ($slider['title'] == '') $slider['title'] = n2_('New slider');
195
+
196
+ $title = $slider['title'];
197
+ unset($slider['title']);
198
+ $type = $slider['type'];
199
+ unset($slider['type']);
200
+
201
+ $this->db->update(array(
202
+ 'title' => $title,
203
+ 'type' => $type,
204
+ 'params' => json_encode($slider)
205
+ ), array(
206
+ "id" => $id
207
+ ));
208
+
209
+ self::markChanged($id);
210
+
211
+ return $id;
212
+ }
213
+
214
+ function delete($id) {
215
+ $slidesModel = new N2SmartsliderSlidesModel();
216
+ $slidesModel->deleteBySlider($id);
217
+
218
+ $this->db->deleteByPk($id);
219
+
220
+ N2Cache::clearGroup(N2SmartSliderAbstract::getCacheId($id));
221
+ N2Cache::clearGroup(N2SmartSliderAbstract::getAdminCacheId($id));
222
+
223
+ self::markChanged($id);
224
+ }
225
+
226
+ function deleteSlides($id) {
227
+ $slidesModel = new N2SmartsliderSlidesModel();
228
+ $slidesModel->deleteBySlider($id);
229
+ self::markChanged($id);
230
+ }
231
+
232
+ function duplicate($id) {
233
+ $slider = $this->get($id);
234
+ unset($slider['id']);
235
+
236
+ $slider['title'] .= n2_(' - copy');
237
+ $slider['time'] = date('Y-m-d H:i:s', N2Platform::getTime());
238
+
239
+ try {
240
+ $this->db->insert($slider);
241
+ $newSliderId = $this->db->insertId();
242
+ } catch (Exception $e) {
243
+ throw new Exception($e->getMessage());
244
+ }
245
+
246
+ if (!$newSliderId) {
247
+ return false;
248
+ }
249
+
250
+ $slidesModel = new N2SmartsliderSlidesModel();
251
+
252
+ foreach ($slidesModel->getAll($id) AS $slide) {
253
+ $slidesModel->copy($slide['id'], $newSliderId);
254
+ }
255
+
256
+ return $newSliderId;
257
+
258
+ }
259
+
260
+ function redirectToCreate() {
261
+ N2Request::redirect($this->appType->router->createUrl(array("sliders/create")), 302, true);
262
+ }
263
+
264
+ function exportSlider($id) {
265
+
266
+ }
267
+
268
+ function exportSliderAsHTML($id) {
269
+
270
+ }
271
+
272
+ public static function markChanged($sliderid) {
273
+ N2SmartSliderHelper::getInstance()
274
+ ->setSliderChanged($sliderid, 1);
275
+ }
276
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Slides.php ADDED
@@ -0,0 +1,686 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * User: David
5
+ * Date: 2014.06.03.
6
+ * Time: 8:32
7
+ */
8
+ class N2SmartsliderSlidesModel extends N2Model {
9
+
10
+ public function __construct() {
11
+ parent::__construct("nextend2_smartslider3_slides");
12
+ }
13
+
14
+ public function get($id) {
15
+ return $this->db->findByPk($id);
16
+ }
17
+
18
+ public function getAll($sliderid = 0, $where = '') {
19
+ return $this->db->queryAll('SELECT * FROM ' . $this->db->tableName . ' WHERE slider = ' . $sliderid . ' ' . $where . ' ORDER BY ordering', false, "assoc", null);
20
+ }
21
+
22
+ public function getRowFromPost($sliderId, $slide, $base64 = true) {
23
+
24
+ if (!isset($slide['title'])) return false;
25
+ if ($slide['title'] == '') $slide['title'] = n2_('New slide');
26
+
27
+ if (isset($slide['publishdates'])) {
28
+ $date = explode('|*|', $slide['publishdates']);
29
+ } else {
30
+ $date[0] = isset($slide['publish_up']) ? $slide['publish_up'] : null;
31
+ $date[1] = isset($slide['publish_down']) ? $slide['publish_down'] : null;
32
+ unset($slide['publish_up']);
33
+ unset($slide['publish_down']);
34
+ }
35
+ $up = strtotime(isset($date[0]) ? $date[0] : '');
36
+ $down = strtotime(isset($date[1]) ? $date[1] : '');
37
+
38
+ $generator_id = isset($slide['generator_id']) ? intval($slide['generator_id']) : 0;
39
+
40
+ $params = $slide;
41
+ unset($params['title']);
42
+ unset($params['slide']);
43
+ unset($params['description']);
44
+ unset($params['thumbnail']);
45
+ unset($params['published']);
46
+ unset($params['first']);
47
+ unset($params['publishdates']);
48
+
49
+ if (isset($params['generator_id'])) {
50
+ unset($params['generator_id']);
51
+ }
52
+
53
+ return array(
54
+ 'title' => $slide['title'],
55
+ 'slide' => ($base64 ? base64_decode($slide['slide']) : $slide['slide']),
56
+ 'description' => $slide['description'],
57
+ 'thumbnail' => $slide['thumbnail'],
58
+ 'published' => (isset($slide['published']) ? $slide['published'] : 0),
59
+ 'publish_up' => date('Y-m-d H:i:s', ($up && $up > 0 ? $up : strtotime('-1 day'))),
60
+ 'publish_down' => date('Y-m-d H:i:s', ($down && $down > 0 ? $down : strtotime('+10 years'))),
61
+ 'first' => (isset($slide['first']) ? $slide['first'] : 0),
62
+ 'params' => json_encode($params),
63
+ 'slider' => $sliderId,
64
+ 'ordering' => $this->getMaximalOrderValue($sliderId) + 1,
65
+ 'generator_id' => $generator_id
66
+ );
67
+ }
68
+
69
+ /**
70
+ * @param $sliderId
71
+ * @param $slide
72
+ * @param bool $base64
73
+ *
74
+ * @return bool
75
+ */
76
+ public function create($sliderId, $slide, $base64 = true) {
77
+
78
+ $row = $this->getRowFromPost($sliderId, $slide, $base64);
79
+
80
+ $slideId = $this->_create($row['title'], $row['slide'], $row['description'], $row['thumbnail'], $row['published'], $row['publish_up'], $row['publish_down'], 0, $row['params'], $row['slider'], $row['ordering'], $row['generator_id']);
81
+
82
+ self::markChanged($sliderId);
83
+
84
+ return $slideId;
85
+ }
86
+
87
+ protected function getMaximalOrderValue($sliderid = 0) {
88
+
89
+ $query = "SELECT MAX(ordering) AS ordering FROM " . $this->db->tableName . " WHERE slider = :id";
90
+ $result = $this->db->queryRow($query, array(
91
+ ":id" => $sliderid
92
+ ));
93
+
94
+ if (isset($result['ordering'])) return $result['ordering'] + 1;
95
+ return 0;
96
+ }
97
+
98
+ public function renderEditForm($slide) {
99
+ if ($slide) {
100
+
101
+ $data = json_decode($slide['params'], true);
102
+ if ($data == null) $data = array();
103
+ $data += $slide;
104
+ $data['sliderid'] = $slide['slider'];
105
+ echo '<input name="slide[generator_id]" value="' . $slide['generator_id'] . '" type="hidden" />';
106
+ } else {
107
+ $data = array(
108
+ 'static-slide' => N2Request::getInt('static')
109
+ );
110
+ }
111
+
112
+ $data['first'] = isset($slide['first']) ? $slide['first'] : 0;
113
+ $this->editForm($data);
114
+ return new N2Data($data);
115
+ }
116
+
117
+ public function simpleEditForm($data = array()) {
118
+ $configurationXmlFile = dirname(__FILE__) . '/forms/slide.xml';
119
+ N2Loader::import('libraries.form.form');
120
+ $form = new N2Form(N2Base::getApplication('smartslider')
121
+ ->getApplicationType('backend'));
122
+
123
+ $data['publishdates'] = isset($data['publishdates']) ? $data['publishdates'] : ((isset($data['publish_up']) ? $data['publish_up'] : '') . '|*|' . (isset($data['publish_down']) ? $data['publish_down'] : ''));
124
+
125
+ if (isset($data['slide'])) {
126
+ $data['slide'] = base64_encode($data['slide']);
127
+ }
128
+
129
+ $form->loadArray($data);
130
+
131
+ $form->loadXMLFile($configurationXmlFile);
132
+
133
+ echo $form->render('slide');
134
+ }
135
+
136
+ /**
137
+ * @param $tab N2TabTabbed
138
+ */
139
+ public function extendSlideSettings($tab) {
140
+
141
+ $slidersModel = new N2SmartsliderSlidersModel();
142
+ $slider = $slidersModel->get(N2Request::getInt('sliderid', 0));
143
+
144
+ $slidersSliderXml = call_user_func(array(
145
+ 'N2SSPluginType' . $slider['type'],
146
+ "getPath"
147
+ )) . '/slide.xml';
148
+ if (N2Filesystem::existsFile($slidersSliderXml)) {
149
+ $tab->addTabXML($slidersSliderXml);
150
+ }
151
+
152
+ }
153
+
154
+ /**
155
+ * @param array $data
156
+ */
157
+ private function editForm($data = array()) {
158
+
159
+ if ((!isset($data['static-slide']) || $data['static-slide'] != 1)) {
160
+ N2Pluggable::addAction('N2TabTabbedslide-settings', array(
161
+ $this,
162
+ 'extendSlideSettings'
163
+ ));
164
+ }
165
+
166
+ $this->simpleEditForm($data);
167
+
168
+ if (isset($data['generator_id']) && $data['generator_id'] > 0) {
169
+ $form = new N2Form();
170
+ $form->loadArray($data);
171
+
172
+ $form->loadXMLFile(dirname(__FILE__) . '/forms/slide_generator.xml');
173
+ echo $form->render('slide');
174
+ }
175
+
176
+ N2JS::addFirstCode("new NextendForm('smartslider-form','', {});");
177
+ }
178
+
179
+ /**
180
+ * @param int $id
181
+ * @param $slide
182
+ * @param bool $base64
183
+ *
184
+ * @return bool
185
+ */
186
+ public function save($id, $slide, $base64 = true) {
187
+ if (!isset($slide['title']) || $id <= 0) return false;
188
+ if ($slide['title'] == '') $slide['title'] = n2_('New slide');
189
+
190
+
191
+ if (isset($slide['publishdates'])) {
192
+ $date = explode('|*|', $slide['publishdates']);
193
+ } else {
194
+ $date[0] = $slide['publish_up'];
195
+ $date[1] = $slide['publish_down'];
196
+ unset($slide['publish_up']);
197
+ unset($slide['publish_down']);
198
+ }
199
+ $up = strtotime(isset($date[0]) ? $date[0] : '');
200
+ $down = strtotime(isset($date[1]) ? $date[1] : '');
201
+
202
+ $tmpslide = $slide;
203
+ unset($tmpslide['title']);
204
+ unset($tmpslide['slide']);
205
+ unset($tmpslide['description']);
206
+ unset($tmpslide['thumbnail']);
207
+ unset($tmpslide['published']);
208
+ unset($tmpslide['publishdates']);
209
+
210
+ $this->db->update(array(
211
+ 'title' => $slide['title'],
212
+ 'slide' => ($base64 ? base64_decode($slide['slide']) : $slide['slide']),
213
+ 'description' => $slide['description'],
214
+ 'thumbnail' => $slide['thumbnail'],
215
+ 'published' => (isset($slide['published']) ? $slide['published'] : 0),
216
+ 'publish_up' => date('Y-m-d H:i:s', ($up && $up > 0 ? $up : strtotime('-1 day'))),
217
+ 'publish_down' => date('Y-m-d H:i:s', ($down && $down > 0 ? $down : strtotime('+10 years'))),
218
+ 'params' => json_encode($tmpslide)
219
+ ), array('id' => $id));
220
+
221
+ self::markChanged(N2Request::getInt('sliderid'));
222
+
223
+ return $id;
224
+ }
225
+
226
+ public function updateParams($id, $params) {
227
+
228
+ $this->db->update(array(
229
+ 'params' => json_encode($params)
230
+ ), array('id' => $id));
231
+
232
+ return $id;
233
+ }
234
+
235
+ public function quickSlideUpdate($slide, $title, $description, $link) {
236
+
237
+ if ($title == '') $title = n2_('New slide');
238
+
239
+ $params = json_decode($slide['params'], true);
240
+ $params['link'] = $link;
241
+
242
+ return $this->db->update(array(
243
+ 'title' => $title,
244
+ 'description' => $description,
245
+ 'params' => json_encode($params)
246
+ ), array('id' => $slide['id']));
247
+ }
248
+
249
+ public function delete($id) {
250
+
251
+ $slide = $this->get($id);
252
+
253
+ if ($slide['generator_id'] > 0) {
254
+ $slidesWithSameGenerator = $this->getAll($slide['slider'], 'AND generator_id = ' . intval($slide['generator_id']));
255
+ if (count($slidesWithSameGenerator) == 1) {
256
+ $generatorModel = new N2SmartsliderGeneratorModel();
257
+ $generatorModel->delete($slide['generator_id']);
258
+ }
259
+ }
260
+
261
+ $this->db->deleteByAttributes(array(
262
+ "id" => intval($id)
263
+ ));
264
+
265
+ self::markChanged($slide['slider']);
266
+
267
+ }
268
+
269
+ public function createQuickImage($image, $sliderId) {
270
+ $publish_up = date('Y-m-d H:i:s', strtotime('-1 day'));
271
+ $publish_down = date('Y-m-d H:i:s', strtotime('+10 years'));
272
+
273
+ $parameters = array(
274
+ 'backgroundImage' => $image['image']
275
+ );
276
+
277
+ if (!empty($image['alt'])) {
278
+ $parameters['backgroundAlt'] = $image['alt'];
279
+ }
280
+
281
+ return $this->_create($image['title'], json_encode(array()), $image['description'], $image['image'], 1, $publish_up, $publish_down, 0, json_encode($parameters), $sliderId, $this->getMaximalOrderValue($sliderId), '');
282
+ }
283
+
284
+ public function createQuickVideo($video, $sliderId) {
285
+ $publish_up = date('Y-m-d H:i:s', strtotime('-1 day'));
286
+ $publish_down = date('Y-m-d H:i:s', strtotime('+10 years'));
287
+
288
+ $parameters = array(
289
+ 'thumbnailType' => 'videoDark'
290
+ );
291
+
292
+ $slide = new N2SmartSliderSlideHelper();
293
+
294
+ switch ($video['type']) {
295
+ case 'youtube':
296
+ new N2SmartSliderItemHelper($slide, 'youtube', array(
297
+ 'desktopportraitwidth' => '100%',
298
+ 'desktopportraitheight' => '100%',
299
+ 'desktopportraitalign' => 'left',
300
+ 'desktopportraitvalign' => 'top'
301
+ ), array(
302
+ "code" => $video['video'],
303
+ "youtubeurl" => $video['video'],
304
+ "image" => $video['image']
305
+ ));
306
+ break;
307
+ case 'vimeo':
308
+ new N2SmartSliderItemHelper($slide, 'vimeo', array(
309
+ 'desktopportraitwidth' => '100%',
310
+ 'desktopportraitheight' => '100%',
311
+ 'desktopportraitalign' => 'left',
312
+ 'desktopportraitvalign' => 'top'
313
+ ), array(
314
+ "vimeourl" => $video['video'],
315
+ "image" => ''
316
+ ));
317
+ break;
318
+ case 'video':
319
+ default:
320
+ return false;
321
+ }
322
+ $layers = $slide->data['slide'];
323
+
324
+ return $this->_create($video['title'], json_encode($layers), $video['description'], $video['image'], 1, $publish_up, $publish_down, 0, json_encode($parameters), $sliderId, $this->getMaximalOrderValue($sliderId), '');
325
+ }
326
+
327
+ public function createQuickPost($post, $sliderId) {
328
+ $publish_up = date('Y-m-d H:i:s', strtotime('-1 day'));
329
+ $publish_down = date('Y-m-d H:i:s', strtotime('+10 years'));
330
+
331
+ $data = new N2Data($post);
332
+
333
+ $parameters = array(
334
+ 'backgroundImage' => $data->get('image'),
335
+ 'link' => $data->get('link') . '|*|_self'
336
+ );
337
+
338
+ $title = $data->get('title');
339
+ $description = $data->get('description');
340
+
341
+ return $this->_create($title, json_encode($this->getSlideLayers($title, $description)), $description, $data->get('image'), 1, $publish_up, $publish_down, 0, json_encode($parameters), $sliderId, $this->getMaximalOrderValue($sliderId), '');
342
+ }
343
+
344
+ private function getSlideLayers($hasTitle = false, $hasDescription = false) {
345
+ $slide = new N2SmartSliderSlideHelper();
346
+ if ($hasTitle && $hasDescription) {
347
+ new N2SmartSliderItemHelper($slide, 'heading', array(
348
+ 'desktopportraitleft' => 30,
349
+ 'desktopportraittop' => 12,
350
+ 'desktopportraitalign' => 'left',
351
+ 'desktopportraitvalign' => 'top'
352
+ ), array(
353
+ 'heading' => '{name/slide}'
354
+ ));
355
+ new N2SmartSliderItemHelper($slide, 'text', array(
356
+ 'desktopportraitleft' => 30,
357
+ 'desktopportraittop' => 70,
358
+ 'desktopportraitalign' => 'left',
359
+ 'desktopportraitvalign' => 'top'
360
+ ), array(
361
+ 'content' => '{description/slide}'
362
+ ));
363
+ return $slide->data['slide'];
364
+ } else if ($hasTitle) {
365
+
366
+ new N2SmartSliderItemHelper($slide, 'heading', array(
367
+ 'desktopportraitleft' => 30,
368
+ 'desktopportraittop' => -12,
369
+ 'desktopportraitalign' => 'left',
370
+ 'desktopportraitvalign' => 'bottom'
371
+ ), array(
372
+ 'heading' => '{name/slide}'
373
+ ));
374
+ return $slide->data['slide'];
375
+ }
376
+ return array();
377
+ }
378
+
379
+ public function import($slide, $sliderId) {
380
+ return $this->_create($slide['title'], $slide['slide'], $slide['description'], $slide['thumbnail'], $slide['published'], $slide['publish_up'], $slide['publish_down'], $slide['first'], $slide['params']->toJson(), $sliderId, $slide['ordering'], $slide['generator_id']);
381
+ }
382
+
383
+ private function _create($title, $slide, $description, $thumbnail, $published, $publish_up, $publish_down, $first, $params, $slider, $ordering, $generator_id) {
384
+ $this->db->insert(array(
385
+ 'title' => $title,
386
+ 'slide' => $slide,
387
+ 'description' => $description,
388
+ 'thumbnail' => $thumbnail,
389
+ 'published' => $published,
390
+ 'publish_up' => $publish_up,
391
+ 'publish_down' => $publish_down,
392
+ 'first' => $first,
393
+ 'params' => $params,
394
+ 'slider' => $slider,
395
+ 'ordering' => $ordering,
396
+ 'generator_id' => $generator_id
397
+ ));
398
+
399
+ return $this->db->insertId();
400
+ }
401
+
402
+ public function duplicate($id) {
403
+ $slide = $this->get($id);
404
+
405
+ // Shift the afterwards slides ++
406
+ $this->db->query("UPDATE {$this->db->tableName} SET ordering = ordering + 1 WHERE slider = :sliderid AND ordering > :ordering", array(
407
+ ":sliderid" => intval($slide['slider']),
408
+ ":ordering" => intval($slide['ordering'])
409
+ ), '');
410
+
411
+ if (!empty($slide['generator_id'])) {
412
+ $generatorModel = new N2SmartsliderGeneratorModel();
413
+ $slide['generator_id'] = $generatorModel->duplicate($slide['generator_id']);
414
+ }
415
+
416
+ $slide['slide'] = N2Data::json_encode(N2SmartSliderLayer::translateIds(json_decode($slide['slide'], true)));
417
+
418
+ $slideId = $this->_create($slide['title'] . n2_(' - copy'), $slide['slide'], $slide['description'], $slide['thumbnail'], $slide['published'], $slide['publish_up'], $slide['publish_down'], 0, $slide['params'], $slide['slider'], $slide['ordering'] + 1, $slide['generator_id']);
419
+
420
+ self::markChanged($slide['slider']);
421
+ return $slideId;
422
+ }
423
+
424
+ public function copy($id, $targetSliderId) {
425
+ $id = intval($id);
426
+ $slide = $this->get($id);
427
+ if ($slide['generator_id'] > 0) {
428
+ $generatorModel = new N2SmartSliderGeneratorModel();
429
+ $slide['generator_id'] = $generatorModel->duplicate($slide['generator_id'], $targetSliderId);
430
+ }
431
+
432
+ $slide['slide'] = N2Data::json_encode(N2SmartSliderLayer::translateIds(json_decode($slide['slide'], true)));
433
+
434
+ $slideId = $this->_create($slide['title'] . n2_(' - copy'), $slide['slide'], $slide['description'], $slide['thumbnail'], $slide['published'], $slide['publish_up'], $slide['publish_down'], 0, $slide['params'], $targetSliderId, $slide['ordering'], $slide['generator_id']);
435
+ self::markChanged($slide['slider']);
436
+ return $slideId;
437
+ }
438
+
439
+ public function first($id) {
440
+ $slide = $this->get($id);
441
+
442
+ $this->db->update(array("first" => 0), array(
443
+ "slider" => $slide['slider']
444
+ ));
445
+
446
+ $this->db->update(array(
447
+ "first" => 1
448
+ ), array(
449
+ "id" => $id
450
+ ));
451
+
452
+ self::markChanged($slide['slider']);
453
+ }
454
+
455
+ public function publish($id) {
456
+
457
+ self::markChanged(N2Request::getInt('sliderid'));
458
+
459
+ return $this->db->update(array(
460
+ "published" => 1
461
+ ), array("id" => intval($id)));
462
+ }
463
+
464
+ public function unPublish($id) {
465
+ $this->db->update(array(
466
+ "published" => 0
467
+ ), array(
468
+ "id" => intval($id)
469
+ ));
470
+
471
+ self::markChanged(N2Request::getInt('sliderid'));
472
+
473
+ }
474
+
475
+ public function deleteBySlider($sliderid) {
476
+
477
+ $slides = $this->getAll($sliderid);
478
+ foreach ($slides as $slide) {
479
+ $this->delete($slide['id']);
480
+ }
481
+ self::markChanged($sliderid);
482
+ }
483
+
484
+ /**
485
+ * @param $sliderid
486
+ * @param $ids
487
+ *
488
+ * @return bool|int
489
+ */
490
+ public function order($sliderid, $ids) {
491
+ if (is_array($ids) && count($ids) > 0) {
492
+ $i = 0;
493
+ foreach ($ids AS $id) {
494
+ $id = intval($id);
495
+ if ($id > 0) {
496
+ $update = $this->db->update(array(
497
+ 'ordering' => $i,
498
+ ), array(
499
+ "id" => $id,
500
+ "slider" => $sliderid
501
+ ));
502
+
503
+ $i++;
504
+ }
505
+ }
506
+
507
+ self::markChanged($sliderid);
508
+
509
+ return $i;
510
+ }
511
+ return false;
512
+ }
513
+
514
+ public static function markChanged($sliderid) {
515
+ N2SmartSliderHelper::getInstance()
516
+ ->setSliderChanged($sliderid, 1);
517
+ }
518
+
519
+ public function makeStatic($slideId) {
520
+ $slideData = $this->get($slideId);
521
+ if ($slideData['generator_id'] > 0) {
522
+ $sliderObj = new N2SmartSlider($slideData['slider'], array());
523
+ $rootSlide = new N2SmartSliderSlide($sliderObj, $slideData);
524
+ $rootSlide->initGenerator(array());
525
+ $slides = $rootSlide->expandSlide();
526
+
527
+ // Shift the afterwards slides with the slides count
528
+ $this->db->query("UPDATE {$this->db->tableName} SET ordering = ordering + " . count($slides) . " WHERE slider = :sliderid AND ordering > :ordering", array(
529
+ ":sliderid" => intval($slideData['slider']),
530
+ ":ordering" => intval($slideData['ordering'])
531
+ ), '');
532
+
533
+ $firstUsed = false;
534
+ $i = 1;
535
+ foreach ($slides AS $slide) {
536
+ $row = $slide->getRow();
537
+ // set the proper ordering
538
+ $row['ordering'] += $i;
539
+ if ($row['first']) {
540
+ // Make sure to mark only one slide as start slide
541
+ if ($firstUsed) {
542
+ $row['first'] = 0;
543
+ } else {
544
+ $firstUsed = true;
545
+ }
546
+ }
547
+ $this->db->insert($row);
548
+ $i++;
549
+ }
550
+
551
+ $this->db->query("UPDATE {$this->db->tableName} SET published = 0, first = 0 WHERE id = :id", array(
552
+ ":id" => $slideData['id']
553
+ ), '');
554
+
555
+ return count($slides);
556
+ } else {
557
+ return false;
558
+ }
559
+ }
560
+
561
+ /**
562
+ * @param $slide N2SmartSliderSlide
563
+ * @param $slider N2SmartSliderAbstract
564
+ * @param $widget
565
+ * @param $appType
566
+ *
567
+ * @throws Exception
568
+ */
569
+ public static function box($slide, $slider, $widget, $appType, $optimize) {
570
+ $lt = array();
571
+
572
+ if ($slide->isStatic()) {
573
+ $lt[] = N2Html::tag('div', array(
574
+ 'class' => 'n2-button-tag n2-button n2-button-x-small n2-sidebar-list-bg n2-uc n2-h5',
575
+ ), n2_('Static slide'));
576
+ } else {
577
+
578
+ $lt[] = N2Html::tag('div', array(
579
+ 'class' => 'n2-button-tag n2-button n2-button-x-small n2-button-green n2-uc n2-h5 n2-slide-is-first',
580
+ ), n2_('First'));
581
+
582
+ $lt[] = N2Html::tag('a', array(
583
+ 'class' => 'n2-button n2-button-x-small n2-sidebar-list-bg n2-uc n2-h5 n2-slide-first',
584
+ 'href' => $appType->router->createUrl(array(
585
+ 'slides/first',
586
+ array(
587
+ 'sliderid' => $slider->sliderId,
588
+ 'slideid' => $slide->id
589
+ ) + N2Form::tokenizeUrl()
590
+ ))
591
+ ), n2_('Set First'));
592
+ }
593
+
594
+ $rt = array();
595
+
596
+ $rt[] = N2Html::tag('a', array(
597
+ 'class' => 'n2-button n2-button-small n2-sidebar-list-bg n2-sidebar-list-bg n2-slide-duplicate',
598
+ 'href' => $appType->router->createUrl(array(
599
+ 'slides/duplicate',
600
+ array(
601
+ 'sliderid' => $slider->sliderId,
602
+ 'slideid' => $slide->id
603
+ ) + N2Form::tokenizeUrl()
604
+ ))
605
+ ), N2Html::tag('i', array('class' => 'n2-i n2-it n2-i-duplicate'), ''));
606
+
607
+ $rt[] = N2Html::tag('a', array(
608
+ 'class' => 'n2-button n2-button-small n2-sidebar-list-bg n2-slide-delete',
609
+ 'href' => $appType->router->createUrl(array(
610
+ 'slides/delete',
611
+ array(
612
+ 'sliderid' => $slider->sliderId,
613
+ 'slideid' => $slide->id
614
+ ) + N2Form::tokenizeUrl()
615
+ ))
616
+ ), N2Html::tag('i', array('class' => 'n2-i n2-it n2-i-delete'), ''));
617
+
618
+ $rt[] = N2Html::tag('div', array(
619
+ 'class' => 'n2-button n2-button-small n2-button-blue n2-slide-selected',
620
+ ), N2Html::tag('i', array('class' => 'n2-i n2-it n2-i-tick'), ''));
621
+
622
+ $rb = array();
623
+
624
+ if ($slide->hasGenerator()) {
625
+ $rb[] = N2Html::tag('a', array(
626
+ 'class' => 'n2-button n2-button-x-small n2-sidebar-list-bg n2-uc n2-h5 n2-slide-generator' . (N2Request::getVar('generator_id') == $slide->generator_id ? ' n2-button-blue' : ''),
627
+ 'href' => $appType->router->createUrl(array(
628
+ 'generator/edit',
629
+ array(
630
+ 'generator_id' => $slide->generator_id
631
+ )
632
+ ))
633
+ ), 'Edit generator');
634
+ }
635
+
636
+ $image = $slide->getThumbnail();
637
+ if (empty($image)) {
638
+ $image = '$system$/images/placeholder/image.png';
639
+ }
640
+
641
+ $editUrl = $appType->router->createUrl(array(
642
+ 'slides/edit',
643
+ array(
644
+ 'sliderid' => $slider->sliderId,
645
+ 'slideid' => $slide->id
646
+ )
647
+ ));
648
+
649
+ $lb = array();
650
+
651
+ $lb[] = N2Html::tag('div', array(
652
+ 'class' => 'n2-button-tag n2-button n2-button-x-small n2-sidebar-list-bg n2-uc n2-h5',
653
+ 'style' => 'cursor:pointer;'
654
+ ), '#' . $slide->id);
655
+
656
+ $widget->init("box", array(
657
+ 'attributes' => array(
658
+ 'class' => 'n2-box-slide n2-box-overflow' . ($slide->isFirst() ? ' n2-first-slide' : '') . ($slide->isCurrentlyEdited() ? ' n2-ss-slide-active' : ''),
659
+ 'data-slideid' => $slide->id,
660
+ 'data-title' => $slide->getRawTitle(),
661
+ 'data-description' => $slide->getRawDescription(),
662
+ 'data-link' => $slide->getRawLink(),
663
+ 'data-image' => N2ImageHelper::fixed($image),
664
+ 'data-editUrl' => $editUrl
665
+ ),
666
+ 'image' => $optimize->optimizeThumbnail($image),
667
+ 'firstCol' => N2Html::link($slide->getTitle() . ($slide->hasGenerator() ? ' [' . $slide->getSlideStat() . ']' : ''), $editUrl, array('class' => 'n2-h4')),
668
+ 'lt' => implode('', $lt),
669
+ 'lb' => implode('', $lb),
670
+ 'lbAttributes' => array('class' => 'n2-on-hover'),
671
+ 'rt' => implode('', $rt),
672
+ 'rtAttributes' => array('class' => 'n2-on-hover'),
673
+ 'rb' => implode('', $rb),
674
+ 'placeholderContent' => N2Html::tag('a', array(
675
+ 'class' => 'n2-slide-published' . ($slide->published ? ' n2-active' : ''),
676
+ 'href' => $appType->router->createUrl(array(
677
+ 'slides/publish',
678
+ array(
679
+ 'sliderid' => $slider->sliderId,
680
+ 'slideid' => $slide->id
681
+ ) + N2Form::tokenizeUrl()
682
+ ))
683
+ ), N2Html::tag('i', array('class' => 'n2-i n2-it n2-i-unpublished'), ''))
684
+ ));
685
+ }
686
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Update.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderUpdateModel {
4
+
5
+ private $storage, $version;
6
+
7
+ public function __construct() {
8
+ $this->storage = N2Base::getApplication('smartslider')->storage;
9
+ $this->version = $this->storage->get('update', 'version');
10
+ }
11
+
12
+ public static function getInstance() {
13
+ static $ins;
14
+ if (!$ins) {
15
+ $ins = new N2SmartsliderUpdateModel();
16
+ }
17
+ return $ins;
18
+ }
19
+
20
+ public function getVersion() {
21
+ return $this->version;
22
+ }
23
+
24
+ public function setVersion($version) {
25
+ $this->storage->set('update', 'version', $version);
26
+ $this->storage->set('update', 'lastcheck', time());
27
+ $this->version = $version;
28
+ }
29
+
30
+ public function hasUpdate() {
31
+ $this->autoCheck();
32
+ if (version_compare(N2SS3::$version, $this->version) == -1) {
33
+ return true;
34
+ }
35
+ return false;
36
+ }
37
+
38
+ private function autoCheck() {
39
+ if (intval(N2SmartSliderSettings::get('autoupdatecheck', 1))) {
40
+ $time = $this->storage->get('update', 'lastcheck');
41
+ if (!$time || strtotime("+1 week", $time) < time()) {
42
+ $this->check();
43
+ }
44
+ }
45
+ }
46
+
47
+ public function check() {
48
+
49
+ $posts = array(
50
+ 'action' => 'version'
51
+ );
52
+ $response = N2SS3::api($posts);
53
+ if ($response['status'] == 'OK') {
54
+ $this->setVersion($response['data']['latestVersion']);
55
+ }
56
+ return $response['status'];
57
+ }
58
+
59
+ public function lastCheck() {
60
+ $time = $this->storage->get('update', 'lastcheck');
61
+ if (empty($time)) {
62
+ return n2_('never');
63
+ }
64
+ return date("Y-m-d H:i", $time);
65
+ }
66
+
67
+ public function update() {
68
+
69
+ $posts = array(
70
+ 'action' => 'update'
71
+ );
72
+
73
+ $response = N2SS3::api($posts);
74
+ if (is_string($response)) {
75
+ $updateStatus = N2Platform::updateFromZip($response, N2SS3::getUpdateInfo());
76
+ if ($updateStatus === true) {
77
+ return 'OK';
78
+ } else if ($updateStatus != false) {
79
+ return $updateStatus;
80
+ }
81
+ return 'UPDATE_ERROR';
82
+ }
83
+
84
+ return $response['status'];
85
+ }
86
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/backgroundanimation.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import(array(
3
+ 'libraries.backgroundanimation.storage'
4
+ ), 'smartslider');
5
+
6
+ class N2SmartSliderBackgroundAnimationModel extends N2SystemVisualModel
7
+ {
8
+
9
+ public $type = 'backgroundanimation';
10
+
11
+ public function __construct($tableName = null) {
12
+
13
+ parent::__construct($tableName);
14
+ $this->storage = N2Base::getApplication('smartslider')->storage;
15
+ }
16
+
17
+ protected function getPath() {
18
+ return dirname(__FILE__);
19
+ }
20
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/backgroundanimation/sets.xml ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <root>
2
+ <params name="layout-sets" label="Layout sets" type="naked">
3
+ <param type="list" name="sets" default=""/>
4
+ </params>
5
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/halign.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.form.element.radiotab');
3
+
4
+ class N2ElementHAlign extends N2ElementRadioTab
5
+ {
6
+
7
+ protected $class = 'n2-form-element-radio-tab n2-form-element-icon-radio';
8
+
9
+ function generateOptions(&$xml) {
10
+ $options = array(
11
+ 'left' => 'n2-i n2-it n2-i-horizontal-left',
12
+ 'center' => 'n2-i n2-it n2-i-horizontal-center',
13
+ 'right' => 'n2-i n2-it n2-i-horizontal-right'
14
+ );
15
+ $length = count($options) - 1;
16
+
17
+ $this->values = array();
18
+ $html = '';
19
+ $i = 0;
20
+ foreach ($options AS $value => $class) {
21
+ $this->values[] = $value;
22
+
23
+ $html .= N2Html::tag('div', array(
24
+ 'class' => 'n2-radio-option' . ($this->isSelected($value) ? ' n2-active' : '') . ($i == 0 ? ' n2-first' : '') . ($i == $length ? ' n2-last' : '')
25
+ ), N2Html::tag('i', array('class' => $class)));
26
+ $i++;
27
+ }
28
+ return $html;
29
+ }
30
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/items.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Form::importElement('hidden');
3
+
4
+ class N2ElementItems extends N2ElementHidden
5
+ {
6
+
7
+
8
+ function fetchElement() {
9
+ $items = array();
10
+ N2Plugin::callPlugin('ssitem', 'onNextendSliderItemList', array(&$items));
11
+ ob_start();
12
+ ?>
13
+ <div id="smartslider-slide-toolbox-item" class="nextend-clearfix smartslider-slide-toolbox-view">
14
+ <?php
15
+ $itemModel = new N2SmartsliderItemModel();
16
+
17
+ foreach ($items AS $type => $item) {
18
+ echo N2Html::openTag("div", array(
19
+ "id" => "smartslider-slide-toolbox-item-type-{$type}",
20
+ "style" => "display:none",
21
+ "data-itemtemplate" => $item[1],
22
+ "data-itemvalues" => $item[3]
23
+ ));
24
+ $itemModel->renderForm($type, $item);
25
+ echo N2Html::closeTag("div");
26
+ }
27
+ ?>
28
+ </div>
29
+ <?php
30
+ return ob_get_clean();
31
+ }
32
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/layerpicker.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.form.element.hidden');
3
+
4
+ class N2ElementLayerPicker extends N2ElementHidden
5
+ {
6
+
7
+ public $_tooltip = true;
8
+
9
+ function fetchElement() {
10
+
11
+ N2JS::addInline('new NextendElementLayerPicker("' . $this->_id . '");');
12
+
13
+ return parent::fetchElement() . N2Html::tag('div', array('class' => 'n2-ss-layer-picker'), '<i class="n2-i n2-it n2-i-16 n2-i-layerlink"></i>');
14
+ }
15
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/sliderresponsive.php ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.form.element.subformImage');
3
+
4
+ class N2ElementSliderResponsive extends N2ElementSubformImage
5
+ {
6
+
7
+ var $_list = null;
8
+
9
+ function getOptions() {
10
+ if ($this->_list == null) {
11
+ $this->loadList();
12
+ }
13
+ $list = array_keys($this->_list);
14
+ return $list;
15
+ }
16
+
17
+ function getSubFormFolder($value) {
18
+ if ($this->_list == null) {
19
+ $this->loadList();
20
+ }
21
+ if (!isset($this->_list[$value])) list($value) = array_keys($this->_list);
22
+ return $this->_list[$value];
23
+ }
24
+
25
+ function loadList() {
26
+ $_list = array();
27
+ N2Plugin::callPlugin('ssresponsive', 'onResponsiveList', array(
28
+ &$_list,
29
+ &$this->labels
30
+ ));
31
+
32
+ $this->_list = array();
33
+
34
+ $this->_list += $_list;
35
+ }
36
+
37
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/slidertype.php ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.form.element.subformImage');
3
+
4
+ class N2ElementSliderType extends N2ElementSubformImage
5
+ {
6
+
7
+ var $_list = null;
8
+
9
+ function renderSelector() {
10
+
11
+ N2JS::addInline('
12
+ new NextendElementSliderType(
13
+ "' . $this->_id . '"
14
+ );
15
+ ');
16
+
17
+ return parent::renderSelector();
18
+ }
19
+
20
+ function getOptions() {
21
+ if ($this->_list == null) {
22
+ $this->loadList();
23
+ }
24
+ $list = array_keys($this->_list);
25
+ return $list;
26
+ }
27
+
28
+ function getSubFormfolder($value) {
29
+ if ($this->_list == null) {
30
+ $this->loadList();
31
+ }
32
+ if (!isset($this->_list[$value])) list($value) = array_keys($this->_list);
33
+ return $this->_list[$value];
34
+ }
35
+
36
+ function loadList() {
37
+ $_list = array();
38
+ N2Plugin::callPlugin('sstype', 'onTypeList', array(
39
+ &$_list,
40
+ &$this->labels
41
+ ));
42
+
43
+ $this->_list = array();
44
+
45
+ /**
46
+ * We have to force the proper order in the slider types
47
+ */
48
+ if (isset($_list['simple'])) {
49
+ $this->_list['simple'] = $_list['simple'];
50
+ unset($_list['simple']);
51
+ }
52
+
53
+ if (isset($_list['carousel'])) {
54
+ $this->_list['carousel'] = $_list['carousel'];
55
+ unset($_list['carousel']);
56
+ }
57
+
58
+ if (isset($_list['showcase'])) {
59
+ $this->_list['showcase'] = $_list['showcase'];
60
+ unset($_list['showcase']);
61
+ }
62
+
63
+ if (isset($_list['horizontalaccordion'])) {
64
+ $this->_list['horizontalaccordion'] = $_list['horizontalaccordion'];
65
+ unset($_list['horizontalaccordion']);
66
+ }
67
+
68
+ if (isset($_list['verticalaccordion'])) {
69
+ $this->_list['verticalaccordion'] = $_list['verticalaccordion'];
70
+ unset($_list['verticalaccordion']);
71
+ }
72
+
73
+ $this->_list += $_list;
74
+ }
75
+
76
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/valign.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.form.element.radiotab');
3
+
4
+ class N2ElementVAlign extends N2ElementRadioTab
5
+ {
6
+
7
+ protected $class = 'n2-form-element-radio-tab n2-form-element-icon-radio';
8
+
9
+ function generateOptions(&$xml) {
10
+ $options = array(
11
+ 'top' => 'n2-i n2-it n2-i-vertical-top',
12
+ 'middle' => 'n2-i n2-it n2-i-vertical-middle',
13
+ 'bottom' => 'n2-i n2-it n2-i-vertical-bottom'
14
+ );
15
+ $length = count($options) - 1;
16
+
17
+ $this->values = array();
18
+ $html = '';
19
+ $i = 0;
20
+ foreach ($options AS $value => $class) {
21
+ $this->values[] = $value;
22
+
23
+ $html .= N2Html::tag('div', array(
24
+ 'class' => 'n2-radio-option' . ($this->isSelected($value) ? ' n2-active' : '') . ($i == 0 ? ' n2-first' : '') . ($i == $length ? ' n2-last' : '')
25
+ ), N2Html::tag('i', array('class' => $class)));
26
+ $i++;
27
+ }
28
+ return $html;
29
+ }
30
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/generator_edit.xml ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="generator" label="Generator settings">
3
+ <param type="number" name="record-slides" label="Slides" default="1" style="width:30px;">
4
+ <unit>slides</unit>
5
+ </param>
6
+ <param type="button" name="record-viewer" label="Record viewer" default="View records"/>
7
+ <param type="number" name="cache-expiration" label="Cache expiration" default="24" style="width:30px;">
8
+ <unit>hours</unit>
9
+ </param>
10
+ <param type="token"/>
11
+ </params>
12
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/import/restore.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <root>
2
+ <params name="restore-by-upload" label="Restore slider by upload - delete the slider with the same ID">
3
+ <param name="import-file" type="upload" label="Import file"/>
4
+ <param type="token"/>
5
+ </params>
6
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/import/restorefromserver.xml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="import-from-server" label="Restore slider from server - delete the slider with the same ID">
3
+ <param name="import-file" type="tmplist" extension="ss3" label="Import file"/>
4
+ <param name="image-mode" type="radio" label="Image mode" default="clone" class="n2-expert">
5
+ <option value="clone">Clone</option>
6
+ <option value="update">Old site url</option>
7
+ <option value="original">Original</option>
8
+ </param>
9
+ <param name="linked-visuals" type="onoff" label="Use linked visuals" default="1" class="n2-expert"/>
10
+ <param name="delete" type="onoff" label="Delete file after import" default="0"/>
11
+ <param type="token"/>
12
+ </params>
13
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/import/server.xml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="import-from-server" label="Import slider from server">
3
+ <param name="import-file" type="tmplist" extension="ss3" label="Import file"/>
4
+ <param name="delete" type="onoff" label="Delete file after import" default="0"/>
5
+ <param type="token"/>
6
+ </params>
7
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/import/upload.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <root>
2
+ <params name="import-by-upload" label="Import slider by upload">
3
+ <param name="import-file" type="upload" label="Import file"/>
4
+ <param type="token"/>
5
+ </params>
6
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/layer.xml ADDED
@@ -0,0 +1,62 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="layer-item-animation-tabs" classes="n2-sidebar-tab-switcher n2-tab-bordered n2-sidebar-tab-bg" type="tabbedsidebar" active="1" underlined="1">
3
+ <params name="item" type="grouppedsidebar" label="Item">
4
+ <params name="itemproperties" type="raw" label="Item properties" hidetitle="1">
5
+ <param name="items" type="items" label="" default=""/>
6
+ </params>
7
+ </params>
8
+ <params name="position" type="grouppedsidebar" label="Layer">
9
+ <params name="layerproperties" label="Layer properties" hidetitle="1">
10
+ <param name="crop" type="radio" label="Crop" default="visible">
11
+ <option value="visible">Off</option>
12
+ <option value="hidden">On</option>
13
+ <option value="auto">Scroll</option>
14
+ <option value="mask">Mask</option>
15
+ </param>
16
+ <param name="inneralign" type="radio" label="Inner align" default="left">
17
+ <option value="left">Left</option>
18
+ <option value="center">Center</option>
19
+ <option value="right">Right</option>
20
+ </param>
21
+ <param class="n2-expert" type="group" label="Font">
22
+ <param name="font-size" type="numberautocomplete" label="#Size modifier" default="100" style="width:32px" values="60,80,100,120,140,160,180">
23
+ <unit value="%">%</unit>
24
+ </param>
25
+ <param name="adaptive-font" type="onoff" label="Adaptive sizing" default="0"/></param>
26
+ <param class="n2-expert" type="group" label="#Align">
27
+ <param type="halign" name="align" label="Horizontal" default="left"/>
28
+ <param type="valign" name="valign" label="Vertical" default="top"/></param>
29
+ <param type="group" label="Position">
30
+ <param name="left" type="text" label="#X" default="" style="width:32px;">
31
+ <unit value="px">px</unit>
32
+ </param>
33
+ <param name="top" type="text" label="#Y" default="" style="width:32px;">
34
+ <unit value="px">px</unit>
35
+ </param>
36
+ <param name="responsive-position" type="onoff" label="Responsive" default="1"/></param>
37
+ <param type="group" label="Size">
38
+ <param name="width" type="text" label="#Width" default="" style="width:32px;">
39
+ <unit value="px">px</unit>
40
+ </param>
41
+ <param name="height" type="text" label="#Height" default="" style="width:32px;">
42
+ <unit value="px">px</unit>
43
+ </param>
44
+ <param name="responsive-size" type="onoff" label="Responsive" default="1"/></param>
45
+ <param type="text" name="class" label="CSS class" default=""/>
46
+ <param type="text" name="id" label="ID" default="" class="n2-hidden"/>
47
+ <param type="group" label="Relative point" class="n2-expert">
48
+ <param type="layerpicker" name="parentid" label="Layer" default=""/>
49
+ <param type="halign" name="parentalign" label="#Horizontal" default="left"/>
50
+ <param type="valign" name="parentvalign" label="#Vertical" default="top"/></param>
51
+ <param type="group" label="Show on">
52
+ <param name="show-desktop-portrait" type="onoff" label="Desktop portrait" default="1"/>
53
+ <param name="show-desktop-landscape" type="onoff" label="Desktop landscape" default="1"/>
54
+ <param name="show-tablet-portrait" type="onoff" label="Tablet portrait" default="1"/>
55
+ <param name="show-tablet-landscape" type="onoff" label="Tablet landscape" default="1"/>
56
+ <param name="show-mobile-portrait" type="onoff" label="Mobile portrait" default="1"/>
57
+ <param name="show-mobile-landscape" type="onoff" label="Mobile landscape" default="1"/></param>
58
+ <param name="resettodesktop" type="button" label="Reset position" default="Reset"/>
59
+ </params>
60
+ </params>
61
+ </params>
62
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/layout/sets.xml ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <root>
2
+ <params name="layout-sets" label="Layout sets" type="naked">
3
+ <param type="list" name="sets" default=""/>
4
+ </params>
5
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/license.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <root>
2
+ <params name="license" label="License">
3
+ <param name="license" type="text" label="License key" default="" style="width: 300px;"/>
4
+ <param type="token"/>
5
+ </params>
6
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/multigenerator.xml ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="generator" label="Generator settings">
3
+ <param type="number" name="record-slides" label="Slides" default="1" style="width:30px;">
4
+ <unit>slides</unit>
5
+ </param>
6
+ <param type="number" name="cache-expiration" label="Cache expiration" default="24" style="width:30px;">
7
+ <unit>hours</unit>
8
+ </param>
9
+ <param type="button" name="record-viewer" label="Record viewer" default="View records"/>
10
+ <param type="token"/>
11
+ </params>
12
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/settings/default.xml ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="general" label="General settings">
3
+ <param type="token"/>
4
+ <param type="onoff" name="beacon" label="Show help beacon" default="1"/>
5
+ <param type="onoff" name="discover" label="Show discover modal" default="1"/>
6
+ <param type="onoff" name="autoupdatecheck" label="Automatic update check" default="1"/>
7
+ <param type="mixed" label="Translate url" name="translate-url" default="|*|">
8
+ <param type="text" label="From" style="width:200px;"/>
9
+ <param type="text" label="To" style="width:200px;"/>
10
+ </param>
11
+ <param type="textarea" name="external-css-files" label="Additional CSS files" default=""
12
+ style2="width:400px; height: 100px; resize: vertical;" class="n2-hidden"/>
13
+ <param type="onoff" name="hardware-acceleration" label="Hardware acceleration on sliders" default="1"/>
14
+ <param type="onoff" name="slide-as-file" label="Send slide as file" default="0"/>
15
+ <param type="onoff" name="improved-small-screen" label="Improved small screen" default="1"/>
16
+ <param type="onoff" name="preview-new-window" label="Open preview in new window" default="0"/>
17
+ <param type="onoff" name="editor-icon" label="Show editor icon" default="1"/>
18
+ <param type="onoff" name="wp-adminbar" label="Show in WordPress admin bar" default="1"/>
19
+ </params>
20
+ <params name="reponsive" label="Responsive mode">
21
+ <param type="radio" label="Based on" name="responsive-basedon" default="combined">
22
+ <option value="device">Real device detection</option>
23
+ <option value="screen">Maximum screen width</option>
24
+ <option value="combined">Combined</option>
25
+ </param>
26
+ <param type="group" label="Maximum screen width">
27
+ <param type="text" name="responsive-screen-width-desktop-portrait" label="Desktop portrait"
28
+ style="width:40px;" default="1200">
29
+ <unit>px</unit>
30
+ </param>
31
+ <param type="text" name="responsive-screen-width-tablet-landscape" label="Tablet landscape"
32
+ style="width:40px;" default="1024">
33
+ <unit>px</unit>
34
+ </param>
35
+ <param type="text" name="responsive-screen-width-tablet-portrait" label="Tablet portrait"
36
+ style="width:40px;" default="800">
37
+ <unit>px</unit>
38
+ </param>
39
+ <param type="text" name="responsive-screen-width-mobile-LANDSCAPE" label="Mobile landscape"
40
+ style="width:40px;" default="740">
41
+ <unit>px</unit>
42
+ </param>
43
+ <param type="text" name="responsive-screen-width-mobile-portrait" label="Mobile portrait"
44
+ style="width:40px;" default="440">
45
+ <unit>px</unit>
46
+ </param>
47
+ </param>
48
+ <param type="group" label="Default width percentage">
49
+ <param type="number" name="responsive-default-ratio-tablet-portrait" label="Tablet portrait"
50
+ style="width:40px;" default="70" max="100" min="0">
51
+ <unit>%</unit>
52
+ </param>
53
+ <param type="number" name="responsive-default-ratio-mobile-portrait" label="Mobile portrait"
54
+ style="width:40px;" default="50" max="100" min="0">
55
+ <unit>%</unit>
56
+ </param>
57
+ </param>
58
+ </params>
59
+ <params name="cache" label="Cache">
60
+ <param type="button" label="Clear" name="clear-cache" default="Clear cache">
61
+ <app>smartslider</app>
62
+ <queries>
63
+ <controller>settings</controller>
64
+ <action>clearcache</action>
65
+ </queries>
66
+ </param>
67
+ </params>
68
+
69
+ <params name="tidy" label="Tidy settings">
70
+ <param type="list" default="utf8" name="tidy-input-encoding" label="Input encoding">
71
+ <option value="raw">raw</option>
72
+ <option value="ascii">ascii</option>
73
+ <option value="latin0">latin0</option>
74
+ <option value="latin1">latin1</option>
75
+ <option value="utf8">utf8</option>
76
+ <option value="iso2022">iso2022</option>
77
+ <option value="mac">mac</option>
78
+ <option value="win1252">win1252</option>
79
+ <option value="ibm858">ibm858</option>
80
+ <option value="utf16le">utf16le</option>
81
+ <option value="utf16be">utf16be</option>
82
+ <option value="utf16">utf16</option>
83
+ <option value="big5">big5</option>
84
+ <option value="shiftjis">shiftjis</option>
85
+ </param>
86
+ <param type="list" default="utf8" name="tidy-output-encoding" label="Output encoding">
87
+ <option value="raw">raw</option>
88
+ <option value="ascii">ascii</option>
89
+ <option value="latin0">latin0</option>
90
+ <option value="latin1">latin1</option>
91
+ <option value="utf8">utf8</option>
92
+ <option value="iso2022">iso2022</option>
93
+ <option value="mac">mac</option>
94
+ <option value="win1252">win1252</option>
95
+ <option value="ibm858">ibm858</option>
96
+ <option value="utf16le">utf16le</option>
97
+ <option value="utf16be">utf16be</option>
98
+ <option value="utf16">utf16</option>
99
+ <option value="big5">big5</option>
100
+ <option value="shiftjis">shiftjis</option>
101
+ </param>
102
+ </params>
103
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/settings/joomla.xml ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="joomla" label="Joomla settings">
3
+ <param name="license" type="text" label="License" value=""/>
4
+ <param type="radio" name="imageurl" label="Image URL" default="1">
5
+ <option value="0">Absolute</option>
6
+ <option value="1">Relative</option>
7
+ </param>
8
+ <param name="acl" type="joomlacomponentoptions" component="com_smartslider3" label="Component options"
9
+ default=""/>
10
+ <param name="loadposition" type="onoff" label="Load module position" default="0"/>
11
+ </params>
12
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/slide.xml ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="slide-settings" type="tabbed" active="1" underlined="1">
3
+ <params name="details" type="groupped" label="Details">
4
+ <params name="details-top" label="" hidetitle="1">
5
+ <param name="title" type="text" label="Name" default="Slide 1" style="width: 400px;"/>
6
+ <param name="description" type="textarea" label="Description" default="" style="display: block;" style2="width:100%; resize: vertical; height: 50px;"/>
7
+ <param type="mixed" name="link" label="Link" default="|*|_self">
8
+ <param type="url" label="Link"/>
9
+ <param type="list" label="Target" translateable="1">
10
+ <option value="_self">Self</option>
11
+ <option value="_blank">Blank</option>
12
+ </param>
13
+ </param>
14
+ <param name="slide" type="hidden" label="Slide" default="W10=" class="n2-hidden"/>
15
+ </params>
16
+ </params>
17
+ <params name="background" type="groupped" label="Background">
18
+ <params name="background-top" label="" hidetitle="1">
19
+ <param type="group" label="Thumbnail">
20
+ <param name="thumbnail" type="image" label="Image" default=""/>
21
+ <param name="thumbnailType" type="list" label="Type" default="default" translateable="1">
22
+ <option value="default">Default</option>
23
+ <option value="videoDark">Video</option>
24
+ </param>
25
+ </param>
26
+ <param type="group" label="Background">
27
+ <param name="backgroundImage" type="imagemanager" label="Image" default=""/>
28
+ <param name="backgroundFocusX" type="text" label="Focus X" default="50" max="100" min="0" style="width: 22px;">
29
+ <unit value="%">%</unit>
30
+ </param>
31
+ <param name="backgroundFocusY" type="text" label="Focus Y" default="50" max="100" min="0" style="width: 22px;" post="break">
32
+ <unit value="%">%</unit>
33
+ </param>
34
+ <param name="backgroundColor" type="color" alpha="1" label="Color" default="ffffff00"/>
35
+ <param name="backgroundImageOpacity" label="Opacity" type="numberautocomplete" default="100" style="width: 22px;" min="0" max="100" values="100,80,60,40,20,0">
36
+ <unit value="%">%</unit>
37
+ </param>
38
+ <param name="backgroundAlt" type="text" label="Alt tag" default=""/></param>
39
+ <param name="backgroundMode" type="imagelistlabel" label="Fill mode" default="default" translateable="1">
40
+ <option value="default" image="$ss$/images/fillmode/default.png">Slider&apos;s default</option>
41
+ <option value="fill" image="$ss$/images/fillmode/fill.png">Fill</option>
42
+ <option value="fit" image="$ss$/images/fillmode/fit.png">Fit</option>
43
+ <option value="stretch" image="$ss$/images/fillmode/stretch.png">Stretch</option>
44
+ <option value="center" image="$ss$/images/fillmode/center.png">Center</option>
45
+ <option value="tile" image="$ss$/images/fillmode/tile.png">Tile</option>
46
+ </param>
47
+ </params>
48
+ </params>
49
+ <params name="other" type="groupped" label="Other">
50
+ <params name="other-top" label="" hidetitle="1">
51
+ <param type="group" name="Properties" class="n2-expert">
52
+ <param name="published" type="onoff" label="Published" default="1"/>
53
+ <param name="first" type="onoff" label="First" default="0" class="n2-hidden"/>
54
+ <param type="onoff" name="static-slide" label="Static slide" default="0" class="n2-expert"/></param>
55
+ <param name="publishdates" type="mixed" label="Published between" class="n2-expert" default="0000-00-00 00:00:00|*|0000-00-00 00:00:00">
56
+ <param type="date" label="Publish up"/>
57
+ <param type="date" label="Publish down"/></param>
58
+ <param name="slide-duration" type="text" label="Slide duration" style="width:40px;" default="0">
59
+ <unit value="ms">ms</unit>
60
+ </param>
61
+ </params>
62
+ </params>
63
+ </params>
64
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/slide_generator.xml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="generator-parameters" label="Generator">
3
+ <param type="number" name="record-slides" label="Slides" default="1" style="width:30px;">
4
+ <unit>slides</unit>
5
+ </param>
6
+ </params>
7
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/slider.xml ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="slider-settings" type="tabbed" active="1" underlined="1">
3
+ <params name="general" type="groupped" label="General">
4
+ <params name="slider" label="Slider settings" hidetitle="1">
5
+ <param name="title" type="text" label="Name" default="Slider" style="width:400px;"/>
6
+ <param label="Controls" type="group">
7
+ <param name="controlsScroll" type="onoff" label="Mouse scroll" default="0"/>
8
+ <param name="controlsDrag" type="onoff" label="Mouse drag" default="1"/>
9
+ <param name="controlsTouch" type="radio" label="Touch" default="horizontal">
10
+ <option value="0">Disabled</option>
11
+ <option value="horizontal">Horizontal</option>
12
+ <option value="vertical">Vertical</option>
13
+ </param>
14
+ <param name="controlsKeyboard" type="onoff" label="Keyboard" default="1"/></param>
15
+ <param name="align" type="radio" label="Align" default="normal">
16
+ <option value="normal">Normal</option>
17
+ <option value="left">Left</option>
18
+ <option value="center">Center</option>
19
+ <option value="right">Right</option>
20
+ </param>
21
+ </params>
22
+ <params name="slidertype" label="Slider Type" class="n2-expert">
23
+ <param name="type" type="slidertype" ajaxurl="slider/renderform" label="Type" default="simple" file="slider.xml"/>
24
+ </params>
25
+ <params name="slidertypeplaceholder" label="Slider Type placeholder" id="nextend-type-panel" type="placeholder"></params>
26
+ </params>
27
+ <params name="size" type="groupped" label="Size">
28
+ <params name="slider-responsive" label="Responsive" hidetitle="1">
29
+ <param type="group" label="Slider size">
30
+ <param name="width" type="numberautocomplete" label="Width" default="900" style="width:35px" values="1920,1400,1000,800,600,400">
31
+ <unit>px</unit>
32
+ </param>
33
+ <param name="height" type="numberautocomplete" label="Height" default="500" style="width:35px" values="800,600,500,400,300,200">
34
+ <unit>px</unit>
35
+ </param>
36
+ </param>
37
+ <param type="number" name="fontsize" label="Font size" default="16" style="width:20px" class="n2-hidden">
38
+ <unit>px</unit>
39
+ </param>
40
+ <param name="margin" label="Margin" type="mixed" default="0|*|0|*|0|*|0" translateable="1">
41
+ <param type="text" style="width: 22px;" label="Top">
42
+ <unit value="px">px</unit>
43
+ </param>
44
+ <param type="text" style="width: 22px;" label="Right">
45
+ <unit value="px">px</unit>
46
+ </param>
47
+ <param type="text" style="width: 22px;" label="Bottom">
48
+ <unit value="px">px</unit>
49
+ </param>
50
+ <param type="text" style="width: 22px;" label="Left">
51
+ <unit value="px">px</unit>
52
+ </param>
53
+ </param>
54
+ <param name="backgroundMode" type="imagelistlabel" label="Default slide background fill mode" default="fill" translateable="1">
55
+ <option value="fill" image="$ss$/images/fillmode/fill.png">Fill</option>
56
+ <option value="fit" image="$ss$/images/fillmode/fit.png">Fit</option>
57
+ <option value="stretch" image="$ss$/images/fillmode/stretch.png">Stretch</option>
58
+ <option value="center" image="$ss$/images/fillmode/center.png">Center</option>
59
+ <option value="tile" image="$ss$/images/fillmode/tile.png">Tile</option>
60
+ </param>
61
+ </params>
62
+ <params name="slider-responsive1" label="Responsive mode">
63
+ <param name="responsive-mode" type="sliderresponsive" ajaxurl="slider/renderform" default="auto" file="responsive.xml"/>
64
+ </params>
65
+ <params name="slider-responsive-placeholder" id="nextend-responsive-mode-panel" type="placeholder"/></params>
66
+ <params name="autoplay" type="groupped" label="Autoplay">
67
+ <params name="autoplay" label="Autoplay settings" hidetitle="1">
68
+ <param type="group" label="Autoplay">
69
+ <param name="autoplay" type="onoff" label="Enabled" default="0"/>
70
+ <param name="autoplayDuration" type="number" label="Interval" default="8000" style="width:35px;">
71
+ <unit>ms</unit>
72
+ </param>
73
+ </param>
74
+ <param type="group" label="Stop autoplay on">
75
+ <param name="autoplayStopClick" type="onoff" label="Click" default="1"/>
76
+ <param name="autoplayStopMouse" type="list" label="Mouse" default="0" translateable="1">
77
+ <option value="0">Off</option>
78
+ <option value="enter">Enter</option>
79
+ <option value="leave">Leave</option>
80
+ </param>
81
+ <param name="autoplayStopMedia" type="onoff" label="Media started" default="1"/></param>
82
+ </params>
83
+ </params>
84
+ <params name="optimize" type="groupped" label="Optimize">
85
+ <params name="optimize-images" label="Resize images">
86
+ <param name="optimize" type="onoff" label="Optimize" default="0"/>
87
+ <param name="optimize-quality" type="number" label="Quality" default="70" min="0" max="100" style="width: 40px;">
88
+ <unit value="%">%</unit>
89
+ </param>
90
+ <param label="Background image size" type="group">
91
+ <param name="optimize-background-image-custom" type="onoff" label="Custom size" default="0"/>
92
+ <param name="optimize-background-image-width" type="text" style="width: 40px;" label="Width" default="800">
93
+ <unit value="px">px</unit>
94
+ </param>
95
+ <param name="optimize-background-image-height" type="text" style="width: 40px;" label="Height" default="600">
96
+ <unit value="px">px</unit>
97
+ </param>
98
+ </param>
99
+ <param label="Thumbnail size" type="group">
100
+ <param name="optimizeThumbnailWidth" type="text" style="width: 40px;" label="Width" default="100">
101
+ <unit value="px">px</unit>
102
+ </param>
103
+ <param name="optimizeThumbnailHeight" type="text" style="width: 40px;" label="Height" default="60">
104
+ <unit value="px">px</unit>
105
+ </param>
106
+ </param>
107
+ </params>
108
+ </params>
109
+ <params name="other" type="groupped" label="Other">
110
+ <params name="advanced-callbacks" label="" hidetitle="1">
111
+ <param name="weaker-selector" type="onoff" label="Weaker CSS selectors" default="0"/>
112
+ <param name="delay" type="number" label="Delay" default="0" style="width:30px;">
113
+ <unit value="ms">ms</unit>
114
+ </param>
115
+ <param type="number" name="dependency" label="Pre loaded slider ID"/>
116
+ <param name="is-delayed" type="onoff" label="Delayed (for lightbox/tabs)" default="0"/>
117
+ <param name="overflow-hidden-page" type="onoff" label="Hide page overflow" default="0"/>
118
+ <param type="textarea" name="callbacks" label="JavaScript callbacks" style2="width:600px;height:600px;"/>
119
+ </params>
120
+ </params>
121
+ </params>
122
+ <params name="widgets" label="Widgets" type="raw" hidetitle="1">
123
+ <param name="widgets" type="pluginmatrix" label="" group="sswidget" method="onWidgetList" default="arrow"/>
124
+ </params>
125
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/translateurl.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="slider" label="Configuration">
3
+ <param type="mixed" label="Translate url" name="translateurl" default="|*|">
4
+ <param type="text" label="From"/>
5
+ <param type="text" label="To"/>
6
+ </param>
7
+ </params>
8
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/generator.php ADDED
@@ -0,0 +1,357 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import("libraries.slider.abstract", "smartslider");
3
+
4
+ class N2SmartsliderGeneratorModel extends N2Model
5
+ {
6
+
7
+ private static $layouts = array(
8
+ 'image' => '{"title":"{title}","description":"","thumbnail":"{thumbnail}","backgroundColor":"ffffff00","backgroundImage":"{image}","backgroundAlt":"","backgroundtitle":"","backgroundMode":"default","backgroundVideoMp4":"","backgroundVideoWebm":"","backgroundVideoOgg":"","backgroundVideoMuted":"1","backgroundVideoLoop":"1","backgroundVideoMode":"fill","link":"|*|_self","slidedurationin":"0","slidedurationout":"0","slide":[]}',
9
+ 'image_extended' => '{"title":"{title}","description":"{description}","thumbnail":"{image}","backgroundColor":"ffffff00","backgroundImage":"{image}","backgroundAlt":"","backgroundtitle":"","backgroundMode":"default","backgroundVideoMp4":"","backgroundVideoWebm":"","backgroundVideoOgg":"","backgroundVideoMuted":"1","backgroundVideoLoop":"1","backgroundVideoMode":"fill","link":"|*|_self","slidedurationin":"0","slidedurationout":"0","slide":[]}',
10
+ 'article' => '{"title":"{title}","description":"{description}","thumbnail":"{thumbnail}","backgroundColor":"ffffff00","backgroundImage":"{featured_image}","backgroundAlt":"","backgroundtitle":"","backgroundMode":"default","backgroundVideoMp4":"","backgroundVideoWebm":"","backgroundVideoOgg":"","backgroundVideoMuted":"1","backgroundVideoLoop":"1","backgroundVideoMode":"fill","link":"{url}|*|_self","slidedurationin":"0","slidedurationout":"0","slide":[]}',
11
+ 'youtube' => '{"title":"{title/1}","description":"{removehtml(description/1)}","thumbnail":"{thumbnail_medium/1}","backgroundColor":"ffffff00","backgroundImage":"","backgroundAlt":"","backgroundtitle":"","backgroundMode":"default","backgroundVideoMp4":"","backgroundVideoWebm":"","backgroundVideoOgg":"","backgroundVideoMuted":"1","backgroundVideoLoop":"1","backgroundVideoMode":"fill","link":"|*|_self","slidedurationin":"0","slidedurationout":"0","simplebganimation":"","kenburns":"50|*|50|*|","slide":[{"style":"position: absolute; z-index: 1;left:0%;top:0%;width:100%;height:100%;","animations":{},"name":"youtube","crop":"visible","align":"left","desktopportrait":1,"desktoplandscape":1,"tabletportrait":1,"tabletlandscape":1,"mobileportrait":1,"mobilelandscape":1,"desktopportraitleft":0,"desktopportraittop":0,"desktopportraitwidth":100,"desktopportraitheight":100,"items":[{"type":"youtube","values":{"youtubeurl":"{video_id/1}","volume":"-1","autoplay":"1","center":"0","loop":"0","theme":"dark","related":"0","vq":"default"}}]}]}'
12
+ );
13
+
14
+ private static function getLayout($type) {
15
+
16
+
17
+ $slide = new N2SmartSliderSlideHelper();
18
+
19
+ switch ($type) {
20
+ case 'image':
21
+ $slide->set('title', "{title}")
22
+ ->set('thumbnail', "{thumbnail}")
23
+ ->set('backgroundImage', "{image}");
24
+ break;
25
+
26
+ case 'image_extended':
27
+ $slide->set('title', "{title}")
28
+ ->set('thumbnail', "{thumbnail}")
29
+ ->set('backgroundImage', "{image}");
30
+
31
+ new N2SmartSliderItemHelper($slide, 'heading', array(
32
+ 'desktopportraitleft' => 30,
33
+ 'desktopportraittop' => -12,
34
+ 'desktopportraitalign' => 'left',
35
+ 'desktopportraitvalign' => 'bottom'
36
+ ), array(
37
+ 'heading' => '{title/1}'
38
+ ));
39
+ break;
40
+
41
+ case 'article':
42
+ $slide->set('title', "{title}")
43
+ ->set('description', "{description}")
44
+ ->set('link', '{url}|*|_self')
45
+ ->set('thumbnail', "{thumbnail}")
46
+ ->set('backgroundImage', "{image}");
47
+
48
+ new N2SmartSliderItemHelper($slide, 'heading', array(
49
+ 'desktopportraitleft' => 30,
50
+ 'desktopportraittop' => -12,
51
+ 'desktopportraitalign' => 'left',
52
+ 'desktopportraitvalign' => 'bottom'
53
+ ), array(
54
+ 'heading' => '{title}'
55
+ ));
56
+ break;
57
+
58
+ case 'product':
59
+ $slide->set('title', "{title}")
60
+ ->set('description', "{description}")
61
+ ->set('link', '{url}|*|_self')
62
+ ->set('thumbnail', "{thumbnail}")
63
+ ->set('backgroundImage', "{image}");
64
+
65
+ new N2SmartSliderItemHelper($slide, 'heading', array(
66
+ 'desktopportraitleft' => 30,
67
+ 'desktopportraittop' => -12,
68
+ 'desktopportraitalign' => 'left',
69
+ 'desktopportraitvalign' => 'bottom'
70
+ ), array(
71
+ 'heading' => '{title}'
72
+ ));
73
+
74
+ new N2SmartSliderItemHelper($slide, 'heading', array(
75
+ 'desktopportraitleft' => -30,
76
+ 'desktopportraittop' => -12,
77
+ 'desktopportraitalign' => 'right',
78
+ 'desktopportraitvalign' => 'bottom'
79
+ ), array(
80
+ 'heading' => '{price}'
81
+ ));
82
+ break;
83
+
84
+ case 'event':
85
+ $slide->set('title', "{title}")
86
+ ->set('description', "{description}")
87
+ ->set('link', '{url}|*|_self')
88
+ ->set('thumbnail', "{thumbnail}")
89
+ ->set('backgroundImage', "{image}");
90
+
91
+ new N2SmartSliderItemHelper($slide, 'heading', array(
92
+ 'desktopportraitleft' => 30,
93
+ 'desktopportraittop' => -12,
94
+ 'desktopportraitalign' => 'left',
95
+ 'desktopportraitvalign' => 'bottom'
96
+ ), array(
97
+ 'heading' => '{title}'
98
+ ));
99
+
100
+ new N2SmartSliderItemHelper($slide, 'heading', array(
101
+ 'desktopportraitleft' => -30,
102
+ 'desktopportraittop' => -12,
103
+ 'desktopportraitalign' => 'right',
104
+ 'desktopportraitvalign' => 'bottom'
105
+ ), array(
106
+ 'heading' => '{start_date}'
107
+ ));
108
+ break;
109
+
110
+ case 'youtube':
111
+ $slide->set('title', "{title}")
112
+ ->set('description', "{description}")
113
+ ->set('thumbnail', "{thumbnail}");
114
+
115
+ new N2SmartSliderItemHelper($slide, 'youtube', array(
116
+ 'desktopportraitwidth' => '100%',
117
+ 'desktopportraitheight' => '100%',
118
+ 'desktopportraitleft' => 0,
119
+ 'desktopportraittop' => 0
120
+ ), array(
121
+ 'youtubeurl' => '{video_url}',
122
+ 'image' => ''
123
+ ));
124
+ break;
125
+
126
+ case 'social_post':
127
+ $slide->set('title', "{title}")
128
+ ->set('description', "{description}")
129
+ ->set('link', '{url}|*|_self')
130
+ ->set('thumbnail', "{author_image}");
131
+
132
+ new N2SmartSliderItemHelper($slide, 'heading', array(
133
+ 'desktopportraittop' => 20,
134
+ 'desktopportraitalign' => 'center',
135
+ 'desktopportraitvalign' => 'top',
136
+ 'desktopportraitwidth' => '80%',
137
+ ), array(
138
+ 'nowrap' => 0,
139
+ 'heading' => '{message}'
140
+ ));
141
+
142
+ new N2SmartSliderItemHelper($slide, 'image', array(
143
+ 'desktopportraittop' => 50,
144
+ 'desktopportraitwidth' => 200,
145
+ 'desktopportraitheight' => 200
146
+ ), array(
147
+ 'image' => '{author_image}'
148
+ ));
149
+
150
+ new N2SmartSliderItemHelper($slide, 'button', array(
151
+ 'desktopportraittop' => 150
152
+ ), array(
153
+ 'content' => '{url_label}'
154
+ ));
155
+ break;
156
+
157
+ default:
158
+ return array(
159
+ 'title' => 'title',
160
+ 'slide' => array(),
161
+ 'description' => '',
162
+ 'thumbnail' => '',
163
+ 'published' => 1
164
+ );
165
+ }
166
+ return $slide->toArray();
167
+ }
168
+
169
+ public function __construct() {
170
+ parent::__construct("nextend2_smartslider3_generators");
171
+ }
172
+
173
+ public function createGenerator($sliderId, $params) {
174
+
175
+ $data = new N2Data($params);
176
+
177
+ unset($params['type']);
178
+ unset($params['group']);
179
+ unset($params['record-slides']);
180
+
181
+ try {
182
+ $generatorId = $this->_create($data->get('type'), $data->get('group'), json_encode($params));
183
+
184
+ $info = $this->getGeneratorInfo($data->get('group'), $data->get('type'));
185
+ $slideData = self::getLayout($info->type);
186
+ /*if (self::$layouts[$info->type]) {
187
+ $slideData = json_decode(self::$layouts[$info->type], true);
188
+ } else {
189
+ $slideData = array(
190
+ 'title' => 'title',
191
+ 'slide' => array(),
192
+ 'description' => '',
193
+ 'thumbnail' => '',
194
+ 'published' => 1
195
+ );
196
+ }*/
197
+
198
+ $slideData['published'] = '1';
199
+ $slideData['publishdates'] = '|*|';
200
+ $slideData['generator_id'] = $generatorId;
201
+ $slideData['record-slides'] = intval($data->get('record-slides', 1));
202
+ $slideData['slide'] = json_encode($slideData['slide']);
203
+ $slidesModel = new N2SmartsliderSlidesModel();
204
+ $slideId = $slidesModel->create($sliderId, $slideData, false);
205
+
206
+
207
+ return array(
208
+ 'slideId' => $slideId,
209
+ 'generatorId' => $generatorId
210
+ );
211
+ } catch (Exception $e) {
212
+ throw new Exception($e->getMessage());
213
+ }
214
+ }
215
+
216
+ public function generatorCommonForm($data = array()) {
217
+ $configurationXmlFile = dirname(__FILE__) . '/forms/multigenerator.xml';
218
+
219
+ N2Loader::import('libraries.form.form');
220
+ $form = new N2Form();
221
+ $form->set('class', 'nextend-smart-slider-admin');
222
+ $form->loadArray($data);
223
+
224
+ $form->loadXMLFile($configurationXmlFile);
225
+
226
+ echo $form->render('generator');
227
+ }
228
+
229
+ public function generatorEditForm($data = array()) {
230
+ $configurationXmlFile = dirname(__FILE__) . '/forms/generator_edit.xml';
231
+
232
+ N2Loader::import('libraries.form.form');
233
+ $form = new N2Form();
234
+ $form->set('class', 'nextend-smart-slider-admin');
235
+ $form->loadArray($data);
236
+
237
+ $form->loadXMLFile($configurationXmlFile);
238
+
239
+ echo $form->render('generator');
240
+ }
241
+
242
+ public function generatorSpecificForm($group, $type, $data = array()) {
243
+
244
+ $info = $this->getGeneratorInfo($group, $type);
245
+
246
+ $xmlPath = $info->path . '/config.xml';
247
+
248
+ $form = new N2Form();
249
+ $form->loadArray($data);
250
+
251
+ $form->loadXMLFile($xmlPath);
252
+
253
+ $form->set('info', $info);
254
+
255
+ echo $form->render('generator');
256
+
257
+ return $xmlPath;
258
+ }
259
+
260
+ /**
261
+ * @param $group
262
+ * @param $type
263
+ *
264
+ * @return N2GeneratorInfo
265
+ * @throws Exception
266
+ */
267
+ public function getGeneratorInfo($group, $type = null) {
268
+
269
+ list($groups, $list) = self::getGenerators();
270
+
271
+ if (isset($list[$group])) {
272
+ if (isset($list[$group][$type])) {
273
+ return $list[$group][$type];
274
+ } else {
275
+ return $list[$group][key($list[$group])];
276
+ }
277
+ }
278
+ throw new Exception('Generator not found: ' . $group . ' - ' . $type);
279
+ }
280
+
281
+ public static function getGenerators() {
282
+
283
+ static $groups;
284
+ static $list;
285
+
286
+ if (!$list) {
287
+ $groups = array();
288
+ $list = array();
289
+ N2Plugin::callPlugin('ssgenerator', 'onGeneratorList', array(
290
+ &$groups,
291
+ &$list
292
+ ));
293
+ }
294
+
295
+ return array(
296
+ &$groups,
297
+ &$list
298
+ );
299
+ }
300
+
301
+ public function get($id) {
302
+ return $this->db->queryRow("SELECT * FROM " . $this->db->tableName . " WHERE id = :id", array(
303
+ ":id" => $id
304
+ ));
305
+ }
306
+
307
+ public function import($generator) {
308
+ $this->db->insert(array(
309
+ 'type' => $generator['type'],
310
+ 'group' => $generator['group'],
311
+ 'params' => $generator['params']
312
+ ));
313
+
314
+ return $this->db->insertId();
315
+ }
316
+
317
+ private function _create($type, $group, $params) {
318
+ $this->db->insert(array(
319
+ 'type' => $type,
320
+ 'group' => $group,
321
+ 'params' => $params
322
+ ));
323
+
324
+ return $this->db->insertId();
325
+ }
326
+
327
+ public function save($generatorId, $params) {
328
+
329
+ $this->db->update(array(
330
+ 'params' => json_encode($params)
331
+ ), array('id' => $generatorId));
332
+
333
+ return $generatorId;
334
+ }
335
+
336
+ public function delete($id) {
337
+ $this->db->deleteByAttributes(array(
338
+ "id" => intval($id)
339
+ ));
340
+ }
341
+
342
+ public function duplicate($id) {
343
+ $generatorRow = $this->get($id);
344
+ $generatorId = $this->_create($generatorRow['type'], $generatorRow['group'], $generatorRow['params']);
345
+ return $generatorId;
346
+ }
347
+
348
+ public function getSliderId($generatorId) {
349
+
350
+ $slidesModal = new N2SmartsliderSlidesModel();
351
+ $slideData = $this->db->queryRow("SELECT slider FROM " . $slidesModal->db->tableName . " WHERE generator_id = :id", array(
352
+ ":id" => $generatorId
353
+ ));
354
+
355
+ return $slideData['slider'];
356
+ }
357
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/generator/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ foreach (N2Filesystem::folders($dir) AS $folder) {
6
+ $file = $dir . $folder . DIRECTORY_SEPARATOR . $folder . '.php';
7
+ if (N2Filesystem::fileexists($file)) {
8
+ require_once($file);
9
+ }
10
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/button/button.php ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderItemAbstract', 'smartslider');
4
+
5
+ class N2SSPluginItemButton extends N2SSPluginItemAbstract
6
+ {
7
+
8
+ public $_identifier = 'button';
9
+
10
+ protected $priority = 4;
11
+
12
+ private static $font = 1103;
13
+
14
+ public function __construct() {
15
+ $this->_title = n2_x('Button', 'Slide item');
16
+ }
17
+
18
+ private static function initDefaultFont() {
19
+ static $inited = false;
20
+ if (!$inited) {
21
+ $res = N2StorageSectionAdmin::get('smartslider', 'default', 'item-button-font');
22
+ if (is_array($res)) {
23
+ self::$font = $res['value'];
24
+ }
25
+ if (is_numeric(self::$font)) {
26
+ N2FontRenderer::preLoad(self::$font);
27
+ }
28
+ $inited = true;
29
+ }
30
+ }
31
+
32
+ private static $style = 1101;
33
+
34
+ private static function initDefaultStyle() {
35
+ static $inited = false;
36
+ if (!$inited) {
37
+ $res = N2StorageSectionAdmin::get('smartslider', 'default', 'item-button-style');
38
+ if (is_array($res)) {
39
+ self::$style = $res['value'];
40
+ }
41
+ if (is_numeric(self::$style)) {
42
+ N2StyleRenderer::preLoad(self::$style);
43
+ }
44
+ $inited = true;
45
+ }
46
+ }
47
+
48
+ public static function onSmartsliderDefaultSettings(&$settings) {
49
+ self::initDefaultFont();
50
+ $settings['font'][] = '<param name="item-button-font" type="font" previewmode="link" set="1100" label="' . n2_('Item') . ' - ' . n2_('Button') . '" default="' . self::$font . '" />';
51
+
52
+ self::initDefaultStyle();
53
+ $settings['style'][] = '<param name="item-button-style" type="style" previewmode="button" set="1100" label="' . n2_('Item') . ' - ' . n2_('Button') . '" default="' . self::$style . '" />';
54
+ }
55
+
56
+ public function getTemplate($slider) {
57
+ return N2Html::tag("div", array(
58
+ "class" => "nextend-smartslider-button-container {fontclass}",
59
+ "style" => "cursor: pointer; display: {display}; {extrastyle};"
60
+ ), N2Html::link("{content}", "{url}", array(
61
+ "onclick" => 'return false;',
62
+ "target" => "{target}",
63
+ "style" => "display: {display}",
64
+ "class" => "{styleclass} {class} n2-ow"
65
+ )));
66
+ }
67
+
68
+ public function _render($data, $itemId, $slider, $slide) {
69
+ return $this->getHtml($data, $itemId, $slider, $slide);
70
+ }
71
+
72
+ function _renderAdmin($data, $itemId, $slider, $slide) {
73
+ return $this->getHtml($data, $itemId, $slider, $slide);
74
+ }
75
+
76
+ private function getHtml($data, $id, $slider, $slide) {
77
+
78
+ $font = N2FontRenderer::render($data->get('font'), 'link', $slider->elementId, 'div#' . $slider->elementId . ' ', $slider->fontSize);
79
+
80
+ $html = N2Html::openTag("div", array(
81
+ "class" => "nextend-smartslider-button-container {$font}",
82
+ "style" => "cursor: pointer; display:" . ($data->get('fullwidth', 0) ? 'block' : 'inline-block') . ";" . ($data->get('nowrap', 1) ? 'white-space:nowrap;' : '')
83
+ ));
84
+
85
+ $style = N2StyleRenderer::render($data->get('style'), 'heading', $slider->elementId, 'div#' . $slider->elementId . ' ');
86
+
87
+ $html .= $this->getLink($slide, $data, $slide->fill($data->get("content")), array(
88
+ "style" => "display:" . ($data->get('fullwidth', 0) ? 'block' : 'inline-block') . ";",
89
+ "class" => "{$style} {$data->get('class', '')}"
90
+ ), true);
91
+
92
+ $html .= N2Html::closeTag("div");
93
+
94
+ return $html;
95
+ }
96
+
97
+ function getValues() {
98
+ self::initDefaultFont();
99
+ self::initDefaultStyle();
100
+
101
+ return array(
102
+ 'content' => n2_('MORE'),
103
+ 'nowrap' => 1,
104
+ 'fullwidth' => 0,
105
+ 'link' => '#|*|_self',
106
+ 'font' => self::$font,
107
+ 'style' => self::$style,
108
+ 'class' => ''
109
+ );
110
+ }
111
+
112
+ function getPath() {
113
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . $this->_identifier . DIRECTORY_SEPARATOR;
114
+ }
115
+
116
+ public function getFilled($slide, $data) {
117
+ $data->set('content', $slide->fill($data->get('content', '')));
118
+ $data->set('link', $slide->fill($data->get('link', '#|*|')));
119
+ return $data;
120
+ }
121
+
122
+ public function prepareExport($export, $data) {
123
+ $export->addVisual($data->get('font'));
124
+ $export->addVisual($data->get('style'));
125
+ $export->addLightbox($data->get('link'));
126
+ }
127
+
128
+ public function prepareImport($import, $data) {
129
+ $data->set('font', $import->fixSection($data->get('font')));
130
+ $data->set('style', $import->fixSection($data->get('style')));
131
+ $data->set('link', $import->fixLightbox($data->get('link')));
132
+ return $data;
133
+ }
134
+ }
135
+
136
+ N2Plugin::addPlugin('ssitem', 'N2SSPluginItemButton');
137
+
138
+ N2Pluggable::addAction('smartsliderDefault', 'N2SSPluginItemButton::onSmartsliderDefaultSettings');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/button/button/configuration.xml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="button-item" label="Button item settings" hidetitle="1">
3
+ <param name="content" type="text" label="Text" default="Button"/>
4
+ <param name="font" type="font" previewmode="link" set="1100" style="item_buttonstyle" label="Font" css="width: 140px;">
5
+ <![CDATA[ <div class="{fontClassName}" style="width:{nextend.activeLayer.prop('style').width};"><a style="display:{$('#item_buttonfullwidth').val() == 1 ? 'block' : 'inline-block'};" href="#" class="{styleClassName}" onclick="return false;">{$('#item_buttoncontent').val();}</a></div> ]]>
6
+ </param>
7
+ <param name="style" type="style" previewmode="button" set="1100" font="item_buttonfont" label="Style" css="width: 140px;">
8
+ <![CDATA[ <div class="{fontClassName}" style="width:{nextend.activeLayer.prop('style').width};"><a style="display:{$('#item_buttonfullwidth').val() == 1 ? 'block' : 'inline-block'};" href="#" class="{styleClassName}" onclick="return false;">{$('#item_buttoncontent').val();}</a></div> ]]>
9
+ </param>
10
+ <param name="link" type="mixed" label="Link" default="#|*|_self">
11
+ <param type="url" label="Link" style="width:140px;"/>
12
+ <param type="list" label="Target" translateable="1">
13
+ <option value="_self">Self</option>
14
+ <option value="_blank">Blank</option>
15
+ </param>
16
+ </param>
17
+ <param type="group" label="Sizing">
18
+ <param name="fullwidth" type="onoff" label="Full width" default="1"/>
19
+ <param name="nowrap" type="onoff" label="No wrap" default="1"/></param>
20
+ </params>
21
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/heading/heading.php ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderItemAbstract', 'smartslider');
4
+
5
+ class N2SSPluginItemHeading extends N2SSPluginItemAbstract {
6
+
7
+ var $_identifier = 'heading';
8
+
9
+ protected $priority = 2;
10
+
11
+ private static $font = 1009;
12
+
13
+ public function __construct() {
14
+ $this->_title = n2_x('Heading', 'Slide item');
15
+ }
16
+
17
+ private static function initDefaultFont() {
18
+ static $inited = false;
19
+ if (!$inited) {
20
+ $res = N2StorageSectionAdmin::get('smartslider', 'default', 'item-heading-font');
21
+ if (is_array($res)) {
22
+ self::$font = $res['value'];
23
+ }
24
+ if (is_numeric(self::$font)) {
25
+ N2FontRenderer::preLoad(self::$font);
26
+ }
27
+ $inited = true;
28
+ }
29
+ }
30
+
31
+ private static $style = '';
32
+
33
+ private static function initDefaultStyle() {
34
+ static $inited = false;
35
+ if (!$inited) {
36
+ $res = N2StorageSectionAdmin::get('smartslider', 'default', 'item-heading-style');
37
+ if (is_array($res)) {
38
+ self::$style = $res['value'];
39
+ }
40
+ if (is_numeric(self::$style)) {
41
+ N2StyleRenderer::preLoad(self::$style);
42
+ }
43
+ $inited = true;
44
+ }
45
+ }
46
+
47
+ public static function onSmartsliderDefaultSettings(&$settings) {
48
+ self::initDefaultFont();
49
+ $settings['font'][] = '<param name="item-heading-font" type="font" previewmode="hover" label="' . n2_('Item') . ' - ' . n2_('Heading') . '" default="' . self::$font . '" />';
50
+
51
+ self::initDefaultStyle();
52
+ $settings['style'][] = '<param name="item-heading-style" type="style" set="heading" previewmode="heading" label="' . n2_('Item') . ' - ' . n2_('Heading') . '" default="' . self::$style . '" />';
53
+ }
54
+
55
+ function getTemplate($slider) {
56
+
57
+ return "<div><h{priority} id='{uid}' class='{fontclass} {styleclass} {class} n2-ow' style='display: {display}; {extrastyle};'><a style='display: {display};' href='#' class='{afontclass}' onclick='return false;'>{heading}</a></h{priority}>" . N2Html::scriptTemplate($this->getJs($slider->elementId, "{uid}")) . "</div>";
58
+ }
59
+
60
+ function getJs($sliderId, $id) {
61
+ return '';
62
+
63
+ }
64
+
65
+ function _render($data, $itemId, $slider, $slide) {
66
+ return $this->getHtml($data, $itemId, $slider, $slide);
67
+ }
68
+
69
+ function _renderAdmin($data, $itemId, $slider, $slide) {
70
+ return $this->getHtml($data, $itemId, $slider, $slide);
71
+ }
72
+
73
+ private function getHtml($data, $id, $slider, $slide) {
74
+ $attributes = array();
75
+
76
+ $font = N2FontRenderer::render($data->get('font'), 'hover', $slider->elementId, 'div#' . $slider->elementId . ' .n2-ss-layer ', $slider->fontSize);
77
+ $style = N2StyleRenderer::render($data->get('style'), 'heading', $slider->elementId, 'div#' . $slider->elementId . ' ');
78
+
79
+ $linkAttributes = array();
80
+ if ($this->isEditor) {
81
+ $linkAttributes['onclick'] = 'return false;';
82
+ }
83
+
84
+ $title = $data->get('title', '');
85
+ if (!empty($title)) {
86
+ $attributes['title'] = $title;
87
+ }
88
+
89
+ list($link) = (array)N2Parse::parse($data->get('link', '#|*|'));
90
+ if (!empty($link) && $link != '#') {
91
+ $linkAttributes['class'] = $font . ' n2-ow';
92
+ $font = '';
93
+ } else {
94
+ $linkAttributes['class'] = ' n2-ow';
95
+ }
96
+ $linkAttributes['style'] = "display:" . ($data->get('fullwidth', 1) ? 'block' : 'inline-block') . ";";
97
+
98
+ return $this->heading($data->get('priority', 2), $attributes + array(
99
+ "id" => $id,
100
+ "class" => $font . $style . " " . $data->get('class', '') . ' n2-ow',
101
+ "style" => "display:" . ($data->get('fullwidth', 1) ? 'block' : 'inline-block') . ";" . ($data->get('nowrap', 1) ? 'white-space:nowrap;' : '')
102
+ ), $this->getLink($slide, $data, str_replace("\n", '<br />', strip_tags($slide->fill($data->get('heading', '')))), $linkAttributes));
103
+ }
104
+
105
+ private function heading($type, $attributes, $content) {
106
+ return N2Html::tag("h{$type}", $attributes, $content);
107
+ }
108
+
109
+ function getValues() {
110
+ self::initDefaultFont();
111
+ self::initDefaultStyle();
112
+ return array(
113
+ 'priority' => '2',
114
+ 'fullwidth' => 1,
115
+ 'nowrap' => 1,
116
+ 'heading' => n2_('Heading layer'),
117
+ 'title' => '',
118
+ 'link' => '#|*|_self',
119
+ 'font' => self::$font,
120
+ 'style' => self::$style,
121
+
122
+ 'split-text-transform-origin' => '50|*|50|*|0',
123
+ 'split-text-backface-visibility' => 1,
124
+
125
+ 'split-text-animation-in' => '',
126
+ 'split-text-delay-in' => 0,
127
+
128
+ 'split-text-animation-out' => '',
129
+ 'split-text-delay-out' => 0,
130
+
131
+ 'class' => ''
132
+ );
133
+ }
134
+
135
+ function getPath() {
136
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . $this->_identifier . DIRECTORY_SEPARATOR;
137
+ }
138
+
139
+ public function getFilled($slide, $data) {
140
+ $data->set('heading', $slide->fill($data->get('heading', '')));
141
+ $data->set('link', $slide->fill($data->get('link', '#|*|')));
142
+ return $data;
143
+ }
144
+
145
+ public function prepareExport($export, $data) {
146
+ $export->addVisual($data->get('font'));
147
+ $export->addVisual($data->get('style'));
148
+ $export->addLightbox($data->get('link'));
149
+ }
150
+
151
+ public function prepareImport($import, $data) {
152
+ $data->set('font', $import->fixSection($data->get('font')));
153
+ $data->set('style', $import->fixSection($data->get('style')));
154
+ $data->set('link', $import->fixLightbox($data->get('link')));
155
+ return $data;
156
+ }
157
+
158
+ }
159
+
160
+ N2Plugin::addPlugin('ssitem', 'N2SSPluginItemHeading');
161
+
162
+ N2Pluggable::addAction('smartsliderDefault', 'N2SSPluginItemHeading::onSmartsliderDefaultSettings');
163
+
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/heading/heading/configuration.xml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="heading-item" label="Heading item settings" hidetitle="1">
3
+ <param name="heading" type="textarea" label="Text" default="Heading" style2="width: 230px;resize: vertical;"/>
4
+ <param name="font" type="font" previewmode="hover" set="1000" style="item_headingstyle" label="Font" css="width: 140px;">
5
+ <![CDATA[ <div style="width:{nextend.activeLayer.prop('style').width};"><div class="{styleClassName} {fontClassName}">{$('#item_headingheading').val().replace(/\\n/g, '<br />');}</div></div> ]]>
6
+ </param>
7
+ <param name="style" type="style" previewmode="heading" set="1000" font="item_headingfont" label="Style" css="width: 140px;">
8
+ <![CDATA[ <div style="width:{nextend.activeLayer.prop('style').width};"><div class="{styleClassName} {fontClassName}">{$('#item_headingheading').val().replace(/\\n/g, '<br />');}</div></div> ]]>
9
+ </param>
10
+ <param name="link" type="mixed" label="Link" default="#|*|_self">
11
+ <param type="url" label="Link" style="width:140px;"/>
12
+ <param type="list" label="Target" translateable="1">
13
+ <option value="_self">Self</option>
14
+ <option value="_blank">Blank</option>
15
+ </param>
16
+ </param>
17
+ <param type="group" label="Sizing">
18
+ <param name="fullwidth" type="onoff" label="Full width" default="1"/>
19
+ <param name="nowrap" type="onoff" label="No wrap" default="1"/></param>
20
+ </params>
21
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/image/image.php ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderItemAbstract', 'smartslider');
4
+
5
+ class N2SSPluginItemImage extends N2SSPluginItemAbstract
6
+ {
7
+
8
+ var $_identifier = 'image';
9
+
10
+ protected $priority = 1;
11
+
12
+ protected $layerProperties = array("width" => 200);
13
+
14
+ private static $style = '';
15
+
16
+ public function __construct() {
17
+ $this->_title = n2_x('Image', 'Slide item');
18
+ }
19
+
20
+ private static function initDefaultStyle() {
21
+ static $inited = false;
22
+ if (!$inited) {
23
+ $res = N2StorageSectionAdmin::get('smartslider', 'default', 'item-image-style');
24
+ if (is_array($res)) {
25
+ self::$style = $res['value'];
26
+ }
27
+ if (is_numeric(self::$style)) {
28
+ N2StyleRenderer::preLoad(self::$style);
29
+ }
30
+ $inited = true;
31
+ }
32
+ }
33
+
34
+ public static function onSmartsliderDefaultSettings(&$settings) {
35
+ self::initDefaultStyle();
36
+ $settings['style'][] = '<param name="item-image-style" type="style" previewmode="box" label="Item - Image" default="' . self::$style . '" />';
37
+ }
38
+
39
+ function getTemplate($slider) {
40
+ $html = N2Html::openTag("div", array(
41
+ 'class' => '{styleclass}',
42
+ 'style' => 'overflow:hidden;'
43
+ ));
44
+ $html .= N2Html::openTag("a", array(
45
+ "href" => "{url}",
46
+ "onclick" => 'return false;',
47
+ "class" => "n2-ow",
48
+ "style" => "display: block;background: none !important;"
49
+ ));
50
+
51
+ $html .= '<img class="n2-ow" src="{image}" style="display: inline-block; max-width: 100%;width:{width};height:{height};" class="{cssclass}">';
52
+
53
+ $html .= N2Html::closeTag("a");
54
+ $html .= N2Html::closeTag("div");
55
+
56
+ return $html;
57
+ }
58
+
59
+ function _render($data, $itemId, $slider, $slide) {
60
+ return $this->getHtml($data, $itemId, $slider, $slide);
61
+ }
62
+
63
+ function _renderAdmin($data, $itemId, $slider, $slide) {
64
+ return $this->getHtml($data, $itemId, $slider, $slide);
65
+ }
66
+
67
+ private function getHtml($data, $id, $slider, $slide) {
68
+
69
+ $size = (array)N2Parse::parse($data->get('size', ''));
70
+ if (empty($size[0])) $size[0] = 'auto';
71
+ if (empty($size[1])) $size[1] = 'auto';
72
+
73
+
74
+ $html = N2Html::tag('img', self::optimizeImage($slide->fill($data->get('image', '')), $data, $slider) + array(
75
+ "id" => $id,
76
+ "alt" => htmlspecialchars($slide->fill($data->get('alt', ''))),
77
+ "style" => "display: inline-block; max-width: 100%; width: {$size[0]};height: {$size[1]};",
78
+ "class" => $data->get('cssclass', '') . ' n2-ow',
79
+ "title" => htmlspecialchars($slide->fill($data->get('title', '')))
80
+ ), false);
81
+
82
+ $style = N2StyleRenderer::render($data->get('style'), 'heading', $slider->elementId, 'div#' . $slider->elementId . ' ');
83
+ return N2Html::tag("div", array(
84
+ "class" => $style,
85
+ 'style' => 'overflow:hidden;'
86
+ ), $this->getLink($slide, $data, $html, array('class' => 'n2-ow')));
87
+ }
88
+
89
+ function getValues() {
90
+ self::initDefaultStyle();
91
+ return array(
92
+ 'image' => '$system$/images/placeholder/image.png',
93
+ 'alt' => n2_('Image is not available'),
94
+ 'title' => '',
95
+ 'link' => '#|*|_self',
96
+ 'size' => '100%|*|auto',
97
+ 'style' => self::$style,
98
+ 'cssclass' => '',
99
+ 'image-optimize' => 1
100
+ );
101
+ }
102
+
103
+ function getPath() {
104
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . $this->_identifier . DIRECTORY_SEPARATOR;
105
+ }
106
+
107
+ public function getFilled($slide, $data) {
108
+ $data->set('image', $slide->fill($data->get('image', '')));
109
+ $data->set('alt', $slide->fill($data->get('alt', '')));
110
+ $data->set('title', $slide->fill($data->get('title', '')));
111
+ $data->set('link', $slide->fill($data->get('link', '#|*|')));
112
+ return $data;
113
+ }
114
+
115
+ public function prepareExport($export, $data) {
116
+ $export->addImage($data->get('image'));
117
+ $export->addVisual($data->get('style'));
118
+ $export->addLightbox($data->get('link'));
119
+ }
120
+
121
+ public function prepareImport($import, $data) {
122
+ $data->set('image', $import->fixImage($data->get('image')));
123
+ $data->set('style', $import->fixSection($data->get('style')));
124
+ $data->set('link', $import->fixLightbox($data->get('link')));
125
+ return $data;
126
+ }
127
+ }
128
+
129
+ N2Plugin::addPlugin('ssitem', 'N2SSPluginItemImage');
130
+
131
+ N2Pluggable::addAction('smartsliderDefault', 'N2SSPluginItemImage::onSmartsliderDefaultSettings');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/image/image/configuration.xml ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="image-item" label="Image item settings" hidetitle="1">
3
+ <param name="image" type="image" label="Image" default="" fixed="1" style="width: 144px;"/>
4
+ <param name="alt" type="text" label="Alt" default=""/>
5
+ <param name="link" type="mixed" label="Link" default="#|*|_self">
6
+ <param type="url" label="Link" style="width:140px;"/>
7
+ <param type="list" label="Target" translateable="1">
8
+ <option value="_self">Self</option>
9
+ <option value="_blank">Blank</option>
10
+ </param>
11
+ </param>
12
+ </params>
13
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ foreach (N2Filesystem::folders($dir) AS $folder) {
6
+ $file = $dir . $folder . DIRECTORY_SEPARATOR . $folder . '.php';
7
+ if (N2Filesystem::fileexists($file)) {
8
+ require_once($file);
9
+ }
10
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/text/text.php ADDED
@@ -0,0 +1,276 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderItemAbstract', 'smartslider');
4
+
5
+ class N2SSPluginItemText extends N2SSPluginItemAbstract
6
+ {
7
+
8
+ var $_identifier = 'text';
9
+
10
+ protected $priority = 3;
11
+
12
+ private static $font = 1304;
13
+
14
+ protected $layerProperties = array(
15
+ "left" => 0,
16
+ "top" => 0,
17
+ "width" => 400,
18
+ "align" => "left",
19
+ "valign" => "top"
20
+ );
21
+
22
+ public function __construct() {
23
+ $this->_title = n2_x('Text', 'Slide item');
24
+ }
25
+
26
+ private static function initDefaultFont() {
27
+ static $inited = false;
28
+ if (!$inited) {
29
+ $res = N2StorageSectionAdmin::get('smartslider', 'default', 'item-text-font');
30
+ if (is_array($res)) {
31
+ self::$font = $res['value'];
32
+ }
33
+ if (is_numeric(self::$font)) {
34
+ N2FontRenderer::preLoad(self::$font);
35
+ }
36
+ $inited = true;
37
+ }
38
+ }
39
+
40
+ private static $style = '';
41
+
42
+ private static function initDefaultStyle() {
43
+ static $inited = false;
44
+ if (!$inited) {
45
+ $res = N2StorageSectionAdmin::get('smartslider', 'default', 'item-text-style');
46
+ if (is_array($res)) {
47
+ self::$style = $res['value'];
48
+ }
49
+ if (is_numeric(self::$style)) {
50
+ N2StyleRenderer::preLoad(self::$style);
51
+ }
52
+ $inited = true;
53
+ }
54
+ }
55
+
56
+ public static function onSmartsliderDefaultSettings(&$settings) {
57
+ self::initDefaultFont();
58
+ $settings['font'][] = '<param name="item-text-font" type="font" previewmode="paragraph" label="' . n2_('Item') . ' - ' . n2_('Text') . '" default="' . self::$font . '" />';
59
+
60
+ self::initDefaultStyle();
61
+ $settings['style'][] = '<param name="item-text-style" type="style" set="heading" previewmode="heading" label="' . n2_('Item') . ' - ' . n2_('Text') . '" default="' . self::$style . '" />';
62
+ }
63
+
64
+ function getTemplate($slider) {
65
+ return '<div class="n2-ss-desktop">{p}</div><div class="n2-ss-tablet">{ptablet}</div><div class="n2-ss-mobile">{pmobile}</div>';
66
+ }
67
+
68
+ function _render($data, $id, $slider, $slide) {
69
+ return $this->getHTML($data, $slider, $slide);
70
+ }
71
+
72
+ function _renderAdmin($data, $id, $slider, $slide) {
73
+ return $this->getHTML($data, $slider, $slide);
74
+ }
75
+
76
+ private function getHTML($data, $slider, $slide) {
77
+
78
+ $font = N2FontRenderer::render($data->get('font'), 'paragraph', $slider->elementId, 'div#' . $slider->elementId . ' .n2-ss-layer ', $slider->fontSize);
79
+ $style = N2StyleRenderer::render($data->get('style'), 'heading', $slider->elementId, 'div#' . $slider->elementId . ' ');
80
+
81
+
82
+ $html = '';
83
+ $content = str_replace('<p>', '<p class="' . $font . ' ' . $style . ' n2-ow">', $this->wpautop(self::closeTags($slide->fill($data->get('content', '')))));
84
+ $contentTablet = str_replace('<p>', '<p class="' . $font . ' ' . $style . ' n2-ow">', $this->wpautop(self::closeTags($slide->fill($data->get('contenttablet', '')))));
85
+ $contentMobile = str_replace('<p>', '<p class="' . $font . ' ' . $style . ' n2-ow">', $this->wpautop(self::closeTags($slide->fill($data->get('contentmobile', '')))));
86
+ $class = '';
87
+
88
+ if ($contentMobile == '') {
89
+ $class .= ' n2-ss-mobile';
90
+ } else {
91
+ $html .= N2Html::tag('div', array(
92
+ 'class' => 'n2-ss-mobile'
93
+ ), $contentMobile);
94
+ }
95
+
96
+ if ($contentTablet == '') {
97
+ $class .= ' n2-ss-tablet';
98
+ } else {
99
+ $html .= N2Html::tag('div', array(
100
+ 'class' => 'n2-ss-tablet' . $class
101
+ ), $contentTablet);
102
+ $class = '';
103
+ }
104
+
105
+ $html .= N2Html::tag('div', array(
106
+ 'class' => 'n2-ss-desktop' . $class
107
+ ), $content);
108
+
109
+ return $html;
110
+ }
111
+
112
+ function getValues() {
113
+ self::initDefaultFont();
114
+ self::initDefaultStyle();
115
+ return array(
116
+ 'content' => 'Lorem ipsum dolor sit amet, <a href="#">consectetur adipiscing</a> elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.',
117
+ 'contenttablet' => '',
118
+ 'contentmobile' => '',
119
+ 'font' => self::$font,
120
+ 'style' => self::$style
121
+ );
122
+ }
123
+
124
+ function getPath() {
125
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . $this->_identifier . DIRECTORY_SEPARATOR;
126
+ }
127
+
128
+ public function getFilled($slide, $data) {
129
+ $data->set('content', $slide->fill($data->get('content', '')));
130
+ $data->set('contenttablet', $slide->fill($data->get('contenttablet', '')));
131
+ $data->set('contentmobile', $slide->fill($data->get('contentmobile', '')));
132
+ return $data;
133
+ }
134
+
135
+ public function prepareExport($export, $data) {
136
+ $export->addVisual($data->get('font'));
137
+ $export->addVisual($data->get('style'));
138
+ }
139
+
140
+ public function prepareImport($import, $data) {
141
+ $data->set('font', $import->fixSection($data->get('font')));
142
+ $data->set('style', $import->fixSection($data->get('style')));
143
+ return $data;
144
+ }
145
+
146
+ public static function closeTags($html) {
147
+ $html = str_replace(array(
148
+ '<>',
149
+ '</>'
150
+ ), array(
151
+ '',
152
+ ''
153
+ ), $html);
154
+ // Put all opened tags into an array
155
+ preg_match_all('#<([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result);
156
+ $openedtags = $result[1]; #put all closed tags into an array
157
+ preg_match_all('#</([a-z]+)>#iU', $html, $result);
158
+ $closedtags = $result[1];
159
+ $len_opened = count($openedtags);
160
+ # Check if all tags are closed
161
+ if (count($closedtags) == $len_opened) {
162
+ return $html;
163
+ }
164
+ $openedtags = array_reverse($openedtags);
165
+ # close tags
166
+ for ($i = 0; $i < $len_opened; $i++) {
167
+ if (!in_array($openedtags[$i], $closedtags)) {
168
+ if ($openedtags[$i] != 'br') {
169
+ // Ignores <br> tags to avoid unnessary spacing
170
+ // at the end of the string
171
+ $html .= '</' . $openedtags[$i] . '>';
172
+ }
173
+ } else {
174
+ unset($closedtags[array_search($openedtags[$i], $closedtags)]);
175
+ }
176
+ }
177
+ return $html;
178
+ }
179
+
180
+ private function wpautop($pee, $br = true) {
181
+ $pre_tags = array();
182
+
183
+ if (trim($pee) === '') return '';
184
+
185
+ $pee = $pee . "\n"; // just to make things a little easier, pad the end
186
+
187
+ if (strpos($pee, '<pre') !== false) {
188
+ $pee_parts = explode('</pre>', $pee);
189
+ $last_pee = array_pop($pee_parts);
190
+ $pee = '';
191
+ $i = 0;
192
+
193
+ foreach ($pee_parts as $pee_part) {
194
+ $start = strpos($pee_part, '<pre');
195
+
196
+ // Malformed html?
197
+ if ($start === false) {
198
+ $pee .= $pee_part;
199
+ continue;
200
+ }
201
+
202
+ $name = "<pre wp-pre-tag-$i></pre>";
203
+ $pre_tags[$name] = substr($pee_part, $start) . '</pre>';
204
+
205
+ $pee .= substr($pee_part, 0, $start) . $name;
206
+ $i++;
207
+ }
208
+
209
+ $pee .= $last_pee;
210
+ }
211
+
212
+ $pee = preg_replace('|<br />\s*<br />|', "\n\n", $pee);
213
+ // Space things out a little
214
+ $allblocks = '(?:table|thead|tfoot|caption|col|colgroup|tbody|tr|td|th|div|dl|dd|dt|ul|ol|li|pre|form|map|area|blockquote|address|math|style|p|h[1-6]|hr|fieldset|noscript|legend|section|article|aside|hgroup|header|footer|nav|figure|details|menu|summary)';
215
+ $pee = preg_replace('!(<' . $allblocks . '[^>]*>)!', "\n$1", $pee);
216
+ $pee = preg_replace('!(</' . $allblocks . '>)!', "$1\n\n", $pee);
217
+ $pee = str_replace(array(
218
+ "\r\n",
219
+ "\r"
220
+ ), "\n", $pee); // cross-platform newlines
221
+
222
+ if (strpos($pee, '</object>') !== false) {
223
+ // no P/BR around param and embed
224
+ $pee = preg_replace('|(<object[^>]*>)\s*|', '$1', $pee);
225
+ $pee = preg_replace('|\s*</object>|', '</object>', $pee);
226
+ $pee = preg_replace('%\s*(</?(?:param|embed)[^>]*>)\s*%', '$1', $pee);
227
+ }
228
+
229
+ if (strpos($pee, '<source') !== false || strpos($pee, '<track') !== false) {
230
+ // no P/BR around source and track
231
+ $pee = preg_replace('%([<\[](?:audio|video)[^>\]]*[>\]])\s*%', '$1', $pee);
232
+ $pee = preg_replace('%\s*([<\[]/(?:audio|video)[>\]])%', '$1', $pee);
233
+ $pee = preg_replace('%\s*(<(?:source|track)[^>]*>)\s*%', '$1', $pee);
234
+ }
235
+
236
+ $pee = preg_replace("/\n\n+/", "\n\n", $pee); // take care of duplicates
237
+ // make paragraphs, including one at the end
238
+ $pees = preg_split('/\n\s*\n/', $pee, -1, PREG_SPLIT_NO_EMPTY);
239
+ $pee = '';
240
+
241
+ foreach ($pees as $tinkle) {
242
+ $pee .= '<p>' . trim($tinkle, "\n") . "</p>\n";
243
+ }
244
+
245
+ $pee = preg_replace('|<p>\s*</p>|', '', $pee); // under certain strange conditions it could create a P of entirely whitespace
246
+ $pee = preg_replace('!<p>([^<]+)</(div|address|form)>!', "<p>$1</p></$2>", $pee);
247
+ $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee); // don't pee all over a tag
248
+ $pee = preg_replace("|<p>(<li.+?)</p>|", "$1", $pee); // problem with nested lists
249
+ $pee = preg_replace('|<p><blockquote([^>]*)>|i', "<blockquote$1><p>", $pee);
250
+ $pee = str_replace('</blockquote></p>', '</p></blockquote>', $pee);
251
+ $pee = preg_replace('!<p>\s*(</?' . $allblocks . '[^>]*>)!', "$1", $pee);
252
+ $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*</p>!', "$1", $pee);
253
+
254
+ if ($br) {
255
+ $pee = preg_replace_callback('/<(script|style).*?<\/\\1>/s', 'N2SSPluginItemText::_autop_newline_preservation_helper', $pee);
256
+ $pee = preg_replace('|(?<!<br />)\s*\n|', "<br />\n", $pee); // optionally make line breaks
257
+ $pee = str_replace('<WPPreserveNewline />', "\n", $pee);
258
+ }
259
+
260
+ $pee = preg_replace('!(</?' . $allblocks . '[^>]*>)\s*<br />!', "$1", $pee);
261
+ $pee = preg_replace('!<br />(\s*</?(?:p|li|div|dl|dd|dt|th|pre|td|ul|ol)[^>]*>)!', '$1', $pee);
262
+ $pee = preg_replace("|\n</p>$|", '</p>', $pee);
263
+
264
+ if (!empty($pre_tags)) $pee = str_replace(array_keys($pre_tags), array_values($pre_tags), $pee);
265
+
266
+ return $pee;
267
+ }
268
+
269
+ public static function _autop_newline_preservation_helper($matches) {
270
+ return str_replace("\n", "<WPPreserveNewline />", $matches[0]);
271
+ }
272
+ }
273
+
274
+ N2Plugin::addPlugin('ssitem', 'N2SSPluginItemText');
275
+
276
+ N2Pluggable::addAction('smartsliderDefault', 'N2SSPluginItemText::onSmartsliderDefaultSettings');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/text/text/configuration.xml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="text-item" label="Text item settings" hidetitle="1">
3
+ <param name="content" type="richtextarea" label="Text" default=""
4
+ style2="height: 120px; width: 230px;resize: vertical;"/>
5
+ <param name="font" type="font" previewmode="paragraph" set="1000" style="item_textstyle" label="Font"
6
+ css="width: 140px;"><![CDATA[
7
+ <div style="width:{nextend.activeLayer.width()}px;"><p class="{styleClassName} {fontClassName}">{$('#item_textcontent').val();}</p></div>
8
+ ]]>
9
+ </param>
10
+ <param name="style" type="style" previewmode="heading" set="1000" font="item_textfont" label="Style"
11
+ css="width: 140px;"><![CDATA[
12
+ <div style="width:{nextend.activeLayer.width()}px;"><p class="{styleClassName} {fontClassName}">{$('#item_textcontent').val();}</p></div>
13
+ ]]>
14
+ </param>
15
+ <param name="contenttablet" type="richtextarea" label="Tablet text" default=""
16
+ style2="height: 120px; width: 230px;resize: vertical;"/>
17
+ <param name="contentmobile" type="richtextarea" label="Mobile text" default=""
18
+ style2="height: 120px; width: 230px;resize: vertical;"/>
19
+ </params>
20
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/vimeo/vimeo.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderItemAbstract', 'smartslider');
4
+
5
+ class N2SSPluginItemVimeo extends N2SSPluginItemAbstract
6
+ {
7
+
8
+ var $_identifier = 'vimeo';
9
+
10
+ protected $priority = 20;
11
+
12
+ protected $layerProperties = array(
13
+ "width" => 300,
14
+ "height" => 180
15
+ );
16
+
17
+ public function __construct() {
18
+ $this->_title = n2_x('Vimeo', 'Slide item');
19
+ }
20
+
21
+ function getTemplate($slider) {
22
+ return N2Html::tag('div', array(
23
+ "style" => 'width: 100%; height: 100%; min-height: 50px; background: url({image}) no-repeat 50% 50%; background-size: cover;'
24
+ ), '<img class="n2-video-play n2-ow" src="' . N2ImageHelperAbstract::SVGToBase64('$ss$/images/play.svg') . '"/>');
25
+ }
26
+
27
+ function _render($data, $itemId, $slider, $slide) {
28
+
29
+ $data->set("vimeocode", preg_replace('/\D/', '', $slide->fill($data->get("vimeourl"))));
30
+
31
+ $style = '';
32
+
33
+ $hasImage = 0;
34
+ $playImage = '';
35
+ $image = $data->get('image');
36
+ if (!empty($image)) {
37
+ $style = 'cursor:pointer; background: url(' . N2ImageHelper::fixed($data->get('image')) . ') no-repeat 50% 50%; background-size: cover';
38
+ $hasImage = 1;
39
+ $playImage = '<img class="n2-video-play n2-ow" src="' . N2ImageHelperAbstract::SVGToBase64('$ss$/images/play.svg') . '"/>';
40
+ }
41
+
42
+ N2JS::addInline('window["' . $slider->elementId . '"].ready(function() {
43
+ var vimeo = new NextendSmartSliderVimeoItem(this, "' . $itemId . '", "' . $slider->elementId . '", ' . $data->toJSON() . ', ' . $hasImage . ');
44
+ });
45
+ ');
46
+
47
+ return N2Html::tag('div', array(
48
+ 'id' => $itemId,
49
+ 'style' => 'position: absolute; top: 0; left: 0; width: 100%; height: 100%;' . $style
50
+ ), $playImage);
51
+ }
52
+
53
+ function _renderAdmin($data, $itemId, $slider, $slide) {
54
+ return N2Html::tag('div', array(
55
+ "style" => 'width: 100%; height: 100%; background: url(' . N2ImageHelper::fixed($data->getIfEmpty('image', '$system$/images/placeholder/video.png')) . ') no-repeat 50% 50%; background-size: cover;'
56
+ ), '<img class="n2-video-play n2-ow" src="' . N2ImageHelperAbstract::SVGToBase64('$ss$/images/play.svg') . '"/>');
57
+ }
58
+
59
+ function getValues() {
60
+ return array(
61
+ 'vimeourl' => '75251217',
62
+ 'image' => '$system$/images/placeholder/video.png',
63
+ 'center' => 0,
64
+ 'autoplay' => 0,
65
+ 'title' => 1,
66
+ 'byline' => 1,
67
+ 'portrait' => 0,
68
+ 'color' => '00adef',
69
+ 'loop' => 0
70
+ );
71
+ }
72
+
73
+ function getPath() {
74
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . $this->_identifier . DIRECTORY_SEPARATOR;
75
+ }
76
+
77
+ public function getFilled($slide, $data) {
78
+ $data->set('vimeourl', $slide->fill($data->get('vimeourl', '')));
79
+ return $data;
80
+ }
81
+ }
82
+
83
+ N2Plugin::addPlugin('ssitem', 'N2SSPluginItemVimeo');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/vimeo/vimeo/configuration.xml ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="vimeo-item" label="Vimeo item settings" hidetitle="1">
3
+ <param name="vimeourl" type="text" label="Vimeo url"/>
4
+ <param name="image" type="image" label="Cover image" fixed="1" style="width: 144px;"/>
5
+ <param name="volume" type="list" label="Volume" default="-1" translateable="1">
6
+ <option value="0">Mute</option>
7
+ <option value="0.25">25%</option>
8
+ <option value="0.5">50%</option>
9
+ <option value="0.75">75%</option>
10
+ <option value="1">100%</option>
11
+ <option value="-1">Default</option>
12
+ </param>
13
+ <param name="autoplay" type="onoff" label="Autoplay" default="0"/>
14
+ <param name="center" type="onoff" label="Centered" default="0" class="n2-hidden"/>
15
+ <param name="title" type="onoff" label="Title" default="1"/>
16
+ <param name="byline" type="onoff" label="Users byline" default="1"/>
17
+ <param name="portrait" type="onoff" label="Portrait" default="1"/>
18
+ <param name="color" type="color" label="Color" default="00adef"/>
19
+ </params>
20
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/youtube/youtube.php ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderItemAbstract', 'smartslider');
4
+
5
+ class N2SSPluginItemYouTube extends N2SSPluginItemAbstract {
6
+
7
+ var $_identifier = 'youtube';
8
+
9
+ protected $priority = 20;
10
+
11
+ protected $layerProperties = array(
12
+ "width" => 300,
13
+ "height" => 180
14
+ );
15
+
16
+ public function __construct() {
17
+ $this->_title = n2_x('YouTube', 'Slide item');
18
+ }
19
+
20
+ function getTemplate($slider) {
21
+ return N2Html::tag('div', array(
22
+ "style" => 'width: 100%; height: 100%; min-height: 50px; background: url({image}) no-repeat 50% 50%; background-size: cover;'
23
+ ), '<img class="n2-video-play n2-ow" src="' . N2ImageHelperAbstract::SVGToBase64('$ss$/images/play.svg') . '"/>');
24
+ }
25
+
26
+ function _render($data, $itemId, $slider, $slide) {
27
+ /**
28
+ * @var $data N2Data
29
+ */
30
+ $data->fillDefault(array(
31
+ 'image' => '',
32
+ 'start' => 0,
33
+ 'volume' => -1,
34
+ 'autoplay' => 0,
35
+ 'controls' => 1,
36
+ 'center' => 0,
37
+ 'loop' => 0,
38
+ 'reset' => 0,
39
+ 'theme' => 'dark',
40
+ 'related' => 0,
41
+ 'vq' => 'default'
42
+ ));
43
+
44
+ $rawYTUrl = $slide->fill($data->get('youtubeurl', ''));
45
+
46
+ $url_parts = parse_url($rawYTUrl);
47
+ if (!empty($url_parts['query'])) {
48
+ parse_str($url_parts['query'], $query);
49
+ if (isset($query['v'])) {
50
+ unset($query['v']);
51
+ }
52
+ $data->set("query", $query);
53
+ }
54
+
55
+ $youTubeUrl = $this->parseYoutubeUrl($rawYTUrl);
56
+
57
+ $start = $slide->fill($data->get('start', ''));
58
+ $data->set("youtubecode", $youTubeUrl);
59
+ $data->set("start", $start);
60
+
61
+ $style = '';
62
+
63
+ $hasImage = 0;
64
+ $image = $data->get('image');
65
+
66
+ $playImage = '';
67
+ if (!empty($image)) {
68
+ $style = 'cursor:pointer; background: url(' . N2ImageHelper::fixed($data->get('image')) . ') no-repeat 50% 50%; background-size: cover';
69
+ $hasImage = 1;
70
+ if ($data->get('playbutton', 1) != 0) {
71
+ $playImage = '<img class="n2-video-play n2-ow" src="' . N2ImageHelperAbstract::SVGToBase64('$ss$/images/play.svg') . '"/>';
72
+ }
73
+ }
74
+
75
+ N2JS::addInline('window["' . $slider->elementId . '"].ready(function(){
76
+ new NextendSmartSliderYouTubeItem(this, "' . $itemId . '", ' . $data->toJSON() . ', ' . $hasImage . ');
77
+ });');
78
+
79
+ return N2Html::tag('div', array(
80
+ 'id' => $itemId,
81
+ 'style' => 'position: absolute; top: 0; left: 0; width: 100%; height: 100%;' . $style
82
+ ), $playImage);
83
+ }
84
+
85
+ function _renderAdmin($data, $itemId, $slider, $slide) {
86
+ return N2Html::tag('div', array(
87
+ "style" => 'width: 100%; height: 100%; background: url(' . N2ImageHelper::fixed($data->getIfEmpty('image', '$system$/images/placeholder/video.png')) . ') no-repeat 50% 50%; background-size: cover;'
88
+ ), '<img class="n2-video-play n2-ow" src="' . N2ImageHelperAbstract::SVGToBase64('$ss$/images/play.svg') . '"/>');
89
+ }
90
+
91
+ function parseYoutubeUrl($youTubeUrl) {
92
+ preg_match('/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/', $youTubeUrl, $matches);
93
+
94
+ if ($matches && isset($matches[7]) && strlen($matches[7]) == 11) {
95
+ return $matches[7];
96
+ }
97
+
98
+ return $youTubeUrl;
99
+ }
100
+
101
+ function getValues() {
102
+ return array(
103
+ 'code' => 'qesNtYIBDfs',
104
+ 'youtubeurl' => 'https://www.youtube.com/watch?v=MKmIwHAFjSU',
105
+ 'image' => '$system$/images/placeholder/video.png',
106
+ 'autoplay' => 0,
107
+ 'controls' => 1,
108
+ 'defaultimage' => 'maxresdefault',
109
+ 'related' => '0',
110
+ 'vq' => 'default',
111
+ 'center' => 0,
112
+ 'loop' => 0,
113
+ 'reset' => 0
114
+ );
115
+ }
116
+
117
+ function getPath() {
118
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . $this->_identifier . DIRECTORY_SEPARATOR;
119
+ }
120
+
121
+ public function getFilled($slide, $data) {
122
+ $data->set('youtubeurl', $slide->fill($data->get('youtubeurl', '')));
123
+ return $data;
124
+ }
125
+ }
126
+
127
+ N2Plugin::addPlugin('ssitem', 'N2SSPluginItemYouTube');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/youtube/youtube/configuration.xml ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="youtube-item" label="Youtube item settings" hidetitle="1">
3
+ <param name="youtubeurl" type="text" label="Youtube url"/>
4
+ <param name="image" type="image" label="Cover image" fixed="1" style="width: 144px;"/>
5
+ <param name="playbutton" label="Play button" type="onoff" default="1"/>
6
+ <param name="start" type="text" label="Start time" default="0" style="width:36px;">
7
+ <unit>sec</unit>
8
+ </param>
9
+ <param name="volume" type="list" label="Volume" default="-1" translateable="1">
10
+ <option value="0">Mute</option>
11
+ <option value="0.25">25%</option>
12
+ <option value="0.5">50%</option>
13
+ <option value="0.75">75%</option>
14
+ <option value="1">100%</option>
15
+ <option value="-1">Default</option>
16
+ </param>
17
+ <param name="autoplay" type="onoff" label="Autoplay" default="0"/>
18
+ <param name="controls" type="onoff" label="Controls" default="1"/>
19
+ <param name="center" type="onoff" label="Centered" default="0"/>
20
+ <param name="loop" type="onoff" label="Loop" default="0"/>
21
+ <param name="theme" type="list" label="Theme" default="dark" translateable="1">
22
+ <option value="light">Light</option>
23
+ <option value="dark">Dark</option>
24
+ </param>
25
+ <param name="related" type="onoff" label="Show related videos" default="0"/>
26
+ <param name="vq" type="list" label="Video quality" default="default" translateable="1">
27
+ <option value="small">240p</option>
28
+ <option value="medium">360p</option>
29
+ <option value="large">480p</option>
30
+ <option value="hd720">720p</option>
31
+ <option value="hd1080">1080p</option>
32
+ <option value="highres">High res</option>
33
+ <option value="default">Default</option>
34
+ </param>
35
+ </params>
36
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $mdir = dirname(__FILE__).DIRECTORY_SEPARATOR;
5
+ foreach(N2Filesystem::folders($mdir) AS $mfolder){
6
+ $mfile = $mdir.$mfolder.DIRECTORY_SEPARATOR.'loadplugin.php';
7
+ if(N2Filesystem::fileexists($mfile)){
8
+ require_once($mfile);
9
+ }
10
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/auto/auto.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SSPluginResponsiveAuto extends N2PluginBase {
4
+
5
+ private static $name = 'auto';
6
+
7
+ function onResponsiveList(&$list, &$labels) {
8
+ $list[self::$name] = $this->getPath();
9
+ $labels[self::$name] = n2_x('Auto', 'Slider responsive mode');
10
+ }
11
+
12
+ static function getPath() {
13
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . self::$name . DIRECTORY_SEPARATOR;
14
+ }
15
+ }
16
+
17
+ N2Plugin::addPlugin('ssresponsive', 'N2SSPluginResponsiveAuto');
18
+
19
+ class N2SSResponsiveAuto {
20
+
21
+ private $params, $responsive;
22
+
23
+ public function __construct($params, $responsive, $features) {
24
+ $this->params = $params;
25
+ $this->responsive = $responsive;
26
+
27
+ $this->responsive->scaleDown = intval($this->params->get('responsiveScaleDown', 1));
28
+ $this->responsive->scaleUp = intval($this->params->get('responsiveScaleUp', 0));
29
+ if ($this->responsive->scaleUp) {
30
+ $features->align->align = 'normal';
31
+ }
32
+
33
+
34
+ $this->responsive->minimumHeight = intval($this->params->get('responsiveSliderHeightMin', 0));
35
+ $this->responsive->maximumHeight = intval($this->params->get('responsiveSliderHeightMax', 3000));
36
+
37
+ $this->responsive->maximumSlideWidth = intval($this->params->get('responsiveSlideWidthMax', 3000));
38
+
39
+ }
40
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/auto/auto/responsive.xml ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="smartslider-responsive-auto" label="Responsive - Auto width" >
3
+ <param type="group" label="Mode" default="1|*|0"
4
+ >
5
+ <param name="responsiveScaleDown" type="onoff" label="Down scale" default="1"/>
6
+ <param name="responsiveScaleUp" type="onoff" label="Up scale" default="0"/>
7
+ </param>
8
+ <param type="group" label="Slider height">
9
+ <param name="responsiveSliderHeightMin" type="number" label="Min" style="width:40px" default="0">
10
+ <unit>px</unit>
11
+ </param>
12
+ <param name="responsiveSliderHeightMax" type="number" label="Max" style="width:40px" default="3000">
13
+ <unit>px</unit>
14
+ </param>
15
+ </param>
16
+ <param type="group" label="Slide width" >
17
+ <param name="responsiveSlideWidthMax" type="numberautocomplete" label="Max" default="3000" values="3000,980"
18
+ style="width:40px">
19
+ <unit>px</unit>
20
+ </param>
21
+ </param>
22
+ </params>
23
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/fullwidth/fullwidth.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SSPluginResponsiveFullWidth extends N2PluginBase {
4
+
5
+ private static $name = 'fullwidth';
6
+
7
+ function onResponsiveList(&$list, &$labels) {
8
+ $list[self::$name] = $this->getPath();
9
+ $labels[self::$name] = n2_x('Fullwidth', 'Slider responsive mode');
10
+ }
11
+
12
+ static function getPath() {
13
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . self::$name . DIRECTORY_SEPARATOR;
14
+ }
15
+ }
16
+
17
+ N2Plugin::addPlugin('ssresponsive', 'N2SSPluginResponsiveFullWidth');
18
+
19
+ class N2SSResponsiveFullWidth {
20
+
21
+ private $params, $responsive;
22
+
23
+ public function __construct($params, $responsive, $features) {
24
+ $this->params = $params;
25
+ $this->responsive = $responsive;
26
+ $features->align->align = 'normal';
27
+
28
+ $this->responsive->scaleDown = 1;
29
+ $this->responsive->scaleUp = 1;
30
+
31
+ $this->responsive->minimumHeight = intval($this->params->get('responsiveSliderHeightMin', 0));
32
+ $this->responsive->maximumHeight = intval($this->params->get('responsiveSliderHeightMax', 3000));
33
+
34
+
35
+ if ($this->params->get('responsiveSlideWidth', 1)) {
36
+ $this->responsive->maximumSlideWidth = intval($this->params->get('responsiveSlideWidthMax', 3000));
37
+ }
38
+
39
+ if ($this->params->get('responsiveSlideWidthDesktopLandscape', 1)) {
40
+ $this->responsive->maximumSlideWidthLandscape = intval($this->params->get('responsiveSlideWidthMaxDesktopLandscape', 1600));
41
+ }
42
+
43
+ if ($this->params->get('responsiveSlideWidthTablet', 0)) {
44
+ $this->responsive->maximumSlideWidthTablet = intval($this->params->get('responsiveSlideWidthMaxTablet', 980));
45
+ }
46
+
47
+ if ($this->params->get('responsiveSlideWidthTabletLandscape', 0)) {
48
+ $this->responsive->maximumSlideWidthTabletLandscape = intval($this->params->get('responsiveSlideWidthMaxTabletLandscape', 1200));
49
+ }
50
+
51
+ if ($this->params->get('responsiveSlideWidthMobile', 0)) {
52
+ $this->responsive->maximumSlideWidthMobile = intval($this->params->get('responsiveSlideWidthMaxMobile', 480));
53
+ }
54
+
55
+ if ($this->params->get('responsiveSlideWidthMobileLandscape', 0)) {
56
+ $this->responsive->maximumSlideWidthMobileLandscape = intval($this->params->get('responsiveSlideWidthMaxMobileLandscape', 780));
57
+ }
58
+
59
+ $this->responsive->maximumSlideWidthConstrainHeight = intval($this->params->get('responsiveSlideWidthConstrainHeight', 0));
60
+
61
+ $this->responsive->orientationMode = $this->params->get('responsiveSliderOrientation', 'width_and_height');
62
+
63
+ $this->responsive->forceFull = intval($this->params->get('responsiveForceFull', 1));
64
+ }
65
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/fullwidth/fullwidth/responsive.xml ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="smartslider-responsive-full-width" label="Responsive - Full width">
3
+ <param type="group" label="Slider height">
4
+ <param name="responsiveSliderHeightMin" type="number" label="Min" style="width:40px" default="0">
5
+ <unit>px</unit>
6
+ </param>
7
+ <param name="responsiveSliderHeightMax" type="number" label="Max" style="width:40px" default="3000">
8
+ <unit>px</unit>
9
+ </param>
10
+ </param>
11
+ <param type="onoff" name="responsiveSlideWidthConstrainHeight" label="Constrain slider height to slide width"
12
+ default="0"/>
13
+ <param type="radio" name="responsiveSliderOrientation" label="Portrait or Landscape algorithm"
14
+ default="width_and_height">
15
+ <option value="width_and_height">Screen width and height</option>
16
+ <option value="width">Screen width only</option>
17
+ </param>
18
+ <param type="group" label="Slide width - desktop">
19
+ <param type="onoff" name="responsiveSlideWidth" label="Portrait" default="1"/>
20
+ <param name="responsiveSlideWidthMax" type="numberautocomplete" label="Max" default="3000"
21
+ style="width:40px" values="3000,980">
22
+ <unit>px</unit>
23
+ </param>
24
+
25
+ <param type="onoff" name="responsiveSlideWidthDesktopLandscape" label="Landscape" default="0"
26
+ class="n2-expert"/>
27
+ <param name="responsiveSlideWidthMaxDesktopLandscape" type="numberautocomplete" label="Max" default="1600"
28
+ style="width:40px" values="3000,1600" class="n2-expert">
29
+ <unit>px</unit>
30
+ </param>
31
+ </param>
32
+ <param type="group" label="Slide width - Tablet">
33
+
34
+ <param type="onoff" name="responsiveSlideWidthTablet" label="Portrait" default="0"/>
35
+ <param name="responsiveSlideWidthMaxTablet" type="numberautocomplete" label="Max" default="980"
36
+ style="width:40px" values="3000,980">
37
+ <unit>px</unit>
38
+ </param>
39
+
40
+ <param type="onoff" name="responsiveSlideWidthTabletLandscape" label="Landscape" default="0"
41
+ class="n2-expert"/>
42
+ <param name="responsiveSlideWidthMaxTabletLandscape" type="numberautocomplete" label="Max" default="1200"
43
+ style="width:40px" values="3000,1200" class="n2-expert">
44
+ <unit>px</unit>
45
+ </param>
46
+ </param>
47
+ <param type="group" label="Slide width - Mobile">
48
+
49
+ <param type="onoff" name="responsiveSlideWidthMobile" label="Portrait" default="0"/>
50
+ <param name="responsiveSlideWidthMaxMobile" type="numberautocomplete" label="Max" default="480"
51
+ style="width:40px" values="3000,480">
52
+ <unit>px</unit>
53
+ </param>
54
+ <param type="onoff" name="responsiveSlideWidthMobileLandscape" label="Landscape" default="0"
55
+ class="n2-expert"/>
56
+ <param name="responsiveSlideWidthMaxMobileLandscape" type="numberautocomplete" label="Max" default="740"
57
+ style="width:40px" values="3000,740" class="n2-expert">
58
+ <unit>px</unit>
59
+ </param>
60
+ </param>
61
+ <param type="onoff" name="responsiveForceFull" label="Force full width" default="1"/>
62
+ </params>
63
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ foreach (N2Filesystem::folders($dir) AS $folder) {
6
+ $file = $dir . $folder . DIRECTORY_SEPARATOR . $folder . '.php';
7
+ if (N2Filesystem::fileexists($file)) {
8
+ require_once($file);
9
+ }
10
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ foreach (N2Filesystem::folders($dir) AS $folder) {
6
+ $file = $dir . $folder . DIRECTORY_SEPARATOR . $folder . '.php';
7
+ if (N2Filesystem::fileexists($file)) {
8
+ require_once($file);
9
+ }
10
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SSPluginTypeSimple extends N2PluginBase
4
+ {
5
+
6
+ private static $name = 'simple';
7
+
8
+ function onTypeList(&$list, &$labels) {
9
+ $list[self::$name] = $this->getPath();
10
+ $labels[self::$name] = n2_x('Simple', 'Slider type');
11
+ }
12
+
13
+ static function getPath() {
14
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . self::$name . DIRECTORY_SEPARATOR;
15
+ }
16
+ }
17
+
18
+ N2Plugin::addPlugin('sstype', 'N2SSPluginTypeSimple');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/backup.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderBackupSimple
4
+ {
5
+
6
+ /**
7
+ * @param N2SmartSliderExport $export
8
+ * @param $slider
9
+ */
10
+ public static function export($export, $slider) {
11
+ $export->addImage($slider['params']->get('background', ''));
12
+ }
13
+
14
+ /**
15
+ * @param N2SmartSliderImport $import
16
+ * @param $slider
17
+ */
18
+ public static function import($import, $slider) {
19
+
20
+ $slider['params']->set('background', $import->fixImage($slider['params']->get('background', '')));
21
+ }
22
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/css.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderCSSSimple extends N2SmartSliderCSSAbstract
4
+ {
5
+
6
+ protected function renderType(&$context) {
7
+ $params = $this->slider->params;
8
+ N2Loader::import('libraries.image.color');
9
+
10
+ $width = intval($context['width']);
11
+ $height = intval($context['height']);
12
+
13
+ $context['backgroundSize'] = $params->get('background-size');
14
+ $context['backgroundAttachment'] = $params->get('background-fixed') ? 'fixed' : 'scroll';
15
+
16
+ $borderWidth = $params->get('border-width');
17
+ $borderColor = $params->get('border-color');
18
+ $context['borderRadius'] = $params->get('border-radius') . 'px';
19
+
20
+ $padding = N2Parse::parse($params->get('padding'));
21
+ $context['paddingt'] = $padding[0] . 'px';
22
+ $context['paddingr'] = $padding[1] . 'px';
23
+ $context['paddingb'] = $padding[2] . 'px';
24
+ $context['paddingl'] = $padding[3] . 'px';
25
+
26
+ if ($context['canvas']) {
27
+ $width += 2 * $borderWidth + $padding[1] + $padding[3];
28
+ $height += 2 * $borderWidth + $padding[0] + $padding[2];
29
+
30
+ $context['width'] = $width . "px";
31
+ $context['height'] = $height . "px";
32
+ }
33
+
34
+
35
+ $context['border'] = $borderWidth . 'px';
36
+
37
+ $rgba = N2Color::hex2rgba($borderColor);
38
+ $context['borderrgba'] = 'RGBA(' . $rgba[0] . ',' . $rgba[1] . ',' . $rgba[2] . ',' . round($rgba[3] / 127, 2) . ')';
39
+ $context['borderhex'] = '#' . substr($borderColor, 0, 6);
40
+
41
+ $width = $width - ($padding[1] + $padding[3]) - $borderWidth * 2;
42
+ $height = $height - ($padding[0] + $padding[2]) - $borderWidth * 2;
43
+ $context['inner1height'] = $height . 'px';
44
+
45
+ $context['canvaswidth'] = $width . "px";
46
+ $context['canvasheight'] = $height . "px";
47
+
48
+ N2LESS::addFile(N2Filesystem::translate(dirname(__FILE__) . NDS . 'style.n2less'), $this->slider->cacheId, $context, NEXTEND_SMARTSLIDER_ASSETS . '/less' . NDS);
49
+ }
50
+
51
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/slide.xml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="simpleslidertypeanimation" type="groupped" label="Animation settings">
3
+ <params name="simpleslidertypeanimation-top" label="" hidetitle="1">
4
+ <param type="group" label="Background animation">
5
+ <param type="backgroundanimation" name="background-animation" label="Animation(s)" default=""/>
6
+ <param type="list" name="background-animation-speed" label="Speed" default="default" translateable="1">
7
+ <option value="default">Default</option>
8
+ <option value="superSlow">Super slow</option>
9
+ <option value="slow">Slow</option>
10
+ <option value="normal">Normal</option>
11
+ <option value="fast">Fast</option>
12
+ <option value="superFast">Super fast</option>
13
+ </param>
14
+ </param>
15
+ </params>
16
+ </params>
17
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/slider.xml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="simpledefaultslidertypeanimation" label="Animation settings">
3
+ <param name="animation" type="radio" label="Animation" default="horizontal" translateable="1">
4
+ <option value="no">No animation</option>
5
+ <option value="horizontal">Horizontal</option>
6
+ <option value="vertical">Vertical</option>
7
+ <option value="fade">Fade</option>
8
+ <option value="crossfade">Crossfade</option>
9
+ </param>
10
+ <param type="group" label="Properties">
11
+ <param name="animation-duration" type="numberautocomplete" label="Duration" style="width:35px;" default="800" values="800,1500,2000">
12
+ <unit>ms</unit>
13
+ </param>
14
+ </param>
15
+ <param type="group" label="Background animation">
16
+ <param type="backgroundanimation" name="background-animation" label="Animation(s)" default=""/>
17
+ <param type="list" name="background-animation-speed" label="Speed" default="normal" translateable="1">
18
+ <option value="superSlow">Super slow</option>
19
+ <option value="slow">Slow</option>
20
+ <option value="normal">Normal</option>
21
+ <option value="fast">Fast</option>
22
+ <option value="superFast">Super fast</option>
23
+ </param>
24
+ </param>
25
+ </params>
26
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/type.php ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderTypeSimple extends N2SmartSliderType {
4
+
5
+ private $backgroundAnimation = false;
6
+
7
+ public function getDefaults() {
8
+ return array(
9
+ 'background' => '',
10
+ 'background-size' => 'cover',
11
+ 'background-fixed' => 0,
12
+ 'padding' => '0|*|0|*|0|*|0',
13
+ 'border-width' => 0,
14
+ 'border-color' => '3E3E3Eff',
15
+ 'border-radius' => 0,
16
+ 'slider-css' => '',
17
+ 'slide-css' => '',
18
+ 'animation' => 'horizontal',
19
+ 'animation-duration' => 800,
20
+ 'animation-delay' => 0,
21
+ 'animation-easing' => 'easeOutQuad',
22
+ 'animation-parallax' => 1,
23
+ 'animation-shifted-background-animation' => 'auto',
24
+ 'carousel' => 1,
25
+
26
+ 'background-animation' => '',
27
+ 'kenburns-animation' => ''
28
+ );
29
+ }
30
+
31
+ protected function renderType() {
32
+
33
+ $params = $this->slider->params;
34
+ N2JS::addStaticGroup(N2Filesystem::translate(dirname(__FILE__)) . '/dist/smartslider-simple-type-frontend.min.js', 'smartslider-simple-type-frontend');
35
+
36
+
37
+ $background = $params->get('background');
38
+ $css = $params->get('slider-css');
39
+ $slidecss = $params->get('slide-css');
40
+ if (!empty($background)) {
41
+ $css = 'background-image: url(' . N2ImageHelper::fixed($background) . ');';
42
+ }
43
+
44
+ $this->initBackgroundAnimation();
45
+ echo $this->openSliderElement();
46
+ ?>
47
+
48
+ <div class="n2-ss-slider-1" style="<?php echo $css; ?>">
49
+ <?php
50
+ echo $this->getBackgroundVideo($params);
51
+ ?>
52
+ <div class="n2-ss-slider-2">
53
+ <?php if ($this->backgroundAnimation): ?>
54
+ <div class="n2-ss-background-animation"></div>
55
+ <?php endif; ?>
56
+ <div class="n2-ss-slider-3" style="<?php echo $slidecss; ?>">
57
+
58
+ <?php
59
+ echo $this->slider->staticHtml;
60
+ foreach ($this->slider->slides AS $i => $slide) {
61
+
62
+ echo N2Html::tag('div', $slide->attributes + array(
63
+ 'class' => 'n2-ss-slide n2-ss-canvas ' . $slide->classes,
64
+ 'style' => $slide->style
65
+ ), $slide->background . $slide->getHTML());
66
+ }
67
+ ?>
68
+ </div>
69
+ </div>
70
+ </div>
71
+ <?php
72
+ $this->widgets->echoRemainder();
73
+ echo N2Html::closeTag('div');
74
+
75
+ $this->javaScriptProperties['mainanimation'] = array(
76
+ 'type' => $params->get('animation'),
77
+ 'duration' => intval($params->get('animation-duration')),
78
+ 'delay' => intval($params->get('animation-delay')),
79
+ 'ease' => $params->get('animation-easing'),
80
+ 'parallax' => floatval($params->get('animation-parallax')),
81
+ 'shiftedBackgroundAnimation' => $params->get('animation-shifted-background-animation')
82
+ );
83
+ $this->javaScriptProperties['mainanimation']['shiftedBackgroundAnimation'] = 0;
84
+
85
+
86
+ $this->javaScriptProperties['carousel'] = intval($params->get('carousel'));
87
+
88
+ $this->javaScriptProperties['dynamicHeight'] = intval($params->get('dynamic-height', '0'));
89
+ $this->javaScriptProperties['dynamicHeight'] = 0;
90
+
91
+
92
+ N2Plugin::callPlugin('nextendslider', 'onNextendSliderProperties', array(&$this->javaScriptProperties));
93
+
94
+ N2JS::addFirstCode("new NextendSmartSliderSimple('#{$this->slider->elementId}', " . json_encode($this->javaScriptProperties) . ");");
95
+
96
+ echo N2Html::clear();
97
+ }
98
+
99
+ private function initBackgroundAnimation() {
100
+ $speed = $this->slider->params->get('background-animation-speed', 'normal');
101
+ $this->javaScriptProperties['bgAnimations'] = array(
102
+ 'global' => $this->parseBackgroundAnimations($this->slider->params->get('background-animation', '')),
103
+ 'speed' => $speed
104
+ );
105
+
106
+ $slides = array();
107
+ $hasCustom = false;
108
+
109
+ foreach ($this->slider->slides AS $i => $slide) {
110
+ $animation = $this->parseBackgroundAnimations($slide->parameters->get('background-animation'));
111
+ if ($animation) {
112
+ $slideSpeed = $slide->parameters->get('background-animation-speed', 'default');
113
+ if ($slideSpeed == 'default') {
114
+ $slideSpeed = $speed;
115
+ }
116
+ $slides[$i] = array(
117
+ 'animation' => $this->parseBackgroundAnimations($slide->parameters->get('background-animation')),
118
+ 'speed' => $slideSpeed
119
+ );
120
+ if ($slides[$i]) {
121
+ $hasCustom = true;
122
+ }
123
+ }
124
+ }
125
+ if ($hasCustom) {
126
+ $this->javaScriptProperties['bgAnimations']['slides'] = $slides;
127
+ } else if (!$this->javaScriptProperties['bgAnimations']['global']) {
128
+ $this->javaScriptProperties['bgAnimations'] = 0;
129
+ }
130
+ }
131
+
132
+ private function parseBackgroundAnimations($backgroundAnimation) {
133
+ $backgroundAnimations = array_unique(array_map('intval', explode('||', $backgroundAnimation)));
134
+
135
+ $jsProps = array();
136
+
137
+ if (count($backgroundAnimations)) {
138
+ N2Loader::import('libraries.backgroundanimation.storage', 'smartslider');
139
+
140
+ foreach ($backgroundAnimations AS $animationId) {
141
+ $animation = N2StorageSectionAdmin::getById($animationId, 'backgroundanimation');
142
+ if (isset($animation)) {
143
+ $jsProps[] = $animation['value']['data'];
144
+ }
145
+
146
+ }
147
+
148
+ if (count($jsProps)) {
149
+ $this->backgroundAnimation = true;
150
+ return $jsProps;
151
+ }
152
+ }
153
+ return 0;
154
+ }
155
+
156
+ private function getBackgroundVideo($params) {
157
+ $mp4 = $params->get('backgroundVideoMp4', '');
158
+ $webm = $params->get('backgroundVideoWebm', '');
159
+ $ogg = $params->get('backgroundVideoOgg', '');
160
+
161
+ if (empty($mp4) && empty($webm) && empty($ogg)) {
162
+ return '';
163
+ }
164
+
165
+ $sources = '';
166
+
167
+ if ($mp4) {
168
+ $sources .= N2Html::tag("source", array(
169
+ "src" => $mp4,
170
+ "type" => "video/mp4"
171
+ ), '', false);
172
+ }
173
+
174
+ if ($webm) {
175
+ $sources .= N2Html::tag("source", array(
176
+ "src" => $webm,
177
+ "type" => "video/webm"
178
+ ), '', false);
179
+ }
180
+
181
+ if ($ogg) {
182
+ $sources .= N2Html::tag("source", array(
183
+ "src" => $ogg,
184
+ "type" => "video/ogg"
185
+ ), '', false);
186
+ }
187
+
188
+ $attributes = array(
189
+ 'autoplay' => 1
190
+ );
191
+
192
+ if ($params->get('backgroundVideoMuted', 1)) {
193
+ $attributes['muted'] = 'muted';
194
+ }
195
+
196
+ if ($params->get('backgroundVideoLoop', 1)) {
197
+ $attributes['loop'] = 'loop';
198
+ }
199
+
200
+ return N2Html::tag('div', array('class' => 'n2-ss-slider-background-video-container'), N2Html::tag('video', $attributes + array(
201
+ 'class' => 'n2-ss-slider-background-video',
202
+ 'data-mode' => $params->get('backgroundVideoMode', 'fill')
203
+ ), $sources));
204
+
205
+ }
206
+ }
207
+
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/arrow/arrow.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SSPluginWidgetArrow extends N2PluginBase
4
+ {
5
+
6
+ private static $group = 'arrow';
7
+
8
+ function onWidgetList(&$list) {
9
+ $list[self::$group] = array(
10
+ n2_('Arrows'),
11
+ $this->getPath(),
12
+ 1
13
+ );
14
+ }
15
+
16
+ function getPath() {
17
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . self::$group . DIRECTORY_SEPARATOR;
18
+ }
19
+ }
20
+
21
+ N2Plugin::addPlugin('sswidget', 'N2SSPluginWidgetArrow');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/arrow/arrow/config.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="widgetsarrow" label="" hidetitle="1">
3
+ <param name="widgetarrow" ajaxurl="slider/renderform" type="widgetpluginmatrix" label="Arrow" group="sswidgetarrow" method="arrow" file="config.xml" default="imageEmpty"/>
4
+ <param type="group" label="Shows on">
5
+ <param name="widget-arrow-display-hover" type="onoff" label="Hover" default="0"/></param>
6
+ </params>
7
+ <params name="widget-arrow-placeholder" label="Slider Type placeholder" id="nextend-widgetarrow-panel" type="placeholder"></params>
8
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/autoplay/autoplay.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SSPluginWidgetAutoplay extends N2PluginBase
4
+ {
5
+
6
+ private static $group = 'autoplay';
7
+
8
+ function onWidgetList(&$list) {
9
+ $list[self::$group] = array(
10
+ n2_('Autoplay'),
11
+ $this->getPath(),
12
+ 3
13
+ );
14
+ }
15
+
16
+ function getPath() {
17
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . self::$group . DIRECTORY_SEPARATOR;
18
+ }
19
+ }
20
+
21
+ N2Plugin::addPlugin('sswidget', 'N2SSPluginWidgetAutoplay');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/autoplay/autoplay/config.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="widgetsautoplay" label="" hidetitle="1">
3
+ <param name="widgetautoplay" type="widgetpluginmatrix" ajaxurl="slider/renderform" label="Autoplay" group="sswidgetautoplay" method="autoplay" file="config.xml" default="disabled"/>
4
+ <param type="group" label="Shows on">
5
+ <param name="widget-autoplay-display-hover" type="onoff" label="Hover" default="0"/></param>
6
+ </params>
7
+ <params name="widget-autoplay-placeholder" label="" id="nextend-widgetautoplay-panel" type="placeholder"></params>
8
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/bar/bar.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SSPluginWidgetBar extends N2PluginBase
4
+ {
5
+
6
+ private static $group = 'bar';
7
+
8
+ function onWidgetList(&$list) {
9
+ $list[self::$group] = array(
10
+ n2_('Bar'),
11
+ $this->getPath(),
12
+ 5
13
+ );
14
+ }
15
+
16
+ function getPath() {
17
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . self::$group . DIRECTORY_SEPARATOR;
18
+ }
19
+ }
20
+
21
+ N2Plugin::addPlugin('sswidget', 'N2SSPluginWidgetBar');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/bar/bar/config.xml ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="widgetsbar" label="" hidetitle="1">
3
+ <param name="widgetbar" type="widgetpluginmatrix" ajaxurl="slider/renderform" label="Bar" group="sswidgetbar" method="bar" file="config.xml" default=""/>
4
+ <param type="group" label="Shows on">
5
+ <param name="widget-bar-display-hover" type="onoff" label="Hover" default="0"/></param>
6
+ </params>
7
+ <params name="widget-bar-placeholder" label="" id="nextend-widgetbar-panel" type="placeholder"></params>
8
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/bullet/bullet.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SSPluginWidgetBullet extends N2PluginBase
4
+ {
5
+
6
+ private static $group = 'bullet';
7
+
8
+ function onWidgetList(&$list) {
9
+ $list[self::$group] = array(
10
+ n2_('Bullets'),
11
+ $this->getPath(),
12
+ 2
13
+ );
14
+ }
15
+
16
+ function getPath() {
17
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . self::$group . DIRECTORY_SEPARATOR;
18
+ }
19
+ }
20
+
21
+ N2Plugin::addPlugin('sswidget', 'N2SSPluginWidgetBullet');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/bullet/bullet/config.xml ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="widgetsbullet" label="" hidetitle="1">
3
+ <param name="widgetbullet" type="widgetpluginmatrix" ajaxurl="slider/renderform" label="Bullet" group="sswidgetbullet" method="bullet" file="config.xml" default="disabled"/>
4
+ <param type="group" label="Shows on">
5
+ <param name="widget-bullet-display-hover" type="onoff" label="Hover" default="0"/></param>
6
+ <param type="group" label="Thumbnail">
7
+ <param type="onoff" label="Enabled" name="widget-bullet-thumbnail-show-image" default="0"/>
8
+ <param name="widget-bullet-thumbnail-width" type="numberautocomplete" label="Width" default="100" style="width:30px" values="60,100,150,200">
9
+ <unit>px</unit>
10
+ </param>
11
+ <param name="widget-bullet-thumbnail-height" type="numberautocomplete" label="Height" default="60" style="width:30px" values="60,100,150,200">
12
+ <unit>px</unit>
13
+ </param>
14
+ <param name="widget-bullet-thumbnail-style" type="style" previewmode="simple" default="eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwODAiLCJwYWRkaW5nIjoiM3wqfDN8KnwzfCp8M3wqfHB4IiwiYm94c2hhZG93IjoiMHwqfDB8KnwwfCp8MHwqfDAwMDAwMGZmIiwiYm9yZGVyIjoiMHwqfHNvbGlkfCp8MDAwMDAwZmYiLCJib3JkZXJyYWRpdXMiOiIzIiwiZXh0cmEiOiJtYXJnaW46IDVweDtiYWNrZ3JvdW5kLXNpemU6Y292ZXI7In1dfQ==" label="Style">
15
+ <![CDATA[ <div class="{styleClassName}" style="display: inline-block;"><div style="width:{$('#sliderwidget-bullet-thumbnail-width').val()}px; height: {$('#sliderwidget-bullet-thumbnail-height').val()}px; overflow: hidden; background: url('$system$/images/placeholder/image.png');background-size: cover;"></div></div> ]]>
16
+ </param>
17
+ <param name="widget-bullet-thumbnail-side" type="switcher" label="Side" default="before" translateable="1">
18
+ <unit value="before">Before</unit>
19
+ <unit value="after">After</unit>
20
+ </param>
21
+ </param>
22
+ </params>
23
+ <params name="widget-bullet-placeholder" label="" id="nextend-widgetbullet-panel" type="placeholder"></params>
24
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ foreach (N2Filesystem::folders($dir) AS $folder) {
6
+ $file = $dir . $folder . DIRECTORY_SEPARATOR . $folder . '.php';
7
+ if (N2Filesystem::fileexists($file)) {
8
+ require_once($file);
9
+ }
10
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/shadow/shadow.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SSPluginWidgetShadow extends N2PluginBase
4
+ {
5
+
6
+ private static $group = 'shadow';
7
+
8
+ function onWidgetList(&$list) {
9
+ $list[self::$group] = array(
10
+ n2_('Shadows'),
11
+ $this->getPath(),
12
+ 7
13
+ );
14
+ }
15
+
16
+ function getPath() {
17
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . self::$group . DIRECTORY_SEPARATOR;
18
+ }
19
+ }
20
+
21
+ N2Plugin::addPlugin('sswidget', 'N2SSPluginWidgetShadow');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/shadow/shadow/config.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <root>
2
+ <params name="widgetsshadow" label="" hidetitle="1">
3
+ <param name="widgetshadow" type="widgetpluginmatrix" ajaxurl="slider/renderform" label="Shadow" group="sswidgetshadow" method="shadow" file="config.xml" default="disabled"/>
4
+ </params>
5
+ <params name="widget-shadow-placeholder" label="" id="nextend-widgetshadow-panel" type="placeholder"></params>
6
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/thumbnail/thumbnail.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SSPluginWidgetThumbnail extends N2PluginBase
4
+ {
5
+
6
+ private static $group = 'thumbnail';
7
+
8
+ function onWidgetList(&$list) {
9
+ $list[self::$group] = array(
10
+ n2_('Thumbnails'),
11
+ $this->getPath(),
12
+ 6
13
+ );
14
+ }
15
+
16
+ function getPath() {
17
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . self::$group . DIRECTORY_SEPARATOR;
18
+ }
19
+ }
20
+
21
+ N2Plugin::addPlugin('sswidget', 'N2SSPluginWidgetThumbnail');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/thumbnail/thumbnail/config.xml ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="widgetsthumbnail" label="" hidetitle="1">
3
+ <param name="widgetthumbnail" type="widgetpluginmatrix" ajaxurl="slider/renderform" label="Thumbnail" group="sswidgetthumbnail" method="thumbnail" file="config.xml" default="disabled"/>
4
+ <param type="group" label="Shows on">
5
+ <param name="widget-thumbnail-display-hover" type="onoff" label="Hover" default="0"/></param>
6
+ <param type="group" label="Thumbnail size">
7
+ <param name="widget-thumbnail-width" type="numberautocomplete" label="Width" default="100" style="width:30px" values="60,100,150,200">
8
+ <unit>px</unit>
9
+ </param>
10
+ <param name="widget-thumbnail-height" type="numberautocomplete" label="Height" default="60" style="width:30px" values="60,100,150,200">
11
+ <unit>px</unit>
12
+ </param>
13
+ </param>
14
+ </params>
15
+ <params name="widget-thumbnail-placeholder" label="" id="nextend-widgetthumbnail-panel" type="placeholder"></params>
16
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetarrow/image/image.php ADDED
@@ -0,0 +1,263 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderWidgetAbstract', 'smartslider');
4
+
5
+ class N2SSPluginWidgetArrowImage extends N2SSPluginWidgetAbstract {
6
+
7
+ private static $key = 'widget-arrow-';
8
+
9
+ var $_name = 'image';
10
+
11
+ static function getDefaults() {
12
+ return array(
13
+ 'widget-arrow-responsive-desktop' => 1,
14
+ 'widget-arrow-responsive-tablet' => 0.7,
15
+ 'widget-arrow-responsive-mobile' => 0.5,
16
+ 'widget-arrow-previous-image' => '',
17
+ 'widget-arrow-previous' => '$ss$/plugins/widgetarrow/image/image/previous/normal.svg',
18
+ 'widget-arrow-previous-color' => 'ffffffcc',
19
+ 'widget-arrow-previous-hover' => 0,
20
+ 'widget-arrow-previous-hover-color' => 'ffffffcc',
21
+ 'widget-arrow-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiMjB8KnwxMHwqfDIwfCp8MTB8KnxweCIsImJveHNoYWRvdyI6IjB8KnwwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImJvcmRlciI6IjB8Knxzb2xpZHwqfDAwMDAwMGZmIiwiYm9yZGVycmFkaXVzIjoiNSIsImV4dHJhIjoiIn0seyJiYWNrZ3JvdW5kY29sb3IiOiIwMDAwMDBjZiJ9XX0=',
22
+ 'widget-arrow-previous-position-mode' => 'simple',
23
+ 'widget-arrow-previous-position-area' => 6,
24
+ 'widget-arrow-previous-position-offset' => 15,
25
+ 'widget-arrow-next-position-mode' => 'simple',
26
+ 'widget-arrow-next-position-area' => 7,
27
+ 'widget-arrow-next-position-offset' => 15,
28
+ 'widget-arrow-animation' => 'fade',
29
+ 'widget-arrow-mirror' => 1,
30
+ 'widget-arrow-next-image' => '',
31
+ 'widget-arrow-next' => '$ss$/plugins/widgetarrow/image/image/next/normal.svg',
32
+ 'widget-arrow-next-color' => 'ffffffcc',
33
+ 'widget-arrow-next-hover' => 0,
34
+ 'widget-arrow-next-hover-color' => 'ffffffcc'
35
+ );
36
+ }
37
+
38
+
39
+ function onArrowList(&$list) {
40
+ $list[$this->_name] = $this->getPath();
41
+ }
42
+
43
+ function getPath() {
44
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . 'image' . DIRECTORY_SEPARATOR;
45
+ }
46
+
47
+ static function getPositions(&$params) {
48
+ $positions = array();
49
+
50
+ if (self::isRenderable('previous', $params)) {
51
+ $positions['previous-position'] = array(
52
+ self::$key . 'previous-position-',
53
+ 'previous'
54
+ );
55
+ }
56
+
57
+ if (self::isRenderable('next', $params)) {
58
+ $positions['next-position'] = array(
59
+ self::$key . 'next-position-',
60
+ 'next'
61
+ );
62
+ }
63
+ return $positions;
64
+ }
65
+
66
+ private static function isRenderable($side, &$params) {
67
+ $arrow = $params->get(self::$key . $side . '-image');
68
+ if (empty($arrow)) {
69
+ $arrow = $params->get(self::$key . $side);
70
+ if ($arrow == -1) {
71
+ $arrow = null;
72
+ }
73
+ }
74
+ return !!$arrow;
75
+ }
76
+
77
+ static function render($slider, $id, $params) {
78
+ $html = '';
79
+
80
+ $previous = $params->get(self::$key . 'previous-image');
81
+ $previousColor = $params->get(self::$key . 'previous-color');
82
+ $previousHover = $params->get(self::$key . 'previous-hover');
83
+ $previousHoverColor = $params->get(self::$key . 'previous-hover-color');
84
+ if (empty($previous)) {
85
+ $previous = $params->get(self::$key . 'previous');
86
+
87
+ if ($previous == -1) {
88
+ $previous = null;
89
+ } elseif ($previous[0] != '$') {
90
+ $previous = N2Uri::pathToUri(dirname(__FILE__) . '/image/previous/' . $previous);
91
+ }
92
+ }
93
+
94
+ if ($params->get(self::$key . 'mirror')) {
95
+ $next = str_replace('image/previous/', 'image/next/', $previous);
96
+ $nextColor = $previousColor;
97
+ $nextHover = $previousHover;
98
+ $nextHoverColor = $previousHoverColor;
99
+ } else {
100
+ $next = $params->get(self::$key . 'next-image');
101
+ $nextColor = $params->get(self::$key . 'next-color');
102
+ $nextHover = $params->get(self::$key . 'next-hover');
103
+ $nextHoverColor = $params->get(self::$key . 'next-hover-color');
104
+ if (empty($next)) {
105
+ $next = $params->get(self::$key . 'next');
106
+ if ($next == -1) {
107
+ $next = null;
108
+ } elseif ($next[0] != '$') {
109
+ $next = N2Uri::pathToUri(dirname(__FILE__) . '/image/next/' . $next);
110
+ }
111
+ }
112
+ }
113
+ if ($previous || $next) {
114
+
115
+ N2LESS::addFile(N2Filesystem::translate(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'image' . DIRECTORY_SEPARATOR . 'style.n2less'), $slider->cacheId, array(
116
+ "sliderid" => $slider->elementId
117
+ ), NEXTEND_SMARTSLIDER_ASSETS . '/less' . NDS);
118
+ N2JS::addFile(N2Filesystem::translate(dirname(__FILE__) . '/image/arrow.min.js'), $id);
119
+
120
+
121
+ list($displayClass, $displayAttributes) = self::getDisplayAttributes($params, self::$key);
122
+
123
+ $animation = $params->get(self::$key . 'animation');
124
+
125
+ if ($animation == 'none' || $animation == 'fade') {
126
+ $styleClass = N2StyleRenderer::render($params->get(self::$key . 'style'), 'heading', $slider->elementId, 'div#' . $slider->elementId . ' ');
127
+ } else {
128
+ $styleClass = N2StyleRenderer::render($params->get(self::$key . 'style'), 'heading-active', $slider->elementId, 'div#' . $slider->elementId . ' ');
129
+ }
130
+
131
+ if ($previous) {
132
+ $html .= self::getHTML($id, $params, $animation, 'previous', $previous, $displayClass, $displayAttributes, $styleClass, $previousColor, $previousHover, $previousHoverColor);
133
+ }
134
+
135
+ if ($next) {
136
+ $html .= self::getHTML($id, $params, $animation, 'next', $next, $displayClass, $displayAttributes, $styleClass, $nextColor, $nextHover, $nextHoverColor);
137
+ }
138
+
139
+ N2JS::addInline('new NextendSmartSliderWidgetArrowImage("' . $id . '", ' . n2_floatval($params->get(self::$key . 'responsive-desktop')) . ', ' . n2_floatval($params->get(self::$key . 'responsive-tablet')) . ', ' . n2_floatval($params->get(self::$key . 'responsive-mobile')) . ');');
140
+ }
141
+
142
+ return $html;
143
+ }
144
+
145
+ private static function getHTML($id, &$params, $animation, $side, $image, $displayClass, $displayAttributes, $styleClass, $color = 'ffffffcc', $hover = 0, $hoverColor = 'ffffffcc') {
146
+
147
+ list($style, $attributes) = self::getPosition($params, self::$key . $side . '-');
148
+
149
+ $imageHover = null;
150
+
151
+ $ext = pathinfo($image, PATHINFO_EXTENSION);
152
+ if (substr($image, 0, 1) == '$' && $ext == 'svg') {
153
+ list($color, $opacity) = N2Color::colorToSVG($color);
154
+ $content = N2Filesystem::readFile(N2ImageHelper::fixed($image, true));
155
+ $image = 'data:image/svg+xml;base64,' . base64_encode(str_replace(array(
156
+ 'fill="#FFF"',
157
+ 'opacity="1"'
158
+ ), array(
159
+ 'fill="#' . $color . '"',
160
+ 'opacity="' . $opacity . '"'
161
+ ), $content));
162
+
163
+ if ($hover) {
164
+ list($color, $opacity) = N2Color::colorToSVG($hoverColor);
165
+ $imageHover = 'data:image/svg+xml;base64,' . base64_encode(str_replace(array(
166
+ 'fill="#FFF"',
167
+ 'opacity="1"'
168
+ ), array(
169
+ 'fill="#' . $color . '"',
170
+ 'opacity="' . $opacity . '"'
171
+ ), $content));
172
+ }
173
+ } else {
174
+ $image = N2ImageHelper::fixed($image);
175
+ }
176
+
177
+ if ($imageHover === null) {
178
+ $image = N2Html::image($image, 'Arrow', array(
179
+ 'class' => 'n2-ow',
180
+ 'data-no-lazy' => '1',
181
+ 'data-hack' => 'data-lazy-src'
182
+ ));
183
+ } else {
184
+ $image = N2Html::image($image, 'Arrow', array(
185
+ 'class' => 'n2-arrow-normal-img n2-ow',
186
+ 'data-no-lazy' => '1',
187
+ 'data-hack' => 'data-lazy-src'
188
+ )) . N2Html::image($imageHover, 'Arrow', array(
189
+ 'class' => 'n2-arrow-hover-img n2-ow',
190
+ 'data-no-lazy' => '1',
191
+ 'data-hack' => 'data-lazy-src'
192
+ ));
193
+ }
194
+
195
+ if ($animation == 'none' || $animation == 'fade') {
196
+ return N2Html::tag('div', $displayAttributes + $attributes + array(
197
+ 'id' => $id . '-arrow-' . $side,
198
+ 'class' => $displayClass . $styleClass . 'nextend-arrow n2-ib nextend-arrow-' . $side . ' nextend-arrow-animated-' . $animation,
199
+ 'style' => $style
200
+ ), $image);
201
+ }
202
+
203
+
204
+ return N2Html::tag('div', $displayAttributes + $attributes + array(
205
+ 'id' => $id . '-arrow-' . $side,
206
+ 'class' => $displayClass . 'nextend-arrow n2-ib nextend-arrow-animated nextend-arrow-animated-' . $animation . ' nextend-arrow-' . $side,
207
+ 'style' => $style
208
+ ), N2Html::tag('div', array(
209
+ 'class' => $styleClass . ' n2-resize'
210
+ ), $image) . N2Html::tag('div', array(
211
+ 'class' => $styleClass . ' n2-active n2-resize'
212
+ ), $image));
213
+ }
214
+
215
+ public static function prepareExport($export, $params) {
216
+ $export->addImage($params->get(self::$key . 'previous-image', ''));
217
+ $export->addImage($params->get(self::$key . 'next-image', ''));
218
+
219
+ $export->addVisual($params->get(self::$key . 'style'));
220
+ }
221
+
222
+ public static function prepareImport($import, $params) {
223
+
224
+ $params->set(self::$key . 'previous-image', $import->fixImage($params->get(self::$key . 'previous-image', '')));
225
+ $params->set(self::$key . 'next-image', $import->fixImage($params->get(self::$key . 'next-image', '')));
226
+
227
+ $params->set(self::$key . 'style', $import->fixSection($params->get(self::$key . 'style', '')));
228
+ }
229
+ }
230
+
231
+
232
+ class N2SSPluginWidgetArrowImageSmallRectangle extends N2SSPluginWidgetArrowImage {
233
+
234
+ var $_name = 'imageSmallRectangle';
235
+
236
+ static function getDefaults() {
237
+ return array_merge(N2SSPluginWidgetArrowImage::getDefaults(), array(
238
+ 'widget-arrow-responsive-desktop' => 0.8,
239
+ 'widget-arrow-previous' => '$ss$/plugins/widgetarrow/image/image/previous/full.svg',
240
+ 'widget-arrow-next' => '$ss$/plugins/widgetarrow/image/image/next/full.svg',
241
+ 'widget-arrow-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiMnwqfDJ8KnwyfCp8MnwqfHB4IiwiYm94c2hhZG93IjoiMHwqfDB8KnwwfCp8MHwqfDAwMDAwMGZmIiwiYm9yZGVyIjoiMHwqfHNvbGlkfCp8MDAwMDAwZmYiLCJib3JkZXJyYWRpdXMiOiIzIiwiZXh0cmEiOiIifSx7ImJhY2tncm91bmRjb2xvciI6IjAxYWRkM2Q5In1dfQ=='
242
+ ));
243
+ }
244
+ }
245
+
246
+ N2Plugin::addPlugin('sswidgetarrow', 'N2SSPluginWidgetArrowImageSmallRectangle');
247
+
248
+
249
+ class N2SSPluginWidgetArrowImageEmpty extends N2SSPluginWidgetArrowImage {
250
+
251
+ var $_name = 'imageEmpty';
252
+
253
+ static function getDefaults() {
254
+ return array_merge(N2SSPluginWidgetArrowImage::getDefaults(), array(
255
+ 'widget-arrow-previous' => '$ss$/plugins/widgetarrow/image/image/previous/thin-horizontal.svg',
256
+ 'widget-arrow-next' => '$ss$/plugins/widgetarrow/image/image/next/thin-horizontal.svg',
257
+ 'widget-arrow-style' => ''
258
+ ));
259
+ }
260
+ }
261
+
262
+ N2Plugin::addPlugin('sswidgetarrow', 'N2SSPluginWidgetArrowImageEmpty');
263
+
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetarrow/image/image/config.xml ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="image" label="Image settings" hidetitle="1">
3
+ <param type="group" label="Previous">
4
+ <param type="imagelistfromfolder" name="widget-arrow-previous" label="Shape" folder="previous" post="break"/>
5
+ <param type="color" name="widget-arrow-previous-color" label="Color" alpha="1"/>
6
+ <param type="onoff" name="widget-arrow-previous-hover" label="Hover"/>
7
+ <param type="color" name="widget-arrow-previous-hover-color" label="Hover color" alpha="1"/></param>
8
+ <param name="widget-arrow-style" type="style" previewmode="button" set="1900" label="Style">
9
+ <![CDATA[ <div><div class="{styleClassName}" style="display: inline-block;"><img style="display: block;" src="{nextend.imageHelper.fixed($('#sliderwidget-arrow-previous-image').val() || N2Color.colorizeSVG($('[data-image="'+$('#sliderwidget-arrow-previous').val()+'"]').attr('src'), $('#sliderwidget-arrow-previous-color').val()));}" /></div></div> ]]>
10
+ </param>
11
+ <param type="widgetposition" name="widget-arrow-previous-position" label="Previous position"/>
12
+ <param type="widgetposition" name="widget-arrow-next-position" label="Next position"/>
13
+ </params>
14
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetarrow/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ foreach (N2Filesystem::folders($dir) AS $folder) {
6
+ $file = $dir . $folder . DIRECTORY_SEPARATOR . $folder . '.php';
7
+ if (N2Filesystem::fileexists($file)) {
8
+ require_once($file);
9
+ }
10
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetautoplay/image/image.php ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderWidgetAbstract', 'smartslider');
4
+
5
+ class N2SSPluginWidgetAutoplayImage extends N2SSPluginWidgetAbstract {
6
+
7
+ private static $key = 'widget-autoplay-';
8
+
9
+ var $_name = 'image';
10
+
11
+ static function getDefaults() {
12
+ return array(
13
+ 'widget-autoplay-responsive-desktop' => 1,
14
+ 'widget-autoplay-responsive-tablet' => 0.7,
15
+ 'widget-autoplay-responsive-mobile' => 0.5,
16
+ 'widget-autoplay-play-image' => '',
17
+ 'widget-autoplay-play-color' => 'ffffffcc',
18
+ 'widget-autoplay-play' => '$ss$/plugins/widgetautoplay/image/image/play/small-light.svg',
19
+ 'widget-autoplay-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiMTB8KnwxMHwqfDEwfCp8MTB8KnxweCIsImJveHNoYWRvdyI6IjB8KnwwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImJvcmRlciI6IjB8Knxzb2xpZHwqfDAwMDAwMGZmIiwiYm9yZGVycmFkaXVzIjoiMyIsImV4dHJhIjoiIn0seyJiYWNrZ3JvdW5kY29sb3IiOiIwMDAwMDBhYiJ9XX0=',
20
+ 'widget-autoplay-position-mode' => 'simple',
21
+ 'widget-autoplay-position-area' => 4,
22
+ 'widget-autoplay-position-offset' => 15,
23
+ 'widget-autoplay-mirror' => 1,
24
+ 'widget-autoplay-pause-image' => '',
25
+ 'widget-autoplay-pause-color' => 'ffffffcc',
26
+ 'widget-autoplay-pause' => '$ss$/plugins/widgetautoplay/image/image/pause/small-light.svg'
27
+ );
28
+ }
29
+
30
+ function onAutoplayList(&$list) {
31
+ $list[$this->_name] = $this->getPath();
32
+ }
33
+
34
+ function getPath() {
35
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . 'image' . DIRECTORY_SEPARATOR;
36
+ }
37
+
38
+ static function getPositions(&$params) {
39
+ $positions = array();
40
+
41
+ $positions['autoplay-position'] = array(
42
+ self::$key . 'position-',
43
+ 'autoplay'
44
+ );
45
+ return $positions;
46
+ }
47
+
48
+ static function render($slider, $id, $params) {
49
+ $html = '';
50
+
51
+ $play = $params->get(self::$key . 'play-image');
52
+ $playColor = $params->get(self::$key . 'play-color');
53
+ if (empty($play)) {
54
+ $play = $params->get(self::$key . 'play');
55
+ if ($play == -1) {
56
+ $play = null;
57
+ } elseif ($play[0] != '$') {
58
+ $play = N2Uri::pathToUri(dirname(__FILE__) . '/image/play/' . $play);
59
+ }
60
+ }
61
+
62
+ if ($params->get(self::$key . 'mirror')) {
63
+ $pause = str_replace('image/play/', 'image/pause/', $play);
64
+ $pauseColor = $playColor;
65
+ } else {
66
+ $pause = $params->get(self::$key . 'pause-image');
67
+ $pauseColor = $params->get(self::$key . 'pause-color');
68
+ if (empty($pause)) {
69
+ $pause = $params->get(self::$key . 'pause');
70
+ if ($pause == -1) {
71
+ $pause = null;
72
+ } elseif ($pause[0] != '$') {
73
+ $pause = N2Uri::pathToUri(dirname(__FILE__) . '/image/pause/' . $pause);
74
+ }
75
+ }
76
+ }
77
+
78
+ $ext = pathinfo($play, PATHINFO_EXTENSION);
79
+ if (substr($play, 0, 1) == '$' && $ext == 'svg') {
80
+ list($color, $opacity) = N2Color::colorToSVG($playColor);
81
+ $play = 'data:image/svg+xml;base64,' . base64_encode(str_replace(array(
82
+ 'fill="#FFF"',
83
+ 'opacity="1"'
84
+ ), array(
85
+ 'fill="#' . $color . '"',
86
+ 'opacity="' . $opacity . '"'
87
+ ), N2Filesystem::readFile(N2ImageHelper::fixed($play, true))));
88
+ } else {
89
+ $play = N2ImageHelper::fixed($play);
90
+ }
91
+
92
+ $ext = pathinfo($pause, PATHINFO_EXTENSION);
93
+ if (substr($pause, 0, 1) == '$' && $ext == 'svg') {
94
+ list($color, $opacity) = N2Color::colorToSVG($pauseColor);
95
+ $pause = 'data:image/svg+xml;base64,' . base64_encode(str_replace(array(
96
+ 'fill="#FFF"',
97
+ 'opacity="1"'
98
+ ), array(
99
+ 'fill="#' . $color . '"',
100
+ 'opacity="' . $opacity . '"'
101
+ ), N2Filesystem::readFile(N2ImageHelper::fixed($pause, true))));
102
+ } else {
103
+ $pause = N2ImageHelper::fixed($pause);
104
+ }
105
+
106
+ if ($play && $pause) {
107
+
108
+ N2LESS::addFile(N2Filesystem::translate(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'image' . DIRECTORY_SEPARATOR . 'style.n2less'), $slider->cacheId, array(
109
+ "sliderid" => $slider->elementId
110
+ ), NEXTEND_SMARTSLIDER_ASSETS . '/less' . NDS);
111
+ N2JS::addFile(N2Filesystem::translate(dirname(__FILE__) . '/image/autoplay.min.js'), $id);
112
+
113
+
114
+ list($displayClass, $displayAttributes) = self::getDisplayAttributes($params, self::$key);
115
+
116
+ $styleClass = N2StyleRenderer::render($params->get(self::$key . 'style'), 'heading', $slider->elementId, 'div#' . $slider->elementId . ' ');
117
+
118
+
119
+ list($style, $attributes) = self::getPosition($params, self::$key);
120
+
121
+
122
+ N2JS::addInline('new NextendSmartSliderWidgetAutoplayImage("' . $id . '", ' . n2_floatval($params->get(self::$key . 'responsive-desktop')) . ', ' . n2_floatval($params->get(self::$key . 'responsive-tablet')) . ', ' . n2_floatval($params->get(self::$key . 'responsive-mobile')) . ');');
123
+
124
+ $html = N2Html::tag('div', $displayAttributes + $attributes + array(
125
+ 'class' => $displayClass . $styleClass . 'nextend-autoplay n2-ib nextend-autoplay-image',
126
+ 'style' => $style
127
+ ), N2Html::image($play, 'Play', array(
128
+ 'class' => 'nextend-autoplay-play n2-ow',
129
+ 'data-no-lazy' => '1'
130
+ )) . N2Html::image($pause, 'Pause', array(
131
+ 'class' => 'nextend-autoplay-pause n2-ow',
132
+ 'data-no-lazy' => '1'
133
+ )));
134
+ }
135
+
136
+ return $html;
137
+ }
138
+
139
+ public static function prepareExport($export, $params) {
140
+ $export->addImage($params->get(self::$key . 'play-image', ''));
141
+ $export->addImage($params->get(self::$key . 'pause-image', ''));
142
+
143
+ $export->addVisual($params->get(self::$key . 'style'));
144
+ }
145
+
146
+ public static function prepareImport($import, $params) {
147
+
148
+ $params->set(self::$key . 'play-image', $import->fixImage($params->get(self::$key . 'play-image', '')));
149
+ $params->set(self::$key . 'pause-image', $import->fixImage($params->get(self::$key . 'pause-image', '')));
150
+
151
+ $params->set(self::$key . 'style', $import->fixSection($params->get(self::$key . 'style', '')));
152
+ }
153
+
154
+ }
155
+
156
+ N2Plugin::addPlugin('sswidgetautoplay', 'N2SSPluginWidgetAutoplayImage');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetautoplay/image/image/config.xml ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="image" label="Image settings" hidetitle="1">
3
+ <param type="group" label="Play">
4
+ <param type="imagelistfromfolder" name="widget-autoplay-play" label="Shape" folder="play" required="1" post="break"/>
5
+ <param type="color" name="widget-autoplay-play-color" label="Color" alpha="1"/></param>
6
+ <param name="widget-autoplay-style" type="style" previewmode="button" set="1900" label="Style">
7
+ <![CDATA[ <div class="{styleClassName}" style="display: inline-block;"><img style="display: block;" src="{nextend.imageHelper.fixed($('#sliderwidget-autoplay-play-image').val() || N2Color.colorizeSVG($('[data-image="'+$('#sliderwidget-autoplay-play').val()+'"]').attr('src'), $('#sliderwidget-autoplay-play-color').val()));}" /></div> ]]>
8
+ </param>
9
+ <param type="widgetposition" name="widget-autoplay-position" label="Position"/>
10
+ </params>
11
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetautoplay/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ foreach (N2Filesystem::folders($dir) AS $folder) {
6
+ $file = $dir . $folder . DIRECTORY_SEPARATOR . $folder . '.php';
7
+ if (N2Filesystem::fileexists($file)) {
8
+ require_once($file);
9
+ }
10
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbar/horizontal/horizontal.php ADDED
@@ -0,0 +1,146 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderWidgetAbstract', 'smartslider');
4
+ N2Loader::import('libraries.image.color');
5
+
6
+ class N2SSPluginWidgetBarHorizontal extends N2SSPluginWidgetAbstract {
7
+
8
+ private static $key = 'widget-bar-';
9
+
10
+ var $_name = 'horizontal';
11
+
12
+ static function getDefaults() {
13
+ return array(
14
+ 'widget-bar-position-mode' => 'simple',
15
+ 'widget-bar-position-area' => 10,
16
+ 'widget-bar-position-offset' => 30,
17
+ 'widget-bar-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiNXwqfDIwfCp8NXwqfDIwfCp8cHgiLCJib3hzaGFkb3ciOiIwfCp8MHwqfDB8KnwwfCp8MDAwMDAwZmYiLCJib3JkZXIiOiIwfCp8c29saWR8KnwwMDAwMDBmZiIsImJvcmRlcnJhZGl1cyI6IjQwIiwiZXh0cmEiOiIifV19',
18
+ 'widget-bar-font-title' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siY29sb3IiOiJmZmZmZmZmZiIsInNpemUiOiIxNHx8cHgiLCJ0c2hhZG93IjoiMHwqfDB8KnwwfCp8MDAwMDAwYzciLCJhZm9udCI6Ik1vbnRzZXJyYXQiLCJsaW5laGVpZ2h0IjoiMS4zIiwiYm9sZCI6MCwiaXRhbGljIjowLCJ1bmRlcmxpbmUiOjAsImFsaWduIjoibGVmdCIsImV4dHJhIjoidmVydGljYWwtYWxpZ246IG1pZGRsZTsifSx7ImNvbG9yIjoiZmMyODI4ZmYiLCJhZm9udCI6Imdvb2dsZShAaW1wb3J0IHVybChodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1SYWxld2F5KTspLEFyaWFsIiwic2l6ZSI6IjI1fHxweCJ9LHt9XX0=',
19
+ 'widget-bar-show-description' => 1,
20
+ 'widget-bar-font-description' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siY29sb3IiOiJmZmZmZmZmZiIsInNpemUiOiIxNHx8cHgiLCJ0c2hhZG93IjoiMHwqfDB8KnwwfCp8MDAwMDAwYzciLCJhZm9udCI6Ik1vbnRzZXJyYXQiLCJsaW5laGVpZ2h0IjoiMS4zIiwiYm9sZCI6MCwiaXRhbGljIjoxLCJ1bmRlcmxpbmUiOjAsImFsaWduIjoibGVmdCIsImV4dHJhIjoidmVydGljYWwtYWxpZ246IG1pZGRsZTsifSx7ImNvbG9yIjoiZmMyODI4ZmYiLCJhZm9udCI6Imdvb2dsZShAaW1wb3J0IHVybChodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1SYWxld2F5KTspLEFyaWFsIiwic2l6ZSI6IjI1fHxweCJ9LHt9XX0=',
21
+ 'widget-bar-width' => '100%',
22
+ 'widget-bar-full-width' => 0,
23
+ 'widget-bar-overlay' => 0,
24
+ 'widget-bar-separator' => ' - ',
25
+ 'widget-bar-align' => 'center',
26
+ 'widget-bar-animate' => 0
27
+ );
28
+ }
29
+
30
+ function onBarList(&$list) {
31
+ $list[$this->_name] = $this->getPath();
32
+ }
33
+
34
+ function getPath() {
35
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . 'horizontal' . DIRECTORY_SEPARATOR;
36
+ }
37
+
38
+ static function getPositions(&$params) {
39
+ $positions = array();
40
+
41
+ $positions['bar-position'] = array(
42
+ self::$key . 'position-',
43
+ 'bar'
44
+ );
45
+ return $positions;
46
+ }
47
+
48
+ /**
49
+ * @param $slider N2SmartSliderAbstract
50
+ * @param $id
51
+ * @param $params
52
+ *
53
+ * @return string
54
+ */
55
+ static function render($slider, $id, $params) {
56
+
57
+ N2LESS::addFile(N2Filesystem::translate(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'horizontal' . DIRECTORY_SEPARATOR . 'style.n2less'), $slider->cacheId, array(
58
+ "sliderid" => $slider->elementId
59
+ ), NEXTEND_SMARTSLIDER_ASSETS . '/less' . NDS);
60
+ N2JS::addFile(N2Filesystem::translate(dirname(__FILE__) . '/horizontal/bar.min.js'), $id);
61
+
62
+
63
+ list($displayClass, $displayAttributes) = self::getDisplayAttributes($params, self::$key);
64
+
65
+ $styleClass = N2StyleRenderer::render($params->get(self::$key . 'style'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ');
66
+ $fontTitle = N2FontRenderer::render($params->get(self::$key . 'font-title'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ', $slider->fontSize);
67
+ $fontDescription = N2FontRenderer::render($params->get(self::$key . 'font-description'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ', $slider->fontSize);
68
+
69
+ list($style, $attributes) = self::getPosition($params, self::$key);
70
+ $attributes['data-offset'] = $params->get(self::$key . 'position-offset');
71
+
72
+ $style .= 'text-align: ' . $params->get(self::$key . 'align') . ';';
73
+
74
+ $width = $params->get(self::$key . 'width');
75
+ if (is_numeric($width) || substr($width, -1) == '%' || substr($width, -2) == 'px') {
76
+ $style .= 'width:' . $width . ';';
77
+ } else {
78
+ $attributes['data-sswidth'] = $width;
79
+ }
80
+
81
+ $innerStyle = '';
82
+ if (!$params->get(self::$key . 'full-width')) {
83
+ $innerStyle = 'display: inline-block;';
84
+ }
85
+
86
+ $separator = $params->get(self::$key . 'separator');
87
+ $showDescription = intval($params->get(self::$key . 'show-description'));
88
+ $slides = array();
89
+ for ($i = 0; $i < count($slider->slides); $i++) {
90
+ $slides[$i] = array(
91
+ 'html' => N2Html::tag('span', array('class' => $fontTitle), N2Translation::_($slider->slides[$i]->getTitle())),
92
+ 'hasLink' => $slider->slides[$i]->hasLink
93
+ );
94
+
95
+ $description = $slider->slides[$i]->getDescription();
96
+ if ($showDescription && !empty($description)) {
97
+ $slides[$i]['html'] .= N2Html::tag('span', array('class' => $fontDescription), $separator . N2Translation::_($description));
98
+ }
99
+ }
100
+
101
+ $parameters = array(
102
+ 'overlay' => $params->get(self::$key . 'position-mode') != 'simple' || $params->get(self::$key . 'overlay'),
103
+ 'area' => intval($params->get(self::$key . 'position-area')),
104
+ 'animate' => intval($params->get(self::$key . 'animate'))
105
+ );
106
+
107
+ N2JS::addInline('new NextendSmartSliderWidgetBarHorizontal("' . $id . '", ' . json_encode($slides) . ', ' . json_encode($parameters) . ');');
108
+
109
+ return N2Html::tag("div", $displayAttributes + $attributes + array(
110
+ "class" => $displayClass . "nextend-bar nextend-bar-horizontal",
111
+ "style" => $style
112
+ ), N2Html::tag("div", array(
113
+ "class" => $styleClass,
114
+ "style" => $innerStyle . ($slides[$slider->_activeSlide]['hasLink'] ? 'cursor:pointer;' : '')
115
+ ), $slides[$slider->_activeSlide]['html']));
116
+ }
117
+
118
+ public static function prepareExport($export, $params) {
119
+ $export->addVisual($params->get(self::$key . 'style'));
120
+ $export->addVisual($params->get(self::$key . 'font-title'));
121
+ $export->addVisual($params->get(self::$key . 'font-description'));
122
+ }
123
+
124
+ public static function prepareImport($import, $params) {
125
+
126
+ $params->set(self::$key . 'style', $import->fixSection($params->get(self::$key . 'style', '')));
127
+ $params->set(self::$key . 'font-title', $import->fixSection($params->get(self::$key . 'font-title', '')));
128
+ $params->set(self::$key . 'font-description', $import->fixSection($params->get(self::$key . 'font-description', '')));
129
+ }
130
+ }
131
+
132
+ class N2SSPluginWidgetBarHorizontalFull extends N2SSPluginWidgetBarHorizontal {
133
+
134
+ var $_name = 'horizontalFull';
135
+
136
+ static function getDefaults() {
137
+ return array_merge(N2SSPluginWidgetBarHorizontal::getDefaults(), array(
138
+ 'widget-bar-position-offset' => 0,
139
+ 'widget-bar-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiMjB8KnwyMHwqfDIwfCp8MjB8KnxweCIsImJveHNoYWRvdyI6IjB8KnwwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImJvcmRlciI6IjB8Knxzb2xpZHwqfDAwMDAwMGZmIiwiYm9yZGVycmFkaXVzIjoiMCIsImV4dHJhIjoiIn1dfQ==',
140
+ 'widget-bar-full-width' => 1,
141
+ 'widget-bar-align' => 'left'
142
+ ));
143
+ }
144
+ }
145
+
146
+ N2Plugin::addPlugin('sswidgetbar', 'N2SSPluginWidgetBarHorizontalFull');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbar/horizontal/horizontal/config.xml ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="horizontal-bar" label="Horizontal settings" hidetitle="1">
3
+ <param name="widget-bar-position" type="widgetposition" label="Position"/>
4
+ <param type="onoff" name="widget-bar-animate" label="Animate"/>
5
+ <param name="widget-bar-style" type="style" previewmode="simple" font="sliderwidget-bar-font-title" label="Style" font2="sliderwidget-bar-font-description" set="1900">
6
+ <![CDATA[ <div style="width:100%;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;" class="{styleClassName}"><span href="#" class="{fontClassName}">Slide title</span><span class="{fontClassName2}">{$('#sliderwidget-bar-separator').val()}Slide description which is longer than the title</span></div> ]]>
7
+ </param>
8
+ <param name="widget-bar-font-title" type="font" previewmode="simple" style="sliderwidget-bar-style" label="Title font" set="1100">
9
+ <![CDATA[ <div style="width:100%;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;" class="{styleClassName}"><span href="#" class="{fontClassName}">Slide title</span></div> ]]>
10
+ </param>
11
+ <param type="group" label="Description">
12
+ <param type="onoff" label="Shows" name="widget-bar-show-description"/>
13
+ <param name="widget-bar-font-description" type="font" previewmode="simple" style="sliderwidget-bar-style" label="Font" set="1100">
14
+ <![CDATA[ <div style="width:100%;-webkit-box-sizing: border-box;-moz-box-sizing: border-box;box-sizing: border-box;" class="{styleClassName}"><span href="#" class="{fontClassName}">Slide description which is longer than the title</span></div> ]]>
15
+ </param>
16
+ </param>
17
+ <param type="group" label="Size">
18
+ <param type="onoff" label="Full width" name="widget-bar-full-width"/></param>
19
+ <param type="text" label="Separator" name="widget-bar-separator"/>
20
+ <param name="widget-bar-align" type="radio" label="Align">
21
+ <option value="left">Left</option>
22
+ <option value="center">Center</option>
23
+ <option value="right">Right</option>
24
+ </param>
25
+ </params>
26
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbar/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ foreach (N2Filesystem::folders($dir) AS $folder) {
6
+ $file = $dir . $folder . DIRECTORY_SEPARATOR . $folder . '.php';
7
+ if (N2Filesystem::fileexists($file)) {
8
+ require_once($file);
9
+ }
10
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbullet/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ foreach (N2Filesystem::folders($dir) AS $folder) {
6
+ $file = $dir . $folder . DIRECTORY_SEPARATOR . $folder . '.php';
7
+ if (N2Filesystem::fileexists($file)) {
8
+ require_once($file);
9
+ }
10
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbullet/transition/transition.php ADDED
@@ -0,0 +1,156 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderWidgetAbstract', 'smartslider');
4
+ N2Loader::import('libraries.image.color');
5
+
6
+ class N2SSPluginWidgetBulletTransition extends N2SSPluginWidgetAbstract {
7
+
8
+ var $_name = 'transition';
9
+
10
+ private static $key = 'widget-bullet-';
11
+
12
+ static function getDefaults() {
13
+ return array(
14
+ 'widget-bullet-position-mode' => 'simple',
15
+ 'widget-bullet-position-area' => 10,
16
+ 'widget-bullet-position-offset' => 10,
17
+ 'widget-bullet-action' => 'click',
18
+ 'widget-bullet-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiNXwqfDV8Knw1fCp8NXwqfHB4IiwiYm94c2hhZG93IjoiMHwqfDB8KnwwfCp8MHwqfDAwMDAwMGZmIiwiYm9yZGVyIjoiMHwqfHNvbGlkfCp8MDAwMDAwZmYiLCJib3JkZXJyYWRpdXMiOiI1MCIsImV4dHJhIjoibWFyZ2luOiA0cHg7In0seyJiYWNrZ3JvdW5kY29sb3IiOiIwMGMxYzRmZiJ9XX0=',
19
+ 'widget-bullet-bar' => '',
20
+ 'widget-bullet-align' => 'center',
21
+ 'widget-bullet-orientation' => 'auto',
22
+ 'widget-bullet-bar-full-size' => 0,
23
+ 'widget-bullet-overlay' => 0,
24
+ 'widget-bullet-thumbnail-show-image' => 0,
25
+ 'widget-bullet-thumbnail-width' => 100,
26
+ 'widget-bullet-thumbnail-width' => 60,
27
+ 'widget-bullet-thumbnail-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwODAiLCJwYWRkaW5nIjoiM3wqfDN8KnwzfCp8M3wqfHB4IiwiYm94c2hhZG93IjoiMHwqfDB8KnwwfCp8MHwqfDAwMDAwMGZmIiwiYm9yZGVyIjoiMHwqfHNvbGlkfCp8MDAwMDAwZmYiLCJib3JkZXJyYWRpdXMiOiIzIiwiZXh0cmEiOiJtYXJnaW46IDVweDsifV19',
28
+ 'widget-bullet-thumbnail-side' => 'before'
29
+ );
30
+ }
31
+
32
+ function onBulletList(&$list) {
33
+ $list[$this->_name] = $this->getPath();
34
+ }
35
+
36
+ function getPath() {
37
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . 'transition' . DIRECTORY_SEPARATOR;
38
+ }
39
+
40
+ static function getPositions(&$params) {
41
+ $positions = array();
42
+ $positions['bullet-position'] = array(
43
+ self::$key . 'position-',
44
+ 'bullet'
45
+ );
46
+ return $positions;
47
+ }
48
+
49
+ /**
50
+ * @param $slider N2SmartSliderAbstract
51
+ * @param $id
52
+ * @param $params
53
+ *
54
+ * @return string
55
+ */
56
+ static function render($slider, $id, $params) {
57
+
58
+ N2LESS::addFile(N2Filesystem::translate(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'transition' . DIRECTORY_SEPARATOR . 'style.n2less'), $slider->cacheId, array(
59
+ "sliderid" => $slider->elementId
60
+ ), NEXTEND_SMARTSLIDER_ASSETS . '/less' . NDS);
61
+ N2JS::addFile(N2Filesystem::translate(dirname(__FILE__) . '/transition/bullet.min.js'), $id);
62
+
63
+
64
+ list($displayClass, $displayAttributes) = self::getDisplayAttributes($params, self::$key);
65
+
66
+ $bulletStyle = N2StyleRenderer::render($params->get(self::$key . 'style'), 'dot', $slider->elementId, 'div#' . $slider->elementId . ' ');
67
+ $barStyle = N2StyleRenderer::render($params->get(self::$key . 'bar'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ');
68
+
69
+ list($style, $attributes) = self::getPosition($params, self::$key);
70
+ $attributes['data-offset'] = $params->get(self::$key . 'position-offset', 0);
71
+
72
+ $dots = array();
73
+ $i = 1;
74
+ foreach ($slider->slides AS $slide) {
75
+ $dots[] = N2Html::tag('div', array(
76
+ 'class' => $bulletStyle . ($slide->isActive() ? 'n2-active' : ''),
77
+ ), '');
78
+
79
+ $i++;
80
+ }
81
+
82
+ $orientation = self::getOrientationByPosition($params->get(self::$key . 'position-mode'), $params->get(self::$key . 'position-area'), $params->get(self::$key . 'orientation'));
83
+ if ($orientation == 'auto') {
84
+ $orientation = 'horizontal';
85
+ }
86
+ $html = '';
87
+ switch ($orientation) {
88
+ case 'vertical':
89
+ $html .= implode('<br>', $dots);
90
+ break;
91
+ default:
92
+ $html .= implode('', $dots);
93
+ }
94
+
95
+ $parameters = array(
96
+ 'overlay' => $params->get(self::$key . 'position-mode') != 'simple' || $params->get(self::$key . 'overlay'),
97
+ 'area' => intval($params->get(self::$key . 'position-area'))
98
+ );
99
+
100
+ $thumbnails = array();
101
+ if ($params->get(self::$key . 'thumbnail-show-image')) {
102
+ foreach ($slider->slides AS $slide) {
103
+ $thumbnails[] = $slide->getThumbnail();
104
+ }
105
+ $parameters['thumbnailWidth'] = intval($params->get(self::$key . 'thumbnail-width'));
106
+ $parameters['thumbnailHeight'] = intval($params->get(self::$key . 'thumbnail-height'));
107
+ $parameters['thumbnailStyle'] = N2StyleRenderer::render($params->get(self::$key . 'thumbnail-style'), 'simple', $slider->elementId, '');
108
+ $side = $params->get(self::$key . 'thumbnail-side');
109
+
110
+
111
+ if ($side == 'before') {
112
+ if ($orientation == 'vertical') {
113
+ $position = 'left';
114
+ } else {
115
+ $position = 'top';
116
+ }
117
+ } else {
118
+ if ($orientation == 'vertical') {
119
+ $position = 'right';
120
+ } else {
121
+ $position = 'bottom';
122
+ }
123
+ }
124
+ $parameters['thumbnailPosition'] = $position;
125
+ }
126
+ $parameters['thumbnails'] = $thumbnails;
127
+ $parameters['action'] = $params->get(self::$key . 'action');
128
+ $parameters['numeric'] = 0;
129
+
130
+ N2JS::addInline('new NextendSmartSliderWidgetBulletTransition("' . $id . '", ' . json_encode($parameters) . ');');
131
+
132
+ $fullSize = intval($params->get(self::$key . 'bar-full-size'));
133
+ if ($fullSize) {
134
+ $displayClass .= "n2-bullet-bar-full-size ";
135
+ }
136
+
137
+ return N2Html::tag("div", $displayAttributes + $attributes + array(
138
+ "class" => $displayClass . $barStyle . "nextend-bullet-bar n2-ib nextend-bullet-bar-" . $orientation,
139
+ "style" => "text-align: " . $params->get(self::$key . 'align') . ";" . $style
140
+ ), $html);
141
+ }
142
+
143
+ public static function prepareExport($export, $params) {
144
+ $export->addVisual($params->get(self::$key . 'style'));
145
+ $export->addVisual($params->get(self::$key . 'bar'));
146
+ }
147
+
148
+ public static function prepareImport($import, $params) {
149
+
150
+ $params->set(self::$key . 'style', $import->fixSection($params->get(self::$key . 'style')));
151
+ $params->set(self::$key . 'bar', $import->fixSection($params->get(self::$key . 'bar')));
152
+ }
153
+
154
+ }
155
+
156
+ N2Plugin::addPlugin('sswidgetbullet', 'N2SSPluginWidgetBulletTransition');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbullet/transition/transition/config.xml ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="bullettransition" label="Transition bullet settings" hidetitle="1">
3
+ <param name="widget-bullet-position" type="widgetposition" label="Position"/>
4
+ <param name="widget-bullet-style" type="style" previewmode="dot" label="Dot style" style2="sliderwidget-bullet-bar" set="1900">
5
+ <![CDATA[ <div class="{styleClassName2}" style="display:inline-block;"><div class="{styleClassName}" style="display: inline-block; vertical-align:top;"></div><div class="{styleClassName} n2-active" style="display: inline-block; vertical-align:top;"></div><div class="{styleClassName}" style="display: inline-block; vertical-align:top;"></div></div> ]]>
6
+ </param>
7
+ <param name="widget-bullet-bar" type="style" previewmode="simple" label="Bar style" style2="sliderwidget-bullet-style" set="1900">
8
+ <![CDATA[ <div class="{styleClassName}" style="display:inline-block;"><div class="{styleClassName2}" style="display: inline-block; vertical-align:top;"></div><div class="{styleClassName2} n2-active" style="display: inline-block; vertical-align:top;"></div><div class="{styleClassName2}" style="display: inline-block; vertical-align:top;"></div></div> ]]>
9
+ </param>
10
+ </params>
11
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetshadow/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ foreach (N2Filesystem::folders($dir) AS $folder) {
6
+ $file = $dir . $folder . DIRECTORY_SEPARATOR . $folder . '.php';
7
+ if (N2Filesystem::fileexists($file)) {
8
+ require_once($file);
9
+ }
10
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetshadow/shadow/shadow.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderWidgetAbstract', 'smartslider');
4
+
5
+ class N2SSPluginWidgetShadowShadow extends N2SSPluginWidgetAbstract
6
+ {
7
+
8
+ var $_name = 'shadow';
9
+
10
+ private static $key = 'widget-shadow-';
11
+
12
+ static function getDefaults() {
13
+ return array(
14
+ 'widget-shadow-position-mode' => 'simple',
15
+ 'widget-shadow-position-area' => 12,
16
+ 'widget-shadow-position-stack' => 4,
17
+ 'widget-shadow-width' => '100%',
18
+ 'widget-shadow-shadow-image' => '',
19
+ 'widget-shadow-shadow' => '$ss$/plugins/widgetshadow/shadow/shadow/shadow/dark.png'
20
+ );
21
+ }
22
+
23
+ function onShadowList(&$list) {
24
+ $list[$this->_name] = $this->getPath();
25
+ }
26
+
27
+ function getPath() {
28
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . 'shadow' . DIRECTORY_SEPARATOR;
29
+ }
30
+
31
+ static function getPositions(&$params) {
32
+ $positions = array();
33
+ $positions['shadow-position'] = array(
34
+ self::$key . 'position-',
35
+ 'shadow'
36
+ );
37
+ return $positions;
38
+ }
39
+
40
+ static function render($slider, $id, $params) {
41
+
42
+ $shadow = $params->get(self::$key . 'shadow-image');
43
+ if (empty($shadow)) {
44
+ $shadow = $params->get(self::$key . 'shadow');
45
+ if ($shadow == -1) {
46
+ $shadow = null;
47
+ }
48
+ }
49
+ if (!$shadow) {
50
+ return '';
51
+ }
52
+
53
+ N2LESS::addFile(N2Filesystem::translate(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'shadow' . DIRECTORY_SEPARATOR . 'style.n2less'), $slider->cacheId, array(
54
+ "sliderid" => $slider->elementId
55
+ ), NEXTEND_SMARTSLIDER_ASSETS . '/less' . NDS);
56
+ N2JS::addFile(N2Filesystem::translate(dirname(__FILE__) . '/shadow/shadow.min.js'), $id);
57
+
58
+
59
+
60
+ list($displayClass, $displayAttributes) = self::getDisplayAttributes($params, self::$key);
61
+
62
+ list($style, $attributes) = self::getPosition($params, self::$key);
63
+
64
+ $width = $params->get(self::$key . 'width');
65
+ if (is_numeric($width) || substr($width, -1) == '%' || substr($width, -2) == 'px') {
66
+ $style .= 'width:' . $width . ';';
67
+ } else {
68
+ $attributes['data-sswidth'] = $width;
69
+ }
70
+
71
+ $parameters = array(
72
+ 'overlay' => $params->get(self::$key . 'position-mode') != 'simple' || 0,
73
+ 'area' => intval($params->get(self::$key . 'position-area'))
74
+ );
75
+
76
+ N2JS::addInline('new NextendSmartSliderWidgetShadow("' . $id . '", ' . json_encode($parameters) . ');');
77
+
78
+
79
+ return N2Html::tag('div', $displayAttributes + $attributes + array(
80
+ 'class' => $displayClass . "nextend-shadow",
81
+ 'style' => $style
82
+ ), N2Html::image(N2ImageHelper::fixed($shadow), 'Shadow', array('style' => 'display: block; width:100%;max-width:none;','class'=>'n2-ow nextend-shadow-image')));
83
+ }
84
+
85
+ public static function prepareExport($export, $params) {
86
+ $export->addImage($params->get(self::$key . 'shadow-image', ''));
87
+ }
88
+
89
+ public static function prepareImport($import, $params) {
90
+
91
+ $params->set(self::$key . 'shadow-image', $import->fixImage($params->get(self::$key . 'shadow-image', '')));
92
+ }
93
+ }
94
+
95
+ N2Plugin::addPlugin('sswidgetshadow', 'N2SSPluginWidgetShadowShadow');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetshadow/shadow/shadow/config.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <root>
2
+ <params name="shadow" label="Shadow settings" hidetitle="1">
3
+ <param name="widget-shadow-position" type="widgetposition" label="Position" class="n2-hidden"/>
4
+ <param type="imagelistfromfolder" name="widget-shadow-shadow" label="Shadow" folder="shadow" required="1"/>
5
+ </params>
6
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetthumbnail/default/default.php ADDED
@@ -0,0 +1,335 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderWidgetAbstract', 'smartslider');
4
+ N2Loader::import('libraries.image.color');
5
+
6
+ class N2SSPluginWidgetThumbnailDefault extends N2SSPluginWidgetAbstract {
7
+
8
+ var $_name = 'default';
9
+
10
+ private static $key = 'widget-thumbnail-';
11
+
12
+ static function getDefaults() {
13
+ return array(
14
+ 'widget-thumbnail-minimum-thumbnail-count' => 1,
15
+ 'widget-thumbnail-position-mode' => 'simple',
16
+ 'widget-thumbnail-position-area' => 12,
17
+ 'widget-thumbnail-action' => 'click',
18
+ 'widget-thumbnail-style-bar' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMjQyNDI0ZmYiLCJwYWRkaW5nIjoiM3wqfDN8KnwzfCp8M3wqfHB4IiwiYm94c2hhZG93IjoiMHwqfDB8KnwwfCp8MHwqfDAwMDAwMGZmIiwiYm9yZGVyIjoiMHwqfHNvbGlkfCp8MDAwMDAwZmYiLCJib3JkZXJyYWRpdXMiOiIwIiwiZXh0cmEiOiIifV19',
19
+ 'widget-thumbnail-style-slides' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwMDAiLCJwYWRkaW5nIjoiMHwqfDB8KnwwfCp8MHwqfHB4IiwiYm94c2hhZG93IjoiMHwqfDB8KnwwfCp8MHwqfDAwMDAwMGZmIiwiYm9yZGVyIjoiMHwqfHNvbGlkfCp8ZmZmZmZmMDAiLCJib3JkZXJyYWRpdXMiOiIwIiwiZXh0cmEiOiJvcGFjaXR5OiAwLjQ7XG5tYXJnaW46IDNweDtcbnRyYW5zaXRpb246IGFsbCAwLjRzO1xuYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsifSx7ImJvcmRlciI6IjB8Knxzb2xpZHwqfGZmZmZmZmNjIiwiZXh0cmEiOiJvcGFjaXR5OiAxOyJ9XX0=',
20
+ 'widget-thumbnail-arrow' => 1,
21
+ 'widget-thumbnail-title-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiM3wqfDEwfCp8M3wqfDEwfCp8cHgiLCJib3hzaGFkb3ciOiIwfCp8MHwqfDB8KnwwfCp8MDAwMDAwZmYiLCJib3JkZXIiOiIwfCp8c29saWR8KnwwMDAwMDBmZiIsImJvcmRlcnJhZGl1cyI6IjAiLCJleHRyYSI6ImJvdHRvbTogMDtcbmxlZnQ6IDA7In1dfQ==',
22
+ 'widget-thumbnail-title' => 0,
23
+ 'widget-thumbnail-title-font' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siY29sb3IiOiJmZmZmZmZmZiIsInNpemUiOiIxMnx8cHgiLCJ0c2hhZG93IjoiMHwqfDB8KnwwfCp8MDAwMDAwYWIiLCJhZm9udCI6Ik1vbnRzZXJyYXQiLCJsaW5laGVpZ2h0IjoiMS4yIiwiYm9sZCI6MCwiaXRhbGljIjowLCJ1bmRlcmxpbmUiOjAsImFsaWduIjoibGVmdCJ9LHsiY29sb3IiOiJmYzI4MjhmZiIsImFmb250IjoiZ29vZ2xlKEBpbXBvcnQgdXJsKGh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVJhbGV3YXkpOyksQXJpYWwiLCJzaXplIjoiMjV8fHB4In0se31dfQ==',
24
+ 'widget-thumbnail-description' => 0,
25
+ 'widget-thumbnail-description-font' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siY29sb3IiOiJmZmZmZmZmZiIsInNpemUiOiIxMnx8cHgiLCJ0c2hhZG93IjoiMHwqfDB8KnwwfCp8MDAwMDAwYWIiLCJhZm9udCI6Ik1vbnRzZXJyYXQiLCJsaW5laGVpZ2h0IjoiMS4zIiwiYm9sZCI6MCwiaXRhbGljIjowLCJ1bmRlcmxpbmUiOjAsImFsaWduIjoibGVmdCJ9LHsiY29sb3IiOiJmYzI4MjhmZiIsImFmb250IjoiZ29vZ2xlKEBpbXBvcnQgdXJsKGh0dHA6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PVJhbGV3YXkpOyksQXJpYWwiLCJzaXplIjoiMjV8fHB4In0se31dfQ==',
26
+ 'widget-thumbnail-caption-placement' => 'overlay',
27
+ 'widget-thumbnail-caption-size' => 100,
28
+ 'widget-thumbnail-group' => 1,
29
+ 'widget-thumbnail-orientation' => 'auto',
30
+ 'widget-thumbnail-size' => '100%',
31
+ 'widget-thumbnail-overlay' => 0,
32
+ 'widget-thumbnail-show-image' => 1,
33
+ 'widget-thumbnail-width' => 100,
34
+ 'widget-thumbnail-height' => 60
35
+ );
36
+ }
37
+
38
+ function onThumbnailList(&$list) {
39
+ $list[$this->_name] = $this->getPath();
40
+ }
41
+
42
+ function getPath() {
43
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . 'default' . DIRECTORY_SEPARATOR;
44
+ }
45
+
46
+ static function getPositions(&$params) {
47
+ $positions = array();
48
+ $positions['thumbnail-position'] = array(
49
+ self::$key . 'position-',
50
+ 'thumbnail'
51
+ );
52
+ return $positions;
53
+ }
54
+
55
+ static function getStringBetween($string, $start, $end) {
56
+ $string = ' ' . $string;
57
+ $ini = strpos($string, $start);
58
+ if ($ini == 0) return '';
59
+ $ini += strlen($start);
60
+ $len = strpos($string, $end, $ini) - $ini;
61
+ return substr($string, $ini, $len);
62
+ }
63
+
64
+ /**
65
+ * @param $slider N2SmartSliderAbstract
66
+ * @param $id
67
+ * @param $params
68
+ *
69
+ * @return string
70
+ */
71
+ static function render($slider, $id, $params) {
72
+ $showImage = intval($params->get(self::$key . 'show-image'));
73
+ $showTitle = intval($params->get(self::$key . 'title'));
74
+ $showDescription = intval($params->get(self::$key . 'description'));
75
+
76
+ if (!$showImage && !$showTitle && !$showDescription) {
77
+ // Nothing to show
78
+ return '';
79
+ }
80
+ N2JS::addFile(N2Filesystem::translate(dirname(__FILE__) . '/default/thumbnail.min.js'), $id);
81
+
82
+
83
+
84
+ N2LESS::addFile(N2Filesystem::translate(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'default' . DIRECTORY_SEPARATOR . 'style.n2less'), $slider->cacheId, array(
85
+ "sliderid" => $slider->elementId
86
+ ), NEXTEND_SMARTSLIDER_ASSETS . '/less' . NDS);
87
+
88
+ list($displayClass, $displayAttributes) = self::getDisplayAttributes($params, self::$key);
89
+ list($style, $attributes) = self::getPosition($params, self::$key);
90
+ $attributes['data-offset'] = $params->get(self::$key . 'position-offset', 0);
91
+
92
+ $barStyle = N2StyleRenderer::render($params->get(self::$key . 'style-bar'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ');
93
+
94
+
95
+ $slideStyle = N2StyleRenderer::render($params->get(self::$key . 'style-slides'), 'dot', $slider->elementId, 'div#' . $slider->elementId . ' ');
96
+
97
+ $width = intval($slider->params->get(self::$key . 'width', 160));
98
+ $height = intval($slider->params->get(self::$key . 'height', 100));
99
+
100
+
101
+ $captionPlacement = $slider->params->get(self::$key . 'caption-placement', 'overlay');
102
+ if (!$showImage) {
103
+ $captionPlacement = 'before';
104
+ }
105
+
106
+ if (!$showTitle && !$showDescription) {
107
+ $captionPlacement = 'overlay';
108
+ }
109
+
110
+ $captionSize = intval($slider->params->get(self::$key . 'caption-size', 100));
111
+
112
+
113
+ $showCaption = $showTitle || $showDescription;
114
+
115
+ if ($showCaption) {
116
+ $captionStyle = N2StyleRenderer::render($params->get(self::$key . 'title-style'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ');
117
+ if ($showTitle) {
118
+ $titleFont = N2FontRenderer::render($params->get(self::$key . 'title-font'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ');
119
+ }
120
+ if ($showDescription) {
121
+ $descriptionFont = N2FontRenderer::render($params->get(self::$key . 'description-font'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ');
122
+ }
123
+ }
124
+
125
+ $group = max(1, intval($params->get(self::$key . 'group')));
126
+
127
+ $orientation = self::getOrientationByPosition($params->get(self::$key . 'position-mode'), $params->get(self::$key . 'position-area'), $params->get(self::$key . 'orientation'));
128
+ if ($orientation == 'auto') {
129
+ $orientation = 'vertical';
130
+ }
131
+
132
+ if($params->get('widget-thumbnail-center',0)){
133
+ $tablestyle = 'margin:0 auto;';
134
+ } else {
135
+ $tablestyle = '';
136
+ }
137
+
138
+ $slides = N2Html::openTag('table', array('class' => 'n2-ow','style' => $tablestyle));
139
+
140
+ $containerStyle = '';
141
+ $captionClass = 'n2-caption-' . $captionPlacement;
142
+ $captionExtraStyle = '';
143
+ switch ($captionPlacement) {
144
+ case 'before':
145
+ case 'after':
146
+ switch ($orientation) {
147
+ case 'vertical':
148
+ if (!$showImage) {
149
+ $width = 0;
150
+ }
151
+ $containerStyle = "width: " . ($width + $captionSize) . "px; height: {$height}px;";
152
+ $captionExtraStyle .= "width: {$captionSize}px";
153
+ break;
154
+ default:
155
+ if (!$showImage) {
156
+ $height = 0;
157
+ }
158
+ $containerStyle = "width: {$width}px; height: " . ($height + $captionSize) . "px;";
159
+ $captionExtraStyle .= "height: {$captionSize}px";
160
+ }
161
+ break;
162
+ default:
163
+ $containerStyle = "width: {$width}px; height: {$height}px;";
164
+ $captionSize = 0;
165
+ }
166
+
167
+ $image = '';
168
+ $rows = array();
169
+ $i = 0;
170
+
171
+ $thumbnailCSS = array(
172
+ 'background-size',
173
+ 'background-repeat',
174
+ 'background-position'
175
+ );
176
+ $thumbnailStyle = json_decode(base64_decode($params->get('widget-thumbnail-style-slides')));
177
+ if (!empty($thumbnailStyle) && !empty($thumbnailStyle->data[0]->extra)) {
178
+ $extraCSS = $thumbnailStyle->data[0]->extra;
179
+ $thumbnailCode = '';
180
+ foreach ($thumbnailCSS AS $css) {
181
+ $currentCode = self::getStringBetween($extraCSS, $css . ':', ';');
182
+ if (!empty($currentCode)) {
183
+ $thumbnailCode .= $css . ':' . $currentCode . ';';
184
+ }
185
+ }
186
+ } else {
187
+ $thumbnailCode = '';
188
+ }
189
+
190
+ foreach ($slider->slides AS $slide) {
191
+ $active = '';
192
+ if ($slider->_activeSlide == $i) {
193
+ $active = 'n2-active ';
194
+ }
195
+ if ($orientation == 'horizontal') {
196
+ $row = $i % $group;
197
+ } else {
198
+ $row = intval($i / $group);
199
+ }
200
+ if (!isset($rows[$row])) {
201
+ $rows[$row] = array();
202
+ }
203
+
204
+ if ($showImage) {
205
+ $imgstyle = "width: {$width}px; height: {$height}px;";
206
+ $image = N2Html::tag('div', array(
207
+ 'class' => 'n2-ss-thumb-image',
208
+ 'style' => "background-image: URL('" . $slider->features->optimize->optimizeThumbnail($slide->getThumbnail()) . "');" . $imgstyle . $thumbnailCode
209
+ ), $slide->getThumbnailTypeHTML());
210
+ }
211
+
212
+ $inner = '';
213
+
214
+ if ($showCaption) {
215
+ $html = '';
216
+ if ($showTitle) {
217
+ $html .= N2Html::tag('div', array(
218
+ 'class' => $titleFont
219
+ ), $slide->getTitle());
220
+ }
221
+ $description = $slide->getDescription();
222
+ if ($showDescription && !empty($description)) {
223
+ $html .= N2Html::tag('div', array(
224
+ 'class' => $descriptionFont
225
+ ), $description);
226
+ }
227
+
228
+ $inner = N2Html::tag('div', array(
229
+ 'class' => $captionStyle . 'n2-ss-caption ' . $captionClass,
230
+ 'style' => $captionExtraStyle
231
+ ), $html);
232
+ }
233
+ switch ($captionPlacement) {
234
+ case 'before':
235
+ $inner .= $image;
236
+ break;
237
+ case 'after':
238
+ default:
239
+ $inner = $image . $inner;
240
+ }
241
+
242
+ $rows[$row][] = N2Html::tag('td', array(), N2Html::tag('div', array(
243
+ 'class' => $slideStyle . $active,
244
+ 'style' => $containerStyle
245
+ ), $inner));
246
+ $i++;
247
+ }
248
+
249
+ foreach ($rows AS $row) {
250
+ $slides .= N2Html::tag('tr', array(), implode('', $row));
251
+ }
252
+ $slides .= N2Html::closeTag('table');
253
+
254
+ $parameters = array(
255
+ 'overlay' => $params->get(self::$key . 'position-mode') != 'simple' || $params->get(self::$key . 'overlay'),
256
+ 'area' => intval($params->get(self::$key . 'position-area')),
257
+ 'orientation' => $orientation,
258
+ 'group' => $group,
259
+ 'action' => $params->get(self::$key . 'action'),
260
+ 'captionSize' => intval($captionSize),
261
+ 'minimumThumbnailCount' => max(1, intval($params->get(self::$key . 'minimum-thumbnail-count'))) + 0.5
262
+ );
263
+
264
+ N2JS::addInline('new NextendSmartSliderWidgetThumbnailDefault("' . $id . '", ' . json_encode($parameters) . ');');
265
+
266
+ $size = $params->get(self::$key . 'size');
267
+ if ($orientation == 'horizontal') {
268
+ if (is_numeric($size) || substr($size, -1) == '%' || substr($size, -2) == 'px') {
269
+ $style .= 'width:' . $size . ';';
270
+ } else {
271
+ $attributes['data-sswidth'] = $size;
272
+ }
273
+ } else {
274
+ if (is_numeric($size) || substr($size, -1) == '%' || substr($size, -2) == 'px') {
275
+ $style .= 'height:' . $size . ';';
276
+ } else {
277
+ $attributes['data-ssheight'] = $size;
278
+ }
279
+ }
280
+
281
+ $previous = $next = '';
282
+ $showArrow = intval($slider->params->get(self::$key . 'arrow', 1));
283
+ if ($showArrow) {
284
+ $previous = N2Html::image('data:image/svg+xml;base64,' . base64_encode(N2Filesystem::readFile(N2ImageHelper::fixed('$ss$/plugins/widgetthumbnail/default/default/thumbnail-up-arrow.svg', true))), 'Arrow', array(
285
+ 'class' => 'nextend-thumbnail-button nextend-thumbnail-previous n2-ow'
286
+ ));
287
+ $next = N2Html::image('data:image/svg+xml;base64,' . base64_encode(N2Filesystem::readFile(N2ImageHelper::fixed('$ss$/plugins/widgetthumbnail/default/default/thumbnail-down-arrow.svg', true))), 'Arrow', array(
288
+ 'class' => 'nextend-thumbnail-button nextend-thumbnail-next n2-ow n2-active'
289
+ ));
290
+ }
291
+
292
+ if ($params->get(self::$key . 'position-mode') == 'simple' && $orientation == 'vertical') {
293
+ $area = $params->get(self::$key . 'position-area');
294
+ switch ($area) {
295
+ case '5':
296
+ case '6':
297
+ case '7':
298
+ case '8':
299
+ $attributes['data-sstop'] = '0';
300
+ break;
301
+ }
302
+ }
303
+
304
+ return N2Html::tag('div', $displayAttributes + $attributes + array(
305
+ 'class' => $displayClass . 'nextend-thumbnail nextend-thumbnail-default nextend-thumbnail-' . $orientation,
306
+ 'style' => $style
307
+ ), $previous . $next . N2Html::tag('div', array(
308
+ 'class' => 'nextend-thumbnail-inner'
309
+ ), N2Html::tag('div', array(
310
+ 'class' => $barStyle . 'nextend-thumbnail-scroller',
311
+ ), $slides)));
312
+ }
313
+
314
+ public static function prepareExport($export, $params) {
315
+
316
+ $export->addVisual($params->get(self::$key . 'style-bar'));
317
+ $export->addVisual($params->get(self::$key . 'style-slides'));
318
+ $export->addVisual($params->get(self::$key . 'title-style'));
319
+
320
+ $export->addVisual($params->get(self::$key . 'title-font'));
321
+ $export->addVisual($params->get(self::$key . 'description-font'));
322
+ }
323
+
324
+ public static function prepareImport($import, $params) {
325
+
326
+ $params->set(self::$key . 'style-bar', $import->fixSection($params->get(self::$key . 'style-bar', '')));
327
+ $params->set(self::$key . 'style-slides', $import->fixSection($params->get(self::$key . 'style-slides', '')));
328
+ $params->set(self::$key . 'title-style', $import->fixSection($params->get(self::$key . 'title-style', '')));
329
+
330
+ $params->set(self::$key . 'title-font', $import->fixSection($params->get(self::$key . 'title-font', '')));
331
+ $params->set(self::$key . 'description-font', $import->fixSection($params->get(self::$key . 'description-font', '')));
332
+ }
333
+ }
334
+
335
+ N2Plugin::addPlugin('sswidgetthumbnail', 'N2SSPluginWidgetThumbnailDefault');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetthumbnail/default/default/config.xml ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="thumbnail" label="Thumbnail settings" hidetitle="1">
3
+ <param name="widget-thumbnail-minimum-thumbnail-count" type="number" label="Minimum thumbnail count" style="width:30px;">
4
+ <unit>Slides</unit>
5
+ </param>
6
+ <param name="widget-thumbnail-position" type="widgetposition" label="Position"/>
7
+ <param type="group" label="Style">
8
+ <param name="widget-thumbnail-style-bar" type="style" previewmode="simple" style2="sliderwidget-thumbnail-style-slides" label="Bar" set="1900">
9
+ <![CDATA[ <div class="{styleClassName}" style="overflow: hidden; width:{$('#sliderwidget-thumbnail-width').val()*2.5}px;"><div style="width:200%"><div class="{styleClassName2}" style="display: inline-block; vertical-align:top; width:{$('#sliderwidget-thumbnail-width').val()}px; height: {$('#sliderwidget-thumbnail-height').val()}px; background: url('$system$/images/placeholder/imageback.png');"></div><div class="{styleClassName2} n2-active" style="display: inline-block; vertical-align:top; width:{$('#sliderwidget-thumbnail-width').val()}px; height: {$('#sliderwidget-thumbnail-height').val()}px; background: url('$system$/images/placeholder/image.png');"></div><div class="{styleClassName2}" style="display: inline-block; vertical-align:top; width:{$('#sliderwidget-thumbnail-width').val()}px; height: {$('#sliderwidget-thumbnail-height').val()}px; background: url('$system$/images/placeholder/imagefront.png');"></div></div></div> ]]>
10
+ </param>
11
+ <param name="widget-thumbnail-style-slides" type="style" previewmode="dot" style2="sliderwidget-thumbnail-style-bar" label="Thumbnail" class="n2-expert" set="1900">
12
+ <![CDATA[ <div class="{styleClassName2}" style="overflow: hidden;width: 480px;"><div style="width:200%"><div class="{styleClassName}" style="display: inline-block; vertical-align:top; width:{$('#sliderwidget-thumbnail-width').val()}px; height: {$('#sliderwidget-thumbnail-height').val()}px; background: url('$system$/images/placeholder/imageback.png');"></div><div class="{styleClassName} n2-active" style="display: inline-block; vertical-align:top; width:{$('#sliderwidget-thumbnail-width').val()}px; height: {$('#sliderwidget-thumbnail-height').val()}px; background: url('$system$/images/placeholder/image.png');"></div><div class="{styleClassName}" style="display: inline-block; vertical-align:top; width:{$('#sliderwidget-thumbnail-width').val()}px; height: {$('#sliderwidget-thumbnail-height').val()}px; background: url('$system$/images/placeholder/imagefront.png');"></div></div></div> ]]>
13
+ </param>
14
+ </param>
15
+ <param type="onoff" label="Show arrow" name="widget-thumbnail-arrow"/>
16
+ <param type="group" label="Caption">
17
+ <param name="widget-thumbnail-title-style" type="style" previewmode="simple" font="sliderwidget-thumbnail-title-font" label="Style" post="break" set="1900">
18
+ <![CDATA[ <span class="{styleClassName} {fontClassName}">Slide title</span> ]]>
19
+ </param>
20
+ <param type="group">
21
+ <param type="onoff" label="Title" name="widget-thumbnail-title"/>
22
+ <param name="widget-thumbnail-title-font" type="font" previewmode="simple" style="sliderwidget-thumbnail-title-style" label="Font" set="1000">
23
+ <![CDATA[ <span class="{styleClassName} {fontClassName}">Slide title</span> ]]>
24
+ </param>
25
+ </param>
26
+ <param type="group" post="break">
27
+ <param type="onoff" label="Description" name="widget-thumbnail-description"/>
28
+ <param name="widget-thumbnail-description-font" type="font" previewmode="simple" style="sliderwidget-thumbnail-title-style" label="Font" set="1000">
29
+ <![CDATA[ <span class="{styleClassName} {fontClassName}">Slide description with long long text...</span> ]]>
30
+ </param>
31
+ </param>
32
+ <param type="group">
33
+ <param type="radio" name="widget-thumbnail-caption-placement" label="Placement">
34
+ <option value="before">Before</option>
35
+ <option value="overlay">Overlay</option>
36
+ <option value="after">After</option>
37
+ </param>
38
+ <param type="text" name="widget-thumbnail-caption-size" label="Height (horizontal) or Width (vertical)" style="width:40px;">
39
+ <unit>px</unit>
40
+ </param>
41
+ </param>
42
+ </param>
43
+ </params>
44
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetthumbnail/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ foreach (N2Filesystem::folders($dir) AS $folder) {
6
+ $file = $dir . $folder . DIRECTORY_SEPARATOR . $folder . '.php';
7
+ if (N2Filesystem::fileexists($file)) {
8
+ require_once($file);
9
+ }
10
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/smartslider3.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SS3 {
4
+
5
+ public static $version = '3.0.37';
6
+
7
+ public static $product = 'smartslider3';
8
+
9
+ public static $campaign = 'smartslider3';
10
+
11
+ public static $source = '';
12
+
13
+ public static function getProUrlHome($params = array()) {
14
+ if (!empty(self::$source)) {
15
+ $params['source'] = self::$source;
16
+ }
17
+ return 'http://smartslider3.com/?' . http_build_query($params);
18
+ }
19
+
20
+ public static function getProUrlPricing($params = array()) {
21
+ if (!empty(self::$source)) {
22
+ $params['source'] = self::$source;
23
+ }
24
+ return 'http://smartslider3.com/pricing/?' . http_build_query($params);
25
+ }
26
+
27
+ public static function getWhyProUrl($params = array()) {
28
+ if (!empty(self::$source)) {
29
+ $params['source'] = self::$source;
30
+ }
31
+ return 'http://smartslider3.com/why-upgrade-to-pro/?' . http_build_query($params);
32
+ }
33
+
34
+ public static function getUpdateInfo() {
35
+ return array(
36
+ 'name' => 'smartslider3',
37
+ 'plugin' => 'nextend-smart-slider3-pro/nextend-smart-slider3-pro.php'
38
+ );
39
+ }
40
+
41
+ public static function api($_posts, $returnUrl = false) {
42
+
43
+ $posts = array(
44
+ 'product' => self::$product,
45
+ 'pro' => N2SSPRO
46
+ );
47
+ return N2::api($_posts + $posts, $returnUrl);
48
+ }
49
+
50
+ public static function hasApiError($status, $data = array()) {
51
+ extract($data);
52
+ switch ($status) {
53
+ case 'OK':
54
+ return false;
55
+ case 'PRODUCT_ASSET_NOT_AVAILABLE':
56
+ N2Message::error(sprintf(n2_('Demo slider is not available with the following ID: %s'), $key));
57
+ case 'ASSET_PREMIUM':
58
+ N2Message::error('Premium sliders are available in PRO version only!');
59
+ break;
60
+ case 'LICENSE_EXPIRED':
61
+ N2Message::error('Your license key expired!');
62
+ break;
63
+ case 'DOMAIN_REGISTER_FAILED':
64
+ N2Message::error('Your license key authorized on a different domain!');
65
+ break;
66
+ case 'LICENSE_INVALID':
67
+ N2Message::error('Your license key invalid, please enter again!');
68
+ N2SmartsliderLicenseModel::getInstance()
69
+ ->setKey('');
70
+ return array(
71
+ "sliders/index"
72
+ );
73
+ break;
74
+ case 'UPDATE_ERROR':
75
+ N2Message::error('Update error, please update manually!');
76
+ break;
77
+ case 'PLATFORM_NOT_ALLOWED':
78
+ N2Message::error(sprintf('Your license key is not valid for Smart Slider3 - %s!', N2Platform::getPlatformName()));
79
+ break;
80
+ case 'ERROR_HANDLED':
81
+ break;
82
+ case null:
83
+ N2Message::error('Licensing server not reachable, try again later!');
84
+ break;
85
+ default:
86
+ N2Message::error('Debug: ' . $status);
87
+ N2Message::error('Licensing server not reachable, try again later!');
88
+ break;
89
+ }
90
+ return true;
91
+ }
92
+
93
+ public static function showBeacon($search = '') {
94
+ if (intval(N2SmartSliderSettings::get('beacon', 1))) {
95
+ echo '<script>!function(e,o,n){window.HSCW=o,window.HS=n,n.beacon=n.beacon||{};var t=n.beacon;t.userConfig={},t.readyQueue=[],t.config=function(e){this.userConfig=e},t.ready=function(e){this.readyQueue.push(e)},o.config={docs:{enabled:!0,baseUrl:"//smart-slider-3.helpscoutdocs.com/"},contact:{enabled:!0,formId:"5bf2183c-77e2-11e5-8846-0e599dc12a51"}};var r=e.getElementsByTagName("script")[0],c=e.createElement("script");c.type="text/javascript",c.async=!0,c.src="https://djtflbt20bdde.cloudfront.net/",r.parentNode.insertBefore(c,r)}(document,window.HSCW||{},window.HS||{});HS.beacon.ready(function () {HS.beacon.search("' . $search . '");});</script>';
96
+ }
97
+ }
98
+ }
99
+ if (defined('SMARTSLIDER3AFFILIATE')) {
100
+ N2SS3::$source = SMARTSLIDER3AFFILIATE;
101
+ }
102
+
app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/N2SmartsliderApplicationTypeWidget.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderApplicationTypeWidget extends N2ApplicationType
4
+ {
5
+
6
+ public $type = "widget";
7
+
8
+ public function __construct($app, $appTypePath) {
9
+ parent::__construct($app, $appTypePath);
10
+
11
+ N2AssetsManager::addCachedGroup('core');
12
+ N2AssetsManager::addCachedGroup('smartslider');
13
+ }
14
+
15
+ protected function autoload() {
16
+ N2Loader::import(array(
17
+ 'libraries.cache.NextendModuleCache',
18
+ 'libraries.embedwidget.embedwidget',
19
+ ));
20
+
21
+ N2Loader::import(array(
22
+ 'libraries.settings.settings'
23
+ ), 'smartslider');
24
+ }
25
+ }
26
+
app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/controllers/Home.php ADDED
@@ -0,0 +1,38 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderWidgetHomeController extends N2Controller
4
+ {
5
+
6
+ public function initialize() {
7
+ parent::initialize();
8
+
9
+ N2Loader::import(array(
10
+ 'models.Sliders',
11
+ 'models.Slides'
12
+ ), 'smartslider');
13
+
14
+ }
15
+
16
+ public function actionIndex() {
17
+
18
+ }
19
+
20
+ public function actionJoomla($sliderid, $usage) {
21
+ }
22
+
23
+ public function actionWordpress($sliderid, $usage) {
24
+ }
25
+
26
+ public function actionMagento($sliderid, $usage) {
27
+ $this->addView("magento", array(
28
+ "sliderid" => $sliderid,
29
+ "usage" => $usage
30
+ ), "content");
31
+ $this->render();
32
+
33
+ }
34
+
35
+ public function actionNative($sliderid, $usage) {
36
+ }
37
+
38
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/layouts/default.phtml ADDED
@@ -0,0 +1,4 @@
 
 
 
 
1
+ <?php
2
+ /* @var $this N2Layout */
3
+
4
+ $this->renderFragmentBlock('nextend_content');
app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/views/home/magento.phtml ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+ $sliderManager = new N2SmartSliderManager($sliderid);
3
+ $sliderManager->setUsage($usage);
4
+ echo $sliderManager->render(true);
5
+
app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/views/home/native.phtml ADDED
@@ -0,0 +1 @@
 
1
+ <?php
app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/views/home/wordpress.phtml ADDED
@@ -0,0 +1 @@
 
1
+ <?php
app/code/community/Nextend2/SmartSlider3/sql/smartslider3_setup/mysql4-install-1.0.0.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ function nextend_smartslider3_install($installer){
3
+ $installer->startSetup();
4
+
5
+ defined('NEXTEND_INSTALL') || define('NEXTEND_INSTALL', true);
6
+
7
+ require_once(dirname(__FILE__) . '/../../../magento/library.php');
8
+ require_once(dirname(__FILE__) . '/../../library/magento/init.php');
9
+ N2Base::getApplication("smartslider")->getApplicationType('backend')->render(array(
10
+ "controller" => "install",
11
+ "action" => "index",
12
+ "useRequest" => false
13
+ ), array(true));
14
+
15
+ $installer->endSetup();
16
+ }
17
+
18
+ nextend_smartslider3_install($this);
app/code/community/Nextend2/library/applications/system/N2SystemApplication.php ADDED
@@ -0,0 +1,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemApplication extends N2Application
4
+ {
5
+
6
+ public $name = "system";
7
+
8
+ protected function autoload() {
9
+ N2Loader::import(array(
10
+ 'libraries.embedwidget.embedwidget',
11
+ 'libraries.form.form'
12
+ ));
13
+ }
14
+
15
+ }
app/code/community/Nextend2/library/applications/system/N2SystemApplicationInfo.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemApplicationInfo extends N2ApplicationInfo {
4
+
5
+ public function __construct() {
6
+ $this->path = dirname(__FILE__);
7
+ $this->assetPath = realpath(N2LIBRARYASSETS);
8
+ parent::__construct();
9
+ }
10
+
11
+ public function isPublic() {
12
+ return false;
13
+ }
14
+
15
+ public function getName() {
16
+ return 'system';
17
+ }
18
+
19
+ public function getLabel() {
20
+ return 'Nextend system application';
21
+ }
22
+
23
+ public function getInstance() {
24
+ require_once $this->path . NDS . "N2SystemApplication.php";
25
+ return new N2SystemApplication($this);
26
+ }
27
+
28
+ public function getPathKey() {
29
+ return '$system$';
30
+ }
31
+
32
+ public function assetsBackend() {
33
+
34
+ $path = $this->getAssetsPath();
35
+ N2JS::addStaticGroup($path . "/dist/system-backend.min.js", "system-backend");
36
+
37
+ }
38
+
39
+ public function assetsFrontend() {
40
+
41
+ }
42
+ }
43
+
44
+
45
+ return new N2SystemApplicationInfo();
app/code/community/Nextend2/library/applications/system/backend/N2SystemApplicationTypeBackend.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemApplicationTypeBackend extends N2ApplicationType
4
+ {
5
+
6
+ public $type = "backend";
7
+
8
+ protected function autoload() {
9
+
10
+ N2Loader::import('helpers.controllers.VisualManager', 'system.backend');
11
+ N2Loader::import('helpers.controllers.VisualManagerAjax', 'system.backend');
12
+ }
13
+
14
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/Animation.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendAnimationController extends N2SystemBackendVisualManagerController
4
+ {
5
+
6
+ protected $type = 'animation';
7
+
8
+ public function __construct($appType, $defaultParams) {
9
+ $this->logoText = n2_('Animation');
10
+
11
+ N2Localization::addJS(array(
12
+ 'animation',
13
+ 'animations',
14
+ ));
15
+
16
+ parent::__construct($appType, $defaultParams);
17
+ }
18
+
19
+ public function getModel() {
20
+ return new N2SystemAnimationModel();
21
+ }
22
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/Browse.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendBrowseController extends N2BackendController
4
+ {
5
+
6
+ public function __construct($appType, $defaultParams) {
7
+
8
+ N2Localization::addJS(array(
9
+ 'Drop files anywhere to upload or',
10
+ 'Select files'
11
+ ));
12
+
13
+ parent::__construct($appType, $defaultParams);
14
+ }
15
+
16
+ public function actionIndex() {
17
+ N2JS::addFirstCode("new NextendBrowse('" . $this->appType->router->createUrl('browse/index') . "', " . (defined('N2_IMAGE_UPLOAD_DISABLE') ? 0 : 1) . ");");
18
+ }
19
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/Dashboard.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendDashboardController extends N2BackendController
4
+ {
5
+ public $layoutName = 'full';
6
+
7
+ public function actionIndex() {
8
+
9
+
10
+ $this->addView("index");
11
+ $this->render();
12
+ }
13
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/Font.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendFontController extends N2SystemBackendVisualManagerController
4
+ {
5
+
6
+ protected $type = 'font';
7
+
8
+ public function __construct($appType, $defaultParams) {
9
+ $this->logoText = n2_('Font manager');
10
+
11
+ N2Localization::addJS(array(
12
+ 'font',
13
+ 'fonts',
14
+ ));
15
+
16
+ parent::__construct($appType, $defaultParams);
17
+ }
18
+
19
+ public function getModel() {
20
+ return new N2SystemFontModel();
21
+ }
22
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/Help.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendHelpController extends N2BackendController
4
+ {
5
+ public $layoutName = 'full';
6
+
7
+ public function actionIndex() {
8
+ $this->addView("index");
9
+ $this->render();
10
+ }
11
+
12
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/Image.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendImageController extends N2SystemBackendVisualManagerController
4
+ {
5
+
6
+ public $layoutName = "fulllightbox";
7
+
8
+ protected $type = 'image';
9
+
10
+ public function __construct($appType, $defaultParams) {
11
+ $this->logoText = n2_('Image manager');
12
+
13
+ N2Localization::addJS(array(
14
+ 'Generate',
15
+ 'Desktop image is empty!',
16
+ 'image',
17
+ 'images'
18
+ ));
19
+
20
+ parent::__construct($appType, $defaultParams);
21
+ }
22
+
23
+ public function getModel() {
24
+ return new N2SystemImageModel();
25
+ }
26
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/Install.php ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class N2SystemBackendInstallController extends N2BackendController
5
+ {
6
+
7
+ public function initialize() {
8
+
9
+ }
10
+
11
+ public function actionIndex($secured = false) {
12
+ if ($secured) {
13
+ N2Loader::import('models.Install', 'system');
14
+
15
+ $installModel = new N2SystemInstallModel();
16
+
17
+ $installModel->install();
18
+ }
19
+ }
20
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/Login.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('controller.Login', 'platform');
app/code/community/Nextend2/library/applications/system/backend/controllers/Settings.php ADDED
@@ -0,0 +1,87 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendSettingsController extends N2BackendController
4
+ {
5
+
6
+ protected function initLayout() {
7
+ if (N2Request::getVar('layout') == 'modal') {
8
+ $this->layoutName = 'modal';
9
+ }
10
+ parent::initLayout();
11
+ }
12
+
13
+ public function actionIndex() {
14
+ if ($this->canDo('nextend_config')) {
15
+
16
+ $data = N2Post::getVar('global');
17
+ if (is_array($data)) {
18
+ if ($this->validateToken()) {
19
+ N2Settings::setAll($data);
20
+ } else {
21
+ $this->refresh();
22
+ }
23
+ }
24
+
25
+
26
+ $this->addView("../../inline/sidebar/settings", array(
27
+ "appObj" => $this
28
+ ), "sidebar");
29
+
30
+ $this->addView("index");
31
+ $this->render();
32
+ } else {
33
+ $this->noAccess();
34
+ }
35
+ }
36
+
37
+ public function actionAviary() {
38
+ if ($this->canDo('nextend_config')) {
39
+ N2Loader::import('libraries.image.aviary');
40
+ $aviary = N2Request::getVar('aviary', false);
41
+ if ($aviary) {
42
+ if ($this->validateToken()) {
43
+ N2ImageAviary::storeSettings($aviary);
44
+ N2Message::success(n2_('Saved.'));
45
+ N2Request::redirect($this->appType->router->createUrl(array(
46
+ "settings/aviary",
47
+ array(
48
+ 'layout' => N2Request::getCmd('layout', '')
49
+ )
50
+ )));
51
+ } else {
52
+ $this->refresh();
53
+ }
54
+ }
55
+
56
+ $this->addView("../../inline/sidebar/settings", array(
57
+ "appObj" => $this
58
+ ), "sidebar");
59
+
60
+ $this->addView("aviary");
61
+ $this->render();
62
+ }
63
+ }
64
+
65
+ public function actionFonts() {
66
+ if ($this->canDo('nextend_config')) {
67
+ $fonts = N2Request::getVar('fonts', false);
68
+ if ($fonts) {
69
+ if ($this->validateToken()) {
70
+ N2Fonts::storeSettings($fonts);
71
+ N2Message::success(n2_('Saved.'));
72
+ N2Request::redirect($this->appType->router->createUrl(array("settings/fonts")));
73
+ } else {
74
+ $this->refresh();
75
+ }
76
+ }
77
+
78
+ $this->addView("../../inline/sidebar/settings", array(
79
+ "appObj" => $this
80
+ ), "sidebar");
81
+
82
+ $this->addView("fonts");
83
+ $this->render();
84
+ }
85
+ }
86
+
87
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/Style.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendStyleController extends N2SystemBackendVisualManagerController
4
+ {
5
+
6
+ protected $type = 'style';
7
+
8
+ public function __construct($appType, $defaultParams) {
9
+ $this->logoText = n2_('Style manager');
10
+
11
+ N2Localization::addJS(array(
12
+ 'style',
13
+ 'styles',
14
+ ));
15
+
16
+ parent::__construct($appType, $defaultParams);
17
+ }
18
+
19
+ public function getModel() {
20
+ return new N2SystemStyleModel();
21
+ }
22
+
23
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Animation.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendAnimationControllerAjax extends N2SystemBackendVisualManagerControllerAjax
4
+ {
5
+ protected $type = 'animation';
6
+
7
+ public function getModel() {
8
+ return new N2SystemAnimationModel();
9
+ }
10
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Aviary.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendAviaryControllerAjax extends N2BackendControllerAjax
4
+ {
5
+
6
+ public function actionGetHighResolutionAuth() {
7
+ N2Loader::import('libraries.image.aviary');
8
+
9
+ $this->response->respond(array(
10
+ 'highResolutionAuth' => N2ImageAviary::getHighResolutionAuth()
11
+ ));
12
+ }
13
+
14
+ public function actionSaveImage() {
15
+ $this->validateToken();
16
+ N2Loader::import('libraries.image.aviary');
17
+
18
+ $image = N2Request::getVar('aviaryUrl');
19
+ $this->validateVariable(!empty($image), 'image');
20
+
21
+ require_once dirname(__FILE__) . '/Browse.php';
22
+
23
+
24
+ $root = N2Filesystem::getImagesFolder();
25
+ $folder = 'aviary';
26
+ $path = N2Filesystem::realpath($root . '/' . $folder);
27
+
28
+ if ($path === false || $path == '') {
29
+ N2Filesystem::createFolder($root . '/' . $folder);
30
+ $path = N2Filesystem::realpath($root . '/' . $folder);
31
+ }
32
+
33
+ $tmp = tempnam(sys_get_temp_dir(), 'image-');
34
+ file_put_contents($tmp, file_get_contents($image));
35
+
36
+ $src = null;
37
+
38
+ // Set variables for storage
39
+ // fix file filename for query strings
40
+ preg_match('/([^\?]+)\.(jpe?g|gif|png)\b/i', $image, $matches);
41
+ $file_array['name'] = basename($matches[1]);
42
+ $file_array['tmp_name'] = $tmp;
43
+ $file_array['size'] = filesize($tmp);
44
+ $file_array['error'] = 0;
45
+
46
+ try {
47
+ $fileName = preg_replace('/[^a-zA-Z0-9_-]/', '', $file_array['name']);
48
+
49
+ $upload = new N2BulletProof();
50
+ $file = $upload->uploadDir($path)
51
+ ->upload($file_array, $fileName);
52
+ $src = N2ImageHelper::dynamic(N2Filesystem::pathToAbsoluteURL($file));
53
+
54
+ } catch (Exception $e) {
55
+ N2Message::error($e->getMessage());
56
+ $this->response->error();
57
+ }
58
+
59
+
60
+ if ($src) {
61
+ $this->response->respond(array(
62
+ 'image' => $src
63
+ ));
64
+ } else {
65
+ N2Message::error(sprintf(n2_('Unexpected error: %s'), $image));
66
+ $this->response->error();
67
+ }
68
+ }
69
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Browse.php ADDED
@@ -0,0 +1,448 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendBrowseControllerAjax extends N2BackendControllerAjax {
4
+
5
+ public function actionIndex() {
6
+ $this->validateToken();
7
+ $root = N2Filesystem::fixPathSeparator(N2Filesystem::getImagesFolder());
8
+ $path = N2Filesystem::realpath($root . '/' . ltrim(rtrim(N2Request::getVar('path', ''), '/'), '/'));
9
+ if (strpos($path, $root) !== 0) {
10
+ $path = $root;
11
+ }
12
+ $_directories = glob($path . NDS . '*', GLOB_ONLYDIR);
13
+ (object)$directories = array();
14
+ for ($i = 0; $i < count($_directories); $i++) {
15
+ $directories[basename($_directories[$i])] = N2Filesystem::toLinux($this->relative($_directories[$i], $root));
16
+ }
17
+
18
+ $extensions = array(
19
+ 'jpg',
20
+ 'jpeg',
21
+ 'png',
22
+ 'gif'
23
+ );
24
+ $_files = scandir($path);
25
+ $files = array();
26
+ for ($i = 0; $i < count($_files); $i++) {
27
+ $_files[$i] = $path . NDS . $_files[$i];
28
+ $ext = strtolower(pathinfo($_files[$i], PATHINFO_EXTENSION));
29
+ if (self::check_utf8($_files[$i]) && in_array($ext, $extensions)) {
30
+ $files[basename($_files[$i])] = N2ImageHelper::dynamic(N2Filesystem::pathToAbsoluteURL($_files[$i]));
31
+ }
32
+ }
33
+ $relativePath = N2Filesystem::toLinux($this->relative($path, $root));
34
+ if (!$relativePath) {
35
+ $relativePath = '';
36
+ }
37
+ $this->response->respond(array(
38
+ 'path' => $relativePath,
39
+ 'directories' => $directories,
40
+ 'files' => (object)$files
41
+ ));
42
+ }
43
+
44
+ private static function check_utf8($str) {
45
+ $len = strlen($str);
46
+ for ($i = 0; $i < $len; $i++) {
47
+ $c = ord($str[$i]);
48
+ if ($c > 128) {
49
+ if (($c > 247)) return false; elseif ($c > 239) $bytes = 4;
50
+ elseif ($c > 223) $bytes = 3;
51
+ elseif ($c > 191) $bytes = 2;
52
+ else return false;
53
+ if (($i + $bytes) > $len) return false;
54
+ while ($bytes > 1) {
55
+ $i++;
56
+ $b = ord($str[$i]);
57
+ if ($b < 128 || $b > 191) return false;
58
+ $bytes--;
59
+ }
60
+ }
61
+ }
62
+ return true;
63
+ }
64
+
65
+ public function actionUpload() {
66
+ if (defined('N2_IMAGE_UPLOAD_DISABLE')) {
67
+ N2Message::error(n2_('You are not allowed to upload!'));
68
+ $this->response->error();
69
+ }
70
+
71
+ $this->validateToken();
72
+
73
+ $root = N2Filesystem::getImagesFolder();
74
+ $folder = ltrim(rtrim(N2Request::getVar('path', ''), '/'), '/');
75
+ $path = N2Filesystem::realpath($root . '/' . $folder);
76
+
77
+ if ($path === false || $path == '') {
78
+ $folder = preg_replace("/[^A-Za-z0-9]/", '', $folder);
79
+ if (empty($folder)) {
80
+ N2Message::error(n2_('Folder is missing!'));
81
+ $this->response->error();
82
+ } else {
83
+ N2Filesystem::createFolder($root . '/' . $folder);
84
+ $path = N2Filesystem::realpath($root . '/' . $folder);
85
+ }
86
+ }
87
+
88
+ $relativePath = N2Filesystem::toLinux($this->relative($path, $root));
89
+ if (!$relativePath) {
90
+ $relativePath = '';
91
+ }
92
+ $response = array(
93
+ 'path' => $relativePath
94
+ );
95
+ try {
96
+ if (isset($_FILES) && isset($_FILES['image']) && isset($_FILES['image']['name'])) {
97
+ $info = pathinfo($_FILES['image']['name']);
98
+ $fileName = preg_replace('/[^a-zA-Z0-9_-]/', '', $info['filename']);
99
+ if (strlen($fileName) == 0) {
100
+ $fileName = '';
101
+ }
102
+
103
+ $upload = new N2BulletProof();
104
+ $file = $upload->uploadDir($path)
105
+ ->upload($_FILES['image'], $fileName);
106
+ $response['name'] = basename($file);
107
+ $response['url'] = N2ImageHelper::dynamic(N2Filesystem::pathToAbsoluteURL($file));
108
+
109
+ N2ImageHelper::onImageUploaded($file);
110
+ }
111
+ } catch (Exception $e) {
112
+ N2Message::error($e->getMessage());
113
+ $this->response->error();
114
+ }
115
+
116
+
117
+ $this->response->respond($response);
118
+ }
119
+
120
+ private function relative($path, $root) {
121
+ return substr(N2Filesystem::fixPathSeparator($path), strlen($root));
122
+ }
123
+ }
124
+
125
+ /**
126
+ * BULLETPROOF,
127
+ *
128
+ * This is a one-file solution for a quick and safe way of
129
+ * uploading, watermarking, cropping and resizing images
130
+ * during and after uploads with PHP with best security.
131
+ *
132
+ * This class is heavily commented, to be as much friendly as possible.
133
+ * Please help out by posting out some bugs/flaws if you encounter any. Thanks!
134
+ *
135
+ * @category Image uploader
136
+ * @package BulletProof
137
+ * @version 1.4.0
138
+ * @author samayo
139
+ * @link https://github.com/samayo/BulletProof
140
+ * @license Luke 3:11 ( Free )
141
+ */
142
+ class N2ImageUploaderException extends Exception {
143
+
144
+ }
145
+
146
+ class N2BulletProof {
147
+
148
+ /*
149
+ |--------------------------------------------------------------------------
150
+ | Image Upload Properties
151
+ \--------------------------------------------------------------------------*/
152
+
153
+ /**
154
+ * Set a group of default image types to upload.
155
+ *
156
+ * @var array
157
+ */
158
+ protected $imageType = array(
159
+ "jpg",
160
+ "jpeg",
161
+ "png",
162
+ "gif"
163
+ );
164
+
165
+ /**
166
+ * Set a default file size to upload. Values are in bytes. Remember: 1kb ~ 1000 bytes.
167
+ *
168
+ * @var array
169
+ */
170
+ protected $imageSize = array(
171
+ "min" => 1,
172
+ "max" => 20000000
173
+ );
174
+
175
+ /**
176
+ * Set a default min & maximum height & width for image to upload.
177
+ *
178
+ * @var array
179
+ */
180
+ protected $imageDimension = array(
181
+ "height" => 10000,
182
+ "width" => 10000
183
+ );
184
+
185
+ /**
186
+ * Set a default folder to upload images, if it does not exist, it will be created.
187
+ *
188
+ * @var string
189
+ */
190
+ protected $uploadDir = "uploads";
191
+
192
+ /**
193
+ * To get the real image/mime type. i.e gif, jpeg, png, ....
194
+ *
195
+ * @var string
196
+ */
197
+ protected $getMimeType;
198
+
199
+ /*
200
+ |--------------------------------------------------------------------------
201
+ | Image Upload Methods
202
+ \--------------------------------------------------------------------------*/
203
+
204
+ /**
205
+ * Stores image types to upload
206
+ *
207
+ * @param array $fileTypes - ex: ['jpg', 'doc', 'txt'].
208
+ *
209
+ * @return $this
210
+ */
211
+ public function fileTypes(array $fileTypes) {
212
+ $this->imageType = $fileTypes;
213
+ return $this;
214
+ }
215
+
216
+ /**
217
+ * Minimum and Maximum allowed image size for upload (in bytes),
218
+ *
219
+ * @param array $fileSize - ex: ['min'=>500, 'max'=>1000]
220
+ *
221
+ * @return $this
222
+ */
223
+ public function limitSize(array $fileSize) {
224
+ $this->imageSize = $fileSize;
225
+ return $this;
226
+ }
227
+
228
+ /**
229
+ * Default & maximum allowed height and width image to download.
230
+ *
231
+ * @param array $dimensions
232
+ *
233
+ * @return $this
234
+ */
235
+ public function limitDimension(array $dimensions) {
236
+ $this->imageDimension = $dimensions;
237
+ return $this;
238
+ }
239
+
240
+ /**
241
+ * Get the real image's Extension/mime type
242
+ *
243
+ * @param $imageName
244
+ *
245
+ * @return mixed
246
+ * @throws N2ImageUploaderException
247
+ */
248
+ protected function getMimeType($imageName) {
249
+ if (!file_exists($imageName)) {
250
+ throw new N2ImageUploaderException("Image " . $imageName . " does not exist");
251
+ }
252
+
253
+ $listOfMimeTypes = array(
254
+ 1 => "gif",
255
+ "jpeg",
256
+ "png",
257
+ "swf",
258
+ "psd",
259
+ "bmp",
260
+ "tiff",
261
+ "tiff",
262
+ "jpc",
263
+ "jp2",
264
+ "jpx",
265
+ "jb2",
266
+ "swc",
267
+ "iff",
268
+ "wbmp",
269
+ "xmb",
270
+ "ico"
271
+ );
272
+
273
+ if (isset($listOfMimeTypes[exif_imagetype($imageName)])) {
274
+ return $listOfMimeTypes[exif_imagetype($imageName)];
275
+ }
276
+ }
277
+
278
+ /**
279
+ * Handy method for getting image dimensions (W & H) in pixels.
280
+ *
281
+ * @param $getImage - The image name
282
+ *
283
+ * @return array
284
+ */
285
+ protected function getPixels($getImage) {
286
+ list($width, $height) = getImageSize($getImage);
287
+ return array(
288
+ "width" => $width,
289
+ "height" => $height
290
+ );
291
+ }
292
+
293
+ /**
294
+ * Rename file either from method or by generating a random one.
295
+ *
296
+ * @param $isNameProvided - A new name for the file.
297
+ *
298
+ * @return string
299
+ */
300
+ protected function imageRename($isNameProvided) {
301
+ if ($isNameProvided) {
302
+ return $isNameProvided . "." . $this->getMimeType;
303
+ }
304
+ return uniqid(true) . "_" . str_shuffle(implode(range("E", "Q"))) . "." . $this->getMimeType;
305
+ }
306
+
307
+ /**
308
+ * Get the specified upload dir, if it does not exist, create a new one.
309
+ *
310
+ * @param $directoryName - directory name where you want your files to be uploaded
311
+ * @param $filePermissions - octal representation of file permissions in linux environment
312
+ *
313
+ * @return $this
314
+ * @throws N2ImageUploaderException
315
+ */
316
+ public function uploadDir($directoryName) {
317
+ if (!file_exists($directoryName) && !is_dir($directoryName)) {
318
+ $createFolder = mkdir("" . $directoryName, N2Filesystem::$dirPermission, true);
319
+ if (!$createFolder) {
320
+ throw new N2ImageUploaderException("Folder " . $directoryName . " could not be created");
321
+ }
322
+ }
323
+ $this->uploadDir = $directoryName;
324
+ return $this;
325
+ }
326
+
327
+ /**
328
+ * For getting common error messages from FILES[] array during upload.
329
+ *
330
+ * @return array
331
+ */
332
+ protected function commonUploadErrors($key) {
333
+ $uploadErrors = array(
334
+ UPLOAD_ERR_OK => "...",
335
+ UPLOAD_ERR_INI_SIZE => "File is larger than the specified amount set by the server",
336
+ UPLOAD_ERR_FORM_SIZE => "File is larger than the specified amount specified by browser",
337
+ UPLOAD_ERR_PARTIAL => "File could not be fully uploaded. Please try again later",
338
+ UPLOAD_ERR_NO_FILE => "File is not found",
339
+ UPLOAD_ERR_NO_TMP_DIR => "Can't write to disk, due to server configuration ( No tmp dir found )",
340
+ UPLOAD_ERR_CANT_WRITE => "Failed to write file to disk. Please check you file permissions",
341
+ UPLOAD_ERR_EXTENSION => "A PHP extension has halted this file upload process"
342
+ );
343
+
344
+ return $uploadErrors[$key];
345
+ }
346
+
347
+ /**
348
+ * Simple file check and delete wrapper.
349
+ *
350
+ * @param $fileToDelete
351
+ *
352
+ * @return bool
353
+ * @throws N2ImageUploaderException
354
+ */
355
+ public function deleteFile($fileToDelete) {
356
+ if (file_exists($fileToDelete) && !unlink($fileToDelete)) {
357
+ throw new N2ImageUploaderException("File may have been deleted or does not exist");
358
+ }
359
+ return true;
360
+ }
361
+
362
+ /**
363
+ * Final image uploader method, to check for errors and upload
364
+ *
365
+ * @param $fileToUpload
366
+ * @param null $isNameProvided
367
+ *
368
+ * @return string
369
+ * @throws N2ImageUploaderException
370
+ */
371
+ public function upload($fileToUpload, $isNameProvided = null) {
372
+
373
+ if (!function_exists('exif_imagetype')) {
374
+ throw new N2ImageUploaderException("Function 'exif_imagetype' Not found.");
375
+ }
376
+
377
+ // Check if any errors are thrown by the FILES[] array
378
+ if ($fileToUpload["error"]) {
379
+ throw new N2ImageUploaderException($this->commonUploadErrors($fileToUpload["error"]));
380
+ }
381
+
382
+ // First get the real file extension
383
+ $this->getMimeType = $this->getMimeType($fileToUpload["tmp_name"]);
384
+
385
+ // Check if this file type is allowed for upload
386
+ if (!in_array($this->getMimeType, $this->imageType)) {
387
+ throw new N2ImageUploaderException(" This is not allowed file type!
388
+ Please only upload ( " . implode(", ", $this->imageType) . " ) file types");
389
+ }
390
+
391
+ //Check if size (in bytes) of the image are above or below of defined in 'limitSize()'
392
+ if ($fileToUpload["size"] < $this->imageSize["min"] || $fileToUpload["size"] > $this->imageSize["max"]) {
393
+ throw new N2ImageUploaderException("File sizes must be between " . implode(" to ", $this->imageSize) . " bytes");
394
+ }
395
+
396
+ // check if image is valid pixel-wise.
397
+ $pixel = $this->getPixels($fileToUpload["tmp_name"]);
398
+
399
+ if ($pixel["width"] < 4 || $pixel["height"] < 4) {
400
+ throw new N2ImageUploaderException("This file is either too small or corrupted to be an image");
401
+ }
402
+
403
+ if ($pixel["height"] > $this->imageDimension["height"] || $pixel["width"] > $this->imageDimension["width"]) {
404
+ throw new N2ImageUploaderException("Image pixels/size must be below " . implode(", ", $this->imageDimension) . " pixels");
405
+ }
406
+
407
+ // create upload directory if it does not exist
408
+ $this->uploadDir($this->uploadDir);
409
+
410
+ $i = '';
411
+ $newFileName = $this->imageRename($isNameProvided);
412
+
413
+ while (file_exists($this->uploadDir . "/" . $newFileName)) {
414
+ // The file already uploaded, nothing to do here
415
+ if (self::isFilesIdentical($this->uploadDir . "/" . $newFileName, $fileToUpload["tmp_name"])) {
416
+ return $this->uploadDir . "/" . $newFileName;
417
+ }
418
+ $i++;
419
+ $newFileName = $this->imageRename($isNameProvided . $i);
420
+ }
421
+
422
+ // Upload the file
423
+ $moveUploadedFile = $this->moveUploadedFile($fileToUpload["tmp_name"], $this->uploadDir . "/" . $newFileName);
424
+
425
+ if ($moveUploadedFile) {
426
+ return $this->uploadDir . "/" . $newFileName;
427
+ } else {
428
+ throw new N2ImageUploaderException(" File could not be uploaded. Unknown error occurred. ");
429
+ }
430
+ }
431
+
432
+ public function moveUploadedFile($uploaded_file, $new_file) {
433
+ if (!is_uploaded_file($uploaded_file)) {
434
+ return copy($uploaded_file, $new_file);
435
+ }
436
+ return move_uploaded_file($uploaded_file, $new_file);
437
+ }
438
+
439
+ private static function isFilesIdentical($fn1, $fn2) {
440
+ if (filetype($fn1) !== filetype($fn2)) return FALSE;
441
+
442
+ if (filesize($fn1) !== filesize($fn2)) return FALSE;
443
+
444
+ if (sha1_file($fn1) != sha1_file($fn2)) return false;
445
+
446
+ return true;
447
+ }
448
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Content.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendContentControllerAjax extends N2BackendControllerAjax
4
+ {
5
+
6
+ public function actionSearch() {
7
+ $this->validateToken();
8
+ N2Loader::import('libraries.models.content', 'platform');
9
+
10
+ $keyword = N2Request::getVar('keyword', '');
11
+ $this->response->respond(N2ModelsContent::search($keyword));
12
+ }
13
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Font.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendFontControllerAjax extends N2SystemBackendVisualManagerControllerAjax
4
+ {
5
+ protected $type = 'font';
6
+
7
+ public function getModel() {
8
+ return new N2SystemFontModel();
9
+ }
10
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Image.php ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendImageControllerAjax extends N2SystemBackendVisualManagerControllerAjax
4
+ {
5
+
6
+ protected $type = 'image';
7
+
8
+ public function actionLoadVisualForImage() {
9
+ $this->validateToken();
10
+ $model = $this->getModel();
11
+ $image = N2Request::getVar('image');
12
+ $visual = $model->getVisual($image);
13
+ if (!empty($visual)) {
14
+ $this->response->respond(array(
15
+ 'visual' => $visual
16
+ ));
17
+ } else {
18
+
19
+ if (($visual = $model->addVisual($image, N2StorageImage::$emptyImage))) {
20
+ $this->response->respond(array(
21
+ 'visual' => $visual
22
+ ));
23
+ }
24
+ }
25
+
26
+ N2Message::error(n2_('Unexpected error'));
27
+ $this->response->error();
28
+ }
29
+
30
+ public function actionGenerateImage() {
31
+ $this->validateToken();
32
+
33
+ $device = N2Request::getVar('device');
34
+ $this->validateVariable($device == 'tablet' || $device == 'mobile', 'device');
35
+
36
+ $image = N2Request::getVar('image');
37
+ $this->validateVariable(!empty($image), 'image');
38
+
39
+ N2Loader::import('libraries.image.image');
40
+ $scale = array(
41
+ 'tablet' => 0.5,
42
+ 'mobile' => 0.3
43
+ );
44
+
45
+ $newImage = N2Image::scaleImage('image', $image, $scale[$device], true);
46
+
47
+ $this->response->respond(array(
48
+ 'image' => N2ImageHelper::fixed($newImage)
49
+ ));
50
+ }
51
+
52
+ public function actionAddVisual() {
53
+ $this->validateToken();
54
+
55
+ $image = N2Request::getVar('image');
56
+ $this->validateVariable(!empty($image), 'image');
57
+
58
+ $model = $this->getModel();
59
+
60
+ if (($visual = $model->addVisual($image, N2Request::getVar('value')))) {
61
+ $this->response->respond(array(
62
+ 'visual' => $visual
63
+ ));
64
+ }
65
+
66
+ N2Message::error(n2_('Unexpected error'));
67
+ $this->response->error();
68
+ }
69
+
70
+ public function actionDeleteVisual() {
71
+ $this->validateToken();
72
+
73
+ $visualId = N2Request::getInt('visualId');
74
+ $this->validateVariable($visualId > 0, 'image');
75
+
76
+ $model = $this->getModel();
77
+
78
+ if (($visual = $model->deleteVisual($visualId))) {
79
+ $this->response->respond(array(
80
+ 'visual' => $visual
81
+ ));
82
+ }
83
+
84
+ N2Message::error(n2_('Not editable'));
85
+ $this->response->error();
86
+ }
87
+
88
+ public function actionChangeVisual() {
89
+ $this->validateToken();
90
+
91
+ $visualId = N2Request::getInt('visualId');
92
+ $this->validateVariable($visualId > 0, 'image');
93
+
94
+ $model = $this->getModel();
95
+
96
+ if (($visual = $model->changeVisual($visualId, N2Request::getVar('value')))) {
97
+ $this->response->respond(array(
98
+ 'visual' => $visual
99
+ ));
100
+ }
101
+
102
+ N2Message::error(n2_('Unexpected error'));
103
+ $this->response->error();
104
+ }
105
+
106
+ public function getModel() {
107
+ return new N2SystemImageModel();
108
+ }
109
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Link.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendLinkControllerAjax extends N2BackendControllerAjax
4
+ {
5
+
6
+ public function actionSearch() {
7
+ $this->validateToken();
8
+ N2Loader::import('libraries.models.link', 'platform');
9
+
10
+ $keyword = N2Request::getVar('keyword', '');
11
+ $this->response->respond(N2ModelsLink::search($keyword));
12
+ }
13
+ }
app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Style.php ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendStyleControllerAjax extends N2SystemBackendVisualManagerControllerAjax
4
+ {
5
+
6
+ protected $type = 'style';
7
+
8
+ public function getModel() {
9
+ return new N2SystemStyleModel();
10
+ }
11
+ }
app/code/community/Nextend2/library/applications/system/backend/helpers/controllers/VisualManager.php ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendVisualManagerController extends N2BackendController
4
+ {
5
+
6
+ public $layoutName = "lightbox";
7
+
8
+ protected $type = '';
9
+
10
+ protected $inlinePath = '../..';
11
+
12
+ protected $app = null;
13
+
14
+ protected $logoText = '';
15
+
16
+ public function getModel() {
17
+ }
18
+
19
+ public function initialize() {
20
+ $this->app = N2Base::getApplication('system');
21
+ parent::initialize();
22
+
23
+ N2Loader::import(array(
24
+ 'models.visual'
25
+ ), 'system');
26
+ $this->loadModel();
27
+
28
+ N2Localization::addJS(array(
29
+ 'visual',
30
+ 'visuals',
31
+ 'Static',
32
+ 'Empty',
33
+
34
+ 'Save as new',
35
+ 'Overwrite current',
36
+ '%s changed - %s',
37
+ 'Save as',
38
+
39
+ 'Sets',
40
+ 'Add new',
41
+ '%s sets',
42
+ 'Create set',
43
+ 'Add',
44
+ 'Name',
45
+ 'Please fill the name field!',
46
+ 'Set added',
47
+ 'Rename set',
48
+ 'Rename',
49
+ 'Delete',
50
+ 'Set renamed',
51
+ 'Delete set',
52
+ 'Cancel',
53
+ 'Yes',
54
+ 'Do you really want to delete the set and all associated %s?',
55
+ 'Unable to delete the set'
56
+ ));
57
+ }
58
+
59
+ protected function loadModel() {
60
+ N2Loader::import(array(
61
+ 'models.' . $this->type
62
+ ), 'system');
63
+ }
64
+
65
+ public function actionIndex() {
66
+
67
+ $model = $this->getModel();
68
+ $this->app->set($this->type . 'setModel', $model);
69
+
70
+ $this->addView($this->inlinePath . "/inline/sidebar/" . $this->type, array(
71
+ "model" => $model
72
+ ), "sidebar");
73
+
74
+ $this->addView("topbar", array(), 'content_top_bar');
75
+
76
+ $this->addView("index", array(
77
+ "model" => $model
78
+ ));
79
+
80
+ $this->render(array(
81
+ 'lightboxId' => 'n2-lightbox-' . $this->type,
82
+ 'logo' => $this->logoText
83
+ ));
84
+ }
85
+
86
+ }
app/code/community/Nextend2/library/applications/system/backend/helpers/controllers/VisualManagerAjax.php ADDED
@@ -0,0 +1,185 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ abstract class N2SystemBackendVisualManagerControllerAjax extends N2BackendControllerAjax
4
+ {
5
+
6
+ protected $type = '';
7
+
8
+ protected $permission = 'nextend_visual_';
9
+
10
+ public function initialize() {
11
+ parent::initialize();
12
+
13
+ N2Loader::import(array(
14
+ 'models.visual',
15
+ 'models.' . $this->type
16
+ ), 'system');
17
+ }
18
+
19
+ /**
20
+ * @return N2SystemVisualModel
21
+ */
22
+ public abstract function getModel();
23
+
24
+ public function actionCreateSet() {
25
+ $this->validateToken();
26
+
27
+ $this->validatePermission($this->permission . 'edit');
28
+
29
+ $name = N2Request::getVar('name');
30
+ $this->validateVariable(!empty($name), 'set name');
31
+
32
+ $model = $this->getModel();
33
+ if (($set = $model->createSet($name))) {
34
+ $this->response->respond(array(
35
+ 'set' => $set
36
+ ));
37
+ }
38
+
39
+ N2Message::error(n2_('Unexpected error'));
40
+ $this->response->error();
41
+ }
42
+
43
+ public function actionRenameSet() {
44
+ $this->validateToken();
45
+
46
+ $this->validatePermission($this->permission . 'edit');
47
+
48
+ $setId = N2Request::getInt('setId');
49
+ $this->validateVariable($setId > 0, 'set');
50
+
51
+ $name = N2Request::getVar('name');
52
+ $this->validateVariable(!empty($name), 'set name');
53
+
54
+ $model = $this->getModel();
55
+
56
+ if (($set = $model->renameSet($setId, $name))) {
57
+ $this->response->respond(array(
58
+ 'set' => $set
59
+ ));
60
+ }
61
+
62
+ N2Message::error(n2_('Set is not editable'));
63
+ $this->response->error();
64
+ }
65
+
66
+ public function actionDeleteSet() {
67
+ $this->validateToken();
68
+
69
+ $this->validatePermission($this->permission . 'delete');
70
+
71
+ $setId = N2Request::getInt('setId');
72
+ $this->validateVariable($setId > 0, 'set');
73
+
74
+ $model = $this->getModel();
75
+
76
+ if (($set = $model->deleteSet($setId))) {
77
+ $this->response->respond(array(
78
+ 'set' => $set
79
+ ));
80
+ }
81
+
82
+ N2Message::error(n2_('Set is not editable'));
83
+ $this->response->error();
84
+ }
85
+
86
+ public function actionLoadVisualsForSet() {
87
+ $this->validateToken();
88
+
89
+
90
+ $setId = N2Request::getInt('setId');
91
+ $this->validateVariable($setId > 0, 'set');
92
+
93
+ $model = $this->getModel();
94
+ $visuals = $model->getVisuals($setId);
95
+ if (is_array($visuals)) {
96
+ $this->response->respond(array(
97
+ 'visuals' => $visuals
98
+ ));
99
+ }
100
+
101
+ N2Message::error(n2_('Unexpected error'));
102
+ $this->response->error();
103
+ }
104
+
105
+ public function actionLoadSetByVisualId() {
106
+ $this->validateToken();
107
+
108
+ $visualId = N2Request::getInt('visualId');
109
+ $this->validateVariable($visualId > 0, 'visual');
110
+
111
+ $model = $this->getModel();
112
+
113
+ $set = $model->getSetByVisualId($visualId);
114
+
115
+ if (is_array($set) && is_array($set['visuals'])) {
116
+ $this->response->respond(array(
117
+ 'set' => $set
118
+ ));
119
+ }
120
+
121
+ N2Message::error(n2_('Visual do not exists'));
122
+ $this->response->error();
123
+ }
124
+
125
+ public function actionAddVisual() {
126
+ $this->validateToken();
127
+
128
+ $this->validatePermission($this->permission . 'edit');
129
+
130
+ $setId = N2Request::getInt('setId');
131
+ $this->validateVariable($setId > 0, 'set');
132
+
133
+ $model = $this->getModel();
134
+
135
+ if (($visual = $model->addVisual($setId, N2Request::getVar('value')))) {
136
+ $this->response->respond(array(
137
+ 'visual' => $visual
138
+ ));
139
+ }
140
+
141
+ N2Message::error(n2_('Not editable'));
142
+ $this->response->error();
143
+ }
144
+
145
+ public function actionDeleteVisual() {
146
+ $this->validateToken();
147
+
148
+ $this->validatePermission($this->permission . 'delete');
149
+
150
+ $visualId = N2Request::getInt('visualId');
151
+ $this->validateVariable($visualId > 0, 'visual');
152
+
153
+ $model = $this->getModel();
154
+
155
+ if (($visual = $model->deleteVisual($visualId))) {
156
+ $this->response->respond(array(
157
+ 'visual' => $visual
158
+ ));
159
+ }
160
+
161
+ N2Message::error(n2_('Not editable'));
162
+ $this->response->error();
163
+ }
164
+
165
+ public function actionChangeVisual() {
166
+ $this->validateToken();
167
+
168
+ $this->validatePermission($this->permission . 'edit');
169
+
170
+ $visualId = N2Request::getInt('visualId');
171
+ $this->validateVariable($visualId > 0, 'visual');
172
+
173
+ $model = $this->getModel();
174
+
175
+ if (($visual = $model->changeVisual($visualId, N2Request::getVar('value')))) {
176
+ $this->response->respond(array(
177
+ 'visual' => $visual
178
+ ));
179
+ }
180
+
181
+ N2Message::error(n2_('Unexpected error'));
182
+ $this->response->error();
183
+ }
184
+
185
+ }
app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/animation.phtml ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="n2-sidebar-row n2-sidebar-header-bg n2-form-dark n2-sets-header">
2
+ <div class="n2-table">
3
+ <div class="n2-tr">
4
+ <div class="n2-td n2-set-label">
5
+ <div class="n2-h3 n2-uc"><?php n2_e('Set'); ?></div>
6
+ </div>
7
+ <div class="n2-td n2-manage-set">
8
+ <?php
9
+ $model->renderSetsForm();
10
+ ?>
11
+ <div id="animationset-manage"
12
+ class="n2-button n2-button-medium n2-button-grey n2-h5 n2-uc"><?php n2_e('Manage'); ?></div>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </div>
17
+ <?php
18
+ $ul = array();
19
+
20
+ $ul[] = array(
21
+ 'class' => 'n2-button-container n2-save-as-new-container',
22
+ 'contents' => N2Html::tag('a', array(
23
+ 'class' => 'n2-button n2-button-big n2-button-green n2-uc n2-animation-save-as-new',
24
+ 'href' => '#'
25
+ ), n2_('Save as new animation')),
26
+ );
27
+
28
+ $this->widget->init("listn", array(
29
+ "ul" => $ul
30
+ ));
31
+ ?>
32
+ <div class="n2-lightbox-sidebar-list">
33
+
34
+ </div>
app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/font.phtml ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="n2-sidebar-row n2-sidebar-header-bg n2-form-dark n2-sets-header">
2
+ <div class="n2-table">
3
+ <div class="n2-tr">
4
+ <div class="n2-td n2-set-label">
5
+ <div class="n2-h3 n2-uc"><?php n2_e('Set'); ?></div>
6
+ </div>
7
+ <div class="n2-td n2-manage-set">
8
+ <?php
9
+ $model->renderSetsForm();
10
+ ?>
11
+ <div id="fontset-manage"
12
+ class="n2-button n2-button-medium n2-button-grey n2-h5 n2-uc"><?php n2_e('Manage'); ?></div>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </div>
17
+ <?php
18
+ $ul = array();
19
+
20
+ $ul[] = array(
21
+ 'class' => 'n2-button-container n2-save-as-new-container',
22
+ 'contents' => N2Html::tag('a', array(
23
+ 'class' => 'n2-button n2-button-big n2-button-green n2-uc n2-font-save-as-new',
24
+ 'href' => '#'
25
+ ), n2_('Save as new font')),
26
+ );
27
+
28
+ $this->widget->init("listn", array(
29
+ "ul" => $ul
30
+ ));
31
+ ?>
32
+ <div class="n2-lightbox-sidebar-list">
33
+
34
+ </div>
app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/image.phtml ADDED
File without changes
app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/settings.phtml ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $action = N2Request::getCmd('nextendaction', 'default');
3
+
4
+
5
+ $settings = array(
6
+ array(
7
+ 'id' => 'index',
8
+ 'title' => n2_('General settings')
9
+ )
10
+ );
11
+
12
+ $settings[] = array(
13
+ 'id' => 'fonts',
14
+ 'title' => n2_('Fonts')
15
+ );
16
+
17
+ $dl = array();
18
+
19
+ foreach ($settings AS $setting) {
20
+
21
+ $dl[] = array(
22
+ 'title' => $setting['title'],
23
+ 'link' => $this->appType->router->createUrl("settings/{$setting['id']}"),
24
+ 'class' => ($setting['id'] == $action ? 'active ' : '')
25
+ );
26
+ }
27
+
28
+ echo $this->widget->init("definitionlist", array(
29
+ "dl" => $dl
30
+ ));
app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/style.phtml ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="n2-sidebar-row n2-sidebar-header-bg n2-form-dark n2-sets-header">
2
+ <div class="n2-table">
3
+ <div class="n2-tr">
4
+ <div class="n2-td n2-set-label">
5
+ <div class="n2-h3 n2-uc"><?php n2_e('Set'); ?></div>
6
+ </div>
7
+ <div class="n2-td n2-manage-set">
8
+ <?php
9
+ $model->renderSetsForm();
10
+ ?>
11
+ <div id="styleset-manage"
12
+ class="n2-button n2-button-medium n2-button-grey n2-h5 n2-uc"><?php n2_e('Manage'); ?></div>
13
+ </div>
14
+ </div>
15
+ </div>
16
+ </div>
17
+ <?php
18
+ $ul = array();
19
+
20
+ $ul[] = array(
21
+ 'class' => 'n2-button-container n2-save-as-new-container',
22
+ 'contents' => N2Html::tag('a', array(
23
+ 'class' => 'n2-button n2-button-big n2-button-green n2-uc n2-style-save-as-new',
24
+ 'href' => '#'
25
+ ), n2_('Save as new style')),
26
+ );
27
+
28
+ $this->widget->init("listn", array(
29
+ "ul" => $ul
30
+ ));
31
+ ?>
32
+ <div class="n2-lightbox-sidebar-list">
33
+
34
+ </div>
app/code/community/Nextend2/library/applications/system/backend/layouts/default.phtml ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* @var $this N2Layout */
3
+ ?>
4
+
5
+ <div id="n2-admin" class="n2 n2-border-radius">
6
+
7
+ <?php
8
+ /**
9
+ * @var $widget Nav
10
+ */
11
+ $logoUrl = N2Base::getApplication('system')->getLogo();
12
+ $cmd = N2Request::getVar("nextendcontroller", "dashboard");
13
+ echo $this->widget->init('nav', array(
14
+ 'logoUrl' => $this->appType->router->createUrl("dashboard/index"),
15
+ 'logoImageUrl' => $logoUrl,
16
+ 'views' => array(
17
+ N2Html::tag('a', array(
18
+ 'href' => $this->appType->router->createUrl("dashboard/index"),
19
+ 'class' => 'n2-h4 n2-uc ' . ($cmd == "dashboard" ? "n2-active" : "")
20
+ ), n2_('Dashboard')),
21
+ N2Html::tag('a', array(
22
+ 'href' => $this->appType->router->createUrl("settings/index"),
23
+ 'class' => 'n2-h4 n2-uc ' . ($cmd == "settings" ? "n2-active" : "")
24
+ ), n2_('Settings')),
25
+ N2Html::tag('a', array(
26
+ 'href' => $this->appType->router->createUrl("help/index"),
27
+ 'class' => 'n2-h4 n2-uc ' . ($cmd == "help" ? "n2-active" : "")
28
+ ), n2_('Help'))
29
+ ),
30
+ 'actions' => $this->getFragmentValue('actions')
31
+ ));
32
+ ?>
33
+
34
+ <div class="n2-table n2-table-fixed n2-content">
35
+ <div class="n2-tr">
36
+ <div class="n2-td n2-sidebar n2-sidebar-base-bg">
37
+ <?php
38
+ $this->renderFragmentBlock('nextend_sidebar');
39
+ ?>
40
+ </div>
41
+
42
+ <div class="n2-td n2-content-base-bg">
43
+ <!-- Begin Content -->
44
+ <div class="n2-content-area n2-border-radius-br">
45
+ <?php
46
+ $this->renderFragmentBlock('nextend_content');
47
+ ?>
48
+ </div>
49
+ <!-- End Content -->
50
+ </div>
51
+ </div>
52
+ </div>
53
+
54
+ </div>
55
+ <?php
56
+
57
+ N2Message::show();
58
+
59
+ N2JS::addInline("new NextendExpertMode('nextend', 1);");
app/code/community/Nextend2/library/applications/system/backend/layouts/full.phtml ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* @var $this N2Layout */
3
+ ?>
4
+
5
+ <div id="n2-admin" class="n2 n2-sidebar-hidden n2-border-radius">
6
+
7
+ <?php
8
+ /**
9
+ * @var $widget Nav
10
+ */
11
+ $logoUrl = N2Base::getApplication('system')->getLogo();
12
+ $cmd = N2Request::getVar("nextendcontroller", "dashboard");
13
+
14
+ $views = array(
15
+ N2Html::tag('a', array(
16
+ 'href' => $this->appType->router->createUrl("dashboard/index"),
17
+ 'class' => 'n2-h4 n2-uc ' . ($cmd == "dashboard" ? "n2-active" : "")
18
+ ), n2_('Dashboard')),
19
+ N2Html::tag('a', array(
20
+ 'href' => $this->appType->router->createUrl("settings/index"),
21
+ 'class' => 'n2-h4 n2-uc ' . ($cmd == "settings" ? "n2-active" : "")
22
+ ), n2_('Settings')),
23
+ N2Html::tag('a', array(
24
+ 'href' => $this->appType->router->createUrl("help/index"),
25
+ 'class' => 'n2-h4 n2-uc ' . ($cmd == "help" ? "n2-active" : "")
26
+ ), n2_('Help'))
27
+ );
28
+
29
+ if (class_exists('N2User')) {
30
+ if (N2User::isLoggedIn()) {
31
+ $views[] = N2Html::tag('a', array(
32
+ 'href' => $this->appType->router->createUrl("login/logout"),
33
+ 'class' => 'n2-h4 n2-uc'
34
+ ), n2_('Log out'));
35
+ }
36
+ }
37
+
38
+ echo $this->widget->init('nav', array(
39
+ 'logoUrl' => $this->appType->router->createUrl("dashboard/index"),
40
+ 'logoImageUrl' => $logoUrl,
41
+ 'views' => $views,
42
+ 'actions' => $this->getFragmentValue('actions')
43
+ ));
44
+ ?>
45
+
46
+ <div class="n2-table n2-table-fixed n2-content">
47
+ <div class="n2-tr">
48
+ <div class="n2-td n2-content-base-bg">
49
+ <!-- Begin Content -->
50
+ <div class="n2-content-area n2-border-radius-br">
51
+ <?php
52
+ $this->renderFragmentBlock('nextend_content');
53
+ ?>
54
+ </div>
55
+ <!-- End Content -->
56
+ </div>
57
+ </div>
58
+ </div>
59
+
60
+ </div>
61
+ <?php
62
+
63
+ N2Message::show();
app/code/community/Nextend2/library/applications/system/backend/layouts/fulllightbox.phtml ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* @var $this N2Layout */
3
+ ?>
4
+ <div id="<?php echo $lightboxId; ?>" class="n2 n2-lightbox-container n2-lightbox-no-sidebar">
5
+ <div class="n2-lightbox n2-border-radius">
6
+
7
+ <div class="n2-table n2-table-fixed n2-content">
8
+ <div class="n2-tr">
9
+ <div class="n2-td n2-content-base-bg">
10
+ <!-- Begin Content -->
11
+ <div class="n2-table n2-table-fixed">
12
+ <div class="n2-tr">
13
+ <div class="n2-td n2-sidebar">
14
+ <div class="n2-blue-logo-bg n2-logo n2-border-radius-tl n2-lightbox-heading n2-h2">
15
+ <?php
16
+ echo $logo;
17
+ ?>
18
+ </div>
19
+ </div>
20
+ <div class="n2-td">
21
+ <?php
22
+ $this->renderFragmentBlock('nextend_content_top_bar');
23
+ ?>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ <div class="n2-content-area n2-border-radius-br">
28
+ <?php
29
+ $this->renderFragmentBlock('nextend_content');
30
+ ?>
31
+ </div>
32
+ <!-- End Content -->
33
+ </div>
34
+ </div>
35
+ </div>
36
+ </div>
37
+ </div>
app/code/community/Nextend2/library/applications/system/backend/layouts/lightbox.phtml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* @var $this N2Layout */
3
+ ?>
4
+ <div id="<?php echo $lightboxId; ?>" class="n2 n2-lightbox-container">
5
+ <div class="n2-lightbox n2-border-radius">
6
+
7
+ <div class="n2-table n2-table-fixed n2-content">
8
+ <div class="n2-tr">
9
+ <div class="n2-td n2-sidebar n2-sidebar-base-bg n2-border-radius-tl n2-border-radius-bl">
10
+ <div class="n2-blue-logo-bg n2-logo n2-border-radius-tl n2-lightbox-heading n2-h2">
11
+ <?php
12
+ echo $logo;
13
+ ?>
14
+ </div>
15
+ <?php
16
+ $this->renderFragmentBlock('nextend_sidebar');
17
+ ?>
18
+ </div>
19
+
20
+ <div class="n2-td n2-content-base-bg">
21
+ <!-- Begin Content -->
22
+ <?php
23
+ $this->renderFragmentBlock('nextend_content_top_bar');
24
+ ?>
25
+ <div class="n2-content-area n2-border-radius-br">
26
+ <?php
27
+ $this->renderFragmentBlock('nextend_content');
28
+ ?>
29
+ </div>
30
+ <!-- End Content -->
31
+ </div>
32
+ </div>
33
+ </div>
34
+ </div>
35
+ </div>
app/code/community/Nextend2/library/applications/system/backend/layouts/modal.phtml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /* @var $this N2Layout */
3
+ ?>
4
+ <style type="text/css">
5
+ <?php N2Platform::adminHideCSS(); ?>
6
+ </style>
7
+ <div id="n2-admin" class="n2 n2-lightbox n2-sidebar-hidden n2-border-radius">
8
+
9
+ <?php
10
+ /**
11
+ * @var $widget Nav
12
+ */
13
+ $logoUrl = N2Base::getApplication('system')->getLogo();
14
+ $cmd = N2Request::getVar("nextendcontroller", "dashboard");
15
+
16
+ ?>
17
+
18
+ <div class="n2-table n2-table-fixed n2-content">
19
+ <div class="n2-tr">
20
+ <div class="n2-td n2-content-base-bg">
21
+ <!-- Begin Content -->
22
+ <div class="n2-content-area n2-border-radius-br">
23
+ <?php
24
+ $this->renderFragmentBlock('nextend_content');
25
+ ?>
26
+ </div>
27
+ <!-- End Content -->
28
+ </div>
29
+ </div>
30
+ </div>
31
+
32
+ </div>
33
+ <?php
34
+
35
+ N2Message::show();
app/code/community/Nextend2/library/applications/system/backend/views/animation/index.phtml ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $model N2SystemAnimationModel
4
+ */
5
+
6
+ $sets = $model->getSets();
7
+
8
+ N2AnimationRenderer::$sets[] = $sets[0]['id'];
9
+
10
+ $animations = array();
11
+ foreach (array_unique(N2AnimationRenderer::$sets) AS $setId) {
12
+ $animations[$setId] = $model->getVisuals($setId);
13
+ }
14
+
15
+ N2JS::addFirstCode("
16
+ new NextendAnimationManager({
17
+ setsIdentifier: '" . $model->type . "set',
18
+ sets: " . json_encode($sets) . ",
19
+ visuals: " . json_encode($animations) . ",
20
+ renderer: {
21
+ modes: " . json_encode(N2AnimationRenderer::$mode) . "
22
+ },
23
+ ajaxUrl: '" . $this->appType->router->createAjaxUrl(array('animation/index')) . "'
24
+ });
25
+ ");
26
+ ?>
27
+ <div class="n2-form-tab ">
28
+ <div class="n2-heading-controls n2-content-box-title-bg">
29
+ <div class="n2-table">
30
+ <div class="n2-tr">
31
+ <div class="n2-td n2-h2" style="white-space: nowrap">
32
+ <?php n2_e('Animation settings'); ?>
33
+ </div>
34
+
35
+ <div class="n2-td n2-last n2-visual-editor-tabs">
36
+ <div class="n2-form-element-radio-tab">
37
+ <div class="n2-radio-option n2-h4 n2-first n2-last n2-active">
38
+ #0
39
+ </div>
40
+ <input type="hidden" autocomplete="off" value="0" name="n2-animation-editor-tabs"
41
+ id="n2-animation-editor-tabs">
42
+ </div>
43
+
44
+ <a id="n2-animation-editor-tab-add" href="#" class="n2-button n2-button-grey n2-button-medium">
45
+ <i class="n2-i n2-i-plus"></i>
46
+ </a>
47
+
48
+ <a id="n2-animation-editor-tab-delete" href="#"
49
+ class="n2-button n2-button-grey n2-button-medium">
50
+ <i class="n2-i n2-i-delete"></i>
51
+ </a>
52
+ </div>
53
+ </div>
54
+ </div>
55
+ </div>
56
+
57
+ <div>
58
+ <?php
59
+ $model->renderForm();
60
+ ?>
61
+ </div>
62
+ </div>
63
+
64
+ <div class="n2-form-tab n2-editor-preview-box">
65
+ <div class="n2-heading-controls n2-content-box-title-bg">
66
+ <div class="n2-table n2-table-fixed">
67
+ <div class="n2-tr">
68
+ <div class="n2-td n2-h2">
69
+ <?php n2_e('Preview'); ?>
70
+ </div>
71
+
72
+ <div class="n2-td n2-last n2-visual-editor-preview-tab">
73
+ <div class="n2-form-element-radio-tab">
74
+ <div class="n2-radio-option n2-h4 n2-first n2-last n2-active">
75
+ Default
76
+ </div>
77
+ <input type="hidden" autocomplete="off" value="0" name="n2-animation-editor-preview-mode"
78
+ id="n2-animation-editor-preview-mode">
79
+ </div>
80
+ <div class="n2-editor-background-color">
81
+ <div style="" class="n2-form-element-text n2-form-element-color n2-border-radius">
82
+ <div class="n2-sp-replacer">
83
+ <div class="n2-sp-preview">
84
+ <div class="n2-sp-preview-inner"></div>
85
+ </div>
86
+ <div class="n2-sp-dd">â–²</div>
87
+ </div>
88
+ <input type="text" autocomplete="off" class="n2-h5" value="ced3d5"
89
+ name="n2-animation-editor-background-color"
90
+ id="n2-animation-editor-background-color">
91
+ </div>
92
+ </div>
93
+ </div>
94
+ </div>
95
+ </div>
96
+ </div>
97
+
98
+ <div id="n2-animation-editor-preview">
99
+ </div>
100
+ </div>
101
+
102
+ <?php
103
+ $model->renderFormExtra();
104
+ ?>
app/code/community/Nextend2/library/applications/system/backend/views/animation/topbar.phtml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "actions" => array(
5
+ N2Html::tag('a', array(
6
+ 'href' => '#',
7
+ 'id' => 'n2-animation-editor-cancel',
8
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc'
9
+ ), n2_('Cancel')),
10
+ N2Html::tag('a', array(
11
+ 'href' => '#',
12
+ 'id' => 'n2-animation-editor-save',
13
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
14
+ ), n2_('Apply'))
15
+ ),
16
+ 'fixTo' => false
17
+ ));
app/code/community/Nextend2/library/applications/system/backend/views/dashboard/index.phtml ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="n2-heading-bar">
2
+ <div class="n2-h1 n2-heading"><?php n2_e('Dashboard'); ?></div>
3
+ </div>
4
+
5
+ <?php
6
+ foreach (N2Base::getApplications() AS $info):
7
+ if (!$info->isPublic() || !N2Acl::canDo($info->getName(), $info)) {
8
+ continue;
9
+ }
10
+ $info = N2Base::getApplication($info->getName())->info;
11
+ ?>
12
+ <div class="n2-form-tab">
13
+ <div class="n2-h2 n2-content-box-title-bg"><?php echo $info->getLabel(); ?></div>
14
+
15
+ <div class="n2-description">
16
+ <a href="<?php echo $info->getUrl(); ?>"
17
+ class="n2-button n2-button-big n2-button-green"><?php
18
+ n2_e('Go to');
19
+ echo ' ' . $info->getLabel();
20
+ ?></a>
21
+ </div>
22
+ </div>
23
+ <?php
24
+ endforeach;
25
+ ?>
app/code/community/Nextend2/library/applications/system/backend/views/defaults/noaccess.phtml ADDED
@@ -0,0 +1 @@
 
1
+ You do not have sufficient permissions to access this page.
app/code/community/Nextend2/library/applications/system/backend/views/font/index.phtml ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $model N2SystemFontModel
4
+ */
5
+
6
+ $sets = $model->getSets();
7
+
8
+ N2FontRenderer::$sets[] = $sets[0]['id'];
9
+
10
+ $fonts = array();
11
+ foreach (array_unique(N2FontRenderer::$sets) AS $setId) {
12
+ $fonts[$setId] = $model->getVisuals($setId);
13
+ }
14
+
15
+ $fontSettings = N2Fonts::loadSettings();
16
+ N2JS::addFirstCode("
17
+ new NextendFontManager({
18
+ setsIdentifier: '" . $model->type . "set',
19
+ sets: " . json_encode($sets) . ",
20
+ visuals: " . json_encode($fonts) . ",
21
+ renderer: {
22
+ pre: '" . N2FontRenderer::$pre . "',
23
+ usedFonts: " . json_encode(N2FontRenderer::$fonts) . ",
24
+ modes: " . json_encode(N2FontRenderer::$mode) . "
25
+ },
26
+ ajaxUrl: '" . $this->appType->router->createAjaxUrl(array('font/index')) . "',
27
+ defaultFamily: " . json_encode($fontSettings['default-family']) . "
28
+ });
29
+ ");
30
+ ?>
31
+ <div class="n2-form-tab ">
32
+ <div class="n2-heading-controls n2-content-box-title-bg">
33
+ <div class="n2-table n2-table-fixed">
34
+ <div class="n2-tr">
35
+ <div class="n2-td n2-h2">
36
+ <?php n2_e('Font settings'); ?>
37
+ </div>
38
+
39
+ <div class="n2-td n2-last n2-visual-editor-tabs">
40
+ <a href="#"
41
+ class="n2-button n2-button-v n2-button-medium n2-button-grey n2-editor-clear-tab n2-h5 n2-uc"
42
+ style="display: none;"><?php n2_e('Clear tab'); ?></a>
43
+
44
+ <div class="n2-form-element-radio-tab">
45
+ <div class="n2-radio-option n2-h4 n2-first n2-last n2-active">
46
+ #0
47
+ </div>
48
+ <input type="hidden" autocomplete="off" value="0" name="n2-font-editor-tabs"
49
+ id="n2-font-editor-tabs">
50
+ </div>
51
+ </div>
52
+ </div>
53
+ </div>
54
+ </div>
55
+
56
+ <div>
57
+ <?php
58
+ $model->renderForm();
59
+ ?>
60
+ </div>
61
+ </div>
62
+
63
+ <div class="n2-form-tab n2-editor-preview-box">
64
+ <div class="n2-heading-controls n2-content-box-title-bg">
65
+ <div class="n2-table n2-table-fixed">
66
+ <div class="n2-tr">
67
+ <div class="n2-td n2-h2">
68
+ <?php n2_e('Preview'); ?>
69
+ </div>
70
+
71
+ <div class="n2-td n2-last n2-visual-editor-preview-tab">
72
+ <div class="n2-form-element-radio-tab n2-expert">
73
+ <div class="n2-radio-option n2-h4 n2-first n2-last n2-active">
74
+ <?php n2_e('Default'); ?>
75
+ </div>
76
+ <input type="hidden" autocomplete="off" value="0" name="n2-font-editor-preview-mode"
77
+ id="n2-font-editor-preview-mode">
78
+ </div>
79
+ <div class="n2-editor-background-color">
80
+ <div style="" class="n2-form-element-text n2-form-element-color n2-border-radius">
81
+ <div class="n2-sp-replacer">
82
+ <div class="n2-sp-preview">
83
+ <div class="n2-sp-preview-inner"></div>
84
+ </div>
85
+ <div class="n2-sp-dd">â–²</div>
86
+ </div>
87
+ <input type="text" autocomplete="off" class="n2-h5" value="ced3d5"
88
+ name="n2-font-editor-background-color" id="n2-font-editor-background-color">
89
+ </div>
90
+ </div>
91
+ </div>
92
+ </div>
93
+ </div>
94
+ </div>
95
+
96
+ <div id="n2-font-editor-preview">
97
+ </div>
98
+ </div>
99
+
100
+ <?php
101
+ $model->renderFormExtra();
102
+ ?>
app/code/community/Nextend2/library/applications/system/backend/views/font/topbar.phtml ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "menu" => array(
5
+ N2Html::tag('div', array(
6
+ 'class' => 'n2-form-dark'
7
+ ), N2Html::tag('a', array(
8
+ 'href' => '#',
9
+ 'id' => 'n2-font-editor-set-as-linked',
10
+ 'class' => 'n2-button n2-button-blue n2-button-medium n2-h5 n2-b n2-uc',
11
+ ), n2_('Apply as linked')))
12
+ ),
13
+ "actions" => array(
14
+ N2Html::tag('a', array(
15
+ 'href' => '#',
16
+ 'id' => 'n2-font-editor-cancel',
17
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc'
18
+ ), n2_('Cancel')),
19
+ N2Html::tag('a', array(
20
+ 'href' => '#',
21
+ 'id' => 'n2-font-editor-save',
22
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
23
+ ), n2_('Apply'))
24
+ ),
25
+ 'fixTo' => false
26
+ ));
27
+
app/code/community/Nextend2/library/applications/system/backend/views/help/index.phtml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div></div>
2
+ <div class="n2-form">
3
+ <div class="n2-form-tab " id="n2-tab-general"><div class="n2-h2 n2-content-box-title-bg">Help</div>
4
+ <table>
5
+ <colgroup>
6
+ <col class="n2-label-col">
7
+ <col class="n2-element-col">
8
+ </colgroup>
9
+ <tbody>
10
+ <tr>
11
+ <td class="n2-label"><label>Nextend Framework version</label></td>
12
+ <td class="n2-element"><div class="n2-element-plain"><?php echo N2::$version; ?></div></td>
13
+ </tr>
14
+ <tr>
15
+ <td class="n2-label"><label>Platform</label></td>
16
+ <td class="n2-element"><div class="n2-element-plain"><?php echo N2Platform::getPlatformName(); ?></div></td>
17
+ </tr>
18
+ </tbody>
19
+ </table>
20
+ </div>
21
+ </div>
app/code/community/Nextend2/library/applications/system/backend/views/image/index.phtml ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $model N2SystemImageModel
4
+ */
5
+
6
+ N2JS::addFirstCode("
7
+ new NextendImageManager({
8
+ visuals: " . json_encode(N2ImageManager::$loaded) . ",
9
+ ajaxUrl: '" . $this->appType->router->createAjaxUrl(array('image/index')) . "'
10
+ });
11
+ ");
12
+ $model->renderForm();
app/code/community/Nextend2/library/applications/system/backend/views/image/topbar.phtml ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "actions" => array(
5
+ N2Html::tag('a', array(
6
+ 'href' => '#',
7
+ 'id' => 'n2-image-editor-cancel',
8
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc'
9
+ ), n2_('Cancel')),
10
+ N2Html::tag('a', array(
11
+ 'href' => '#',
12
+ 'id' => 'n2-image-editor-save',
13
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
14
+ ), n2_('Apply'))
15
+ ),
16
+ 'fixTo' => false
17
+ ));
app/code/community/Nextend2/library/applications/system/backend/views/login/index.phtml ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "actions" => array(
5
+ N2Html::tag('a', array(
6
+ 'href' => '#',
7
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
8
+ 'onclick' => 'return NextendForm.submit("#nextend-form");'
9
+ ), n2_('Log in'))
10
+ )
11
+ ));
12
+ ?>
13
+ <form id="nextend-form" action="" method="post">
14
+ <?php
15
+ N2SystemLoginModel::renderForm();
16
+ ?>
17
+ <input name="save" value="1" type="hidden"/>
18
+ </form>
app/code/community/Nextend2/library/applications/system/backend/views/settings/_view.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendSettingsView extends N2ViewBase
4
+ {
5
+
6
+ public function renderGlobalConfigurationForm() {
7
+
8
+ $values = N2Settings::getAll();
9
+ $form = new N2Form($this->appType);
10
+ $form->loadArray($values);
11
+ $form->loadXMLFile(N2Loader::getPath('models', 'system') . '/forms/globalconfig.xml');
12
+ echo N2Html::openTag("form", array(
13
+ "id" => "nextend-config",
14
+ "method" => "post",
15
+ "action" => N2Request::getRequestUri()
16
+ ));
17
+ $form->render('global');
18
+ echo N2Html::closeTag("form");
19
+
20
+ N2JS::addFirstCode("
21
+ new NextendForm(
22
+ 'nextend-config',
23
+ '" . $this->appType->router->createAjaxUrl(array(
24
+ 'settings/index'
25
+ )) . "',
26
+ " . json_encode($values) . "
27
+ );
28
+ ");
29
+ }
30
+
31
+ /**
32
+ * Generate action buttons to view
33
+ *
34
+ * @return array
35
+ */
36
+ public function getButtons() {
37
+ $buttons = array();
38
+
39
+ $buttons[] = array(
40
+ 'title' => n2_('Clear cache'),
41
+ 'iconclass' => 'nii nii-24x42 nii-global-action-icon nii-refresh',
42
+ 'htmlOptions' => array(
43
+ 'href' => $this->appType->router->createUrl(array(
44
+ 'settings/clearcache'
45
+ ))
46
+ )
47
+ );
48
+
49
+ return $buttons;
50
+ }
51
+
52
+ public function renderAviaryConfigurationForm() {
53
+ $values = N2ImageAviary::loadSettings();
54
+
55
+ $form = new N2Form($this->appType);
56
+ $form->loadArray($values);
57
+ $form->loadXMLFile(N2Loader::getPath('models', 'system') . '/forms/aviary.xml');
58
+ echo N2Html::openTag("form", array(
59
+ "id" => "nextend-config",
60
+ "method" => "post",
61
+ "action" => N2Request::getRequestUri()
62
+ ));
63
+ $form->render('aviary');
64
+ echo N2Html::closeTag("form");
65
+ }
66
+
67
+ public function renderFontsConfigurationForm() {
68
+ $values = N2Fonts::loadSettings();
69
+
70
+ $form = new N2Form($this->appType);
71
+ $form->loadArray($values);
72
+ $form->loadArray($values['plugins']->toArray());
73
+ $form->loadXMLFile(N2Loader::getPath('models', 'system') . '/forms/fonts.xml');
74
+ echo N2Html::openTag("form", array(
75
+ "id" => "nextend-config",
76
+ "method" => "post",
77
+ "action" => N2Request::getRequestUri()
78
+ ));
79
+ $form->render('fonts');
80
+ echo N2Html::closeTag("form");
81
+ }
82
+
83
+ }
app/code/community/Nextend2/library/applications/system/backend/views/settings/aviary.phtml ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $_class N2SystemBackendSettingsView
4
+ * @see Actions
5
+ */
6
+ $this->widget->init('topbar', array(
7
+ "actions" => array(
8
+ N2Html::tag('a', array(
9
+ 'href' => '#',
10
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
11
+ 'onclick' => 'return NextendForm.submit("#nextend-config");'
12
+ ), n2_('Save'))
13
+ )
14
+ ));
15
+
16
+ ?>
17
+ <div class="n2-heading-bar">
18
+ <div class="n2-h1 n2-heading"><?php n2_e('Adobe Creative SDK - Aviary image editor'); ?></div>
19
+ </div>
20
+
21
+ <div class="n2-form-tab ">
22
+ <div class="n2-h2 n2-content-box-title-bg"><?php n2_e('Get Adobe Creative SDK API access'); ?></div>
23
+
24
+ <div class="n2-description">
25
+ <p><?php n2_e('To be able to use Aviary image editing tool in this application, you have to create an own API key to gain access.'); ?></p>
26
+ <ol>
27
+ <li><?php n2_e('If you have already registered to Adobe, you can skip this step. If not, please <a href="https://creativesdk.adobe.com/myapps.html" target="_blank">register</a>!'); ?>
28
+ </li>
29
+ <li><?php n2_e('After you have logged in <a href="https://creativesdk.adobe.com/myapps.html" target="_blank">on this page</a>, click on the "NEW APPLICATION" button!'); ?>
30
+ </li>
31
+ <li><?php n2_e('Application Name can be anything'); ?></li>
32
+ <li><?php n2_e('Platform must be "Web"'); ?></li>
33
+ <li><?php n2_e('Write a short description about your site'); ?></li>
34
+ <li><?php n2_e('Fill the captcha'); ?></li>
35
+ <li><?php n2_e('Click the "ADD APPLICATION" button'); ?></li>
36
+ <li><?php n2_e('Then you can copy and paste your Client ID and Client secret to this form and Save it'); ?></li>
37
+ </ol>
38
+ </div>
39
+ </div>
40
+ <?php
41
+ $values = N2ImageAviary::loadSettings();
42
+ if ($values['public'] && $values['secret']):
43
+ ?>
44
+ <div class="n2-form-tab ">
45
+ <div class="n2-h2 n2-content-box-title-bg"><?php n2_e('High resolution feature'); ?></div>
46
+
47
+ <div class="n2-description">
48
+ <p><?php n2_e('By default Aviary is limited in the image size up to 1 megapixel. If you would like to edit bigger images, you can ask them (it\'s free) to enable high resolution image support on your app. '); ?></p>
49
+ <a class="n2-button n2-button-big n2-button-green"
50
+ href="mailto:websupport@creativesdk.zendesk.com?Subject=Web%20High%20Resolution%20Upgrade%20Inquiry&Body=Hello%2C%0AI%20would%20like%20to%20ask%20you%20to%20enable%20high%20resolution%20image%20support%20on%20my%20app.%0AMy%20Client%20id%20is%3A%20<?php echo $values['public']; ?>%0A%0AName%20of%20your%20company%3A%20%0ANumber%20of%20monthly%20active%20web%20users%3A%2010">
51
+ <?php n2_e('Request access to high resolution API'); ?>
52
+ </a>
53
+ </div>
54
+ </div>
55
+ <?php
56
+ endif;
57
+ $_class->renderAviaryConfigurationForm();
app/code/community/Nextend2/library/applications/system/backend/views/settings/fonts.phtml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $_class N2SystemBackendSettingsView
4
+ * @see Actions
5
+ */
6
+ $this->widget->init('topbar', array(
7
+ "actions" => array(
8
+ N2Html::tag('a', array(
9
+ 'href' => '#',
10
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
11
+ 'onclick' => 'return NextendForm.submit("#nextend-config");'
12
+ ), n2_('Save'))
13
+ )
14
+ ));
15
+
16
+ ?>
17
+ <div class="n2-heading-bar">
18
+ <div class="n2-h1 n2-heading"><?php echo n2_e('Fonts Configuration'); ?></div>
19
+ </div>
20
+ <?php
21
+ $_class->renderFontsConfigurationForm();
app/code/community/Nextend2/library/applications/system/backend/views/settings/index.phtml ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $this->widget->init('topbar', array(
3
+ "actions" => array(
4
+ N2Html::tag('a', array(
5
+ 'href' => '#',
6
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
7
+ 'onclick' => 'return NextendForm.submit("#nextend-config");'
8
+ ), n2_('Save'))
9
+ )
10
+ ));
11
+ ?>
12
+ <div class="n2-heading-bar">
13
+ <div class="n2-h1 n2-heading"><?php n2_e('General settings'); ?></div>
14
+ </div>
15
+ <?php
16
+ $_class->renderGlobalConfigurationForm();
app/code/community/Nextend2/library/applications/system/backend/views/style/index.phtml ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $model N2SystemStyleModel
4
+ */
5
+
6
+ $sets = $model->getSets();
7
+
8
+ N2StyleRenderer::$sets[] = $sets[0]['id'];
9
+
10
+ $styles = array();
11
+ foreach (array_unique(N2StyleRenderer::$sets) AS $setId) {
12
+ $styles[$setId] = $model->getVisuals($setId);
13
+ }
14
+
15
+ N2JS::addFirstCode("
16
+ new NextendStyleManager({
17
+ setsIdentifier: '" . $model->type . "set',
18
+ sets: " . json_encode($sets) . ",
19
+ visuals: " . json_encode($styles) . ",
20
+ renderer: {
21
+ pre: '" . N2StyleRenderer::$pre . "',
22
+ usedStyles: " . json_encode(N2StyleRenderer::$styles) . ",
23
+ modes: " . json_encode(N2StyleRenderer::$mode) . "
24
+ },
25
+ ajaxUrl: '" . $this->appType->router->createAjaxUrl(array('style/index')) . "'
26
+ });
27
+ ");
28
+ ?>
29
+ <div class="n2-form-tab ">
30
+ <div class="n2-heading-controls n2-content-box-title-bg">
31
+ <div class="n2-table n2-table-fixed">
32
+ <div class="n2-tr">
33
+ <div class="n2-td n2-h2">
34
+ <?php n2_e('Style settings'); ?>
35
+ </div>
36
+
37
+ <div class="n2-td n2-last n2-visual-editor-tabs">
38
+ <a href="#" class="n2-button n2-button-v n2-button-medium n2-button-grey n2-editor-clear-tab n2-h5 n2-uc"
39
+ style="display: none;"><?php n2_e('Clear tab'); ?></a>
40
+
41
+ <div class="n2-form-element-radio-tab">
42
+ <div class="n2-radio-option n2-h4 n2-first n2-last n2-active">
43
+ #0
44
+ </div>
45
+ <input type="hidden" autocomplete="off" value="0" name="n2-style-editor-tabs"
46
+ id="n2-style-editor-tabs">
47
+ </div>
48
+ </div>
49
+ </div>
50
+ </div>
51
+ </div>
52
+
53
+ <div>
54
+ <?php
55
+ $model->renderForm();
56
+ ?>
57
+ </div>
58
+ </div>
59
+
60
+ <div class="n2-form-tab n2-editor-preview-box">
61
+ <div class="n2-heading-controls n2-content-box-title-bg">
62
+ <div class="n2-table n2-table-fixed">
63
+ <div class="n2-tr">
64
+ <div class="n2-td n2-h2">
65
+ <?php n2_e('Preview'); ?>
66
+ </div>
67
+
68
+ <div class="n2-td n2-last n2-visual-editor-preview-tab">
69
+ <div class="n2-form-element-radio-tab n2-expert">
70
+ <div class="n2-radio-option n2-h4 n2-first n2-last n2-active">
71
+ <?php n2_e('Default'); ?>
72
+ </div>
73
+ <input type="hidden" autocomplete="off" value="0" name="n2-style-editor-preview-mode"
74
+ id="n2-style-editor-preview-mode">
75
+ </div>
76
+ <div class="n2-editor-background-color">
77
+ <div style="" class="n2-form-element-text n2-form-element-color n2-border-radius">
78
+ <div class="n2-sp-replacer">
79
+ <div class="n2-sp-preview">
80
+ <div class="n2-sp-preview-inner"></div>
81
+ </div>
82
+ <div class="n2-sp-dd">â–²</div>
83
+ </div>
84
+ <input type="text" autocomplete="off" class="n2-h5" value="ced3d5"
85
+ name="n2-style-editor-background-color" id="n2-style-editor-background-color">
86
+ </div>
87
+ </div>
88
+ </div>
89
+ </div>
90
+ </div>
91
+ </div>
92
+
93
+ <div id="n2-style-editor-preview">
94
+ </div>
95
+ </div>
96
+
97
+ <?php
98
+ $model->renderFormExtra();
99
+ ?>
app/code/community/Nextend2/library/applications/system/backend/views/style/topbar.phtml ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "menu" => array(
5
+ N2Html::tag('div', array(
6
+ 'class' => 'n2-form-dark'
7
+ ), N2Html::tag('a', array(
8
+ 'href' => '#',
9
+ 'id' => 'n2-style-editor-set-as-linked',
10
+ 'class' => 'n2-button n2-button-blue n2-button-medium n2-h5 n2-b n2-uc',
11
+ ), n2_('Apply as linked')))
12
+ ),
13
+ "actions" => array(
14
+ N2Html::tag('a', array(
15
+ 'href' => '#',
16
+ 'id' => 'n2-style-editor-cancel',
17
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc'
18
+ ), n2_('Cancel')),
19
+ N2Html::tag('a', array(
20
+ 'href' => '#',
21
+ 'id' => 'n2-style-editor-save',
22
+ 'class' => 'n2-button n2-button-green n2-button-big n2-h4 n2-b n2-uc',
23
+ ), n2_('Apply'))
24
+ ),
25
+ 'fixTo' => false
26
+ ));
27
+
app/code/community/Nextend2/library/applications/system/models/Install.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class N2SystemInstallModel extends N2Model
5
+ {
6
+
7
+ private static $sql = array(
8
+ "CREATE TABLE IF NOT EXISTS `#__nextend2_image_storage` (
9
+ `id` INT(11) NOT NULL AUTO_INCREMENT,
10
+ `hash` VARCHAR(32) NOT NULL,
11
+ `image` TEXT NOT NULL,
12
+ `value` MEDIUMTEXT NOT NULL,
13
+ PRIMARY KEY (`id`),
14
+ UNIQUE KEY `hash` (`hash`)
15
+ )
16
+ DEFAULT CHARSET = utf8;",
17
+ "CREATE TABLE IF NOT EXISTS `#__nextend2_section_storage` (
18
+ `id` INT(11) NOT NULL AUTO_INCREMENT,
19
+ `application` VARCHAR(20) NOT NULL,
20
+ `section` VARCHAR(32) NOT NULL,
21
+ `referencekey` VARCHAR(64) DEFAULT '',
22
+ `value` MEDIUMTEXT NOT NULL,
23
+ `system` INT(11) NOT NULL DEFAULT '0',
24
+ `editable` INT(11) NOT NULL DEFAULT '1',
25
+ PRIMARY KEY (`id`),
26
+ KEY `application` (`application`, `section`, `referencekey`),
27
+ KEY `application_2` (`application`, `section`)
28
+ )
29
+ DEFAULT CHARSET = utf8
30
+ AUTO_INCREMENT = 10000;"
31
+ );
32
+
33
+ public function install() {
34
+ foreach (self::$sql AS $query) {
35
+ $this->db->query($this->db->parsePrefix($query));
36
+ }
37
+
38
+ N2Loader::import('install', 'platform');
39
+ }
40
+ }
app/code/community/Nextend2/library/applications/system/models/animation.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import(array(
4
+ 'libraries.animations.storage'
5
+ ));
6
+
7
+ class N2SystemAnimationModel extends N2SystemVisualModel
8
+ {
9
+
10
+ public $type = 'animation';
11
+
12
+ public function renderForm() {
13
+ $form = new N2Form();
14
+ $form->loadXMLFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'forms' . DIRECTORY_SEPARATOR . 'animation' . DIRECTORY_SEPARATOR . 'form.xml');
15
+ $form->render('n2-animation-editor');
16
+ }
17
+
18
+ public function renderFormExtra() {
19
+ $form = new N2Form();
20
+ $form->loadXMLFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'forms' . DIRECTORY_SEPARATOR . 'animation' . DIRECTORY_SEPARATOR . 'extra.xml');
21
+ $form->render('n2-animation-editor');
22
+ }
23
+ }
app/code/community/Nextend2/library/applications/system/models/font.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import(array(
4
+ 'libraries.fonts.storage'
5
+ ));
6
+
7
+ class N2SystemFontModel extends N2SystemVisualModel
8
+ {
9
+
10
+ public $type = 'font';
11
+
12
+ public function renderForm() {
13
+ $form = new N2Form();
14
+ $form->loadXMLFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'forms' . DIRECTORY_SEPARATOR . 'font' . DIRECTORY_SEPARATOR . 'form.xml');
15
+ $form->render('n2-font-editor');
16
+ }
17
+
18
+ public function renderFormExtra() {
19
+ $form = new N2Form();
20
+ $form->loadXMLFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'forms' . DIRECTORY_SEPARATOR . 'font' . DIRECTORY_SEPARATOR . 'extra.xml');
21
+ $form->render('n2-font-editor');
22
+ }
23
+ }
app/code/community/Nextend2/library/applications/system/models/forms/animation/extra.xml ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="layeranimationglobal" label="Layer global animation properties">
3
+ <param name="special-zero" label="Special zero" type="onoff" default="0" class="n2-expert"/>
4
+
5
+ <param type="group" label="Repeat">
6
+ <param type="number" name="repeat-count" label="Count" default="0" style="width: 22px;">
7
+ <unit value="loop">Loop</unit>
8
+ </param>
9
+ <param type="number" name="repeat-start-delay" label="Start delay" default="0" style="width: 40px;">
10
+ <unit value="ms">ms</unit>
11
+ </param>
12
+ </param>
13
+
14
+ <param name="transformorigin" label="Transform origin" type="mixed" default="50|*|50|*|0" translateable="0">
15
+ <param type="numberautocomplete" sublabel="X" style="width: 40px;" values="0,50,100">
16
+ <unit value="%">%</unit>
17
+ </param>
18
+ <param type="numberautocomplete" sublabel="Y" style="width: 40px;" values="0,50,100">
19
+ <unit value="%">%</unit>
20
+ </param>
21
+ <param type="numberautocomplete" sublabel="Z" style="width: 40px;" values="0">
22
+ <unit value="px">px</unit>
23
+ </param>
24
+ </param>
25
+
26
+ <param label="Event" type="group">
27
+ <param type="autocomplete" name="play" label="Play" default="">
28
+ <option>LayerClick</option>
29
+ <option>LayerMouseEnter</option>
30
+ <option>LayerMouseLeave</option>
31
+ <option>SlideClick</option>
32
+ <option>SlideMouseEnter</option>
33
+ <option>SlideMouseLeave</option>
34
+ <option>SliderClick</option>
35
+ <option>SliderMouseEnter</option>
36
+ <option>SliderMouseLeave</option>
37
+ </param>
38
+ <param type="autocomplete" name="pause" label="Pause" default="">
39
+ <option>LayerClick</option>
40
+ <option>LayerMouseEnter</option>
41
+ <option>LayerMouseLeave</option>
42
+ <option>SlideClick</option>
43
+ <option>SlideMouseEnter</option>
44
+ <option>SlideMouseLeave</option>
45
+ <option>SliderClick</option>
46
+ <option>SliderMouseEnter</option>
47
+ <option>SliderMouseLeave</option>
48
+ <option>LoopRoundComplete</option>
49
+ </param>
50
+ <param type="autocomplete" name="stop" label="Stop" default="">
51
+ <option>LayerClick</option>
52
+ <option>LayerMouseEnter</option>
53
+ <option>LayerMouseLeave</option>
54
+ <option>SlideClick</option>
55
+ <option>SlideMouseEnter</option>
56
+ <option>SlideMouseLeave</option>
57
+ <option>SliderClick</option>
58
+ <option>SliderMouseEnter</option>
59
+ <option>SliderMouseLeave</option>
60
+ </param>
61
+ <param type="onoff" name="repeatable" label="Repeatable" default="0"/>
62
+ <param type="onoff" name="instant-out" label="Instant out" default="0"/>
63
+ </param>
64
+ </params>
65
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/animation/form.xml ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="firstrow" type="horizontal">
3
+ <param name="name" label="Name" type="text" default=""/>
4
+ <param name="duration" label="Duration" type="numberautocomplete" default="500" style="width: 40px;" min="0"
5
+ values="500,800,1000,1500,2000">
6
+ <unit value="ms">ms</unit>
7
+ </param>
8
+ <param name="delay" label="Delay" type="numberautocomplete" default="0" style="width: 40px;" min="0" values="0,500,800,1000,1500,2000">
9
+ <unit value="ms">ms</unit>
10
+ </param>
11
+ <param name="easing" label="Easing" type="jqueryeasing" default="easeOutCubic"/>
12
+
13
+ </params>
14
+ <params name="secondrow" type="horizontal">
15
+ <param name="opacity" label="Opacity" type="numberautocomplete" default="100" style="width: 22px;" min="0"
16
+ max="100" values="0,50,100">
17
+ <unit value="%">%</unit>
18
+ </param>
19
+
20
+ <param name="offset" label="Offset" type="mixed" default="0|*|0|*|0" translateable="0">
21
+ <param type="numberautocomplete" sublabel="X" style="width: 32px;" values="-400,-200,-100,0,100,200,400">
22
+ <unit value="px">px</unit>
23
+ </param>
24
+ <param type="numberautocomplete" sublabel="Y" style="width: 32px;" values="-400,-200,-100,0,100,200,400">
25
+ <unit value="px">px</unit>
26
+ </param>
27
+ <param type="number" sublabel="Z" style="width: 32px;" class="n2-expert">
28
+ <unit value="px">px</unit>
29
+ </param>
30
+ </param>
31
+
32
+ <param name="rotate" label="Rotate" type="mixed" default="0|*|0|*|0" translateable="0">
33
+ <param type="numberautocomplete" sublabel="X" style="width: 32px;" values="0,90,180,-90,-180">
34
+ <unit value="degree">°</unit>
35
+ </param>
36
+ <param type="numberautocomplete" sublabel="Y" style="width: 32px;" values="0,90,180,-90,-180">
37
+ <unit value="degree">°</unit>
38
+ </param>
39
+ <param type="numberautocomplete" sublabel="Z" style="width: 32px;" values="0,90,180,-90,-180">
40
+ <unit value="degree">°</unit>
41
+ </param>
42
+ </param>
43
+
44
+ <param name="scale" label="Scale" type="mixed" default="100|*|100|*|100" translateable="0">
45
+ <param type="numberautocomplete" sublabel="X" style="width: 32px;" min="0" values="0,50,100,150">
46
+ <unit value="%">%</unit>
47
+ </param>
48
+ <param type="numberautocomplete" sublabel="Y" style="width: 32px;" min="0" values="0,50,100,150">
49
+ <unit value="%">%</unit>
50
+ </param>
51
+ <param type="numberautocomplete" sublabel="Z" style="width: 32px;" min="0" values="0,50,100,150"
52
+ class="n2-expert">
53
+ <unit value="%">%</unit>
54
+ </param>
55
+ </param>
56
+
57
+ <param name="skew" label="Skew" type="number" default="0" style="width: 32px;" translateable="0"
58
+ class="n2-expert">
59
+ <unit value="%">%</unit>
60
+ </param>
61
+
62
+ </params>
63
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/animation/sets.xml ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <root>
2
+ <params name="animation-sets" label="Animation sets" type="naked">
3
+ <param type="list" name="sets" default=""/>
4
+ </params>
5
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/aviary.xml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="aviary" label="Adobe Creative SDK - Aviary">
3
+ <param type="token"/>
4
+ <param type="text" name="public" label="Client ID" default="" style="width: 250px;"/>
5
+ <param type="text" name="secret" label="Client secret" default="" style="width: 250px;"/>
6
+ </params>
7
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/font/element/decoration.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.form.element.checkbox');
3
+
4
+ class N2ElementDecoration extends N2ElementCheckbox
5
+ {
6
+
7
+ function fetchElement() {
8
+
9
+ return N2Html::tag('div', array(
10
+ 'class' => 'n2-form-element-decoration',
11
+ 'style' => N2XmlHelper::getAttribute($this->_xml, 'style')
12
+ ), parent::fetchElement());
13
+ }
14
+
15
+ function generateOptions(&$xml) {
16
+ $options = array(
17
+ 'bold' => 'n2-i n2-it n2-i-bold',
18
+ 'italic' => 'n2-i n2-it n2-i-italic',
19
+ 'underline' => 'n2-i n2-it n2-i-underline'
20
+ );
21
+
22
+ $length = count($options) - 1;
23
+
24
+ $html = '';
25
+ $i = 0;
26
+ foreach ($options AS $value => $class) {
27
+ $this->values[] = $value;
28
+
29
+ $html .= N2Html::tag('div', array(
30
+ 'class' => 'n2-checkbox-option n2-decoration-' . $value . ($this->isSelected($value) ? ' n2-active' : '') . ($i == 0 ? ' n2-first' : '') . ($i == $length ? ' n2-last' : '')
31
+ ), N2Html::tag('i', array('class' => $class)));
32
+ $i++;
33
+ }
34
+ return $html;
35
+ }
36
+ }
app/code/community/Nextend2/library/applications/system/models/forms/font/element/family.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.form.element.text');
3
+
4
+ class N2ElementFamily extends N2ElementText
5
+ {
6
+
7
+ function fetchElement() {
8
+ $html = parent::fetchElement();
9
+ $fontSettings = N2Fonts::loadSettings();
10
+ $families = explode("\n", $fontSettings['preset-families']);
11
+ sort($families);
12
+ N2JS::addInline('new NextendElementAutocompleteSimple("' . $this->_id . '", ' . json_encode($families) . ');');
13
+ return $html;
14
+ }
15
+
16
+ protected function getClass() {
17
+ return 'n2-form-element-autocomplete ui-front ' . parent::getClass();
18
+ }
19
+ }
app/code/community/Nextend2/library/applications/system/models/forms/font/element/fontpreset.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.form.element.skin');
3
+
4
+ class N2ElementFontPreset extends N2ElementSkin
5
+ {
6
+
7
+ function generateOptions(&$xml) {
8
+ $html = '';
9
+ if (!$this->fixedMode) {
10
+ $html .= '<option value="0" selected="selected">' . n2_('Choose') . '</option>';
11
+ }
12
+ $this->skins = array();
13
+ $fontSettings = N2Fonts::loadSettings();
14
+ $families = explode("\n", $fontSettings['preset-families']);
15
+ foreach ($families as $family) {
16
+ $family = trim($family, "\t\n\r\0\x0B'\"");
17
+ if (!empty($family)) {
18
+ $html .= '<option value="' . $family . '">' . $family . '</option>';
19
+ $this->skins[$family] = array();
20
+ $this->skins[$family]['family'] = $family;
21
+ }
22
+
23
+ }
24
+ return $html;
25
+ }
26
+ }
app/code/community/Nextend2/library/applications/system/models/forms/font/element/textalign.php ADDED
@@ -0,0 +1,31 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.form.element.radiotab');
3
+
4
+ class N2ElementTextAlign extends N2ElementRadioTab
5
+ {
6
+
7
+ protected $class = 'n2-form-element-radio-tab n2-form-element-textalign';
8
+
9
+ function generateOptions(&$xml) {
10
+ $options = array(
11
+ 'left' => 'n2-i n2-it n2-i-left',
12
+ 'center' => 'n2-i n2-it n2-i-center',
13
+ 'right' => 'n2-i n2-it n2-i-right',
14
+ 'justify' => 'n2-i n2-it n2-i-justify'
15
+ );
16
+ $length = count($options) - 1;
17
+
18
+ $this->values = array();
19
+ $html = '';
20
+ $i = 0;
21
+ foreach ($options AS $value => $class) {
22
+ $this->values[] = $value;
23
+
24
+ $html .= N2Html::tag('div', array(
25
+ 'class' => 'n2-radio-option' . ($this->isSelected($value) ? ' n2-active' : '') . ($i == 0 ? ' n2-first' : '') . ($i == $length ? ' n2-last' : '')
26
+ ), N2Html::tag('i', array('class' => $class)));
27
+ $i++;
28
+ }
29
+ return $html;
30
+ }
31
+ }
app/code/community/Nextend2/library/applications/system/models/forms/font/extra.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <root>
2
+ <params name="extracss" label="Extra CSS" type="raw">
3
+ <param name="extracss" label="" style="display: block; margin:20px;"
4
+ style2="width:100%;height:80px;resize:vertical;" type="textarea"/>
5
+ </params>
6
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/font/form.xml ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="firstrow" type="horizontal">
3
+ <param name="family" label="Family" style="width:150px;" type="family" default="Arial, Helvetica"/>
4
+ <param name="color" label="Color" type="color" alpha="1" default="000000FF"/>
5
+ <param name="size" label="Size" type="mixed" default="14|*|px" translateable="0">
6
+ <param type="numberautocomplete" style="width: 22px;" values="8,10,12,14,18,24,30,48,72"/>
7
+ <param type="switcher">
8
+ <unit value="px">px</unit>
9
+ <unit value="%">%</unit>
10
+ </param>
11
+ </param>
12
+ <param name="lineheight" label="Line height" type="textautocomplete" default="18px"
13
+ style="width:70px;" values="normal,1,1.2,1.5,1.8,2"/>
14
+ <param name="decoration" label="Decoration" type="decoration" default=""/>
15
+ <param name="textalign" type="textalign" label="Text align" default="left"/>
16
+
17
+ <param name="letterspacing" label="Letter spacing" type="textautocomplete" default="normal"
18
+ style="width:50px;" values="normal,2px,5px,10px,15px"/>
19
+ <param name="wordspacing" label="Word spacing" type="textautocomplete" default="normal"
20
+ style="width:50px;" values="normal,2px,5px,10px,15px"/>
21
+ <param name="texttransform" label="Transform" type="list" default="none" translateable="1">
22
+ <option value="none">None</option>
23
+ <option value="capitalize">Capitalize</option>
24
+ <option value="uppercase">Uppercase</option>
25
+ <option value="lowercase">Lowercase</option>
26
+ </param>
27
+
28
+ <param name="tshadow" label="Text shadow" type="mixed" default="0|*|0|*|1|*|000000FF"
29
+ translateable="0" class="n2-expert">
30
+ <param type="number" style="width: 32px;">
31
+ <unit value="px">px</unit>
32
+ </param>
33
+ <param type="number" style="width: 32px;">
34
+ <unit value="px">px</unit>
35
+ </param>
36
+ <param type="number" style="width: 32px;">
37
+ <unit value="px">px</unit>
38
+ </param>
39
+ <param type="color" alpha="1"/>
40
+ </param>
41
+ </params>
42
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/font/sets.xml ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <root>
2
+ <params name="font-sets" label="Font sets" type="naked">
3
+ <param type="list" name="sets" default=""/>
4
+ </params>
5
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/fonts.xml ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="fonts" label="Configuration">
3
+ <param type="text" name="default-family" label="Default family" default=""/>
4
+ <param type="textarea" name="preset-families" label="Preset font families"
5
+ style2="height: 300px; width: 500px;"/>
6
+ <param type="token"/>
7
+ </params>
8
+ <params name="font-services" label="Font services" type="raw" hidetitle="1">
9
+ <param name="font-services" type="pluginmatrix" label="" group="fontservices"
10
+ method="onFontServices" default="google"/>
11
+ </params>
12
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/globalconfig.xml ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="options" label="Options">
3
+ <param type="onoff" name="protocol-relative" label="Use protocol-relative URL" default="1"/>
4
+ <param type="onoff" name="show-joomla-admin-footer" label="Show Joomla admin footer" default="0"/>
5
+ </params>
6
+ <params name="javascript" label="JavaScript">
7
+ <param type="token"/>
8
+ <param type="onoff" name="jquery" label="Load jQuery on frontend" default="1"/>
9
+ <param type="onoff" name="gsap" label="Load GSAP on frontend" default="1"/>
10
+ <param type="onoff" name="async" label="Async" default="0"/>
11
+ <param type="onoff" name="combine-js" label="Combine" default="0"/>
12
+ <param type="onoff" name="minify-js" label="Minify" default="0"/>
13
+ <param type="text" name="scriptattributes" label="Script attributes" default=""/>
14
+ </params>
15
+ <params name="requests" label="API requests">
16
+ <param type="onoff" name="curl" label="Curl" default="1"/>
17
+ <param type="onoff" name="curl-clean-proxy" label="Clean Curl proxy" default="0"/>
18
+ </params>
19
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/image/form.xml ADDED
@@ -0,0 +1,73 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="desktop" label="Desktop">
3
+ <param name="desktop-preview" label="Preview" type="container"/>
4
+ <param name="desktop-size" label="Size" type="mixed" default="0|*|0" class="n2-expert">
5
+ <param label="Width" type="number" style="width: 40px;">
6
+ <unit>px</unit>
7
+ </param>
8
+ <param label="Width" type="number" style="width: 40px;">
9
+ <unit>px</unit>
10
+ </param>
11
+ </param>
12
+ </params>
13
+ <params name="desktop-retina" label="Desktop Retina">
14
+ <param name="desktop-retina-image" label="Image" type="image" default=""/>
15
+ <param name="desktop-retina-preview" label="Preview" type="container"/>
16
+ <param name="desktop-retina-size" label="Size" type="mixed" default="0|*|0" class="n2-expert">
17
+ <param label="Width" type="number" style="width: 40px;">
18
+ <unit>px</unit>
19
+ </param>
20
+ <param label="Width" type="number" style="width: 40px;">
21
+ <unit>px</unit>
22
+ </param>
23
+ </param>
24
+ </params>
25
+ <params name="tablet" label="Tablet">
26
+ <param name="tablet-image" label="Image" type="image" default=""/>
27
+ <param name="tablet-preview" label="Preview" type="container"/>
28
+ <param name="tablet-size" label="Size" type="mixed" default="0|*|0" class="n2-expert">
29
+ <param label="Width" type="number" style="width: 40px;">
30
+ <unit>px</unit>
31
+ </param>
32
+ <param label="Width" type="number" style="width: 40px;">
33
+ <unit>px</unit>
34
+ </param>
35
+ </param>
36
+ </params>
37
+ <params name="tablet-retina" label="Tablet Retina">
38
+ <param name="tablet-retina-image" label="Image" type="image" default=""/>
39
+ <param name="tablet-retina-preview" label="Preview" type="container"/>
40
+ <param name="tablet-retina-size" label="Size" type="mixed" default="0|*|0" class="n2-expert">
41
+ <param label="Width" type="number" style="width: 40px;">
42
+ <unit>px</unit>
43
+ </param>
44
+ <param label="Width" type="number" style="width: 40px;">
45
+ <unit>px</unit>
46
+ </param>
47
+ </param>
48
+ </params>
49
+ <params name="mobile" label="Mobile">
50
+ <param name="mobile-image" label="Image" type="image" default=""/>
51
+ <param name="mobile-preview" label="Preview" type="container"/>
52
+ <param name="mobile-size" label="Size" type="mixed" default="0|*|0" class="n2-expert">
53
+ <param label="Width" type="number" style="width: 40px;">
54
+ <unit>px</unit>
55
+ </param>
56
+ <param label="Width" type="number" style="width: 40px;">
57
+ <unit>px</unit>
58
+ </param>
59
+ </param>
60
+ </params>
61
+ <params name="mobile-retina" label="Mobile retina">
62
+ <param name="mobile-retina-image" label="Image" type="image" default=""/>
63
+ <param name="mobile-retina-preview" label="Preview" type="container"/>
64
+ <param name="mobile-retina-size" label="Size" type="mixed" default="0|*|0" class="n2-expert">
65
+ <param label="Width" type="number" style="width: 40px;">
66
+ <unit>px</unit>
67
+ </param>
68
+ <param label="Width" type="number" style="width: 40px;">
69
+ <unit>px</unit>
70
+ </param>
71
+ </param>
72
+ </params>
73
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/login.xml ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="login" label="Login">
3
+ <param name="user_name" type="text" label="User name" default="" style="width:200px;"/>
4
+ <param name="user_password" type="password" label="Password" default="" style="width:200px;"/>
5
+ <param type="token"/>
6
+ </params>
7
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/style/extra.xml ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
1
+ <root>
2
+ <params name="extracss" label="Extra CSS" type="raw">
3
+ <param name="extracss" label="" style="display: block; margin:20px;"
4
+ style2="width:100%;height:80px;resize:vertical;" type="textarea"/>
5
+ </params>
6
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/style/form.xml ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="firstrow" type="horizontal">
3
+ <param name="backgroundcolor" label="Background color" type="color" alpha="1" default="000000FF"/>
4
+
5
+ <param name="padding" label="Padding" type="mixed" default="0|*|0|*|0|*|0|*|px" translateable="0">
6
+ <param type="numberautocomplete" style="width: 22px;" values="0,5,10,20,30"/>
7
+ <param type="numberautocomplete" style="width: 22px;" values="0,5,10,20,30"/>
8
+ <param type="numberautocomplete" style="width: 22px;" values="0,5,10,20,30"/>
9
+ <param type="numberautocomplete" style="width: 22px;" values="0,5,10,20,30"/>
10
+ <param type="switcher">
11
+ <unit value="px">px</unit>
12
+ <unit value="em">em</unit>
13
+ <unit value="%">%</unit>
14
+ </param>
15
+ </param>
16
+
17
+ <param name="border" label="Border" type="mixed" default="0|*|solid|*|000000ff"
18
+ translateable="0">
19
+ <param type="number" style="width: 22px;">
20
+ <unit value="px">px</unit>
21
+ </param>
22
+ <param type="list" translateable="1">
23
+ <option value="none">None</option>
24
+ <option value="dotted">Dotted</option>
25
+ <option value="dashed">Dashed</option>
26
+ <option value="solid">Solid</option>
27
+ <option value="double">Double</option>
28
+ <option value="groove">Groove</option>
29
+ <option value="ridge">Ridge</option>
30
+ <option value="inset">Inset</option>
31
+ <option value="outset">Outset</option>
32
+ </param>
33
+ <param type="color" alpha="1"/>
34
+ </param>
35
+
36
+ <param name="borderradius" label="Border radius" type="numberautocomplete" default="0" values="0,3,5,10,99"
37
+ style="width: 22px;">
38
+ <unit value="px">px</unit>
39
+ </param>
40
+ <param name="boxshadow" label="Box shadow" type="mixed" default="0|*|0|*|0|*|0|*|000000ff" translateable="0">
41
+ <param type="number" style="width: 22px;">
42
+ <unit value="px">px</unit>
43
+ </param>
44
+ <param type="number" style="width: 22px;">
45
+ <unit value="px">px</unit>
46
+ </param>
47
+ <param type="number" style="width: 22px;">
48
+ <unit value="px">px</unit>
49
+ </param>
50
+ <param type="number" style="width: 22px;">
51
+ <unit value="px">px</unit>
52
+ </param>
53
+ <param type="color" alpha="1"/>
54
+ </param>
55
+
56
+
57
+ </params>
58
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/style/sets.xml ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <root>
2
+ <params name="style-sets" label="Style sets" type="naked">
3
+ <param type="list" name="sets" default=""/>
4
+ </params>
5
+ </root>
app/code/community/Nextend2/library/applications/system/models/image.php ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.image.manager');
3
+
4
+ class N2SystemImageModel extends N2SystemVisualModel
5
+ {
6
+
7
+ public $type = 'image';
8
+
9
+ public function __construct() {
10
+ $this->storage = new N2StorageImage();
11
+ }
12
+
13
+ public function renderForm() {
14
+ $form = new N2Form();
15
+ $form->loadXMLFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'forms' . DIRECTORY_SEPARATOR . 'image' . DIRECTORY_SEPARATOR . 'form.xml');
16
+ $form->render('n2-image-editor');
17
+ }
18
+
19
+ public function addVisual($image, $visual) {
20
+
21
+ $visualId = $this->storage->add($image, $visual);
22
+
23
+ $visual = $this->storage->getById($visualId);
24
+ if (!empty($visual)) {
25
+ return $visual;
26
+ }
27
+ return false;
28
+ }
29
+
30
+ public function getVisual($image) {
31
+ return $this->storage->getByImage($image);
32
+ }
33
+
34
+ public function deleteVisual($id) {
35
+ $visual = $this->storage->getById($id);
36
+ $this->storage->deleteById($id);
37
+ return $visual;
38
+ }
39
+
40
+ public function changeVisual($id, $value) {
41
+ if ($this->storage->setById($id, $value)) {
42
+ return $this->storage->getById($id);
43
+ }
44
+ return false;
45
+ }
46
+
47
+ public function getVisuals($setId) {
48
+ return $this->storage->getAll();
49
+ }
50
+ }
app/code/community/Nextend2/library/applications/system/models/login.php ADDED
@@ -0,0 +1,19 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class N2SystemLoginModel extends N2Model
5
+ {
6
+
7
+ public static function renderForm() {
8
+
9
+ $configurationXmlFile = dirname(__FILE__) . '/forms/login.xml';
10
+
11
+ N2Loader::import('libraries.form.form');
12
+ $form = new N2Form(N2Base::getApplication('system')->getApplicationType('backend'));
13
+
14
+
15
+ $form->loadXMLFile($configurationXmlFile);
16
+
17
+ return $form->render('login');
18
+ }
19
+ }
app/code/community/Nextend2/library/applications/system/models/style.php ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import(array(
4
+ 'libraries.stylemanager.storage'
5
+ ));
6
+
7
+ class N2SystemStyleModel extends N2SystemVisualModel
8
+ {
9
+
10
+ public $type = 'style';
11
+
12
+ public function renderForm() {
13
+ $form = new N2Form();
14
+ $form->loadXMLFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'forms' . DIRECTORY_SEPARATOR . 'style' . DIRECTORY_SEPARATOR . 'form.xml');
15
+ $form->render('n2-style-editor');
16
+ }
17
+
18
+ public function renderFormExtra() {
19
+ $form = new N2Form();
20
+ $form->loadXMLFile(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'forms' . DIRECTORY_SEPARATOR . 'style' . DIRECTORY_SEPARATOR . 'extra.xml');
21
+ $form->render('n2-style-editor');
22
+ }
23
+ }
app/code/community/Nextend2/library/applications/system/models/visual.php ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemVisualModel extends N2Model
4
+ {
5
+
6
+ public $type = '';
7
+
8
+ public $storage;
9
+
10
+ public function __construct($tableName = null) {
11
+
12
+ $this->storage = N2Base::getApplication('system')->storage;
13
+ parent::__construct($tableName);
14
+ }
15
+
16
+ public function renderSetsForm() {
17
+
18
+ $configurationXmlFile = $this->getPath() . '/forms/' . $this->type . '/sets.xml';
19
+
20
+ N2Loader::import('libraries.form.form');
21
+ $form = new N2Form();
22
+ $form->loadXMLFile($configurationXmlFile);
23
+
24
+ echo $form->render($this->type . 'set');
25
+ }
26
+
27
+ protected function getPath() {
28
+ return dirname(__FILE__);
29
+ }
30
+
31
+ public function getSets() {
32
+ return $this->storage->getAll($this->type . 'set');
33
+ }
34
+
35
+ public function getSetByVisualId($visualId) {
36
+ $visual = $this->storage->getById($visualId, $this->type);
37
+ if (!empty($visual)) {
38
+ return array(
39
+ 'setId' => $visual['referencekey'],
40
+ 'visuals' => $this->getVisuals($visual['referencekey'])
41
+ );
42
+ }
43
+ return false;
44
+ }
45
+
46
+ public function createSet($name) {
47
+
48
+ $setId = $this->storage->add($this->type . 'set', null, $name);
49
+
50
+ $set = $this->storage->getById($setId, $this->type . 'set');
51
+ if (!empty($set) && $set['section'] == $this->type . 'set') {
52
+ return $set;
53
+ }
54
+ return false;
55
+ }
56
+
57
+ public function renameSet($setId, $name) {
58
+ $set = $this->storage->getById($setId, $this->type . 'set');
59
+ if (!empty($set) && $set['section'] == $this->type . 'set' && $set['editable']) {
60
+ if ($this->storage->setById($setId, $name)) {
61
+ $set['value'] = $name;
62
+ return $set;
63
+ }
64
+ }
65
+ return false;
66
+ }
67
+
68
+ public function deleteSet($setId) {
69
+ $set = $this->storage->getById($setId, $this->type . 'set');
70
+ if (!empty($set) && $set['section'] == $this->type . 'set' && $set['editable'] && $set['system'] == 0) {
71
+ if ($this->storage->deleteById($setId)) {
72
+ return $set;
73
+ }
74
+ }
75
+ return false;
76
+ }
77
+
78
+ public function addVisual($setId, $visual) {
79
+
80
+ $visualId = $this->storage->add($this->type, $setId, $visual);
81
+
82
+ $visual = $this->storage->getById($visualId, $this->type);
83
+ if (!empty($visual) && $visual['section'] == $this->type) {
84
+ return $visual;
85
+ }
86
+ return false;
87
+ }
88
+
89
+ public function deleteVisual($id) {
90
+ $visual = $this->storage->getById($id, $this->type);
91
+ if (!empty($visual) && $visual['section'] == $this->type) {
92
+ $this->storage->deleteById($id);
93
+ return $visual;
94
+ }
95
+ return false;
96
+ }
97
+
98
+ public function changeVisual($id, $value) {
99
+ if ($this->storage->setById($id, $value)) {
100
+ return $this->storage->getById($id, $this->type);
101
+ }
102
+ return false;
103
+ }
104
+
105
+ public function getVisuals($setId) {
106
+ return $this->storage->getAll($this->type, $setId);
107
+ }
108
+
109
+ }
app/code/community/Nextend2/library/applications/system/plugins/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $mdir = dirname(__FILE__).DIRECTORY_SEPARATOR;
5
+ foreach(N2Filesystem::folders($mdir) AS $mfolder){
6
+ $mfile = $mdir.$mfolder.DIRECTORY_SEPARATOR.'loadplugin.php';
7
+ if(N2Filesystem::fileexists($mfile)){
8
+ require_once($mfile);
9
+ }
10
+ }
app/code/community/Nextend2/library/applications/system/plugins/nextendfontservices/google/google.php ADDED
@@ -0,0 +1,809 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemPluginFontServiceGoogle extends N2PluginBase
4
+ {
5
+
6
+ //<editor-fold desc="Google font list">
7
+ private static $fonts = array(
8
+ 'ABeeZee',
9
+ 'Abel',
10
+ 'Abril Fatface',
11
+ 'Aclonica',
12
+ 'Acme',
13
+ 'Actor',
14
+ 'Adamina',
15
+ 'Advent Pro',
16
+ 'Aguafina Script',
17
+ 'Akronim',
18
+ 'Aladin',
19
+ 'Aldrich',
20
+ 'Alef',
21
+ 'Alegreya',
22
+ 'Alegreya SC',
23
+ 'Alegreya Sans',
24
+ 'Alegreya Sans SC',
25
+ 'Alex Brush',
26
+ 'Alfa Slab One',
27
+ 'Alice',
28
+ 'Alike',
29
+ 'Alike Angular',
30
+ 'Allan',
31
+ 'Allerta',
32
+ 'Allerta Stencil',
33
+ 'Allura',
34
+ 'Almendra',
35
+ 'Almendra Display',
36
+ 'Almendra SC',
37
+ 'Amarante',
38
+ 'Amaranth',
39
+ 'Amatic SC',
40
+ 'Amethysta',
41
+ 'Amiri',
42
+ 'Anaheim',
43
+ 'Andada',
44
+ 'Andika',
45
+ 'Angkor',
46
+ 'Annie Use Your Telescope',
47
+ 'Anonymous Pro',
48
+ 'Antic',
49
+ 'Antic Didone',
50
+ 'Antic Slab',
51
+ 'Anton',
52
+ 'Arapey',
53
+ 'Arbutus',
54
+ 'Arbutus Slab',
55
+ 'Architects Daughter',
56
+ 'Archivo Black',
57
+ 'Archivo Narrow',
58
+ 'Arimo',
59
+ 'Arizonia',
60
+ 'Armata',
61
+ 'Artifika',
62
+ 'Arvo',
63
+ 'Asap',
64
+ 'Asset',
65
+ 'Astloch',
66
+ 'Asul',
67
+ 'Atomic Age',
68
+ 'Aubrey',
69
+ 'Audiowide',
70
+ 'Autour One',
71
+ 'Average',
72
+ 'Average Sans',
73
+ 'Averia Gruesa Libre',
74
+ 'Averia Libre',
75
+ 'Averia Sans Libre',
76
+ 'Averia Serif Libre',
77
+ 'Bad Script',
78
+ 'Balthazar',
79
+ 'Bangers',
80
+ 'Basic',
81
+ 'Battambang',
82
+ 'Baumans',
83
+ 'Bayon',
84
+ 'Belgrano',
85
+ 'Belleza',
86
+ 'BenchNine',
87
+ 'Bentham',
88
+ 'Berkshire Swash',
89
+ 'Bevan',
90
+ 'Bigelow Rules',
91
+ 'Bigshot One',
92
+ 'Bilbo',
93
+ 'Bilbo Swash Caps',
94
+ 'Bitter',
95
+ 'Black Ops One',
96
+ 'Bokor',
97
+ 'Bonbon',
98
+ 'Boogaloo',
99
+ 'Bowlby One',
100
+ 'Bowlby One SC',
101
+ 'Brawler',
102
+ 'Bree Serif',
103
+ 'Bubblegum Sans',
104
+ 'Bubbler One',
105
+ 'Buda',
106
+ 'Buenard',
107
+ 'Butcherman',
108
+ 'Butterfly Kids',
109
+ 'Cabin',
110
+ 'Cabin Condensed',
111
+ 'Cabin Sketch',
112
+ 'Caesar Dressing',
113
+ 'Cagliostro',
114
+ 'Calligraffitti',
115
+ 'Cambay',
116
+ 'Cambo',
117
+ 'Candal',
118
+ 'Cantarell',
119
+ 'Cantata One',
120
+ 'Cantora One',
121
+ 'Capriola',
122
+ 'Cardo',
123
+ 'Carme',
124
+ 'Carrois Gothic',
125
+ 'Carrois Gothic SC',
126
+ 'Carter One',
127
+ 'Caudex',
128
+ 'Cedarville Cursive',
129
+ 'Ceviche One',
130
+ 'Changa One',
131
+ 'Chango',
132
+ 'Chau Philomene One',
133
+ 'Chela One',
134
+ 'Chelsea Market',
135
+ 'Chenla',
136
+ 'Cherry Cream Soda',
137
+ 'Cherry Swash',
138
+ 'Chewy',
139
+ 'Chicle',
140
+ 'Chivo',
141
+ 'Cinzel',
142
+ 'Cinzel Decorative',
143
+ 'Clicker Script',
144
+ 'Coda',
145
+ 'Coda Caption',
146
+ 'Codystar',
147
+ 'Combo',
148
+ 'Comfortaa',
149
+ 'Coming Soon',
150
+ 'Concert One',
151
+ 'Condiment',
152
+ 'Content',
153
+ 'Contrail One',
154
+ 'Convergence',
155
+ 'Cookie',
156
+ 'Copse',
157
+ 'Corben',
158
+ 'Courgette',
159
+ 'Cousine',
160
+ 'Coustard',
161
+ 'Covered By Your Grace',
162
+ 'Crafty Girls',
163
+ 'Creepster',
164
+ 'Crete Round',
165
+ 'Crimson Text',
166
+ 'Croissant One',
167
+ 'Crushed',
168
+ 'Cuprum',
169
+ 'Cutive',
170
+ 'Cutive Mono',
171
+ 'Damion',
172
+ 'Dancing Script',
173
+ 'Dangrek',
174
+ 'Dawning of a New Day',
175
+ 'Days One',
176
+ 'Dekko',
177
+ 'Delius',
178
+ 'Delius Swash Caps',
179
+ 'Delius Unicase',
180
+ 'Della Respira',
181
+ 'Denk One',
182
+ 'Devonshire',
183
+ 'Dhurjati',
184
+ 'Didact Gothic',
185
+ 'Diplomata',
186
+ 'Diplomata SC',
187
+ 'Domine',
188
+ 'Donegal One',
189
+ 'Doppio One',
190
+ 'Dorsa',
191
+ 'Dosis',
192
+ 'Dr Sugiyama',
193
+ 'Droid Sans',
194
+ 'Droid Sans Mono',
195
+ 'Droid Serif',
196
+ 'Duru Sans',
197
+ 'Dynalight',
198
+ 'EB Garamond',
199
+ 'Eagle Lake',
200
+ 'Eater',
201
+ 'Economica',
202
+ 'Ek Mukta',
203
+ 'Electrolize',
204
+ 'Elsie',
205
+ 'Elsie Swash Caps',
206
+ 'Emblema One',
207
+ 'Emilys Candy',
208
+ 'Engagement',
209
+ 'Englebert',
210
+ 'Enriqueta',
211
+ 'Erica One',
212
+ 'Esteban',
213
+ 'Euphoria Script',
214
+ 'Ewert',
215
+ 'Exo',
216
+ 'Exo 2',
217
+ 'Expletus Sans',
218
+ 'Fanwood Text',
219
+ 'Fascinate',
220
+ 'Fascinate Inline',
221
+ 'Faster One',
222
+ 'Fasthand',
223
+ 'Fauna One',
224
+ 'Federant',
225
+ 'Federo',
226
+ 'Felipa',
227
+ 'Fenix',
228
+ 'Finger Paint',
229
+ 'Fira Mono',
230
+ 'Fira Sans',
231
+ 'Fjalla One',
232
+ 'Fjord One',
233
+ 'Flamenco',
234
+ 'Flavors',
235
+ 'Fondamento',
236
+ 'Fontdiner Swanky',
237
+ 'Forum',
238
+ 'Francois One',
239
+ 'Freckle Face',
240
+ 'Fredericka the Great',
241
+ 'Fredoka One',
242
+ 'Freehand',
243
+ 'Fresca',
244
+ 'Frijole',
245
+ 'Fruktur',
246
+ 'Fugaz One',
247
+ 'GFS Didot',
248
+ 'GFS Neohellenic',
249
+ 'Gabriela',
250
+ 'Gafata',
251
+ 'Galdeano',
252
+ 'Galindo',
253
+ 'Gentium Basic',
254
+ 'Gentium Book Basic',
255
+ 'Geo',
256
+ 'Geostar',
257
+ 'Geostar Fill',
258
+ 'Germania One',
259
+ 'Gidugu',
260
+ 'Gilda Display',
261
+ 'Give You Glory',
262
+ 'Glass Antiqua',
263
+ 'Glegoo',
264
+ 'Gloria Hallelujah',
265
+ 'Goblin One',
266
+ 'Gochi Hand',
267
+ 'Gorditas',
268
+ 'Goudy Bookletter 1911',
269
+ 'Graduate',
270
+ 'Grand Hotel',
271
+ 'Gravitas One',
272
+ 'Great Vibes',
273
+ 'Griffy',
274
+ 'Gruppo',
275
+ 'Gudea',
276
+ 'Gurajada',
277
+ 'Habibi',
278
+ 'Halant',
279
+ 'Hammersmith One',
280
+ 'Hanalei',
281
+ 'Hanalei Fill',
282
+ 'Handlee',
283
+ 'Hanuman',
284
+ 'Happy Monkey',
285
+ 'Headland One',
286
+ 'Henny Penny',
287
+ 'Herr Von Muellerhoff',
288
+ 'Hind',
289
+ 'Holtwood One SC',
290
+ 'Homemade Apple',
291
+ 'Homenaje',
292
+ 'IM Fell DW Pica',
293
+ 'IM Fell DW Pica SC',
294
+ 'IM Fell Double Pica',
295
+ 'IM Fell Double Pica SC',
296
+ 'IM Fell English',
297
+ 'IM Fell English SC',
298
+ 'IM Fell French Canon',
299
+ 'IM Fell French Canon SC',
300
+ 'IM Fell Great Primer',
301
+ 'IM Fell Great Primer SC',
302
+ 'Iceberg',
303
+ 'Iceland',
304
+ 'Imprima',
305
+ 'Inconsolata',
306
+ 'Inder',
307
+ 'Indie Flower',
308
+ 'Inika',
309
+ 'Irish Grover',
310
+ 'Istok Web',
311
+ 'Italiana',
312
+ 'Italianno',
313
+ 'Jacques Francois',
314
+ 'Jacques Francois Shadow',
315
+ 'Jim Nightshade',
316
+ 'Jockey One',
317
+ 'Jolly Lodger',
318
+ 'Josefin Sans',
319
+ 'Josefin Slab',
320
+ 'Joti One',
321
+ 'Judson',
322
+ 'Julee',
323
+ 'Julius Sans One',
324
+ 'Junge',
325
+ 'Jura',
326
+ 'Just Another Hand',
327
+ 'Just Me Again Down Here',
328
+ 'Kalam',
329
+ 'Kameron',
330
+ 'Kantumruy',
331
+ 'Karla',
332
+ 'Karma',
333
+ 'Kaushan Script',
334
+ 'Kavoon',
335
+ 'Kdam Thmor',
336
+ 'Keania One',
337
+ 'Kelly Slab',
338
+ 'Kenia',
339
+ 'Khand',
340
+ 'Khmer',
341
+ 'Khula',
342
+ 'Kite One',
343
+ 'Knewave',
344
+ 'Kotta One',
345
+ 'Koulen',
346
+ 'Kranky',
347
+ 'Kreon',
348
+ 'Kristi',
349
+ 'Krona One',
350
+ 'La Belle Aurore',
351
+ 'Laila',
352
+ 'Lakki Reddy',
353
+ 'Lancelot',
354
+ 'Lateef',
355
+ 'Lato',
356
+ 'League Script',
357
+ 'Leckerli One',
358
+ 'Ledger',
359
+ 'Lekton',
360
+ 'Lemon',
361
+ 'Libre Baskerville',
362
+ 'Life Savers',
363
+ 'Lilita One',
364
+ 'Lily Script One',
365
+ 'Limelight',
366
+ 'Linden Hill',
367
+ 'Lobster',
368
+ 'Lobster Two',
369
+ 'Londrina Outline',
370
+ 'Londrina Shadow',
371
+ 'Londrina Sketch',
372
+ 'Londrina Solid',
373
+ 'Lora',
374
+ 'Love Ya Like A Sister',
375
+ 'Loved by the King',
376
+ 'Lovers Quarrel',
377
+ 'Luckiest Guy',
378
+ 'Lusitana',
379
+ 'Lustria',
380
+ 'Macondo',
381
+ 'Macondo Swash Caps',
382
+ 'Magra',
383
+ 'Maiden Orange',
384
+ 'Mako',
385
+ 'Mallanna',
386
+ 'Mandali',
387
+ 'Marcellus',
388
+ 'Marcellus SC',
389
+ 'Marck Script',
390
+ 'Margarine',
391
+ 'Marko One',
392
+ 'Marmelad',
393
+ 'Martel Sans',
394
+ 'Marvel',
395
+ 'Mate',
396
+ 'Mate SC',
397
+ 'Maven Pro',
398
+ 'McLaren',
399
+ 'Meddon',
400
+ 'MedievalSharp',
401
+ 'Medula One',
402
+ 'Megrim',
403
+ 'Meie Script',
404
+ 'Merienda',
405
+ 'Merienda One',
406
+ 'Merriweather',
407
+ 'Merriweather Sans',
408
+ 'Metal',
409
+ 'Metal Mania',
410
+ 'Metamorphous',
411
+ 'Metrophobic',
412
+ 'Michroma',
413
+ 'Milonga',
414
+ 'Miltonian',
415
+ 'Miltonian Tattoo',
416
+ 'Miniver',
417
+ 'Miss Fajardose',
418
+ 'Modak',
419
+ 'Modern Antiqua',
420
+ 'Molengo',
421
+ 'Molle',
422
+ 'Monda',
423
+ 'Monofett',
424
+ 'Monoton',
425
+ 'Monsieur La Doulaise',
426
+ 'Montaga',
427
+ 'Montez',
428
+ 'Montserrat',
429
+ 'Montserrat Alternates',
430
+ 'Montserrat Subrayada',
431
+ 'Moul',
432
+ 'Moulpali',
433
+ 'Mountains of Christmas',
434
+ 'Mouse Memoirs',
435
+ 'Mr Bedfort',
436
+ 'Mr Dafoe',
437
+ 'Mr De Haviland',
438
+ 'Mrs Saint Delafield',
439
+ 'Mrs Sheppards',
440
+ 'Muli',
441
+ 'Mystery Quest',
442
+ 'NTR',
443
+ 'Neucha',
444
+ 'Neuton',
445
+ 'New Rocker',
446
+ 'News Cycle',
447
+ 'Niconne',
448
+ 'Nixie One',
449
+ 'Nobile',
450
+ 'Nokora',
451
+ 'Norican',
452
+ 'Nosifer',
453
+ 'Nothing You Could Do',
454
+ 'Noticia Text',
455
+ 'Noto Sans',
456
+ 'Noto Serif',
457
+ 'Nova Cut',
458
+ 'Nova Flat',
459
+ 'Nova Mono',
460
+ 'Nova Oval',
461
+ 'Nova Round',
462
+ 'Nova Script',
463
+ 'Nova Slim',
464
+ 'Nova Square',
465
+ 'Numans',
466
+ 'Nunito',
467
+ 'Odor Mean Chey',
468
+ 'Offside',
469
+ 'Old Standard TT',
470
+ 'Oldenburg',
471
+ 'Oleo Script',
472
+ 'Oleo Script Swash Caps',
473
+ 'Open Sans',
474
+ 'Open Sans Condensed',
475
+ 'Oranienbaum',
476
+ 'Orbitron',
477
+ 'Oregano',
478
+ 'Orienta',
479
+ 'Original Surfer',
480
+ 'Oswald',
481
+ 'Over the Rainbow',
482
+ 'Overlock',
483
+ 'Overlock SC',
484
+ 'Ovo',
485
+ 'Oxygen',
486
+ 'Oxygen Mono',
487
+ 'PT Mono',
488
+ 'PT Sans',
489
+ 'PT Sans Caption',
490
+ 'PT Sans Narrow',
491
+ 'PT Serif',
492
+ 'PT Serif Caption',
493
+ 'Pacifico',
494
+ 'Paprika',
495
+ 'Parisienne',
496
+ 'Passero One',
497
+ 'Passion One',
498
+ 'Pathway Gothic One',
499
+ 'Patrick Hand',
500
+ 'Patrick Hand SC',
501
+ 'Patua One',
502
+ 'Paytone One',
503
+ 'Peddana',
504
+ 'Peralta',
505
+ 'Permanent Marker',
506
+ 'Petit Formal Script',
507
+ 'Petrona',
508
+ 'Philosopher',
509
+ 'Piedra',
510
+ 'Pinyon Script',
511
+ 'Pirata One',
512
+ 'Plaster',
513
+ 'Play',
514
+ 'Playball',
515
+ 'Playfair Display',
516
+ 'Playfair Display SC',
517
+ 'Podkova',
518
+ 'Poiret One',
519
+ 'Poller One',
520
+ 'Poly',
521
+ 'Pompiere',
522
+ 'Pontano Sans',
523
+ 'Port Lligat Sans',
524
+ 'Port Lligat Slab',
525
+ 'Prata',
526
+ 'Preahvihear',
527
+ 'Press Start 2P',
528
+ 'Princess Sofia',
529
+ 'Prociono',
530
+ 'Prosto One',
531
+ 'Puritan',
532
+ 'Purple Purse',
533
+ 'Quando',
534
+ 'Quantico',
535
+ 'Quattrocento',
536
+ 'Quattrocento Sans',
537
+ 'Questrial',
538
+ 'Quicksand',
539
+ 'Quintessential',
540
+ 'Qwigley',
541
+ 'Racing Sans One',
542
+ 'Radley',
543
+ 'Rajdhani',
544
+ 'Raleway',
545
+ 'Raleway Dots',
546
+ 'Ramabhadra',
547
+ 'Ramaraja',
548
+ 'Rambla',
549
+ 'Rammetto One',
550
+ 'Ranchers',
551
+ 'Rancho',
552
+ 'Ranga',
553
+ 'Rationale',
554
+ 'Ravi Prakash',
555
+ 'Redressed',
556
+ 'Reenie Beanie',
557
+ 'Revalia',
558
+ 'Ribeye',
559
+ 'Ribeye Marrow',
560
+ 'Righteous',
561
+ 'Risque',
562
+ 'Roboto',
563
+ 'Roboto Condensed',
564
+ 'Roboto Slab',
565
+ 'Rochester',
566
+ 'Rock Salt',
567
+ 'Rokkitt',
568
+ 'Romanesco',
569
+ 'Ropa Sans',
570
+ 'Rosario',
571
+ 'Rosarivo',
572
+ 'Rouge Script',
573
+ 'Rozha One',
574
+ 'Rubik Mono One',
575
+ 'Rubik One',
576
+ 'Ruda',
577
+ 'Rufina',
578
+ 'Ruge Boogie',
579
+ 'Ruluko',
580
+ 'Rum Raisin',
581
+ 'Ruslan Display',
582
+ 'Russo One',
583
+ 'Ruthie',
584
+ 'Rye',
585
+ 'Sacramento',
586
+ 'Sail',
587
+ 'Salsa',
588
+ 'Sanchez',
589
+ 'Sancreek',
590
+ 'Sansita One',
591
+ 'Sarina',
592
+ 'Sarpanch',
593
+ 'Satisfy',
594
+ 'Scada',
595
+ 'Scheherazade',
596
+ 'Schoolbell',
597
+ 'Seaweed Script',
598
+ 'Sevillana',
599
+ 'Seymour One',
600
+ 'Shadows Into Light',
601
+ 'Shadows Into Light Two',
602
+ 'Shanti',
603
+ 'Share',
604
+ 'Share Tech',
605
+ 'Share Tech Mono',
606
+ 'Shojumaru',
607
+ 'Short Stack',
608
+ 'Siemreap',
609
+ 'Sigmar One',
610
+ 'Signika',
611
+ 'Signika Negative',
612
+ 'Simonetta',
613
+ 'Sintony',
614
+ 'Sirin Stencil',
615
+ 'Six Caps',
616
+ 'Skranji',
617
+ 'Slabo 13px',
618
+ 'Slabo 27px',
619
+ 'Slackey',
620
+ 'Smokum',
621
+ 'Smythe',
622
+ 'Sniglet',
623
+ 'Snippet',
624
+ 'Snowburst One',
625
+ 'Sofadi One',
626
+ 'Sofia',
627
+ 'Sonsie One',
628
+ 'Sorts Mill Goudy',
629
+ 'Source Code Pro',
630
+ 'Source Sans Pro',
631
+ 'Source Serif Pro',
632
+ 'Special Elite',
633
+ 'Spicy Rice',
634
+ 'Spinnaker',
635
+ 'Spirax',
636
+ 'Squada One',
637
+ 'Sree Krushnadevaraya',
638
+ 'Stalemate',
639
+ 'Stalinist One',
640
+ 'Stardos Stencil',
641
+ 'Stint Ultra Condensed',
642
+ 'Stint Ultra Expanded',
643
+ 'Stoke',
644
+ 'Strait',
645
+ 'Sue Ellen Francisco',
646
+ 'Sunshiney',
647
+ 'Supermercado One',
648
+ 'Suranna',
649
+ 'Suravaram',
650
+ 'Suwannaphum',
651
+ 'Swanky and Moo Moo',
652
+ 'Syncopate',
653
+ 'Tangerine',
654
+ 'Taprom',
655
+ 'Tauri',
656
+ 'Teko',
657
+ 'Telex',
658
+ 'Tenali Ramakrishna',
659
+ 'Tenor Sans',
660
+ 'Text Me One',
661
+ 'The Girl Next Door',
662
+ 'Tienne',
663
+ 'Timmana',
664
+ 'Tinos',
665
+ 'Titan One',
666
+ 'Titillium Web',
667
+ 'Trade Winds',
668
+ 'Trocchi',
669
+ 'Trochut',
670
+ 'Trykker',
671
+ 'Tulpen One',
672
+ 'Ubuntu',
673
+ 'Ubuntu Condensed',
674
+ 'Ubuntu Mono',
675
+ 'Ultra',
676
+ 'Uncial Antiqua',
677
+ 'Underdog',
678
+ 'Unica One',
679
+ 'UnifrakturCook',
680
+ 'UnifrakturMaguntia',
681
+ 'Unkempt',
682
+ 'Unlock',
683
+ 'Unna',
684
+ 'VT323',
685
+ 'Vampiro One',
686
+ 'Varela',
687
+ 'Varela Round',
688
+ 'Vast Shadow',
689
+ 'Vesper Libre',
690
+ 'Vibur',
691
+ 'Vidaloka',
692
+ 'Viga',
693
+ 'Voces',
694
+ 'Volkhov',
695
+ 'Vollkorn',
696
+ 'Voltaire',
697
+ 'Waiting for the Sunrise',
698
+ 'Wallpoet',
699
+ 'Walter Turncoat',
700
+ 'Warnes',
701
+ 'Wellfleet',
702
+ 'Wendy One',
703
+ 'Wire One',
704
+ 'Yanone Kaffeesatz',
705
+ 'Yellowtail',
706
+ 'Yeseva One',
707
+ 'Yesteryear',
708
+ 'Zeyada'
709
+ );
710
+ //</editor-fold>
711
+
712
+ var $_group = 'google';
713
+
714
+ private static $styles = array();
715
+ private static $subsets = array();
716
+
717
+
718
+ function onFontServices(&$list) {
719
+ $list[$this->_group] = array(
720
+ 'Google',
721
+ $this->getPath(),
722
+ 1
723
+ );
724
+ }
725
+
726
+ public static function getDefaults() {
727
+ $defaults = array();
728
+ $fontsSets = explode(',', n2_x('latin', 'Default font sets'));
729
+ for ($i = 0; $i < count($fontsSets); $i++) {
730
+ $fontsSets[$i] = 'google-set-' . $fontsSets[$i];
731
+ }
732
+ $defaults += array_fill_keys($fontsSets, 1);
733
+ return $defaults;
734
+ }
735
+
736
+ function getPath() {
737
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . 'google' . DIRECTORY_SEPARATOR;
738
+ }
739
+
740
+ function onFontManagerLoad($force = false) {
741
+ static $loaded;
742
+ if (!$loaded || $force) {
743
+ $loaded = true;
744
+ $settings = N2Fonts::loadSettings();
745
+ $parameters = $settings['plugins'];
746
+
747
+ $parameters->fillDefault(self::getDefaults());
748
+
749
+ if ($parameters->get('google-enabled', 1)) {
750
+ N2GoogleFonts::$enabled = 1;
751
+
752
+ for ($i = 100; $i < 1000; $i += 100) {
753
+ $this->addStyle($parameters, $i);
754
+ $this->addStyle($parameters, $i . 'italic');
755
+ }
756
+ if (empty(self::$styles)) {
757
+ self::$styles[] = '400';
758
+ }
759
+
760
+ $this->addSubset($parameters, 'latin');
761
+ $this->addSubset($parameters, 'latin-ext');
762
+ $this->addSubset($parameters, 'greek');
763
+ $this->addSubset($parameters, 'greek-ext');
764
+ $this->addSubset($parameters, 'cyrillic');
765
+ $this->addSubset($parameters, 'devanagari');
766
+ $this->addSubset($parameters, 'arabic');
767
+ $this->addSubset($parameters, 'khmer');
768
+ $this->addSubset($parameters, 'telugu');
769
+ $this->addSubset($parameters, 'vietnamese');
770
+ if (empty(self::$subsets)) {
771
+ self::$subsets[] = 'latin';
772
+ }
773
+ foreach (self::$subsets as $subset) {
774
+ N2GoogleFonts::addSubset($subset);
775
+ }
776
+ N2Pluggable::addAction('fontFamily', array(
777
+ $this,
778
+ 'onFontFamily'
779
+ ));
780
+ }
781
+ }
782
+ }
783
+
784
+ function onFontManagerLoadBackend() {
785
+ N2JS::addInline('new NextendFontServiceGoogle("' . implode(',', self::$styles) . '","' . implode(',', self::$subsets) . '", ' . json_encode(self::$fonts) . ');');
786
+ }
787
+
788
+ function addStyle($parameters, $weight) {
789
+ if ($parameters->get('google-style-' . $weight, 0)) {
790
+ self::$styles[] = $weight;
791
+ }
792
+ }
793
+
794
+ function addSubset($parameters, $subset) {
795
+ if ($parameters->get('google-set-' . $subset, 0)) {
796
+ self::$subsets[] = $subset;
797
+ }
798
+ }
799
+
800
+ function onFontFamily($family) {
801
+ if (in_array($family, self::$fonts)) {
802
+ foreach (self::$styles AS $style) {
803
+ N2GoogleFonts::addFont($family, $style);
804
+ }
805
+ }
806
+ }
807
+ }
808
+
809
+ N2Plugin::addPlugin('fontservices', 'N2SystemPluginFontServiceGoogle');
app/code/community/Nextend2/library/applications/system/plugins/nextendfontservices/google/google/config.xml ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="google-fonts" label="" hidetitle="1">
3
+ <param type="onoff" name="google-enabled" label="Enabled" default="1"/>
4
+ <param type="group" label="Style">
5
+ <param type="onoff" name="google-style-100" label="100" default="0"/>
6
+ <param type="onoff" name="google-style-100italic" label="100 Italic" default="0"/>
7
+ <param type="onoff" name="google-style-200" label="200" default="0"/>
8
+ <param type="onoff" name="google-style-200italic" label="200 Italic" default="0"/>
9
+ <param type="onoff" name="google-style-300" label="300" default="0"/>
10
+ <param type="onoff" name="google-style-300italic" label="300 Italic" default="0"/>
11
+ <param type="onoff" name="google-style-400" label="Normal" default="1"/>
12
+ <param type="onoff" name="google-style-400italic" label="Normal Italic" default="0"/>
13
+ <param type="onoff" name="google-style-500" label="500" default="0"/>
14
+ <param type="onoff" name="google-style-500italic" label="500 Italic" default="0"/>
15
+ <param type="onoff" name="google-style-600" label="600" default="0"/>
16
+ <param type="onoff" name="google-style-600italic" label="600 Italic" default="0"/>
17
+ <param type="onoff" name="google-style-700" label="Bold" default="0"/>
18
+ <param type="onoff" name="google-style-700italic" label="Bold Italic" default="0"/>
19
+ <param type="onoff" name="google-style-800" label="800" default="0"/>
20
+ <param type="onoff" name="google-style-800italic" label="800 Italic" default="0"/>
21
+ <param type="onoff" name="google-style-900" label="900" default="0"/>
22
+ <param type="onoff" name="google-style-900italic" label="900 Italic" default="0"/>
23
+ </param>
24
+ <param type="group" label="Character set">
25
+ <param type="onoff" name="google-set-latin" label="Latin" default="1"/>
26
+ <param type="onoff" name="google-set-latin-ext" label="Latin Extended" default="0"/>
27
+ <param type="onoff" name="google-set-greek" label="Greek" default="0"/>
28
+ <param type="onoff" name="google-set-greek-ext" label="Greek Extended" default="0"/>
29
+ <param type="onoff" name="google-set-cyrillic" label="Cyrillic" default="0"/>
30
+ <param type="onoff" name="google-set-devanagari" label="Devanagari" default="0"/>
31
+ <param type="onoff" name="google-set-arabic" label="Arabic" default="0"/>
32
+ <param type="onoff" name="google-set-khmer" label="Khmer" default="0"/>
33
+ <param type="onoff" name="google-set-telugu" label="Telugu" default="0"/>
34
+ <param type="onoff" name="google-set-vietnamese" label="Vietnamese" default="0"/>
35
+ </param>
36
+ </params>
37
+ </root>
app/code/community/Nextend2/library/applications/system/plugins/nextendfontservices/loadplugin.php ADDED
@@ -0,0 +1,10 @@
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ defined('N2LIBRARY') or die();
3
+
4
+ $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
5
+ foreach (N2Filesystem::folders($dir) AS $folder) {
6
+ $file = $dir . $folder . DIRECTORY_SEPARATOR . $folder . '.php';
7
+ if (N2Filesystem::fileexists($file)) {
8
+ require_once($file);
9
+ }
10
+ }
app/code/community/Nextend2/library/cacert.pem ADDED
@@ -0,0 +1,3988 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ##
2
+ ## Bundle of CA Root Certificates
3
+ ##
4
+ ## Certificate data from Mozilla as of: Wed Apr 22 03:12:04 2015
5
+ ##
6
+ ## This is a bundle of X.509 certificates of public Certificate Authorities
7
+ ## (CA). These were automatically extracted from Mozilla's root certificates
8
+ ## file (certdata.txt). This file can be found in the mozilla source tree:
9
+ ## http://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
10
+ ##
11
+ ## It contains the certificates in PEM format and therefore
12
+ ## can be directly used with curl / libcurl / php_curl, or with
13
+ ## an Apache+mod_ssl webserver for SSL client authentication.
14
+ ## Just configure this file as the SSLCACertificateFile.
15
+ ##
16
+ ## Conversion done with mk-ca-bundle.pl version 1.25.
17
+ ## SHA1: ed3c0bbfb7912bcc00cd2033b0cb85c98d10559c
18
+ ##
19
+
20
+
21
+ Equifax Secure CA
22
+ =================
23
+ -----BEGIN CERTIFICATE-----
24
+ MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJVUzEQMA4GA1UE
25
+ ChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5
26
+ MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoT
27
+ B0VxdWlmYXgxLTArBgNVBAsTJEVxdWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCB
28
+ nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPR
29
+ fM6fBeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+AcJkVV5MW
30
+ 8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kCAwEAAaOCAQkwggEFMHAG
31
+ A1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UE
32
+ CxMkRXF1aWZheCBTZWN1cmUgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoG
33
+ A1UdEAQTMBGBDzIwMTgwODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvS
34
+ spXXR9gjIBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQFMAMB
35
+ Af8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUAA4GBAFjOKer89961
36
+ zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y7qj/WsjTVbJmcVfewCHrPSqnI0kB
37
+ BIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee95
38
+ 70+sB3c4
39
+ -----END CERTIFICATE-----
40
+
41
+ GlobalSign Root CA
42
+ ==================
43
+ -----BEGIN CERTIFICATE-----
44
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
45
+ GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
46
+ b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
47
+ BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
48
+ VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
49
+ DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
50
+ THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
51
+ Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
52
+ c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
53
+ gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
54
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
55
+ AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
56
+ Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
57
+ j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
58
+ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
59
+ X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
60
+ -----END CERTIFICATE-----
61
+
62
+ GlobalSign Root CA - R2
63
+ =======================
64
+ -----BEGIN CERTIFICATE-----
65
+ MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
66
+ YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
67
+ bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
68
+ aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
69
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
70
+ ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
71
+ s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
72
+ S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
73
+ TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
74
+ ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
75
+ FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
76
+ YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
77
+ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
78
+ 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
79
+ 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
80
+ 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
81
+ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
82
+ -----END CERTIFICATE-----
83
+
84
+ Verisign Class 3 Public Primary Certification Authority - G3
85
+ ============================================================
86
+ -----BEGIN CERTIFICATE-----
87
+ MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
88
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
89
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
90
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
91
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
92
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
93
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
94
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
95
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
96
+ ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
97
+ EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
98
+ cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
99
+ EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
100
+ 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
101
+ ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
102
+ j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
103
+ /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
104
+ xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
105
+ t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
106
+ -----END CERTIFICATE-----
107
+
108
+ Verisign Class 4 Public Primary Certification Authority - G3
109
+ ============================================================
110
+ -----BEGIN CERTIFICATE-----
111
+ MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
112
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
113
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
114
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
115
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
116
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
117
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
118
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDQgUHVibGljIFByaW1hcnkg
119
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
120
+ ggEBAK3LpRFpxlmr8Y+1GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaS
121
+ tBO3IFsJ+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0GbdU6LM
122
+ 8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLmNxdLMEYH5IBtptiW
123
+ Lugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XYufTsgsbSPZUd5cBPhMnZo0QoBmrX
124
+ Razwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
125
+ j/ola09b5KROJ1WrIhVZPMq1CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXtt
126
+ mhwwjIDLk5Mqg6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
127
+ fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c2NU8Qh0XwRJd
128
+ RTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/bLvSHgCwIe34QWKCudiyxLtG
129
+ UPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
130
+ -----END CERTIFICATE-----
131
+
132
+ Entrust.net Premium 2048 Secure Server CA
133
+ =========================================
134
+ -----BEGIN CERTIFICATE-----
135
+ MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
136
+ ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
137
+ bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
138
+ BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
139
+ NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
140
+ d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
141
+ MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
142
+ ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
143
+ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
144
+ Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
145
+ hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
146
+ nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
147
+ VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
148
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
149
+ KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
150
+ T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
151
+ zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
152
+ J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
153
+ nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
154
+ -----END CERTIFICATE-----
155
+
156
+ Baltimore CyberTrust Root
157
+ =========================
158
+ -----BEGIN CERTIFICATE-----
159
+ MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
160
+ ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
161
+ ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
162
+ SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
163
+ dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
164
+ uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
165
+ UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
166
+ G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
167
+ XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
168
+ l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
169
+ VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
170
+ BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
171
+ cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
172
+ hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
173
+ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
174
+ RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
175
+ -----END CERTIFICATE-----
176
+
177
+ AddTrust Low-Value Services Root
178
+ ================================
179
+ -----BEGIN CERTIFICATE-----
180
+ MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
181
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRU
182
+ cnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMwMTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQsw
183
+ CQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBO
184
+ ZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEB
185
+ AQUAA4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ulCDtbKRY6
186
+ 54eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6ntGO0/7Gcrjyvd7ZWxbWr
187
+ oulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyldI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1
188
+ Zmne3yzxbrww2ywkEtvrNTVokMsAsJchPXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJui
189
+ GMx1I4S+6+JNM3GOGvDC+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8w
190
+ HQYDVR0OBBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8EBTAD
191
+ AQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBlMQswCQYDVQQGEwJT
192
+ RTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEw
193
+ HwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxt
194
+ ZBsfzQ3duQH6lmM0MkhHma6X7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0Ph
195
+ iVYrqW9yTkkz43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
196
+ eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJlpz/+0WatC7xr
197
+ mYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOAWiFeIc9TVPC6b4nbqKqVz4vj
198
+ ccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
199
+ -----END CERTIFICATE-----
200
+
201
+ AddTrust External Root
202
+ ======================
203
+ -----BEGIN CERTIFICATE-----
204
+ MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
205
+ QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
206
+ VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
207
+ NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
208
+ cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
209
+ Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
210
+ +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
211
+ Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
212
+ aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
213
+ 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
214
+ 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
215
+ BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
216
+ VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
217
+ VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
218
+ IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
219
+ j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
220
+ 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
221
+ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
222
+ G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
223
+ -----END CERTIFICATE-----
224
+
225
+ AddTrust Public Services Root
226
+ =============================
227
+ -----BEGIN CERTIFICATE-----
228
+ MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
229
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSAwHgYDVQQDExdBZGRU
230
+ cnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAxMDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJ
231
+ BgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5l
232
+ dHdvcmsxIDAeBgNVBAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEF
233
+ AAOCAQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV6tsfSlbu
234
+ nyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nXGCwwfQ56HmIexkvA/X1i
235
+ d9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnPdzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSG
236
+ Aa2Il+tmzV7R/9x98oTaunet3IAIx6eH1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAw
237
+ HM+A+WD+eeSI8t0A65RF62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0G
238
+ A1UdDgQWBBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
239
+ /zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDELMAkGA1UEBhMCU0Ux
240
+ FDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29yazEgMB4G
241
+ A1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4
242
+ JNojVhaTdt02KLmuG7jD8WS6IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL
243
+ +YPoRNWyQSW/iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
244
+ GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh4SINhwBk/ox9
245
+ Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQmXiLsks3/QppEIW1cxeMiHV9H
246
+ EufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
247
+ -----END CERTIFICATE-----
248
+
249
+ AddTrust Qualified Certificates Root
250
+ ====================================
251
+ -----BEGIN CERTIFICATE-----
252
+ MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
253
+ QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSMwIQYDVQQDExpBZGRU
254
+ cnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcx
255
+ CzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQ
256
+ IE5ldHdvcmsxIzAhBgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG
257
+ 9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwqxBb/4Oxx
258
+ 64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G87B4pfYOQnrjfxvM0PC3
259
+ KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i2O+tCBGaKZnhqkRFmhJePp1tUvznoD1o
260
+ L/BLcHwTOK28FSXx1s6rosAx1i+f4P8UWfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GR
261
+ wVY18BTcZTYJbqukB8c10cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HU
262
+ MIHRMB0GA1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/
263
+ BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6FrpGkwZzELMAkGA1UE
264
+ BhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRUcnVzdCBUVFAgTmV0d29y
265
+ azEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlmaWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQAD
266
+ ggEBABmrder4i2VhlRO6aQTvhsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxG
267
+ GuoYQ992zPlmhpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
268
+ dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3P6CxB9bpT9ze
269
+ RXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9YiQBCYz95OdBEsIJuQRno3eDB
270
+ iFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5noxqE=
271
+ -----END CERTIFICATE-----
272
+
273
+ Entrust Root Certification Authority
274
+ ====================================
275
+ -----BEGIN CERTIFICATE-----
276
+ MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
277
+ BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
278
+ b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
279
+ A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
280
+ MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
281
+ MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
282
+ Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
283
+ dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
284
+ ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
285
+ A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
286
+ Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
287
+ j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
288
+ rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
289
+ DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
290
+ MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
291
+ hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
292
+ A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
293
+ Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
294
+ v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
295
+ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
296
+ tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
297
+ -----END CERTIFICATE-----
298
+
299
+ RSA Security 2048 v3
300
+ ====================
301
+ -----BEGIN CERTIFICATE-----
302
+ MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6MRkwFwYDVQQK
303
+ ExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJpdHkgMjA0OCBWMzAeFw0wMTAy
304
+ MjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAXBgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAb
305
+ BgNVBAsTFFJTQSBTZWN1cml0eSAyMDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
306
+ AQEAt49VcdKA3XtpeafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7
307
+ Jylg/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGlwSMiuLgb
308
+ WhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnhAMFRD0xS+ARaqn1y07iH
309
+ KrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP
310
+ +Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpuAWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/
311
+ MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4E
312
+ FgQUB8NRMKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYcHnmY
313
+ v/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/Zb5gEydxiKRz44Rj
314
+ 0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+f00/FGj1EVDVwfSQpQgdMWD/YIwj
315
+ VAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVOrSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395
316
+ nzIlQnQFgCi/vcEkllgVsRch6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kA
317
+ pKnXwiJPZ9d37CAFYd4=
318
+ -----END CERTIFICATE-----
319
+
320
+ GeoTrust Global CA
321
+ ==================
322
+ -----BEGIN CERTIFICATE-----
323
+ MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
324
+ Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
325
+ MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
326
+ LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
327
+ CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
328
+ BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
329
+ 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
330
+ T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
331
+ vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
332
+ AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
333
+ DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
334
+ zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
335
+ d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
336
+ mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
337
+ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
338
+ Mw==
339
+ -----END CERTIFICATE-----
340
+
341
+ GeoTrust Global CA 2
342
+ ====================
343
+ -----BEGIN CERTIFICATE-----
344
+ MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
345
+ R2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwHhcNMDQwMzA0MDUw
346
+ MDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
347
+ LjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
348
+ ggEKAoIBAQDvPE1APRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/
349
+ NTL8Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hLTytCOb1k
350
+ LUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL5mkWRxHCJ1kDs6ZgwiFA
351
+ Vvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7S4wMcoKK+xfNAGw6EzywhIdLFnopsk/b
352
+ HdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQF
353
+ MAMBAf8wHQYDVR0OBBYEFHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNH
354
+ K266ZUapEBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6tdEPx7
355
+ srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv/NgdRN3ggX+d6Yvh
356
+ ZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywNA0ZF66D0f0hExghAzN4bcLUprbqL
357
+ OzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkC
358
+ x1YAzUm5s2x7UwQa4qjJqhIFI8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqF
359
+ H4z1Ir+rzoPz4iIprn2DQKi6bA==
360
+ -----END CERTIFICATE-----
361
+
362
+ GeoTrust Universal CA
363
+ =====================
364
+ -----BEGIN CERTIFICATE-----
365
+ MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
366
+ R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
367
+ MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
368
+ Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
369
+ ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
370
+ JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
371
+ RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
372
+ 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
373
+ 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
374
+ qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
375
+ Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
376
+ Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
377
+ KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
378
+ ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
379
+ XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
380
+ hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
381
+ aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
382
+ qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
383
+ oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
384
+ xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
385
+ KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
386
+ DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
387
+ xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
388
+ p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
389
+ P/rmMuGNG2+k5o7Y+SlIis5z/iw=
390
+ -----END CERTIFICATE-----
391
+
392
+ GeoTrust Universal CA 2
393
+ =======================
394
+ -----BEGIN CERTIFICATE-----
395
+ MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
396
+ R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
397
+ MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
398
+ SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
399
+ A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
400
+ DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
401
+ j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
402
+ JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
403
+ QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
404
+ WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
405
+ 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
406
+ ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
407
+ SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
408
+ 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
409
+ +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
410
+ BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
411
+ dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
412
+ 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
413
+ mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
414
+ A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
415
+ Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
416
+ pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
417
+ FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
418
+ gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
419
+ X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
420
+ -----END CERTIFICATE-----
421
+
422
+ Visa eCommerce Root
423
+ ===================
424
+ -----BEGIN CERTIFICATE-----
425
+ MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
426
+ EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
427
+ QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
428
+ WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
429
+ VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
430
+ bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
431
+ F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
432
+ RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
433
+ TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
434
+ /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
435
+ GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
436
+ MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
437
+ CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
438
+ YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
439
+ zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
440
+ YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
441
+ 398znM/jra6O1I7mT1GvFpLgXPYHDw==
442
+ -----END CERTIFICATE-----
443
+
444
+ Certum Root CA
445
+ ==============
446
+ -----BEGIN CERTIFICATE-----
447
+ MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
448
+ ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
449
+ Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
450
+ by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
451
+ wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
452
+ kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
453
+ 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
454
+ Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
455
+ NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
456
+ hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
457
+ GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
458
+ GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
459
+ 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
460
+ qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
461
+ -----END CERTIFICATE-----
462
+
463
+ Comodo AAA Services root
464
+ ========================
465
+ -----BEGIN CERTIFICATE-----
466
+ MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
467
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
468
+ TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
469
+ MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
470
+ c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
471
+ BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
472
+ ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
473
+ C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
474
+ i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
475
+ Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
476
+ Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
477
+ Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
478
+ BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
479
+ cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
480
+ LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
481
+ 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
482
+ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
483
+ 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
484
+ 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
485
+ -----END CERTIFICATE-----
486
+
487
+ Comodo Secure Services root
488
+ ===========================
489
+ -----BEGIN CERTIFICATE-----
490
+ MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
491
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
492
+ TGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAw
493
+ MDAwMFoXDTI4MTIzMTIzNTk1OVowfjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFu
494
+ Y2hlc3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAi
495
+ BgNVBAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
496
+ ADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPMcm3ye5drswfxdySRXyWP
497
+ 9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3SHpR7LZQdqnXXs5jLrLxkU0C8j6ysNstc
498
+ rbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rC
499
+ oznl2yY4rYsK7hljxxwk3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3V
500
+ p6ea5EQz6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNVHQ4E
501
+ FgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
502
+ gYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2RvY2EuY29tL1NlY3VyZUNlcnRpZmlj
503
+ YXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRwOi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlm
504
+ aWNhdGVTZXJ2aWNlcy5jcmwwDQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm
505
+ 4J4oqF7Tt/Q05qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
506
+ Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtIgKvcnDe4IRRL
507
+ DXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJaD61JlfutuC23bkpgHl9j6Pw
508
+ pCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDlizeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1H
509
+ RR3B7Hzs/Sk=
510
+ -----END CERTIFICATE-----
511
+
512
+ Comodo Trusted Services root
513
+ ============================
514
+ -----BEGIN CERTIFICATE-----
515
+ MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
516
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
517
+ TGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEw
518
+ MDAwMDBaFw0yODEyMzEyMzU5NTlaMH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1h
519
+ bmNoZXN0ZXIxEDAOBgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUw
520
+ IwYDVQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOC
521
+ AQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWWfnJSoBVC21ndZHoa0Lh7
522
+ 3TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMtTGo87IvDktJTdyR0nAducPy9C1t2ul/y
523
+ /9c3S0pgePfw+spwtOpZqqPOSC+pw7ILfhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6
524
+ juljatEPmsbS9Is6FARW1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsS
525
+ ivnkBbA7kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0GA1Ud
526
+ DgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
527
+ /zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21vZG9jYS5jb20vVHJ1c3RlZENlcnRp
528
+ ZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRodHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENl
529
+ cnRpZmljYXRlU2VydmljZXMuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8Ntw
530
+ uleGFTQQuS9/HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
531
+ pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxISjBc/lDb+XbDA
532
+ BHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+xqFx7D+gIIxmOom0jtTYsU0l
533
+ R+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/AtyjcndBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O
534
+ 9y5Xt5hwXsjEeLBi
535
+ -----END CERTIFICATE-----
536
+
537
+ QuoVadis Root CA
538
+ ================
539
+ -----BEGIN CERTIFICATE-----
540
+ MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
541
+ ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
542
+ eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
543
+ MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
544
+ cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
545
+ EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
546
+ AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
547
+ J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
548
+ F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
549
+ YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
550
+ AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
551
+ PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
552
+ ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
553
+ MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
554
+ YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
555
+ ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
556
+ Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
557
+ Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
558
+ BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
559
+ FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
560
+ aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
561
+ tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
562
+ fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
563
+ LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
564
+ gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
565
+ 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
566
+ 5nrQNiOKSnQ2+Q==
567
+ -----END CERTIFICATE-----
568
+
569
+ QuoVadis Root CA 2
570
+ ==================
571
+ -----BEGIN CERTIFICATE-----
572
+ MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
573
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMjAeFw0wNjExMjQx
574
+ ODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
575
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4IC
576
+ DwAwggIKAoICAQCaGMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6
577
+ XJxgFyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55JWpzmM+Yk
578
+ lvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bBrrcCaoF6qUWD4gXmuVbB
579
+ lDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp+ARz8un+XJiM9XOva7R+zdRcAitMOeGy
580
+ lZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt
581
+ 66/3FsvbzSUr5R/7mp/iUcw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1Jdxn
582
+ wQ5hYIizPtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og/zOh
583
+ D7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UHoycR7hYQe7xFSkyy
584
+ BNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuIyV77zGHcizN300QyNQliBJIWENie
585
+ J0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1Ud
586
+ DgQWBBQahGK8SEwzJQTU7tD2A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGU
587
+ a6FJpEcwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
588
+ ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2fBluornFdLwUv
589
+ Z+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzng/iN/Ae42l9NLmeyhP3ZRPx3
590
+ UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2BlfF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodm
591
+ VjB3pjd4M1IQWK4/YY7yarHvGH5KWWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK
592
+ +JDSV6IZUaUtl0HaB0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrW
593
+ IozchLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPRTUIZ3Ph1
594
+ WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWDmbA4CD/pXvk1B+TJYm5X
595
+ f6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0ZohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II
596
+ 4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8
597
+ VCLAAVBpQ570su9t+Oza8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
598
+ -----END CERTIFICATE-----
599
+
600
+ QuoVadis Root CA 3
601
+ ==================
602
+ -----BEGIN CERTIFICATE-----
603
+ MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
604
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
605
+ OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
606
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
607
+ DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
608
+ DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
609
+ KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
610
+ DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
611
+ BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
612
+ p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
613
+ nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
614
+ MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
615
+ Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
616
+ uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
617
+ BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
618
+ YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
619
+ aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
620
+ BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
621
+ VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
622
+ ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
623
+ AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
624
+ qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
625
+ hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
626
+ POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
627
+ Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
628
+ 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
629
+ bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
630
+ g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
631
+ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
632
+ qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
633
+ -----END CERTIFICATE-----
634
+
635
+ Security Communication Root CA
636
+ ==============================
637
+ -----BEGIN CERTIFICATE-----
638
+ MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
639
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
640
+ HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
641
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
642
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
643
+ 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
644
+ DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
645
+ 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
646
+ DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
647
+ JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
648
+ DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
649
+ 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
650
+ mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
651
+ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
652
+ 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
653
+ FL39vmwLAw==
654
+ -----END CERTIFICATE-----
655
+
656
+ Sonera Class 2 Root CA
657
+ ======================
658
+ -----BEGIN CERTIFICATE-----
659
+ MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
660
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
661
+ NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
662
+ IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
663
+ /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
664
+ dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
665
+ f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
666
+ tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
667
+ nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
668
+ XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
669
+ 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
670
+ cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
671
+ Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
672
+ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
673
+ llpwrN9M
674
+ -----END CERTIFICATE-----
675
+
676
+ Staat der Nederlanden Root CA
677
+ =============================
678
+ -----BEGIN CERTIFICATE-----
679
+ MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJOTDEeMBwGA1UE
680
+ ChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFhdCBkZXIgTmVkZXJsYW5kZW4g
681
+ Um9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEyMTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4w
682
+ HAYDVQQKExVTdGFhdCBkZXIgTmVkZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxh
683
+ bmRlbiBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFt
684
+ vsznExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw719tV2U02P
685
+ jLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MOhXeiD+EwR+4A5zN9RGca
686
+ C1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+UtFE5A3+y3qcym7RHjm+0Sq7lr7HcsBth
687
+ vJly3uSJt3omXdozSVtSnA71iq3DuD3oBmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn6
688
+ 22r+I/q85Ej0ZytqERAhSQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRV
689
+ HSAAMDwwOgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMvcm9v
690
+ dC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA7Jbg0zTBLL9s+DAN
691
+ BgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k/rvuFbQvBgwp8qiSpGEN/KtcCFtR
692
+ EytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzmeafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbw
693
+ MVcoEoJz6TMvplW0C5GUR5z6u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3y
694
+ nGQI0DvDKcWy7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
695
+ iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
696
+ -----END CERTIFICATE-----
697
+
698
+ UTN DATACorp SGC Root CA
699
+ ========================
700
+ -----BEGIN CERTIFICATE-----
701
+ MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCBkzELMAkGA1UE
702
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
703
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZ
704
+ BgNVBAMTElVUTiAtIERBVEFDb3JwIFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBa
705
+ MIGTMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4w
706
+ HAYDVQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRy
707
+ dXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjANBgkqhkiG9w0BAQEFAAOC
708
+ AQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ys
709
+ raP6LnD43m77VkIVni5c7yPeIbkFdicZD0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlo
710
+ wHDyUwDAXlCCpVZvNvlK4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA
711
+ 9P4yPykqlXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulWbfXv
712
+ 33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQABo4GrMIGoMAsGA1Ud
713
+ DwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRTMtGzz3/64PGgXYVOktKeRR20TzA9
714
+ BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dD
715
+ LmNybDAqBgNVHSUEIzAhBggrBgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3
716
+ DQEBBQUAA4IBAQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
717
+ Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyjj98C5OBxOvG0
718
+ I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVHKWss5nbZqSl9Mt3JNjy9rjXx
719
+ EZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwP
720
+ DPafepE39peC4N1xaf92P2BNPM/3mfnGV/TJVTl4uix5yaaIK/QI
721
+ -----END CERTIFICATE-----
722
+
723
+ UTN USERFirst Hardware Root CA
724
+ ==============================
725
+ -----BEGIN CERTIFICATE-----
726
+ MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCBlzELMAkGA1UE
727
+ BhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEeMBwGA1UEChMVVGhl
728
+ IFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAd
729
+ BgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgx
730
+ OTIyWjCBlzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0
731
+ eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8vd3d3LnVz
732
+ ZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdhcmUwggEiMA0GCSqGSIb3
733
+ DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlI
734
+ wrthdBKWHTxqctU8EGc6Oe0rE81m65UJM6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFd
735
+ tqdt++BxF2uiiPsA3/4aMXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8
736
+ i4fDidNdoI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqIDsjf
737
+ Pe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9KsyoUhbAgMBAAGjgbkw
738
+ gbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFKFyXyYbKJhDlV0HN9WF
739
+ lp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNF
740
+ UkZpcnN0LUhhcmR3YXJlLmNybDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUF
741
+ BwMGBggrBgEFBQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
742
+ //bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28GpgoiskliCE7/yMgUsogW
743
+ XecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gECJChicsZUN/KHAG8HQQZexB2
744
+ lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kn
745
+ iCrVWFCVH/A7HFe7fRQ5YiuayZSSKqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67
746
+ nfhmqA==
747
+ -----END CERTIFICATE-----
748
+
749
+ Camerfirma Chambers of Commerce Root
750
+ ====================================
751
+ -----BEGIN CERTIFICATE-----
752
+ MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
753
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
754
+ ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
755
+ NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
756
+ cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
757
+ MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
758
+ AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
759
+ xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
760
+ NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
761
+ DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
762
+ d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
763
+ EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
764
+ cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
765
+ AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
766
+ bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
767
+ VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
768
+ aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
769
+ fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
770
+ L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
771
+ UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
772
+ ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
773
+ erfutGWaIZDgqtCYvDi1czyL+Nw=
774
+ -----END CERTIFICATE-----
775
+
776
+ Camerfirma Global Chambersign Root
777
+ ==================================
778
+ -----BEGIN CERTIFICATE-----
779
+ MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
780
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
781
+ ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
782
+ NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
783
+ YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
784
+ MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
785
+ ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
786
+ 1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
787
+ by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
788
+ 6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
789
+ 8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
790
+ BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
791
+ aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
792
+ Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
793
+ aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
794
+ ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
795
+ bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
796
+ PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
797
+ gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
798
+ PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
799
+ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
800
+ t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
801
+ -----END CERTIFICATE-----
802
+
803
+ NetLock Notary (Class A) Root
804
+ =============================
805
+ -----BEGIN CERTIFICATE-----
806
+ MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQI
807
+ EwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6
808
+ dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9j
809
+ ayBLb3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oX
810
+ DTE5MDIxOTIzMTQ0N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQH
811
+ EwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYD
812
+ VQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFz
813
+ cyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSM
814
+ D7tM9DceqQWC2ObhbHDqeLVu0ThEDaiDzl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZ
815
+ z+qMkjvN9wfcZnSX9EUi3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC
816
+ /tmwqcm8WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LYOph7
817
+ tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2EsiNCubMvJIH5+hCoR6
818
+ 4sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCCApswDgYDVR0PAQH/BAQDAgAGMBIG
819
+ A1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaC
820
+ Ak1GSUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pv
821
+ bGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
822
+ IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2Vn
823
+ LWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0
824
+ ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFz
825
+ IGxlaXJhc2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBh
826
+ IGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVu
827
+ b3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1YW5jZSBh
828
+ bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sg
829
+ Q1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFp
830
+ bCBhdCBjcHNAbmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5
831
+ ayZrU3/b39/zcT0mwBQOxmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjP
832
+ ytoUMaFP0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQQeJB
833
+ CWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxkf1qbFFgBJ34TUMdr
834
+ KuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK8CtmdWOMovsEPoMOmzbwGOQmIMOM
835
+ 8CgHrTwXZoi1/baI
836
+ -----END CERTIFICATE-----
837
+
838
+ XRamp Global CA Root
839
+ ====================
840
+ -----BEGIN CERTIFICATE-----
841
+ MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
842
+ BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
843
+ dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
844
+ dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
845
+ HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
846
+ U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
847
+ dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
848
+ IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
849
+ foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
850
+ zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
851
+ AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
852
+ xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
853
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
854
+ oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
855
+ AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
856
+ /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
857
+ qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
858
+ nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
859
+ 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
860
+ -----END CERTIFICATE-----
861
+
862
+ Go Daddy Class 2 CA
863
+ ===================
864
+ -----BEGIN CERTIFICATE-----
865
+ MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
866
+ VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
867
+ ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
868
+ A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
869
+ RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
870
+ ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
871
+ 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
872
+ qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
873
+ YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
874
+ vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
875
+ BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
876
+ atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
877
+ MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
878
+ A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
879
+ PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
880
+ I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
881
+ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
882
+ Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
883
+ vZ8=
884
+ -----END CERTIFICATE-----
885
+
886
+ Starfield Class 2 CA
887
+ ====================
888
+ -----BEGIN CERTIFICATE-----
889
+ MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
890
+ U3RhcmZpZWxkIFRlY2hub2xvZ2llcy