PageRenderTime 50ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/wp-content/plugins/wpforms-lite/includes/admin/builder/panels/class-setup.php

https://gitlab.com/ebrjose/comcebu
PHP | 408 lines | 222 code | 67 blank | 119 comment | 18 complexity | 0badac5229e1aa4102daf97b413a9b49 MD5 | raw file
  1. <?php
  2. /**
  3. * Setup panel.
  4. *
  5. * @since 1.0.0
  6. * @since 1.6.8 Form Builder Refresh.
  7. */
  8. class WPForms_Builder_Panel_Setup extends WPForms_Builder_Panel {
  9. /**
  10. * Addons data handler class instance.
  11. *
  12. * @since 1.6.8
  13. *
  14. * @var \WPForms\Admin\Addons\Addons
  15. */
  16. private $addons_obj;
  17. /**
  18. * Is addon templates available?
  19. *
  20. * @since 1.6.9
  21. *
  22. * @var bool
  23. */
  24. private $is_addon_templates_available = false;
  25. /**
  26. * Is custom templates available?
  27. *
  28. * @since 1.6.9
  29. *
  30. * @var bool
  31. */
  32. private $is_custom_templates_available = false;
  33. /**
  34. * All systems go.
  35. *
  36. * @since 1.0.0
  37. */
  38. public function init() {
  39. // Define panel information.
  40. $this->name = esc_html__( 'Setup', 'wpforms-lite' );
  41. $this->slug = 'setup';
  42. $this->icon = 'fa-cog';
  43. $this->order = 5;
  44. $this->addons_obj = wpforms()->get( 'addons' );
  45. }
  46. /**
  47. * Enqueue assets for the Setup panel.
  48. *
  49. * @since 1.0.0
  50. * @since 1.6.8 All the builder stylesheets enqueues moved to the `\WPForms_Builder::enqueues()`.
  51. */
  52. public function enqueues() {
  53. $min = wpforms_get_min_suffix();
  54. wp_enqueue_script(
  55. 'wpforms-builder-setup',
  56. WPFORMS_PLUGIN_URL . "assets/js/components/admin/builder/setup{$min}.js",
  57. [ 'wpforms-builder', 'listjs' ],
  58. WPFORMS_VERSION,
  59. true
  60. );
  61. }
  62. /**
  63. * Get templates.
  64. *
  65. * @since 1.6.8
  66. *
  67. * @return array
  68. */
  69. private function get_templates() {
  70. /*
  71. * Form templates available in the WPForms core plugin.
  72. *
  73. * @since 1.4.0
  74. *
  75. * @param array $templates Core templates data.
  76. */
  77. $core_templates = apply_filters( 'wpforms_form_templates_core', [] );
  78. /*
  79. * Form templates available with the WPForms addons.
  80. * Allows developers to provide additional templates with an addons.
  81. *
  82. * @since 1.4.0
  83. *
  84. * @param array $templates Addons templates data.
  85. */
  86. $additional_templates = apply_filters( 'wpforms_form_templates', [] );
  87. return array_merge( (array) $core_templates, (array) $additional_templates );
  88. }
  89. /**
  90. * Output the Settings panel primary content.
  91. *
  92. * @since 1.0.0
  93. */
  94. public function panel_content() {
  95. ?>
  96. <div id="wpforms-setup-form-name">
  97. <label for="wpforms-setup-name"><?php esc_html_e( 'Name Your Form', 'wpforms-lite' ); ?></label>
  98. <input type="text" id="wpforms-setup-name" placeholder="<?php esc_attr_e( 'Enter your form name here&hellip;', 'wpforms-lite' ); ?>">
  99. </div>
  100. <div class="wpforms-setup-title">
  101. <?php esc_html_e( 'Select a Template', 'wpforms-lite' ); ?>
  102. <span class="wpforms-setup-title-after"></span>
  103. </div>
  104. <p class="wpforms-setup-desc secondary-text">
  105. <?php
  106. printf(
  107. wp_kses( /* translators: %1$s - Create template doc link; %2$s - Contact us page link. */
  108. __( 'To speed up the process you can select from one of our pre-made templates, start with a <a href="#" class="wpforms-trigger-blank">blank form</a> or <a href="%1$s" target="_blank" rel="noopener noreferrer">create your own</a>. Have a suggestion for a new template? <a href="%2$s" target="_blank" rel="noopener noreferrer">We’d love to hear it</a>!', 'wpforms-lite' ),
  109. [
  110. 'strong' => [],
  111. 'a' => [
  112. 'href' => [],
  113. 'class' => [],
  114. 'target' => [],
  115. 'rel' => [],
  116. ],
  117. ]
  118. ),
  119. 'https://wpforms.com/docs/how-to-create-a-custom-form-template/',
  120. 'https://wpforms.com/form-template-suggestion/'
  121. );
  122. ?>
  123. </p>
  124. <?php
  125. ob_start();
  126. $this->template_select_options( $this->get_templates() );
  127. $templates = ob_get_clean();
  128. ?>
  129. <div class="wpforms-setup-templates">
  130. <div class="wpforms-setup-templates-sidebar">
  131. <div class="wpforms-setup-templates-search-wrap">
  132. <i class="fa fa-search"></i>
  133. <input type="text" id="wpforms-setup-template-search" value="" placeholder="<?php esc_attr_e( 'Search Templates', 'wpforms-lite' ); ?>">
  134. </div>
  135. <ul class="wpforms-setup-templates-categories">
  136. <?php $this->template_categories(); ?>
  137. </ul>
  138. </div>
  139. <div id="wpforms-setup-templates-list">
  140. <div class="list">
  141. <?php echo $templates; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
  142. </div>
  143. </div>
  144. </div>
  145. <?php
  146. do_action( 'wpforms_setup_panel_after' );
  147. }
  148. /**
  149. * Generate and display categories menu.
  150. *
  151. * @since 1.6.8
  152. */
  153. private function template_categories() {
  154. $common_categories = [
  155. 'all' => esc_html__( 'All Templates', 'wpforms-lite' ),
  156. ];
  157. if ( $this->is_custom_templates_available ) {
  158. $common_categories['custom'] = esc_html__( 'Custom Templates', 'wpforms-lite' );
  159. }
  160. if ( $this->is_addon_templates_available ) {
  161. $common_categories['addons'] = esc_html__( 'Addon Templates', 'wpforms-lite' );
  162. }
  163. $categories = array_merge(
  164. $common_categories,
  165. wpforms()->get( 'builder_templates' )->get_categories()
  166. );
  167. foreach ( $categories as $slug => $name ) {
  168. printf(
  169. '<li data-category="%1$s"%2$s>%3$s</li>',
  170. esc_attr( $slug ),
  171. $slug === 'all' ? ' class="active"' : '',
  172. esc_html( $name )
  173. );
  174. }
  175. }
  176. /**
  177. * Generate a block of templates to choose from.
  178. *
  179. * @since 1.4.0
  180. * @since 1.6.8 Refactor during the Form Builder Refresh. Deprecate second parameter `$slug`.
  181. *
  182. * @param array $templates Templates array.
  183. * @param string $slug Deprecated.
  184. */
  185. public function template_select_options( $templates, $slug = '' ) {
  186. if ( empty( $templates ) ) {
  187. return;
  188. }
  189. // Loop through each available template.
  190. foreach ( $templates as $template ) {
  191. echo wpforms_render( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
  192. 'builder/templates-item',
  193. $this->prepare_template_render_arguments( $template ),
  194. true
  195. );
  196. }
  197. }
  198. /**
  199. * Prepare arguments for rendering template item.
  200. *
  201. * @since 1.6.8
  202. *
  203. * @param array $template Template data.
  204. *
  205. * @return array Arguments.
  206. */
  207. private function prepare_template_render_arguments( $template ) {
  208. $template['plugin_dir'] = isset( $template['plugin_dir'] ) ? $template['plugin_dir'] : '';
  209. $template['source'] = $this->get_template_source( $template );
  210. $template['url'] = ! empty( $template['url'] ) ? $template['url'] : '';
  211. $template['has_access'] = ! empty( $template['license'] ) ? $template['has_access'] : true;
  212. $args = [];
  213. $args['template_id'] = ! empty( $template['id'] ) ? $template['id'] : $template['slug'];
  214. $args['categories'] = $this->get_template_categories( $template );
  215. $args['demo_url'] = '';
  216. if ( ! empty( $template['url'] ) ) {
  217. $utm_campaign = wpforms()->is_pro() ? 'plugin' : 'liteplugin';
  218. $args['demo_url'] = add_query_arg(
  219. [
  220. 'utm_content' => $template['name'],
  221. ],
  222. $template['url'] . "?utm_source=WordPress&utm_campaign={$utm_campaign}&utm_medium=builder-templates"
  223. );
  224. }
  225. $template_license = ! empty( $template['license'] ) ? $template['license'] : '';
  226. $template_name = sprintf( /* translators: %s - Form template name. */
  227. esc_html__( '%s template', 'wpforms-lite' ),
  228. esc_html( $template['name'] )
  229. );
  230. $args['badge_text'] = '';
  231. $args['license_class'] = '';
  232. $args['education_class'] = '';
  233. $args['education_attributes'] = '';
  234. if ( $template['source'] === 'wpforms-addon' ) {
  235. $args['badge_text'] = esc_html__( 'Addon', 'wpforms-lite' );
  236. // At least one addon template available.
  237. $this->is_addon_templates_available = true;
  238. }
  239. if ( empty( $template['has_access'] ) ) {
  240. $args['license_class'] = ' pro';
  241. $args['badge_text'] = $template_license;
  242. $args['education_class'] = ' education-modal';
  243. $args['education_attributes'] = sprintf(
  244. ' data-name="%1$s" data-license="%2$s" data-action="upgrade"',
  245. esc_attr( $template_name ),
  246. esc_attr( $template_license )
  247. );
  248. }
  249. $args['addons_attributes'] = $this->prepare_addons_attributes( $template );
  250. $args['selected'] = ! empty( $this->form_data['meta']['template'] ) && $this->form_data['meta']['template'] === $args['template_id'];
  251. $args['selected_class'] = $args['selected'] ? ' selected' : '';
  252. $args['badge_text'] = $args['selected'] ? esc_html__( 'Selected', 'wpforms-lite' ) : $args['badge_text'];
  253. $args['template'] = $template;
  254. return $args;
  255. }
  256. /**
  257. * Generate addon attributes.
  258. *
  259. * @since 1.6.8
  260. *
  261. * @param array $template Template data.
  262. *
  263. * @return string Addon attributes.
  264. */
  265. private function prepare_addons_attributes( $template ) {
  266. $addons_attributes = '';
  267. $required_addons = false;
  268. if ( ! empty( $template['addons'] ) && is_array( $template['addons'] ) ) {
  269. $required_addons = $this->addons_obj->get_by_slugs( $template['addons'] );
  270. foreach ( $required_addons as $i => $addon ) {
  271. if (
  272. ! isset( $addon['action'] ) ||
  273. ! isset( $addon['title'] ) ||
  274. ! isset( $addon['slug'] ) ||
  275. ! in_array( $addon['action'], [ 'install', 'activate' ], true )
  276. ) {
  277. unset( $required_addons[ $i ] );
  278. }
  279. }
  280. }
  281. if ( ! empty( $required_addons ) ) {
  282. $addons_names = implode( ', ', wp_list_pluck( $required_addons, 'title' ) );
  283. $addons_slugs = implode( ',', wp_list_pluck( $required_addons, 'slug' ) );
  284. $addons_attributes = sprintf(
  285. ' data-addons-names="%1$s" data-addons="%2$s"',
  286. esc_attr( $addons_names ),
  287. esc_attr( $addons_slugs )
  288. );
  289. }
  290. return $addons_attributes;
  291. }
  292. /**
  293. * Determine the template source.
  294. *
  295. * @since 1.6.9
  296. *
  297. * @param array $template Template data.
  298. *
  299. * @return string Template source.
  300. */
  301. private function get_template_source( $template ) {
  302. if ( ! empty( $template['source'] ) ) {
  303. return $template['source'];
  304. }
  305. if ( $template['plugin_dir'] === 'wpforms' || $template['plugin_dir'] === 'wpforms-lite' ) {
  306. return 'wpforms-core';
  307. }
  308. return 'wpforms-addon';
  309. }
  310. /**
  311. * Determine the template categories.
  312. *
  313. * @since 1.6.9
  314. *
  315. * @param array $template Template data.
  316. *
  317. * @return string Template categories coma separated.
  318. */
  319. private function get_template_categories( $template ) {
  320. $categories = ! empty( $template['categories'] ) ? (array) $template['categories'] : [];
  321. if ( isset( $template['source'] ) && $template['source'] === 'wpforms-addon' ) {
  322. $categories[] = 'addons';
  323. }
  324. static $addons = null;
  325. if ( $addons === null ) {
  326. $addons = array_keys( $this->addons_obj->get_all() );
  327. }
  328. if (
  329. isset( $template['source'] ) &&
  330. $template['source'] !== 'wpforms-core' &&
  331. $template['source'] !== 'wpforms-api' &&
  332. ! in_array( $template['plugin_dir'], $addons, true )
  333. ) {
  334. $categories[] = 'custom';
  335. // At least one custom template available.
  336. $this->is_custom_templates_available = true;
  337. }
  338. return implode( ',', $categories );
  339. }
  340. }
  341. new WPForms_Builder_Panel_Setup();