Advertisement
kirtan13497

Gravity Form Add-on

Sep 28th, 2023
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 13.68 KB | Source Code | 0 0
  1. <?php
  2.  
  3. GFForms::include_addon_framework();
  4.  
  5. class GFSimpleAddOn extends GFAddOn
  6. {
  7.  
  8.     protected $_version = GF_SIMPLE_ADDON_VERSION;
  9.     protected $_min_gravityforms_version = '1.9';
  10.     protected $_slug = 'kd-shortcode-used';
  11.     protected $_path = 'simpleaddon/simpleaddon.php';
  12.     protected $_full_path = __FILE__;
  13.     protected $_title = 'Gravity Forms Shortcode Used';
  14.     protected $_short_title = 'Shortcode Used';
  15.  
  16.     private static $_instance = null;
  17.  
  18.     /**
  19.      * Get an instance of this class.
  20.      *
  21.      * @return GFSimpleAddOn
  22.      */
  23.     public static function get_instance()
  24.     {
  25.         if (self::$_instance == null) {
  26.             self::$_instance = new GFSimpleAddOn();
  27.         }
  28.  
  29.         return self::$_instance;
  30.     }
  31.  
  32.     /**
  33.      * Handles hooks and loading of language files.
  34.      */
  35.     public function init()
  36.     {
  37.         parent::init();
  38.         add_filter('gform_submit_button', array($this, 'form_submit_button'), 10, 2);
  39.         add_action('gform_after_submission', array($this, 'after_submission'), 10, 2);
  40.     }
  41.  
  42.  
  43.     // # SCRIPTS & STYLES -----------------------------------------------------------------------------------------------
  44.  
  45.     /**
  46.      * Return the scripts which should be enqueued.
  47.      *
  48.      * @return array
  49.      */
  50.     public function scripts()
  51.     {
  52.         $scripts = array(
  53.             array(
  54.                 'handle'  => 'my_script_js',
  55.                 'src'     => $this->get_base_url() . '/js/my_script.js',
  56.                 'version' => $this->_version,
  57.                 'deps'    => array('jquery'),
  58.                 'strings' => array(
  59.                     'first'  => esc_html__('First Choice', 'simpleaddon'),
  60.                     'second' => esc_html__('Second Choice', 'simpleaddon'),
  61.                     'third'  => esc_html__('Third Choice', 'simpleaddon')
  62.                 ),
  63.                 'enqueue' => array(
  64.                     array(
  65.                         'admin_page' => array('form_settings'),
  66.                         'tab'        => 'simpleaddon'
  67.                     )
  68.                 )
  69.             ),
  70.  
  71.         );
  72.  
  73.         return array_merge(parent::scripts(), $scripts);
  74.     }
  75.  
  76.     /**
  77.      * Return the stylesheets which should be enqueued.
  78.      *
  79.      * @return array
  80.      */
  81.     public function styles()
  82.     {
  83.         $styles = array(
  84.             array(
  85.                 'handle'  => 'my_styles_css',
  86.                 'src'     => $this->get_base_url() . '/css/my_styles.css',
  87.                 'version' => $this->_version,
  88.                 'enqueue' => array(
  89.                     array('field_types' => array('poll'))
  90.                 )
  91.             )
  92.         );
  93.  
  94.         return array_merge(parent::styles(), $styles);
  95.     }
  96.  
  97.  
  98.     // # FRONTEND FUNCTIONS --------------------------------------------------------------------------------------------
  99.  
  100.     /**
  101.      * Add the text in the plugin settings to the bottom of the form if enabled for this form.
  102.      *
  103.      * @param string $button The string containing the input tag to be filtered.
  104.      * @param array $form The form currently being displayed.
  105.      *
  106.      * @return string
  107.      */
  108.     function form_submit_button($button, $form)
  109.     {
  110.         $settings = $this->get_form_settings($form);
  111.         if (isset($settings['enabled']) && true == $settings['enabled']) {
  112.             $text   = $this->get_plugin_setting('mytextbox');
  113.             $button = "<div>{$text}</div>" . $button;
  114.         }
  115.  
  116.         return $button;
  117.     }
  118.  
  119.  
  120.     // # ADMIN FUNCTIONS -----------------------------------------------------------------------------------------------
  121.  
  122.     /**
  123.      * Creates a custom page for this add-on.
  124.      */
  125.     public function plugin_page()
  126.     {
  127.         echo 'This page appears in the Forms menu';
  128.     }
  129.  
  130.     /**
  131.      * Configures the settings which should be rendered on the add-on settings tab.
  132.      *
  133.      * @return array
  134.      */
  135.     public function plugin_settings_fields()
  136.     {
  137.         return array(
  138.             array(
  139.                 'title'  => esc_html__('Shortcode Used', 'simpleaddon'),
  140.                 'fields' => array(
  141.                     array(
  142.                         'name'              => 'mytextbox',
  143.                         'tooltip'           => esc_html__('This is the tooltip', 'simpleaddon'),
  144.                         'label'             => esc_html__('This is the label', 'simpleaddon'),
  145.                         'type'              => 'text',
  146.                         'class'             => 'small',
  147.                         'feedback_callback' => array($this, 'is_valid_setting'),
  148.                     )
  149.                 )
  150.             )
  151.         );
  152.     }
  153.  
  154.     /**
  155.      * Configures the settings which should be rendered on the Form Settings > Simple Add-On tab.
  156.      *
  157.      * @return array
  158.      */
  159.     public function form_settings_fields($form)
  160.     {
  161.  
  162.         global $wp, $wpdb;
  163.  
  164.         $pages = $wpdb->get_results('SELECT ID, post_title, post_content FROM ' . $wpdb->prefix . 'posts WHERE post_content LIKE "%[gravityform id=_u0022' . $_GET['id'] . '_u0022%]%" AND post_status LIKE "publish"');
  165.         $html = '';
  166.  
  167.         if (empty($pages)) {
  168.             $html = 'Not used';
  169.         } else {
  170.             foreach ($pages as $page) {
  171.                 $html .= "<a href='" . get_the_permalink($page->ID) . "' target='_blank'>" . $page->post_title . "</a><br>";
  172.             }
  173.         }
  174.  
  175.  
  176.         $pages = $wpdb->get_results('SELECT ID, post_title FROM ' . $wpdb->prefix . 'posts WHERE post_content LIKE "%[gravityform%" AND post_status LIKE "publish"');
  177.         $html_all = '';
  178.  
  179.         if (empty($pages)) {
  180.             $html_all = 'Gravity Forms is not used yet.';
  181.         } else {
  182.             foreach ($pages as $page) {
  183.                 $html_all .= "<a href='" . get_the_permalink($page->ID) . "' target='_blank'>" . $page->post_title . "</a><br>";
  184.             }
  185.         }
  186.  
  187.  
  188.         return array(
  189.             array(
  190.                 'title'  => esc_html__('Posts/Pages where shortcode is used', 'simpleaddon'),
  191.                 'description' => $html,
  192.                 'fields' => array(
  193.  
  194.                     array(
  195.                         'label'   => esc_html__('My checkbox', 'simpleaddon'),
  196.                         'type'    => 'hidden',
  197.                         'name'    => 'enabled',
  198.                         'tooltip' => esc_html__('This is the tooltip', 'simpleaddon'),
  199.                         'choices' => array(
  200.                             array(
  201.                                 'label' => esc_html__('Enabled', 'simpleaddon'),
  202.                                 'name'  => 'enabled',
  203.                             ),
  204.                         ),
  205.                     ),
  206.                 ),
  207.             ),
  208.             array(
  209.                 'title'  => esc_html__('All Posts/Pages where [gravityforms] shortcode is used', 'simpleaddon'),
  210.                 'description' => $html_all,
  211.                 'fields' => array(
  212.  
  213.                     array(
  214.                         'label'   => esc_html__('My checkbox', 'simpleaddon'),
  215.                         'type'    => 'hidden',
  216.                         'name'    => 'enabled',
  217.                         'tooltip' => esc_html__('This is the tooltip', 'simpleaddon'),
  218.                         'choices' => array(
  219.                             array(
  220.                                 'label' => esc_html__('Enabled', 'simpleaddon'),
  221.                                 'name'  => 'enabled',
  222.                             ),
  223.                         ),
  224.                     ),
  225.                 ),
  226.             ),
  227.         );
  228.     }
  229.  
  230.     /**
  231.      * Define the markup for the my_custom_field_type type field.
  232.      *
  233.      * @param array $field The field properties.
  234.      * @param bool|true $echo Should the setting markup be echoed.
  235.      */
  236.     public function settings_my_custom_field_type($field, $echo = true)
  237.     {
  238.         echo '<div>' . esc_html__('My custom field contains a few settings:', 'simpleaddon') . '</div>';
  239.  
  240.         // get the text field settings from the main field and then render the text field
  241.         $text_field = $field['args']['text'];
  242.         $this->settings_text($text_field);
  243.  
  244.         // get the checkbox field settings from the main field and then render the checkbox field
  245.         $checkbox_field = $field['args']['checkbox'];
  246.         $this->settings_checkbox($checkbox_field);
  247.     }
  248.  
  249.  
  250.     // # SIMPLE CONDITION EXAMPLE --------------------------------------------------------------------------------------
  251.  
  252.     /**
  253.      * Define the markup for the custom_logic_type type field.
  254.      *
  255.      * @param array $field The field properties.
  256.      * @param bool|true $echo Should the setting markup be echoed.
  257.      */
  258.     public function settings_custom_logic_type($field, $echo = true)
  259.     {
  260.  
  261.         // Get the setting name.
  262.         $name = $field['name'];
  263.  
  264.         // Define the properties for the checkbox to be used to enable/disable access to the simple condition settings.
  265.         $checkbox_field = array(
  266.             'name'    => $name,
  267.             'type'    => 'checkbox',
  268.             'choices' => array(
  269.                 array(
  270.                     'label' => esc_html__('Enabled', 'simpleaddon'),
  271.                     'name'  => $name . '_enabled',
  272.                 ),
  273.             ),
  274.             'onclick' => "if(this.checked){jQuery('#{$name}_condition_container').show();} else{jQuery('#{$name}_condition_container').hide();}",
  275.         );
  276.  
  277.         // Determine if the checkbox is checked, if not the simple condition settings should be hidden.
  278.         $is_enabled      = $this->get_setting($name . '_enabled') == '1';
  279.         $container_style = !$is_enabled ? "style='display:none;'" : '';
  280.  
  281.         // Put together the field markup.
  282.         $str = sprintf(
  283.             "%s<div id='%s_condition_container' %s>%s</div>",
  284.             $this->settings_checkbox($checkbox_field, false),
  285.             $name,
  286.             $container_style,
  287.             $this->simple_condition($name)
  288.         );
  289.  
  290.         echo $str;
  291.     }
  292.  
  293.     /**
  294.      * Build an array of choices containing fields which are compatible with conditional logic.
  295.      *
  296.      * @return array
  297.      */
  298.     public function get_conditional_logic_fields()
  299.     {
  300.         $form   = $this->get_current_form();
  301.         $fields = array();
  302.         foreach ($form['fields'] as $field) {
  303.             if ($field->is_conditional_logic_supported()) {
  304.                 $inputs = $field->get_entry_inputs();
  305.  
  306.                 if ($inputs) {
  307.                     $choices = array();
  308.  
  309.                     foreach ($inputs as $input) {
  310.                         if (rgar($input, 'isHidden')) {
  311.                             continue;
  312.                         }
  313.                         $choices[] = array(
  314.                             'value' => $input['id'],
  315.                             'label' => GFCommon::get_label($field, $input['id'], true)
  316.                         );
  317.                     }
  318.  
  319.                     if (!empty($choices)) {
  320.                         $fields[] = array('choices' => $choices, 'label' => GFCommon::get_label($field));
  321.                     }
  322.                 } else {
  323.                     $fields[] = array('value' => $field->id, 'label' => GFCommon::get_label($field));
  324.                 }
  325.             }
  326.         }
  327.  
  328.         return $fields;
  329.     }
  330.  
  331.     /**
  332.      * Evaluate the conditional logic.
  333.      *
  334.      * @param array $form The form currently being processed.
  335.      * @param array $entry The entry currently being processed.
  336.      *
  337.      * @return bool
  338.      */
  339.     public function is_custom_logic_met($form, $entry)
  340.     {
  341.         if ($this->is_gravityforms_supported('2.0.7.4')) {
  342.             // Use the helper added in Gravity Forms 2.0.7.4.
  343.  
  344.             return $this->is_simple_condition_met('custom_logic', $form, $entry);
  345.         }
  346.  
  347.         // Older version of Gravity Forms, use our own method of validating the simple condition.
  348.         $settings = $this->get_form_settings($form);
  349.  
  350.         $name       = 'custom_logic';
  351.         $is_enabled = rgar($settings, $name . '_enabled');
  352.  
  353.         if (!$is_enabled) {
  354.             // The setting is not enabled so we handle it as if the rules are met.
  355.  
  356.             return true;
  357.         }
  358.  
  359.         // Build the logic array to be used by Gravity Forms when evaluating the rules.
  360.         $logic = array(
  361.             'logicType' => 'all',
  362.             'rules'     => array(
  363.                 array(
  364.                     'fieldId'  => rgar($settings, $name . '_field_id'),
  365.                     'operator' => rgar($settings, $name . '_operator'),
  366.                     'value'    => rgar($settings, $name . '_value'),
  367.                 ),
  368.             )
  369.         );
  370.  
  371.         return GFCommon::evaluate_conditional_logic($logic, $form, $entry);
  372.     }
  373.  
  374.     /**
  375.      * Performing a custom action at the end of the form submission process.
  376.      *
  377.      * @param array $entry The entry currently being processed.
  378.      * @param array $form The form currently being processed.
  379.      */
  380.     public function after_submission($entry, $form)
  381.     {
  382.  
  383.         // Evaluate the rules configured for the custom_logic setting.
  384.         $result = $this->is_custom_logic_met($form, $entry);
  385.  
  386.         if ($result) {
  387.             // Do something awesome because the rules were met.
  388.         }
  389.     }
  390.  
  391.  
  392.     // # HELPERS -------------------------------------------------------------------------------------------------------
  393.  
  394.     /**
  395.      * The feedback callback for the 'mytextbox' setting on the plugin settings page and the 'mytext' setting on the form settings page.
  396.      *
  397.      * @param string $value The setting value.
  398.      *
  399.      * @return bool
  400.      */
  401.     public function is_valid_setting($value)
  402.     {
  403.         return strlen($value) < 10;
  404.     }
  405. }
  406. ?>
Tags: gform
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement