| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280 |
- <?php
- /**
- * Base form template.
- *
- * @since 1.0.0
- */
- abstract class WPForms_Template {
- /**
- * Full name of the template, eg "Contact Form".
- *
- * @since 1.0.0
- *
- * @var string
- */
- public $name;
- /**
- * Slug of the template, eg "contact-form" - no spaces.
- *
- * @since 1.0.0
- *
- * @var string
- */
- public $slug;
- /**
- * Source of the template.
- *
- * @since 1.6.8
- *
- * @var array
- */
- public $source;
- /**
- * Categories array.
- *
- * @since 1.6.8
- *
- * @var array
- */
- public $categories;
- /**
- * Short description the template.
- *
- * @since 1.0.0
- *
- * @var string
- */
- public $description = '';
- /**
- * Short description of the fields included with the template.
- *
- * @since 1.0.0
- *
- * @var string
- */
- public $includes = '';
- /**
- * URL of the icon to display in the admin area.
- *
- * @since 1.0.0
- *
- * @var string
- */
- public $icon = '';
- /**
- * Array of data that is assigned to the post_content on form creation.
- *
- * @since 1.0.0
- *
- * @var array
- */
- public $data;
- /**
- * Priority to show in the list of available templates.
- *
- * @since 1.0.0
- *
- * @var int
- */
- public $priority = 20;
- /**
- * Core or additional template.
- *
- * @since 1.4.0
- *
- * @var bool
- */
- public $core = false;
- /**
- * Modal message to display when the template is applied.
- *
- * @since 1.0.0
- *
- * @var array
- */
- public $modal = '';
- /**
- * Primary class constructor.
- *
- * @since 1.0.0
- */
- public function __construct() {
- // Bootstrap.
- $this->init();
- $type = $this->core ? '_core' : '';
- add_filter( "wpforms_form_templates{$type}", [ $this, 'template_details' ], $this->priority );
- add_filter( 'wpforms_create_form_args', [ $this, 'template_data' ], 10, 2 );
- add_filter( 'wpforms_save_form_args', [ $this, 'template_replace' ], 10, 3 );
- add_filter( 'wpforms_builder_template_active', [ $this, 'template_active' ], 10, 2 );
- }
- /**
- * Let's get started.
- *
- * @since 1.0.0
- */
- public function init() {}
- /**
- * Add basic template details to the Add New Form admin screen.
- *
- * @since 1.0.0
- *
- * @param array $templates Templates array.
- *
- * @return array
- */
- public function template_details( $templates ) {
- $templates[] = [
- 'name' => $this->name,
- 'slug' => $this->slug,
- 'source' => $this->source,
- 'categories' => $this->categories,
- 'description' => $this->description,
- 'includes' => $this->includes,
- 'icon' => $this->icon,
- 'plugin_dir' => $this->get_plugin_dir(),
- ];
- return $templates;
- }
- /**
- * Get the directory name of the plugin in which current template resides.
- *
- * @since 1.6.9
- *
- * @return string
- */
- private function get_plugin_dir() {
- $reflection = new \ReflectionClass( $this );
- $template_file_path = wp_normalize_path( $reflection->getFileName() );
- // Cutting out the WP_PLUGIN_DIR from the beginning of the template file path.
- $template_file_path = preg_replace( '{^' . wp_slash( wp_normalize_path( WP_PLUGIN_DIR ) ) . '}', '', $template_file_path );
- $template_file_chunks = explode( '/', $template_file_path );
- return $template_file_chunks[1];
- }
- /**
- * Add template data when form is created.
- *
- * @since 1.0.0
- *
- * @param array $args Create form arguments.
- * @param array $data Template data.
- *
- * @return array
- */
- public function template_data( $args, $data ) {
- if ( ! empty( $data ) && ! empty( $data['template'] ) ) {
- if ( $data['template'] === $this->slug ) {
- // Enable Notifications by default.
- $this->data['settings']['notification_enable'] = isset( $this->data['settings']['notification_enable'] )
- ? $this->data['settings']['notification_enable']
- : 1;
- $args['post_content'] = wpforms_encode( $this->data );
- }
- }
- return $args;
- }
- /**
- * Replace template on post update if triggered.
- *
- * @since 1.0.0
- *
- * @param array $form Form post data.
- * @param array $data Form data.
- * @param array $args Update form arguments.
- *
- * @return array
- */
- public function template_replace( $form, $data, $args ) {
- if ( ! empty( $args['template'] ) ) {
- if ( $args['template'] === $this->slug ) {
- $new = $this->data;
- $new['settings'] = ! empty( $form['post_content']['settings'] ) ? $form['post_content']['settings'] : [];
- $form['post_content'] = wpforms_encode( $new );
- }
- }
- return $form;
- }
- /**
- * Pass information about the active template back to the builder.
- *
- * @since 1.0.0
- *
- * @param array $details Details.
- * @param object $form Form data.
- *
- * @return array|void
- */
- public function template_active( $details, $form ) {
- if ( empty( $form ) ) {
- return;
- }
- $form_data = wpforms_decode( $form->post_content );
- if ( empty( $this->modal ) || empty( $form_data['meta']['template'] ) || $this->slug !== $form_data['meta']['template'] ) {
- return $details;
- } else {
- $display = $this->template_modal_conditional( $form_data );
- }
- return [
- 'name' => $this->name,
- 'slug' => $this->slug,
- 'description' => $this->description,
- 'includes' => $this->includes,
- 'icon' => $this->icon,
- 'modal' => $this->modal,
- 'modal_display' => $display,
- ];
- }
- /**
- * Conditional to determine if the template informational modal screens
- * should display.
- *
- * @since 1.0.0
- *
- * @param array $form_data Form data and settings.
- *
- * @return bool
- */
- public function template_modal_conditional( $form_data ) {
- return false;
- }
- }
|