Passed
Push — master ( 5f5503...8bc157 )
by Stiofan
10:06
created

general_functions.php ➔ fetch_remote_file()   F

Complexity

Conditions 19
Paths 326

Size

Total Lines 81
Code Lines 50

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 37
CRAP Score 30.2618

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 19
eloc 50
c 2
b 0
f 0
nc 326
nop 1
dl 0
loc 81
ccs 37
cts 54
cp 0.6852
crap 30.2618
rs 3.794

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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 (L3208-3211) 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 (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...
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
                $page_title = defined('GD_LOCATION') ? GD_LOCATION : __('Location', 'geodirectory');
1227 1
            }
1228
1229 2
            $breadcrumb .= '<li>' . $separator;
1230 2
            $breadcrumb .= stripslashes_deep($page_title);
1231 2
            $breadcrumb .= '</li>';
1232 3
        } else if (is_tag()) {
1233
            $breadcrumb .=  "<li> " . $separator . single_tag_title('',false) . '</li>';
1234 1
        } else if (is_day()) {
1235
            $breadcrumb .= "<li> " . $separator . __(" Archive for", 'geodirectory') . " ";
1236
            the_time('F jS, Y');
1237
            $breadcrumb .= '</li>';
1238 1
        } else if (is_month()) {
1239
            $breadcrumb .= "<li> " . $separator . __(" Archive for", 'geodirectory') . " ";
1240
            the_time('F, Y');
1241
            $breadcrumb .= '</li>';
1242 1
        } else if (is_year()) {
1243
            $breadcrumb .= "<li> " . $separator . __(" Archive for", 'geodirectory') . " ";
1244
            the_time('Y');
1245
            $breadcrumb .= '</li>';
1246 1
        } else if (is_author()) {
1247
            $breadcrumb .= "<li> " . $separator . __(" Author Archive", 'geodirectory');
1248
            $breadcrumb .= '</li>';
1249 1
        } else if (isset($_GET['paged']) && !empty($_GET['paged'])) {
1250
            $breadcrumb .= "<li>" . $separator . __("Blog Archives", 'geodirectory');
1251
            $breadcrumb .= '</li>';
1252 1
        } else if (is_search()) {
1253 1
            $breadcrumb .= "<li> " . $separator . __(" Search Results", 'geodirectory');
1254 1
            $breadcrumb .= '</li>';
1255 1
        }
1256 5
        $breadcrumb .= '</ul></div>';
1257
1258
        /**
1259
         * Filter breadcrumb html output.
1260
         *
1261
         * @since 1.0.0
1262
         * @param string $breadcrumb Breadcrumb HTML.
1263
         * @param string $separator Breadcrumb separator.
1264
         */
1265 5
        echo $breadcrumb = apply_filters('geodir_breadcrumb', $breadcrumb, $separator);
1266 5
    }
1267 5
}
1268
1269
1270
add_action("admin_init", "geodir_allow_wpadmin"); // check user is admin
1271
if (!function_exists('geodir_allow_wpadmin')) {
1272
    /**
1273
     * Allow only admins to access wp-admin.
1274
     *
1275
     * Normal users will be redirected to home page.
1276
     *
1277
     * @since 1.0.0
1278
     * @package GeoDirectory
1279
     * @global object $wpdb WordPress Database object.
1280
     */
1281
    function geodir_allow_wpadmin()
1282
    {
1283 1
        global $wpdb;
1284 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
1285 1
        {
1286
            if (current_user_can('manage_options')) {
1287
            } else {
1288
1289
                wp_redirect(home_url());
1290
                exit;
1291
            }
1292
1293
        }
1294 1
    }
1295
}
1296
1297
1298
/**
1299
 * Move Images from a remote url to upload directory.
1300
 *
1301
 * @since 1.0.0
1302
 * @package GeoDirectory
1303
 * @param string $url The remote image url.
1304
 * @return array|WP_Error The uploaded data as array. When failure returns error.
1305
 */
1306
function fetch_remote_file($url)
1307
{
1308
    // extract the file name and extension from the url
1309 1
    require_once(ABSPATH . 'wp-includes/pluggable.php');
1310 1
    $file_name = basename($url);
1311 1
    if (strpos($file_name, '?') !== false) {
1312
        list($file_name) = explode('?', $file_name);
1313
    }
1314 1
    $dummy = false;
1315 1
    $add_to_cache = false;
1316 1
    $key = null;
1317 1
    if (strpos($url, '/dummy/') !== false) {
1318 1
        $dummy = true;
1319 1
        $key = "dummy_".str_replace('.', '_', $file_name);
1320 1
        $value = get_transient('cached_dummy_images');
1321 1
        if ($value) {
1322 1
            if (isset($value[$key])) {
1323 1
                return $value[$key];
1324
            } else {
1325 1
                $add_to_cache = true;
1326
            }
1327 1
        } else {
1328
            $add_to_cache = true;
1329
        }
1330 1
    }
1331
1332
    // get placeholder file in the upload dir with a unique, sanitized filename
1333
1334 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...
1335
1336 1
    $upload = wp_upload_bits($file_name, 0, '', $post_upload_date);
1337 1
    if ($upload['error'])
1338 1
        return new WP_Error('upload_dir_error', $upload['error']);
1339
1340
1341 1
    sleep(0.3);// if multiple remote file this can cause the remote server to timeout so we add a slight delay
1342
1343
    // fetch the remote url and write it to the placeholder file
1344 1
    $headers = wp_remote_get($url, array('stream' => true,'filename' => $upload['file']));
1345
1346 1
    $log_message = '';
1347 1
    if( is_wp_error( $headers  ) ) {
1348
        echo 'file: '.$url;
1349
        return new WP_Error('import_file_error',$headers->get_error_message());
1350
    }
1351
1352 1
    $filesize = filesize($upload['file']);
1353
    // request failed
1354 1
    if (!$headers) {
1355
        $log_message = __('Remote server did not respond', 'geodirectory');
1356
    }
1357
    // make sure the fetch was successful
1358 1
    elseif ($headers['response']['code'] != '200') {
1359
        $log_message = sprintf(__('Remote server returned error response %1$d %2$s', 'geodirectory'), esc_html($headers['response']), get_status_header_desc($headers['response']));
1360
    }
1361 1
    elseif (isset($headers['headers']['content-length']) && $filesize != $headers['headers']['content-length']) {
1362
        $log_message =  __('Remote file is incorrect size', 'geodirectory');
1363
    }
1364 1
    elseif (0 == $filesize) {
1365
        $log_message = __('Zero size file downloaded', 'geodirectory');
1366
    }
1367
1368 1
    if($log_message){
1369
        $del = unlink($upload['file']);
1370
        if(!$del){geodir_error_log(__('GeoDirectory: fetch_remote_file() failed to delete temp file.', 'geodirectory'));}
1371
        return new WP_Error('import_file_error',$log_message );
1372
    }
1373
1374 1
    if ($dummy && $add_to_cache && is_array($upload)) {
1375 1
        $images = get_transient('cached_dummy_images');
1376 1
        if(is_array($images))
1377 1
            $images[$key] = $upload;
1378
        else
1379
            $images = array($key => $upload);
1380
1381
        //setting the cache using the WP Transient API
1382 1
        set_transient('cached_dummy_images', $images, 60 * 10); //10 minutes cache
1383 1
    }
1384
1385 1
    return $upload;
1386
}
1387
1388
/**
1389
 * Get maximum file upload size.
1390
 *
1391
 * @since 1.0.0
1392
 * @package GeoDirectory
1393
 * @return string|void Max upload size.
1394
 */
1395 View Code Duplication
function geodir_max_upload_size()
0 ignored issues
show
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 (L3499-3510) 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...
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...
1396
{
1397 1
    $max_filesize = (float)get_option('geodir_upload_max_filesize', 2);
1398
1399 1
    if ($max_filesize > 0 && $max_filesize < 1) {
1400
        $max_filesize = (int)($max_filesize * 1024) . 'kb';
1401
    } else {
1402 1
        $max_filesize = $max_filesize > 0 ? $max_filesize . 'mb' : '2mb';
1403
    }
1404
1405
    /**
1406
     * Filter default image upload size limit.
1407
     *
1408
     * @since 1.0.0
1409
     * @param string $max_filesize Max file upload size. Ex. 10mb, 512kb.
1410
     */
1411 1
    return apply_filters('geodir_default_image_upload_size_limit', $max_filesize);
1412
}
1413
1414
/**
1415
 * Check if dummy folder exists or not.
1416
 *
1417
 * Check if dummy folder exists or not , if not then fetch from live url.
1418
 *
1419
 * @since 1.0.0
1420
 * @package GeoDirectory
1421
 * @return bool If dummy folder exists returns true, else false.
1422
 */
1423
function geodir_dummy_folder_exists()
1424
{
1425 1
    $path = geodir_plugin_path() . '/geodirectory-admin/dummy/';
1426 1
    if (!is_dir($path))
1427 1
        return false;
1428
    else
1429
        return true;
1430
1431
}
1432
1433
/**
1434
 * Get the author info.
1435
 *
1436
 * @since 1.0.0
1437
 * @package GeoDirectory
1438
 * @global object $wpdb WordPress Database object.
1439
 * @param int $aid The author ID.
1440
 * @return object Author info.
1441
 */
1442
function  geodir_get_author_info($aid)
1443
{
1444
    global $wpdb;
1445
    /*$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...
1446
    $infosql = $wpdb->prepare("select * from $wpdb->users where ID=%d", array($aid));
1447
    $info = $wpdb->get_results($infosql);
1448
    if ($info) {
1449
        return $info[0];
1450
    }
1451
}
1452
1453
if (!function_exists('adminEmail')) {
1454
    /**
1455
     * Send emails to client on post submission, renew etc.
1456
     *
1457
     * @since 1.0.0
1458
     * @package GeoDirectory
1459
     * @global object $wpdb WordPress Database object.
1460
     * @param int|string $page_id Page ID.
1461
     * @param int|string $user_id User ID.
1462
     * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1463
     * @param string $custom_1 Custom data to be sent.
1464
     */
1465
    function adminEmail($page_id, $user_id, $message_type, $custom_1 = '')
1466
    {
1467
        global $wpdb;
1468
        if ($message_type == 'expiration') {
1469
            $subject = stripslashes(__(get_option('renew_email_subject'),'geodirectory'));
1470
            $client_message = stripslashes(__(get_option('renew_email_content'),'geodirectory'));
1471
        } elseif ($message_type == 'post_submited') {
1472
            $subject = __(get_option('post_submited_success_email_subject_admin'),'geodirectory');
1473
            $client_message = __(get_option('post_submited_success_email_content_admin'),'geodirectory');
1474
        } elseif ($message_type == 'renew') {
1475
            $subject = __(get_option('post_renew_success_email_subject_admin'),'geodirectory');
1476
            $client_message = __(get_option('post_renew_success_email_content_admin'),'geodirectory');
1477
        } elseif ($message_type == 'upgrade') {
1478
            $subject = __(get_option('post_upgrade_success_email_subject_admin'),'geodirectory');
1479
            $client_message = __(get_option('post_upgrade_success_email_content_admin'),'geodirectory');
1480
        } elseif ($message_type == 'claim_approved') {
1481
            $subject = __(get_option('claim_approved_email_subject'),'geodirectory');
1482
            $client_message = __(get_option('claim_approved_email_content'),'geodirectory');
1483
        } elseif ($message_type == 'claim_rejected') {
1484
            $subject = __(get_option('claim_rejected_email_subject'),'geodirectory');
1485
            $client_message = __(get_option('claim_rejected_email_content'),'geodirectory');
1486
        } elseif ($message_type == 'claim_requested') {
1487
            $subject = __(get_option('claim_email_subject_admin'),'geodirectory');
1488
            $client_message = __(get_option('claim_email_content_admin'),'geodirectory');
1489
        } elseif ($message_type == 'auto_claim') {
1490
            $subject = __(get_option('auto_claim_email_subject'),'geodirectory');
1491
            $client_message = __(get_option('auto_claim_email_content'),'geodirectory');
1492
        } elseif ($message_type == 'payment_success') {
1493
            $subject = __(get_option('post_payment_success_admin_email_subject'),'geodirectory');
1494
            $client_message = __(get_option('post_payment_success_admin_email_content'),'geodirectory');
1495
        } elseif ($message_type == 'payment_fail') {
1496
            $subject = __(get_option('post_payment_fail_admin_email_subject'),'geodirectory');
1497
            $client_message = __(get_option('post_payment_fail_admin_email_content'),'geodirectory');
1498
        }
1499
        $transaction_details = $custom_1;
1500
        $fromEmail = get_option('site_email');
1501
        $fromEmailName = get_site_emailName();
1502
//$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...
1503
        $pkg_limit = get_property_price_info_listing($page_id);
1504
        $alivedays = $pkg_limit['days'];
1505
        $productlink = get_permalink($page_id);
1506
        $post_info = get_post($page_id);
1507
        $post_date = date('dS F,Y', strtotime($post_info->post_date));
1508
        $listingLink = '<a href="' . $productlink . '"><b>' . $post_info->post_title . '</b></a>';
1509
        $loginurl = geodir_login_url();
1510
        $loginurl_link = '<a href="' . $loginurl . '">login</a>';
1511
        $siteurl = home_url();
1512
        $siteurl_link = '<a href="' . $siteurl . '">' . $fromEmailName . '</a>';
1513
        $user_info = get_userdata($user_id);
1514
        $user_email = $user_info->user_email;
1515
        $display_name = geodir_get_client_name($user_id);
1516
        $user_login = $user_info->user_login;
1517
        $number_of_grace_days = get_option('ptthemes_listing_preexpiry_notice_days');
1518
        if ($number_of_grace_days == '') {
1519
            $number_of_grace_days = 1;
1520
        }
1521
        if ($post_info->post_type == 'event') {
1522
            $post_type = 'event';
1523
        } else {
1524
            $post_type = 'listing';
1525
        }
1526
        $renew_link = '<a href="' . $siteurl . '?ptype=post_' . $post_type . '&renew=1&pid=' . $page_id . '">' . RENEW_LINK . '</a>';
1527
        $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#]');
1528
        $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);
1529
        $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...
1530
        $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...
1531
        $headers = 'MIME-Version: 1.0' . "\r\n";
1532
        $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
1533
        $headers .= 'From: ' . $fromEmailName . ' <' . $fromEmail . '>' . "\r\n";
1534
1535
        $to = $fromEmail;
1536
        $message = $client_message;
1537
1538
1539
        /**
1540
         * Filter the admin email to address.
1541
         *
1542
         * @since 1.6.1
1543
         * @package GeoDirectory
1544
         * @param string $to The email address the email is being sent to.
1545
         * @param int|string $page_id Page ID.
1546
         * @param int|string $user_id User ID.
1547
         * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1548
         * @param string $custom_1 Custom data to be sent.
1549
         */
1550
        $to = apply_filters('geodir_adminEmail_to',$to,$page_id, $user_id, $message_type, $custom_1 );
1551
        /**
1552
         * Filter the admin email subject.
1553
         *
1554
         * @since 1.6.1
1555
         * @package GeoDirectory_Payment_Manager
1556
         * @param string $subject The email subject.
1557
         * @param int|string $page_id Page ID.
1558
         * @param int|string $user_id User ID.
1559
         * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1560
         * @param string $custom_1 Custom data to be sent.
1561
         */
1562
        $subject = apply_filters('geodir_adminEmail_subject',$subject,$page_id, $user_id, $message_type, $custom_1);
1563
        /**
1564
         * Filter the admin email message.
1565
         *
1566
         * @since 1.6.1
1567
         * @package GeoDirectory_Payment_Manager
1568
         * @param string $message The email message text.
1569
         * @param int|string $page_id Page ID.
1570
         * @param int|string $user_id User ID.
1571
         * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1572
         * @param string $custom_1 Custom data to be sent.
1573
         */
1574
        $message = apply_filters('geodir_adminEmail_message',$message,$page_id, $user_id, $message_type, $custom_1);
1575
        /**
1576
         * Filter the admin email headers.
1577
         *
1578
         * @since 1.6.1
1579
         * @package GeoDirectory_Payment_Manager
1580
         * @param string $headers The email headers.
1581
         * @param int|string $page_id Page ID.
1582
         * @param int|string $user_id User ID.
1583
         * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1584
         * @param string $custom_1 Custom data to be sent.
1585
         */
1586
        $headers = apply_filters('geodir_adminEmail_headers',$headers,$page_id, $user_id, $message_type, $custom_1);
1587
1588
1589
1590
        $sent = wp_mail($to, $subject, $message, $headers);
1591
        if( ! $sent ) {
1592
            if ( is_array( $to ) ) {
1593
                $to = implode( ',', $to );
1594
            }
1595
            $log_message = sprintf(
1596
                __( "Email from GeoDirectory failed to send.\nMessage type: %s\nSend time: %s\nTo: %s\nSubject: %s\n\n", 'geodirectory' ),
1597
                $message_type,
1598
                date_i18n( 'F j Y H:i:s', current_time( 'timestamp' ) ),
1599
                $to,
1600
                $subject
1601
            );
1602
            geodir_error_log( $log_message );
1603
        }
1604
    }
1605
}
1606
1607
if (!function_exists('sendEmail')) {
1608
    /**
1609
     * @todo could be a duplicate of geodir_sendEmail.
1610
     *
1611
     * @since 1.0.0
1612
     * @package GeoDirectory
1613
     * @param string $fromEmail Sender email address.
1614
     * @param string $fromEmailName Sender name.
1615
     * @param string $toEmail Receiver email address.
1616
     * @param string $toEmailName Receiver name.
1617
     * @param string $to_subject Email subject.
1618
     * @param string $to_message Email content.
1619
     * @param string $extra Not being used.
1620
     * @param string $message_type The message type. Can be send_friend, send_enquiry, forgot_password, registration.
1621
     * @param string $post_id The post ID.
1622
     * @param string $user_id The user ID.
1623
     */
1624
    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...
1625
    {
1626
        $login_details = '';
1627
        if ($message_type == 'send_friend') {
1628
            $subject = stripslashes(__(get_option('email_friend_subject'),'geodirectory'));
1629
            $message = stripslashes(__(get_option('email_friend_content'),'geodirectory'));
1630
        } elseif ($message_type == 'send_enquiry') {
1631
            $subject = __(get_option('email_enquiry_subject'),'geodirectory');
1632
            $message = __(get_option('email_enquiry_content'),'geodirectory');
1633
        } elseif ($message_type == 'forgot_password') {
1634
            $subject = __(get_option('forgot_password_subject'),'geodirectory');
1635
            $message = __(get_option('forgot_password_content'),'geodirectory');
1636
            $login_details = $to_message;
1637
        } elseif ($message_type == 'registration') {
1638
            $subject = __(get_option('registration_success_email_subject'),'geodirectory');
1639
            $message = __(get_option('registration_success_email_content'),'geodirectory');
1640
            $login_details = $to_message;
1641
        }
1642
        $to_message = nl2br($to_message);
1643
        $sitefromEmail = get_option('site_email');
1644
        $sitefromEmailName = get_site_emailName();
1645
        $productlink = get_permalink($post_id);
1646
        $post_info = get_post($post_id);
1647
        $listingLink = '<a href="' . $productlink . '"><b>' . $post_info->post_title . '</b></a>';
1648
        $siteurl = home_url();
1649
        $siteurl_link = '<a href="' . $siteurl . '">' . $siteurl . '</a>';
1650
        $loginurl = geodir_login_url();
1651
        $loginurl_link = '<a href="' . $loginurl . '">login</a>';
1652
        if ($fromEmail == '') {
1653
            $fromEmail = get_option('site_email');
1654
        }
1655
        if ($fromEmailName == '') {
1656
            $fromEmailName = get_option('site_email_name');
1657
        }
1658
        $search_array = array('[#listing_link#]', '[#site_name_url#]', '[#post_id#]', '[#site_name#]', '[#to_name#]', '[#from_name#]', '[#subject#]', '[#comments#]', '[#login_url#]', '[#login_details#]', '[#client_name#]');
1659
        $replace_array = array($listingLink, $siteurl_link, $post_id, $sitefromEmailName, $toEmailName, $fromEmailName, $to_subject, $to_message, $loginurl_link, $login_details, $toEmailName);
1660
        $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...
1661
1662
        $search_array = array('[#listing_link#]', '[#site_name_url#]', '[#post_id#]', '[#site_name#]', '[#to_name#]', '[#from_name#]', '[#subject#]', '[#client_name#]');
1663
        $replace_array = array($listingLink, $siteurl_link, $post_id, $sitefromEmailName, $toEmailName, $fromEmailName, $to_subject, $toEmailName);
1664
        $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...
1665
        $headers = 'MIME-Version: 1.0' . "\r\n";
1666
        $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
1667
        $headers .= "Reply-To: " . $fromEmail . "\r\n";
1668
        $headers .= 'From: ' . $sitefromEmailName . ' <' . $sitefromEmail . '>' . "\r\n";
1669
1670
        $to = $toEmail;
1671
1672
        $sent = wp_mail($to, $subject, $message, $headers);
1673
        if( ! $sent ) {
1674
            if ( is_array( $to ) ) {
1675
                $to = implode( ',', $to );
1676
            }
1677
            $log_message = sprintf(
1678
                __( "Email from GeoDirectory failed to send.\nMessage type: %s\nSend time: %s\nTo: %s\nSubject: %s\n\n", 'geodirectory' ),
1679
                $message_type,
1680
                date_i18n( 'F j Y H:i:s', current_time( 'timestamp' ) ),
1681
                $to,
1682
                $subject
1683
            );
1684
            geodir_error_log( $log_message );
1685
        }
1686
1687
        ///////// ADMIN BCC EMIALS
1688
        $admin_bcc = false;
1689
        if ($message_type == 'registration') {
1690
            $message_raw = explode(__("Password:", 'geodirectory'), $message);
1691
            $message_raw2 = explode("</p>", $message_raw[1], 2);
1692
            $message = $message_raw[0] . __('Password:', 'geodirectory') . ' **********</p>' . $message_raw2[1];
1693
        }
1694
        $adminEmail = get_bloginfo('admin_email');
1695
        $to = $adminEmail;
1696
1697
        if ($message_type == 'registration' && get_option('bcc_new_user')) {
1698
            $subject .= ' - ADMIN BCC COPY';
1699
            $admin_bcc = true;
1700
        }
1701
        elseif ($message_type == 'send_friend' && get_option('bcc_friend')) {
1702
            $subject .= ' - ADMIN BCC COPY';
1703
            $admin_bcc = true;
1704
        }
1705
        elseif ($message_type == 'send_enquiry' && get_option('bcc_enquiry')) {
1706
            $subject .= ' - ADMIN BCC COPY';
1707
            $admin_bcc = true;
1708
        }
1709
1710 View Code Duplication
        if($admin_bcc === true){
1711
            $sent = wp_mail($to, $subject, $message, $headers);
1712
            if( ! $sent ) {
1713
                if ( is_array( $to ) ) {
1714
                    $to = implode( ',', $to );
1715
                }
1716
                $log_message = sprintf(
1717
                    __( "Email from GeoDirectory failed to send.\nMessage type: %s\nSend time: %s\nTo: %s\nSubject: %s\n\n", 'geodirectory' ),
1718
                    $message_type,
1719
                    date_i18n( 'F j Y H:i:s', current_time( 'timestamp' ) ),
1720
                    $to,
1721
                    $subject
1722
                );
1723
                geodir_error_log( $log_message );
1724
            }
1725
        }
1726
1727
    }
1728
}
1729
1730
/*
1731
Language translation helper functions
1732
*/
1733
1734
/**
1735
 * Function to get the translated category id's.
1736
 *
1737
 * @since 1.0.0
1738
 * @package GeoDirectory
1739
 * @param array $ids_array Category IDs.
1740
 * @param string $type Category taxonomy.
1741
 * @return array Category IDs.
1742
 */
1743
function gd_lang_object_ids($ids_array, $type)
1744
{
1745
    if (function_exists('icl_object_id')) {
1746
        $res = array();
1747
        foreach ($ids_array as $id) {
1748
            $xlat = icl_object_id($id, $type, false);
1749
            if (!is_null($xlat)) $res[] = $xlat;
1750
        }
1751
        return $res;
1752
    } else {
1753
        return $ids_array;
1754
    }
1755
}
1756
1757
1758
/**
1759
 * function to add class to body when multi post type is active.
1760
 *
1761
 * @since 1.0.0
1762
 * @since 1.5.6 Add geodir-page class to body for all gd pages.
1763
 * @package GeoDirectory
1764
 * @global object $wpdb WordPress Database object.
1765
 * @param array $classes Body CSS classes.
1766
 * @return array Modified Body CSS classes.
1767
 */
1768
function geodir_custom_posts_body_class($classes) {
1769 7
    global $wpdb, $wp;
1770 7
    $post_types = geodir_get_posttypes('object');
1771 7
    if (!empty($post_types) && count((array)$post_types) > 1) {
1772
        $classes[] = 'geodir_custom_posts';
1773
    }
1774
1775
    // fix body class for signup page
1776 7
    if (geodir_is_page('login')) {
1777
        $new_classes = array();
1778
        $new_classes[] = 'signup page-geodir-signup';
1779
        if (!empty($classes)) {
1780
            foreach ($classes as $class) {
1781
                if ($class && $class != 'home' && $class != 'blog') {
1782
                    $new_classes[] = $class;
1783
                }
1784
            }
1785
        }
1786
        $classes = $new_classes;
1787
    }
1788
1789 7
    if (geodir_is_geodir_page()) {
1790
        $classes[] = 'geodir-page';
1791
    }
1792
1793 7
    return $classes;
1794
}
1795
1796
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
1797
1798
1799
/**
1800
 * Returns available map zoom levels.
1801
 *
1802
 * @since 1.0.0
1803
 * @package GeoDirectory
1804
 * @return array Available map zoom levels.
1805
 */
1806
function geodir_map_zoom_level()
1807
{
1808
    /**
1809
     * Filter GD map zoom level.
1810
     *
1811
     * @since 1.0.0
1812
     */
1813 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));
1814
1815
}
1816
1817
1818
/**
1819
 * This function takes backup of an option so they can be restored later.
1820
 *
1821
 * @since 1.0.0
1822
 * @package GeoDirectory
1823
 * @param string $geodir_option_name Option key.
1824
 */
1825
function geodir_option_version_backup($geodir_option_name)
1826
{
1827
    $version_date = time();
1828
    $geodir_option = get_option($geodir_option_name);
1829
1830
    if (!empty($geodir_option)) {
1831
        add_option($geodir_option_name . '_' . $version_date, $geodir_option);
1832
    }
1833
}
1834
1835
/**
1836
 * display add listing page for wpml.
1837
 *
1838
 * @since 1.0.0
1839
 * @package GeoDirectory
1840
 * @param int $page_id The page ID.
1841
 * @return int Page ID.
1842
 */
1843
function get_page_id_geodir_add_listing_page($page_id)
1844
{
1845 18
    if (geodir_wpml_multilingual_status()) {
1846
        $post_type = 'post_page';
1847
        $page_id = geodir_get_wpml_element_id($page_id, $post_type);
1848
    }
1849 18
    return $page_id;
1850
}
1851
1852
/**
1853
 * Returns wpml multilingual status.
1854
 *
1855
 * @since 1.0.0
1856
 * @package GeoDirectory
1857
 * @return bool Returns true when sitepress multilingual CMS active. else returns false.
1858
 */
1859
function geodir_wpml_multilingual_status()
1860
{
1861 18
    if (function_exists('icl_object_id')) {
1862
        return true;
1863
    }
1864 18
    return false;
1865
}
1866
1867
/**
1868
 * Returns WPML element ID.
1869
 *
1870
 * @since 1.0.0
1871
 * @package GeoDirectory
1872
 * @param int $page_id The page ID.
1873
 * @param string $post_type The post type.
1874
 * @return int Element ID when exists. Else the page id.
1875
 */
1876
function geodir_get_wpml_element_id($page_id, $post_type)
1877
{
1878
    global $sitepress;
1879
    if (geodir_wpml_multilingual_status() && !empty($sitepress) && isset($sitepress->queries)) {
1880
        $trid = $sitepress->get_element_trid($page_id, $post_type);
1881
1882
        if ($trid > 0) {
1883
            $translations = $sitepress->get_element_translations($trid, $post_type);
1884
1885
            $lang = $sitepress->get_current_language();
1886
            $lang = $lang ? $lang : $sitepress->get_default_language();
1887
1888
            if (!empty($translations) && !empty($lang) && isset($translations[$lang]) && isset($translations[$lang]->element_id) && !empty($translations[$lang]->element_id)) {
1889
                $page_id = $translations[$lang]->element_id;
1890
            }
1891
        }
1892
    }
1893
    return $page_id;
1894
}
1895
1896
/**
1897
 * WPML check elemet ID.
1898
 *
1899
 * @since 1.0.0
1900
 * @package GeoDirectory
1901
 * @deprecated 1.4.6 No longer needed as we handel translating GD pages as normal now.
1902
 */
1903
function geodir_wpml_check_element_id()
1904
{
1905
    global $sitepress;
1906
    if (geodir_wpml_multilingual_status() && !empty($sitepress) && isset($sitepress->queries)) {
1907
        $el_type = 'post_page';
1908
        $el_id = get_option('geodir_add_listing_page');
1909
        $default_lang = $sitepress->get_default_language();
1910
        $el_details = $sitepress->get_element_language_details($el_id, $el_type);
1911
1912
        if (!($el_id > 0 && $default_lang && !empty($el_details) && isset($el_details->language_code) && $el_details->language_code == $default_lang)) {
1913
            if (!$el_details->source_language_code) {
1914
                $sitepress->set_element_language_details($el_id, $el_type, '', $default_lang);
1915
                $sitepress->icl_translations_cache->clear();
1916
            }
1917
        }
1918
    }
1919
}
1920
1921
/**
1922
 * Returns orderby SQL using the given query args.
1923
 *
1924
 * @since 1.0.0
1925
 * @package GeoDirectory
1926
 * @global object $wpdb WordPress Database object.
1927
 * @global string $plugin_prefix Geodirectory plugin table prefix.
1928
 * @param array $query_args The query array.
1929
 * @return string Orderby SQL.
1930
 */
1931
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...
1932
{
1933 8
    global $wpdb, $plugin_prefix, $gd_query_args_widgets;
1934
1935 8
    $query_args = $gd_query_args_widgets;
1936 8
    if (empty($query_args) || empty($query_args['is_geodir_loop'])) {
1937
        return $wpdb->posts . ".post_date DESC, ";
1938
    }
1939
1940 8
    $post_type = empty($query_args['post_type']) ? 'gd_place' : $query_args['post_type'];
1941 8
    $table = $plugin_prefix . $post_type . '_detail';
1942
1943 8
    $sort_by = !empty($query_args['order_by']) ? $query_args['order_by'] : '';
1944
1945
    switch ($sort_by) {
1946 8
        case 'latest':
1947 8
        case 'newest':
1948 4
            $orderby = $wpdb->posts . ".post_date DESC, ";
1949 4
            break;
1950 4
        case 'featured':
1951
            $orderby = $table . ".is_featured ASC, ";
1952
            break;
1953 4
        case 'az':
1954
            $orderby = $wpdb->posts . ".post_title ASC, ";
1955
            break;
1956 4
        case 'high_review':
1957 3
            $orderby = $table . ".rating_count DESC, " . $table . ".overall_rating DESC, ";
1958 3
            break;
1959 1
        case 'high_rating':
1960
            $orderby = "( " . $table . ".overall_rating  ) DESC, ";
1961
            break;
1962 1
        case 'random':
1963
            $orderby = "RAND(), ";
1964
            break;
1965 1
        default:
1966 1
            $orderby = $wpdb->posts . ".post_title ASC, ";
1967 1
            break;
1968 1
    }
1969
1970 8
    return $orderby;
1971
}
1972
1973
/**
1974
 * Retrieve listings/count using requested filter parameters.
1975
 *
1976
 * @since 1.0.0
1977
 * @package GeoDirectory
1978
 * @since 1.4.2 New paramater $count_only added
1979
 * @global object $wpdb WordPress Database object.
1980
 * @global string $plugin_prefix Geodirectory plugin table prefix.
1981
 * @global string $table_prefix WordPress Database Table prefix.
1982
 * @param array $query_args The query array.
1983
 * @param  int|bool $count_only If true returns listings count only, otherwise returns array
1984
 * @return mixed Result object.
1985
 */
1986
function geodir_get_widget_listings($query_args = array(), $count_only = false)
1987
{
1988 8
    global $wpdb, $plugin_prefix, $table_prefix;
1989 8
    $GLOBALS['gd_query_args_widgets'] = $query_args;
1990 8
    $gd_query_args_widgets = $query_args;
1991
1992 8
    $post_type = empty($query_args['post_type']) ? 'gd_place' : $query_args['post_type'];
1993 8
    $table = $plugin_prefix . $post_type . '_detail';
1994
1995 8
    $fields = $wpdb->posts . ".*, " . $table . ".*";
1996
    /**
1997
     * Filter widget listing fields string part that is being used for query.
1998
     *
1999
     * @since 1.0.0
2000
     * @param string $fields Fields string.
2001
     * @param string $table Table name.
2002
     * @param string $post_type Post type.
2003
     */
2004 8
    $fields = apply_filters('geodir_filter_widget_listings_fields', $fields, $table, $post_type);
2005
2006 8
    $join = "INNER JOIN " . $table . " ON (" . $table . ".post_id = " . $wpdb->posts . ".ID)";
2007
2008
    ########### WPML ###########
2009
2010 8
    if (function_exists('icl_object_id')) {
2011
        global $sitepress;
2012
        $lang_code = ICL_LANGUAGE_CODE;
2013
        if ($lang_code) {
2014
            $join .= " JOIN " . $table_prefix . "icl_translations icl_t ON icl_t.element_id = " . $table_prefix . "posts.ID";
2015
        }
2016
    }
2017
2018
    ########### WPML ###########
2019
2020
    /**
2021
     * Filter widget listing join clause string part that is being used for query.
2022
     *
2023
     * @since 1.0.0
2024
     * @param string $join Join clause string.
2025
     * @param string $post_type Post type.
2026
     */
2027 8
    $join = apply_filters('geodir_filter_widget_listings_join', $join, $post_type);
2028
2029 8
    $post_status = is_super_admin() ? " OR " . $wpdb->posts . ".post_status = 'private'" : '';
2030
2031 8
    $where = " AND ( " . $wpdb->posts . ".post_status = 'publish' " . $post_status . " ) AND " . $wpdb->posts . ".post_type = '" . $post_type . "'";
2032
2033
    ########### WPML ###########
2034 8
    if (function_exists('icl_object_id')) {
2035
        if ($lang_code) {
2036
            $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...
2037
        }
2038
    }
2039
    ########### WPML ###########
2040
    /**
2041
     * Filter widget listing where clause string part that is being used for query.
2042
     *
2043
     * @since 1.0.0
2044
     * @param string $where Where clause string.
2045
     * @param string $post_type Post type.
2046
     */
2047 8
    $where = apply_filters('geodir_filter_widget_listings_where', $where, $post_type);
2048 8
    $where = $where != '' ? " WHERE 1=1 " . $where : '';
2049
2050 8
    $groupby = " GROUP BY $wpdb->posts.ID ";
2051
    /**
2052
     * Filter widget listing groupby clause string part that is being used for query.
2053
     *
2054
     * @since 1.0.0
2055
     * @param string $groupby Group by clause string.
2056
     * @param string $post_type Post type.
2057
     */
2058 8
    $groupby = apply_filters('geodir_filter_widget_listings_groupby', $groupby, $post_type);
2059
2060 8
    if ($count_only) {
2061 1
        $sql = "SELECT COUNT(" . $wpdb->posts . ".ID) AS total FROM " . $wpdb->posts . "
2062 1
			" . $join . "
2063 1
			" . $where;
2064 1
        $rows = (int)$wpdb->get_var($sql);
2065 1
    } else {
2066 8
        $orderby = geodir_widget_listings_get_order($query_args);
2067
        /**
2068
         * Filter widget listing orderby clause string part that is being used for query.
2069
         *
2070
         * @since 1.0.0
2071
         * @param string $orderby Order by clause string.
2072
         * @param string $table Table name.
2073
         * @param string $post_type Post type.
2074
         */
2075 8
        $orderby = apply_filters('geodir_filter_widget_listings_orderby', $orderby, $table, $post_type);
2076 8
        $orderby .= $wpdb->posts . ".post_title ASC";
2077 8
        $orderby = $orderby != '' ? " ORDER BY " . $orderby : '';
2078
2079 8
        $limit = !empty($query_args['posts_per_page']) ? $query_args['posts_per_page'] : 5;
2080
        /**
2081
         * Filter widget listing limit that is being used for query.
2082
         *
2083
         * @since 1.0.0
2084
         * @param int $limit Query results limit.
2085
         * @param string $post_type Post type.
2086
         */
2087 8
        $limit = apply_filters('geodir_filter_widget_listings_limit', $limit, $post_type);
2088
2089 8
        $page = !empty($query_args['pageno']) ? absint($query_args['pageno']) : 1;
2090 8
        if ( !$page )
2091 8
            $page = 1;
2092
2093 8
        $limit = (int)$limit > 0 ? " LIMIT " . absint( ( $page - 1 ) * (int)$limit ) . ", " . (int)$limit : "";
2094
2095 8
        $sql = "SELECT SQL_CALC_FOUND_ROWS " . $fields . " FROM " . $wpdb->posts . "
2096 8
			" . $join . "
2097 8
			" . $where . "
2098 8
			" . $groupby . "
2099 8
			" . $orderby . "
2100 8
			" . $limit;
2101 8
        $rows = $wpdb->get_results($sql);
2102
    }
2103
2104 8
    unset($GLOBALS['gd_query_args_widgets']);
2105 8
    unset($gd_query_args_widgets);
2106
2107 8
    return $rows;
2108
}
2109
2110
/**
2111
 * Listing query fields SQL part for widgets.
2112
 *
2113
 * @since 1.0.0
2114
 * @package GeoDirectory
2115
 * @global object $wpdb WordPress Database object.
2116
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2117
 * @param string $fields Fields SQL.
2118
 * @return string Modified fields SQL.
2119
 */
2120
function geodir_function_widget_listings_fields($fields)
2121
{
2122 8
    global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2123
2124 8
    $query_args = $gd_query_args_widgets;
2125 8
    if (empty($query_args) || empty($query_args['is_geodir_loop'])) {
2126
        return $fields;
2127
    }
2128
    
2129 8
    return $fields;
2130
}
2131
2132
/**
2133
 * Listing query join clause SQL part for widgets.
2134
 *
2135
 * @since 1.0.0
2136
 * @package GeoDirectory
2137
 * @global object $wpdb WordPress Database object.
2138
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2139
 * @param string $join Join clause SQL.
2140
 * @return string Modified join clause SQL.
2141
 */
2142
function geodir_function_widget_listings_join($join)
2143
{
2144 8
    global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2145
2146 8
    $query_args = $gd_query_args_widgets;
2147 8
    if (empty($query_args) || empty($query_args['is_geodir_loop'])) {
2148
        return $join;
2149
    }
2150
2151 8
    $post_type = empty($query_args['post_type']) ? 'gd_place' : $query_args['post_type'];
2152 8
    $table = $plugin_prefix . $post_type . '_detail';
2153
2154 8 View Code Duplication
    if (!empty($query_args['with_pics_only'])) {
2155
        $join .= " LEFT JOIN " . GEODIR_ATTACHMENT_TABLE . " ON ( " . GEODIR_ATTACHMENT_TABLE . ".post_id=" . $table . ".post_id AND " . GEODIR_ATTACHMENT_TABLE . ".mime_type LIKE '%image%' )";
2156
    }
2157
2158 8 View Code Duplication
    if (!empty($query_args['tax_query'])) {
2159 4
        $tax_queries = get_tax_sql($query_args['tax_query'], $wpdb->posts, 'ID');
2160 4
        if (!empty($tax_queries['join']) && !empty($tax_queries['where'])) {
2161 2
            $join .= $tax_queries['join'];
2162 2
        }
2163 4
    }
2164
2165 8
    return $join;
2166
}
2167
2168
/**
2169
 * Listing query where clause SQL part for widgets.
2170
 *
2171
 * @since 1.0.0
2172
 * @package GeoDirectory
2173
 * @global object $wpdb WordPress Database object.
2174
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2175
 * @param string $where Where clause SQL.
2176
 * @return string Modified where clause SQL.
2177
 */
2178
function geodir_function_widget_listings_where($where)
2179
{
2180 8
    global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2181
2182 8
    $query_args = $gd_query_args_widgets;
2183 8
    if (empty($query_args) || empty($query_args['is_geodir_loop'])) {
2184
        return $where;
2185
    }
2186 8
    $post_type = empty($query_args['post_type']) ? 'gd_place' : $query_args['post_type'];
2187 8
    $table = $plugin_prefix . $post_type . '_detail';
2188
2189 8
    if (!empty($query_args)) {
2190 8
        if (!empty($query_args['gd_location']) && function_exists('geodir_default_location_where')) {
2191
            $where = geodir_default_location_where($where, $table);
2192
        }
2193
2194 8
        if (!empty($query_args['post_author'])) {
2195
            $where .= " AND " . $wpdb->posts . ".post_author = " . (int)$query_args['post_author'];
2196
        }
2197
        
2198 8
        if (!empty($query_args['show_featured_only'])) {
2199 2
            $where .= " AND " . $table . ".is_featured = '1'";
2200 2
        }
2201
2202 8
        if (!empty($query_args['show_special_only'])) {
2203
            $where .= " AND ( " . $table . ".geodir_special_offers != '' AND " . $table . ".geodir_special_offers IS NOT NULL )";
2204
        }
2205
2206 8
        if (!empty($query_args['with_pics_only'])) {
2207
            $where .= " AND " . GEODIR_ATTACHMENT_TABLE . ".ID IS NOT NULL ";
2208
        }
2209
2210 8
        if (!empty($query_args['featured_image_only'])) {
2211 2
            $where .= " AND " . $table . ".featured_image IS NOT NULL AND " . $table . ".featured_image!='' ";
2212 2
        }
2213
2214 8
        if (!empty($query_args['with_videos_only'])) {
2215
            $where .= " AND ( " . $table . ".geodir_video != '' AND " . $table . ".geodir_video IS NOT NULL )";
2216
        }
2217
2218 8 View Code Duplication
        if (!empty($query_args['tax_query'])) {
2219 4
            $tax_queries = get_tax_sql($query_args['tax_query'], $wpdb->posts, 'ID');
2220
2221 4
            if (!empty($tax_queries['join']) && !empty($tax_queries['where'])) {
2222 2
                $where .= $tax_queries['where'];
2223 2
            }
2224 4
        }
2225 8
    }
2226
2227 8
    return $where;
2228
}
2229
2230
/**
2231
 * Listing query orderby clause SQL part for widgets.
2232
 *
2233
 * @since 1.0.0
2234
 * @package GeoDirectory
2235
 * @global object $wpdb WordPress Database object.
2236
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2237
 * @param string $orderby Orderby clause SQL.
2238
 * @return string Modified orderby clause SQL.
2239
 */
2240
function geodir_function_widget_listings_orderby($orderby)
2241
{
2242 8
    global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2243
2244 8
    $query_args = $gd_query_args_widgets;
2245 8
    if (empty($query_args) || empty($query_args['is_geodir_loop'])) {
2246
        return $orderby;
2247
    }
2248
2249 8
    return $orderby;
2250
}
2251
2252
/**
2253
 * Listing query limit for widgets.
2254
 *
2255
 * @since 1.0.0
2256
 * @package GeoDirectory
2257
 * @global object $wpdb WordPress Database object.
2258
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2259
 * @param int $limit Query limit.
2260
 * @return int Query limit.
2261
 */
2262
function geodir_function_widget_listings_limit($limit)
2263
{
2264 8
    global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2265
2266 8
    $query_args = $gd_query_args_widgets;
2267 8
    if (empty($query_args) || empty($query_args['is_geodir_loop'])) {
2268
        return $limit;
2269
    }
2270
2271 8
    if (!empty($query_args) && !empty($query_args['posts_per_page'])) {
2272 8
        $limit = (int)$query_args['posts_per_page'];
2273 8
    }
2274
2275 8
    return $limit;
2276
}
2277
2278
/**
2279
 * WP media large width.
2280
 *
2281
 * @since 1.0.0
2282
 * @package GeoDirectory
2283
 * @param int $default Default width.
2284
 * @param string|array $params Image parameters.
2285
 * @return int Large size width.
2286
 */
2287 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...
2288
{
2289 2
    $large_size_w = get_option('large_size_w');
2290 2
    $large_size_w = $large_size_w > 0 ? $large_size_w : $default;
2291 2
    $large_size_w = absint($large_size_w);
2292
2293 2
    if (!get_option('geodir_use_wp_media_large_size')) {
2294 2
        $large_size_w = 800;
2295 2
    }
2296
2297
    /**
2298
     * Filter large image width.
2299
     *
2300
     * @since 1.0.0
2301
     * @param int $large_size_w Large image width.
2302
     * @param int $default Default width.
2303
     * @param string|array $params Image parameters.
2304
     */
2305 2
    $large_size_w = apply_filters('geodir_filter_media_image_large_width', $large_size_w, $default, $params);
2306 2
    return $large_size_w;
2307
}
2308
2309
/**
2310
 * WP media large height.
2311
 *
2312
 * @since 1.0.0
2313
 * @package GeoDirectory
2314
 * @param int $default Default height.
2315
 * @param string $params Image parameters.
2316
 * @return int Large size height.
2317
 */
2318 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...
2319
{
2320 2
    $large_size_h = get_option('large_size_h');
2321 2
    $large_size_h = $large_size_h > 0 ? $large_size_h : $default;
2322 2
    $large_size_h = absint($large_size_h);
2323
2324 2
    if (!get_option('geodir_use_wp_media_large_size')) {
2325 2
        $large_size_h = 800;
2326 2
    }
2327
2328
    /**
2329
     * Filter large image height.
2330
     *
2331
     * @since 1.0.0
2332
     * @param int $large_size_h Large image height.
2333
     * @param int $default Default height.
2334
     * @param string|array $params Image parameters.
2335
     */
2336 2
    $large_size_h = apply_filters('geodir_filter_media_image_large_height', $large_size_h, $default, $params);
2337
2338 2
    return $large_size_h;
2339
}
2340
2341
/**
2342
 * Sanitize location name.
2343
 *
2344
 * @since 1.0.0
2345
 * @package GeoDirectory
2346
 * @param string $type Location type. Can be gd_country, gd_region, gd_city.
2347
 * @param string $name Location name.
2348
 * @param bool $translate Do you want to translate the name? Default: true.
2349
 * @return string Sanitized name.
2350
 */
2351
function geodir_sanitize_location_name($type, $name, $translate = true)
2352
{
2353
    if ($name == '') {
2354
        return NULL;
2355
    }
2356
2357
    $type = $type == 'gd_country' ? 'country' : $type;
2358
    $type = $type == 'gd_region' ? 'region' : $type;
2359
    $type = $type == 'gd_city' ? 'city' : $type;
2360
2361
    $return = $name;
2362
    if (function_exists('get_actual_location_name')) {
2363
        $return = get_actual_location_name($type, $name, $translate);
2364
    } else {
2365
        $return = preg_replace('/-(\d+)$/', '', $return);
2366
        $return = preg_replace('/[_-]/', ' ', $return);
2367
        $return = geodir_ucwords($return);
2368
        $return = $translate ? __($return, 'geodirectory') : $return;
2369
    }
2370
2371
    return $return;
2372
}
2373
2374
2375
/**
2376
 * Pluralize comment number.
2377
 *
2378
 * @since 1.0.0
2379
 * @package GeoDirectory
2380
 * @param int $number Comments number.
2381
 */
2382
function geodir_comments_number($number)
2383
{
2384
2385 9
    if ($number > 1) {
2386
        $output = str_replace('%', number_format_i18n($number), __('% Reviews', 'geodirectory'));
2387 9
    } elseif ($number == 0 || $number == '') {
2388 9
        $output = __('No Reviews', 'geodirectory');
2389 9
    } else { // must be one
2390 4
        $output = __('1 Review', 'geodirectory');
2391
    }
2392 9
    echo $output;
2393 9
}
2394
2395
/**
2396
 * Checks whether the current page is geodirectory home page or not.
2397
 *
2398
 * @since 1.0.0
2399
 * @package GeoDirectory
2400
 * @global object $wpdb WordPress Database object.
2401
 * @return bool If current page is GD home page returns true, else false.
2402
 */
2403
function is_page_geodir_home()
2404
{
2405 8
    global $wpdb;
2406 8
    $cur_url = str_replace(array("https://", "http://", "www."), array('', '', ''), geodir_curPageURL());
2407 8
    if (function_exists('geodir_location_geo_home_link')) {
2408
        remove_filter('home_url', 'geodir_location_geo_home_link', 100000);
2409
    }
2410 8
    $home_url = home_url('', 'http');
2411 8
    if (function_exists('geodir_location_geo_home_link')) {
2412
        add_filter('home_url', 'geodir_location_geo_home_link', 100000, 2);
2413
    }
2414 8
    $home_url = str_replace("www.", "", $home_url);
2415 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')) ) {
2416
        return true;
2417 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')){
2418
        return true;
2419
    } else {
2420 8
        return false;
2421
    }
2422
2423
}
2424
2425
2426
/**
2427
 * Returns homepage canonical url for SEO plugins.
2428
 *
2429
 * @since 1.0.0
2430
 * @package GeoDirectory
2431
 * @global object $post The current post object.
2432
 * @param string $url The old url.
2433
 * @return string The canonical URL.
2434
 */
2435
function geodir_wpseo_homepage_canonical($url)
2436
{
2437
    global $post;
2438
2439
    if (is_page_geodir_home()) {
2440
        return home_url();
2441
    }
2442
2443
    return $url;
2444
}
2445
2446
add_filter('wpseo_canonical', 'geodir_wpseo_homepage_canonical', 10);
2447
add_filter('aioseop_canonical_url', 'geodir_wpseo_homepage_canonical', 10);
2448
2449
/**
2450
 * Add extra fields to google maps script call.
2451
 *
2452
 * @since 1.0.0
2453
 * @package GeoDirectory
2454
 * @global object $post The current post object.
2455
 * @param string $extra Old extra string.
2456
 * @return string Modified extra string.
2457
 */
2458
function geodir_googlemap_script_extra_details_page($extra)
2459
{
2460 7
    global $post;
2461 7
    $add_google_places_api = false;
2462 7
    if (isset($post->post_content) && has_shortcode($post->post_content, 'gd_add_listing')) {
2463
        $add_google_places_api = true;
2464
    }
2465 7
    if (!str_replace('libraries=places', '', $extra) && (geodir_is_page('detail') || $add_google_places_api)) {
2466 1
        $extra .= "&amp;libraries=places";
2467 1
    }
2468
2469 7
    return $extra;
2470
}
2471
2472
add_filter('geodir_googlemap_script_extra', 'geodir_googlemap_script_extra_details_page', 101, 1);
2473
2474
2475
/**
2476
 * Generates popular post category HTML.
2477
 *
2478
 * @since 1.0.0
2479
 * @since 1.5.1 Added option to set default post type.
2480
 * @package GeoDirectory
2481
 * @global object $wpdb WordPress Database object.
2482
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2483
 * @global string $geodir_post_category_str The geodirectory post category.
2484
 * @param array|string $args Display arguments including before_title, after_title, before_widget, and after_widget.
2485
 * @param array|string $instance The settings for the particular instance of the widget.
2486
 */
2487
function geodir_popular_post_category_output($args = '', $instance = '')
2488
{
2489
    // prints the widget
2490 3
    global $wpdb, $plugin_prefix, $geodir_post_category_str;
2491 3
    extract($args, EXTR_SKIP);
2492
2493 3
    echo $before_widget;
2494
2495
    /** This filter is documented in geodirectory_widgets.php */
2496 3
    $title = empty($instance['title']) ? __('Popular Categories', 'geodirectory') : apply_filters('widget_title', __($instance['title'], 'geodirectory'));
2497
2498 3
    $gd_post_type = geodir_get_current_posttype();
2499
2500 3
    $category_limit = isset($instance['category_limit']) && $instance['category_limit'] > 0 ? (int)$instance['category_limit'] : 15;
2501 3
    if(!empty($gd_post_type)){
2502
        $default_post_type = $gd_post_type;
2503 3
    }elseif(isset($instance['default_post_type']) && gdsc_is_post_type_valid($instance['default_post_type']) ){
2504
        $default_post_type = $instance['default_post_type'];
2505
    }else{
2506 3
        $all_gd_post_type = geodir_get_posttypes();
2507 3
        $default_post_type = (isset($all_gd_post_type[0])) ? $all_gd_post_type[0] : '';
2508
    }
2509
2510 3
    $taxonomy = array();
2511 3
    if (!empty($gd_post_type)) {
2512
        $taxonomy[] = $gd_post_type . "category";
2513
    } else {
2514 3
        $taxonomy = geodir_get_taxonomies($gd_post_type);
2515
    }
2516
2517 3
    $terms = get_terms($taxonomy);
2518 3
    $a_terms = array();
2519 3
    $b_terms = array();
2520
2521 3
    foreach ($terms as $term) {
2522 3
        if ($term->count > 0) {
2523 3
            $a_terms[$term->taxonomy][] = $term;
2524 3
        }
2525 3
    }
2526
2527 3
    if (!empty($a_terms)) {
2528 3
        foreach ($a_terms as $b_key => $b_val) {
2529 3
            $b_terms[$b_key] = geodir_sort_terms($b_val, 'count');
2530 3
        }
2531
2532 3
        $default_taxonomy = $default_post_type != '' && isset($b_terms[$default_post_type . 'category']) ? $default_post_type . 'category' : '';
2533
2534 3
        $tax_change_output = '';
2535 3
        if (count($b_terms) > 1) {
2536
            $tax_change_output .= "<select data-limit='$category_limit' class='geodir-cat-list-tax'  onchange='geodir_get_post_term(this);'>";
2537
            foreach ($b_terms as $key => $val) {
2538
                $ptype = get_post_type_object(str_replace("category", "", $key));
2539
                $cpt_name = __($ptype->labels->singular_name, 'geodirectory');
2540
                $tax_change_output .= "<option value='$key' ". selected($key, $default_taxonomy, false) .">" . sprintf(__('%s Categories', 'geodirectory'),$cpt_name) . "</option>";
2541
            }
2542
            $tax_change_output .= "</select>";
2543
        }
2544
2545 3
        if (!empty($b_terms)) {
2546 3
            $terms = $default_taxonomy != '' && isset($b_terms[$default_taxonomy]) ? $b_terms[$default_taxonomy] : reset($b_terms);// get the first array
2547 3
            global $cat_count;//make global so we can change via function
2548 3
            $cat_count = 0;
2549
            ?>
2550
            <div class="geodir-category-list-in clearfix">
2551
                <div class="geodir-cat-list clearfix">
2552
                    <?php
2553 3
                    echo $before_title . __($title) . $after_title;
2554
2555 3
                    echo $tax_change_output;
2556
2557 3
                    echo '<ul class="geodir-popular-cat-list">';
2558
2559 3
                    geodir_helper_cat_list_output($terms, $category_limit);
2560
2561 3
                    echo '</ul>';
2562
                    ?>
2563
                </div>
2564
                <?php
2565 3
                $hide = '';
2566 3
                if ($cat_count < $category_limit) {
2567 3
                    $hide = 'style="display:none;"';
2568 3
                }
2569 3
                echo "<div class='geodir-cat-list-more' $hide >";
2570 3
                echo '<a href="javascript:void(0)" class="geodir-morecat geodir-showcat">' . __('More Categories', 'geodirectory') . '</a>';
2571 3
                echo '<a href="javascript:void(0)" class="geodir-morecat geodir-hidecat geodir-hide">' . __('Less Categories', 'geodirectory') . '</a>';
2572 3
                echo "</div>";
2573
                /* add scripts */
2574 3
                add_action('wp_footer', 'geodir_popular_category_add_scripts', 100);
2575
                ?>
2576
            </div>
2577
        <?php
2578 3
        }
2579 3
    }
2580 3
    echo $after_widget;
2581 3
}
2582
2583
/**
2584
 * Generates category list HTML.
2585
 *
2586
 * @since 1.0.0
2587
 * @package GeoDirectory
2588
 * @global string $geodir_post_category_str The geodirectory post category.
2589
 * @param array $terms An array of term objects.
2590
 * @param int $category_limit Number of categories to display by default.
2591
 */
2592
function geodir_helper_cat_list_output($terms, $category_limit)
2593
{
2594 3
    global $geodir_post_category_str, $cat_count;
2595 3
    $term_icons = geodir_get_term_icon();
2596
2597 3
    $geodir_post_category_str = array();
2598
2599
2600 3
    foreach ($terms as $cat) {
2601 3
        $post_type = str_replace("category", "", $cat->taxonomy);
2602 3
        $term_icon_url = !empty($term_icons) && isset($term_icons[$cat->term_id]) ? $term_icons[$cat->term_id] : '';
2603
2604 3
        $cat_count++;
2605
2606 3
        $geodir_post_category_str[] = array('posttype' => $post_type, 'termid' => $cat->term_id);
2607
2608 3
        $class_row = $cat_count > $category_limit ? 'geodir-pcat-hide geodir-hide' : 'geodir-pcat-show';
2609 3
        $total_post = $cat->count;
2610
2611 3
        $term_link = get_term_link( $cat, $cat->taxonomy );
2612
        /**
2613
         * Filer the category term link.
2614
         *
2615
         * @since 1.4.5
2616
         * @param string $term_link The term permalink.
2617
         * @param int    $cat->term_id The term id.
2618
         * @param string $post_type Wordpress post type.
2619
         */
2620 3
        $term_link = apply_filters( 'geodir_category_term_link', $term_link, $cat->term_id, $post_type );
2621
2622 3
        echo '<li class="' . $class_row . '"><a href="' . $term_link . '">';
2623 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> ';
2624 3
        echo '</a></li>';
2625 3
    }
2626 3
}
2627
2628
/**
2629
 * Generates listing slider HTML.
2630
 *
2631
 * @since 1.0.0
2632
 * @package GeoDirectory
2633
 * @global object $post The current post object.
2634
 * @param array|string $args Display arguments including before_title, after_title, before_widget, and after_widget.
2635
 * @param array|string $instance The settings for the particular instance of the widget.
2636
 */
2637
function geodir_listing_slider_widget_output($args = '', $instance = '')
2638
{
2639
    // prints the widget
2640 2
    extract($args, EXTR_SKIP);
2641
2642 2
    echo $before_widget;
2643
2644
    /** This filter is documented in geodirectory_widgets.php */
2645 2
    $title = empty($instance['title']) ? '' : apply_filters('widget_title', __($instance['title'], 'geodirectory'));
2646
    /**
2647
     * Filter the widget post type.
2648
     *
2649
     * @since 1.0.0
2650
     * @param string $instance['post_type'] Post type of listing.
2651
     */
2652 2
    $post_type = empty($instance['post_type']) ? 'gd_place' : apply_filters('widget_post_type', $instance['post_type']);
2653
    /**
2654
     * Filter the widget's term.
2655
     *
2656
     * @since 1.0.0
2657
     * @param string $instance['category'] Filter by term. Can be any valid term.
2658
     */
2659 2
    $category = empty($instance['category']) ? '0' : apply_filters('widget_category', $instance['category']);
2660
    /**
2661
     * Filter the widget listings limit.
2662
     *
2663
     * @since 1.0.0
2664
     * @param string $instance['post_number'] Number of listings to display.
2665
     */
2666 2
    $post_number = empty($instance['post_number']) ? '5' : apply_filters('widget_post_number', $instance['post_number']);
2667
    /**
2668
     * Filter the widget listings limit shown at one time.
2669
     *
2670
     * @since 1.5.0
2671
     * @param string $instance['max_show'] Number of listings to display on screen.
2672
     */
2673 2
    $max_show = empty($instance['max_show']) ? '1' : apply_filters('widget_max_show', $instance['max_show']);
2674
    /**
2675
     * Filter the widget slide width.
2676
     *
2677
     * @since 1.5.0
2678
     * @param string $instance['slide_width'] Width of the slides shown.
2679
     */
2680 2
    $slide_width = empty($instance['slide_width']) ? '' : apply_filters('widget_slide_width', $instance['slide_width']);
2681
    /**
2682
     * Filter widget's "show title" value.
2683
     *
2684
     * @since 1.0.0
2685
     * @param string|bool $instance['show_title'] Do you want to display title? Can be 1 or 0.
2686
     */
2687 2
    $show_title = empty($instance['show_title']) ? '' : apply_filters('widget_show_title', $instance['show_title']);
2688
    /**
2689
     * Filter widget's "slideshow" value.
2690
     *
2691
     * @since 1.0.0
2692
     * @param int $instance['slideshow'] Setup a slideshow for the slider to animate automatically.
2693
     */
2694 2
    $slideshow = empty($instance['slideshow']) ? 0 : apply_filters('widget_slideshow', $instance['slideshow']);
2695
    /**
2696
     * Filter widget's "animationLoop" value.
2697
     *
2698
     * @since 1.0.0
2699
     * @param int $instance['animationLoop'] Gives the slider a seamless infinite loop.
2700
     */
2701 2
    $animationLoop = empty($instance['animationLoop']) ? 0 : apply_filters('widget_animationLoop', $instance['animationLoop']);
2702
    /**
2703
     * Filter widget's "directionNav" value.
2704
     *
2705
     * @since 1.0.0
2706
     * @param int $instance['directionNav'] Enable previous/next arrow navigation?. Can be 1 or 0.
2707
     */
2708 2
    $directionNav = empty($instance['directionNav']) ? 0 : apply_filters('widget_directionNav', $instance['directionNav']);
2709
    /**
2710
     * Filter widget's "slideshowSpeed" value.
2711
     *
2712
     * @since 1.0.0
2713
     * @param int $instance['slideshowSpeed'] Set the speed of the slideshow cycling, in milliseconds.
2714
     */
2715 2
    $slideshowSpeed = empty($instance['slideshowSpeed']) ? 5000 : apply_filters('widget_slideshowSpeed', $instance['slideshowSpeed']);
2716
    /**
2717
     * Filter widget's "animationSpeed" value.
2718
     *
2719
     * @since 1.0.0
2720
     * @param int $instance['animationSpeed'] Set the speed of animations, in milliseconds.
2721
     */
2722 2
    $animationSpeed = empty($instance['animationSpeed']) ? 600 : apply_filters('widget_animationSpeed', $instance['animationSpeed']);
2723
    /**
2724
     * Filter widget's "animation" value.
2725
     *
2726
     * @since 1.0.0
2727
     * @param string $instance['animation'] Controls the animation type, "fade" or "slide".
2728
     */
2729 2
    $animation = empty($instance['animation']) ? 'slide' : apply_filters('widget_animation', $instance['animation']);
2730
    /**
2731
     * Filter widget's "list_sort" type.
2732
     *
2733
     * @since 1.0.0
2734
     * @param string $instance['list_sort'] Listing sort by type.
2735
     */
2736 2
    $list_sort = empty($instance['list_sort']) ? 'latest' : apply_filters('widget_list_sort', $instance['list_sort']);
2737 2
    $show_featured_only = !empty($instance['show_featured_only']) ? 1 : NULL;
2738
2739 2
    wp_enqueue_script('geodirectory-jquery-flexslider-js');
2740
    ?>
2741
    <script type="text/javascript">
2742
        jQuery(window).load(function () {
2743
            jQuery('#geodir_widget_carousel').flexslider({
2744
                animation: "slide",
2745
                selector: ".geodir-slides > li",
2746
                namespace: "geodir-",
2747
                controlNav: false,
2748
                directionNav: false,
2749
                animationLoop: false,
2750
                slideshow: false,
2751
                itemWidth: 75,
2752
                itemMargin: 5,
2753
                asNavFor: '#geodir_widget_slider',
2754
                rtl: <?php echo ( is_rtl() ? 'true' : 'false' ); /* fix rtl issue */ ?>
2755
            });
2756
2757
            jQuery('#geodir_widget_slider').flexslider({
2758
                animation: "<?php echo $animation;?>",
2759
                selector: ".geodir-slides > li",
2760
                namespace: "geodir-",
2761
                controlNav: true,
2762
                animationLoop: <?php echo $animationLoop;?>,
2763
                slideshow: <?php echo $slideshow;?>,
2764
                slideshowSpeed: <?php echo $slideshowSpeed;?>,
2765
                animationSpeed: <?php echo $animationSpeed;?>,
2766
                directionNav: <?php echo $directionNav;?>,
2767
                maxItems: <?php echo $max_show;?>,
2768
                move: 1,
2769
                <?php if($slide_width){ echo "itemWidth: ".$slide_width.",";}?>
2770
                sync: "#geodir_widget_carousel",
2771
                start: function (slider) {
2772
                    jQuery('.geodir-listing-flex-loader').hide();
2773
                    jQuery('#geodir_widget_slider').css({'visibility': 'visible'});
2774
                    jQuery('#geodir_widget_carousel').css({'visibility': 'visible'});
2775
                },
2776
                rtl: <?php echo ( is_rtl() ? 'true' : 'false' ); /* fix rtl issue */ ?>
2777
            });
2778
        });
2779
    </script>
2780
    <?php
2781
    $query_args = array(
2782 2
        'posts_per_page' => $post_number,
2783 2
        'is_geodir_loop' => true,
2784 2
        'post_type' => $post_type,
2785
        'order_by' => $list_sort
2786 2
    );
2787 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...
2788 1
        $query_args['show_featured_only'] = 1;
2789 1
    }
2790
2791 2
    if ($category != 0 || $category != '') {
2792 2
        $category_taxonomy = geodir_get_taxonomies($post_type);
2793
        $tax_query = array(
2794 2
            'taxonomy' => $category_taxonomy[0],
2795 2
            'field' => 'id',
2796
            'terms' => $category
2797 2
        );
2798
2799 2
        $query_args['tax_query'] = array($tax_query);
2800 2
    }
2801
2802
    // we want listings with featured image only
2803 2
    $query_args['featured_image_only'] = 1;
2804
2805 2
    if ($post_type == 'gd_event') {
2806
        $query_args['gedir_event_listing_filter'] = 'upcoming';
2807
    }// show only upcomming events
2808
2809 2
    $widget_listings = geodir_get_widget_listings($query_args);
2810 2
    if (!empty($widget_listings) || (isset($with_no_results) && $with_no_results)) {
2811 1
        if ($title) {
2812
            echo $before_title . $title . $after_title;
2813
        }
2814
2815 1
        global $post;
2816
2817 1
        $current_post = $post;// keep current post info
2818
2819 1
        $widget_main_slides = '';
2820 1
        $nav_slides = '';
2821 1
        $widget_slides = 0;
2822
2823 1
        foreach ($widget_listings as $widget_listing) {
2824 1
            global $gd_widget_listing_type;
2825 1
            $post = $widget_listing;
2826 1
            $widget_image = geodir_get_featured_image($post->ID, 'thumbnail', get_option('geodir_listing_no_img'));
2827
2828 1
            if (!empty($widget_image)) {
2829 1
                if ($widget_image->height >= 200) {
2830 1
                    $widget_spacer_height = 0;
2831 1
                } else {
2832 1
                    $widget_spacer_height = ((200 - $widget_image->height) / 2);
2833
                }
2834
2835 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" />';
2836
2837 1
                $title = '';
2838 1
                if ($show_title) {
2839
                    $title_html = '<div class="geodir-slider-title"><a href="' . get_permalink($post->ID) . '">' . get_the_title($post->ID) . '</a></div>';
2840
                    $post_id = $post->ID;
2841
                    $post_permalink = get_permalink($post->ID);
2842
                    $post_title = get_the_title($post->ID);
2843
                    /**
2844
                     * Filter the listing slider widget title.
2845
                     *
2846
                     * @since 1.6.1
2847
                     * @param string $title_html The html output of the title.
2848
                     * @param int $post_id The post id.
2849
                     * @param string $post_permalink The post permalink url.
2850
                     * @param string $post_title The post title text.
2851
                     */
2852
                    $title = apply_filters('geodir_listing_slider_title',$title_html,$post_id,$post_permalink,$post_title);
2853
                }
2854
2855 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>';
2856 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>';
2857 1
                $widget_slides++;
2858 1
            }
2859 1
        }
2860
        ?>
2861
        <div class="flex-container" style="min-height:200px;">
2862
            <div class="geodir-listing-flex-loader"><i class="fa fa-refresh fa-spin"></i></div>
2863
            <div id="geodir_widget_slider" class="geodir_flexslider">
2864
                <ul class="geodir-slides clearfix"><?php echo $widget_main_slides; ?></ul>
2865
            </div>
2866
            <?php if ($widget_slides > 1) { ?>
2867
                <div id="geodir_widget_carousel" class="geodir_flexslider">
2868
                    <ul class="geodir-slides clearfix"><?php echo $nav_slides; ?></ul>
2869
                </div>
2870
            <?php } ?>
2871
        </div>
2872
        <?php
2873 1
        $GLOBALS['post'] = $current_post;
2874 1
        setup_postdata($current_post);
2875 1
    }
2876 2
    echo $after_widget;
2877 2
}
2878
2879
2880
/**
2881
 * Generates login box HTML.
2882
 *
2883
 * @since 1.0.0
2884
 * @package GeoDirectory
2885
 * @global object $current_user Current user object.
2886
 * @param array|string $args Display arguments including before_title, after_title, before_widget, and after_widget.
2887
 * @param array|string $instance The settings for the particular instance of the widget.
2888
 */
2889
function geodir_loginwidget_output($args = '', $instance = '')
2890
{
2891
    //print_r($args);
2892
    //print_r($instance);
2893
    // prints the widget
2894 2
    extract($args, EXTR_SKIP);
2895
2896
    /** This filter is documented in geodirectory_widgets.php */
2897 2
    $title = empty($instance['title']) ? __('My Dashboard', 'geodirectory') : apply_filters('widget_title', __($instance['title'], 'geodirectory'));
2898
2899 2
    echo $before_widget;
2900 2
    echo $before_title . $title . $after_title;
2901
2902 2
    if (is_user_logged_in()) {
2903 2
        global $current_user;
2904
2905 2
        $author_link = get_author_posts_url($current_user->data->ID);
2906 2
        $author_link = geodir_getlink($author_link, array('geodir_dashbord' => 'true'), false);
2907
2908 2
        echo '<ul class="geodir-loginbox-list">';
2909 2
        ob_start();
2910
        ?>
2911
        <li><a class="signin"
2912
               href="<?php echo wp_logout_url(home_url()); ?>"><?php _e('Logout', 'geodirectory'); ?></a></li>
2913
        <?php
2914 2
        $post_types = geodir_get_posttypes('object');
2915 2
        $show_add_listing_post_types_main_nav = get_option('geodir_add_listing_link_user_dashboard');
2916 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...
2917
2918 2
        if (!empty($show_add_listing_post_types_main_nav)) {
2919 2
            $addlisting_links = '';
2920 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...
2921
2922 2
                if (in_array($key, $show_add_listing_post_types_main_nav)) {
2923
2924 2
                    if ($add_link = geodir_get_addlisting_link($key)) {
2925
2926 2
                        $name = $postobj->labels->name;
2927
2928 2
                        $selected = '';
2929 2
                        if (geodir_get_current_posttype() == $key && geodir_is_page('add-listing'))
2930 2
                            $selected = 'selected="selected"';
2931
2932
                        /**
2933
                         * Filter add listing link.
2934
                         *
2935
                         * @since 1.0.0
2936
                         * @param string $add_link Add listing link.
2937
                         * @param string $key Add listing array key.
2938
                         * @param int $current_user->ID Current user ID.
2939
                         */
2940 2
                        $add_link = apply_filters('geodir_dashboard_link_add_listing', $add_link, $key, $current_user->ID);
2941
2942 2
                        $addlisting_links .= '<option ' . $selected . ' value="' . $add_link . '">' . __(ucfirst($name), 'geodirectory') . '</option>';
2943
2944 2
                    }
2945 2
                }
2946
2947 2
            }
2948
2949 View Code Duplication
            if ($addlisting_links != '') { ?>
2950
2951
                <li><select id="geodir_add_listing" class="chosen_select" onchange="window.location.href=this.value"
2952
                            option-autoredirect="1" name="geodir_add_listing" option-ajaxchosen="false"
2953
                            data-placeholder="<?php echo esc_attr(__('Add Listing', 'geodirectory')); ?>">
2954
                        <option value="" disabled="disabled" selected="selected" style='display:none;'><?php echo esc_attr(__('Add Listing', 'geodirectory')); ?></option>
2955
                        <?php echo $addlisting_links; ?>
2956
                    </select></li> <?php
2957
2958 2
            }
2959
2960 2
        }
2961
        // My Favourites in Dashboard
2962 2
        $show_favorite_link_user_dashboard = get_option('geodir_favorite_link_user_dashboard');
2963 2
        $user_favourite = geodir_user_favourite_listing_count();
2964
2965 2
        if (!empty($show_favorite_link_user_dashboard) && !empty($user_favourite)) {
2966
            $favourite_links = '';
2967
2968
            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...
2969
                if (in_array($key, $show_favorite_link_user_dashboard) && array_key_exists($key, $user_favourite)) {
2970
                    $name = $postobj->labels->name;
2971
                    $post_type_link = geodir_getlink($author_link, array('stype' => $key, 'list' => 'favourite'), false);
2972
2973
                    $selected = '';
2974
2975 View Code Duplication
                    if (isset($_REQUEST['list']) && $_REQUEST['list'] == 'favourite' && isset($_REQUEST['stype']) && $_REQUEST['stype'] == $key && isset($_REQUEST['geodir_dashbord'])) {
2976
                        $selected = 'selected="selected"';
2977
                    }
2978
                    /**
2979
                     * Filter favorite listing link.
2980
                     *
2981
                     * @since 1.0.0
2982
                     * @param string $post_type_link Favorite listing link.
2983
                     * @param string $key Favorite listing array key.
2984
                     * @param int $current_user->ID Current user ID.
2985
                     */
2986
                    $post_type_link = apply_filters('geodir_dashboard_link_favorite_listing', $post_type_link, $key, $current_user->ID);
2987
2988
                    $favourite_links .= '<option ' . $selected . ' value="' . $post_type_link . '">' . __(ucfirst($name), 'geodirectory') . '</option>';
2989
                }
2990
            }
2991
2992 View Code Duplication
            if ($favourite_links != '') {
2993
                ?>
2994
                <li>
2995
                    <select id="geodir_my_favourites" class="chosen_select" onchange="window.location.href=this.value"
2996
                            option-autoredirect="1" name="geodir_my_favourites" option-ajaxchosen="false"
2997
                            data-placeholder="<?php echo esc_attr(__('My Favorites', 'geodirectory')); ?>">
2998
                        <option value="" disabled="disabled" selected="selected" style='display:none;'><?php echo esc_attr(__('My Favorites', 'geodirectory')); ?></option>
2999
                        <?php echo $favourite_links; ?>
3000
                    </select>
3001
                </li>
3002
            <?php
3003
            }
3004
        }
3005
3006
3007 2
        $show_listing_link_user_dashboard = get_option('geodir_listing_link_user_dashboard');
3008 2
        $user_listing = geodir_user_post_listing_count();
3009
3010 2
        if (!empty($show_listing_link_user_dashboard) && !empty($user_listing)) {
3011 2
            $listing_links = '';
3012
3013 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...
3014 2
                if (in_array($key, $show_listing_link_user_dashboard) && array_key_exists($key, $user_listing)) {
3015 2
                    $name = $postobj->labels->name;
3016 2
                    $listing_link = geodir_getlink($author_link, array('stype' => $key), false);
3017
3018 2
                    $selected = '';
3019 2 View Code Duplication
                    if (!isset($_REQUEST['list']) && isset($_REQUEST['geodir_dashbord']) && isset($_REQUEST['stype']) && $_REQUEST['stype'] == $key) {
3020 1
                        $selected = 'selected="selected"';
3021 1
                    }
3022
3023
                    /**
3024
                     * Filter my listing link.
3025
                     *
3026
                     * @since 1.0.0
3027
                     * @param string $listing_link My listing link.
3028
                     * @param string $key My listing array key.
3029
                     * @param int $current_user->ID Current user ID.
3030
                     */
3031 2
                    $listing_link = apply_filters('geodir_dashboard_link_my_listing', $listing_link, $key, $current_user->ID);
3032
3033 2
                    $listing_links .= '<option ' . $selected . ' value="' . $listing_link . '">' . __(ucfirst($name), 'geodirectory') . '</option>';
3034 2
                }
3035 2
            }
3036
3037 2 View Code Duplication
            if ($listing_links != '') {
3038
                ?>
3039
                <li>
3040
                    <select id="geodir_my_listings" class="chosen_select" onchange="window.location.href=this.value"
3041
                            option-autoredirect="1" name="geodir_my_listings" option-ajaxchosen="false"
3042
                            data-placeholder="<?php echo esc_attr(__('My Listings', 'geodirectory')); ?>">
3043
                        <option value="" disabled="disabled" selected="selected" style='display:none;'><?php echo esc_attr(__('My Listings', 'geodirectory')); ?></option>
3044
                        <?php echo $listing_links; ?>
3045
                    </select>
3046
                </li>
3047
            <?php
3048 2
            }
3049 2
        }
3050
3051 2
        $dashboard_link = ob_get_clean();
3052
        /**
3053
         * Filter dashboard links HTML.
3054
         *
3055
         * @since 1.0.0
3056
         * @param string $dashboard_link Dashboard links HTML.
3057
         */
3058 2
        echo apply_filters('geodir_dashboard_links', $dashboard_link);
3059 2
        echo '</ul>';
3060 2
    } else {
3061
        ?>
3062
        <?php
3063
        /**
3064
         * Filter signup form action link.
3065
         *
3066
         * @since 1.0.0
3067
         */
3068
        ?>
3069
        <form name="loginform" class="loginform1"
3070
              action="<?php echo geodir_login_url(); ?>"
3071
              method="post">
3072
            <div class="geodir_form_row"><input placeholder="<?php _e('Email', 'geodirectory'); ?>" name="log"
3073
                                                type="text" class="textfield user_login1"/> <span
3074
                    class="user_loginInfo"></span></div>
3075
            <div class="geodir_form_row"><input placeholder="<?php _e('Password', 'geodirectory'); ?>"
3076
                                                name="pwd" type="password"
3077
                                                class="textfield user_pass1 input-text"/><span
3078
                    class="user_passInfo"></span></div>
3079
3080
            <input type="hidden" name="redirect_to" value="<?php echo htmlspecialchars(geodir_curPageURL()); ?>"/>
3081
            <input type="hidden" name="testcookie" value="1"/>
3082
3083
            <div class="geodir_form_row clearfix"><input type="submit" name="submit"
3084
                                                         value="<?php echo SIGN_IN_BUTTON; ?>" class="b_signin"/>
3085
3086
                <p class="geodir-new-forgot-link">
3087
                    <?php
3088
                    /**
3089
                     * Filter signup page register form link.
3090
                     *
3091
                     * @since 1.0.0
3092
                     */
3093
                    ?>
3094
                    <a href="<?php echo geodir_login_url(array('signup' => true)); ?>"
3095
                       class="goedir-newuser-link"><?php echo NEW_USER_TEXT; ?></a>
3096
3097
                    <?php
3098
                    /**
3099
                     * Filter signup page forgot password form link.
3100
                     *
3101
                     * @since 1.0.0
3102
                     */
3103
                    ?>
3104
                    <a href="<?php echo geodir_login_url(array('forgot' => true)); ?>"
3105
                       class="goedir-forgot-link"><?php echo FORGOT_PW_TEXT; ?></a></p></div>
3106
        </form>
3107
    <?php }
3108
3109 2
    echo $after_widget;
3110 2
}
3111
3112
3113
/**
3114
 * Generates popular postview HTML.
3115
 *
3116
 * @since 1.0.0
3117
 * @since 1.5.1 View all link fixed for location filter disabled.
3118
 * @package GeoDirectory
3119
 * @global object $post The current post object.
3120
 * @global string $gridview_columns_widget The girdview style of the listings for widget.
3121
 * @global bool $geodir_is_widget_listing Is this a widget listing?. Default: false.
3122
 * @global object $gd_session GeoDirectory Session object.
3123
 *
3124
 * @param array|string $args Display arguments including before_title, after_title, before_widget, and after_widget.
3125
 * @param array|string $instance The settings for the particular instance of the widget.
3126
 */
3127
function geodir_popular_postview_output($args = '', $instance = '') {
3128 2
    global $gd_session;
3129
	
3130
    // prints the widget
3131 2
    extract($args, EXTR_SKIP);
3132
3133 2
    echo $before_widget;
3134
3135
    /** This filter is documented in geodirectory_widgets.php */
3136 2
    $title = empty($instance['title']) ? geodir_ucwords($instance['category_title']) : apply_filters('widget_title', __($instance['title'], 'geodirectory'));
3137
    /**
3138
     * Filter the widget post type.
3139
     *
3140
     * @since 1.0.0
3141
     * @param string $instance['post_type'] Post type of listing.
3142
     */
3143 2
    $post_type = empty($instance['post_type']) ? 'gd_place' : apply_filters('widget_post_type', $instance['post_type']);
3144
    /**
3145
     * Filter the widget's term.
3146
     *
3147
     * @since 1.0.0
3148
     * @param string $instance['category'] Filter by term. Can be any valid term.
3149
     */
3150 2
    $category = empty($instance['category']) ? '0' : apply_filters('widget_category', $instance['category']);
3151
    /**
3152
     * Filter the widget listings limit.
3153
     *
3154
     * @since 1.0.0
3155
     * @param string $instance['post_number'] Number of listings to display.
3156
     */
3157 2
    $post_number = empty($instance['post_number']) ? '5' : apply_filters('widget_post_number', $instance['post_number']);
3158
    /**
3159
     * Filter widget's "layout" type.
3160
     *
3161
     * @since 1.0.0
3162
     * @param string $instance['layout'] Widget layout type.
3163
     */
3164 2
    $layout = empty($instance['layout']) ? 'gridview_onehalf' : apply_filters('widget_layout', $instance['layout']);
3165
    /**
3166
     * Filter widget's "add_location_filter" value.
3167
     *
3168
     * @since 1.0.0
3169
     * @param string|bool $instance['add_location_filter'] Do you want to add location filter? Can be 1 or 0.
3170
     */
3171 2
    $add_location_filter = empty($instance['add_location_filter']) ? '0' : apply_filters('widget_add_location_filter', $instance['add_location_filter']);
3172
    /**
3173
     * Filter widget's listing width.
3174
     *
3175
     * @since 1.0.0
3176
     * @param string $instance['listing_width'] Listing width.
3177
     */
3178 2
    $listing_width = empty($instance['listing_width']) ? '' : apply_filters('widget_listing_width', $instance['listing_width']);
3179
    /**
3180
     * Filter widget's "list_sort" type.
3181
     *
3182
     * @since 1.0.0
3183
     * @param string $instance['list_sort'] Listing sort by type.
3184
     */
3185 2
    $list_sort = empty($instance['list_sort']) ? 'latest' : apply_filters('widget_list_sort', $instance['list_sort']);
3186 2
    $use_viewing_post_type = !empty($instance['use_viewing_post_type']) ? true : false;
3187
3188
    // set post type to current viewing post type
3189 2 View Code Duplication
    if ($use_viewing_post_type) {
3190 1
        $current_post_type = geodir_get_current_posttype();
3191 1
        if ($current_post_type != '' && $current_post_type != $post_type) {
3192
            $post_type = $current_post_type;
3193
            $category = array(); // old post type category will not work for current changed post type
3194
        }
3195 1
    }
3196
    // replace widget title dynamically
3197 2
    $posttype_plural_label = __(get_post_type_plural_label($post_type), 'geodirectory');
3198 2
    $posttype_singular_label = __(get_post_type_singular_label($post_type), 'geodirectory');
3199
3200 2
    $title = str_replace("%posttype_plural_label%", $posttype_plural_label, $title);
3201 2
    $title = str_replace("%posttype_singular_label%", $posttype_singular_label, $title);
3202
3203 2 View Code Duplication
    if (isset($instance['character_count'])) {
3204
        /**
3205
         * Filter the widget's excerpt character count.
3206
         *
3207
         * @since 1.0.0
3208
         * @param int $instance['character_count'] Excerpt character count.
3209
         */
3210 1
        $character_count = apply_filters('widget_list_character_count', $instance['character_count']);
3211 1
    } else {
3212 1
        $character_count = '';
3213
    }
3214
3215 2
    if (empty($title) || $title == 'All') {
3216 2
        $title .= ' ' . __(get_post_type_plural_label($post_type), 'geodirectory');
3217 2
    }
3218
3219 2
    $location_url = array();
3220 2
    $city = get_query_var('gd_city');
3221 2
    if (!empty($city)) {
3222
        $country = get_query_var('gd_country');
3223
        $region = get_query_var('gd_region');
3224
3225
        $geodir_show_location_url = get_option('geodir_show_location_url');
3226
3227
        if ($geodir_show_location_url == 'all') {
3228
            if ($country != '') {
3229
                $location_url[] = $country;
3230
            }
3231
3232
            if ($region != '') {
3233
                $location_url[] = $region;
3234
            }
3235
        } else if ($geodir_show_location_url == 'country_city') {
3236
            if ($country != '') {
3237
                $location_url[] = $country;
3238
            }
3239
        } else if ($geodir_show_location_url == 'region_city') {
3240
            if ($region != '') {
3241
                $location_url[] = $region;
3242
            }
3243
        }
3244
3245
        $location_url[] = $city;
3246
    }
3247
3248 2
    $location_url = implode('/', $location_url);
3249 2
    $skip_location = false;
3250 2
    if (!$add_location_filter && $gd_session->get('gd_multi_location')) {
3251
        $skip_location = true;
3252
        $gd_session->un_set('gd_multi_location');
3253
    }
3254
3255 2
    if (get_option('permalink_structure')) {
3256
        $viewall_url = get_post_type_archive_link($post_type);
3257
    } else {
3258 2
        $viewall_url = get_post_type_archive_link($post_type);
3259
    }
3260
3261 2
    if (!empty($category) && $category[0] != '0') {
3262
        global $geodir_add_location_url;
3263
3264
        $geodir_add_location_url = '0';
3265
3266
        if ($add_location_filter != '0') {
3267
            $geodir_add_location_url = '1';
3268
        }
3269
3270
        $viewall_url = get_term_link((int)$category[0], $post_type . 'category');
3271
3272
        $geodir_add_location_url = NULL;
3273
    }
3274 2
    if ($skip_location) {
3275
        $gd_session->set('gd_multi_location', 1);
3276
    }
3277
3278 2
    if(is_wp_error( $viewall_url  )){$viewall_url = '';}
3279
3280
    $query_args = array(
3281 2
        'posts_per_page' => $post_number,
3282 2
        'is_geodir_loop' => true,
3283 2
        'gd_location' => $add_location_filter ? true : false,
3284 2
        'post_type' => $post_type,
3285
        'order_by' => $list_sort
3286 2
    );
3287
3288 2
    if ($character_count) {
3289 1
        $query_args['excerpt_length'] = $character_count;
3290 1
    }
3291
3292 2
    if (!empty($instance['show_featured_only'])) {
3293 1
        $query_args['show_featured_only'] = 1;
3294 1
    }
3295
3296 2
    if (!empty($instance['show_special_only'])) {
3297
        $query_args['show_special_only'] = 1;
3298
    }
3299
3300 2 View Code Duplication
    if (!empty($instance['with_pics_only'])) {
3301
        $query_args['with_pics_only'] = 0;
3302
        $query_args['featured_image_only'] = 1;
3303
    }
3304
3305 2
    if (!empty($instance['with_videos_only'])) {
3306
        $query_args['with_videos_only'] = 1;
3307
    }
3308 2
    $with_no_results = !empty($instance['without_no_results']) ? false : true;
3309
3310 2 View Code Duplication
    if (!empty($category) && $category[0] != '0') {
3311
        $category_taxonomy = geodir_get_taxonomies($post_type);
3312
3313
        ######### WPML #########
3314
        if (function_exists('icl_object_id')) {
3315
            $category = gd_lang_object_ids($category, $category_taxonomy[0]);
3316
        }
3317
        ######### WPML #########
3318
3319
        $tax_query = array(
3320
            'taxonomy' => $category_taxonomy[0],
3321
            'field' => 'id',
3322
            'terms' => $category
3323
        );
3324
3325
        $query_args['tax_query'] = array($tax_query);
3326
    }
3327
3328 2
    global $gridview_columns_widget, $geodir_is_widget_listing;
3329
3330 2
    $widget_listings = geodir_get_widget_listings($query_args);
3331
3332 2
    if (!empty($widget_listings) || $with_no_results) {
3333
        ?>
3334
        <div class="geodir_locations geodir_location_listing">
3335
3336
            <?php
3337
            /**
3338
             * Called before the div containing the title and view all link in popular post view widget.
3339
             *
3340
             * @since 1.0.0
3341
             */
3342
            do_action('geodir_before_view_all_link_in_widget'); ?>
3343
            <div class="geodir_list_heading clearfix">
3344
                <?php echo $before_title . $title . $after_title; ?>
3345
                <a href="<?php echo $viewall_url; ?>"
3346
                   class="geodir-viewall"><?php _e('View all', 'geodirectory'); ?></a>
3347
            </div>
3348
            <?php
3349
            /**
3350
             * Called after the div containing the title and view all link in popular post view widget.
3351
             *
3352
             * @since 1.0.0
3353
             */
3354
            do_action('geodir_after_view_all_link_in_widget'); ?>
3355
            <?php
3356 2 View Code Duplication
            if (strstr($layout, 'gridview')) {
3357 2
                $listing_view_exp = explode('_', $layout);
3358 2
                $gridview_columns_widget = $layout;
3359 2
                $layout = $listing_view_exp[0];
3360 2
            } else {
3361
                $gridview_columns_widget = '';
3362
            }
3363
3364
            /**
3365
             * Filter the widget listing listview template path.
3366
             *
3367
             * @since 1.0.0
3368
             */
3369 2
            $template = apply_filters("geodir_template_part-widget-listing-listview", geodir_locate_template('widget-listing-listview'));
3370 2
            if (!isset($character_count)) {
3371
                /**
3372
                 * Filter the widget's excerpt character count.
3373
                 *
3374
                 * @since 1.0.0
3375
                 * @param int $instance['character_count'] Excerpt character count.
3376
                 */
3377
                $character_count = $character_count == '' ? 50 : apply_filters('widget_character_count', $character_count);
3378
            }
3379
3380 2
            global $post, $map_jason, $map_canvas_arr;
3381
3382 2
            $current_post = $post;
3383 2
            $current_map_jason = $map_jason;
3384 2
            $current_map_canvas_arr = $map_canvas_arr;
3385 2
            $geodir_is_widget_listing = true;
3386
3387
            /**
3388
             * Includes related listing listview template.
3389
             *
3390
             * @since 1.0.0
3391
             */
3392 2
            include($template);
3393
3394 2
            $geodir_is_widget_listing = false;
3395
3396 2
            $GLOBALS['post'] = $current_post;
3397 2
            if (!empty($current_post))
3398 2
                setup_postdata($current_post);
3399 2
            $map_jason = $current_map_jason;
3400 2
            $map_canvas_arr = $current_map_canvas_arr;
3401
            ?>
3402
        </div>
3403
    <?php
3404 2
    }
3405 2
    echo $after_widget;
3406
3407 2
}
3408
3409
3410
/*-----------------------------------------------------------------------------------*/
3411
/*  Review count functions
3412
/*-----------------------------------------------------------------------------------*/
3413
/**
3414
 * Count reviews by term ID.
3415
 *
3416
 * @since 1.0.0
3417
 * @since 1.5.1 Added filter to change SQL.
3418
 * @package GeoDirectory
3419
 * @global object $wpdb WordPress Database object.
3420
 * @global string $plugin_prefix Geodirectory plugin table prefix.
3421
 * @param int $term_id The term ID.
3422
 * @param int $taxonomy The taxonomy Id.
3423
 * @param string $post_type The post type.
3424
 * @return int Reviews count.
3425
 */
3426
function geodir_count_reviews_by_term_id($term_id, $taxonomy, $post_type)
3427
{
3428 2
    global $wpdb, $plugin_prefix;
3429
3430 2
    $detail_table = $plugin_prefix . $post_type . '_detail';
3431
3432 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 . ")";
3433
3434
    /**
3435
     * Filter count review sql query.
3436
     *
3437
     * @since 1.5.1
3438
     * @param string $sql Database sql query..
3439
     * @param int $term_id The term ID.
3440
     * @param int $taxonomy The taxonomy Id.
3441
     * @param string $post_type The post type.
3442
     */
3443 2
    $sql = apply_filters('geodir_count_reviews_by_term_sql', $sql, $term_id, $taxonomy, $post_type);
3444
3445 2
    $count = $wpdb->get_var($sql);
3446
3447 2
    return $count;
3448
}
3449
3450
/**
3451
 * Count reviews by terms.
3452
 *
3453
 * @since 1.0.0
3454
 * @since 1.6.1 Fixed add listing page load time.
3455
 * @package GeoDirectory
3456
 *
3457
 * @global object $gd_session GeoDirectory Session object.
3458
 *
3459
 * @param bool $force_update Force update option value?. Default.false.
3460
 * @return array Term array data.
3461
 */
3462
function geodir_count_reviews_by_terms($force_update = false, $post_ID = 0) {
3463
    /**
3464
     * Filter review count option data.
3465
     *
3466
     * @since 1.0.0
3467
     * @since 1.6.1 Added $post_ID param.
3468
     * @param bool $force_update Force update option value?. Default.false.
3469
     * @param int $post_ID The post id to update if any.
3470
     */
3471 8
    $option_data = apply_filters('geodir_count_reviews_by_terms_before', '', $force_update,$post_ID);
3472 8
    if (!empty($option_data)) {
3473
        return $option_data;
3474
    }
3475
3476 8
    $option_data = get_option('geodir_global_review_count');
3477
3478 8
    if (!$option_data || $force_update) {
3479 7
        if ((int)$post_ID > 0) { // Update reviews count for specific post categories only.
3480 7
            global $gd_session;
3481 7
            $term_array = (array)$option_data;
3482 7
            $post_type = get_post_type($post_ID);
3483 7
            $taxonomy = $post_type . 'category';
3484 7
            $terms = wp_get_object_terms($post_ID, $taxonomy, array('fields' => 'ids'));
3485
3486 7 View Code Duplication
            if (!empty($terms) && !is_wp_error($terms)) {
3487 2
                foreach ($terms as $term_id) {
3488 2
                    $count = geodir_count_reviews_by_term_id($term_id, $taxonomy, $post_type);
3489 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...
3490 2
                    $term_array[$term_id] = $count;
3491 2
                }
3492 2
            }
3493
            
3494 7
            $session_listing = $gd_session->get('listing');
3495
            
3496 7
            $terms = array();
3497 7
            if (isset($_POST['post_category'][$taxonomy])) {
3498
                $terms = (array)$_POST['post_category'][$taxonomy];
3499 7
            } else if (!empty($session_listing) && isset($session_listing['post_category'][$taxonomy])) {
3500
                $terms = (array)$session_listing['post_category'][$taxonomy];
3501
            }
3502
            
3503 7 View Code Duplication
            if (!empty($terms)) {
3504
                foreach ($terms as $term_id) {
3505
                    if ($term_id > 0) {
3506
                        $count = geodir_count_reviews_by_term_id($term_id, $taxonomy, $post_type);
3507
                        $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...
3508
                        $term_array[$term_id] = $count;
3509
                    }
3510
                }
3511
            }
3512 7
        } else { // Update reviews count for all post categories.
3513
            $term_array = array();
3514
            $post_types = geodir_get_posttypes();
3515
            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...
3516
3517
                $taxonomy = geodir_get_taxonomies($post_type);
3518
                $taxonomy = $taxonomy[0];
3519
3520
                $args = array(
3521
                    'hide_empty' => false
3522
                );
3523
3524
                $terms = get_terms($taxonomy, $args);
3525
3526
                foreach ($terms as $term) {
3527
                    $count = geodir_count_reviews_by_term_id($term->term_id, $taxonomy, $post_type);
3528
                    $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...
3529
                    /*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...
3530
                        foreach ( $children as $child_id ) {
3531
                            $child_count = geodir_count_reviews_by_term_id($child_id, $taxonomy, $post_type);
3532
                            $count = $count + $child_count;
3533
                        }
3534
                    }*/
3535
                    $term_array[$term->term_id] = $count;
3536
                }
3537
            }
3538
        }
3539
3540 7
        update_option('geodir_global_review_count', $term_array);
3541
        //clear cache
3542 7
        wp_cache_delete('geodir_global_review_count');
3543 7
        return $term_array;
3544
    } else {
3545 1
        return $option_data;
3546
    }
3547
}
3548
3549
/**
3550
 * Force update review count.
3551
 *
3552
 * @since 1.0.0
3553
 * @since 1.6.1 Fixed add listing page load time.
3554
 * @package GeoDirectory
3555
 * @return bool
3556
 */
3557
function geodir_term_review_count_force_update($new_status, $old_status = '', $post = '') {
3558 8
    if (isset($_REQUEST['action']) && $_REQUEST['action'] == 'geodir_import_export') {
3559
        return; // do not run if importing listings
3560
    }
3561
    
3562 8
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
3563
        return;
3564
    }
3565
3566 8
    $post_ID = 0;
3567 8
    if (!empty($post)) {
3568 8
        if (isset($post->post_type) && strpos($post->post_type, 'gd_') !== 0) {
3569 2
            return;
3570
        }
3571
        
3572 6
        if ($new_status == 'auto-draft' && $old_status == 'new') {
3573
            return;
3574
        }
3575
        
3576 6
        if (!empty($post->ID)) {
3577 6
            $post_ID = $post->ID;
3578 6
        }
3579 6
    }
3580
3581 6
    if ($new_status != $old_status) {
3582 5
        geodir_count_reviews_by_terms(true, $post_ID);
3583 5
    }
3584
3585 6
    return true;
3586
}
3587
3588
function geodir_term_review_count_force_update_single_post($post_id){
3589 4
    geodir_count_reviews_by_terms(true, $post_id); 
3590 4
}
3591
3592
/*-----------------------------------------------------------------------------------*/
3593
/*  Term count functions
3594
/*-----------------------------------------------------------------------------------*/
3595
/**
3596
 * Count posts by term.
3597
 *
3598
 * @since 1.0.0
3599
 * @package GeoDirectory
3600
 * @param array $data Count data array.
3601
 * @param object $term The term object.
3602
 * @return int Post count.
3603
 */
3604
function geodir_count_posts_by_term($data, $term)
3605
{
3606
3607
    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...
3608
        if (isset($data[$term->term_id])) {
3609
            return $data[$term->term_id];
3610
        } else {
3611
            return 0;
3612
        }
3613
    } else {
3614
        return $term->count;
3615
    }
3616
}
3617
3618
/**
3619
 * Sort terms object by post count.
3620
 *
3621
 * @since 1.0.0
3622
 * @package GeoDirectory
3623
 * param array $terms An array of term objects.
3624
 * @return array Sorted terms array.
3625
 */
3626
function geodir_sort_terms_by_count($terms)
3627
{
3628 4
    usort($terms, "geodir_sort_by_count_obj");
3629 4
    return $terms;
3630
}
3631
3632
/**
3633
 * Sort terms object by review count.
3634
 *
3635
 * @since 1.0.0
3636
 * @package GeoDirectory
3637
 * @param array $terms An array of term objects.
3638
 * @return array Sorted terms array.
3639
 */
3640
function geodir_sort_terms_by_review_count($terms)
3641
{
3642 1
    usort($terms, "geodir_sort_by_review_count_obj");
3643 1
    return $terms;
3644
}
3645
3646
/**
3647
 * Sort terms either by post count or review count.
3648
 *
3649
 * @since 1.0.0
3650
 * @package GeoDirectory
3651
 * @param array $terms An array of term objects.
3652
 * @param string $sort The sort type. Can be count (Post Count) or review_count. Default. count.
3653
 * @return array Sorted terms array.
3654
 */
3655
function geodir_sort_terms($terms, $sort = 'count')
3656
{
3657 5
    if ($sort == 'count') {
3658 4
        return geodir_sort_terms_by_count($terms);
3659
    }
3660 1
    if ($sort == 'review_count') {
3661 1
        return geodir_sort_terms_by_review_count($terms);
3662
    }
3663
}
3664
3665
/*-----------------------------------------------------------------------------------*/
3666
/*  Utils
3667
/*-----------------------------------------------------------------------------------*/
3668
/**
3669
 * Compares post count from array for sorting.
3670
 *
3671
 * @since 1.0.0
3672
 * @package GeoDirectory
3673
 * @param array $a The left side array to compare.
3674
 * @param array $b The right side array to compare.
3675
 * @return bool
3676
 */
3677
function geodir_sort_by_count($a, $b)
3678
{
3679
    return $a['count'] < $b['count'];
3680
}
3681
3682
/**
3683
 * Compares post count from object for sorting.
3684
 *
3685
 * @since 1.0.0
3686
 * @package GeoDirectory
3687
 * @param object $a The left side object to compare.
3688
 * @param object $b The right side object to compare.
3689
 * @return bool
3690
 */
3691
function geodir_sort_by_count_obj($a, $b)
3692
{
3693 4
    return $a->count < $b->count;
3694
}
3695
3696
/**
3697
 * Compares review count from object for sorting.
3698
 *
3699
 * @since 1.0.0
3700
 * @package GeoDirectory
3701
 * @param object $a The left side object to compare.
3702
 * @param object $b The right side object to compare.
3703
 * @return bool
3704
 */
3705
function geodir_sort_by_review_count_obj($a, $b)
3706
{
3707 1
    return $a->review_count < $b->review_count;
3708
}
3709
3710
/**
3711
 * Load geodirectory plugin textdomain.
3712
 *
3713
 * @since 1.4.2
3714
 * @package GeoDirectory
3715
 */
3716
function geodir_load_textdomain() {
3717
    /**
3718
     * Filter the plugin locale.
3719
     *
3720
     * @since 1.4.2
3721
     * @package GeoDirectory
3722
     */
3723
    $locale = apply_filters('plugin_locale', get_locale(), 'geodirectory');
3724
3725
    load_textdomain('geodirectory', WP_LANG_DIR . '/' . 'geodirectory' . '/' . 'geodirectory' . '-' . $locale . '.mo');
3726
    load_plugin_textdomain('geodirectory', false, plugin_basename(dirname(dirname(__FILE__))) . '/geodirectory-languages');
3727
3728
    /**
3729
     * Define language constants.
3730
     *
3731
     * @since 1.0.0
3732
     */
3733
    require_once(geodir_plugin_path() . '/language.php');
3734
3735
    $language_file = geodir_plugin_path() . '/db-language.php';
3736
3737
    // Load language string file if not created yet
3738
    if (!file_exists($language_file)) {
3739
        geodirectory_load_db_language();
3740
    }
3741
3742
    if (file_exists($language_file)) {
3743
        /**
3744
         * Language strings from database.
3745
         *
3746
         * @since 1.4.2
3747
         */
3748
        try {
3749
            require_once($language_file);
3750
        } catch(Exception $e) {
3751
            error_log('Language Error: ' . $e->getMessage());
3752
        }
3753
    }
3754
}
3755
3756
/**
3757
 * Load language strings in to file to translate via po editor
3758
 *
3759
 * @since 1.4.2
3760
 * @package GeoDirectory
3761
 *
3762
 * @global null|object $wp_filesystem WP_Filesystem object.
3763
 *
3764
 * @return bool True if file created otherwise false
3765
 */
3766
function geodirectory_load_db_language() {
3767 1
    global $wp_filesystem;
3768 1
    if( empty( $wp_filesystem ) ) {
3769 1
        require_once( ABSPATH .'/wp-admin/includes/file.php' );
3770 1
        WP_Filesystem();
3771 1
        global $wp_filesystem;
3772 1
    }
3773
3774 1
    $language_file = geodir_plugin_path() . '/db-language.php';
3775
3776 1
    if(is_file($language_file) && !is_writable($language_file))
3777 1
        return false; // Not possible to create.
3778
3779 1
    if(!is_file($language_file) && !is_writable(dirname($language_file)))
3780 1
        return false; // Not possible to create.
3781
3782 1
    $contents_strings = array();
3783
3784
    /**
3785
     * Filter the language string from database to translate via po editor
3786
     *
3787
     * @since 1.4.2
3788
     *
3789
     * @param array $contents_strings Array of strings.
3790
     */
3791 1
    $contents_strings = apply_filters('geodir_load_db_language', $contents_strings);
3792
3793 1
    $contents_strings = array_unique($contents_strings);
3794
3795 1
    $contents_head = array();
3796 1
    $contents_head[] = "<?php";
3797 1
    $contents_head[] = "/**";
3798 1
    $contents_head[] = " * Translate language string stored in database. Ex: Custom Fields";
3799 1
    $contents_head[] = " *";
3800 1
    $contents_head[] = " * @package GeoDirectory";
3801 1
    $contents_head[] = " * @since 1.4.2";
3802 1
    $contents_head[] = " */";
3803 1
    $contents_head[] = "";
3804 1
    $contents_head[] = "// Language keys";
3805
3806 1
    $contents_foot = array();
3807 1
    $contents_foot[] = "";
3808 1
    $contents_foot[] = "";
3809
3810 1
    $contents = implode(PHP_EOL, $contents_head);
3811
3812 1
    if (!empty($contents_strings)) {
3813 1
        foreach ( $contents_strings as $string ) {
3814 1
            if (is_scalar($string) && $string != '') {
3815 1
                $string = str_replace("'", "\'", $string);
3816 1
                $contents .= PHP_EOL . "__('" . $string . "', 'geodirectory');";
3817 1
            }
3818 1
        }
3819 1
    }
3820
3821 1
    $contents .= implode(PHP_EOL, $contents_foot);
3822
3823 1
    if($wp_filesystem->put_contents( $language_file, $contents, FS_CHMOD_FILE))
3824 1
        return false; // Failure; could not write file.
3825
3826
    return true;
3827
}
3828
3829
/**
3830
 * Get the custom fields texts for translation
3831
 *
3832
 * @since 1.4.2
3833
 * @since 1.5.7 Option values are translatable via db translation.
3834
 * @package GeoDirectory
3835
 *
3836
 * @global object $wpdb WordPress database abstraction object.
3837
 *
3838
 * @param  array $translation_texts Array of text strings.
3839
 * @return array Translation texts.
3840
 */
3841
function geodir_load_custom_field_translation($translation_texts = array()) {
3842 1
    global $wpdb;
3843
3844
    // Custom fields table
3845 1
    $sql = "SELECT admin_title, admin_desc, site_title, clabels, required_msg, default_value, option_values FROM " . GEODIR_CUSTOM_FIELDS_TABLE;
3846 1
    $rows = $wpdb->get_results($sql);
3847
3848 1
    if (!empty($rows)) {
3849 1
        foreach($rows as $row) {
3850 1
            if (!empty($row->admin_title))
3851 1
                $translation_texts[] = stripslashes_deep($row->admin_title);
3852
			
3853 1
            if (!empty($row->admin_desc))
3854 1
                $translation_texts[] = stripslashes_deep($row->admin_desc);
3855
3856 1
            if (!empty($row->site_title))
3857 1
                $translation_texts[] = stripslashes_deep($row->site_title);
3858
3859 1
            if (!empty($row->clabels))
3860 1
                $translation_texts[] = stripslashes_deep($row->clabels);
3861
3862 1
            if (!empty($row->required_msg))
3863 1
                $translation_texts[] = stripslashes_deep($row->required_msg);
3864
			
3865 1
			if (!empty($row->default_value))
3866 1
                $translation_texts[] = stripslashes_deep($row->default_value);
3867
			
3868 1
			if (!empty($row->option_values)) {
3869 1
				$option_values = geodir_string_values_to_options(stripslashes_deep($row->option_values));
3870
				
3871 1
				if (!empty($option_values)) {
3872 1
					foreach ($option_values as $option_value) {
3873 1
						if (!empty($option_value['label'])) {
3874 1
							$translation_texts[] = $option_value['label'];
3875 1
						}
3876 1
					}
3877 1
				}
3878 1
			}
3879 1
        }
3880 1
    }
3881
	
3882
    // Custom sorting fields table
3883 1
    $sql = "SELECT site_title, asc_title, desc_title FROM " . GEODIR_CUSTOM_SORT_FIELDS_TABLE;
3884 1
    $rows = $wpdb->get_results($sql);
3885
3886 1 View Code Duplication
    if (!empty($rows)) {
3887
        foreach($rows as $row) {
3888
            if (!empty($row->site_title))
3889
                $translation_texts[] = stripslashes_deep($row->site_title);
3890
3891
            if (!empty($row->asc_title))
3892
                $translation_texts[] = stripslashes_deep($row->asc_title);
3893
3894
            if (!empty($row->desc_title))
3895
                $translation_texts[] = stripslashes_deep($row->desc_title);
3896
        }
3897
    }
3898
	
3899
	// Advance search filter fields table
3900 1
	if (defined('GEODIR_ADVANCE_SEARCH_TABLE')) {
3901
		$sql = "SELECT field_site_name, front_search_title, field_desc FROM " . GEODIR_ADVANCE_SEARCH_TABLE;
3902
		$rows = $wpdb->get_results($sql);
3903
3904 View Code Duplication
		if (!empty($rows)) {
3905
			foreach($rows as $row) {
3906
				if (!empty($row->field_site_name))
3907
					$translation_texts[] = stripslashes_deep($row->field_site_name);
3908
3909
				if (!empty($row->front_search_title))
3910
					$translation_texts[] = stripslashes_deep($row->front_search_title);
3911
3912
				if (!empty($row->field_desc))
3913
					$translation_texts[] = stripslashes_deep($row->field_desc);
3914
			}
3915
		}
3916
	}
3917
3918 1
    $translation_texts = !empty($translation_texts) ? array_unique($translation_texts) : $translation_texts;
3919
3920 1
    return $translation_texts;
3921
}
3922
3923
/**
3924
 * Retrieve list of mime types and file extensions allowed for file upload.
3925
 *
3926
 * @since 1.4.7
3927
 * @package GeoDirectory
3928
 *
3929
 * @return array Array of mime types.
3930
 */
3931
function geodir_allowed_mime_types() {
3932
    /**
3933
     * Filter the list of mime types and file extensions allowed for file upload.
3934
     *
3935
     * @since 1.4.7
3936
     * @package GeoDirectory
3937
     *
3938
     * @param array $geodir_allowed_mime_types and file extensions.
3939
     */
3940
    return apply_filters( 'geodir_allowed_mime_types', array(
3941
            'Image' => array( // Image formats.
3942
                'jpg' => 'image/jpeg',
3943
                'jpe' => 'image/jpeg',
3944
                'jpeg' => 'image/jpeg',
3945
                'gif' => 'image/gif',
3946
                'png' => 'image/png',
3947
                'bmp' => 'image/bmp',
3948
                'ico' => 'image/x-icon',
3949
            ),
3950
            'Video' => array( // Video formats.
3951
                'asf' => 'video/x-ms-asf',
3952
                'avi' => 'video/avi',
3953
                'flv' => 'video/x-flv',
3954
                'mkv' => 'video/x-matroska',
3955
                'mp4' => 'video/mp4',
3956
                'mpeg' => 'video/mpeg',
3957
                'mpg' => 'video/mpeg',
3958
                'wmv' => 'video/x-ms-wmv',
3959
                '3gp' => 'video/3gpp',
3960
            ),
3961
            'Audio' => array( // Audio formats.
3962
                'ogg' => 'audio/ogg',
3963
                'mp3' => 'audio/mpeg',
3964
                'wav' => 'audio/wav',
3965
                'wma' => 'audio/x-ms-wma',
3966
            ),
3967
            'Text' => array( // Text formats.
3968
                'css' => 'text/css',
3969
                'csv' => 'text/csv',
3970
                'htm' => 'text/html',
3971
                'html' => 'text/html',
3972
                'txt' => 'text/plain',
3973
                'rtx' => 'text/richtext',
3974
                'vtt' => 'text/vtt',
3975
            ),
3976
            'Application' => array( // Application formats.
3977
                'doc' => 'application/msword',
3978
                'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
3979
                'exe' => 'application/x-msdownload',
3980
                'js' => 'application/javascript',
3981
                'odt' => 'application/vnd.oasis.opendocument.text',
3982
                'pdf' => 'application/pdf',
3983
                'pot' => 'application/vnd.ms-powerpoint',
3984
                'ppt' => 'application/vnd.ms-powerpoint',
3985
                'pptx' => 'application/vnd.ms-powerpoint',
3986
                'psd' => 'application/octet-stream',
3987
                'rar' => 'application/rar',
3988
                'rtf' => 'application/rtf',
3989
                'swf' => 'application/x-shockwave-flash',
3990
                'tar' => 'application/x-tar',
3991
                'xls' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
3992
                'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
3993
                'zip' => 'application/zip',
3994
            )
3995
        )
3996
    );
3997
}
3998
3999
/**
4000
 * Retrieve list of user display name for user id.
4001
 *
4002
 * @since 1.5.0
4003
 *
4004
 * @param  string $user_id The WP user id.
4005
 * @return string User display name.
4006
 */
4007
function geodir_get_client_name($user_id) {
4008 9
    $client_name = '';
4009
4010 9
    $user_data = get_userdata($user_id);
4011
4012 9
    if (!empty($user_data)) {
4013 2
        if (isset($user_data->display_name) && trim($user_data->display_name) != '') {
4014 2
            $client_name = trim($user_data->display_name);
4015 2
        } else if (isset($user_data->user_nicename) && trim($user_data->user_nicename) != '') {
4016
            $client_name = trim($user_data->user_nicename);
4017
        } else {
4018
            $client_name = trim($user_data->user_login);
4019
        }
4020 2
    }
4021
4022 9
    return $client_name;
4023
}
4024
4025
4026
4027
4028
4029
add_filter('wpseo_replacements','geodir_wpseo_replacements',10,1);
4030
/*
4031
 * Add location variables to wpseo replacements.
4032
 *
4033
 * @since 1.5.4
4034
 */
4035
function geodir_wpseo_replacements($vars){
4036
4037
    global $wp;
4038
    $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...
4039
    // location variables
4040
    $gd_post_type = geodir_get_current_posttype();
4041
    $location_array = geodir_get_current_location_terms('query_vars', $gd_post_type);
4042
    /**
4043
     * Filter the title variables location variables array
4044
     *
4045
     * @since 1.5.5
4046
     * @package GeoDirectory
4047
     * @param array $location_array The array of location variables.
4048
     * @param array $vars The page title variables.
4049
     */
4050
    $location_array = apply_filters('geodir_filter_title_variables_location_arr_seo',$location_array, $vars);
4051
    $location_titles = array();
4052 View Code Duplication
    if(get_query_var( 'gd_country_full' )){
4053
        if(get_query_var( 'gd_country_full' )){$location_array['gd_country'] = get_query_var( 'gd_country_full' );}
4054
        if(get_query_var( 'gd_region_full' )){$location_array['gd_region'] = get_query_var( 'gd_region_full' );}
4055
        if(get_query_var( 'gd_city_full' )){$location_array['gd_city'] = get_query_var( 'gd_city_full' );}
4056
    }
4057
    $location_single = '';
4058
    $gd_country = (isset($wp->query_vars['gd_country']) && $wp->query_vars['gd_country'] != '') ? $wp->query_vars['gd_country'] : '';
4059
    $gd_region = (isset($wp->query_vars['gd_region']) && $wp->query_vars['gd_region'] != '') ? $wp->query_vars['gd_region'] : '';
4060
    $gd_city = (isset($wp->query_vars['gd_city']) && $wp->query_vars['gd_city'] != '') ? $wp->query_vars['gd_city'] : '';
4061
4062
    $gd_country_actual = $gd_region_actual = $gd_city_actual = '';
4063
4064 View Code Duplication
    if (function_exists('get_actual_location_name')) {
4065
        $gd_country_actual = $gd_country != '' ? get_actual_location_name('country', $gd_country, true) : $gd_country;
4066
        $gd_region_actual = $gd_region != '' ? get_actual_location_name('region', $gd_region) : $gd_region;
4067
        $gd_city_actual = $gd_city != '' ? get_actual_location_name('city', $gd_city) : $gd_city;
4068
    }
4069
4070 View Code Duplication
    if ($gd_city != '') {
4071
        if ($gd_city_actual != '') {
4072
            $gd_city = $gd_city_actual;
4073
        } else {
4074
            $gd_city = preg_replace('/-(\d+)$/', '', $gd_city);
4075
            $gd_city = preg_replace('/[_-]/', ' ', $gd_city);
4076
            $gd_city = __(geodir_ucwords($gd_city), 'geodirectory');
4077
        }
4078
        $location_single = $gd_city;
4079
4080
    } else if ($gd_region != '') {
4081
        if ($gd_region_actual != '') {
4082
            $gd_region = $gd_region_actual;
4083
        } else {
4084
            $gd_region = preg_replace('/-(\d+)$/', '', $gd_region);
4085
            $gd_region = preg_replace('/[_-]/', ' ', $gd_region);
4086
            $gd_region = __(geodir_ucwords($gd_region), 'geodirectory');
4087
        }
4088
4089
        $location_single = $gd_region;
4090
    } else if ($gd_country != '') {
4091
        if ($gd_country_actual != '') {
4092
            $gd_country = $gd_country_actual;
4093
        } else {
4094
            $gd_country = preg_replace('/-(\d+)$/', '', $gd_country);
4095
            $gd_country = preg_replace('/[_-]/', ' ', $gd_country);
4096
            $gd_country = __(geodir_ucwords($gd_country), 'geodirectory');
4097
        }
4098
4099
        $location_single = $gd_country;
4100
    }
4101
4102 View Code Duplication
    if (!empty($location_array)) {
4103
4104
        $actual_location_name = function_exists('get_actual_location_name') ? true : false;
4105
        $location_array = array_reverse($location_array);
4106
4107
        foreach ($location_array as $location_type => $location) {
4108
            $gd_location_link_text = preg_replace('/-(\d+)$/', '', $location);
4109
            $gd_location_link_text = preg_replace('/[_-]/', ' ', $gd_location_link_text);
4110
4111
            $location_name = geodir_ucwords($gd_location_link_text);
4112
            $location_name = __($location_name, 'geodirectory');
4113
4114
            if ($actual_location_name) {
4115
                $location_type = strpos($location_type, 'gd_') === 0 ? substr($location_type, 3) : $location_type;
4116
                $location_name = get_actual_location_name($location_type, $location, true);
4117
            }
4118
4119
            $location_titles[] = $location_name;
4120
        }
4121
        if (!empty($location_titles)) {
4122
            $location_titles = array_unique($location_titles);
4123
        }
4124
    }
4125
4126
4127
    if(!empty($location_titles)) {
4128
        $vars['%%location%%'] = implode(", ", $location_titles);
4129
    }
4130
4131
4132
    if(!empty($location_titles)) {
4133
        $vars['%%in_location%%'] = __('in ', 'geodirectory') . implode(", ", $location_titles);
4134
    }
4135
4136
4137
4138
    if($location_single) {
4139
        $vars['%%in_location_single%%'] = __('in', 'geodirectory') . ' ' .$location_single;
4140
    }
4141
4142
4143
    if($location_single) {
4144
        $vars['%%location_single%%'] = $location_single;
4145
    }
4146
4147
    /**
4148
     * Filter the title variables after standard ones have been filtered for wpseo.
4149
     *
4150
     * @since 1.5.7
4151
     * @package GeoDirectory
4152
     * @param string $vars The title with variables.
4153
     * @param array $location_array The array of location variables.
4154
     */
4155
    return apply_filters('geodir_wpseo_replacements_vars',$vars,$location_array);
4156
}
4157
4158
4159
add_filter('geodir_seo_meta_title','geodir_filter_title_variables',10,3);
4160
add_filter('geodir_seo_page_title','geodir_filter_title_variables',10,2);
4161
add_filter('geodir_seo_meta_description_pre','geodir_filter_title_variables',10,3);
4162
function geodir_filter_title_variables($title, $gd_page, $sep=''){
4163
4164
4165 7
    if(!$gd_page || !$title){return $title;}// if no a GD page then bail.
4166 5
    global $post;
4167
    //print_r($post);
4168
    /*
4169
    %%date%%	                Replaced with the date of the post/page
4170
    %%title%%	                Replaced with the title of the post/page
4171
    %%sitename%%	            The site's name
4172
    %%sitedesc%%	            The site's tagline / description
4173
    %%excerpt%%	                Replaced with the post/page excerpt (or auto-generated if it does not exist)
4174
    %%tag%%	                    Replaced with the current tag/tags
4175
    %%category%%	            Replaced with the post categories (comma separated)
4176
    %%category_description%%	Replaced with the category description
4177
    %%tag_description%%	        Replaced with the tag description
4178
    %%term_description%%	    Replaced with the term description
4179
    %%term_title%%	            Replaced with the term name
4180
    %%searchphrase%%	        Replaced with the current search phrase
4181
    %%sep%%	                    The separator defined in your theme's wp_title() tag.
4182
4183
    ADVANCED
4184
    %%pt_single%%	            Replaced with the post type single label
4185
    %%pt_plural%%	            Replaced with the post type plural label
4186
    %%modified%%	            Replaced with the post/page modified time
4187
    %%id%%	                    Replaced with the post/page ID
4188
    %%name%%	                Replaced with the post/page author's 'nicename'
4189
    %%userid%%	                Replaced with the post/page author's userid
4190
    %%page%%	                Replaced with the current page number (i.e. page 2 of 4)
4191
    %%pagetotal%%	            Replaced with the current page total
4192
    %%pagenumber%%	            Replaced with the current page number
4193
     */
4194
4195 5
    if ($sep == '') {
4196
        /**
4197
         * Filter the page title separator.
4198
         *
4199
         * @since 1.0.0
4200
         * @package GeoDirectory
4201
         * @param string $sep The separator, default: `|`.
4202
         */
4203 2
        $sep = apply_filters('geodir_page_title_separator', '|');
4204 2
    }
4205
4206
4207 5
    if(strpos($title,'%%title%%') !== false){
4208 3
        $title = str_replace("%%title%%",$post->post_title,$title);
4209 3
    }
4210
4211 5 View Code Duplication
    if(strpos($title,'%%sitename%%') !== false){
4212 5
        $title = str_replace("%%sitename%%",get_bloginfo('name'),$title);
4213 5
    }
4214
4215 5 View Code Duplication
    if(strpos($title,'%%sitedesc%%') !== false){
4216
        $title = str_replace("%%sitedesc%%",get_bloginfo('description'),$title);
4217
    }
4218
4219 5
    if(strpos($title,'%%excerpt%%') !== false){
4220
        $title = str_replace("%%excerpt%%",strip_tags(get_the_excerpt()),$title);
4221
    }
4222
4223 5
    if(strpos($title,'%%pt_single%%') !== false){
4224 1
        $single_name = '';
4225 1
        if($gd_page=='search' || $gd_page=='author'){
4226
            $geodir_post_types = get_option('geodir_post_types');
4227
            $spt = esc_attr($_REQUEST['stype']);
4228
            if(isset($geodir_post_types[$spt]['labels']['singular_name'])){
4229
                $single_name = __($geodir_post_types[$spt]['labels']['singular_name'],'geodirectory');
4230
            }
4231 1
        }elseif($gd_page=='add-listing'){
4232 1
            $geodir_post_types = get_option('geodir_post_types');
4233 1
            $spt = isset($_REQUEST['listing_type']) ? esc_attr($_REQUEST['listing_type']) : '';
4234 1
            if(!$spt && isset($_REQUEST['pid'])){
4235
                $spt = get_post_type( $_REQUEST['pid'] );
4236
            }
4237 1
            if(!$spt){$spt='gd_place';}
4238 1
            if(isset($geodir_post_types[$spt]['labels']['singular_name'])){
4239 1
                $single_name = __($geodir_post_types[$spt]['labels']['singular_name'],'geodirectory');
4240 1
            }
4241 1
        }
4242 View Code Duplication
        elseif($post->post_type){
4243
            $geodir_post_types = get_option('geodir_post_types');
4244
            if(isset($geodir_post_types[$post->post_type]['labels']['singular_name'])){
4245
                $single_name = __($geodir_post_types[$post->post_type]['labels']['singular_name'],'geodirectory');
4246
            }
4247
4248
4249
        }
4250 1
        $title = str_replace("%%pt_single%%",$single_name,$title);
4251 1
    }
4252
4253 5
    if(strpos($title,'%%pt_plural%%') !== false){
4254 2
        $plural_name = '';
4255 2
        if($gd_page=='search' || $gd_page=='author'){
4256 2
            $geodir_post_types = get_option('geodir_post_types');
4257 2
            $spt = esc_attr($_REQUEST['stype']);
4258 2
            if(isset($geodir_post_types[$spt]['labels']['name'])){
4259 2
                $plural_name = __($geodir_post_types[$spt]['labels']['name'],'geodirectory');
4260 2
            }
4261 2
        }elseif($gd_page=='add-listing'){
4262
            $geodir_post_types = get_option('geodir_post_types');
4263
            $spt = sanitize_text_field($_REQUEST['listing_type']);
4264
            if(!$spt){$spt='gd_place';}
4265
            if(isset($geodir_post_types[$spt]['labels']['name'])){
4266
                $plural_name = __($geodir_post_types[$spt]['labels']['name'],'geodirectory');
4267
            }
4268
        }
4269 1 View Code Duplication
        elseif(isset($post->post_type) && $post->post_type){
4270 1
            $geodir_post_types = get_option('geodir_post_types');
4271 1
            if(isset($geodir_post_types[$post->post_type]['labels']['name'])){
4272 1
                $plural_name = __($geodir_post_types[$post->post_type]['labels']['name'],'geodirectory');
4273 1
            }
4274
4275 1
        }
4276 2
        $title = str_replace("%%pt_plural%%",$plural_name,$title);
4277 2
    }
4278
4279
4280
4281 5 View Code Duplication
    if(strpos($title,'%%category%%') !== false){
4282
        $cat_name = '';
4283
4284
        if($gd_page=='detail') {
4285
            if ($post->default_category) {
4286
                $cat = get_term($post->default_category, $post->post_type . 'category');
4287
                $cat_name = (isset($cat->name)) ? $cat->name : '';
4288
            }
4289
        }elseif($gd_page=='listing'){
4290
            $queried_object = get_queried_object();
4291
            if(isset($queried_object->name)){
4292
                $cat_name = $queried_object->name;
4293
            }
4294
        }
4295
        $title = str_replace("%%category%%",$cat_name,$title);
4296
    }
4297
4298 5 View Code Duplication
    if(strpos($title,'%%tag%%') !== false){
4299
        $cat_name = '';
4300
4301
        if($gd_page=='detail') {
4302
            if ($post->default_category) {
4303
                $cat = get_term($post->default_category, $post->post_type . 'category');
4304
                $cat_name = (isset($cat->name)) ? $cat->name : '';
4305
            }
4306
        }elseif($gd_page=='listing'){
4307
            $queried_object = get_queried_object();
4308
            if(isset($queried_object->name)){
4309
                $cat_name = $queried_object->name;
4310
            }
4311
        }
4312
        $title = str_replace("%%tag%%",$cat_name,$title);
4313
    }
4314
4315
4316
4317 5
    if(strpos($title,'%%id%%') !== false){
4318
        $ID = (isset($post->ID)) ? $post->ID : '';
4319
        $title = str_replace("%%id%%",$ID,$title);
4320
    }
4321
4322 5
    if(strpos($title,'%%sep%%') !== false){
4323 5
        $title = str_replace("%%sep%%",$sep,$title);
4324 5
    }
4325
4326
4327 5
    global $wp;
4328
    // location variables
4329 5
    $gd_post_type = geodir_get_current_posttype();
4330 5
    $location_array = geodir_get_current_location_terms('query_vars', $gd_post_type);
4331
    /**
4332
     * Filter the title variables location variables array
4333
     *
4334
     * @since 1.5.5
4335
     * @package GeoDirectory
4336
     * @param array $location_array The array of location variables.
4337
     * @param string $title The title with variables..
4338
     * @param string $gd_page The page being filtered.
4339
     * @param string $sep The separator, default: `|`.
4340
     */
4341 5
    $location_array = apply_filters('geodir_filter_title_variables_location_arr',$location_array,$title, $gd_page, $sep);
4342 5
    $location_titles = array();
4343 5 View Code Duplication
    if($gd_page=='location' && get_query_var( 'gd_country_full' )){
4344
        if(get_query_var( 'gd_country_full' )){$location_array['gd_country'] = get_query_var( 'gd_country_full' );}
4345
        if(get_query_var( 'gd_region_full' )){$location_array['gd_region'] = get_query_var( 'gd_region_full' );}
4346
        if(get_query_var( 'gd_city_full' )){$location_array['gd_city'] = get_query_var( 'gd_city_full' );}
4347
    }
4348 5
    $location_single = '';
4349 5
    $gd_country = (isset($wp->query_vars['gd_country']) && $wp->query_vars['gd_country'] != '') ? $wp->query_vars['gd_country'] : '';
4350 5
    $gd_region = (isset($wp->query_vars['gd_region']) && $wp->query_vars['gd_region'] != '') ? $wp->query_vars['gd_region'] : '';
4351 5
    $gd_city = (isset($wp->query_vars['gd_city']) && $wp->query_vars['gd_city'] != '') ? $wp->query_vars['gd_city'] : '';
4352
4353 5
    $gd_country_actual = $gd_region_actual = $gd_city_actual = '';
4354
4355 5 View Code Duplication
    if (function_exists('get_actual_location_name')) {
4356
        $gd_country_actual = $gd_country != '' ? get_actual_location_name('country', $gd_country, true) : $gd_country;
4357
        $gd_region_actual = $gd_region != '' ? get_actual_location_name('region', $gd_region) : $gd_region;
4358
        $gd_city_actual = $gd_city != '' ? get_actual_location_name('city', $gd_city) : $gd_city;
4359
    }
4360
4361 5 View Code Duplication
    if ($gd_city != '') {
4362
        if ($gd_city_actual != '') {
4363
            $gd_city = $gd_city_actual;
4364
        } else {
4365
            $gd_city = preg_replace('/-(\d+)$/', '', $gd_city);
4366
            $gd_city = preg_replace('/[_-]/', ' ', $gd_city);
4367
            $gd_city = __(geodir_ucwords($gd_city), 'geodirectory');
4368
        }
4369
        $location_single = $gd_city;
4370
4371 5
    } else if ($gd_region != '') {
4372
        if ($gd_region_actual != '') {
4373
            $gd_region = $gd_region_actual;
4374
        } else {
4375
            $gd_region = preg_replace('/-(\d+)$/', '', $gd_region);
4376
            $gd_region = preg_replace('/[_-]/', ' ', $gd_region);
4377
            $gd_region = __(geodir_ucwords($gd_region), 'geodirectory');
4378
        }
4379
4380
        $location_single = $gd_region;
4381 5
    } else if ($gd_country != '') {
4382
        if ($gd_country_actual != '') {
4383
            $gd_country = $gd_country_actual;
4384
        } else {
4385
            $gd_country = preg_replace('/-(\d+)$/', '', $gd_country);
4386
            $gd_country = preg_replace('/[_-]/', ' ', $gd_country);
4387
            $gd_country = __(geodir_ucwords($gd_country), 'geodirectory');
4388
        }
4389
4390
        $location_single = $gd_country;
4391
    }
4392
4393 5 View Code Duplication
    if (!empty($location_array)) {
4394
4395
        $actual_location_name = function_exists('get_actual_location_name') ? true : false;
4396
        $location_array = array_reverse($location_array);
4397
4398
        foreach ($location_array as $location_type => $location) {
4399
            $gd_location_link_text = preg_replace('/-(\d+)$/', '', $location);
4400
            $gd_location_link_text = preg_replace('/[_-]/', ' ', $gd_location_link_text);
4401
4402
            $location_name = geodir_ucwords($gd_location_link_text);
4403
            $location_name = __($location_name, 'geodirectory');
4404
4405
            if ($actual_location_name) {
4406
                $location_type = strpos($location_type, 'gd_') === 0 ? substr($location_type, 3) : $location_type;
4407
                $location_name = get_actual_location_name($location_type, $location, true);
4408
            }
4409
4410
            $location_titles[] = $location_name;
4411
        }
4412
        if (!empty($location_titles)) {
4413
            $location_titles = array_unique($location_titles);
4414
        }
4415
    }
4416
4417
4418 5
    if(strpos($title,'%%location%%') !== false){
4419 1
        $location = '';
4420 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...
4421
            $location = implode(", ", $location_titles);
4422
        }
4423 1
        $title = str_replace("%%location%%",$location,$title);
4424 1
    }
4425
4426 5 View Code Duplication
    if(strpos($title,'%%in_location%%') !== false){
4427 1
        $location = '';
4428 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...
4429
            $location = __('in ', 'geodirectory') . implode(", ", $location_titles);
4430
        }
4431 1
        $title = str_replace("%%in_location%%",$location,$title);
4432 1
    }
4433
4434 5 View Code Duplication
    if(strpos($title,'%%in_location_single%%') !== false){
4435 1
        if($location_single) {
4436
            $location_single = __('in', 'geodirectory') . ' ' .$location_single;
4437
        }
4438 1
        $title = str_replace("%%in_location_single%%",$location_single,$title);
4439 1
    }
4440
4441 5
    if(strpos($title,'%%location_single%%') !== false){
4442
        $title = str_replace("%%location_single%%",$location_single,$title);
4443
    }
4444
4445
4446 5 View Code Duplication
    if(strpos($title,'%%search_term%%') !== false){
4447 1
        $search_term = '';
4448 1
        if(isset($_REQUEST['s'])){
4449
            $search_term = esc_attr($_REQUEST['s']);
4450
        }
4451 1
        $title = str_replace("%%search_term%%",$search_term,$title);
4452 1
    }
4453
4454 5 View Code Duplication
    if(strpos($title,'%%search_near%%') !== false){
4455 1
        $search_term = '';
4456 1
        if(isset($_REQUEST['snear'])){
4457
            $search_term = esc_attr($_REQUEST['snear']);
4458
        }
4459 1
        $title = str_replace("%%search_near%%",$search_term,$title);
4460 1
    }
4461
4462 5
    if(strpos($title,'%%name%%') !== false){
4463 1
        $author_name = get_the_author();
4464 1
        if (!$author_name || $author_name === '') {
4465 1
            $queried_object = get_queried_object();
4466
            
4467 1
            if (isset($queried_object->data->user_nicename)) {
4468 1
                $author_name = $queried_object->data->display_name;
4469 1
            }
4470 1
        }
4471 1
        $title = str_replace("%%name%%", $author_name, $title);
4472 1
    }
4473
    
4474 5
    if (strpos($title, '%%page%%') !== false) {
4475
        $page = geodir_title_meta_page($sep);
4476
        $title = str_replace("%%page%%", $page, $title);
4477
    }
4478 5
    if (strpos($title, '%%pagenumber%%') !== false) {
4479
        $pagenumber = geodir_title_meta_pagenumber();
4480
        $title = str_replace("%%pagenumber%%", $pagenumber, $title);
4481
    }
4482 5
    if (strpos($title, '%%pagetotal%%') !== false) {
4483
        $pagetotal = geodir_title_meta_pagetotal();
4484
        $title = str_replace("%%pagetotal%%", $pagetotal, $title);
4485
    }
4486
4487 5
    $title = wptexturize( $title );
4488 5
    $title = convert_chars( $title );
4489 5
    $title = esc_html( $title );
4490
4491
    /**
4492
     * Filter the title variables after standard ones have been filtered.
4493
     *
4494
     * @since 1.5.7
4495
     * @package GeoDirectory
4496
     * @param string $title The title with variables.
4497
     * @param array $location_array The array of location variables.
4498
     * @param string $gd_page The page being filtered.
4499
     * @param string $sep The separator, default: `|`.
4500
     */
4501
4502 5
    return apply_filters('geodir_filter_title_variables_vars',$title,$location_array, $gd_page, $sep);
4503
}
4504
4505
/**
4506
 * Get the cpt texts for translation.
4507
 *
4508
 * @since 1.5.5
4509
 * @package GeoDirectory
4510
 *
4511
 * @param  array $translation_texts Array of text strings.
4512
 * @return array Translation texts.
4513
 */
4514
function geodir_load_cpt_text_translation($translation_texts = array()) {
4515 1
    $gd_post_types = geodir_get_posttypes('array');
4516
4517 1
    if (!empty($gd_post_types)) {
4518 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...
4519 1
            $labels = isset($cpt_info['labels']) ? $cpt_info['labels'] : '';
4520 1
            $description = isset($cpt_info['description']) ? $cpt_info['description'] : '';
4521 1
            $seo = isset($cpt_info['seo']) ? $cpt_info['seo'] : '';
4522
4523 1
            if (!empty($labels)) {
4524 1 View Code Duplication
                if ($labels['name'] != '' && !in_array($labels['name'], $translation_texts))
4525 1
                    $translation_texts[] = $labels['name'];
4526 1 View Code Duplication
                if ($labels['singular_name'] != '' && !in_array($labels['singular_name'], $translation_texts))
4527 1
                    $translation_texts[] = $labels['singular_name'];
4528 1 View Code Duplication
                if ($labels['add_new'] != '' && !in_array($labels['add_new'], $translation_texts))
4529 1
                    $translation_texts[] = $labels['add_new'];
4530 1 View Code Duplication
                if ($labels['add_new_item'] != '' && !in_array($labels['add_new_item'], $translation_texts))
4531 1
                    $translation_texts[] = $labels['add_new_item'];
4532 1 View Code Duplication
                if ($labels['edit_item'] != '' && !in_array($labels['edit_item'], $translation_texts))
4533 1
                    $translation_texts[] = $labels['edit_item'];
4534 1 View Code Duplication
                if ($labels['new_item'] != '' && !in_array($labels['new_item'], $translation_texts))
4535 1
                    $translation_texts[] = $labels['new_item'];
4536 1 View Code Duplication
                if ($labels['view_item'] != '' && !in_array($labels['view_item'], $translation_texts))
4537 1
                    $translation_texts[] = $labels['view_item'];
4538 1 View Code Duplication
                if ($labels['search_items'] != '' && !in_array($labels['search_items'], $translation_texts))
4539 1
                    $translation_texts[] = $labels['search_items'];
4540 1 View Code Duplication
                if ($labels['not_found'] != '' && !in_array($labels['not_found'], $translation_texts))
4541 1
                    $translation_texts[] = $labels['not_found'];
4542 1 View Code Duplication
                if ($labels['not_found_in_trash'] != '' && !in_array($labels['not_found_in_trash'], $translation_texts))
4543 1
                    $translation_texts[] = $labels['not_found_in_trash'];
4544 1 View Code Duplication
                if (isset($labels['label_post_profile']) && $labels['label_post_profile'] != '' && !in_array($labels['label_post_profile'], $translation_texts))
4545 1
                    $translation_texts[] = $labels['label_post_profile'];
4546 1 View Code Duplication
                if (isset($labels['label_post_info']) && $labels['label_post_info'] != '' && !in_array($labels['label_post_info'], $translation_texts))
4547 1
                    $translation_texts[] = $labels['label_post_info'];
4548 1 View Code Duplication
                if (isset($labels['label_post_images']) && $labels['label_post_images'] != '' && !in_array($labels['label_post_images'], $translation_texts))
4549 1
                    $translation_texts[] = $labels['label_post_images'];
4550 1 View Code Duplication
                if (isset($labels['label_post_map']) && $labels['label_post_map'] != '' && !in_array($labels['label_post_map'], $translation_texts))
4551 1
                    $translation_texts[] = $labels['label_post_map'];
4552 1 View Code Duplication
                if (isset($labels['label_reviews']) && $labels['label_reviews'] != '' && !in_array($labels['label_reviews'], $translation_texts))
4553 1
                    $translation_texts[] = $labels['label_reviews'];
4554 1 View Code Duplication
                if (isset($labels['label_related_listing']) && $labels['label_related_listing'] != '' && !in_array($labels['label_related_listing'], $translation_texts))
4555 1
                    $translation_texts[] = $labels['label_related_listing'];
4556 1
            }
4557
4558 1
            if ($description != '' && !in_array($description, $translation_texts)) {
4559 1
                $translation_texts[] = normalize_whitespace($description);
4560 1
            }
4561
4562 1
            if (!empty($seo)) {
4563 View Code Duplication
                if (isset($seo['meta_keyword']) && $seo['meta_keyword'] != '' && !in_array($seo['meta_keyword'], $translation_texts))
4564
                    $translation_texts[] = normalize_whitespace($seo['meta_keyword']);
4565
4566 View Code Duplication
                if (isset($seo['meta_description']) && $seo['meta_description'] != '' && !in_array($seo['meta_description'], $translation_texts))
4567
                    $translation_texts[] = normalize_whitespace($seo['meta_description']);
4568
            }
4569 1
        }
4570 1
    }
4571 1
    $translation_texts = !empty($translation_texts) ? array_unique($translation_texts) : $translation_texts;
4572
4573 1
    return $translation_texts;
4574
}
4575
4576
/**
4577
 * Remove the location terms to hide term from location url.
4578
 *
4579
 * @since 1.5.5
4580
 * @package GeoDirectory
4581
 *
4582
 * @param  array $location_terms Array of location terms.
4583
 * @return array Location terms.
4584
 */
4585
function geodir_remove_location_terms($location_terms = array()) {
4586
    $location_manager = defined('POST_LOCATION_TABLE') ? true : false;
4587
4588
    if (!empty($location_terms) && $location_manager) {
4589
        $hide_country_part = get_option('geodir_location_hide_country_part');
4590
        $hide_region_part = get_option('geodir_location_hide_region_part');
4591
4592
        if ($hide_region_part && $hide_country_part) {
4593
            if (isset($location_terms['gd_country']))
4594
                unset($location_terms['gd_country']);
4595
            if (isset($location_terms['gd_region']))
4596
                unset($location_terms['gd_region']);
4597
        } else if ($hide_region_part && !$hide_country_part) {
4598
            if (isset($location_terms['gd_region']))
4599
                unset($location_terms['gd_region']);
4600
        } else if (!$hide_region_part && $hide_country_part) {
4601
            if (isset($location_terms['gd_country']))
4602
                unset($location_terms['gd_country']);
4603
        }
4604
    }
4605
4606
    return $location_terms;
4607
}
4608
4609
/**
4610
 * Send notification when a listing has been edited by it's author.
4611
 *
4612
 * @since 1.5.9
4613
 * @package GeoDirectory
4614
 *
4615
 * @param int $post_ID Post ID.
4616
 * @param WP_Post $post Post object.
4617
 * @param bool $update Whether this is an existing listing being updated or not.
4618
 */
4619
function geodir_on_wp_insert_post($post_ID, $post, $update) {
4620 8
    if (!$update) {
4621 7
        return;
4622
    }
4623
    
4624 1
    $action = isset($_REQUEST['action']) ? sanitize_text_field($_REQUEST['action']) : '';
4625 1
    $is_admin = is_admin() && ( !defined('DOING_AJAX' ) || ( defined('DOING_AJAX') && !DOING_AJAX ) )  ? true : false;
4626 1
    $inline_save = $action == 'inline-save' ? true : false;
4627
4628 1
    if (empty($post->post_type) || $is_admin || $inline_save || (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE)) {
4629
        return;
4630
    }
4631
    
4632 1
    if ($action != '' && in_array($action, array('geodir_import_export'))) {
4633
        return;
4634
    }
4635
4636 1
    $user_id = (int)get_current_user_id();
4637
        
4638 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())) {
4639
        $author_id = !empty($post->post_author) ? $post->post_author : 0;
4640
        
4641
        if ($user_id == $author_id && !is_super_admin()) {
4642
            $from_email = get_option('site_email');
4643
            $from_name = get_site_emailName();
4644
            $to_email = get_option('admin_email');
4645
            $to_name = get_option('name');
4646
            $message_type = 'listing_edited';
4647
            
4648
            $notify_edited = true;
4649
            /**
4650
             * Send notification when listing edited by author?
4651
             *
4652
             * @since 1.6.0
4653
             * @param bool $notify_edited Notify on listing edited by author?
4654
             * @param object $post The current post object.
4655
             */
4656
            $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...
4657
            
4658
            geodir_sendEmail($from_email, $from_name, $to_email, $to_name, '', '', '', $message_type, $post_ID);
4659
        }
4660
    }
4661 1
}
4662
4663
/**
4664
 * Retrieve the current page start & end numbering with context (i.e. 'page 2 of 4') for use as replacement string.
4665
 *
4666
 * @since 1.6.0
4667
 * @package GeoDirectory
4668
 *
4669
 * @param string $sep The separator tag.
4670
 *
4671
 * @return string|null The current page start & end numbering.
4672
 */
4673
function geodir_title_meta_page($sep) {
4674
    $replacement = null;
4675
4676
    $max = geodir_title_meta_pagenumbering('max');
4677
    $nr  = geodir_title_meta_pagenumbering('nr');
4678
4679
    if ($max > 1 && $nr > 1) {
4680
        $replacement = sprintf($sep . ' ' . __('Page %1$d of %2$d', 'geodirectory'), $nr, $max);
4681
    }
4682
4683
    return $replacement;
4684
}
4685
4686
/**
4687
 * Retrieve the current page number for use as replacement string.
4688
 *
4689
 * @since 1.6.0
4690
 * @package GeoDirectory
4691
 *
4692
 * @return string|null The current page number.
4693
 */
4694 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...
4695
    $replacement = null;
4696
4697
    $nr = geodir_title_meta_pagenumbering('nr');
4698
    if (isset($nr) && $nr > 0) {
4699
        $replacement = (string)$nr;
4700
    }
4701
4702
    return $replacement;
4703
}
4704
4705
/**
4706
 * Retrieve the current page total for use as replacement string.
4707
 *
4708
 * @since 1.6.0
4709
 * @package GeoDirectory
4710
 *
4711
 * @return string|null The current page total.
4712
 */
4713 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...
4714
    $replacement = null;
4715
4716
    $max = geodir_title_meta_pagenumbering('max');
4717
    if (isset($max) && $max > 0) {
4718
        $replacement = (string)$max;
4719
    }
4720
4721
    return $replacement;
4722
}
4723
4724
/**
4725
 * Determine the page numbering of the current post/page/cpt.
4726
 *
4727
 * @param string $request 'nr'|'max' - whether to return the page number or the max number of pages.
4728
 *
4729
 * @since 1.6.0
4730
 * @package GeoDirectory
4731
 *
4732
 * @global object $wp_query WordPress Query object.
4733
 * @global object $post The current post object.
4734
 *
4735
 * @return int|null The current page numbering.
4736
 */
4737
function geodir_title_meta_pagenumbering($request = 'nr') {
4738
    global $wp_query, $post;
4739
    $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...
4740
    $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...
4741
4742
    $max_num_pages = 1;
4743
4744
    if (!is_singular()) {
4745
        $page_number = get_query_var('paged');
4746
        if ($page_number === 0 || $page_number === '') {
4747
            $page_number = 1;
4748
        }
4749
4750
        if (isset($wp_query->max_num_pages) && ($wp_query->max_num_pages != '' && $wp_query->max_num_pages != 0)) {
4751
            $max_num_pages = $wp_query->max_num_pages;
4752
        }
4753
    } else {
4754
        $page_number = get_query_var('page');
4755
        if ($page_number === 0 || $page_number === '') {
4756
            $page_number = 1;
4757
        }
4758
4759
        if (isset($post->post_content)) {
4760
            $max_num_pages = (substr_count($post->post_content, '<!--nextpage-->' ) + 1);
4761
        }
4762
    }
4763
4764
    $return = null;
4765
4766
    switch ($request) {
4767
        case 'nr':
4768
            $return = $page_number;
4769
            break;
4770
        case 'max':
4771
            $return = $max_num_pages;
4772
            break;
4773
    }
4774
4775
    return $return;
4776
}
4777
4778
/**
4779
 * Filter the terms with count empty.
4780
 *
4781
 * @since 1.5.4
4782
 *
4783
 * @param array $terms Terms array.
4784
 * @return array Terms.
4785
 */
4786
function geodir_filter_empty_terms($terms) {
4787 3
    if (empty($terms)) {
4788 3
        return $terms;
4789
    }
4790
4791 3
    $return = array();
4792 3
    foreach ($terms as $term) {
4793 3
        if (isset($term->count) && $term->count > 0) {
4794 3
            $return[] = $term;
4795 3
        }
4796 3
    }
4797
    return $return;
4798
}