wp-toolkit-cpanel.tpl 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395
  1. <div class="wp-toolkit">
  2. <div class="hero-cta">
  3. <div class="container">
  4. <h2>{lang key='store.addon.wptk.redefined1'}</h2>
  5. <h1>
  6. {lang key='store.addon.wptk.redefined2'}
  7. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/cpanel.png" class="logo">
  8. </h1>
  9. <button class="btn btn-success btn-cta" onclick="smoothScroll('#pricing')">
  10. {lang key='store.addon.wptk.getItNow'}
  11. </button>
  12. {if $hasPleskWptk}
  13. <p class="pt-3">
  14. {lang key='store.addon.wptk.switchPlesk'}
  15. <a href="{fqdnRoutePath('store-addon', 'plesk-wordpress-toolkit-with-smart-updates')}">{lang key='clickHere'}</a>
  16. </p>
  17. {/if}
  18. </div>
  19. </div>
  20. <div class="hero-image light">
  21. <div class="container">
  22. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/feature-laptop.png" class="logo">
  23. </div>
  24. </div>
  25. <div class="body-intro bg-primary">
  26. <div class="container">
  27. <div class="row">
  28. <div class="col-lg-6">
  29. <p class="lead fw-500">{lang key='store.addon.wptk.introTitle'}</p>
  30. <p>{lang key='store.addon.wptk.introBody'}</p>
  31. </div>
  32. <div class="col-lg-6">
  33. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/graphic.png" class="d-none d-lg-block">
  34. </div>
  35. </div>
  36. </div>
  37. </div>
  38. <div class="features">
  39. <div class="container">
  40. <h3>{lang key='store.addon.wptk.midTitle1' breaktag='<br class="d-none d-md-inline-block">'}</h3>
  41. <div class="row">
  42. <div class="col-md-6 col-lg-4">
  43. <div class="feature-block">
  44. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/icon-create.png">
  45. <div class="title">{lang key='store.addon.wptk.featureTitle1'}</div>
  46. <div class="description">{lang key='store.addon.wptk.featureBody1'}</div>
  47. </div>
  48. </div>
  49. <div class="col-md-6 col-lg-4">
  50. <div class="feature-block">
  51. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/icon-experiment.png">
  52. <div class="title">{lang key='store.addon.wptk.featureTitle2'}</div>
  53. <div class="description">{lang key='store.addon.wptk.featureBody2'}</div>
  54. </div>
  55. </div>
  56. <div class="col-md-6 col-lg-4">
  57. <div class="feature-block">
  58. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/icon-security.png">
  59. <div class="title">{lang key='store.addon.wptk.featureTitle3'}</div>
  60. <div class="description">{lang key='store.addon.wptk.featureBody3'}</div>
  61. </div>
  62. </div>
  63. <div class="col-md-6 col-lg-4">
  64. <div class="feature-block">
  65. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/icon-updates.png">
  66. <div class="title">{lang key='store.addon.wptk.featureTitle4'}</div>
  67. <div class="description">{lang key='store.addon.wptk.featureBody4'}</div>
  68. </div>
  69. </div>
  70. <div class="col-md-6 col-lg-4">
  71. <div class="feature-block">
  72. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/icon-cloning.png">
  73. <div class="title">{lang key='store.addon.wptk.featureTitle5'}</div>
  74. <div class="description">{lang key='store.addon.wptk.featureBody5'}</div>
  75. </div>
  76. </div>
  77. <div class="col-md-6 col-lg-4">
  78. <div class="feature-block">
  79. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/icon-maintenance.png">
  80. <div class="title">{lang key='store.addon.wptk.featureTitle6'}</div>
  81. <div class="description">{lang key='store.addon.wptk.featureBody6'}</div>
  82. </div>
  83. </div>
  84. </div>
  85. </div>
  86. </div>
  87. <div class="pre-screenshots bg-primary">
  88. <div class="container">
  89. <div class="title">{lang key='store.addon.wptk.midTitle2'}</div>
  90. <div class="row justify-content-center">
  91. <div class="col-sm-10">
  92. {if $firstMatchingAddon && !$firstMatchingAddon->pricing()->first()->isFree()}
  93. {lang key='store.addon.wptk.screenshotDesc' price=$firstMatchingAddon->pricing()->first()->price()}
  94. {else}
  95. {lang key='store.addon.wptk.screenshotDescFree'}
  96. {/if}
  97. </div>
  98. </div>
  99. </div>
  100. </div>
  101. <div class="screenshots">
  102. <div class="container">
  103. <div class="row justify-content-center">
  104. <div class="col-xl-10">
  105. <div class="row screenshots-row">
  106. <div class="col-md-6">
  107. <a href="{$WEB_ROOT}/assets/img/store/wp-toolkit/screen-01-full.png" class="screenshot-thumb" data-lightbox="wptoolkit">
  108. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/screen-01.png">
  109. <div class="overlay">
  110. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/zoom.png">
  111. </div>
  112. </a>
  113. </div>
  114. <div class="col-md-6">
  115. <a href="{$WEB_ROOT}/assets/img/store/wp-toolkit/screen-02-full.png" class="screenshot-thumb" data-lightbox="wptoolkit">
  116. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/screen-02.png">
  117. <div class="overlay">
  118. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/zoom.png">
  119. </div>
  120. </a>
  121. </div>
  122. <div class="col-md-6">
  123. <a href="{$WEB_ROOT}/assets/img/store/wp-toolkit/screen-03-full.png" class="screenshot-thumb" data-lightbox="wptoolkit">
  124. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/screen-03.png">
  125. <div class="overlay">
  126. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/zoom.png">
  127. </div>
  128. </a>
  129. </div>
  130. <div class="col-md-6">
  131. <a href="{$WEB_ROOT}/assets/img/store/wp-toolkit/screen-04-full.png" class="screenshot-thumb" data-lightbox="wptoolkit">
  132. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/screen-04.png">
  133. <div class="overlay">
  134. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/zoom.png">
  135. </div>
  136. </a>
  137. </div>
  138. </div>
  139. </div>
  140. </div>
  141. </div>
  142. </div>
  143. <div class="modal lightbox-modal fade" id="wptkLightboxModal" tabindex="-1" role="dialog" aria-hidden="true">
  144. <div class="modal-dialog" role="document">
  145. <div class="modal-content">
  146. <div class="modal-body">
  147. <button type="button" class="close" data-dismiss="modal" aria-label="Close">
  148. <span aria-hidden="true">&times;</span>
  149. </button>
  150. <img src="" class="lightbox-image">
  151. </div>
  152. </div>
  153. </div>
  154. </div>
  155. <div class="pricing" id="pricing">
  156. <div class="container">
  157. {if $loggedin && count($clientServices)}
  158. <div class="starting-from">{lang key='store.addon.wptk.getStartedToday'}</div>
  159. <div class="subtitle">{lang key='store.addon.wptk.chooseDomains'}</div>
  160. <div class="service-selector justify-content-center">
  161. {foreach $clientServices as $service}
  162. <div class="service serviceid-{$service['service']->id}">
  163. <div class="inner-content">
  164. <div class="product-name truncate">{$service['service']->product->name}</div>
  165. <div class="divider"></div>
  166. <div class="domain-name truncate">{$service['service']->domain}</div>
  167. {if $service['addon']}
  168. <div class="description">{lang key='store.addon.wptk.addAddonFor' addon={$service['addon']->name}}</div>
  169. <div class="price">
  170. {if $service['addon']->isFree()}
  171. {lang key='orderfree'}
  172. {else}
  173. {$service['addonPrice']->price()}{($service['addon']->isOneTime()) ? '' : "/{$service['addonPrice']->getShortCycle()}"}
  174. {/if}
  175. </div>
  176. {else}
  177. <div class="unavailable">{lang key='store.addon.wptk.unavailable'}</div>
  178. {/if}
  179. </div>
  180. {if $service['addon']}
  181. <button class="btn btn-warning btn-add-to-cart"
  182. data-product-name="{$service['addon']->name}"
  183. data-serviceid="{$service['service']->id}"
  184. data-addonid="{$service['addon']->id}"
  185. data-domain-name="{$service['service']->domain}"
  186. data-price="{$service['addonPrice']->price()->toNumeric()}">
  187. {lang key='addtocart'}
  188. </button>
  189. {else}
  190. <button class="btn btn-warning btn-add-to-cart disabled">
  191. {lang key='addtocart'}
  192. </button>
  193. {/if}
  194. <div class="in-cart-indicator">
  195. <img src="{$WEB_ROOT}/assets/img/store/wp-toolkit/in-cart.png" alt="{lang key='domainchecker.alreadyincarttitle'}">
  196. </div>
  197. </div>
  198. {/foreach}
  199. </div>
  200. <div class="cart">
  201. <form method="post" data-role="cart-form" action="{fqdnRoutePath('store-add-addons')}">
  202. <input type="hidden" name="servicemap">
  203. <div class="cart-items">
  204. <div class="item template">
  205. <div class="product-info">
  206. <span class="product-name"></span>
  207. {lang key='store.addon.wptk.for'}
  208. <span class="domain-name"></span>
  209. </div>
  210. {$activeCurrency->prefix}<span class="price"></span>
  211. <button class="btn btn-remove float-right">
  212. <i class="fas fa-times"></i>
  213. </button>
  214. </div>
  215. </div>
  216. <div class="cart-totals">
  217. {lang key='store.addon.wptk.totalInCart'}
  218. {$activeCurrency->prefix}<span class="cart-total-amount"></span>
  219. <button type="submit" class="btn btn-success btn-checkout float-right">
  220. {lang key='store.addon.wptk.proceedToCheckout'}
  221. </button>
  222. </div>
  223. </form>
  224. </div>
  225. {else}
  226. {if $firstMatchingAddon && !$firstMatchingAddon->pricing()->first()->isFree()}
  227. <div class="starting-from">{lang key='startingfrom'} {$firstMatchingAddon->pricing()->first()->price()}/{$firstMatchingAddon->pricing()->first()->getShortCycle()}</div>
  228. {/if}
  229. {if !$loggedin}
  230. <div class="subtitle">{lang key='store.addon.wptk.loginToSeePricing'}</div>
  231. {/if}
  232. <div class="action-btns">
  233. <form method="post" action="{$browsePackagesAction}">
  234. {if !$loggedin}
  235. <a href="{routePath('store-addon-login', $addonSlug, $serviceId)}" class="btn btn-success">
  236. {lang key='store.addon.wptk.loginNow'}
  237. </a>
  238. {/if}
  239. <button type="submit" class="btn btn-warning">
  240. {lang key='store.addon.wptk.browsePackages'}
  241. </button>
  242. </form>
  243. </div>
  244. {/if}
  245. </div>
  246. </div>
  247. <div class="faqs">
  248. <div class="container">
  249. <div class="row justify-content-around">
  250. <div class="col-lg-5">
  251. <div class="border-line"></div>
  252. <div class="faq-title">{lang key='store.addon.wptk.faqQ1'}</div>
  253. <div class="faq-answer">{lang key='store.addon.wptk.faqA1'}</div>
  254. <div class="border-line"></div>
  255. <div class="faq-title">{lang key='store.addon.wptk.faqQ2'}</div>
  256. <div class="faq-answer">{lang key='store.addon.wptk.faqA2'}</div>
  257. <div class="border-line"></div>
  258. <div class="faq-title">{lang key='store.addon.wptk.faqQ3'}</div>
  259. <div class="faq-answer">{lang key='store.addon.wptk.faqA3'}</div>
  260. </div>
  261. <div class="col-lg-5">
  262. <div class="border-line"></div>
  263. <div class="faq-title">{lang key='store.addon.wptk.faqQ4'}</div>
  264. <div class="faq-answer">{lang key='store.addon.wptk.faqA4' webRoot=$WEB_ROOT}</div>
  265. <div class="border-line"></div>
  266. <div class="faq-title">{lang key='store.addon.wptk.faqQ5'}</div>
  267. <div class="faq-answer">{lang key='store.addon.wptk.faqA5' webRoot=$WEB_ROOT}</div>
  268. </div>
  269. </div>
  270. </div>
  271. </div>
  272. </div>
  273. <script>
  274. $(document).ready(function() {
  275. var cartTotal = 0;
  276. var ssoServiceId = {if $ssoService}{$ssoService->id}{else}0{/if};
  277. var changeServiceMap = function(callback)
  278. {
  279. var field = $('form[data-role="cart-form"]').find('input[name="servicemap"]');
  280. var value = $(field).val();
  281. try {
  282. value = JSON.parse(value);
  283. } catch (e) {
  284. value = {};
  285. }
  286. $(field).val(
  287. JSON.stringify(
  288. callback(value)
  289. )
  290. );
  291. };
  292. $('.wp-toolkit .service-selector .btn-add-to-cart').click(function(e) {
  293. e.preventDefault();
  294. if ($(this).hasClass('disabled')) {
  295. return;
  296. }
  297. var serviceId = $(this).data('serviceid'),
  298. addonId = $(this).data('addonid');
  299. var row = $('.wp-toolkit .cart-items .item.template').clone()
  300. .removeClass('template')
  301. .find('.product-name').text($(this).data('product-name')).end()
  302. .find('.domain-name').text($(this).data('domain-name')).end()
  303. .find('.price').text($(this).data('price')).end()
  304. .attr('data-serviceid', $(this).data('serviceid'))
  305. .attr('data-price', $(this).data('price'));
  306. changeServiceMap(function(serviceMap) {
  307. serviceMap[serviceId] = addonId;
  308. return serviceMap;
  309. });
  310. $('.wp-toolkit .cart-items').append(row);
  311. $('.wp-toolkit .cart').slideDown();
  312. cartTotal += parseFloat($(this).data('price'));
  313. $('.wp-toolkit .cart-total-amount').text(cartTotal.toFixed(2));
  314. $(this).closest('.service').addClass('in-cart');
  315. });
  316. $(document).on('click', '.wp-toolkit .cart-items .btn-remove', function (e) {
  317. e.preventDefault();
  318. var $removeItem = $(this).closest('.item');
  319. var serviceId = $removeItem.data('serviceid');
  320. cartTotal -= $removeItem.data('price');
  321. $('.wp-toolkit .cart-total-amount').text(cartTotal.toFixed(2));
  322. $('.serviceid-' + serviceId).removeClass('in-cart');
  323. changeServiceMap(function(serviceMap) {
  324. if (serviceMap.hasOwnProperty(serviceId)) {
  325. delete serviceMap[serviceId];
  326. }
  327. return serviceMap;
  328. });
  329. if ($('.wp-toolkit .cart-items .item:not(.template)').length <= 1) {
  330. $('.wp-toolkit .cart').slideUp('', function() {
  331. $removeItem.remove();
  332. });
  333. } else {
  334. $removeItem.slideUp('', function() {
  335. $(this).remove();
  336. });
  337. }
  338. });
  339. // pre-add the service we used to SSO from
  340. if (ssoServiceId) {
  341. $('.btn-add-to-cart[data-serviceid="' + ssoServiceId + '"]').click();
  342. }
  343. // lightbox
  344. jQuery('.screenshots a.screenshot-thumb').each(function() {
  345. jQuery(this).attr('data-toggle', 'modal')
  346. .attr('data-target', '#wptkLightboxModal');
  347. });
  348. jQuery('.screenshots a.screenshot-thumb').click(function(event) {
  349. event.preventDefault();
  350. $('<img>').attr({
  351. src: jQuery(this).attr('href'),
  352. class: 'lightbox-image'
  353. }).load(function() {
  354. var resizePercent = ($(window).width() < 768 ? 100 : 75);
  355. jQuery('.lightbox-image').replaceWith(this);
  356. jQuery('#wptkLightboxModal .modal-dialog').css({
  357. 'max-width': (this.width * (resizePercent/100)),
  358. 'width': 'initial'
  359. });
  360. jQuery('#wptkLightboxModal').modal('show');
  361. });
  362. });
  363. jQuery('#wptkLightboxModal').on('hidden.bs.modal', function() {
  364. jQuery('.lightbox-image').attr('src','');
  365. });
  366. });
  367. </script>