public function render_frontend($widget_args, $content = '', $context = '')
 {
     if (!$this->pre_render_frontend()) {
         return;
     }
     if (!empty($widget_args['title'])) {
         echo $widget_args['title'];
     }
     // Make sure the class is loaded in DataTables
     if (!class_exists('GFFormDisplay')) {
         include_once GFCommon::get_base_path() . '/form_display.php';
     }
     $widget_args['content'] = trim(rtrim($widget_args['content']));
     // No custom content
     if (empty($widget_args['content'])) {
         do_action('gravityview_log_debug', sprintf('%s[render_frontend]: No content.', get_class($this)));
         return;
     }
     // Add paragraphs?
     if (!empty($widget_args['wpautop'])) {
         $widget_args['content'] = wpautop($widget_args['content']);
     }
     $content = $widget_args['content'];
     $content = GravityView_Merge_Tags::replace_variables($content);
     // Enqueue scripts needed for Gravity Form display, if form shortcode exists.
     // Also runs `do_shortcode()`
     $content = GFCommon::gform_do_shortcode($content);
     // Add custom class
     $class = !empty($widget_args['custom_class']) ? $widget_args['custom_class'] : '';
     $class = gravityview_sanitize_html_class($class);
     echo '<div class="gv-widget-custom-content ' . $class . '">' . $content . '</div>';
 }
 /**
  * Add {date_created} merge tag and format the values using format_date
  *
  * @since 1.16
  *
  * @see http://docs.gravityview.co/article/331-date-created-merge-tag for usage information
  *
  * @param array $matches Array of Merge Tag matches found in text by preg_match_all
  * @param string $text Text to replace
  * @param array $form Gravity Forms form array
  * @param array $entry Entry array
  * @param bool $url_encode Whether to URL-encode output
  *
  * @return string Original text if {date_created} isn't found. Otherwise, replaced text.
  */
 public function replace_merge_tag($matches = array(), $text = '', $form = array(), $entry = array(), $url_encode = false, $esc_html = false)
 {
     $return = $text;
     /** Use $this->name instead of date_created because Payment Date uses this as well*/
     $date_created = rgar($entry, $this->name);
     foreach ($matches as $match) {
         $full_tag = $match[0];
         $property = $match[1];
         $formatted_date = GravityView_Merge_Tags::format_date($date_created, $property);
         $return = str_replace($full_tag, $formatted_date, $return);
     }
     return $return;
 }
 /**
  * Validate attributes passed to the [gravityview] shortcode. Supports {get} Merge Tags values.
  *
  * Attributes passed to the shortcode are compared to registered attributes {@see GravityView_View_Data::get_default_args}
  * Only attributes that are defined will be allowed through.
  *
  * Then, {get} merge tags are replaced with their $_GET values, if passed
  *
  * Then, attributes are sanitized based on the type of setting (number, checkbox, select, radio, text)
  *
  * @since 1.15.1
  *
  * @see GravityView_View_Data::get_default_args Only attributes defined in get_default_args() are valid to be passed via the shortcode
  *
  * @param array $passed_atts Attribute pairs defined to render the View
  *
  * @return array Valid and sanitized attribute pairs
  */
 private function parse_and_sanitize_atts($passed_atts)
 {
     $defaults = GravityView_View_Data::get_default_args(true);
     $supported_atts = array_fill_keys(array_keys($defaults), '');
     // Whittle down the attributes to only valid pairs
     $filtered_atts = shortcode_atts($supported_atts, $passed_atts, 'gravityview');
     // Only keep the passed attributes after making sure that they're valid pairs
     $filtered_atts = function_exists('array_intersect_key') ? array_intersect_key($passed_atts, $filtered_atts) : $filtered_atts;
     $atts = array();
     foreach ($filtered_atts as $key => $passed_value) {
         // Allow using GravityView merge tags in shortcode attributes, like {get} and {created_by}
         $passed_value = GravityView_Merge_Tags::replace_variables($passed_value);
         switch ($defaults[$key]['type']) {
             /**
              * Make sure number fields are numeric.
              * Also, convert mixed number strings to numbers
              * @see http://php.net/manual/en/function.is-numeric.php#107326
              */
             case 'number':
                 if (is_numeric($passed_value)) {
                     $atts[$key] = $passed_value + 0;
                 }
                 break;
                 // Checkboxes should be 1 or 0
             // Checkboxes should be 1 or 0
             case 'checkbox':
                 $atts[$key] = gv_empty($passed_value) ? 0 : 1;
                 break;
                 /**
                  * Only allow values that are defined in the settings
                  */
             /**
              * Only allow values that are defined in the settings
              */
             case 'select':
             case 'radio':
                 $options = isset($defaults[$key]['choices']) ? $defaults[$key]['choices'] : $defaults[$key]['options'];
                 if (in_array($passed_value, array_keys($options))) {
                     $atts[$key] = $passed_value;
                 }
                 break;
             case 'text':
             default:
                 $atts[$key] = $passed_value;
                 break;
         }
     }
     return $atts;
 }
 /**
  * We want to make sure that GravityView doesn't mess with Texas
  * @since 1.15.1
  */
 function test_gf_merge_tags()
 {
     remove_all_filters('gform_pre_replace_merge_tags');
     remove_all_filters('gform_merge_tag_filter');
     global $post;
     $form = $this->factory->form->create_and_get();
     $post = $this->factory->post->create_and_get();
     $entry = $this->factory->entry->create_and_get(array('post_id' => $post->ID, 'form_id' => $form['id']));
     $tests = array('{form_title}' => $form['title'], '{entry_id}' => $entry['id'], '{entry_url}' => get_bloginfo('wpurl') . '/wp-admin/admin.php?page=gf_entries&view=entry&id=' . $form['id'] . '&lid=' . rgar($entry, 'id'), '{admin_email}' => get_bloginfo('admin_email'), '{post_id}' => $post->ID, '{embed_post:post_title}' => $post->post_title);
     foreach ($tests as $merge_tag => $expected) {
         $this->assertEquals($expected, GravityView_Merge_Tags::replace_variables($merge_tag, $form, $entry));
         $this->assertEquals(urlencode($expected), GravityView_Merge_Tags::replace_variables($merge_tag, $form, $entry, true));
         remove_filter('gform_replace_merge_tags', array('GravityView_Merge_Tags', 'replace_gv_merge_tags'), 10);
         $this->assertEquals($expected, GFCommon::replace_variables($merge_tag, $form, $entry));
         $this->assertEquals(urlencode($expected), GFCommon::replace_variables($merge_tag, $form, $entry, true));
         add_filter('gform_replace_merge_tags', array('GravityView_Merge_Tags', 'replace_gv_merge_tags'), 10, 7);
     }
     wp_reset_postdata();
 }
Beispiel #5
0
 /**
  * Alias for GravityView_Merge_Tags::replace_variables()
  *
  * @see GravityView_Merge_Tags::replace_variables() Moved in 1.8.4
  *
  * @param  string      $text       Text to replace variables in
  * @param  array      $form        GF Form array
  * @param  array      $entry        GF Entry array
  * @return string                  Text with variables maybe replaced
  */
 public static function replace_variables($text, $form, $entry)
 {
     return GravityView_Merge_Tags::replace_variables($text, $form, $entry);
 }