Passed
Push — master ( 8a4cf0...7a5fda )
by Stiofan
09:58
created

general_functions.php ➔ geodir_remove_hentry()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 1
Bugs 1 Features 0
Metric Value
cc 2
eloc 4
c 1
b 1
f 0
nc 2
nop 1
dl 0
loc 6
ccs 4
cts 4
cp 1
crap 2
rs 9.4285
1
<?php
2
/**
3
 * Plugin general functions
4
 *
5
 * @since 1.0.0
6
 * @package GeoDirectory
7
 */
8
9
10
/**
11
 * Get All Plugin functions from WordPress
12
 */
13
include_once(ABSPATH . 'wp-admin/includes/plugin.php');
14
15
/*-----------------------------------------------------------------------------------*/
16
/* Helper functions */
17
/*-----------------------------------------------------------------------------------*/
18
19
/**
20
 * Return the plugin url.
21
 *
22
 * Return the plugin folder url WITHOUT TRAILING SLASH.
23
 *
24
 * @since 1.0.0
25
 * @package GeoDirectory
26
 * @return string example url eg: http://wpgeo.directory/wp-content/plugins/geodirectory
27
 */
28
function geodir_plugin_url()
29
{
30
31 21
    if (is_ssl()) :
32
        return str_replace('http://', 'https://', WP_PLUGIN_URL) . "/" . plugin_basename(dirname(dirname(__FILE__)));
33
    else :
34 21
        return WP_PLUGIN_URL . "/" . plugin_basename(dirname(dirname(__FILE__)));
35
    endif;
36
}
37
38
39
/**
40
 * Return the plugin path.
41
 *
42
 * Return the plugin folder path WITHOUT TRAILING SLASH.
43
 *
44
 * @since 1.0.0
45
 * @package GeoDirectory
46
 * @return string example url eg: /home/geo/public_html/wp-content/plugins/geodirectory
47
 */
48
function geodir_plugin_path()
49
{
50 34
    if ( defined( 'GD_TESTING_MODE' ) && GD_TESTING_MODE ) {
51 34
        return dirname(dirname(__FILE__));
52
    } else {
53
        return WP_PLUGIN_DIR . "/" . plugin_basename(dirname(dirname(__FILE__)));
54
    }
55
}
56
57
/**
58
 * Check if a GeoDirectory addon plugin is active.
59
 *
60
 * @since 1.0.0
61
 * @package GeoDirectory
62
 * @param string $plugin plugin uri.
63
 * @return bool true or false.
64
 * @todo check if this is faster than normal WP check and remove if not.
65
 */
66
function geodir_is_plugin_active($plugin)
67
{
68
    $active_plugins = get_option('active_plugins');
69
    foreach ($active_plugins as $key => $active_plugin) {
70
        if (strstr($active_plugin, $plugin)) return true;
71
    }
72
    return false;
73
}
74
75
76
/**
77
 * Return the formatted date.
78
 *
79
 * Return a formatted date from a date/time string according to WordPress date format. $date must be in format : 'Y-m-d H:i:s'.
80
 *
81
 * @since 1.0.0
82
 * @package GeoDirectory
83
 * @param string $date must be in format: 'Y-m-d H:i:s'.
84
 * @return bool|int|string the formatted date.
85
 */
86
function geodir_get_formated_date($date)
0 ignored issues
show
Best Practice introduced by
The function geodir_get_formated_date() has been defined more than once; this definition is ignored, only the first definition in geodirectory-functions/custom_fields_functions.php (L3223-3226) is considered.

This check looks for functions that have already been defined in other files.

Some Codebases, like WordPress, make a practice of defining functions multiple times. This may lead to problems with the detection of function parameters and types. If you really need to do this, you can mark the duplicate definition with the @ignore annotation.

/**
 * @ignore
 */
function getUser() {

}

function getUser($id, $realm) {

}

See also the PhpDoc documentation for @ignore.

Loading history...
87
{
88
    return mysql2date(get_option('date_format'), $date);
89
}
90
91
/**
92
 * Return the formatted time.
93
 *
94
 * Return a formatted time from a date/time string according to WordPress time format. $time must be in format : 'Y-m-d H:i:s'.
95
 *
96
 * @since 1.0.0
97
 * @package GeoDirectory
98
 * @param string $time must be in format: 'Y-m-d H:i:s'.
99
 * @return bool|int|string the formatted time.
100
 */
101
function geodir_get_formated_time($time)
0 ignored issues
show
Best Practice introduced by
The function geodir_get_formated_time() has been defined more than once; this definition is ignored, only the first definition in geodirectory-functions/custom_fields_functions.php (L3238-3241) is considered.

This check looks for functions that have already been defined in other files.

Some Codebases, like WordPress, make a practice of defining functions multiple times. This may lead to problems with the detection of function parameters and types. If you really need to do this, you can mark the duplicate definition with the @ignore annotation.

/**
 * @ignore
 */
function getUser() {

}

function getUser($id, $realm) {

}

See also the PhpDoc documentation for @ignore.

Loading history...
102
{
103
    return mysql2date(get_option('time_format'), $time, $translate = true);
104
}
105
106
107
/**
108
 * Return a formatted link with parameters.
109
 *
110
 * Returns a link with new parameters and currently used parameters regardless of ? or & in the $url parameter.
111
 *
112
 * @since 1.0.0
113
 * @package GeoDirectory
114
 * @param string $url The main url to be used.
115
 * @param array $params The arguments array.
116
 * @param bool $use_existing_arguments Do you want to use existing arguments? Default: false.
117
 * @return string Formatted link.
118
 */
119
function geodir_getlink($url, $params = array(), $use_existing_arguments = false)
120
{
121 15
    if ($use_existing_arguments) $params = $params + $_GET;
122 15
    if (!$params) return $url;
0 ignored issues
show
Bug Best Practice introduced by
The expression $params of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
123 15
    $link = $url;
124 15
    if (strpos($link, '?') === false) $link .= '?'; //If there is no '?' add one at the end
125 15
    elseif (strpos($link, '//maps.google.com/maps/api/js?language=')) $link .= '&amp;'; //If there is no '&' at the END, add one.
126 15
    elseif (!preg_match('/(\?|\&(amp;)?)$/', $link)) $link .= '&'; //If there is no '&' at the END, add one.
127
128 15
    $params_arr = array();
129 15
    foreach ($params as $key => $value) {
130 15
        if (gettype($value) == 'array') { //Handle array data properly
131
            foreach ($value as $val) {
132
                $params_arr[] = $key . '[]=' . urlencode($val);
133
            }
134
        } else {
135 15
            $params_arr[] = $key . '=' . urlencode($value);
136
        }
137 15
    }
138 15
    $link .= implode('&', $params_arr);
139
140 15
    return $link;
141
}
142
143
144
/**
145
 * Returns add listing page link.
146
 *
147
 * @since 1.0.0
148
 * @package GeoDirectory
149
 * @global object $wpdb WordPress Database object.
150
 * @param string $post_type The post type.
151
 * @return string Listing page url if valid. Otherwise home url will be returned.
152
 */
153
function geodir_get_addlisting_link($post_type = '')
154
{
155 3
    global $wpdb;
156
157
    //$check_pkg  = $wpdb->get_var("SELECT pid FROM ".GEODIR_PRICE_TABLE." WHERE post_type='".$post_type."' and status != '0'");
0 ignored issues
show
Unused Code Comprehensibility introduced by
53% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
158 3
    $check_pkg = 1;
159 3
    if (post_type_exists($post_type) && $check_pkg) {
160
161 3
        $add_listing_link = get_page_link(geodir_add_listing_page_id());
162
163 3
        return esc_url( add_query_arg(array('listing_type' => $post_type), $add_listing_link) );
164
    } else
165
        return get_bloginfo('url');
166
}
167
168
/**
169
 * Get the current page URL.
170
 *
171
 * @since 1.0.0
172
 * @package GeoDirectory
173
 * @since 1.4.2 Removed the port number from the URL if port 80 is not being used.
174
 * @return string The current URL.
175
 */
176
function geodir_curPageURL()
177
{
178 9
    $pageURL = 'http';
179 9
    if (isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on") {
180
        $pageURL .= "s";
181
    }
182 9
    $pageURL .= "://";
183 9
    $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
184
    /**
185
     * Filter the current page URL returned by function geodir_curPageURL().
186
     *
187
     * @since 1.4.1
188
     * @param string $pageURL The URL of the current page.
189
     */
190 9
    return apply_filters('geodir_curPageURL', $pageURL);
191
}
192
193
194
/**
195
 * Clean variables.
196
 *
197
 * This function is used to create posttype, posts, taxonomy and terms slug.
198
 *
199
 * @since 1.0.0
200
 * @package GeoDirectory
201
 * @param string $string The variable to clean.
202
 * @return string Cleaned variable.
203
 */
204
function geodir_clean($string)
205
{
206
207
    $string = trim(strip_tags(stripslashes($string)));
208
    $string = str_replace(" ", "-", $string); // Replaces all spaces with hyphens.
209
    $string = preg_replace('/[^A-Za-z0-9\-\_]/', '', $string); // Removes special chars.
210
    $string = preg_replace('/-+/', '-', $string); // Replaces multiple hyphens with single one.
211
212
    return $string;
213
}
214
215
/**
216
 * Get Week Days list.
217
 *
218
 * @since 1.0.0
219
 * @package GeoDirectory
220
 * @return array Week days.
221
 */
222
function geodir_get_weekday()
223
{
224
    return array(__('Sunday', 'geodirectory'), __('Monday', 'geodirectory'), __('Tuesday', 'geodirectory'), __('Wednesday', 'geodirectory'), __('Thursday', 'geodirectory'), __('Friday', 'geodirectory'), __('Saturday', 'geodirectory'));
225
}
226
227
/**
228
 * Get Weeks lists.
229
 *
230
 * @since 1.0.0
231
 * @package GeoDirectory
232
 * @return array Weeks.
233
 */
234
function geodir_get_weeks()
235
{
236
    return array(__('First', 'geodirectory'), __('Second', 'geodirectory'), __('Third', 'geodirectory'), __('Fourth', 'geodirectory'), __('Last', 'geodirectory'));
237
}
238
239
240
/**
241
 * Check that page is.
242
 *
243
 * @since 1.0.0
244
 * @since 1.5.6 Added to check GD invoices and GD checkout pages.
245
 * @since 1.5.7 Updated to validate buddypress dashboard listings page as a author page.
246
 * @package GeoDirectory
247
 * @global object $wp_query WordPress Query object.
248
 * @global object $post The current post object.
249
 * @param string $gdpage The page type.
250
 * @return bool If valid returns true. Otherwise false.
251
 */
252
function geodir_is_page($gdpage = '')
253
{
254
255 28
    global $wp_query, $post,$wp;
256
    //if(!is_admin()):
0 ignored issues
show
Unused Code Comprehensibility introduced by
88% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
257
258
    switch ($gdpage):
259 28
        case 'add-listing':
260
261 25
            if (is_page() && get_query_var('page_id') == geodir_add_listing_page_id()) {
262 1
                return true;
263 24
            } elseif (is_page() && isset($post->post_content) && has_shortcode($post->post_content, 'gd_add_listing')) {
264
                return true;
265
            }
266
267 24
            break;
268 27
        case 'preview':
269 22
            if ((is_page() && get_query_var('page_id') == geodir_preview_page_id()) && isset($_REQUEST['listing_type'])
270 22
                && in_array($_REQUEST['listing_type'], geodir_get_posttypes())
271 1
            )
272 22
                return true;
273 21
            break;
274 27
        case 'listing-success':
275 6
            if (is_page() && get_query_var('page_id') == geodir_success_page_id())
276 6
                return true;
277 5
            break;
278 27 View Code Duplication
        case 'detail':
279 10
            $post_type = get_query_var('post_type');
280 10
            if(is_array($post_type)){$post_type = reset($post_type);}
281 10
            if (is_single() && in_array($post_type, geodir_get_posttypes()))
282 10
                return true;
283 8
            break;
284 26 View Code Duplication
        case 'pt':
285 7
            $post_type = get_query_var('post_type');
286 7
            if(is_array($post_type)){$post_type = reset($post_type);}
287 7
            if (is_post_type_archive() && in_array($post_type , geodir_get_posttypes()) && !is_tax())
288 7
                return true;
289
290 7
            break;
291 26
        case 'listing':
292 12
            if (is_tax() && geodir_get_taxonomy_posttype()) {
293
                global $current_term, $taxonomy, $term;
294
295
                return true;
296
            }
297 12
            $post_type = get_query_var('post_type');
298 12
            if(is_array($post_type)){$post_type = reset($post_type);}
299 12
            if (is_post_type_archive() && in_array($post_type, geodir_get_posttypes()))
300 12
                return true;
301
302 12
            break;
303 25
        case 'home':
304
305 8
            if ((is_page() && get_query_var('page_id') == geodir_home_page_id()) || is_page_geodir_home())
306 8
                return true;
307
308 9
            break;
309 25
        case 'location':
310 7
            if (is_page() && get_query_var('page_id') == geodir_location_page_id())
311 7
                return true;
312 6
            break;
313 25
        case 'author':
314 24
            if (is_author() && isset($_REQUEST['geodir_dashbord']))
315 24
                return true;
316
			
317 24
			if (function_exists('bp_loggedin_user_id') && function_exists('bp_displayed_user_id') && $my_id = (int)bp_loggedin_user_id()) {
318
				if (((bool)bp_is_current_component('listings') || (bool)bp_is_current_component('favorites')) && $my_id > 0 && $my_id == (int)bp_displayed_user_id()) {
319
					return true;
320
				}
321
			}
322 24
            break;
323 25
        case 'search':
324 24
            if (is_search() && isset($_REQUEST['geodir_search']))
325 24
                return true;
326 23
            break;
327 10
        case 'info':
328 1
            if (is_page() && get_query_var('page_id') == geodir_info_page_id())
329 1
                return true;
330 1
            break;
331 9
        case 'login':
332 9
            if (is_page() && get_query_var('page_id') == geodir_login_page_id())
333 9
                return true;
334 9
            break;
335 7
        case 'checkout':
336 View Code Duplication
            if (is_page() && function_exists('geodir_payment_checkout_page_id') && get_query_var('page_id') == geodir_payment_checkout_page_id())
337
                return true;
338
            break;
339 7
        case 'invoices':
340 View Code Duplication
            if (is_page() && function_exists('geodir_payment_invoices_page_id') && get_query_var('page_id') == geodir_payment_invoices_page_id())
341
                return true;
342
            break;
343 7
        default:
344 7
            return false;
345
            break;
0 ignored issues
show
Unused Code introduced by
break is not strictly necessary here and could be removed.

The break statement is not necessary if it is preceded for example by a return statement:

switch ($x) {
    case 1:
        return 'foo';
        break; // This break is not necessary and can be left off.
}

If you would like to keep this construct to be consistent with other case statements, you can safely mark this issue as a false-positive.

Loading history...
346
347 7
    endswitch;
348
349
    //endif;
350
351 28
    return false;
352
}
353
354
/**
355
 * Sets a key and value in $wp object if the current page is a geodir page.
356
 *
357
 * @since 1.0.0
358
 * @since 1.5.4 Added check for new style GD homepage.
359
 * @since 1.5.6 Added check for GD invoices and GD checkout page.
360
 * @package GeoDirectory
361
 * @param object $wp WordPress object.
362
 */
363
function geodir_set_is_geodir_page($wp)
364
{
365
    if (!is_admin()) {
366
        //$wp->query_vars['gd_is_geodir_page'] = false;
0 ignored issues
show
Unused Code Comprehensibility introduced by
64% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
367
        //print_r()
368
        if (empty($wp->query_vars) || !array_diff(array_keys($wp->query_vars), array('preview', 'page', 'paged', 'cpage'))) {
369
            if (get_option('geodir_set_as_home'))
370
                $wp->query_vars['gd_is_geodir_page'] = true;
371
            if(geodir_is_page('home')){
372
                $wp->query_vars['gd_is_geodir_page'] = true;
373
            }
374
375
376
        }
377
378
        if (!isset($wp->query_vars['gd_is_geodir_page']) && isset($wp->query_vars['page_id'])) {
379
            if (
380
                $wp->query_vars['page_id'] == geodir_add_listing_page_id()
381
                || $wp->query_vars['page_id'] == geodir_preview_page_id()
382
                || $wp->query_vars['page_id'] == geodir_success_page_id()
383
                || $wp->query_vars['page_id'] == geodir_location_page_id()
384
                || $wp->query_vars['page_id'] == geodir_home_page_id()
385
                || $wp->query_vars['page_id'] == geodir_info_page_id()
386
                || $wp->query_vars['page_id'] == geodir_login_page_id()
387
                || (function_exists('geodir_payment_checkout_page_id') && $wp->query_vars['page_id'] == geodir_payment_checkout_page_id())
388
                || (function_exists('geodir_payment_invoices_page_id') && $wp->query_vars['page_id'] == geodir_payment_invoices_page_id())
389
            )
390
                $wp->query_vars['gd_is_geodir_page'] = true;
391
        }
392
393
        if (!isset($wp->query_vars['gd_is_geodir_page']) && isset($wp->query_vars['pagename'])) {
394
            $page = get_page_by_path($wp->query_vars['pagename']);
395
396
            if (!empty($page) && (
397
                    $page->ID == geodir_add_listing_page_id()
398
                    || $page->ID == geodir_preview_page_id()
399
                    || $page->ID == geodir_success_page_id()
400
                    || $page->ID == geodir_location_page_id()
401
                    || (isset($wp->query_vars['page_id']) && $wp->query_vars['page_id'] == geodir_home_page_id())
402
                    || (isset($wp->query_vars['page_id']) && $wp->query_vars['page_id'] == geodir_info_page_id())
403
                    || (isset($wp->query_vars['page_id']) && $wp->query_vars['page_id'] == geodir_login_page_id())
404
                    || (isset($wp->query_vars['page_id']) && function_exists('geodir_payment_checkout_page_id') && $wp->query_vars['page_id'] == geodir_payment_checkout_page_id())
405
                    || (isset($wp->query_vars['page_id']) && function_exists('geodir_payment_invoices_page_id') && $wp->query_vars['page_id'] == geodir_payment_invoices_page_id())
406
                )
407
            )
408
                $wp->query_vars['gd_is_geodir_page'] = true;
409
        }
410
411
412
        if (!isset($wp->query_vars['gd_is_geodir_page']) && isset($wp->query_vars['post_type']) && $wp->query_vars['post_type'] != '') {
413
            $requested_post_type = $wp->query_vars['post_type'];
414
            // check if this post type is geodirectory post types 
415
            $post_type_array = geodir_get_posttypes();
416
            if (in_array($requested_post_type, $post_type_array)) {
417
                $wp->query_vars['gd_is_geodir_page'] = true;
418
            }
419
        }
420
421
        if (!isset($wp->query_vars['gd_is_geodir_page'])) {
422
            $geodir_taxonomis = geodir_get_taxonomies('', true);
423
            if(!empty($geodir_taxonomis)){
424
                foreach ($geodir_taxonomis as $taxonomy) {
0 ignored issues
show
Bug introduced by
The expression $geodir_taxonomis of type array|boolean is not guaranteed to be traversable. How about adding an additional type check?

There are different options of fixing this problem.

  1. If you want to be on the safe side, you can add an additional type-check:

    $collection = json_decode($data, true);
    if ( ! is_array($collection)) {
        throw new \RuntimeException('$collection must be an array.');
    }
    
    foreach ($collection as $item) { /** ... */ }
    
  2. If you are sure that the expression is traversable, you might want to add a doc comment cast to improve IDE auto-completion and static analysis:

    /** @var array $collection */
    $collection = json_decode($data, true);
    
    foreach ($collection as $item) { /** .. */ }
    
  3. Mark the issue as a false-positive: Just hover the remove button, in the top-right corner of this issue for more options.

Loading history...
425
                    if (array_key_exists($taxonomy, $wp->query_vars)) {
426
                        $wp->query_vars['gd_is_geodir_page'] = true;
427
                        break;
428
                    }
429
                }
430
            }
431
432
        }
433
434
        if (!isset($wp->query_vars['gd_is_geodir_page']) && isset($wp->query_vars['author_name']) && isset($_REQUEST['geodir_dashbord']))
435
            $wp->query_vars['gd_is_geodir_page'] = true;
436
437
438
        if (!isset($wp->query_vars['gd_is_geodir_page']) && isset($_REQUEST['geodir_search']))
439
            $wp->query_vars['gd_is_geodir_page'] = true;
440
441
442
//check if homepage
443
        if(!isset($wp->query_vars['gd_is_geodir_page'])
444
            && !isset($wp->query_vars['page_id'])
445
            && !isset($wp->query_vars['pagename'])
446
            && is_page_geodir_home()){
447
            $wp->query_vars['gd_is_geodir_page'] = true;
448
        }
449
        //echo $wp->query_vars['gd_is_geodir_page'] ;
0 ignored issues
show
Unused Code Comprehensibility introduced by
70% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
450
        /*echo "<pre>" ;
0 ignored issues
show
Unused Code Comprehensibility introduced by
59% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
451
		print_r($wp) ;
452
		echo "</pre>" ;
453
	//	exit();
454
			*/
455
    } // end of is admin
456
}
457
458
/**
459
 * Checks whether the current page is a GD page or not.
460
 *
461
 * @since 1.0.0
462
 * @package GeoDirectory
463
 * @global object $wp WordPress object.
464
 * @return bool If the page is GD page returns true. Otherwise false.
465
 */
466
function geodir_is_geodir_page()
467
{
468 30
    global $wp;
469 30
    if (isset($wp->query_vars['gd_is_geodir_page']) && $wp->query_vars['gd_is_geodir_page'])
470 30
        return true;
471
    else
472 30
        return false;
473
}
474
475
if (!function_exists('geodir_get_imagesize')) {
476
    /**
477
     * Get image size using the size key .
478
     *
479
     * @since 1.0.0
480
     * @package GeoDirectory
481
     * @param string $size The image size key.
482
     * @return array|mixed|void|WP_Error If valid returns image size. Else returns error.
483
     */
484
    function geodir_get_imagesize($size = '')
485
    {
486
487 9
        $imagesizes = array('list-thumb' => array('w' => 283, 'h' => 188),
488 9
            'thumbnail' => array('w' => 125, 'h' => 125),
489 9
            'widget-thumb' => array('w' => 50, 'h' => 50),
490 9
            'slider-thumb' => array('w' => 100, 'h' => 100)
491 9
        );
492
493
        /**
494
         * Filter the image sizes array.
495
         *
496
         * @since 1.0.0
497
         * @param array $imagesizes Image size array.
498
         */
499 9
        $imagesizes = apply_filters('geodir_imagesizes', $imagesizes);
500
501 9
        if (!empty($size) && array_key_exists($size, $imagesizes)) {
502
            /**
503
             * Filters image size of the passed key.
504
             *
505
             * @since 1.0.0
506
             * @param array $imagesizes[$size] Image size array of the passed key.
507
             */
508 9
            return apply_filters('geodir_get_imagesize_' . $size, $imagesizes[$size]);
509
510
        } elseif (!empty($size)) {
511
512
            return new WP_Error('geodir_no_imagesize', __("Given image size is not valid", 'geodirectory'));
513
514
        }
515
516
        return $imagesizes;
517
    }
518
}
519
520
/**
521
 * Get an image size
522
 *
523
 * Variable is filtered by geodir_get_image_size_{image_size}
524
 */
525
/*
0 ignored issues
show
Unused Code Comprehensibility introduced by
53% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
526
function geodir_get_image_size( $image_size ) {
527
	$return = '';
528
	switch ($image_size) :
529
		case "list_thumbnail_size" : $return = get_option('geodirectory_list_thumbnail_size'); break;
530
	endswitch;
531
	return apply_filters( 'geodir_get_image_size_'.$image_size, $return );
532
}
533
*/
534
535
536
if (!function_exists('createRandomString')) {
537
    /**
538
     * Creates random string.
539
     *
540
     * @since 1.0.0
541
     * @package GeoDirectory
542
     * @return string Random string.
543
     */
544
    function createRandomString()
545
    {
546
        $chars = "abcdefghijkmlnopqrstuvwxyz1023456789";
547
        srand((double)microtime() * 1000000);
548
        $i = 0;
549
        $rstring = '';
550
        while ($i <= 25) {
551
            $num = rand() % 33;
552
            $tmp = substr($chars, $num, 1);
553
            $rstring = $rstring . $tmp;
554
            $i++;
555
        }
556
        return $rstring;
557
    }
558
}
559
560
if (!function_exists('geodir_getDistanceRadius')) {
561
    /**
562
     * Calculates the distance radius.
563
     *
564
     * @since 1.0.0
565
     * @package GeoDirectory
566
     * @param string $uom Measurement unit type.
567
     * @return float The mean radius.
568
     */
569
    function geodir_getDistanceRadius($uom = 'km')
570
    {
571
//	Use Haversine formula to calculate the great circle distance between two points identified by longitude and latitude
572 1
        switch (geodir_strtolower($uom)):
573 1
            case 'km'    :
574
                $earthMeanRadius = 6371.009; // km
575
                break;
576 1
            case 'm'    :
577 1
            case 'meters'    :
578
                $earthMeanRadius = 6371.009 * 1000; // km
579
                break;
580 1
            case 'miles'    :
581 1
                $earthMeanRadius = 3958.761; // miles
582 1
                break;
583
            case 'yards'    :
584
            case 'yds'    :
585
                $earthMeanRadius = 3958.761 * 1760; // yards
586
                break;
587
            case 'feet'    :
588
            case 'ft'    :
589
                $earthMeanRadius = 3958.761 * 1760 * 3; // feet
590
                break;
591
            case 'nm'    :
592
                $earthMeanRadius = 3440.069; //  miles
593
                break;
594
            default:
595
                $earthMeanRadius = 3958.761; // miles
596
                break;
597 1
        endswitch;
598 1
        return $earthMeanRadius;
599
    }
600
}
601
602
603
if (!function_exists('geodir_calculateDistanceFromLatLong')) {
604
    /**
605
     * Calculate the great circle distance between two points identified by longitude and latitude.
606
     *
607
     * @since 1.0.0
608
     * @package GeoDirectory
609
     * @param array $point1 Latitude and Longitude of point 1.
610
     * @param array $point2 Latitude and Longitude of point 2.
611
     * @param string $uom Unit of measurement.
612
     * @return float The distance.
613
     */
614
    function geodir_calculateDistanceFromLatLong($point1, $point2, $uom = 'km')
615
    {
616
//	Use Haversine formula to calculate the great circle distance between two points identified by longitude and latitude
617
618 1
        $earthMeanRadius = geodir_getDistanceRadius($uom);
619
620 1
        $deltaLatitude = deg2rad((float) $point2['latitude'] - (float) $point1['latitude']);
621 1
        $deltaLongitude = deg2rad((float) $point2['longitude'] - (float) $point1['longitude']);
622 1
        $a = sin($deltaLatitude / 2) * sin($deltaLatitude / 2) +
623 1
            cos(deg2rad((float) $point1['latitude'])) * cos(deg2rad((float) $point2['latitude'])) *
624 1
            sin($deltaLongitude / 2) * sin($deltaLongitude / 2);
625 1
        $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
626 1
        $distance = $earthMeanRadius * $c;
627 1
        return $distance;
628
629
    }
630
}
631
632
633
if (!function_exists('geodir_sendEmail')) {
634
    /**
635
     * The main function that send transactional emails using the args provided.
636
     *
637
     * @since 1.0.0
638
     * @since 1.5.7 Added db translations for notifications subject and content.
639
     * @package GeoDirectory
640
     * @param string $fromEmail Sender email address.
641
     * @param string $fromEmailName Sender name.
642
     * @param string $toEmail Receiver email address.
643
     * @param string $toEmailName Receiver name.
644
     * @param string $to_subject Email subject.
645
     * @param string $to_message Email content.
646
     * @param string $extra Not being used.
647
     * @param string $message_type The message type. Can be send_friend, send_enquiry, forgot_password, registration, post_submit, listing_published.
648
     * @param string $post_id The post ID.
649
     * @param string $user_id The user ID.
650
     */
651
    function geodir_sendEmail($fromEmail, $fromEmailName, $toEmail, $toEmailName, $to_subject, $to_message, $extra = '', $message_type, $post_id = '', $user_id = '') {
652 9
        $login_details = '';
653
654
        // strip slashes from subject & message text
655 9
        $to_subject = stripslashes_deep($to_subject);
656 9
        $to_message = stripslashes_deep($to_message);
657
658 9
        if ($message_type == 'send_friend') {
659 2
            $subject = get_option('geodir_email_friend_subject');
660 2
            $message = get_option('geodir_email_friend_content');
661 9
        } elseif ($message_type == 'send_enquiry') {
662 2
            $subject = get_option('geodir_email_enquiry_subject');
663 2
            $message = get_option('geodir_email_enquiry_content');
664 7
        } elseif ($message_type == 'forgot_password') {
665 1
            $subject = get_option('geodir_forgot_password_subject');
666 1
            $message = get_option('geodir_forgot_password_content');
667 1
            $login_details = $to_message;
668 5
        } elseif ($message_type == 'registration') {
669 2
            $subject = get_option('geodir_registration_success_email_subject');
670 2
            $message = get_option('geodir_registration_success_email_content');
671 2
            $login_details = $to_message;
672 4
        } elseif ($message_type == 'post_submit') {
673 1
            $subject = get_option('geodir_post_submited_success_email_subject');
674 1
            $message = get_option('geodir_post_submited_success_email_content');
675 2
        } elseif ($message_type == 'listing_published') {
676 1
            $subject = get_option('geodir_post_published_email_subject');
677 1
            $message = get_option('geodir_post_published_email_content');
678 1
        } elseif ($message_type == 'listing_edited') {
679
            $subject = get_option('geodir_post_edited_email_subject_admin');
680
            $message = get_option('geodir_post_edited_email_content_admin');
681
        }
682
		
683 9
		if (!empty($subject)) {
684 9
			$subject = __(stripslashes_deep($subject),'geodirectory');
685 9
		}
686
		
687 9
		if (!empty($message)) {
688 9
			$message = __(stripslashes_deep($message),'geodirectory');
689 9
		}
690
691 9
        $to_message = nl2br($to_message);
692 9
        $sitefromEmail = get_option('site_email');
693 9
        $sitefromEmailName = get_site_emailName();
694 9
        $productlink = get_permalink($post_id);
695
696 9
        $user_login = '';
697 9
        if ($user_id > 0 && $user_info = get_userdata($user_id)) {
698 1
            $user_login = $user_info->user_login;
699 1
        }
700
701 9
        $posted_date = '';
702 9
        $listingLink = '';
703
704 9
        $post_info = get_post($post_id);
705
706 9
        if ($post_info) {
707 2
            $posted_date = $post_info->post_date;
708 2
            $listingLink = '<a href="' . $productlink . '"><b>' . $post_info->post_title . '</b></a>';
709 2
        }
710 9
        $siteurl = home_url();
711 9
        $siteurl_link = '<a href="' . $siteurl . '">' . $siteurl . '</a>';
712 9
        $loginurl = geodir_login_url();
713 9
        $loginurl_link = '<a href="' . $loginurl . '">login</a>';
714
        
715 9
        $post_author_id = !empty($post_info) ? $post_info->post_author : 0;
716 9
        $post_author_name = geodir_get_client_name($post_author_id);
717 9
        $current_date = date_i18n('Y-m-d H:i:s', current_time('timestamp'));
718
719 9
        if ($fromEmail == '') {
720 6
            $fromEmail = get_option('site_email');
721 6
        }
722
723 9
        if ($fromEmailName == '') {
724 6
            $fromEmailName = get_option('site_email_name');
725 6
        }
726
727 9
        $search_array = array('[#listing_link#]', '[#site_name_url#]', '[#post_id#]', '[#site_name#]', '[#to_name#]', '[#from_name#]', '[#subject#]', '[#comments#]', '[#login_url#]', '[#login_details#]', '[#client_name#]', '[#posted_date#]','[#from_email#]','[#user_login#]','[#username#]','[#post_author_id#]','[#post_author_name#]','[#current_date#]');
728 9
        $replace_array = array($listingLink, $siteurl_link, $post_id, $sitefromEmailName, $toEmailName, $fromEmailName, $to_subject, $to_message, $loginurl_link, $login_details, $toEmailName, $posted_date,$fromEmail, $user_login, $user_login, $post_author_id, $post_author_name, $current_date);
729 9
        $message = str_replace($search_array, $replace_array, $message);
0 ignored issues
show
Bug introduced by
The variable $message does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
730
731 9
        $search_array = array('[#listing_link#]', '[#site_name_url#]', '[#post_id#]', '[#site_name#]', '[#to_name#]', '[#from_name#]', '[#subject#]', '[#client_name#]', '[#posted_date#]','[#from_email#]','[#user_login#]','[#username#]','[#post_author_id#]','[#post_author_name#]','[#current_date#]');
732 9
        $replace_array = array($listingLink, $siteurl_link, $post_id, $sitefromEmailName, $toEmailName, $fromEmailName, $to_subject, $toEmailName, $posted_date,$fromEmail, $user_login, $user_login, $post_author_id, $post_author_name, $current_date);
733 9
        $subject = str_replace($search_array, $replace_array, $subject);
0 ignored issues
show
Bug introduced by
The variable $subject does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
734
735 9
        $headers = 'MIME-Version: 1.0' . "\r\n";
736 9
        $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
737 9
        $headers .= "Reply-To: " . $fromEmail . "\r\n";
738 9
        $headers .= 'From: ' . $sitefromEmailName . ' <' . $sitefromEmail . '>' . "\r\n";
739
740 9
        $to = $toEmail;
741
742
        /**
743
         * Filter the client email to address.
744
         *
745
         * @since 1.6.1
746
         * @package GeoDirectory
747
         * @param string $to The email address the email is being sent to.
748
         * @param string $fromEmail Sender email address.
749
         * @param string $fromEmailName Sender name.
750
         * @param string $toEmail Receiver email address.
751
         * @param string $toEmailName Receiver name.
752
         * @param string $to_subject Email subject.
753
         * @param string $to_message Email content.
754
         * @param string $extra Not being used.
755
         * @param string $message_type The message type. Can be send_friend, send_enquiry, forgot_password, registration, post_submit, listing_published.
756
         * @param string $post_id The post ID.
757
         * @param string $user_id The user ID.
758
         */
759 9
        $to = apply_filters('geodir_sendEmail_to',$to,$fromEmail, $fromEmailName, $toEmail, $toEmailName, $to_subject, $to_message, $extra, $message_type, $post_id, $user_id );
760
        /**
761
         * Filter the client email subject.
762
         *
763
         * @since 1.6.1
764
         * @package GeoDirectory_Payment_Manager
765
         * @param string $subject The email subject.
766
         * @param string $fromEmail Sender email address.
767
         * @param string $fromEmailName Sender name.
768
         * @param string $toEmail Receiver email address.
769
         * @param string $toEmailName Receiver name.
770
         * @param string $to_subject Email subject.
771
         * @param string $to_message Email content.
772
         * @param string $extra Not being used.
773
         * @param string $message_type The message type. Can be send_friend, send_enquiry, forgot_password, registration, post_submit, listing_published.
774
         * @param string $post_id The post ID.
775
         * @param string $user_id The user ID.
776
         */
777 9
        $subject = apply_filters('geodir_sendEmail_subject',$subject,$fromEmail, $fromEmailName, $toEmail, $toEmailName, $to_subject, $to_message, $extra, $message_type, $post_id, $user_id );
778
        /**
779
         * Filter the client email message.
780
         *
781
         * @since 1.6.1
782
         * @package GeoDirectory_Payment_Manager
783
         * @param string $message The email message text.
784
         * @param string $fromEmail Sender email address.
785
         * @param string $fromEmailName Sender name.
786
         * @param string $toEmail Receiver email address.
787
         * @param string $toEmailName Receiver name.
788
         * @param string $to_subject Email subject.
789
         * @param string $to_message Email content.
790
         * @param string $extra Not being used.
791
         * @param string $message_type The message type. Can be send_friend, send_enquiry, forgot_password, registration, post_submit, listing_published.
792
         * @param string $post_id The post ID.
793
         * @param string $user_id The user ID.
794
         */
795 9
        $message = apply_filters('geodir_sendEmail_message',$message,$fromEmail, $fromEmailName, $toEmail, $toEmailName, $to_subject, $to_message, $extra, $message_type, $post_id, $user_id );
796
        /**
797
         * Filter the client email headers.
798
         *
799
         * @since 1.6.1
800
         * @package GeoDirectory_Payment_Manager
801
         * @param string $headers The email headers.
802
         * @param string $fromEmail Sender email address.
803
         * @param string $fromEmailName Sender name.
804
         * @param string $toEmail Receiver email address.
805
         * @param string $toEmailName Receiver name.
806
         * @param string $to_subject Email subject.
807
         * @param string $to_message Email content.
808
         * @param string $extra Not being used.
809
         * @param string $message_type The message type. Can be send_friend, send_enquiry, forgot_password, registration, post_submit, listing_published.
810
         * @param string $post_id The post ID.
811
         * @param string $user_id The user ID.
812
         */
813 9
        $headers = apply_filters('geodir_sendEmail_headers',$headers,$fromEmail, $fromEmailName, $toEmail, $toEmailName, $to_subject, $to_message, $extra, $message_type, $post_id, $user_id );
814
815 9
        $sent = wp_mail($to, $subject, $message, $headers);
816
817 9
        if( ! $sent ) {
818
            if ( is_array( $to ) ) {
819
                $to = implode( ',', $to );
820
            }
821
            $log_message = sprintf(
822
                __( "Email from GeoDirectory failed to send.\nMessage type: %s\nSend time: %s\nTo: %s\nSubject: %s\n\n", 'geodirectory' ),
823
                $message_type,
824
                date_i18n( 'F j Y H:i:s', current_time( 'timestamp' ) ),
825
                $to,
826
                $subject
827
            );
828
            geodir_error_log( $log_message );
829
        }
830
831
        ///////// ADMIN BCC EMIALS
832 9
        $adminEmail = get_bloginfo('admin_email');
833 9
        $to = $adminEmail;
834
835 9
        $admin_bcc = false;
836 9
        if ($message_type == 'post_submit') {
837 1
            $subject = __(stripslashes_deep(get_option('geodir_post_submited_success_email_subject_admin')), 'geodirectory');
838 1
            $message = __(stripslashes_deep(get_option('geodir_post_submited_success_email_content_admin')), 'geodirectory');
839
840 1
            $search_array = array('[#listing_link#]', '[#site_name_url#]', '[#post_id#]', '[#site_name#]', '[#to_name#]', '[#from_name#]', '[#subject#]', '[#comments#]', '[#login_url#]', '[#login_details#]', '[#client_name#]', '[#posted_date#]','[#user_login#]','[#username#]');
841 1
            $replace_array = array($listingLink, $siteurl_link, $post_id, $sitefromEmailName, $toEmailName, $fromEmailName, $to_subject, $to_message, $loginurl_link, $login_details, $toEmailName, $posted_date, $user_login, $user_login);
842 1
            $message = str_replace($search_array, $replace_array, $message);
843
844 1
            $search_array = array('[#listing_link#]', '[#site_name_url#]', '[#post_id#]', '[#site_name#]', '[#to_name#]', '[#from_name#]', '[#subject#]', '[#client_name#]', '[#posted_date#]','[#user_login#]','[#username#]');
845 1
            $replace_array = array($listingLink, $siteurl_link, $post_id, $sitefromEmailName, $toEmailName, $fromEmailName, $to_subject, $toEmailName, $posted_date, $user_login, $user_login);
846 1
            $subject = str_replace($search_array, $replace_array, $subject);
847
848 1
            $subject .= ' - ADMIN BCC COPY';
849 1
            $admin_bcc = true;
850
851 1
        }
852 8
        elseif ($message_type == 'registration' && get_option('geodir_bcc_new_user')) {
853 2
            $subject .= ' - ADMIN BCC COPY';
854 2
            $admin_bcc = true;
855 2
        }
856 6
        elseif ($message_type == 'send_friend' && get_option('geodir_bcc_friend')) {
857 2
            $subject .= ' - ADMIN BCC COPY';
858 2
            $admin_bcc = true;
859 2
        }
860 4
        elseif ($message_type == 'send_enquiry' && get_option('geodir_bcc_enquiry')) {
861 2
            $subject .= ' - ADMIN BCC COPY';
862 2
            $admin_bcc = true;
863 2
        }
864 2
        elseif ($message_type == 'listing_published' && get_option('geodir_bcc_listing_published')) {
865 1
            $subject .= ' - ADMIN BCC COPY';
866 1
            $admin_bcc = true;
867 1
        }
868
869 9 View Code Duplication
        if($admin_bcc===true){
870 8
            $sent = wp_mail($to, $subject, $message, $headers);
871
872 8
            if( ! $sent ) {
873
                if ( is_array( $to ) ) {
874
                    $to = implode( ',', $to );
875
                }
876
                $log_message = sprintf(
877
                    __( "Email from GeoDirectory failed to send.\nMessage type: %s\nSend time: %s\nTo: %s\nSubject: %s\n\n", 'geodirectory' ),
878
                    $message_type,
879
                    date_i18n( 'F j Y H:i:s', current_time( 'timestamp' ) ),
880
                    $to,
881
                    $subject
882
                );
883
                geodir_error_log( $log_message );
884
            }
885 8
        }
886
887 9
    }
888
}
889
890
891
/**
892
 * Generates breadcrumb for taxonomy (category, tags etc.) pages.
893
 *
894
 * @since 1.0.0
895
 * @package GeoDirectory
896
 */
897
function geodir_taxonomy_breadcrumb()
898
{
899
900
    $term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
901
    $parent = $term->parent;
902
903
    while ($parent):
904
        $parents[] = $parent;
0 ignored issues
show
Coding Style Comprehensibility introduced by
$parents was never initialized. Although not strictly required by PHP, it is generally a good practice to add $parents = array(); before regardless.

Adding an explicit array definition is generally preferable to implicit array definition as it guarantees a stable state of the code.

Let’s take a look at an example:

foreach ($collection as $item) {
    $myArray['foo'] = $item->getFoo();

    if ($item->hasBar()) {
        $myArray['bar'] = $item->getBar();
    }

    // do something with $myArray
}

As you can see in this example, the array $myArray is initialized the first time when the foreach loop is entered. You can also see that the value of the bar key is only written conditionally; thus, its value might result from a previous iteration.

This might or might not be intended. To make your intention clear, your code more readible and to avoid accidental bugs, we recommend to add an explicit initialization $myArray = array() either outside or inside the foreach loop.

Loading history...
905
        $new_parent = get_term_by('id', $parent, get_query_var('taxonomy'));
906
        $parent = $new_parent->parent;
907
    endwhile;
908
909
    if (!empty($parents)):
910
        $parents = array_reverse($parents);
911
912
        foreach ($parents as $parent):
913
            $item = get_term_by('id', $parent, get_query_var('taxonomy'));
914
            $url = get_term_link($item, get_query_var('taxonomy'));
915
            echo '<li> > <a href="' . $url . '">' . $item->name . '</a></li>';
916
        endforeach;
917
918
    endif;
919
920
    echo '<li> > ' . $term->name . '</li>';
921
}
922
923
924
/**
925
 * Main function that generates breadcrumb for all pages.
926
 *
927
 * @since 1.0.0
928
 * @since 1.5.7 Changes for the neighbourhood system improvement.
929
 * @package GeoDirectory
930
 * @global object $wp_query WordPress Query object.
931
 * @global object $post The current post object.
932
 * @global object $gd_session GeoDirectory Session object.
933
 */
934
function geodir_breadcrumb()
935
{
936 5
    global $wp_query, $geodir_add_location_url;
937
938
    /**
939
     * Filter breadcrumb separator.
940
     *
941
     * @since 1.0.0
942
     */
943 5
    $separator = apply_filters('geodir_breadcrumb_separator', ' > ');
944
945 5
    if (!geodir_is_page('home')) {
946 5
        $breadcrumb = '';
947 5
        $url_categoris = '';
0 ignored issues
show
Unused Code introduced by
$url_categoris is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
948 5
        $breadcrumb .= '<div class="geodir-breadcrumb clearfix"><ul id="breadcrumbs">';
949
        /**
950
         * Filter breadcrumb's first link.
951
         *
952
         * @since 1.0.0
953
         */
954 5
        $breadcrumb .= '<li>' . apply_filters('geodir_breadcrumb_first_link', '<a href="' . home_url() . '">' . __('Home', 'geodirectory') . '</a>') . '</li>';
955
956 5
        $gd_post_type = geodir_get_current_posttype();
957 5
        $post_type_info = get_post_type_object($gd_post_type);
958
959 5
        remove_filter('post_type_archive_link', 'geodir_get_posttype_link');
960
961 5
        $listing_link = get_post_type_archive_link($gd_post_type);
962
963 5
        add_filter('post_type_archive_link', 'geodir_get_posttype_link', 10, 2);
964 5
        $listing_link = rtrim($listing_link, '/');
965 5
        $listing_link .= '/';
966
967 5
        $post_type_for_location_link = $listing_link;
968 5
        $location_terms = geodir_get_current_location_terms('query_vars', $gd_post_type);
969
970 5
        global $wp, $gd_session;
971 5
        $location_link = $post_type_for_location_link;
972
973 5
        if (geodir_is_page('detail') || geodir_is_page('listing')) {
974 2
            global $post;
975 2
            $location_manager = defined('POST_LOCATION_TABLE') ? true : false;
976 2
			$neighbourhood_active = $location_manager && get_option('location_neighbourhoods') ? true : false;
977
				
978 2 View Code Duplication
			if(geodir_is_page('detail') && isset($post->country_slug)){
979
                $location_terms = array(
980
                    'gd_country' => $post->country_slug,
981
                    'gd_region' => $post->region_slug,
982
                    'gd_city' => $post->city_slug
983
                );
984
				
985
				if ($neighbourhood_active && !empty($location_terms['gd_city']) && $gd_ses_neighbourhood = $gd_session->get('gd_neighbourhood')) {
986
					$location_terms['gd_neighbourhood'] = $gd_ses_neighbourhood;
987
				}
988
            }
989
990 2
            $geodir_show_location_url = get_option('geodir_show_location_url');
991
992 2
            $hide_url_part = array();
993 2
            if ($location_manager) {
994
                $hide_country_part = get_option('geodir_location_hide_country_part');
995
                $hide_region_part = get_option('geodir_location_hide_region_part');
996
997
                if ($hide_region_part && $hide_country_part) {
998
                    $hide_url_part = array('gd_country', 'gd_region');
999
                } else if ($hide_region_part && !$hide_country_part) {
1000
                    $hide_url_part = array('gd_region');
1001
                } else if (!$hide_region_part && $hide_country_part) {
1002
                    $hide_url_part = array('gd_country');
1003
                }
1004
            }
1005
1006 2
            $hide_text_part = array();
0 ignored issues
show
Unused Code introduced by
$hide_text_part is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
1007 2
            if ($geodir_show_location_url == 'country_city') {
1008
                $hide_text_part = array('gd_region');
0 ignored issues
show
Unused Code introduced by
$hide_text_part is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
1009
1010
                if (isset($location_terms['gd_region']) && !$location_manager) {
1011
                    unset($location_terms['gd_region']);
1012
                }
1013 2
            } else if ($geodir_show_location_url == 'region_city') {
1014
                $hide_text_part = array('gd_country');
0 ignored issues
show
Unused Code introduced by
$hide_text_part is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
1015
1016
                if (isset($location_terms['gd_country']) && !$location_manager) {
1017
                    unset($location_terms['gd_country']);
1018
                }
1019 2
            } else if ($geodir_show_location_url == 'city') {
1020
                $hide_text_part = array('gd_country', 'gd_region');
0 ignored issues
show
Unused Code introduced by
$hide_text_part is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
1021
1022
                if (isset($location_terms['gd_country']) && !$location_manager) {
1023
                    unset($location_terms['gd_country']);
1024
                }
1025
                if (isset($location_terms['gd_region']) && !$location_manager) {
1026
                    unset($location_terms['gd_region']);
1027
                }
1028
            }
1029
1030 2
            $is_location_last = '';
0 ignored issues
show
Unused Code introduced by
$is_location_last is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
1031 2
            $is_taxonomy_last = '';
0 ignored issues
show
Unused Code introduced by
$is_taxonomy_last is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
1032 2
            $breadcrumb .= '<li>';
1033 2
            if (get_query_var($gd_post_type . 'category'))
1034 2
                $gd_taxonomy = $gd_post_type . 'category';
1035 2
            elseif (get_query_var($gd_post_type . '_tags'))
1036
                $gd_taxonomy = $gd_post_type . '_tags';
1037
1038 2
            $breadcrumb .= $separator . '<a href="' . $listing_link . '">' . __(ucfirst($post_type_info->label), 'geodirectory') . '</a>';
1039 2
            if (!empty($gd_taxonomy) || geodir_is_page('detail'))
1040 2
                $is_location_last = false;
1041
            else
1042 1
                $is_location_last = true;
1043
1044 2
            if (!empty($gd_taxonomy) && geodir_is_page('listing'))
1045 2
                $is_taxonomy_last = true;
1046
            else
1047 2
                $is_taxonomy_last = false;
1048
1049 2
            if (!empty($location_terms)) {
1050
                $geodir_get_locations = function_exists('get_actual_location_name') ? true : false;
1051
1052
                foreach ($location_terms as $key => $location_term) {
1053
                    if ($location_term != '') {
1054
                        if (!empty($hide_url_part) && in_array($key, $hide_url_part)) { // Hide location part from url & breadcrumb.
1055
                            continue;
1056
                        }
1057
1058
                        $gd_location_link_text = preg_replace('/-(\d+)$/', '', $location_term);
1059
                        $gd_location_link_text = preg_replace('/[_-]/', ' ', $gd_location_link_text);
1060
                        $gd_location_link_text = ucfirst($gd_location_link_text);
1061
1062
                        $location_term_actual_country = '';
1063
                        $location_term_actual_region = '';
1064
                        $location_term_actual_city = '';
1065
                        if ($geodir_get_locations) {
1066
                            if ($key == 'gd_country') {
1067
                                $location_term_actual_country = get_actual_location_name('country', $location_term, true);
1068
                            } else if ($key == 'gd_region') {
1069
                                $location_term_actual_region = get_actual_location_name('region', $location_term, true);
1070
                            } else if ($key == 'gd_city') {
1071
                                $location_term_actual_city = get_actual_location_name('city', $location_term, true);
1072
                            }
1073
                        } else {
1074
                            $location_info = geodir_get_location();
1075
1076
                            if (!empty($location_info) && isset($location_info->location_id)) {
1077
                                if ($key == 'gd_country') {
1078
                                    $location_term_actual_country = __($location_info->country, 'geodirectory');
1079
                                } else if ($key == 'gd_region') {
1080
                                    $location_term_actual_region = __($location_info->region, 'geodirectory');
1081
                                } else if ($key == 'gd_city') {
1082
                                    $location_term_actual_city = __($location_info->city, 'geodirectory');
1083
                                }
1084
                            }
1085
                        }
1086
1087
                        if ($is_location_last && $key == 'gd_country' && !(isset($location_terms['gd_region']) && $location_terms['gd_region'] != '') && !(isset($location_terms['gd_city']) && $location_terms['gd_city'] != '')) {
1088
                            $breadcrumb .= $location_term_actual_country != '' ? $separator . $location_term_actual_country : $separator . $gd_location_link_text;
1089
                        } else if ($is_location_last && $key == 'gd_region' && !(isset($location_terms['gd_city']) && $location_terms['gd_city'] != '')) {
1090
                            $breadcrumb .= $location_term_actual_region != '' ? $separator . $location_term_actual_region : $separator . $gd_location_link_text;
1091
                        } else if ($is_location_last && $key == 'gd_city' && empty($location_terms['gd_neighbourhood'])) {
1092
                            $breadcrumb .= $location_term_actual_city != '' ? $separator . $location_term_actual_city : $separator . $gd_location_link_text;
1093
                        } else if ($is_location_last && $key == 'gd_neighbourhood') {
1094
                            $breadcrumb .= $separator . $gd_location_link_text;
1095
                        } else {
1096
                            if (get_option('permalink_structure') != '') {
1097
                                $location_link .= $location_term . '/';
1098
                            } else {
1099
                                $location_link .= "&$key=" . $location_term;
1100
                            }
1101
1102
                            if ($key == 'gd_country' && $location_term_actual_country != '') {
1103
                                $gd_location_link_text = $location_term_actual_country;
1104
                            } else if ($key == 'gd_region' && $location_term_actual_region != '') {
1105
                                $gd_location_link_text = $location_term_actual_region;
1106
                            } else if ($key == 'gd_city' && $location_term_actual_city != '') {
1107
                                $gd_location_link_text = $location_term_actual_city;
1108
                            }
1109
1110
                            /*
0 ignored issues
show
Unused Code Comprehensibility introduced by
65% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
1111
                            if (geodir_is_page('detail') && !empty($hide_text_part) && in_array($key, $hide_text_part)) {
1112
                                continue;
1113
                            }
1114
                            */
1115
1116
                            $breadcrumb .= $separator . '<a href="' . $location_link . '">' . $gd_location_link_text . '</a>';
1117
                        }
1118
                    }
1119
                }
1120
            }
1121
1122 2
            if (!empty($gd_taxonomy)) {
1123
                $term_index = 1;
1124
1125
                //if(get_option('geodir_add_categories_url'))
0 ignored issues
show
Unused Code Comprehensibility introduced by
86% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
1126
                {
1127
                    if (get_query_var($gd_post_type . '_tags')) {
1128
                        $cat_link = $listing_link . 'tags/';
1129
                    } else
1130
                        $cat_link = $listing_link;
1131
1132
                    foreach ($location_terms as $key => $location_term) {
1133
                        if ($location_manager && in_array($key, $hide_url_part)) {
1134
                            continue;
1135
                        }
1136
1137
                        if ($location_term != '') {
1138
                            if (get_option('permalink_structure') != '') {
1139
                                $cat_link .= $location_term . '/';
1140
                            }
1141
                        }
1142
                    }
1143
1144
                    $term_array = explode("/", trim($wp_query->query[$gd_taxonomy], "/"));
1145
                    foreach ($term_array as $term) {
1146
                        $term_link_text = preg_replace('/-(\d+)$/', '', $term);
1147
                        $term_link_text = preg_replace('/[_-]/', ' ', $term_link_text);
1148
1149
                        // get term actual name
1150
                        $term_info = get_term_by('slug', $term, $gd_taxonomy, 'ARRAY_A');
1151
                        if (!empty($term_info) && isset($term_info['name']) && $term_info['name'] != '') {
1152
                            $term_link_text = urldecode($term_info['name']);
1153
                        } else {
1154
                            $term_link_text = geodir_ucwords(urldecode($term_link_text));
1155
                        }
1156
1157
                        if ($term_index == count($term_array) && $is_taxonomy_last)
1158
                            $breadcrumb .= $separator . $term_link_text;
1159
                        else {
1160
                            $cat_link .= $term . '/';
1161
                            $breadcrumb .= $separator . '<a href="' . $cat_link . '">' . $term_link_text . '</a>';
1162
                        }
1163
                        $term_index++;
1164
                    }
1165
                }
1166
1167
1168
            }
1169
1170 2
            if (geodir_is_page('detail'))
1171 2
                $breadcrumb .= $separator . get_the_title();
1172
1173 2
            $breadcrumb .= '</li>';
1174
1175
1176 5
        } elseif (geodir_is_page('author')) {
1177 1
            $user_id = get_current_user_id();
1178 1
            $author_link = get_author_posts_url($user_id);
1179 1
            $default_author_link = geodir_getlink($author_link, array('geodir_dashbord' => 'true', 'stype' => 'gd_place'), false);
1180
1181
            /**
1182
             * Filter author page link.
1183
             *
1184
             * @since 1.0.0
1185
             * @param string $default_author_link Default author link.
1186
             * @param int $user_id Author ID.
1187
             */
1188 1
            $default_author_link = apply_filters('geodir_dashboard_author_link', $default_author_link, $user_id);
1189
1190 1
            $breadcrumb .= '<li>';
1191 1
            $breadcrumb .= $separator . '<a href="' . $default_author_link . '">' . __('My Dashboard', 'geodirectory') . '</a>';
1192
1193 1
            if (isset($_REQUEST['list'])) {
1194
                $author_link = geodir_getlink($author_link, array('geodir_dashbord' => 'true', 'stype' => $_REQUEST['stype']), false);
1195
1196
                /**
1197
                 * Filter author page link.
1198
                 *
1199
                 * @since 1.0.0
1200
                 * @param string $author_link Author page link.
1201
                 * @param int $user_id Author ID.
1202
                 * @param string $_REQUEST['stype'] Post type.
1203
                 */
1204
                $author_link = apply_filters('geodir_dashboard_author_link', $author_link, $user_id, $_REQUEST['stype']);
1205
1206
                $breadcrumb .= $separator . '<a href="' . $author_link . '">' . __(ucfirst($post_type_info->label), 'geodirectory') . '</a>';
1207
                $breadcrumb .= $separator . ucfirst(__('My', 'geodirectory') . ' ' . $_REQUEST['list']);
1208
            } else
1209 1
                $breadcrumb .= $separator . __(ucfirst($post_type_info->label), 'geodirectory');
1210
1211 1
            $breadcrumb .= '</li>';
1212 4
        } elseif (is_category() || is_single()) {
1213
            $category = get_the_category();
1214
            if (is_category()) {
1215
                $breadcrumb .= '<li>' . $separator . $category[0]->cat_name . '</li>';
1216
            }
1217
            if (is_single()) {
1218
                $breadcrumb .= '<li>' . $separator . '<a href="' . get_category_link($category[0]->term_id) . '">' . $category[0]->cat_name . '</a></li>';
1219
                $breadcrumb .= '<li>' . $separator . get_the_title() . '</li>';
1220
            }
1221
            /* End of my version ##################################################### */
1222 3
        } else if (is_page()) {
1223 2
            $page_title = get_the_title();
1224
1225 2
            if (geodir_is_page('location')) {
1226 1
                $location_page_id = geodir_location_page_id();
1227 1
                $loc_post = get_post( $location_page_id );
1228 1
                $post_name = $loc_post->post_name;
1229 1
                $slug= ucwords(str_replace('-',' ',$post_name));
1230 1
                $page_title = !empty($slug )? $slug : __('Location', 'geodirectory');
1231 1
            }
1232
1233 2
            $breadcrumb .= '<li>' . $separator;
1234 2
            $breadcrumb .= stripslashes_deep($page_title);
1235 2
            $breadcrumb .= '</li>';
1236 3
        } else if (is_tag()) {
1237
            $breadcrumb .=  "<li> " . $separator . single_tag_title('',false) . '</li>';
1238 1
        } else if (is_day()) {
1239
            $breadcrumb .= "<li> " . $separator . __(" Archive for", 'geodirectory') . " ";
1240
            the_time('F jS, Y');
1241
            $breadcrumb .= '</li>';
1242 1
        } else if (is_month()) {
1243
            $breadcrumb .= "<li> " . $separator . __(" Archive for", 'geodirectory') . " ";
1244
            the_time('F, Y');
1245
            $breadcrumb .= '</li>';
1246 1
        } else if (is_year()) {
1247
            $breadcrumb .= "<li> " . $separator . __(" Archive for", 'geodirectory') . " ";
1248
            the_time('Y');
1249
            $breadcrumb .= '</li>';
1250 1
        } else if (is_author()) {
1251
            $breadcrumb .= "<li> " . $separator . __(" Author Archive", 'geodirectory');
1252
            $breadcrumb .= '</li>';
1253 1
        } else if (isset($_GET['paged']) && !empty($_GET['paged'])) {
1254
            $breadcrumb .= "<li>" . $separator . __("Blog Archives", 'geodirectory');
1255
            $breadcrumb .= '</li>';
1256 1
        } else if (is_search()) {
1257 1
            $breadcrumb .= "<li> " . $separator . __(" Search Results", 'geodirectory');
1258 1
            $breadcrumb .= '</li>';
1259 1
        }
1260 5
        $breadcrumb .= '</ul></div>';
1261
1262
        /**
1263
         * Filter breadcrumb html output.
1264
         *
1265
         * @since 1.0.0
1266
         * @param string $breadcrumb Breadcrumb HTML.
1267
         * @param string $separator Breadcrumb separator.
1268
         */
1269 5
        echo $breadcrumb = apply_filters('geodir_breadcrumb', $breadcrumb, $separator);
1270 5
    }
1271 5
}
1272
1273
1274
add_action("admin_init", "geodir_allow_wpadmin"); // check user is admin
1275
if (!function_exists('geodir_allow_wpadmin')) {
1276
    /**
1277
     * Allow only admins to access wp-admin.
1278
     *
1279
     * Normal users will be redirected to home page.
1280
     *
1281
     * @since 1.0.0
1282
     * @package GeoDirectory
1283
     * @global object $wpdb WordPress Database object.
1284
     */
1285
    function geodir_allow_wpadmin()
1286
    {
1287 1
        global $wpdb;
1288 1
        if (get_option('geodir_allow_wpadmin') == '0' && is_user_logged_in() && (!isset($_REQUEST['action']))) // checking action in request to allow ajax request go through
1289 1
        {
1290
            if (current_user_can('manage_options')) {
1291
            } else {
1292
1293
                wp_redirect(home_url());
1294
                exit;
1295
            }
1296
1297
        }
1298 1
    }
1299
}
1300
1301
1302
/**
1303
 * Move Images from a remote url to upload directory.
1304
 *
1305
 * @since 1.0.0
1306
 * @package GeoDirectory
1307
 * @param string $url The remote image url.
1308
 * @return array|WP_Error The uploaded data as array. When failure returns error.
1309
 */
1310
function fetch_remote_file($url)
1311
{
1312
    // extract the file name and extension from the url
1313 1
    require_once(ABSPATH . 'wp-includes/pluggable.php');
1314 1
    $file_name = basename($url);
1315 1
    if (strpos($file_name, '?') !== false) {
1316
        list($file_name) = explode('?', $file_name);
1317
    }
1318 1
    $dummy = false;
1319 1
    $add_to_cache = false;
1320 1
    $key = null;
1321 1
    if (strpos($url, '/dummy/') !== false) {
1322 1
        $dummy = true;
1323 1
        $key = "dummy_".str_replace('.', '_', $file_name);
1324 1
        $value = get_transient('cached_dummy_images');
1325 1
        if ($value) {
1326 1
            if (isset($value[$key])) {
1327 1
                return $value[$key];
1328
            } else {
1329 1
                $add_to_cache = true;
1330
            }
1331 1
        } else {
1332
            $add_to_cache = true;
1333
        }
1334 1
    }
1335
1336
    // get placeholder file in the upload dir with a unique, sanitized filename
1337
1338 1
    $post_upload_date = isset($post['upload_date']) ? $post['upload_date'] : '';
0 ignored issues
show
Bug introduced by
The variable $post seems to never exist, and therefore isset should always return false. Did you maybe rename this variable?

This check looks for calls to isset(...) or empty() on variables that are yet undefined. These calls will always produce the same result and can be removed.

This is most likely caused by the renaming of a variable or the removal of a function/method parameter.

Loading history...
1339
1340 1
    $upload = wp_upload_bits($file_name, 0, '', $post_upload_date);
1341 1
    if ($upload['error'])
1342 1
        return new WP_Error('upload_dir_error', $upload['error']);
1343
1344
1345 1
    sleep(0.3);// if multiple remote file this can cause the remote server to timeout so we add a slight delay
1346
1347
    // fetch the remote url and write it to the placeholder file
1348 1
    $headers = wp_remote_get($url, array('stream' => true,'filename' => $upload['file']));
1349
1350 1
    $log_message = '';
1351 1
    if( is_wp_error( $headers  ) ) {
1352
        echo 'file: '.$url;
1353
        return new WP_Error('import_file_error',$headers->get_error_message());
1354
    }
1355
1356 1
    $filesize = filesize($upload['file']);
1357
    // request failed
1358 1
    if (!$headers) {
1359
        $log_message = __('Remote server did not respond', 'geodirectory');
1360
    }
1361
    // make sure the fetch was successful
1362 1
    elseif ($headers['response']['code'] != '200') {
1363
        $log_message = sprintf(__('Remote server returned error response %1$d %2$s', 'geodirectory'), esc_html($headers['response']), get_status_header_desc($headers['response']));
1364
    }
1365 1
    elseif (isset($headers['headers']['content-length']) && $filesize != $headers['headers']['content-length']) {
1366
        $log_message =  __('Remote file is incorrect size', 'geodirectory');
1367
    }
1368 1
    elseif (0 == $filesize) {
1369
        $log_message = __('Zero size file downloaded', 'geodirectory');
1370
    }
1371
1372 1
    if($log_message){
1373
        $del = unlink($upload['file']);
1374
        if(!$del){geodir_error_log(__('GeoDirectory: fetch_remote_file() failed to delete temp file.', 'geodirectory'));}
1375
        return new WP_Error('import_file_error',$log_message );
1376
    }
1377
1378 1
    if ($dummy && $add_to_cache && is_array($upload)) {
1379 1
        $images = get_transient('cached_dummy_images');
1380 1
        if(is_array($images))
1381 1
            $images[$key] = $upload;
1382
        else
1383
            $images = array($key => $upload);
1384
1385
        //setting the cache using the WP Transient API
1386 1
        set_transient('cached_dummy_images', $images, 60 * 10); //10 minutes cache
1387 1
    }
1388
1389 1
    return $upload;
1390
}
1391
1392
/**
1393
 * Get maximum file upload size.
1394
 *
1395
 * @since 1.0.0
1396
 * @package GeoDirectory
1397
 * @return string|void Max upload size.
1398
 */
1399 View Code Duplication
function geodir_max_upload_size()
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
Best Practice introduced by
The function geodir_max_upload_size() has been defined more than once; this definition is ignored, only the first definition in geodirectory-functions/custom_fields_functions.php (L3514-3525) is considered.

This check looks for functions that have already been defined in other files.

Some Codebases, like WordPress, make a practice of defining functions multiple times. This may lead to problems with the detection of function parameters and types. If you really need to do this, you can mark the duplicate definition with the @ignore annotation.

/**
 * @ignore
 */
function getUser() {

}

function getUser($id, $realm) {

}

See also the PhpDoc documentation for @ignore.

Loading history...
1400
{
1401 1
    $max_filesize = (float)get_option('geodir_upload_max_filesize', 2);
1402
1403 1
    if ($max_filesize > 0 && $max_filesize < 1) {
1404
        $max_filesize = (int)($max_filesize * 1024) . 'kb';
1405
    } else {
1406 1
        $max_filesize = $max_filesize > 0 ? $max_filesize . 'mb' : '2mb';
1407
    }
1408
1409
    /**
1410
     * Filter default image upload size limit.
1411
     *
1412
     * @since 1.0.0
1413
     * @param string $max_filesize Max file upload size. Ex. 10mb, 512kb.
1414
     */
1415 1
    return apply_filters('geodir_default_image_upload_size_limit', $max_filesize);
1416
}
1417
1418
/**
1419
 * Check if dummy folder exists or not.
1420
 *
1421
 * Check if dummy folder exists or not , if not then fetch from live url.
1422
 *
1423
 * @since 1.0.0
1424
 * @package GeoDirectory
1425
 * @return bool If dummy folder exists returns true, else false.
1426
 */
1427
function geodir_dummy_folder_exists()
1428
{
1429 1
    $path = geodir_plugin_path() . '/geodirectory-admin/dummy/';
1430 1
    if (!is_dir($path))
1431 1
        return false;
1432
    else
1433
        return true;
1434
1435
}
1436
1437
/**
1438
 * Get the author info.
1439
 *
1440
 * @since 1.0.0
1441
 * @package GeoDirectory
1442
 * @global object $wpdb WordPress Database object.
1443
 * @param int $aid The author ID.
1444
 * @return object Author info.
1445
 */
1446
function  geodir_get_author_info($aid)
1447
{
1448
    global $wpdb;
1449
    /*$infosql = "select * from $wpdb->users where ID=$aid";*/
0 ignored issues
show
Unused Code Comprehensibility introduced by
50% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
1450
    $infosql = $wpdb->prepare("select * from $wpdb->users where ID=%d", array($aid));
1451
    $info = $wpdb->get_results($infosql);
1452
    if ($info) {
1453
        return $info[0];
1454
    }
1455
}
1456
1457
if (!function_exists('adminEmail')) {
1458
    /**
1459
     * Send emails to client on post submission, renew etc.
1460
     *
1461
     * @since 1.0.0
1462
     * @package GeoDirectory
1463
     * @global object $wpdb WordPress Database object.
1464
     * @param int|string $page_id Page ID.
1465
     * @param int|string $user_id User ID.
1466
     * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1467
     * @param string $custom_1 Custom data to be sent.
1468
     */
1469
    function adminEmail($page_id, $user_id, $message_type, $custom_1 = '')
1470
    {
1471
        global $wpdb;
1472
        if ($message_type == 'expiration') {
1473
            $subject = stripslashes(__(get_option('renew_email_subject'),'geodirectory'));
1474
            $client_message = stripslashes(__(get_option('renew_email_content'),'geodirectory'));
1475
        } elseif ($message_type == 'post_submited') {
1476
            $subject = __(get_option('post_submited_success_email_subject_admin'),'geodirectory');
1477
            $client_message = __(get_option('post_submited_success_email_content_admin'),'geodirectory');
1478
        } elseif ($message_type == 'renew') {
1479
            $subject = __(get_option('post_renew_success_email_subject_admin'),'geodirectory');
1480
            $client_message = __(get_option('post_renew_success_email_content_admin'),'geodirectory');
1481
        } elseif ($message_type == 'upgrade') {
1482
            $subject = __(get_option('post_upgrade_success_email_subject_admin'),'geodirectory');
1483
            $client_message = __(get_option('post_upgrade_success_email_content_admin'),'geodirectory');
1484
        } elseif ($message_type == 'claim_approved') {
1485
            $subject = __(get_option('claim_approved_email_subject'),'geodirectory');
1486
            $client_message = __(get_option('claim_approved_email_content'),'geodirectory');
1487
        } elseif ($message_type == 'claim_rejected') {
1488
            $subject = __(get_option('claim_rejected_email_subject'),'geodirectory');
1489
            $client_message = __(get_option('claim_rejected_email_content'),'geodirectory');
1490
        } elseif ($message_type == 'claim_requested') {
1491
            $subject = __(get_option('claim_email_subject_admin'),'geodirectory');
1492
            $client_message = __(get_option('claim_email_content_admin'),'geodirectory');
1493
        } elseif ($message_type == 'auto_claim') {
1494
            $subject = __(get_option('auto_claim_email_subject'),'geodirectory');
1495
            $client_message = __(get_option('auto_claim_email_content'),'geodirectory');
1496
        } elseif ($message_type == 'payment_success') {
1497
            $subject = __(get_option('post_payment_success_admin_email_subject'),'geodirectory');
1498
            $client_message = __(get_option('post_payment_success_admin_email_content'),'geodirectory');
1499
        } elseif ($message_type == 'payment_fail') {
1500
            $subject = __(get_option('post_payment_fail_admin_email_subject'),'geodirectory');
1501
            $client_message = __(get_option('post_payment_fail_admin_email_content'),'geodirectory');
1502
        }
1503
        $transaction_details = $custom_1;
1504
        $fromEmail = get_option('site_email');
1505
        $fromEmailName = get_site_emailName();
1506
//$alivedays = get_post_meta($page_id,'alive_days',true);
0 ignored issues
show
Unused Code Comprehensibility introduced by
70% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
1507
        $pkg_limit = get_property_price_info_listing($page_id);
1508
        $alivedays = $pkg_limit['days'];
1509
        $productlink = get_permalink($page_id);
1510
        $post_info = get_post($page_id);
1511
        $post_date = date('dS F,Y', strtotime($post_info->post_date));
1512
        $listingLink = '<a href="' . $productlink . '"><b>' . $post_info->post_title . '</b></a>';
1513
        $loginurl = geodir_login_url();
1514
        $loginurl_link = '<a href="' . $loginurl . '">login</a>';
1515
        $siteurl = home_url();
1516
        $siteurl_link = '<a href="' . $siteurl . '">' . $fromEmailName . '</a>';
1517
        $user_info = get_userdata($user_id);
1518
        $user_email = $user_info->user_email;
1519
        $display_name = geodir_get_client_name($user_id);
1520
        $user_login = $user_info->user_login;
1521
        $number_of_grace_days = get_option('ptthemes_listing_preexpiry_notice_days');
1522
        if ($number_of_grace_days == '') {
1523
            $number_of_grace_days = 1;
1524
        }
1525
        if ($post_info->post_type == 'event') {
1526
            $post_type = 'event';
1527
        } else {
1528
            $post_type = 'listing';
1529
        }
1530
        $renew_link = '<a href="' . $siteurl . '?ptype=post_' . $post_type . '&renew=1&pid=' . $page_id . '">' . RENEW_LINK . '</a>';
1531
        $search_array = array('[#client_name#]', '[#listing_link#]', '[#posted_date#]', '[#number_of_days#]', '[#number_of_grace_days#]', '[#login_url#]', '[#username#]', '[#user_email#]', '[#site_name_url#]', '[#renew_link#]', '[#post_id#]', '[#site_name#]', '[#transaction_details#]');
1532
        $replace_array = array($display_name, $listingLink, $post_date, $alivedays, $number_of_grace_days, $loginurl_link, $user_login, $user_email, $siteurl_link, $renew_link, $page_id, $fromEmailName, $transaction_details);
1533
        $client_message = str_replace($search_array, $replace_array, $client_message);
0 ignored issues
show
Bug introduced by
The variable $client_message does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
1534
        $subject = str_replace($search_array, $replace_array, $subject);
0 ignored issues
show
Bug introduced by
The variable $subject does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
1535
        $headers = 'MIME-Version: 1.0' . "\r\n";
1536
        $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
1537
        $headers .= 'From: ' . $fromEmailName . ' <' . $fromEmail . '>' . "\r\n";
1538
1539
        $to = $fromEmail;
1540
        $message = $client_message;
1541
1542
1543
        /**
1544
         * Filter the admin email to address.
1545
         *
1546
         * @since 1.6.1
1547
         * @package GeoDirectory
1548
         * @param string $to The email address the email is being sent to.
1549
         * @param int|string $page_id Page ID.
1550
         * @param int|string $user_id User ID.
1551
         * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1552
         * @param string $custom_1 Custom data to be sent.
1553
         */
1554
        $to = apply_filters('geodir_adminEmail_to',$to,$page_id, $user_id, $message_type, $custom_1 );
1555
        /**
1556
         * Filter the admin email subject.
1557
         *
1558
         * @since 1.6.1
1559
         * @package GeoDirectory_Payment_Manager
1560
         * @param string $subject The email subject.
1561
         * @param int|string $page_id Page ID.
1562
         * @param int|string $user_id User ID.
1563
         * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1564
         * @param string $custom_1 Custom data to be sent.
1565
         */
1566
        $subject = apply_filters('geodir_adminEmail_subject',$subject,$page_id, $user_id, $message_type, $custom_1);
1567
        /**
1568
         * Filter the admin email message.
1569
         *
1570
         * @since 1.6.1
1571
         * @package GeoDirectory_Payment_Manager
1572
         * @param string $message The email message text.
1573
         * @param int|string $page_id Page ID.
1574
         * @param int|string $user_id User ID.
1575
         * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1576
         * @param string $custom_1 Custom data to be sent.
1577
         */
1578
        $message = apply_filters('geodir_adminEmail_message',$message,$page_id, $user_id, $message_type, $custom_1);
1579
        /**
1580
         * Filter the admin email headers.
1581
         *
1582
         * @since 1.6.1
1583
         * @package GeoDirectory_Payment_Manager
1584
         * @param string $headers The email headers.
1585
         * @param int|string $page_id Page ID.
1586
         * @param int|string $user_id User ID.
1587
         * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1588
         * @param string $custom_1 Custom data to be sent.
1589
         */
1590
        $headers = apply_filters('geodir_adminEmail_headers',$headers,$page_id, $user_id, $message_type, $custom_1);
1591
1592
1593
1594
        $sent = wp_mail($to, $subject, $message, $headers);
1595
        if( ! $sent ) {
1596
            if ( is_array( $to ) ) {
1597
                $to = implode( ',', $to );
1598
            }
1599
            $log_message = sprintf(
1600
                __( "Email from GeoDirectory failed to send.\nMessage type: %s\nSend time: %s\nTo: %s\nSubject: %s\n\n", 'geodirectory' ),
1601
                $message_type,
1602
                date_i18n( 'F j Y H:i:s', current_time( 'timestamp' ) ),
1603
                $to,
1604
                $subject
1605
            );
1606
            geodir_error_log( $log_message );
1607
        }
1608
    }
1609
}
1610
1611
if (!function_exists('sendEmail')) {
1612
    /**
1613
     * @todo could be a duplicate of geodir_sendEmail.
1614
     *
1615
     * @since 1.0.0
1616
     * @package GeoDirectory
1617
     * @param string $fromEmail Sender email address.
1618
     * @param string $fromEmailName Sender name.
1619
     * @param string $toEmail Receiver email address.
1620
     * @param string $toEmailName Receiver name.
1621
     * @param string $to_subject Email subject.
1622
     * @param string $to_message Email content.
1623
     * @param string $extra Not being used.
1624
     * @param string $message_type The message type. Can be send_friend, send_enquiry, forgot_password, registration.
1625
     * @param string $post_id The post ID.
1626
     * @param string $user_id The user ID.
1627
     */
1628
    function sendEmail($fromEmail, $fromEmailName, $toEmail, $toEmailName, $to_subject, $to_message, $extra = '', $message_type, $post_id = '', $user_id = '')
0 ignored issues
show
Unused Code introduced by
The parameter $extra is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
Unused Code introduced by
The parameter $user_id is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
1629
    {
1630
        $login_details = '';
1631
        if ($message_type == 'send_friend') {
1632
            $subject = stripslashes(__(get_option('email_friend_subject'),'geodirectory'));
1633
            $message = stripslashes(__(get_option('email_friend_content'),'geodirectory'));
1634
        } elseif ($message_type == 'send_enquiry') {
1635
            $subject = __(get_option('email_enquiry_subject'),'geodirectory');
1636
            $message = __(get_option('email_enquiry_content'),'geodirectory');
1637
        } elseif ($message_type == 'forgot_password') {
1638
            $subject = __(get_option('forgot_password_subject'),'geodirectory');
1639
            $message = __(get_option('forgot_password_content'),'geodirectory');
1640
            $login_details = $to_message;
1641
        } elseif ($message_type == 'registration') {
1642
            $subject = __(get_option('registration_success_email_subject'),'geodirectory');
1643
            $message = __(get_option('registration_success_email_content'),'geodirectory');
1644
            $login_details = $to_message;
1645
        }
1646
        $to_message = nl2br($to_message);
1647
        $sitefromEmail = get_option('site_email');
1648
        $sitefromEmailName = get_site_emailName();
1649
        $productlink = get_permalink($post_id);
1650
        $post_info = get_post($post_id);
1651
        $listingLink = '<a href="' . $productlink . '"><b>' . $post_info->post_title . '</b></a>';
1652
        $siteurl = home_url();
1653
        $siteurl_link = '<a href="' . $siteurl . '">' . $siteurl . '</a>';
1654
        $loginurl = geodir_login_url();
1655
        $loginurl_link = '<a href="' . $loginurl . '">login</a>';
1656
        if ($fromEmail == '') {
1657
            $fromEmail = get_option('site_email');
1658
        }
1659
        if ($fromEmailName == '') {
1660
            $fromEmailName = get_option('site_email_name');
1661
        }
1662
        $search_array = array('[#listing_link#]', '[#site_name_url#]', '[#post_id#]', '[#site_name#]', '[#to_name#]', '[#from_name#]', '[#subject#]', '[#comments#]', '[#login_url#]', '[#login_details#]', '[#client_name#]');
1663
        $replace_array = array($listingLink, $siteurl_link, $post_id, $sitefromEmailName, $toEmailName, $fromEmailName, $to_subject, $to_message, $loginurl_link, $login_details, $toEmailName);
1664
        $message = str_replace($search_array, $replace_array, $message);
0 ignored issues
show
Bug introduced by
The variable $message does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
1665
1666
        $search_array = array('[#listing_link#]', '[#site_name_url#]', '[#post_id#]', '[#site_name#]', '[#to_name#]', '[#from_name#]', '[#subject#]', '[#client_name#]');
1667
        $replace_array = array($listingLink, $siteurl_link, $post_id, $sitefromEmailName, $toEmailName, $fromEmailName, $to_subject, $toEmailName);
1668
        $subject = str_replace($search_array, $replace_array, $subject);
0 ignored issues
show
Bug introduced by
The variable $subject does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
1669
        $headers = 'MIME-Version: 1.0' . "\r\n";
1670
        $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
1671
        $headers .= "Reply-To: " . $fromEmail . "\r\n";
1672
        $headers .= 'From: ' . $sitefromEmailName . ' <' . $sitefromEmail . '>' . "\r\n";
1673
1674
        $to = $toEmail;
1675
1676
        $sent = wp_mail($to, $subject, $message, $headers);
1677
        if( ! $sent ) {
1678
            if ( is_array( $to ) ) {
1679
                $to = implode( ',', $to );
1680
            }
1681
            $log_message = sprintf(
1682
                __( "Email from GeoDirectory failed to send.\nMessage type: %s\nSend time: %s\nTo: %s\nSubject: %s\n\n", 'geodirectory' ),
1683
                $message_type,
1684
                date_i18n( 'F j Y H:i:s', current_time( 'timestamp' ) ),
1685
                $to,
1686
                $subject
1687
            );
1688
            geodir_error_log( $log_message );
1689
        }
1690
1691
        ///////// ADMIN BCC EMIALS
1692
        $admin_bcc = false;
1693
        if ($message_type == 'registration') {
1694
            $message_raw = explode(__("Password:", 'geodirectory'), $message);
1695
            $message_raw2 = explode("</p>", $message_raw[1], 2);
1696
            $message = $message_raw[0] . __('Password:', 'geodirectory') . ' **********</p>' . $message_raw2[1];
1697
        }
1698
        $adminEmail = get_bloginfo('admin_email');
1699
        $to = $adminEmail;
1700
1701
        if ($message_type == 'registration' && get_option('bcc_new_user')) {
1702
            $subject .= ' - ADMIN BCC COPY';
1703
            $admin_bcc = true;
1704
        }
1705
        elseif ($message_type == 'send_friend' && get_option('bcc_friend')) {
1706
            $subject .= ' - ADMIN BCC COPY';
1707
            $admin_bcc = true;
1708
        }
1709
        elseif ($message_type == 'send_enquiry' && get_option('bcc_enquiry')) {
1710
            $subject .= ' - ADMIN BCC COPY';
1711
            $admin_bcc = true;
1712
        }
1713
1714 View Code Duplication
        if($admin_bcc === true){
1715
            $sent = wp_mail($to, $subject, $message, $headers);
1716
            if( ! $sent ) {
1717
                if ( is_array( $to ) ) {
1718
                    $to = implode( ',', $to );
1719
                }
1720
                $log_message = sprintf(
1721
                    __( "Email from GeoDirectory failed to send.\nMessage type: %s\nSend time: %s\nTo: %s\nSubject: %s\n\n", 'geodirectory' ),
1722
                    $message_type,
1723
                    date_i18n( 'F j Y H:i:s', current_time( 'timestamp' ) ),
1724
                    $to,
1725
                    $subject
1726
                );
1727
                geodir_error_log( $log_message );
1728
            }
1729
        }
1730
1731
    }
1732
}
1733
1734
/*
1735
Language translation helper functions
1736
*/
1737
1738
/**
1739
 * Function to get the translated category id's.
1740
 *
1741
 * @since 1.0.0
1742
 * @package GeoDirectory
1743
 * @param array $ids_array Category IDs.
1744
 * @param string $type Category taxonomy.
1745
 * @return array Category IDs.
1746
 */
1747
function gd_lang_object_ids($ids_array, $type)
1748
{
1749
    if (function_exists('icl_object_id')) {
1750
        $res = array();
1751
        foreach ($ids_array as $id) {
1752
            $xlat = icl_object_id($id, $type, false);
1753
            if (!is_null($xlat)) $res[] = $xlat;
1754
        }
1755
        return $res;
1756
    } else {
1757
        return $ids_array;
1758
    }
1759
}
1760
1761
1762
/**
1763
 * function to add class to body when multi post type is active.
1764
 *
1765
 * @since 1.0.0
1766
 * @since 1.5.6 Add geodir-page class to body for all gd pages.
1767
 * @package GeoDirectory
1768
 * @global object $wpdb WordPress Database object.
1769
 * @param array $classes Body CSS classes.
1770
 * @return array Modified Body CSS classes.
1771
 */
1772
function geodir_custom_posts_body_class($classes) {
1773 7
    global $wpdb, $wp;
1774 7
    $post_types = geodir_get_posttypes('object');
1775 7
    if (!empty($post_types) && count((array)$post_types) > 1) {
1776
        $classes[] = 'geodir_custom_posts';
1777
    }
1778
1779
    // fix body class for signup page
1780 7
    if (geodir_is_page('login')) {
1781
        $new_classes = array();
1782
        $new_classes[] = 'signup page-geodir-signup';
1783
        if (!empty($classes)) {
1784
            foreach ($classes as $class) {
1785
                if ($class && $class != 'home' && $class != 'blog') {
1786
                    $new_classes[] = $class;
1787
                }
1788
            }
1789
        }
1790
        $classes = $new_classes;
1791
    }
1792
1793 7
    if (geodir_is_geodir_page()) {
1794
        $classes[] = 'geodir-page';
1795
    }
1796
1797 7
    return $classes;
1798
}
1799
1800
add_filter('body_class', 'geodir_custom_posts_body_class'); // let's add a class to the body so we can style the new addition to the search
1801
1802
1803
/**
1804
 * Returns available map zoom levels.
1805
 *
1806
 * @since 1.0.0
1807
 * @package GeoDirectory
1808
 * @return array Available map zoom levels.
1809
 */
1810
function geodir_map_zoom_level()
1811
{
1812
    /**
1813
     * Filter GD map zoom level.
1814
     *
1815
     * @since 1.0.0
1816
     */
1817 2
    return apply_filters('geodir_map_zoom_level', array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19));
1818
1819
}
1820
1821
1822
/**
1823
 * This function takes backup of an option so they can be restored later.
1824
 *
1825
 * @since 1.0.0
1826
 * @package GeoDirectory
1827
 * @param string $geodir_option_name Option key.
1828
 */
1829
function geodir_option_version_backup($geodir_option_name)
1830
{
1831
    $version_date = time();
1832
    $geodir_option = get_option($geodir_option_name);
1833
1834
    if (!empty($geodir_option)) {
1835
        add_option($geodir_option_name . '_' . $version_date, $geodir_option);
1836
    }
1837
}
1838
1839
/**
1840
 * display add listing page for wpml.
1841
 *
1842
 * @since 1.0.0
1843
 * @package GeoDirectory
1844
 * @param int $page_id The page ID.
1845
 * @return int Page ID.
1846
 */
1847
function get_page_id_geodir_add_listing_page($page_id)
1848
{
1849 18
    if (geodir_wpml_multilingual_status()) {
1850
        $post_type = 'post_page';
1851
        $page_id = geodir_get_wpml_element_id($page_id, $post_type);
1852
    }
1853 18
    return $page_id;
1854
}
1855
1856
/**
1857
 * Returns wpml multilingual status.
1858
 *
1859
 * @since 1.0.0
1860
 * @package GeoDirectory
1861
 * @return bool Returns true when sitepress multilingual CMS active. else returns false.
1862
 */
1863
function geodir_wpml_multilingual_status()
1864
{
1865 18
    if (function_exists('icl_object_id')) {
1866
        return true;
1867
    }
1868 18
    return false;
1869
}
1870
1871
/**
1872
 * Returns WPML element ID.
1873
 *
1874
 * @since 1.0.0
1875
 * @package GeoDirectory
1876
 * @param int $page_id The page ID.
1877
 * @param string $post_type The post type.
1878
 * @return int Element ID when exists. Else the page id.
1879
 */
1880
function geodir_get_wpml_element_id($page_id, $post_type)
1881
{
1882
    global $sitepress;
1883
    if (geodir_wpml_multilingual_status() && !empty($sitepress) && isset($sitepress->queries)) {
1884
        $trid = $sitepress->get_element_trid($page_id, $post_type);
1885
1886
        if ($trid > 0) {
1887
            $translations = $sitepress->get_element_translations($trid, $post_type);
1888
1889
            $lang = $sitepress->get_current_language();
1890
            $lang = $lang ? $lang : $sitepress->get_default_language();
1891
1892
            if (!empty($translations) && !empty($lang) && isset($translations[$lang]) && isset($translations[$lang]->element_id) && !empty($translations[$lang]->element_id)) {
1893
                $page_id = $translations[$lang]->element_id;
1894
            }
1895
        }
1896
    }
1897
    return $page_id;
1898
}
1899
1900
/**
1901
 * WPML check element ID.
1902
 *
1903
 * @since 1.0.0
1904
 * @package GeoDirectory
1905
 * @deprecated 1.4.6 No longer needed as we handle translating GD pages as normal now.
1906
 */
1907
function geodir_wpml_check_element_id()
1908
{
1909
    global $sitepress;
1910
    if (geodir_wpml_multilingual_status() && !empty($sitepress) && isset($sitepress->queries)) {
1911
        $el_type = 'post_page';
1912
        $el_id = get_option('geodir_add_listing_page');
1913
        $default_lang = $sitepress->get_default_language();
1914
        $el_details = $sitepress->get_element_language_details($el_id, $el_type);
1915
1916
        if (!($el_id > 0 && $default_lang && !empty($el_details) && isset($el_details->language_code) && $el_details->language_code == $default_lang)) {
1917
            if (!$el_details->source_language_code) {
1918
                $sitepress->set_element_language_details($el_id, $el_type, '', $default_lang);
1919
                $sitepress->icl_translations_cache->clear();
1920
            }
1921
        }
1922
    }
1923
}
1924
1925
/**
1926
 * Returns orderby SQL using the given query args.
1927
 *
1928
 * @since 1.0.0
1929
 * @package GeoDirectory
1930
 * @global object $wpdb WordPress Database object.
1931
 * @global string $plugin_prefix Geodirectory plugin table prefix.
1932
 * @param array $query_args The query array.
1933
 * @return string Orderby SQL.
1934
 */
1935
function geodir_widget_listings_get_order($query_args)
0 ignored issues
show
Unused Code introduced by
The parameter $query_args is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
1936
{
1937 8
    global $wpdb, $plugin_prefix, $gd_query_args_widgets;
1938
1939 8
    $query_args = $gd_query_args_widgets;
1940 8
    if (empty($query_args) || empty($query_args['is_geodir_loop'])) {
1941
        return $wpdb->posts . ".post_date DESC, ";
1942
    }
1943
1944 8
    $post_type = empty($query_args['post_type']) ? 'gd_place' : $query_args['post_type'];
1945 8
    $table = $plugin_prefix . $post_type . '_detail';
1946
1947 8
    $sort_by = !empty($query_args['order_by']) ? $query_args['order_by'] : '';
1948
1949
    switch ($sort_by) {
1950 8
        case 'latest':
1951 8
        case 'newest':
1952 4
            $orderby = $wpdb->posts . ".post_date DESC, ";
1953 4
            break;
1954 4
        case 'featured':
1955
            $orderby = $table . ".is_featured ASC, ";
1956
            break;
1957 4
        case 'az':
1958
            $orderby = $wpdb->posts . ".post_title ASC, ";
1959
            break;
1960 4
        case 'high_review':
1961 3
            $orderby = $table . ".rating_count DESC, " . $table . ".overall_rating DESC, ";
1962 3
            break;
1963 1
        case 'high_rating':
1964
            $orderby = "( " . $table . ".overall_rating  ) DESC, ";
1965
            break;
1966 1
        case 'random':
1967
            $orderby = "RAND(), ";
1968
            break;
1969 1
        default:
1970 1
            $orderby = $wpdb->posts . ".post_title ASC, ";
1971 1
            break;
1972 1
    }
1973
1974 8
    return $orderby;
1975
}
1976
1977
/**
1978
 * Retrieve listings/count using requested filter parameters.
1979
 *
1980
 * @since 1.0.0
1981
 * @package GeoDirectory
1982
 * @since 1.4.2 New parameter $count_only added
1983
 * @global object $wpdb WordPress Database object.
1984
 * @global string $plugin_prefix Geodirectory plugin table prefix.
1985
 * @global string $table_prefix WordPress Database Table prefix.
1986
 * @param array $query_args The query array.
1987
 * @param  int|bool $count_only If true returns listings count only, otherwise returns array
1988
 * @return mixed Result object.
1989
 */
1990
function geodir_get_widget_listings($query_args = array(), $count_only = false)
1991
{
1992 8
    global $wpdb, $plugin_prefix, $table_prefix;
1993 8
    $GLOBALS['gd_query_args_widgets'] = $query_args;
1994 8
    $gd_query_args_widgets = $query_args;
1995
1996 8
    $post_type = empty($query_args['post_type']) ? 'gd_place' : $query_args['post_type'];
1997 8
    $table = $plugin_prefix . $post_type . '_detail';
1998
1999 8
    $fields = $wpdb->posts . ".*, " . $table . ".*";
2000
    /**
2001
     * Filter widget listing fields string part that is being used for query.
2002
     *
2003
     * @since 1.0.0
2004
     * @param string $fields Fields string.
2005
     * @param string $table Table name.
2006
     * @param string $post_type Post type.
2007
     */
2008 8
    $fields = apply_filters('geodir_filter_widget_listings_fields', $fields, $table, $post_type);
2009
2010 8
    $join = "INNER JOIN " . $table . " ON (" . $table . ".post_id = " . $wpdb->posts . ".ID)";
2011
2012
    ########### WPML ###########
2013
2014 8
    if (function_exists('icl_object_id')) {
2015
        global $sitepress;
2016
        $lang_code = ICL_LANGUAGE_CODE;
2017
        if ($lang_code) {
2018
            $join .= " JOIN " . $table_prefix . "icl_translations icl_t ON icl_t.element_id = " . $table_prefix . "posts.ID";
2019
        }
2020
    }
2021
2022
    ########### WPML ###########
2023
2024
    /**
2025
     * Filter widget listing join clause string part that is being used for query.
2026
     *
2027
     * @since 1.0.0
2028
     * @param string $join Join clause string.
2029
     * @param string $post_type Post type.
2030
     */
2031 8
    $join = apply_filters('geodir_filter_widget_listings_join', $join, $post_type);
2032
2033 8
    $post_status = is_super_admin() ? " OR " . $wpdb->posts . ".post_status = 'private'" : '';
2034
2035 8
    $where = " AND ( " . $wpdb->posts . ".post_status = 'publish' " . $post_status . " ) AND " . $wpdb->posts . ".post_type = '" . $post_type . "'";
2036
2037
    ########### WPML ###########
2038 8
    if (function_exists('icl_object_id')) {
2039
        if ($lang_code) {
2040
            $where .= " AND icl_t.language_code = '$lang_code' AND icl_t.element_type = 'post_$post_type' ";
0 ignored issues
show
Bug introduced by
The variable $lang_code does not seem to be defined for all execution paths leading up to this point.

If you define a variable conditionally, it can happen that it is not defined for all execution paths.

Let’s take a look at an example:

function myFunction($a) {
    switch ($a) {
        case 'foo':
            $x = 1;
            break;

        case 'bar':
            $x = 2;
            break;
    }

    // $x is potentially undefined here.
    echo $x;
}

In the above example, the variable $x is defined if you pass “foo” or “bar” as argument for $a. However, since the switch statement has no default case statement, if you pass any other value, the variable $x would be undefined.

Available Fixes

  1. Check for existence of the variable explicitly:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        if (isset($x)) { // Make sure it's always set.
            echo $x;
        }
    }
    
  2. Define a default value for the variable:

    function myFunction($a) {
        $x = ''; // Set a default which gets overridden for certain paths.
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
        }
    
        echo $x;
    }
    
  3. Add a value for the missing path:

    function myFunction($a) {
        switch ($a) {
            case 'foo':
                $x = 1;
                break;
    
            case 'bar':
                $x = 2;
                break;
    
            // We add support for the missing case.
            default:
                $x = '';
                break;
        }
    
        echo $x;
    }
    
Loading history...
2041
        }
2042
    }
2043
    ########### WPML ###########
2044
    /**
2045
     * Filter widget listing where clause string part that is being used for query.
2046
     *
2047
     * @since 1.0.0
2048
     * @param string $where Where clause string.
2049
     * @param string $post_type Post type.
2050
     */
2051 8
    $where = apply_filters('geodir_filter_widget_listings_where', $where, $post_type);
2052 8
    $where = $where != '' ? " WHERE 1=1 " . $where : '';
2053
2054 8
    $groupby = " GROUP BY $wpdb->posts.ID ";
2055
    /**
2056
     * Filter widget listing groupby clause string part that is being used for query.
2057
     *
2058
     * @since 1.0.0
2059
     * @param string $groupby Group by clause string.
2060
     * @param string $post_type Post type.
2061
     */
2062 8
    $groupby = apply_filters('geodir_filter_widget_listings_groupby', $groupby, $post_type);
2063
2064 8
    if ($count_only) {
2065 1
        $sql = "SELECT COUNT(" . $wpdb->posts . ".ID) AS total FROM " . $wpdb->posts . "
2066 1
			" . $join . "
2067 1
			" . $where;
2068 1
        $rows = (int)$wpdb->get_var($sql);
2069 1
    } else {
2070 8
        $orderby = geodir_widget_listings_get_order($query_args);
2071
        /**
2072
         * Filter widget listing orderby clause string part that is being used for query.
2073
         *
2074
         * @since 1.0.0
2075
         * @param string $orderby Order by clause string.
2076
         * @param string $table Table name.
2077
         * @param string $post_type Post type.
2078
         */
2079 8
        $orderby = apply_filters('geodir_filter_widget_listings_orderby', $orderby, $table, $post_type);
2080 8
        $orderby .= $wpdb->posts . ".post_title ASC";
2081 8
        $orderby = $orderby != '' ? " ORDER BY " . $orderby : '';
2082
2083 8
        $limit = !empty($query_args['posts_per_page']) ? $query_args['posts_per_page'] : 5;
2084
        /**
2085
         * Filter widget listing limit that is being used for query.
2086
         *
2087
         * @since 1.0.0
2088
         * @param int $limit Query results limit.
2089
         * @param string $post_type Post type.
2090
         */
2091 8
        $limit = apply_filters('geodir_filter_widget_listings_limit', $limit, $post_type);
2092
2093 8
        $page = !empty($query_args['pageno']) ? absint($query_args['pageno']) : 1;
2094 8
        if ( !$page )
2095 8
            $page = 1;
2096
2097 8
        $limit = (int)$limit > 0 ? " LIMIT " . absint( ( $page - 1 ) * (int)$limit ) . ", " . (int)$limit : "";
2098
2099 8
        $sql = "SELECT SQL_CALC_FOUND_ROWS " . $fields . " FROM " . $wpdb->posts . "
2100 8
			" . $join . "
2101 8
			" . $where . "
2102 8
			" . $groupby . "
2103 8
			" . $orderby . "
2104 8
			" . $limit;
2105 8
        $rows = $wpdb->get_results($sql);
2106
    }
2107
2108 8
    unset($GLOBALS['gd_query_args_widgets']);
2109 8
    unset($gd_query_args_widgets);
2110
2111 8
    return $rows;
2112
}
2113
2114
/**
2115
 * Listing query fields SQL part for widgets.
2116
 *
2117
 * @since 1.0.0
2118
 * @package GeoDirectory
2119
 * @global object $wpdb WordPress Database object.
2120
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2121
 * @param string $fields Fields SQL.
2122
 * @return string Modified fields SQL.
2123
 */
2124
function geodir_function_widget_listings_fields($fields)
2125
{
2126 8
    global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2127
2128 8
    $query_args = $gd_query_args_widgets;
2129 8
    if (empty($query_args) || empty($query_args['is_geodir_loop'])) {
2130
        return $fields;
2131
    }
2132
    
2133 8
    return $fields;
2134
}
2135
2136
/**
2137
 * Listing query join clause SQL part for widgets.
2138
 *
2139
 * @since 1.0.0
2140
 * @package GeoDirectory
2141
 * @global object $wpdb WordPress Database object.
2142
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2143
 * @param string $join Join clause SQL.
2144
 * @return string Modified join clause SQL.
2145
 */
2146
function geodir_function_widget_listings_join($join)
2147
{
2148 8
    global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2149
2150 8
    $query_args = $gd_query_args_widgets;
2151 8
    if (empty($query_args) || empty($query_args['is_geodir_loop'])) {
2152
        return $join;
2153
    }
2154
2155 8
    $post_type = empty($query_args['post_type']) ? 'gd_place' : $query_args['post_type'];
2156 8
    $table = $plugin_prefix . $post_type . '_detail';
2157
2158 8 View Code Duplication
    if (!empty($query_args['with_pics_only'])) {
2159
        $join .= " LEFT JOIN " . GEODIR_ATTACHMENT_TABLE . " ON ( " . GEODIR_ATTACHMENT_TABLE . ".post_id=" . $table . ".post_id AND " . GEODIR_ATTACHMENT_TABLE . ".mime_type LIKE '%image%' )";
2160
    }
2161
2162 8 View Code Duplication
    if (!empty($query_args['tax_query'])) {
2163 4
        $tax_queries = get_tax_sql($query_args['tax_query'], $wpdb->posts, 'ID');
2164 4
        if (!empty($tax_queries['join']) && !empty($tax_queries['where'])) {
2165 2
            $join .= $tax_queries['join'];
2166 2
        }
2167 4
    }
2168
2169 8
    return $join;
2170
}
2171
2172
/**
2173
 * Listing query where clause SQL part for widgets.
2174
 *
2175
 * @since 1.0.0
2176
 * @package GeoDirectory
2177
 * @global object $wpdb WordPress Database object.
2178
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2179
 * @param string $where Where clause SQL.
2180
 * @return string Modified where clause SQL.
2181
 */
2182
function geodir_function_widget_listings_where($where)
2183
{
2184 8
    global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2185
2186 8
    $query_args = $gd_query_args_widgets;
2187 8
    if (empty($query_args) || empty($query_args['is_geodir_loop'])) {
2188
        return $where;
2189
    }
2190 8
    $post_type = empty($query_args['post_type']) ? 'gd_place' : $query_args['post_type'];
2191 8
    $table = $plugin_prefix . $post_type . '_detail';
2192
2193 8
    if (!empty($query_args)) {
2194 8
        if (!empty($query_args['gd_location']) && function_exists('geodir_default_location_where')) {
2195
            $where = geodir_default_location_where($where, $table);
2196
        }
2197
2198 8
        if (!empty($query_args['post_author'])) {
2199
            $where .= " AND " . $wpdb->posts . ".post_author = " . (int)$query_args['post_author'];
2200
        }
2201
        
2202 8
        if (!empty($query_args['show_featured_only'])) {
2203 2
            $where .= " AND " . $table . ".is_featured = '1'";
2204 2
        }
2205
2206 8
        if (!empty($query_args['show_special_only'])) {
2207
            $where .= " AND ( " . $table . ".geodir_special_offers != '' AND " . $table . ".geodir_special_offers IS NOT NULL )";
2208
        }
2209
2210 8
        if (!empty($query_args['with_pics_only'])) {
2211
            $where .= " AND " . GEODIR_ATTACHMENT_TABLE . ".ID IS NOT NULL ";
2212
        }
2213
2214 8
        if (!empty($query_args['featured_image_only'])) {
2215 2
            $where .= " AND " . $table . ".featured_image IS NOT NULL AND " . $table . ".featured_image!='' ";
2216 2
        }
2217
2218 8
        if (!empty($query_args['with_videos_only'])) {
2219
            $where .= " AND ( " . $table . ".geodir_video != '' AND " . $table . ".geodir_video IS NOT NULL )";
2220
        }
2221
2222 8 View Code Duplication
        if (!empty($query_args['tax_query'])) {
2223 4
            $tax_queries = get_tax_sql($query_args['tax_query'], $wpdb->posts, 'ID');
2224
2225 4
            if (!empty($tax_queries['join']) && !empty($tax_queries['where'])) {
2226 2
                $where .= $tax_queries['where'];
2227 2
            }
2228 4
        }
2229 8
    }
2230
2231 8
    return $where;
2232
}
2233
2234
/**
2235
 * Listing query orderby clause SQL part for widgets.
2236
 *
2237
 * @since 1.0.0
2238
 * @package GeoDirectory
2239
 * @global object $wpdb WordPress Database object.
2240
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2241
 * @param string $orderby Orderby clause SQL.
2242
 * @return string Modified orderby clause SQL.
2243
 */
2244
function geodir_function_widget_listings_orderby($orderby)
2245
{
2246 8
    global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2247
2248 8
    $query_args = $gd_query_args_widgets;
2249 8
    if (empty($query_args) || empty($query_args['is_geodir_loop'])) {
2250
        return $orderby;
2251
    }
2252
2253 8
    return $orderby;
2254
}
2255
2256
/**
2257
 * Listing query limit for widgets.
2258
 *
2259
 * @since 1.0.0
2260
 * @package GeoDirectory
2261
 * @global object $wpdb WordPress Database object.
2262
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2263
 * @param int $limit Query limit.
2264
 * @return int Query limit.
2265
 */
2266
function geodir_function_widget_listings_limit($limit)
2267
{
2268 8
    global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2269
2270 8
    $query_args = $gd_query_args_widgets;
2271 8
    if (empty($query_args) || empty($query_args['is_geodir_loop'])) {
2272
        return $limit;
2273
    }
2274
2275 8
    if (!empty($query_args) && !empty($query_args['posts_per_page'])) {
2276 8
        $limit = (int)$query_args['posts_per_page'];
2277 8
    }
2278
2279 8
    return $limit;
2280
}
2281
2282
/**
2283
 * WP media large width.
2284
 *
2285
 * @since 1.0.0
2286
 * @package GeoDirectory
2287
 * @param int $default Default width.
2288
 * @param string|array $params Image parameters.
2289
 * @return int Large size width.
2290
 */
2291 View Code Duplication
function geodir_media_image_large_width($default = 800, $params = '')
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2292
{
2293 2
    $large_size_w = get_option('large_size_w');
2294 2
    $large_size_w = $large_size_w > 0 ? $large_size_w : $default;
2295 2
    $large_size_w = absint($large_size_w);
2296
2297 2
    if (!get_option('geodir_use_wp_media_large_size')) {
2298 2
        $large_size_w = 800;
2299 2
    }
2300
2301
    /**
2302
     * Filter large image width.
2303
     *
2304
     * @since 1.0.0
2305
     * @param int $large_size_w Large image width.
2306
     * @param int $default Default width.
2307
     * @param string|array $params Image parameters.
2308
     */
2309 2
    $large_size_w = apply_filters('geodir_filter_media_image_large_width', $large_size_w, $default, $params);
2310 2
    return $large_size_w;
2311
}
2312
2313
/**
2314
 * WP media large height.
2315
 *
2316
 * @since 1.0.0
2317
 * @package GeoDirectory
2318
 * @param int $default Default height.
2319
 * @param string $params Image parameters.
2320
 * @return int Large size height.
2321
 */
2322 View Code Duplication
function geodir_media_image_large_height($default = 800, $params = '')
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
2323
{
2324 2
    $large_size_h = get_option('large_size_h');
2325 2
    $large_size_h = $large_size_h > 0 ? $large_size_h : $default;
2326 2
    $large_size_h = absint($large_size_h);
2327
2328 2
    if (!get_option('geodir_use_wp_media_large_size')) {
2329 2
        $large_size_h = 800;
2330 2
    }
2331
2332
    /**
2333
     * Filter large image height.
2334
     *
2335
     * @since 1.0.0
2336
     * @param int $large_size_h Large image height.
2337
     * @param int $default Default height.
2338
     * @param string|array $params Image parameters.
2339
     */
2340 2
    $large_size_h = apply_filters('geodir_filter_media_image_large_height', $large_size_h, $default, $params);
2341
2342 2
    return $large_size_h;
2343
}
2344
2345
/**
2346
 * Sanitize location name.
2347
 *
2348
 * @since 1.0.0
2349
 * @package GeoDirectory
2350
 * @param string $type Location type. Can be gd_country, gd_region, gd_city.
2351
 * @param string $name Location name.
2352
 * @param bool $translate Do you want to translate the name? Default: true.
2353
 * @return string Sanitized name.
2354
 */
2355
function geodir_sanitize_location_name($type, $name, $translate = true)
2356
{
2357
    if ($name == '') {
2358
        return NULL;
2359
    }
2360
2361
    $type = $type == 'gd_country' ? 'country' : $type;
2362
    $type = $type == 'gd_region' ? 'region' : $type;
2363
    $type = $type == 'gd_city' ? 'city' : $type;
2364
2365
    $return = $name;
2366
    if (function_exists('get_actual_location_name')) {
2367
        $return = get_actual_location_name($type, $name, $translate);
2368
    } else {
2369
        $return = preg_replace('/-(\d+)$/', '', $return);
2370
        $return = preg_replace('/[_-]/', ' ', $return);
2371
        $return = geodir_ucwords($return);
2372
        $return = $translate ? __($return, 'geodirectory') : $return;
2373
    }
2374
2375
    return $return;
2376
}
2377
2378
2379
/**
2380
 * Pluralize comment number.
2381
 *
2382
 * @since 1.0.0
2383
 * @package GeoDirectory
2384
 * @param int $number Comments number.
2385
 */
2386
function geodir_comments_number($number)
2387
{
2388
2389 9
    if ($number > 1) {
2390
        $output = str_replace('%', number_format_i18n($number), __('% Reviews', 'geodirectory'));
2391 9
    } elseif ($number == 0 || $number == '') {
2392 9
        $output = __('No Reviews', 'geodirectory');
2393 9
    } else { // must be one
2394 4
        $output = __('1 Review', 'geodirectory');
2395
    }
2396 9
    echo $output;
2397 9
}
2398
2399
/**
2400
 * Checks whether the current page is geodirectory home page or not.
2401
 *
2402
 * @since 1.0.0
2403
 * @package GeoDirectory
2404
 * @global object $wpdb WordPress Database object.
2405
 * @return bool If current page is GD home page returns true, else false.
2406
 */
2407
function is_page_geodir_home()
2408
{
2409 8
    global $wpdb;
2410 8
    $cur_url = str_replace(array("https://", "http://", "www."), array('', '', ''), geodir_curPageURL());
2411 8
    if (function_exists('geodir_location_geo_home_link')) {
2412
        remove_filter('home_url', 'geodir_location_geo_home_link', 100000);
2413
    }
2414 8
    $home_url = home_url('', 'http');
2415 8
    if (function_exists('geodir_location_geo_home_link')) {
2416
        add_filter('home_url', 'geodir_location_geo_home_link', 100000, 2);
2417
    }
2418 8
    $home_url = str_replace("www.", "", $home_url);
2419 8
    if ( (strpos($home_url, $cur_url) !== false || strpos($home_url . '/', $cur_url) !== false) && ('page' == get_option('show_on_front') && get_option('page_on_front') && get_option('page_on_front')==get_option('geodir_home_page')) ) {
2420
        return true;
2421 8
    }elseif(get_query_var('page_id') == get_option('page_on_front') && 'page' == get_option('show_on_front') && get_option('page_on_front') && get_option('page_on_front')==get_option('geodir_home_page')){
2422
        return true;
2423
    } else {
2424 8
        return false;
2425
    }
2426
2427
}
2428
2429
2430
/**
2431
 * Returns homepage canonical url for SEO plugins.
2432
 *
2433
 * @since 1.0.0
2434
 * @package GeoDirectory
2435
 * @global object $post The current post object.
2436
 * @param string $url The old url.
2437
 * @return string The canonical URL.
2438
 */
2439
function geodir_wpseo_homepage_canonical($url)
2440
{
2441
    global $post;
2442
2443
    if (is_page_geodir_home()) {
2444
        return home_url();
2445
    }
2446
2447
    return $url;
2448
}
2449
2450
add_filter('wpseo_canonical', 'geodir_wpseo_homepage_canonical', 10);
2451
add_filter('aioseop_canonical_url', 'geodir_wpseo_homepage_canonical', 10);
2452
2453
/**
2454
 * Add extra fields to google maps script call.
2455
 *
2456
 * @since 1.0.0
2457
 * @package GeoDirectory
2458
 * @global object $post The current post object.
2459
 * @param string $extra Old extra string.
2460
 * @return string Modified extra string.
2461
 */
2462
function geodir_googlemap_script_extra_details_page($extra)
2463
{
2464 7
    global $post;
2465 7
    $add_google_places_api = false;
2466 7
    if (isset($post->post_content) && has_shortcode($post->post_content, 'gd_add_listing')) {
2467
        $add_google_places_api = true;
2468
    }
2469 7
    if (!str_replace('libraries=places', '', $extra) && (geodir_is_page('detail') || $add_google_places_api)) {
2470 1
        $extra .= "&amp;libraries=places";
2471 1
    }
2472
2473 7
    return $extra;
2474
}
2475
2476
add_filter('geodir_googlemap_script_extra', 'geodir_googlemap_script_extra_details_page', 101, 1);
2477
2478
2479
/**
2480
 * Generates popular post category HTML.
2481
 *
2482
 * @since 1.0.0
2483
 * @since 1.5.1 Added option to set default post type.
2484
 * @package GeoDirectory
2485
 * @global object $wpdb WordPress Database object.
2486
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2487
 * @global string $geodir_post_category_str The geodirectory post category.
2488
 * @param array|string $args Display arguments including before_title, after_title, before_widget, and after_widget.
2489
 * @param array|string $instance The settings for the particular instance of the widget.
2490
 */
2491
function geodir_popular_post_category_output($args = '', $instance = '')
2492
{
2493
    // prints the widget
2494 3
    global $wpdb, $plugin_prefix, $geodir_post_category_str;
2495 3
    extract($args, EXTR_SKIP);
2496
2497 3
    echo $before_widget;
2498
2499
    /** This filter is documented in geodirectory_widgets.php */
2500 3
    $title = empty($instance['title']) ? __('Popular Categories', 'geodirectory') : apply_filters('widget_title', __($instance['title'], 'geodirectory'));
2501
2502 3
    $gd_post_type = geodir_get_current_posttype();
2503
2504 3
    $category_limit = isset($instance['category_limit']) && $instance['category_limit'] > 0 ? (int)$instance['category_limit'] : 15;
2505 3
    if(!empty($gd_post_type)){
2506
        $default_post_type = $gd_post_type;
2507 3
    }elseif(isset($instance['default_post_type']) && gdsc_is_post_type_valid($instance['default_post_type']) ){
2508
        $default_post_type = $instance['default_post_type'];
2509
    }else{
2510 3
        $all_gd_post_type = geodir_get_posttypes();
2511 3
        $default_post_type = (isset($all_gd_post_type[0])) ? $all_gd_post_type[0] : '';
2512
    }
2513
2514 3
    $taxonomy = array();
2515 3
    if (!empty($gd_post_type)) {
2516
        $taxonomy[] = $gd_post_type . "category";
2517
    } else {
2518 3
        $taxonomy = geodir_get_taxonomies($gd_post_type);
2519
    }
2520
2521 3
    $terms = get_terms($taxonomy);
2522 3
    $a_terms = array();
2523 3
    $b_terms = array();
2524
2525 3
    foreach ($terms as $term) {
2526 3
        if ($term->count > 0) {
2527 3
            $a_terms[$term->taxonomy][] = $term;
2528 3
        }
2529 3
    }
2530
2531 3
    if (!empty($a_terms)) {
2532 3
        foreach ($a_terms as $b_key => $b_val) {
2533 3
            $b_terms[$b_key] = geodir_sort_terms($b_val, 'count');
2534 3
        }
2535
2536 3
        $default_taxonomy = $default_post_type != '' && isset($b_terms[$default_post_type . 'category']) ? $default_post_type . 'category' : '';
2537
2538 3
        $tax_change_output = '';
2539 3
        if (count($b_terms) > 1) {
2540
            $tax_change_output .= "<select data-limit='$category_limit' class='geodir-cat-list-tax'  onchange='geodir_get_post_term(this);'>";
2541
            foreach ($b_terms as $key => $val) {
2542
                $ptype = get_post_type_object(str_replace("category", "", $key));
2543
                $cpt_name = __($ptype->labels->singular_name, 'geodirectory');
2544
                $tax_change_output .= "<option value='$key' ". selected($key, $default_taxonomy, false) .">" . sprintf(__('%s Categories', 'geodirectory'),$cpt_name) . "</option>";
2545
            }
2546
            $tax_change_output .= "</select>";
2547
        }
2548
2549 3
        if (!empty($b_terms)) {
2550 3
            $terms = $default_taxonomy != '' && isset($b_terms[$default_taxonomy]) ? $b_terms[$default_taxonomy] : reset($b_terms);// get the first array
2551 3
            global $cat_count;//make global so we can change via function
2552 3
            $cat_count = 0;
2553
            ?>
2554
            <div class="geodir-category-list-in clearfix">
2555
                <div class="geodir-cat-list clearfix">
2556
                    <?php
2557 3
                    echo $before_title . __($title) . $after_title;
2558
2559 3
                    echo $tax_change_output;
2560
2561 3
                    echo '<ul class="geodir-popular-cat-list">';
2562
2563 3
                    geodir_helper_cat_list_output($terms, $category_limit);
2564
2565 3
                    echo '</ul>';
2566
                    ?>
2567
                </div>
2568
                <?php
2569 3
                $hide = '';
2570 3
                if ($cat_count < $category_limit) {
2571 3
                    $hide = 'style="display:none;"';
2572 3
                }
2573 3
                echo "<div class='geodir-cat-list-more' $hide >";
2574 3
                echo '<a href="javascript:void(0)" class="geodir-morecat geodir-showcat">' . __('More Categories', 'geodirectory') . '</a>';
2575 3
                echo '<a href="javascript:void(0)" class="geodir-morecat geodir-hidecat geodir-hide">' . __('Less Categories', 'geodirectory') . '</a>';
2576 3
                echo "</div>";
2577
                /* add scripts */
2578 3
                add_action('wp_footer', 'geodir_popular_category_add_scripts', 100);
2579
                ?>
2580
            </div>
2581
        <?php
2582 3
        }
2583 3
    }
2584 3
    echo $after_widget;
2585 3
}
2586
2587
/**
2588
 * Generates category list HTML.
2589
 *
2590
 * @since 1.0.0
2591
 * @package GeoDirectory
2592
 * @global string $geodir_post_category_str The geodirectory post category.
2593
 * @param array $terms An array of term objects.
2594
 * @param int $category_limit Number of categories to display by default.
2595
 */
2596
function geodir_helper_cat_list_output($terms, $category_limit)
2597
{
2598 3
    global $geodir_post_category_str, $cat_count;
2599 3
    $term_icons = geodir_get_term_icon();
2600
2601 3
    $geodir_post_category_str = array();
2602
2603
2604 3
    foreach ($terms as $cat) {
2605 3
        $post_type = str_replace("category", "", $cat->taxonomy);
2606 3
        $term_icon_url = !empty($term_icons) && isset($term_icons[$cat->term_id]) ? $term_icons[$cat->term_id] : '';
2607
2608 3
        $cat_count++;
2609
2610 3
        $geodir_post_category_str[] = array('posttype' => $post_type, 'termid' => $cat->term_id);
2611
2612 3
        $class_row = $cat_count > $category_limit ? 'geodir-pcat-hide geodir-hide' : 'geodir-pcat-show';
2613 3
        $total_post = $cat->count;
2614
2615 3
        $term_link = get_term_link( $cat, $cat->taxonomy );
2616
        /**
2617
         * Filer the category term link.
2618
         *
2619
         * @since 1.4.5
2620
         * @param string $term_link The term permalink.
2621
         * @param int    $cat->term_id The term id.
2622
         * @param string $post_type Wordpress post type.
2623
         */
2624 3
        $term_link = apply_filters( 'geodir_category_term_link', $term_link, $cat->term_id, $post_type );
2625
2626 3
        echo '<li class="' . $class_row . '"><a href="' . $term_link . '">';
2627 3
        echo '<img alt="' . esc_attr($cat->name) . ' icon" style="height:20px;vertical-align:middle;" src="' . $term_icon_url . '"/> <span class="cat-link">'; echo $cat->name . '</span> <span class="geodir_term_class geodir_link_span geodir_category_class_' . $post_type . '_' . $cat->term_id . '">(' . $total_post . ')</span> ';
2628 3
        echo '</a></li>';
2629 3
    }
2630 3
}
2631
2632
/**
2633
 * Generates listing slider HTML.
2634
 *
2635
 * @since 1.0.0
2636
 * @package GeoDirectory
2637
 * @global object $post The current post object.
2638
 * @param array|string $args Display arguments including before_title, after_title, before_widget, and after_widget.
2639
 * @param array|string $instance The settings for the particular instance of the widget.
2640
 */
2641
function geodir_listing_slider_widget_output($args = '', $instance = '')
2642
{
2643
    // prints the widget
2644 2
    extract($args, EXTR_SKIP);
2645
2646 2
    echo $before_widget;
2647
2648
    /** This filter is documented in geodirectory_widgets.php */
2649 2
    $title = empty($instance['title']) ? '' : apply_filters('widget_title', __($instance['title'], 'geodirectory'));
2650
    /**
2651
     * Filter the widget post type.
2652
     *
2653
     * @since 1.0.0
2654
     * @param string $instance['post_type'] Post type of listing.
2655
     */
2656 2
    $post_type = empty($instance['post_type']) ? 'gd_place' : apply_filters('widget_post_type', $instance['post_type']);
2657
    /**
2658
     * Filter the widget's term.
2659
     *
2660
     * @since 1.0.0
2661
     * @param string $instance['category'] Filter by term. Can be any valid term.
2662
     */
2663 2
    $category = empty($instance['category']) ? '0' : apply_filters('widget_category', $instance['category']);
2664
    /**
2665
     * Filter the widget listings limit.
2666
     *
2667
     * @since 1.0.0
2668
     * @param string $instance['post_number'] Number of listings to display.
2669
     */
2670 2
    $post_number = empty($instance['post_number']) ? '5' : apply_filters('widget_post_number', $instance['post_number']);
2671
    /**
2672
     * Filter the widget listings limit shown at one time.
2673
     *
2674
     * @since 1.5.0
2675
     * @param string $instance['max_show'] Number of listings to display on screen.
2676
     */
2677 2
    $max_show = empty($instance['max_show']) ? '1' : apply_filters('widget_max_show', $instance['max_show']);
2678
    /**
2679
     * Filter the widget slide width.
2680
     *
2681
     * @since 1.5.0
2682
     * @param string $instance['slide_width'] Width of the slides shown.
2683
     */
2684 2
    $slide_width = empty($instance['slide_width']) ? '' : apply_filters('widget_slide_width', $instance['slide_width']);
2685
    /**
2686
     * Filter widget's "show title" value.
2687
     *
2688
     * @since 1.0.0
2689
     * @param string|bool $instance['show_title'] Do you want to display title? Can be 1 or 0.
2690
     */
2691 2
    $show_title = empty($instance['show_title']) ? '' : apply_filters('widget_show_title', $instance['show_title']);
2692
    /**
2693
     * Filter widget's "slideshow" value.
2694
     *
2695
     * @since 1.0.0
2696
     * @param int $instance['slideshow'] Setup a slideshow for the slider to animate automatically.
2697
     */
2698 2
    $slideshow = empty($instance['slideshow']) ? 0 : apply_filters('widget_slideshow', $instance['slideshow']);
2699
    /**
2700
     * Filter widget's "animationLoop" value.
2701
     *
2702
     * @since 1.0.0
2703
     * @param int $instance['animationLoop'] Gives the slider a seamless infinite loop.
2704
     */
2705 2
    $animationLoop = empty($instance['animationLoop']) ? 0 : apply_filters('widget_animationLoop', $instance['animationLoop']);
2706
    /**
2707
     * Filter widget's "directionNav" value.
2708
     *
2709
     * @since 1.0.0
2710
     * @param int $instance['directionNav'] Enable previous/next arrow navigation?. Can be 1 or 0.
2711
     */
2712 2
    $directionNav = empty($instance['directionNav']) ? 0 : apply_filters('widget_directionNav', $instance['directionNav']);
2713
    /**
2714
     * Filter widget's "slideshowSpeed" value.
2715
     *
2716
     * @since 1.0.0
2717
     * @param int $instance['slideshowSpeed'] Set the speed of the slideshow cycling, in milliseconds.
2718
     */
2719 2
    $slideshowSpeed = empty($instance['slideshowSpeed']) ? 5000 : apply_filters('widget_slideshowSpeed', $instance['slideshowSpeed']);
2720
    /**
2721
     * Filter widget's "animationSpeed" value.
2722
     *
2723
     * @since 1.0.0
2724
     * @param int $instance['animationSpeed'] Set the speed of animations, in milliseconds.
2725
     */
2726 2
    $animationSpeed = empty($instance['animationSpeed']) ? 600 : apply_filters('widget_animationSpeed', $instance['animationSpeed']);
2727
    /**
2728
     * Filter widget's "animation" value.
2729
     *
2730
     * @since 1.0.0
2731
     * @param string $instance['animation'] Controls the animation type, "fade" or "slide".
2732
     */
2733 2
    $animation = empty($instance['animation']) ? 'slide' : apply_filters('widget_animation', $instance['animation']);
2734
    /**
2735
     * Filter widget's "list_sort" type.
2736
     *
2737
     * @since 1.0.0
2738
     * @param string $instance['list_sort'] Listing sort by type.
2739
     */
2740 2
    $list_sort = empty($instance['list_sort']) ? 'latest' : apply_filters('widget_list_sort', $instance['list_sort']);
2741 2
    $show_featured_only = !empty($instance['show_featured_only']) ? 1 : NULL;
2742
2743 2
    wp_enqueue_script('geodirectory-jquery-flexslider-js');
2744
    ?>
2745
    <script type="text/javascript">
2746
        jQuery(window).load(function () {
2747
            jQuery('#geodir_widget_carousel').flexslider({
2748
                animation: "slide",
2749
                selector: ".geodir-slides > li",
2750
                namespace: "geodir-",
2751
                controlNav: false,
2752
                directionNav: false,
2753
                animationLoop: false,
2754
                slideshow: false,
2755
                itemWidth: 75,
2756
                itemMargin: 5,
2757
                asNavFor: '#geodir_widget_slider',
2758
                rtl: <?php echo ( is_rtl() ? 'true' : 'false' ); /* fix rtl issue */ ?>
2759
            });
2760
2761
            jQuery('#geodir_widget_slider').flexslider({
2762
                animation: "<?php echo $animation;?>",
2763
                selector: ".geodir-slides > li",
2764
                namespace: "geodir-",
2765
                controlNav: true,
2766
                animationLoop: <?php echo $animationLoop;?>,
2767
                slideshow: <?php echo $slideshow;?>,
2768
                slideshowSpeed: <?php echo $slideshowSpeed;?>,
2769
                animationSpeed: <?php echo $animationSpeed;?>,
2770
                directionNav: <?php echo $directionNav;?>,
2771
                maxItems: <?php echo $max_show;?>,
2772
                move: 1,
2773
                <?php if($slide_width){ echo "itemWidth: ".$slide_width.",";}?>
2774
                sync: "#geodir_widget_carousel",
2775
                start: function (slider) {
2776
                    jQuery('.geodir-listing-flex-loader').hide();
2777
                    jQuery('#geodir_widget_slider').css({'visibility': 'visible'});
2778
                    jQuery('#geodir_widget_carousel').css({'visibility': 'visible'});
2779
                },
2780
                rtl: <?php echo ( is_rtl() ? 'true' : 'false' ); /* fix rtl issue */ ?>
2781
            });
2782
        });
2783
    </script>
2784
    <?php
2785
    $query_args = array(
2786 2
        'posts_per_page' => $post_number,
2787 2
        'is_geodir_loop' => true,
2788 2
        'post_type' => $post_type,
2789
        'order_by' => $list_sort
2790 2
    );
2791 2
    if ($show_featured_only) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $show_featured_only of type integer|null is loosely compared to true; this is ambiguous if the integer can be zero. You might want to explicitly use !== null instead.

In PHP, under loose comparison (like ==, or !=, or switch conditions), values of different types might be equal.

For integer values, zero is a special case, in particular the following results might be unexpected:

0   == false // true
0   == null  // true
123 == false // false
123 == null  // false

// It is often better to use strict comparison
0 === false // false
0 === null  // false
Loading history...
2792 1
        $query_args['show_featured_only'] = 1;
2793 1
    }
2794
2795 2
    if ($category != 0 || $category != '') {
2796 2
        $category_taxonomy = geodir_get_taxonomies($post_type);
2797
        $tax_query = array(
2798 2
            'taxonomy' => $category_taxonomy[0],
2799 2
            'field' => 'id',
2800
            'terms' => $category
2801 2
        );
2802
2803 2
        $query_args['tax_query'] = array($tax_query);
2804 2
    }
2805
2806
    // we want listings with featured image only
2807 2
    $query_args['featured_image_only'] = 1;
2808
2809 2
    if ($post_type == 'gd_event') {
2810
        $query_args['gedir_event_listing_filter'] = 'upcoming';
2811
    }// show only upcoming events
2812
2813 2
    $widget_listings = geodir_get_widget_listings($query_args);
2814 2
    if (!empty($widget_listings) || (isset($with_no_results) && $with_no_results)) {
2815 1
        if ($title) {
2816
            echo $before_title . $title . $after_title;
2817
        }
2818
2819 1
        global $post;
2820
2821 1
        $current_post = $post;// keep current post info
2822
2823 1
        $widget_main_slides = '';
2824 1
        $nav_slides = '';
2825 1
        $widget_slides = 0;
2826
2827 1
        foreach ($widget_listings as $widget_listing) {
2828 1
            global $gd_widget_listing_type;
2829 1
            $post = $widget_listing;
2830 1
            $widget_image = geodir_get_featured_image($post->ID, 'thumbnail', get_option('geodir_listing_no_img'));
2831
2832 1
            if (!empty($widget_image)) {
2833 1
                if ($widget_image->height >= 200) {
2834 1
                    $widget_spacer_height = 0;
2835 1
                } else {
2836 1
                    $widget_spacer_height = ((200 - $widget_image->height) / 2);
2837
                }
2838
2839 1
                $widget_main_slides .= '<li class="geodir-listing-slider-widget"><img class="geodir-listing-slider-spacer" src="' . geodir_plugin_url() . "/geodirectory-assets/images/spacer.gif" . '" alt="' . $widget_image->title . '" title="' . $widget_image->title . '" style="max-height:' . $widget_spacer_height . 'px !important;margin:0 auto;" width="100" />';
2840
2841 1
                $title = '';
2842 1
                if ($show_title) {
2843
                    $title_html = '<div class="geodir-slider-title"><a href="' . get_permalink($post->ID) . '">' . get_the_title($post->ID) . '</a></div>';
2844
                    $post_id = $post->ID;
2845
                    $post_permalink = get_permalink($post->ID);
2846
                    $post_title = get_the_title($post->ID);
2847
                    /**
2848
                     * Filter the listing slider widget title.
2849
                     *
2850
                     * @since 1.6.1
2851
                     * @param string $title_html The html output of the title.
2852
                     * @param int $post_id The post id.
2853
                     * @param string $post_permalink The post permalink url.
2854
                     * @param string $post_title The post title text.
2855
                     */
2856
                    $title = apply_filters('geodir_listing_slider_title',$title_html,$post_id,$post_permalink,$post_title);
2857
                }
2858
2859 1
                $widget_main_slides .= $title . '<img src="' . $widget_image->src . '" alt="' . $widget_image->title . '" title="' . $widget_image->title . '" style="max-height:200px;margin:0 auto;" /></li>';
2860 1
                $nav_slides .= '<li><img src="' . $widget_image->src . '" alt="' . $widget_image->title . '" title="' . $widget_image->title . '" style="max-height:48px;margin:0 auto;" /></li>';
2861 1
                $widget_slides++;
2862 1
            }
2863 1
        }
2864
        ?>
2865
        <div class="flex-container" style="min-height:200px;">
2866
            <div class="geodir-listing-flex-loader"><i class="fa fa-refresh fa-spin"></i></div>
2867
            <div id="geodir_widget_slider" class="geodir_flexslider">
2868
                <ul class="geodir-slides clearfix"><?php echo $widget_main_slides; ?></ul>
2869
            </div>
2870
            <?php if ($widget_slides > 1) { ?>
2871
                <div id="geodir_widget_carousel" class="geodir_flexslider">
2872
                    <ul class="geodir-slides clearfix"><?php echo $nav_slides; ?></ul>
2873
                </div>
2874
            <?php } ?>
2875
        </div>
2876
        <?php
2877 1
        $GLOBALS['post'] = $current_post;
2878 1
        setup_postdata($current_post);
2879 1
    }
2880 2
    echo $after_widget;
2881 2
}
2882
2883
2884
/**
2885
 * Generates login box HTML.
2886
 *
2887
 * @since 1.0.0
2888
 * @package GeoDirectory
2889
 * @global object $current_user Current user object.
2890
 * @param array|string $args Display arguments including before_title, after_title, before_widget, and after_widget.
2891
 * @param array|string $instance The settings for the particular instance of the widget.
2892
 */
2893
function geodir_loginwidget_output($args = '', $instance = '')
2894
{
2895
    //print_r($args);
2896
    //print_r($instance);
2897
    // prints the widget
2898 2
    extract($args, EXTR_SKIP);
2899
2900
    /** This filter is documented in geodirectory_widgets.php */
2901 2
    $title = empty($instance['title']) ? __('My Dashboard', 'geodirectory') : apply_filters('widget_title', __($instance['title'], 'geodirectory'));
2902
2903 2
    echo $before_widget;
2904 2
    echo $before_title . $title . $after_title;
2905
2906 2
    if (is_user_logged_in()) {
2907 2
        global $current_user;
2908
2909 2
        $author_link = get_author_posts_url($current_user->data->ID);
2910 2
        $author_link = geodir_getlink($author_link, array('geodir_dashbord' => 'true'), false);
2911
2912 2
        echo '<ul class="geodir-loginbox-list">';
2913 2
        ob_start();
2914
        ?>
2915
        <li><a class="signin"
2916
               href="<?php echo wp_logout_url(home_url()); ?>"><?php _e('Logout', 'geodirectory'); ?></a></li>
2917
        <?php
2918 2
        $post_types = geodir_get_posttypes('object');
2919 2
        $show_add_listing_post_types_main_nav = get_option('geodir_add_listing_link_user_dashboard');
2920 2
        $geodir_allow_posttype_frontend = get_option('geodir_allow_posttype_frontend');
0 ignored issues
show
Unused Code introduced by
$geodir_allow_posttype_frontend is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
2921
2922 2
        if (!empty($show_add_listing_post_types_main_nav)) {
2923 2
            $addlisting_links = '';
2924 2
            foreach ($post_types as $key => $postobj) {
0 ignored issues
show
Bug introduced by
The expression $post_types of type array|object|string is not guaranteed to be traversable. How about adding an additional type check?

There are different options of fixing this problem.

  1. If you want to be on the safe side, you can add an additional type-check:

    $collection = json_decode($data, true);
    if ( ! is_array($collection)) {
        throw new \RuntimeException('$collection must be an array.');
    }
    
    foreach ($collection as $item) { /** ... */ }
    
  2. If you are sure that the expression is traversable, you might want to add a doc comment cast to improve IDE auto-completion and static analysis:

    /** @var array $collection */
    $collection = json_decode($data, true);
    
    foreach ($collection as $item) { /** .. */ }
    
  3. Mark the issue as a false-positive: Just hover the remove button, in the top-right corner of this issue for more options.

Loading history...
2925
2926 2
                if (in_array($key, $show_add_listing_post_types_main_nav)) {
2927
2928 2
                    if ($add_link = geodir_get_addlisting_link($key)) {
2929
2930 2
                        $name = $postobj->labels->name;
2931
2932 2
                        $selected = '';
2933 2
                        if (geodir_get_current_posttype() == $key && geodir_is_page('add-listing'))
2934 2
                            $selected = 'selected="selected"';
2935
2936
                        /**
2937
                         * Filter add listing link.
2938
                         *
2939
                         * @since 1.0.0
2940
                         * @param string $add_link Add listing link.
2941
                         * @param string $key Add listing array key.
2942
                         * @param int $current_user->ID Current user ID.
2943
                         */
2944 2
                        $add_link = apply_filters('geodir_dashboard_link_add_listing', $add_link, $key, $current_user->ID);
2945
2946 2
                        $addlisting_links .= '<option ' . $selected . ' value="' . $add_link . '">' . __(ucfirst($name), 'geodirectory') . '</option>';
2947
2948 2
                    }
2949 2
                }
2950
2951 2
            }
2952
2953 View Code Duplication
            if ($addlisting_links != '') { ?>
2954
2955
                <li><select id="geodir_add_listing" class="chosen_select" onchange="window.location.href=this.value"
2956
                            option-autoredirect="1" name="geodir_add_listing" option-ajaxchosen="false"
2957
                            data-placeholder="<?php echo esc_attr(__('Add Listing', 'geodirectory')); ?>">
2958
                        <option value="" disabled="disabled" selected="selected" style='display:none;'><?php echo esc_attr(__('Add Listing', 'geodirectory')); ?></option>
2959
                        <?php echo $addlisting_links; ?>
2960
                    </select></li> <?php
2961
2962 2
            }
2963
2964 2
        }
2965
        // My Favourites in Dashboard
2966 2
        $show_favorite_link_user_dashboard = get_option('geodir_favorite_link_user_dashboard');
2967 2
        $user_favourite = geodir_user_favourite_listing_count();
2968
2969 2
        if (!empty($show_favorite_link_user_dashboard) && !empty($user_favourite)) {
2970
            $favourite_links = '';
2971
2972
            foreach ($post_types as $key => $postobj) {
0 ignored issues
show
Bug introduced by
The expression $post_types of type array|object|string is not guaranteed to be traversable. How about adding an additional type check?

There are different options of fixing this problem.

  1. If you want to be on the safe side, you can add an additional type-check:

    $collection = json_decode($data, true);
    if ( ! is_array($collection)) {
        throw new \RuntimeException('$collection must be an array.');
    }
    
    foreach ($collection as $item) { /** ... */ }
    
  2. If you are sure that the expression is traversable, you might want to add a doc comment cast to improve IDE auto-completion and static analysis:

    /** @var array $collection */
    $collection = json_decode($data, true);
    
    foreach ($collection as $item) { /** .. */ }
    
  3. Mark the issue as a false-positive: Just hover the remove button, in the top-right corner of this issue for more options.

Loading history...
2973
                if (in_array($key, $show_favorite_link_user_dashboard) && array_key_exists($key, $user_favourite)) {
2974
                    $name = $postobj->labels->name;
2975
                    $post_type_link = geodir_getlink($author_link, array('stype' => $key, 'list' => 'favourite'), false);
2976
2977
                    $selected = '';
2978
2979 View Code Duplication
                    if (isset($_REQUEST['list']) && $_REQUEST['list'] == 'favourite' && isset($_REQUEST['stype']) && $_REQUEST['stype'] == $key && isset($_REQUEST['geodir_dashbord'])) {
2980
                        $selected = 'selected="selected"';
2981
                    }
2982
                    /**
2983
                     * Filter favorite listing link.
2984
                     *
2985
                     * @since 1.0.0
2986
                     * @param string $post_type_link Favorite listing link.
2987
                     * @param string $key Favorite listing array key.
2988
                     * @param int $current_user->ID Current user ID.
2989
                     */
2990
                    $post_type_link = apply_filters('geodir_dashboard_link_favorite_listing', $post_type_link, $key, $current_user->ID);
2991
2992
                    $favourite_links .= '<option ' . $selected . ' value="' . $post_type_link . '">' . __(ucfirst($name), 'geodirectory') . '</option>';
2993
                }
2994
            }
2995
2996 View Code Duplication
            if ($favourite_links != '') {
2997
                ?>
2998
                <li>
2999
                    <select id="geodir_my_favourites" class="chosen_select" onchange="window.location.href=this.value"
3000
                            option-autoredirect="1" name="geodir_my_favourites" option-ajaxchosen="false"
3001
                            data-placeholder="<?php echo esc_attr(__('My Favorites', 'geodirectory')); ?>">
3002
                        <option value="" disabled="disabled" selected="selected" style='display:none;'><?php echo esc_attr(__('My Favorites', 'geodirectory')); ?></option>
3003
                        <?php echo $favourite_links; ?>
3004
                    </select>
3005
                </li>
3006
            <?php
3007
            }
3008
        }
3009
3010
3011 2
        $show_listing_link_user_dashboard = get_option('geodir_listing_link_user_dashboard');
3012 2
        $user_listing = geodir_user_post_listing_count();
3013
3014 2
        if (!empty($show_listing_link_user_dashboard) && !empty($user_listing)) {
3015 2
            $listing_links = '';
3016
3017 2
            foreach ($post_types as $key => $postobj) {
0 ignored issues
show
Bug introduced by
The expression $post_types of type array|object|string is not guaranteed to be traversable. How about adding an additional type check?

There are different options of fixing this problem.

  1. If you want to be on the safe side, you can add an additional type-check:

    $collection = json_decode($data, true);
    if ( ! is_array($collection)) {
        throw new \RuntimeException('$collection must be an array.');
    }
    
    foreach ($collection as $item) { /** ... */ }
    
  2. If you are sure that the expression is traversable, you might want to add a doc comment cast to improve IDE auto-completion and static analysis:

    /** @var array $collection */
    $collection = json_decode($data, true);
    
    foreach ($collection as $item) { /** .. */ }
    
  3. Mark the issue as a false-positive: Just hover the remove button, in the top-right corner of this issue for more options.

Loading history...
3018 2
                if (in_array($key, $show_listing_link_user_dashboard) && array_key_exists($key, $user_listing)) {
3019 2
                    $name = $postobj->labels->name;
3020 2
                    $listing_link = geodir_getlink($author_link, array('stype' => $key), false);
3021
3022 2
                    $selected = '';
3023 2 View Code Duplication
                    if (!isset($_REQUEST['list']) && isset($_REQUEST['geodir_dashbord']) && isset($_REQUEST['stype']) && $_REQUEST['stype'] == $key) {
3024 1
                        $selected = 'selected="selected"';
3025 1
                    }
3026
3027
                    /**
3028
                     * Filter my listing link.
3029
                     *
3030
                     * @since 1.0.0
3031
                     * @param string $listing_link My listing link.
3032
                     * @param string $key My listing array key.
3033
                     * @param int $current_user->ID Current user ID.
3034
                     */
3035 2
                    $listing_link = apply_filters('geodir_dashboard_link_my_listing', $listing_link, $key, $current_user->ID);
3036
3037 2
                    $listing_links .= '<option ' . $selected . ' value="' . $listing_link . '">' . __(ucfirst($name), 'geodirectory') . '</option>';
3038 2
                }
3039 2
            }
3040
3041 2 View Code Duplication
            if ($listing_links != '') {
3042
                ?>
3043
                <li>
3044
                    <select id="geodir_my_listings" class="chosen_select" onchange="window.location.href=this.value"
3045
                            option-autoredirect="1" name="geodir_my_listings" option-ajaxchosen="false"
3046
                            data-placeholder="<?php echo esc_attr(__('My Listings', 'geodirectory')); ?>">
3047
                        <option value="" disabled="disabled" selected="selected" style='display:none;'><?php echo esc_attr(__('My Listings', 'geodirectory')); ?></option>
3048
                        <?php echo $listing_links; ?>
3049
                    </select>
3050
                </li>
3051
            <?php
3052 2
            }
3053 2
        }
3054
3055 2
        $dashboard_link = ob_get_clean();
3056
        /**
3057
         * Filter dashboard links HTML.
3058
         *
3059
         * @since 1.0.0
3060
         * @param string $dashboard_link Dashboard links HTML.
3061
         */
3062 2
        echo apply_filters('geodir_dashboard_links', $dashboard_link);
3063 2
        echo '</ul>';
3064 2
    } else {
3065
        ?>
3066
        <?php
3067
        /**
3068
         * Filter signup form action link.
3069
         *
3070
         * @since 1.0.0
3071
         */
3072
        ?>
3073
        <form name="loginform" class="loginform1"
3074
              action="<?php echo geodir_login_url(); ?>"
3075
              method="post">
3076
            <div class="geodir_form_row"><input placeholder="<?php _e('Email', 'geodirectory'); ?>" name="log"
3077
                                                type="text" class="textfield user_login1"/> <span
3078
                    class="user_loginInfo"></span></div>
3079
            <div class="geodir_form_row"><input placeholder="<?php _e('Password', 'geodirectory'); ?>"
3080
                                                name="pwd" type="password"
3081
                                                class="textfield user_pass1 input-text"/><span
3082
                    class="user_passInfo"></span></div>
3083
3084
            <input type="hidden" name="redirect_to" value="<?php echo htmlspecialchars(geodir_curPageURL()); ?>"/>
3085
            <input type="hidden" name="testcookie" value="1"/>
3086
3087
            <div class="geodir_form_row clearfix"><input type="submit" name="submit"
3088
                                                         value="<?php echo SIGN_IN_BUTTON; ?>" class="b_signin"/>
3089
3090
                <p class="geodir-new-forgot-link">
3091
                    <?php
3092
                    /**
3093
                     * Filter signup page register form link.
3094
                     *
3095
                     * @since 1.0.0
3096
                     */
3097
                    ?>
3098
                    <a href="<?php echo geodir_login_url(array('signup' => true)); ?>"
3099
                       class="goedir-newuser-link"><?php echo NEW_USER_TEXT; ?></a>
3100
3101
                    <?php
3102
                    /**
3103
                     * Filter signup page forgot password form link.
3104
                     *
3105
                     * @since 1.0.0
3106
                     */
3107
                    ?>
3108
                    <a href="<?php echo geodir_login_url(array('forgot' => true)); ?>"
3109
                       class="goedir-forgot-link"><?php echo FORGOT_PW_TEXT; ?></a></p></div>
3110
        </form>
3111
    <?php }
3112
3113 2
    echo $after_widget;
3114 2
}
3115
3116
3117
/**
3118
 * Generates popular postview HTML.
3119
 *
3120
 * @since 1.0.0
3121
 * @since 1.5.1 View all link fixed for location filter disabled.
3122
 * @package GeoDirectory
3123
 * @global object $post The current post object.
3124
 * @global string $gridview_columns_widget The girdview style of the listings for widget.
3125
 * @global bool $geodir_is_widget_listing Is this a widget listing?. Default: false.
3126
 * @global object $gd_session GeoDirectory Session object.
3127
 *
3128
 * @param array|string $args Display arguments including before_title, after_title, before_widget, and after_widget.
3129
 * @param array|string $instance The settings for the particular instance of the widget.
3130
 */
3131
function geodir_popular_postview_output($args = '', $instance = '') {
3132 2
    global $gd_session;
3133
	
3134
    // prints the widget
3135 2
    extract($args, EXTR_SKIP);
3136
3137 2
    echo $before_widget;
3138
3139
    /** This filter is documented in geodirectory_widgets.php */
3140 2
    $title = empty($instance['title']) ? geodir_ucwords($instance['category_title']) : apply_filters('widget_title', __($instance['title'], 'geodirectory'));
3141
    /**
3142
     * Filter the widget post type.
3143
     *
3144
     * @since 1.0.0
3145
     * @param string $instance['post_type'] Post type of listing.
3146
     */
3147 2
    $post_type = empty($instance['post_type']) ? 'gd_place' : apply_filters('widget_post_type', $instance['post_type']);
3148
    /**
3149
     * Filter the widget's term.
3150
     *
3151
     * @since 1.0.0
3152
     * @param string $instance['category'] Filter by term. Can be any valid term.
3153
     */
3154 2
    $category = empty($instance['category']) ? '0' : apply_filters('widget_category', $instance['category']);
3155
    /**
3156
     * Filter the widget listings limit.
3157
     *
3158
     * @since 1.0.0
3159
     * @param string $instance['post_number'] Number of listings to display.
3160
     */
3161 2
    $post_number = empty($instance['post_number']) ? '5' : apply_filters('widget_post_number', $instance['post_number']);
3162
    /**
3163
     * Filter widget's "layout" type.
3164
     *
3165
     * @since 1.0.0
3166
     * @param string $instance['layout'] Widget layout type.
3167
     */
3168 2
    $layout = empty($instance['layout']) ? 'gridview_onehalf' : apply_filters('widget_layout', $instance['layout']);
3169
    /**
3170
     * Filter widget's "add_location_filter" value.
3171
     *
3172
     * @since 1.0.0
3173
     * @param string|bool $instance['add_location_filter'] Do you want to add location filter? Can be 1 or 0.
3174
     */
3175 2
    $add_location_filter = empty($instance['add_location_filter']) ? '0' : apply_filters('widget_add_location_filter', $instance['add_location_filter']);
3176
    /**
3177
     * Filter widget's listing width.
3178
     *
3179
     * @since 1.0.0
3180
     * @param string $instance['listing_width'] Listing width.
3181
     */
3182 2
    $listing_width = empty($instance['listing_width']) ? '' : apply_filters('widget_listing_width', $instance['listing_width']);
3183
    /**
3184
     * Filter widget's "list_sort" type.
3185
     *
3186
     * @since 1.0.0
3187
     * @param string $instance['list_sort'] Listing sort by type.
3188
     */
3189 2
    $list_sort = empty($instance['list_sort']) ? 'latest' : apply_filters('widget_list_sort', $instance['list_sort']);
3190 2
    $use_viewing_post_type = !empty($instance['use_viewing_post_type']) ? true : false;
3191
3192
    // set post type to current viewing post type
3193 2 View Code Duplication
    if ($use_viewing_post_type) {
3194 1
        $current_post_type = geodir_get_current_posttype();
3195 1
        if ($current_post_type != '' && $current_post_type != $post_type) {
3196
            $post_type = $current_post_type;
3197
            $category = array(); // old post type category will not work for current changed post type
3198
        }
3199 1
    }
3200
    // replace widget title dynamically
3201 2
    $posttype_plural_label = __(get_post_type_plural_label($post_type), 'geodirectory');
3202 2
    $posttype_singular_label = __(get_post_type_singular_label($post_type), 'geodirectory');
3203
3204 2
    $title = str_replace("%posttype_plural_label%", $posttype_plural_label, $title);
3205 2
    $title = str_replace("%posttype_singular_label%", $posttype_singular_label, $title);
3206
3207 2 View Code Duplication
    if (isset($instance['character_count'])) {
3208
        /**
3209
         * Filter the widget's excerpt character count.
3210
         *
3211
         * @since 1.0.0
3212
         * @param int $instance['character_count'] Excerpt character count.
3213
         */
3214 1
        $character_count = apply_filters('widget_list_character_count', $instance['character_count']);
3215 1
    } else {
3216 1
        $character_count = '';
3217
    }
3218
3219 2
    if (empty($title) || $title == 'All') {
3220 2
        $title .= ' ' . __(get_post_type_plural_label($post_type), 'geodirectory');
3221 2
    }
3222
3223 2
    $location_url = array();
3224 2
    $city = get_query_var('gd_city');
3225 2
    if (!empty($city)) {
3226
        $country = get_query_var('gd_country');
3227
        $region = get_query_var('gd_region');
3228
3229
        $geodir_show_location_url = get_option('geodir_show_location_url');
3230
3231
        if ($geodir_show_location_url == 'all') {
3232
            if ($country != '') {
3233
                $location_url[] = $country;
3234
            }
3235
3236
            if ($region != '') {
3237
                $location_url[] = $region;
3238
            }
3239
        } else if ($geodir_show_location_url == 'country_city') {
3240
            if ($country != '') {
3241
                $location_url[] = $country;
3242
            }
3243
        } else if ($geodir_show_location_url == 'region_city') {
3244
            if ($region != '') {
3245
                $location_url[] = $region;
3246
            }
3247
        }
3248
3249
        $location_url[] = $city;
3250
    }
3251
3252 2
    $location_url = implode('/', $location_url);
3253 2
    $skip_location = false;
3254 2
    if (!$add_location_filter && $gd_session->get('gd_multi_location')) {
3255
        $skip_location = true;
3256
        $gd_session->un_set('gd_multi_location');
3257
    }
3258
3259 2
    if (get_option('permalink_structure')) {
3260
        $viewall_url = get_post_type_archive_link($post_type);
3261
    } else {
3262 2
        $viewall_url = get_post_type_archive_link($post_type);
3263
    }
3264
3265 2
    if (!empty($category) && $category[0] != '0') {
3266
        global $geodir_add_location_url;
3267
3268
        $geodir_add_location_url = '0';
3269
3270
        if ($add_location_filter != '0') {
3271
            $geodir_add_location_url = '1';
3272
        }
3273
3274
        $viewall_url = get_term_link((int)$category[0], $post_type . 'category');
3275
3276
        $geodir_add_location_url = NULL;
3277
    }
3278 2
    if ($skip_location) {
3279
        $gd_session->set('gd_multi_location', 1);
3280
    }
3281
3282 2
    if(is_wp_error( $viewall_url  )){$viewall_url = '';}
3283
3284
    $query_args = array(
3285 2
        'posts_per_page' => $post_number,
3286 2
        'is_geodir_loop' => true,
3287 2
        'gd_location' => $add_location_filter ? true : false,
3288 2
        'post_type' => $post_type,
3289
        'order_by' => $list_sort
3290 2
    );
3291
3292 2
    if ($character_count) {
3293 1
        $query_args['excerpt_length'] = $character_count;
3294 1
    }
3295
3296 2
    if (!empty($instance['show_featured_only'])) {
3297 1
        $query_args['show_featured_only'] = 1;
3298 1
    }
3299
3300 2
    if (!empty($instance['show_special_only'])) {
3301
        $query_args['show_special_only'] = 1;
3302
    }
3303
3304 2 View Code Duplication
    if (!empty($instance['with_pics_only'])) {
3305
        $query_args['with_pics_only'] = 0;
3306
        $query_args['featured_image_only'] = 1;
3307
    }
3308
3309 2
    if (!empty($instance['with_videos_only'])) {
3310
        $query_args['with_videos_only'] = 1;
3311
    }
3312 2
    $with_no_results = !empty($instance['without_no_results']) ? false : true;
3313
3314 2 View Code Duplication
    if (!empty($category) && $category[0] != '0') {
3315
        $category_taxonomy = geodir_get_taxonomies($post_type);
3316
3317
        ######### WPML #########
3318
        if (function_exists('icl_object_id')) {
3319
            $category = gd_lang_object_ids($category, $category_taxonomy[0]);
3320
        }
3321
        ######### WPML #########
3322
3323
        $tax_query = array(
3324
            'taxonomy' => $category_taxonomy[0],
3325
            'field' => 'id',
3326
            'terms' => $category
3327
        );
3328
3329
        $query_args['tax_query'] = array($tax_query);
3330
    }
3331
3332 2
    global $gridview_columns_widget, $geodir_is_widget_listing;
3333
3334 2
    $widget_listings = geodir_get_widget_listings($query_args);
3335
3336 2
    if (!empty($widget_listings) || $with_no_results) {
3337
        ?>
3338
        <div class="geodir_locations geodir_location_listing">
3339
3340
            <?php
3341
            /**
3342
             * Called before the div containing the title and view all link in popular post view widget.
3343
             *
3344
             * @since 1.0.0
3345
             */
3346
            do_action('geodir_before_view_all_link_in_widget'); ?>
3347
            <div class="geodir_list_heading clearfix">
3348
                <?php echo $before_title . $title . $after_title; ?>
3349
                <a href="<?php echo $viewall_url; ?>"
3350
                   class="geodir-viewall"><?php _e('View all', 'geodirectory'); ?></a>
3351
            </div>
3352
            <?php
3353
            /**
3354
             * Called after the div containing the title and view all link in popular post view widget.
3355
             *
3356
             * @since 1.0.0
3357
             */
3358
            do_action('geodir_after_view_all_link_in_widget'); ?>
3359
            <?php
3360 2 View Code Duplication
            if (strstr($layout, 'gridview')) {
3361 2
                $listing_view_exp = explode('_', $layout);
3362 2
                $gridview_columns_widget = $layout;
3363 2
                $layout = $listing_view_exp[0];
3364 2
            } else {
3365
                $gridview_columns_widget = '';
3366
            }
3367
3368
            /**
3369
             * Filter the widget listing listview template path.
3370
             *
3371
             * @since 1.0.0
3372
             */
3373 2
            $template = apply_filters("geodir_template_part-widget-listing-listview", geodir_locate_template('widget-listing-listview'));
3374 2
            if (!isset($character_count)) {
3375
                /**
3376
                 * Filter the widget's excerpt character count.
3377
                 *
3378
                 * @since 1.0.0
3379
                 * @param int $instance['character_count'] Excerpt character count.
3380
                 */
3381
                $character_count = $character_count == '' ? 50 : apply_filters('widget_character_count', $character_count);
3382
            }
3383
3384 2
            global $post, $map_jason, $map_canvas_arr;
3385
3386 2
            $current_post = $post;
3387 2
            $current_map_jason = $map_jason;
3388 2
            $current_map_canvas_arr = $map_canvas_arr;
3389 2
            $geodir_is_widget_listing = true;
3390
3391
            /**
3392
             * Includes related listing listview template.
3393
             *
3394
             * @since 1.0.0
3395
             */
3396 2
            include($template);
3397
3398 2
            $geodir_is_widget_listing = false;
3399
3400 2
            $GLOBALS['post'] = $current_post;
3401 2
            if (!empty($current_post))
3402 2
                setup_postdata($current_post);
3403 2
            $map_jason = $current_map_jason;
3404 2
            $map_canvas_arr = $current_map_canvas_arr;
3405
            ?>
3406
        </div>
3407
    <?php
3408 2
    }
3409 2
    echo $after_widget;
3410
3411 2
}
3412
3413
3414
/*-----------------------------------------------------------------------------------*/
3415
/*  Review count functions
3416
/*-----------------------------------------------------------------------------------*/
3417
/**
3418
 * Count reviews by term ID.
3419
 *
3420
 * @since 1.0.0
3421
 * @since 1.5.1 Added filter to change SQL.
3422
 * @package GeoDirectory
3423
 * @global object $wpdb WordPress Database object.
3424
 * @global string $plugin_prefix Geodirectory plugin table prefix.
3425
 * @param int $term_id The term ID.
3426
 * @param int $taxonomy The taxonomy Id.
3427
 * @param string $post_type The post type.
3428
 * @return int Reviews count.
3429
 */
3430
function geodir_count_reviews_by_term_id($term_id, $taxonomy, $post_type)
3431
{
3432 2
    global $wpdb, $plugin_prefix;
3433
3434 2
    $detail_table = $plugin_prefix . $post_type . '_detail';
3435
3436 2
    $sql = "SELECT COALESCE(SUM(rating_count),0) FROM " . $detail_table . " WHERE post_status = 'publish' AND rating_count > 0 AND FIND_IN_SET(" . $term_id . ", " . $taxonomy . ")";
3437
3438
    /**
3439
     * Filter count review sql query.
3440
     *
3441
     * @since 1.5.1
3442
     * @param string $sql Database sql query..
3443
     * @param int $term_id The term ID.
3444
     * @param int $taxonomy The taxonomy Id.
3445
     * @param string $post_type The post type.
3446
     */
3447 2
    $sql = apply_filters('geodir_count_reviews_by_term_sql', $sql, $term_id, $taxonomy, $post_type);
3448
3449 2
    $count = $wpdb->get_var($sql);
3450
3451 2
    return $count;
3452
}
3453
3454
/**
3455
 * Count reviews by terms.
3456
 *
3457
 * @since 1.0.0
3458
 * @since 1.6.1 Fixed add listing page load time.
3459
 * @package GeoDirectory
3460
 *
3461
 * @global object $gd_session GeoDirectory Session object.
3462
 *
3463
 * @param bool $force_update Force update option value?. Default.false.
3464
 * @return array Term array data.
3465
 */
3466
function geodir_count_reviews_by_terms($force_update = false, $post_ID = 0) {
3467
    /**
3468
     * Filter review count option data.
3469
     *
3470
     * @since 1.0.0
3471
     * @since 1.6.1 Added $post_ID param.
3472
     * @param bool $force_update Force update option value?. Default.false.
3473
     * @param int $post_ID The post id to update if any.
3474
     */
3475 8
    $option_data = apply_filters('geodir_count_reviews_by_terms_before', '', $force_update,$post_ID);
3476 8
    if (!empty($option_data)) {
3477
        return $option_data;
3478
    }
3479
3480 8
    $option_data = get_option('geodir_global_review_count');
3481
3482 8
    if (!$option_data || $force_update) {
3483 7
        if ((int)$post_ID > 0) { // Update reviews count for specific post categories only.
3484 7
            global $gd_session;
3485 7
            $term_array = (array)$option_data;
3486 7
            $post_type = get_post_type($post_ID);
3487 7
            $taxonomy = $post_type . 'category';
3488 7
            $terms = wp_get_object_terms($post_ID, $taxonomy, array('fields' => 'ids'));
3489
3490 7 View Code Duplication
            if (!empty($terms) && !is_wp_error($terms)) {
3491 2
                foreach ($terms as $term_id) {
3492 2
                    $count = geodir_count_reviews_by_term_id($term_id, $taxonomy, $post_type);
3493 2
                    $children = get_term_children($term_id, $taxonomy);
0 ignored issues
show
Unused Code introduced by
$children is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
3494 2
                    $term_array[$term_id] = $count;
3495 2
                }
3496 2
            }
3497
            
3498 7
            $session_listing = $gd_session->get('listing');
3499
            
3500 7
            $terms = array();
3501 7
            if (isset($_POST['post_category'][$taxonomy])) {
3502
                $terms = (array)$_POST['post_category'][$taxonomy];
3503 7
            } else if (!empty($session_listing) && isset($session_listing['post_category'][$taxonomy])) {
3504
                $terms = (array)$session_listing['post_category'][$taxonomy];
3505
            }
3506
            
3507 7 View Code Duplication
            if (!empty($terms)) {
3508
                foreach ($terms as $term_id) {
3509
                    if ($term_id > 0) {
3510
                        $count = geodir_count_reviews_by_term_id($term_id, $taxonomy, $post_type);
3511
                        $children = get_term_children($term_id, $taxonomy);
0 ignored issues
show
Unused Code introduced by
$children is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
3512
                        $term_array[$term_id] = $count;
3513
                    }
3514
                }
3515
            }
3516 7
        } else { // Update reviews count for all post categories.
3517
            $term_array = array();
3518
            $post_types = geodir_get_posttypes();
3519
            foreach ($post_types as $post_type) {
0 ignored issues
show
Bug introduced by
The expression $post_types of type array|object|string is not guaranteed to be traversable. How about adding an additional type check?

There are different options of fixing this problem.

  1. If you want to be on the safe side, you can add an additional type-check:

    $collection = json_decode($data, true);
    if ( ! is_array($collection)) {
        throw new \RuntimeException('$collection must be an array.');
    }
    
    foreach ($collection as $item) { /** ... */ }
    
  2. If you are sure that the expression is traversable, you might want to add a doc comment cast to improve IDE auto-completion and static analysis:

    /** @var array $collection */
    $collection = json_decode($data, true);
    
    foreach ($collection as $item) { /** .. */ }
    
  3. Mark the issue as a false-positive: Just hover the remove button, in the top-right corner of this issue for more options.

Loading history...
3520
3521
                $taxonomy = geodir_get_taxonomies($post_type);
3522
                $taxonomy = $taxonomy[0];
3523
3524
                $args = array(
3525
                    'hide_empty' => false
3526
                );
3527
3528
                $terms = get_terms($taxonomy, $args);
3529
3530
                foreach ($terms as $term) {
3531
                    $count = geodir_count_reviews_by_term_id($term->term_id, $taxonomy, $post_type);
3532
                    $children = get_term_children($term->term_id, $taxonomy);
0 ignored issues
show
Unused Code introduced by
$children is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
3533
                    /*if ( is_array( $children ) ) {
0 ignored issues
show
Unused Code Comprehensibility introduced by
50% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
3534
                        foreach ( $children as $child_id ) {
3535
                            $child_count = geodir_count_reviews_by_term_id($child_id, $taxonomy, $post_type);
3536
                            $count = $count + $child_count;
3537
                        }
3538
                    }*/
3539
                    $term_array[$term->term_id] = $count;
3540
                }
3541
            }
3542
        }
3543
3544 7
        update_option('geodir_global_review_count', $term_array);
3545
        //clear cache
3546 7
        wp_cache_delete('geodir_global_review_count');
3547 7
        return $term_array;
3548
    } else {
3549 1
        return $option_data;
3550
    }
3551
}
3552
3553
/**
3554
 * Force update review count.
3555
 *
3556
 * @since 1.0.0
3557
 * @since 1.6.1 Fixed add listing page load time.
3558
 * @package GeoDirectory
3559
 * @return bool
3560
 */
3561
function geodir_term_review_count_force_update($new_status, $old_status = '', $post = '') {
3562 8
    if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'geodir_import_export') {
3563
        return; // do not run if importing listings
3564
    }
3565
    
3566 8
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
3567
        return;
3568
    }
3569
3570 8
    $post_ID = 0;
3571 8
    if (!empty($post)) {
3572 8
        if (isset($post->post_type) && strpos($post->post_type, 'gd_') !== 0) {
3573 2
            return;
3574
        }
3575
        
3576 6
        if ($new_status == 'auto-draft' && $old_status == 'new') {
3577
            return;
3578
        }
3579
        
3580 6
        if (!empty($post->ID)) {
3581 6
            $post_ID = $post->ID;
3582 6
        }
3583 6
    }
3584
3585 6
    if ($new_status != $old_status) {
3586 5
        geodir_count_reviews_by_terms(true, $post_ID);
3587 5
    }
3588
3589 6
    return true;
3590
}
3591
3592
function geodir_term_review_count_force_update_single_post($post_id){
3593 4
    geodir_count_reviews_by_terms(true, $post_id); 
3594 4
}
3595
3596
/*-----------------------------------------------------------------------------------*/
3597
/*  Term count functions
3598
/*-----------------------------------------------------------------------------------*/
3599
/**
3600
 * Count posts by term.
3601
 *
3602
 * @since 1.0.0
3603
 * @package GeoDirectory
3604
 * @param array $data Count data array.
3605
 * @param object $term The term object.
3606
 * @return int Post count.
3607
 */
3608
function geodir_count_posts_by_term($data, $term)
3609
{
3610
3611
    if ($data) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $data of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
3612
        if (isset($data[$term->term_id])) {
3613
            return $data[$term->term_id];
3614
        } else {
3615
            return 0;
3616
        }
3617
    } else {
3618
        return $term->count;
3619
    }
3620
}
3621
3622
/**
3623
 * Sort terms object by post count.
3624
 *
3625
 * @since 1.0.0
3626
 * @package GeoDirectory
3627
 * param array $terms An array of term objects.
3628
 * @return array Sorted terms array.
3629
 */
3630
function geodir_sort_terms_by_count($terms)
3631
{
3632 4
    usort($terms, "geodir_sort_by_count_obj");
3633 4
    return $terms;
3634
}
3635
3636
/**
3637
 * Sort terms object by review count.
3638
 *
3639
 * @since 1.0.0
3640
 * @package GeoDirectory
3641
 * @param array $terms An array of term objects.
3642
 * @return array Sorted terms array.
3643
 */
3644
function geodir_sort_terms_by_review_count($terms)
3645
{
3646 1
    usort($terms, "geodir_sort_by_review_count_obj");
3647 1
    return $terms;
3648
}
3649
3650
/**
3651
 * Sort terms either by post count or review count.
3652
 *
3653
 * @since 1.0.0
3654
 * @package GeoDirectory
3655
 * @param array $terms An array of term objects.
3656
 * @param string $sort The sort type. Can be count (Post Count) or review_count. Default. count.
3657
 * @return array Sorted terms array.
3658
 */
3659
function geodir_sort_terms($terms, $sort = 'count')
3660
{
3661 5
    if ($sort == 'count') {
3662 4
        return geodir_sort_terms_by_count($terms);
3663
    }
3664 1
    if ($sort == 'review_count') {
3665 1
        return geodir_sort_terms_by_review_count($terms);
3666
    }
3667
}
3668
3669
/*-----------------------------------------------------------------------------------*/
3670
/*  Utils
3671
/*-----------------------------------------------------------------------------------*/
3672
/**
3673
 * Compares post count from array for sorting.
3674
 *
3675
 * @since 1.0.0
3676
 * @package GeoDirectory
3677
 * @param array $a The left side array to compare.
3678
 * @param array $b The right side array to compare.
3679
 * @return bool
3680
 */
3681
function geodir_sort_by_count($a, $b)
3682
{
3683
    return $a['count'] < $b['count'];
3684
}
3685
3686
/**
3687
 * Compares post count from object for sorting.
3688
 *
3689
 * @since 1.0.0
3690
 * @package GeoDirectory
3691
 * @param object $a The left side object to compare.
3692
 * @param object $b The right side object to compare.
3693
 * @return bool
3694
 */
3695
function geodir_sort_by_count_obj($a, $b)
3696
{
3697 4
    return $a->count < $b->count;
3698
}
3699
3700
/**
3701
 * Compares review count from object for sorting.
3702
 *
3703
 * @since 1.0.0
3704
 * @package GeoDirectory
3705
 * @param object $a The left side object to compare.
3706
 * @param object $b The right side object to compare.
3707
 * @return bool
3708
 */
3709
function geodir_sort_by_review_count_obj($a, $b)
3710
{
3711 1
    return $a->review_count < $b->review_count;
3712
}
3713
3714
/**
3715
 * Load geodirectory plugin textdomain.
3716
 *
3717
 * @since 1.4.2
3718
 * @package GeoDirectory
3719
 */
3720
function geodir_load_textdomain() {
3721
    /**
3722
     * Filter the plugin locale.
3723
     *
3724
     * @since 1.4.2
3725
     * @package GeoDirectory
3726
     */
3727
    $locale = apply_filters('plugin_locale', get_locale(), 'geodirectory');
3728
3729
    load_textdomain('geodirectory', WP_LANG_DIR . '/' . 'geodirectory' . '/' . 'geodirectory' . '-' . $locale . '.mo');
3730
    load_plugin_textdomain('geodirectory', false, plugin_basename(dirname(dirname(__FILE__))) . '/geodirectory-languages');
3731
3732
    /**
3733
     * Define language constants.
3734
     *
3735
     * @since 1.0.0
3736
     */
3737
    require_once(geodir_plugin_path() . '/language.php');
3738
3739
    $language_file = geodir_plugin_path() . '/db-language.php';
3740
3741
    // Load language string file if not created yet
3742
    if (!file_exists($language_file)) {
3743
        geodirectory_load_db_language();
3744
    }
3745
3746
    if (file_exists($language_file)) {
3747
        /**
3748
         * Language strings from database.
3749
         *
3750
         * @since 1.4.2
3751
         */
3752
        try {
3753
            require_once($language_file);
3754
        } catch(Exception $e) {
3755
            error_log('Language Error: ' . $e->getMessage());
3756
        }
3757
    }
3758
}
3759
3760
/**
3761
 * Load language strings in to file to translate via po editor
3762
 *
3763
 * @since 1.4.2
3764
 * @package GeoDirectory
3765
 *
3766
 * @global null|object $wp_filesystem WP_Filesystem object.
3767
 *
3768
 * @return bool True if file created otherwise false
3769
 */
3770
function geodirectory_load_db_language() {
3771 1
    global $wp_filesystem;
3772 1
    if( empty( $wp_filesystem ) ) {
3773 1
        require_once( ABSPATH .'/wp-admin/includes/file.php' );
3774 1
        WP_Filesystem();
3775 1
        global $wp_filesystem;
3776 1
    }
3777
3778 1
    $language_file = geodir_plugin_path() . '/db-language.php';
3779
3780 1
    if(is_file($language_file) && !is_writable($language_file))
3781 1
        return false; // Not possible to create.
3782
3783 1
    if(!is_file($language_file) && !is_writable(dirname($language_file)))
3784 1
        return false; // Not possible to create.
3785
3786 1
    $contents_strings = array();
3787
3788
    /**
3789
     * Filter the language string from database to translate via po editor
3790
     *
3791
     * @since 1.4.2
3792
     *
3793
     * @param array $contents_strings Array of strings.
3794
     */
3795 1
    $contents_strings = apply_filters('geodir_load_db_language', $contents_strings);
3796
3797 1
    $contents_strings = array_unique($contents_strings);
3798
3799 1
    $contents_head = array();
3800 1
    $contents_head[] = "<?php";
3801 1
    $contents_head[] = "/**";
3802 1
    $contents_head[] = " * Translate language string stored in database. Ex: Custom Fields";
3803 1
    $contents_head[] = " *";
3804 1
    $contents_head[] = " * @package GeoDirectory";
3805 1
    $contents_head[] = " * @since 1.4.2";
3806 1
    $contents_head[] = " */";
3807 1
    $contents_head[] = "";
3808 1
    $contents_head[] = "// Language keys";
3809
3810 1
    $contents_foot = array();
3811 1
    $contents_foot[] = "";
3812 1
    $contents_foot[] = "";
3813
3814 1
    $contents = implode(PHP_EOL, $contents_head);
3815
3816 1
    if (!empty($contents_strings)) {
3817 1
        foreach ( $contents_strings as $string ) {
3818 1
            if (is_scalar($string) && $string != '') {
3819 1
                $string = str_replace("'", "\'", $string);
3820 1
                $contents .= PHP_EOL . "__('" . $string . "', 'geodirectory');";
3821 1
            }
3822 1
        }
3823 1
    }
3824
3825 1
    $contents .= implode(PHP_EOL, $contents_foot);
3826
3827 1
    if($wp_filesystem->put_contents( $language_file, $contents, FS_CHMOD_FILE))
3828 1
        return false; // Failure; could not write file.
3829
3830
    return true;
3831
}
3832
3833
/**
3834
 * Get the custom fields texts for translation
3835
 *
3836
 * @since 1.4.2
3837
 * @since 1.5.7 Option values are translatable via db translation.
3838
 * @package GeoDirectory
3839
 *
3840
 * @global object $wpdb WordPress database abstraction object.
3841
 *
3842
 * @param  array $translation_texts Array of text strings.
3843
 * @return array Translation texts.
3844
 */
3845
function geodir_load_custom_field_translation($translation_texts = array()) {
3846 1
    global $wpdb;
3847
3848
    // Custom fields table
3849 1
    $sql = "SELECT admin_title, admin_desc, site_title, clabels, required_msg, default_value, option_values FROM " . GEODIR_CUSTOM_FIELDS_TABLE;
3850 1
    $rows = $wpdb->get_results($sql);
3851
3852 1
    if (!empty($rows)) {
3853 1
        foreach($rows as $row) {
3854 1
            if (!empty($row->admin_title))
3855 1
                $translation_texts[] = stripslashes_deep($row->admin_title);
3856
			
3857 1
            if (!empty($row->admin_desc))
3858 1
                $translation_texts[] = stripslashes_deep($row->admin_desc);
3859
3860 1
            if (!empty($row->site_title))
3861 1
                $translation_texts[] = stripslashes_deep($row->site_title);
3862
3863 1
            if (!empty($row->clabels))
3864 1
                $translation_texts[] = stripslashes_deep($row->clabels);
3865
3866 1
            if (!empty($row->required_msg))
3867 1
                $translation_texts[] = stripslashes_deep($row->required_msg);
3868
			
3869 1
			if (!empty($row->default_value))
3870 1
                $translation_texts[] = stripslashes_deep($row->default_value);
3871
			
3872 1
			if (!empty($row->option_values)) {
3873 1
				$option_values = geodir_string_values_to_options(stripslashes_deep($row->option_values));
3874
				
3875 1
				if (!empty($option_values)) {
3876 1
					foreach ($option_values as $option_value) {
3877 1
						if (!empty($option_value['label'])) {
3878 1
							$translation_texts[] = $option_value['label'];
3879 1
						}
3880 1
					}
3881 1
				}
3882 1
			}
3883 1
        }
3884 1
    }
3885
	
3886
    // Custom sorting fields table
3887 1
    $sql = "SELECT site_title, asc_title, desc_title FROM " . GEODIR_CUSTOM_SORT_FIELDS_TABLE;
3888 1
    $rows = $wpdb->get_results($sql);
3889
3890 1 View Code Duplication
    if (!empty($rows)) {
3891
        foreach($rows as $row) {
3892
            if (!empty($row->site_title))
3893
                $translation_texts[] = stripslashes_deep($row->site_title);
3894
3895
            if (!empty($row->asc_title))
3896
                $translation_texts[] = stripslashes_deep($row->asc_title);
3897
3898
            if (!empty($row->desc_title))
3899
                $translation_texts[] = stripslashes_deep($row->desc_title);
3900
        }
3901
    }
3902
	
3903
	// Advance search filter fields table
3904 1
	if (defined('GEODIR_ADVANCE_SEARCH_TABLE')) {
3905
		$sql = "SELECT field_site_name, front_search_title, field_desc FROM " . GEODIR_ADVANCE_SEARCH_TABLE;
3906
		$rows = $wpdb->get_results($sql);
3907
3908 View Code Duplication
		if (!empty($rows)) {
3909
			foreach($rows as $row) {
3910
				if (!empty($row->field_site_name))
3911
					$translation_texts[] = stripslashes_deep($row->field_site_name);
3912
3913
				if (!empty($row->front_search_title))
3914
					$translation_texts[] = stripslashes_deep($row->front_search_title);
3915
3916
				if (!empty($row->field_desc))
3917
					$translation_texts[] = stripslashes_deep($row->field_desc);
3918
			}
3919
		}
3920
	}
3921
3922 1
    $translation_texts = !empty($translation_texts) ? array_unique($translation_texts) : $translation_texts;
3923
3924 1
    return $translation_texts;
3925
}
3926
3927
/**
3928
 * Retrieve list of mime types and file extensions allowed for file upload.
3929
 *
3930
 * @since 1.4.7
3931
 * @package GeoDirectory
3932
 *
3933
 * @return array Array of mime types.
3934
 */
3935
function geodir_allowed_mime_types() {
3936
    /**
3937
     * Filter the list of mime types and file extensions allowed for file upload.
3938
     *
3939
     * @since 1.4.7
3940
     * @package GeoDirectory
3941
     *
3942
     * @param array $geodir_allowed_mime_types and file extensions.
3943
     */
3944
    return apply_filters( 'geodir_allowed_mime_types', array(
3945
            'Image' => array( // Image formats.
3946
                'jpg' => 'image/jpeg',
3947
                'jpe' => 'image/jpeg',
3948
                'jpeg' => 'image/jpeg',
3949
                'gif' => 'image/gif',
3950
                'png' => 'image/png',
3951
                'bmp' => 'image/bmp',
3952
                'ico' => 'image/x-icon',
3953
            ),
3954
            'Video' => array( // Video formats.
3955
                'asf' => 'video/x-ms-asf',
3956
                'avi' => 'video/avi',
3957
                'flv' => 'video/x-flv',
3958
                'mkv' => 'video/x-matroska',
3959
                'mp4' => 'video/mp4',
3960
                'mpeg' => 'video/mpeg',
3961
                'mpg' => 'video/mpeg',
3962
                'wmv' => 'video/x-ms-wmv',
3963
                '3gp' => 'video/3gpp',
3964
            ),
3965
            'Audio' => array( // Audio formats.
3966
                'ogg' => 'audio/ogg',
3967
                'mp3' => 'audio/mpeg',
3968
                'wav' => 'audio/wav',
3969
                'wma' => 'audio/x-ms-wma',
3970
            ),
3971
            'Text' => array( // Text formats.
3972
                'css' => 'text/css',
3973
                'csv' => 'text/csv',
3974
                'htm' => 'text/html',
3975
                'html' => 'text/html',
3976
                'txt' => 'text/plain',
3977
                'rtx' => 'text/richtext',
3978
                'vtt' => 'text/vtt',
3979
            ),
3980
            'Application' => array( // Application formats.
3981
                'doc' => 'application/msword',
3982
                'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
3983
                'exe' => 'application/x-msdownload',
3984
                'js' => 'application/javascript',
3985
                'odt' => 'application/vnd.oasis.opendocument.text',
3986
                'pdf' => 'application/pdf',
3987
                'pot' => 'application/vnd.ms-powerpoint',
3988
                'ppt' => 'application/vnd.ms-powerpoint',
3989
                'pptx' => 'application/vnd.ms-powerpoint',
3990
                'psd' => 'application/octet-stream',
3991
                'rar' => 'application/rar',
3992
                'rtf' => 'application/rtf',
3993
                'swf' => 'application/x-shockwave-flash',
3994
                'tar' => 'application/x-tar',
3995
                'xls' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
3996
                'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
3997
                'zip' => 'application/zip',
3998
            )
3999
        )
4000
    );
4001
}
4002
4003
/**
4004
 * Retrieve list of user display name for user id.
4005
 *
4006
 * @since 1.5.0
4007
 *
4008
 * @param  string $user_id The WP user id.
4009
 * @return string User display name.
4010
 */
4011
function geodir_get_client_name($user_id) {
4012 9
    $client_name = '';
4013
4014 9
    $user_data = get_userdata($user_id);
4015
4016 9
    if (!empty($user_data)) {
4017 2
        if (isset($user_data->display_name) && trim($user_data->display_name) != '') {
4018 2
            $client_name = trim($user_data->display_name);
4019 2
        } else if (isset($user_data->user_nicename) && trim($user_data->user_nicename) != '') {
4020
            $client_name = trim($user_data->user_nicename);
4021
        } else {
4022
            $client_name = trim($user_data->user_login);
4023
        }
4024 2
    }
4025
4026 9
    return $client_name;
4027
}
4028
4029
4030
4031
4032
4033
add_filter('wpseo_replacements','geodir_wpseo_replacements',10,1);
4034
/*
4035
 * Add location variables to wpseo replacements.
4036
 *
4037
 * @since 1.5.4
4038
 */
4039
function geodir_wpseo_replacements($vars){
4040
4041
    global $wp;
4042
    $title = '';
0 ignored issues
show
Unused Code introduced by
$title is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
4043
    // location variables
4044
    $gd_post_type = geodir_get_current_posttype();
4045
    $location_array = geodir_get_current_location_terms('query_vars', $gd_post_type);
4046
    /**
4047
     * Filter the title variables location variables array
4048
     *
4049
     * @since 1.5.5
4050
     * @package GeoDirectory
4051
     * @param array $location_array The array of location variables.
4052
     * @param array $vars The page title variables.
4053
     */
4054
    $location_array = apply_filters('geodir_filter_title_variables_location_arr_seo',$location_array, $vars);
4055
    $location_titles = array();
4056 View Code Duplication
    if(get_query_var( 'gd_country_full' )){
4057
        if(get_query_var( 'gd_country_full' )){$location_array['gd_country'] = get_query_var( 'gd_country_full' );}
4058
        if(get_query_var( 'gd_region_full' )){$location_array['gd_region'] = get_query_var( 'gd_region_full' );}
4059
        if(get_query_var( 'gd_city_full' )){$location_array['gd_city'] = get_query_var( 'gd_city_full' );}
4060
    }
4061
    $location_single = '';
4062
    $gd_country = (isset($wp->query_vars['gd_country']) && $wp->query_vars['gd_country'] != '') ? $wp->query_vars['gd_country'] : '';
4063
    $gd_region = (isset($wp->query_vars['gd_region']) && $wp->query_vars['gd_region'] != '') ? $wp->query_vars['gd_region'] : '';
4064
    $gd_city = (isset($wp->query_vars['gd_city']) && $wp->query_vars['gd_city'] != '') ? $wp->query_vars['gd_city'] : '';
4065
4066
    $gd_country_actual = $gd_region_actual = $gd_city_actual = '';
4067
4068 View Code Duplication
    if (function_exists('get_actual_location_name')) {
4069
        $gd_country_actual = $gd_country != '' ? get_actual_location_name('country', $gd_country, true) : $gd_country;
4070
        $gd_region_actual = $gd_region != '' ? get_actual_location_name('region', $gd_region) : $gd_region;
4071
        $gd_city_actual = $gd_city != '' ? get_actual_location_name('city', $gd_city) : $gd_city;
4072
    }
4073
4074 View Code Duplication
    if ($gd_city != '') {
4075
        if ($gd_city_actual != '') {
4076
            $gd_city = $gd_city_actual;
4077
        } else {
4078
            $gd_city = preg_replace('/-(\d+)$/', '', $gd_city);
4079
            $gd_city = preg_replace('/[_-]/', ' ', $gd_city);
4080
            $gd_city = __(geodir_ucwords($gd_city), 'geodirectory');
4081
        }
4082
        $location_single = $gd_city;
4083
4084
    } else if ($gd_region != '') {
4085
        if ($gd_region_actual != '') {
4086
            $gd_region = $gd_region_actual;
4087
        } else {
4088
            $gd_region = preg_replace('/-(\d+)$/', '', $gd_region);
4089
            $gd_region = preg_replace('/[_-]/', ' ', $gd_region);
4090
            $gd_region = __(geodir_ucwords($gd_region), 'geodirectory');
4091
        }
4092
4093
        $location_single = $gd_region;
4094
    } else if ($gd_country != '') {
4095
        if ($gd_country_actual != '') {
4096
            $gd_country = $gd_country_actual;
4097
        } else {
4098
            $gd_country = preg_replace('/-(\d+)$/', '', $gd_country);
4099
            $gd_country = preg_replace('/[_-]/', ' ', $gd_country);
4100
            $gd_country = __(geodir_ucwords($gd_country), 'geodirectory');
4101
        }
4102
4103
        $location_single = $gd_country;
4104
    }
4105
4106 View Code Duplication
    if (!empty($location_array)) {
4107
4108
        $actual_location_name = function_exists('get_actual_location_name') ? true : false;
4109
        $location_array = array_reverse($location_array);
4110
4111
        foreach ($location_array as $location_type => $location) {
4112
            $gd_location_link_text = preg_replace('/-(\d+)$/', '', $location);
4113
            $gd_location_link_text = preg_replace('/[_-]/', ' ', $gd_location_link_text);
4114
4115
            $location_name = geodir_ucwords($gd_location_link_text);
4116
            $location_name = __($location_name, 'geodirectory');
4117
4118
            if ($actual_location_name) {
4119
                $location_type = strpos($location_type, 'gd_') === 0 ? substr($location_type, 3) : $location_type;
4120
                $location_name = get_actual_location_name($location_type, $location, true);
4121
            }
4122
4123
            $location_titles[] = $location_name;
4124
        }
4125
        if (!empty($location_titles)) {
4126
            $location_titles = array_unique($location_titles);
4127
        }
4128
    }
4129
4130
4131
    if(!empty($location_titles)) {
4132
        $vars['%%location%%'] = implode(", ", $location_titles);
4133
    }
4134
4135
4136
    if(!empty($location_titles)) {
4137
        $vars['%%in_location%%'] = __('in ', 'geodirectory') . implode(", ", $location_titles);
4138
    }
4139
4140
4141
4142
    if($location_single) {
4143
        $vars['%%in_location_single%%'] = __('in', 'geodirectory') . ' ' .$location_single;
4144
    }
4145
4146
4147
    if($location_single) {
4148
        $vars['%%location_single%%'] = $location_single;
4149
    }
4150
4151
    /**
4152
     * Filter the title variables after standard ones have been filtered for wpseo.
4153
     *
4154
     * @since 1.5.7
4155
     * @package GeoDirectory
4156
     * @param string $vars The title with variables.
4157
     * @param array $location_array The array of location variables.
4158
     */
4159
    return apply_filters('geodir_wpseo_replacements_vars',$vars,$location_array);
4160
}
4161
4162
4163
add_filter('geodir_seo_meta_title','geodir_filter_title_variables',10,3);
4164
add_filter('geodir_seo_page_title','geodir_filter_title_variables',10,2);
4165
add_filter('geodir_seo_meta_description_pre','geodir_filter_title_variables',10,3);
4166
4167
/**
4168
 * Filter the title variables.
4169
 *
4170
 * %%date%%	                    Replaced with the date of the post/page
4171
 * %%title%%	                Replaced with the title of the post/page
4172
 * %%sitename%%	                The site's name
4173
 * %%sitedesc%%	                The site's tagline / description
4174
 * %%excerpt%%	                Replaced with the post/page excerpt (or auto-generated if it does not exist)
4175
 * %%tag%%	                    Replaced with the current tag/tags
4176
 * %%category%%	                Replaced with the post categories (comma separated)
4177
 * %%category_description%%	    Replaced with the category description
4178
 * %%tag_description%%	        Replaced with the tag description
4179
 * %%term_description%%	        Replaced with the term description
4180
 * %%term_title%%	            Replaced with the term name
4181
 * %%searchphrase%%	            Replaced with the current search phrase
4182
 * %%sep%%	                    The separator defined in your theme's wp_title() tag.
4183
 * 
4184
 * ADVANCED
4185
 * %%pt_single%%	            Replaced with the post type single label
4186
 * %%pt_plural%%	            Replaced with the post type plural label
4187
 * %%modified%%	                Replaced with the post/page modified time
4188
 * %%id%%	                    Replaced with the post/page ID
4189
 * %%name%%	                    Replaced with the post/page author's 'nicename'
4190
 * %%userid%%	                Replaced with the post/page author's userid
4191
 * %%page%%	                    Replaced with the current page number (i.e. page 2 of 4)
4192
 * %%pagetotal%%	            Replaced with the current page total
4193
 * %%pagenumber%%	            Replaced with the current page number
4194
 *
4195
 * @since 1.5.7
4196
 * @package GeoDirectory
4197
 *
4198
 * @global object $wp WordPress object.
4199
 * @global object $post The current post object.
4200
 *
4201
 * @param string $title The title with variables.
4202
 * @param string $gd_page The page being filtered.
4203
 * @param string $sep The separator, default: `|`.
4204
 * @return string Title after filtered variables.
4205
 */
4206
function geodir_filter_title_variables($title, $gd_page, $sep = '') {
4207 7
    global $wp, $post;
4208
4209 7
    if (!$gd_page || !$title) {
4210 3
        return $title; // if no a GD page then bail.
4211
    }
4212
    
4213 5
    if ($sep == '') {
4214
        /**
4215
         * Filter the page title separator.
4216
         *
4217
         * @since 1.0.0
4218
         * @package GeoDirectory
4219
         * @param string $sep The separator, default: `|`.
4220
         */
4221 2
        $sep = apply_filters('geodir_page_title_separator', '|');
4222 2
    }
4223
4224 5
    if (strpos($title,'%%title%%') !== false) {
4225 3
        $title = str_replace("%%title%%", $post->post_title, $title);
4226 3
    }
4227
4228 5 View Code Duplication
    if (strpos($title,'%%sitename%%') !== false) {
4229 5
        $title = str_replace("%%sitename%%", get_bloginfo('name'), $title);
4230 5
    }
4231
4232 5 View Code Duplication
    if (strpos($title,'%%sitedesc%%') !== false) {
4233
        $title = str_replace("%%sitedesc%%", get_bloginfo('description'), $title);
4234
    }
4235
4236 5
    if (strpos($title,'%%excerpt%%') !== false) {
4237
        $title = str_replace("%%excerpt%%", strip_tags(get_the_excerpt()), $title);
4238
    }
4239
    
4240 5
    if ($gd_page == 'search' || $gd_page == 'author') {
4241 2
        $post_type = sanitize_text_field($_REQUEST['stype']);
4242 5
    } else if ($gd_page == 'add-listing') {
4243 1
        $post_type = sanitize_text_field($_REQUEST['listing_type']);
4244 1
        $post_type = !$post_type && !empty($_REQUEST['pid']) ? get_post_type((int)$_REQUEST['pid']) : $post_type;
4245 4
    } else if (isset($post->post_type) && $post->post_type && in_array($post->post_type , geodir_get_posttypes())) {
4246 1
        $post_type = $post->post_type;
4247 1
    } else {
4248 2
        $post_type = get_query_var('post_type');
4249
    }
4250
    
4251 5 View Code Duplication
    if (strpos($title, '%%pt_single%%') !== false) {        
4252 1
        $singular_name = '';
4253 1
        if ($post_type && $singular_name = get_post_type_singular_label($post_type)) {
4254 1
            $singular_name = __($singular_name, 'geodirectory');
4255 1
        }
4256
        
4257 1
        $title = str_replace("%%pt_single%%", $singular_name, $title);
4258 1
    }
4259
4260 5 View Code Duplication
    if (strpos($title, '%%pt_plural%%') !== false) {        
4261 2
        $plural_name = '';
4262 2
        if ($post_type && $plural_name = get_post_type_plural_label($post_type)) {
4263 2
            $plural_name = __($plural_name, 'geodirectory');
4264 2
        }
4265
        
4266 2
        $title = str_replace("%%pt_plural%%", $plural_name, $title);
4267 2
    }
4268
4269 5 View Code Duplication
    if (strpos($title, '%%category%%') !== false) {
4270
        $cat_name = '';
4271
4272
        if ($gd_page=='detail') {
4273
            if ($post->default_category) {
4274
                $cat = get_term($post->default_category, $post->post_type . 'category');
4275
                $cat_name = (isset($cat->name)) ? $cat->name : '';
4276
            }
4277
        } else if ($gd_page == 'listing') {
4278
            $queried_object = get_queried_object();
4279
            if (isset($queried_object->name)) {
4280
                $cat_name = $queried_object->name;
4281
            }
4282
        }
4283
        $title = str_replace("%%category%%", $cat_name, $title);
4284
    }
4285
4286 5 View Code Duplication
    if (strpos($title, '%%tag%%') !== false) {
4287
        $cat_name = '';
4288
4289
        if ($gd_page=='detail') {
4290
            if ($post->default_category) {
4291
                $cat = get_term($post->default_category, $post->post_type . 'category');
4292
                $cat_name = (isset($cat->name)) ? $cat->name : '';
4293
            }
4294
        } else if($gd_page == 'listing') {
4295
            $queried_object = get_queried_object();
4296
            if (isset($queried_object->name)) {
4297
                $cat_name = $queried_object->name;
4298
            }
4299
        }
4300
        $title = str_replace("%%tag%%", $cat_name, $title);
4301
    }
4302
4303 5
    if (strpos($title, '%%id%%') !== false) {
4304
        $ID = (isset($post->ID)) ? $post->ID : '';
4305
        $title = str_replace("%%id%%", $ID, $title);
4306
    }
4307
4308 5
    if (strpos($title,'%%sep%%') !== false) {
4309 5
        $title = str_replace("%%sep%%", $sep, $title);
4310 5
    }
4311
4312
    // location variables
4313 5
    $gd_post_type = geodir_get_current_posttype();
4314 5
    $location_array = geodir_get_current_location_terms('query_vars', $gd_post_type);
4315
    /**
4316
     * Filter the title variables location variables array
4317
     *
4318
     * @since 1.5.5
4319
     * @package GeoDirectory
4320
     * @param array $location_array The array of location variables.
4321
     * @param string $title The title with variables..
4322
     * @param string $gd_page The page being filtered.
4323
     * @param string $sep The separator, default: `|`.
4324
     */
4325 5
    $location_array = apply_filters('geodir_filter_title_variables_location_arr',$location_array,$title, $gd_page, $sep);
4326 5
    $location_titles = array();
4327 5 View Code Duplication
    if($gd_page=='location' && get_query_var( 'gd_country_full' )){
4328
        if(get_query_var( 'gd_country_full' )){$location_array['gd_country'] = get_query_var( 'gd_country_full' );}
4329
        if(get_query_var( 'gd_region_full' )){$location_array['gd_region'] = get_query_var( 'gd_region_full' );}
4330
        if(get_query_var( 'gd_city_full' )){$location_array['gd_city'] = get_query_var( 'gd_city_full' );}
4331
    }
4332 5
    $location_single = '';
4333 5
    $gd_country = (isset($wp->query_vars['gd_country']) && $wp->query_vars['gd_country'] != '') ? $wp->query_vars['gd_country'] : '';
4334 5
    $gd_region = (isset($wp->query_vars['gd_region']) && $wp->query_vars['gd_region'] != '') ? $wp->query_vars['gd_region'] : '';
4335 5
    $gd_city = (isset($wp->query_vars['gd_city']) && $wp->query_vars['gd_city'] != '') ? $wp->query_vars['gd_city'] : '';
4336
4337 5
    $gd_country_actual = $gd_region_actual = $gd_city_actual = '';
4338
4339 5 View Code Duplication
    if (function_exists('get_actual_location_name')) {
4340
        $gd_country_actual = $gd_country != '' ? get_actual_location_name('country', $gd_country, true) : $gd_country;
4341
        $gd_region_actual = $gd_region != '' ? get_actual_location_name('region', $gd_region) : $gd_region;
4342
        $gd_city_actual = $gd_city != '' ? get_actual_location_name('city', $gd_city) : $gd_city;
4343
    }
4344
4345 5 View Code Duplication
    if ($gd_city != '') {
4346
        if ($gd_city_actual != '') {
4347
            $gd_city = $gd_city_actual;
4348
        } else {
4349
            $gd_city = preg_replace('/-(\d+)$/', '', $gd_city);
4350
            $gd_city = preg_replace('/[_-]/', ' ', $gd_city);
4351
            $gd_city = __(geodir_ucwords($gd_city), 'geodirectory');
4352
        }
4353
        $location_single = $gd_city;
4354
4355 5
    } else if ($gd_region != '') {
4356
        if ($gd_region_actual != '') {
4357
            $gd_region = $gd_region_actual;
4358
        } else {
4359
            $gd_region = preg_replace('/-(\d+)$/', '', $gd_region);
4360
            $gd_region = preg_replace('/[_-]/', ' ', $gd_region);
4361
            $gd_region = __(geodir_ucwords($gd_region), 'geodirectory');
4362
        }
4363
4364
        $location_single = $gd_region;
4365 5
    } else if ($gd_country != '') {
4366
        if ($gd_country_actual != '') {
4367
            $gd_country = $gd_country_actual;
4368
        } else {
4369
            $gd_country = preg_replace('/-(\d+)$/', '', $gd_country);
4370
            $gd_country = preg_replace('/[_-]/', ' ', $gd_country);
4371
            $gd_country = __(geodir_ucwords($gd_country), 'geodirectory');
4372
        }
4373
4374
        $location_single = $gd_country;
4375
    }
4376
4377 5 View Code Duplication
    if (!empty($location_array)) {
4378
4379
        $actual_location_name = function_exists('get_actual_location_name') ? true : false;
4380
        $location_array = array_reverse($location_array);
4381
4382
        foreach ($location_array as $location_type => $location) {
4383
            $gd_location_link_text = preg_replace('/-(\d+)$/', '', $location);
4384
            $gd_location_link_text = preg_replace('/[_-]/', ' ', $gd_location_link_text);
4385
4386
            $location_name = geodir_ucwords($gd_location_link_text);
4387
            $location_name = __($location_name, 'geodirectory');
4388
4389
            if ($actual_location_name) {
4390
                $location_type = strpos($location_type, 'gd_') === 0 ? substr($location_type, 3) : $location_type;
4391
                $location_name = get_actual_location_name($location_type, $location, true);
4392
            }
4393
4394
            $location_titles[] = $location_name;
4395
        }
4396
        if (!empty($location_titles)) {
4397
            $location_titles = array_unique($location_titles);
4398
        }
4399
    }
4400
4401
4402 5
    if(strpos($title,'%%location%%') !== false){
4403 1
        $location = '';
4404 1
        if($location_titles) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $location_titles of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
4405
            $location = implode(", ", $location_titles);
4406
        }
4407 1
        $title = str_replace("%%location%%",$location,$title);
4408 1
    }
4409
4410 5 View Code Duplication
    if(strpos($title,'%%in_location%%') !== false){
4411 1
        $location = '';
4412 1
        if($location_titles) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $location_titles of type array is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
4413
            $location = __('in ', 'geodirectory') . implode(", ", $location_titles);
4414
        }
4415 1
        $title = str_replace("%%in_location%%",$location,$title);
4416 1
    }
4417
4418 5 View Code Duplication
    if(strpos($title,'%%in_location_single%%') !== false){
4419 1
        if($location_single) {
4420
            $location_single = __('in', 'geodirectory') . ' ' .$location_single;
4421
        }
4422 1
        $title = str_replace("%%in_location_single%%",$location_single,$title);
4423 1
    }
4424
4425 5
    if(strpos($title,'%%location_single%%') !== false){
4426
        $title = str_replace("%%location_single%%",$location_single,$title);
4427
    }
4428
4429
4430 5 View Code Duplication
    if(strpos($title,'%%search_term%%') !== false){
4431 1
        $search_term = '';
4432 1
        if(isset($_REQUEST['s'])){
4433
            $search_term = esc_attr($_REQUEST['s']);
4434
        }
4435 1
        $title = str_replace("%%search_term%%",$search_term,$title);
4436 1
    }
4437
4438 5 View Code Duplication
    if(strpos($title,'%%search_near%%') !== false){
4439 1
        $search_term = '';
4440 1
        if(isset($_REQUEST['snear'])){
4441
            $search_term = esc_attr($_REQUEST['snear']);
4442
        }
4443 1
        $title = str_replace("%%search_near%%",$search_term,$title);
4444 1
    }
4445
4446 5
    if(strpos($title,'%%name%%') !== false){
4447 1
        $author_name = get_the_author();
4448 1
        if (!$author_name || $author_name === '') {
4449 1
            $queried_object = get_queried_object();
4450
            
4451 1
            if (isset($queried_object->data->user_nicename)) {
4452 1
                $author_name = $queried_object->data->display_name;
4453 1
            }
4454 1
        }
4455 1
        $title = str_replace("%%name%%", $author_name, $title);
4456 1
    }
4457
    
4458 5
    if (strpos($title, '%%page%%') !== false) {
4459
        $page = geodir_title_meta_page($sep);
4460
        $title = str_replace("%%page%%", $page, $title);
4461
    }
4462 5
    if (strpos($title, '%%pagenumber%%') !== false) {
4463
        $pagenumber = geodir_title_meta_pagenumber();
4464
        $title = str_replace("%%pagenumber%%", $pagenumber, $title);
4465
    }
4466 5
    if (strpos($title, '%%pagetotal%%') !== false) {
4467
        $pagetotal = geodir_title_meta_pagetotal();
4468
        $title = str_replace("%%pagetotal%%", $pagetotal, $title);
4469
    }
4470
4471 5
    $title = wptexturize( $title );
4472 5
    $title = convert_chars( $title );
4473 5
    $title = esc_html( $title );
4474
4475
    /**
4476
     * Filter the title variables after standard ones have been filtered.
4477
     *
4478
     * @since 1.5.7
4479
     * @package GeoDirectory
4480
     * @param string $title The title with variables.
4481
     * @param array $location_array The array of location variables.
4482
     * @param string $gd_page The page being filtered.
4483
     * @param string $sep The separator, default: `|`.
4484
     */
4485
4486 5
    return apply_filters('geodir_filter_title_variables_vars',$title,$location_array, $gd_page, $sep);
4487
}
4488
4489
/**
4490
 * Get the cpt texts for translation.
4491
 *
4492
 * @since 1.5.5
4493
 * @package GeoDirectory
4494
 *
4495
 * @param  array $translation_texts Array of text strings.
4496
 * @return array Translation texts.
4497
 */
4498
function geodir_load_cpt_text_translation($translation_texts = array()) {
4499 1
    $gd_post_types = geodir_get_posttypes('array');
4500
4501 1
    if (!empty($gd_post_types)) {
4502 1
        foreach ($gd_post_types as $post_type => $cpt_info) {
0 ignored issues
show
Bug introduced by
The expression $gd_post_types of type array|object|string is not guaranteed to be traversable. How about adding an additional type check?

There are different options of fixing this problem.

  1. If you want to be on the safe side, you can add an additional type-check:

    $collection = json_decode($data, true);
    if ( ! is_array($collection)) {
        throw new \RuntimeException('$collection must be an array.');
    }
    
    foreach ($collection as $item) { /** ... */ }
    
  2. If you are sure that the expression is traversable, you might want to add a doc comment cast to improve IDE auto-completion and static analysis:

    /** @var array $collection */
    $collection = json_decode($data, true);
    
    foreach ($collection as $item) { /** .. */ }
    
  3. Mark the issue as a false-positive: Just hover the remove button, in the top-right corner of this issue for more options.

Loading history...
4503 1
            $labels = isset($cpt_info['labels']) ? $cpt_info['labels'] : '';
4504 1
            $description = isset($cpt_info['description']) ? $cpt_info['description'] : '';
4505 1
            $seo = isset($cpt_info['seo']) ? $cpt_info['seo'] : '';
4506
4507 1
            if (!empty($labels)) {
4508 1 View Code Duplication
                if ($labels['name'] != '' && !in_array($labels['name'], $translation_texts))
4509 1
                    $translation_texts[] = $labels['name'];
4510 1 View Code Duplication
                if ($labels['singular_name'] != '' && !in_array($labels['singular_name'], $translation_texts))
4511 1
                    $translation_texts[] = $labels['singular_name'];
4512 1 View Code Duplication
                if ($labels['add_new'] != '' && !in_array($labels['add_new'], $translation_texts))
4513 1
                    $translation_texts[] = $labels['add_new'];
4514 1 View Code Duplication
                if ($labels['add_new_item'] != '' && !in_array($labels['add_new_item'], $translation_texts))
4515 1
                    $translation_texts[] = $labels['add_new_item'];
4516 1 View Code Duplication
                if ($labels['edit_item'] != '' && !in_array($labels['edit_item'], $translation_texts))
4517 1
                    $translation_texts[] = $labels['edit_item'];
4518 1 View Code Duplication
                if ($labels['new_item'] != '' && !in_array($labels['new_item'], $translation_texts))
4519 1
                    $translation_texts[] = $labels['new_item'];
4520 1 View Code Duplication
                if ($labels['view_item'] != '' && !in_array($labels['view_item'], $translation_texts))
4521 1
                    $translation_texts[] = $labels['view_item'];
4522 1 View Code Duplication
                if ($labels['search_items'] != '' && !in_array($labels['search_items'], $translation_texts))
4523 1
                    $translation_texts[] = $labels['search_items'];
4524 1 View Code Duplication
                if ($labels['not_found'] != '' && !in_array($labels['not_found'], $translation_texts))
4525 1
                    $translation_texts[] = $labels['not_found'];
4526 1 View Code Duplication
                if ($labels['not_found_in_trash'] != '' && !in_array($labels['not_found_in_trash'], $translation_texts))
4527 1
                    $translation_texts[] = $labels['not_found_in_trash'];
4528 1 View Code Duplication
                if (isset($labels['label_post_profile']) && $labels['label_post_profile'] != '' && !in_array($labels['label_post_profile'], $translation_texts))
4529 1
                    $translation_texts[] = $labels['label_post_profile'];
4530 1 View Code Duplication
                if (isset($labels['label_post_info']) && $labels['label_post_info'] != '' && !in_array($labels['label_post_info'], $translation_texts))
4531 1
                    $translation_texts[] = $labels['label_post_info'];
4532 1 View Code Duplication
                if (isset($labels['label_post_images']) && $labels['label_post_images'] != '' && !in_array($labels['label_post_images'], $translation_texts))
4533 1
                    $translation_texts[] = $labels['label_post_images'];
4534 1 View Code Duplication
                if (isset($labels['label_post_map']) && $labels['label_post_map'] != '' && !in_array($labels['label_post_map'], $translation_texts))
4535 1
                    $translation_texts[] = $labels['label_post_map'];
4536 1 View Code Duplication
                if (isset($labels['label_reviews']) && $labels['label_reviews'] != '' && !in_array($labels['label_reviews'], $translation_texts))
4537 1
                    $translation_texts[] = $labels['label_reviews'];
4538 1 View Code Duplication
                if (isset($labels['label_related_listing']) && $labels['label_related_listing'] != '' && !in_array($labels['label_related_listing'], $translation_texts))
4539 1
                    $translation_texts[] = $labels['label_related_listing'];
4540 1
            }
4541
4542 1
            if ($description != '' && !in_array($description, $translation_texts)) {
4543 1
                $translation_texts[] = normalize_whitespace($description);
4544 1
            }
4545
4546 1
            if (!empty($seo)) {
4547 View Code Duplication
                if (isset($seo['meta_keyword']) && $seo['meta_keyword'] != '' && !in_array($seo['meta_keyword'], $translation_texts))
4548
                    $translation_texts[] = normalize_whitespace($seo['meta_keyword']);
4549
4550 View Code Duplication
                if (isset($seo['meta_description']) && $seo['meta_description'] != '' && !in_array($seo['meta_description'], $translation_texts))
4551
                    $translation_texts[] = normalize_whitespace($seo['meta_description']);
4552
            }
4553 1
        }
4554 1
    }
4555 1
    $translation_texts = !empty($translation_texts) ? array_unique($translation_texts) : $translation_texts;
4556
4557 1
    return $translation_texts;
4558
}
4559
4560
/**
4561
 * Remove the location terms to hide term from location url.
4562
 *
4563
 * @since 1.5.5
4564
 * @package GeoDirectory
4565
 *
4566
 * @param  array $location_terms Array of location terms.
4567
 * @return array Location terms.
4568
 */
4569
function geodir_remove_location_terms($location_terms = array()) {
4570
    $location_manager = defined('POST_LOCATION_TABLE') ? true : false;
4571
4572
    if (!empty($location_terms) && $location_manager) {
4573
        $hide_country_part = get_option('geodir_location_hide_country_part');
4574
        $hide_region_part = get_option('geodir_location_hide_region_part');
4575
4576
        if ($hide_region_part && $hide_country_part) {
4577
            if (isset($location_terms['gd_country']))
4578
                unset($location_terms['gd_country']);
4579
            if (isset($location_terms['gd_region']))
4580
                unset($location_terms['gd_region']);
4581
        } else if ($hide_region_part && !$hide_country_part) {
4582
            if (isset($location_terms['gd_region']))
4583
                unset($location_terms['gd_region']);
4584
        } else if (!$hide_region_part && $hide_country_part) {
4585
            if (isset($location_terms['gd_country']))
4586
                unset($location_terms['gd_country']);
4587
        }
4588
    }
4589
4590
    return $location_terms;
4591
}
4592
4593
/**
4594
 * Send notification when a listing has been edited by it's author.
4595
 *
4596
 * @since 1.5.9
4597
 * @package GeoDirectory
4598
 *
4599
 * @param int $post_ID Post ID.
4600
 * @param WP_Post $post Post object.
4601
 * @param bool $update Whether this is an existing listing being updated or not.
4602
 */
4603
function geodir_on_wp_insert_post($post_ID, $post, $update) {
4604 8
    if (!$update) {
4605 7
        return;
4606
    }
4607
    
4608 1
    $action = isset($_REQUEST['action']) ? sanitize_text_field($_REQUEST['action']) : '';
4609 1
    $is_admin = is_admin() && ( !defined('DOING_AJAX' ) || ( defined('DOING_AJAX') && !DOING_AJAX ) )  ? true : false;
4610 1
    $inline_save = $action == 'inline-save' ? true : false;
4611
4612 1
    if (empty($post->post_type) || $is_admin || $inline_save || (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)) {
4613
        return;
4614
    }
4615
    
4616 1
    if ($action != '' && in_array($action, array('geodir_import_export'))) {
4617
        return;
4618
    }
4619
4620 1
    $user_id = (int)get_current_user_id();
4621
        
4622 1
    if ($user_id > 0 && get_option('geodir_notify_post_edited') && !wp_is_post_revision($post_ID) && in_array($post->post_type, geodir_get_posttypes())) {
4623
        $author_id = !empty($post->post_author) ? $post->post_author : 0;
4624
        
4625
        if ($user_id == $author_id && !is_super_admin()) {
4626
            $from_email = get_option('site_email');
4627
            $from_name = get_site_emailName();
4628
            $to_email = get_option('admin_email');
4629
            $to_name = get_option('name');
4630
            $message_type = 'listing_edited';
4631
            
4632
            $notify_edited = true;
4633
            /**
4634
             * Send notification when listing edited by author?
4635
             *
4636
             * @since 1.6.0
4637
             * @param bool $notify_edited Notify on listing edited by author?
4638
             * @param object $post The current post object.
4639
             */
4640
            $notify_edited = apply_filters('geodir_notify_on_listing_edited', $notify_edited, $post);
0 ignored issues
show
Unused Code introduced by
$notify_edited is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
4641
            
4642
            geodir_sendEmail($from_email, $from_name, $to_email, $to_name, '', '', '', $message_type, $post_ID);
4643
        }
4644
    }
4645 1
}
4646
4647
/**
4648
 * Retrieve the current page start & end numbering with context (i.e. 'page 2 of 4') for use as replacement string.
4649
 *
4650
 * @since 1.6.0
4651
 * @package GeoDirectory
4652
 *
4653
 * @param string $sep The separator tag.
4654
 *
4655
 * @return string|null The current page start & end numbering.
4656
 */
4657
function geodir_title_meta_page($sep) {
4658
    $replacement = null;
4659
4660
    $max = geodir_title_meta_pagenumbering('max');
4661
    $nr  = geodir_title_meta_pagenumbering('nr');
4662
4663
    if ($max > 1 && $nr > 1) {
4664
        $replacement = sprintf($sep . ' ' . __('Page %1$d of %2$d', 'geodirectory'), $nr, $max);
4665
    }
4666
4667
    return $replacement;
4668
}
4669
4670
/**
4671
 * Retrieve the current page number for use as replacement string.
4672
 *
4673
 * @since 1.6.0
4674
 * @package GeoDirectory
4675
 *
4676
 * @return string|null The current page number.
4677
 */
4678 View Code Duplication
function geodir_title_meta_pagenumber() {
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
4679
    $replacement = null;
4680
4681
    $nr = geodir_title_meta_pagenumbering('nr');
4682
    if (isset($nr) && $nr > 0) {
4683
        $replacement = (string)$nr;
4684
    }
4685
4686
    return $replacement;
4687
}
4688
4689
/**
4690
 * Retrieve the current page total for use as replacement string.
4691
 *
4692
 * @since 1.6.0
4693
 * @package GeoDirectory
4694
 *
4695
 * @return string|null The current page total.
4696
 */
4697 View Code Duplication
function geodir_title_meta_pagetotal() {
0 ignored issues
show
Duplication introduced by
This function seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
4698
    $replacement = null;
4699
4700
    $max = geodir_title_meta_pagenumbering('max');
4701
    if (isset($max) && $max > 0) {
4702
        $replacement = (string)$max;
4703
    }
4704
4705
    return $replacement;
4706
}
4707
4708
/**
4709
 * Determine the page numbering of the current post/page/cpt.
4710
 *
4711
 * @param string $request 'nr'|'max' - whether to return the page number or the max number of pages.
4712
 *
4713
 * @since 1.6.0
4714
 * @package GeoDirectory
4715
 *
4716
 * @global object $wp_query WordPress Query object.
4717
 * @global object $post The current post object.
4718
 *
4719
 * @return int|null The current page numbering.
4720
 */
4721
function geodir_title_meta_pagenumbering($request = 'nr') {
4722
    global $wp_query, $post;
4723
    $max_num_pages = null;
0 ignored issues
show
Unused Code introduced by
$max_num_pages is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
4724
    $page_number   = null;
0 ignored issues
show
Unused Code introduced by
$page_number is not used, you could remove the assignment.

This check looks for variable assignements that are either overwritten by other assignments or where the variable is not used subsequently.

$myVar = 'Value';
$higher = false;

if (rand(1, 6) > 3) {
    $higher = true;
} else {
    $higher = false;
}

Both the $myVar assignment in line 1 and the $higher assignment in line 2 are dead. The first because $myVar is never used and the second because $higher is always overwritten for every possible time line.

Loading history...
4725
4726
    $max_num_pages = 1;
4727
4728
    if (!is_singular()) {
4729
        $page_number = get_query_var('paged');
4730
        if ($page_number === 0 || $page_number === '') {
4731
            $page_number = 1;
4732
        }
4733
4734
        if (isset($wp_query->max_num_pages) && ($wp_query->max_num_pages != '' && $wp_query->max_num_pages != 0)) {
4735
            $max_num_pages = $wp_query->max_num_pages;
4736
        }
4737
    } else {
4738
        $page_number = get_query_var('page');
4739
        if ($page_number === 0 || $page_number === '') {
4740
            $page_number = 1;
4741
        }
4742
4743
        if (isset($post->post_content)) {
4744
            $max_num_pages = (substr_count($post->post_content, '<!--nextpage-->' ) + 1);
4745
        }
4746
    }
4747
4748
    $return = null;
4749
4750
    switch ($request) {
4751
        case 'nr':
4752
            $return = $page_number;
4753
            break;
4754
        case 'max':
4755
            $return = $max_num_pages;
4756
            break;
4757
    }
4758
4759
    return $return;
4760
}
4761
4762
/**
4763
 * Filter the terms with count empty.
4764
 *
4765
 * @since 1.5.4
4766
 *
4767
 * @param array $terms Terms array.
4768
 * @return array Terms.
4769
 */
4770
function geodir_filter_empty_terms($terms) {
4771 3
    if (empty($terms)) {
4772 3
        return $terms;
4773
    }
4774
4775 3
    $return = array();
4776 3
    foreach ($terms as $term) {
4777 3
        if (isset($term->count) && $term->count > 0) {
4778 3
            $return[] = $term;
4779 3
        }
4780 3
    }
4781 3
    return $return;
4782
}
4783
4784
4785
/**
4786
 * Remove the hentry class structured data from details pages.
4787
 *
4788
 * @since 1.6.5
4789
 * @param $class
4790
 *
4791
 * @return array
4792
 */
4793
function geodir_remove_hentry( $class ) {
4794 2
    if(geodir_is_page('detail')){
4795 1
        $class = array_diff( $class, array( 'hentry' ) );
4796 1
    }
4797 2
    return $class;
4798
}
4799
add_filter( 'post_class', 'geodir_remove_hentry' );