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(); }
/** * 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); }