WP Store Locator - Version 2.2.7

Version Description

Download this release

Release Info

Developer tijmensmit
Plugin Icon 128x128 WP Store Locator
Version 2.2.7
Comparing to
See all releases

Code changes from version 2.2.6 to 2.2.7

admin/EDD_SL_Plugin_Updater.php CHANGED
@@ -1,438 +1,442 @@
1
  <?php
2
 
3
- // uncomment this line for testing
4
- //set_site_transient( 'update_plugins', null );
5
-
6
  // Exit if accessed directly
7
  if ( ! defined( 'ABSPATH' ) ) exit;
8
 
9
  /**
10
  * Allows plugins to use their own update API.
11
  *
12
- * @author Pippin Williamson
13
- * @version 1.6.7
14
  */
15
  class EDD_SL_Plugin_Updater {
16
 
17
- private $api_url = '';
18
- private $api_data = array();
19
- private $name = '';
20
- private $slug = '';
21
- private $version = '';
22
- private $wp_override = false;
23
- private $cache_key = '';
24
-
25
- /**
26
- * Class constructor.
27
- *
28
- * @uses plugin_basename()
29
- * @uses hook()
30
- *
31
- * @param string $_api_url The URL pointing to the custom API endpoint.
32
- * @param string $_plugin_file Path to the plugin file.
33
- * @param array $_api_data Optional data to send with API calls.
34
- */
35
- public function __construct( $_api_url, $_plugin_file, $_api_data = null ) {
36
-
37
- global $edd_plugin_data;
38
-
39
- $this->api_url = trailingslashit( $_api_url );
40
- $this->api_data = $_api_data;
41
- $this->name = plugin_basename( $_plugin_file );
42
- $this->slug = basename( $_plugin_file, '.php' );
43
- $this->version = $_api_data['version'];
44
- $this->wp_override = isset( $_api_data['wp_override'] ) ? (bool) $_api_data['wp_override'] : false;
45
-
46
- $this->cache_key = md5( serialize( $this->slug . $this->api_data['license'] ) );
47
-
48
- $edd_plugin_data[ $this->slug ] = $this->api_data;
49
 
50
- // Set up hooks.
51
- $this->init();
 
 
 
 
 
 
 
 
 
 
 
52
 
53
- }
 
 
 
 
 
54
 
55
- /**
56
- * Set up WordPress filters to hook into WP's update process.
57
- *
58
- * @uses add_filter()
59
- *
60
- * @return void
61
- */
62
- public function init() {
63
 
64
- add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) );
65
- add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
66
- remove_action( 'after_plugin_row_' . $this->name, 'wp_plugin_update_row', 10 );
67
- add_action( 'after_plugin_row_' . $this->name, array( $this, 'show_update_notification' ), 10, 2 );
68
- add_action( 'admin_init', array( $this, 'show_changelog' ) );
69
 
70
- }
71
 
72
- /**
73
- * Check for Updates at the defined API endpoint and modify the update array.
74
- *
75
- * This function dives into the update API just when WordPress creates its update array,
76
- * then adds a custom API call and injects the custom plugin data retrieved from the API.
77
- * It is reassembled from parts of the native WordPress plugin update code.
78
- * See wp-includes/update.php line 121 for the original wp_update_plugins() function.
79
- *
80
- * @uses api_request()
81
- *
82
- * @param array $_transient_data Update array build by WordPress.
83
- * @return array Modified update array with custom plugin data.
84
- */
85
- public function check_update( $_transient_data ) {
86
 
87
- global $pagenow;
 
 
 
 
88
 
89
- if ( ! is_object( $_transient_data ) ) {
90
- $_transient_data = new stdClass;
91
- }
92
 
93
- if ( 'plugins.php' == $pagenow && is_multisite() ) {
94
- return $_transient_data;
95
- }
 
 
 
 
 
 
 
 
 
 
 
96
 
97
- if ( ! empty( $_transient_data->response ) && ! empty( $_transient_data->response[ $this->name ] ) && false === $this->wp_override ) {
98
- return $_transient_data;
99
- }
100
 
101
- $version_info = $this->get_cached_version_info();
 
 
102
 
103
- if ( false === $version_info ) {
104
- $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug ) );
 
105
 
106
- $this->set_version_info_cache( $version_info );
 
 
107
 
108
- }
109
 
110
- if ( false !== $version_info && is_object( $version_info ) && isset( $version_info->new_version ) ) {
 
111
 
112
- if ( version_compare( $this->version, $version_info->new_version, '<' ) ) {
113
 
114
- $_transient_data->response[ $this->name ] = $version_info;
115
 
116
- }
117
 
118
- $_transient_data->last_checked = current_time( 'timestamp' );
119
- $_transient_data->checked[ $this->name ] = $this->version;
120
 
121
- }
122
 
123
- return $_transient_data;
124
- }
125
 
126
- /**
127
- * show update nofication row -- needed for multisite subsites, because WP won't tell you otherwise!
128
- *
129
- * @param string $file
130
- * @param array $plugin
131
- */
132
- public function show_update_notification( $file, $plugin ) {
133
 
134
- if ( is_network_admin() ) {
135
- return;
136
- }
137
 
138
- if( ! current_user_can( 'update_plugins' ) ) {
139
- return;
140
- }
141
 
142
- if( ! is_multisite() ) {
143
- return;
144
- }
 
 
 
 
145
 
146
- if ( $this->name != $file ) {
147
- return;
148
- }
149
 
150
- // Remove our filter on the site transient
151
- remove_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ), 10 );
 
152
 
153
- $update_cache = get_site_transient( 'update_plugins' );
 
 
154
 
155
- $update_cache = is_object( $update_cache ) ? $update_cache : new stdClass();
 
 
156
 
157
- if ( empty( $update_cache->response ) || empty( $update_cache->response[ $this->name ] ) ) {
 
158
 
159
- $version_info = $this->get_cached_version_info();
160
 
161
- if ( false === $version_info ) {
162
- $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug ) );
163
 
164
- $this->set_version_info_cache( $version_info );
165
- }
166
 
167
- if ( ! is_object( $version_info ) ) {
168
- return;
169
- }
170
 
171
- if ( version_compare( $this->version, $version_info->new_version, '<' ) ) {
 
172
 
173
- $update_cache->response[ $this->name ] = $version_info;
 
174
 
175
- }
 
 
176
 
177
- $update_cache->last_checked = current_time( 'timestamp' );
178
- $update_cache->checked[ $this->name ] = $this->version;
179
 
180
- set_site_transient( 'update_plugins', $update_cache );
181
 
182
- } else {
183
 
184
- $version_info = $update_cache->response[ $this->name ];
 
185
 
186
- }
187
 
188
- // Restore our filter
189
- add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) );
190
 
191
- if ( ! empty( $update_cache->response[ $this->name ] ) && version_compare( $this->version, $version_info->new_version, '<' ) ) {
192
 
193
- // build a plugin list row, with update notification
194
- $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
195
- # <tr class="plugin-update-tr"><td colspan="' . $wp_list_table->get_column_count() . '" class="plugin-update colspanchange">
196
- echo '<tr class="plugin-update-tr" id="' . $this->slug . '-update" data-slug="' . $this->slug . '" data-plugin="' . $this->slug . '/' . $file . '">';
197
- echo '<td colspan="3" class="plugin-update colspanchange">';
198
- echo '<div class="update-message notice inline notice-warning notice-alt">';
199
 
200
- $changelog_link = self_admin_url( 'index.php?edd_sl_action=view_plugin_changelog&plugin=' . $this->name . '&slug=' . $this->slug . '&TB_iframe=true&width=772&height=911' );
 
201
 
202
- if ( empty( $version_info->download_link ) ) {
203
- printf(
204
- __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s.', 'easy-digital-downloads' ),
205
- esc_html( $version_info->name ),
206
- '<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">',
207
- esc_html( $version_info->new_version ),
208
- '</a>'
209
- );
210
- } else {
211
- printf(
212
- __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s or %5$supdate now%6$s.', 'easy-digital-downloads' ),
213
- esc_html( $version_info->name ),
214
- '<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">',
215
- esc_html( $version_info->new_version ),
216
- '</a>',
217
- '<a href="' . esc_url( wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $this->name, 'upgrade-plugin_' . $this->name ) ) .'">',
218
- '</a>'
219
- );
220
- }
221
 
222
- do_action( "in_plugin_update_message-{$file}", $plugin, $version_info );
 
 
 
 
 
223
 
224
- echo '</div></td></tr>';
225
- }
226
- }
227
 
228
- /**
229
- * Updates information on the "View version x.x details" page with custom data.
230
- *
231
- * @uses api_request()
232
- *
233
- * @param mixed $_data
234
- * @param string $_action
235
- * @param object $_args
236
- * @return object $_data
237
- */
238
- public function plugins_api_filter( $_data, $_action = '', $_args = null ) {
 
 
 
 
 
 
 
 
239
 
240
- if ( $_action != 'plugin_information' ) {
241
 
242
- return $_data;
 
 
243
 
244
- }
 
 
 
 
 
 
 
 
 
 
245
 
246
- if ( ! isset( $_args->slug ) || ( $_args->slug != $this->slug ) ) {
247
 
248
- return $_data;
249
 
250
- }
251
 
252
- $to_send = array(
253
- 'slug' => $this->slug,
254
- 'is_ssl' => is_ssl(),
255
- 'fields' => array(
256
- 'banners' => false, // These will be supported soon hopefully
257
- 'reviews' => false
258
- )
259
- );
260
 
261
- $cache_key = 'edd_api_request_' . md5( serialize( $this->slug . $this->api_data['license'] ) );
262
-
263
- // Get the transient where we store the api request for this plugin for 24 hours
264
- $edd_api_request_transient = $this->get_cached_version_info( $cache_key );
265
-
266
- //If we have no transient-saved value, run the API, set a fresh transient with the API value, and return that value too right now.
267
- if ( empty( $edd_api_request_transient ) ){
268
-
269
- $api_response = $this->api_request( 'plugin_information', $to_send );
270
-
271
- // Expires in 3 hours
272
- $this->set_version_info_cache( $api_response, $cache_key );
273
-
274
- if ( false !== $api_response ) {
275
- $_data = $api_response;
276
- }
277
-
278
- }
279
-
280
- return $_data;
281
- }
282
-
283
- /**
284
- * Disable SSL verification in order to prevent download update failures
285
- *
286
- * @param array $args
287
- * @param string $url
288
- * @return object $array
289
- */
290
- public function http_request_args( $args, $url ) {
291
- // If it is an https request and we are performing a package download, disable ssl verification
292
- if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) {
293
- $args['sslverify'] = false;
294
- }
295
- return $args;
296
- }
297
-
298
- /**
299
- * Calls the API and, if successfull, returns the object delivered by the API.
300
- *
301
- * @uses get_bloginfo()
302
- * @uses wp_remote_post()
303
- * @uses is_wp_error()
304
- *
305
- * @param string $_action The requested action.
306
- * @param array $_data Parameters for the API action.
307
- * @return false|object
308
- */
309
- private function api_request( $_action, $_data ) {
310
-
311
- global $wp_version;
312
-
313
- $data = array_merge( $this->api_data, $_data );
314
-
315
- if ( $data['slug'] != $this->slug ) {
316
- return;
317
- }
318
 
319
- if( $this->api_url == trailingslashit (home_url() ) ) {
320
- return false; // Don't allow a plugin to ping itself
321
- }
322
 
323
- $api_params = array(
324
- 'edd_action' => 'get_version',
325
- 'license' => ! empty( $data['license'] ) ? $data['license'] : '',
326
- 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false,
327
- 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false,
328
- 'slug' => $data['slug'],
329
- 'author' => $data['author'],
330
- 'url' => home_url(),
331
- 'beta' => isset( $data['beta'] ) ? $data['beta'] : false,
332
- );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
333
 
334
- $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
335
 
336
- if ( ! is_wp_error( $request ) ) {
337
- $request = json_decode( wp_remote_retrieve_body( $request ) );
338
- }
339
 
340
- if ( $request && isset( $request->sections ) ) {
341
- $request->sections = maybe_unserialize( $request->sections );
342
- } else {
343
- $request = false;
344
- }
345
 
346
- return $request;
347
- }
 
348
 
349
- public function show_changelog() {
 
350
 
351
- global $edd_plugin_data;
352
 
353
- if( empty( $_REQUEST['edd_sl_action'] ) || 'view_plugin_changelog' != $_REQUEST['edd_sl_action'] ) {
354
- return;
355
- }
356
 
357
- if( empty( $_REQUEST['plugin'] ) ) {
358
- return;
359
- }
360
 
361
- if( empty( $_REQUEST['slug'] ) ) {
362
- return;
363
- }
364
 
365
- if( ! current_user_can( 'update_plugins' ) ) {
366
- wp_die( __( 'You do not have permission to install plugin updates', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
367
- }
368
 
369
- $data = $edd_plugin_data[ $_REQUEST['slug'] ];
370
- $cache_key = md5( 'edd_plugin_' . sanitize_key( $_REQUEST['plugin'] ) . '_version_info' );
371
- $version_info = $this->get_cached_version_info( $cache_key );
 
 
 
 
 
 
372
 
373
- if( false === $version_info ) {
 
 
 
 
 
 
 
 
374
 
375
- $api_params = array(
376
- 'edd_action' => 'get_version',
377
- 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false,
378
- 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false,
379
- 'slug' => $_REQUEST['slug'],
380
- 'author' => $data['author'],
381
- 'url' => home_url()
382
- );
383
-
384
- $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
385
 
386
- if ( ! is_wp_error( $request ) ) {
387
- $version_info = json_decode( wp_remote_retrieve_body( $request ) );
388
- }
389
 
390
- if ( ! empty( $version_info ) && isset( $version_info->sections ) ) {
391
- $version_info->sections = maybe_unserialize( $version_info->sections );
392
- } else {
393
- $version_info = false;
394
- }
395
 
396
- $this->set_version_info_cache( $version_info, $cache_key );
397
 
398
- }
399
 
400
- if( ! empty( $version_info ) && isset( $version_info->sections['changelog'] ) ) {
401
- echo '<div style="background:#fff;padding:10px;">' . $version_info->sections['changelog'] . '</div>';
402
- }
403
 
404
- exit;
405
- }
406
 
407
- public function get_cached_version_info( $cache_key = '' ) {
408
 
409
- if( empty( $cache_key ) ) {
410
- $cache_key = $this->cache_key;
411
- }
412
 
413
- $cache = get_option( $cache_key );
414
 
415
- if( empty( $cache['timeout'] ) || current_time( 'timestamp' ) > $cache['timeout'] ) {
416
- return false; // Cache is expired
417
- }
418
 
419
- return json_decode( $cache['value'] );
420
 
421
- }
422
 
423
- public function set_version_info_cache( $value = '', $cache_key = '' ) {
424
 
425
- if( empty( $cache_key ) ) {
426
- $cache_key = $this->cache_key;
427
- }
428
 
429
- $data = array(
430
- 'timeout' => strtotime( '+3 hours', current_time( 'timestamp' ) ),
431
- 'value' => json_encode( $value )
432
- );
433
 
434
- update_option( $cache_key, $data );
435
 
436
- }
437
 
438
- }
1
  <?php
2
 
 
 
 
3
  // Exit if accessed directly
4
  if ( ! defined( 'ABSPATH' ) ) exit;
5
 
6
  /**
7
  * Allows plugins to use their own update API.
8
  *
9
+ * @author Easy Digital Downloads
10
+ * @version 1.6.8
11
  */
12
  class EDD_SL_Plugin_Updater {
13
 
14
+ private $api_url = '';
15
+ private $api_data = array();
16
+ private $name = '';
17
+ private $slug = '';
18
+ private $version = '';
19
+ private $wp_override = false;
20
+ private $cache_key = '';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
 
22
+ /**
23
+ * Class constructor.
24
+ *
25
+ * @uses plugin_basename()
26
+ * @uses hook()
27
+ *
28
+ * @param string $_api_url The URL pointing to the custom API endpoint.
29
+ * @param string $_plugin_file Path to the plugin file.
30
+ * @param array $_api_data Optional data to send with API calls.
31
+ */
32
+ public function __construct( $_api_url, $_plugin_file, $_api_data = null ) {
33
+
34
+ global $edd_plugin_data;
35
 
36
+ $this->api_url = trailingslashit( $_api_url );
37
+ $this->api_data = $_api_data;
38
+ $this->name = plugin_basename( $_plugin_file );
39
+ $this->slug = basename( $_plugin_file, '.php' );
40
+ $this->version = $_api_data['version'];
41
+ $this->wp_override = isset( $_api_data['wp_override'] ) ? (bool) $_api_data['wp_override'] : false;
42
 
43
+ $this->cache_key = md5( serialize( $this->slug . $this->api_data['license'] ) );
44
+
45
+ $edd_plugin_data[ $this->slug ] = $this->api_data;
 
 
 
 
 
46
 
47
+ // Set up hooks.
48
+ $this->init();
 
 
 
49
 
50
+ }
51
 
52
+ /**
53
+ * Set up WordPress filters to hook into WP's update process.
54
+ *
55
+ * @uses add_filter()
56
+ *
57
+ * @return void
58
+ */
59
+ public function init() {
 
 
 
 
 
 
60
 
61
+ add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) );
62
+ add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 );
63
+ remove_action( 'after_plugin_row_' . $this->name, 'wp_plugin_update_row', 10 );
64
+ add_action( 'after_plugin_row_' . $this->name, array( $this, 'show_update_notification' ), 10, 2 );
65
+ add_action( 'admin_init', array( $this, 'show_changelog' ) );
66
 
67
+ }
 
 
68
 
69
+ /**
70
+ * Check for Updates at the defined API endpoint and modify the update array.
71
+ *
72
+ * This function dives into the update API just when WordPress creates its update array,
73
+ * then adds a custom API call and injects the custom plugin data retrieved from the API.
74
+ * It is reassembled from parts of the native WordPress plugin update code.
75
+ * See wp-includes/update.php line 121 for the original wp_update_plugins() function.
76
+ *
77
+ * @uses api_request()
78
+ *
79
+ * @param array $_transient_data Update array build by WordPress.
80
+ * @return array Modified update array with custom plugin data.
81
+ */
82
+ public function check_update( $_transient_data ) {
83
 
84
+ global $pagenow;
 
 
85
 
86
+ if ( ! is_object( $_transient_data ) ) {
87
+ $_transient_data = new stdClass;
88
+ }
89
 
90
+ if ( 'plugins.php' == $pagenow && is_multisite() ) {
91
+ return $_transient_data;
92
+ }
93
 
94
+ if ( ! empty( $_transient_data->response ) && ! empty( $_transient_data->response[ $this->name ] ) && false === $this->wp_override ) {
95
+ return $_transient_data;
96
+ }
97
 
98
+ $version_info = $this->get_cached_version_info();
99
 
100
+ if ( false === $version_info ) {
101
+ $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => ! empty( $this->api_data['beta'] ) ) );
102
 
103
+ $this->set_version_info_cache( $version_info );
104
 
105
+ }
106
 
107
+ if ( false !== $version_info && is_object( $version_info ) && isset( $version_info->new_version ) ) {
108
 
109
+ if ( version_compare( $this->version, $version_info->new_version, '<' ) ) {
 
110
 
111
+ $_transient_data->response[ $this->name ] = $version_info;
112
 
113
+ }
 
114
 
115
+ $_transient_data->last_checked = current_time( 'timestamp' );
116
+ $_transient_data->checked[ $this->name ] = $this->version;
 
 
 
 
 
117
 
118
+ }
 
 
119
 
120
+ return $_transient_data;
121
+ }
 
122
 
123
+ /**
124
+ * show update nofication row -- needed for multisite subsites, because WP won't tell you otherwise!
125
+ *
126
+ * @param string $file
127
+ * @param array $plugin
128
+ */
129
+ public function show_update_notification( $file, $plugin ) {
130
 
131
+ if ( is_network_admin() ) {
132
+ return;
133
+ }
134
 
135
+ if( ! current_user_can( 'update_plugins' ) ) {
136
+ return;
137
+ }
138
 
139
+ if( ! is_multisite() ) {
140
+ return;
141
+ }
142
 
143
+ if ( $this->name != $file ) {
144
+ return;
145
+ }
146
 
147
+ // Remove our filter on the site transient
148
+ remove_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ), 10 );
149
 
150
+ $update_cache = get_site_transient( 'update_plugins' );
151
 
152
+ $update_cache = is_object( $update_cache ) ? $update_cache : new stdClass();
 
153
 
154
+ if ( empty( $update_cache->response ) || empty( $update_cache->response[ $this->name ] ) ) {
 
155
 
156
+ $version_info = $this->get_cached_version_info();
 
 
157
 
158
+ if ( false === $version_info ) {
159
+ $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => ! empty( $this->api_data['beta'] ) ) );
160
 
161
+ $this->set_version_info_cache( $version_info );
162
+ }
163
 
164
+ if ( ! is_object( $version_info ) ) {
165
+ return;
166
+ }
167
 
168
+ if ( version_compare( $this->version, $version_info->new_version, '<' ) ) {
 
169
 
170
+ $update_cache->response[ $this->name ] = $version_info;
171
 
172
+ }
173
 
174
+ $update_cache->last_checked = current_time( 'timestamp' );
175
+ $update_cache->checked[ $this->name ] = $this->version;
176
 
177
+ set_site_transient( 'update_plugins', $update_cache );
178
 
179
+ } else {
 
180
 
181
+ $version_info = $update_cache->response[ $this->name ];
182
 
183
+ }
 
 
 
 
 
184
 
185
+ // Restore our filter
186
+ add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) );
187
 
188
+ if ( ! empty( $update_cache->response[ $this->name ] ) && version_compare( $this->version, $version_info->new_version, '<' ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
189
 
190
+ // build a plugin list row, with update notification
191
+ $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' );
192
+ # <tr class="plugin-update-tr"><td colspan="' . $wp_list_table->get_column_count() . '" class="plugin-update colspanchange">
193
+ echo '<tr class="plugin-update-tr" id="' . $this->slug . '-update" data-slug="' . $this->slug . '" data-plugin="' . $this->slug . '/' . $file . '">';
194
+ echo '<td colspan="3" class="plugin-update colspanchange">';
195
+ echo '<div class="update-message notice inline notice-warning notice-alt">';
196
 
197
+ $changelog_link = self_admin_url( 'index.php?edd_sl_action=view_plugin_changelog&plugin=' . $this->name . '&slug=' . $this->slug . '&TB_iframe=true&width=772&height=911' );
 
 
198
 
199
+ if ( empty( $version_info->download_link ) ) {
200
+ printf(
201
+ __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s.', 'easy-digital-downloads' ),
202
+ esc_html( $version_info->name ),
203
+ '<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">',
204
+ esc_html( $version_info->new_version ),
205
+ '</a>'
206
+ );
207
+ } else {
208
+ printf(
209
+ __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s or %5$supdate now%6$s.', 'easy-digital-downloads' ),
210
+ esc_html( $version_info->name ),
211
+ '<a target="_blank" class="thickbox" href="' . esc_url( $changelog_link ) . '">',
212
+ esc_html( $version_info->new_version ),
213
+ '</a>',
214
+ '<a href="' . esc_url( wp_nonce_url( self_admin_url( 'update.php?action=upgrade-plugin&plugin=' ) . $this->name, 'upgrade-plugin_' . $this->name ) ) .'">',
215
+ '</a>'
216
+ );
217
+ }
218
 
219
+ do_action( "in_plugin_update_message-{$file}", $plugin, $version_info );
220
 
221
+ echo '</div></td></tr>';
222
+ }
223
+ }
224
 
225
+ /**
226
+ * Updates information on the "View version x.x details" page with custom data.
227
+ *
228
+ * @uses api_request()
229
+ *
230
+ * @param mixed $_data
231
+ * @param string $_action
232
+ * @param object $_args
233
+ * @return object $_data
234
+ */
235
+ public function plugins_api_filter( $_data, $_action = '', $_args = null ) {
236
 
237
+ if ( $_action != 'plugin_information' ) {
238
 
239
+ return $_data;
240
 
241
+ }
242
 
243
+ if ( ! isset( $_args->slug ) || ( $_args->slug != $this->slug ) ) {
 
 
 
 
 
 
 
244
 
245
+ return $_data;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
246
 
247
+ }
 
 
248
 
249
+ $to_send = array(
250
+ 'slug' => $this->slug,
251
+ 'is_ssl' => is_ssl(),
252
+ 'fields' => array(
253
+ 'banners' => array(),
254
+ 'reviews' => false
255
+ )
256
+ );
257
+
258
+ $cache_key = 'edd_api_request_' . md5( serialize( $this->slug . $this->api_data['license'] ) );
259
+
260
+ // Get the transient where we store the api request for this plugin for 24 hours
261
+ $edd_api_request_transient = $this->get_cached_version_info( $cache_key );
262
+
263
+ //If we have no transient-saved value, run the API, set a fresh transient with the API value, and return that value too right now.
264
+ if ( empty( $edd_api_request_transient ) ){
265
+
266
+ $api_response = $this->api_request( 'plugin_information', $to_send );
267
+
268
+ // Expires in 3 hours
269
+ $this->set_version_info_cache( $api_response, $cache_key );
270
+
271
+ if ( false !== $api_response ) {
272
+ $_data = $api_response;
273
+ }
274
+
275
+ } else {
276
+ $_data = $edd_api_request_transient;
277
+ }
278
+
279
+ return $_data;
280
+ }
281
+
282
+ /**
283
+ * Disable SSL verification in order to prevent download update failures
284
+ *
285
+ * @param array $args
286
+ * @param string $url
287
+ * @return object $array
288
+ */
289
+ public function http_request_args( $args, $url ) {
290
+ // If it is an https request and we are performing a package download, disable ssl verification
291
+ if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) {
292
+ $args['sslverify'] = false;
293
+ }
294
+ return $args;
295
+ }
296
+
297
+ /**
298
+ * Calls the API and, if successfull, returns the object delivered by the API.
299
+ *
300
+ * @uses get_bloginfo()
301
+ * @uses wp_remote_post()
302
+ * @uses is_wp_error()
303
+ *
304
+ * @param string $_action The requested action.
305
+ * @param array $_data Parameters for the API action.
306
+ * @return false|object
307
+ */
308
+ private function api_request( $_action, $_data ) {
309
+
310
+ global $wp_version;
311
+
312
+ $data = array_merge( $this->api_data, $_data );
313
+
314
+ if ( $data['slug'] != $this->slug ) {
315
+ return;
316
+ }
317
+
318
+ if( $this->api_url == trailingslashit (home_url() ) ) {
319
+ return false; // Don't allow a plugin to ping itself
320
+ }
321
+
322
+ $api_params = array(
323
+ 'edd_action' => 'get_version',
324
+ 'license' => ! empty( $data['license'] ) ? $data['license'] : '',
325
+ 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false,
326
+ 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false,
327
+ 'slug' => $data['slug'],
328
+ 'author' => $data['author'],
329
+ 'url' => home_url(),
330
+ 'beta' => ! empty( $data['beta'] ),
331
+ );
332
 
333
+ $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
334
 
335
+ if ( ! is_wp_error( $request ) ) {
336
+ $request = json_decode( wp_remote_retrieve_body( $request ) );
337
+ }
338
 
339
+ if ( $request && isset( $request->sections ) ) {
340
+ $request->sections = maybe_unserialize( $request->sections );
341
+ } else {
342
+ $request = false;
343
+ }
344
 
345
+ if ( $request && isset( $request->banners ) ) {
346
+ $request->banners = maybe_unserialize( $request->banners );
347
+ }
348
 
349
+ return $request;
350
+ }
351
 
352
+ public function show_changelog() {
353
 
354
+ global $edd_plugin_data;
 
 
355
 
356
+ if( empty( $_REQUEST['edd_sl_action'] ) || 'view_plugin_changelog' != $_REQUEST['edd_sl_action'] ) {
357
+ return;
358
+ }
359
 
360
+ if( empty( $_REQUEST['plugin'] ) ) {
361
+ return;
362
+ }
363
 
364
+ if( empty( $_REQUEST['slug'] ) ) {
365
+ return;
366
+ }
367
 
368
+ if( ! current_user_can( 'update_plugins' ) ) {
369
+ wp_die( __( 'You do not have permission to install plugin updates', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) );
370
+ }
371
+
372
+ $data = $edd_plugin_data[ $_REQUEST['slug'] ];
373
+ $cache_key = md5( 'edd_plugin_' . sanitize_key( $_REQUEST['plugin'] ) . '_version_info' );
374
+ $version_info = $this->get_cached_version_info( $cache_key );
375
+
376
+ if( false === $version_info ) {
377
 
378
+ $api_params = array(
379
+ 'edd_action' => 'get_version',
380
+ 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false,
381
+ 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false,
382
+ 'slug' => $_REQUEST['slug'],
383
+ 'author' => $data['author'],
384
+ 'url' => home_url(),
385
+ 'beta' => ! empty( $data['beta'] )
386
+ );
387
 
388
+ $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => false, 'body' => $api_params ) );
 
 
 
 
 
 
 
 
 
389
 
390
+ if ( ! is_wp_error( $request ) ) {
391
+ $version_info = json_decode( wp_remote_retrieve_body( $request ) );
392
+ }
393
 
394
+ if ( ! empty( $version_info ) && isset( $version_info->sections ) ) {
395
+ $version_info->sections = maybe_unserialize( $version_info->sections );
396
+ } else {
397
+ $version_info = false;
398
+ }
399
 
400
+ $this->set_version_info_cache( $version_info, $cache_key );
401
 
402
+ }
403
 
404
+ if( ! empty( $version_info ) && isset( $version_info->sections['changelog'] ) ) {
405
+ echo '<div style="background:#fff;padding:10px;">' . $version_info->sections['changelog'] . '</div>';
406
+ }
407
 
408
+ exit;
409
+ }
410
 
411
+ public function get_cached_version_info( $cache_key = '' ) {
412
 
413
+ if( empty( $cache_key ) ) {
414
+ $cache_key = $this->cache_key;
415
+ }
416
 
417
+ $cache = get_option( $cache_key );
418
 
419
+ if( empty( $cache['timeout'] ) || current_time( 'timestamp' ) > $cache['timeout'] ) {
420
+ return false; // Cache is expired
421
+ }
422
 
423
+ return json_decode( $cache['value'] );
424
 
425
+ }
426
 
427
+ public function set_version_info_cache( $value = '', $cache_key = '' ) {
428
 
429
+ if( empty( $cache_key ) ) {
430
+ $cache_key = $this->cache_key;
431
+ }
432
 
433
+ $data = array(
434
+ 'timeout' => strtotime( '+3 hours', current_time( 'timestamp' ) ),
435
+ 'value' => json_encode( $value )
436
+ );
437
 
438
+ update_option( $cache_key, $data );
439
 
440
+ }
441
 
442
+ }
css/styles.css CHANGED
@@ -55,7 +55,6 @@ div elements, we disable it to prevent it from messing up the map
55
  display: inline !important;
56
  opacity: 1 !important;
57
  max-height: none !important;
58
- width: auto !important;
59
  }
60
 
61
  #wpsl-wrap {
55
  display: inline !important;
56
  opacity: 1 !important;
57
  max-height: none !important;
 
58
  }
59
 
60
  #wpsl-wrap {
css/styles.min.css CHANGED
@@ -1 +1 @@
1
- #wpsl-result-list a,#wpsl-wrap [class*=" wpsl-icon-"]:focus,#wpsl-wrap [class^=wpsl-icon-]:active{outline:0}#wpsl-map-controls div:hover,#wpsl-reset-map:hover,#wpsl-search-btn:hover,.wpsl-dropdown{cursor:pointer}#wpsl-wrap,.wpsl-clearfix:after,.wpsl-contact-details{clear:both}@font-face{font-family:wpsl-fontello;src:url(../font/fontello.eot?28897909);src:url(../font/fontello.eot?28897909#iefix) format('embedded-opentype'),url(../font/fontello.woff?28897909) format('woff'),url(../font/fontello.ttf?28897909) format('truetype'),url(../font/fontello.svg?28897909#fontello) format('svg');font-weight:400;font-style:normal}#wpsl-gmap{float:right;width:66.5%;height:350px;margin-bottom:0}.wpsl-store-below #wpsl-gmap{float:none;width:100%}.wpsl-gmap-canvas{width:100%;height:300px;margin-bottom:20px}.gm-style-mtc,.gmnoprint{z-index:9999!important}#wpsl-gmap div,#wpsl-gmap img,.wpsl-gmap-canvas div,.wpsl-gmap-canvas img{box-shadow:none!important;max-width:none!important;background:0 0}#wpsl-gmap img,.wpsl-gmap-canvas img{display:inline!important;opacity:1!important;max-height:none!important;width:auto!important}#wpsl-wrap{position:relative;width:100%;overflow:hidden;margin-bottom:20px}#wpsl-search-wrap{float:left;width:100%}#wpsl-search-wrap form{margin:0;padding:0;border:none;outline:0}#wpsl-gmap #wpsl-map-controls{position:absolute;height:28px;right:10px;bottom:24px;border-radius:2px;z-index:3;font-size:11px;white-space:nowrap;overflow:hidden}#wpsl-gmap #wpsl-map-controls.wpsl-street-view-exists{right:48px}#wpsl-map-controls .wpsl-direction-preloader{margin:5px 5px 0}#wpsl-map-controls div{float:left;background:#fff;border-radius:2px}#wpsl-wrap [class*=" wpsl-icon-"],#wpsl-wrap [class^=wpsl-icon-]{position:relative;float:left;padding:7px 9px 7px 8px;display:inline-block;font-family:wpsl-fontello;font-style:normal;font-weight:400;font-size:1.3em;color:#737373;speak:none;text-decoration:inherit;text-align:center;font-variant:normal;text-transform:none;line-height:1em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpsl-map-controls span{font-family:inherit;font-size:inherit}#wpsl-wrap .wpsl-ie [class*=" wpsl-icon-"],#wpsl-wrap .wpsl-ie [class^=wpsl-icon-]{padding:9px 8px 4px}#wpsl-wrap.wpsl-mobile [class*=" wpsl-icon-"],#wpsl-wrap.wpsl-mobile [class^=wpsl-icon-]{padding:8px 10px}#wpsl-wrap .wpsl-icon-reset{border-radius:2px 0 0 2px;z-index:2;padding-left:9px;padding-right:4px}#wpsl-wrap .wpsl-icon-direction{z-index:1}#wpsl-map-controls.wpsl-reset-exists .wpsl-icon-direction{border-radius:0 2px 2px 0}#wpsl-wrap .wpsl-active-icon,#wpsl-wrap [class*=" wpsl-icon-"]:hover,#wpsl-wrap [class^=wpsl-icon-]:hover{color:#000}#wpsl-wrap .wpsl-in-progress,#wpsl-wrap .wpsl-in-progress:hover{color:#c6c6c6}#wpsl-gmap #wpsl-reset-map{position:absolute;display:none;right:37px;top:37px;padding:6px 14px;background:#fff!important;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:2px;z-index:3}.gm-style-cc{word-wrap:normal}#wpsl-search-wrap .wpsl-input,#wpsl-search-wrap .wpsl-select-wrap{display:table}#wpsl-search-btn,#wpsl-search-wrap #wpsl-radius,#wpsl-search-wrap #wpsl-results,#wpsl-search-wrap .wpsl-input input,#wpsl-search-wrap .wpsl-input label{display:table-cell}#wpsl-search-wrap label{margin-bottom:0}#wpsl-search-input{width:179px;height:auto;padding:7px 12px;font-size:100%;margin:0}#wpsl-search-btn,#wpsl-search-wrap input{border:1px solid #d2d2d2;border-radius:3px}#wpsl-search-btn{padding:7px 10px;line-height:1.428571429;font-weight:400;color:#7c7c7c;background-color:#e6e6e6;background-repeat:repeat-x;background-image:-moz-linear-gradient(top,#f4f4f4,#e6e6e6);background-image:-ms-linear-gradient(top,#f4f4f4,#e6e6e6);background-image:-webkit-linear-gradient(top,#f4f4f4,#e6e6e6);background-image:-o-linear-gradient(top,#f4f4f4,#e6e6e6);background-image:linear-gradient(top,#f4f4f4,#e6e6e6);box-shadow:0 1px 2px rgba(64,64,64,.1);text-transform:none!important}#wpsl-search-input.wpsl-error{border:1px solid #bd0028!important}.wpsl-search{margin-bottom:12px;padding:12px 12px 0;background:#f4f3f3}.wpsl-search.wpsl-checkboxes-enabled{padding:12px}.wpsl-back{display:inline-block}#wpsl-result-list{width:33%;margin-right:.5%}.wpsl-store-below #wpsl-result-list{width:100%;margin:12px 0 0}#wpsl-direction-details,#wpsl-stores{height:350px;overflow-y:auto}#wpsl-direction-details,.wpsl-hide{display:none}#wpsl-result-list p{padding-left:10px}.wpsl-store-below #wpsl-result-list p{padding-left:0}.wpsl-direction-before{margin:14px 0 21px;padding-left:10px}.wpsl-store-below .wpsl-direction-before{padding-left:0}.wpsl-direction-before div{margin-top:10px}#wpsl-wrap #wpsl-result-list li{padding:10px;border-bottom:1px dotted #ccc;margin-left:0;overflow:hidden;list-style:none!important;text-indent:0}#wpsl-wrap #wpsl-result-list li li{padding:0;border-bottom:0;margin-left:14px;overflow:visible}#wpsl-wrap #wpsl-result-list ul li{list-style:disc!important}#wpsl-wrap #wpsl-result-list ol li{list-style:decimal!important}#wpsl-wrap.wpsl-store-below #wpsl-result-list li{padding:10px 10px 10px 0}#wpsl-result-list li p{padding-left:0;margin:0 0 20px}.wpsl-store-details.wpsl-store-listing{position:relative;padding-right:20px}.wpsl-store-details.wpsl-store-listing.wpsl-active-details:before,.wpsl-store-details.wpsl-store-listing:before{position:absolute;content:'';bottom:6px;right:0;border-top:5px solid #000;border-left:6px solid transparent;border-right:6px solid transparent}.wpsl-store-details.wpsl-store-listing.wpsl-active-details:before{border-bottom:5px solid #000;border-top:none;border-left:6px solid transparent;border-right:6px solid transparent}#wpsl-stores .wpsl-store-thumb{float:right;border-radius:3px;margin:7px 0 0 10px;padding:0;border:none}.wpsl-direction-index{float:left;width:8%;margin:0 5% 0 0}.wpsl-direction-txt{float:left;width:62%}.wpsl-direction-distance{float:left;width:20%;margin:0 0 0 5%}.wpsl-direction-txt span{display:block;margin-top:10px}.wpsl-country,.wpsl-directions,.wpsl-street{display:block;border-bottom:none!important}#wpsl-wrap #wpsl-result-list li.wpsl-preloader{position:relative;border-bottom:none;padding:10px 10px 10px 35px}.wpsl-preloader img{position:absolute;left:10px;top:50%;margin-top:-8px;box-shadow:none!important;border:none!important}.wpsl-preloader span{float:left;margin:-5px 0 0 11px}#wpsl-search-btn,#wpsl-search-wrap div{margin-right:10px;float:left}#wpsl-search-wrap .wpsl-select-wrap{position:relative;z-index:2;margin-right:0}#wpsl-search-wrap .wpsl-input-field{position:relative}#wpsl-radius,#wpsl-results{float:left;margin-right:15px;display:inline}#wpsl-category{z-index:1;clear:both}#wpsl-search-wrap .wpsl-dropdown div{position:absolute;float:none;margin:-1px 0 0;top:100%;left:-1px;right:-1px;border:1px solid #ccc;background:#fff;border-top:1px solid #eee;border-radius:0 0 3px 3px;opacity:0;overflow:hidden;-webkit-transition:all 150ms ease-in-out;-moz-transition:all 150ms ease-in-out;-ms-transition:all 150ms ease-in-out;transition:all 150ms ease-in-out}#wpsl-search-wrap .wpsl-dropdown.wpsl-active div{opacity:1}#wpsl-search-wrap .wpsl-input label{margin-right:0}#wpsl-radius{margin-right:10px}#wpsl-search select,#wpsl-search-wrap select,.wpsl-direction-details{display:none}#wpsl-search-wrap div label{float:left;margin-right:10px;line-height:32px}#wpsl-results label{width:auto}#wpsl-result-list ul{list-style:none;margin:0;padding:0}#wpsl-gmap .wpsl-info-window,.wpsl-gmap-canvas .wpsl-info-window{max-width:225px}.wpsl-info-window span,.wpsl-more-info-listings span{display:block}.wpsl-info-window .wpsl-no-margin{margin:0}.wpsl-more-info-listings{display:none}.wpsl-info-window span span{display:inline!important}#wpsl-wrap .wpsl-info-window p{margin:0 0 10px}.wpsl-store-hours{margin-top:10px}.wpsl-store-hours strong{display:block}#wpsl-gmap .wpsl-info-actions{display:block;margin:10px 0!important}.wpsl-info-actions a{float:left;margin-right:7px}.wpsl-info-actions .wpsl-zoom-here{margin-right:0}.wpsl-dropdown{position:relative;width:90px;border:1px solid #ccc;background:#fff;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;user-select:none;margin-right:0!important;z-index:2}#wpsl-results .wpsl-dropdown{width:70px}.wpsl-dropdown ul{position:absolute;left:0;width:100%;height:100%;padding:0!important;margin:0!important;list-style:none;overflow:hidden}.wpsl-dropdown:hover{box-shadow:0 0 5px rgba(0,0,0,.15)}.wpsl-dropdown .wpsl-selected-item,.wpsl-dropdown li{position:relative;display:block;line-height:normal;color:#000;overflow:hidden}#wpsl-radius .wpsl-dropdown .wpsl-selected-item,#wpsl-radius .wpsl-dropdown li,#wpsl-results .wpsl-dropdown .wpsl-selected-item,#wpsl-results .wpsl-dropdown li{white-space:nowrap}.wpsl-selected-item:after{position:absolute;content:"";right:12px;top:50%;margin-top:-4px;border:6px solid transparent;border-top:8px solid #000}.wpsl-active .wpsl-selected-item:after{margin-top:-10px;border:6px solid transparent;border-bottom:8px solid #000}.wpsl-dropdown li:hover{background:#f8f9f8;position:relative;z-index:3;color:#000}.wpsl-dropdown .wpsl-selected-item,.wpsl-dropdown li,.wpsl-selected-item{list-style:none;padding:9px 12px!important;margin:0!important}.wpsl-selected-dropdown{font-weight:700}.wpsl-clearfix:after,.wpsl-clearfix:before{content:" ";display:table}#wpsl-wrap .wpsl-selected-item{position:static;padding-right:35px!important}#wpsl-category,.wpsl-input,.wpsl-select-wrap{position:relative;margin-bottom:10px}#wpsl-search-wrap .wpsl-scroll-required div{overflow-y:scroll}.wpsl-scroll-required ul{overflow:visible}.wpsl-provided-by{float:right;padding:5px 0;text-align:right;font-size:12px;width:100%}#wpsl-wrap .wpsl-results-only label{width:auto}.wpsl-contact-details,.wpsl-location-address,.wpsl-locations-details{margin-bottom:15px}table.wpsl-opening-hours td{vertical-align:top;padding:0 15px 0 0;text-align:left}table.wpsl-opening-hours time{display:block}table.wpsl-opening-hours{width:auto!important;font-size:100%!important}table.wpsl-opening-hours,table.wpsl-opening-hours td{border:none!important}.wpsl-gmap-canvas .wpsl-infobox{min-width:155px;max-width:350px!important;padding:10px;border-radius:4px;font-size:13px;font-weight:300;border:1px solid #ccc;background:#fff!important}.wpsl-gmap-canvas .wpsl-infobox:after,.wpsl-gmap-canvas .wpsl-infobox:before{position:absolute;content:"";left:40px;bottom:-11px}.wpsl-gmap-canvas .wpsl-infobox:after{border-left:11px solid transparent;border-right:11px solid transparent;border-top:11px solid #fff}.wpsl-gmap-canvas .wpsl-infobox:before{border-left:13px solid transparent;border-right:13px solid transparent;border-top:13px solid #ccc;bottom:-13px;left:38px}#wpsl-checkbox-filter{display:block;float:left;margin:5px 0 15px;padding:0;width:100%}#wpsl-checkbox-filter li{float:left;list-style:none;margin:0 1% 0 0}#wpsl-checkbox-filter.wpsl-checkbox-1-columns li{width:99%}#wpsl-checkbox-filter.wpsl-checkbox-2-columns li{width:49%}#wpsl-checkbox-filter.wpsl-checkbox-3-columns li{width:32%}#wpsl-checkbox-filter.wpsl-checkbox-4-columns li{width:24%}#wpsl-checkbox-filter input{margin-right:5px}#wpsl-result-list .wpsl-contact-details span{display:block!important}@media (max-width:825px){#wpsl-search-input{width:348px}.wpsl-results-only #wpsl-search-wrap .wpsl-dropdown{width:70px}#wpsl-search-wrap .wpsl-input{width:100%;margin-bottom:10px}#wpsl-category label,#wpsl-radius label,.wpsl-cat-results-filter #wpsl-search-wrap .wpsl-input,.wpsl-input label,.wpsl-no-filters #wpsl-search-wrap .wpsl-input,.wpsl-results-only #wpsl-search-wrap .wpsl-input{width:auto}}@media (max-width:720px){#wpsl-search-wrap .wpsl-dropdown{width:114px}}@media (max-width:675px){#wpsl-search-wrap #wpsl-search-btn{float:left;margin:0 5px 0 0}.wpsl-dropdown,.wpsl-results-only #wpsl-search-wrap .wpsl-input{width:100%}.wpsl-search{padding:2%}#wpsl-result-list p,#wpsl-wrap #wpsl-result-list li,.wpsl-direction-before{padding-left:0}.wpsl-input{margin-right:0}#wpsl-gmap,#wpsl-result-list{float:none;width:100%}#wpsl-gmap{margin-bottom:15px;margin-top:10px}#wpsl-result-list,.wpsl-cat-results-filter .wpsl-select-wrap,.wpsl-filter .wpsl-select-wrap{margin-bottom:10px}#wpsl-wrap #wpsl-result-list li.wpsl-preloader{padding-left:25px}.wpsl-preloader img{left:0}#wpsl-stores.wpsl-not-loaded{height:25px}#wpsl-reset-map{top:25px}#wpsl-category,#wpsl-search-btn,.wpsl-input,.wpsl-no-filters #wpsl-search-wrap .wpsl-input,.wpsl-select-wrap{margin-bottom:0}#wpsl-stores.wpsl-no-autoload{height:auto!important}#wpsl-checkbox-filter.wpsl-checkbox-3-columns li,#wpsl-checkbox-filter.wpsl-checkbox-4-columns li{width:49%}}@media (max-width:570px){#wpsl-search-wrap #wpsl-search-btn{margin-bottom:5px}.wpsl-search{padding:4%}#wpsl-search-input{width:98%!important}.wpsl-cat-results-filter #wpsl-search-input,.wpsl-cat-results-filter #wpsl-search-wrap .wpsl-input,.wpsl-no-results #wpsl-search-input,.wpsl-results-only #wpsl-search-input{width:100%!important}.wpsl-search-btn-wrap{margin-top:15px;clear:both}.wpsl-checkboxes-enabled .wpsl-search-btn-wrap{margin-top:0}#wpsl-search-btn,#wpsl-search-wrap div{margin-right:0}#wpsl-search-wrap div label{display:block;width:100%}.wpsl-select-wrap{width:100%}#wpsl-radius,#wpsl-results{width:50%}#wpsl-radius{margin-right:4%}#wpsl-search-wrap .wpsl-dropdown{width:96%!important}.wpsl-no-filters #wpsl-search-input,.wpsl-no-filters #wpsl-search-wrap .wpsl-input{width:100%!important}}@media (max-width:420px){#wpsl-checkbox-filter li{margin:0}#wpsl-checkbox-filter.wpsl-checkbox-1-columns li,#wpsl-checkbox-filter.wpsl-checkbox-2-columns li,#wpsl-checkbox-filter.wpsl-checkbox-3-columns li,#wpsl-checkbox-filter.wpsl-checkbox-4-columns li{width:100%}}
1
+ #wpsl-wrap,.wpsl-gmap-canvas{margin-bottom:20px;width:100%}#wpsl-result-list a,#wpsl-wrap [class*=" wpsl-icon-"]:focus,#wpsl-wrap [class^=wpsl-icon-]:active{outline:0}#wpsl-map-controls div:hover,#wpsl-reset-map:hover,#wpsl-search-btn:hover,.wpsl-dropdown{cursor:pointer}#wpsl-wrap,.wpsl-clearfix:after,.wpsl-contact-details{clear:both}@font-face{font-family:wpsl-fontello;src:url(../font/fontello.eot?28897909);src:url(../font/fontello.eot?28897909#iefix) format('embedded-opentype'),url(../font/fontello.woff?28897909) format('woff'),url(../font/fontello.ttf?28897909) format('truetype'),url(../font/fontello.svg?28897909#fontello) format('svg');font-weight:400;font-style:normal}#wpsl-gmap{float:right;width:66.5%;height:350px;margin-bottom:0}.wpsl-store-below #wpsl-gmap{float:none;width:100%}.wpsl-gmap-canvas{height:300px}.gm-style-mtc,.gmnoprint{z-index:9999!important}#wpsl-gmap div,#wpsl-gmap img,.wpsl-gmap-canvas div,.wpsl-gmap-canvas img{box-shadow:none!important;max-width:none!important;background:0 0}#wpsl-gmap img,.wpsl-gmap-canvas img{display:inline!important;opacity:1!important;max-height:none!important}#wpsl-wrap{position:relative;overflow:hidden}#wpsl-search-wrap{float:left;width:100%}#wpsl-search-wrap form{margin:0;padding:0;border:none;outline:0}#wpsl-gmap #wpsl-map-controls{position:absolute;height:28px;right:10px;bottom:24px;border-radius:2px;z-index:3;font-size:11px;white-space:nowrap;overflow:hidden}#wpsl-gmap #wpsl-map-controls.wpsl-street-view-exists{right:48px}#wpsl-map-controls .wpsl-direction-preloader{margin:5px 5px 0}#wpsl-map-controls div{float:left;background:#fff;border-radius:2px}#wpsl-wrap [class*=" wpsl-icon-"],#wpsl-wrap [class^=wpsl-icon-]{position:relative;float:left;padding:7px 9px 7px 8px;display:inline-block;font-family:wpsl-fontello;font-style:normal;font-weight:400;font-size:1.3em;color:#737373;speak:none;text-decoration:inherit;text-align:center;font-variant:normal;text-transform:none;line-height:1em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}#wpsl-map-controls span{font-family:inherit;font-size:inherit}#wpsl-wrap .wpsl-ie [class*=" wpsl-icon-"],#wpsl-wrap .wpsl-ie [class^=wpsl-icon-]{padding:9px 8px 4px}#wpsl-wrap.wpsl-mobile [class*=" wpsl-icon-"],#wpsl-wrap.wpsl-mobile [class^=wpsl-icon-]{padding:8px 10px}#wpsl-wrap .wpsl-icon-reset{border-radius:2px 0 0 2px;z-index:2;padding-left:9px;padding-right:4px}#wpsl-wrap .wpsl-icon-direction{z-index:1}#wpsl-map-controls.wpsl-reset-exists .wpsl-icon-direction{border-radius:0 2px 2px 0}#wpsl-wrap .wpsl-active-icon,#wpsl-wrap [class*=" wpsl-icon-"]:hover,#wpsl-wrap [class^=wpsl-icon-]:hover{color:#000}#wpsl-wrap .wpsl-in-progress,#wpsl-wrap .wpsl-in-progress:hover{color:#c6c6c6}#wpsl-gmap #wpsl-reset-map{position:absolute;display:none;right:37px;top:37px;padding:6px 14px;background:#fff!important;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:2px;z-index:3}.gm-style-cc{word-wrap:normal}#wpsl-search-wrap .wpsl-input,#wpsl-search-wrap .wpsl-select-wrap{display:table}#wpsl-search-btn,#wpsl-search-wrap #wpsl-radius,#wpsl-search-wrap #wpsl-results,#wpsl-search-wrap .wpsl-input input,#wpsl-search-wrap .wpsl-input label{display:table-cell}#wpsl-search-wrap label{margin-bottom:0}#wpsl-search-input{width:179px;height:auto;padding:7px 12px;font-size:100%;margin:0}#wpsl-search-btn,#wpsl-search-wrap input{border:1px solid #d2d2d2;border-radius:3px}#wpsl-search-btn{padding:7px 10px;line-height:1.428571429;font-weight:400;color:#7c7c7c;background-color:#e6e6e6;background-repeat:repeat-x;background-image:-moz-linear-gradient(top,#f4f4f4,#e6e6e6);background-image:-ms-linear-gradient(top,#f4f4f4,#e6e6e6);background-image:-webkit-linear-gradient(top,#f4f4f4,#e6e6e6);background-image:-o-linear-gradient(top,#f4f4f4,#e6e6e6);background-image:linear-gradient(top,#f4f4f4,#e6e6e6);box-shadow:0 1px 2px rgba(64,64,64,.1);text-transform:none!important}#wpsl-search-input.wpsl-error{border:1px solid #bd0028!important}.wpsl-search{margin-bottom:12px;padding:12px 12px 0;background:#f4f3f3}.wpsl-search.wpsl-checkboxes-enabled{padding:12px}.wpsl-back{display:inline-block}#wpsl-result-list{width:33%;margin-right:.5%}.wpsl-store-below #wpsl-result-list{width:100%;margin:12px 0 0}#wpsl-direction-details,#wpsl-stores{height:350px;overflow-y:auto}#wpsl-direction-details,.wpsl-hide{display:none}#wpsl-result-list p{padding-left:10px}.wpsl-store-below #wpsl-result-list p{padding-left:0}.wpsl-direction-before{margin:14px 0 21px;padding-left:10px}.wpsl-store-below .wpsl-direction-before{padding-left:0}.wpsl-direction-before div{margin-top:10px}#wpsl-wrap #wpsl-result-list li{padding:10px;border-bottom:1px dotted #ccc;margin-left:0;overflow:hidden;list-style:none!important;text-indent:0}#wpsl-wrap #wpsl-result-list li li{padding:0;border-bottom:0;margin-left:14px;overflow:visible}#wpsl-wrap #wpsl-result-list ul li{list-style:disc!important}#wpsl-wrap #wpsl-result-list ol li{list-style:decimal!important}#wpsl-wrap.wpsl-store-below #wpsl-result-list li{padding:10px 10px 10px 0}#wpsl-result-list li p{padding-left:0;margin:0 0 20px}.wpsl-store-details.wpsl-store-listing{position:relative;padding-right:20px}.wpsl-store-details.wpsl-store-listing.wpsl-active-details:before,.wpsl-store-details.wpsl-store-listing:before{position:absolute;content:'';bottom:6px;right:0;border-top:5px solid #000;border-left:6px solid transparent;border-right:6px solid transparent}.wpsl-store-details.wpsl-store-listing.wpsl-active-details:before{border-bottom:5px solid #000;border-top:none;border-left:6px solid transparent;border-right:6px solid transparent}#wpsl-stores .wpsl-store-thumb{float:right;border-radius:3px;margin:7px 0 0 10px;padding:0;border:none}.wpsl-direction-index{float:left;width:8%;margin:0 5% 0 0}.wpsl-direction-txt{float:left;width:62%}.wpsl-direction-distance{float:left;width:20%;margin:0 0 0 5%}.wpsl-direction-txt span{display:block;margin-top:10px}.wpsl-country,.wpsl-directions,.wpsl-street{display:block;border-bottom:none!important}#wpsl-wrap #wpsl-result-list li.wpsl-preloader{position:relative;border-bottom:none;padding:10px 10px 10px 35px}.wpsl-preloader img{position:absolute;left:10px;top:50%;margin-top:-8px;box-shadow:none!important;border:none!important}.wpsl-preloader span{float:left;margin:-5px 0 0 11px}#wpsl-search-btn,#wpsl-search-wrap div{margin-right:10px;float:left}#wpsl-search-wrap .wpsl-select-wrap{position:relative;z-index:2;margin-right:0}#wpsl-search-wrap .wpsl-input-field{position:relative}#wpsl-radius,#wpsl-results{float:left;margin-right:15px;display:inline}#wpsl-category{z-index:1;clear:both}#wpsl-search-wrap .wpsl-dropdown div{position:absolute;float:none;margin:-1px 0 0;top:100%;left:-1px;right:-1px;border:1px solid #ccc;background:#fff;border-top:1px solid #eee;border-radius:0 0 3px 3px;opacity:0;overflow:hidden;-webkit-transition:all 150ms ease-in-out;-moz-transition:all 150ms ease-in-out;-ms-transition:all 150ms ease-in-out;transition:all 150ms ease-in-out}#wpsl-search-wrap .wpsl-dropdown.wpsl-active div{opacity:1}#wpsl-search-wrap .wpsl-input label{margin-right:0}#wpsl-radius{margin-right:10px}#wpsl-search select,#wpsl-search-wrap select,.wpsl-direction-details{display:none}#wpsl-search-wrap div label{float:left;margin-right:10px;line-height:32px}#wpsl-results label{width:auto}#wpsl-result-list ul{list-style:none;margin:0;padding:0}#wpsl-gmap .wpsl-info-window,.wpsl-gmap-canvas .wpsl-info-window{max-width:225px}.wpsl-info-window span,.wpsl-more-info-listings span{display:block}.wpsl-info-window .wpsl-no-margin{margin:0}.wpsl-more-info-listings{display:none}.wpsl-info-window span span{display:inline!important}#wpsl-wrap .wpsl-info-window p{margin:0 0 10px}.wpsl-store-hours{margin-top:10px}.wpsl-store-hours strong{display:block}#wpsl-gmap .wpsl-info-actions{display:block;margin:10px 0!important}.wpsl-info-actions a{float:left;margin-right:7px}.wpsl-info-actions .wpsl-zoom-here{margin-right:0}.wpsl-dropdown{position:relative;width:90px;border:1px solid #ccc;background:#fff;border-radius:3px;-webkit-user-select:none;-moz-user-select:none;user-select:none;margin-right:0!important;z-index:2}#wpsl-results .wpsl-dropdown{width:70px}.wpsl-dropdown ul{position:absolute;left:0;width:100%;height:100%;padding:0!important;margin:0!important;list-style:none;overflow:hidden}.wpsl-dropdown:hover{box-shadow:0 0 5px rgba(0,0,0,.15)}.wpsl-dropdown .wpsl-selected-item,.wpsl-dropdown li{position:relative;display:block;line-height:normal;color:#000;overflow:hidden}#wpsl-radius .wpsl-dropdown .wpsl-selected-item,#wpsl-radius .wpsl-dropdown li,#wpsl-results .wpsl-dropdown .wpsl-selected-item,#wpsl-results .wpsl-dropdown li{white-space:nowrap}.wpsl-selected-item:after{position:absolute;content:"";right:12px;top:50%;margin-top:-4px;border:6px solid transparent;border-top:8px solid #000}.wpsl-active .wpsl-selected-item:after{margin-top:-10px;border:6px solid transparent;border-bottom:8px solid #000}.wpsl-dropdown li:hover{background:#f8f9f8;position:relative;z-index:3;color:#000}.wpsl-dropdown .wpsl-selected-item,.wpsl-dropdown li,.wpsl-selected-item{list-style:none;padding:9px 12px!important;margin:0!important}.wpsl-selected-dropdown{font-weight:700}.wpsl-clearfix:after,.wpsl-clearfix:before{content:" ";display:table}#wpsl-wrap .wpsl-selected-item{position:static;padding-right:35px!important}#wpsl-category,.wpsl-input,.wpsl-select-wrap{position:relative;margin-bottom:10px}#wpsl-search-wrap .wpsl-scroll-required div{overflow-y:scroll}.wpsl-scroll-required ul{overflow:visible}.wpsl-provided-by{float:right;padding:5px 0;text-align:right;font-size:12px;width:100%}#wpsl-wrap .wpsl-results-only label{width:auto}.wpsl-contact-details,.wpsl-location-address,.wpsl-locations-details{margin-bottom:15px}table.wpsl-opening-hours td{vertical-align:top;padding:0 15px 0 0;text-align:left}table.wpsl-opening-hours time{display:block}table.wpsl-opening-hours{width:auto!important;font-size:100%!important}table.wpsl-opening-hours,table.wpsl-opening-hours td{border:none!important}.wpsl-gmap-canvas .wpsl-infobox{min-width:155px;max-width:350px!important;padding:10px;border-radius:4px;font-size:13px;font-weight:300;border:1px solid #ccc;background:#fff!important}.wpsl-gmap-canvas .wpsl-infobox:after,.wpsl-gmap-canvas .wpsl-infobox:before{position:absolute;content:"";left:40px;bottom:-11px}.wpsl-gmap-canvas .wpsl-infobox:after{border-left:11px solid transparent;border-right:11px solid transparent;border-top:11px solid #fff}.wpsl-gmap-canvas .wpsl-infobox:before{border-left:13px solid transparent;border-right:13px solid transparent;border-top:13px solid #ccc;bottom:-13px;left:38px}#wpsl-checkbox-filter{display:block;float:left;margin:5px 0 15px;padding:0;width:100%}#wpsl-checkbox-filter li{float:left;list-style:none;margin:0 1% 0 0}#wpsl-checkbox-filter.wpsl-checkbox-1-columns li{width:99%}#wpsl-checkbox-filter.wpsl-checkbox-2-columns li{width:49%}#wpsl-checkbox-filter.wpsl-checkbox-3-columns li{width:32%}#wpsl-checkbox-filter.wpsl-checkbox-4-columns li{width:24%}#wpsl-checkbox-filter input{margin-right:5px}#wpsl-result-list .wpsl-contact-details span{display:block!important}@media (max-width:825px){#wpsl-search-input{width:348px}.wpsl-results-only #wpsl-search-wrap .wpsl-dropdown{width:70px}#wpsl-search-wrap .wpsl-input{width:100%;margin-bottom:10px}#wpsl-category label,#wpsl-radius label,.wpsl-cat-results-filter #wpsl-search-wrap .wpsl-input,.wpsl-input label,.wpsl-no-filters #wpsl-search-wrap .wpsl-input,.wpsl-results-only #wpsl-search-wrap .wpsl-input{width:auto}}@media (max-width:720px){#wpsl-search-wrap .wpsl-dropdown{width:114px}}@media (max-width:675px){#wpsl-search-wrap #wpsl-search-btn{float:left;margin:0 5px 0 0}.wpsl-dropdown,.wpsl-results-only #wpsl-search-wrap .wpsl-input{width:100%}.wpsl-search{padding:2%}#wpsl-result-list p,#wpsl-wrap #wpsl-result-list li,.wpsl-direction-before{padding-left:0}.wpsl-input{margin-right:0}#wpsl-gmap,#wpsl-result-list{float:none;width:100%}#wpsl-gmap{margin-bottom:15px;margin-top:10px}#wpsl-result-list,.wpsl-cat-results-filter .wpsl-select-wrap,.wpsl-filter .wpsl-select-wrap{margin-bottom:10px}#wpsl-wrap #wpsl-result-list li.wpsl-preloader{padding-left:25px}.wpsl-preloader img{left:0}#wpsl-stores.wpsl-not-loaded{height:25px}#wpsl-reset-map{top:25px}#wpsl-category,#wpsl-search-btn,.wpsl-input,.wpsl-no-filters #wpsl-search-wrap .wpsl-input,.wpsl-select-wrap{margin-bottom:0}#wpsl-stores.wpsl-no-autoload{height:auto!important}#wpsl-checkbox-filter.wpsl-checkbox-3-columns li,#wpsl-checkbox-filter.wpsl-checkbox-4-columns li{width:49%}}@media (max-width:570px){#wpsl-search-wrap #wpsl-search-btn{margin-bottom:5px}.wpsl-search{padding:4%}#wpsl-search-input{width:98%!important}.wpsl-cat-results-filter #wpsl-search-input,.wpsl-cat-results-filter #wpsl-search-wrap .wpsl-input,.wpsl-no-results #wpsl-search-input,.wpsl-results-only #wpsl-search-input{width:100%!important}.wpsl-search-btn-wrap{margin-top:15px;clear:both}.wpsl-checkboxes-enabled .wpsl-search-btn-wrap{margin-top:0}#wpsl-search-btn,#wpsl-search-wrap div{margin-right:0}#wpsl-search-wrap div label{display:block;width:100%}.wpsl-select-wrap{width:100%}#wpsl-radius,#wpsl-results{width:50%}#wpsl-radius{margin-right:4%}#wpsl-search-wrap .wpsl-dropdown{width:96%!important}.wpsl-no-filters #wpsl-search-input,.wpsl-no-filters #wpsl-search-wrap .wpsl-input{width:100%!important}}@media (max-width:420px){#wpsl-checkbox-filter li{margin:0}#wpsl-checkbox-filter.wpsl-checkbox-1-columns li,#wpsl-checkbox-filter.wpsl-checkbox-2-columns li,#wpsl-checkbox-filter.wpsl-checkbox-3-columns li,#wpsl-checkbox-filter.wpsl-checkbox-4-columns li{width:100%}}
readme.txt CHANGED
@@ -5,7 +5,7 @@ Donate link: https://www.paypal.me/tijmensmit
5
  Tags: google maps, store locator, business locations, geocoding, stores, geo, zipcode locator, dealer locater, geocode, gmaps, google map, google map plugin, location finder, map tools, shop locator, wp google map
6
  Requires at least: 3.7
7
  Tested up to: 4.7
8
- Stable tag: 2.2.6
9
  License: GPLv3
10
  License URI: http://www.gnu.org/licenses/gpl.html
11
 
@@ -126,11 +126,15 @@ If you find a plugin or theme that causes a conflict, please report it on the [s
126
 
127
  == Changelog ==
128
 
 
 
 
 
129
  = 2.2.6, December 24, 2016 =
130
  * Fixed: The opening hours not working correctly for Saturday / Sunday in the admin area. The 12:00 AM field was missing.
131
  * Fixed: A PHP notice showing up when an invalid value was set for the radius / max results dropdown.
132
  * Fixed: The zoom attribute now works correctly for the wpsl_map shortcode.
133
- * Changed: Included the latest version of the EDD_SL_Plugin_Updater class.
134
  * Changed: Removed unused locationCount var from wpsl-gmap.js.
135
  * Changed: Added a CSS rule that makes it harder for themes to scaled images on the map.
136
 
5
  Tags: google maps, store locator, business locations, geocoding, stores, geo, zipcode locator, dealer locater, geocode, gmaps, google map, google map plugin, location finder, map tools, shop locator, wp google map
6
  Requires at least: 3.7
7
  Tested up to: 4.7
8
+ Stable tag: 2.2.7
9
  License: GPLv3
10
  License URI: http://www.gnu.org/licenses/gpl.html
11
 
126
 
127
  == Changelog ==
128
 
129
+ = 2.2.7, December 31, 2016 =
130
+ * Changed: Included the latest version of the EDD_SL_Plugin_Updater class ( 1.6.8 ).
131
+ * Changed: Reverted a change in the CSS file that ended up breaking the map for some users.
132
+
133
  = 2.2.6, December 24, 2016 =
134
  * Fixed: The opening hours not working correctly for Saturday / Sunday in the admin area. The 12:00 AM field was missing.
135
  * Fixed: A PHP notice showing up when an invalid value was set for the radius / max results dropdown.
136
  * Fixed: The zoom attribute now works correctly for the wpsl_map shortcode.
137
+ * Changed: Included the latest version of the EDD_SL_Plugin_Updater class ( 1.6.7 ).
138
  * Changed: Removed unused locationCount var from wpsl-gmap.js.
139
  * Changed: Added a CSS rule that makes it harder for themes to scaled images on the map.
140
 
wp-store-locator.php CHANGED
@@ -4,7 +4,7 @@ Plugin Name: WP Store Locator
4
  Description: An easy to use location management system that enables users to search for nearby physical stores
5
  Author: Tijmen Smit
6
  Author URI: https://wpstorelocator.co/
7
- Version: 2.2.6
8
  Text Domain: wpsl
9
  Domain Path: /languages/
10
  License: GPL v3
@@ -58,7 +58,7 @@ if ( !class_exists( 'WP_Store_locator' ) ) {
58
  public function define_constants() {
59
 
60
  if ( !defined( 'WPSL_VERSION_NUM' ) )
61
- define( 'WPSL_VERSION_NUM', '2.2.6' );
62
 
63
  if ( !defined( 'WPSL_URL' ) )
64
  define( 'WPSL_URL', plugin_dir_url( __FILE__ ) );
4
  Description: An easy to use location management system that enables users to search for nearby physical stores
5
  Author: Tijmen Smit
6
  Author URI: https://wpstorelocator.co/
7
+ Version: 2.2.7
8
  Text Domain: wpsl
9
  Domain Path: /languages/
10
  License: GPL v3
58
  public function define_constants() {
59
 
60
  if ( !defined( 'WPSL_VERSION_NUM' ) )
61
+ define( 'WPSL_VERSION_NUM', '2.2.7' );
62
 
63
  if ( !defined( 'WPSL_URL' ) )
64
  define( 'WPSL_URL', plugin_dir_url( __FILE__ ) );