Changeset 3424939
- Timestamp:
- 12/21/2025 09:31:13 PM (2 months ago)
- Location:
- vistawp
- Files:
-
- 28 edited
- 1 copied
-
tags/1.4.3 (copied) (copied from vistawp/trunk)
-
tags/1.4.3/includes/api/get-params.php (modified) (3 diffs)
-
tags/1.4.3/includes/functions.php (modified) (1 diff)
-
tags/1.4.3/includes/multiple-display.php (modified) (2 diffs)
-
tags/1.4.3/includes/options/license-manager.php (modified) (2 diffs)
-
tags/1.4.3/readme.txt (modified) (1 diff)
-
tags/1.4.3/templates/fields/checkbox.php (modified) (2 diffs)
-
tags/1.4.3/templates/fields/number-field.php (modified) (2 diffs)
-
tags/1.4.3/templates/fields/select.php (modified) (2 diffs)
-
tags/1.4.3/templates/fields/text-field.php (modified) (2 diffs)
-
tags/1.4.3/templates/notifications/general.php (modified) (1 diff)
-
tags/1.4.3/templates/notifications/welcome.php (modified) (1 diff)
-
tags/1.4.3/templates/pages/main_page.php (modified) (2 diffs)
-
tags/1.4.3/templates/shortcodes/simple-listings.php (modified) (5 diffs)
-
tags/1.4.3/vista.php (modified) (4 diffs)
-
trunk/includes/api/get-params.php (modified) (3 diffs)
-
trunk/includes/functions.php (modified) (1 diff)
-
trunk/includes/multiple-display.php (modified) (2 diffs)
-
trunk/includes/options/license-manager.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (1 diff)
-
trunk/templates/fields/checkbox.php (modified) (2 diffs)
-
trunk/templates/fields/number-field.php (modified) (2 diffs)
-
trunk/templates/fields/select.php (modified) (2 diffs)
-
trunk/templates/fields/text-field.php (modified) (2 diffs)
-
trunk/templates/notifications/general.php (modified) (1 diff)
-
trunk/templates/notifications/welcome.php (modified) (1 diff)
-
trunk/templates/pages/main_page.php (modified) (2 diffs)
-
trunk/templates/shortcodes/simple-listings.php (modified) (5 diffs)
-
trunk/vista.php (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
vistawp/tags/1.4.3/includes/api/get-params.php
r2949654 r3424939 38 38 public final function get_params(): array { 39 39 $params = array(); 40 41 if (!is_array($_GET)) { 42 return $params; 43 } 44 45 if (!isset($this->mappings) || !is_array($this->mappings)) { 46 return $params; 47 } 48 40 49 // Loop through mappings, retrieve each mapped field 41 50 foreach ($this->mappings as $getName => $paramName) { 51 if (!is_string($getName) || !is_string($paramName)) { 52 continue; 53 } 42 54 43 // Make sure mapped field has content 44 if (empty($_GET[$getName])) 55 if (!isset($_GET[$getName]) || empty($_GET[$getName])) { 45 56 continue; 57 } 46 58 59 $raw_value = $_GET[$getName]; 60 47 61 // Maybe split to array 48 if (is_string($_GET[$getName])) { 49 // Sanitize input 50 $field = \sanitize_text_field($_GET[$getName]); 62 if (is_string($raw_value)) { 63 $field = sanitize_text_field(wp_unslash($raw_value)); 64 65 if (empty($field)) { 66 continue; 67 } 51 68 52 69 // Split parameter if necessary 53 70 $param = preg_split("/(%2C\+)|(, )|\+/", $field); 54 if ($param === false) 71 72 if ($param === false || empty($param)) { 55 73 $param = $field; 74 } else { 75 $param = array_map('sanitize_text_field', $param); 76 $param = array_filter($param, function($value) { 77 return !empty($value); 78 }); 79 80 if (empty($param)) { 81 $param = $field; 82 } 83 } 84 } else if (is_array($raw_value)) { 85 $param = $this->sanitize_array_deep($raw_value); 86 87 if (empty($param)) { 88 continue; 89 } 56 90 } else { 57 $param = $_GET[$getName];91 continue; 58 92 } 59 93 … … 69 103 // We need to add the new values to the array 70 104 } else if (is_array($params[$paramName])) { 71 foreach ($param as $value) 72 $params[$paramName][] = $value; 105 foreach ($param as $value) { 106 // VALIDACIÓN: Solo añadir valores no vacíos 107 if (!empty($value)) { 108 $params[$paramName][] = $value; 109 } 110 } 73 111 } 74 112 } else if (is_string($param)) { 75 113 // We need to combine the old string and the new into an array 76 if (!isset($params[$paramName])) 114 if (!isset($params[$paramName])) { 77 115 // No previous value, simply set the param 78 116 $params[$paramName] = $param; 79 else if (is_string($params[$paramName]))117 } else if (is_string($params[$paramName])) { 80 118 $params[$paramName] = array($params[$paramName], $param); 81 119 // We need to add the new value to the old array 82 else if (is_array($params[$paramName]))120 } else if (is_array($params[$paramName])) { 83 121 $params[$paramName][] = $param; 122 } 84 123 } 85 124 } … … 88 127 } 89 128 129 /** 130 * Sanitiza un array de forma recursiva 131 * 132 * @param array $array Array a sanitizar 133 * @return array Array sanitizado 134 */ 135 private function sanitize_array_deep(array $array): array { 136 $sanitized = array(); 137 138 foreach ($array as $key => $value) { 139 $safe_key = sanitize_key($key); 140 141 if (is_array($value)) { 142 $sanitized[$safe_key] = $this->sanitize_array_deep($value); 143 } else if (is_string($value)) { 144 $sanitized[$safe_key] = sanitize_text_field(wp_unslash($value)); 145 } else if (is_numeric($value)) { 146 $sanitized[$safe_key] = $value; 147 } 148 } 149 150 return $sanitized; 151 } 152 90 153 } -
vistawp/tags/1.4.3/includes/functions.php
r2990365 r3424939 102 102 $dest = wp_validate_redirect($dest, $fallback_url); 103 103 // Uses JS instead of modifying headers 104 echo("<script>location.href = '{$dest}'</script>"); 105 } else { // Headers haven't been sent, can redirect 104 echo '<script>location.href = "' . esc_url($dest) . '"</script>'; 105 } else { 106 // Headers haven't been sent, can redirect 106 107 wp_safe_redirect($dest, $status); 107 108 } -
vistawp/tags/1.4.3/includes/multiple-display.php
r2924340 r3424939 121 121 public static final function url_querystring($atts, string $content): string { 122 122 // Ensure we have a page shortcode attribute 123 if (!isset($atts['page']) )123 if (!isset($atts['page']) || empty($atts['page'])) { 124 124 return self::NO_PAGE_PARAM; 125 125 } 126 127 // Sanitize the page URL 128 $page_url = esc_url_raw($atts['page']); 129 130 // Verify it's a valid URL after sanitization 131 if (empty($page_url)) { 132 return self::NO_PAGE_PARAM; 133 } 134 135 // Get and sanitize query string 136 $query_string = ''; 137 if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) { 138 // Sanitize the query string properly 139 $query_string = sanitize_text_field(wp_unslash($_SERVER['QUERY_STRING'])); 140 126 141 // Only allow [A-Za-z0-9 ,&=?%+] chars in validated string 127 $validated = preg_replace("/[^A-Za-z0-9 ,&=?%+]/", '', $_SERVER['QUERY_STRING']); 128 129 // Construct returned <a> element 130 $query = $validated ? "?" . $validated : ""; 131 return "<a href='{$atts['page']}$query'>$content</a>"; 142 $query_string = preg_replace('/[^A-Za-z0-9_\-=&?%+]/', '', $query_string); 143 } 144 145 // Construct query parameter if exists 146 $query = !empty($query_string) ? '?' . $query_string : ''; 147 $final_url = esc_url($page_url . $query); 148 149 // Escape the content for safe HTML output 150 $safe_content = wp_kses_post($content); 151 152 // Return safely escaped HTML 153 return sprintf( 154 '<a href="%s">%s</a>', 155 $final_url, 156 $safe_content 157 ); 132 158 } 133 159 … … 148 174 */ 149 175 public function pagination_button($atts, string $content): string { 150 // Validate attributes 151 if (!is_array($atts) || !($atts['type'] == 'forward' || $atts['type'] == 'backward')) 176 if (!is_array($atts) || !isset($atts['type'])) { 152 177 return self::NO_TYPE_PARAM; 153 154 // Make sure api is called155 $ err = $this->ensure_api();156 if ($ err)157 return $err;158 159 // Initialize parameters 160 $ disabled = ''; // Whether the button is disabled because we have no more listings in this direction161 $link = \get_page_link();162 $listing_count = (int) $this->api_headers['X-Total-Count'][0];163 $offset = intval($_GET['offset'] ?? 0); // Default offset is 0 as this is the start of the list164 $limit = intval($_GET['limit'] ?? self::DEFAULT_LIMIT); // No sanitization here or prev line as only intval is used165 $class = 'vista-listings-paginator ';166 167 // Assign button params based on type168 if ($atts['type'] == 'forward') {169 $class .= "listings-forward"; 170 $remainder = $listing_count - ($offset + $limit);171 if ($remainder <= 0)172 $disabled = 'disabled'; // Disable if we can't go further173 $link .= "?offset=" . strval($limit + $offset);174 if ($remainder < $limit) {175 $link .= "&limit=$remainder";176 } else {177 $link .= "&limit=$limit";178 } 179 180 $type = sanitize_key($atts['type']); 181 if ($type !== 'forward' && $type !== 'backward') { 182 return self::NO_TYPE_PARAM; 183 } 184 185 $query_args = array(); 186 187 if (is_array($_GET)) { 188 foreach ($_GET as $param => $value) { 189 $safe_param = sanitize_key($param); 190 191 if ($safe_param === 'offset' || $safe_param === 'limit') { 192 continue; 193 } 194 195 if (is_array($value)) { 196 $query_args[$safe_param] = array_map( 197 'sanitize_text_field', 198 array_map('wp_unslash', $value) 199 ); 200 } else { 201 $query_args[$safe_param] = sanitize_text_field(wp_unslash($value)); 202 } 178 203 } 179 } else { 180 $class .= "listings-backward"; 181 if ($offset == 0) 182 $disabled = 'disabled'; // Disable if we can't go further 183 $link .= "?offset=" . ($offset - $limit <= 0 ? 0 : $offset - $limit); 184 // Only the last page can have <self::DEFAULT_LIMIT results, 185 // so previous pages always have self::DEFAULT_LIMIT results 186 $link .= "&limit=" . self::DEFAULT_LIMIT; 187 } 188 // Add other parameters 189 foreach ($_GET as $param => $value) { 190 // Sanitize variables 191 $param = \sanitize_text_field($param); 192 $value = \sanitize_text_field($value); 193 if ($param == 'offset' || $param == 'limit') continue; // We've already recaclulated & included offset & limit 194 $link .= "&$param=$value"; 195 } 196 197 return "<button class='$class' onclick=\"window.location.href='$link'\" $disabled>$content</button>"; 204 } 205 206 $query_args['offset'] = $new_offset; 207 $query_args['limit'] = $new_limit; 208 209 $safe_link = add_query_arg($query_args, $base_link); 210 211 return sprintf( 212 '<button class="%s" onclick="window.location.href=\'%s\'" %s>%s</button>', 213 esc_attr($class), 214 esc_url($safe_link), 215 $safe_disabled, 216 wp_kses_post($content) 217 ); 198 218 } 199 219 -
vistawp/tags/1.4.3/includes/options/license-manager.php
r2990365 r3424939 153 153 $this->clear_key(); 154 154 // Redirect to the same page after clearing the license key 155 \vista_safe_redirect( \esc_url($_SERVER['REQUEST_URI']));155 \vista_safe_redirect(add_query_arg(array())); 156 156 exit; 157 157 } … … 196 196 if ($tier && !array_key_exists($tier, self::TIER_ID)) { 197 197 throw new \InvalidArgumentException( 198 "Invalid tier: " . $tier198 "Invalid tier: " . esc_html($tier) 199 199 ); 200 200 } -
vistawp/tags/1.4.3/readme.txt
r3380981 r3424939 4 4 Tags: IDX, MLS, idx search, Real Estate Search, IDX plugin, RETS, real-estate 5 5 Requires at least: 4.7 6 Tested up to: 6.8 .37 Stable tag: 1.4. 26 Tested up to: 6.8 7 Stable tag: 1.4.3 8 8 Requires PHP: 7.4.1 9 9 License: GPLv2 or later -
vistawp/tags/1.4.3/templates/fields/checkbox.php
r3106883 r3424939 1 1 <?php 2 3 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 4 2 5 /** 3 6 * Template for a form row containing a group of checkboxes rendered by vista_get_template(). … … 15 18 <div class="vista-field-checkbox"> 16 19 <div class="vista-label"> 17 <label for="<? = esc_attr($name); ?>"><?=esc_html($title); ?></label>20 <label for="<?php echo esc_attr($name); ?>"><?php echo esc_html($title); ?></label> 18 21 </div> 19 22 <div class="vista-input"> 20 23 <?php foreach ($options as $key => $value) : ?> 21 <label for="<? =esc_attr($prefix . $value); ?>">22 <input type="checkbox" id="<? = esc_attr($prefix . $value); ?>" name="<?= esc_attr($name); ?>[]" value="<?= esc_attr($value); ?>" <?=(in_array($value, $checked_options)) ? 'checked' : ''; ?> >23 <? =esc_html($key); ?>24 <label for="<?php echo esc_attr($prefix . $value); ?>"> 25 <input type="checkbox" id="<?php echo esc_attr($prefix . $value); ?>" name="<?php echo esc_attr($name); ?>[]" value="<?php echo esc_attr($value); ?>" <?php echo (in_array($value, $checked_options)) ? 'checked' : ''; ?> > 26 <?php echo esc_html($key); ?> 24 27 </label> 25 28 <?php endforeach; ?> -
vistawp/tags/1.4.3/templates/fields/number-field.php
r3106883 r3424939 1 <?php 1 <?php 2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 3 2 4 /** 3 5 * Template for a form row containing a number input field rendered by vista_get_template(). … … 16 18 <div class="vista-field-number"> 17 19 <div class="vista-label"> 18 <label for="<? = esc_attr($id); ?>"><?=esc_html($label); ?></label>20 <label for="<?php echo esc_attr($id); ?>"><?php echo esc_html($label); ?></label> 19 21 </div> 20 22 <div class="vista-input"> 21 <input type="number" step="1000" min="0" id="<? = esc_attr($id); ?>" name="<?= esc_attr($name); ?>" value="<?= esc_attr($value); ?>" placeholder="<?=esc_attr($placeholder); ?>">23 <input type="number" step="1000" min="0" id="<?php echo esc_attr($id); ?>" name="<?php echo esc_attr($name); ?>" value="<?php echo esc_attr($value); ?>" placeholder="<?php echo esc_attr($placeholder); ?>"> 22 24 </div> 23 25 </div> -
vistawp/tags/1.4.3/templates/fields/select.php
r3106883 r3424939 1 <?php 1 <?php 2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 3 2 4 /** 3 5 * Template for a form row containing a select input field rendered by vista_get_template(). … … 18 20 <div class="vista-field-select"> 19 21 <div class="vista-label"> 20 <label for="<? = esc_attr($id); ?>"><?=esc_html($label); ?></label>22 <label for="<?php echo esc_attr($id); ?>"><?php echo esc_html($label); ?></label> 21 23 </div> 22 24 <div class="vista-input"> 23 <select id="<? = esc_attr($id); ?>" name="<?=esc_attr($name); ?>">25 <select id="<?php echo esc_attr($id); ?>" name="<?php echo esc_attr($name); ?>"> 24 26 <?php foreach ($options as $value) : ?> 25 <option value="<? = esc_attr($value); ?>" <?= '' === $value ? 'disabled' : ''; ?> <?=($value === $selected) ? 'selected' : ''; ?>>26 <? ='' === $value ? esc_html($placeholder) : esc_html($value); ?>27 <option value="<?php echo esc_attr($value); ?>" <?php echo '' === $value ? 'disabled' : ''; ?> <?php echo ($value === $selected) ? 'selected' : ''; ?>> 28 <?php echo '' === $value ? esc_html($placeholder) : esc_html($value); ?> 27 29 </option> 28 30 <?php endforeach; ?> -
vistawp/tags/1.4.3/templates/fields/text-field.php
r3106883 r3424939 1 1 <?php 2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 3 2 4 /** 3 5 * Template for a form row with a text input field rendered by vista_get_template(). … … 16 18 <div class="vista-field-text"> 17 19 <div class="vista-label"> 18 <label for="<? = esc_attr($id); ?>"><?=esc_html($label); ?></label>20 <label for="<?php echo esc_attr($id); ?>"><?php echo esc_html($label); ?></label> 19 21 </div> 20 22 <div class="vista-input"> 21 <input type="text" id="<? = esc_attr($id); ?>" name="<?= esc_attr($name); ?>" value="<?= esc_attr($value); ?>" placeholder="<?=esc_attr($placeholder); ?>">23 <input type="text" id="<?php echo esc_attr($id); ?>" name="<?php echo esc_attr($name); ?>" value="<?php echo esc_attr($value); ?>" placeholder="<?php echo esc_attr($placeholder); ?>"> 22 24 </div> 23 25 </div> -
vistawp/tags/1.4.3/templates/notifications/general.php
r3106883 r3424939 1 <div class="notice is-dismissible notice-<?= esc_attr($type); ?>"> 1 <?php 2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 3 4 ?> 5 6 <div class="notice is-dismissible notice-<?php echo esc_attr($type); ?>"> 2 7 <div id="vistawp-banner"> 3 <img height="50" src="<? =esc_url(\vista_plugin_url('img/vista_banner_icon.svg')); ?>">4 <p class="vsta-text-<? = esc_attr($type); ?>"> <?=esc_html($text) ?> </p>8 <img height="50" src="<?php echo esc_url(\vista_plugin_url('img/vista_banner_icon.svg')); ?>"> 9 <p class="vsta-text-<?php echo esc_attr($type); ?>"> <?php echo esc_html($text) ?> </p> 5 10 </div> 6 11 </div> -
vistawp/tags/1.4.3/templates/notifications/welcome.php
r3171043 r3424939 1 <?php 2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 3 4 ?> 5 1 6 <div id="vistawp-welcome" class="notice is-dismissible"> 2 7 <div> 3 <img width="100" src="<? =esc_html(\vista_plugin_url('img/vista_logo.png')); ?>">8 <img width="100" src="<?php echo esc_html(\vista_plugin_url('img/vista_logo.png')); ?>"> 4 9 </div> 5 10 <div> 6 11 <h3>Thanks for activating VistaWP</h3> 7 <p>Head to the <a href="<? =\get_home_url() . '/wp-admin/admin.php?page=vista_main'; ?>">settings page</a> to get started</p>12 <p>Head to the <a href="<?php echo \get_home_url() . '/wp-admin/admin.php?page=vista_main'; ?>">settings page</a> to get started</p> 8 13 </div> 9 14 </div> -
vistawp/tags/1.4.3/templates/pages/main_page.php
r3006497 r3424939 1 1 <?php 2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 3 2 4 /** 3 5 * Template for the main page of the VistaWP plugin, returned by vista_get_template(). … … 37 39 </p><br /> 38 40 39 <form method="post" action="<?php echo esc_url( $_SERVER['REQUEST_URI']); ?>">41 <form method="post" action="<?php echo esc_url(add_query_arg(array())); ?>"> 40 42 <input type="submit" name="generate_pages" value="Generate Vista Pages" class="button-primary vsta-gen-btn"> 41 43 </form> -
vistawp/tags/1.4.3/templates/shortcodes/simple-listings.php
r3171043 r3424939 1 1 <?php 2 3 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 4 2 5 /** 3 6 * Template for the shotcode simple listings, returned by vista_get_template(). … … 15 18 <div class="vista-sl-pagination"> 16 19 <div class="vista-sl-results"> 17 <label class="vista-sl-<? =$theme?>-results-label">[vista_listings_total] results</label>20 <label class="vista-sl-<?php echo esc_attr($theme); ?>-results-label">[vista_listings_total] results</label> 18 21 </div> 19 <div class="vista-sl-<? =$theme?>-prev">22 <div class="vista-sl-<?php echo esc_attr($theme); ?>-prev"> 20 23 [vista_listings_paginator type=backward]Prev[/vista_listings_paginator] 21 24 </div> 22 <div class="vista-sl-<? =$theme?>-next">25 <div class="vista-sl-<?php echo esc_attr($theme); ?>-next"> 23 26 [vista_listings_paginator type=forward]Next[/vista_listings_paginator] 24 27 </div> … … 28 31 <div class="vista-sl-container"> 29 32 [vista_listings_list] 30 <div class="vista-sl-card vista-sl-<? =$theme?>-card">33 <div class="vista-sl-card vista-sl-<?php echo esc_attr($theme); ?>-card"> 31 34 <div class="vista-sl-photo"> 32 <a href="<? =$dest . '?listing='?>[mlsId]" class="vista-sl-photo-link">35 <a href="<?php echo esc_url($dest . '?listing='); ?>[mlsId]" class="vista-sl-photo-link"> 33 36 [first-photo] 34 37 </a> 35 38 </div> 36 39 37 <div class="vista-sl-<? =$theme?>-address">38 <a href="<? =$dest . '?listing='?>[mlsId]" class="vista-sl-address-link">40 <div class="vista-sl-<?php echo esc_attr($theme); ?>-address"> 41 <a href="<?php echo esc_url($dest . '?listing='); ?>[mlsId]" class="vista-sl-address-link"> 39 42 <h2>[address]</h2> 40 43 </a> 41 44 </div> 42 45 43 <div class="vista-sl-<? =$theme?>-price">46 <div class="vista-sl-<?php echo esc_attr($theme); ?>-price"> 44 47 <p>$[listPrice]</p> 45 48 </div> 46 49 47 50 <div class="vista-sl-info"> 48 <div class="vista-sl-<? =$theme?>-beds">51 <div class="vista-sl-<?php echo esc_attr($theme); ?>-beds"> 49 52 <p>[bedrooms]</p><p>Beds</p> 50 53 </div> 51 <div class="vista-sl-<? =$theme?>-baths">54 <div class="vista-sl-<?php echo esc_attr($theme); ?>-baths"> 52 55 <p>[baths]</p><p>Baths</p> 53 56 </div> 54 <div class="vista-sl-<? =$theme?>-sqft">57 <div class="vista-sl-<?php echo esc_attr($theme); ?>-sqft"> 55 58 <p>[sqft]</p><p>Sq. Ft.</p> 56 59 </div> … … 58 61 59 62 <div class="vista-sl-agent-info"> 60 <div class="vista-sl-<? =$theme?>-listingid">63 <div class="vista-sl-<?php echo esc_attr($theme); ?>-listingid"> 61 64 <p>ID: #[listingId]</p> 62 65 </div> 63 <div class="vista-sl-<? =$theme?>-status">66 <div class="vista-sl-<?php echo esc_attr($theme); ?>-status"> 64 67 <p>Status: [status]</p> 65 68 </div> 66 69 </div> 67 70 68 <div class="vista-sl-<? =$theme?>-btn">69 <a href="<? = \get_home_url() . $dest . '?listing='?>[mlsId]" class="vista-sl-<?=$theme?>-link">View Property</a>71 <div class="vista-sl-<?php echo esc_attr($theme); ?>-btn"> 72 <a href="<?php echo esc_url(\get_home_url() . $dest . '?listing='); ?>[mlsId]" class="vista-sl-<?php echo esc_attr($theme); ?>-link">View Property</a> 70 73 </div> 71 74 … … 79 82 <div class="vista-sl-pagination"> 80 83 <div class="vista-sl-results"> 81 <label class="vista-sl-<? =$theme?>-results-label">[vista_listings_total] results</label>84 <label class="vista-sl-<?php echo esc_attr($theme); ?>-results-label">[vista_listings_total] results</label> 82 85 </div> 83 <div class="vista-sl-<? =$theme?>-prev">86 <div class="vista-sl-<?php echo esc_attr($theme); ?>-prev"> 84 87 [vista_listings_paginator type=backward]Prev[/vista_listings_paginator] 85 88 </div> 86 <div class="vista-sl-<? =$theme?>-next">89 <div class="vista-sl-<?php echo esc_attr($theme); ?>-next"> 87 90 [vista_listings_paginator type=forward]Next[/vista_listings_paginator] 88 91 </div> -
vistawp/tags/1.4.3/vista.php
r3380981 r3424939 3 3 * Plugin Name: VistaWP 4 4 * Description: Retrieves and displays real estate listings 5 * Version: 1.4. 25 * Version: 1.4.3 6 6 * Author: VistaWP 7 7 * Author URI: https://vistawp.com/ … … 15 15 16 16 // general constants 17 define( 'VISTA__PLUGIN_VERSION', '1.4. 2' );17 define( 'VISTA__PLUGIN_VERSION', '1.4.3' ); 18 18 define( 'VISTA__PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); 19 19 define( 'VISTA__PLUGIN_URL', plugin_dir_url( __FILE__ ) ); … … 28 28 * @author VistaWP 29 29 * @link https://vistawp.com/ 30 * @version 1.4. 230 * @version 1.4.3 31 31 */ 32 32 class Main { … … 388 388 <p> 389 389 The VistaWP plugin has encountered a fatal error and self-deactivated. 390 Error message: <?php echo $GLOBALS['vista_error_message']; ?>390 Error message: <?php echo esc_html($GLOBALS['vista_error_message']); ?> 391 391 </p> 392 392 </div> -
vistawp/trunk/includes/api/get-params.php
r2949654 r3424939 38 38 public final function get_params(): array { 39 39 $params = array(); 40 41 if (!is_array($_GET)) { 42 return $params; 43 } 44 45 if (!isset($this->mappings) || !is_array($this->mappings)) { 46 return $params; 47 } 48 40 49 // Loop through mappings, retrieve each mapped field 41 50 foreach ($this->mappings as $getName => $paramName) { 51 if (!is_string($getName) || !is_string($paramName)) { 52 continue; 53 } 42 54 43 // Make sure mapped field has content 44 if (empty($_GET[$getName])) 55 if (!isset($_GET[$getName]) || empty($_GET[$getName])) { 45 56 continue; 57 } 46 58 59 $raw_value = $_GET[$getName]; 60 47 61 // Maybe split to array 48 if (is_string($_GET[$getName])) { 49 // Sanitize input 50 $field = \sanitize_text_field($_GET[$getName]); 62 if (is_string($raw_value)) { 63 $field = sanitize_text_field(wp_unslash($raw_value)); 64 65 if (empty($field)) { 66 continue; 67 } 51 68 52 69 // Split parameter if necessary 53 70 $param = preg_split("/(%2C\+)|(, )|\+/", $field); 54 if ($param === false) 71 72 if ($param === false || empty($param)) { 55 73 $param = $field; 74 } else { 75 $param = array_map('sanitize_text_field', $param); 76 $param = array_filter($param, function($value) { 77 return !empty($value); 78 }); 79 80 if (empty($param)) { 81 $param = $field; 82 } 83 } 84 } else if (is_array($raw_value)) { 85 $param = $this->sanitize_array_deep($raw_value); 86 87 if (empty($param)) { 88 continue; 89 } 56 90 } else { 57 $param = $_GET[$getName];91 continue; 58 92 } 59 93 … … 69 103 // We need to add the new values to the array 70 104 } else if (is_array($params[$paramName])) { 71 foreach ($param as $value) 72 $params[$paramName][] = $value; 105 foreach ($param as $value) { 106 // VALIDACIÓN: Solo añadir valores no vacíos 107 if (!empty($value)) { 108 $params[$paramName][] = $value; 109 } 110 } 73 111 } 74 112 } else if (is_string($param)) { 75 113 // We need to combine the old string and the new into an array 76 if (!isset($params[$paramName])) 114 if (!isset($params[$paramName])) { 77 115 // No previous value, simply set the param 78 116 $params[$paramName] = $param; 79 else if (is_string($params[$paramName]))117 } else if (is_string($params[$paramName])) { 80 118 $params[$paramName] = array($params[$paramName], $param); 81 119 // We need to add the new value to the old array 82 else if (is_array($params[$paramName]))120 } else if (is_array($params[$paramName])) { 83 121 $params[$paramName][] = $param; 122 } 84 123 } 85 124 } … … 88 127 } 89 128 129 /** 130 * Sanitiza un array de forma recursiva 131 * 132 * @param array $array Array a sanitizar 133 * @return array Array sanitizado 134 */ 135 private function sanitize_array_deep(array $array): array { 136 $sanitized = array(); 137 138 foreach ($array as $key => $value) { 139 $safe_key = sanitize_key($key); 140 141 if (is_array($value)) { 142 $sanitized[$safe_key] = $this->sanitize_array_deep($value); 143 } else if (is_string($value)) { 144 $sanitized[$safe_key] = sanitize_text_field(wp_unslash($value)); 145 } else if (is_numeric($value)) { 146 $sanitized[$safe_key] = $value; 147 } 148 } 149 150 return $sanitized; 151 } 152 90 153 } -
vistawp/trunk/includes/functions.php
r2990365 r3424939 102 102 $dest = wp_validate_redirect($dest, $fallback_url); 103 103 // Uses JS instead of modifying headers 104 echo("<script>location.href = '{$dest}'</script>"); 105 } else { // Headers haven't been sent, can redirect 104 echo '<script>location.href = "' . esc_url($dest) . '"</script>'; 105 } else { 106 // Headers haven't been sent, can redirect 106 107 wp_safe_redirect($dest, $status); 107 108 } -
vistawp/trunk/includes/multiple-display.php
r2924340 r3424939 121 121 public static final function url_querystring($atts, string $content): string { 122 122 // Ensure we have a page shortcode attribute 123 if (!isset($atts['page']) )123 if (!isset($atts['page']) || empty($atts['page'])) { 124 124 return self::NO_PAGE_PARAM; 125 125 } 126 127 // Sanitize the page URL 128 $page_url = esc_url_raw($atts['page']); 129 130 // Verify it's a valid URL after sanitization 131 if (empty($page_url)) { 132 return self::NO_PAGE_PARAM; 133 } 134 135 // Get and sanitize query string 136 $query_string = ''; 137 if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) { 138 // Sanitize the query string properly 139 $query_string = sanitize_text_field(wp_unslash($_SERVER['QUERY_STRING'])); 140 126 141 // Only allow [A-Za-z0-9 ,&=?%+] chars in validated string 127 $validated = preg_replace("/[^A-Za-z0-9 ,&=?%+]/", '', $_SERVER['QUERY_STRING']); 128 129 // Construct returned <a> element 130 $query = $validated ? "?" . $validated : ""; 131 return "<a href='{$atts['page']}$query'>$content</a>"; 142 $query_string = preg_replace('/[^A-Za-z0-9_\-=&?%+]/', '', $query_string); 143 } 144 145 // Construct query parameter if exists 146 $query = !empty($query_string) ? '?' . $query_string : ''; 147 $final_url = esc_url($page_url . $query); 148 149 // Escape the content for safe HTML output 150 $safe_content = wp_kses_post($content); 151 152 // Return safely escaped HTML 153 return sprintf( 154 '<a href="%s">%s</a>', 155 $final_url, 156 $safe_content 157 ); 132 158 } 133 159 … … 148 174 */ 149 175 public function pagination_button($atts, string $content): string { 150 // Validate attributes 151 if (!is_array($atts) || !($atts['type'] == 'forward' || $atts['type'] == 'backward')) 176 if (!is_array($atts) || !isset($atts['type'])) { 152 177 return self::NO_TYPE_PARAM; 153 154 // Make sure api is called155 $ err = $this->ensure_api();156 if ($ err)157 return $err;158 159 // Initialize parameters 160 $ disabled = ''; // Whether the button is disabled because we have no more listings in this direction161 $link = \get_page_link();162 $listing_count = (int) $this->api_headers['X-Total-Count'][0];163 $offset = intval($_GET['offset'] ?? 0); // Default offset is 0 as this is the start of the list164 $limit = intval($_GET['limit'] ?? self::DEFAULT_LIMIT); // No sanitization here or prev line as only intval is used165 $class = 'vista-listings-paginator ';166 167 // Assign button params based on type168 if ($atts['type'] == 'forward') {169 $class .= "listings-forward"; 170 $remainder = $listing_count - ($offset + $limit);171 if ($remainder <= 0)172 $disabled = 'disabled'; // Disable if we can't go further173 $link .= "?offset=" . strval($limit + $offset);174 if ($remainder < $limit) {175 $link .= "&limit=$remainder";176 } else {177 $link .= "&limit=$limit";178 } 179 180 $type = sanitize_key($atts['type']); 181 if ($type !== 'forward' && $type !== 'backward') { 182 return self::NO_TYPE_PARAM; 183 } 184 185 $query_args = array(); 186 187 if (is_array($_GET)) { 188 foreach ($_GET as $param => $value) { 189 $safe_param = sanitize_key($param); 190 191 if ($safe_param === 'offset' || $safe_param === 'limit') { 192 continue; 193 } 194 195 if (is_array($value)) { 196 $query_args[$safe_param] = array_map( 197 'sanitize_text_field', 198 array_map('wp_unslash', $value) 199 ); 200 } else { 201 $query_args[$safe_param] = sanitize_text_field(wp_unslash($value)); 202 } 178 203 } 179 } else { 180 $class .= "listings-backward"; 181 if ($offset == 0) 182 $disabled = 'disabled'; // Disable if we can't go further 183 $link .= "?offset=" . ($offset - $limit <= 0 ? 0 : $offset - $limit); 184 // Only the last page can have <self::DEFAULT_LIMIT results, 185 // so previous pages always have self::DEFAULT_LIMIT results 186 $link .= "&limit=" . self::DEFAULT_LIMIT; 187 } 188 // Add other parameters 189 foreach ($_GET as $param => $value) { 190 // Sanitize variables 191 $param = \sanitize_text_field($param); 192 $value = \sanitize_text_field($value); 193 if ($param == 'offset' || $param == 'limit') continue; // We've already recaclulated & included offset & limit 194 $link .= "&$param=$value"; 195 } 196 197 return "<button class='$class' onclick=\"window.location.href='$link'\" $disabled>$content</button>"; 204 } 205 206 $query_args['offset'] = $new_offset; 207 $query_args['limit'] = $new_limit; 208 209 $safe_link = add_query_arg($query_args, $base_link); 210 211 return sprintf( 212 '<button class="%s" onclick="window.location.href=\'%s\'" %s>%s</button>', 213 esc_attr($class), 214 esc_url($safe_link), 215 $safe_disabled, 216 wp_kses_post($content) 217 ); 198 218 } 199 219 -
vistawp/trunk/includes/options/license-manager.php
r2990365 r3424939 153 153 $this->clear_key(); 154 154 // Redirect to the same page after clearing the license key 155 \vista_safe_redirect( \esc_url($_SERVER['REQUEST_URI']));155 \vista_safe_redirect(add_query_arg(array())); 156 156 exit; 157 157 } … … 196 196 if ($tier && !array_key_exists($tier, self::TIER_ID)) { 197 197 throw new \InvalidArgumentException( 198 "Invalid tier: " . $tier198 "Invalid tier: " . esc_html($tier) 199 199 ); 200 200 } -
vistawp/trunk/readme.txt
r3380981 r3424939 4 4 Tags: IDX, MLS, idx search, Real Estate Search, IDX plugin, RETS, real-estate 5 5 Requires at least: 4.7 6 Tested up to: 6.8 .37 Stable tag: 1.4. 26 Tested up to: 6.8 7 Stable tag: 1.4.3 8 8 Requires PHP: 7.4.1 9 9 License: GPLv2 or later -
vistawp/trunk/templates/fields/checkbox.php
r3106883 r3424939 1 1 <?php 2 3 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 4 2 5 /** 3 6 * Template for a form row containing a group of checkboxes rendered by vista_get_template(). … … 15 18 <div class="vista-field-checkbox"> 16 19 <div class="vista-label"> 17 <label for="<? = esc_attr($name); ?>"><?=esc_html($title); ?></label>20 <label for="<?php echo esc_attr($name); ?>"><?php echo esc_html($title); ?></label> 18 21 </div> 19 22 <div class="vista-input"> 20 23 <?php foreach ($options as $key => $value) : ?> 21 <label for="<? =esc_attr($prefix . $value); ?>">22 <input type="checkbox" id="<? = esc_attr($prefix . $value); ?>" name="<?= esc_attr($name); ?>[]" value="<?= esc_attr($value); ?>" <?=(in_array($value, $checked_options)) ? 'checked' : ''; ?> >23 <? =esc_html($key); ?>24 <label for="<?php echo esc_attr($prefix . $value); ?>"> 25 <input type="checkbox" id="<?php echo esc_attr($prefix . $value); ?>" name="<?php echo esc_attr($name); ?>[]" value="<?php echo esc_attr($value); ?>" <?php echo (in_array($value, $checked_options)) ? 'checked' : ''; ?> > 26 <?php echo esc_html($key); ?> 24 27 </label> 25 28 <?php endforeach; ?> -
vistawp/trunk/templates/fields/number-field.php
r3106883 r3424939 1 <?php 1 <?php 2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 3 2 4 /** 3 5 * Template for a form row containing a number input field rendered by vista_get_template(). … … 16 18 <div class="vista-field-number"> 17 19 <div class="vista-label"> 18 <label for="<? = esc_attr($id); ?>"><?=esc_html($label); ?></label>20 <label for="<?php echo esc_attr($id); ?>"><?php echo esc_html($label); ?></label> 19 21 </div> 20 22 <div class="vista-input"> 21 <input type="number" step="1000" min="0" id="<? = esc_attr($id); ?>" name="<?= esc_attr($name); ?>" value="<?= esc_attr($value); ?>" placeholder="<?=esc_attr($placeholder); ?>">23 <input type="number" step="1000" min="0" id="<?php echo esc_attr($id); ?>" name="<?php echo esc_attr($name); ?>" value="<?php echo esc_attr($value); ?>" placeholder="<?php echo esc_attr($placeholder); ?>"> 22 24 </div> 23 25 </div> -
vistawp/trunk/templates/fields/select.php
r3106883 r3424939 1 <?php 1 <?php 2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 3 2 4 /** 3 5 * Template for a form row containing a select input field rendered by vista_get_template(). … … 18 20 <div class="vista-field-select"> 19 21 <div class="vista-label"> 20 <label for="<? = esc_attr($id); ?>"><?=esc_html($label); ?></label>22 <label for="<?php echo esc_attr($id); ?>"><?php echo esc_html($label); ?></label> 21 23 </div> 22 24 <div class="vista-input"> 23 <select id="<? = esc_attr($id); ?>" name="<?=esc_attr($name); ?>">25 <select id="<?php echo esc_attr($id); ?>" name="<?php echo esc_attr($name); ?>"> 24 26 <?php foreach ($options as $value) : ?> 25 <option value="<? = esc_attr($value); ?>" <?= '' === $value ? 'disabled' : ''; ?> <?=($value === $selected) ? 'selected' : ''; ?>>26 <? ='' === $value ? esc_html($placeholder) : esc_html($value); ?>27 <option value="<?php echo esc_attr($value); ?>" <?php echo '' === $value ? 'disabled' : ''; ?> <?php echo ($value === $selected) ? 'selected' : ''; ?>> 28 <?php echo '' === $value ? esc_html($placeholder) : esc_html($value); ?> 27 29 </option> 28 30 <?php endforeach; ?> -
vistawp/trunk/templates/fields/text-field.php
r3106883 r3424939 1 1 <?php 2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 3 2 4 /** 3 5 * Template for a form row with a text input field rendered by vista_get_template(). … … 16 18 <div class="vista-field-text"> 17 19 <div class="vista-label"> 18 <label for="<? = esc_attr($id); ?>"><?=esc_html($label); ?></label>20 <label for="<?php echo esc_attr($id); ?>"><?php echo esc_html($label); ?></label> 19 21 </div> 20 22 <div class="vista-input"> 21 <input type="text" id="<? = esc_attr($id); ?>" name="<?= esc_attr($name); ?>" value="<?= esc_attr($value); ?>" placeholder="<?=esc_attr($placeholder); ?>">23 <input type="text" id="<?php echo esc_attr($id); ?>" name="<?php echo esc_attr($name); ?>" value="<?php echo esc_attr($value); ?>" placeholder="<?php echo esc_attr($placeholder); ?>"> 22 24 </div> 23 25 </div> -
vistawp/trunk/templates/notifications/general.php
r3106883 r3424939 1 <div class="notice is-dismissible notice-<?= esc_attr($type); ?>"> 1 <?php 2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 3 4 ?> 5 6 <div class="notice is-dismissible notice-<?php echo esc_attr($type); ?>"> 2 7 <div id="vistawp-banner"> 3 <img height="50" src="<? =esc_url(\vista_plugin_url('img/vista_banner_icon.svg')); ?>">4 <p class="vsta-text-<? = esc_attr($type); ?>"> <?=esc_html($text) ?> </p>8 <img height="50" src="<?php echo esc_url(\vista_plugin_url('img/vista_banner_icon.svg')); ?>"> 9 <p class="vsta-text-<?php echo esc_attr($type); ?>"> <?php echo esc_html($text) ?> </p> 5 10 </div> 6 11 </div> -
vistawp/trunk/templates/notifications/welcome.php
r3171043 r3424939 1 <?php 2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 3 4 ?> 5 1 6 <div id="vistawp-welcome" class="notice is-dismissible"> 2 7 <div> 3 <img width="100" src="<? =esc_html(\vista_plugin_url('img/vista_logo.png')); ?>">8 <img width="100" src="<?php echo esc_html(\vista_plugin_url('img/vista_logo.png')); ?>"> 4 9 </div> 5 10 <div> 6 11 <h3>Thanks for activating VistaWP</h3> 7 <p>Head to the <a href="<? =\get_home_url() . '/wp-admin/admin.php?page=vista_main'; ?>">settings page</a> to get started</p>12 <p>Head to the <a href="<?php echo \get_home_url() . '/wp-admin/admin.php?page=vista_main'; ?>">settings page</a> to get started</p> 8 13 </div> 9 14 </div> -
vistawp/trunk/templates/pages/main_page.php
r3006497 r3424939 1 1 <?php 2 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 3 2 4 /** 3 5 * Template for the main page of the VistaWP plugin, returned by vista_get_template(). … … 37 39 </p><br /> 38 40 39 <form method="post" action="<?php echo esc_url( $_SERVER['REQUEST_URI']); ?>">41 <form method="post" action="<?php echo esc_url(add_query_arg(array())); ?>"> 40 42 <input type="submit" name="generate_pages" value="Generate Vista Pages" class="button-primary vsta-gen-btn"> 41 43 </form> -
vistawp/trunk/templates/shortcodes/simple-listings.php
r3171043 r3424939 1 1 <?php 2 3 if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly 4 2 5 /** 3 6 * Template for the shotcode simple listings, returned by vista_get_template(). … … 15 18 <div class="vista-sl-pagination"> 16 19 <div class="vista-sl-results"> 17 <label class="vista-sl-<? =$theme?>-results-label">[vista_listings_total] results</label>20 <label class="vista-sl-<?php echo esc_attr($theme); ?>-results-label">[vista_listings_total] results</label> 18 21 </div> 19 <div class="vista-sl-<? =$theme?>-prev">22 <div class="vista-sl-<?php echo esc_attr($theme); ?>-prev"> 20 23 [vista_listings_paginator type=backward]Prev[/vista_listings_paginator] 21 24 </div> 22 <div class="vista-sl-<? =$theme?>-next">25 <div class="vista-sl-<?php echo esc_attr($theme); ?>-next"> 23 26 [vista_listings_paginator type=forward]Next[/vista_listings_paginator] 24 27 </div> … … 28 31 <div class="vista-sl-container"> 29 32 [vista_listings_list] 30 <div class="vista-sl-card vista-sl-<? =$theme?>-card">33 <div class="vista-sl-card vista-sl-<?php echo esc_attr($theme); ?>-card"> 31 34 <div class="vista-sl-photo"> 32 <a href="<? =$dest . '?listing='?>[mlsId]" class="vista-sl-photo-link">35 <a href="<?php echo esc_url($dest . '?listing='); ?>[mlsId]" class="vista-sl-photo-link"> 33 36 [first-photo] 34 37 </a> 35 38 </div> 36 39 37 <div class="vista-sl-<? =$theme?>-address">38 <a href="<? =$dest . '?listing='?>[mlsId]" class="vista-sl-address-link">40 <div class="vista-sl-<?php echo esc_attr($theme); ?>-address"> 41 <a href="<?php echo esc_url($dest . '?listing='); ?>[mlsId]" class="vista-sl-address-link"> 39 42 <h2>[address]</h2> 40 43 </a> 41 44 </div> 42 45 43 <div class="vista-sl-<? =$theme?>-price">46 <div class="vista-sl-<?php echo esc_attr($theme); ?>-price"> 44 47 <p>$[listPrice]</p> 45 48 </div> 46 49 47 50 <div class="vista-sl-info"> 48 <div class="vista-sl-<? =$theme?>-beds">51 <div class="vista-sl-<?php echo esc_attr($theme); ?>-beds"> 49 52 <p>[bedrooms]</p><p>Beds</p> 50 53 </div> 51 <div class="vista-sl-<? =$theme?>-baths">54 <div class="vista-sl-<?php echo esc_attr($theme); ?>-baths"> 52 55 <p>[baths]</p><p>Baths</p> 53 56 </div> 54 <div class="vista-sl-<? =$theme?>-sqft">57 <div class="vista-sl-<?php echo esc_attr($theme); ?>-sqft"> 55 58 <p>[sqft]</p><p>Sq. Ft.</p> 56 59 </div> … … 58 61 59 62 <div class="vista-sl-agent-info"> 60 <div class="vista-sl-<? =$theme?>-listingid">63 <div class="vista-sl-<?php echo esc_attr($theme); ?>-listingid"> 61 64 <p>ID: #[listingId]</p> 62 65 </div> 63 <div class="vista-sl-<? =$theme?>-status">66 <div class="vista-sl-<?php echo esc_attr($theme); ?>-status"> 64 67 <p>Status: [status]</p> 65 68 </div> 66 69 </div> 67 70 68 <div class="vista-sl-<? =$theme?>-btn">69 <a href="<? = \get_home_url() . $dest . '?listing='?>[mlsId]" class="vista-sl-<?=$theme?>-link">View Property</a>71 <div class="vista-sl-<?php echo esc_attr($theme); ?>-btn"> 72 <a href="<?php echo esc_url(\get_home_url() . $dest . '?listing='); ?>[mlsId]" class="vista-sl-<?php echo esc_attr($theme); ?>-link">View Property</a> 70 73 </div> 71 74 … … 79 82 <div class="vista-sl-pagination"> 80 83 <div class="vista-sl-results"> 81 <label class="vista-sl-<? =$theme?>-results-label">[vista_listings_total] results</label>84 <label class="vista-sl-<?php echo esc_attr($theme); ?>-results-label">[vista_listings_total] results</label> 82 85 </div> 83 <div class="vista-sl-<? =$theme?>-prev">86 <div class="vista-sl-<?php echo esc_attr($theme); ?>-prev"> 84 87 [vista_listings_paginator type=backward]Prev[/vista_listings_paginator] 85 88 </div> 86 <div class="vista-sl-<? =$theme?>-next">89 <div class="vista-sl-<?php echo esc_attr($theme); ?>-next"> 87 90 [vista_listings_paginator type=forward]Next[/vista_listings_paginator] 88 91 </div> -
vistawp/trunk/vista.php
r3380981 r3424939 3 3 * Plugin Name: VistaWP 4 4 * Description: Retrieves and displays real estate listings 5 * Version: 1.4. 25 * Version: 1.4.3 6 6 * Author: VistaWP 7 7 * Author URI: https://vistawp.com/ … … 15 15 16 16 // general constants 17 define( 'VISTA__PLUGIN_VERSION', '1.4. 2' );17 define( 'VISTA__PLUGIN_VERSION', '1.4.3' ); 18 18 define( 'VISTA__PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); 19 19 define( 'VISTA__PLUGIN_URL', plugin_dir_url( __FILE__ ) ); … … 28 28 * @author VistaWP 29 29 * @link https://vistawp.com/ 30 * @version 1.4. 230 * @version 1.4.3 31 31 */ 32 32 class Main { … … 388 388 <p> 389 389 The VistaWP plugin has encountered a fatal error and self-deactivated. 390 Error message: <?php echo $GLOBALS['vista_error_message']; ?>390 Error message: <?php echo esc_html($GLOBALS['vista_error_message']); ?> 391 391 </p> 392 392 </div>
Note: See TracChangeset
for help on using the changeset viewer.