/wp-content/plugins/wpforms-lite/includes/admin/builder/panels/class-setup.php
PHP | 408 lines | 222 code | 67 blank | 119 comment | 18 complexity | 0badac5229e1aa4102daf97b413a9b49 MD5 | raw file
- <?php
- /**
- * Setup panel.
- *
- * @since 1.0.0
- * @since 1.6.8 Form Builder Refresh.
- */
- class WPForms_Builder_Panel_Setup extends WPForms_Builder_Panel {
- /**
- * Addons data handler class instance.
- *
- * @since 1.6.8
- *
- * @var \WPForms\Admin\Addons\Addons
- */
- private $addons_obj;
- /**
- * Is addon templates available?
- *
- * @since 1.6.9
- *
- * @var bool
- */
- private $is_addon_templates_available = false;
- /**
- * Is custom templates available?
- *
- * @since 1.6.9
- *
- * @var bool
- */
- private $is_custom_templates_available = false;
- /**
- * All systems go.
- *
- * @since 1.0.0
- */
- public function init() {
- // Define panel information.
- $this->name = esc_html__( 'Setup', 'wpforms-lite' );
- $this->slug = 'setup';
- $this->icon = 'fa-cog';
- $this->order = 5;
- $this->addons_obj = wpforms()->get( 'addons' );
- }
- /**
- * Enqueue assets for the Setup panel.
- *
- * @since 1.0.0
- * @since 1.6.8 All the builder stylesheets enqueues moved to the `\WPForms_Builder::enqueues()`.
- */
- public function enqueues() {
- $min = wpforms_get_min_suffix();
- wp_enqueue_script(
- 'wpforms-builder-setup',
- WPFORMS_PLUGIN_URL . "assets/js/components/admin/builder/setup{$min}.js",
- [ 'wpforms-builder', 'listjs' ],
- WPFORMS_VERSION,
- true
- );
- }
- /**
- * Get templates.
- *
- * @since 1.6.8
- *
- * @return array
- */
- private function get_templates() {
- /*
- * Form templates available in the WPForms core plugin.
- *
- * @since 1.4.0
- *
- * @param array $templates Core templates data.
- */
- $core_templates = apply_filters( 'wpforms_form_templates_core', [] );
- /*
- * Form templates available with the WPForms addons.
- * Allows developers to provide additional templates with an addons.
- *
- * @since 1.4.0
- *
- * @param array $templates Addons templates data.
- */
- $additional_templates = apply_filters( 'wpforms_form_templates', [] );
- return array_merge( (array) $core_templates, (array) $additional_templates );
- }
- /**
- * Output the Settings panel primary content.
- *
- * @since 1.0.0
- */
- public function panel_content() {
- ?>
- <div id="wpforms-setup-form-name">
- <label for="wpforms-setup-name"><?php esc_html_e( 'Name Your Form', 'wpforms-lite' ); ?></label>
- <input type="text" id="wpforms-setup-name" placeholder="<?php esc_attr_e( 'Enter your form name here…', 'wpforms-lite' ); ?>">
- </div>
- <div class="wpforms-setup-title">
- <?php esc_html_e( 'Select a Template', 'wpforms-lite' ); ?>
- <span class="wpforms-setup-title-after"></span>
- </div>
- <p class="wpforms-setup-desc secondary-text">
- <?php
- printf(
- wp_kses( /* translators: %1$s - Create template doc link; %2$s - Contact us page link. */
- __( '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' ),
- [
- 'strong' => [],
- 'a' => [
- 'href' => [],
- 'class' => [],
- 'target' => [],
- 'rel' => [],
- ],
- ]
- ),
- 'https://wpforms.com/docs/how-to-create-a-custom-form-template/',
- 'https://wpforms.com/form-template-suggestion/'
- );
- ?>
- </p>
- <?php
- ob_start();
- $this->template_select_options( $this->get_templates() );
- $templates = ob_get_clean();
- ?>
- <div class="wpforms-setup-templates">
- <div class="wpforms-setup-templates-sidebar">
- <div class="wpforms-setup-templates-search-wrap">
- <i class="fa fa-search"></i>
- <input type="text" id="wpforms-setup-template-search" value="" placeholder="<?php esc_attr_e( 'Search Templates', 'wpforms-lite' ); ?>">
- </div>
- <ul class="wpforms-setup-templates-categories">
- <?php $this->template_categories(); ?>
- </ul>
- </div>
- <div id="wpforms-setup-templates-list">
- <div class="list">
- <?php echo $templates; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>
- </div>
- </div>
- </div>
- <?php
- do_action( 'wpforms_setup_panel_after' );
- }
- /**
- * Generate and display categories menu.
- *
- * @since 1.6.8
- */
- private function template_categories() {
- $common_categories = [
- 'all' => esc_html__( 'All Templates', 'wpforms-lite' ),
- ];
- if ( $this->is_custom_templates_available ) {
- $common_categories['custom'] = esc_html__( 'Custom Templates', 'wpforms-lite' );
- }
- if ( $this->is_addon_templates_available ) {
- $common_categories['addons'] = esc_html__( 'Addon Templates', 'wpforms-lite' );
- }
- $categories = array_merge(
- $common_categories,
- wpforms()->get( 'builder_templates' )->get_categories()
- );
- foreach ( $categories as $slug => $name ) {
- printf(
- '<li data-category="%1$s"%2$s>%3$s</li>',
- esc_attr( $slug ),
- $slug === 'all' ? ' class="active"' : '',
- esc_html( $name )
- );
- }
- }
- /**
- * Generate a block of templates to choose from.
- *
- * @since 1.4.0
- * @since 1.6.8 Refactor during the Form Builder Refresh. Deprecate second parameter `$slug`.
- *
- * @param array $templates Templates array.
- * @param string $slug Deprecated.
- */
- public function template_select_options( $templates, $slug = '' ) {
- if ( empty( $templates ) ) {
- return;
- }
- // Loop through each available template.
- foreach ( $templates as $template ) {
- echo wpforms_render( // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
- 'builder/templates-item',
- $this->prepare_template_render_arguments( $template ),
- true
- );
- }
- }
- /**
- * Prepare arguments for rendering template item.
- *
- * @since 1.6.8
- *
- * @param array $template Template data.
- *
- * @return array Arguments.
- */
- private function prepare_template_render_arguments( $template ) {
- $template['plugin_dir'] = isset( $template['plugin_dir'] ) ? $template['plugin_dir'] : '';
- $template['source'] = $this->get_template_source( $template );
- $template['url'] = ! empty( $template['url'] ) ? $template['url'] : '';
- $template['has_access'] = ! empty( $template['license'] ) ? $template['has_access'] : true;
- $args = [];
- $args['template_id'] = ! empty( $template['id'] ) ? $template['id'] : $template['slug'];
- $args['categories'] = $this->get_template_categories( $template );
- $args['demo_url'] = '';
- if ( ! empty( $template['url'] ) ) {
- $utm_campaign = wpforms()->is_pro() ? 'plugin' : 'liteplugin';
- $args['demo_url'] = add_query_arg(
- [
- 'utm_content' => $template['name'],
- ],
- $template['url'] . "?utm_source=WordPress&utm_campaign={$utm_campaign}&utm_medium=builder-templates"
- );
- }
- $template_license = ! empty( $template['license'] ) ? $template['license'] : '';
- $template_name = sprintf( /* translators: %s - Form template name. */
- esc_html__( '%s template', 'wpforms-lite' ),
- esc_html( $template['name'] )
- );
- $args['badge_text'] = '';
- $args['license_class'] = '';
- $args['education_class'] = '';
- $args['education_attributes'] = '';
- if ( $template['source'] === 'wpforms-addon' ) {
- $args['badge_text'] = esc_html__( 'Addon', 'wpforms-lite' );
- // At least one addon template available.
- $this->is_addon_templates_available = true;
- }
- if ( empty( $template['has_access'] ) ) {
- $args['license_class'] = ' pro';
- $args['badge_text'] = $template_license;
- $args['education_class'] = ' education-modal';
- $args['education_attributes'] = sprintf(
- ' data-name="%1$s" data-license="%2$s" data-action="upgrade"',
- esc_attr( $template_name ),
- esc_attr( $template_license )
- );
- }
- $args['addons_attributes'] = $this->prepare_addons_attributes( $template );
- $args['selected'] = ! empty( $this->form_data['meta']['template'] ) && $this->form_data['meta']['template'] === $args['template_id'];
- $args['selected_class'] = $args['selected'] ? ' selected' : '';
- $args['badge_text'] = $args['selected'] ? esc_html__( 'Selected', 'wpforms-lite' ) : $args['badge_text'];
- $args['template'] = $template;
- return $args;
- }
- /**
- * Generate addon attributes.
- *
- * @since 1.6.8
- *
- * @param array $template Template data.
- *
- * @return string Addon attributes.
- */
- private function prepare_addons_attributes( $template ) {
- $addons_attributes = '';
- $required_addons = false;
- if ( ! empty( $template['addons'] ) && is_array( $template['addons'] ) ) {
- $required_addons = $this->addons_obj->get_by_slugs( $template['addons'] );
- foreach ( $required_addons as $i => $addon ) {
- if (
- ! isset( $addon['action'] ) ||
- ! isset( $addon['title'] ) ||
- ! isset( $addon['slug'] ) ||
- ! in_array( $addon['action'], [ 'install', 'activate' ], true )
- ) {
- unset( $required_addons[ $i ] );
- }
- }
- }
- if ( ! empty( $required_addons ) ) {
- $addons_names = implode( ', ', wp_list_pluck( $required_addons, 'title' ) );
- $addons_slugs = implode( ',', wp_list_pluck( $required_addons, 'slug' ) );
- $addons_attributes = sprintf(
- ' data-addons-names="%1$s" data-addons="%2$s"',
- esc_attr( $addons_names ),
- esc_attr( $addons_slugs )
- );
- }
- return $addons_attributes;
- }
- /**
- * Determine the template source.
- *
- * @since 1.6.9
- *
- * @param array $template Template data.
- *
- * @return string Template source.
- */
- private function get_template_source( $template ) {
- if ( ! empty( $template['source'] ) ) {
- return $template['source'];
- }
- if ( $template['plugin_dir'] === 'wpforms' || $template['plugin_dir'] === 'wpforms-lite' ) {
- return 'wpforms-core';
- }
- return 'wpforms-addon';
- }
- /**
- * Determine the template categories.
- *
- * @since 1.6.9
- *
- * @param array $template Template data.
- *
- * @return string Template categories coma separated.
- */
- private function get_template_categories( $template ) {
- $categories = ! empty( $template['categories'] ) ? (array) $template['categories'] : [];
- if ( isset( $template['source'] ) && $template['source'] === 'wpforms-addon' ) {
- $categories[] = 'addons';
- }
- static $addons = null;
- if ( $addons === null ) {
- $addons = array_keys( $this->addons_obj->get_all() );
- }
- if (
- isset( $template['source'] ) &&
- $template['source'] !== 'wpforms-core' &&
- $template['source'] !== 'wpforms-api' &&
- ! in_array( $template['plugin_dir'], $addons, true )
- ) {
- $categories[] = 'custom';
- // At least one custom template available.
- $this->is_custom_templates_available = true;
- }
- return implode( ',', $categories );
- }
- }
- new WPForms_Builder_Panel_Setup();