smartslider3 - Version 3.0.15

Version Notes

No notes

Download this release

Release Info

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


Version 3.0.15

Files changed (318) hide show
  1. app/code/community/Nextend2/Nextend2/Helper/Data.php +5 -0
  2. app/code/community/Nextend2/Nextend2/Model/Observer.php +23 -0
  3. app/code/community/Nextend2/Nextend2/Model/Resource/Setup.php +6 -0
  4. app/code/community/Nextend2/Nextend2/controllers/Adminhtml/Nextend2Controller.php +34 -0
  5. app/code/community/Nextend2/Nextend2/etc/adminhtml.xml +35 -0
  6. app/code/community/Nextend2/Nextend2/etc/config.xml +58 -0
  7. app/code/community/Nextend2/Nextend2/sql/nextend2_setup/mysql4-install-1.0.0.php +13 -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 +29 -0
  14. app/code/community/Nextend2/SmartSlider3/etc/adminhtml.xml +14 -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.php +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 +26 -0
  32. app/code/community/Nextend2/SmartSlider3/library/smartslider/N2SmartsliderApplicationInfo.php +134 -0
  33. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/N2SmartsliderApplicationTypeBackend.php +29 -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/Preview.php +82 -0
  39. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Settings.php +87 -0
  40. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Slider.php +118 -0
  41. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Sliders.php +167 -0
  42. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Slides.php +148 -0
  43. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Update.php +40 -0
  44. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Backgroundanimation.php +21 -0
  45. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Generator.php +149 -0
  46. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Guide.php +19 -0
  47. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Layout.php +16 -0
  48. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Settings.php +11 -0
  49. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Slider.php +212 -0
  50. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Slides.php +296 -0
  51. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/helpers/controller/N2SmartSliderController.php +57 -0
  52. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/_sidebar_settings.php +32 -0
  53. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/_sidebar_slide.php +101 -0
  54. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/_sliders.php +215 -0
  55. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/font.php +6 -0
  56. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/sidebar/backgroundanimation.php +17 -0
  57. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/sidebar/layout.php +70 -0
  58. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/slidemanager.php +54 -0
  59. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/default.php +61 -0
  60. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/full.php +46 -0
  61. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/lightbox.php +2 -0
  62. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/preview.php +10 -0
  63. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/sidebar.php +8 -0
  64. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/backgroundanimation/index.php +105 -0
  65. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/backgroundanimation/topbar.php +17 -0
  66. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/defaults/noaccess.php +7 -0
  67. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/_view.php +180 -0
  68. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/check_configuration.php +35 -0
  69. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/create.php +58 -0
  70. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/create_settings.php +61 -0
  71. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/edit.php +102 -0
  72. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/layout/index.php +2 -0
  73. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/layout/topbar.php +2 -0
  74. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/_preview.php +94 -0
  75. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/_view.php +16 -0
  76. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/generator.php +5 -0
  77. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/index.php +3 -0
  78. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/slide.php +21 -0
  79. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/settings/_view.php +53 -0
  80. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/settings/cache.php +29 -0
  81. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/settings/default.php +24 -0
  82. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/settings/defaults.php +22 -0
  83. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/_slider_edit.php +140 -0
  84. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/_view.php +111 -0
  85. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/cachedslider.php +51 -0
  86. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/edit.php +7 -0
  87. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/_view.php +16 -0
  88. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/importByUpload.php +36 -0
  89. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/importFromServer.php +34 -0
  90. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/index.php +128 -0
  91. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slides/_view.php +6 -0
  92. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slides/edit.php +259 -0
  93. app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slides/slidebox.php +2 -0
  94. app/code/community/Nextend2/SmartSlider3/library/smartslider/form/element/backgroundanimation.php +35 -0
  95. app/code/community/Nextend2/SmartSlider3/library/smartslider/form/element/sliderwidgetarea.php +36 -0
  96. app/code/community/Nextend2/SmartSlider3/library/smartslider/form/element/widgetpluginmatrix.php +63 -0
  97. app/code/community/Nextend2/SmartSlider3/library/smartslider/form/element/widgetposition.php +138 -0
  98. app/code/community/Nextend2/SmartSlider3/library/smartslider/languages/hu_HU.mo +0 -0
  99. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/backgroundanimation/manager.php +26 -0
  100. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/backgroundanimation/storage.php +73 -0
  101. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/backup.php +11 -0
  102. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/export.php +340 -0
  103. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/import.php +194 -0
  104. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/layout/storage.php +73 -0
  105. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/link.php +46 -0
  106. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/plugins/N2SliderGeneratorPluginAbstract.php +66 -0
  107. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/plugins/N2SliderItemAbstract.php +208 -0
  108. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/plugins/N2SliderWidgetAbstract.php +99 -0
  109. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/settings/settings.php +34 -0
  110. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/abstract.php +272 -0
  111. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/backend.php +16 -0
  112. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/cache/generator.php +36 -0
  113. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/cache/slider.php +58 -0
  114. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/css.php +78 -0
  115. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/align.php +52 -0
  116. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/autoplay.php +75 -0
  117. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/blockrightclick.php +21 -0
  118. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/controls.php +38 -0
  119. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/fadeonload.php +100 -0
  120. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/features.php +172 -0
  121. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/layermode.php +61 -0
  122. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/lazyload.php +52 -0
  123. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/maintainsession.php +21 -0
  124. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/margin.php +29 -0
  125. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/responsive.php +437 -0
  126. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/slidebackground.php +227 -0
  127. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/spinner.php +262 -0
  128. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/translateUrl.php +26 -0
  129. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/generator/abstract.php +59 -0
  130. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/helper.php +33 -0
  131. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/manager.php +74 -0
  132. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/generator.php +104 -0
  133. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/item.php +145 -0
  134. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/layer.php +307 -0
  135. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/slide.php +484 -0
  136. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/slides.php +183 -0
  137. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/slidesadmin.php +193 -0
  138. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/type.php +68 -0
  139. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/widget/widgets.php +351 -0
  140. app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/storage.php +1896 -0
  141. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Ajax.php +55 -0
  142. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Install.php +55 -0
  143. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Item.php +20 -0
  144. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Layers.php +21 -0
  145. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/License.php +70 -0
  146. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Modules.php +13 -0
  147. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/ModulesMenu.php +12 -0
  148. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Settings.php +90 -0
  149. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Sliders.php +224 -0
  150. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Slides.php +645 -0
  151. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Update.php +84 -0
  152. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/backgroundanimation.php +20 -0
  153. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/backgroundanimation/sets.xml +5 -0
  154. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/halign.php +30 -0
  155. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/items.php +32 -0
  156. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/layerpicker.php +15 -0
  157. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/sliderresponsive.php +37 -0
  158. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/slidertype.php +76 -0
  159. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/element/valign.php +30 -0
  160. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/generator_edit.xml +12 -0
  161. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/import/server.xml +7 -0
  162. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/import/upload.xml +6 -0
  163. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/layer.xml +61 -0
  164. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/layout/sets.xml +5 -0
  165. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/license.xml +6 -0
  166. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/multigenerator.xml +12 -0
  167. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/settings/default.xml +97 -0
  168. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/settings/joomla.xml +12 -0
  169. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/slide.xml +39 -0
  170. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/slide_generator.xml +7 -0
  171. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/slider.xml +81 -0
  172. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/forms/translateurl.xml +8 -0
  173. app/code/community/Nextend2/SmartSlider3/library/smartslider/models/generator.php +357 -0
  174. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/generator/loadplugin.php +10 -0
  175. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/button/button.php +138 -0
  176. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/button/button/configuration.xml +21 -0
  177. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/heading/heading.php +161 -0
  178. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/heading/heading/configuration.xml +21 -0
  179. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/image/image.php +129 -0
  180. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/image/image/configuration.xml +12 -0
  181. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/loadplugin.php +10 -0
  182. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/text/text.php +276 -0
  183. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/text/text/configuration.xml +20 -0
  184. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/vimeo/vimeo.php +81 -0
  185. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/vimeo/vimeo/configuration.xml +21 -0
  186. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/youtube/youtube.php +104 -0
  187. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/youtube/youtube/configuration.xml +43 -0
  188. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/loadplugin.php +10 -0
  189. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/auto/auto.php +39 -0
  190. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/auto/auto/responsive.xml +23 -0
  191. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/fullwidth/fullwidth.php +70 -0
  192. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/fullwidth/fullwidth/responsive.xml +63 -0
  193. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/responsive/loadplugin.php +10 -0
  194. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/loadplugin.php +10 -0
  195. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple.php +18 -0
  196. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/backup.php +22 -0
  197. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/css.php +51 -0
  198. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/slide.xml +15 -0
  199. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/slider.xml +25 -0
  200. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/type.php +223 -0
  201. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/arrow/arrow.php +21 -0
  202. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/arrow/arrow/config.xml +8 -0
  203. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/autoplay/autoplay.php +21 -0
  204. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/autoplay/autoplay/config.xml +8 -0
  205. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/bar/bar.php +21 -0
  206. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/bar/bar/config.xml +8 -0
  207. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/bullet/bullet.php +21 -0
  208. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/bullet/bullet/config.xml +24 -0
  209. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/loadplugin.php +10 -0
  210. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/shadow/shadow.php +21 -0
  211. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/shadow/shadow/config.xml +6 -0
  212. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/thumbnail/thumbnail.php +21 -0
  213. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widget/thumbnail/thumbnail/config.xml +16 -0
  214. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetarrow/image/image.php +254 -0
  215. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetarrow/image/image/config.xml +14 -0
  216. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetarrow/loadplugin.php +10 -0
  217. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetautoplay/image/image.php +149 -0
  218. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetautoplay/image/image/config.xml +11 -0
  219. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetautoplay/loadplugin.php +10 -0
  220. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbar/horizontal/horizontal.php +142 -0
  221. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbar/horizontal/horizontal/config.xml +21 -0
  222. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbar/loadplugin.php +10 -0
  223. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbullet/loadplugin.php +10 -0
  224. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbullet/transition/transition.php +151 -0
  225. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbullet/transition/transition/config.xml +11 -0
  226. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetshadow/loadplugin.php +10 -0
  227. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetshadow/shadow/shadow.php +90 -0
  228. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetshadow/shadow/shadow/config.xml +6 -0
  229. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetthumbnail/default/default.php +291 -0
  230. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetthumbnail/default/default/config.xml +41 -0
  231. app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetthumbnail/loadplugin.php +10 -0
  232. app/code/community/Nextend2/SmartSlider3/library/smartslider/smartslider3.php +101 -0
  233. app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/N2SmartsliderApplicationTypeWidget.php +30 -0
  234. app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/controllers/Home.php +38 -0
  235. app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/layouts/default.php +4 -0
  236. app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/views/home/magento.php +5 -0
  237. app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/views/home/native.php +1 -0
  238. app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/views/home/wordpress.php +1 -0
  239. app/code/community/Nextend2/SmartSlider3/sql/smartslider3_setup/mysql4-install-1.0.0.php +16 -0
  240. app/code/community/Nextend2/library/applications/system/N2SystemApplication.php +15 -0
  241. app/code/community/Nextend2/library/applications/system/N2SystemApplicationInfo.php +59 -0
  242. app/code/community/Nextend2/library/applications/system/backend/N2SystemApplicationTypeBackend.php +14 -0
  243. app/code/community/Nextend2/library/applications/system/backend/controllers/Animation.php +22 -0
  244. app/code/community/Nextend2/library/applications/system/backend/controllers/Browse.php +19 -0
  245. app/code/community/Nextend2/library/applications/system/backend/controllers/Dashboard.php +13 -0
  246. app/code/community/Nextend2/library/applications/system/backend/controllers/Font.php +22 -0
  247. app/code/community/Nextend2/library/applications/system/backend/controllers/Help.php +12 -0
  248. app/code/community/Nextend2/library/applications/system/backend/controllers/Image.php +26 -0
  249. app/code/community/Nextend2/library/applications/system/backend/controllers/Install.php +20 -0
  250. app/code/community/Nextend2/library/applications/system/backend/controllers/Login.php +3 -0
  251. app/code/community/Nextend2/library/applications/system/backend/controllers/Settings.php +100 -0
  252. app/code/community/Nextend2/library/applications/system/backend/controllers/Style.php +23 -0
  253. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Animation.php +10 -0
  254. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Aviary.php +69 -0
  255. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Browse.php +441 -0
  256. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Content.php +13 -0
  257. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Font.php +10 -0
  258. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Image.php +109 -0
  259. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Link.php +13 -0
  260. app/code/community/Nextend2/library/applications/system/backend/controllers/ajax/Style.php +11 -0
  261. app/code/community/Nextend2/library/applications/system/backend/helpers/controllers/VisualManager.php +86 -0
  262. app/code/community/Nextend2/library/applications/system/backend/helpers/controllers/VisualManagerAjax.php +185 -0
  263. app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/animation.php +34 -0
  264. app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/font.php +34 -0
  265. app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/image.php +0 -0
  266. app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/settings.php +30 -0
  267. app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/style.php +34 -0
  268. app/code/community/Nextend2/library/applications/system/backend/layouts/default.php +59 -0
  269. app/code/community/Nextend2/library/applications/system/backend/layouts/full.php +63 -0
  270. app/code/community/Nextend2/library/applications/system/backend/layouts/fulllightbox.php +37 -0
  271. app/code/community/Nextend2/library/applications/system/backend/layouts/lightbox.php +35 -0
  272. app/code/community/Nextend2/library/applications/system/backend/layouts/modal.php +35 -0
  273. app/code/community/Nextend2/library/applications/system/backend/views/animation/index.php +104 -0
  274. app/code/community/Nextend2/library/applications/system/backend/views/animation/topbar.php +17 -0
  275. app/code/community/Nextend2/library/applications/system/backend/views/dashboard/index.php +22 -0
  276. app/code/community/Nextend2/library/applications/system/backend/views/defaults/noaccess.php +1 -0
  277. app/code/community/Nextend2/library/applications/system/backend/views/font/index.php +102 -0
  278. app/code/community/Nextend2/library/applications/system/backend/views/font/topbar.php +27 -0
  279. app/code/community/Nextend2/library/applications/system/backend/views/help/index.php +21 -0
  280. app/code/community/Nextend2/library/applications/system/backend/views/image/index.php +12 -0
  281. app/code/community/Nextend2/library/applications/system/backend/views/image/topbar.php +17 -0
  282. app/code/community/Nextend2/library/applications/system/backend/views/login/index.php +18 -0
  283. app/code/community/Nextend2/library/applications/system/backend/views/settings/_view.php +83 -0
  284. app/code/community/Nextend2/library/applications/system/backend/views/settings/aviary.php +57 -0
  285. app/code/community/Nextend2/library/applications/system/backend/views/settings/fonts.php +21 -0
  286. app/code/community/Nextend2/library/applications/system/backend/views/settings/index.php +16 -0
  287. app/code/community/Nextend2/library/applications/system/backend/views/style/index.php +99 -0
  288. app/code/community/Nextend2/library/applications/system/backend/views/style/topbar.php +27 -0
  289. app/code/community/Nextend2/library/applications/system/models/Install.php +40 -0
  290. app/code/community/Nextend2/library/applications/system/models/animation.php +23 -0
  291. app/code/community/Nextend2/library/applications/system/models/font.php +23 -0
  292. app/code/community/Nextend2/library/applications/system/models/forms/animation/extra.xml +65 -0
  293. app/code/community/Nextend2/library/applications/system/models/forms/animation/form.xml +63 -0
  294. app/code/community/Nextend2/library/applications/system/models/forms/animation/sets.xml +5 -0
  295. app/code/community/Nextend2/library/applications/system/models/forms/aviary.xml +7 -0
  296. app/code/community/Nextend2/library/applications/system/models/forms/font/element/decoration.php +36 -0
  297. app/code/community/Nextend2/library/applications/system/models/forms/font/element/family.php +19 -0
  298. app/code/community/Nextend2/library/applications/system/models/forms/font/element/fontpreset.php +26 -0
  299. app/code/community/Nextend2/library/applications/system/models/forms/font/element/textalign.php +31 -0
  300. app/code/community/Nextend2/library/applications/system/models/forms/font/extra.xml +6 -0
  301. app/code/community/Nextend2/library/applications/system/models/forms/font/form.xml +42 -0
  302. app/code/community/Nextend2/library/applications/system/models/forms/font/sets.xml +5 -0
  303. app/code/community/Nextend2/library/applications/system/models/forms/fonts.xml +12 -0
  304. app/code/community/Nextend2/library/applications/system/models/forms/globalconfig.xml +13 -0
  305. app/code/community/Nextend2/library/applications/system/models/forms/image/form.xml +37 -0
  306. app/code/community/Nextend2/library/applications/system/models/forms/login.xml +7 -0
  307. app/code/community/Nextend2/library/applications/system/models/forms/style/extra.xml +6 -0
  308. app/code/community/Nextend2/library/applications/system/models/forms/style/form.xml +58 -0
  309. app/code/community/Nextend2/library/applications/system/models/forms/style/sets.xml +5 -0
  310. app/code/community/Nextend2/library/applications/system/models/image.php +50 -0
  311. app/code/community/Nextend2/library/applications/system/models/login.php +19 -0
  312. app/code/community/Nextend2/library/applications/system/models/style.php +23 -0
  313. app/code/community/Nextend2/library/applications/system/models/visual.php +109 -0
  314. app/code/community/Nextend2/library/applications/system/plugins/loadplugin.php +10 -0
  315. app/code/community/Nextend2/library/applications/system/plugins/nextendfontservices/google/google.php +809 -0
  316. app/code/community/Nextend2/library/applications/system/plugins/nextendfontservices/google/google/config.xml +37 -0
  317. app/code/community/Nextend2/library/applications/system/plugins/nextendfontservices/loadplugin.php +10 -0
  318. app/code/community/Nextend2/library/cacert.pem +2063 -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,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class Nextend2_Nextend2_Model_Observer
4
+ {
5
+
6
+ public function buildCSSJS($observer) {
7
+ /** @var Mage_Core_Controller_Response_Http $response */
8
+ $response = $observer->getResponse();
9
+ Mage::dispatchEvent('n2_http_response_send_before', array('response' => $response));
10
+
11
+ if (class_exists('N2AssetsManager', false)) {
12
+ ob_start();
13
+ if (class_exists('N2AssetsManager')) {
14
+ echo N2AssetsManager::getCSS();
15
+ echo N2AssetsManager::getJs();
16
+ }
17
+
18
+ $head = ob_get_clean();
19
+ $response->setBody(preg_replace('/<\/head>/', $head . '</head>', $response->getBody(), 1));
20
+ }
21
+ }
22
+
23
+ }
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,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ }
app/code/community/Nextend2/Nextend2/etc/adminhtml.xml ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <config>
3
+ <menu>
4
+ <nextend2_nextend2 translate="title" module="nextend2_nextend2">
5
+ <title>Nextend</title>
6
+ <sort_order>85</sort_order>
7
+ <action>adminhtml/nextend2/index</action>
8
+ <children>
9
+ <nextend2_nextend2 translate="title" module="nextend2_nextend2">
10
+ <title>Nextend Configuration</title>
11
+ <sort_order>87</sort_order>
12
+ <action>adminhtml/nextend2/index</action>
13
+ </nextend2_nextend2>
14
+ </children>
15
+ </nextend2_nextend2>
16
+ </menu>
17
+ <acl>
18
+ <resources>
19
+ <admin>
20
+ <children>
21
+ <nextend2library translate="title" module="nextend2_nextend2">
22
+ <title>Nextend2 Library</title>
23
+ <sort_order>-100</sort_order>
24
+ <children>
25
+ <index translate="title">
26
+ <title>Index Action</title>
27
+ <sort_order>1</sort_order>
28
+ </index>
29
+ </children>
30
+ </nextend2library>
31
+ </children>
32
+ </admin>
33
+ </resources>
34
+ </acl>
35
+ </config>
app/code/community/Nextend2/Nextend2/etc/config.xml ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <modules>
4
+ <Nextend2_Nextend2>
5
+ <version>2.0.15</version>
6
+ </Nextend2_Nextend2>
7
+ </modules>
8
+ <admin>
9
+ <routers>
10
+ <adminhtml>
11
+ <args>
12
+ <modules>
13
+ <nextend before="Mage_Adminhtml">Nextend2_Nextend2_Adminhtml</nextend>
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
+ <http_response_send_before>
41
+ <observers>
42
+ <nextend2_css_js>
43
+ <class>Nextend2_Nextend2_Model_Observer</class>
44
+ <method>buildCSSJS</method>
45
+ </nextend2_css_js>
46
+ </observers>
47
+ </http_response_send_before>
48
+ </events>
49
+ <resources>
50
+ <nextend2_setup>
51
+ <setup>
52
+ <module>Nextend2_Nextend2</module>
53
+ <class>Nextend2_Nextend2_Model_Resource_Setup</class>
54
+ </setup>
55
+ </nextend2_setup>
56
+ </resources>
57
+ </global>
58
+ </config>
app/code/community/Nextend2/Nextend2/sql/nextend2_setup/mysql4-install-1.0.0.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+ $installer->startSetup();
5
+
6
+ defined('NEXTEND_INSTALL') || define('NEXTEND_INSTALL', true);
7
+ require_once(dirname(__FILE__) . '/../../../magento/library.php');
8
+ N2Base::getApplication("system")->getApplicationType('backend')->render(array(
9
+ "controller" => "install",
10
+ "action" => "index"
11
+ ), array(true));
12
+
13
+ $installer->endSetup();
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,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ }
app/code/community/Nextend2/SmartSlider3/etc/adminhtml.xml ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0"?>
2
+ <config>
3
+ <menu>
4
+ <nextend2_nextend2>
5
+ <children>
6
+ <nextend2smartslider3 translate="title" module="nextend2smartslider3">
7
+ <title>Smart Slider 3</title>
8
+ <sort_order>86</sort_order>
9
+ <action>adminhtml/smartslider3/index</action>
10
+ </nextend2smartslider3>
11
+ </children>
12
+ </nextend2_nextend2>
13
+ </menu>
14
+ </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.15</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.php 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
+ <code><div onclick="return selectText(this);">{{widget type="nextend2smartslider3/slider" slider="<?php echo $sliderid; ?>"}}</div></code>
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
+ <code><div onclick="return selectText(this);">smartslider3[<?php echo $sliderid; ?>]</div></code>
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 = $product->getImageUrl();
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,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+
20
+ N2Loader::import('libraries.link', 'smartslider');
21
+ }
22
+
23
+ public function hasExpertMode() {
24
+ return !!N2SSPRO;
25
+ }
26
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/N2SmartsliderApplicationInfo.php ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderApplicationInfo extends N2ApplicationInfo
4
+ {
5
+
6
+ public function __construct() {
7
+ $this->path = dirname(__FILE__);
8
+ $this->assetPath = realpath(dirname(__FILE__) . "/../media");
9
+ parent::__construct();
10
+ }
11
+
12
+ public function isPublic() {
13
+ return true;
14
+ }
15
+
16
+ public function getName() {
17
+ return 'smartslider';
18
+ }
19
+
20
+ public function getLabel() {
21
+ return 'Smart Slider';
22
+ }
23
+
24
+ public function getInstance() {
25
+ require_once $this->path . NDS . "N2SmartsliderApplication.php";
26
+ return new N2SmartSliderApplication($this);
27
+ }
28
+
29
+ public function getPathKey() {
30
+ return '$ss$';
31
+ }
32
+
33
+ public function onNextendBaseReady() {
34
+ parent::onNextendBaseReady();
35
+
36
+ require_once dirname(__FILE__) . '/libraries/storage.php';
37
+ }
38
+
39
+ public function assetsBackend() {
40
+ static $once;
41
+ if ($once != null) {
42
+ return;
43
+ }
44
+ $once = true;
45
+
46
+ $path = $this->getAssetsPath();
47
+ N2CSS::addInline('.n2-expert {display: none !important;');
48
+
49
+
50
+ N2CSS::addFile($path . "/admin/css/smartslider.css", 'smartslider-backend');
51
+
52
+ foreach (glob($path . "/admin/js/*.js") AS $file) {
53
+ N2JS::addFile($file, 'smartslider-backend');
54
+ }
55
+ if (!N2Base::getApplication('smartslider')->storage->get('free', 'rated')) {
56
+ N2JS::addFile($path . "/admin/js/free/gopro.js", 'smartslider-free');
57
+ }
58
+
59
+
60
+ foreach (glob($path . "/admin/js/element/*.js") AS $file) {
61
+ N2JS::addFile($file, 'smartslider-backend');
62
+ }
63
+
64
+ N2Localization::addJS(array(
65
+ 'Insert',
66
+ 'Insert variable',
67
+ 'Choose the group',
68
+ 'Choose the variable',
69
+ 'Result',
70
+ 'Filter',
71
+ 'No',
72
+ 'Clean HTML',
73
+ 'Remove HTML',
74
+ 'Split',
75
+ 'Chars',
76
+ 'Words',
77
+ 'Start',
78
+ 'Length',
79
+ 'Find image',
80
+ 'Index',
81
+ 'Find link',
82
+ 'Index'
83
+ ));
84
+ foreach (glob($path . "/admin/js/generator/*.js") AS $file) {
85
+ N2JS::addFile($file, 'smartslider-backend');
86
+ }
87
+ foreach (glob($path . "/admin/js/generator/element/*.js") AS $file) {
88
+ N2JS::addFile($file, 'smartslider-backend');
89
+ }
90
+ foreach (glob($path . "/admin/js/item/*.js") AS $file) {
91
+ N2JS::addFile($file, 'smartslider-backend');
92
+ }
93
+ foreach (glob($path . "/admin/js/item/parser/*.js") AS $file) {
94
+ N2JS::addFile($file, 'smartslider-backend');
95
+ }
96
+ foreach (glob($path . "/admin/js/layer/*.js") AS $file) {
97
+ N2JS::addFile($file, 'smartslider-backend');
98
+ }
99
+ foreach (glob($path . "/admin/js/timeline/*.js") AS $file) {
100
+ N2JS::addFile($file, 'smartslider-backend');
101
+ }
102
+
103
+ N2Form::$documentation = 'http://doc.smartslider3.com/';
104
+ }
105
+
106
+ public function assetsFrontend() {
107
+ N2JS::addInline('window.N2SSPRO=' . N2SSPRO . ';', true);
108
+ N2JS::addInline('window.N2SSWHYPRO="' . N2SS3::getWhyProUrl() . '";', true);
109
+
110
+
111
+ $path = $this->getAssetsPath();
112
+
113
+ foreach (glob($path . "/js/*.js") AS $file) {
114
+ N2JS::addFile($file, 'smartslider-frontend');
115
+ }
116
+ foreach (glob($path . "/js/animation/*.js") AS $file) {
117
+ N2JS::addFile($file, 'smartslider-frontend');
118
+ }
119
+ foreach (glob($path . "/js/controls/*.js") AS $file) {
120
+ N2JS::addFile($file, 'smartslider-frontend');
121
+ }
122
+ foreach (glob($path . "/js/layers/*.js") AS $file) {
123
+ N2JS::addFile($file, 'smartslider-frontend');
124
+ }
125
+ foreach (glob($path . "/js/responsive/*.js") AS $file) {
126
+ N2JS::addFile($file, 'smartslider-frontend');
127
+ }
128
+ foreach (glob($path . "/js/item/*.js") AS $file) {
129
+ N2JS::addFile($file, 'smartslider-frontend');
130
+ }
131
+ }
132
+ }
133
+
134
+ return new N2SmartsliderApplicationInfo();
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/N2SmartsliderApplicationTypeBackend.php ADDED
@@ -0,0 +1,29 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ 'libraries.settings.layout',
21
+ 'libraries.settings.stylemanager',
22
+ 'libraries.settings.font',
23
+ 'libraries.language'
24
+ ), 'smartslider');
25
+
26
+ N2Loader::import('helpers.controller.N2SmartSliderController', 'smartslider.backend');
27
+ }
28
+
29
+ }
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/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,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSliderController extends N2SmartSliderController
4
+ {
5
+
6
+ public $sliderId = 0;
7
+
8
+ public function initialize() {
9
+ parent::initialize();
10
+
11
+ N2Loader::import(array(
12
+ 'models.Sliders',
13
+ 'models.Slides',
14
+ 'models.generator'
15
+ ), 'smartslider');
16
+
17
+ $this->sliderId = N2Request::getInt('sliderid');
18
+ }
19
+
20
+ public function actionClearCache() {
21
+ if ($this->validateToken()) {
22
+ $slidersModel = new N2SmartsliderSlidersModel();
23
+ $slider = $slidersModel->get($this->sliderId);
24
+ if ($this->validateDatabase($slider)) {
25
+
26
+ $slidersModel->refreshCache($this->sliderId);
27
+ N2Message::success(n2_('Cache cleared.'));
28
+ $this->redirect(array(
29
+ "slider/edit",
30
+ array("sliderid" => $this->sliderId)
31
+ ));
32
+ }
33
+ }
34
+ }
35
+
36
+ public function actionCachedSlider() {
37
+ if ($this->validateToken()) {
38
+ $slidersModel = new N2SmartsliderSlidersModel();
39
+ $slider = $slidersModel->get($this->sliderId);
40
+ if ($this->validateDatabase($slider)) {
41
+
42
+ $this->addView('cachedslider', array(
43
+ 'slider' => $slider
44
+ ));
45
+ $this->render();
46
+
47
+ }
48
+ }
49
+ }
50
+
51
+ public function actionEdit() {
52
+
53
+ if ($this->validatePermission('smartslider_edit')) {
54
+
55
+ $slidersModel = new N2SmartsliderSlidersModel();
56
+
57
+ $slider = $slidersModel->get($this->sliderId);
58
+
59
+ if (!$slider) {
60
+ $this->redirectToSliders();
61
+ }
62
+
63
+ N2Loader::import('libraries.fonts.fontmanager');
64
+ N2Loader::import('libraries.stylemanager.stylemanager');
65
+
66
+ $this->addView("edit", array(
67
+ 'slider' => $slider
68
+ ));
69
+
70
+ $this->render();
71
+
72
+ }
73
+ }
74
+
75
+ public function actionDelete() {
76
+ if ($this->validateToken() && $this->validatePermission('smartslider_delete')) {
77
+ $slidersModel = new N2SmartsliderSlidersModel();
78
+ $slidersModel->delete($this->sliderId);
79
+ N2Message::success(n2_('Slider deleted.'));
80
+ $this->redirectToSliders();
81
+ }
82
+ }
83
+
84
+ public function actionDuplicate() {
85
+ if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
86
+ $slidersModel = new N2SmartsliderSlidersModel();
87
+ if (($sliderid = N2Request::getInt('sliderid')) && $slidersModel->get($sliderid)) {
88
+ $newSliderId = $slidersModel->duplicate($sliderid);
89
+ N2Message::success(n2_('Slider duplicated.'));
90
+ $this->redirect(array(
91
+ "slider/edit",
92
+ array("sliderid" => $newSliderId)
93
+ ));
94
+ }
95
+ $this->redirectToSliders();
96
+ }
97
+ }
98
+
99
+ public function actionExport() {
100
+ if ($this->validateToken() && $this->validatePermission('smartslider_edit')) {
101
+ N2Loader::import('libraries.export', 'smartslider');
102
+ $export = new N2SmartSliderExport($this->sliderId);
103
+ $export->create();
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
+ public function actionPublishHTML() {
116
+ }
117
+
118
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/Sliders.php ADDED
@@ -0,0 +1,167 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSlidersController extends N2SmartSliderController
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
+ public function actionIndex() {
16
+ N2Loader::import(array(
17
+ 'models.Layouts',
18
+ 'models.SliderItems'
19
+ ), 'smartslider');
20
+
21
+ $this->addView(null);
22
+ $this->render();
23
+ }
24
+
25
+ public function actionOrderBy() {
26
+ $time = N2Request::getCmd('time', null);
27
+ if ($time == 'DESC' || $time == 'ASC') {
28
+ N2SmartSliderSettings::set('slidersOrder', 'time');
29
+ N2SmartSliderSettings::set('slidersOrderDirection', $time);
30
+ }
31
+ $title = N2Request::getCmd('title', null);
32
+ if ($title == 'DESC' || $title == 'ASC') {
33
+ N2SmartSliderSettings::set('slidersOrder', 'title');
34
+ N2SmartSliderSettings::set('slidersOrderDirection', $title);
35
+ }
36
+ $this->redirectToSliders();
37
+ }
38
+
39
+ public function actionExportAll() {
40
+ N2Loader::import('libraries.export', 'smartslider');
41
+ $slidersModel = new N2SmartsliderSlidersModel();
42
+ $sliders = $slidersModel->getAll();
43
+ foreach ($sliders AS $slider) {
44
+ $export = new N2SmartSliderExport($slider['id']);
45
+ $export->create(true);
46
+ }
47
+
48
+ $folder = N2Platform::getPublicDir();
49
+ $folder .= '/export/';
50
+ $zip = new N2ZipFile();
51
+
52
+ foreach (N2Filesystem::files($folder) AS $file) {
53
+ $zip->addFile(file_get_contents($folder . $file), $file);
54
+ }
55
+ ob_end_clean();
56
+ header('Content-disposition: attachment; filename=sliders_unzip_to_import.zip');
57
+ header('Content-type: application/zip');
58
+ echo $zip->file();
59
+ n2_exit(true);
60
+ }
61
+
62
+ public function actionImportByUpload() {
63
+ if ($this->validatePermission('smartslider_edit')) {
64
+ if (empty($_FILES) && empty($_POST) && isset($_SERVER['REQUEST_METHOD']) && strtolower($_SERVER['REQUEST_METHOD']) == 'post') {
65
+ 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')));
66
+
67
+ $this->redirect(array(
68
+ "sliders/importFromServer"
69
+ ));
70
+ } else if (N2Request::getInt('save')) {
71
+ if ($this->validateToken() && isset($_FILES['slider']) && isset($_FILES['slider']['tmp_name']['import-file'])) {
72
+
73
+ switch ($_FILES['slider']['error']['import-file']) {
74
+ case UPLOAD_ERR_OK:
75
+ break;
76
+ case UPLOAD_ERR_NO_FILE:
77
+ throw new RuntimeException('No file sent.');
78
+ case UPLOAD_ERR_INI_SIZE:
79
+ case UPLOAD_ERR_FORM_SIZE:
80
+ throw new RuntimeException('Exceeded filesize limit.');
81
+ default:
82
+ throw new RuntimeException('Unknown errors.');
83
+ }
84
+
85
+ if (N2Filesystem::fileexists($_FILES['slider']['tmp_name']['import-file'])) {
86
+
87
+ $data = new N2Data(N2Request::getVar('slider'));
88
+
89
+ N2Loader::import('libraries.import', 'smartslider');
90
+ $import = new N2SmartSliderImport();
91
+ $sliderId = $import->import($_FILES['slider']['tmp_name']['import-file'], $data->get('image-mode', 'clone'), $data->get('linked-visuals', 0));
92
+
93
+ if ($sliderId !== false) {
94
+ N2Message::success(n2_('Slider imported.'));
95
+ $this->redirect(array(
96
+ "slider/edit",
97
+ array("sliderid" => $sliderId)
98
+ ));
99
+ } else {
100
+ N2Message::error(n2_('Import error!'));
101
+ $this->refresh();
102
+ }
103
+ } else {
104
+ N2Message::error(n2_('The imported file is not readable!'));
105
+ $this->refresh();
106
+ }
107
+
108
+
109
+ } else {
110
+
111
+ }
112
+ }
113
+
114
+ $this->addView('importByUpload');
115
+ $this->render();
116
+ }
117
+ }
118
+
119
+ public function actionImportFromServer() {
120
+ if ($this->validatePermission('smartslider_edit')) {
121
+
122
+
123
+ if (N2Request::getInt('save')) {
124
+
125
+ if ($this->validateToken()) {
126
+ $data = new N2Data(N2Request::getVar('slider'));
127
+ $file = $data->get('import-file');
128
+ if (empty($file)) {
129
+ N2Message::error(n2_('Please select a file!'));
130
+ $this->refresh();
131
+ } else {
132
+ $dir = N2Platform::getPublicDir();
133
+ if (N2Filesystem::fileexists($dir . '/' . $file)) {
134
+ N2Loader::import('libraries.import', 'smartslider');
135
+ $import = new N2SmartSliderImport();
136
+ $sliderId = $import->import($dir . '/' . $file, $data->get('image-mode', 'clone'), $data->get('linked-visuals', 0));
137
+
138
+ if ($sliderId !== false) {
139
+
140
+ if ($data->get('delete')) {
141
+ @unlink($dir . '/' . $file);
142
+ }
143
+
144
+ N2Message::success(n2_('Slider imported.'));
145
+ $this->redirect(array(
146
+ "slider/edit",
147
+ array("sliderid" => $sliderId)
148
+ ));
149
+ } else {
150
+ N2Message::error(n2_('Import error!'));
151
+ $this->refresh();
152
+ }
153
+ } else {
154
+ N2Message::error(n2_('The chosen file is missing!'));
155
+ $this->refresh();
156
+ }
157
+ }
158
+ } else {
159
+ $this->refresh();
160
+ }
161
+ }
162
+
163
+ $this->addView('importFromServer');
164
+ $this->render();
165
+ }
166
+ }
167
+ }
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
+
6
+ public $layoutName = 'default';
7
+
8
+ public function initialize() {
9
+ parent::initialize();
10
+
11
+ N2Loader::import(array(
12
+ 'models.Sliders',
13
+ 'models.generator',
14
+ 'models.Layouts',
15
+ 'models.Layers',
16
+ 'models.Item',
17
+ 'models.Slides'
18
+ ), 'smartslider');
19
+
20
+ N2Localization::addJS(array(
21
+ 'In animation',
22
+ 'Loop animation',
23
+ 'Out animation'
24
+ ));
25
+ }
26
+
27
+ private function initAdminSlider() {
28
+ $sliderManager = new N2SmartSliderManager(N2Get::getInt('sliderid'), true, array(
29
+ 'disableResponsive' => true
30
+ ));
31
+ $this->appType->app->set('sliderManager', $sliderManager);
32
+ }
33
+
34
+ public function actionCreate() {
35
+ if ($this->validatePermission('smartslider_edit')) {
36
+
37
+ $slidersModel = new N2SmartsliderSlidersModel();
38
+ $sliderId = N2Request::getInt('sliderid');
39
+ $slider = $slidersModel->get($sliderId);
40
+ if ($this->validateDatabase($slider)) {
41
+ $this->initAdminSlider();
42
+
43
+ $this->addView("../../inline/_sidebar_slide", array(
44
+ "appObj" => $this,
45
+ "slider" => $slider
46
+ ), "sidebar");
47
+ $this->addView("edit", array(
48
+ "slidesModel" => new N2SmartsliderSlidesModel(),
49
+ "sliderId" => $sliderId
50
+ ));
51
+ $this->render();
52
+
53
+ }
54
+ }
55
+ }
56
+
57
+ public function actionEdit() {
58
+ if ($this->validatePermission('smartslider_edit')) {
59
+ $slidersModel = new N2SmartsliderSlidersModel();
60
+ $sliderId = N2Request::getInt('sliderid');
61
+ $slider = $slidersModel->get($sliderId);
62
+ if ($this->validateDatabase($slider)) {
63
+ $slidesModel = new N2SmartsliderSlidesModel();
64
+ if (!$slidesModel->get(N2Request::getInt('slideid'))) {
65
+ $this->redirect("sliders/index");
66
+ }
67
+
68
+ $this->initAdminSlider();
69
+
70
+ $this->addView("../../inline/_sidebar_slide", array(
71
+ "appObj" => $this,
72
+ "slider" => $slider
73
+ ), "sidebar");
74
+ $this->addView("edit", array(
75
+ "slidesModel" => new N2SmartsliderSlidesModel(),
76
+ "sliderId" => $sliderId
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,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class N2SmartsliderBackendUpdateController extends N2SmartSliderController
3
+ {
4
+
5
+ public function actionCheck() {
6
+ if ($this->validateToken()) {
7
+ $status = N2SmartsliderUpdateModel::getInstance()
8
+ ->check();
9
+
10
+ $hasError = N2SS3::hasApiError($status);
11
+ if (is_array($hasError)) {
12
+ $this->redirect($hasError);
13
+ }
14
+
15
+ $this->redirectToSliders();
16
+ } else {
17
+ $this->refresh();
18
+ }
19
+ }
20
+
21
+
22
+ public function actionUpdate() {
23
+ if ($this->validateToken()) {
24
+ $status = N2SmartsliderUpdateModel::getInstance()
25
+ ->update();
26
+
27
+ $hasError = N2SS3::hasApiError($status);
28
+ if (is_array($hasError)) {
29
+ $this->redirect($hasError);
30
+ } else if ($hasError === false) {
31
+ N2Message::success(n2_('Smart Slider 3 updated to the latest version!'));
32
+ }
33
+
34
+ $this->redirectToSliders();
35
+ } else {
36
+ $this->refresh();
37
+ }
38
+ }
39
+
40
+ }
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 = NHtml::tag('thead', array(), NHtml::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][] = NHtml::tag('div', array(), htmlentities($v));
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 = NHtml::tag('tbody', array(), '<tr>' . implode('</tr><tr>', $rows) . '</tr>');
92
+
93
+
94
+ echo NHtml::tag('div', array('style' => 'width: 100%; height: 100%; overflow: auto;'), NHtml::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,11 @@
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSettingsControllerAjax extends N2SmartSliderControllerAjax
4
+ {
5
+
6
+ public function actionRated() {
7
+ $this->validateToken();
8
+ $this->appType->app->storage->set('free', 'rated', 1);
9
+ $this->response->respond();
10
+ }
11
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Slider.php ADDED
@@ -0,0 +1,212 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSliderControllerAjax extends N2SmartSliderControllerAjax
4
+ {
5
+
6
+ public function initialize() {
7
+ parent::initialize();
8
+
9
+ N2Loader::import(array(
10
+ 'models.Ajax',
11
+ 'models.Sliders'
12
+ ), 'smartslider');
13
+ }
14
+
15
+ public function actionCreate() {
16
+ $this->validateToken();
17
+ $this->validatePermission('smartslider_edit');
18
+ $slidersModel = new N2SmartsliderSlidersModel();
19
+
20
+ $title = N2Request::getVar('sliderTitle');
21
+ $this->validateVariable(!empty($title), 'slider name');
22
+
23
+ $slider = array(
24
+ 'type' => 'simple',
25
+ 'title' => N2Request::getVar('sliderTitle'),
26
+ 'width' => max(N2Request::getInt('sliderSizeWidth', 800), 50),
27
+ 'height' => max(N2Request::getInt('sliderSizeHeight', 500), 50)
28
+ );
29
+
30
+ $preset = N2Request::getVar('preset');
31
+ switch ($preset) {
32
+ case 'fullwidth':
33
+ $slider['responsive-mode'] = 'fullwidth';
34
+ $slider['widgetarrow'] = 'imageEmpty';
35
+ break;
36
+ case 'fullpage':
37
+ $slider['responsive-mode'] = 'fullpage';
38
+ $slider['widgetarrow'] = 'imageEmpty';
39
+ break;
40
+ case 'block':
41
+ $slider['type'] = 'block';
42
+ $slider['responsive-mode'] = 'fullwidth';
43
+ break;
44
+ case 'showcase':
45
+ $slider['type'] = 'showcase';
46
+ $slider['slide-width'] = intval($slider['width'] * 0.8);
47
+ $slider['slide-height'] = intval($slider['height'] * 0.8);
48
+ break;
49
+ case 'carousel':
50
+ $slider['responsiveScaleUp'] = 1;
51
+ $slider['type'] = 'carousel';
52
+ $slider['slide-width'] = intval(($slider['width'] - 40) * 0.32);
53
+ $slider['slide-height'] = intval($slider['height'] * 0.8);
54
+ $slider['widgetbullet'] = 'transitionRectangle';
55
+ $slider['widgetarrow'] = 'disabled';
56
+ break;
57
+ case 'thumbnailhorizontal':
58
+ $slider['widgetthumbnail'] = 'default';
59
+ break;
60
+ case 'thumbnailvertical':
61
+ $slider['widgetthumbnail'] = 'default';
62
+ $slider['widget-thumbnail-position-area'] = '8';
63
+ break;
64
+ case 'caption':
65
+ $slider['widgetarrow'] = 'imageEmpty';
66
+ $slider['widgetbar'] = 'horizontalFull';
67
+ break;
68
+ case 'horizontalaccordion':
69
+ $slider['type'] = 'accordion';
70
+ $slider['orientation'] = 'horizontal';
71
+ break;
72
+ case 'verticalaccordion':
73
+ $slider['type'] = 'accordion';
74
+ $slider['orientation'] = 'vertical';
75
+ break;
76
+ default:
77
+ $slider['widgetarrow'] = 'imageEmpty';
78
+ }
79
+
80
+ $sliderid = $slidersModel->create($slider);
81
+
82
+ N2Message::success(n2_('Slider created.'));
83
+
84
+ $this->response->redirect(array(
85
+ "slider/edit",
86
+ array("sliderid" => $sliderid)
87
+ ));
88
+ }
89
+
90
+ public function actionEdit() {
91
+ $this->validateToken();
92
+ $this->validatePermission('smartslider_edit');
93
+
94
+ if (N2Request::getInt('save')) {
95
+
96
+ $slidersModel = new N2SmartsliderSlidersModel();
97
+
98
+ $slider = $slidersModel->get(N2Request::getInt('sliderid'));
99
+ $this->validateDatabase($slider);
100
+ if ($sliderid = $slidersModel->save($slider['id'], N2Request::getVar('slider'))) {
101
+ N2Message::success(n2_('Slider saved.'));
102
+ $this->response->respond();
103
+ }
104
+ }
105
+
106
+ $response = null;
107
+
108
+ $id = N2Request::getCmd('id');
109
+
110
+ $ajaxModel = new N2SmartSliderAjaxModel();
111
+
112
+ ob_start();
113
+ switch ($id) {
114
+ case 'slidertype':
115
+ $response = $ajaxModel->sliderType($this->appType);
116
+ break;
117
+ case 'sliderresponsivemode':
118
+ $response = $ajaxModel->sliderResponsiveMode($this->appType);
119
+ break;
120
+ case 'sliderwidgetarrow':
121
+ $response = $ajaxModel->sliderWidget($this->appType, 'arrow');
122
+ break;
123
+ case 'sliderwidgetbullet':
124
+ $response = $ajaxModel->sliderWidget($this->appType, 'bullet');
125
+ break;
126
+ case 'sliderwidgetautoplay':
127
+ $response = $ajaxModel->sliderWidget($this->appType, 'autoplay');
128
+ break;
129
+ case 'sliderwidgetindicator':
130
+ $response = $ajaxModel->sliderWidget($this->appType, 'indicator');
131
+ break;
132
+ case 'sliderwidgetfullscreen':
133
+ $response = $ajaxModel->sliderWidget($this->appType, 'fullscreen');
134
+ break;
135
+ case 'sliderwidgetbar':
136
+ $response = $ajaxModel->sliderWidget($this->appType, 'bar');
137
+ break;
138
+ case 'sliderwidgetthumbnail':
139
+ $response = $ajaxModel->sliderWidget($this->appType, 'thumbnail');
140
+ break;
141
+ case 'sliderwidgetshadow':
142
+ $response = $ajaxModel->sliderWidget($this->appType, 'shadow');
143
+ break;
144
+ case 'sliderwidgethtml':
145
+ $response = $ajaxModel->sliderWidget($this->appType, 'html');
146
+ break;
147
+ }
148
+
149
+ if ($response == null) {
150
+ $response = array(
151
+ 'html' => '',
152
+ 'script' => ''
153
+ );
154
+ }
155
+ $response['html'] .= ob_get_clean();
156
+
157
+ $this->response->respond($response);
158
+ }
159
+
160
+ public function actionImportDemo() {
161
+ $this->validateToken();
162
+ $this->validatePermission('smartslider_edit');
163
+
164
+ $key = 'http:' . base64_decode(N2Request::getVar('key'));
165
+ if (strpos($key, 'http://smartslider3.com/') !== 0) {
166
+ N2Message::error(sprintf(n2_('Import url is not valid: %s'), $key));
167
+ $this->response->error();
168
+ }
169
+
170
+ $posts = array(
171
+ 'action' => 'asset',
172
+ 'asset' => $key
173
+ );
174
+ $result = N2SS3::api($posts);
175
+
176
+ if (!is_string($result)) {
177
+ $hasError = N2SS3::hasApiError($result['status'], array(
178
+ 'key' => $key
179
+ ));
180
+ if (is_array($hasError)) {
181
+ $this->redirect($hasError);
182
+ } else if ($hasError !== false) {
183
+ $this->response->error();
184
+ }
185
+ } else {
186
+
187
+ N2Loader::import(array(
188
+ 'models.Sliders',
189
+ 'models.Slides'
190
+ ), 'smartslider');
191
+
192
+ N2Loader::import('libraries.import', 'smartslider');
193
+
194
+ $import = new N2SmartSliderImport();
195
+ $sliderId = $import->import($result, 'clone', 1, false);
196
+
197
+ if ($sliderId !== false) {
198
+ N2Message::success(n2_('Slider imported.'));
199
+
200
+ $this->response->redirect(array(
201
+ "slider/edit",
202
+ array("sliderid" => $sliderId)
203
+ ));
204
+ } else {
205
+ N2Message::error(n2_('Import error!'));
206
+ $this->response->error();
207
+ }
208
+ }
209
+
210
+ $this->response->respond();
211
+ }
212
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/controllers/ajax/Slides.php ADDED
@@ -0,0 +1,296 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderBackendSlidesControllerAjax extends N2SmartSliderControllerAjax
4
+ {
5
+
6
+ public function initialize() {
7
+ parent::initialize();
8
+
9
+ N2Loader::import(array(
10
+ 'models.Slides',
11
+ 'models.Sliders',
12
+ 'models.generator'
13
+ ), 'smartslider');
14
+ }
15
+
16
+ public function actionCreate() {
17
+ $this->validateToken();
18
+ $this->validatePermission('smartslider_edit');
19
+
20
+ $slidersModel = new N2SmartsliderSlidersModel();
21
+ $sliderId = N2Request::getInt('sliderid');
22
+ $slider = $slidersModel->get($sliderId);
23
+ $this->validateDatabase($slider);
24
+
25
+ if (N2Request::getInt('save')) {
26
+ $slidesModel = new N2SmartsliderSlidesModel();
27
+ $slideId = $slidesModel->create($sliderId, N2Request::getVar('slide'));
28
+ $this->validateDatabase($slideId);
29
+
30
+ $this->response->redirect(array(
31
+ "slides/edit",
32
+ array(
33
+ "sliderid" => N2Request::getInt("sliderid"),
34
+ "slideid" => $slideId
35
+ )
36
+ ));
37
+ }
38
+ }
39
+
40
+ public function actionEdit() {
41
+ $this->validateToken();
42
+ $this->validatePermission('smartslider_edit');
43
+
44
+ $slidersModel = new N2SmartsliderSlidersModel();
45
+ $sliderId = N2Request::getInt('sliderid');
46
+ $slider = $slidersModel->get($sliderId);
47
+
48
+ $this->validateDatabase($slider);
49
+
50
+ $slidesModel = new N2SmartsliderSlidesModel();
51
+ $this->validateDatabase($slidesModel->get(N2Request::getInt('slideid')));
52
+
53
+ $response = array();
54
+
55
+ if (N2Request::getInt('save')) {
56
+ if ($slideId = $slidesModel->save(N2Request::getInt('slideid'), N2Request::getVar('slide'))) {
57
+ N2Message::success(n2_('Slide saved.'));
58
+ if (N2Request::getInt('static') == 1) {
59
+ $slideCount = $slidesModel->makeStatic(N2Request::getInt('slideid'));
60
+ if ($slideCount) {
61
+ N2Message::success(sprintf(n2_('%d static slides generated.'), $slideCount));
62
+
63
+ $this->response->redirect(array(
64
+ "slider/edit",
65
+ array(
66
+ "sliderid" => $sliderId
67
+ )
68
+ ));
69
+ }
70
+ }
71
+ }
72
+ }
73
+ $this->response->respond($response);
74
+ }
75
+
76
+ public function actionFirst() {
77
+ $this->validateToken();
78
+
79
+ $this->validatePermission('smartslider_edit');
80
+
81
+ $slideId = N2Request::getInt('id');
82
+ $this->validateVariable($slideId > 0, 'Slide id');
83
+
84
+ $slidesModel = new N2SmartsliderSlidesModel();
85
+ $slidesModel->first($slideId);
86
+ N2Message::success(n2_('First slide changed.'));
87
+
88
+ $this->response->respond();
89
+ }
90
+
91
+ public function actionPublish() {
92
+ $this->validateToken();
93
+
94
+ $this->validatePermission('smartslider_edit');
95
+
96
+ $ids = array_map('intval', array_filter((array)N2Request::getVar('slides'), 'is_numeric'));
97
+
98
+ $this->validateVariable(count($ids), 'Slides');
99
+
100
+ $slidesModel = new N2SmartsliderSlidesModel();
101
+ foreach ($ids AS $id) {
102
+ if ($id > 0) {
103
+ $slidesModel->publish($id);
104
+ }
105
+ }
106
+ N2Message::success(n2_('Slide published.'));
107
+ $this->response->respond();
108
+ }
109
+
110
+ public function actionUnPublish() {
111
+ $this->validateToken();
112
+
113
+ $this->validatePermission('smartslider_edit');
114
+
115
+ $ids = array_map('intval', array_filter((array)N2Request::getVar('slides'), 'is_numeric'));
116
+ $this->validateVariable(count($ids), 'Slides');
117
+
118
+ $slidesModel = new N2SmartsliderSlidesModel();
119
+ foreach ($ids AS $id) {
120
+ if ($id > 0) {
121
+ $slidesModel->unpublish($id);
122
+ }
123
+ }
124
+ N2Message::success(n2_('Slide unpublished.'));
125
+ $this->response->respond();
126
+ }
127
+
128
+ public function actionOrder() {
129
+ $this->validateToken();
130
+
131
+ $this->validatePermission('smartslider_edit');
132
+
133
+ $sliderid = N2Request::getInt('sliderid');
134
+ $this->validateVariable($sliderid > 0, 'Slider');
135
+
136
+ $slidesModel = new N2SmartsliderSlidesModel();
137
+
138
+ $result = $slidesModel->order($sliderid, N2Request::getVar('slideorder'));
139
+ $this->validateDatabase($result);
140
+
141
+ N2Message::success(n2_('Slide order saved.'));
142
+ $this->response->respond();
143
+ }
144
+
145
+
146
+ public function actionDuplicate() {
147
+ $this->validateToken();
148
+
149
+ $this->validatePermission('smartslider_edit');
150
+
151
+ $slideId = N2Request::getInt('slideid');
152
+ $this->validateVariable($slideId > 0, 'Slide');
153
+
154
+ $slidesModel = new N2SmartsliderSlidesModel();
155
+ $newSlideId = $slidesModel->duplicate($slideId);
156
+ $slide = $slidesModel->get($newSlideId);
157
+
158
+ $this->validateDatabase($slide);
159
+
160
+ N2Message::success(n2_('Slide duplicated.'));
161
+
162
+ $sliderObj = new N2SmartSlider($slide['slider'], array());
163
+ $slideObj = new N2SmartSliderSlide($sliderObj, $slide);
164
+ $slideObj->initGenerator();
165
+ $slideObj->fillSample();
166
+
167
+ $this->addView('slidebox', array(
168
+ 'slider' => $sliderObj,
169
+ 'slide' => $slideObj
170
+ ));
171
+ ob_start();
172
+ $this->render();
173
+ $box = ob_get_clean();
174
+ $this->response->respond($box);
175
+ }
176
+
177
+
178
+ public function actionDelete() {
179
+ $this->validateToken();
180
+
181
+ $this->validatePermission('smartslider_delete');
182
+
183
+ $ids = array_map('intval', array_filter((array)N2Request::getVar('slides'), 'is_numeric'));
184
+
185
+ $this->validateVariable(count($ids), 'Slide');
186
+
187
+ $slidesModel = new N2SmartsliderSlidesModel();
188
+ foreach ($ids AS $id) {
189
+ if ($id > 0) {
190
+ $slidesModel->delete($id);
191
+ }
192
+ }
193
+ N2Message::success(n2_('Slide deleted.'));
194
+ $this->response->respond();
195
+ }
196
+
197
+ public function actionQuickImages() {
198
+ $this->validateToken();
199
+
200
+ $this->validatePermission('smartslider_edit');
201
+
202
+ $sliderId = N2Request::getInt('sliderid');
203
+ $this->validateVariable($sliderId > 0, 'Slider');
204
+
205
+ $images = json_decode(base64_decode(N2Request::getVar('images')), true);
206
+ $this->validateVariable(count($images), 'Images');
207
+
208
+ $sliderObj = new N2SmartSlider($sliderId, array());
209
+ $slidesModel = new N2SmartsliderSlidesModel();
210
+ foreach ($images AS $image) {
211
+ $newSlideId = $slidesModel->createQuickImage($image, $sliderId);
212
+ $slide = $slidesModel->get($newSlideId);
213
+
214
+ $slideObj = new N2SmartSliderSlide($sliderObj, $slide);
215
+ $slideObj->initGenerator();
216
+ $slideObj->fillSample();
217
+
218
+ $this->addView('slidebox', array(
219
+ 'slider' => $sliderObj,
220
+ 'slide' => $slideObj
221
+ ));
222
+ }
223
+
224
+ ob_start();
225
+ $this->render();
226
+ $box = ob_get_clean();
227
+ N2Message::success(n2_n('Slide created.', 'Slides created.', count($images)));
228
+ $this->response->respond($box);
229
+ }
230
+
231
+ public function actionQuickVideo() {
232
+ $this->validateToken();
233
+
234
+ $this->validatePermission('smartslider_edit');
235
+
236
+ $sliderId = N2Request::getInt('sliderid');
237
+ $this->validateVariable($sliderId > 0, 'Slider');
238
+
239
+ $slidesModel = new N2SmartsliderSlidesModel();
240
+ $video = json_decode(base64_decode(N2Request::getVar('video')), true);
241
+ $this->validateVariable($video, 'Video');
242
+
243
+ $newSlideId = $slidesModel->createQuickVideo($video, $sliderId);
244
+ $slide = $slidesModel->get($newSlideId);
245
+ $this->validateDatabase($slide);
246
+
247
+ $sliderObj = new N2SmartSlider($slide['slider'], array());
248
+ $slideObj = new N2SmartSliderSlide($sliderObj, $slide);
249
+ $slideObj->initGenerator();
250
+ $slideObj->fillSample();
251
+
252
+ $this->addView('slidebox', array(
253
+ 'slider' => $sliderObj,
254
+ 'slide' => $slideObj
255
+ ));
256
+
257
+ ob_start();
258
+ $this->render();
259
+ $box = ob_get_clean();
260
+ N2Message::success(n2_('Slide created.'));
261
+ $this->response->respond($box);
262
+ }
263
+
264
+ public function actionQuickPost() {
265
+ $this->validateToken();
266
+
267
+ $this->validatePermission('smartslider_edit');
268
+
269
+ $sliderId = N2Request::getInt('sliderid');
270
+ $this->validateVariable($sliderId > 0, 'Slider');
271
+
272
+ $slidesModel = new N2SmartsliderSlidesModel();
273
+ $post = N2Request::getVar('post');
274
+ $this->validateVariable($post, 'Post');
275
+
276
+ $newSlideId = $slidesModel->createQuickPost($post, $sliderId);
277
+ $slide = $slidesModel->get($newSlideId);
278
+ $this->validateDatabase($slide);
279
+
280
+ $sliderObj = new N2SmartSlider($slide['slider'], array());
281
+ $slideObj = new N2SmartSliderSlide($sliderObj, $slide);
282
+ $slideObj->initGenerator();
283
+ $slideObj->fillSample();
284
+
285
+ $this->addView('slidebox', array(
286
+ 'slider' => $sliderObj,
287
+ 'slide' => $slideObj
288
+ ));
289
+
290
+ ob_start();
291
+ $this->render();
292
+ $box = ob_get_clean();
293
+ N2Message::success(n2_('Slide created.'));
294
+ $this->response->respond($box);
295
+ }
296
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/helpers/controller/N2SmartSliderController.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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.GroupStorage',
13
+ 'models.License',
14
+ 'models.Update'
15
+ ), 'smartslider');
16
+ N2JS::addInline("new NextendSmartSliderCreateSlider('" . $this->appType->router->createUrl(array('slider/create')) . "');");
17
+
18
+ N2Localization::addJS(array(
19
+ 'Create Slider',
20
+ 'Slider name',
21
+ 'Slider',
22
+ 'Width',
23
+ 'Height',
24
+ 'Create',
25
+ 'Preset',
26
+ 'Default',
27
+ 'Full width',
28
+ 'Full page',
29
+ 'Block',
30
+ 'Thumbnail - horizontal',
31
+ 'Thumbnail - vertical',
32
+ 'Caption',
33
+ 'Horizontal accordion',
34
+ 'Vertical accordion',
35
+ 'Showcase',
36
+ 'Saved slide'
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.GroupStorage',
54
+ 'models.License'
55
+ ), 'smartslider');
56
+ }
57
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/_sidebar_settings.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ );
15
+
16
+ N2Plugin::callPlugin('ssgenerator', 'onSmartSliderConfigurationList', array(&$settings));
17
+
18
+ $dl = array();
19
+
20
+ foreach ($settings AS $id => $setting) {
21
+ $linkOptions = isset($setting['linkOptions']) ? $setting['linkOptions'] : array();
22
+ $linkOptions['href'] = $this->appType->router->createUrl($setting['url']);
23
+ $dl[] = array(
24
+ 'title' => $setting['title'],
25
+ 'class' => ($action == $id ? 'n2-active ' : ''),
26
+ 'linkOptions' => $linkOptions
27
+ );
28
+ }
29
+
30
+ echo $this->widget->init("definitionlist", array(
31
+ "dl" => $dl
32
+ ));
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/_sidebar_slide.php ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import("models.Layouts", "smartslider");
3
+ N2Loader::import("models.Layers", "smartslider");
4
+ N2Loader::import("models.Item", "smartslider");
5
+ ?>
6
+
7
+ <div id="n2-ss-slide-sidebar" class="smartslider-slide-toolbox-slide-active smartslider-slide-layout-default-active">
8
+ <div id="n2-ss-slide-editor-main-tab" class="n2-table n2-table-fixed n2-sidebar-tab-switcher n2-sidebar-tab-bg">
9
+ <div class="n2-tr">
10
+ <div class="n2-td n2-h3 n2-uc n2-has-underline n2-slides-tab-label">
11
+ <span class="n2-underline"><?php n2_e('Slides'); ?></span>
12
+ </div>
13
+
14
+ <div style="<?php if (N2SSPRO) echo 'width:40%;'; ?>"
15
+ class="n2-td n2-h3 n2-uc n2-has-underline n2-layers-tab-label n2-active">
16
+ <span class="n2-underline"><?php n2_e('Layers'); ?></span>
17
+ </div>
18
+ <?php
19
+ ?>
20
+ </div>
21
+ </div>
22
+
23
+ <div class="n2-slides-tab" style="display:none;">
24
+ <?php
25
+ $this->renderInline("_sliders");
26
+ ?>
27
+ </div>
28
+
29
+ <div class="n2-layers-tab" style="display:block;">
30
+
31
+ <div id="smartslider-slide-toolbox-layer">
32
+ <?php
33
+
34
+ $class = 'N2SSPluginType' . $slider['type'];
35
+
36
+ N2Loader::importPath(call_user_func(array(
37
+ $class,
38
+ "getPath"
39
+ )) . NDS . 'type');
40
+ $itemDefaults = call_user_func(array(
41
+ 'N2SmartSliderType' . $slider['type'],
42
+ 'getItemDefaults'
43
+ ));
44
+ ?>
45
+ <script type="text/javascript">
46
+ window.ssitemmarker = true;
47
+ </script>
48
+ <div id="n2-ss-item-container" class="n2-sidebar-list-bg">
49
+ <?php
50
+ $items = array();
51
+ N2Plugin::callPlugin('ssitem', 'onNextendSliderItemList', array(&$items));
52
+ N2SSPluginItemAbstract::sortItems($items);
53
+
54
+ foreach ($items AS $type => $item) {
55
+ echo NHtml::tag('div', array(
56
+ 'class' => 'n2-h5 n2-ss-core-item n2-ss-core-item-' . $type,
57
+ 'data-layerproperties' => json_encode((object)array_merge($item[5], $itemDefaults)),
58
+ 'data-item' => $type
59
+ ), NHtml::tag('div', array(), $item[0]));
60
+ }
61
+ ?>
62
+ </div>
63
+ <script type="text/javascript">
64
+ delete window.ssitemmarker;
65
+ </script>
66
+
67
+ <div id="n2-ss-layers-items-list">
68
+ <ul class="n2-list n2-h4 n2-list-orderable">
69
+
70
+ </ul>
71
+ </div>
72
+
73
+ <div class="n2-sidebar-pane-sizer">
74
+ <i class="n2-i n2-it n2-i-drag"></i>
75
+ </div>
76
+
77
+ <div id="layeritemeditorpanel" class="n2-form-dark">
78
+ <?php
79
+
80
+ $layerModel = new N2SmartsliderLayersModel();
81
+ $layerModel->renderForm();
82
+ ?>
83
+ </div>
84
+ </div>
85
+
86
+ </div>
87
+
88
+ <?php
89
+ ?>
90
+
91
+
92
+ <script type="text/javascript">
93
+ nextend.ready(function ($) {
94
+ new NextendHeadingPane($('#n2-ss-slide-editor-main-tab .n2-td'), [
95
+ $('.n2-slides-tab'),
96
+ $('.n2-layers-tab'),
97
+ $('.n2-layouts-tab')
98
+ ]);
99
+ });
100
+ </script>
101
+ </div>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/_sliders.php ADDED
@@ -0,0 +1,215 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 = NHtml::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
+ ), NHtml::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 .= NHtml::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
+ ), NHtml::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" => NHtml::tag('div', array(
64
+ 'class' => 'n2-button-menu'
65
+ ), NHtml::tag('div', array(
66
+ 'class' => 'n2-button-menu-inner n2-border-radius'
67
+ ), NHtml::link(n2_('Add images'), '#', array(
68
+ 'class' => 'n2-add-quick-image n2-h4'
69
+ )) . NHtml::link(n2_('Add video'), '#', array(
70
+ 'class' => 'n2-add-quick-video n2-h4' . (N2Platform::$hasPosts ? '' : ' n2-separator')
71
+ )) . (N2Platform::$hasPosts ? NHtml::link(n2_('Add post'), '#', array(
72
+ 'class' => 'n2-add-quick-post n2-h4'
73
+ )) : '') . NHtml::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
+ )). NHtml::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
+ )) . NHtml::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" => NHtml::tag('div', array(
103
+ 'class' => 'n2-button-menu'
104
+ ), NHtml::tag('div', array(
105
+ 'class' => 'n2-button-menu-inner n2-border-radius'
106
+ ), NHtml::link(n2_('Select all'), '#', array(
107
+ 'class' => 'n2-h4'
108
+ )) . NHtml::link(n2_('Select none'), '#', array(
109
+ 'class' => 'n2-h4'
110
+ )) . NHtml::link(n2_('Select published'), '#', array(
111
+ 'class' => 'n2-h4'
112
+ )) . NHtml::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" => NHtml::tag('div', array(
121
+ 'class' => 'n2-button-menu'
122
+ ), NHtml::tag('div', array(
123
+ 'class' => 'n2-button-menu-inner n2-border-radius'
124
+ ), NHtml::link(n2_('Duplicate'), '#', array(
125
+ 'class' => 'n2-h4'
126
+ )) . NHtml::link(n2_('Publish'), '#', array(
127
+ 'class' => 'n2-h4'
128
+ )) . NHtml::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 NHtml::tag('div', array(
139
+ 'class' => 'n2-button n2-button-big n2-button-grey n2-slides-bulk'
140
+ ), NHtml::tag('i', array('class' => 'n2-i n2-i-bulk n2-it'), ''));
141
+ echo NHtml::tag('div', array('class' => 'n2-button n2-button-with-menu n2-button-big n2-button-green n2-slides-add'), NHtml::link(n2_('Add image slide'), '#', array(
142
+ 'class' => 'n2-button-inner n2-add-quick-image n2-uc n2-h3'
143
+ )) . $buttonMenu);
144
+
145
+ echo NHtml::tag('div', array('class' => 'n2-button n2-button-with-menu n2-button-big n2-button-grey n2-bulk-select'), NHtml::link(n2_('Select'), '#', array(
146
+ 'class' => 'n2-button-inner n2-uc n2-h4'
147
+ )) . $selectButtonMenu);
148
+ echo NHtml::tag('div', array('class' => 'n2-button n2-button-with-menu n2-button-big n2-button-grey n2-bulk-action'), NHtml::link(n2_('Delete'), '#', array(
149
+ 'class' => 'n2-button-inner n2-uc n2-h4'
150
+ )) . $actionButtonMenu);
151
+
152
+ echo NHtml::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
+ if ($accessEdit) {
163
+ $actions .= NHtml::tag('a', array(
164
+ "href" => $this->appType->router->createUrl(array(
165
+ 'slider/duplicate',
166
+ array(
167
+ 'sliderid' => $slider["id"]
168
+ ) + N2Form::tokenizeUrl()
169
+ ))
170
+ ), NHtml::tag('i', array('class' => 'n2-i n2-i-16 n2-i-duplicate n2-i-grey-opacity'), ''));
171
+ }
172
+
173
+ if ($accessDelete) {
174
+ $actions .= NHtml::tag('a', array(
175
+ "onclick" => "return NextendDeleteModalLink(this, 'slider-delete', " . json_encode($slider['title']) . ");",
176
+ "href" => $this->appType->router->createUrl(array(
177
+ 'slider/delete',
178
+ array(
179
+ 'sliderid' => $slider["id"]
180
+ ) + N2Form::tokenizeUrl()
181
+ ))
182
+ ), NHtml::tag('i', array('class' => 'n2-i n2-i-16 n2-i-delete n2-i-grey-opacity'), ''));
183
+ }
184
+
185
+ $dl[] = array(
186
+ 'title' => '<i class="n2-i n2-i-slider"></i><span>' . $slider['title'] . '</span><span class="n2-id n2-h5">#' . $slider['id'] . '</span>',
187
+ 'link' => $this->appType->router->createUrl(array(
188
+ 'slider/edit',
189
+ array(
190
+ 'sliderid' => $slider["id"]
191
+ )
192
+ )),
193
+ 'class' => 'n2-ss-slide2-list ' . ($active ? 'n2-open ' : '') . ($active && $controller == 'sliders' ? 'active ' : ''),
194
+ 'preUl' => $preUl,
195
+ 'tooltip' => null
196
+ /*,
197
+ 'actions' => $actions*/,
198
+ 'actions' => $actions
199
+ );
200
+ }
201
+ }
202
+ /**
203
+ * @see Definitionlist
204
+ */
205
+ $this->widget->init("definitionlist", array(
206
+ "dl" => $dl
207
+ ));
208
+
209
+ if ($showSlideManager) {
210
+ $this->renderInline("slidemanager", array(
211
+ 'slider' => $slider
212
+ ));
213
+ }
214
+ ?>
215
+ </div>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/font.php 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.php 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">
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.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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">
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' => NHtml::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
+ ");
52
+
53
+ ?>
54
+ <div class="n2-sidebar-pane-sizer">
55
+ <i class="n2-i n2-it n2-i-drag"></i>
56
+ </div>
57
+
58
+ <div class="n2-sidebar-row n2-sidebar-header-bg n2-form-dark n2-sets-header">
59
+ <div class="n2-table">
60
+ <div class="n2-tr">
61
+ <div class="n2-td">
62
+ <div class="n2-h3 n2-uc"><?php n2_e('Local history'); ?></div>
63
+ </div>
64
+ </div>
65
+ </div>
66
+ </div>
67
+ <div class="n2-ss-history-list">
68
+ <ul class="n2-list n2-h4">
69
+ </ul>
70
+ </div>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/inline/slidemanager.php ADDED
@@ -0,0 +1,54 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $slidesModel = new N2SmartsliderSlidesModel();
3
+ $slides = $slidesModel->getAll($slider['id']);
4
+ $sliderObj = new N2SmartSlider($slider['id'], array());
5
+ ?>
6
+ <div id="n2-ss-slides" class="<?php if (count($slides)) echo "n2-ss-has-slides"; ?>">
7
+
8
+ <div class="n2-ss-slides-container">
9
+ <?php
10
+
11
+ $parameters = array();
12
+ if (N2Platform::$isWordpress) {
13
+ $parameters['nonce'] = wp_create_nonce('internal-linking');
14
+ $parameters['wpAjaxUrl'] = admin_url('admin-ajax.php');
15
+ }
16
+ N2JS::addInline('new NextendSmartSliderAdminSidebarSlides("' . $this->appType->router->createAjaxUrl(array(
17
+ "slides/index",
18
+ array(
19
+ "sliderid" => $slider['id'],
20
+ )
21
+ )) . '","' . N2Base::getApplication('system')
22
+ ->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'] . "');");
23
+
24
+ N2Localization::addJS(array(
25
+ 'Add video',
26
+ 'Video url',
27
+ 'Examples',
28
+ 'Add post',
29
+ 'Keyword',
30
+ 'No search term specified. Showing recent items.',
31
+ 'Showing items match for "%s"',
32
+ 'Select'
33
+ ));
34
+
35
+ $slidesObj = array();
36
+ foreach ($slides AS $i => $slide) {
37
+ $slidesObj[$i] = new N2SmartSliderSlide($sliderObj, $slide);
38
+ $slidesObj[$i]->initGenerator();
39
+ }
40
+
41
+ foreach ($slidesObj AS $slideObj) {
42
+ $slideObj->fillSample();
43
+ echo N2SmartsliderSlidesModel::box($slideObj, $sliderObj, $this->widget, $this->appType);
44
+ }
45
+ ?>
46
+ <a class="n2-box n2-box-slide-add n2-h3 n2-uc" href="#"><?php printf(n2_('SLIDE #%d'), 1); ?></a>
47
+ <a class="n2-box n2-box-slide-add n2-h3 n2-uc" href="#"><?php printf(n2_('SLIDE #%d'), 2); ?></a>
48
+ <a class="n2-box n2-box-slide-add n2-h3 n2-uc" href="#"><?php printf(n2_('SLIDE #%d'), 3); ?></a>
49
+ <a class="n2-box n2-box-slide-drag-upload n2-h3 n2-uc"
50
+ href="#"><?php echo n2_('Drop images to create slides'); ?></a>
51
+
52
+ <div class="n2-clear"></div>
53
+ </div>
54
+ </div>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/default.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ NHtml::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
+ NHtml::tag('a', array(
18
+ 'href' => $this->appType->router->createUrl("settings/default"),
19
+ 'class' => 'n2-h4 n2-uc ' . ($cmd == "settings" ? "n2-active" : "")
20
+ ), n2_('Settings'))
21
+ );
22
+ $views[] = NHtml::tag('a', array(
23
+ 'href' => N2SS3::getProUrlPricing(),
24
+ 'target' => '_blank',
25
+ 'class' => 'n2-h4 n2-uc '
26
+ ), n2_('Go Pro!'));
27
+
28
+ $this->widget->init('nav', array(
29
+ 'logoUrl' => $this->appType->router->createUrl("sliders/index"),
30
+ 'logoImageUrl' => $this->appType->app->getLogo(),
31
+ 'views' => $views,
32
+ 'actions' => $this->getFragmentValue('actions')
33
+ ));
34
+ ?>
35
+
36
+ <div class="n2-table n2-table-fixed n2-content">
37
+ <div class="n2-tr">
38
+ <div class="n2-td n2-sidebar n2-sidebar-base-bg n2-border-radius-bl">
39
+ <?php
40
+ $this->renderFragmentBlock('nextend_sidebar', '_sliders');
41
+ ?>
42
+ </div>
43
+
44
+ <div class="n2-td n2-content-base-bg n2-content-area n2-border-radius-br">
45
+ <!-- Begin Content -->
46
+ <?php
47
+ $this->renderFragmentBlock('nextend_content');
48
+ ?>
49
+ <!-- End Content -->
50
+ </div>
51
+ </div>
52
+ </div>
53
+ <?php
54
+ N2Pluggable::doAction('afterApplicationContent');
55
+ ?>
56
+ </div>
57
+ <?php
58
+
59
+ N2Message::show();
60
+
61
+ N2JS::addInline("new NextendExpertMode('smartslider', " . N2SSPRO . ");");
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/full.php 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
+ NHtml::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
+ NHtml::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.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ require(N2Base::getApplication('system')->getApplicationType('backend')->path . '/layouts/lightbox.php');
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/layouts/preview.php 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.php 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.php 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.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $this->widget->init('topbar', array(
3
+ "actions" => array(
4
+ NHtml::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
+ NHtml::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.php 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 = NHtml::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 = NHtml::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[] = NHtml::link($buttons[$keys[$i]], $keys[$i], array(
99
+ 'class' => 'n2-h4'
100
+ ));
101
+ }
102
+ ob_start();
103
+ $this->widget->init("buttonmenu", array(
104
+ "content" => NHtml::tag('div', array(
105
+ 'class' => 'n2-button-menu'
106
+ ), NHtml::tag('div', array(
107
+ 'class' => 'n2-button-menu-inner n2-border-radius'
108
+ ), implode('', $actions)))
109
+ ));
110
+ $buttonMenu = ob_get_clean();
111
+ $button = NHtml::tag('div', array('class' => 'n2-button n2-button-with-menu n2-button-small n2-h5 n2-button-blue'), NHtml::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 = NHtml::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 = NHtml::link("Check extension", $info->readMore, array(
149
+ "target" => "_blank",
150
+ "class" => "n2-button n2-button-small n2-button-grey"
151
+ ));
152
+ } else {
153
+ $button = NHtml::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 .= NHtml::tag('option', array('value' => $k), $v);
168
+ }
169
+
170
+ echo NHtml::tag('div', array('class' => 'n2-box'), NHtml::image(N2Uri::pathToUri(N2Filesystem::translate($info->path . '/../dynamic.png'))) . NHtml::tag("div", array(
171
+ 'class' => 'n2-box-placeholder'
172
+ ), NHtml::tag("table", array(), NHtml::tag("tr", array(), NHtml::tag("td", array(
173
+ 'class' => 'n2-box-label'
174
+ ), NHtml::tag('select', array(
175
+ 'name' => 'generator-type'
176
+ ), $optionsHTML)) . NHtml::tag("td", array(
177
+ 'class' => 'n2-box-button'
178
+ ), $button)))));
179
+ }
180
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/generator/check_configuration.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $actions = array();
4
+
5
+ if (isset($slider)) {
6
+ $actions[] = NHtml::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[] = NHtml::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.php 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.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $this->widget->init('topbar', array(
3
+ "actions" => array(
4
+ NHtml::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
+ NHtml::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.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $this->widget->init('topbar', array(
3
+ "menu" => array(
4
+ NHtml::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
+ NHtml::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
+ NHtml::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
+
81
+ var modal = new NextendSimpleModal('<iframe name="n2-tab-preview" src="about:blank" style="width: 100%;height:100%;"></iframe>');
82
+ modal.modal.on('ModalHide', function () {
83
+ modal.modal.find('iframe').attr('src', 'about:blank');
84
+ $(window).trigger('SSPreviewHide');
85
+ });
86
+
87
+ $('#n2-ss-preview').on('click', function (e) {
88
+ isPreview = true;
89
+ e.preventDefault();
90
+ modal.show();
91
+ form.attr({
92
+ action: '<?php echo $this->appType->router->createUrl(array("preview/generator", N2Form::tokenizeUrl() + array('generator_id' => $generator['id'])))?>',
93
+ target: 'n2-tab-preview'
94
+ }).submit().attr({
95
+ action: formAction,
96
+ target: null
97
+ });
98
+ isPreview = false;
99
+ });
100
+ }
101
+ );
102
+ </script>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/layout/index.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/layout/topbar.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/_preview.php ADDED
@@ -0,0 +1,94 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ .data('ss').ready(autoHeight);
45
+ ");
46
+
47
+ ?>
48
+
49
+
50
+ <div class="n2-form-tab " style="display: block;">
51
+ <div class="n2-heading-controls n2-content-box-title-bg">
52
+ <div class="n2-table">
53
+ <div class="n2-tr">
54
+ <div class="n2-td n2-h2">
55
+ <?php
56
+ echo n2_('Preview');
57
+ ?>
58
+ </div>
59
+
60
+ <div class="n2-td" id="n2-ss-zoom">
61
+ <div class="n2-ss-slider-zoom-container">
62
+ <i class="n2-i n2-i-minus"></i>
63
+ <i class="n2-i n2-i-plus"></i>
64
+
65
+ <div class="n2-ss-slider-zoom-bg"></div>
66
+
67
+ <div class="n2-ss-slider-zoom-1"></div>
68
+
69
+ <div id="n2-ss-slider-zoom"></div>
70
+
71
+ <div class="n2-expert" id="n2-ss-lock">
72
+ <i class="n2-i n2-i-unlock"></i>
73
+ </div>
74
+ </div>
75
+ </div>
76
+
77
+ <div class="n2-td" id="n2-ss-devices">
78
+ <div class="n2-controls-panel n2-table n2-table-auto">
79
+ <div class="n2-tr">
80
+ </div>
81
+ </div>
82
+ </div>
83
+ </div>
84
+ </div>
85
+ </div>
86
+
87
+ <div class="n2-ss-container-device">
88
+ <?php
89
+ echo $slider;
90
+ ?>
91
+ </div>
92
+
93
+ <div class="n2-clear"></div>
94
+ </div>
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.php ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
1
+ <?php
2
+ $slider = $_class->_renderSlider($sliderId, array(
3
+ 'generatorData' => $generatorData
4
+ ));
5
+ include(dirname(__FILE__) . '/_preview.php');
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/index.php ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?php
2
+ $slider = $_class->_renderSlider($sliderId, array('sliderData' => $sliderData));
3
+ include(dirname(__FILE__) . '/_preview.php');
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/preview/slide.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $slider = $_class->_renderSlider($sliderId, array(
3
+ 'slidesData' => $slidesData
4
+ ));
5
+ include(dirname(__FILE__) . '/_preview.php');
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.php 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.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $_class N2SmartsliderBackendSettingsView
4
+ */
5
+
6
+ $this->widget->init('topbar', array(
7
+ "actions" => array(
8
+ NHtml::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.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $_class N2SmartsliderBackendSettingsView
4
+ */
5
+
6
+ $this->widget->init('topbar', array(
7
+ "actions" => array(
8
+ NHtml::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.php ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ $menu[] = NHtml::tag('a', array(
11
+ 'id' => 'n2-ss-preview',
12
+ 'href' => '#',
13
+ 'class' => 'n2-h3 n2-uc n2-has-underline n2-button n2-button-blue n2-button-big',
14
+ 'style' => 'font-size: 12px;'
15
+ ), n2_('Preview'));
16
+
17
+ $this->widget->init('topbar', array(
18
+ /*'back' => $back,*/
19
+ 'menu' => $menu,
20
+ "actions" => array(
21
+ NHtml::tag('a', array(
22
+ 'href' => $this->appType->router->createUrl(array(
23
+ "sliders/index"
24
+ )),
25
+ 'onclick' => 'return nextend.cancel(this.href);',
26
+ 'class' => 'n2-button n2-button-red n2-button-big n2-h4 n2-b n2-uc',
27
+ ), n2_('Cancel')),
28
+ NHtml::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
+ ));
35
+ $this->widget->init('heading', array(
36
+ 'title' => $slider['title'],
37
+ 'actions' => $_class->getDashboardButtons($slider)
38
+ ));
39
+ ?>
40
+ <script type="text/javascript">
41
+ function selectText(container) {
42
+ if (document.selection) {
43
+ var range = document.body.createTextRange();
44
+ range.moveToElementText(container);
45
+ range.select();
46
+ } else if (window.getSelection) {
47
+ var range = document.createRange();
48
+ range.selectNode(container);
49
+ window.getSelection().addRange(range);
50
+ }
51
+ return false;
52
+ }
53
+ </script>
54
+
55
+ <div class="n2-form-tab " style="display: block;">
56
+ <?php
57
+ echo NHtml::tag('div', array('class' => 'n2-h2 n2-content-box-title-bg'), n2_('Publish slider'));
58
+
59
+ $this->renderInlineInNamespace("publish", 'backend.inline', 'smartslider.platform', array(
60
+ 'sliderid' => $slider['id']
61
+ ));
62
+
63
+ ?>
64
+
65
+ </div>
66
+
67
+ <script type="text/javascript">
68
+ nextend.ready(
69
+ function ($) {
70
+
71
+ var form = $('#smartslider-form'),
72
+ formAction = form.attr('action'),
73
+ headings = $('.n2-top-bar-menu .n2-tab-heading');
74
+
75
+ var modal = new NextendSimpleModal('<iframe name="n2-tab-preview" src="about:blank" style="width: 100%;height:100%;"></iframe>');
76
+ modal.modal.on('ModalHide', function () {
77
+ modal.modal.find('iframe').attr('src', 'about:blank');
78
+ $(window).trigger('SSPreviewHide');
79
+ });
80
+
81
+ var isPreview = false;
82
+
83
+ n2('#smartslider-form').on('submit', function (e) {
84
+ if (!isPreview) {
85
+ e.preventDefault();
86
+ nextend.askToSave = false;
87
+ NextendAjaxHelper.ajax({
88
+ type: 'POST',
89
+ url: NextendAjaxHelper.makeAjaxUrl(window.location.href),
90
+ data: $('#smartslider-form').serialize(),
91
+ dataType: 'json'
92
+ }).done(function () {
93
+ $('.n2-heading-bar .n2-heading').html($('#slidertitle').val());
94
+ $('dt.n2-ss-slide2-list > a > span').eq(0).html($('#slidertitle').val());
95
+ nextend.askToSave = true;
96
+ n2('#smartslider-form').trigger('saved');
97
+ });
98
+ }
99
+ });
100
+
101
+ $('#n2-ss-preview').on('click', function (e) {
102
+ isPreview = true;
103
+ e.preventDefault();
104
+ modal.show();
105
+ form.attr({
106
+ action: '<?php echo $this->appType->router->createUrl(array("preview/index", N2Form::tokenizeUrl() + array('sliderid' => $slider['id'])))?>',
107
+ target: 'n2-tab-preview'
108
+ }).submit().attr({
109
+ action: formAction,
110
+ target: null
111
+ });
112
+ isPreview = false;
113
+ });
114
+
115
+
116
+ new NextendHeadingScrollToPane(headings, [
117
+ $('#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'),
118
+ $('#n2-tab-widgets'),
119
+ $('#n2-tab-slider-responsive')
120
+ ], 'ss-slider-edit');
121
+
122
+
123
+ $('#n2-form-matrix-slider-settings .n2-form-matrix-views').fixTo('#n2-form-matrix-slider-settings', {
124
+ top: $('#wpadminbar, .navbar-fixed-top').height() + $('.n2-main-top-bar').height()
125
+ });
126
+
127
+ $('#n2-form-matrix-sliderwidgets .n2-form-matrix-views').fixTo('#n2-form-matrix-sliderwidgets', {
128
+ top: $('#wpadminbar, .navbar-fixed-top').height() + $('.n2-main-top-bar').height()
129
+ });
130
+ }
131
+ );
132
+ </script>
133
+
134
+ <form id="smartslider-form" action="" method="post">
135
+ <?php
136
+ $_class->renderForm($slider);
137
+ ?>
138
+ <input name="save" value="1" type="hidden"/>
139
+ </form>
140
+ <?php N2SS3::showBeacon('Slider settings'); ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/_view.php ADDED
@@ -0,0 +1,111 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class N2SmartsliderBackendSliderView extends N2ViewBase
5
+ {
6
+
7
+ public function _renderSlider($sliderId, $responsive = 'auto') {
8
+
9
+ $slider = new N2SmartSliderManager($sliderId, false, array(
10
+ 'disableResponsive' => true,
11
+ 'addDummySlidesIfEmpty' => true
12
+ ));
13
+ echo $slider->render();
14
+ }
15
+
16
+ public function _renderSliderCached($sliderId, $responsive = 'auto') {
17
+
18
+ $slider = new N2SmartSliderManager($sliderId, false, array(
19
+ 'disableResponsive' => true
20
+ ));
21
+ echo $slider->render(true);
22
+ }
23
+
24
+ public function renderForm($slider) {
25
+
26
+
27
+ $values = N2SmartsliderSlidersModel::renderEditForm($slider);
28
+
29
+ // Used by AJAX widget subforms
30
+ N2JS::addFirstCode("
31
+ new NextendForm(
32
+ 'smartslider-form',
33
+ '" . $this->appType->router->createAjaxUrl(array(
34
+ 'slider/edit',
35
+ array('sliderid' => $slider['id'])
36
+ )) . "',
37
+ " . json_encode($values) . "
38
+ );
39
+ ");
40
+
41
+ }
42
+
43
+ public function getDashboardButtons($slider) {
44
+ $sliderid = $slider['id'];
45
+
46
+ $app = N2Base::getApplication('smartslider');
47
+ $accessEdit = N2Acl::canDo('smartslider_edit', $app->info);
48
+ $accessDelete = N2Acl::canDo('smartslider_delete', $app->info);
49
+
50
+ $buttons = '';
51
+
52
+ if ($accessEdit) {
53
+ $buttons .= NHtml::tag('a', array(
54
+ 'data-label' => n2_('Clear slider cache'),
55
+ 'href' => $this->appType->router->createUrl(array(
56
+ 'slider/clearcache',
57
+ array(
58
+ 'sliderid' => $sliderid
59
+ ) + N2Form::tokenizeUrl()
60
+ ))
61
+ ), NHtml::tag('i', array('class' => 'n2-i n2-i-a-refresh')));
62
+
63
+ $buttons .= NHtml::tag('a', array(
64
+ 'data-label' => n2_('Export slider as HTML'),
65
+ 'href' => $this->appType->router->createUrl(array(
66
+ 'slider/exporthtml',
67
+ array(
68
+ 'sliderid' => $sliderid,
69
+ ) + N2Form::tokenizeUrl()
70
+ ))
71
+ ), NHtml::tag('i', array('class' => 'n2-i n2-i-a-html')));
72
+
73
+ $buttons .= NHtml::tag('a', array(
74
+ 'data-label' => n2_('Export'),
75
+ 'href' => $this->appType->router->createUrl(array(
76
+ 'slider/export',
77
+ array(
78
+ 'sliderid' => $sliderid,
79
+ ) + N2Form::tokenizeUrl()
80
+ ))
81
+ ), NHtml::tag('i', array('class' => 'n2-i n2-i-a-export')));
82
+
83
+ $buttons .= NHtml::tag('a', array(
84
+ 'data-label' => n2_('Duplicate slider'),
85
+ 'href' => $this->appType->router->createUrl(array(
86
+ 'slider/duplicate',
87
+ array(
88
+ 'sliderid' => $sliderid,
89
+ ) + N2Form::tokenizeUrl()
90
+ ))
91
+ ), NHtml::tag('i', array('class' => 'n2-i n2-i-a-duplicate')));
92
+
93
+ }
94
+
95
+ if ($accessDelete) {
96
+ $buttons .= NHtml::tag('a', array(
97
+ 'data-label' => n2_('Delete slider'),
98
+ "onclick" => "return NextendDeleteModalLink(this, 'slider-delete', " . json_encode($slider['title']) . ");",
99
+ 'href' => $this->appType->router->createUrl(array(
100
+ 'slider/delete',
101
+ array(
102
+ 'sliderid' => $sliderid,
103
+ ) + N2Form::tokenizeUrl()
104
+ ))
105
+ ), NHtml::tag('i', array('class' => 'n2-i n2-i-a-delete')));
106
+ }
107
+
108
+ return $buttons;
109
+ }
110
+
111
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slider/cachedslider.php 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.php ADDED
@@ -0,0 +1,7 @@
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $_class N2SmartsliderBackendSliderView
4
+ */
5
+ $title = $slider['title'];
6
+
7
+ include dirname(__FILE__) . '/_slider_edit.php';
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/_view.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class N2SmartsliderBackendSlidersView extends N2ViewBase
5
+ {
6
+
7
+ public function renderImportByUploadForm() {
8
+
9
+ N2SmartsliderSlidersModel::renderImportByUploadForm();
10
+ }
11
+
12
+ public function renderImportFromServerForm() {
13
+
14
+ N2SmartsliderSlidersModel::renderImportFromServerForm();
15
+ }
16
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/sliders/importByUpload.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "actions" => array(
5
+ NHtml::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
+ NHtml::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.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "actions" => array(
5
+ NHtml::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
+ NHtml::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.php ADDED
@@ -0,0 +1,128 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 NHtml::tag('div', array(
35
+ 'class' => 'n2-box n2-box-title ' . $class . ($hasBorder ? ' n2-box-border' : '')
36
+ ), NHtml::image(N2ImageHelper::fixed('$ss$/admin/images/' . $image)) . NHtml::tag("div", array(
37
+ 'class' => 'n2-box-placeholder'
38
+ ), NHtml::tag("table", array(), NHtml::tag("tr", array(), NHtml::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
+
45
+ ob_start();
46
+ $this->widget->init("buttonmenu", array(
47
+ "content" => NHtml::tag('div', array(
48
+ 'class' => 'n2-button-menu'
49
+ ), NHtml::tag('div', array(
50
+ 'class' => 'n2-button-menu-inner n2-border-radius'
51
+ ), NHtml::link(n2_('Import by upload'), $this->appType->router->createUrl(array('sliders/importbyupload')), array(
52
+ 'class' => 'n2-h4'
53
+ )) . NHtml::link(n2_('Import from server'), $this->appType->router->createUrl(array('sliders/importfromserver')), array(
54
+ 'class' => 'n2-h4'
55
+ )) . NHtml::link(n2_('Export all slider'), $this->appType->router->createUrl(array('sliders/exportall')), array(
56
+ 'class' => 'n2-h4',
57
+ 'target' => '_blank'
58
+ ))))
59
+ ));
60
+
61
+ n2GetBox('', 'import-upload.png', '<div>' . n2_('Import slider from different sources.') . '</div>' . NHtml::tag('div', array('class' => 'n2-button n2-button-with-menu n2-button-small n2-button-green'), NHtml::link(n2_('Import by upload'), $this->appType->router->createUrl(array('sliders/importbyupload')), array(
62
+ 'class' => 'n2-button-inner n2-uc n2-h5'
63
+ )) . ob_get_clean()));
64
+
65
+ n2GetBox('n2-box-wide n2-box-overflow n2-box-free', 'free/box2.png', NHtml::tag('div', array(), 'Take your slider to the next level with Smart Slider 3 PRO!') . NHtml::link('See all features', N2SS3::getWhyProUrl(), array(
66
+ 'target' => '_blank',
67
+ 'class' => 'n2-button n2-button-blue n2-button-medium n2-h5 n2-uc'
68
+ )), false);
69
+
70
+ $updateModel = N2SmartsliderUpdateModel::getInstance();
71
+ $hasUpdate = $updateModel->hasUpdate();
72
+ $this->appType->router->setMultiSite();
73
+ $updateUrl = $this->appType->router->createUrl(array(
74
+ 'update/update',
75
+ N2Form::tokenizeUrl() + array('download' => 1)
76
+ ));
77
+ $this->appType->router->unSetMultiSite();
78
+
79
+ $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>';
80
+
81
+ 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(
82
+ 'update/check',
83
+ N2Form::tokenizeUrl()
84
+ )) . '" class="n2-button n2-button-small n2-button-blue n2-uc n2-h5">' . n2_('Check') . '</a>' : '') . '<a href="#" onclick="NextendModalDocumentation(\'' . n2_('Changelog') . '\', \'http://doc.smartslider3.com/article/432-changelog\');return false;" class="n2-button n2-button-small n2-button-grey n2-uc n2-h5">' . n2_('Changelog') . '</a>');
85
+ if ($hasUpdate) {
86
+ ?>
87
+ <script type="text/javascript">
88
+ n2(window).ready(function ($) {
89
+ $('.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'); ?>\', \'http://doc.smartslider3.com/article/432-changelog\');return false;"><?php n2_e('Changelog'); ?></a></div>');
90
+ });
91
+ </script>
92
+ <?php
93
+ }
94
+
95
+ n2GetBox('', 'Documentation.png', NHtml::tag('div', array(), 'Interactive online documentation.') . NHtml::link('Read', 'http://doc.smartslider3.com', array(
96
+ 'target' => '_blank',
97
+ 'class' => 'n2-button n2-button-grey n2-button-small n2-h5 n2-uc'
98
+ )));
99
+ n2GetBox('', 'Videos.png', NHtml::tag('div', array(), 'Helpful tutorial videos.') . NHtml::link('Watch', 'https://www.youtube.com/watch?v=MKmIwHAFjSU&list=PLSawiBnEUNfvzcI3pBHs4iKcbtMCQU0dB', array(
100
+ 'target' => '_blank',
101
+ 'class' => 'n2-button n2-button-grey n2-button-small n2-h5 n2-uc'
102
+ )));
103
+ n2GetBox('', 'Help.png', NHtml::tag('div', array(), 'First class support with real people. ') . NHtml::link('Write', 'http://smartslider3.com/contact-us/', array(
104
+ 'target' => '_blank',
105
+ 'class' => 'n2-button n2-button-grey n2-button-small n2-h5 n2-uc'
106
+ )));
107
+ n2GetBox('', 'Newsletter.png', NHtml::tag('div', array(), 'Receive the latest news.') . NHtml::link('Subscribe', 'http://eepurl.com/bDp_8b', array(
108
+ 'target' => '_blank',
109
+ 'class' => 'n2-button n2-button-grey n2-button-small n2-h5 n2-uc'
110
+ )));
111
+
112
+ n2GetBox('', 'Facebook.png', NHtml::tag('div', array(), 'Join the community on Facebook.') . NHtml::link('Join', 'https://www.facebook.com/nextendweb', array(
113
+ 'class' => 'n2-button n2-button-grey n2-button-small n2-h5 n2-uc',
114
+ 'target' => '_blank'
115
+ )));
116
+ n2GetBox('', 'Love.png', NHtml::tag('div', array(), 'Are you satisfied with Smart Slider 3?') . NHtml::link('Yes', 'http://smartslider3.com/satisfied-customer/', array(
117
+ 'target' => '_blank',
118
+ 'class' => 'n2-button n2-button-green n2-button-small n2-h5 n2-uc'
119
+ )) . NHtml::link('No', 'http://smartslider3.com/suggestion/', array(
120
+ 'target' => '_blank',
121
+ 'class' => 'n2-button n2-button-red n2-button-small n2-h5 n2-uc'
122
+ )));
123
+
124
+ ?>
125
+
126
+ <div class="n2-clear"></div>
127
+ </div>
128
+ <?php N2SS3::showBeacon('Main page, Import, Update'); ?>
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.php ADDED
@@ -0,0 +1,259 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var $slidesModel N2SmartsliderSlidesModel
4
+ */
5
+ $slide = $slidesModel->get(N2Request::getInt('slideid', 0));
6
+
7
+ $actions = array(
8
+ NHtml::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[] = NHtml::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[] = NHtml::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' => NHtml::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
+ NHtml::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
+ ),
53
+ "hideSidebar" => true
54
+ ));
55
+ ?>
56
+
57
+ <script type="text/javascript">
58
+ nextend.isPreview = false;
59
+ nextend.ready(
60
+ function ($) {
61
+
62
+ var form = $('#smartslider-form'),
63
+ formAction = form.attr('action');
64
+
65
+ var modal = new NextendSimpleModal('<iframe name="n2-tab-preview" src="" style="width: 100%;height:100%;"></iframe>');
66
+ modal.modal.on('ModalHide', function () {
67
+ modal.modal.find('iframe').attr('src', 'about:blank');
68
+ $(window).trigger('SSPreviewHide');
69
+ });
70
+
71
+ $('#n2-ss-preview').on('click', function (e) {
72
+ nextend.isPreview = true;
73
+ e.preventDefault();
74
+ nextend.smartSlider.slide.prepareForm();
75
+ modal.show();
76
+ //var currentRequest = form.serialize();
77
+ form.attr({
78
+ action: '<?php echo $this->appType->router->createUrl(array("preview/slide", N2Form::tokenizeUrl() + array('slideId' => $slide ? $slide['id'] : 0, 'sliderId' => $sliderId)))?>',
79
+ target: 'n2-tab-preview'
80
+ }).submit().attr({
81
+ action: formAction,
82
+ target: null
83
+ });
84
+ nextend.isPreview = false;
85
+ });
86
+
87
+ }
88
+ );
89
+ </script>
90
+
91
+ <form id="smartslider-form" action="" method="post">
92
+ <?php
93
+ $slideData = $slidesModel->renderEditForm($slide);
94
+ ?>
95
+ <input name="save" value="1" type="hidden"/>
96
+ </form>
97
+
98
+ <script type="text/javascript">
99
+
100
+ nextend.ready(
101
+ function ($) {
102
+ var topOffset = $('#wpadminbar, .navbar-fixed-top').height() + $('.n2-top-bar').height() + 2;
103
+ $('#n2-tab-smartslider-editor .n2-heading-controls').each(function () {
104
+ var bar = $(this);
105
+ bar.fixTo(bar.parent(), {
106
+ top: topOffset
107
+ });
108
+ });
109
+ }
110
+ );
111
+
112
+ </script>
113
+
114
+ <div id='n2-tab-smartslider-editor' class='n2-form-tab'>
115
+ <div class="n2-heading-controls n2-content-box-title-bg">
116
+ <div class="">
117
+ <div class="n2-table" style="table-layout:fixed;">
118
+ <div class="n2-tr">
119
+ <div class="n2-td">
120
+ <div class="n2-ss-snap-to-parent">
121
+ <div id="n2-ss-control-line" class="n2-content-box-title-bg">
122
+ <div class="n2-form-element-onoff-button n2-onoff-on">
123
+ <div class="n2-onoffb-label"><?php n2_e('Snap'); ?></div>
124
+
125
+ <div class="n2-onoffb-container">
126
+ <div class="n2-onoffb-slider"><!--
127
+ --><div class="n2-onoffb-round"></div><!--
128
+ --></div>
129
+ </div>
130
+ <input type="hidden" autocomplete="off" value="1" id="n2-ss-snap">
131
+ </div>
132
+
133
+ <div id="n2-ss-theme" href="#" class="n2-button n2-button-grey n2-button-small"
134
+ title="<?php n2_e('Light | Dark'); ?>"><i class="n2-i n2-it n2-i-16 n2-i-sun"></i>
135
+ </div>
136
+
137
+ <div id="n2-ss-horizontal-align"
138
+ class="n2-form-element-radio-tab n2-form-element-icon-radio"
139
+ title="<?php n2_e('Horizontal align'); ?>">
140
+ <div
141
+ class="n2-radio-option n2-first" data-align="left"><i
142
+ class="n2-i n2-it n2-i-horizontal-left"></i></div>
143
+
144
+ <div class="n2-radio-option" data-align="center"><i
145
+ class="n2-i n2-it n2-i-horizontal-center"></i>
146
+ </div>
147
+
148
+ <div class="n2-radio-option n2-last" data-align="right"><i
149
+ class="n2-i n2-it n2-i-horizontal-right"></i></div>
150
+ </div>
151
+
152
+ <div id="n2-ss-vertical-align" title="<?php n2_e('Vertical align'); ?>"
153
+ class="n2-form-element-radio-tab n2-form-element-icon-radio">
154
+ <div
155
+ class="n2-radio-option n2-first" data-align="top"><i
156
+ class="n2-i n2-it n2-i-vertical-top"></i></div>
157
+
158
+ <div class="n2-radio-option" data-align="middle"><i
159
+ class="n2-i n2-it n2-i-vertical-middle"></i>
160
+ </div>
161
+
162
+ <div class="n2-radio-option n2-last" data-align="bottom"><i
163
+ class="n2-i n2-it n2-i-vertical-bottom"></i></div></div>
164
+
165
+ <?php
166
+ ?>
167
+
168
+ <div id="n2-ss-show-on-device" class="n2-button n2-button-grey n2-button-small"
169
+ title="<?php n2_e('Show on device'); ?>"><i
170
+ class="n2-i n2-it n2-i-16 n2-i-hide"></i></div>
171
+
172
+ <div id="n2-ss-adaptive-font" class="n2-button n2-button-grey n2-button-small"
173
+ title="<?php n2_e('Adaptive font'); ?>"><i
174
+ class="n2-i n2-it n2-i-16 n2-i-adaptive"></i></div>
175
+
176
+ <div title="<?php n2_e('Font size modifier'); ?>"
177
+ class="n2-form-element-text n2-form-element-autocomplete ui-front n2-form-element-number n2-text-has-unit n2-border-radius">
178
+ <div class="n2-text-sub-label n2-h5 n2-uc"><i
179
+ class="n2-i n2-it n2-i-16 n2-i-fontmodifier"></i></div>
180
+ <input type="text" autocomplete="off" style="width:32px"
181
+ class="n2-h5 ui-autocomplete-input" value="100" name="n2-ss-font-size"
182
+ id="n2-ss-font-size">
183
+
184
+ <div class="n2-text-unit n2-h5 n2-uc">%</div></div>
185
+ <div id="n2-ss-reset-to-desktop" class="n2-button n2-button-grey n2-button-small"
186
+ title="<?php n2_e('Reset to desktop'); ?>"><i
187
+ class="n2-i n2-it n2-i-16 n2-i-reset"></i></div>
188
+ </div>
189
+ </div>
190
+ </div>
191
+ <div class="n2-td" id="n2-ss-zoom">
192
+ <div class="n2-ss-slider-zoom-container">
193
+ <i class="n2-i n2-i-minus"></i>
194
+ <i class="n2-i n2-i-plus"></i>
195
+
196
+ <div class="n2-ss-slider-zoom-bg"></div>
197
+
198
+ <div class="n2-ss-slider-zoom-1"></div>
199
+
200
+ <div id="n2-ss-slider-zoom"></div>
201
+
202
+ <div class="n2-expert" id="n2-ss-lock">
203
+ <i class="n2-i n2-i-unlock"></i>
204
+ </div>
205
+ </div>
206
+ </div>
207
+
208
+ <div class="n2-td" id="n2-ss-devices">
209
+ <div class="n2-controls-panel n2-table n2-table-auto">
210
+ <div class="n2-tr">
211
+ </div>
212
+ </div>
213
+ </div>
214
+ </div>
215
+ </div>
216
+ </div>
217
+ </div>
218
+ <?php
219
+
220
+ $sliderManager = $this->appType->app->get('sliderManager');
221
+ $slider = $sliderManager->getSlider();
222
+
223
+ $slider->setStatic($slideData->get('static-slide', 0));
224
+
225
+ echo NHtml::tag('div', array(
226
+ 'id' => 'smartslider-adjust-height',
227
+ 'style' => 'overflow: auto; margin: 5px; padding: 5px'
228
+ ), NHtml::tag('div', array(), $sliderManager->render()));
229
+
230
+ N2Localization::addJS(array(
231
+ 'Add',
232
+ 'Clear',
233
+ 'in',
234
+ 'loop',
235
+ 'out'
236
+ ));
237
+
238
+ echo NHtml::script("
239
+ nextend.ready(function($){
240
+ var cb = function(){
241
+ nextend.smartSlider.startEditor('" . $slider->elementId . "', 'slideslide', " . (defined('N2_IMAGE_UPLOAD_DISABLE') ? 1 : 0) . ", '" . N2Base::getApplication('system')->router->createAjaxUrl(array('browse/upload')) . "', 'slider" . $slider->sliderId . "');
242
+ };
243
+ if(typeof nextend.fontsDeferred !== 'undefined'){
244
+ nextend.fontsDeferred.done(cb);
245
+ }else {
246
+ cb();
247
+ }
248
+ });
249
+ ");
250
+ ?>
251
+ </div>
252
+ <?php
253
+ ?>
254
+ <?php
255
+ ?>
256
+ <div style="height: 600px;"></div>
257
+ <?php
258
+
259
+ ?>
app/code/community/Nextend2/SmartSlider3/library/smartslider/backend/views/slides/slidebox.php ADDED
@@ -0,0 +1,2 @@
 
 
1
+ <?php
2
+ echo N2SmartsliderSlidesModel::box($slide, $slider, $this->widget, $this->appType);
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 NHtml::tag('div', array(
21
+ 'class' => 'n2-form-element-option-chooser n2-border-radius'
22
+ ), parent::fetchElement() . NHtml::tag('input', array(
23
+ 'type' => 'text',
24
+ 'class' => 'n2-h5',
25
+ 'style' => 'width: 130px;' . N2XmlHelper::getAttribute($this->_xml, 'css'),
26
+ 'disabled' => 'disabled'
27
+ ), false) . NHtml::tag('a', array(
28
+ 'href' => '#',
29
+ 'class' => 'n2-form-element-clear'
30
+ ), NHtml::tag('i', array('class' => 'n2-i n2-it n2-i-empty n2-i-grey-opacity'), '')) . NHtml::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 .= NHtml::tag('div', array(
12
+ 'class' => 'n2-area n2-area-' . $i . $this->isSelected($i),
13
+ 'data-area' => $i
14
+ ));
15
+ }
16
+
17
+ $html = NHtml::tag('div', array(
18
+ 'id' => $this->_id . '_area',
19
+ 'class' => 'n2-widget-area'
20
+ ), NHtml::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 NHtml::tag('div', array(
53
+ 'class' => 'n2-subform-image-option n2-subform-image-option-simple ' . $this->isActive($k)
54
+ ), NHtml::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/hu_HU.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,340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.zip.zip_lib');
3
+ N2Loader::import('libraries.backup', 'smartslider');
4
+
5
+ class N2SmartSliderExport
6
+ {
7
+
8
+ private $uniqueCounter = 1;
9
+
10
+ /**
11
+ * @var N2SmartSliderBackup
12
+ */
13
+ private $backup;
14
+ private $sliderId = 0;
15
+
16
+ public $images = array(), $visuals = array();
17
+
18
+ private $files, $usedNames = array(), $imageTranslation = array();
19
+
20
+ public function __construct($sliderId) {
21
+ $this->sliderId = $sliderId;
22
+ }
23
+
24
+ public function create($saveAsFile = false) {
25
+ $this->backup = new N2SmartSliderBackup();
26
+ $slidersModel = new N2SmartsliderSlidersModel();
27
+ if ($this->backup->slider = $slidersModel->get($this->sliderId)) {
28
+ $this->backup->slider['params'] = new N2Data($this->backup->slider['params'], true);
29
+ $slidesModel = new N2SmartsliderSlidesModel();
30
+ $this->backup->slides = $slidesModel->getAll($this->backup->slider['id']);
31
+
32
+ if (empty($this->backup->slider['type'])) {
33
+ $this->backup->slider['type'] = 'simple';
34
+ }
35
+
36
+ $class = 'N2SSPluginType' . $this->backup->slider['type'];
37
+ N2Loader::importPath(call_user_func(array(
38
+ $class,
39
+ "getPath"
40
+ )) . NDS . 'backup');
41
+
42
+ $class = 'N2SmartSliderBackup' . $this->backup->slider['type'];
43
+ call_user_func_array(array(
44
+ $class,
45
+ 'export'
46
+ ), array(
47
+ $this,
48
+ $this->backup->slider
49
+ ));
50
+
51
+ $enabledWidgets = array();
52
+ $plugins = array();
53
+ N2Plugin::callPlugin('sswidget', 'onWidgetList', array(&$plugins));
54
+
55
+ $params = $this->backup->slider['params'];
56
+ foreach ($plugins AS $k => $v) {
57
+ $widget = $params->get('widget' . $k);
58
+ if ($widget && $widget != 'disabled') {
59
+ $enabledWidgets[$k] = $widget;
60
+ }
61
+ }
62
+
63
+ foreach ($enabledWidgets AS $k => $v) {
64
+ $class = 'N2SSPluginWidget' . $k . $v;
65
+ if (class_exists($class, false)) {
66
+ $params->fillDefault(call_user_func(array(
67
+ $class,
68
+ 'getDefaults'
69
+ )));
70
+
71
+ call_user_func_array(array(
72
+ $class,
73
+ 'prepareExport'
74
+ ), array(
75
+ $this,
76
+ &$params
77
+ ));
78
+ } else {
79
+ unset($enabledWidgets);
80
+ }
81
+ }
82
+
83
+ for ($i = 0; $i < count($this->backup->slides); $i++) {
84
+ $slide = $this->backup->slides[$i];
85
+ self::addImage($slide['thumbnail']);
86
+ $slide['params'] = new N2Data($slide['params'], true);
87
+
88
+ self::addImage($slide['params']->get('backgroundImage'));
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=' . preg_replace('/[^a-zA-Z0-9_-]/', '', $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 .= NHtml::style($url, true, array(
183
+ 'media' => 'screen, print'
184
+ )) . "\n";
185
+ }
186
+ array_unshift($css['files'], N2LIBRARYASSETS . '/normalize.css');
187
+ foreach ($css['files'] AS $file) {
188
+ $path = 'css/' . basename($file);
189
+ $this->files[$path] = file_get_contents($file);
190
+ $headHTML .= NHtml::style($path, true, array(
191
+ 'media' => 'screen, print'
192
+ )) . "\n";
193
+ }
194
+
195
+ if ($css['inline'] != '') {
196
+ $headHTML .= NHtml::style($css['inline']) . "\n";
197
+ }
198
+
199
+ $js = N2AssetsManager::getJs(true);
200
+
201
+ if ($js['globalInline'] != '') {
202
+ $headHTML .= NHtml::script($js['globalInline']) . "\n";
203
+ }
204
+
205
+ foreach ($js['url'] AS $url) {
206
+ $headHTML .= NHtml::script($url, true) . "\n";
207
+ }
208
+ foreach ($js['files'] AS $file) {
209
+ $path = 'js/' . basename($file);
210
+ $this->files[$path] = file_get_contents($file);
211
+ $headHTML .= NHtml::script($path, true) . "\n";
212
+ }
213
+
214
+ if ($js['inline'] != '') {
215
+ $headHTML .= NHtml::script($js['inline']) . "\n";
216
+ }
217
+
218
+ $sliderHTML = preg_replace_callback('/(src|data-desktop|data-tablet|data-mobile)=["|\'](.*?)["|\']/i', array(
219
+ $this,
220
+ 'replaceHTMLImage'
221
+ ), $sliderHTML);
222
+
223
+ $sliderHTML = preg_replace_callback('/url\(\s*([\'"]|(&#039;))?(\S*\.(?:jpe?g|gif|png))([\'"]|(&#039;))?\s*\)[^;}]*?/i', array(
224
+ $this,
225
+ 'replaceHTMLBGImage'
226
+ ), $sliderHTML);
227
+
228
+ $sliderHTML = preg_replace_callback('/(n2-lightbox-urls)=["|\'](.*?)["|\']/i', array(
229
+ $this,
230
+ 'replaceLightboxImages'
231
+ ), $sliderHTML);
232
+
233
+ $headHTML = preg_replace_callback('/"([^"]*?\.(jpg|png|gif|jpeg))"/i', array(
234
+ $this,
235
+ 'replaceJSON'
236
+ ), $headHTML);
237
+
238
+ $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>";
239
+
240
+ if (!$isZIP) {
241
+ return $this->files;
242
+ }
243
+
244
+ $zip = new N2ZipFile();
245
+ foreach ($this->files AS $path => $content) {
246
+ $zip->addFile($content, $path);
247
+ }
248
+ ob_end_clean();
249
+ header('Content-disposition: attachment; filename=' . preg_replace('/[^a-zA-Z0-9_-]/', '', $slider['title']) . '.zip');
250
+ header('Content-type: application/zip');
251
+ echo $zip->file();
252
+ n2_exit(true);
253
+ }
254
+
255
+ private static function addProtocol($image) {
256
+ if (substr($image, 0, 2) == '//') {
257
+ return 'http:' . $image;
258
+ }
259
+ return $image;
260
+ }
261
+
262
+ public function replaceHTMLImage($found) {
263
+ $path = N2Filesystem::absoluteURLToPath(self::addProtocol($found[2]));
264
+ if ($path == $found[2]) {
265
+ return $found[0];
266
+ }
267
+ if (N2Filesystem::fileexists($path)) {
268
+ if (!isset($this->imageTranslation[$path])) {
269
+ $fileName = strtolower(basename($path));
270
+ while (in_array($fileName, $this->usedNames)) {
271
+ $fileName = $this->uniqueCounter . $fileName;
272
+ $this->uniqueCounter++;
273
+ }
274
+ $this->usedNames[] = $fileName;
275
+ $this->files['images/' . $fileName] = file_get_contents($path);
276
+ $this->imageTranslation[$path] = $fileName;
277
+ } else {
278
+ $fileName = $this->imageTranslation[$path];
279
+ }
280
+ return str_replace($found[2], 'images/' . $fileName, $found[0]);
281
+ } else {
282
+ return $found[0];
283
+ }
284
+ }
285
+
286
+ public function replaceLightboxImages($found) {
287
+ $images = explode(',', $found[2]);
288
+ foreach ($images AS $k => $image) {
289
+ $images[$k] = $this->replaceHTMLImage(array(
290
+ $image,
291
+ '',
292
+ $image
293
+ ));
294
+ }
295
+ return 'n2-lightbox-urls="' . implode(',', $images) . '"';
296
+ }
297
+
298
+ public function replaceHTMLBGImage($found) {
299
+ $path = $this->replaceHTMLImage(array(
300
+ $found[3],
301
+ '',
302
+ $found[3]
303
+ ));
304
+ return str_replace($found[3], $path, $found[0]);
305
+ }
306
+
307
+ public function replaceJSON($found) {
308
+ $image = str_replace('\\/', '/', $found[1]);
309
+ $path = $this->replaceHTMLImage(array(
310
+ $image,
311
+ '',
312
+ $image
313
+ ));
314
+ return str_replace($found[1], str_replace('/', '\\/', $path), $found[0]);
315
+ }
316
+
317
+ public function addImage($image) {
318
+ if (!empty($image)) {
319
+ $this->images[] = $image;
320
+ }
321
+ }
322
+
323
+ public function addLightbox($url) {
324
+ preg_match('/^([a-zA-Z]+)\[(.*)]/', $url, $matches);
325
+ if (!empty($matches)) {
326
+ if ($matches[1] == 'lightbox') {
327
+ $images = explode(',', $matches[2]);
328
+ foreach ($images AS $image) {
329
+ $this->addImage($image);
330
+ }
331
+ }
332
+ }
333
+ }
334
+
335
+ public function addVisual($id) {
336
+ if (is_numeric($id) && $id > 10000) {
337
+ $this->visuals[] = $id;
338
+ }
339
+ }
340
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/import.php ADDED
@@ -0,0 +1,194 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.zip.zip_read');
3
+ N2Loader::import('libraries.backup', 'smartslider');
4
+
5
+ class N2SmartSliderImport
6
+ {
7
+
8
+ /**
9
+ * @var N2SmartSliderBackup
10
+ */
11
+ private $backup;
12
+ private $imageTranslation = array();
13
+ private $sectionTranslation = array();
14
+
15
+ private $sliderId = 0;
16
+
17
+ public function import($filePathOrData, $imageImportMode = 'clone', $linkedVisuals = 1, $isFilePath = true) {
18
+ $zip = new N2ZipRead();
19
+ $importData = $zip->read_zip($filePathOrData, $isFilePath);
20
+ if (!isset($importData['data'])) {
21
+ return false;
22
+ }
23
+ $this->backup = unserialize($importData['data']);
24
+
25
+ $this->sectionTranslation = array();
26
+ $this->importVisuals($this->backup->visuals, $linkedVisuals);
27
+
28
+
29
+ $sliderModel = new N2SmartsliderSlidersModel();
30
+ $this->sliderId = $sliderModel->import($this->backup->slider);
31
+ if (!$this->sliderId) {
32
+ return false;
33
+ }
34
+ switch ($imageImportMode) {
35
+ case 'clone':
36
+ $images = $importData['images'];
37
+ $imageStore = new N2StoreImage('slider' . $this->sliderId, true);
38
+ foreach ($images AS $file => $content) {
39
+ $localImage = $imageStore->makeCache($file, $content);
40
+ if ($localImage) {
41
+ $this->imageTranslation[$file] = N2ImageHelper::dynamic(N2Uri::pathToUri($localImage));
42
+ } else {
43
+ $this->imageTranslation[$file] = $file;
44
+ }
45
+ if (!$this->imageTranslation[$file]) {
46
+ $this->imageTranslation[$file] = array_search($file, $this->backup->imageTranslation);
47
+ }
48
+ }
49
+ break;
50
+ case 'update':
51
+ $keys = array_keys($this->backup->NextendImageHelper_Export);
52
+ $values = array_values($this->backup->NextendImageHelper_Export);
53
+ foreach ($this->backup->imageTranslation AS $image => $value) {
54
+ $this->imageTranslation[$value] = str_replace($keys, $values, $image);
55
+ }
56
+ break;
57
+ default:
58
+ break;
59
+ }
60
+
61
+ foreach ($this->backup->NextendImageManager_ImageData AS $image => $data) {
62
+ $data['tablet']['image'] = $this->fixImage($data['tablet']['image']);
63
+ $data['mobile']['image'] = $this->fixImage($data['mobile']['image']);
64
+ N2ImageManager::addImageData($this->fixImage($image), $data);
65
+ }
66
+
67
+ unset($importData);
68
+
69
+ if (empty($this->backup->slider['type'])) {
70
+ $this->backup->slider['type'] = 'simple';
71
+ }
72
+
73
+ $class = 'N2SSPluginType' . $this->backup->slider['type'];
74
+ N2Loader::importPath(call_user_func(array(
75
+ $class,
76
+ "getPath"
77
+ )) . NDS . 'backup');
78
+
79
+ $class = 'N2SmartSliderBackup' . $this->backup->slider['type'];
80
+ call_user_func_array(array(
81
+ $class,
82
+ 'import'
83
+ ), array(
84
+ $this,
85
+ &$this->backup->slider
86
+ ));
87
+
88
+
89
+ $enabledWidgets = array();
90
+ $plugins = array();
91
+ N2Plugin::callPlugin('sswidget', 'onWidgetList', array(&$plugins));
92
+
93
+ $params = $this->backup->slider['params'];
94
+ foreach ($plugins AS $k => $v) {
95
+ $widget = $params->get('widget' . $k);
96
+ if ($widget && $widget != 'disabled') {
97
+ $enabledWidgets[$k] = $widget;
98
+ }
99
+ }
100
+
101
+ foreach ($enabledWidgets AS $k => $v) {
102
+ $class = 'N2SSPluginWidget' . $k . $v;
103
+ if (class_exists($class, false)) {
104
+ $params->fillDefault(call_user_func(array(
105
+ $class,
106
+ 'getDefaults'
107
+ )));
108
+
109
+ call_user_func_array(array(
110
+ $class,
111
+ 'prepareImport'
112
+ ), array(
113
+ $this,
114
+ $params
115
+ ));
116
+ } else {
117
+ unset($enabledWidgets);
118
+ }
119
+ }
120
+
121
+ $sliderModel->importUpdate($this->sliderId, $params);
122
+
123
+ $generatorTranslation = array();
124
+ N2Loader::import("models.generator", "smartslider");
125
+ $generatorModel = new N2SmartsliderGeneratorModel();
126
+ foreach ($this->backup->generators as $generator) {
127
+ $generatorTranslation[$generator['id']] = $generatorModel->import($generator);
128
+ }
129
+
130
+
131
+ $slidesModel = new N2SmartsliderSlidesModel();
132
+ for ($i = 0; $i < count($this->backup->slides); $i++) {
133
+ $slide = $this->backup->slides[$i];
134
+ $slide['params'] = new N2Data($slide['params'], true);
135
+ $slide['thumbnail'] = $this->fixImage($slide['thumbnail']);
136
+ $slide['params']->set('backgroundImage', $this->fixImage($slide['params']->get('backgroundImage')));
137
+ $slide['params']->set('link', $this->fixLightbox($slide['params']->get('link')));
138
+
139
+ $slide['slide'] = N2SmartSliderLayer::prepareImport($this, $slide['slide']);
140
+
141
+ if (isset($generatorTranslation[$slide['generator_id']])) {
142
+ $slide['generator_id'] = $generatorTranslation[$slide['generator_id']];
143
+ }
144
+ $slidesModel->import($slide, $this->sliderId);
145
+ }
146
+ return $this->sliderId;
147
+ }
148
+
149
+ public function fixImage($image) {
150
+ if (isset($this->backup->imageTranslation[$image]) && isset($this->imageTranslation[$this->backup->imageTranslation[$image]])) {
151
+ return $this->imageTranslation[$this->backup->imageTranslation[$image]];
152
+ }
153
+ return $image;
154
+ }
155
+
156
+ public function fixSection($idOrRaw) {
157
+ if (isset($this->sectionTranslation[$idOrRaw])) {
158
+ return $this->sectionTranslation[$idOrRaw];
159
+ }
160
+ return $idOrRaw;
161
+ }
162
+
163
+ public function fixLightbox($url) {
164
+ preg_match('/^([a-zA-Z]+)\[(.*)](.*)/', $url, $matches);
165
+ if (!empty($matches) && $matches[1] == 'lightbox') {
166
+ $images = explode(',', $matches[2]);
167
+ $newImages = array();
168
+ foreach ($images AS $image) {
169
+ $newImages[] = $this->fixImage($image);
170
+ }
171
+ $url = 'lightbox[' . implode(',', $newImages) . ']' . $matches[3];
172
+ }
173
+ return $url;
174
+ }
175
+
176
+ private function importVisuals($records, $linkedVisuals) {
177
+ if (count($records)) {
178
+ if (!$linkedVisuals) {
179
+ foreach ($records AS $record) {
180
+ $this->sectionTranslation[$record['id']] = $record['value'];
181
+ }
182
+ } else {
183
+ $sets = array();
184
+ foreach ($records AS $record) {
185
+ $storage = N2Base::getApplication($record['application'])->storage;
186
+ if (!isset($sets[$record['application'] . '_' . $record['section']])) {
187
+ $sets[$record['application'] . '_' . $record['section']] = $storage->add($record['section'] . 'set', null, $this->backup->slider['title']);
188
+ }
189
+ $this->sectionTranslation[$record['id']] = $storage->add($record['section'], $sets[$record['application'] . '_' . $record['section']], $record['value']);
190
+ }
191
+ }
192
+ }
193
+ }
194
+ }
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,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.link.link');
3
+
4
+ class N2LinkNextSlide
5
+ {
6
+
7
+ public static function parse($argument, &$attributes, $isEditor = false) {
8
+ if (!$isEditor) {
9
+ $attributes['onclick'] = "n2ss.applyAction(this, 'next'); return false";
10
+ }
11
+ return '#';
12
+ }
13
+ }
14
+
15
+ class N2LinkPreviousSlide
16
+ {
17
+
18
+ public static function parse($argument, &$attributes, $isEditor = false) {
19
+ if (!$isEditor) {
20
+ $attributes['onclick'] = "n2ss.applyAction(this, 'previous'); return false";
21
+ }
22
+ return '#';
23
+ }
24
+ }
25
+
26
+ class N2LinkGoToSlide
27
+ {
28
+
29
+ public static function parse($argument, &$attributes, $isEditor = false) {
30
+ if (!$isEditor) {
31
+ $attributes['onclick'] = "n2ss.applyAction(this, 'slide', " . intval($argument) . "); return false";
32
+ }
33
+ return '#';
34
+ }
35
+ }
36
+
37
+ class N2LinkSlideEvent
38
+ {
39
+
40
+ public static function parse($argument, &$attributes, $isEditor = false) {
41
+ if (!$isEditor) {
42
+ $attributes['onclick'] = "n2ss.trigger(this, '" . $argument . "'); return false";
43
+ }
44
+ return '#';
45
+ }
46
+ }
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,208 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.parse.parse');
4
+
5
+ abstract class N2SSPluginItemAbstract extends N2PluginBase
6
+ {
7
+
8
+ public $_identifier = 'identifier';
9
+
10
+ public $_title = '';
11
+
12
+ protected $layerProperties = array();
13
+
14
+ protected $priority = 1;
15
+
16
+ protected $isEditor = false;
17
+
18
+ public function onNextendSliderItemList(&$list) {
19
+ $slider = N2Base::getApplication('smartslider')
20
+ ->get('sliderManager')
21
+ ->getSlider();
22
+ $list[$this->_identifier] = array(
23
+ $this->_title,
24
+ $this->getTemplate($slider),
25
+ $this->getPrefilledTemplate($slider),
26
+ json_encode($this->getValues()),
27
+ $this->getPath(),
28
+ $this->layerProperties,
29
+ $this->priority
30
+ );
31
+ }
32
+
33
+ public function onNextendSliderItemShortcode(&$list) {
34
+ $list[$this->_identifier] = $this;
35
+ }
36
+
37
+ public function getLayerProperties() {
38
+ return $this->layerProperties;
39
+ }
40
+
41
+ /**
42
+ * 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).
43
+ * Parser.js may define custom variables for this.
44
+ *
45
+ * @param $slider N2SmartSliderAbstract
46
+ *
47
+ * @return string
48
+ */
49
+ public function getTemplate($slider) {
50
+ return "{nothing}";
51
+ }
52
+
53
+ /**
54
+ * @param $data
55
+ * @param $id
56
+ * @param $slider N2SmartSliderAbstract
57
+ * @param $slide
58
+ *
59
+ * @return string
60
+ */
61
+ public function render($data, $id, $slider, $slide) {
62
+ return $this->_render($data, $id, $slider, $slide);
63
+ }
64
+
65
+ public function renderAdmin($data, $id, $slider, $slide) {
66
+ $this->isEditor = true;
67
+
68
+ $json = $data->toJson();
69
+ return NHtml::tag("div", array(
70
+ "class" => "n2-ss-item n2-ss-item-" . $this->_identifier,
71
+ "data-item" => $this->_identifier,
72
+ "data-itemvalues" => $json
73
+ ), $this->_renderAdmin($data, $id, $slider, $slide));
74
+ }
75
+
76
+ /**
77
+ * @param $data
78
+ * @param $itemId
79
+ * @param $slider N2SmartSliderAbstract
80
+ * @param $slide N2SmartSliderSlide
81
+ *
82
+ * @return string
83
+ */
84
+ public function _render($data, $itemId, $slider, $slide) {
85
+ return $this->getTemplate($slider);
86
+ }
87
+
88
+ /**
89
+ * @param $data
90
+ * @param $itemId
91
+ * @param $slider N2SmartSliderAbstract
92
+ * @param $slide N2SmartSliderSlide
93
+ *
94
+ * @return string
95
+ */
96
+ public function _renderAdmin($data, $itemId, $slider, $slide) {
97
+ return $this->getTemplate($slider);
98
+ }
99
+
100
+ /*
101
+ * Set default values into the template
102
+ */
103
+ public function getPrefilledTemplate($slider) {
104
+ $html = $this->getTemplate($slider);
105
+ foreach ($this->getValues() AS $k => $v) {
106
+ $html = str_replace('{' . $k . '}', $v, $html);
107
+ }
108
+ return $html;
109
+ }
110
+
111
+ /*
112
+ * Default values, which will be parsed by JS on the admin for default values. It should contain only the fields from the configuration.xml.
113
+ */
114
+ public function getValues() {
115
+ return array(
116
+ 'nothing' => 'Abstract'
117
+ );
118
+ }
119
+
120
+ public function getPath() {
121
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . $this->_identifier . DIRECTORY_SEPARATOR;
122
+ }
123
+
124
+ public static function sortItems(&$items) {
125
+ uasort($items, 'N2SSPluginItemAbstract::compareItems');
126
+ }
127
+
128
+ public static function compareItems($a, $b) {
129
+ return ($a[6] < $b[6]) ? -1 : 1;
130
+ }
131
+
132
+ protected function getLink($slide, $data, $content, $attributes = array(), $renderEmpty = false) {
133
+
134
+ N2Loader::import('libraries.link.link');
135
+
136
+ list($link, $target) = (array)N2Parse::parse($data->get('link', '#|*|'));
137
+ if (!$target) {
138
+ $target = '';
139
+ }
140
+
141
+ if ($link != '#' || $renderEmpty === true) {
142
+ $link = N2LinkParser::parse($slide->fill($link), $attributes, $this->isEditor);
143
+ return NHtml::link($content, $link, $attributes + array(
144
+ "target" => $target
145
+ ));
146
+ }
147
+ return $content;
148
+ }
149
+
150
+ /**
151
+ * @param $slide N2SmartSliderSlide
152
+ * @param $data N2Data
153
+ *
154
+ * @return N2Data
155
+ */
156
+ public function getFilled($slide, $data) {
157
+ return $data;
158
+ }
159
+
160
+ /**
161
+ * @param N2SmartSliderExport $export
162
+ * @param $data
163
+ */
164
+ public function prepareExport($export, $data) {
165
+ }
166
+
167
+ /**
168
+ * @param N2SmartSliderImport $import
169
+ * @param N2Data $data
170
+ *
171
+ * @return N2Data
172
+ */
173
+ public function prepareImport($import, $data) {
174
+ return $data;
175
+ }
176
+
177
+ protected static function optimizeImage($image, $data, $slider) {
178
+ $lazyLoad = $slider->features->lazyLoad;
179
+
180
+ $imagePath = N2ImageHelper::fixed($image, true);
181
+ if ($imagePath[0] == '/' && $imagePath[1] != '/' && $lazyLoad->layerImageSizeBase64 && $lazyLoad->layerImageSizeBase64Size && filesize($imagePath) < $lazyLoad->layerImageSizeBase64Size) {
182
+ return array(
183
+ 'src' => N2Image::base64($imagePath, $image)
184
+ );
185
+ }
186
+ if (!$lazyLoad->layerImageOptimize || !$data->get('image-optimize', 1)) {
187
+ return array(
188
+ 'src' => N2ImageHelper::fixed($image)
189
+ );
190
+ }
191
+
192
+ $tablet = N2Image::scaleImage('image', $image, $lazyLoad->layerImageTablet);
193
+ $mobile = N2Image::scaleImage('image', $image, $lazyLoad->layerImageMobile);
194
+
195
+ if ($image == $tablet && $image == $mobile) {
196
+ return array(
197
+ 'src' => N2ImageHelper::fixed($image)
198
+ );
199
+ }
200
+ return array(
201
+ 'src' => N2Image::base64Transparent(),
202
+ 'data-desktop' => N2ImageHelper::fixed($image),
203
+ 'data-tablet' => N2ImageHelper::fixed($tablet),
204
+ 'data-mobile' => N2ImageHelper::fixed($mobile),
205
+ 'data-device' => '1'
206
+ );
207
+ }
208
+ }
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) 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,272 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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::import('libraries.slider.javascript', 'smartslider');
10
+ N2Loader::importAll('libraries.slider.slide', 'smartslider');
11
+ N2Loader::import('libraries.settings.settings', 'smartslider');
12
+ N2Loader::import('libraries.slider.widget.widgets', 'smartslider');
13
+
14
+ abstract class N2SmartSliderAbstract
15
+ {
16
+
17
+ public $sliderId = 0;
18
+
19
+ public $elementId = '';
20
+
21
+ public $cacheId = '';
22
+
23
+ public $data;
24
+
25
+ public $params;
26
+
27
+ /**
28
+ * @var N2SmartSliderFeatures
29
+ */
30
+ public $features;
31
+
32
+ public $disableResponsive = false;
33
+
34
+ protected $parameters = null;
35
+
36
+ /**
37
+ * @var N2SmartSliderSlides
38
+ */
39
+ public $slidesBuilder;
40
+
41
+ /**
42
+ * @var N2SmartSliderSlide[]
43
+ */
44
+ public $slides;
45
+
46
+ public $isAdmin = false;
47
+
48
+ public $_activeSlide = 0;
49
+ /**
50
+ * @var Mobile_Detect
51
+ */
52
+ protected $device;
53
+ /**
54
+ * @var NextendSmartSliderCSS
55
+ */
56
+ public $assets;
57
+ protected $cache = false;
58
+
59
+ public static $_identifier = 'n2-ss';
60
+
61
+ public $fontSize = 16;
62
+
63
+ /** @var N2SmartSliderSlide[] */
64
+ public $staticSlides = array();
65
+
66
+ /** @var N2SmartSliderType */
67
+ protected $sliderType;
68
+
69
+ public $staticHtml = '';
70
+
71
+ public $isStaticEdited = false;
72
+
73
+ public function __construct($sliderId, $parameters) {
74
+
75
+ $this->sliderId = $sliderId;
76
+
77
+ $this->setElementId();
78
+
79
+ if ($this->isAdmin) {
80
+ $this->cacheId = self::getAdminCacheId($this->sliderId);
81
+ } else {
82
+ $this->cacheId = self::getCacheId($this->sliderId);
83
+ }
84
+
85
+ $this->parameters = array_merge(array(
86
+ 'extend' => array(),
87
+ 'disableResponsive' => false,
88
+ 'addDummySlidesIfEmpty' => false
89
+ ), $parameters);
90
+
91
+ $this->disableResponsive = $this->parameters['disableResponsive'];
92
+
93
+
94
+ $this->device = new Mobile_Detect();
95
+
96
+ N2Loader::import("models.Sliders", "smartslider");
97
+
98
+ }
99
+
100
+ public function setElementId() {
101
+ $this->elementId = self::$_identifier . '-' . $this->sliderId;
102
+ }
103
+
104
+ public static function getCacheId($sliderId) {
105
+ return self::$_identifier . '-' . $sliderId;
106
+ }
107
+
108
+ public static function getAdminCacheId($sliderId) {
109
+ return self::$_identifier . '-admin-' . $sliderId;
110
+ }
111
+
112
+
113
+ public function getSliderTypeResource($resourceName) {
114
+
115
+ $type = $this->data->get('type', 'simple');
116
+
117
+ $class = 'N2SSPluginType' . $type;
118
+
119
+ N2Loader::importPath(call_user_func(array(
120
+ $class,
121
+ "getPath"
122
+ )) . NDS . $resourceName);
123
+
124
+ $class = 'N2SmartSlider' . $resourceName . $type;
125
+ return new $class($this);
126
+ }
127
+
128
+ abstract public function parseSlider($slider);
129
+
130
+ abstract public function addCMSFunctions($slider);
131
+
132
+ public function loadSlider() {
133
+
134
+ $slidersModel = new N2SmartsliderSlidersModel();
135
+ $slider = $slidersModel->get($this->sliderId);
136
+ if (empty($slider)) {
137
+ return false;
138
+ }
139
+ if (isset($this->parameters['extend']['sliderData']) && is_array($this->parameters['extend']['sliderData'])) {
140
+ $sliderData = $this->parameters['extend']['sliderData'];
141
+ $slider['title'] = $sliderData['title'];
142
+ unset($sliderData['title']);
143
+ $slider['type'] = $sliderData['type'];
144
+ unset($sliderData['type']);
145
+
146
+ $this->data = new N2Data($slider);
147
+ $this->params = new N2Data($sliderData);
148
+ } else {
149
+ $this->data = new N2Data($slider);
150
+ $this->params = new N2Data($slider['params'], true);
151
+ }
152
+
153
+ $this->sliderType = $this->getSliderTypeResource('type');
154
+ $this->params->fillDefault($this->sliderType->getDefaults());
155
+ $this->sliderType->limitParams($this->params);
156
+
157
+ $this->features = new N2SmartSliderFeatures($this);
158
+
159
+ $this->initSlides();
160
+ return true;
161
+ }
162
+
163
+ private function initSlides() {
164
+ if ($this->isAdmin) {
165
+ $this->slidesBuilder = new N2SmartSliderSlidesAdmin($this);
166
+ } else {
167
+ $this->slidesBuilder = new N2SmartSliderSlides($this);
168
+ }
169
+ $this->slides = $this->slidesBuilder->getSlides(isset($this->parameters['extend']) ? $this->parameters['extend'] : array(), $this->parameters['addDummySlidesIfEmpty']);
170
+ }
171
+
172
+ public function render() {
173
+
174
+ if (!$this->loadSlider()) {
175
+ return false;
176
+ }
177
+
178
+ if (count($this->slides) == 0) {
179
+ return false;
180
+ }
181
+
182
+ $this->assets = $this->getSliderTypeResource('css');
183
+ $this->assets->render();
184
+ $this->slides[$this->_activeSlide]->setActive();
185
+ for ($i = 0; $i < count($this->slides); $i++) {
186
+ $this->slides[$i]->prepare();
187
+ $this->slides[$i]->setSlidesParams();
188
+ }
189
+
190
+ $this->renderStaticSlide();
191
+ $slider = $this->sliderType->render();
192
+
193
+ if (!$this->isAdmin) {
194
+ N2Plugin::callPlugin('ssitem', 'onNextendSliderRender', array(
195
+ &$slider,
196
+ $this->elementId
197
+ ));
198
+ }
199
+
200
+
201
+ $slider = str_replace('n2-ss-0', $this->elementId, $slider);
202
+
203
+ $dependency = intval($this->params->get('dependency'));
204
+ if (!N2Platform::$isAdmin && $dependency > 0) {
205
+ $slider = '<script id="' . $this->elementId . '" data-dependency="' . $dependency . '" type="rocket/slider">' . str_replace(array(
206
+ '<script',
207
+ '</script'
208
+ ), array(
209
+ '<_s_c_r_i_p_t',
210
+ '<_/_s_c_r_i_p_t'
211
+ ), $slider) . '</script>';
212
+ }
213
+
214
+ $slider = $this->features->translateUrl->renderSlider($slider);
215
+
216
+ $slider = $this->features->align->renderSlider($slider, $this->assets->sizes['width']);
217
+ $slider = $this->features->margin->renderSlider($slider);
218
+
219
+ $slider .= $this->features->fadeOnLoad->renderPlaceholder($this->assets->sizes);
220
+
221
+ return "\n<!-- Nextend Smart Slider 3 #" . $this->sliderId . " - BEGIN -->\n" . $slider . "\n<!-- Nextend Smart Slider 3 #" . $this->sliderId . " - END -->\n";
222
+ }
223
+
224
+ public function addStaticSlide($slide) {
225
+ $this->staticSlides[] = $slide;
226
+ }
227
+
228
+ public function renderStaticSlide() {
229
+ $this->staticHtml = '';
230
+ if (count($this->staticSlides)) {
231
+ for ($i = 0; $i < count($this->staticSlides); $i++) {
232
+ $this->staticHtml .= $this->staticSlides[$i]->getAsStatic();
233
+ }
234
+ }
235
+ }
236
+
237
+ /**
238
+ * @return N2SmartSliderSlide
239
+ */
240
+ public function getPreviousSlide() {
241
+ $length = count($this->slides);
242
+
243
+ if ($this->_activeSlide == 0) {
244
+ return $this->slides[$length - 1];
245
+ }
246
+ return $this->slides[$this->_activeSlide - 1];
247
+ }
248
+
249
+ /**
250
+ * @return N2SmartSliderSlide
251
+ */
252
+ public function getNextSlide() {
253
+ $length = count($this->slides);
254
+ if ($this->_activeSlide == $length - 1) {
255
+ return $this->slides[0];
256
+ }
257
+ return $this->slides[$this->_activeSlide + 1];
258
+ }
259
+
260
+ public static function removeShortcode($content) {
261
+ $content = preg_replace('/smartslider3\[([0-9]+)\]/', '', $content);
262
+ $content = preg_replace('/\[smartslider3 slider="([0-9]+)"\]/', '', $content);
263
+ $content = preg_replace('/\[smartslider3 slider=([0-9]+)\]/', '', $content);
264
+ return $content;
265
+ }
266
+
267
+ public function setStatic($isStaticEdited) {
268
+ $this->isStaticEdited = $isStaticEdited;
269
+ }
270
+ }
271
+
272
+ 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,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2CacheManifestSlider extends N2CacheManifest
4
+ {
5
+
6
+ private $parameters = array();
7
+
8
+ public function __construct($cacheId, $parameters = array()) {
9
+ parent::__construct($cacheId, false);
10
+ $this->parameters = $parameters;
11
+
12
+ }
13
+
14
+ public function makeCache($fileName, $hash, $callable) {
15
+ $variations = 1;
16
+ if (N2Filesystem::existsFile($this->getManifestFilePath('variations'))) {
17
+ $variations = intval(N2Filesystem::readFile($this->getManifestFilePath('variations')));
18
+ }
19
+ return parent::makeCache($fileName . mt_rand(1, $variations), $hash, $callable);
20
+ }
21
+
22
+ protected function isCacheValid(&$manifestData) {
23
+
24
+ if (N2SmartSliderHelper::getInstance()
25
+ ->isSliderChanged($this->parameters['slider']->sliderId, 1)
26
+ ) {
27
+ $this->clearCurrentGroup();
28
+ N2SmartSliderHelper::getInstance()
29
+ ->setSliderChanged($this->parameters['slider']->sliderId, 0);
30
+ return false;
31
+ }
32
+
33
+ $time = N2Platform::getTime();
34
+
35
+ if ($manifestData['nextCacheRefresh'] < $time) {
36
+ return false;
37
+ }
38
+
39
+ return true;
40
+ }
41
+
42
+ protected function addManifestData(&$manifestData) {
43
+
44
+ $manifestData['nextCacheRefresh'] = N2Pluggable::applyFilters('SSNextCacheRefresh', $this->parameters['slider']->slidesBuilder->getNextCacheRefresh(), array($this->parameters['slider']));
45
+
46
+ $variations = 1;
47
+
48
+ $params = $this->parameters['slider']->params;
49
+ if ($params->get('randomize', 0) || $params->get('randomizeFirst', 0)) {
50
+ $variations = intval($params->get('variations', 5));
51
+ if ($variations < 1) {
52
+ $variations = 1;
53
+ }
54
+ }
55
+
56
+ N2Filesystem::createFile($this->getManifestFilePath('variations'), $variations);
57
+ }
58
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/css.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.parse.font');
4
+ N2Loader::import('libraries.parse.style');
5
+
6
+ abstract class N2SmartSliderCSSAbstract
7
+ {
8
+
9
+ /**
10
+ * @var N2SmartSliderAbstract
11
+ */
12
+ protected $slider;
13
+
14
+ public $sizes = array();
15
+
16
+ public function __construct($slider) {
17
+ $this->slider = $slider;
18
+ }
19
+
20
+ public function render() {
21
+ $slider = $this->slider;
22
+ $params = $slider->params;
23
+
24
+ $width = intval($params->get('width', 900));
25
+ $height = intval($params->get('height', 500));
26
+ if ($width < 10) {
27
+ N2Message::error(n2_('Slider width is not valid number!'));
28
+ }
29
+ if ($height < 10) {
30
+ N2Message::error(n2_('Slider height is not valid number!'));
31
+ }
32
+ $context = array(
33
+ 'id' => "~'#{$slider->elementId}'",
34
+ 'width' => $width . 'px',
35
+ 'height' => $height . 'px',
36
+ 'canvas' => 0,
37
+ 'count' => count($slider->slides),
38
+ 'margin' => '0px 0px 0px 0px'
39
+ );
40
+
41
+ $this->renderType($context);
42
+
43
+ if ($params->get('imageload', 0)) {
44
+ N2LESS::addFile(NEXTEND_SMARTSLIDER_ASSETS . '/less/spinner.less', $slider->cacheId, $context, NEXTEND_SMARTSLIDER_ASSETS . '/less' . NDS);
45
+ }
46
+
47
+ $this->sizes['marginVertical'] = 0;
48
+ $this->sizes['marginHorizontal'] = 0;
49
+
50
+ $this->sizes['width'] = intval($context['width']);
51
+ $this->sizes['height'] = intval($context['height']);
52
+ $this->sizes['canvasWidth'] = intval($context['canvaswidth']);
53
+ $this->sizes['canvasHeight'] = intval($context['canvasheight']);
54
+ }
55
+
56
+ protected abstract function renderType(&$context);
57
+
58
+ protected function setContextFonts($matches, &$context, $fonts, $value) {
59
+ $context['font' . $fonts] = '~".' . $matches[0] . '"';
60
+
61
+ $font = new N2ParseFont($value);
62
+ $context['font' . $fonts . 'text'] = '";' . $font->printTab() . '"';
63
+ $font->mixinTab('Link');
64
+ $context['font' . $fonts . 'link'] = '";' . $font->printTab('Link') . '"';
65
+ $font->mixinTab('Link:Hover', 'Link');
66
+ $context['font' . $fonts . 'hover'] = '";' . $font->printTab('Link:Hover') . '"';
67
+ }
68
+
69
+ protected function setContextStyles($selector, &$context, $styles, $value) {
70
+ $context['style' . $styles] = '~".' . $selector . '"';
71
+
72
+ $style = new N2ParseStyle($value);
73
+ $context['style' . $styles . 'normal'] = '";' . $style->printTab('Normal') . '"';
74
+ $context['style' . $styles . 'hover'] = '";' . $style->printTab('Hover') . '"';
75
+
76
+ }
77
+
78
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/align.php ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 = NHtml::tag("div", $htmlOptions, NHtml::tag("div", $htmlOptionsPadding, $sliderHTML));
45
+
46
+ if ($aligned == true) {
47
+ $sliderHTML .= NHtml::tag("div", array("style" => "clear: both"), "");
48
+ }
49
+
50
+ return $sliderHTML;
51
+ }
52
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/autoplay.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureAutoplay
4
+ {
5
+
6
+ private $slider;
7
+
8
+ public $isEnabled = 0, $isStart = 0, $duration = 8000;
9
+ public $interval = 0, $intervalModifier = 'loop', $intervalSlide = 'current';
10
+ public $stopOnClick = 1, $stopOnMouseEnter = 1, $stopOnMediaStarted = 1;
11
+ public $resumeOnMouseLeave = 0, $resumeOnMediaEnded = 1, $resumeOnSlideChanged = 0;
12
+
13
+
14
+ public function __construct($slider) {
15
+
16
+ $this->slider = $slider;
17
+ $params = $slider->params;
18
+
19
+ $this->isEnabled = intval($params->get('autoplay', 0));
20
+ $this->isStart = intval($params->get('autoplayStart', 1));
21
+ $this->duration = intval($params->get('autoplayDuration', 8000));
22
+ if ($this->duration < 1500) {
23
+ $this->duration = 1500;
24
+ }
25
+
26
+ list($this->interval, $this->intervalModifier, $this->intervalSlide) = (array)N2Parse::parse($slider->params->get('autoplayfinish', '0|*|loop|*|current'));
27
+ $this->interval = intval($this->interval);
28
+
29
+ $this->stopOnClick = intval($params->get('autoplayStopClick', 1));
30
+ $this->stopOnMouse = $params->get('autoplayStopMouse', 'enter');
31
+ $this->stopOnMediaStarted = intval($params->get('autoplayStopMedia', 1));
32
+
33
+
34
+ $this->resumeOnClick = $params->get('autoplayResumeClick', 0);
35
+ $this->resumeOnMouse = $params->get('autoplayResumeMouse', 0);
36
+ $this->resumeOnMediaEnded = intval($params->get('autoplayResumeMedia', 1));
37
+
38
+ }
39
+
40
+ public function makeJavaScriptProperties(&$properties) {
41
+ $autoplayToSlide = 0;
42
+
43
+ switch ($this->intervalModifier) {
44
+ case 'slide':
45
+ $autoplayToSlide = $this->interval;
46
+ if ($this->intervalSlide == 'next') {
47
+ $autoplayToSlide++;
48
+ }
49
+ break;
50
+ default:
51
+ $autoplayToSlide = $this->interval * count($this->slider->slides);
52
+ if ($this->intervalSlide == 'next') {
53
+ $autoplayToSlide++;
54
+ }
55
+ break;
56
+ }
57
+ $properties['autoplay'] = array(
58
+ 'enabled' => $this->isEnabled,
59
+ 'start' => $this->isStart,
60
+ 'duration' => $this->duration,
61
+ 'autoplayToSlide' => $autoplayToSlide,
62
+ 'pause' => array(
63
+ 'click' => $this->stopOnClick,
64
+ 'mouse' => $this->stopOnMouse,
65
+ 'mediaStarted' => $this->stopOnMediaStarted
66
+ ),
67
+ 'resume' => array(
68
+ 'click' => $this->resumeOnClick,
69
+ 'mouse' => $this->resumeOnMouse,
70
+ 'mediaEnded' => $this->resumeOnMediaEnded,
71
+ 'slidechanged' => $this->resumeOnSlideChanged
72
+ )
73
+ );
74
+ }
75
+ }
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
+
23
+
24
+ if (!empty($this->fadeOnScroll) && $this->fadeOnScroll) {
25
+ $this->fadeOnLoad = 1;
26
+ $this->fadeOnScroll = 1;
27
+ } else {
28
+ $this->fadeOnScroll = 0;
29
+ }
30
+ }
31
+
32
+ public function forceFadeOnLoad() {
33
+ if (!$this->fadeOnScroll && !$this->fadeOnLoad) {
34
+ $this->fadeOnLoad = 1;
35
+ }
36
+ }
37
+
38
+ public function getSliderClass() {
39
+ if ($this->fadeOnLoad) {
40
+ return 'n2-ss-load-fade ';
41
+ }
42
+ return '';
43
+ }
44
+
45
+ public function renderPlaceholder($sizes) {
46
+
47
+ if (!$this->slider->isAdmin && $this->fadeOnLoad && ($this->slider->features->responsive->scaleDown || $this->slider->features->responsive->scaleUp)) {
48
+
49
+ if (N2SystemHelper::testMemoryLimit()) {
50
+ if ($sizes['width'] + $sizes['marginHorizontal'] > 0 && $sizes['height'] > 0 && function_exists('imagecreatetruecolor')) {
51
+ return NHtml::tag("div", array(
52
+ "id" => $this->slider->elementId . "-placeholder",
53
+ "encode" => false,
54
+ "style" => 'position: relative;z-index:2;'
55
+ ), $this->makeImage($sizes));
56
+ } else {
57
+ N2CSS::addCode("#{$this->slider->elementId} .n2-ss-load-fade{position: relative !important;}", $this->slider->cacheId);
58
+ }
59
+
60
+ } else {
61
+ 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! You can disable this message in <a href='" . N2Form::$documentation . "#Troubleshooting-G-Server'>global configuration</a> 'Frontend debug message' option."));
62
+ }
63
+ } else {
64
+ N2CSS::addCode("#{$this->slider->elementId}.n2-ss-load-fade{position: relative !important;}", $this->slider->cacheId);
65
+ }
66
+ return '';
67
+ }
68
+
69
+ public function makeJavaScriptProperties(&$properties) {
70
+ $properties['load'] = array(
71
+ 'fade' => $this->fadeOnLoad,
72
+ 'scroll' => ($this->fadeOnScroll & !$this->slider->isAdmin)
73
+ );
74
+ $properties['playWhenVisible'] = $this->playWhenVisible;
75
+ }
76
+
77
+
78
+ private function makeImage($sizes) {
79
+ $html = NHtml::image("data:image/svg+xml;base64," . $this->transparentImage($sizes['width'] + $sizes['marginHorizontal'], $sizes['height']), '', array(
80
+ 'style' => 'width: 100%; max-width:' . ($this->slider->features->responsive->maximumSlideWidth + $sizes['marginHorizontal']) . 'px;'
81
+ ));
82
+
83
+ if ($sizes['marginVertical'] > 0) {
84
+ $html .= NHtml::image("data:image/svg+xml;base64," . $this->transparentImage($sizes['width'] + $sizes['marginHorizontal'], $sizes['marginVertical']), '', array(
85
+ 'style' => 'width: 100%;'
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,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.image.image');
4
+ N2Loader::import('libraries.image.manager');
5
+
6
+ class N2SmartSliderFeatures
7
+ {
8
+
9
+ private $slider;
10
+
11
+ /**
12
+ * @var N2SmartSliderFeatureFadeOnLoad
13
+ */
14
+ public $fadeOnLoad;
15
+
16
+ /**
17
+ * @var N2SmartSliderFeatureResponsive
18
+ */
19
+ public $responsive;
20
+
21
+ /**
22
+ * @var N2SmartSliderFeatureControls
23
+ */
24
+ public $controls;
25
+
26
+ /**
27
+ * @var N2SmartSliderFeatureLazyLoad
28
+ */
29
+ public $lazyLoad;
30
+
31
+ /**
32
+ * @var N2SmartSliderFeatureAlign
33
+ */
34
+ public $align;
35
+
36
+ /**
37
+ * @var N2SmartSliderFeatureBlockRightClick
38
+ */
39
+ public $blockRightClick;
40
+ /**
41
+ * @var N2SmartSliderFeatureAutoplay
42
+ */
43
+ public $autoplay;
44
+
45
+ /**
46
+ * @var N2SmartSliderFeatureTranslateUrl
47
+ */
48
+ public $translateUrl;
49
+
50
+ /**
51
+ * @var N2SmartSliderFeatureLayerMode
52
+ */
53
+ public $layerMode;
54
+
55
+ /**
56
+ * @var N2SmartSliderFeatureSlideBackground
57
+ */
58
+ public $slideBackground;
59
+
60
+ public $slideBackgroundVideo;
61
+
62
+ /**
63
+ * @var N2SmartSliderFeaturePostBackgroundAnimation
64
+ */
65
+ public $postBackgroundAnimation;
66
+
67
+ /**
68
+ * @var N2SmartSliderFeatureSpinner
69
+ */
70
+ public $loadSpinner;
71
+
72
+ private $initCallbacks = array();
73
+
74
+ public function __construct($slider) {
75
+ $this->slider = $slider;
76
+
77
+ $this->fadeOnLoad = new N2SmartSliderFeatureFadeOnLoad($slider);
78
+ $this->responsive = new N2SmartSliderFeatureResponsive($slider);
79
+ $this->controls = new N2SmartSliderFeatureControls($slider);
80
+ $this->lazyLoad = new N2SmartSliderFeatureLazyLoad($slider);
81
+ $this->margin = new N2SmartSliderFeatureMargin($slider);
82
+ $this->align = new N2SmartSliderFeatureAlign($slider);
83
+ $this->blockRightClick = new N2SmartSliderFeatureBlockRightClick($slider);
84
+ $this->maintainSession = new N2SmartSliderFeatureMaintainSession($slider);
85
+ $this->autoplay = new N2SmartSliderFeatureAutoplay($slider);
86
+ $this->translateUrl = new N2SmartSliderFeatureTranslateUrl($slider);
87
+ $this->layerMode = new N2SmartSliderFeatureLayerMode($slider);
88
+ $this->slideBackground = new N2SmartSliderFeatureSlideBackground($slider);
89
+ $this->loadSpinner = new N2SmartSliderFeatureSpinner($slider);
90
+ }
91
+
92
+ public function generateJSProperties() {
93
+
94
+ $return = array(
95
+ 'admin' => $this->slider->isAdmin,
96
+ 'isStaticEdited' => intval($this->slider->isStaticEdited),
97
+ 'translate3d' => intval(N2SmartSliderSettings::get('hardware-acceleration', 1)),
98
+ 'randomize' => intval(!$this->slider->isAdmin && $this->slider->params->get('randomize', 0))
99
+ );
100
+
101
+ $this->makeJavaScriptProperties($return);
102
+
103
+ return $return;
104
+ }
105
+
106
+ protected function makeJavaScriptProperties(&$properties) {
107
+ $this->fadeOnLoad->makeJavaScriptProperties($properties);
108
+ $this->responsive->makeJavaScriptProperties($properties);
109
+ $this->controls->makeJavaScriptProperties($properties);
110
+ $this->lazyLoad->makeJavaScriptProperties($properties);
111
+ $this->blockRightClick->makeJavaScriptProperties($properties);
112
+ $this->maintainSession->makeJavaScriptProperties($properties);
113
+ $this->autoplay->makeJavaScriptProperties($properties);
114
+ $this->layerMode->makeJavaScriptProperties($properties);
115
+ $this->loadSpinner->makeJavaScriptProperties($properties);
116
+ $properties['initCallbacks'] = $this->initCallbacks;
117
+ }
118
+
119
+ /**
120
+ * @param $slide N2SmartSliderSlide
121
+ */
122
+ public function makeSlide($slide) {
123
+ }
124
+
125
+ /**
126
+ * @param $slide N2SmartSliderSlide
127
+ *
128
+ * @return string
129
+ */
130
+ public function makeBackground($slide) {
131
+
132
+ $background = $this->slideBackground->make($slide);
133
+
134
+ return $background;
135
+ }
136
+
137
+ protected function setDevices() {
138
+
139
+ if (intval($this->_data->get('showmobile', 1)) == 0) {
140
+ if (!$this->device->isTablet() && $this->device->isMobile()) {
141
+ $this->norender = true;
142
+ return;
143
+ }
144
+ }
145
+
146
+ $custommobile = N2Parse::parse($this->_data->get('showcustommobile', '0|*|'));
147
+ if ($custommobile[0] == 1) {
148
+ if (!$this->device->isTablet() && $this->device->isMobile()) {
149
+ $this->_data->set('slider', $custommobile[1]);
150
+ }
151
+ }
152
+
153
+ if (intval($this->_data->get('showtablet', 1)) == 0) {
154
+ if ($this->device->isTablet()) {
155
+ $this->norender = true;
156
+ return;
157
+ }
158
+ }
159
+
160
+ $customtablet = N2Parse::parse($this->_data->get('showcustomtablet', '0|*|'));
161
+ if ($customtablet[0] == 1) {
162
+ if ($this->device->isTablet()) {
163
+ $this->_data->set('slider', $customtablet[1]);
164
+ }
165
+ }
166
+
167
+ }
168
+
169
+ public function addInitCallback($callback) {
170
+ $this->initCallbacks[] = $callback;
171
+ }
172
+ }
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 = NHtml::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/responsive.php ADDED
@@ -0,0 +1,437 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureResponsive
4
+ {
5
+
6
+ private $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 $minimumHeight = -1;
27
+
28
+ public $maximumHeight = -1;
29
+
30
+ public $maximumSlideWidth = 10000;
31
+ public $maximumSlideWidthLandscape = -1;
32
+
33
+ public $maximumSlideWidthTablet = -1;
34
+ public $maximumSlideWidthTabletLandscape = -1;
35
+
36
+ public $maximumSlideWidthMobile = -1;
37
+ public $maximumSlideWidthMobileLandscape = -1;
38
+
39
+ public $maximumSlideWidthConstrainHeight = 0;
40
+
41
+ public $verticalOffsetSelectors = '';
42
+
43
+ public $basedOn = 'combined';
44
+
45
+ public $desktopPortraitScreenWidth = 1200;
46
+
47
+ public $tabletPortraitScreenWidth = 800;
48
+
49
+ public $mobilePortraitScreenWidth = 440;
50
+
51
+ public $tabletLandscapeScreenWidth = 1024;
52
+
53
+ public $mobileLandscapeScreenWidth = 740;
54
+
55
+ public $focusUser = 0, $focusAutoplay = 0;
56
+
57
+ public $orientationMode = 'width_and_height';
58
+
59
+ public function __construct($slider) {
60
+
61
+ $this->slider = $slider;
62
+
63
+ $this->desktop = intval($slider->params->get('desktop', 1));
64
+ $this->tablet = intval($slider->params->get('tablet', 1));
65
+ $this->mobile = intval($slider->params->get('mobile', 1));
66
+
67
+ $this->type = $slider->params->get('responsive-mode', 'auto');
68
+ $class = 'N2SSResponsive' . $this->type;
69
+ if (!class_exists($class)) {
70
+ $class = 'N2SSResponsiveAuto';
71
+ }
72
+ $this->modeObject = new $class($slider->params, $this);
73
+ $this->onResizeEnabled = !$slider->disableResponsive;
74
+
75
+ if (!$this->scaleDown && !$this->scaleUp) {
76
+ $this->onResizeEnabled = 0;
77
+ }
78
+
79
+
80
+ $this->basedOn = N2SmartSliderSettings::get('responsive-basedon', 'combined');
81
+
82
+ $this->desktopPortraitScreenWidth = intval(N2SmartSliderSettings::get('responsive-screen-width-desktop-portrait', 1200));
83
+
84
+ $this->tabletPortraitScreenWidth = intval(N2SmartSliderSettings::get('responsive-screen-width-tablet-portrait', 800));
85
+ $this->mobilePortraitScreenWidth = intval(N2SmartSliderSettings::get('responsive-screen-width-mobile-portrait', 440));
86
+
87
+ if ($this->tabletPortraitScreenWidth < $this->mobilePortraitScreenWidth) {
88
+ $this->mobilePortraitScreenWidth = $this->tabletPortraitScreenWidth;
89
+ }
90
+
91
+ $this->tabletLandscapeScreenWidth = intval(N2SmartSliderSettings::get('responsive-screen-width-tablet-landscape', 1024));
92
+ $this->mobileLandscapeScreenWidth = intval(N2SmartSliderSettings::get('responsive-screen-width-mobile-landscape', 740));
93
+
94
+ if ($this->tabletLandscapeScreenWidth < $this->mobileLandscapeScreenWidth) {
95
+ $this->mobileLandscapeScreenWidth = $this->tabletLandscapeScreenWidth;
96
+ }
97
+
98
+ $modes = array(
99
+ 'desktopPortrait' => 1,
100
+ 'desktopLandscape' => 0,
101
+ 'tabletPortrait' => 0,
102
+ 'tabletLandscape' => 0,
103
+ 'mobilePortrait' => 0,
104
+ 'mobileLandscape' => 0
105
+ );
106
+ $min = intval($slider->params->get('desktop-portrait-minimum-font-size', 4));
107
+ $minimumFontSize = array(
108
+ 'desktopPortrait' => $min,
109
+ 'desktopLandscape' => $min,
110
+ 'tabletPortrait' => $min,
111
+ 'tabletLandscape' => $min,
112
+ 'mobilePortrait' => $min,
113
+ 'mobileLandscape' => $min
114
+ );
115
+ $ratioModifiers = array(
116
+ 'unknownUnknown' => 1,
117
+ 'desktopPortrait' => 1,
118
+ 'desktopLandscape' => 1,
119
+ 'tabletPortrait' => 1,
120
+ 'tabletLandscape' => 1,
121
+ 'mobilePortrait' => 1,
122
+ 'mobileLandscape' => 1
123
+ );
124
+
125
+ $sliderWidth = intval($slider->params->get('width', 1000));
126
+ $sliderHeight = intval($slider->params->get('height', 500));
127
+
128
+ $modeSwitchWidth = array(
129
+ 'desktopPortrait' => $sliderWidth,
130
+ 'desktopLandscape' => $sliderWidth,
131
+ 'tabletPortrait' => 0,
132
+ 'tabletLandscape' => 0,
133
+ 'mobilePortrait' => 0,
134
+ 'mobileLandscape' => 0
135
+ );
136
+
137
+ if ($slider->params->get('desktop-landscape', 0)) {
138
+ $modes['desktopLandscape'] = 1;
139
+
140
+ $landscapeWidth = intval($slider->params->get('desktop-landscape-width', 1440));
141
+ $modeSwitchWidth['desktopLandscape'] = $landscapeWidth;
142
+
143
+ $landscapeHeight = intval($slider->params->get('desktop-landscape-height'));
144
+ if ($landscapeHeight) {
145
+ $ratioModifiers['desktopLandscape'] = $landscapeHeight / ($modeSwitchWidth['desktopLandscape'] / $sliderWidth * $sliderHeight);
146
+ }
147
+ $minimumFontSize['desktopLandscape'] = intval($slider->params->get('desktop-landscape-minimum-font-size', 4));
148
+ }
149
+
150
+ if ($slider->params->get('tablet-portrait', 0)) {
151
+ $tabletWidth = intval($slider->params->get('tablet-portrait-width', 800));
152
+ } else {
153
+ $tabletWidth = intval($sliderWidth * N2SmartSliderSettings::get('responsive-default-ratio-tablet-portrait', 70) / 100);
154
+ }
155
+ if ($tabletWidth > 0) {
156
+ if ($tabletWidth >= $modeSwitchWidth['desktopPortrait']) {
157
+ $tabletWidth = $modeSwitchWidth['desktopPortrait'] - 1;
158
+ }
159
+ if ($tabletWidth > 0) {
160
+ $modes['tabletPortrait'] = 1;
161
+ $modeSwitchWidth['tabletPortrait'] = $tabletWidth;
162
+ $portraitHeight = intval($slider->params->get('tablet-portrait-height'));
163
+ if ($portraitHeight) {
164
+ $ratioModifiers['tabletPortrait'] = $portraitHeight / ($modeSwitchWidth['tabletPortrait'] / $sliderWidth * $sliderHeight);
165
+ } else {
166
+ $ratioModifiers['tabletPortrait'] = $ratioModifiers['desktopPortrait'];
167
+ }
168
+ $minimumFontSize['tabletPortrait'] = intval($slider->params->get('tablet-portrait-minimum-font-size', 4));
169
+ }
170
+ }
171
+
172
+ if ($slider->params->get('tablet-landscape', 0)) {
173
+ $tabletWidth = intval($slider->params->get('tablet-landscape-width', 1024));
174
+ if ($tabletWidth >= $modeSwitchWidth['desktopLandscape']) {
175
+ $tabletWidth = $modeSwitchWidth['desktopLandscape'] - 1;
176
+ }
177
+ if ($tabletWidth > 0) {
178
+ $modes['tabletLandscape'] = 1;
179
+ $modeSwitchWidth['tabletLandscape'] = $tabletWidth;
180
+ $landscapeHeight = intval($slider->params->get('tablet-landscape-height'));
181
+ if ($landscapeHeight) {
182
+ $ratioModifiers['tabletLandscape'] = $landscapeHeight / ($modeSwitchWidth['tabletLandscape'] / $sliderWidth * $sliderHeight);
183
+ } else {
184
+ $ratioModifiers['tabletLandscape'] = $ratioModifiers['desktopLandscape'];
185
+ }
186
+ $minimumFontSize['tabletLandscape'] = intval($slider->params->get('tablet-landscape-minimum-font-size', 4));
187
+ }
188
+ } else {
189
+ $this->tabletLandscapeScreenWidth = $this->tabletPortraitScreenWidth;
190
+ $ratioModifiers['tabletLandscape'] = $ratioModifiers['tabletPortrait'];
191
+ }
192
+
193
+
194
+ if ($slider->params->get('mobile-portrait', 0)) {
195
+ $mobileWidth = intval($slider->params->get('mobile-portrait-width', 440));
196
+ } else {
197
+ $mobileWidth = intval($sliderWidth * N2SmartSliderSettings::get('responsive-default-ratio-mobile-portrait', 50) / 100);
198
+ }
199
+ if ($mobileWidth > 0) {
200
+ if ($modeSwitchWidth['tabletPortrait'] > 0) {
201
+ if ($mobileWidth >= $modeSwitchWidth['tabletPortrait']) {
202
+ $mobileWidth = $modeSwitchWidth['tabletPortrait'] - 1;
203
+ }
204
+ } else {
205
+ if ($mobileWidth >= $modeSwitchWidth['desktopPortrait']) {
206
+ $mobileWidth = $modeSwitchWidth['desktopPortrait'] - 1;
207
+ }
208
+ }
209
+ if ($mobileWidth > 0) {
210
+ $modes['mobilePortrait'] = 1;
211
+ $modeSwitchWidth['mobilePortrait'] = $mobileWidth;
212
+ $portraitHeight = intval($slider->params->get('mobile-portrait-height'));
213
+ if ($portraitHeight) {
214
+ $ratioModifiers['mobilePortrait'] = $portraitHeight / ($modeSwitchWidth['mobilePortrait'] / $sliderWidth * $sliderHeight);
215
+ } else {
216
+ $ratioModifiers['mobilePortrait'] = $ratioModifiers['tabletPortrait'];
217
+ }
218
+ $minimumFontSize['mobilePortrait'] = intval($slider->params->get('mobile-portrait-minimum-font-size', 4));
219
+ }
220
+ }
221
+
222
+ if ($slider->params->get('mobile-landscape', 0)) {
223
+ $mobileWidth = intval($slider->params->get('mobile-landscape-width', 740));
224
+ if ($modeSwitchWidth['tabletLandscape'] > 0) {
225
+ if ($mobileWidth >= $modeSwitchWidth['tabletLandscape']) {
226
+ $mobileWidth = $modeSwitchWidth['tabletLandscape'] - 1;
227
+ }
228
+ } else {
229
+ if ($mobileWidth >= $modeSwitchWidth['desktopLandscape']) {
230
+ $mobileWidth = $modeSwitchWidth['desktopLandscape'] - 1;
231
+ }
232
+ }
233
+ if ($mobileWidth > 0) {
234
+ $modes['mobileLandscape'] = 1;
235
+ $modeSwitchWidth['mobileLandscape'] = $mobileWidth;
236
+ $landscapeHeight = intval($slider->params->get('mobile-landscape-height'));
237
+ if ($landscapeHeight) {
238
+ $ratioModifiers['mobileLandscape'] = $landscapeHeight / ($modeSwitchWidth['mobileLandscape'] / $sliderWidth * $sliderHeight);
239
+ } else {
240
+ $ratioModifiers['mobileLandscape'] = $ratioModifiers['tabletLandscape'];
241
+ }
242
+ $minimumFontSize['mobileLandscape'] = intval($slider->params->get('mobile-landscape-minimum-font-size', 4));
243
+ }
244
+ } else {
245
+ $this->mobileLandscapeScreenWidth = $this->mobilePortraitScreenWidth;
246
+ $ratioModifiers['mobileLandscape'] = $ratioModifiers['mobilePortrait'];
247
+ }
248
+ $this->modes = $modes;
249
+ $this->sliderWidthToDevice = $modeSwitchWidth;
250
+ $this->sliderRatioToDevice = array(
251
+ 'Portrait' => array(
252
+ 'tablet' => $modeSwitchWidth['tabletPortrait'] / $modeSwitchWidth['desktopPortrait'],
253
+ 'mobile' => $modeSwitchWidth['mobilePortrait'] / $modeSwitchWidth['desktopPortrait']
254
+ ),
255
+ 'Landscape' => array(
256
+ 'tablet' => $modeSwitchWidth['tabletLandscape'] / $modeSwitchWidth['desktopPortrait'],
257
+ 'mobile' => $modeSwitchWidth['mobileLandscape'] / $modeSwitchWidth['desktopPortrait']
258
+ )
259
+ );
260
+ $this->minimumFontSizes = $minimumFontSize;
261
+ $this->verticalRatioModifiers = $ratioModifiers;
262
+
263
+ }
264
+
265
+ public function makeJavaScriptProperties(&$properties) {
266
+ $normalizedDeviceModes = array(
267
+ 'unknownUnknown' => array(
268
+ 'unknown',
269
+ 'Unknown'
270
+ ),
271
+ 'desktopPortrait' => array(
272
+ 'desktop',
273
+ 'Portrait'
274
+ )
275
+ );
276
+ if ($this->orientationMode == 'width') {
277
+ if (!$this->modes['desktopLandscape']) {
278
+ $normalizedDeviceModes['desktopLandscape'] = $normalizedDeviceModes['desktopPortrait'];
279
+ } else {
280
+ $normalizedDeviceModes['desktopLandscape'] = array(
281
+ 'desktop',
282
+ 'Landscape'
283
+ );
284
+ }
285
+ if (!$this->modes['tabletLandscape']) {
286
+ $normalizedDeviceModes['tabletLandscape'] = $normalizedDeviceModes['desktopPortrait'];
287
+
288
+ } else {
289
+ $normalizedDeviceModes['tabletLandscape'] = array(
290
+ 'tablet',
291
+ 'Landscape'
292
+ );
293
+ }
294
+ if (!$this->modes['tabletPortrait']) {
295
+ $normalizedDeviceModes['tabletPortrait'] = $normalizedDeviceModes['tabletLandscape'];
296
+ } else {
297
+ $normalizedDeviceModes['tabletPortrait'] = array(
298
+ 'tablet',
299
+ 'Portrait'
300
+ );
301
+ }
302
+ if (!$this->modes['mobileLandscape']) {
303
+ $normalizedDeviceModes['mobileLandscape'] = $normalizedDeviceModes['tabletPortrait'];
304
+ } else {
305
+ $normalizedDeviceModes['mobileLandscape'] = array(
306
+ 'mobile',
307
+ 'Landscape'
308
+ );
309
+ }
310
+ if (!$this->modes['mobilePortrait']) {
311
+ $normalizedDeviceModes['mobilePortrait'] = $normalizedDeviceModes['mobileLandscape'];
312
+ } else {
313
+ $normalizedDeviceModes['mobilePortrait'] = array(
314
+ 'mobile',
315
+ 'Portrait'
316
+ );
317
+ }
318
+ } else {
319
+ if (!$this->modes['desktopLandscape']) {
320
+ $normalizedDeviceModes['desktopLandscape'] = $normalizedDeviceModes['desktopPortrait'];
321
+ } else {
322
+ $normalizedDeviceModes['desktopLandscape'] = array(
323
+ 'desktop',
324
+ 'Landscape'
325
+ );
326
+ }
327
+ if (!$this->modes['tabletPortrait']) {
328
+ $normalizedDeviceModes['tabletPortrait'] = $normalizedDeviceModes['desktopPortrait'];
329
+ } else {
330
+ $normalizedDeviceModes['tabletPortrait'] = array(
331
+ 'tablet',
332
+ 'Portrait'
333
+ );
334
+ }
335
+ if (!$this->modes['tabletLandscape']) {
336
+ if ($normalizedDeviceModes['desktopLandscape'][1] == 'Landscape') {
337
+ $normalizedDeviceModes['tabletLandscape'] = $normalizedDeviceModes['desktopLandscape'];
338
+ } else {
339
+ $normalizedDeviceModes['tabletLandscape'] = $normalizedDeviceModes['tabletPortrait'];
340
+ }
341
+ } else {
342
+ $normalizedDeviceModes['tabletLandscape'] = array(
343
+ 'tablet',
344
+ 'Landscape'
345
+ );
346
+ }
347
+ if (!$this->modes['mobilePortrait']) {
348
+ $normalizedDeviceModes['mobilePortrait'] = $normalizedDeviceModes['tabletPortrait'];
349
+ } else {
350
+ $normalizedDeviceModes['mobilePortrait'] = array(
351
+ 'mobile',
352
+ 'Portrait'
353
+ );
354
+ }
355
+ if (!$this->modes['mobileLandscape']) {
356
+ if ($normalizedDeviceModes['tabletLandscape'][1] == 'Landscape') {
357
+ $normalizedDeviceModes['mobileLandscape'] = $normalizedDeviceModes['tabletLandscape'];
358
+ } else {
359
+ $normalizedDeviceModes['mobileLandscape'] = $normalizedDeviceModes['mobilePortrait'];
360
+ }
361
+ } else {
362
+ $normalizedDeviceModes['mobileLandscape'] = array(
363
+ 'mobile',
364
+ 'Landscape'
365
+ );
366
+ }
367
+ }
368
+
369
+ if ($this->maximumSlideWidthLandscape <= 0) {
370
+ $this->maximumSlideWidthLandscape = $this->maximumSlideWidth;
371
+ }
372
+
373
+ if ($this->maximumSlideWidthTablet <= 0) {
374
+ $this->maximumSlideWidthTablet = $this->maximumSlideWidth;
375
+ }
376
+
377
+ if ($this->maximumSlideWidthTabletLandscape <= 0) {
378
+ $this->maximumSlideWidthTabletLandscape = $this->maximumSlideWidthTablet;
379
+ }
380
+
381
+ if ($this->maximumSlideWidthMobile <= 0) {
382
+ $this->maximumSlideWidthMobile = $this->maximumSlideWidth;
383
+ }
384
+
385
+ if ($this->maximumSlideWidthMobileLandscape <= 0) {
386
+ $this->maximumSlideWidthMobileLandscape = $this->maximumSlideWidthMobile;
387
+ }
388
+
389
+
390
+ $properties['responsive'] = array(
391
+ 'desktop' => $this->desktop,
392
+ 'tablet' => $this->tablet,
393
+ 'mobile' => $this->mobile,
394
+
395
+ 'onResizeEnabled' => $this->onResizeEnabled,
396
+ 'type' => $this->type,
397
+ 'downscale' => $this->scaleDown,
398
+ 'upscale' => $this->scaleUp,
399
+ 'minimumHeight' => $this->minimumHeight,
400
+ 'maximumHeight' => $this->maximumHeight,
401
+ 'maximumSlideWidth' => $this->maximumSlideWidth,
402
+ 'maximumSlideWidthLandscape' => $this->maximumSlideWidthLandscape,
403
+ 'maximumSlideWidthTablet' => $this->maximumSlideWidthTablet,
404
+ 'maximumSlideWidthTabletLandscape' => $this->maximumSlideWidthTabletLandscape,
405
+ 'maximumSlideWidthMobile' => $this->maximumSlideWidthMobile,
406
+ 'maximumSlideWidthMobileLandscape' => $this->maximumSlideWidthMobileLandscape,
407
+ 'maximumSlideWidthConstrainHeight' => intval($this->maximumSlideWidthConstrainHeight),
408
+ 'forceFull' => $this->forceFull,
409
+ 'verticalOffsetSelectors' => $this->verticalOffsetSelectors,
410
+
411
+ 'focusUser' => $this->focusUser,
412
+ 'focusAutoplay' => $this->focusAutoplay,
413
+
414
+ 'deviceModes' => $this->modes,
415
+ 'normalizedDeviceModes' => $normalizedDeviceModes,
416
+ 'verticalRatioModifiers' => $this->verticalRatioModifiers,
417
+ 'minimumFontSizes' => $this->minimumFontSizes,
418
+ 'ratioToDevice' => $this->sliderRatioToDevice,
419
+ 'sliderWidthToDevice' => $this->sliderWidthToDevice,
420
+
421
+ 'basedOn' => $this->basedOn,
422
+ 'tabletPortraitScreenWidth' => $this->tabletPortraitScreenWidth,
423
+ 'mobilePortraitScreenWidth' => $this->mobilePortraitScreenWidth,
424
+ 'tabletLandscapeScreenWidth' => $this->tabletLandscapeScreenWidth,
425
+ 'mobileLandscapeScreenWidth' => $this->mobileLandscapeScreenWidth,
426
+ 'orientationMode' => $this->orientationMode
427
+ );
428
+ }
429
+
430
+ public function getMinimumFontSizeAttributes() {
431
+ $return = array();
432
+ foreach ($this->minimumFontSizes AS $k => $v) {
433
+ $return['data-minFontSize' . $k] = $v;
434
+ }
435
+ return $return;
436
+ }
437
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/slidebackground.php ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureSlideBackground
4
+ {
5
+
6
+ private $slider;
7
+
8
+ public function __construct($slider) {
9
+
10
+ $this->slider = $slider;
11
+ }
12
+
13
+ /**
14
+ * @param $slide N2SmartSliderSlide
15
+ *
16
+ * @return string
17
+ */
18
+ public function make($slide) {
19
+
20
+ $dynamicHeight = intval($this->slider->params->get('dynamic-height', 0));
21
+
22
+ $backgroundImage = $slide->fill($slide->parameters->get('backgroundImage', ''));
23
+ $backgroundImageOpacity = min(100, max(0, $slide->parameters->get('backgroundImageOpacity', 100))) / 100;
24
+ $imageData = N2ImageManager::getImageData($backgroundImage);
25
+ $sizes = $this->slider->assets->sizes;
26
+
27
+ $backgroundColor = '';
28
+ $color = $slide->parameters->get('backgroundColor', '');
29
+ if (strlen($color) == 8 && substr($color, 6, 2) != '00') {
30
+ $backgroundColor = 'background-color: #' . substr($color, 0, 6) . ';';
31
+
32
+ if (!class_exists('N2Color')) {
33
+ N2Loader::import("libraries.image.color");
34
+ }
35
+
36
+ $rgba = N2Color::hex2rgba($color);
37
+ $rgba[3] = round($rgba[3] / 127, 2);
38
+ $backgroundColor .= "background-color: RGBA({$rgba[0]}, {$rgba[1]}, {$rgba[2]}, {$rgba[3]});";
39
+ }
40
+
41
+ if (empty($backgroundImage)) {
42
+ $src = N2Image::base64Transparent();
43
+ } else {
44
+ $src = $backgroundImage;
45
+ }
46
+ $alt = $slide->parameters->get('backgroundAlt', '');
47
+ $fillMode = $slide->parameters->get('backgroundMode', 'fill');
48
+
49
+ if ($dynamicHeight) {
50
+ return $this->simple($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $sizes);
51
+ }
52
+
53
+ switch ($fillMode) {
54
+ case 'fit':
55
+ return $this->fit($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $sizes);
56
+ case 'stretch':
57
+ return $this->stretch($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt);
58
+ case 'center':
59
+ return $this->center($backgroundColor, $backgroundImageOpacity, $src, $imageData);
60
+ case 'tile':
61
+ return $this->tile($backgroundColor, $backgroundImageOpacity, $src, $imageData);
62
+ }
63
+ return $this->fill($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $sizes);
64
+ }
65
+
66
+ private function getSize($image, $imageData) {
67
+ $size = N2Parse::parse($imageData['desktop']['size']);
68
+ if ($size[0] > 0 && $size[1] > 0) {
69
+ return $size;
70
+ } else {
71
+ list($width, $height) = @getimagesize($image);
72
+ if ($width != null && $height != null) {
73
+ $imageData['desktop']['size'] = $width . '|*|' . $height;
74
+ N2ImageManager::setImageData($image, $imageData);
75
+ return array(
76
+ $width,
77
+ $height
78
+ );
79
+ }
80
+ }
81
+ return null;
82
+ }
83
+
84
+ private function getDeviceAttributes($image, $imageData) {
85
+ $attributes = array();
86
+ $attributes['data-hash'] = md5($image);
87
+ $attributes['data-desktop'] = N2ImageHelper::fixed($image);
88
+ if ($imageData['tablet']['image'] == '' && $imageData['mobile']['image'] == '') {
89
+
90
+ } else {
91
+ if ($imageData['tablet']['image'] != '') {
92
+ $attributes['data-tablet'] = N2ImageHelper::fixed($imageData['tablet']['image']);
93
+ }
94
+ if ($imageData['mobile']['image'] != '') {
95
+ $attributes['data-mobile'] = N2ImageHelper::fixed($imageData['mobile']['image']);
96
+ }
97
+
98
+ //We have to force the fade on load enabled to make sure the user get great result.
99
+ $this->slider->features->fadeOnLoad->forceFadeOnLoad();
100
+ }
101
+ return $attributes;
102
+ }
103
+
104
+ private function getDefaultImage($src, $deviceAttributes) {
105
+ if (count($deviceAttributes) > 2 || $this->slider->features->lazyLoad->isEnabled > 0) {
106
+ return N2Image::base64Transparent();
107
+ } else {
108
+ return N2ImageHelper::fixed($src);
109
+ }
110
+ }
111
+
112
+ private function fill($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $sizes) {
113
+
114
+ $outerRatio = $sizes['canvasWidth'] / $sizes['canvasHeight'];
115
+
116
+ list($width, $height) = $this->getSize($src, $imageData);
117
+ if (!$width || !$height) {
118
+ $style = '';
119
+ } else {
120
+ $ratio = $width / $height;
121
+
122
+ if ($outerRatio > $ratio) {
123
+ $style = 'width: 100%;height: auto;';
124
+ $height = ($sizes['canvasHeight'] - $sizes['canvasWidth'] / $width * $height) / 2;
125
+ $style .= 'margin-top: ' . $height . 'px;';
126
+ } else {
127
+ $style = 'width: auto;height: 100%;';
128
+ $width = ($sizes['canvasWidth'] - $sizes['canvasHeight'] / $height * $width) / 2;
129
+ $style .= 'margin-left: ' . $width . 'px;';
130
+ }
131
+ }
132
+
133
+ $deviceAttributes = $this->getDeviceAttributes($src, $imageData);
134
+
135
+ return NHtml::tag('div', $deviceAttributes + array(
136
+ "style" => $backgroundColor,
137
+ "class" => "n2-ss-slide-background",
138
+ "data-opacity" => $backgroundImageOpacity
139
+ ), NHtml::image($this->getDefaultImage($src, $deviceAttributes), $alt, array(
140
+ "style" => $style . 'opacity:' . $backgroundImageOpacity . ';',
141
+ "class" => "n2-ss-slide-background-image n2-ss-slide-fill"
142
+ )));
143
+ }
144
+
145
+ private function simple($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $sizes) {
146
+
147
+ $style = 'width: 100%;height: auto;';
148
+
149
+
150
+ $deviceAttributes = $this->getDeviceAttributes($src, $imageData);
151
+ return NHtml::tag('div', $deviceAttributes + array(
152
+ "style" => $backgroundColor,
153
+ "class" => "n2-ss-slide-background",
154
+ "data-opacity" => $backgroundImageOpacity
155
+ ), NHtml::image($this->getDefaultImage($src, $deviceAttributes), $alt, array(
156
+ "style" => $style . 'opacity:' . $backgroundImageOpacity . ';',
157
+ "class" => "n2-ss-slide-background-image n2-ss-slide-simple"
158
+ )));
159
+ }
160
+
161
+ private function fit($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt, $sizes) {
162
+
163
+ $outerRatio = $sizes['canvasWidth'] / $sizes['canvasHeight'];
164
+
165
+ list($width, $height) = $this->getSize($src, $imageData);
166
+ if (!$width || !$height) {
167
+ $style = '';
168
+ } else {
169
+ $ratio = $width / $height;
170
+ if ($outerRatio < $ratio) {
171
+ $style = 'width: 100%;height: auto;';
172
+ $height = ($sizes['canvasHeight'] - $sizes['canvasWidth'] / $width * $height) / 2;
173
+ $style .= 'margin-top: ' . $height . 'px;';
174
+ } else {
175
+ $style = 'width: auto;height: 100%;';
176
+ $width = ($sizes['canvasWidth'] - $sizes['canvasHeight'] / $height * $width) / 2;
177
+ $style .= 'margin-left: ' . $width . 'px;';
178
+ }
179
+ }
180
+
181
+ $deviceAttributes = $this->getDeviceAttributes($src, $imageData);
182
+ return NHtml::tag('div', $deviceAttributes + array(
183
+ "style" => $backgroundColor,
184
+ "class" => "n2-ss-slide-background",
185
+ "data-opacity" => $backgroundImageOpacity
186
+ ), NHtml::image($this->getDefaultImage($src, $deviceAttributes), $alt, array(
187
+ "style" => $style . 'opacity:' . $backgroundImageOpacity . ';',
188
+ "class" => "n2-ss-slide-background-image n2-ss-slide-fit"
189
+ )));
190
+ }
191
+
192
+ private function stretch($backgroundColor, $backgroundImageOpacity, $src, $imageData, $alt) {
193
+ $deviceAttributes = $this->getDeviceAttributes($src, $imageData);
194
+ return NHtml::tag('div', $deviceAttributes + array(
195
+ "style" => $backgroundColor,
196
+ "class" => "n2-ss-slide-background",
197
+ "data-opacity" => $backgroundImageOpacity
198
+ ), NHtml::image($this->getDefaultImage($src, $deviceAttributes), $alt, array(
199
+ "style" => 'opacity:' . $backgroundImageOpacity . ';',
200
+ "class" => "n2-ss-slide-background-image n2-ss-slide-stretch"
201
+ )));
202
+ }
203
+
204
+ private function center($backgroundColor, $backgroundImageOpacity, $src, $imageData) {
205
+ $deviceAttributes = $this->getDeviceAttributes($src, $imageData);
206
+ return NHtml::tag('div', $deviceAttributes + array(
207
+ "style" => $backgroundColor,
208
+ "class" => "n2-ss-slide-background",
209
+ "data-opacity" => $backgroundImageOpacity
210
+ ), NHtml::tag('div', array(
211
+ "class" => "n2-ss-slide-background-image n2-ss-slide-center",
212
+ "style" => "background-image: url(" . $this->getDefaultImage($src, $deviceAttributes) . ");" . 'opacity:' . $backgroundImageOpacity . ';'
213
+ )));
214
+ }
215
+
216
+ private function tile($backgroundColor, $backgroundImageOpacity, $src, $imageData) {
217
+ $deviceAttributes = $this->getDeviceAttributes($src, $imageData);
218
+ return NHtml::tag('div', $deviceAttributes + array(
219
+ "style" => $backgroundColor,
220
+ "class" => "n2-ss-slide-background",
221
+ "data-opacity" => $backgroundImageOpacity
222
+ ), NHtml::tag('div', array(
223
+ "class" => "n2-ss-slide-background-image n2-ss-slide-tile",
224
+ "style" => "background-image: url('" . $this->getDefaultImage($src, $deviceAttributes) . "');" . 'opacity:' . $backgroundImageOpacity . ';'
225
+ )));
226
+ }
227
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/features/spinner.php ADDED
@@ -0,0 +1,262 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderFeatureSpinner
4
+ {
5
+
6
+ private $slider;
7
+
8
+ private static $spinners = array(
9
+ '-1' => '',
10
+ '0' => '',
11
+ 'rectangleDark' => '<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>
12
+ <style type="text/css">
13
+ .n2-ss-spinner-rectangle-dark-container {
14
+ position: absolute;
15
+ top: 50%;
16
+ left: 50%;
17
+ margin: -20px -30px;
18
+ background: RGBA(0,0,0,0.8);
19
+ width: 50px;
20
+ height: 30px;
21
+ padding: 5px;
22
+ border-radius: 3px;
23
+ z-index: 1000;
24
+ }
25
+ .n2-ss-spinner-rectangle-dark {
26
+ width:100%;
27
+ height: 100%;
28
+ outline: 1px solid RGBA(0,0,0,0);
29
+ text-align: center;
30
+ font-size: 10px;
31
+ }
32
+
33
+ .n2-ss-spinner-rectangle-dark > div {
34
+ background-color: #fff;
35
+ margin: 0 1px;
36
+ height: 100%;
37
+ width: 6px;
38
+ display: inline-block;
39
+ -webkit-animation: n2RectangleDark 1.2s infinite ease-in-out;
40
+ animation: n2RectangleDark 1.2s infinite ease-in-out;
41
+ }
42
+ div.n2-ss-spinner-rectangle-2 {
43
+ -webkit-animation-delay: -1.1s;
44
+ animation-delay: -1.1s;
45
+ }
46
+ div.n2-ss-spinner-rectangle-3 {
47
+ -webkit-animation-delay: -1.0s;
48
+ animation-delay: -1.0s;
49
+ }
50
+ div.n2-ss-spinner-rectangle-4 {
51
+ -webkit-animation-delay: -0.9s;
52
+ animation-delay: -0.9s;
53
+ }
54
+
55
+ @-webkit-keyframes n2RectangleDark {
56
+ 0%, 40%, 100% { -webkit-transform: scaleY(0.4) }
57
+ 20% { -webkit-transform: scaleY(1.0) }
58
+ }
59
+
60
+ @keyframes n2RectangleDark {
61
+ 0%, 40%, 100% {
62
+ transform: scaleY(0.4);
63
+ -webkit-transform: scaleY(0.4);
64
+ } 20% {
65
+ transform: scaleY(1.0);
66
+ -webkit-transform: scaleY(1.0);
67
+ }
68
+ }
69
+ </style>',
70
+ 'simpleDark' => '<div><div class="n2-ss-spinner-simple-dark-container"><div class="n2-ss-spinner-simple-dark"></div></div>
71
+ <style type="text/css">
72
+ .n2-ss-spinner-simple-dark-container {
73
+ position: absolute;
74
+ top: 50%;
75
+ left: 50%;
76
+ margin: -20px;
77
+ background: RGBA(0,0,0,0.8);
78
+ width: 20px;
79
+ height: 20px;
80
+ padding: 10px;
81
+ border-radius: 50%;
82
+ z-index: 1000;
83
+ }
84
+
85
+ .n2-ss-spinner-simple-dark {
86
+ outline: 1px solid RGBA(0,0,0,0);
87
+ width:100%;
88
+ height: 100%;
89
+ }
90
+
91
+ .n2-ss-spinner-simple-dark:before {
92
+ position: absolute;
93
+ top: 50%;
94
+ left: 50%;
95
+ width: 20px;
96
+ height: 20px;
97
+ margin-top: -11px;
98
+ margin-left: -11px;
99
+ }
100
+
101
+ .n2-ss-spinner-simple-dark:not(:required):before {
102
+ content: \'\';
103
+ border-radius: 50%;
104
+ border-top: 2px solid #fff;
105
+ border-right: 2px solid transparent;
106
+ animation: n2SimpleDark .6s linear infinite;
107
+ -webkit-animation: n2SimpleDark .6s linear infinite;
108
+ }
109
+ @keyframes n2SimpleDark {
110
+ to {transform: rotate(360deg);}
111
+ }
112
+
113
+ @-webkit-keyframes n2SimpleDark {
114
+ to {-webkit-transform: rotate(360deg);}
115
+ }
116
+
117
+ </style>',
118
+ 'simpleWhite' => '<div><div class="n2-ss-spinner-simple-white-container"><div class="n2-ss-spinner-simple-white"></div></div>
119
+ <style type="text/css">
120
+ .n2-ss-spinner-simple-white-container {
121
+ position: absolute;
122
+ top: 50%;
123
+ left: 50%;
124
+ margin: -20px;
125
+ background: #fff;
126
+ width: 20px;
127
+ height: 20px;
128
+ padding: 10px;
129
+ border-radius: 50%;
130
+ z-index: 1000;
131
+ }
132
+
133
+ .n2-ss-spinner-simple-white {
134
+ outline: 1px solid RGBA(0,0,0,0);
135
+ width:100%;
136
+ height: 100%;
137
+ }
138
+
139
+ .n2-ss-spinner-simple-white:before {
140
+ position: absolute;
141
+ top: 50%;
142
+ left: 50%;
143
+ width: 20px;
144
+ height: 20px;
145
+ margin-top: -11px;
146
+ margin-left: -11px;
147
+ }
148
+
149
+ .n2-ss-spinner-simple-white:not(:required):before {
150
+ content: \'\';
151
+ border-radius: 50%;
152
+ border-top: 2px solid #333;
153
+ border-right: 2px solid transparent;
154
+ animation: n2SimpleWhite .6s linear infinite;
155
+ -webkit-animation: n2SimpleWhite .6s linear infinite;
156
+ }
157
+ @keyframes n2SimpleWhite {
158
+ to {transform: rotate(360deg);}
159
+ }
160
+
161
+ @-webkit-keyframes n2SimpleWhite {
162
+ to {-webkit-transform: rotate(360deg);}
163
+ }
164
+
165
+ </style>',
166
+ 'infiniteDark' => '<div><div class="n2-ss-spinner-infinite-dark-container"><div class="n2-ss-spinner-infinite-dark"></div></div>
167
+ <style type="text/css">
168
+ .n2-ss-spinner-infinite-dark-container {
169
+ position: absolute;
170
+ top: 50%;
171
+ left: 50%;
172
+ margin: -15px;
173
+ background: RGBA(0,0,0,0.8);
174
+ width: 20px;
175
+ height: 20px;
176
+ padding: 5px;
177
+ border-radius: 50%;
178
+ z-index: 1000;
179
+ }
180
+ .n2-ss-spinner-infinite-dark {
181
+ outline: 1px solid RGBA(0,0,0,0);
182
+ width:100%;
183
+ height: 100%;
184
+ }
185
+ .n2-ss-spinner-infinite-dark:before {
186
+ position: absolute;
187
+ top: 50%;
188
+ left: 50%;
189
+ width: 16px;
190
+ height: 16px;
191
+ margin-top: -10px;
192
+ margin-left: -10px;
193
+ }
194
+ .n2-ss-spinner-infinite-dark:not(:required):before {
195
+ content: \'\';
196
+ border-radius: 50%;
197
+ border: 2px solid rgba(255, 255, 255, .3);
198
+ border-top-color: #fff;
199
+ animation: n2InfiniteDark .6s linear infinite;
200
+ -webkit-animation: n2InfiniteDark .6s linear infinite;
201
+ }
202
+ @keyframes n2InfiniteDark {
203
+ to {transform: rotate(360deg);}
204
+ }
205
+ @-webkit-keyframes n2InfiniteDark {
206
+ to {-webkit-transform: rotate(360deg);}
207
+ }
208
+ </style></div>',
209
+ 'infiniteWhite' => '<div><div class="n2-ss-spinner-infinite-white-container"><div class="n2-ss-spinner-infinite-white"></div></div>
210
+ <style type="text/css">
211
+ .n2-ss-spinner-infinite-white-container {
212
+ position: absolute;
213
+ top: 50%;
214
+ left: 50%;
215
+ margin: -10px;
216
+ background: #fff;
217
+ width: 20px;
218
+ height: 20px;
219
+ padding: 5px;
220
+ border-radius: 50%;
221
+ z-index: 1000;
222
+ }
223
+ .n2-ss-spinner-infinite-white {
224
+ outline: 1px solid RGBA(0,0,0,0);
225
+ width:100%;
226
+ height: 100%;
227
+ }
228
+ .n2-ss-spinner-infinite-white:before {
229
+ position: absolute;
230
+ top: 50%;
231
+ left: 50%;
232
+ width: 16px;
233
+ height: 16px;
234
+ margin-top: -10px;
235
+ margin-left: -10px;
236
+ }
237
+ .n2-ss-spinner-infinite-white:not(:required):before {
238
+ content: \'\';
239
+ border-radius: 50%;
240
+ border: 2px solid rgba(0, 0, 0, .3);
241
+ border-top-color: rgba(0, 0, 0, .6);
242
+ animation: n2InfiniteWhite .6s linear infinite;
243
+ -webkit-animation: n2InfiniteWhite .6s linear infinite;
244
+ }
245
+ @keyframes n2InfiniteWhite {
246
+ to {transform: rotate(360deg);}
247
+ }
248
+ @-webkit-keyframes n2InfiniteWhite {
249
+ to {-webkit-transform: rotate(360deg);}
250
+ }
251
+ </style></div>'
252
+ );
253
+
254
+ public function __construct($slider) {
255
+
256
+ $this->slider = $slider;
257
+ }
258
+
259
+ public function makeJavaScriptProperties(&$properties) {
260
+ $properties['load']['spinner'] = self::$spinners[$this->slider->params->get('spinner', 'simpleWhite')];
261
+ }
262
+ }
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,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ abstract class N2GeneratorAbstract
4
+ {
5
+
6
+ /** @var N2GeneratorInfo */
7
+ protected $info;
8
+
9
+ protected $data;
10
+
11
+ public function __construct($info, $data) {
12
+ $this->info = $info;
13
+ $this->data = $data;
14
+ }
15
+
16
+ public final function getData($slides, $startIndex, $group) {
17
+ $data = array();
18
+ $linearData = $this->_getData($slides * $group, $startIndex - 1);
19
+ $keys = array();
20
+ for ($i = 0; $i < count($linearData); $i++) {
21
+ $keys = array_merge($keys, array_keys($linearData[$i]));
22
+ }
23
+
24
+ $columns = array_fill_keys($keys, '');
25
+
26
+ for ($i = 0; $i < count($linearData); $i++) {
27
+ $firstIndex = intval($i / $group);
28
+ if (!isset($data[$firstIndex])) {
29
+ $data[$firstIndex] = array();
30
+ }
31
+ $data[$firstIndex][$i % $group] = array_merge($columns, $linearData[$i]);
32
+ }
33
+
34
+ if (count($data) && count($data[count($data) - 1]) != $group) {
35
+ if (count($data) - 1 == 0 && count($data[count($data) - 1]) > 0) {
36
+ for ($i = 0; count($data[0]) < $group; $i++) {
37
+ $data[0][] = $data[0][$i];
38
+ }
39
+ } else {
40
+ array_pop($data);
41
+ }
42
+ }
43
+ return $data;
44
+ }
45
+
46
+ protected abstract function _getData($count, $startIndex);
47
+
48
+ function makeClickableLinks($s) {
49
+ return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $s);
50
+ }
51
+
52
+ protected function getIDs() {
53
+ return array_map('intval', explode("\n", str_replace(array(
54
+ "\r\n",
55
+ "\n\r",
56
+ "\r"
57
+ ), "\n", $this->data->get('ids'))));
58
+ }
59
+ }
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,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderManager
4
+ {
5
+
6
+ protected $usage = 'Unknown';
7
+
8
+ public $slider;
9
+
10
+ public function __construct($sliderId, $backend = false, $parameters = array()) {
11
+
12
+
13
+ if ($backend) {
14
+ N2Loader::import("libraries.slider.backend", "smartslider");
15
+ $this->slider = new N2SmartSliderBackend($sliderId, $parameters);
16
+ } else {
17
+ N2Loader::import("libraries.slider.abstract", "smartslider");
18
+ $this->slider = new N2SmartSlider($sliderId, $parameters);
19
+ }
20
+
21
+ N2AssetsManager::addCachedGroup($this->slider->cacheId);
22
+ }
23
+
24
+ public function setUsage($usage) {
25
+ $this->usage = $usage;
26
+ }
27
+
28
+ public function getSlider() {
29
+ return $this->slider;
30
+ }
31
+
32
+ public function render($cache = false) {
33
+ if (!$cache) {
34
+ return $this->slider->render();
35
+ }
36
+ N2Loader::import("libraries.slider.cache.slider", "smartslider");
37
+
38
+ return $this->slider->addCMSFunctions($this->cacheSlider());
39
+ }
40
+
41
+ private function cacheSlider() {
42
+ $cache = new N2CacheManifestSlider($this->slider->cacheId, array(
43
+ 'slider' => $this->slider
44
+ ));
45
+ $cachedSlider = $cache->makeCache('slider', '', array(
46
+ $this,
47
+ 'renderCachedSlider'
48
+ ));
49
+
50
+ if ($cachedSlider === false) {
51
+ return '<h3>Smart Slider with ID #' . $this->slider->sliderId . ' does NOT EXIST or has NO SLIDES!</h3><h4>Usage: ' . $this->usage . '</h4>';
52
+ }
53
+ N2AssetsManager::loadFromArray($cachedSlider['assets']);
54
+
55
+ return $cachedSlider['html'];
56
+ }
57
+
58
+ public function renderCachedSlider() {
59
+ N2AssetsManager::createStack();
60
+
61
+ $content = array();
62
+ $content['html'] = $this->slider->render();
63
+
64
+ $assets = N2AssetsManager::removeStack();
65
+
66
+ if ($content['html'] === false) {
67
+ return false;
68
+ }
69
+
70
+ $content['assets'] = $assets;
71
+
72
+ return $content;
73
+ }
74
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/generator.php ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ N2Loader::import('libraries.slider.generator.abstract', 'smartslider');
3
+
4
+ class N2SmartSliderSlidesGenerator
5
+ {
6
+
7
+ private static $localCache = array();
8
+
9
+ /**
10
+ * @var N2SmartSliderSlide
11
+ */
12
+ private $slide;
13
+
14
+ private $generatorModel;
15
+
16
+ public $currentGenerator;
17
+
18
+ private $slider;
19
+
20
+ /**
21
+ * @param $slide N2SmartSliderSlide
22
+ * @param $slider
23
+ * @param $extend
24
+ */
25
+ public function __construct($slide, $slider, $extend) {
26
+ N2Loader::import("libraries.slider.cache.generator", "smartslider");
27
+ N2Loader::import("models.generator", "smartslider");
28
+
29
+ $this->slide = $slide;
30
+ $this->slider = $slider;
31
+
32
+ $this->generatorModel = new N2SmartsliderGeneratorModel();
33
+ $this->currentGenerator = $this->generatorModel->get($this->slide->generator_id);
34
+ $this->currentGenerator['params'] = new N2Data($this->currentGenerator['params'], true);
35
+
36
+ if (isset($extend[$this->slide->generator_id])) {
37
+ $extend = new N2Data($extend[$this->slide->generator_id]);
38
+ $slide->parameters->set('record-slides', $extend->get('record-slides', 1));
39
+ $extend->un_set('record-slides');
40
+ $this->currentGenerator['params']->loadArray($extend->toArray());
41
+ }
42
+ }
43
+
44
+ public function getSlides() {
45
+ $slides = array();
46
+ $data = $this->getData();
47
+ for ($i = 0; $i < count($data); $i++) {
48
+ $newSlide = clone $this->slide;
49
+ $newSlide->setVariables($data[$i]);
50
+ $slides[] = $newSlide;
51
+ }
52
+ if (count($slides) == 0) {
53
+ $slides[] = $this->slide;
54
+ }
55
+ return $slides;
56
+ }
57
+
58
+ public function fillSample() {
59
+ $data = $this->getData();
60
+ if (count($data) > 0) {
61
+ $this->slide->setVariables($data[0]);
62
+ }
63
+ }
64
+
65
+ private function getData() {
66
+ if (!isset(self::$localCache[$this->slide->generator_id])) {
67
+ $cache = new N2CacheManifestGenerator($this->slider, $this);
68
+ self::$localCache[$this->slide->generator_id] = $cache->makeCache('generator' . $this->currentGenerator['id'], md5(json_encode($this->currentGenerator) . max($this->slide->parameters->get('record-slides'), 1)), array(
69
+ $this,
70
+ 'getNotCachedData'
71
+ ));
72
+ }
73
+
74
+ return self::$localCache[$this->slide->generator_id];
75
+ }
76
+
77
+ public function getNotCachedData() {
78
+
79
+ $info = $this->generatorModel->getGeneratorInfo($this->currentGenerator['group'], $this->currentGenerator['type']);
80
+
81
+ require_once($info->path . '/generator.php');
82
+ $class = 'N2Generator' . $this->currentGenerator['group'] . $this->currentGenerator['type'];
83
+ /** @var N2GeneratorAbstract $dataSource */
84
+ $dataSource = new $class($info, $this->currentGenerator['params']);
85
+
86
+ return $dataSource->getData(max($this->slide->parameters->get('record-slides'), 1), max($this->currentGenerator['params']->get('record-start'), 1), $this->getSlideGroup());
87
+ }
88
+
89
+ public function setNextCacheRefresh($time) {
90
+ $this->slide->setNextCacheRefresh($time);
91
+ }
92
+
93
+ public function getSlideCount() {
94
+ return max($this->slide->parameters->get('record-slides'), 1);
95
+ }
96
+
97
+ public function getSlideGroup() {
98
+ return max($this->currentGenerator['params']->get('record-group'), 1);
99
+ }
100
+
101
+ public function getSlideStat() {
102
+ return count($this->getData()) . '/' . $this->getSlideCount();
103
+ }
104
+ }
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,307 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderLayer
4
+ {
5
+
6
+ private $slider, $slide, $item;
7
+
8
+ /**
9
+ * @param $slider N2SmartSliderAbstract
10
+ * @param $slide N2SmartSliderSlide
11
+ */
12
+ public function __construct($slider, $slide) {
13
+ $this->slider = $slider;
14
+ $this->slide = $slide;
15
+ $this->item = new N2SmartSliderItem($slider, $slide);
16
+ }
17
+
18
+ private function WHUnit($value) {
19
+ if ($value == 'auto' || substr($value, -1) == '%') {
20
+ return $value;
21
+ }
22
+ return $value . 'px';
23
+ }
24
+
25
+ public function render($layer) {
26
+
27
+ $innerHTML = '';
28
+ for ($i = 0; $i < count($layer['items']); $i++) {
29
+ $innerHTML .= $this->item->render($layer['items'][$i]);
30
+ }
31
+ unset($layer['items']);
32
+
33
+ $cropStyle = $layer['crop'];
34
+
35
+ if ($this->slider->isAdmin) {
36
+ if ($layer['crop'] == 'auto') {
37
+ $cropStyle = 'hidden';
38
+ }
39
+ }
40
+
41
+ if ($layer['crop'] == 'mask') {
42
+ $cropStyle = 'hidden';
43
+ $innerHTML = NHtml::tag('div', array('class' => 'n2-ss-layer-mask'), $innerHTML);
44
+ } else if (!$this->slider->isAdmin && $layer['parallax'] > 0) {
45
+ $innerHTML = NHtml::tag('div', array(
46
+ 'class' => 'n2-ss-layer-parallax'
47
+ ), $innerHTML);
48
+ }
49
+
50
+ if (!isset($layer['responsiveposition'])) {
51
+ $layer['responsiveposition'] = 1;
52
+ }
53
+
54
+ if (!isset($layer['responsivesize'])) {
55
+ $layer['responsivesize'] = 1;
56
+ }
57
+
58
+
59
+ $style = '';
60
+ /*if (isset($layer['adaptivefont']) && $layer['adaptivefont']) {
61
+ $style .= 'font-size: ' . $this->slider->fontSize . 'px;';
62
+ }*/
63
+ if (isset($layer['inneralign'])) {
64
+ $style .= 'text-align:' . $layer['inneralign'];
65
+ }
66
+
67
+ $style .= ';left:' . $layer['desktopportraitleft'] . 'px';
68
+ $style .= ';top:' . $layer['desktopportraittop'] . 'px';
69
+ $style .= ';width:' . $this->WHUnit($layer['desktopportraitwidth']);
70
+ $style .= ';height:' . $this->WHUnit($layer['desktopportraitheight']);
71
+
72
+ if (isset($layer['zIndex'])) {
73
+ $zIndex = $layer['zIndex'];
74
+ unset($layer['zIndex']);
75
+ } else {
76
+ preg_match('/z\-index:.*?([0-9]+);/', $layer['style'], $out);
77
+ $zIndex = $out[1];
78
+ unset($layer['style']);
79
+ }
80
+
81
+ $attributes = array(
82
+ 'class' => 'n2-ss-layer',
83
+ 'style' => 'z-index:' . $zIndex . ';overflow:' . $cropStyle . ';' . $style . ';',
84
+ 'data-animations' => base64_encode(json_encode($layer['animations']))
85
+ );
86
+
87
+ if (!empty($layer['id'])) {
88
+ $attributes['id'] = $layer['id'];
89
+ unset($layer['id']);
90
+ }
91
+
92
+ unset($layer['animations']);
93
+
94
+ if (!$this->slider->isAdmin && $layer['parallax'] < 1) {
95
+ unset($layer['parallax']);
96
+ }
97
+
98
+ if (!$this->slider->isAdmin) {
99
+ $this->getEventAttributes($attributes, $layer, $this->slider->elementId);
100
+ }
101
+
102
+ foreach ($layer AS $k => $data) {
103
+ $attributes['data-' . $k] = $data;
104
+ }
105
+ return NHtml::tag('div', $attributes, $innerHTML);
106
+ }
107
+
108
+ public function getFilled($layer) {
109
+ $items = array();
110
+ for ($i = 0; $i < count($layer['items']); $i++) {
111
+ $items [] = $this->item->getFilled($layer['items'][$i]);
112
+ }
113
+ $layer['items'] = $items;
114
+ return $layer;
115
+ }
116
+
117
+ /**
118
+ * @param N2SmartSliderExport $export
119
+ * @param $rawLayers
120
+ */
121
+ public static function prepareExport($export, $rawLayers) {
122
+ $layers = json_decode($rawLayers, true);
123
+ foreach ($layers AS $layer) {
124
+
125
+ foreach ($layer['items'] AS $item) {
126
+ N2SmartSliderItem::prepareExport($export, $item);
127
+ }
128
+ }
129
+ }
130
+
131
+ /**
132
+ * @param N2SmartSliderImport $import
133
+ * @param $rawLayers
134
+ *
135
+ * @return mixed|string|void
136
+ */
137
+ public static function prepareImport($import, $rawLayers) {
138
+ $layers = json_decode($rawLayers, true);
139
+ for ($i = 0; $i < count($layers); $i++) {
140
+ for ($j = 0; $j < count($layers[$i]['items']); $j++) {
141
+ $layers[$i]['items'][$j] = N2SmartSliderItem::prepareImport($import, $layers[$i]['items'][$j]);
142
+ }
143
+ }
144
+ return json_encode($layers);
145
+ }
146
+
147
+ public static function sort($layers) {
148
+ $children = array();
149
+ for ($i = count($layers) - 1; $i >= 0; $i--) {
150
+ if (!empty($layers[$i]['parentid'])) {
151
+ $parentId = $layers[$i]['parentid'];
152
+ if (!isset($children[$parentId])) {
153
+ $children[$parentId] = array();
154
+ }
155
+ $children[$parentId][] = $layers[$i];
156
+ array_splice($layers, $i, 1);
157
+ }
158
+ }
159
+
160
+ for ($i = 0; $i < count($layers); $i++) {
161
+ if (isset($layers[$i]['id']) && isset($children[$layers[$i]['id']])) {
162
+ array_splice($layers, $i + 1, 0, $children[$layers[$i]['id']]);
163
+ unset($children[$layers[$i]['id']]);
164
+ }
165
+ }
166
+ return $layers;
167
+ }
168
+
169
+ private static function uid($length = 12) {
170
+ $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
171
+ $charactersLength = strlen($characters);
172
+ $randomString = '';
173
+ for ($i = 0; $i < $length; $i++) {
174
+ $randomString .= $characters[mt_rand(0, $charactersLength - 1)];
175
+ }
176
+ return $randomString;
177
+ }
178
+
179
+ public static function translateIds($layers) {
180
+ $layers = self::sort($layers);
181
+ $idTranslation = array();
182
+ for ($i = 0; $i < count($layers); $i++) {
183
+ if (!empty($layers[$i]['id'])) {
184
+ $newId = 'd' . self::uid();
185
+ $idTranslation[$layers[$i]['id']] = $newId;
186
+ $layers[$i]['id'] = $newId;
187
+ }
188
+ if (!empty($layers[$i]['parentid'])) {
189
+ if (isset($idTranslation[$layers[$i]['parentid']])) {
190
+ $layers[$i]['parentid'] = $idTranslation[$layers[$i]['parentid']];
191
+ } else {
192
+ $layers[$i]['parentid'] = '';
193
+ }
194
+ }
195
+ }
196
+ return $layers;
197
+ }
198
+
199
+ protected function getEventAttributes(&$attributes, &$layer, $sliderId) {
200
+ if (!empty($layer['mouseenter'])) {
201
+ $attributes['data-mouseenter'] = $this->parseEventCode($layer['mouseenter'], $sliderId);
202
+ unset($layer['mouseenter']);
203
+ }
204
+ if (!empty($layer['click'])) {
205
+ $attributes['data-click'] = $this->parseEventCode($layer['click'], $sliderId);
206
+ $attributes['style'] .= 'cursor:pointer;';
207
+ unset($layer['click']);
208
+ }
209
+ if (!empty($layer['mouseleave'])) {
210
+ $attributes['data-mouseleave'] = $this->parseEventCode($layer['mouseleave'], $sliderId);
211
+ unset($layer['mouseleave']);
212
+ }
213
+ if (!empty($layer['play'])) {
214
+ $attributes['data-play'] = $this->parseEventCode($layer['play'], $sliderId);
215
+ unset($layer['play']);
216
+ }
217
+ if (!empty($layer['pause'])) {
218
+ $attributes['data-pause'] = $this->parseEventCode($layer['pause'], $sliderId);
219
+ unset($layer['pause']);
220
+ }
221
+ if (!empty($layer['stop'])) {
222
+ $attributes['data-stop'] = $this->parseEventCode($layer['stop'], $sliderId);
223
+ unset($layer['stop']);
224
+ }
225
+ }
226
+
227
+ protected function parseEventCode($code, $elementId) {
228
+ if (preg_match('/^[a-zA-Z0-9_\-,]+$/', $code)) {
229
+ if (is_numeric($code)) {
230
+ $code = "window['" . $elementId . "'].changeTo(" . ($code - 1) . ");";
231
+ } else if ($code == 'next') {
232
+ $code = "window['" . $elementId . "'].next();";
233
+ } else if ($code == 'previous') {
234
+ $code = "window['" . $elementId . "'].previous();";
235
+ } else {
236
+ $code = "n2ss.trigger(this, '" . $code . "');";
237
+ }
238
+ }
239
+ return $code;
240
+ }
241
+ }
242
+
243
+
244
+ class N2SmartSliderLayerHelper
245
+ {
246
+
247
+ public $data = array(
248
+ "zIndex" => 1,
249
+ "eye" => false,
250
+ "lock" => false,
251
+ "animations" => array(
252
+ "specialZeroIn" => 0,
253
+ "transformOriginIn" => "50|*|50|*|0",
254
+ "inPlayEvent" => "",
255
+ "repeatCount" => 0,
256
+ "repeatStartDelay" => 0,
257
+ "transformOriginLoop" => "50|*|50|*|0",
258
+ "loopPlayEvent" => "",
259
+ "loopPauseEvent" => "",
260
+ "loopStopEvent" => "",
261
+ "transformOriginOut" => "50|*|50|*|0",
262
+ "outPlayEvent" => "",
263
+ "instantOut" => 1,
264
+ "in" => array(),
265
+ "loop" => array(),
266
+ "out" => array()
267
+ ),
268
+ "id" => null,
269
+ "parentid" => null,
270
+ "name" => "Layer",
271
+ "namesynced" => 1,
272
+ "crop" => "visible",
273
+ "inneralign" => "left",
274
+ "parallax" => 0,
275
+ "adaptivefont" => 0,
276
+ "desktopportrait" => 1,
277
+ "desktoplandscape" => 1,
278
+ "tabletportrait" => 1,
279
+ "tabletlandscape" => 1,
280
+ "mobileportrait" => 1,
281
+ "mobilelandscape" => 1,
282
+ "responsiveposition" => 1,
283
+ "responsivesize" => 1,
284
+ "desktopportraitleft" => 0,
285
+ "desktopportraittop" => 0,
286
+ "desktopportraitwidth" => "auto",
287
+ "desktopportraitheight" => "auto",
288
+ "desktopportraitalign" => "center",
289
+ "desktopportraitvalign" => "middle",
290
+ "desktopportraitparentalign" => "center",
291
+ "desktopportraitparentvalign" => "middle",
292
+ "desktopportraitfontsize" => 100,
293
+ "items" => array()
294
+
295
+ );
296
+
297
+ public function __construct($properties = array()) {
298
+ foreach ($properties as $k => $v) {
299
+ $this->data[$k] = $v;
300
+ }
301
+ }
302
+
303
+ public function set($key, $value) {
304
+ $this->data[$key] = $value;
305
+ return $this;
306
+ }
307
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/slide.php ADDED
@@ -0,0 +1,484 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderSlide
4
+ {
5
+
6
+ /**
7
+ * @var N2SmartSliderAbstract
8
+ */
9
+ protected $sliderObject;
10
+ public $id = 0, $slider = 0, $publish_up, $publish_down, $published = 1, $first = 0, $slide = '', $ordering = 0, $generator_id = 0;
11
+
12
+ protected $title = '', $description = '', $thumbnail = '';
13
+
14
+ public $parameters, $background = '';
15
+
16
+ protected $active = false;
17
+
18
+ protected $html = '';
19
+
20
+ protected $visible = 1;
21
+
22
+ protected $underEdit = false;
23
+
24
+ /**
25
+ * @var bool|N2SmartSliderSlidesGenerator
26
+ */
27
+ protected $generator = false;
28
+ protected $variables = array();
29
+
30
+ public $index = -1;
31
+
32
+ public $attributes = array(), $containerAttributes = array(
33
+ 'class' => 'n2-ss-layers-container',
34
+ 'style' => ''
35
+ ), $classes = '', $style = '';
36
+
37
+ public $nextCacheRefresh = 2145916800; // 2038
38
+
39
+ public function __construct($slider, $data) {
40
+ $this->parameters = new N2Data($data['params'], true);
41
+ unset($data['params']);
42
+ foreach ($data as $key => $value) {
43
+ $this->$key = $value;
44
+ }
45
+
46
+ $this->sliderObject = $slider;
47
+ $this->onCreate();
48
+ }
49
+
50
+ protected function onCreate() {
51
+ N2Pluggable::doAction('ssSlide', array($this));
52
+ }
53
+
54
+ public function initGenerator($extend = array()) {
55
+ if ($this->generator_id > 0) {
56
+ $this->generator = new N2SmartSliderSlidesGenerator($this, $this->sliderObject, $extend);
57
+ }
58
+ }
59
+
60
+ public function hasGenerator() {
61
+ return !!$this->generator;
62
+ }
63
+
64
+ /**
65
+ * @return N2SmartSliderSlide[]
66
+ */
67
+ public function expandSlide() {
68
+ return $this->generator->getSlides();
69
+ }
70
+
71
+ public function fillSample() {
72
+ if ($this->hasGenerator()) {
73
+ $this->generator->fillSample();
74
+ }
75
+ }
76
+
77
+ public function setVariables($variables) {
78
+ $this->variables = array_merge($this->variables, (array)$variables);
79
+ }
80
+
81
+ public function isFirst() {
82
+ return !!$this->first;
83
+ }
84
+
85
+ public function isActive() {
86
+ return $this->active;
87
+ }
88
+
89
+ public function isCurrentlyEdited() {
90
+ return N2Request::getInt('slideid') == $this->id;
91
+ }
92
+
93
+ public function setIndex($index) {
94
+ $this->index = $index;
95
+ }
96
+
97
+ public function setActive() {
98
+ $this->classes .= ' n2-ss-slide-active';
99
+ $this->active = true;
100
+ }
101
+
102
+ public function prepare() {
103
+ $this->variables['slide'] = array(
104
+ 'name' => $this->getTitle(),
105
+ 'description' => $this->getDescription()
106
+ );
107
+ }
108
+
109
+ public function setSlidesParams() {
110
+
111
+ $this->background = $this->sliderObject->features->makeBackground($this);
112
+
113
+ $this->addSlideLink();
114
+
115
+ $this->attributes['data-slide-duration'] = floatval($this->parameters->get('slide-duration', 0) / 1000);
116
+ $this->attributes['data-id'] = $this->id;
117
+
118
+ $this->sliderObject->features->makeSlide($this);
119
+
120
+ $this->renderHtml();
121
+ }
122
+
123
+ protected function addSlideLink() {
124
+ list($url, $target) = (array)N2Parse::parse($this->parameters->getIfEmpty('link', '|*|'));
125
+
126
+ if (!empty($url) && $url != '#') {
127
+
128
+ if (empty($target)) {
129
+ $target = '_self';
130
+ }
131
+
132
+ $url = $this->fill($url);
133
+
134
+ $this->containerAttributes['onclick'] = '';
135
+ if (strpos($url, 'javascript:') === 0) {
136
+ $this->containerAttributes['onclick'] = $url;
137
+ } else {
138
+
139
+ N2Loader::import('libraries.link.link');
140
+ $url = N2LinkParser::parse($url, $this->containerAttributes);
141
+
142
+ $this->containerAttributes['data-href'] = (N2Platform::$isJoomla ? JRoute::_($url, false) : $url);
143
+ if (empty($this->containerAttributes['onclick'])) {
144
+ if ($target == '_blank') {
145
+ $this->containerAttributes['n2click'] = "window.open(this.getAttribute('data-href'),'_blank');";
146
+ } else {
147
+ $this->containerAttributes['n2click'] = "window.location=this.getAttribute('data-href')";
148
+ }
149
+ }
150
+ }
151
+ $this->containerAttributes['style'] .= 'cursor:pointer;';
152
+ }
153
+ }
154
+
155
+ protected function renderHtml() {
156
+ if (empty($this->html)) {
157
+
158
+ $layerRenderer = new N2SmartSliderLayer($this->sliderObject, $this);
159
+
160
+ $html = '';
161
+ $layers = json_decode($this->slide, true);
162
+ if (!$this->underEdit) {
163
+ $layers = N2SmartSliderLayer::translateIds($layers);
164
+ }
165
+ if (is_array($layers)) {
166
+ foreach ($layers AS $layer) {
167
+ $html .= $layerRenderer->render($layer);
168
+ }
169
+ }
170
+ $this->html = NHtml::tag('div', $this->containerAttributes, $html);
171
+ }
172
+ }
173
+
174
+ public function getHTML() {
175
+ return $this->html;
176
+ }
177
+
178
+ public function getAsStatic() {
179
+
180
+ $layerRenderer = new N2SmartSliderLayer($this->sliderObject, $this);
181
+
182
+ $html = '';
183
+ $layers = json_decode($this->slide, true);
184
+ if (!$this->underEdit) {
185
+ $layers = N2SmartSliderLayer::translateIds($layers);
186
+ }
187
+ if (is_array($layers)) {
188
+ foreach ($layers AS $layer) {
189
+ $html .= $layerRenderer->render($layer);
190
+ }
191
+ }
192
+ return NHtml::tag('div', array('class' => 'n2-ss-static-slide'), $html);
193
+ }
194
+
195
+ public function isStatic() {
196
+ if ($this->parameters->get('static-slide', 0)) {
197
+ return true;
198
+ }
199
+ return false;
200
+ }
201
+
202
+ public function fill($value) {
203
+ if (!empty($this->variables)) {
204
+ return preg_replace_callback('/{((([a-z]+)\(([0-9a-zA-Z_,\/\(\)]+)\))|([a-zA-Z0-9_\/]+))}/', array(
205
+ $this,
206
+ 'parseFunction'
207
+ ), $value);
208
+ }
209
+ return $value;
210
+ }
211
+
212
+ private function parseFunction($match) {
213
+ if (!isset($match[5])) {
214
+ $args = preg_split('/,(?!.*\))/', $match[4]);
215
+ for ($i = 0; $i < count($args); $i++) {
216
+ $args[$i] = $this->parseVariable($args[$i]);
217
+ }
218
+ return call_user_func_array(array(
219
+ $this,
220
+ '__' . $match[3]
221
+ ), $args);
222
+
223
+ } else {
224
+ return $this->parseVariable($match[5]);
225
+ }
226
+ }
227
+
228
+ private function parseVariable($variable) {
229
+ preg_match('/((([a-z]+)\(([0-9a-zA-Z_,\/\(\)]+)\)))/', $variable, $match);
230
+ if (!empty($match)) {
231
+ return call_user_func(array(
232
+ $this,
233
+ 'parseFunction'
234
+ ), $match);
235
+ } else {
236
+ preg_match('/([a-zA-Z][0-9a-zA-Z_]*)(\/([0-9a-z]+))?/', $variable, $match);
237
+ if ($match) {
238
+ $index = empty($match[3]) ? 0 : $match[3];
239
+ if (is_numeric($index)) {
240
+ $index = max(1, intval($index)) - 1;
241
+ }
242
+
243
+ if (isset($this->variables[$index]) && isset($this->variables[$index][$match[1]])) {
244
+ return $this->variables[$index][$match[1]];
245
+ } else {
246
+ return '';
247
+ }
248
+ }
249
+ return $variable;
250
+ }
251
+ }
252
+
253
+ private function __cleanhtml($s) {
254
+ return strip_tags($s, '<p><a><b><br><br/><i>');
255
+ }
256
+
257
+ private function __removehtml($s) {
258
+ return strip_tags($s);
259
+ }
260
+
261
+ private function __splitbychars($s, $start, $length) {
262
+ return substr($s, $start, $length);
263
+ }
264
+
265
+ private function __splitbywords($s, $start, $length) {
266
+ $len = strlen($s);
267
+ $posStart = max(0, $start == 0 ? 0 : strpos($s, ' ', $start));
268
+ $posEnd = max(0, $length > $len ? $len : strpos($s, ' ', $length));
269
+ return substr($s, $posStart, $posEnd);
270
+ }
271
+
272
+ private function __findimage($s, $index) {
273
+ $index = isset($index) ? intval($index) - 1 : 0;
274
+ preg_match_all('/(<img.*?src=[\'"](.*?)[\'"][^>]*>)|(background(-image)??\s*?:.*?url\((["|\']?)?(.+?)(["|\']?)?\))/i', $s, $r);
275
+ if (isset($r[2]) && !empty($r[2][$index])) {
276
+ $s = $r[2][$index];
277
+ } else if (isset($r[6]) && !empty($r[6][$index])) {
278
+ $s = trim($r[6][$index], "'\" \t\n\r\0\x0B");
279
+ } else {
280
+ $s = '';
281
+ }
282
+ return $s;
283
+ }
284
+
285
+ private function __findlink($s, $index) {
286
+ $index = isset($index) ? intval($index) - 1 : 0;
287
+ preg_match_all('/href=["\']?([^"\'>]+)["\']?/i', $s, $r);
288
+ if (isset($r[1]) && !empty($r[1][$index])) {
289
+ $s = $r[1][$index];
290
+ } else {
291
+ $s = '';
292
+ }
293
+ return $s;
294
+ }
295
+
296
+ /*
297
+ public function fill($value) {
298
+ if (!empty($this->variables)) {
299
+ return preg_replace_callback('/{(.*?)(\/([0-9]+))?}/', array(
300
+ $this,
301
+ 'replaceVariable'
302
+ ), $value);
303
+ }
304
+ return $value;
305
+ }
306
+
307
+ private function replaceVariable($match) {
308
+ if (!isset($match[3])) {
309
+ $match[3] = 1;
310
+ }
311
+ if ($this->variables[$match[3] - 1][$match[1]]) {
312
+ return $this->variables[$match[3] - 1][$match[1]];
313
+ }
314
+ return '';
315
+ }
316
+ */
317
+
318
+ public function getTitle() {
319
+ return $this->fill($this->title);
320
+ }
321
+
322
+ public function getDescription() {
323
+ return $this->fill($this->description);
324
+ }
325
+
326
+ public function getThumbnail() {
327
+ $image = $this->thumbnail;
328
+ if (empty($image)) {
329
+ $image = $this->parameters->get('backgroundImage');
330
+ }
331
+ return N2ImageHelper::fixed($this->fill($image));
332
+ }
333
+
334
+ public function getRow() {
335
+ $this->fillParameters();
336
+ return array(
337
+ 'title' => $this->getTitle(),
338
+ 'slide' => $this->getFilledSlide(),
339
+ 'description' => $this->getDescription(),
340
+ 'thumbnail' => $this->getThumbnail(),
341
+ 'published' => $this->published,
342
+ 'publish_up' => $this->publish_up,
343
+ 'publish_down' => $this->publish_down,
344
+ 'first' => $this->first,
345
+ 'params' => $this->parameters->toJSON(),
346
+ 'slider' => $this->slider,
347
+ 'ordering' => $this->ordering,
348
+ 'generator_id' => 0
349
+ );
350
+ }
351
+
352
+ public function fillParameters() {
353
+ $this->parameters->set('backgroundImage', $this->fill($this->parameters->get('backgroundImage')));
354
+ $this->parameters->set('backgroundAlt', $this->fill($this->parameters->get('backgroundAlt')));
355
+ $this->parameters->set('backgroundVideoMp4', $this->fill($this->parameters->get('backgroundVideoMp4')));
356
+ $this->parameters->set('backgroundVideoWebm', $this->fill($this->parameters->get('backgroundVideoWebm')));
357
+ $this->parameters->set('backgroundVideoOgg', $this->fill($this->parameters->get('backgroundVideoOgg')));
358
+ $this->parameters->set('link', $this->fill($this->parameters->get('link')));
359
+ }
360
+
361
+ public function getFilledSlide() {
362
+ $layerRenderer = new N2SmartSliderLayer($this->sliderObject, $this);
363
+
364
+ $rawSlide = array();
365
+ $layers = json_decode($this->slide, true);
366
+ if (!$this->underEdit) {
367
+ $layers = N2SmartSliderLayer::translateIds($layers);
368
+ }
369
+ if (is_array($layers)) {
370
+ foreach ($layers AS $layer) {
371
+ $rawSlide[] = $layerRenderer->getFilled($layer);
372
+ }
373
+ }
374
+ return json_encode($rawSlide);
375
+ }
376
+
377
+ public function setNextCacheRefresh($time) {
378
+ $this->nextCacheRefresh = min($this->nextCacheRefresh, $time);
379
+ }
380
+
381
+ public function setVisibility($visibility) {
382
+ $this->visible = $visibility;
383
+ }
384
+
385
+ public function isVisible() {
386
+
387
+ if (!$this->visible) {
388
+ return false;
389
+ }
390
+
391
+ $time = N2Platform::getTime();
392
+
393
+ $publish_up = strtotime($this->publish_up);
394
+ $publish_down = strtotime($this->publish_down);
395
+
396
+ if ($publish_down) {
397
+ if ($publish_down > $time) {
398
+ $this->setNextCacheRefresh($publish_down);
399
+ } else {
400
+ return false;
401
+ }
402
+ }
403
+
404
+ if ($publish_up) {
405
+ if ($publish_up > $time) {
406
+ $this->setNextCacheRefresh($publish_up);
407
+ return false;
408
+ }
409
+ }
410
+ return true;
411
+ }
412
+
413
+ public function getSlideCount() {
414
+ if ($this->hasGenerator()) {
415
+ return $this->generator->getSlideCount();
416
+ }
417
+ return 1;
418
+ }
419
+
420
+ public function getSlideStat() {
421
+ if ($this->hasGenerator()) {
422
+ return $this->generator->getSlideStat();
423
+ }
424
+ return '1/1';
425
+ }
426
+
427
+ public function setCurrentlyEdited() {
428
+ $this->underEdit = true;
429
+ }
430
+ }
431
+
432
+ class N2SmartSliderSlideHelper
433
+ {
434
+
435
+ public $data = array(
436
+ 'id' => 0,
437
+ 'title' => '',
438
+ 'publishdates' => '|*|',
439
+ 'published' => 1,
440
+ 'first' => 0,
441
+ 'slide' => array(),
442
+ 'description' => '',
443
+ 'thumbnail' => '',
444
+ 'ordering' => 0,
445
+ 'generator_id' => 0,
446
+ "static-slide" => 0,
447
+ "backgroundColor" => "ffffff00",
448
+ "backgroundImage" => "",
449
+ "backgroundImageOpacity" => 100,
450
+ "backgroundAlt" => "",
451
+ "backgroundMode" => "fill",
452
+ "backgroundVideoMp4" => "",
453
+ "backgroundVideoWebm" => "",
454
+ "backgroundVideoOgg" => "",
455
+ "backgroundVideoMuted" => 1,
456
+ "backgroundVideoLoop" => 1,
457
+ "backgroundVideoMode" => "fill",
458
+ "link" => "|*|_self",
459
+ "slide-duration" => 0
460
+ );
461
+
462
+ public function __construct($properties = array()) {
463
+ foreach ($properties as $k => $v) {
464
+ $this->data[$k] = $v;
465
+ }
466
+ }
467
+
468
+ public function set($key, $value) {
469
+ $this->data[$key] = $value;
470
+ return $this;
471
+ }
472
+
473
+ /**
474
+ * @param $layer N2SmartSliderLayerHelper
475
+ */
476
+ public function addLayer($layer) {
477
+ $this->data['slide'][] = &$layer->data;
478
+ $layer->set('zIndex', count($this->data['slide']));
479
+ }
480
+
481
+ public function toArray() {
482
+ return $this->data;
483
+ }
484
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/slides.php ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderSlides
4
+ {
5
+
6
+ /**
7
+ * @var N2SmartSlider
8
+ */
9
+ protected $slider;
10
+
11
+ /**
12
+ * @var N2SmartSliderSlide[]
13
+ */
14
+ protected $slides = array();
15
+
16
+ /**
17
+ * @var N2SmartSliderSlide[]
18
+ */
19
+ protected $allEnabledSlides = array();
20
+
21
+ private $randomize = false;
22
+ private $randomizeFirst = 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->maximumSlideCount = intval($params->get('maximumslidecount', '100'));
32
+ $this->maximumSlideCount = 10000;
33
+
34
+ }
35
+
36
+ /**
37
+ * @return mixed
38
+ */
39
+ public function getSlides($extend = array(), $dummy = false) {
40
+
41
+ $this->loadSlides(isset($extend['slidesData']) ? $extend['slidesData'] : array(), $dummy);
42
+
43
+ if (!$this->hasSlides()) {
44
+ return array();
45
+ }
46
+
47
+ $this->makeSlides(isset($extend['generatorData']) ? $extend['generatorData'] : array());
48
+
49
+ return $this->slides;
50
+ }
51
+
52
+ public function hasSlides() {
53
+ //check slide number
54
+ if (count($this->slides) === 0) {
55
+ if (N2Platform::$isAdmin) {
56
+ N2Message::error(n2_('0 slides available for this slider.'));
57
+ }
58
+ $this->slider->norender = true;
59
+ return false;
60
+ }
61
+ return true;
62
+ }
63
+
64
+ public function makeSlides($extend = array()) {
65
+
66
+ $slides = &$this->slides;
67
+
68
+ for ($i = 0; $i < count($slides); $i++) {
69
+ $slides[$i]->initGenerator($extend);
70
+ }
71
+
72
+ for ($i = count($slides) - 1; $i >= 0; $i--) {
73
+ if ($slides[$i]->hasGenerator()) {
74
+ array_splice($slides, $i, 1, $slides[$i]->expandSlide());
75
+ }
76
+ }
77
+
78
+ for ($i = 0; $i < count($slides) && count($slides) > 1; $i++) {
79
+ if ($slides[$i]->isStatic()) {
80
+ $this->slider->addStaticSlide($slides[$i]);
81
+ array_splice($slides, $i, 1);
82
+ $i--;
83
+ }
84
+ }
85
+
86
+ if ($this->randomize) {
87
+ shuffle($slides);
88
+ }
89
+ if ($this->maximumSlideCount > 0) {
90
+ array_splice($slides, $this->maximumSlideCount);
91
+ }
92
+
93
+ if ($this->randomizeFirst) {
94
+ $this->slider->_activeSlide = mt_rand(0, count($slides) - 1);
95
+ } else {
96
+ for ($i = 0; $i < count($slides); $i++) {
97
+ if ($slides[$i]->isFirst()) {
98
+ $this->slider->_activeSlide = $i;
99
+ break;
100
+ }
101
+ }
102
+ }
103
+
104
+ if (count($slides) == 1 && $this->slider->params->get('loop-single-slide', 0)) {
105
+ $slides[1] = clone $slides[0];
106
+ }
107
+
108
+ for ($i = 0; $i < count($slides); $i++) {
109
+ $slides[$i]->setIndex($i);
110
+ }
111
+ }
112
+
113
+ protected function loadSlides($extend, $dummy) {
114
+ $this->slider->_activeSlide = 0;
115
+
116
+ $where = $this->slidesWhereQuery();
117
+
118
+ N2Loader::import("models.Slides", "smartslider");
119
+ $slidesModel = new N2SmartsliderSlidesModel();
120
+ $slideRows = $slidesModel->getAll($this->slider->sliderId, $where);
121
+
122
+ if (isset($extend['add'])) {
123
+ if (!is_array($slideRows)) {
124
+ $slideRows = array();
125
+ }
126
+ array_push($slideRows, $extend['add']);
127
+ }
128
+
129
+ if (count($slideRows) == 0 && $dummy) {
130
+ $images = array(
131
+ '$ss$/admin/images/dummyslide.png',
132
+ '$ss$/admin/images/dummyslide.png',
133
+ '$ss$/admin/images/dummyslide.png',
134
+ );
135
+ for ($i = 0; $i <= 7; $i++) {
136
+ $index = $i % count($images);
137
+ $slideRows[] = $slidesModel->getRowFromPost($this->slider->sliderId, array(
138
+ 'title' => 'Dummy slide #' . $i,
139
+ 'publish_up' => '',
140
+ 'publish_down' => '',
141
+ 'generator_id' => 0,
142
+ 'slide' => '',
143
+ 'description' => '',
144
+ 'thumbnail' => $images[$index],
145
+ 'published' => 1,
146
+ 'first' => 0,
147
+ 'backgroundImage' => $images[$index]
148
+ ), false);
149
+ $slideRows[$i]['id'] = $i;
150
+ }
151
+ }
152
+ for ($i = 0; $i < count($slideRows); $i++) {
153
+ if (isset($extend[$slideRows[$i]['id']])) {
154
+ $slideRows[$i] = $extend[$slideRows[$i]['id']];
155
+ }
156
+ $slide = $this->createSlide($slideRows[$i]);
157
+ if ($slide->isVisible()) {
158
+ $this->slides[] = $slide;
159
+ }
160
+ $this->allEnabledSlides[$i] = $slide;
161
+ }
162
+ }
163
+
164
+ protected function createSlide($slideRow) {
165
+ return new N2SmartSliderSlide($this->slider, $slideRow);
166
+ }
167
+
168
+ protected function slidesWhereQuery() {
169
+ return " AND published = 1 ";
170
+ }
171
+
172
+ public function getNextCacheRefresh() {
173
+ $earlier = 2145916800;
174
+ for ($i = 0; $i < count($this->allEnabledSlides); $i++) {
175
+ $earlier = min($this->allEnabledSlides[$i]->nextCacheRefresh, $earlier);
176
+ }
177
+ return $earlier;
178
+ }
179
+
180
+ public function getDummySlides($count) {
181
+
182
+ }
183
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/libraries/slider/slide/slidesadmin.php ADDED
@@ -0,0 +1,193 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ if (count($slides) == 0) {
54
+ $slide2 = $this->createSlide(array(
55
+ 'id' => 0,
56
+ 'title' => 'Title',
57
+ 'slider' => N2Request::getInt('sliderid'),
58
+ 'publish_up' => '0000-00-00 00:00:00',
59
+ 'publish_down' => '0000-00-00 00:00:00',
60
+ 'published' => 1,
61
+ 'first' => 0,
62
+ 'slide' => '',
63
+ 'description' => '',
64
+ 'thumbnail' => '',
65
+ 'background' => 'ffffff00|*|',
66
+ 'params' => '',
67
+ 'ordering' => count($slides),
68
+ 'generator_id' => 0
69
+ ));
70
+ array_push($slides, $slide2);
71
+ }
72
+ } else {
73
+ for ($i = 0; $i < count($slides); $i++) {
74
+ if ($slides[$i]->isStatic()) {
75
+ $this->slider->addStaticSlide($slides[$i]);
76
+ array_splice($slides, $i, 1);
77
+ $i--;
78
+ }
79
+ }
80
+
81
+ array_push($slides, $slide);
82
+ $this->slider->_activeSlide = count($slides) - 1;
83
+ }
84
+ } else {
85
+
86
+ $currentlyEdited = N2Request::getInt('slideid');
87
+ $currentlyEditedSlide = null;
88
+ $isStatic = false;
89
+
90
+ for ($i = 0; $i < count($slides); $i++) {
91
+ if ($slides[$i]->isStatic()) {
92
+ if ($slides[$i]->id == $currentlyEdited) {
93
+ $isStatic = true;
94
+ }
95
+ $this->slider->addStaticSlide($slides[$i]);
96
+ array_splice($slides, $i, 1);
97
+ $i--;
98
+ }
99
+ }
100
+
101
+ if ($isStatic) {
102
+ for ($i = 0; $i < count($this->slider->staticSlides); $i++) {
103
+ if ($this->slider->staticSlides[$i]->id != $currentlyEdited) {
104
+ array_splice($this->slider->staticSlides, $i, 1);
105
+ $i--;
106
+ }
107
+ }
108
+ }
109
+
110
+ for ($i = 0; $i < count($slides); $i++) {
111
+ $slides[$i]->initGenerator($extend);
112
+ }
113
+
114
+ for ($i = count($slides) - 1; $i >= 0; $i--) {
115
+ if ($slides[$i]->hasGenerator()) {
116
+ array_splice($slides, $i, 1, $slides[$i]->expandSlide());
117
+ }
118
+ }
119
+
120
+ if (!$isStatic) {
121
+ for ($i = 0; $i < count($slides); $i++) {
122
+ if ($slides[$i]->id == $currentlyEdited) {
123
+ $this->slider->_activeSlide = $i;
124
+ $currentlyEditedSlide = $slides[$i];
125
+ break;
126
+ }
127
+ }
128
+ } else {
129
+ if (count($slides) == 0) {
130
+ if (count($slides) == 0) {
131
+ $slide2 = $this->createSlide(array(
132
+ 'id' => 0,
133
+ 'title' => 'Title',
134
+ 'slider' => N2Request::getInt('sliderid'),
135
+ 'publish_up' => '0000-00-00 00:00:00',
136
+ 'publish_down' => '0000-00-00 00:00:00',
137
+ 'published' => 1,
138
+ 'first' => 0,
139
+ 'slide' => '',
140
+ 'description' => '',
141
+ 'thumbnail' => '',
142
+ 'background' => 'ffffff00|*|',
143
+ 'params' => '',
144
+ 'ordering' => count($slides),
145
+ 'generator_id' => 0
146
+ ));
147
+ array_push($slides, $slide2);
148
+ }
149
+ }
150
+ $this->slider->_activeSlide = 0;
151
+ $currentlyEditedSlide = $slides[0];
152
+ }
153
+ if ($this->maximumSlideCount > 0) {
154
+ array_splice($slides, $this->maximumSlideCount);
155
+ $found = false;
156
+ for ($i = 0; $i < count($slides); $i++) {
157
+ if ($slides[$i] == $currentlyEditedSlide) {
158
+ $found = true;
159
+ break;
160
+ }
161
+ }
162
+ if (!$found) {
163
+ $this->slider->_activeSlide = count($slides) - 1;
164
+ $slides[$this->slider->_activeSlide] = $currentlyEditedSlide;
165
+ }
166
+ }
167
+ if ($currentlyEditedSlide) {
168
+ $currentlyEditedSlide->setCurrentlyEdited();
169
+ }
170
+ }
171
+ }
172
+ }
173
+ }
174
+
175
+ class N2SmartSliderSlideAdmin extends N2SmartSliderSlide
176
+ {
177
+
178
+ public function setSlidesParams() {
179
+ $this->attributes['data-variables'] = json_encode($this->variables);
180
+ parent::setSlidesParams();
181
+ }
182
+
183
+ protected function addSlideLink() {
184
+
185
+ }
186
+
187
+ public function isVisible() {
188
+ return true;
189
+ }
190
+
191
+ protected function onCreate() {
192
+ }
193
+ }
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 NHtml::openTag('div', array(
43
+ 'id' => $this->slider->elementId,
44
+ 'class' => 'n2-ss-slider ' . $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,1896 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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" => 1013,
1187
+ 'referencekey' => 1000,
1188
+ "value" => array(
1189
+ 'name' => n2_('Fade'),
1190
+ 'data' => array(
1191
+ 'type' => 'Flat',
1192
+ 'tiles' => array(
1193
+ 'delay' => 0,
1194
+ 'sequence' => 'ForwardDiagonal'
1195
+ ),
1196
+ 'main' => array(
1197
+ 'type' => 'both',
1198
+ 'duration' => 1,
1199
+ 'zIndex' => 2,
1200
+ 'current' => array(
1201
+ 'ease' => 'easeOutCubic',
1202
+ 'opacity' => 0
1203
+ )
1204
+ )
1205
+ )
1206
+ )
1207
+ ));
1208
+
1209
+ array_push($animations, array(
1210
+ "id" => 1014,
1211
+ 'referencekey' => 1000,
1212
+ "value" => array(
1213
+ 'name' => n2_('Curtain to left'),
1214
+ 'data' => array(
1215
+ 'type' => 'Flat',
1216
+ 'rows' => 1,
1217
+ 'columns' => 25,
1218
+ 'tiles' => array(
1219
+ 'delay' => .03,
1220
+ 'sequence' => 'BackwardCol'
1221
+ ),
1222
+ 'main' => array(
1223
+ 'type' => 'next',
1224
+ 'duration' => .35,
1225
+ 'next' => array(
1226
+ 'ease' => 'easeInOutQuart',
1227
+ 'opacity' => "0",
1228
+ 'left' => '-100%'
1229
+ )
1230
+ ),
1231
+ 'invert' => array(
1232
+ 'next' => array(
1233
+ 'left' => '100%'
1234
+ )
1235
+ ),
1236
+ 'invertTiles' => array(
1237
+ 'sequence' => 'ForwardCol'
1238
+ )
1239
+ )
1240
+ )
1241
+ ));
1242
+
1243
+ array_push($animations, array(
1244
+ "id" => 1024,
1245
+ 'referencekey' => 1000,
1246
+ "value" => array(
1247
+ 'name' => n2_('Puzzle'),
1248
+ 'data' => array(
1249
+ 'type' => 'Flat',
1250
+ 'rows' => 5,
1251
+ 'columns' => 7,
1252
+ 'tiles' => array(
1253
+ 'delay' => 1,
1254
+ 'sequence' => 'Random'
1255
+ ),
1256
+ 'main' => array(
1257
+ 'type' => 'next',
1258
+ 'duration' => 0.8,
1259
+ 'next' => array(
1260
+ 'ease' => 'easeInOutQuart',
1261
+ 'opacity' => 0
1262
+ )
1263
+ )
1264
+ )
1265
+ )
1266
+ ));
1267
+
1268
+ array_push($sets, array(
1269
+ 'id' => 1100,
1270
+ 'referencekey' => '',
1271
+ 'value' => n2_('Vertical')
1272
+ ));
1273
+
1274
+ array_push($animations, array(
1275
+ "id" => 1404,
1276
+ 'referencekey' => 1100,
1277
+ "value" => array(
1278
+ 'name' => n2_('Scale to top'),
1279
+ 'data' => array(
1280
+ 'type' => 'Flat',
1281
+ 'tiles' => array(
1282
+ 'crop' => true,
1283
+ 'delay' => 0,
1284
+ 'sequence' => 'ForwardDiagonal'
1285
+ ),
1286
+ 'main' => array(
1287
+ 'type' => 'both',
1288
+ 'duration' => 1,
1289
+ 'current' => array(
1290
+ 'ease' => 'easeOutCubic',
1291
+ 'scale' => 0.7
1292
+ ),
1293
+ 'next' => array(
1294
+ 'ease' => 'easeOutCubic',
1295
+ 'top' => "100%"
1296
+ )
1297
+ ),
1298
+ 'invert' => array(
1299
+ 'zIndex' => 2,
1300
+ 'current' => array(
1301
+ 'top' => "100%",
1302
+ 'scale' => 1
1303
+ ),
1304
+ 'next' => array(
1305
+ 'scale' => 0.7,
1306
+ 'top' => 0
1307
+ )
1308
+ )
1309
+ )
1310
+ )
1311
+ ));
1312
+
1313
+ array_push($animations, array(
1314
+ "id" => 1403,
1315
+ 'referencekey' => 1100,
1316
+ "value" => array(
1317
+ 'name' => n2_('Scale to bottom'),
1318
+ 'data' => array(
1319
+ 'type' => 'Flat',
1320
+ 'tiles' => array(
1321
+ 'crop' => true,
1322
+ 'delay' => 0,
1323
+ 'sequence' => 'ForwardDiagonal'
1324
+ ),
1325
+ 'main' => array(
1326
+ 'type' => 'both',
1327
+ 'duration' => 1,
1328
+ 'current' => array(
1329
+ 'ease' => 'easeOutCubic',
1330
+ 'scale' => 0.7
1331
+ ),
1332
+ 'next' => array(
1333
+ 'ease' => 'easeOutCubic',
1334
+ 'top' => "-100%"
1335
+ )
1336
+ ),
1337
+ 'invert' => array(
1338
+ 'zIndex' => 2,
1339
+ 'current' => array(
1340
+ 'top' => "-100%",
1341
+ 'scale' => 1
1342
+ ),
1343
+ 'next' => array(
1344
+ 'scale' => 0.7,
1345
+ 'top' => 0
1346
+ )
1347
+ )
1348
+ )
1349
+ )
1350
+ ));
1351
+
1352
+ array_push($animations, array(
1353
+ "id" => 1016,
1354
+ 'referencekey' => 1100,
1355
+ "value" => array(
1356
+ 'name' => n2_('Curtain to bottom'),
1357
+ 'data' => array(
1358
+ 'type' => 'Flat',
1359
+ 'rows' => 25,
1360
+ 'columns' => 1,
1361
+ 'tiles' => array(
1362
+ 'delay' => .03,
1363
+ 'sequence' => 'ForwardRow'
1364
+ ),
1365
+ 'main' => array(
1366
+ 'type' => 'next',
1367
+ 'duration' => .35,
1368
+ 'next' => array(
1369
+ 'ease' => 'easeInOutQuart',
1370
+ 'opacity' => "0",
1371
+ 'top' => '100%'
1372
+ )
1373
+ ),
1374
+ 'invert' => array(
1375
+ 'next' => array(
1376
+ 'top' => '-100%'
1377
+ )
1378
+ ),
1379
+ 'invertTiles' => array(
1380
+ 'sequence' => 'BackwardRow'
1381
+ )
1382
+ )
1383
+ )
1384
+ ));
1385
+
1386
+ array_push($animations, array(
1387
+ "id" => 1017,
1388
+ 'referencekey' => 1100,
1389
+ "value" => array(
1390
+ 'name' => n2_('Curtain to top'),
1391
+ 'data' => array(
1392
+ 'type' => 'Flat',
1393
+ 'rows' => 25,
1394
+ 'columns' => 1,
1395
+ 'tiles' => array(
1396
+ 'delay' => .03,
1397
+ 'sequence' => 'BackwardRow'
1398
+ ),
1399
+ 'main' => array(
1400
+ 'type' => 'next',
1401
+ 'duration' => .35,
1402
+ 'next' => array(
1403
+ 'ease' => 'easeInOutQuart',
1404
+ 'opacity' => "0",
1405
+ 'top' => '-100%'
1406
+ )
1407
+ ),
1408
+ 'invert' => array(
1409
+ 'next' => array(
1410
+ 'top' => '100%'
1411
+ )
1412
+ ),
1413
+ 'invertTiles' => array(
1414
+ 'sequence' => 'ForwardRow'
1415
+ )
1416
+ )
1417
+ )
1418
+ ));
1419
+
1420
+ array_push($sets, array(
1421
+ 'id' => 1200,
1422
+ 'referencekey' => '',
1423
+ 'value' => 'RTL'
1424
+ ));
1425
+
1426
+ array_push($animations, array(
1427
+ "id" => 1401,
1428
+ 'referencekey' => 1200,
1429
+ "value" => array(
1430
+ 'name' => n2_('Scale to right'),
1431
+ 'data' => array(
1432
+ 'type' => 'Flat',
1433
+ 'tiles' => array(
1434
+ 'crop' => true,
1435
+ 'delay' => 0,
1436
+ 'sequence' => 'ForwardDiagonal'
1437
+ ),
1438
+ 'main' => array(
1439
+ 'type' => 'both',
1440
+ 'duration' => 1,
1441
+ 'current' => array(
1442
+ 'ease' => 'easeOutCubic',
1443
+ 'scale' => 0.7
1444
+ ),
1445
+ 'next' => array(
1446
+ 'ease' => 'easeOutCubic',
1447
+ 'left' => "-100%"
1448
+ )
1449
+ ),
1450
+ 'invert' => array(
1451
+ 'zIndex' => 2,
1452
+ 'current' => array(
1453
+ 'left' => "-100%",
1454
+ 'scale' => 1
1455
+ ),
1456
+ 'next' => array(
1457
+ 'scale' => 0.7,
1458
+ 'left' => 0
1459
+ )
1460
+ )
1461
+ )
1462
+ )
1463
+ ));
1464
+
1465
+ array_push($animations, array(
1466
+ "id" => 1015,
1467
+ 'referencekey' => 1200,
1468
+ "value" => array(
1469
+ 'name' => n2_('Curtain to right'),
1470
+ 'data' => array(
1471
+ 'type' => 'Flat',
1472
+ 'rows' => 1,
1473
+ 'columns' => 25,
1474
+ 'tiles' => array(
1475
+ 'delay' => .03,
1476
+ 'sequence' => 'ForwardCol'
1477
+ ),
1478
+ 'main' => array(
1479
+ 'type' => 'next',
1480
+ 'duration' => .35,
1481
+ 'next' => array(
1482
+ 'ease' => 'easeInOutQuart',
1483
+ 'opacity' => "0",
1484
+ 'left' => '100%'
1485
+ )
1486
+ ),
1487
+ 'invert' => array(
1488
+ 'next' => array(
1489
+ 'left' => '-100%'
1490
+ )
1491
+ ),
1492
+ 'invertTiles' => array(
1493
+ 'sequence' => 'BackwardCol'
1494
+ )
1495
+ )
1496
+ )
1497
+ ));
1498
+
1499
+ }
1500
+
1501
+ public static function postBackgroundAnimationStorage(&$sets, &$animations) {
1502
+ N2Base::getApplicationInfo('smartslider')
1503
+ ->loadLocale();
1504
+
1505
+ array_push($sets, array(
1506
+ 'id' => 1000,
1507
+ 'referencekey' => '',
1508
+ 'value' => n2_('Default')
1509
+ ));
1510
+
1511
+ array_push($animations, array(
1512
+ "id" => 1001,
1513
+ 'referencekey' => 1000,
1514
+ "value" => array(
1515
+ 'name' => n2_('Downscale'),
1516
+ 'data' => array(
1517
+ 'duration' => 5,
1518
+ 'strength' => array('scale'),
1519
+ 'from' => array(
1520
+ 'scale' => 1.5
1521
+ ),
1522
+ 'to' => array(
1523
+ 'scale' => 1.2
1524
+ )
1525
+ )
1526
+ )
1527
+ ));
1528
+
1529
+ array_push($animations, array(
1530
+ "id" => 1002,
1531
+ 'referencekey' => 1000,
1532
+ "value" => array(
1533
+ 'name' => n2_('Downscale left'),
1534
+ 'data' => array(
1535
+ 'duration' => 5,
1536
+ 'strength' => array('scale','x'),
1537
+ 'from' => array(
1538
+ 'scale' => 1.5,
1539
+ 'x' => 0
1540
+
1541
+ ),
1542
+ 'to' => array(
1543
+ 'scale' => 1.2,
1544
+ 'x' => -100
1545
+ )
1546
+ )
1547
+ )
1548
+ ));
1549
+
1550
+ array_push($animations, array(
1551
+ "id" => 1003,
1552
+ 'referencekey' => 1000,
1553
+ "value" => array(
1554
+ 'name' => n2_('Downscale right'),
1555
+ 'data' => array(
1556
+ 'duration' => 5,
1557
+ 'strength' => array('scale','x'),
1558
+ 'from' => array(
1559
+ 'scale' => 1.5,
1560
+ 'x' => 0
1561
+
1562
+ ),
1563
+ 'to' => array(
1564
+ 'scale' => 1.2,
1565
+ 'x' => 100
1566
+ )
1567
+ )
1568
+ )
1569
+ ));
1570
+
1571
+ array_push($animations, array(
1572
+ "id" => 1004,
1573
+ 'referencekey' => 1000,
1574
+ "value" => array(
1575
+ 'name' => n2_('Downscale top'),
1576
+ 'data' => array(
1577
+ 'duration' => 5,
1578
+ 'strength' => array('scale','y'),
1579
+ 'from' => array(
1580
+ 'scale' => 1.5,
1581
+ 'y' => 0
1582
+
1583
+ ),
1584
+ 'to' => array(
1585
+ 'scale' => 1.2,
1586
+ 'y' => -100
1587
+ )
1588
+ )
1589
+ )
1590
+ ));
1591
+
1592
+ array_push($animations, array(
1593
+ "id" => 1005,
1594
+ 'referencekey' => 1000,
1595
+ "value" => array(
1596
+ 'name' => n2_('Downscale bottom'),
1597
+ 'data' => array(
1598
+ 'duration' => 5,
1599
+ 'strength' => array('scale','y'),
1600
+ 'from' => array(
1601
+ 'scale' => 1.5,
1602
+ 'y' => 0
1603
+
1604
+ ),
1605
+ 'to' => array(
1606
+ 'scale' => 1.2,
1607
+ 'y' => 100
1608
+ )
1609
+ )
1610
+ )
1611
+ ));
1612
+
1613
+ array_push($animations, array(
1614
+ "id" => 1006,
1615
+ 'referencekey' => 1000,
1616
+ "value" => array(
1617
+ 'name' => n2_('Upscale'),
1618
+ 'data' => array(
1619
+ 'duration' => 5,
1620
+ 'strength' => array('scale'),
1621
+ 'from' => array(
1622
+ 'scale' => 1.2
1623
+ ),
1624
+ 'to' => array(
1625
+ 'scale' => 1.5
1626
+ )
1627
+ )
1628
+ )
1629
+ ));
1630
+
1631
+ array_push($animations, array(
1632
+ "id" => 1007,
1633
+ 'referencekey' => 1000,
1634
+ "value" => array(
1635
+ 'name' => n2_('Upscale left'),
1636
+ 'data' => array(
1637
+ 'duration' => 5,
1638
+ 'strength' => array('scale','x'),
1639
+ 'from' => array(
1640
+ 'scale' => 1.2,
1641
+ 'x' => 0
1642
+
1643
+ ),
1644
+ 'to' => array(
1645
+ 'scale' => 1.5,
1646
+ 'x' => 100
1647
+ )
1648
+ )
1649
+ )
1650
+ ));
1651
+
1652
+ array_push($animations, array(
1653
+ "id" => 1008,
1654
+ 'referencekey' => 1000,
1655
+ "value" => array(
1656
+ 'name' => n2_('Upscale right'),
1657
+ 'data' => array(
1658
+ 'duration' => 5,
1659
+ 'strength' => array('scale','x'),
1660
+ 'from' => array(
1661
+ 'scale' => 1.2,
1662
+ 'x' => 0
1663
+
1664
+ ),
1665
+ 'to' => array(
1666
+ 'scale' => 1.5,
1667
+ 'x' => -100
1668
+ )
1669
+ )
1670
+ )
1671
+ ));
1672
+
1673
+ array_push($animations, array(
1674
+ "id" => 1009,
1675
+ 'referencekey' => 1000,
1676
+ "value" => array(
1677
+ 'name' => n2_('Upscale top'),
1678
+ 'data' => array(
1679
+ 'duration' => 5,
1680
+ 'strength' => array('scale','y'),
1681
+ 'from' => array(
1682
+ 'scale' => 1.2,
1683
+ 'y' => 0
1684
+
1685
+ ),
1686
+ 'to' => array(
1687
+ 'scale' => 1.5,
1688
+ 'y' => 100
1689
+ )
1690
+ )
1691
+ )
1692
+ ));
1693
+
1694
+ array_push($animations, array(
1695
+ "id" => 1010,
1696
+ 'referencekey' => 1000,
1697
+ "value" => array(
1698
+ 'name' => n2_('Upscale bottom'),
1699
+ 'data' => array(
1700
+ 'duration' => 5,
1701
+ 'strength' => array('scale','y'),
1702
+ 'from' => array(
1703
+ 'scale' => 1.2,
1704
+ 'y' => 0
1705
+
1706
+ ),
1707
+ 'to' => array(
1708
+ 'scale' => 1.5,
1709
+ 'y' => -100
1710
+ )
1711
+ )
1712
+ )
1713
+ ));
1714
+
1715
+ array_push($animations, array(
1716
+ "id" => 1011,
1717
+ 'referencekey' => 1000,
1718
+ "value" => array(
1719
+ 'name' => n2_('To left'),
1720
+ 'data' => array(
1721
+ 'duration' => 5,
1722
+ 'strength' => array('x'),
1723
+ 'from' => array(
1724
+ 'scale' => 1.5,
1725
+ 'x' => 0
1726
+ ),
1727
+ 'to' => array(
1728
+ 'scale' => 1.5,
1729
+ 'x' => 100
1730
+ )
1731
+ )
1732
+ )
1733
+ ));
1734
+
1735
+ array_push($animations, array(
1736
+ "id" => 1012,
1737
+ 'referencekey' => 1000,
1738
+ "value" => array(
1739
+ 'name' => n2_('To right'),
1740
+ 'data' => array(
1741
+ 'duration' => 5,
1742
+ 'strength' => array('x'),
1743
+ 'from' => array(
1744
+ 'scale' => 1.5,
1745
+ 'x' => 0
1746
+ ),
1747
+ 'to' => array(
1748
+ 'scale' => 1.5,
1749
+ 'x' => -100
1750
+ )
1751
+ )
1752
+ )
1753
+ ));
1754
+
1755
+ array_push($animations, array(
1756
+ "id" => 1013,
1757
+ 'referencekey' => 1000,
1758
+ "value" => array(
1759
+ 'name' => n2_('To top'),
1760
+ 'data' => array(
1761
+ 'duration' => 5,
1762
+ 'strength' => array('y'),
1763
+ 'from' => array(
1764
+ 'scale' => 1.5,
1765
+ 'y' => 0
1766
+ ),
1767
+ 'to' => array(
1768
+ 'scale' => 1.5,
1769
+ 'y' => 100
1770
+ )
1771
+ )
1772
+ )
1773
+ ));
1774
+
1775
+ array_push($animations, array(
1776
+ "id" => 1014,
1777
+ 'referencekey' => 1000,
1778
+ "value" => array(
1779
+ 'name' => n2_('To bottom'),
1780
+ 'data' => array(
1781
+ 'duration' => 5,
1782
+ 'strength' => array('y'),
1783
+ 'from' => array(
1784
+ 'scale' => 1.5,
1785
+ 'y' => 0
1786
+ ),
1787
+ 'to' => array(
1788
+ 'scale' => 1.5,
1789
+ 'y' => -100
1790
+ )
1791
+ )
1792
+ )
1793
+ ));
1794
+
1795
+ array_push($animations, array(
1796
+ "id" => 1015,
1797
+ 'referencekey' => 1000,
1798
+ "value" => array(
1799
+ 'name' => n2_('To bottom left'),
1800
+ 'data' => array(
1801
+ 'duration' => 5,
1802
+ 'strength' => array('x', 'y'),
1803
+ 'from' => array(
1804
+ 'scale' => 1.5,
1805
+ 'x' => 0,
1806
+ 'y' => 0
1807
+ ),
1808
+ 'to' => array(
1809
+ 'scale' => 1.5,
1810
+ 'x' => 100,
1811
+ 'y' => -100
1812
+ )
1813
+ )
1814
+ )
1815
+ ));
1816
+
1817
+ array_push($animations, array(
1818
+ "id" => 1016,
1819
+ 'referencekey' => 1000,
1820
+ "value" => array(
1821
+ 'name' => n2_('To top right'),
1822
+ 'data' => array(
1823
+ 'duration' => 5,
1824
+ 'strength' => array('x', 'y'),
1825
+ 'from' => array(
1826
+ 'scale' => 1.5,
1827
+ 'x' => 0,
1828
+ 'y' => 0
1829
+ ),
1830
+ 'to' => array(
1831
+ 'scale' => 1.5,
1832
+ 'x' => -100,
1833
+ 'y' => 100
1834
+ )
1835
+ )
1836
+ )
1837
+ ));
1838
+
1839
+ array_push($animations, array(
1840
+ "id" => 1017,
1841
+ 'referencekey' => 1000,
1842
+ "value" => array(
1843
+ 'name' => n2_('To bottom left'),
1844
+ 'data' => array(
1845
+ 'duration' => 5,
1846
+ 'strength' => array('x', 'y'),
1847
+ 'from' => array(
1848
+ 'scale' => 1.5,
1849
+ 'x' => 0,
1850
+ 'y' => 0
1851
+ ),
1852
+ 'to' => array(
1853
+ 'scale' => 1.5,
1854
+ 'x' => 100,
1855
+ 'y' => -100
1856
+ )
1857
+ )
1858
+ )
1859
+ ));
1860
+
1861
+ array_push($animations, array(
1862
+ "id" => 1018,
1863
+ 'referencekey' => 1000,
1864
+ "value" => array(
1865
+ 'name' => n2_('To bottom right'),
1866
+ 'data' => array(
1867
+ 'duration' => 5,
1868
+ 'strength' => array('x', 'y'),
1869
+ 'from' => array(
1870
+ 'scale' => 1.5,
1871
+ 'x' => 0,
1872
+ 'y' => 0
1873
+ ),
1874
+ 'to' => array(
1875
+ 'scale' => 1.5,
1876
+ 'x' => -100,
1877
+ 'y' => -100
1878
+ )
1879
+ )
1880
+ )
1881
+ ));
1882
+ }
1883
+
1884
+ public static function layoutStorage(&$sets, &$layouts) {
1885
+ N2Base::getApplicationInfo('smartslider')
1886
+ ->loadLocale();
1887
+
1888
+ array_push($sets, array(
1889
+ 'id' => 1900,
1890
+ 'referencekey' => '',
1891
+ 'value' => n2_('My layouts')
1892
+ ));
1893
+ }
1894
+ }
1895
+
1896
+ 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,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+
4
+ class N2SmartsliderInstallModel extends N2Model
5
+ {
6
+
7
+ private static $sql = array(
8
+ "CREATE TABLE IF NOT EXISTS `#__nextend2_smartslider3_generators` (
9
+ `id` INT(11) NOT NULL AUTO_INCREMENT,
10
+ `group` VARCHAR(254) NOT NULL,
11
+ `type` VARCHAR(254) NOT NULL,
12
+ `params` TEXT NOT NULL,
13
+ PRIMARY KEY (`id`)
14
+ )
15
+ DEFAULT CHARSET = utf8;",
16
+ "CREATE TABLE IF NOT EXISTS `#__nextend2_smartslider3_sliders` (
17
+ `id` INT(11) NOT NULL AUTO_INCREMENT,
18
+ `title` VARCHAR(100) NOT NULL,
19
+ `type` VARCHAR(30) NOT NULL,
20
+ `params` MEDIUMTEXT NOT NULL,
21
+ `time` DATETIME NOT NULL,
22
+ PRIMARY KEY (`id`)
23
+ )
24
+ DEFAULT CHARSET = utf8;",
25
+ "CREATE TABLE IF NOT EXISTS `#__nextend2_smartslider3_slides` (
26
+ `id` INT(11) NOT NULL AUTO_INCREMENT,
27
+ `title` VARCHAR(200) NOT NULL,
28
+ `slider` INT(11) NOT NULL,
29
+ `publish_up` DATETIME NOT NULL,
30
+ `publish_down` DATETIME NOT NULL,
31
+ `published` TINYINT(1) NOT NULL,
32
+ `first` INT(11) NOT NULL,
33
+ `slide` LONGTEXT,
34
+ `description` TEXT NOT NULL,
35
+ `thumbnail` VARCHAR(255) NOT NULL,
36
+ `params` TEXT NOT NULL,
37
+ `ordering` INT(11) NOT NULL,
38
+ `generator_id` INT(11) NOT NULL,
39
+ PRIMARY KEY (`id`)
40
+ )
41
+ DEFAULT CHARSET = utf8;"
42
+
43
+ );
44
+
45
+ public function install() {
46
+ foreach (self::$sql AS $query) {
47
+ $this->db->query($this->db->parsePrefix($query));
48
+ }
49
+ /*
50
+ $storageDefaults = <<<EODEOD;
51
+ $this->db->query($this->db->parsePrefix($storageDefaults));
52
+ */
53
+ N2Loader::import('install', 'smartslider.platform');
54
+ }
55
+ }
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,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderLicenseModel
4
+ {
5
+
6
+ private $key;
7
+
8
+ public function __construct() {
9
+ $this->key = N2Base::getApplication('smartslider')->storage->get('license', 'key');
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
+ public function checkKey($license, $action = 'licensecheck') {
42
+ return 0;
43
+
44
+ }
45
+
46
+ public function isActive($cacheAccepted = true) {
47
+ if ($cacheAccepted && $this->maybeActive()) {
48
+ return 'OK';
49
+ }
50
+ $status = $this->checkKey($this->key);
51
+ if ($this->hasKey() && $status == 'OK') {
52
+ N2Base::getApplication('smartslider')->storage->set('license', 'isActive', time());
53
+ return $status;
54
+ }
55
+ N2Base::getApplication('smartslider')->storage->set('license', 'isActive', 0);
56
+ return $status;
57
+ }
58
+
59
+ public function deAuthorize() {
60
+ if ($this->hasKey()) {
61
+ $status = $this->checkKey($this->key, 'licensedeauthorize');
62
+ if ($status == 'OK' || $status == 'LICENSE_EXPIRED' || $status == 'PLATFORM_NOT_ALLOWED') {
63
+ $this->setKey('');
64
+ N2Message::notice('Smart Slider deauthorized on this site!');
65
+ }
66
+ return $status;
67
+ }
68
+ return false;
69
+ }
70
+ }
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,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ }
76
+
77
+ public static function markChanged($id) {
78
+ N2SmartSliderHelper::getInstance()->setSliderChanged($id, 1);
79
+ }
80
+
81
+ public function saveDefaults($defaults) {
82
+ if (!empty($defaults)) {
83
+ foreach ($defaults AS $referenceKey => $value) {
84
+ N2StorageSectionAdmin::set('smartslider', 'default', $referenceKey, $value);
85
+ }
86
+ }
87
+ return true;
88
+ }
89
+
90
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Sliders.php ADDED
@@ -0,0 +1,224 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ return $data;
61
+ }
62
+
63
+ public static function renderImportByUploadForm() {
64
+
65
+ $configurationXmlFile = dirname(__FILE__) . '/forms/import/upload.xml';
66
+
67
+ N2Loader::import('libraries.form.form');
68
+ $form = new N2Form(N2Base::getApplication('smartslider')
69
+ ->getApplicationType('backend'));
70
+
71
+ $form->loadXMLFile($configurationXmlFile);
72
+
73
+ echo $form->render('slider');
74
+ }
75
+
76
+ public static function renderImportFromServerForm() {
77
+
78
+ $configurationXmlFile = dirname(__FILE__) . '/forms/import/server.xml';
79
+
80
+ N2Loader::import('libraries.form.form');
81
+ $form = new N2Form(N2Base::getApplication('smartslider')
82
+ ->getApplicationType('backend'));
83
+
84
+ $form->loadXMLFile($configurationXmlFile);
85
+
86
+ echo $form->render('slider');
87
+ }
88
+
89
+ function import($slider) {
90
+ try {
91
+ $this->db->insert(array(
92
+ 'title' => $slider['title'],
93
+ 'type' => $slider['type'],
94
+ 'params' => $slider['params']->toJSON(),
95
+ 'time' => date('Y-m-d H:i:s', N2Platform::getTime())
96
+ ));
97
+
98
+ return $this->db->insertId();
99
+ } catch (Exception $e) {
100
+ throw new Exception($e->getMessage());
101
+ }
102
+ }
103
+
104
+ /**
105
+ * @param $sliderId
106
+ * @param $params N2Data
107
+ */
108
+ function importUpdate($sliderId, $params) {
109
+
110
+ $this->db->update(array(
111
+ 'params' => $params->toJson()
112
+ ), array(
113
+ "id" => $sliderId
114
+ ));
115
+ }
116
+
117
+ function create($slider) {
118
+ if (!isset($slider['title'])) return false;
119
+ if ($slider['title'] == '') $slider['title'] = n2_('New slider');
120
+
121
+ $title = $slider['title'];
122
+ unset($slider['title']);
123
+ $type = $slider['type'];
124
+ unset($slider['type']);
125
+
126
+ try {
127
+ $this->db->insert(array(
128
+ 'title' => $title,
129
+ 'type' => $type,
130
+ 'params' => json_encode($slider),
131
+ 'time' => date('Y-m-d H:i:s', N2Platform::getTime())
132
+ ));
133
+
134
+ return $this->db->insertId();
135
+ } catch (Exception $e) {
136
+ throw new Exception($e->getMessage());
137
+ }
138
+ }
139
+
140
+ function save($id, $slider) {
141
+ if (!isset($slider['title']) || $id <= 0) return false;
142
+ if ($slider['title'] == '') $slider['title'] = n2_('New slider');
143
+
144
+ $title = $slider['title'];
145
+ unset($slider['title']);
146
+ $type = $slider['type'];
147
+ unset($slider['type']);
148
+
149
+ $this->db->update(array(
150
+ 'title' => $title,
151
+ 'type' => $type,
152
+ 'params' => json_encode($slider)
153
+ ), array(
154
+ "id" => $id
155
+ ));
156
+
157
+ self::markChanged($id);
158
+
159
+ return $id;
160
+ }
161
+
162
+ function delete($id) {
163
+ $slidesModel = new N2SmartsliderSlidesModel();
164
+ $slidesModel->deleteBySlider($id);
165
+
166
+ $this->db->deleteByPk($id);
167
+
168
+ N2Cache::clearGroup(N2SmartSliderAbstract::getCacheId($id));
169
+ N2Cache::clearGroup(N2SmartSliderAbstract::getAdminCacheId($id));
170
+
171
+ self::markChanged($id);
172
+ }
173
+
174
+ function deleteSlides($id) {
175
+ $slidesModel = new N2SmartsliderSlidesModel();
176
+ $slidesModel->deleteBySlider($id);
177
+ self::markChanged($id);
178
+ }
179
+
180
+ function duplicate($id) {
181
+ $slider = $this->get($id);
182
+ unset($slider['id']);
183
+
184
+ $slider['title'] .= ' - copy';
185
+ $slider['time'] = date('Y-m-d H:i:s', N2Platform::getTime());
186
+
187
+ try {
188
+ $this->db->insert($slider);
189
+ $newSliderId = $this->db->insertId();
190
+ } catch (Exception $e) {
191
+ throw new Exception($e->getMessage());
192
+ }
193
+
194
+ if (!$newSliderId) {
195
+ return false;
196
+ }
197
+
198
+ $slidesModel = new N2SmartsliderSlidesModel();
199
+
200
+ foreach ($slidesModel->getAll($id) AS $slide) {
201
+ $slidesModel->copy($slide['id'], $newSliderId);
202
+ }
203
+
204
+ return $newSliderId;
205
+
206
+ }
207
+
208
+ function redirectToCreate() {
209
+ N2Request::redirect($this->appType->router->createUrl(array("sliders/create")), 302, true);
210
+ }
211
+
212
+ function exportSlider($id) {
213
+
214
+ }
215
+
216
+ function exportSliderAsHTML($id) {
217
+
218
+ }
219
+
220
+ public static function markChanged($sliderid) {
221
+ N2SmartSliderHelper::getInstance()
222
+ ->setSliderChanged($sliderid, 1);
223
+ }
224
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Slides.php ADDED
@@ -0,0 +1,645 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * User: David
5
+ * Date: 2014.06.03.
6
+ * Time: 8:32
7
+ */
8
+ class N2SmartsliderSlidesModel extends N2Model
9
+ {
10
+
11
+ public function __construct() {
12
+ parent::__construct("nextend2_smartslider3_slides");
13
+ }
14
+
15
+ public function get($id) {
16
+ return $this->db->findByPk($id);
17
+ }
18
+
19
+ public function getAll($sliderid = 0, $where = '') {
20
+ return $this->db->queryAll('SELECT * FROM ' . $this->db->tableName . ' WHERE slider = ' . $sliderid . ' ' . $where . ' ORDER BY ordering', false, "assoc", null);
21
+ }
22
+
23
+ public function getRowFromPost($sliderId, $slide, $base64 = true) {
24
+
25
+ if (!isset($slide['title'])) return false;
26
+ if ($slide['title'] == '') $slide['title'] = n2_('New slide');
27
+
28
+ if (isset($slide['publishdates'])) {
29
+ $date = explode('|*|', $slide['publishdates']);
30
+ } else {
31
+ $date[0] = isset($slide['publish_up']) ? $slide['publish_up'] : null;
32
+ $date[1] = isset($slide['publish_down']) ? $slide['publish_down'] : null;
33
+ unset($slide['publish_up']);
34
+ unset($slide['publish_down']);
35
+ }
36
+ $up = strtotime(isset($date[0]) ? $date[0] : '');
37
+ $down = strtotime(isset($date[1]) ? $date[1] : '');
38
+
39
+ $generator_id = isset($slide['generator_id']) ? intval($slide['generator_id']) : 0;
40
+
41
+ $params = $slide;
42
+ unset($params['title']);
43
+ unset($params['slide']);
44
+ unset($params['description']);
45
+ unset($params['thumbnail']);
46
+ unset($params['published']);
47
+ unset($params['first']);
48
+ unset($params['publishdates']);
49
+
50
+ if (isset($params['generator_id'])) {
51
+ unset($params['generator_id']);
52
+ }
53
+
54
+ return array(
55
+ 'title' => $slide['title'],
56
+ 'slide' => ($base64 ? base64_decode($slide['slide']) : $slide['slide']),
57
+ 'description' => $slide['description'],
58
+ 'thumbnail' => $slide['thumbnail'],
59
+ 'published' => (isset($slide['published']) ? $slide['published'] : 0),
60
+ 'publish_up' => date('Y-m-d H:i:s', ($up && $up > 0 ? $up : strtotime('-1 day'))),
61
+ 'publish_down' => date('Y-m-d H:i:s', ($down && $down > 0 ? $down : strtotime('+10 years'))),
62
+ 'first' => (isset($slide['first']) ? $slide['first'] : 0),
63
+ 'params' => json_encode($params),
64
+ 'slider' => $sliderId,
65
+ 'ordering' => $this->getMaximalOrderValue($sliderId) + 1,
66
+ 'generator_id' => $generator_id
67
+ );
68
+ }
69
+
70
+ /**
71
+ * @param $sliderId
72
+ * @param $slide
73
+ * @param bool $base64
74
+ *
75
+ * @return bool
76
+ */
77
+ public function create($sliderId, $slide, $base64 = true) {
78
+
79
+ $row = $this->getRowFromPost($sliderId, $slide, $base64);
80
+
81
+ $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']);
82
+
83
+ self::markChanged($sliderId);
84
+
85
+ return $slideId;
86
+ }
87
+
88
+ protected function getMaximalOrderValue($sliderid = 0) {
89
+
90
+ $query = "SELECT MAX(ordering) AS ordering FROM " . $this->db->tableName . " WHERE slider = :id";
91
+ $result = $this->db->queryRow($query, array(
92
+ ":id" => $sliderid
93
+ ));
94
+
95
+ if (isset($result['ordering'])) return $result['ordering'] + 1;
96
+ return 0;
97
+ }
98
+
99
+ public function renderEditForm($slide) {
100
+ if ($slide) {
101
+
102
+ $data = json_decode($slide['params'], true);
103
+ if ($data == null) $data = array();
104
+ $data += $slide;
105
+ $data['sliderid'] = $slide['slider'];
106
+ echo '<input name="slide[generator_id]" value="' . $slide['generator_id'] . '" type="hidden" />';
107
+ } else {
108
+ $data = array(
109
+ 'static-slide' => N2Request::getInt('static')
110
+ );
111
+ }
112
+
113
+ $data['first'] = isset($slide['first']) ? $slide['first'] : 0;
114
+ $this->editForm($data);
115
+ return new N2Data($data);
116
+ }
117
+
118
+ public function simpleEditForm($data = array()) {
119
+ $configurationXmlFile = dirname(__FILE__) . '/forms/slide.xml';
120
+ N2Loader::import('libraries.form.form');
121
+ $form = new N2Form(N2Base::getApplication('smartslider')
122
+ ->getApplicationType('backend'));
123
+
124
+ $data['publishdates'] = isset($data['publishdates']) ? $data['publishdates'] : ((isset($data['publish_up']) ? $data['publish_up'] : '') . '|*|' . (isset($data['publish_down']) ? $data['publish_down'] : ''));
125
+
126
+ if (isset($data['slide'])) {
127
+ $data['slide'] = base64_encode($data['slide']);
128
+ }
129
+
130
+ $form->loadArray($data);
131
+
132
+ $form->loadXMLFile($configurationXmlFile);
133
+
134
+ echo $form->render('slide');
135
+ }
136
+
137
+ /**
138
+ * @param array $data
139
+ */
140
+ private function editForm($data = array()) {
141
+ $this->simpleEditForm($data);
142
+
143
+ $slidersModel = new N2SmartsliderSlidersModel();
144
+ $slider = $slidersModel->get(N2Request::getInt('sliderid', 0));
145
+
146
+ $slidersSliderXml = call_user_func(array(
147
+ 'N2SSPluginType' . $slider['type'],
148
+ "getPath"
149
+ )) . '/slide.xml';
150
+ if ((!isset($data['static-slide']) || $data['static-slide'] != 1) && N2Filesystem::existsFile($slidersSliderXml)) {
151
+ $form = new N2Form();
152
+
153
+ $form->loadArray($data);
154
+
155
+ $form->loadXMLFile($slidersSliderXml);
156
+
157
+ echo $form->render('slide');
158
+ }
159
+
160
+ if (isset($data['generator_id']) && $data['generator_id'] > 0) {
161
+ $form = new N2Form();
162
+ $form->loadArray($data);
163
+
164
+ $form->loadXMLFile(dirname(__FILE__) . '/forms/slide_generator.xml');
165
+ echo $form->render('slide');
166
+ }
167
+
168
+ N2JS::addFirstCode("new NextendForm('smartslider-form','', {});");
169
+ }
170
+
171
+ /**
172
+ * @param int $id
173
+ * @param $slide
174
+ * @param bool $base64
175
+ *
176
+ * @return bool
177
+ */
178
+ public function save($id, $slide, $base64 = true) {
179
+ if (!isset($slide['title']) || $id <= 0) return false;
180
+ if ($slide['title'] == '') $slide['title'] = n2_('New slide');
181
+
182
+
183
+ if (isset($slide['publishdates'])) {
184
+ $date = explode('|*|', $slide['publishdates']);
185
+ } else {
186
+ $date[0] = $slide['publish_up'];
187
+ $date[1] = $slide['publish_down'];
188
+ unset($slide['publish_up']);
189
+ unset($slide['publish_down']);
190
+ }
191
+ $up = strtotime(isset($date[0]) ? $date[0] : '');
192
+ $down = strtotime(isset($date[1]) ? $date[1] : '');
193
+
194
+ $tmpslide = $slide;
195
+ unset($tmpslide['title']);
196
+ unset($tmpslide['slide']);
197
+ unset($tmpslide['description']);
198
+ unset($tmpslide['thumbnail']);
199
+ unset($tmpslide['published']);
200
+ unset($tmpslide['publishdates']);
201
+
202
+ $this->db->update(array(
203
+ 'title' => $slide['title'],
204
+ 'slide' => ($base64 ? base64_decode($slide['slide']) : $slide['slide']),
205
+ 'description' => $slide['description'],
206
+ 'thumbnail' => $slide['thumbnail'],
207
+ 'published' => (isset($slide['published']) ? $slide['published'] : 0),
208
+ 'publish_up' => date('Y-m-d H:i:s', ($up && $up > 0 ? $up : strtotime('-1 day'))),
209
+ 'publish_down' => date('Y-m-d H:i:s', ($down && $down > 0 ? $down : strtotime('+10 years'))),
210
+ 'params' => json_encode($tmpslide)
211
+ ), array('id' => $id));
212
+
213
+ self::markChanged(N2Request::getInt('sliderid'));
214
+
215
+ return $id;
216
+ }
217
+
218
+ public function updateParams($id, $params) {
219
+
220
+ $this->db->update(array(
221
+ 'params' => json_encode($params)
222
+ ), array('id' => $id));
223
+
224
+ return $id;
225
+ }
226
+
227
+ public function delete($id) {
228
+
229
+ $slide = $this->get($id);
230
+
231
+ if ($slide['generator_id'] > 0) {
232
+ $slidesWithSameGenerator = $this->getAll($slide['slider'], 'AND generator_id = ' . intval($slide['generator_id']));
233
+ if (count($slidesWithSameGenerator) == 1) {
234
+ $generatorModel = new N2SmartsliderGeneratorModel();
235
+ $generatorModel->delete($slide['generator_id']);
236
+ }
237
+ }
238
+
239
+ $this->db->deleteByAttributes(array(
240
+ "id" => intval($id)
241
+ ));
242
+
243
+ self::markChanged($slide['slider']);
244
+
245
+ }
246
+
247
+ public function createQuickImage($image, $sliderId) {
248
+ $publish_up = date('Y-m-d H:i:s', strtotime('-1 day'));
249
+ $publish_down = date('Y-m-d H:i:s', strtotime('+10 years'));
250
+
251
+ $parameters = array(
252
+ 'backgroundImage' => $image['image']
253
+ );
254
+
255
+ 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), '');
256
+ }
257
+
258
+ public function createQuickVideo($video, $sliderId) {
259
+ $publish_up = date('Y-m-d H:i:s', strtotime('-1 day'));
260
+ $publish_down = date('Y-m-d H:i:s', strtotime('+10 years'));
261
+
262
+ $parameters = array();
263
+
264
+ $slide = new N2SmartSliderSlideHelper();
265
+
266
+ switch ($video['type']) {
267
+ case 'youtube':
268
+ new N2SmartSliderItemHelper($slide, 'youtube', array(
269
+ 'desktopportraitwidth' => '100%',
270
+ 'desktopportraitheight' => '100%',
271
+ 'desktopportraitalign' => 'left',
272
+ 'desktopportraitvalign' => 'top'
273
+ ), array(
274
+ "code" => $video['video'],
275
+ "youtubeurl" => $video['video'],
276
+ "image" => $video['image']
277
+ ));
278
+ break;
279
+ case 'vimeo':
280
+ new N2SmartSliderItemHelper($slide, 'vimeo', array(
281
+ 'desktopportraitwidth' => '100%',
282
+ 'desktopportraitheight' => '100%',
283
+ 'desktopportraitalign' => 'left',
284
+ 'desktopportraitvalign' => 'top'
285
+ ), array(
286
+ "vimeourl" => $video['video'],
287
+ "image" => ''
288
+ ));
289
+ break;
290
+ default:
291
+ return false;
292
+ }
293
+ $layers = $slide->data['slide'];
294
+
295
+ 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), '');
296
+ }
297
+
298
+ public function createQuickPost($post, $sliderId) {
299
+ $publish_up = date('Y-m-d H:i:s', strtotime('-1 day'));
300
+ $publish_down = date('Y-m-d H:i:s', strtotime('+10 years'));
301
+
302
+ $data = new N2Data($post);
303
+
304
+ $parameters = array(
305
+ 'backgroundImage' => $data->get('image'),
306
+ 'link' => $data->get('link') . '|*|_self'
307
+ );
308
+
309
+ $title = $data->get('title');
310
+ $description = $data->get('description');
311
+
312
+ 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), '');
313
+ }
314
+
315
+ private function getSlideLayers($hasTitle = false, $hasDescription = false) {
316
+ $slide = new N2SmartSliderSlideHelper();
317
+ if ($hasTitle && $hasDescription) {
318
+ new N2SmartSliderItemHelper($slide, 'heading', array(
319
+ 'desktopportraitleft' => 30,
320
+ 'desktopportraittop' => 12,
321
+ 'desktopportraitalign' => 'left',
322
+ 'desktopportraitvalign' => 'top'
323
+ ), array(
324
+ 'heading' => '{name/slide}'
325
+ ));
326
+ new N2SmartSliderItemHelper($slide, 'text', array(
327
+ 'desktopportraitleft' => 30,
328
+ 'desktopportraittop' => 70,
329
+ 'desktopportraitalign' => 'left',
330
+ 'desktopportraitvalign' => 'top'
331
+ ), array(
332
+ 'content' => '{description/slide}'
333
+ ));
334
+ return $slide->data['slide'];
335
+ } else if ($hasTitle) {
336
+
337
+ new N2SmartSliderItemHelper($slide, 'heading', array(
338
+ 'desktopportraitleft' => 30,
339
+ 'desktopportraittop' => -12,
340
+ 'desktopportraitalign' => 'left',
341
+ 'desktopportraitvalign' => 'bottom'
342
+ ), array(
343
+ 'heading' => '{name/slide}'
344
+ ));
345
+ return $slide->data['slide'];
346
+ }
347
+ return array();
348
+ }
349
+
350
+ public function import($slide, $sliderId) {
351
+ 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']);
352
+ }
353
+
354
+ private function _create($title, $slide, $description, $thumbnail, $published, $publish_up, $publish_down, $first, $params, $slider, $ordering, $generator_id) {
355
+ $this->db->insert(array(
356
+ 'title' => $title,
357
+ 'slide' => $slide,
358
+ 'description' => $description,
359
+ 'thumbnail' => $thumbnail,
360
+ 'published' => $published,
361
+ 'publish_up' => $publish_up,
362
+ 'publish_down' => $publish_down,
363
+ 'first' => $first,
364
+ 'params' => $params,
365
+ 'slider' => $slider,
366
+ 'ordering' => $ordering,
367
+ 'generator_id' => $generator_id
368
+ ));
369
+
370
+ return $this->db->insertId();
371
+ }
372
+
373
+ public function duplicate($id) {
374
+ $slide = $this->get($id);
375
+
376
+ // Shift the afterwards slides ++
377
+ $this->db->query("UPDATE {$this->db->tableName} SET ordering = ordering + 1 WHERE slider = :sliderid AND ordering > :ordering", array(
378
+ ":sliderid" => intval($slide['slider']),
379
+ ":ordering" => intval($slide['ordering'])
380
+ ), '');
381
+
382
+ if (!empty($slide['generator_id'])) {
383
+ $generatorModel = new N2SmartsliderGeneratorModel();
384
+ $slide['generator_id'] = $generatorModel->duplicate($slide['generator_id']);
385
+ }
386
+
387
+ $slide['slide'] = N2Data::json_encode(N2SmartSliderLayer::translateIds(json_decode($slide['slide'], true)));
388
+
389
+ $slideId = $this->_create($slide['title'] . ' - 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']);
390
+
391
+ self::markChanged($slide['slider']);
392
+ return $slideId;
393
+ }
394
+
395
+ public function copy($id, $targetSliderId) {
396
+ $id = intval($id);
397
+ $slide = $this->get($id);
398
+ if ($slide['generator_id'] > 0) {
399
+ $generatorModel = new N2SmartSliderGeneratorModel();
400
+ $slide['generator_id'] = $generatorModel->duplicate($slide['generator_id'], $targetSliderId);
401
+ }
402
+
403
+ $slide['slide'] = N2Data::json_encode(N2SmartSliderLayer::translateIds(json_decode($slide['slide'], true)));
404
+
405
+ $slideId = $this->_create($slide['title'] . ' - copy', $slide['slide'], $slide['description'], $slide['thumbnail'], $slide['published'], $slide['publish_up'], $slide['publish_down'], 0, $slide['params'], $targetSliderId, $slide['ordering'], $slide['generator_id']);
406
+ self::markChanged($slide['slider']);
407
+ return $slideId;
408
+ }
409
+
410
+ public function first($id) {
411
+ $slide = $this->get($id);
412
+
413
+ $this->db->update(array("first" => 0), array(
414
+ "slider" => $slide['slider']
415
+ ));
416
+
417
+ $this->db->update(array(
418
+ "first" => 1
419
+ ), array(
420
+ "id" => $id
421
+ ));
422
+
423
+ self::markChanged($slide['slider']);
424
+ }
425
+
426
+ public function publish($id) {
427
+
428
+ self::markChanged(N2Request::getInt('sliderid'));
429
+
430
+ return $this->db->update(array(
431
+ "published" => 1
432
+ ), array("id" => intval($id)));
433
+ }
434
+
435
+ public function unPublish($id) {
436
+ $this->db->update(array(
437
+ "published" => 0
438
+ ), array(
439
+ "id" => intval($id)
440
+ ));
441
+
442
+ self::markChanged(N2Request::getInt('sliderid'));
443
+
444
+ }
445
+
446
+ public function deleteBySlider($sliderid) {
447
+
448
+ $slides = $this->getAll($sliderid);
449
+ foreach ($slides as $slide) {
450
+ $this->delete($slide['id']);
451
+ }
452
+ self::markChanged($sliderid);
453
+ }
454
+
455
+ /**
456
+ * @param $sliderid
457
+ * @param $ids
458
+ *
459
+ * @return bool|int
460
+ */
461
+ public function order($sliderid, $ids) {
462
+ if (is_array($ids) && count($ids) > 0) {
463
+ $i = 0;
464
+ foreach ($ids AS $id) {
465
+ $id = intval($id);
466
+ if ($id > 0) {
467
+ $update = $this->db->update(array(
468
+ 'ordering' => $i,
469
+ ), array(
470
+ "id" => $id,
471
+ "slider" => $sliderid
472
+ ));
473
+
474
+ $i++;
475
+ }
476
+ }
477
+
478
+ self::markChanged($sliderid);
479
+
480
+ return $i;
481
+ }
482
+ return false;
483
+ }
484
+
485
+ public function markChanged($sliderid) {
486
+ N2SmartSliderHelper::getInstance()
487
+ ->setSliderChanged($sliderid, 1);
488
+ }
489
+
490
+ public function makeStatic($slideId) {
491
+ $slideData = $this->get($slideId);
492
+ if ($slideData['generator_id'] > 0) {
493
+ $sliderObj = new N2SmartSlider($slideData['slider'], array());
494
+ $rootSlide = new N2SmartSliderSlide($sliderObj, $slideData);
495
+ $rootSlide->initGenerator(array());
496
+ $slides = $rootSlide->expandSlide();
497
+
498
+ // Shift the afterwards slides with the slides count
499
+ $this->db->query("UPDATE {$this->db->tableName} SET ordering = ordering + " . count($slides) . " WHERE slider = :sliderid AND ordering > :ordering", array(
500
+ ":sliderid" => intval($slideData['slider']),
501
+ ":ordering" => intval($slideData['ordering'])
502
+ ), '');
503
+
504
+ $firstUsed = false;
505
+ $i = 1;
506
+ foreach ($slides AS $slide) {
507
+ $row = $slide->getRow();
508
+ // set the proper ordering
509
+ $row['ordering'] += $i;
510
+ if ($row['first']) {
511
+ // Make sure to mark only one slide as start slide
512
+ if ($firstUsed) {
513
+ $row['first'] = 0;
514
+ } else {
515
+ $firstUsed = true;
516
+ }
517
+ }
518
+ $this->db->insert($row);
519
+ $i++;
520
+ }
521
+
522
+ $this->db->query("UPDATE {$this->db->tableName} SET published = 0, first = 0 WHERE id = :id", array(
523
+ ":id" => $slideData['id']
524
+ ), '');
525
+
526
+ return count($slides);
527
+ } else {
528
+ return false;
529
+ }
530
+ }
531
+
532
+ /**
533
+ * @param $slide N2SmartSliderSlide
534
+ * @param $slider N2SmartSliderAbstract
535
+ * @param $widget
536
+ * @param $appType
537
+ *
538
+ * @throws Exception
539
+ */
540
+ public static function box($slide, $slider, $widget, $appType) {
541
+
542
+ $lt = array();
543
+
544
+ if ($slide->isStatic()) {
545
+ $lt[] = NHtml::tag('div', array(
546
+ 'class' => 'n2-button-tag n2-button n2-button-x-small n2-sidebar-list-bg n2-uc n2-h5',
547
+ ), n2_('Static slide'));
548
+ } else {
549
+
550
+ $lt[] = NHtml::tag('div', array(
551
+ 'class' => 'n2-button-tag n2-button n2-button-x-small n2-button-green n2-uc n2-h5 n2-slide-is-first',
552
+ ), n2_('First'));
553
+
554
+ $lt[] = NHtml::tag('a', array(
555
+ 'class' => 'n2-button n2-button-x-small n2-sidebar-list-bg n2-uc n2-h5 n2-slide-first',
556
+ 'href' => $appType->router->createUrl(array(
557
+ 'slides/first',
558
+ array(
559
+ 'sliderid' => $slider->sliderId,
560
+ 'slideid' => $slide->id
561
+ ) + N2Form::tokenizeUrl()
562
+ ))
563
+ ), n2_('Set First'));
564
+ }
565
+
566
+ $rt = array();
567
+
568
+ $rt[] = NHtml::tag('a', array(
569
+ 'class' => 'n2-button n2-button-small n2-sidebar-list-bg n2-sidebar-list-bg n2-slide-duplicate',
570
+ 'href' => $appType->router->createUrl(array(
571
+ 'slides/duplicate',
572
+ array(
573
+ 'sliderid' => $slider->sliderId,
574
+ 'slideid' => $slide->id
575
+ ) + N2Form::tokenizeUrl()
576
+ ))
577
+ ), NHtml::tag('i', array('class' => 'n2-i n2-it n2-i-duplicate'), ''));
578
+
579
+ $rt[] = NHtml::tag('a', array(
580
+ 'class' => 'n2-button n2-button-small n2-sidebar-list-bg n2-slide-delete',
581
+ 'href' => $appType->router->createUrl(array(
582
+ 'slides/delete',
583
+ array(
584
+ 'sliderid' => $slider->sliderId,
585
+ 'slideid' => $slide->id
586
+ ) + N2Form::tokenizeUrl()
587
+ ))
588
+ ), NHtml::tag('i', array('class' => 'n2-i n2-it n2-i-delete'), ''));
589
+
590
+ $rt[] = NHtml::tag('div', array(
591
+ 'class' => 'n2-button n2-button-small n2-button-blue n2-slide-selected',
592
+ ), NHtml::tag('i', array('class' => 'n2-i n2-it n2-i-tick'), ''));
593
+
594
+ $rb = array();
595
+
596
+ if ($slide->hasGenerator()) {
597
+ $rb[] = NHtml::tag('a', array(
598
+ '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' : ''),
599
+ 'href' => $appType->router->createUrl(array(
600
+ 'generator/edit',
601
+ array(
602
+ 'generator_id' => $slide->generator_id
603
+ )
604
+ ))
605
+ ), 'Edit generator');
606
+ }
607
+
608
+ $image = $slide->getThumbnail();
609
+ if (empty($image)) {
610
+ $image = '$system$/images/placeholder/image.png';
611
+ }
612
+
613
+ $editUrl = $appType->router->createUrl(array(
614
+ 'slides/edit',
615
+ array(
616
+ 'sliderid' => $slider->sliderId,
617
+ 'slideid' => $slide->id
618
+ )
619
+ ));
620
+
621
+ $widget->init("box", array(
622
+ 'attributes' => array(
623
+ 'class' => 'n2-box-slide n2-box-overflow' . ($slide->isFirst() ? ' n2-first-slide' : '') . ($slide->isCurrentlyEdited() ? ' n2-ss-slide-active' : ''),
624
+ 'data-slideid' => $slide->id,
625
+ 'data-editUrl' => $editUrl
626
+ ),
627
+ 'image' => N2ImageHelper::fixed($image),
628
+ 'firstCol' => Nhtml::link($slide->getTitle() . ($slide->hasGenerator() ? ' [' . $slide->getSlideStat() . ']' : ''), $editUrl, array('class' => 'n2-h4')),
629
+ 'lt' => implode('', $lt),
630
+ 'rt' => implode('', $rt),
631
+ 'rtAttributes' => array('class' => 'n2-on-hover'),
632
+ 'rb' => implode('', $rb),
633
+ 'placeholderContent' => NHtml::tag('a', array(
634
+ 'class' => 'n2-slide-published' . ($slide->published ? ' n2-active' : ''),
635
+ 'href' => $appType->router->createUrl(array(
636
+ 'slides/publish',
637
+ array(
638
+ 'sliderid' => $slider->sliderId,
639
+ 'slideid' => $slide->id
640
+ ) + N2Form::tokenizeUrl()
641
+ ))
642
+ ), NHtml::tag('i', array('class' => 'n2-i n2-it n2-i-unpublished'), ''))
643
+ ));
644
+ }
645
+ }
app/code/community/Nextend2/SmartSlider3/library/smartslider/models/Update.php ADDED
@@ -0,0 +1,84 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartsliderUpdateModel
4
+ {
5
+
6
+ private $storage, $version;
7
+
8
+ public function __construct() {
9
+ $this->storage = N2Base::getApplication('smartslider')->storage;
10
+ $this->version = $this->storage->get('update', 'version');
11
+ }
12
+
13
+ public static function getInstance() {
14
+ static $ins;
15
+ if (!$ins) {
16
+ $ins = new N2SmartsliderUpdateModel();
17
+ }
18
+ return $ins;
19
+ }
20
+
21
+ public function getVersion() {
22
+ return $this->version;
23
+ }
24
+
25
+ public function setVersion($version) {
26
+ $this->storage->set('update', 'version', $version);
27
+ $this->storage->set('update', 'lastcheck', time());
28
+ $this->version = $version;
29
+ }
30
+
31
+ public function hasUpdate() {
32
+ $this->autoCheck();
33
+ if (version_compare(N2SS3::$version, $this->version) == -1) {
34
+ return true;
35
+ }
36
+ return false;
37
+ }
38
+
39
+ private function autoCheck() {
40
+ if (intval(N2SmartSliderSettings::get('autoupdatecheck', 1))) {
41
+ $time = $this->storage->get('update', 'lastcheck');
42
+ if (!$time || strtotime("+1 week", $time) < time()) {
43
+ $this->check();
44
+ }
45
+ }
46
+ }
47
+
48
+ public function check() {
49
+
50
+ $posts = array(
51
+ 'action' => 'version'
52
+ );
53
+ $response = N2SS3::api($posts);
54
+ if ($response['status'] == 'OK') {
55
+ $this->setVersion($response['data']['latestVersion']);
56
+ }
57
+ return $response['status'];
58
+ }
59
+
60
+ public function lastCheck() {
61
+ $time = $this->storage->get('update', 'lastcheck');
62
+ if (empty($time)) {
63
+ return n2_('never');
64
+ }
65
+ return date("Y-m-d H:i", $time);
66
+ }
67
+
68
+ public function update() {
69
+
70
+ $posts = array(
71
+ 'action' => 'update'
72
+ );
73
+
74
+ $response = N2SS3::api($posts);
75
+ if (is_string($response)) {
76
+ if (N2Platform::updateFromZip($response, N2SS3::getUpdateInfo())) {
77
+ return 'OK';
78
+ }
79
+ return 'UPDATE_ERROR';
80
+ }
81
+
82
+ return $response['status'];
83
+ }
84
+ }
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 .= NHtml::tag('div', array(
24
+ 'class' => 'n2-radio-option' . ($this->isSelected($value) ? ' n2-active' : '') . ($i == 0 ? ' n2-first' : '') . ($i == $length ? ' n2-last' : '')
25
+ ), NHtml::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 NHtml::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 NHtml::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() . NHtml::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 .= NHtml::tag('div', array(
24
+ 'class' => 'n2-radio-option' . ($this->isSelected($value) ? ' n2-active' : '') . ($i == 0 ? ' n2-first' : '') . ($i == $length ? ' n2-last' : '')
25
+ ), NHtml::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/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,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="id" label="ID" default="" class="n2-hidden"/>
46
+ <param type="group" label="Relative point" class="n2-expert">
47
+ <param type="layerpicker" name="parentid" label="Layer" default=""/>
48
+ <param type="halign" name="parentalign" label="#Horizontal" default="left"/>
49
+ <param type="valign" name="parentvalign" label="#Vertical" default="top"/></param>
50
+ <param type="group" label="Show on">
51
+ <param name="show-desktop-portrait" type="onoff" label="Desktop portrait" default="1"/>
52
+ <param name="show-desktop-landscape" type="onoff" label="Desktop landscape" default="1"/>
53
+ <param name="show-tablet-portrait" type="onoff" label="Tablet portrait" default="1"/>
54
+ <param name="show-tablet-landscape" type="onoff" label="Tablet landscape" default="1"/>
55
+ <param name="show-mobile-portrait" type="onoff" label="Mobile portrait" default="1"/>
56
+ <param name="show-mobile-landscape" type="onoff" label="Mobile landscape" default="1"/></param>
57
+ <param name="resettodesktop" type="button" label="Reset position" default="Reset"/>
58
+ </params>
59
+ </params>
60
+ </params>
61
+ </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,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="autoupdatecheck" label="Automatic update check" default="1"/>
6
+ <param type="mixed" label="Translate url" name="translate-url" default="|*|">
7
+ <param type="text" label="From" style="width:200px;"/>
8
+ <param type="text" label="To" style="width:200px;"/>
9
+ </param>
10
+ <param type="textarea" name="external-css-files" label="Additional CSS files" default=""
11
+ style2="width:400px; height: 100px; resize: vertical;" class="n2-hidden"/>
12
+ <param type="onoff" name="hardware-acceleration" label="Hardware acceleration on sliders" default="1"/>
13
+ </params>
14
+ <params name="reponsive" label="Responsive mode">
15
+ <param type="radio" label="Based on" name="responsive-basedon" default="combined">
16
+ <option value="device">Real device detection</option>
17
+ <option value="screen">Maximum screen width</option>
18
+ <option value="combined">Combined</option>
19
+ </param>
20
+ <param type="group" label="Maximum screen width">
21
+ <param type="text" name="responsive-screen-width-desktop-portrait" label="Desktop portrait"
22
+ style="width:40px;" default="1200">
23
+ <unit>px</unit>
24
+ </param>
25
+ <param type="text" name="responsive-screen-width-tablet-landscape" label="Tablet landscape"
26
+ style="width:40px;" default="1024">
27
+ <unit>px</unit>
28
+ </param>
29
+ <param type="text" name="responsive-screen-width-tablet-portrait" label="Tablet portrait"
30
+ style="width:40px;" default="800">
31
+ <unit>px</unit>
32
+ </param>
33
+ <param type="text" name="responsive-screen-width-mobile-LANDSCAPE" label="Mobile landscape"
34
+ style="width:40px;" default="740">
35
+ <unit>px</unit>
36
+ </param>
37
+ <param type="text" name="responsive-screen-width-mobile-portrait" label="Mobile portrait"
38
+ style="width:40px;" default="440">
39
+ <unit>px</unit>
40
+ </param>
41
+ </param>
42
+ <param type="group" label="Default width percentage">
43
+ <param type="number" name="responsive-default-ratio-tablet-portrait" label="Tablet portrait"
44
+ style="width:40px;" default="70" max="100" min="0">
45
+ <unit>%</unit>
46
+ </param>
47
+ <param type="number" name="responsive-default-ratio-mobile-portrait" label="Mobile portrait"
48
+ style="width:40px;" default="50" max="100" min="0">
49
+ <unit>%</unit>
50
+ </param>
51
+ </param>
52
+ </params>
53
+ <params name="cache" label="Cache">
54
+ <param type="button" label="Clear" name="clear-cache" default="Clear cache">
55
+ <app>smartslider</app>
56
+ <queries>
57
+ <controller>settings</controller>
58
+ <action>clearcache</action>
59
+ </queries>
60
+ </param>
61
+ </params>
62
+
63
+ <params name="tidy" label="Tidy settings">
64
+ <param type="list" default="utf8" name="tidy-input-encoding" label="Input encoding">
65
+ <option value="raw">raw</option>
66
+ <option value="ascii">ascii</option>
67
+ <option value="latin0">latin0</option>
68
+ <option value="latin1">latin1</option>
69
+ <option value="utf8">utf8</option>
70
+ <option value="iso2022">iso2022</option>
71
+ <option value="mac">mac</option>
72
+ <option value="win1252">win1252</option>
73
+ <option value="ibm858">ibm858</option>
74
+ <option value="utf16le">utf16le</option>
75
+ <option value="utf16be">utf16be</option>
76
+ <option value="utf16">utf16</option>
77
+ <option value="big5">big5</option>
78
+ <option value="shiftjis">shiftjis</option>
79
+ </param>
80
+ <param type="list" default="utf8" name="tidy-output-encoding" label="Output encoding">
81
+ <option value="raw">raw</option>
82
+ <option value="ascii">ascii</option>
83
+ <option value="latin0">latin0</option>
84
+ <option value="latin1">latin1</option>
85
+ <option value="utf8">utf8</option>
86
+ <option value="iso2022">iso2022</option>
87
+ <option value="mac">mac</option>
88
+ <option value="win1252">win1252</option>
89
+ <option value="ibm858">ibm858</option>
90
+ <option value="utf16le">utf16le</option>
91
+ <option value="utf16be">utf16be</option>
92
+ <option value="utf16">utf16</option>
93
+ <option value="big5">big5</option>
94
+ <option value="shiftjis">shiftjis</option>
95
+ </param>
96
+ </params>
97
+ </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,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="slide" label="Slide settings">
3
+ <param name="title" type="text" label="Name" default="Slide 1" style="width: 400px;"/>
4
+ <param name="description" type="textarea" label="Description" default="" style="display: block;" style2="width:100%; resize: vertical; height: 50px;"/>
5
+ <param type="group" name="Properties" class="n2-expert">
6
+ <param name="published" type="onoff" label="Published" default="1"/>
7
+ <param name="first" type="onoff" label="First" default="0" class="n2-hidden"/>
8
+ <param type="onoff" name="static-slide" label="Static slide" default="0" class="n2-expert"/></param>
9
+ <param name="publishdates" type="mixed" label="Published between" class="n2-expert" default="0000-00-00 00:00:00|*|0000-00-00 00:00:00">
10
+ <param type="date" label="Publish up"/>
11
+ <param type="date" label="Publish down"/></param>
12
+ <param name="thumbnail" type="image" label="Thumbnail url" default=""/>
13
+ <param type="group" label="Background">
14
+ <param name="backgroundColor" type="color" alpha="1" label="Color" default="ffffff00"/>
15
+ <param name="backgroundImage" type="imagemanager" label="Image" default=""/>
16
+ <param name="backgroundImageOpacity" label="Opacity" type="numberautocomplete" default="100" style="width: 22px;" min="0" max="100" values="100,80,60,40,20,0">
17
+ <unit value="%">%</unit>
18
+ </param>
19
+ <param name="backgroundMode" type="list" label="Fill mode" default="fill" translateable="1">
20
+ <option value="fill">Fill</option>
21
+ <option value="fit">Fit</option>
22
+ <option value="stretch">Stretch</option>
23
+ <option value="center">Center</option>
24
+ <option value="tile">Tile</option>
25
+ </param>
26
+ </param>
27
+ <param type="mixed" name="link" label="Link" default="|*|_self">
28
+ <param type="url" label="Link"/>
29
+ <param type="list" label="Target" translateable="1">
30
+ <option value="_self">Self</option>
31
+ <option value="_blank">Blank</option>
32
+ </param>
33
+ </param>
34
+ <param name="slide-duration" type="text" label="Slide duration" style="width:40px;" default="0">
35
+ <unit value="ms">ms</unit>
36
+ </param>
37
+ <param name="slide" type="hidden" label="Slide" default="W10=" class="n2-hidden"/>
38
+ </params>
39
+ </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,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="0">
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
+ </params>
55
+ <params name="slider-responsive1" label="Responsive mode">
56
+ <param name="responsive-mode" type="sliderresponsive" ajaxurl="slider/renderform" default="auto" file="responsive.xml"/>
57
+ </params>
58
+ <params name="slider-responsive-placeholder" id="nextend-responsive-mode-panel" type="placeholder"/></params>
59
+ <params name="autoplay" type="groupped" label="Autoplay">
60
+ <params name="autoplay" label="Autoplay settings" hidetitle="1">
61
+ <param type="group" label="Autoplay">
62
+ <param name="autoplay" type="onoff" label="Enabled" default="0"/>
63
+ <param name="autoplayDuration" type="number" label="Interval" default="8000" style="width:35px;">
64
+ <unit>ms</unit>
65
+ </param>
66
+ </param>
67
+ <param type="group" label="Stop autoplay on">
68
+ <param name="autoplayStopClick" type="onoff" label="Click" default="1"/>
69
+ <param name="autoplayStopMouse" type="list" label="Mouse" default="0" translateable="1">
70
+ <option value="0">Off</option>
71
+ <option value="enter">Enter</option>
72
+ <option value="leave">Leave</option>
73
+ </param>
74
+ <param name="autoplayStopMedia" type="onoff" label="Media started" default="1"/></param>
75
+ </params>
76
+ </params>
77
+ </params>
78
+ <params name="widgets" label="Widgets" type="raw" hidetitle="1">
79
+ <param name="widgets" type="pluginmatrix" label="" group="sswidget" method="onWidgetList" default="arrow"/>
80
+ </params>
81
+ </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":"","backgroundMode":"fill","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":"","backgroundMode":"fill","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":"","backgroundMode":"fill","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":"","backgroundMode":"fill","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 NHtml::tag("div", array(
58
+ "class" => "nextend-smartslider-button-container {fontclass}",
59
+ "style" => "cursor: pointer; display: {display}; {extrastyle};"
60
+ ), NHtml::link("{content}", "{url}", array(
61
+ "onclick" => 'return false;',
62
+ "target" => "{target}",
63
+ "style" => "display: {display}",
64
+ "class" => "{styleclass} {class}"
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 = NHtml::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 .= NHtml::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,161 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderItemAbstract', 'smartslider');
4
+
5
+ class N2SSPluginItemHeading extends N2SSPluginItemAbstract
6
+ {
7
+
8
+ var $_identifier = 'heading';
9
+
10
+ protected $priority = 2;
11
+
12
+ private static $font = 1009;
13
+
14
+ public function __construct() {
15
+ $this->_title = n2_x('Heading', 'Slide item');
16
+ }
17
+
18
+ private static function initDefaultFont() {
19
+ static $inited = false;
20
+ if (!$inited) {
21
+ $res = N2StorageSectionAdmin::get('smartslider', 'default', 'item-heading-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 = '';
33
+
34
+ private static function initDefaultStyle() {
35
+ static $inited = false;
36
+ if (!$inited) {
37
+ $res = N2StorageSectionAdmin::get('smartslider', 'default', 'item-heading-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-heading-font" type="font" previewmode="hover" label="' . n2_('Item') . ' - ' . n2_('Heading') . '" default="' . self::$font . '" />';
51
+
52
+ self::initDefaultStyle();
53
+ $settings['style'][] = '<param name="item-heading-style" type="style" set="heading" previewmode="heading" label="' . n2_('Item') . ' - ' . n2_('Heading') . '" default="' . self::$style . '" />';
54
+ }
55
+
56
+ function getTemplate($slider) {
57
+
58
+ return "<div><h{priority} id='{uid}' class='{fontclass} {styleclass} {class}' style='display: {display}; {extrastyle};'><a href='#' class='{afontclass}' onclick='return false;'>{heading}</a></h{priority}>" . NHtml::scriptTemplate($this->getJs($slider->elementId, "{uid}")) . "</div>";
59
+ }
60
+
61
+ function getJs($sliderId, $id) {
62
+ return '';
63
+
64
+ }
65
+
66
+ function _render($data, $itemId, $slider, $slide) {
67
+ return $this->getHtml($data, $itemId, $slider, $slide);
68
+ }
69
+
70
+ function _renderAdmin($data, $itemId, $slider, $slide) {
71
+ return $this->getHtml($data, $itemId, $slider, $slide);
72
+ }
73
+
74
+ private function getHtml($data, $id, $slider, $slide) {
75
+ $attributes = array();
76
+
77
+ $font = N2FontRenderer::render($data->get('font'), 'hover', $slider->elementId, 'div#' . $slider->elementId . ' ', $slider->fontSize);
78
+ $style = N2StyleRenderer::render($data->get('style'), 'heading', $slider->elementId, 'div#' . $slider->elementId . ' ');
79
+
80
+ $linkAttributes = array();
81
+ if ($this->isEditor) {
82
+ $linkAttributes['onclick'] = 'return false;';
83
+ }
84
+
85
+ $title = $data->get('title', '');
86
+ if (!empty($title)) {
87
+ $attributes['title'] = $title;
88
+ }
89
+
90
+ list($link) = (array)N2Parse::parse($data->get('link', '#|*|'));
91
+ if (!empty($link) && $link != '#') {
92
+ $linkAttributes['class'] = $font;
93
+ $font = '';
94
+ }
95
+
96
+ return $this->heading($data->get('priority', 2), $attributes + array(
97
+ "id" => $id,
98
+ "class" => $font . $style . " " . $data->get('class', ''),
99
+ "style" => "display:" . ($data->get('fullwidth', 1) ? 'block' : 'inline-block') . ";" . ($data->get('nowrap', 1) ? 'white-space:nowrap;' : '')
100
+ ), $this->getLink($slide, $data, str_replace("\n", '<br />', strip_tags($slide->fill($data->get('heading', '')))), $linkAttributes));
101
+ }
102
+
103
+ private function heading($type, $attributes, $content) {
104
+ return NHtml::tag("h{$type}", $attributes, $content);
105
+ }
106
+
107
+ function getValues() {
108
+ self::initDefaultFont();
109
+ self::initDefaultStyle();
110
+ return array(
111
+ 'priority' => '2',
112
+ 'fullwidth' => 1,
113
+ 'nowrap' => 1,
114
+ 'heading' => n2_('Heading layer'),
115
+ 'title' => '',
116
+ 'link' => '#|*|_self',
117
+ 'font' => self::$font,
118
+ 'style' => self::$style,
119
+
120
+ 'split-text-transform-origin' => '50|*|50|*|0',
121
+ 'split-text-backface-visibility' => 1,
122
+
123
+ 'split-text-animation-in' => '',
124
+ 'split-text-delay-in' => 0,
125
+
126
+ 'split-text-animation-out' => '',
127
+ 'split-text-delay-out' => 0,
128
+
129
+ 'class' => ''
130
+ );
131
+ }
132
+
133
+ function getPath() {
134
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . $this->_identifier . DIRECTORY_SEPARATOR;
135
+ }
136
+
137
+ public function getFilled($slide, $data) {
138
+ $data->set('heading', $slide->fill($data->get('heading', '')));
139
+ $data->set('link', $slide->fill($data->get('link', '#|*|')));
140
+ return $data;
141
+ }
142
+
143
+ public function prepareExport($export, $data) {
144
+ $export->addVisual($data->get('font'));
145
+ $export->addVisual($data->get('style'));
146
+ $export->addLightbox($data->get('link'));
147
+ }
148
+
149
+ public function prepareImport($import, $data) {
150
+ $data->set('font', $import->fixSection($data->get('font')));
151
+ $data->set('style', $import->fixSection($data->get('style')));
152
+ $data->set('link', $import->fixLightbox($data->get('link')));
153
+ return $data;
154
+ }
155
+
156
+ }
157
+
158
+ N2Plugin::addPlugin('ssitem', 'N2SSPluginItemHeading');
159
+
160
+ N2Pluggable::addAction('smartsliderDefault', 'N2SSPluginItemHeading::onSmartsliderDefaultSettings');
161
+
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,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 = NHtml::openTag("div", array(
41
+ 'class' => '{styleclass}',
42
+ 'style' => 'overflow:hidden;'
43
+ ));
44
+ $html .= NHtml::openTag("a", array(
45
+ "href" => "{url}",
46
+ "onclick" => 'return false;',
47
+ "style" => "display: block;background: none !important;"
48
+ ));
49
+
50
+ $html .= '<img src="{image}" style="display: inline-block; max-width: 100%;width:{width};height:{height};" class="{cssclass}">';
51
+
52
+ $html .= NHtml::closeTag("a");
53
+ $html .= NHtml::closeTag("div");
54
+
55
+ return $html;
56
+ }
57
+
58
+ function _render($data, $itemId, $slider, $slide) {
59
+ return $this->getHtml($data, $itemId, $slider, $slide);
60
+ }
61
+
62
+ function _renderAdmin($data, $itemId, $slider, $slide) {
63
+ return $this->getHtml($data, $itemId, $slider, $slide);
64
+ }
65
+
66
+ private function getHtml($data, $id, $slider, $slide) {
67
+
68
+ $size = (array)N2Parse::parse($data->get('size', ''));
69
+ if (!isset($size[0])) $size[0] = 'auto';
70
+ if (!isset($size[1])) $size[1] = 'auto';
71
+
72
+ $html = NHtml::tag('img', self::optimizeImage($slide->fill($data->get('image', '')), $data, $slider) + array(
73
+ "id" => $id,
74
+ "alt" => htmlspecialchars($slide->fill($data->get('alt', ''))),
75
+ "style" => "display: inline-block; max-width: 100%; width: {$size[0]};height: {$size[1]};",
76
+ "class" => $data->get('cssclass', ''),
77
+ "title" => htmlspecialchars($slide->fill($data->get('title', '')))
78
+ ));
79
+
80
+ $style = N2StyleRenderer::render($data->get('style'), 'heading', $slider->elementId, 'div#' . $slider->elementId . ' ');
81
+ return NHtml::tag("div", array(
82
+ "class" => $style,
83
+ 'style' => 'overflow:hidden;'
84
+ ), $this->getLink($slide, $data, $html));
85
+ }
86
+
87
+ function getValues() {
88
+ self::initDefaultStyle();
89
+ return array(
90
+ 'image' => '$system$/images/placeholder/image.png',
91
+ 'alt' => n2_('Image is not available'),
92
+ 'title' => '',
93
+ 'link' => '#|*|_self',
94
+ 'size' => '100%|*|auto',
95
+ 'style' => self::$style,
96
+ 'cssclass' => '',
97
+ 'image-optimize' => 1
98
+ );
99
+ }
100
+
101
+ function getPath() {
102
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . $this->_identifier . DIRECTORY_SEPARATOR;
103
+ }
104
+
105
+ public function getFilled($slide, $data) {
106
+ $data->set('image', $slide->fill($data->get('image', '')));
107
+ $data->set('alt', $slide->fill($data->get('alt', '')));
108
+ $data->set('title', $slide->fill($data->get('title', '')));
109
+ $data->set('link', $slide->fill($data->get('link', '#|*|')));
110
+ return $data;
111
+ }
112
+
113
+ public function prepareExport($export, $data) {
114
+ $export->addImage($data->get('image'));
115
+ $export->addVisual($data->get('style'));
116
+ $export->addLightbox($data->get('link'));
117
+ }
118
+
119
+ public function prepareImport($import, $data) {
120
+ $data->set('image', $import->fixImage($data->get('image')));
121
+ $data->set('style', $import->fixSection($data->get('style')));
122
+ $data->set('link', $import->fixLightbox($data->get('link')));
123
+ return $data;
124
+ }
125
+ }
126
+
127
+ N2Plugin::addPlugin('ssitem', 'N2SSPluginItemImage');
128
+
129
+ N2Pluggable::addAction('smartsliderDefault', 'N2SSPluginItemImage::onSmartsliderDefaultSettings');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/image/image/configuration.xml ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
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="link" type="mixed" label="Link" default="#|*|_self">
5
+ <param type="url" label="Link" style="width:140px;"/>
6
+ <param type="list" label="Target" translateable="1">
7
+ <option value="_self">Self</option>
8
+ <option value="_blank">Blank</option>
9
+ </param>
10
+ </param>
11
+ </params>
12
+ </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 . ' ', $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 . '">', $this->wpautop(self::closeTags($slide->fill($data->get('content', '')))));
84
+ $contentTablet = str_replace('<p>', '<p class="' . $font . ' ' . $style . '">', $this->wpautop(self::closeTags($slide->fill($data->get('contenttablet', '')))));
85
+ $contentMobile = str_replace('<p>', '<p class="' . $font . ' ' . $style . '">', $this->wpautop(self::closeTags($slide->fill($data->get('contentmobile', '')))));
86
+ $class = '';
87
+
88
+ if ($contentMobile == '') {
89
+ $class .= ' n2-ss-mobile';
90
+ } else {
91
+ $html .= NHtml::tag('div', array(
92
+ 'class' => 'n2-ss-mobile'
93
+ ), $contentMobile);
94
+ }
95
+
96
+ if ($contentTablet == '') {
97
+ $class .= ' n2-ss-tablet';
98
+ } else {
99
+ $html .= NHtml::tag('div', array(
100
+ 'class' => 'n2-ss-tablet' . $class
101
+ ), $contentTablet);
102
+ $class = '';
103
+ }
104
+
105
+ $html .= NHtml::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,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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 NHtml::tag('div', array(
23
+ "style" => 'width: 100%; height: 100%; min-height: 50px; background: url({image}) no-repeat 50% 50%; background-size: cover;'
24
+ ));
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
+ $image = $data->get('image');
35
+ if (!empty($image)) {
36
+ $style = 'cursor:pointer; background: url(' . N2ImageHelper::fixed($data->get('image')) . ') no-repeat 50% 50%; background-size: cover';
37
+ $hasImage = 1;
38
+ }
39
+
40
+ N2JS::addInline('window["' . $slider->elementId . '"].ready(function() {
41
+ var vimeo = new NextendSmartSliderVimeoItem(this, "' . $itemId . '", "' . $slider->elementId . '", ' . $data->toJSON() . ', ' . $hasImage . ');
42
+ });
43
+ ');
44
+
45
+ return NHtml::tag('div', array(
46
+ 'id' => $itemId,
47
+ 'style' => 'position: absolute; top: 0; left: 0; width: 100%; height: 100%;' . $style
48
+ ));
49
+ }
50
+
51
+ function _renderAdmin($data, $itemId, $slider, $slide) {
52
+ return NHtml::tag('div', array(
53
+ "style" => 'width: 100%; height: 100%; background: url(' . N2ImageHelper::fixed($data->getIfEmpty('image', '$system$/images/placeholder/video.png')) . ') no-repeat 50% 50%; background-size: cover;'
54
+ ));
55
+ }
56
+
57
+ function getValues() {
58
+ return array(
59
+ 'vimeourl' => '75251217',
60
+ 'image' => '$system$/images/placeholder/video.png',
61
+ 'center' => 0,
62
+ 'autoplay' => 0,
63
+ 'title' => 1,
64
+ 'byline' => 1,
65
+ 'portrait' => 0,
66
+ 'color' => '00adef',
67
+ 'loop' => 0
68
+ );
69
+ }
70
+
71
+ function getPath() {
72
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . $this->_identifier . DIRECTORY_SEPARATOR;
73
+ }
74
+
75
+ public function getFilled($slide, $data) {
76
+ $data->set('vimeourl', $slide->fill($data->get('vimeourl', '')));
77
+ return $data;
78
+ }
79
+ }
80
+
81
+ N2Plugin::addPlugin('ssitem', 'N2SSPluginItemVimeo');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/vimeo/vimeo/configuration.xml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="reset" type="onoff" label="Reset video when lose focus" default="0"/>
16
+ <param name="title" type="onoff" label="Title" default="1"/>
17
+ <param name="byline" type="onoff" label="Users byline" default="1"/>
18
+ <param name="portrait" type="onoff" label="Portrait" default="1"/>
19
+ <param name="color" type="color" label="Color" default="00adef"/>
20
+ </params>
21
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/youtube/youtube.php ADDED
@@ -0,0 +1,104 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderItemAbstract', 'smartslider');
4
+
5
+ class N2SSPluginItemYouTube extends N2SSPluginItemAbstract
6
+ {
7
+
8
+ var $_identifier = 'youtube';
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('YouTube', 'Slide item');
19
+ }
20
+
21
+ function getTemplate($slider) {
22
+ return NHtml::tag('div', array(
23
+ "style" => 'width: 100%; height: 100%; min-height: 50px; background: url({image}) no-repeat 50% 50%; background-size: cover;'
24
+ ));
25
+ }
26
+
27
+ function _render($data, $itemId, $slider, $slide) {
28
+ /**
29
+ * @var $data N2Data
30
+ */
31
+ $data->fillDefault(array(
32
+ 'image' => '',
33
+ 'start' => 0,
34
+ 'volume' => -1,
35
+ 'autoplay' => 0,
36
+ 'center' => 0,
37
+ 'loop' => 0,
38
+ 'theme' => 'dark',
39
+ 'related' => 0,
40
+ 'vq' => 'default'
41
+ ));
42
+ $youTubeUrl = $this->parseYoutubeUrl($slide->fill($data->get('youtubeurl', '')));
43
+ $data->set("youtubecode", $youTubeUrl);
44
+
45
+ $style = '';
46
+
47
+ $hasImage = 0;
48
+ $image = $data->get('image');
49
+ if (!empty($image)) {
50
+ $style = 'cursor:pointer; background: url(' . N2ImageHelper::fixed($data->get('image')) . ') no-repeat 50% 50%; background-size: cover';
51
+ $hasImage = 1;
52
+ }
53
+
54
+ N2JS::addInline('window["' . $slider->elementId . '"].ready(function(){
55
+ new NextendSmartSliderYouTubeItem(this, "' . $itemId . '", ' . $data->toJSON() . ', ' . $hasImage . ');
56
+ });');
57
+
58
+ return NHtml::tag('div', array(
59
+ 'id' => $itemId,
60
+ 'style' => 'position: absolute; top: 0; left: 0; width: 100%; height: 100%;' . $style
61
+ ));
62
+ }
63
+
64
+ function _renderAdmin($data, $itemId, $slider, $slide) {
65
+ return NHtml::tag('div', array(
66
+ "style" => 'width: 100%; height: 100%; background: url(' . N2ImageHelper::fixed($data->getIfEmpty('image', '$system$/images/placeholder/video.png')) . ') no-repeat 50% 50%; background-size: cover;'
67
+ ));
68
+ }
69
+
70
+ function parseYoutubeUrl($youTubeUrl) {
71
+ preg_match('/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/', $youTubeUrl, $matches);
72
+
73
+ if ($matches && isset($matches[7]) && strlen($matches[7]) == 11) {
74
+ return $matches[7];
75
+ }
76
+
77
+ return $youTubeUrl;
78
+ }
79
+
80
+ function getValues() {
81
+ return array(
82
+ 'code' => 'qesNtYIBDfs',
83
+ 'youtubeurl' => 'https://www.youtube.com/watch?v=MKmIwHAFjSU',
84
+ 'image' => '$system$/images/placeholder/video.png',
85
+ 'autoplay' => 0,
86
+ 'defaultimage' => 'maxresdefault',
87
+ 'related' => '0',
88
+ 'vq' => 'default',
89
+ 'center' => 0,
90
+ 'loop' => 0
91
+ );
92
+ }
93
+
94
+ function getPath() {
95
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . $this->_identifier . DIRECTORY_SEPARATOR;
96
+ }
97
+
98
+ public function getFilled($slide, $data) {
99
+ $data->set('youtubeurl', $slide->fill($data->get('youtubeurl', '')));
100
+ return $data;
101
+ }
102
+ }
103
+
104
+ N2Plugin::addPlugin('ssitem', 'N2SSPluginItemYouTube');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/item/youtube/youtube/configuration.xml ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="youtube-item" label="Youtube item settings" hidetitle="1">
3
+ <param name="youtubeurl" type="text" label="Youtube url"
4
+ />
5
+ <param name="image" type="image" label="Cover image" fixed="1" style="width: 144px;"
6
+ />
7
+ <param name="start" type="number" label="Start time" default="0" style="width:36px;">
8
+ <unit>sec</unit>
9
+ </param>
10
+
11
+ <param name="volume" type="list" label="Volume" default="-1" translateable="1"
12
+ >
13
+ <option value="0">Mute</option>
14
+ <option value="0.25">25%</option>
15
+ <option value="0.5">50%</option>
16
+ <option value="0.75">75%</option>
17
+ <option value="1">100%</option>
18
+ <option value="-1">Default</option>
19
+ </param>
20
+ <param name="autoplay" type="onoff" label="Autoplay" default="0"
21
+ />
22
+ <param name="center" type="onoff" label="Centered" default="0"/>
23
+ <param name="loop" type="onoff" label="Loop" default="0"
24
+ />
25
+
26
+ <param name="theme" type="list" label="Theme" default="dark" translateable="1">
27
+ <option value="light">Light</option>
28
+ <option value="dark">Dark</option>
29
+ </param>
30
+ <param name="related" type="onoff" label="Show related videos" default="0"
31
+ />
32
+ <param name="vq" type="list" label="Video quality" default="default" translateable="1"
33
+ >
34
+ <option value="small">240p</option>
35
+ <option value="medium">360p</option>
36
+ <option value="large">480p</option>
37
+ <option value="hd720">720p</option>
38
+ <option value="hd1080">1080p</option>
39
+ <option value="highres">High res</option>
40
+ <option value="default">Default</option>
41
+ </param>
42
+ </params>
43
+ </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,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SSPluginResponsiveAuto extends N2PluginBase
4
+ {
5
+
6
+ private static $name = 'auto';
7
+
8
+ function onResponsiveList(&$list, &$labels) {
9
+ $list[self::$name] = $this->getPath();
10
+ $labels[self::$name] = n2_x('Auto', 'Slider responsive mode');
11
+ }
12
+
13
+ static function getPath() {
14
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . self::$name . DIRECTORY_SEPARATOR;
15
+ }
16
+ }
17
+
18
+ N2Plugin::addPlugin('ssresponsive', 'N2SSPluginResponsiveAuto');
19
+
20
+ class N2SSResponsiveAuto
21
+ {
22
+
23
+ private $params, $responsive;
24
+
25
+ public function __construct($params, $responsive) {
26
+ $this->params = $params;
27
+ $this->responsive = $responsive;
28
+
29
+ $this->responsive->scaleDown = intval($this->params->get('responsiveScaleDown', 1));
30
+ $this->responsive->scaleUp = intval($this->params->get('responsiveScaleUp', 0));
31
+
32
+
33
+ $this->responsive->minimumHeight = intval($this->params->get('responsiveSliderHeightMin', 0));
34
+ $this->responsive->maximumHeight = intval($this->params->get('responsiveSliderHeightMax', 3000));
35
+
36
+ $this->responsive->maximumSlideWidth = intval($this->params->get('responsiveSlideWidthMax', 3000));
37
+
38
+ }
39
+ }
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,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SSPluginResponsiveFullWidth extends N2PluginBase
4
+ {
5
+
6
+ private static $name = 'fullwidth';
7
+
8
+ function onResponsiveList(&$list, &$labels) {
9
+ $list[self::$name] = $this->getPath();
10
+ $labels[self::$name] = n2_x('Fullwidth', 'Slider responsive mode');
11
+ }
12
+
13
+ static function getPath() {
14
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . self::$name . DIRECTORY_SEPARATOR;
15
+ }
16
+ }
17
+
18
+ N2Plugin::addPlugin('ssresponsive', 'N2SSPluginResponsiveFullWidth');
19
+
20
+ class N2SSResponsiveFullWidth
21
+ {
22
+
23
+ private $params, $responsive;
24
+
25
+ /**
26
+ * @param $params
27
+ * @param $responsive N2SmartSliderFeatureResponsive
28
+ */
29
+ public function __construct($params, $responsive) {
30
+ $this->params = $params;
31
+ $this->responsive = $responsive;
32
+
33
+ $this->responsive->scaleDown = 1;
34
+ $this->responsive->scaleUp = 1;
35
+
36
+ $this->responsive->minimumHeight = intval($this->params->get('responsiveSliderHeightMin', 0));
37
+ $this->responsive->maximumHeight = intval($this->params->get('responsiveSliderHeightMax', 3000));
38
+
39
+
40
+ if ($this->params->get('responsiveSlideWidth', 1)) {
41
+ $this->responsive->maximumSlideWidth = intval($this->params->get('responsiveSlideWidthMax', 3000));
42
+ }
43
+
44
+ if ($this->params->get('responsiveSlideWidthDesktopLandscape', 1)) {
45
+ $this->responsive->maximumSlideWidthLandscape = intval($this->params->get('responsiveSlideWidthMaxDesktopLandscape', 1600));
46
+ }
47
+
48
+ if ($this->params->get('responsiveSlideWidthTablet', 0)) {
49
+ $this->responsive->maximumSlideWidthTablet = intval($this->params->get('responsiveSlideWidthMaxTablet', 980));
50
+ }
51
+
52
+ if ($this->params->get('responsiveSlideWidthTabletLandscape', 0)) {
53
+ $this->responsive->maximumSlideWidthTabletLandscape = intval($this->params->get('responsiveSlideWidthMaxTabletLandscape', 1200));
54
+ }
55
+
56
+ if ($this->params->get('responsiveSlideWidthMobile', 0)) {
57
+ $this->responsive->maximumSlideWidthMobile = intval($this->params->get('responsiveSlideWidthMaxMobile', 480));
58
+ }
59
+
60
+ if ($this->params->get('responsiveSlideWidthMobileLandscape', 0)) {
61
+ $this->responsive->maximumSlideWidthMobileLandscape = intval($this->params->get('responsiveSlideWidthMaxMobileLandscape', 780));
62
+ }
63
+
64
+ $this->responsive->maximumSlideWidthConstrainHeight = intval($this->params->get('responsiveSlideWidthConstrainHeight', 0));
65
+
66
+ $this->responsive->orientationMode = $this->params->get('responsiveSliderOrientation', 'width_and_height');
67
+
68
+ $this->responsive->forceFull = intval($this->params->get('responsiveForceFull', 1));
69
+ }
70
+ }
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.less'), $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,15 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="simpleslidertypeanimation" label="Animation settings">
3
+ <param type="group" label="Background animation">
4
+ <param type="backgroundanimation" name="background-animation" label="Animation(s)" default=""/>
5
+ <param type="list" name="background-animation-speed" label="Speed" default="default" translateable="1">
6
+ <option value="default">Default</option>
7
+ <option value="superSlow">Super slow</option>
8
+ <option value="slow">Slow</option>
9
+ <option value="normal">Normal</option>
10
+ <option value="fast">Fast</option>
11
+ <option value="superFast">Super fast</option>
12
+ </param>
13
+ </param>
14
+ </params>
15
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/slider.xml ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ </param>
9
+ <param type="group" label="Properties">
10
+ <param name="animation-duration" type="numberautocomplete" label="Duration" style="width:35px;" default="800" values="800,1500,2000">
11
+ <unit>ms</unit>
12
+ </param>
13
+ </param>
14
+ <param type="group" label="Background animation">
15
+ <param type="backgroundanimation" name="background-animation" label="Animation(s)" default=""/>
16
+ <param type="list" name="background-animation-speed" label="Speed" default="normal" translateable="1">
17
+ <option value="superSlow">Super slow</option>
18
+ <option value="slow">Slow</option>
19
+ <option value="normal">Normal</option>
20
+ <option value="fast">Fast</option>
21
+ <option value="superFast">Super fast</option>
22
+ </param>
23
+ </param>
24
+ </params>
25
+ </root>
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/type/simple/simple/type.php ADDED
@@ -0,0 +1,223 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SmartSliderTypeSimple extends N2SmartSliderType
4
+ {
5
+
6
+ private $backgroundAnimation = false;
7
+
8
+ public function getDefaults() {
9
+ return array(
10
+ 'background' => '',
11
+ 'background-size' => 'cover',
12
+ 'background-fixed' => 0,
13
+ 'padding' => '0|*|0|*|0|*|0',
14
+ 'border-width' => 0,
15
+ 'border-color' => '3E3E3Eff',
16
+ 'border-radius' => 0,
17
+ 'slider-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
+
35
+ N2JS::addFiles(N2Filesystem::translate(dirname(__FILE__) . "/gsap"), array(
36
+ "MainAnimationSimple.js",
37
+ "TypeSimple.js",
38
+ "ResponsiveSimple.js"
39
+ ), "smartslider-simple-type-frontend");
40
+
41
+ N2JS::addFiles(N2Filesystem::translate(dirname(__FILE__) . "/gsap"), array(
42
+ "BackgroundAnimation.js"
43
+ ), "smartslider-simple-type-frontend");
44
+
45
+ N2JS::addFiles(NEXTEND_SMARTSLIDER_ASSETS . "/js/animation", array(
46
+ "BackgroundAnimationAbstract.js",
47
+ 'Flux.js'
48
+ ), "smartslider-simple-type-frontend");
49
+
50
+ $background = $params->get('background');
51
+ $css = $params->get('slider-css');
52
+ if (!empty($background)) {
53
+ $css = 'background-image: url(' . N2ImageHelper::fixed($background) . ');';
54
+ }
55
+
56
+ $this->initBackgroundAnimation();
57
+ echo $this->openSliderElement();
58
+ ?>
59
+
60
+ <div class="n2-ss-slider-1" style="<?php echo $css; ?>">
61
+ <?php
62
+ echo $this->getBackgroundVideo($params);
63
+ ?>
64
+ <div class="n2-ss-slider-2">
65
+ <?php if ($this->backgroundAnimation): ?>
66
+ <div class="n2-ss-background-animation"></div>
67
+ <?php endif; ?>
68
+ <div class="n2-ss-slider-3">
69
+
70
+ <?php
71
+ $staticSlideEdit = false;
72
+ if ($this->slider->isAdmin && count($this->slider->staticSlides)) {
73
+ $staticSlideEdit = true;
74
+ }
75
+ echo $this->slider->staticHtml;
76
+ foreach ($this->slider->slides AS $i => $slide) {
77
+
78
+ echo NHtml::tag('div', $slide->attributes + array(
79
+ 'class' => 'n2-ss-slide n2-ss-canvas ' . $slide->classes,
80
+ 'style' => $slide->style
81
+ ), $slide->background . $slide->getHTML());
82
+ }
83
+ ?>
84
+ </div>
85
+ </div>
86
+ </div>
87
+ <?php
88
+ $this->widgets->echoRemainder();
89
+ echo NHtml::closeTag('div');
90
+
91
+ $this->javaScriptProperties['mainanimation'] = array(
92
+ 'type' => $params->get('animation'),
93
+ 'duration' => intval($params->get('animation-duration')),
94
+ 'delay' => intval($params->get('animation-delay')),
95
+ 'ease' => $params->get('animation-easing'),
96
+ 'parallax' => floatval($params->get('animation-parallax')),
97
+ 'shiftedBackgroundAnimation' => $params->get('animation-shifted-background-animation')
98
+ );
99
+ $this->javaScriptProperties['mainanimation']['shiftedBackgroundAnimation'] = 0;
100
+
101
+
102
+ $this->javaScriptProperties['carousel'] = intval($params->get('carousel'));
103
+
104
+ $this->javaScriptProperties['dynamicHeight'] = intval($params->get('dynamic-height', '0'));
105
+ $this->javaScriptProperties['dynamicHeight'] = 0;
106
+
107
+
108
+ N2Plugin::callPlugin('nextendslider', 'onNextendSliderProperties', array(&$this->javaScriptProperties));
109
+
110
+ N2JS::addFirstCode("new NextendSmartSliderSimple(n2('#{$this->slider->elementId}'), " . json_encode($this->javaScriptProperties) . ");");
111
+
112
+ echo NHtml::clear();
113
+ }
114
+
115
+ private function initBackgroundAnimation() {
116
+ $speed = $this->slider->params->get('background-animation-speed', 'normal');
117
+ $this->javaScriptProperties['bgAnimations'] = array(
118
+ 'global' => $this->parseBackgroundAnimations($this->slider->params->get('background-animation', '')),
119
+ 'speed' => $speed
120
+ );
121
+
122
+ $slides = array();
123
+ $hasCustom = false;
124
+
125
+ foreach ($this->slider->slides AS $i => $slide) {
126
+ $animation = $this->parseBackgroundAnimations($slide->parameters->get('background-animation'));
127
+ if ($animation) {
128
+ $slideSpeed = $slide->parameters->get('background-animation-speed', 'default');
129
+ if ($slideSpeed == 'default') {
130
+ $slideSpeed = $speed;
131
+ }
132
+ $slides[$i] = array(
133
+ 'animation' => $this->parseBackgroundAnimations($slide->parameters->get('background-animation')),
134
+ 'speed' => $slideSpeed
135
+ );
136
+ if ($slides[$i]) {
137
+ $hasCustom = true;
138
+ }
139
+ }
140
+ }
141
+ if ($hasCustom) {
142
+ $this->javaScriptProperties['bgAnimations']['slides'] = $slides;
143
+ } else if (!$this->javaScriptProperties['bgAnimations']['global']) {
144
+ $this->javaScriptProperties['bgAnimations'] = 0;
145
+ }
146
+ }
147
+
148
+ private function parseBackgroundAnimations($backgroundAnimation) {
149
+ $backgroundAnimations = array_unique(array_map('intval', explode('||', $backgroundAnimation)));
150
+
151
+ $jsProps = array();
152
+
153
+ if (count($backgroundAnimations)) {
154
+ N2Loader::import('libraries.backgroundanimation.storage', 'smartslider');
155
+
156
+ foreach ($backgroundAnimations AS $animationId) {
157
+ $animation = N2StorageSectionAdmin::getById($animationId, 'backgroundanimation');
158
+ if (isset($animation)) {
159
+ $jsProps[] = $animation['value']['data'];
160
+ }
161
+
162
+ }
163
+
164
+ if (count($jsProps)) {
165
+ $this->backgroundAnimation = true;
166
+ return $jsProps;
167
+ }
168
+ }
169
+ return 0;
170
+ }
171
+
172
+ private function getBackgroundVideo($params) {
173
+ $mp4 = $params->get('backgroundVideoMp4', '');
174
+ $webm = $params->get('backgroundVideoWebm', '');
175
+ $ogg = $params->get('backgroundVideoOgg', '');
176
+
177
+ if (empty($mp4) && empty($webm) && empty($ogg)) {
178
+ return '';
179
+ }
180
+
181
+ $sources = '';
182
+
183
+ if ($mp4) {
184
+ $sources .= NHtml::tag("source", array(
185
+ "src" => $mp4,
186
+ "type" => "video/mp4"
187
+ ));
188
+ }
189
+
190
+ if ($webm) {
191
+ $sources .= NHtml::tag("source", array(
192
+ "src" => $webm,
193
+ "type" => "video/webm"
194
+ ));
195
+ }
196
+
197
+ if ($ogg) {
198
+ $sources .= NHtml::tag("source", array(
199
+ "src" => $ogg,
200
+ "type" => "video/ogg"
201
+ ));
202
+ }
203
+
204
+ $attributes = array(
205
+ 'autoplay' => 1
206
+ );
207
+
208
+ if ($params->get('backgroundVideoMuted', 1)) {
209
+ $attributes['muted'] = 'muted';
210
+ }
211
+
212
+ if ($params->get('backgroundVideoLoop', 1)) {
213
+ $attributes['loop'] = 'loop';
214
+ }
215
+
216
+ return NHtml::tag('video', $attributes + array(
217
+ 'class' => 'n2-ss-slider-background-video',
218
+ 'data-mode' => $params->get('backgroundVideoMode', 'fill')
219
+ ), $sources);
220
+
221
+ }
222
+ }
223
+
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="eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwODAiLCJwYWRkaW5nIjoiM3wqfDN8KnwzfCp8M3wqfHB4IiwiYm94c2hhZG93IjoiMHwqfDB8KnwwfCp8MHwqfDAwMDAwMGZmIiwiYm9yZGVyIjoiMHwqfHNvbGlkfCp8MDAwMDAwZmYiLCJib3JkZXJyYWRpdXMiOiIzIiwiZXh0cmEiOiJtYXJnaW46IDVweDsifV19" 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,254 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderWidgetAbstract', 'smartslider');
4
+
5
+ class N2SSPluginWidgetArrowImage extends N2SSPluginWidgetAbstract
6
+ {
7
+
8
+ private static $key = 'widget-arrow-';
9
+
10
+ var $_name = 'image';
11
+
12
+ static function getDefaults() {
13
+ return array(
14
+ 'widget-arrow-responsive-desktop' => 1,
15
+ 'widget-arrow-responsive-tablet' => 0.7,
16
+ 'widget-arrow-responsive-mobile' => 0.5,
17
+ 'widget-arrow-previous-image' => '',
18
+ 'widget-arrow-previous' => '$ss$/plugins/widgetarrow/image/image/previous/normal.svg',
19
+ 'widget-arrow-previous-color' => 'ffffffcc',
20
+ 'widget-arrow-previous-hover' => 0,
21
+ 'widget-arrow-previous-hover-color' => 'ffffffcc',
22
+ 'widget-arrow-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiMjB8KnwxMHwqfDIwfCp8MTB8KnxweCIsImJveHNoYWRvdyI6IjB8KnwwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImJvcmRlciI6IjB8Knxzb2xpZHwqfDAwMDAwMGZmIiwiYm9yZGVycmFkaXVzIjoiNSIsImV4dHJhIjoiIn0seyJiYWNrZ3JvdW5kY29sb3IiOiIwMDAwMDBjZiJ9XX0=',
23
+ 'widget-arrow-previous-position-mode' => 'simple',
24
+ 'widget-arrow-previous-position-area' => 6,
25
+ 'widget-arrow-previous-position-offset' => 15,
26
+ 'widget-arrow-next-position-mode' => 'simple',
27
+ 'widget-arrow-next-position-area' => 7,
28
+ 'widget-arrow-next-position-offset' => 15,
29
+ 'widget-arrow-animation' => 'fade',
30
+ 'widget-arrow-mirror' => 1,
31
+ 'widget-arrow-next-image' => '',
32
+ 'widget-arrow-next' => '$ss$/plugins/widgetarrow/image/image/next/normal.svg',
33
+ 'widget-arrow-next-color' => 'ffffffcc',
34
+ 'widget-arrow-next-hover' => 0,
35
+ 'widget-arrow-next-hover-color' => 'ffffffcc'
36
+ );
37
+ }
38
+
39
+
40
+ function onArrowList(&$list) {
41
+ $list[$this->_name] = $this->getPath();
42
+ }
43
+
44
+ function getPath() {
45
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . 'image' . DIRECTORY_SEPARATOR;
46
+ }
47
+
48
+ static function getPositions(&$params) {
49
+ $positions = array();
50
+
51
+ if (self::isRenderable('previous', $params)) {
52
+ $positions['previous-position'] = array(
53
+ self::$key . 'previous-position-',
54
+ 'previous'
55
+ );
56
+ }
57
+
58
+ if (self::isRenderable('next', $params)) {
59
+ $positions['next-position'] = array(
60
+ self::$key . 'next-position-',
61
+ 'next'
62
+ );
63
+ }
64
+ return $positions;
65
+ }
66
+
67
+ private static function isRenderable($side, &$params) {
68
+ $arrow = $params->get(self::$key . $side . '-image');
69
+ if (empty($arrow)) {
70
+ $arrow = $params->get(self::$key . $side);
71
+ if ($arrow == -1) {
72
+ $arrow = null;
73
+ }
74
+ }
75
+ return !!$arrow;
76
+ }
77
+
78
+ static function render($slider, $id, $params) {
79
+ $html = '';
80
+
81
+ $previous = $params->get(self::$key . 'previous-image');
82
+ $previousColor = $params->get(self::$key . 'previous-color');
83
+ $previousHover = $params->get(self::$key . 'previous-hover');
84
+ $previousHoverColor = $params->get(self::$key . 'previous-hover-color');
85
+ if (empty($previous)) {
86
+ $previous = $params->get(self::$key . 'previous');
87
+
88
+ if ($previous == -1) {
89
+ $previous = null;
90
+ } elseif ($previous[0] != '$') {
91
+ $previous = N2Uri::pathToUri(dirname(__FILE__) . '/image/previous/' . $previous);
92
+ }
93
+ }
94
+
95
+ if ($params->get(self::$key . 'mirror')) {
96
+ $next = str_replace('image/previous/', 'image/next/', $previous);
97
+ $nextColor = $previousColor;
98
+ $nextHover = $previousHover;
99
+ $nextHoverColor = $previousHoverColor;
100
+ } else {
101
+ $next = $params->get(self::$key . 'next-image');
102
+ $nextColor = $params->get(self::$key . 'next-color');
103
+ $nextHover = $params->get(self::$key . 'next-hover');
104
+ $nextHoverColor = $params->get(self::$key . 'next-hover-color');
105
+ if (empty($next)) {
106
+ $next = $params->get(self::$key . 'next');
107
+ if ($next == -1) {
108
+ $next = null;
109
+ } elseif ($next[0] != '$') {
110
+ $next = N2Uri::pathToUri(dirname(__FILE__) . '/image/next/' . $next);
111
+ }
112
+ }
113
+ }
114
+ if ($previous || $next) {
115
+
116
+ N2LESS::addFile(N2Filesystem::translate(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'image' . DIRECTORY_SEPARATOR . 'style.less'), $slider->cacheId, array(
117
+ "sliderid" => $slider->elementId
118
+ ), NEXTEND_SMARTSLIDER_ASSETS . '/less' . NDS);
119
+
120
+ N2JS::addFile(N2Filesystem::translate(dirname(__FILE__) . '/image/arrow.js'), $id);
121
+
122
+ list($displayClass, $displayAttributes) = self::getDisplayAttributes($params, self::$key);
123
+
124
+ $animation = $params->get(self::$key . 'animation');
125
+
126
+ if ($animation == 'none' || $animation == 'fade') {
127
+ $styleClass = N2StyleRenderer::render($params->get(self::$key . 'style'), 'heading', $slider->elementId, 'div#' . $slider->elementId . ' ');
128
+ } else {
129
+ $styleClass = N2StyleRenderer::render($params->get(self::$key . 'style'), 'heading-active', $slider->elementId, 'div#' . $slider->elementId . ' ');
130
+ }
131
+
132
+ if ($previous) {
133
+ $html .= self::getHTML($id, $params, $animation, 'previous', $previous, $displayClass, $displayAttributes, $styleClass, $previousColor, $previousHover, $previousHoverColor);
134
+ }
135
+
136
+ if ($next) {
137
+ $html .= self::getHTML($id, $params, $animation, 'next', $next, $displayClass, $displayAttributes, $styleClass, $nextColor, $nextHover, $nextHoverColor);
138
+ }
139
+
140
+ N2JS::addInline('new NextendSmartSliderWidgetArrowImage("' . $id . '", ' . floatval($params->get(self::$key . 'responsive-desktop')) . ', ' . floatval($params->get(self::$key . 'responsive-tablet')) . ', ' . floatval($params->get(self::$key . 'responsive-mobile')) . ');');
141
+ }
142
+
143
+ return $html;
144
+ }
145
+
146
+ private static function getHTML($id, &$params, $animation, $side, $image, $displayClass, $displayAttributes, $styleClass, $color = 'ffffffcc', $hover = 0, $hoverColor = 'ffffffcc') {
147
+
148
+ list($style, $attributes) = self::getPosition($params, self::$key . $side . '-');
149
+
150
+ $imageHover = null;
151
+
152
+ $ext = pathinfo($image, PATHINFO_EXTENSION);
153
+ if (substr($image, 0, 1) == '$' && $ext == 'svg') {
154
+ list($color, $opacity) = N2Color::colorToSVG($color);
155
+ $content = N2Filesystem::readFile(N2ImageHelper::fixed($image, true));
156
+ $image = 'data:image/svg+xml;base64,' . base64_encode(str_replace(array(
157
+ 'fill="#FFF"',
158
+ 'opacity="1"'
159
+ ), array(
160
+ 'fill="#' . $color . '"',
161
+ 'opacity="' . $opacity . '"'
162
+ ), $content));
163
+
164
+ if ($hover) {
165
+ list($color, $opacity) = N2Color::colorToSVG($hoverColor);
166
+ $imageHover = 'data:image/svg+xml;base64,' . base64_encode(str_replace(array(
167
+ 'fill="#FFF"',
168
+ 'opacity="1"'
169
+ ), array(
170
+ 'fill="#' . $color . '"',
171
+ 'opacity="' . $opacity . '"'
172
+ ), $content));
173
+ }
174
+ } else {
175
+ $image = N2ImageHelper::fixed($image);
176
+ }
177
+
178
+ if ($imageHover === null) {
179
+ $image = NHtml::image($image, 'arrow');
180
+ } else {
181
+ $image = NHtml::image($image, 'arrow', array('class' => 'n2-arrow-normal-img')) . NHtml::image($imageHover, 'arrow', array('class' => 'n2-arrow-hover-img'));
182
+ }
183
+
184
+ if ($animation == 'none' || $animation == 'fade') {
185
+ return NHtml::tag('div', $displayAttributes + $attributes + array(
186
+ 'id' => $id . '-arrow-' . $side,
187
+ 'class' => $displayClass . $styleClass . 'nextend-arrow n2-ib nextend-arrow-' . $side . ' nextend-arrow-animated-' . $animation,
188
+ 'style' => $style
189
+ ), $image);
190
+ }
191
+
192
+
193
+ return NHtml::tag('div', $displayAttributes + $attributes + array(
194
+ 'id' => $id . '-arrow-' . $side,
195
+ 'class' => $displayClass . 'nextend-arrow n2-ib nextend-arrow-animated nextend-arrow-animated-' . $animation . ' nextend-arrow-' . $side,
196
+ 'style' => $style
197
+ ), NHtml::tag('div', array(
198
+ 'class' => $styleClass . ' n2-resize'
199
+ ), $image) . NHtml::tag('div', array(
200
+ 'class' => $styleClass . ' n2-active n2-resize'
201
+ ), $image));
202
+ }
203
+
204
+ public static function prepareExport($export, $params) {
205
+ $export->addImage($params->get(self::$key . 'previous-image', ''));
206
+ $export->addImage($params->get(self::$key . 'next-image', ''));
207
+
208
+ $export->addVisual($params->get(self::$key . 'style'));
209
+ }
210
+
211
+ public static function prepareImport($import, $params) {
212
+
213
+ $params->set(self::$key . 'previous-image', $import->fixImage($params->get(self::$key . 'previous-image', '')));
214
+ $params->set(self::$key . 'next-image', $import->fixImage($params->get(self::$key . 'next-image', '')));
215
+
216
+ $params->set(self::$key . 'style', $import->fixSection($params->get(self::$key . 'style', '')));
217
+ }
218
+ }
219
+
220
+
221
+ class N2SSPluginWidgetArrowImageSmallRectangle extends N2SSPluginWidgetArrowImage
222
+ {
223
+
224
+ var $_name = 'imageSmallRectangle';
225
+
226
+ static function getDefaults() {
227
+ return array_merge(N2SSPluginWidgetArrowImage::getDefaults(), array(
228
+ 'widget-arrow-responsive-desktop' => 0.8,
229
+ 'widget-arrow-previous' => '$ss$/plugins/widgetarrow/image/image/previous/full.svg',
230
+ 'widget-arrow-next' => '$ss$/plugins/widgetarrow/image/image/next/full.svg',
231
+ 'widget-arrow-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiMnwqfDJ8KnwyfCp8MnwqfHB4IiwiYm94c2hhZG93IjoiMHwqfDB8KnwwfCp8MHwqfDAwMDAwMGZmIiwiYm9yZGVyIjoiMHwqfHNvbGlkfCp8MDAwMDAwZmYiLCJib3JkZXJyYWRpdXMiOiIzIiwiZXh0cmEiOiIifSx7ImJhY2tncm91bmRjb2xvciI6IjAxYWRkM2Q5In1dfQ=='
232
+ ));
233
+ }
234
+ }
235
+
236
+ N2Plugin::addPlugin('sswidgetarrow', 'N2SSPluginWidgetArrowImageSmallRectangle');
237
+
238
+
239
+ class N2SSPluginWidgetArrowImageEmpty extends N2SSPluginWidgetArrowImage
240
+ {
241
+
242
+ var $_name = 'imageEmpty';
243
+
244
+ static function getDefaults() {
245
+ return array_merge(N2SSPluginWidgetArrowImage::getDefaults(), array(
246
+ 'widget-arrow-previous' => '$ss$/plugins/widgetarrow/image/image/previous/thin-horizontal.svg',
247
+ 'widget-arrow-next' => '$ss$/plugins/widgetarrow/image/image/next/thin-horizontal.svg',
248
+ 'widget-arrow-style' => ''
249
+ ));
250
+ }
251
+ }
252
+
253
+ N2Plugin::addPlugin('sswidgetarrow', 'N2SSPluginWidgetArrowImageEmpty');
254
+
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,149 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderWidgetAbstract', 'smartslider');
4
+
5
+ class N2SSPluginWidgetAutoplayImage extends N2SSPluginWidgetAbstract
6
+ {
7
+
8
+ private static $key = 'widget-autoplay-';
9
+
10
+ var $_name = 'image';
11
+
12
+ static function getDefaults() {
13
+ return array(
14
+ 'widget-autoplay-responsive-desktop' => 1,
15
+ 'widget-autoplay-responsive-tablet' => 0.7,
16
+ 'widget-autoplay-responsive-mobile' => 0.5,
17
+ 'widget-autoplay-play-image' => '',
18
+ 'widget-autoplay-play-color' => 'ffffffcc',
19
+ 'widget-autoplay-play' => '$ss$/plugins/widgetautoplay/image/image/play/small-light.svg',
20
+ 'widget-autoplay-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiMTB8KnwxMHwqfDEwfCp8MTB8KnxweCIsImJveHNoYWRvdyI6IjB8KnwwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImJvcmRlciI6IjB8Knxzb2xpZHwqfDAwMDAwMGZmIiwiYm9yZGVycmFkaXVzIjoiMyIsImV4dHJhIjoiIn0seyJiYWNrZ3JvdW5kY29sb3IiOiIwMDAwMDBhYiJ9XX0=',
21
+ 'widget-autoplay-position-mode' => 'simple',
22
+ 'widget-autoplay-position-area' => 4,
23
+ 'widget-autoplay-position-offset' => 15,
24
+ 'widget-autoplay-mirror' => 1,
25
+ 'widget-autoplay-pause-image' => '',
26
+ 'widget-autoplay-pause-color' => 'ffffffcc',
27
+ 'widget-autoplay-pause' => '$ss$/plugins/widgetautoplay/image/image/pause/small-light.svg'
28
+ );
29
+ }
30
+
31
+ function onAutoplayList(&$list) {
32
+ $list[$this->_name] = $this->getPath();
33
+ }
34
+
35
+ function getPath() {
36
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . 'image' . DIRECTORY_SEPARATOR;
37
+ }
38
+
39
+ static function getPositions(&$params) {
40
+ $positions = array();
41
+
42
+ $positions['autoplay-position'] = array(
43
+ self::$key . 'position-',
44
+ 'autoplay'
45
+ );
46
+ return $positions;
47
+ }
48
+
49
+ static function render($slider, $id, $params) {
50
+ $html = '';
51
+
52
+ $play = $params->get(self::$key . 'play-image');
53
+ $playColor = $params->get(self::$key . 'play-color');
54
+ if (empty($play)) {
55
+ $play = $params->get(self::$key . 'play');
56
+ if ($play == -1) {
57
+ $play = null;
58
+ } elseif ($play[0] != '$') {
59
+ $play = N2Uri::pathToUri(dirname(__FILE__) . '/image/play/' . $play);
60
+ }
61
+ }
62
+
63
+ if ($params->get(self::$key . 'mirror')) {
64
+ $pause = str_replace('image/play/', 'image/pause/', $play);
65
+ $pauseColor = $playColor;
66
+ } else {
67
+ $pause = $params->get(self::$key . 'pause-image');
68
+ $pauseColor = $params->get(self::$key . 'pause-color');
69
+ if (empty($pause)) {
70
+ $pause = $params->get(self::$key . 'pause');
71
+ if ($pause == -1) {
72
+ $pause = null;
73
+ } elseif ($pause[0] != '$') {
74
+ $pause = N2Uri::pathToUri(dirname(__FILE__) . '/image/pause/' . $pause);
75
+ }
76
+ }
77
+ }
78
+
79
+ $ext = pathinfo($play, PATHINFO_EXTENSION);
80
+ if (substr($play, 0, 1) == '$' && $ext == 'svg') {
81
+ list($color, $opacity) = N2Color::colorToSVG($playColor);
82
+ $play = 'data:image/svg+xml;base64,' . base64_encode(str_replace(array(
83
+ 'fill="#FFF"',
84
+ 'opacity="1"'
85
+ ), array(
86
+ 'fill="#' . $color . '"',
87
+ 'opacity="' . $opacity . '"'
88
+ ), N2Filesystem::readFile(N2ImageHelper::fixed($play, true))));
89
+ } else {
90
+ $play = N2ImageHelper::fixed($play);
91
+ }
92
+
93
+ $ext = pathinfo($pause, PATHINFO_EXTENSION);
94
+ if (substr($pause, 0, 1) == '$' && $ext == 'svg') {
95
+ list($color, $opacity) = N2Color::colorToSVG($pauseColor);
96
+ $pause = 'data:image/svg+xml;base64,' . base64_encode(str_replace(array(
97
+ 'fill="#FFF"',
98
+ 'opacity="1"'
99
+ ), array(
100
+ 'fill="#' . $color . '"',
101
+ 'opacity="' . $opacity . '"'
102
+ ), N2Filesystem::readFile(N2ImageHelper::fixed($pause, true))));
103
+ } else {
104
+ $pause = N2ImageHelper::fixed($pause);
105
+ }
106
+
107
+ if ($play && $pause) {
108
+
109
+ N2CSS::addFile(N2Filesystem::translate(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'image' . DIRECTORY_SEPARATOR . 'style.css'), $id);
110
+
111
+ N2JS::addFile(N2Filesystem::translate(dirname(__FILE__) . '/image/autoplay.js'), $id);
112
+
113
+ list($displayClass, $displayAttributes) = self::getDisplayAttributes($params, self::$key);
114
+
115
+ $styleClass = N2StyleRenderer::render($params->get(self::$key . 'style'), 'heading', $slider->elementId, 'div#' . $slider->elementId . ' ');
116
+
117
+
118
+ list($style, $attributes) = self::getPosition($params, self::$key);
119
+
120
+
121
+ N2JS::addInline('new NextendSmartSliderWidgetAutoplayImage("' . $id . '", ' . floatval($params->get(self::$key . 'responsive-desktop')) . ', ' . floatval($params->get(self::$key . 'responsive-tablet')) . ', ' . floatval($params->get(self::$key . 'responsive-mobile')) . ');');
122
+
123
+ $html = NHtml::tag('div', $displayAttributes + $attributes + array(
124
+ 'class' => $displayClass . $styleClass . 'nextend-autoplay nextend-autoplay-image',
125
+ 'style' => $style
126
+ ), NHtml::image($play, '', array('class' => 'nextend-autoplay-play')) . NHtml::image($pause, '', array('class' => 'nextend-autoplay-pause')));
127
+ }
128
+
129
+ return $html;
130
+ }
131
+
132
+ public static function prepareExport($export, $params) {
133
+ $export->addImage($params->get(self::$key . 'play-image', ''));
134
+ $export->addImage($params->get(self::$key . 'pause-image', ''));
135
+
136
+ $export->addVisual($params->get(self::$key . 'style'));
137
+ }
138
+
139
+ public static function prepareImport($import, $params) {
140
+
141
+ $params->set(self::$key . 'play-image', $import->fixImage($params->get(self::$key . 'play-image', '')));
142
+ $params->set(self::$key . 'pause-image', $import->fixImage($params->get(self::$key . 'pause-image', '')));
143
+
144
+ $params->set(self::$key . 'style', $import->fixSection($params->get(self::$key . 'style', '')));
145
+ }
146
+
147
+ }
148
+
149
+ 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,142 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderWidgetAbstract', 'smartslider');
4
+ N2Loader::import('libraries.image.color');
5
+
6
+ class N2SSPluginWidgetBarHorizontal extends N2SSPluginWidgetAbstract
7
+ {
8
+
9
+ private static $key = 'widget-bar-';
10
+
11
+ var $_name = 'horizontal';
12
+
13
+ static function getDefaults() {
14
+ return array(
15
+ 'widget-bar-position-mode' => 'simple',
16
+ 'widget-bar-position-area' => 10,
17
+ 'widget-bar-position-offset' => 30,
18
+ 'widget-bar-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiNXwqfDIwfCp8NXwqfDIwfCp8cHgiLCJib3hzaGFkb3ciOiIwfCp8MHwqfDB8KnwwfCp8MDAwMDAwZmYiLCJib3JkZXIiOiIwfCp8c29saWR8KnwwMDAwMDBmZiIsImJvcmRlcnJhZGl1cyI6IjQwIiwiZXh0cmEiOiIifV19',
19
+ 'widget-bar-font-title' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siY29sb3IiOiJmZmZmZmZmZiIsInNpemUiOiIxNHx8cHgiLCJ0c2hhZG93IjoiMHwqfDB8KnwwfCp8MDAwMDAwYzciLCJhZm9udCI6Ik1vbnRzZXJyYXQiLCJsaW5laGVpZ2h0IjoiMS4zIiwiYm9sZCI6MCwiaXRhbGljIjowLCJ1bmRlcmxpbmUiOjAsImFsaWduIjoibGVmdCIsImV4dHJhIjoidmVydGljYWwtYWxpZ246IG1pZGRsZTsifSx7ImNvbG9yIjoiZmMyODI4ZmYiLCJhZm9udCI6Imdvb2dsZShAaW1wb3J0IHVybChodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1SYWxld2F5KTspLEFyaWFsIiwic2l6ZSI6IjI1fHxweCJ9LHt9XX0=',
20
+ 'widget-bar-show-description' => 1,
21
+ 'widget-bar-font-description' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siY29sb3IiOiJmZmZmZmZmZiIsInNpemUiOiIxNHx8cHgiLCJ0c2hhZG93IjoiMHwqfDB8KnwwfCp8MDAwMDAwYzciLCJhZm9udCI6Ik1vbnRzZXJyYXQiLCJsaW5laGVpZ2h0IjoiMS4zIiwiYm9sZCI6MCwiaXRhbGljIjoxLCJ1bmRlcmxpbmUiOjAsImFsaWduIjoibGVmdCIsImV4dHJhIjoidmVydGljYWwtYWxpZ246IG1pZGRsZTsifSx7ImNvbG9yIjoiZmMyODI4ZmYiLCJhZm9udCI6Imdvb2dsZShAaW1wb3J0IHVybChodHRwOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1SYWxld2F5KTspLEFyaWFsIiwic2l6ZSI6IjI1fHxweCJ9LHt9XX0=',
22
+ 'widget-bar-width' => '100%',
23
+ 'widget-bar-full-width' => 0,
24
+ 'widget-bar-overlay' => 0,
25
+ 'widget-bar-separator' => ' - ',
26
+ 'widget-bar-align' => 'center',
27
+ 'widget-bar-animate' => 0
28
+ );
29
+ }
30
+
31
+ function onBarList(&$list) {
32
+ $list[$this->_name] = $this->getPath();
33
+ }
34
+
35
+ function getPath() {
36
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . 'horizontal' . DIRECTORY_SEPARATOR;
37
+ }
38
+
39
+ static function getPositions(&$params) {
40
+ $positions = array();
41
+
42
+ $positions['bar-position'] = array(
43
+ self::$key . 'position-',
44
+ 'bar'
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
+ N2CSS::addFile(N2Filesystem::translate(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'horizontal' . DIRECTORY_SEPARATOR . 'style.css'), $id);
59
+ N2JS::addFile(N2Filesystem::translate(dirname(__FILE__) . '/horizontal/bar.js'), $id);
60
+
61
+ list($displayClass, $displayAttributes) = self::getDisplayAttributes($params, self::$key);
62
+
63
+ $styleClass = N2StyleRenderer::render($params->get(self::$key . 'style'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ');
64
+ $fontTitle = N2FontRenderer::render($params->get(self::$key . 'font-title'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ', $slider->fontSize);
65
+ $fontDescription = N2FontRenderer::render($params->get(self::$key . 'font-description'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ', $slider->fontSize);
66
+
67
+ list($style, $attributes) = self::getPosition($params, self::$key);
68
+ $attributes['data-offset'] = $params->get(self::$key . 'position-offset');
69
+
70
+ $style .= 'text-align: ' . $params->get(self::$key . 'align') . ';';
71
+
72
+ $width = $params->get(self::$key . 'width');
73
+ if (is_numeric($width) || substr($width, -1) == '%' || substr($width, -2) == 'px') {
74
+ $style .= 'width:' . $width . ';';
75
+ } else {
76
+ $attributes['data-sswidth'] = $width;
77
+ }
78
+
79
+ $innerStyle = '';
80
+ if (!$params->get(self::$key . 'full-width')) {
81
+ $innerStyle = 'display: inline-block;';
82
+ }
83
+
84
+ $separator = $params->get(self::$key . 'separator');
85
+ $showDescription = intval($params->get(self::$key . 'show-description'));
86
+ $slides = array();
87
+ for ($i = 0; $i < count($slider->slides); $i++) {
88
+ $slides[$i] = NHtml::tag('span', array('class' => $fontTitle), $slider->slides[$i]->getTitle());
89
+
90
+ $description = $slider->slides[$i]->getDescription();
91
+ if ($showDescription && !empty($description)) {
92
+ $slides[$i] .= NHtml::tag('span', array('class' => $fontDescription), $separator . $description);
93
+ }
94
+ }
95
+
96
+ $parameters = array(
97
+ 'overlay' => $params->get(self::$key . 'position-mode') != 'simple' || $params->get(self::$key . 'overlay'),
98
+ 'area' => intval($params->get(self::$key . 'position-area')),
99
+ 'animate' => intval($params->get(self::$key . 'animate'))
100
+ );
101
+
102
+ N2JS::addInline('new NextendSmartSliderWidgetBarHorizontal("' . $id . '", ' . json_encode($slides) . ', ' . json_encode($parameters) . ');');
103
+
104
+ return NHtml::tag("div", $displayAttributes + $attributes + array(
105
+ "class" => $displayClass . "nextend-bar nextend-bar-horizontal",
106
+ "style" => $style
107
+ ), NHtml::tag("div", array(
108
+ "class" => $styleClass,
109
+ "style" => $innerStyle
110
+ ), $slides[$slider->_activeSlide]));
111
+ }
112
+
113
+ public static function prepareExport($export, $params) {
114
+ $export->addVisual($params->get(self::$key . 'style'));
115
+ $export->addVisual($params->get(self::$key . 'font-title'));
116
+ $export->addVisual($params->get(self::$key . 'font-description'));
117
+ }
118
+
119
+ public static function prepareImport($import, $params) {
120
+
121
+ $params->set(self::$key . 'style', $import->fixSection($params->get(self::$key . 'style', '')));
122
+ $params->set(self::$key . 'font-title', $import->fixSection($params->get(self::$key . 'font-title', '')));
123
+ $params->set(self::$key . 'font-description', $import->fixSection($params->get(self::$key . 'font-description', '')));
124
+ }
125
+ }
126
+
127
+ class N2SSPluginWidgetBarHorizontalFull extends N2SSPluginWidgetBarHorizontal
128
+ {
129
+
130
+ var $_name = 'horizontalFull';
131
+
132
+ static function getDefaults() {
133
+ return array_merge(N2SSPluginWidgetBarHorizontal::getDefaults(), array(
134
+ 'widget-bar-position-offset' => 0,
135
+ 'widget-bar-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiMjB8KnwyMHwqfDIwfCp8MjB8KnxweCIsImJveHNoYWRvdyI6IjB8KnwwfCp8MHwqfDB8KnwwMDAwMDBmZiIsImJvcmRlciI6IjB8Knxzb2xpZHwqfDAwMDAwMGZmIiwiYm9yZGVycmFkaXVzIjoiMCIsImV4dHJhIjoiIn1dfQ==',
136
+ 'widget-bar-full-width' => 1,
137
+ 'widget-bar-align' => 'left'
138
+ ));
139
+ }
140
+ }
141
+
142
+ N2Plugin::addPlugin('sswidgetbar', 'N2SSPluginWidgetBarHorizontalFull');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetbar/horizontal/horizontal/config.xml ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ </params>
21
+ </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,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderWidgetAbstract', 'smartslider');
4
+ N2Loader::import('libraries.image.color');
5
+
6
+ class N2SSPluginWidgetBulletTransition extends N2SSPluginWidgetAbstract
7
+ {
8
+
9
+ var $_name = 'transition';
10
+
11
+ private static $key = 'widget-bullet-';
12
+
13
+ static function getDefaults() {
14
+ return array(
15
+ 'widget-bullet-position-mode' => 'simple',
16
+ 'widget-bullet-position-area' => 10,
17
+ 'widget-bullet-position-offset' => 10,
18
+ 'widget-bullet-action' => 'click',
19
+ 'widget-bullet-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwYWIiLCJwYWRkaW5nIjoiNXwqfDV8Knw1fCp8NXwqfHB4IiwiYm94c2hhZG93IjoiMHwqfDB8KnwwfCp8MHwqfDAwMDAwMGZmIiwiYm9yZGVyIjoiMHwqfHNvbGlkfCp8MDAwMDAwZmYiLCJib3JkZXJyYWRpdXMiOiI1MCIsImV4dHJhIjoibWFyZ2luOiA0cHg7In0seyJiYWNrZ3JvdW5kY29sb3IiOiIwMGMxYzRmZiJ9XX0=',
20
+ 'widget-bullet-bar' => '',
21
+ 'widget-bullet-align' => 'center',
22
+ 'widget-bullet-orientation' => 'auto',
23
+ 'widget-bullet-bar-full-size' => 0,
24
+ 'widget-bullet-overlay' => 0,
25
+ 'widget-bullet-thumbnail-show-image' => 0,
26
+ 'widget-bullet-thumbnail-width' => 100,
27
+ 'widget-bullet-thumbnail-width' => 60,
28
+ 'widget-bullet-thumbnail-style' => 'eyJuYW1lIjoiU3RhdGljIiwiZGF0YSI6W3siYmFja2dyb3VuZGNvbG9yIjoiMDAwMDAwODAiLCJwYWRkaW5nIjoiM3wqfDN8KnwzfCp8M3wqfHB4IiwiYm94c2hhZG93IjoiMHwqfDB8KnwwfCp8MHwqfDAwMDAwMGZmIiwiYm9yZGVyIjoiMHwqfHNvbGlkfCp8MDAwMDAwZmYiLCJib3JkZXJyYWRpdXMiOiIzIiwiZXh0cmEiOiJtYXJnaW46IDVweDsifV19',
29
+ 'widget-bullet-thumbnail-side' => 'before'
30
+ );
31
+ }
32
+
33
+ function onBulletList(&$list) {
34
+ $list[$this->_name] = $this->getPath();
35
+ }
36
+
37
+ function getPath() {
38
+ return dirname(__FILE__) . DIRECTORY_SEPARATOR . 'transition' . DIRECTORY_SEPARATOR;
39
+ }
40
+
41
+ static function getPositions(&$params) {
42
+ $positions = array();
43
+ $positions['bullet-position'] = array(
44
+ self::$key . 'position-',
45
+ 'bullet'
46
+ );
47
+ return $positions;
48
+ }
49
+
50
+ /**
51
+ * @param $slider N2SmartSliderAbstract
52
+ * @param $id
53
+ * @param $params
54
+ *
55
+ * @return string
56
+ */
57
+ static function render($slider, $id, $params) {
58
+
59
+ N2JS::addFile(N2Filesystem::translate(dirname(__FILE__) . '/transition/bullet.js'), $id);
60
+ N2CSS::addFile(N2Filesystem::translate(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'transition' . DIRECTORY_SEPARATOR . 'style.css'), $id);
61
+
62
+ list($displayClass, $displayAttributes) = self::getDisplayAttributes($params, self::$key);
63
+
64
+ $bulletStyle = N2StyleRenderer::render($params->get(self::$key . 'style'), 'dot', $slider->elementId, 'div#' . $slider->elementId . ' ');
65
+ $barStyle = N2StyleRenderer::render($params->get(self::$key . 'bar'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ');
66
+
67
+ list($style, $attributes) = self::getPosition($params, self::$key);
68
+ $attributes['data-offset'] = $params->get(self::$key . 'position-offset', 0);
69
+
70
+ $dots = array();
71
+ $i = 1;
72
+ foreach ($slider->slides AS $slide) {
73
+ $dots[] = NHtml::tag('div', array(
74
+ 'class' => $bulletStyle . ($slide->isActive() ? 'n2-active' : ''),
75
+ ), '');
76
+
77
+ $i++;
78
+ }
79
+
80
+ $orientation = self::getOrientationByPosition($params->get(self::$key . 'position-mode'), $params->get(self::$key . 'position-area'), $params->get(self::$key . 'orientation'));
81
+ $html = '';
82
+ switch ($orientation) {
83
+ case 'vertical':
84
+ $html .= implode('<br>', $dots);
85
+ break;
86
+ default:
87
+ $html .= implode('', $dots);
88
+ }
89
+
90
+ $parameters = array(
91
+ 'overlay' => $params->get(self::$key . 'position-mode') != 'simple' || $params->get(self::$key . 'overlay'),
92
+ 'area' => intval($params->get(self::$key . 'position-area'))
93
+ );
94
+
95
+ $thumbnails = array();
96
+ if ($params->get(self::$key . 'thumbnail-show-image')) {
97
+ foreach ($slider->slides AS $slide) {
98
+ $thumbnails[] = $slide->getThumbnail();
99
+ }
100
+ $parameters['thumbnailWidth'] = intval($params->get(self::$key . 'thumbnail-width'));
101
+ $parameters['thumbnailHeight'] = intval($params->get(self::$key . 'thumbnail-height'));
102
+ $parameters['thumbnailStyle'] = N2StyleRenderer::render($params->get(self::$key . 'thumbnail-style'), 'simple', $slider->elementId, '');
103
+ $side = $params->get(self::$key . 'thumbnail-side');
104
+
105
+
106
+ if ($side == 'before') {
107
+ if ($orientation == 'vertical') {
108
+ $position = 'left';
109
+ } else {
110
+ $position = 'top';
111
+ }
112
+ } else {
113
+ if ($orientation == 'vertical') {
114
+ $position = 'right';
115
+ } else {
116
+ $position = 'bottom';
117
+ }
118
+ }
119
+ $parameters['thumbnailPosition'] = $position;
120
+ }
121
+ $parameters['thumbnails'] = $thumbnails;
122
+ $parameters['action'] = $params->get(self::$key . 'action');
123
+ $parameters['numeric'] = 0;
124
+
125
+ N2JS::addInline('new NextendSmartSliderWidgetBulletTransition("' . $id . '", ' . json_encode($parameters) . ');');
126
+
127
+ $fullSize = intval($params->get(self::$key . 'bar-full-size'));
128
+ if ($fullSize) {
129
+ $displayClass .= "n2-bullet-bar-full-size ";
130
+ }
131
+
132
+ return NHtml::tag("div", $displayAttributes + $attributes + array(
133
+ "class" => $displayClass . $barStyle . "nextend-bullet-bar nextend-bullet-bar-" . $orientation,
134
+ "style" => "text-align: " . $params->get(self::$key . 'align') . ";" . $style
135
+ ), $html);
136
+ }
137
+
138
+ public static function prepareExport($export, $params) {
139
+ $export->addVisual($params->get(self::$key . 'style'));
140
+ $export->addVisual($params->get(self::$key . 'bar'));
141
+ }
142
+
143
+ public static function prepareImport($import, $params) {
144
+
145
+ $params->set(self::$key . 'style', $import->fixSection($params->get(self::$key . 'style')));
146
+ $params->set(self::$key . 'bar', $import->fixSection($params->get(self::$key . 'bar')));
147
+ }
148
+
149
+ }
150
+
151
+ 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,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ N2JS::addFile(N2Filesystem::translate(dirname(__FILE__) . '/shadow/shadow.js'), $id);
54
+
55
+ list($displayClass, $displayAttributes) = self::getDisplayAttributes($params, self::$key);
56
+
57
+ list($style, $attributes) = self::getPosition($params, self::$key);
58
+
59
+ $width = $params->get(self::$key . 'width');
60
+ if (is_numeric($width) || substr($width, -1) == '%' || substr($width, -2) == 'px') {
61
+ $style .= 'width:' . $width . ';';
62
+ } else {
63
+ $attributes['data-sswidth'] = $width;
64
+ }
65
+
66
+ $parameters = array(
67
+ 'overlay' => $params->get(self::$key . 'position-mode') != 'simple' || 0,
68
+ 'area' => intval($params->get(self::$key . 'position-area'))
69
+ );
70
+
71
+ N2JS::addInline('new NextendSmartSliderWidgetShadow("' . $id . '", ' . json_encode($parameters) . ');');
72
+
73
+
74
+ return NHtml::tag('div', $displayAttributes + $attributes + array(
75
+ 'class' => $displayClass . "nextend-shadow",
76
+ 'style' => $style
77
+ ), NHtml::image(N2ImageHelper::fixed($shadow), '', array('style' => 'display: block; width:100%;max-width:none;','class'=>'nextend-shadow-image')));
78
+ }
79
+
80
+ public static function prepareExport($export, $params) {
81
+ $export->addImage($params->get(self::$key . 'shadow-image', ''));
82
+ }
83
+
84
+ public static function prepareImport($import, $params) {
85
+
86
+ $params->set(self::$key . 'shadow-image', $import->fixImage($params->get(self::$key . 'shadow-image', '')));
87
+ }
88
+ }
89
+
90
+ 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,291 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ N2Loader::import('libraries.plugins.N2SliderWidgetAbstract', 'smartslider');
4
+ N2Loader::import('libraries.image.color');
5
+
6
+ class N2SSPluginWidgetThumbnailDefault extends N2SSPluginWidgetAbstract
7
+ {
8
+
9
+ var $_name = 'default';
10
+
11
+ private static $key = 'widget-thumbnail-';
12
+
13
+ static function getDefaults() {
14
+ return array(
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
+ /**
56
+ * @param $slider N2SmartSliderAbstract
57
+ * @param $id
58
+ * @param $params
59
+ *
60
+ * @return string
61
+ */
62
+ static function render($slider, $id, $params) {
63
+ $showImage = intval($params->get(self::$key . 'show-image'));
64
+ $showTitle = intval($params->get(self::$key . 'title'));
65
+ $showDescription = intval($params->get(self::$key . 'description'));
66
+
67
+ if (!$showImage && !$showTitle && !$showDescription) {
68
+ // Nothing to show
69
+ return '';
70
+ }
71
+
72
+ N2JS::addFile(N2Filesystem::translate(dirname(__FILE__) . '/default/thumbnail.js'), $id);
73
+
74
+ N2LESS::addFile(N2Filesystem::translate(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'default' . DIRECTORY_SEPARATOR . 'style.less'), $slider->cacheId, array(
75
+ "sliderid" => $slider->elementId
76
+ ), NEXTEND_SMARTSLIDER_ASSETS . '/less' . NDS);
77
+
78
+ list($displayClass, $displayAttributes) = self::getDisplayAttributes($params, self::$key);
79
+ list($style, $attributes) = self::getPosition($params, self::$key);
80
+ $attributes['data-offset'] = $params->get(self::$key . 'position-offset', 0);
81
+
82
+ $barStyle = N2StyleRenderer::render($params->get(self::$key . 'style-bar'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ');
83
+
84
+
85
+ $slideStyle = N2StyleRenderer::render($params->get(self::$key . 'style-slides'), 'dot', $slider->elementId, 'div#' . $slider->elementId . ' ');
86
+
87
+ $width = intval($slider->params->get(self::$key . 'width', 160));
88
+ $height = intval($slider->params->get(self::$key . 'height', 100));
89
+
90
+
91
+ $captionPlacement = $slider->params->get(self::$key . 'caption-placement', 'overlay');
92
+ if (!$showImage) {
93
+ $captionPlacement = 'before';
94
+ }
95
+
96
+ if (!$showTitle && !$showDescription) {
97
+ $captionPlacement = 'overlay';
98
+ }
99
+
100
+ $captionSize = intval($slider->params->get(self::$key . 'caption-size', 100));
101
+
102
+
103
+ $showCaption = $showTitle || $showDescription;
104
+
105
+ if ($showCaption) {
106
+ $captionStyle = N2StyleRenderer::render($params->get(self::$key . 'title-style'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ');
107
+ if ($showTitle) {
108
+ $titleFont = N2FontRenderer::render($params->get(self::$key . 'title-font'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ');
109
+ }
110
+ if ($showDescription) {
111
+ $descriptionFont = N2FontRenderer::render($params->get(self::$key . 'description-font'), 'simple', $slider->elementId, 'div#' . $slider->elementId . ' ');
112
+ }
113
+ }
114
+
115
+ $group = max(1, intval($params->get(self::$key . 'group')));
116
+
117
+ $orientation = self::getOrientationByPosition($params->get(self::$key . 'position-mode'), $params->get(self::$key . 'position-area'), $params->get(self::$key . 'orientation'));
118
+ $slides = NHtml::openTag('table');
119
+
120
+ $containerStyle = '';
121
+ $captionClass = 'n2-caption-' . $captionPlacement;
122
+ $captionExtraStyle = '';
123
+ switch ($captionPlacement) {
124
+ case 'before':
125
+ case 'after':
126
+ switch ($orientation) {
127
+ case 'vertical':
128
+ if (!$showImage) {
129
+ $width = 0;
130
+ }
131
+ $containerStyle = "width: " . ($width + $captionSize) . "px; height: {$height}px;";
132
+ $captionExtraStyle .= "width: {$captionSize}px";
133
+ break;
134
+ default:
135
+ if (!$showImage) {
136
+ $height = 0;
137
+ }
138
+ $containerStyle = "width: {$width}px; height: " . ($height + $captionSize) . "px;";
139
+ $captionExtraStyle .= "height: {$captionSize}px";
140
+ }
141
+ break;
142
+ default:
143
+ $containerStyle = "width: {$width}px; height: {$height}px;";
144
+ }
145
+
146
+ $image = '';
147
+ $rows = array();
148
+ $i = 0;
149
+ foreach ($slider->slides AS $slide) {
150
+ $active = '';
151
+ if ($slider->_activeSlide == $i) {
152
+ $active = 'n2-active ';
153
+ }
154
+ if ($orientation == 'horizontal') {
155
+ $row = $i % $group;
156
+ } else {
157
+ $row = intval($i / $group);
158
+ }
159
+ if (!isset($rows[$row])) {
160
+ $rows[$row] = array();
161
+ }
162
+
163
+ if ($showImage) {
164
+ $image = NHtml::tag('div', array(
165
+ 'class' => 'n2-ss-thumb-image',
166
+ 'style' => "background-image: url('" . $slide->getThumbnail() . "'); width: {$width}px; height: {$height}px;"
167
+ ), '');
168
+ }
169
+
170
+ $inner = '';
171
+
172
+ if ($showCaption) {
173
+ $html = '';
174
+ if ($showTitle) {
175
+ $html .= NHtml::tag('div', array(
176
+ 'class' => $titleFont
177
+ ), $slide->getTitle());
178
+ }
179
+ $description = $slide->getDescription();
180
+ if ($showDescription && !empty($description)) {
181
+ $html .= NHtml::tag('div', array(
182
+ 'class' => $descriptionFont
183
+ ), $description);
184
+ }
185
+
186
+ $inner = NHtml::tag('div', array(
187
+ 'class' => $captionStyle . 'n2-ss-caption ' . $captionClass,
188
+ 'style' => $captionExtraStyle
189
+ ), $html);
190
+ }
191
+ switch ($captionPlacement) {
192
+ case 'before':
193
+ $inner .= $image;
194
+ break;
195
+ case 'after':
196
+ default:
197
+ $inner = $image . $inner;
198
+ }
199
+
200
+ $rows[$row][] = NHtml::tag('td', array(), NHtml::tag('div', array(
201
+ 'class' => $slideStyle . $active,
202
+ 'style' => $containerStyle
203
+ ), $inner));
204
+ $i++;
205
+ }
206
+
207
+ foreach ($rows AS $row) {
208
+ $slides .= NHtml::tag('tr', array(), implode('', $row));
209
+ }
210
+ $slides .= NHtml::closeTag('table');
211
+
212
+ $parameters = array(
213
+ 'overlay' => $params->get(self::$key . 'position-mode') != 'simple' || $params->get(self::$key . 'overlay'),
214
+ 'area' => intval($params->get(self::$key . 'position-area')),
215
+ 'orientation' => $orientation,
216
+ 'group' => $group,
217
+ 'action' => $params->get(self::$key . 'action')
218
+ );
219
+
220
+ N2JS::addInline('new NextendSmartSliderWidgetThumbnailDefault("' . $id . '", ' . json_encode($parameters) . ');');
221
+
222
+ $size = $params->get(self::$key . 'size');
223
+ if ($orientation == 'horizontal') {
224
+ if (is_numeric($size) || substr($size, -1) == '%' || substr($size, -2) == 'px') {
225
+ $style .= 'width:' . $size . ';';
226
+ } else {
227
+ $attributes['data-sswidth'] = $size;
228
+ }
229
+ } else {
230
+ if (is_numeric($size) || substr($size, -1) == '%' || substr($size, -2) == 'px') {
231
+ $style .= 'height:' . $size . ';';
232
+ } else {
233
+ $attributes['data-ssheight'] = $size;
234
+ }
235
+ }
236
+
237
+ $previous = $next = '';
238
+ $showArrow = intval($slider->params->get(self::$key . 'arrow', 1));
239
+ if ($showArrow) {
240
+ $previous = NHtml::image('data:image/svg+xml;base64,' . base64_encode(N2Filesystem::readFile(N2ImageHelper::fixed('$ss$/plugins/widgetthumbnail/default/default/thumbnail-up-arrow.svg', true))), '', array(
241
+ 'class' => 'nextend-thumbnail-button nextend-thumbnail-previous'
242
+ ));
243
+ $next = NHtml::image('data:image/svg+xml;base64,' . base64_encode(N2Filesystem::readFile(N2ImageHelper::fixed('$ss$/plugins/widgetthumbnail/default/default/thumbnail-down-arrow.svg', true))), '', array(
244
+ 'class' => 'nextend-thumbnail-button nextend-thumbnail-next n2-active'
245
+ ));
246
+ }
247
+
248
+ if ($params->get(self::$key . 'position-mode') == 'simple' && $orientation == 'vertical') {
249
+ $area = $params->get(self::$key . 'position-area');
250
+ switch ($area) {
251
+ case '5':
252
+ case '6':
253
+ case '7':
254
+ case '8':
255
+ $attributes['data-sstop'] = '0';
256
+ break;
257
+ }
258
+ }
259
+
260
+ return NHtml::tag('div', $displayAttributes + $attributes + array(
261
+ 'class' => $displayClass . 'nextend-thumbnail nextend-thumbnail-default nextend-thumbnail-' . $orientation,
262
+ 'style' => $style
263
+ ), $previous . $next . NHtml::tag('div', array(
264
+ 'class' => 'nextend-thumbnail-inner'
265
+ ), NHtml::tag('div', array(
266
+ 'class' => $barStyle . 'nextend-thumbnail-scroller',
267
+ ), $slides)));
268
+ }
269
+
270
+ public static function prepareExport($export, $params) {
271
+
272
+ $export->addVisual($params->get(self::$key . 'style-bar'));
273
+ $export->addVisual($params->get(self::$key . 'style-slides'));
274
+ $export->addVisual($params->get(self::$key . 'title-style'));
275
+
276
+ $export->addVisual($params->get(self::$key . 'title-font'));
277
+ $export->addVisual($params->get(self::$key . 'description-font'));
278
+ }
279
+
280
+ public static function prepareImport($import, $params) {
281
+
282
+ $params->set(self::$key . 'style-bar', $import->fixSection($params->get(self::$key . 'style-bar', '')));
283
+ $params->set(self::$key . 'style-slides', $import->fixSection($params->get(self::$key . 'style-slides', '')));
284
+ $params->set(self::$key . 'title-style', $import->fixSection($params->get(self::$key . 'title-style', '')));
285
+
286
+ $params->set(self::$key . 'title-font', $import->fixSection($params->get(self::$key . 'title-font', '')));
287
+ $params->set(self::$key . 'description-font', $import->fixSection($params->get(self::$key . 'description-font', '')));
288
+ }
289
+ }
290
+
291
+ N2Plugin::addPlugin('sswidgetthumbnail', 'N2SSPluginWidgetThumbnailDefault');
app/code/community/Nextend2/SmartSlider3/library/smartslider/plugins/widgetthumbnail/default/default/config.xml ADDED
@@ -0,0 +1,41 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="thumbnail" label="Thumbnail settings" hidetitle="1">
3
+ <param name="widget-thumbnail-position" type="widgetposition" label="Position"/>
4
+ <param type="group" label="Style">
5
+ <param name="widget-thumbnail-style-bar" type="style" previewmode="simple" style2="sliderwidget-thumbnail-style-slides" label="Bar" set="1900">
6
+ <![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> ]]>
7
+ </param>
8
+ <param name="widget-thumbnail-style-slides" type="style" previewmode="dot" style2="sliderwidget-thumbnail-style-bar" label="Thumbnail" class="n2-expert" set="1900">
9
+ <![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> ]]>
10
+ </param>
11
+ </param>
12
+ <param type="onoff" label="Show arrow" name="widget-thumbnail-arrow"/>
13
+ <param type="group" label="Caption">
14
+ <param name="widget-thumbnail-title-style" type="style" previewmode="simple" font="sliderwidget-thumbnail-title-font" label="Style" post="break" set="1900">
15
+ <![CDATA[ <span class="{styleClassName} {fontClassName}">Slide title</span> ]]>
16
+ </param>
17
+ <param type="group">
18
+ <param type="onoff" label="Title" name="widget-thumbnail-title"/>
19
+ <param name="widget-thumbnail-title-font" type="font" previewmode="simple" style="sliderwidget-thumbnail-title-style" label="Font" set="1000">
20
+ <![CDATA[ <span class="{styleClassName} {fontClassName}">Slide title</span> ]]>
21
+ </param>
22
+ </param>
23
+ <param type="group" post="break">
24
+ <param type="onoff" label="Description" name="widget-thumbnail-description"/>
25
+ <param name="widget-thumbnail-description-font" type="font" previewmode="simple" style="sliderwidget-thumbnail-title-style" label="Font" set="1000">
26
+ <![CDATA[ <span class="{styleClassName} {fontClassName}">Slide description with long long text...</span> ]]>
27
+ </param>
28
+ </param>
29
+ <param type="group">
30
+ <param type="radio" name="widget-thumbnail-caption-placement" label="Placement">
31
+ <option value="before">Before</option>
32
+ <option value="overlay">Overlay</option>
33
+ <option value="after">After</option>
34
+ </param>
35
+ <param type="text" name="widget-thumbnail-caption-size" label="Height (horizontal) or Width (vertical)" style="width:40px;">
36
+ <unit>px</unit>
37
+ </param>
38
+ </param>
39
+ </param>
40
+ </params>
41
+ </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,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SS3
4
+ {
5
+
6
+ public static $version = '3.0.15';
7
+
8
+ public static $product = 'smartslider3';
9
+
10
+ public static $source = '';
11
+
12
+ public static function getProUrlHome() {
13
+ $query = '';
14
+ if (!empty(self::$source)) {
15
+ $query = '?source=' . self::$source;
16
+ }
17
+ return 'http://smartslider3.com/' . $query;
18
+ }
19
+
20
+ public static function getProUrlPricing() {
21
+ $query = '';
22
+ if (!empty(self::$source)) {
23
+ $query = '?source=' . self::$source;
24
+ }
25
+ return 'http://smartslider3.com/pricing/' . $query;
26
+ }
27
+
28
+ public static function getWhyProUrl() {
29
+ $query = '';
30
+ if (!empty(self::$source)) {
31
+ $query = '?source=' . self::$source;
32
+ }
33
+ return 'http://smartslider3.com/why-upgrade-to-pro/' . $query;
34
+ }
35
+
36
+ public static function getUpdateInfo() {
37
+ return array(
38
+ 'name' => 'smartslider3',
39
+ 'plugin' => 'nextend-smart-slider3-pro/nextend-smart-slider3-pro.php'
40
+ );
41
+ }
42
+
43
+ public static function api($_posts) {
44
+
45
+ $posts = array(
46
+ 'product' => self::$product,
47
+ 'pro' => N2SSPRO
48
+ );
49
+ return N2::api($_posts + $posts);
50
+ }
51
+
52
+ public static function hasApiError($status, $data = array()) {
53
+ extract($data);
54
+ switch ($status) {
55
+ case 'OK':
56
+ return false;
57
+ case 'PRODUCT_ASSET_NOT_AVAILABLE':
58
+ N2Message::error(sprintf(n2_('Demo slider is not available with the following ID: %s'), $key));
59
+ case 'ASSET_PREMIUM':
60
+ N2Message::error('Premium sliders are available in PRO version only!');
61
+ break;
62
+ case 'LICENSE_EXPIRED':
63
+ N2Message::error('Your license key expired!');
64
+ break;
65
+ case 'DOMAIN_REGISTER_FAILED':
66
+ N2Message::error('Your license key authorized on a different domain!');
67
+ break;
68
+ case 'LICENSE_INVALID':
69
+ N2Message::error('Your license key invalid, please enter again!');
70
+ N2SmartsliderLicenseModel::getInstance()
71
+ ->setKey('');
72
+ return array(
73
+ "sliders/index"
74
+ );
75
+ break;
76
+ case 'UPDATE_ERROR':
77
+ N2Message::error('Update error, please update manually!');
78
+ break;
79
+ case 'ERROR_HANDLED':
80
+ break;
81
+ case null:
82
+ N2Message::error('Licensing server not reachable, try again later!');
83
+ break;
84
+ default:
85
+ N2Message::error('Debug: ' . $status);
86
+ N2Message::error('Licensing server not reachable, try again later!');
87
+ break;
88
+ }
89
+ return true;
90
+ }
91
+
92
+ public static function showBeacon($search = '') {
93
+ if (intval(N2SmartSliderSettings::get('beacon', 1))) {
94
+ 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>';
95
+ }
96
+ }
97
+ }
98
+ if (defined('SMARTSLIDER3AFFILIATE')) {
99
+ N2SS3::$source = SMARTSLIDER3AFFILIATE;
100
+ }
101
+
app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/N2SmartsliderApplicationTypeWidget.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ 'helpers.NHtml',
18
+ 'libraries.cache.NextendModuleCache',
19
+ 'libraries.embedwidget.embedwidget',
20
+ ));
21
+
22
+ N2Loader::import(array(
23
+ 'libraries.settings.settings',
24
+ 'libraries.settings.layout',
25
+ 'libraries.settings.stylemanager',
26
+ 'libraries.settings.font'
27
+ ), 'smartslider');
28
+ }
29
+ }
30
+
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.php 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.php 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.php ADDED
@@ -0,0 +1 @@
 
1
+ <?php
app/code/community/Nextend2/SmartSlider3/library/smartslider/widget/views/home/wordpress.php ADDED
@@ -0,0 +1 @@
 
1
+ <?php
app/code/community/Nextend2/SmartSlider3/sql/smartslider3_setup/mysql4-install-1.0.0.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $installer = $this;
4
+ $installer->startSetup();
5
+
6
+ defined('NEXTEND_INSTALL') || define('NEXTEND_INSTALL', true);
7
+
8
+ require_once(dirname(__FILE__) . '/../../../magento/library.php');
9
+ require_once(dirname(__FILE__) . '/../../library/magento/init.php');
10
+ N2Base::getApplication("smartslider")->getApplicationType('backend')->render(array(
11
+ "controller" => "install",
12
+ "action" => "index",
13
+ "useRequest" => false
14
+ ), array(true));
15
+
16
+ $installer->endSetup();
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,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemApplicationInfo extends N2ApplicationInfo
4
+ {
5
+
6
+ public function __construct() {
7
+ $this->path = dirname(__FILE__);
8
+ $this->assetPath = realpath(N2LIBRARYASSETS);
9
+ parent::__construct();
10
+ }
11
+
12
+ public function isPublic() {
13
+ return false;
14
+ }
15
+
16
+ public function getName() {
17
+ return 'system';
18
+ }
19
+
20
+ public function getLabel() {
21
+ return 'Nextend system application';
22
+ }
23
+
24
+ public function getInstance() {
25
+ require_once $this->path . NDS . "N2SystemApplication.php";
26
+ return new N2SystemApplication($this);
27
+ }
28
+
29
+ public function getPathKey() {
30
+ return '$system$';
31
+ }
32
+
33
+ public function assetsBackend() {
34
+
35
+ $path = $this->getAssetsPath();
36
+
37
+ N2JS::addFiles($path . "/admin/js", array(
38
+ "visual.js",
39
+ "modals.js",
40
+ "sets.js",
41
+ "visualeditor.js"
42
+ ), 'system-backend');
43
+
44
+ foreach (glob($path . "/admin/js/*.js") AS $file) {
45
+ N2JS::addFile($file, 'system-backend');
46
+ }
47
+
48
+ foreach (glob($path . "/admin/js/fontservices/*.js") AS $file) {
49
+ N2JS::addFile($file, 'system-backend');
50
+ }
51
+ }
52
+
53
+ public function assetsFrontend() {
54
+
55
+ }
56
+ }
57
+
58
+
59
+ 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,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
+ /**
38
+ * Delete all cached js/css files
39
+ */
40
+ public function actionClearCache() {
41
+ if ($this->canDo('nextend_config')) {
42
+
43
+ debug_print_backtrace();
44
+ die('do this method');
45
+
46
+ N2Request::redirect($this->appType->router->createUrl(array("settings/index")));
47
+ }
48
+ }
49
+
50
+ public function actionAviary() {
51
+ if ($this->canDo('nextend_config')) {
52
+ N2Loader::import('libraries.image.aviary');
53
+ $aviary = N2Request::getVar('aviary', false);
54
+ if ($aviary) {
55
+ if ($this->validateToken()) {
56
+ N2ImageAviary::storeSettings($aviary);
57
+ N2Message::success(n2_('Saved.'));
58
+ N2Request::redirect($this->appType->router->createUrl(array(
59
+ "settings/aviary",
60
+ array(
61
+ 'layout' => N2Request::getCmd('layout', '')
62
+ )
63
+ )));
64
+ } else {
65
+ $this->refresh();
66
+ }
67
+ }
68
+
69
+ $this->addView("../../inline/sidebar/settings", array(
70
+ "appObj" => $this
71
+ ), "sidebar");
72
+
73
+ $this->addView("aviary");
74
+ $this->render();
75
+ }
76
+ }
77
+
78
+ public function actionFonts() {
79
+ if ($this->canDo('nextend_config')) {
80
+ $fonts = N2Request::getVar('fonts', false);
81
+ if ($fonts) {
82
+ if ($this->validateToken()) {
83
+ N2Fonts::storeSettings($fonts);
84
+ N2Message::success(n2_('Saved.'));
85
+ N2Request::redirect($this->appType->router->createUrl(array("settings/fonts")));
86
+ } else {
87
+ $this->refresh();
88
+ }
89
+ }
90
+
91
+ $this->addView("../../inline/sidebar/settings", array(
92
+ "appObj" => $this
93
+ ), "sidebar");
94
+
95
+ $this->addView("fonts");
96
+ $this->render();
97
+ }
98
+ }
99
+
100
+ }
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,441 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class N2SystemBackendBrowseControllerAjax extends N2BackendControllerAjax
4
+ {
5
+
6
+ public function actionIndex() {
7
+ $this->validateToken();
8
+ $root = N2Filesystem::fixPathSeparator(N2Filesystem::getImagesFolder());
9
+ $path = N2Filesystem::realpath($root . '/' . ltrim(rtrim(N2Request::getVar('path', ''), '/'), '/'));
10
+ if (strpos($path, $root) !== 0) {
11
+ $path = $root;
12
+ }
13
+ $_directories = glob($path . NDS . '*', GLOB_ONLYDIR);
14
+ (object)$directories = array();
15
+ for ($i = 0; $i < count($_directories); $i++) {
16
+ $directories[basename($_directories[$i])] = $this->relative($_directories[$i], $root);
17
+ }
18
+
19
+ $_files = glob($path . NDS . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);
20
+ $files = array();
21
+ for ($i = 0; $i < count($_files); $i++) {
22
+ if (self::check_utf8($_files[$i])) {
23
+ $files[basename($_files[$i])] = N2ImageHelper::dynamic(N2Filesystem::pathToAbsoluteURL($_files[$i]));
24
+ }
25
+ }
26
+ $relativePath = $this->relative($path, $root);
27
+ if (!$relativePath) {
28
+ $relativePath = '';
29
+ }
30
+ $this->response->respond(array(
31
+ 'path' => $relativePath,
32
+ 'directories' => $directories,
33
+ 'files' => (object)$files
34
+ ));
35
+ }
36
+
37
+ private static function check_utf8($str) {
38
+ $len = strlen($str);
39
+ for ($i = 0; $i < $len; $i++) {
40
+ $c = ord($str[$i]);
41
+ if ($c > 128) {
42
+ if (($c > 247)) return false; elseif ($c > 239) $bytes = 4;
43
+ elseif ($c > 223) $bytes = 3;
44
+ elseif ($c > 191) $bytes = 2;
45
+ else return false;
46
+ if (($i + $bytes) > $len) return false;
47
+ while ($bytes > 1) {
48
+ $i++;
49
+ $b = ord($str[$i]);
50
+ if ($b < 128 || $b > 191) return false;
51
+ $bytes--;
52
+ }
53
+ }
54
+ }
55
+ return true;
56
+ }
57
+
58
+ public function actionUpload() {
59
+ if (defined('N2_IMAGE_UPLOAD_DISABLE')) {
60
+ N2Message::error(n2_('You are not allowed to upload!'));
61
+ $this->response->error();
62
+ }
63
+
64
+ $this->validateToken();
65
+
66
+ $root = N2Filesystem::getImagesFolder();
67
+ $folder = ltrim(rtrim(N2Request::getVar('path', ''), '/'), '/');
68
+ $path = N2Filesystem::realpath($root . '/' . $folder);
69
+
70
+ if ($path === false || $path == '') {
71
+ $folder = preg_replace("/[^A-Za-z0-9]/", '', $folder);
72
+ if (empty($folder)) {
73
+ N2Message::error(n2_('Folder is missing!'));
74
+ $this->response->error();
75
+ } else {
76
+ N2Filesystem::createFolder($root . '/' . $folder);
77
+ $path = N2Filesystem::realpath($root . '/' . $folder);
78
+ }
79
+ }
80
+
81
+ $relativePath = $this->relative($path, $root);
82
+ if (!$relativePath) {
83
+ $relativePath = '';
84
+ }
85
+ $response = array(
86
+ 'path' => $relativePath
87
+ );
88
+ try {
89
+ if (isset($_FILES) && isset($_FILES['image']) && isset($_FILES['image']['name'])) {
90
+ $info = pathinfo($_FILES['image']['name']);
91
+ $fileName = preg_replace('/[^a-zA-Z0-9_-]/', '', $info['filename']);
92
+ if (strlen($fileName) == 0) {
93
+ $fileName = '';
94
+ }
95
+ $upload = new N2BulletProof();
96
+ $file = $upload->uploadDir($path)
97
+ ->upload($_FILES['image'], $fileName);
98
+ $response['name'] = basename($file);
99
+ $response['url'] = N2ImageHelper::dynamic(N2Filesystem::pathToAbsoluteURL($file));
100
+ }
101
+ } catch (Exception $e) {
102
+ N2Message::error($e->getMessage());
103
+ $this->response->error();
104
+ }
105
+
106
+
107
+ $this->response->respond($response);
108
+ }
109
+
110
+ private function relative($path, $root) {
111
+ return substr(N2Filesystem::fixPathSeparator($path), strlen($root));
112
+ }
113
+ }
114
+
115
+ /**
116
+ * BULLETPROOF,
117
+ *
118
+ * This is a one-file solution for a quick and safe way of
119
+ * uploading, watermarking, cropping and resizing images
120
+ * during and after uploads with PHP with best security.
121
+ *
122
+ * This class is heavily commented, to be as much friendly as possible.
123
+ * Please help out by posting out some bugs/flaws if you encounter any. Thanks!
124
+ *
125
+ * @category Image uploader
126
+ * @package BulletProof
127
+ * @version 1.4.0
128
+ * @author samayo
129
+ * @link https://github.com/samayo/BulletProof
130
+ * @license Luke 3:11 ( Free )
131
+ */
132
+ class N2ImageUploaderException extends Exception
133
+ {
134
+
135
+ }
136
+
137
+ class N2BulletProof
138
+ {
139
+
140
+ /*
141
+ |--------------------------------------------------------------------------
142
+ | Image Upload Properties
143
+ \--------------------------------------------------------------------------*/
144
+
145
+ /**
146
+ * Set a group of default image types to upload.
147
+ *
148
+ * @var array
149
+ */
150
+ protected $imageType = array(
151
+ "jpg",
152
+ "jpeg",
153
+ "png",
154
+ "gif"
155
+ );
156
+
157
+ /**
158
+ * Set a default file size to upload. Values are in bytes. Remember: 1kb ~ 1000 bytes.
159
+ *
160
+ * @var array
161
+ */
162
+ protected $imageSize = array(
163
+ "min" => 1,
164
+ "max" => 20000000
165
+ );
166
+
167
+ /**
168
+ * Set a default min & maximum height & width for image to upload.
169
+ *
170
+ * @var array
171
+ */
172
+ protected $imageDimension = array(
173
+ "height" => 10000,
174
+ "width" => 10000
175
+ );
176
+
177
+ /**
178
+ * Set a default folder to upload images, if it does not exist, it will be created.
179
+ *
180
+ * @var string
181
+ */
182
+ protected $uploadDir = "uploads";
183
+
184
+ /**
185
+ * To get the real image/mime type. i.e gif, jpeg, png, ....
186
+ *
187
+ * @var string
188
+ */
189
+ protected $getMimeType;
190
+
191
+ /*
192
+ |--------------------------------------------------------------------------
193
+ | Image Upload Methods
194
+ \--------------------------------------------------------------------------*/
195
+
196
+ /**
197
+ * Stores image types to upload
198
+ *
199
+ * @param array $fileTypes - ex: ['jpg', 'doc', 'txt'].
200
+ *
201
+ * @return $this
202
+ */
203
+ public function fileTypes(array $fileTypes) {
204
+ $this->imageType = $fileTypes;
205
+ return $this;
206
+ }
207
+
208
+ /**
209
+ * Minimum and Maximum allowed image size for upload (in bytes),
210
+ *
211
+ * @param array $fileSize - ex: ['min'=>500, 'max'=>1000]
212
+ *
213
+ * @return $this
214
+ */
215
+ public function limitSize(array $fileSize) {
216
+ $this->imageSize = $fileSize;
217
+ return $this;
218
+ }
219
+
220
+ /**
221
+ * Default & maximum allowed height and width image to download.
222
+ *
223
+ * @param array $dimensions
224
+ *
225
+ * @return $this
226
+ */
227
+ public function limitDimension(array $dimensions) {
228
+ $this->imageDimension = $dimensions;
229
+ return $this;
230
+ }
231
+
232
+ /**
233
+ * Get the real image's Extension/mime type
234
+ *
235
+ * @param $imageName
236
+ *
237
+ * @return mixed
238
+ * @throws N2ImageUploaderException
239
+ */
240
+ protected function getMimeType($imageName) {
241
+ if (!file_exists($imageName)) {
242
+ throw new N2ImageUploaderException("Image " . $imageName . " does not exist");
243
+ }
244
+
245
+ $listOfMimeTypes = array(
246
+ 1 => "gif",
247
+ "jpeg",
248
+ "png",
249
+ "swf",
250
+ "psd",
251
+ "bmp",
252
+ "tiff",
253
+ "tiff",
254
+ "jpc",
255
+ "jp2",
256
+ "jpx",
257
+ "jb2",
258
+ "swc",
259
+ "iff",
260
+ "wbmp",
261
+ "xmb",
262
+ "ico"
263
+ );
264
+
265
+ if (isset($listOfMimeTypes[exif_imagetype($imageName)])) {
266
+ return $listOfMimeTypes[exif_imagetype($imageName)];
267
+ }
268
+ }
269
+
270
+ /**
271
+ * Handy method for getting image dimensions (W & H) in pixels.
272
+ *
273
+ * @param $getImage - The image name
274
+ *
275
+ * @return array
276
+ */
277
+ protected function getPixels($getImage) {
278
+ list($width, $height) = getImageSize($getImage);
279
+ return array(
280
+ "width" => $width,
281
+ "height" => $height
282
+ );
283
+ }
284
+
285
+ /**
286
+ * Rename file either from method or by generating a random one.
287
+ *
288
+ * @param $isNameProvided - A new name for the file.
289
+ *
290
+ * @return string
291
+ */
292
+ protected function imageRename($isNameProvided) {
293
+ if ($isNameProvided) {
294
+ return $isNameProvided . "." . $this->getMimeType;
295
+ }
296
+ return uniqid(true) . "_" . str_shuffle(implode(range("E", "Q"))) . "." . $this->getMimeType;
297
+ }
298
+
299
+ /**
300
+ * Get the specified upload dir, if it does not exist, create a new one.
301
+ *
302
+ * @param $directoryName - directory name where you want your files to be uploaded
303
+ * @param $filePermissions - octal representation of file permissions in linux environment
304
+ *
305
+ * @return $this
306
+ * @throws N2ImageUploaderException
307
+ */
308
+ public function uploadDir($directoryName, $filePermissions = 0666) {
309
+ if (!file_exists($directoryName) && !is_dir($directoryName)) {
310
+ $createFolder = mkdir("" . $directoryName, $filePermissions, true);
311
+ if (!$createFolder) {
312
+ throw new N2ImageUploaderException("Folder " . $directoryName . " could not be created");
313
+ }
314
+ }
315
+ $this->uploadDir = $directoryName;
316
+ return $this;
317
+ }
318
+
319
+ /**
320
+ * For getting common error messages from FILES[] array during upload.
321
+ *
322
+ * @return array
323
+ */
324
+ protected function commonUploadErrors($key) {
325
+ $uploadErrors = array(
326
+ UPLOAD_ERR_OK => "...",
327
+ UPLOAD_ERR_INI_SIZE => "File is larger than the specified amount set by the server",
328
+ UPLOAD_ERR_FORM_SIZE => "File is larger than the specified amount specified by browser",
329
+ UPLOAD_ERR_PARTIAL => "File could not be fully uploaded. Please try again later",
330
+ UPLOAD_ERR_NO_FILE => "File is not found",
331
+ UPLOAD_ERR_NO_TMP_DIR => "Can't write to disk, due to server configuration ( No tmp dir found )",
332
+ UPLOAD_ERR_CANT_WRITE => "Failed to write file to disk. Please check you file permissions",
333
+ UPLOAD_ERR_EXTENSION => "A PHP extension has halted this file upload process"
334
+ );
335
+
336
+ return $uploadErrors[$key];
337
+ }
338
+
339
+ /**
340
+ * Simple file check and delete wrapper.
341
+ *
342
+ * @param $fileToDelete
343
+ *
344
+ * @return bool
345
+ * @throws N2ImageUploaderException
346
+ */
347
+ public function deleteFile($fileToDelete) {
348
+ if (file_exists($fileToDelete) && !unlink($fileToDelete)) {
349
+ throw new N2ImageUploaderException("File may have been deleted or does not exist");
350
+ }
351
+ return true;
352
+ }
353
+
354
+ /**
355
+ * Final image uploader method, to check for errors and upload
356
+ *
357
+ * @param $fileToUpload
358
+ * @param null $isNameProvided
359
+ *
360
+ * @return string
361
+ * @throws N2ImageUploaderException
362
+ */
363
+ public function upload($fileToUpload, $isNameProvided = null) {
364
+
365
+ if (!function_exists('exif_imagetype')) {
366
+ throw new N2ImageUploaderException("Function 'exif_imagetype' Not found.");
367
+ }
368
+
369
+ // Check if any errors are thrown by the FILES[] array
370
+ if ($fileToUpload["error"]) {
371
+ throw new N2ImageUploaderException($this->commonUploadErrors($fileToUpload["error"]));
372
+ }
373
+
374
+ // First get the real file extension
375
+ $this->getMimeType = $this->getMimeType($fileToUpload["tmp_name"]);
376
+
377
+ // Check if this file type is allowed for upload
378
+ if (!in_array($this->getMimeType, $this->imageType)) {
379
+ throw new N2ImageUploaderException(" This is not allowed file type!
380
+ Please only upload ( " . implode(", ", $this->imageType) . " ) file types");
381
+ }
382
+
383
+ //Check if size (in bytes) of the image are above or below of defined in 'limitSize()'
384
+ if ($fileToUpload["size"] < $this->imageSize["min"] || $fileToUpload["size"] > $this->imageSize["max"]
385
+ ) {
386
+ throw new N2ImageUploaderException("File sizes must be between " . implode(" to ", $this->imageSize) . " bytes");
387
+ }
388
+
389
+ // check if image is valid pixel-wise.
390
+ $pixel = $this->getPixels($fileToUpload["tmp_name"]);
391
+
392
+ if ($pixel["width"] < 4 || $pixel["height"] < 4) {
393
+ throw new N2ImageUploaderException("This file is either too small or corrupted to be an image");
394
+ }
395
+
396
+ if ($pixel["height"] > $this->imageDimension["height"] || $pixel["width"] > $this->imageDimension["width"]) {
397
+ throw new N2ImageUploaderException("Image pixels/size must be below " . implode(", ", $this->imageDimension) . " pixels");
398
+ }
399
+
400
+ // create upload directory if it does not exist
401
+ $this->uploadDir($this->uploadDir);
402
+
403
+ $i = '';
404
+ $newFileName = $this->imageRename($isNameProvided);
405
+
406
+ while (file_exists($this->uploadDir . "/" . $newFileName)) {
407
+ // The file already uploaded, nothing to do here
408
+ if (self::isFilesIdentical($this->uploadDir . "/" . $newFileName, $fileToUpload["tmp_name"])) {
409
+ return $this->uploadDir . "/" . $newFileName;
410
+ }
411
+ $i++;
412
+ $newFileName = $this->imageRename($isNameProvided . $i);
413
+ }
414
+
415
+ // Upload the file
416
+ $moveUploadedFile = $this->moveUploadedFile($fileToUpload["tmp_name"], $this->uploadDir . "/" . $newFileName);
417
+
418
+ if ($moveUploadedFile) {
419
+ return $this->uploadDir . "/" . $newFileName;
420
+ } else {
421
+ throw new N2ImageUploaderException(" File could not be uploaded. Unknown error occurred. ");
422
+ }
423
+ }
424
+
425
+ public function moveUploadedFile($uploaded_file, $new_file) {
426
+ if (!is_uploaded_file($uploaded_file)) {
427
+ return copy($uploaded_file, $new_file);
428
+ }
429
+ return move_uploaded_file($uploaded_file, $new_file);
430
+ }
431
+
432
+ private static function isFilesIdentical($fn1, $fn2) {
433
+ if (filetype($fn1) !== filetype($fn2)) return FALSE;
434
+
435
+ if (filesize($fn1) !== filesize($fn2)) return FALSE;
436
+
437
+ if (sha1_file($fn1) != sha1_file($fn2)) return false;
438
+
439
+ return true;
440
+ }
441
+ }
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.php 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">
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' => NHtml::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.php 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">
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' => NHtml::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.php ADDED
File without changes
app/code/community/Nextend2/library/applications/system/backend/inline/sidebar/settings.php 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.php 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">
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' => NHtml::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.php 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
+ NHtml::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
+ NHtml::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
+ NHtml::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.php 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
+ NHtml::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
+ NHtml::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
+ NHtml::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[] = NHtml::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.php 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.php 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.php 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.php 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="sp-replacer">
83
+ <div class="sp-preview">
84
+ <div class="sp-preview-inner"></div>
85
+ </div>
86
+ <div class="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.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "actions" => array(
5
+ NHtml::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
+ NHtml::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.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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->getInstance();
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 n2_e('Go to'); ?> <?php echo $info->getLabel(); ?></a>
18
+ </div>
19
+ </div>
20
+ <?php
21
+ endforeach;
22
+ ?>
app/code/community/Nextend2/library/applications/system/backend/views/defaults/noaccess.php 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.php 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="sp-replacer">
82
+ <div class="sp-preview">
83
+ <div class="sp-preview-inner"></div>
84
+ </div>
85
+ <div class="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.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "menu" => array(
5
+ NHtml::tag('div', array(
6
+ 'class' => 'n2-form-dark'
7
+ ), NHtml::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
+ NHtml::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
+ NHtml::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.php 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.php 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.php ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "actions" => array(
5
+ NHtml::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
+ NHtml::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.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "actions" => array(
5
+ NHtml::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 NHtml::openTag("form", array(
13
+ "id" => "nextend-config",
14
+ "method" => "post",
15
+ "action" => N2Request::getRequestUri()
16
+ ));
17
+ $form->render('global');
18
+ echo NHtml::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 NHtml::openTag("form", array(
59
+ "id" => "nextend-config",
60
+ "method" => "post",
61
+ "action" => N2Request::getRequestUri()
62
+ ));
63
+ $form->render('aviary');
64
+ echo NHtml::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 NHtml::openTag("form", array(
75
+ "id" => "nextend-config",
76
+ "method" => "post",
77
+ "action" => N2Request::getRequestUri()
78
+ ));
79
+ $form->render('fonts');
80
+ echo NHtml::closeTag("form");
81
+ }
82
+
83
+ }
app/code/community/Nextend2/library/applications/system/backend/views/settings/aviary.php 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
+ NHtml::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.php 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
+ NHtml::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.php ADDED
@@ -0,0 +1,16 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $this->widget->init('topbar', array(
3
+ "actions" => array(
4
+ NHtml::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.php 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="sp-replacer">
79
+ <div class="sp-preview">
80
+ <div class="sp-preview-inner"></div>
81
+ </div>
82
+ <div class="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.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ $this->widget->init('topbar', array(
4
+ "menu" => array(
5
+ NHtml::tag('div', array(
6
+ 'class' => 'n2-form-dark'
7
+ ), NHtml::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
+ NHtml::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
+ NHtml::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 NHtml::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 .= NHtml::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
+ ), NHtml::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 .= NHtml::tag('div', array(
25
+ 'class' => 'n2-radio-option' . ($this->isSelected($value) ? ' n2-active' : '') . ($i == 0 ? ' n2-first' : '') . ($i == $length ? ' n2-last' : '')
26
+ ), NHtml::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,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <root>
2
+ <params name="options" label="Options">
3
+ <param type="onoff" name="protocol-relative" label="Use protocol-relative URL" default="1"/>
4
+ </params>
5
+ <params name="javascript" label="JavaScript">
6
+ <param type="token"/>
7
+ <param type="onoff" name="jquery" label="Load jQuery on frontend" default="1"/>
8
+ <param type="onoff" name="gsap" label="Load GSAP on frontend" default="1"/>
9
+ <param type="onoff" name="async" label="Async" default="0"/>
10
+ <param type="onoff" name="combine-js" label="Combine" default="0"/>
11
+ <param type="onoff" name="minify-js" label="Minify" default="0"/>
12
+ </params>
13
+ </root>
app/code/community/Nextend2/library/applications/system/models/forms/image/form.xml ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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="tablet" label="Tablet">
14
+ <param name="tablet-image" label="Image" type="image" default=""/>
15
+ <param name="tablet-preview" label="Preview" type="container"/>
16
+ <param name="tablet-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="mobile" label="Mobile">
26
+ <param name="mobile-image" label="Image" type="image" default=""/>
27
+ <param name="mobile-preview" label="Preview" type="container"/>
28
+ <param name="mobile-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
+ </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
+ U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
891
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
892
+ MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
893
+ A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
894
+ SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
895
+ bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
896
+ JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
897
+ epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
898
+ F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
899
+ MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
900
+ hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
901
+ bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
902
+ QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
903
+ afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
904
+ PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
905
+ xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
906
+ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
907
+ QBFGmh95DmK/D5fs4C8fF5Q=
908
+ -----END CERTIFICATE-----
909
+
910
+ StartCom Certification Authority
911
+ ================================
912
+ -----BEGIN CERTIFICATE-----
913
+ MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
914
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
915
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
916
+ NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
917
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
918
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
919
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
920
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
921
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
922
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
923
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
924
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
925
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
926
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
927
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
928
+ 37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
929
+ FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
930
+ Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
931
+ YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
932
+ AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
933
+ Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
934
+ U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
935
+ LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
936
+ cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
937
+ cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
938
+ dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
939
+ AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
940
+ 3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
941
+ vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
942
+ fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
943
+ fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
944
+ EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
945
+ yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
946
+ 1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
947
+ lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
948
+ g14=
949
+ -----END CERTIFICATE-----
950
+
951
+ Taiwan GRCA
952
+ ===========
953
+ -----BEGIN CERTIFICATE-----
954
+ MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
955
+ EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
956
+ DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
957
+ dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
958
+ ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
959
+ w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
960
+ BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
961
+ 1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
962
+ htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
963
+ J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
964
+ Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
965
+ B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
966
+ O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
967
+ lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
968
+ HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
969
+ 09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
970
+ TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
971
+ Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
972
+ Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
973
+ D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
974
+ DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
975
+ Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
976
+ 7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
977
+ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
978
+ +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
979
+ -----END CERTIFICATE-----
980
+
981
+ Swisscom Root CA 1
982
+ ==================
983
+ -----BEGIN CERTIFICATE-----
984
+ MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQG
985
+ EwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2VydGlmaWNhdGUgU2Vy
986
+ dmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3QgQ0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4
987
+ MTgyMjA2MjBaMGQxCzAJBgNVBAYTAmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGln
988
+ aXRhbCBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIIC
989
+ IjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9m2BtRsiM
990
+ MW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdihFvkcxC7mlSpnzNApbjyF
991
+ NDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/TilftKaNXXsLmREDA/7n29uj/x2lzZAe
992
+ AR81sH8A25Bvxn570e56eqeqDFdvpG3FEzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkC
993
+ b6dJtDZd0KTeByy2dbcokdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn
994
+ 7uHbHaBuHYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNFvJbN
995
+ cA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo19AOeCMgkckkKmUp
996
+ WyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjCL3UcPX7ape8eYIVpQtPM+GP+HkM5
997
+ haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJWbjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNY
998
+ MUJDLXT5xp6mig/p/r+D5kNXJLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYw
999
+ HQYDVR0hBBYwFDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
1000
+ BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzcK6FptWfUjNP9
1001
+ MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzfky9NfEBWMXrrpA9gzXrzvsMn
1002
+ jgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7IkVh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQ
1003
+ MbFamIp1TpBcahQq4FJHgmDmHtqBsfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4H
1004
+ VtA4oJVwIHaM190e3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtl
1005
+ vrsRls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ipmXeascCl
1006
+ OS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HHb6D0jqTsNFFbjCYDcKF3
1007
+ 1QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksfrK/7DZBaZmBwXarNeNQk7shBoJMBkpxq
1008
+ nvy5JMWzFYJ+vq6VK+uxwNrjAWALXmmshFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCy
1009
+ x/yP2FS1k2Kdzs9Z+z0YzirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMW
1010
+ NY6E0F/6MBr1mmz0DlP5OlvRHA==
1011
+ -----END CERTIFICATE-----
1012
+
1013
+ DigiCert Assured ID Root CA
1014
+ ===========================
1015
+ -----BEGIN CERTIFICATE-----
1016
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
1017
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
1018
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
1019
+ MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
1020
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
1021
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
1022
+ 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
1023
+ UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
1024
+ /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
1025
+ oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
1026
+ GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
1027
+ 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
1028
+ hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
1029
+ EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
1030
+ SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
1031
+ 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
1032
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
1033
+ -----END CERTIFICATE-----
1034
+
1035
+ DigiCert Global Root CA
1036
+ =======================
1037
+ -----BEGIN CERTIFICATE-----
1038
+ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
1039
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
1040
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
1041
+ MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
1042
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
1043
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
1044
+ TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
1045
+ BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
1046
+ 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
1047
+ 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
1048
+ o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
1049
+ 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
1050
+ BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
1051
+ EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
1052
+ tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
1053
+ UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
1054
+ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
1055
+ -----END CERTIFICATE-----
1056
+
1057
+ DigiCert High Assurance EV Root CA
1058
+ ==================================
1059
+ -----BEGIN CERTIFICATE-----
1060
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
1061
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
1062
+ KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
1063
+ MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
1064
+ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
1065
+ Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
1066
+ Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
1067
+ OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
1068
+ MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
1069
+ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
1070
+ h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
1071
+ Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
1072
+ JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
1073
+ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
1074
+ myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
1075
+ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
1076
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
1077
+ -----END CERTIFICATE-----
1078
+
1079
+ Certplus Class 2 Primary CA
1080
+ ===========================
1081
+ -----BEGIN CERTIFICATE-----
1082
+ MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
1083
+ BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
1084
+ OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
1085
+ dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
1086
+ ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
1087
+ 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
1088
+ Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
1089
+ YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
1090
+ e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
1091
+ CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
1092
+ YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
1093
+ L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
1094
+ P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
1095
+ TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
1096
+ 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
1097
+ //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
1098
+ l7+ijrRU
1099
+ -----END CERTIFICATE-----
1100
+
1101
+ DST Root CA X3
1102
+ ==============
1103
+ -----BEGIN CERTIFICATE-----
1104
+ MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
1105
+ ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
1106
+ DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
1107
+ cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
1108
+ ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
1109
+ rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
1110
+ UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
1111
+ xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
1112
+ utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
1113
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
1114
+ MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
1115
+ dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
1116
+ GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
1117
+ RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
1118
+ fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
1119
+ -----END CERTIFICATE-----
1120
+
1121
+ DST ACES CA X6
1122
+ ==============
1123
+ -----BEGIN CERTIFICATE-----
1124
+ MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
1125
+ EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
1126
+ MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
1127
+ MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
1128
+ CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
1129
+ AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
1130
+ DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
1131
+ pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
1132
+ GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
1133
+ MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
1134
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
1135
+ Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
1136
+ dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
1137
+ CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
1138
+ 5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
1139
+ Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
1140
+ nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
1141
+ vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
1142
+ oKfN5XozNmr6mis=
1143
+ -----END CERTIFICATE-----
1144
+
1145
+ TURKTRUST Certificate Services Provider Root 1
1146
+ ==============================================
1147
+ -----BEGIN CERTIFICATE-----
1148
+ MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
1149
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGDAJUUjEP
1150
+ MA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykgMjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0
1151
+ acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMx
1152
+ MDI3MTdaFw0xNTAzMjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsg
1153
+ U2VydGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYDVQQHDAZB
1154
+ TktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kgxLBsZXRpxZ9pbSB2ZSBC
1155
+ aWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEuxZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOC
1156
+ AQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GX
1157
+ yGl8hMW0kWxsE2qkVa2kheiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8i
1158
+ Si9BB35JYbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5CurKZ
1159
+ 8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1JuTm5Rh8i27fbMx4
1160
+ W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51b0dewQIDAQABoxAwDjAMBgNVHRME
1161
+ BTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46
1162
+ sWrv7/hg0Uw2ZkUd82YCdAR7kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxE
1163
+ q8Sn5RTOPEFhfEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
1164
+ B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdAaLX/7KfS0zgY
1165
+ nNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKSRGQDJereW26fyfJOrN3H
1166
+ -----END CERTIFICATE-----
1167
+
1168
+ TURKTRUST Certificate Services Provider Root 2
1169
+ ==============================================
1170
+ -----BEGIN CERTIFICATE-----
1171
+ MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBF
1172
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
1173
+ MA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
1174
+ QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcN
1175
+ MDUxMTA3MTAwNzU3WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVr
1176
+ dHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEPMA0G
1177
+ A1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmls
1178
+ acWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwggEiMA0G
1179
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqe
1180
+ LCDe2JAOCtFp0if7qnefJ1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKI
1181
+ x+XlZEdhR3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJQv2g
1182
+ QrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGXJHpsmxcPbe9TmJEr
1183
+ 5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1pzpwACPI2/z7woQ8arBT9pmAPAgMB
1184
+ AAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58SFq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8G
1185
+ A1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/ntt
1186
+ Rbj2hWyfIvwqECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
1187
+ Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFzgw2lGh1uEpJ+
1188
+ hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotHuFEJjOp9zYhys2AzsfAKRO8P
1189
+ 9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LSy3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5
1190
+ UrbnBEI=
1191
+ -----END CERTIFICATE-----
1192
+
1193
+ SwissSign Gold CA - G2
1194
+ ======================
1195
+ -----BEGIN CERTIFICATE-----
1196
+ MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNVBAYTAkNIMRUw
1197
+ EwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2lnbiBHb2xkIENBIC0gRzIwHhcN
1198
+ MDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBFMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dp
1199
+ c3NTaWduIEFHMR8wHQYDVQQDExZTd2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0B
1200
+ AQEFAAOCAg8AMIICCgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUq
1201
+ t2/876LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+bbqBHH5C
1202
+ jCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c6bM8K8vzARO/Ws/BtQpg
1203
+ vd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqEemA8atufK+ze3gE/bk3lUIbLtK/tREDF
1204
+ ylqM2tIrfKjuvqblCqoOpd8FUrdVxyJdMmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvR
1205
+ AiTysybUa9oEVeXBCsdtMDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuend
1206
+ jIj3o02yMszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69yFGkO
1207
+ peUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPiaG59je883WX0XaxR
1208
+ 7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxMgI93e2CaHt+28kgeDrpOVG2Y4OGi
1209
+ GqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUw
1210
+ AwEB/zAdBgNVHQ4EFgQUWyV7lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64
1211
+ OfPAeGZe6Drn8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
1212
+ L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe645R88a7A3hfm
1213
+ 5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczOUYrHUDFu4Up+GC9pWbY9ZIEr
1214
+ 44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOf
1215
+ Mke6UiI0HTJ6CVanfCU2qT1L2sCCbwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6m
1216
+ Gu6uLftIdxf+u+yvGPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxp
1217
+ mo/a77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCChdiDyyJk
1218
+ vC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid392qgQmwLOM7XdVAyksLf
1219
+ KzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEppLd6leNcG2mqeSz53OiATIgHQv2ieY2Br
1220
+ NU0LbbqhPcCT4H8js1WtciVORvnSFu+wZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6Lqj
1221
+ viOvrv1vA+ACOzB2+httQc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
1222
+ -----END CERTIFICATE-----
1223
+
1224
+ SwissSign Silver CA - G2
1225
+ ========================
1226
+ -----BEGIN CERTIFICATE-----
1227
+ MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCQ0gxFTAT
1228
+ BgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMB4X
1229
+ DTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0NlowRzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3
1230
+ aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG
1231
+ 9w0BAQEFAAOCAg8AMIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644
1232
+ N0MvFz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7brYT7QbNHm
1233
+ +/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieFnbAVlDLaYQ1HTWBCrpJH
1234
+ 6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH6ATK72oxh9TAtvmUcXtnZLi2kUpCe2Uu
1235
+ MGoM9ZDulebyzYLs2aFK7PayS+VFheZteJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5h
1236
+ qAaEuSh6XzjZG6k4sIN/c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5
1237
+ FZGkECwJMoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRHHTBs
1238
+ ROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTfjNFusB3hB48IHpmc
1239
+ celM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb65i/4z3GcRm25xBWNOHkDRUjvxF3X
1240
+ CO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOBrDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
1241
+ BAUwAwEB/zAdBgNVHQ4EFgQUF6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRB
1242
+ tjpbO8tFnb0cwpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
1243
+ cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBAHPGgeAn0i0P
1244
+ 4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShpWJHckRE1qTodvBqlYJ7YH39F
1245
+ kWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L
1246
+ 3XWgwF15kIwb4FDm3jH+mHtwX6WQ2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx
1247
+ /uNncqCxv1yL5PqZIseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFa
1248
+ DGi8aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2Xem1ZqSqP
1249
+ e97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQRdAtq/gsD/KNVV4n+Ssuu
1250
+ WxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJ
1251
+ DIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ub
1252
+ DgEj8Z+7fNzcbBGXJbLytGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
1253
+ -----END CERTIFICATE-----
1254
+
1255
+ GeoTrust Primary Certification Authority
1256
+ ========================================
1257
+ -----BEGIN CERTIFICATE-----
1258
+ MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
1259
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
1260
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
1261
+ CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
1262
+ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1263
+ CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
1264
+ b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
1265
+ nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
1266
+ RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
1267
+ tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
1268
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
1269
+ hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
1270
+ Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
1271
+ NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
1272
+ Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
1273
+ 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
1274
+ -----END CERTIFICATE-----
1275
+
1276
+ thawte Primary Root CA
1277
+ ======================
1278
+ -----BEGIN CERTIFICATE-----
1279
+ MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
1280
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
1281
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
1282
+ cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
1283
+ MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
1284
+ SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
1285
+ KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
1286
+ FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
1287
+ oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
1288
+ 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
1289
+ q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
1290
+ aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
1291
+ afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
1292
+ VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
1293
+ AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
1294
+ uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
1295
+ xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
1296
+ jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
1297
+ z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
1298
+ -----END CERTIFICATE-----
1299
+
1300
+ VeriSign Class 3 Public Primary Certification Authority - G5
1301
+ ============================================================
1302
+ -----BEGIN CERTIFICATE-----
1303
+ MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
1304
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
1305
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
1306
+ IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
1307
+ ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
1308
+ yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
1309
+ biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
1310
+ dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
1311
+ YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
1312
+ ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
1313
+ j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
1314
+ Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
1315
+ Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
1316
+ fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
1317
+ BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
1318
+ Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
1319
+ aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
1320
+ SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
1321
+ X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
1322
+ KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
1323
+ Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
1324
+ ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
1325
+ -----END CERTIFICATE-----
1326
+
1327
+ SecureTrust CA
1328
+ ==============
1329
+ -----BEGIN CERTIFICATE-----
1330
+ MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
1331
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
1332
+ dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
1333
+ BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
1334
+ ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
1335
+ OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
1336
+ DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
1337
+ GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
1338
+ 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
1339
+ ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
1340
+ BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
1341
+ aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
1342
+ KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
1343
+ SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
1344
+ mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
1345
+ nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
1346
+ 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
1347
+ -----END CERTIFICATE-----
1348
+
1349
+ Secure Global CA
1350
+ ================
1351
+ -----BEGIN CERTIFICATE-----
1352
+ MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
1353
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
1354
+ bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
1355
+ MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
1356
+ Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
1357
+ YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
1358
+ bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
1359
+ 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
1360
+ HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
1361
+ 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
1362
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
1363
+ oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
1364
+ MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
1365
+ OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
1366
+ CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
1367
+ 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
1368
+ f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
1369
+ -----END CERTIFICATE-----
1370
+
1371
+ COMODO Certification Authority
1372
+ ==============================
1373
+ -----BEGIN CERTIFICATE-----
1374
+ MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
1375
+ BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
1376
+ A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
1377
+ dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
1378
+ MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
1379
+ T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
1380
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
1381
+ +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
1382
+ xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
1383
+ 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
1384
+ 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
1385
+ rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
1386
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
1387
+ b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
1388
+ AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
1389
+ OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
1390
+ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
1391
+ IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
1392
+ +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
1393
+ -----END CERTIFICATE-----
1394
+
1395
+ Network Solutions Certificate Authority
1396
+ =======================================
1397
+ -----BEGIN CERTIFICATE-----
1398
+ MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
1399
+ EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
1400
+ IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
1401
+ MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
1402
+ MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
1403
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
1404
+ jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
1405
+ aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
1406
+ crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
1407
+ /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
1408
+ AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
1409
+ BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
1410
+ bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
1411
+ A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
1412
+ 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
1413
+ GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
1414
+ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
1415
+ ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
1416
+ -----END CERTIFICATE-----
1417
+
1418
+ WellsSecure Public Root Certificate Authority
1419
+ =============================================
1420
+ -----BEGIN CERTIFICATE-----
1421
+ MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoM
1422
+ F1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYw
1423
+ NAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcN
1424
+ MDcxMjEzMTcwNzU0WhcNMjIxMjE0MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dl
1425
+ bGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYD
1426
+ VQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
1427
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+rWxxTkqxtnt3CxC5FlAM1
1428
+ iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjUDk/41itMpBb570OYj7OeUt9tkTmPOL13
1429
+ i0Nj67eT/DBMHAGTthP796EfvyXhdDcsHqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8
1430
+ bJVhHlfXBIEyg1J55oNjz7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiB
1431
+ K0HmOFafSZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/SlwxlAgMB
1432
+ AAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqGKGh0dHA6Ly9jcmwu
1433
+ cGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBQm
1434
+ lRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0jBIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGB
1435
+ i6SBiDCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRww
1436
+ GgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
1437
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEBALkVsUSRzCPI
1438
+ K0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd/ZDJPHV3V3p9+N701NX3leZ0
1439
+ bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pBA4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSlj
1440
+ qHyita04pO2t/caaH/+Xc/77szWnk4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+es
1441
+ E2fDbbFwRnzVlhE9iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJ
1442
+ tylv2G0xffX8oRAHh84vWdw+WNs=
1443
+ -----END CERTIFICATE-----
1444
+
1445
+ COMODO ECC Certification Authority
1446
+ ==================================
1447
+ -----BEGIN CERTIFICATE-----
1448
+ MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
1449
+ R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
1450
+ ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
1451
+ dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
1452
+ GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
1453
+ Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
1454
+ b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
1455
+ 4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
1456
+ wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
1457
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
1458
+ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
1459
+ U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
1460
+ -----END CERTIFICATE-----
1461
+
1462
+ IGC/A
1463
+ =====
1464
+ -----BEGIN CERTIFICATE-----
1465
+ MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYTAkZSMQ8wDQYD
1466
+ VQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVE
1467
+ Q1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZy
1468
+ MB4XDTAyMTIxMzE0MjkyM1oXDTIwMTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQI
1469
+ EwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NT
1470
+ STEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMIIB
1471
+ IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaIs9z4iPf930Pfeo2aSVz2
1472
+ TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCW
1473
+ So7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYy
1474
+ HF2fYPepraX/z9E0+X1bF8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNd
1475
+ frGoRpAxVs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGdPDPQ
1476
+ tQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNVHSAEDjAMMAoGCCqB
1477
+ egF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAxNjAfBgNVHSMEGDAWgBSjBS8YYFDC
1478
+ iQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUFAAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RK
1479
+ q89toB9RlPhJy3Q2FLwV3duJL92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3Q
1480
+ MZsyK10XZZOYYLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
1481
+ Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2aNjSaTFR+FwNI
1482
+ lQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R0982gaEbeC9xs/FZTEYYKKuF
1483
+ 0mBWWg==
1484
+ -----END CERTIFICATE-----
1485
+
1486
+ Security Communication EV RootCA1
1487
+ =================================
1488
+ -----BEGIN CERTIFICATE-----
1489
+ MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
1490
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
1491
+ dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
1492
+ BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
1493
+ Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
1494
+ AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
1495
+ /VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
1496
+ WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
1497
+ ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
1498
+ bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
1499
+ 9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
1500
+ SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
1501
+ iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
1502
+ Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
1503
+ mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
1504
+ T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
1505
+ -----END CERTIFICATE-----
1506
+
1507
+ OISTE WISeKey Global Root GA CA
1508
+ ===============================
1509
+ -----BEGIN CERTIFICATE-----
1510
+ MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
1511
+ BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
1512
+ A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
1513
+ bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
1514
+ VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
1515
+ IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
1516
+ IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
1517
+ Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
1518
+ Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
1519
+ d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
1520
+ /yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
1521
+ LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
1522
+ AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
1523
+ KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
1524
+ MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
1525
+ +vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
1526
+ hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
1527
+ okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
1528
+ -----END CERTIFICATE-----
1529
+
1530
+ Microsec e-Szigno Root CA
1531
+ =========================
1532
+ -----BEGIN CERTIFICATE-----
1533
+ MIIHqDCCBpCgAwIBAgIRAMy4579OKRr9otxmpRwsDxEwDQYJKoZIhvcNAQEFBQAwcjELMAkGA1UE
1534
+ BhMCSFUxETAPBgNVBAcTCEJ1ZGFwZXN0MRYwFAYDVQQKEw1NaWNyb3NlYyBMdGQuMRQwEgYDVQQL
1535
+ EwtlLVN6aWdubyBDQTEiMCAGA1UEAxMZTWljcm9zZWMgZS1Temlnbm8gUm9vdCBDQTAeFw0wNTA0
1536
+ MDYxMjI4NDRaFw0xNzA0MDYxMjI4NDRaMHIxCzAJBgNVBAYTAkhVMREwDwYDVQQHEwhCdWRhcGVz
1537
+ dDEWMBQGA1UEChMNTWljcm9zZWMgTHRkLjEUMBIGA1UECxMLZS1Temlnbm8gQ0ExIjAgBgNVBAMT
1538
+ GU1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
1539
+ AQDtyADVgXvNOABHzNuEwSFpLHSQDCHZU4ftPkNEU6+r+ICbPHiN1I2uuO/TEdyB5s87lozWbxXG
1540
+ d36hL+BfkrYn13aaHUM86tnsL+4582pnS4uCzyL4ZVX+LMsvfUh6PXX5qqAnu3jCBspRwn5mS6/N
1541
+ oqdNAoI/gqyFxuEPkEeZlApxcpMqyabAvjxWTHOSJ/FrtfX9/DAFYJLG65Z+AZHCabEeHXtTRbjc
1542
+ QR/Ji3HWVBTji1R4P770Yjtb9aPs1ZJ04nQw7wHb4dSrmZsqa/i9phyGI0Jf7Enemotb9HI6QMVJ
1543
+ PqW+jqpx62z69Rrkav17fVVA71hu5tnVvCSrwe+3AgMBAAGjggQ3MIIEMzBnBggrBgEFBQcBAQRb
1544
+ MFkwKAYIKwYBBQUHMAGGHGh0dHBzOi8vcmNhLmUtc3ppZ25vLmh1L29jc3AwLQYIKwYBBQUHMAKG
1545
+ IWh0dHA6Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNydDAPBgNVHRMBAf8EBTADAQH/MIIBcwYD
1546
+ VR0gBIIBajCCAWYwggFiBgwrBgEEAYGoGAIBAQEwggFQMCgGCCsGAQUFBwIBFhxodHRwOi8vd3d3
1547
+ LmUtc3ppZ25vLmh1L1NaU1ovMIIBIgYIKwYBBQUHAgIwggEUHoIBEABBACAAdABhAG4A+gBzAO0A
1548
+ dAB2AOEAbgB5ACAA6QByAHQAZQBsAG0AZQB6AOkAcwDpAGgAZQB6ACAA6QBzACAAZQBsAGYAbwBn
1549
+ AGEAZADhAHMA4QBoAG8AegAgAGEAIABTAHoAbwBsAGcA4QBsAHQAYQB0APMAIABTAHoAbwBsAGcA
1550
+ 4QBsAHQAYQB0AOEAcwBpACAAUwB6AGEAYgDhAGwAeQB6AGEAdABhACAAcwB6AGUAcgBpAG4AdAAg
1551
+ AGsAZQBsAGwAIABlAGwAagDhAHIAbgBpADoAIABoAHQAdABwADoALwAvAHcAdwB3AC4AZQAtAHMA
1552
+ egBpAGcAbgBvAC4AaAB1AC8AUwBaAFMAWgAvMIHIBgNVHR8EgcAwgb0wgbqggbeggbSGIWh0dHA6
1553
+ Ly93d3cuZS1zemlnbm8uaHUvUm9vdENBLmNybIaBjmxkYXA6Ly9sZGFwLmUtc3ppZ25vLmh1L0NO
1554
+ PU1pY3Jvc2VjJTIwZS1Temlnbm8lMjBSb290JTIwQ0EsT1U9ZS1Temlnbm8lMjBDQSxPPU1pY3Jv
1555
+ c2VjJTIwTHRkLixMPUJ1ZGFwZXN0LEM9SFU/Y2VydGlmaWNhdGVSZXZvY2F0aW9uTGlzdDtiaW5h
1556
+ cnkwDgYDVR0PAQH/BAQDAgEGMIGWBgNVHREEgY4wgYuBEGluZm9AZS1zemlnbm8uaHWkdzB1MSMw
1557
+ IQYDVQQDDBpNaWNyb3NlYyBlLVN6aWduw7MgUm9vdCBDQTEWMBQGA1UECwwNZS1TemlnbsOzIEhT
1558
+ WjEWMBQGA1UEChMNTWljcm9zZWMgS2Z0LjERMA8GA1UEBxMIQnVkYXBlc3QxCzAJBgNVBAYTAkhV
1559
+ MIGsBgNVHSMEgaQwgaGAFMegSXUWYYTbMUuE0vE3QJDvTtz3oXakdDByMQswCQYDVQQGEwJIVTER
1560
+ MA8GA1UEBxMIQnVkYXBlc3QxFjAUBgNVBAoTDU1pY3Jvc2VjIEx0ZC4xFDASBgNVBAsTC2UtU3pp
1561
+ Z25vIENBMSIwIAYDVQQDExlNaWNyb3NlYyBlLVN6aWdubyBSb290IENBghEAzLjnv04pGv2i3Gal
1562
+ HCwPETAdBgNVHQ4EFgQUx6BJdRZhhNsxS4TS8TdAkO9O3PcwDQYJKoZIhvcNAQEFBQADggEBANMT
1563
+ nGZjWS7KXHAM/IO8VbH0jgdsZifOwTsgqRy7RlRw7lrMoHfqaEQn6/Ip3Xep1fvj1KcExJW4C+FE
1564
+ aGAHQzAxQmHl7tnlJNUb3+FKG6qfx1/4ehHqE5MAyopYse7tDk2016g2JnzgOsHVV4Lxdbb9iV/a
1565
+ 86g4nzUGCM4ilb7N1fy+W955a9x6qWVmvrElWl/tftOsRm1M9DKHtCAE4Gx4sHfRhUZLphK3dehK
1566
+ yVZs15KrnfVJONJPU+NVkBHbmJbGSfI+9J8b4PeI3CVimUTYc78/MPMMNz7UwiiAc7EBt51alhQB
1567
+ S6kRnSlqLtBdgcDPsiBDxwPgN05dCtxZICU=
1568
+ -----END CERTIFICATE-----
1569
+
1570
+ Certigna
1571
+ ========
1572
+ -----BEGIN CERTIFICATE-----
1573
+ MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
1574
+ EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
1575
+ MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
1576
+ Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
1577
+ XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
1578
+ GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
1579
+ ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
1580
+ DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
1581
+ Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
1582
+ tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
1583
+ BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
1584
+ SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
1585
+ hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
1586
+ ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
1587
+ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
1588
+ 1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
1589
+ WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
1590
+ -----END CERTIFICATE-----
1591
+
1592
+ TC TrustCenter Class 2 CA II
1593
+ ============================
1594
+ -----BEGIN CERTIFICATE-----
1595
+ MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjELMAkGA1UEBhMC
1596
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNVBAsTGVRDIFRydXN0Q2VudGVy
1597
+ IENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYw
1598
+ MTEyMTQzODQzWhcNMjUxMjMxMjI1OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1
1599
+ c3RDZW50ZXIgR21iSDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UE
1600
+ AxMcVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
1601
+ AQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jftMjWQ+nEdVl//OEd+DFw
1602
+ IxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKguNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2
1603
+ xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2JXjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQ
1604
+ Xa7pIXSSTYtZgo+U4+lK8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7u
1605
+ SNQZu+995OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1UdEwEB
1606
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3kUrL84J6E1wIqzCB
1607
+ 7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRydXN0Y2VudGVyLmRlL2NybC92Mi90
1608
+ Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBU
1609
+ cnVzdENlbnRlciUyMENsYXNzJTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21i
1610
+ SCxPVT1yb290Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u
1611
+ TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iSGNn3Bzn1LL4G
1612
+ dXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprtZjluS5TmVfwLG4t3wVMTZonZ
1613
+ KNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8au0WOB9/WIFaGusyiC2y8zl3gK9etmF1Kdsj
1614
+ TYjKUCjLhdLTEKJZbtOTVAB6okaVhgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kP
1615
+ JOzHdiEoZa5X6AeIdUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfk
1616
+ vQ==
1617
+ -----END CERTIFICATE-----
1618
+
1619
+ TC TrustCenter Universal CA I
1620
+ =============================
1621
+ -----BEGIN CERTIFICATE-----
1622
+ MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTELMAkGA1UEBhMC
1623
+ REUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVy
1624
+ IFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcN
1625
+ MDYwMzIyMTU1NDI4WhcNMjUxMjMxMjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMg
1626
+ VHJ1c3RDZW50ZXIgR21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYw
1627
+ JAYDVQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcNAQEBBQAD
1628
+ ggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSRJJZ4Hgmgm5qVSkr1YnwC
1629
+ qMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3TfCZdzHd55yx4Oagmcw6iXSVphU9VDprv
1630
+ xrlE4Vc93x9UIuVvZaozhDrzznq+VZeujRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtw
1631
+ ag+1m7Z3W0hZneTvWq3zwZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9O
1632
+ gdwZu5GQfezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYDVR0j
1633
+ BBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
1634
+ AYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0GCSqGSIb3DQEBBQUAA4IBAQAo0uCG
1635
+ 1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X17caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/Cy
1636
+ vwbZ71q+s2IhtNerNXxTPqYn8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3
1637
+ ghUJGooWMNjsydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT
1638
+ ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/2TYcuiUaUj0a
1639
+ 7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY
1640
+ -----END CERTIFICATE-----
1641
+
1642
+ Deutsche Telekom Root CA 2
1643
+ ==========================
1644
+ -----BEGIN CERTIFICATE-----
1645
+ MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
1646
+ RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
1647
+ A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
1648
+ MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
1649
+ A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
1650
+ b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
1651
+ bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
1652
+ KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
1653
+ AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
1654
+ Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
1655
+ jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
1656
+ HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
1657
+ E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
1658
+ zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
1659
+ rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
1660
+ dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
1661
+ Cm26OWMohpLzGITY+9HPBVZkVw==
1662
+ -----END CERTIFICATE-----
1663
+
1664
+ ComSign Secured CA
1665
+ ==================
1666
+ -----BEGIN CERTIFICATE-----
1667
+ MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAwPDEbMBkGA1UE
1668
+ AxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQGEwJJTDAeFw0w
1669
+ NDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwxGzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBD
1670
+ QTEQMA4GA1UEChMHQ29tU2lnbjELMAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
1671
+ ggEKAoIBAQDGtWhfHZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs
1672
+ 49ohgHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sWv+bznkqH
1673
+ 7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ueMv5WJDmyVIRD9YTC2LxB
1674
+ kMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d1
1675
+ 9guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUw
1676
+ AwEB/zBEBgNVHR8EPTA7MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29t
1677
+ U2lnblNlY3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58ADsA
1678
+ j8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkqhkiG9w0BAQUFAAOC
1679
+ AQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7piL1DRYHjZiM/EoZNGeQFsOY3wo3a
1680
+ BijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtCdsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtp
1681
+ FhpFfTMDZflScZAmlaxMDPWLkz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP
1682
+ 51qJThRv4zdLhfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz
1683
+ OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw==
1684
+ -----END CERTIFICATE-----
1685
+
1686
+ Cybertrust Global Root
1687
+ ======================
1688
+ -----BEGIN CERTIFICATE-----
1689
+ MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
1690
+ ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
1691
+ MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
1692
+ ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
1693
+ +Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
1694
+ 0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
1695
+ AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
1696
+ 89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
1697
+ 8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
1698
+ BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
1699
+ MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
1700
+ A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
1701
+ lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
1702
+ 5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
1703
+ hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
1704
+ X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
1705
+ WL1WMRJOEcgh4LMRkWXbtKaIOM5V
1706
+ -----END CERTIFICATE-----
1707
+
1708
+ ePKI Root Certification Authority
1709
+ =================================
1710
+ -----BEGIN CERTIFICATE-----
1711
+ MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBeMQswCQYDVQQG
1712
+ EwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0ZC4xKjAoBgNVBAsMIWVQS0kg
1713
+ Um9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMx
1714
+ MjdaMF4xCzAJBgNVBAYTAlRXMSMwIQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEq
1715
+ MCgGA1UECwwhZVBLSSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0B
1716
+ AQEFAAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAHSyZbCUNs
1717
+ IZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAhijHyl3SJCRImHJ7K2RKi
1718
+ lTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3XDZoTM1PRYfl61dd4s5oz9wCGzh1NlDiv
1719
+ qOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX
1720
+ 12ruOzjjK9SXDrkb5wdJfzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0O
1721
+ WQqraffAsgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uUWH1+
1722
+ ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLSnT0IFaUQAS2zMnao
1723
+ lQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pHdmX2Os+PYhcZewoozRrSgx4hxyy/
1724
+ vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJipNiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXi
1725
+ Zo1jDiVN1Rmy5nk3pyKdVDECAwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/Qkqi
1726
+ MAwGA1UdEwQFMAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH
1727
+ ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGBuvl2ICO1J2B0
1728
+ 1GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6YlPwZpVnPDimZI+ymBV3QGypzq
1729
+ KOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkPJXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdV
1730
+ xrsStZf0X4OFunHB2WyBEXYKCrC/gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEP
1731
+ NXubrjlpC2JgQCA2j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+r
1732
+ GNm65ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUBo2M3IUxE
1733
+ xJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS/jQ6fbjpKdx2qcgw+BRx
1734
+ gMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2zGp1iro2C6pSe3VkQw63d4k3jMdXH7Ojy
1735
+ sP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTEW9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmOD
1736
+ BCEIZ43ygknQW/2xzQ+DhNQ+IIX3Sj0rnP0qCglN6oH4EZw=
1737
+ -----END CERTIFICATE-----
1738
+
1739
+ T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
1740
+ =============================================================================================================================
1741
+ -----BEGIN CERTIFICATE-----
1742
+ MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
1743
+ DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
1744
+ aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
1745
+ b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
1746
+ BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
1747
+ S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
1748
+ MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
1749
+ IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
1750
+ n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
1751
+ IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
1752
+ dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
1753
+ cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
1754
+ AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
1755
+ Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
1756
+ xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
1757
+ 6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
1758
+ hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
1759
+ BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
1760
+ MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
1761
+ N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
1762
+ y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
1763
+ LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
1764
+ dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
1765
+ -----END CERTIFICATE-----
1766
+
1767
+ Buypass Class 2 CA 1
1768
+ ====================
1769
+ -----BEGIN CERTIFICATE-----
1770
+ MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
1771
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMiBDQSAxMB4XDTA2
1772
+ MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
1773
+ c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZI
1774
+ hvcNAQEBBQADggEPADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7M
1775
+ cXA0ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLXl18xoS83
1776
+ 0r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVBHfCuuCkslFJgNJQ72uA4
1777
+ 0Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/R
1778
+ uFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNC
1779
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0P
1780
+ AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLPgcIV
1781
+ 1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+DKhQ7SLHrQVMdvvt
1782
+ 7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKuBctN518fV4bVIJwo+28TOPX2EZL2
1783
+ fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHsh7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5w
1784
+ wDX3OaJdZtB7WZ+oRxKaJyOkLY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho
1785
+ -----END CERTIFICATE-----
1786
+
1787
+ Buypass Class 3 CA 1
1788
+ ====================
1789
+ -----BEGIN CERTIFICATE-----
1790
+ MIIDUzCCAjugAwIBAgIBAjANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
1791
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3MgQ2xhc3MgMyBDQSAxMB4XDTA1
1792
+ MDUwOTE0MTMwM1oXDTE1MDUwOTE0MTMwM1owSzELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBh
1793
+ c3MgQVMtOTgzMTYzMzI3MR0wGwYDVQQDDBRCdXlwYXNzIENsYXNzIDMgQ0EgMTCCASIwDQYJKoZI
1794
+ hvcNAQEBBQADggEPADCCAQoCggEBAKSO13TZKWTeXx+HgJHqTjnmGcZEC4DVC69TB4sSveZn8AKx
1795
+ ifZgisRbsELRwCGoy+Gb72RRtqfPFfV0gGgEkKBYouZ0plNTVUhjP5JW3SROjvi6K//zNIqeKNc0
1796
+ n6wv1g/xpC+9UrJJhW05NfBEMJNGJPO251P7vGGvqaMU+8IXF4Rs4HyI+MkcVyzwPX6UvCWThOia
1797
+ AJpFBUJXgPROztmuOfbIUxAMZTpHe2DC1vqRycZxbL2RhzyRhkmr8w+gbCZ2Xhysm3HljbybIR6c
1798
+ 1jh+JIAVMYKWsUnTYjdbiAwKYjT+p0h+mbEwi5A3lRyoH6UsjfRVyNvdWQrCrXig9IsCAwEAAaNC
1799
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUOBTmyPCppAP0Tj4io1vy1uCtQHQwDgYDVR0P
1800
+ AQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQABZ6OMySU9E2NdFm/soT4JXJEVKirZgCFPBdy7
1801
+ pYmrEzMqnji3jG8CcmPHc3ceCQa6Oyh7pEfJYWsICCD8igWKH7y6xsL+z27sEzNxZy5p+qksP2bA
1802
+ EllNC1QCkoS72xLvg3BweMhT+t/Gxv/ciC8HwEmdMldg0/L2mSlf56oBzKwzqBwKu5HEA6BvtjT5
1803
+ htOzdlSY9EqBs1OdTUDs5XcTRa9bqh/YL0yCe/4qxFi7T/ye/QNlGioOw6UgFpRreaaiErS7GqQj
1804
+ el/wroQk5PMr+4okoyeYZdowdXb8GZHo2+ubPzK/QJcHJrrM85SFSnonk8+QQtS4Wxam58tAA915
1805
+ -----END CERTIFICATE-----
1806
+
1807
+ EBG Elektronik Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1
1808
+ ==========================================================================
1809
+ -----BEGIN CERTIFICATE-----
1810
+ MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNVBAMML0VCRyBF
1811
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMTcwNQYDVQQKDC5FQkcg
1812
+ QmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXptZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAe
1813
+ Fw0wNjA4MTcwMDIxMDlaFw0xNjA4MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25p
1814
+ ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2lt
1815
+ IFRla25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIiMA0GCSqG
1816
+ SIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h4fuXd7hxlugTlkaDT7by
1817
+ X3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAktiHq6yOU/im/+4mRDGSaBUorzAzu8T2b
1818
+ gmmkTPiab+ci2hC6X5L8GCcKqKpE+i4stPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfr
1819
+ eYteIAbTdgtsApWjluTLdlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZ
1820
+ TqNGFav4c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8UmTDGy
1821
+ Y5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z+kI2sSXFCjEmN1Zn
1822
+ uqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0OLna9XvNRiYuoP1Vzv9s6xiQFlpJI
1823
+ qkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMWOeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vm
1824
+ ExH8nYQKE3vwO9D8owrXieqWfo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0
1825
+ Nokb+Clsi7n2l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB
1826
+ /wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgwFoAU587GT/wW
1827
+ Z5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+8ygjdsZs93/mQJ7ANtyVDR2t
1828
+ FcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgm
1829
+ zJNSroIBk5DKd8pNSe/iWtkqvTDOTLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64k
1830
+ XPBfrAowzIpAoHMEwfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqT
1831
+ bCmYIai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJnxk1Gj7sU
1832
+ RT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4QDgZxGhBM/nV+/x5XOULK
1833
+ 1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9qKd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt
1834
+ 2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11thie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQ
1835
+ Y9iJSrSq3RZj9W6+YKH47ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9
1836
+ AahH3eU7QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT
1837
+ -----END CERTIFICATE-----
1838
+
1839
+ certSIGN ROOT CA
1840
+ ================
1841
+ -----BEGIN CERTIFICATE-----
1842
+ MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
1843
+ VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
1844
+ Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
1845
+ CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
1846
+ JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
1847
+ rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
1848
+ ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
1849
+ 0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
1850
+ AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
1851
+ Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
1852
+ AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
1853
+ SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
1854
+ x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
1855
+ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
1856
+ TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
1857
+ -----END CERTIFICATE-----
1858
+
1859
+ CNNIC ROOT
1860
+ ==========
1861
+ -----BEGIN CERTIFICATE-----
1862
+ MIIDVTCCAj2gAwIBAgIESTMAATANBgkqhkiG9w0BAQUFADAyMQswCQYDVQQGEwJDTjEOMAwGA1UE
1863
+ ChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1QwHhcNMDcwNDE2MDcwOTE0WhcNMjcwNDE2MDcw
1864
+ OTE0WjAyMQswCQYDVQQGEwJDTjEOMAwGA1UEChMFQ05OSUMxEzARBgNVBAMTCkNOTklDIFJPT1Qw
1865
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDTNfc/c3et6FtzF8LRb+1VvG7q6KR5smzD
1866
+ o+/hn7E7SIX1mlwhIhAsxYLO2uOabjfhhyzcuQxauohV3/2q2x8x6gHx3zkBwRP9SFIhxFXf2tiz
1867
+ VHa6dLG3fdfA6PZZxU3Iva0fFNrfWEQlMhkqx35+jq44sDB7R3IJMfAw28Mbdim7aXZOV/kbZKKT
1868
+ VrdvmW7bCgScEeOAH8tjlBAKqeFkgjH5jCftppkA9nCTGPihNIaj3XrCGHn2emU1z5DrvTOTn1Or
1869
+ czvmmzQgLx3vqR1jGqCA2wMv+SYahtKNu6m+UjqHZ0gNv7Sg2Ca+I19zN38m5pIEo3/PIKe38zrK
1870
+ y5nLAgMBAAGjczBxMBEGCWCGSAGG+EIBAQQEAwIABzAfBgNVHSMEGDAWgBRl8jGtKvf33VKWCscC
1871
+ wQ7vptU7ETAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIB/jAdBgNVHQ4EFgQUZfIxrSr3991S
1872
+ lgrHAsEO76bVOxEwDQYJKoZIhvcNAQEFBQADggEBAEs17szkrr/Dbq2flTtLP1se31cpolnKOOK5
1873
+ Gv+e5m4y3R6u6jW39ZORTtpC4cMXYFDy0VwmuYK36m3knITnA3kXr5g9lNvHugDnuL8BV8F3RTIM
1874
+ O/G0HAiw/VGgod2aHRM2mm23xzy54cXZF/qD1T0VoDy7HgviyJA/qIYM/PmLXoXLT1tLYhFHxUV8
1875
+ BS9BsZ4QaRuZluBVeftOhpm4lNqGOGqTo+fLbuXf6iFViZx9fX+Y9QCJ7uOEwFyWtcVG6kbghVW2
1876
+ G8kS1sHNzYDzAgE8yGnLRUhj2JTQ7IUOO04RZfSCjKY9ri4ilAnIXOo8gV0WKgOXFlUJ24pBgp5m
1877
+ mxE=
1878
+ -----END CERTIFICATE-----
1879
+
1880
+ ApplicationCA - Japanese Government
1881
+ ===================================
1882
+ -----BEGIN CERTIFICATE-----
1883
+ MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEcMBoGA1UEChMT
1884
+ SmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRpb25DQTAeFw0wNzEyMTIxNTAw
1885
+ MDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYTAkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zl
1886
+ cm5tZW50MRYwFAYDVQQLEw1BcHBsaWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
1887
+ CgKCAQEAp23gdE6Hj6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4
1888
+ fl+Kf5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55IrmTwcrN
1889
+ wVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cwFO5cjFW6WY2H/CPek9AE
1890
+ jP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDihtQWEjdnjDuGWk81quzMKq2edY3rZ+nYVu
1891
+ nyoKb58DKTCXKB28t89UKU5RMfkntigm/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRU
1892
+ WssmP3HMlEYNllPqa0jQk/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNV
1893
+ BAYTAkpQMRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOCseOD
1894
+ vOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADlqRHZ3ODrs
1895
+ o2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJhyzjVOGjprIIC8CFqMjSnHH2HZ9g
1896
+ /DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYD
1897
+ io+nEhEMy/0/ecGc/WLuo89UDNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmW
1898
+ dupwX3kSa+SjB1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL
1899
+ rosot4LKGAfmt1t06SAZf7IbiVQ=
1900
+ -----END CERTIFICATE-----
1901
+
1902
+ GeoTrust Primary Certification Authority - G3
1903
+ =============================================
1904
+ -----BEGIN CERTIFICATE-----
1905
+ MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
1906
+ BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
1907
+ IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
1908
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
1909
+ NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
1910
+ YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
1911
+ LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
1912
+ hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
1913
+ K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
1914
+ c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
1915
+ IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
1916
+ dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
1917
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
1918
+ 2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
1919
+ cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
1920
+ Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
1921
+ AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
1922
+ t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
1923
+ -----END CERTIFICATE-----
1924
+
1925
+ thawte Primary Root CA - G2
1926
+ ===========================
1927
+ -----BEGIN CERTIFICATE-----
1928
+ MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
1929
+ VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
1930
+ IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
1931
+ Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
1932
+ MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
1933
+ b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
1934
+ IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
1935
+ LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
1936
+ 8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
1937
+ mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
1938
+ G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
1939
+ rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
1940
+ -----END CERTIFICATE-----
1941
+
1942
+ thawte Primary Root CA - G3
1943
+ ===========================
1944
+ -----BEGIN CERTIFICATE-----
1945
+ MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
1946
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
1947
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
1948
+ cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
1949
+ ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
1950
+ d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
1951
+ VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
1952
+ A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
1953
+ MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
1954
+ P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
1955
+ +BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
1956
+ 7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
1957
+ vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
1958
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
1959
+ KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
1960
+ A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
1961
+ t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
1962
+ 8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
1963
+ er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
1964
+ -----END CERTIFICATE-----
1965
+
1966
+ GeoTrust Primary Certification Authority - G2
1967
+ =============================================
1968
+ -----BEGIN CERTIFICATE-----
1969
+ MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
1970
+ VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
1971
+ Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
1972
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
1973
+ OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
1974
+ MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
1975
+ b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
1976
+ BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
1977
+ KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
1978
+ VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
1979
+ EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
1980
+ ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
1981
+ npaqBA+K
1982
+ -----END CERTIFICATE-----
1983
+
1984
+ VeriSign Universal Root Certification Authority
1985
+ ===============================================
1986
+ -----BEGIN CERTIFICATE-----
1987
+ MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
1988
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
1989
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
1990
+ IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
1991
+ IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
1992
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
1993
+ cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
1994
+ IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
1995
+ aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
1996
+ 1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
1997
+ MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
1998
+ 9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
1999
+ AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
2000
+ tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
2001
+ CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
2002
+ a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
2003
+ DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
2004
+ Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
2005
+ Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
2006
+ P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
2007
+ wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
2008
+ mJO37M2CYfE45k+XmCpajQ==
2009
+ -----END CERTIFICATE-----
2010
+
2011
+ VeriSign Class 3 Public Primary Certification Authority - G4
2012
+ ============================================================
2013
+ -----BEGIN CERTIFICATE-----
2014
+ MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
2015
+ VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
2016
+ b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
2017
+ ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
2018
+ YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
2019
+ MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
2020
+ cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
2021
+ b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
2022
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
2023
+ Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
2024
+ rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
2025
+ /zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
2026
+ HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
2027
+ Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
2028
+ A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
2029
+ AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
2030
+ -----END CERTIFICATE-----
2031
+
2032
+ NetLock Arany (Class Gold) Főtanúsítvány
2033
+ ============================================
2034
+ -----BEGIN CERTIFICATE-----
2035
+ MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
2036
+ A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
2037
+ dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
2038
+ cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
2039
+ MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
2040
+ ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
2041
+ biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
2042
+ c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
2043
+ 0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
2044
+ /HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
2045
+ H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
2046
+ fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
2047
+ neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
2048
+ BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
2049
+ qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
2050
+ YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
2051
+ bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
2052
+ NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
2053
+ dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
2054
+ -----END CERTIFICATE-----
2055
+
2056
+ Staat der Nederlanden Root CA - G2
2057
+ ==================================
2058
+ -----BEGIN CERTIFICATE-----
2059
+ MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
2060
+ CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
2061
+ Um9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oXDTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMC
2062
+ TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
2063
+ ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAM