Test Failed
Pull Request — master (#332)
by Kiran
17:36
created

general_functions.php ➔ geodir_comments_number()   D

Complexity

Conditions 9
Paths 6

Size

Total Lines 25
Code Lines 18

Duplication

Lines 16
Ratio 64 %

Code Coverage

Tests 4
CRAP Score 9

Importance

Changes 0
Metric Value
cc 9
eloc 18
nc 6
nop 1
dl 16
loc 25
ccs 4
cts 4
cp 1
crap 9
rs 4.909
c 0
b 0
f 0
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
	if ( is_ssl() ) :
31 21
		return str_replace( 'http://', 'https://', WP_PLUGIN_URL ) . "/" . plugin_basename( dirname( dirname( __FILE__ ) ) );
32
	else :
33
		return WP_PLUGIN_URL . "/" . plugin_basename( dirname( dirname( __FILE__ ) ) );
34 21
	endif;
35
}
36
37
38
/**
39
 * Return the plugin path.
40
 *
41
 * Return the plugin folder path WITHOUT TRAILING SLASH.
42
 *
43
 * @since   1.0.0
44
 * @package GeoDirectory
45
 * @return string example url eg: /home/geo/public_html/wp-content/plugins/geodirectory
46
 */
47
function geodir_plugin_path() {
48
	if ( defined( 'GD_TESTING_MODE' ) && GD_TESTING_MODE ) {
49
		return dirname( dirname( __FILE__ ) );
50 34
	} else {
51 34
		return WP_PLUGIN_DIR . "/" . plugin_basename( dirname( dirname( __FILE__ ) ) );
52
	}
53
}
54
55
/**
56
 * Check if a GeoDirectory addon plugin is active.
57
 *
58
 * @since   1.0.0
59
 * @package GeoDirectory
60
 *
61
 * @param string $plugin plugin uri.
62
 *
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
	$active_plugins = get_option( 'active_plugins' );
68
	foreach ( $active_plugins as $key => $active_plugin ) {
69
		if ( strstr( $active_plugin, $plugin ) ) {
70
			return true;
71
		}
72
	}
73
74
	return false;
75
}
76
77
78
/**
79
 * Return the formatted date.
80
 *
81
 * Return a formatted date from a date/time string according to WordPress date format. $date must be in format : 'Y-m-d
82
 * H:i:s'.
83
 *
84
 * @since   1.0.0
85
 * @package GeoDirectory
86
 *
87
 * @param string $date must be in format: 'Y-m-d H:i:s'.
88
 *
89
 * @return bool|int|string the formatted date.
90
 */
91
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 (L1513-1516) 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...
92
	return mysql2date( get_option( 'date_format' ), $date );
93
}
94
95
/**
96
 * Return the formatted time.
97
 *
98
 * Return a formatted time from a date/time string according to WordPress time format. $time must be in format : 'Y-m-d
99
 * H:i:s'.
100
 *
101
 * @since   1.0.0
102
 * @package GeoDirectory
103
 *
104
 * @param string $time must be in format: 'Y-m-d H:i:s'.
105
 *
106
 * @return bool|int|string the formatted time.
107
 */
108
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 (L1528-1531) 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...
109
	return mysql2date( get_option( 'time_format' ), $time, $translate = true );
110
}
111
112
113
/**
114
 * Return a formatted link with parameters.
115
 *
116
 * Returns a link with new parameters and currently used parameters regardless of ? or & in the $url parameter.
117
 *
118
 * @since   1.0.0
119
 * @package GeoDirectory
120
 *
121 15
 * @param string $url                  The main url to be used.
122 15
 * @param array $params                The arguments array.
123 15
 * @param bool $use_existing_arguments Do you want to use existing arguments? Default: false.
124 15
 *
125 15
 * @return string Formatted link.
126 15
 */
127
function geodir_getlink( $url, $params = array(), $use_existing_arguments = false ) {
128 15
	if ( $use_existing_arguments ) {
129 15
		$params = $params + $_GET;
130 15
	}
131
	if ( ! $params ) {
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...
132
		return $url;
133
	}
134
	$link = $url;
135 15
	if ( strpos( $link, '?' ) === false ) {
136
		$link .= '?';
137 15
	} //If there is no '?' add one at the end
138 15
	elseif ( strpos( $link, '//maps.google.com/maps/api/js?language=' ) ) {
139
		$link .= '&amp;';
140 15
	} //If there is no '&' at the END, add one.
141
	elseif ( ! preg_match( '/(\?|\&(amp;)?)$/', $link ) ) {
142
		$link .= '&';
143
	} //If there is no '&' at the END, add one.
144
145
	$params_arr = array();
146
	foreach ( $params as $key => $value ) {
147
		if ( gettype( $value ) == 'array' ) { //Handle array data properly
148
			foreach ( $value as $val ) {
149
				$params_arr[] = $key . '[]=' . urlencode( $val );
150
			}
151
		} else {
152
			$params_arr[] = $key . '=' . urlencode( $value );
153
		}
154
	}
155 3
	$link .= implode( '&', $params_arr );
156
157
	return $link;
158 3
}
159 3
160
161 3
/**
162
 * Returns add listing page link.
163 3
 *
164
 * @since   1.0.0
165
 * @package GeoDirectory
166
 * @global object $wpdb     WordPress Database object.
167
 *
168
 * @param string $post_type The post type.
169
 *
170
 * @return string Listing page url if valid. Otherwise home url will be returned.
171
 */
172
function geodir_get_addlisting_link( $post_type = '' ) {
173
	global $wpdb;
174
175
	//$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...
176
	$check_pkg = 1;
177
	if ( post_type_exists( $post_type ) && $check_pkg ) {
178 9
179 9
		$add_listing_link = get_page_link( geodir_add_listing_page_id() );
180
181
		return esc_url( add_query_arg( array( 'listing_type' => $post_type ), $add_listing_link ) );
182 9
	} else {
183 9
		return get_bloginfo( 'url' );
184
	}
185
}
186
187
/**
188
 * Get the current page URL.
189
 *
190 9
 * @since   1.0.0
191
 * @package GeoDirectory
192
 * @since   1.4.2 Removed the port number from the URL if port 80 is not being used.
193
 * @since   1.6.9 Fix $_SERVER['SERVER_NAME'] with nginx server.
194
 * @return string The current URL.
195
 */
196
function geodir_curPageURL() {
197
	$pageURL = 'http';
198
	if (isset($_SERVER['HTTPS']) && !empty($_SERVER['HTTPS']) && (strtolower($_SERVER['HTTPS']) == 'on')) {
199
		$pageURL .= "s";
200
	}
201
	$pageURL .= "://";
202
	
203
	/*
204
	 * Since we are assigning the URI from the server variables, we first need
205
	 * to determine if we are running on apache or IIS.  If PHP_SELF and REQUEST_URI
206
	 * are present, we will assume we are running on apache.
207
	 */
208
	if (!empty($_SERVER['PHP_SELF']) && !empty($_SERVER['REQUEST_URI'])) {
209
		// To build the entire URI we need to prepend the protocol, and the http host
210
		// to the URI string.
211
		$pageURL .= $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
212
	} else {
213
		/*
214
		 * Since we do not have REQUEST_URI to work with, we will assume we are
215
		 * running on IIS and will therefore need to work some magic with the SCRIPT_NAME and
216
		 * QUERY_STRING environment variables.
217
		 *
218
		 * IIS uses the SCRIPT_NAME variable instead of a REQUEST_URI variable... thanks, MS
219
		 */
220
		$pageURL .= $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME'];
221
		
222
		// If the query string exists append it to the URI string
223
		if (isset($_SERVER['QUERY_STRING']) && !empty($_SERVER['QUERY_STRING'])) {
224
			$pageURL .= '?' . $_SERVER['QUERY_STRING'];
225
		}
226
	}
227
	
228
	/**
229
	 * Filter the current page URL returned by function geodir_curPageURL().
230
	 *
231
	 * @since 1.4.1
232
	 *
233
	 * @param string $pageURL The URL of the current page.
234
	 */
235
	return apply_filters( 'geodir_curPageURL', $pageURL );
236
}
237
238
/**
239
 * Clean variables.
240
 *
241
 * This function is used to create posttype, posts, taxonomy and terms slug.
242
 *
243
 * @since   1.0.0
244
 * @package GeoDirectory
245
 *
246
 * @param string $string The variable to clean.
247
 *
248
 * @return string Cleaned variable.
249
 */
250
function geodir_clean( $string ) {
251
252
	$string = trim( strip_tags( stripslashes( $string ) ) );
253
	$string = str_replace( " ", "-", $string ); // Replaces all spaces with hyphens.
254
	$string = preg_replace( '/[^A-Za-z0-9\-\_]/', '', $string ); // Removes special chars.
255 28
	$string = preg_replace( '/-+/', '-', $string ); // Replaces multiple hyphens with single one.
256
257
	return $string;
258
}
259 28
260
/**
261 25
 * Get Week Days list.
262 1
 *
263 24
 * @since   1.0.0
264
 * @package GeoDirectory
265
 * @return array Week days.
266
 */
267 24
function geodir_get_weekday() {
268 27
	return array(
269 22
		__( 'Sunday', 'geodirectory' ),
270 22
		__( 'Monday', 'geodirectory' ),
271 1
		__( 'Tuesday', 'geodirectory' ),
272 22
		__( 'Wednesday', 'geodirectory' ),
273 21
		__( 'Thursday', 'geodirectory' ),
274 27
		__( 'Friday', 'geodirectory' ),
275 6
		__( 'Saturday', 'geodirectory' )
276 6
	);
277 5
}
278 27
279 12
/**
280 12
 * Get Weeks lists.
281 12
 *
282 12
 * @since   1.0.0
283 10
 * @package GeoDirectory
284 26
 * @return array Weeks.
285 7
 */
286 7
function geodir_get_weeks() {
287 7
	return array(
288 7
		__( 'First', 'geodirectory' ),
289
		__( 'Second', 'geodirectory' ),
290 7
		__( 'Third', 'geodirectory' ),
291 26
		__( 'Fourth', 'geodirectory' ),
292 12
		__( 'Last', 'geodirectory' )
293
	);
294
}
295
296
297 12
/**
298 12
 * Check that page is.
299 12
 *
300 12
 * @since   1.0.0
301
 * @since   1.5.6 Added to check GD invoices and GD checkout pages.
302 12
 * @since   1.5.7 Updated to validate buddypress dashboard listings page as a author page.
303 25
 * @package GeoDirectory
304
 * @global object $wp_query WordPress Query object.
305 8
 * @global object $post     The current post object.
306 8
 *
307
 * @param string $gdpage    The page type.
308 9
 *
309 25
 * @return bool If valid returns true. Otherwise false.
310 7
 */
311 7
function geodir_is_page( $gdpage = '' ) {
312 6
313 25
	global $wp_query, $post, $wp;
314 24
	//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...
315 24
316
	switch ( $gdpage ):
317 24
		case 'add-listing':
318
319
			if ( is_page() && get_query_var( 'page_id' ) == geodir_add_listing_page_id() ) {
320
				return true;
321
			} elseif ( is_page() && isset( $post->post_content ) && has_shortcode( $post->post_content, 'gd_add_listing' ) ) {
322 24
				return true;
323 25
			}
324 24
325 24
			break;
326 23
		case 'preview':
327 10
			if ( ( is_page() && get_query_var( 'page_id' ) == geodir_preview_page_id() ) && isset( $_REQUEST['listing_type'] )
328 1
			     && in_array( $_REQUEST['listing_type'], geodir_get_posttypes() )
329 1
			) {
330 1
				return true;
331 9
			}
332 9
			break;
333 9
		case 'listing-success':
334 9
			if ( is_page() && get_query_var( 'page_id' ) == geodir_success_page_id() ) {
335 7
				return true;
336
			}
337
			break;
338 View Code Duplication
		case 'detail':
339 7
			$post_type = get_query_var( 'post_type' );
340
			if ( is_array( $post_type ) ) {
341
				$post_type = reset( $post_type );
342
			}
343 7
			if ( is_single() && in_array( $post_type, geodir_get_posttypes() ) ) {
344 7
				return true;
345
			}
346
			break;
347 7 View Code Duplication
		case 'pt':
348
			$post_type = get_query_var( 'post_type' );
349
			if ( is_array( $post_type ) ) {
350
				$post_type = reset( $post_type );
351 28
			}
352
			if ( is_post_type_archive() && in_array( $post_type, geodir_get_posttypes() ) && ! is_tax() ) {
353
				return true;
354
			}
355
356
			break;
357
		case 'listing':
358
			if ( is_tax() && geodir_get_taxonomy_posttype() ) {
359
				global $current_term, $taxonomy, $term;
360
361
				return true;
362
			}
363
			$post_type = get_query_var( 'post_type' );
364
			if ( is_array( $post_type ) ) {
365
				$post_type = reset( $post_type );
366
			}
367
			if ( is_post_type_archive() && in_array( $post_type, geodir_get_posttypes() ) ) {
368
				return true;
369
			}
370
371
			break;
372
		case 'home':
373
374
			if ( ( is_page() && get_query_var( 'page_id' ) == geodir_home_page_id() ) || is_page_geodir_home() ) {
375
				return true;
376
			}
377
378
			break;
379
		case 'location':
380
			if ( is_page() && get_query_var( 'page_id' ) == geodir_location_page_id() ) {
381
				return true;
382
			}
383
			break;
384
		case 'author':
385
			if ( is_author() && isset( $_REQUEST['geodir_dashbord'] ) ) {
386
				return true;
387
			}
388
389
			if ( function_exists( 'bp_loggedin_user_id' ) && function_exists( 'bp_displayed_user_id' ) && $my_id = (int) bp_loggedin_user_id() ) {
390
				if ( ( (bool) bp_is_current_component( 'listings' ) || (bool) bp_is_current_component( 'favorites' ) ) && $my_id > 0 && $my_id == (int) bp_displayed_user_id() ) {
391
					return true;
392
				}
393
			}
394
			break;
395
		case 'search':
396
			if ( is_search() && isset( $_REQUEST['geodir_search'] ) ) {
397
				return true;
398
			}
399
			break;
400
		case 'info':
401
			if ( is_page() && get_query_var( 'page_id' ) == geodir_info_page_id() ) {
402
				return true;
403
			}
404
			break;
405
		case 'login':
406
			if ( is_page() && get_query_var( 'page_id' ) == geodir_login_page_id() ) {
407
				return true;
408
			}
409
			break;
410
		case 'checkout':
411 View Code Duplication
			if ( is_page() && function_exists( 'geodir_payment_checkout_page_id' ) && get_query_var( 'page_id' ) == geodir_payment_checkout_page_id() ) {
412
				return true;
413
			}
414
			break;
415
		case 'invoices':
416 View Code Duplication
			if ( is_page() && function_exists( 'geodir_payment_invoices_page_id' ) && get_query_var( 'page_id' ) == geodir_payment_invoices_page_id() ) {
417
				return true;
418
			}
419
			break;
420
		default:
421
			return false;
422
			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...
423
424
	endswitch;
425
426
	//endif;
427
428
	return false;
429
}
430
431
/**
432
 * Sets a key and value in $wp object if the current page is a geodir page.
433
 *
434
 * @since   1.0.0
435
 * @since   1.5.4 Added check for new style GD homepage.
436
 * @since   1.5.6 Added check for GD invoices and GD checkout page.
437
 * @package GeoDirectory
438
 *
439
 * @param object $wp WordPress object.
440
 */
441
function geodir_set_is_geodir_page( $wp ) {
442
	if ( ! is_admin() ) {
443
		//$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...
444
		//print_r()
445
		if ( empty( $wp->query_vars ) || ! array_diff( array_keys( $wp->query_vars ), array(
446
				'preview',
447
				'page',
448
				'paged',
449
				'cpage'
450
			) )
451
		) {
452
			if ( geodir_is_page( 'home' ) ) {
453
				$wp->query_vars['gd_is_geodir_page'] = true;
454
			}
455
456
457
		}
458
459
		if ( ! isset( $wp->query_vars['gd_is_geodir_page'] ) && isset( $wp->query_vars['page_id'] ) ) {
460
			if (
461
				$wp->query_vars['page_id'] == geodir_add_listing_page_id()
462
				|| $wp->query_vars['page_id'] == geodir_preview_page_id()
463
				|| $wp->query_vars['page_id'] == geodir_success_page_id()
464
				|| $wp->query_vars['page_id'] == geodir_location_page_id()
465
				|| $wp->query_vars['page_id'] == geodir_home_page_id()
466
				|| $wp->query_vars['page_id'] == geodir_info_page_id()
467
				|| $wp->query_vars['page_id'] == geodir_login_page_id()
468 30
				|| ( function_exists( 'geodir_payment_checkout_page_id' ) && $wp->query_vars['page_id'] == geodir_payment_checkout_page_id() )
469 30
				|| ( function_exists( 'geodir_payment_invoices_page_id' ) && $wp->query_vars['page_id'] == geodir_payment_invoices_page_id() )
470 30
			) {
471
				$wp->query_vars['gd_is_geodir_page'] = true;
472 30
			}
473
		}
474
475
		if ( ! isset( $wp->query_vars['gd_is_geodir_page'] ) && isset( $wp->query_vars['pagename'] ) ) {
476
			$page = get_page_by_path( $wp->query_vars['pagename'] );
477
478
			if ( ! empty( $page ) && (
479
					$page->ID == geodir_add_listing_page_id()
480
					|| $page->ID == geodir_preview_page_id()
481
					|| $page->ID == geodir_success_page_id()
482
					|| $page->ID == geodir_location_page_id()
483
					|| ( isset( $wp->query_vars['page_id'] ) && $wp->query_vars['page_id'] == geodir_home_page_id() )
484
					|| ( isset( $wp->query_vars['page_id'] ) && $wp->query_vars['page_id'] == geodir_info_page_id() )
485
					|| ( isset( $wp->query_vars['page_id'] ) && $wp->query_vars['page_id'] == geodir_login_page_id() )
486
					|| ( isset( $wp->query_vars['page_id'] ) && function_exists( 'geodir_payment_checkout_page_id' ) && $wp->query_vars['page_id'] == geodir_payment_checkout_page_id() )
487 9
					|| ( isset( $wp->query_vars['page_id'] ) && function_exists( 'geodir_payment_invoices_page_id' ) && $wp->query_vars['page_id'] == geodir_payment_invoices_page_id() )
488 9
				)
489 9
			) {
490 9
				$wp->query_vars['gd_is_geodir_page'] = true;
491 9
			}
492
		}
493
494
495
		if ( ! isset( $wp->query_vars['gd_is_geodir_page'] ) && isset( $wp->query_vars['post_type'] ) && $wp->query_vars['post_type'] != '' ) {
496
			$requested_post_type = $wp->query_vars['post_type'];
497
			// check if this post type is geodirectory post types
498
			$post_type_array = geodir_get_posttypes();
499 9
			if ( in_array( $requested_post_type, $post_type_array ) ) {
500
				$wp->query_vars['gd_is_geodir_page'] = true;
501 9
			}
502
		}
503
504
		if ( ! isset( $wp->query_vars['gd_is_geodir_page'] ) ) {
505
			$geodir_taxonomis = geodir_get_taxonomies( '', true );
506
			if ( ! empty( $geodir_taxonomis ) ) {
507
				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...
508 9
					if ( array_key_exists( $taxonomy, $wp->query_vars ) ) {
509
						$wp->query_vars['gd_is_geodir_page'] = true;
510
						break;
511
					}
512
				}
513
			}
514
515
		}
516
517
		if ( ! isset( $wp->query_vars['gd_is_geodir_page'] ) && isset( $wp->query_vars['author_name'] ) && isset( $_REQUEST['geodir_dashbord'] ) ) {
518
			$wp->query_vars['gd_is_geodir_page'] = true;
519
		}
520
521
522
		if ( ! isset( $wp->query_vars['gd_is_geodir_page'] ) && isset( $_REQUEST['geodir_search'] ) ) {
523
			$wp->query_vars['gd_is_geodir_page'] = true;
524
		}
525
526
527
//check if homepage
528
		if ( ! isset( $wp->query_vars['gd_is_geodir_page'] )
529
		     && ! isset( $wp->query_vars['page_id'] )
530
		     && ! isset( $wp->query_vars['pagename'] )
531
		     && is_page_geodir_home()
532
		) {
533
			$wp->query_vars['gd_is_geodir_page'] = true;
534
		}
535
		//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...
536
		/*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...
537
		print_r($wp) ;
538
		echo "</pre>" ;
539
	//	exit();
540
			*/
541
	} // end of is admin
542
}
543
544
/**
545
 * Checks whether the current page is a GD page or not.
546
 *
547
 * @since   1.0.0
548
 * @package GeoDirectory
549
 * @global object $wp WordPress object.
550
 * @return bool If the page is GD page returns true. Otherwise false.
551
 */
552
function geodir_is_geodir_page() {
553
	global $wp;
554
	if ( isset( $wp->query_vars['gd_is_geodir_page'] ) && $wp->query_vars['gd_is_geodir_page'] ) {
555
		return true;
556
	} else {
557
		return false;
558
	}
559
}
560
561
if ( ! function_exists( 'geodir_get_imagesize' ) ) {
562
	/**
563
	 * Get image size using the size key .
564
	 *
565
	 * @since   1.0.0
566
	 * @package GeoDirectory
567
	 *
568
	 * @param string $size The image size key.
569
	 *
570
	 * @return array|mixed|void|WP_Error If valid returns image size. Else returns error.
571
	 */
572 1
	function geodir_get_imagesize( $size = '' ) {
573 1
574
		$imagesizes = array(
575
			'list-thumb'   => array( 'w' => 283, 'h' => 188 ),
576 1
			'thumbnail'    => array( 'w' => 125, 'h' => 125 ),
577 1
			'widget-thumb' => array( 'w' => 50, 'h' => 50 ),
578
			'slider-thumb' => array( 'w' => 100, 'h' => 100 )
579
		);
580 1
581 1
		/**
582 1
		 * Filter the image sizes array.
583
		 *
584
		 * @since 1.0.0
585
		 *
586
		 * @param array $imagesizes Image size array.
587
		 */
588
		$imagesizes = apply_filters( 'geodir_imagesizes', $imagesizes );
589
590
		if ( ! empty( $size ) && array_key_exists( $size, $imagesizes ) ) {
591
			/**
592
			 * Filters image size of the passed key.
593
			 *
594
			 * @since 1.0.0
595
			 *
596
			 * @param array $imagesizes [$size] Image size array of the passed key.
597 1
			 */
598 1
			return apply_filters( 'geodir_get_imagesize_' . $size, $imagesizes[ $size ] );
599
600
		} elseif ( ! empty( $size ) ) {
601
602
			return new WP_Error( 'geodir_no_imagesize', __( "Given image size is not valid", 'geodirectory' ) );
603
604
		}
605
606
		return $imagesizes;
607
	}
608
}
609
610
/**
611
 * Get an image size
612
 *
613
 * Variable is filtered by geodir_get_image_size_{image_size}
614
 */
615
/*
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...
616
function geodir_get_image_size( $image_size ) {
617
	$return = '';
618 1
	switch ($image_size) :
619
		case "list_thumbnail_size" : $return = get_option('geodirectory_list_thumbnail_size'); break;
620 1
	endswitch;
621 1
	return apply_filters( 'geodir_get_image_size_'.$image_size, $return );
622 1
}
623 1
*/
624 1
625 1
626 1
if ( ! function_exists( 'createRandomString' ) ) {
627 1
	/**
628
	 * Creates random string.
629
	 *
630
	 * @since   1.0.0
631
	 * @package GeoDirectory
632
	 * @return string Random string.
633
	 */
634
	function createRandomString() {
635
		$chars = "abcdefghijkmlnopqrstuvwxyz1023456789";
636
		srand( (double) microtime() * 1000000 );
637
		$i       = 0;
638
		$rstring = '';
639
		while ( $i <= 25 ) {
640
			$num     = rand() % 33;
641
			$tmp     = substr( $chars, $num, 1 );
642
			$rstring = $rstring . $tmp;
643
			$i ++;
644
		}
645
646
		return $rstring;
647
	}
648
}
649
650
if ( ! function_exists( 'geodir_getDistanceRadius' ) ) {
651
	/**
652 9
	 * Calculates the distance radius.
653
	 *
654
	 * @since   1.0.0
655 9
	 * @package GeoDirectory
656 9
	 *
657
	 * @param string $uom Measurement unit type.
658 9
	 *
659 2
	 * @return float The mean radius.
660 2
	 */
661 9
	function geodir_getDistanceRadius( $uom = 'km' ) {
662 2
//	Use Haversine formula to calculate the great circle distance between two points identified by longitude and latitude
663 2
		switch ( geodir_strtolower( $uom ) ):
664 7
			case 'km'    :
665 1
				$earthMeanRadius = 6371.009; // km
666 1
				break;
667 1
			case 'm'    :
668 5
			case 'meters'    :
669 2
				$earthMeanRadius = 6371.009 * 1000; // km
670 2
				break;
671 2
			case 'miles'    :
672 4
				$earthMeanRadius = 3958.761; // miles
673 1
				break;
674 1
			case 'yards'    :
675 2
			case 'yds'    :
676 1
				$earthMeanRadius = 3958.761 * 1760; // yards
677 1
				break;
678 1
			case 'feet'    :
679
			case 'ft'    :
680
				$earthMeanRadius = 3958.761 * 1760 * 3; // feet
681
				break;
682
			case 'nm'    :
683 9
				$earthMeanRadius = 3440.069; //  miles
684 9
				break;
685 9
			default:
686
				$earthMeanRadius = 3958.761; // miles
687 9
				break;
688 9
		endswitch;
689 9
690
		return $earthMeanRadius;
691 9
	}
692 9
}
693 9
694 9
695
if ( ! function_exists( 'geodir_calculateDistanceFromLatLong' ) ) {
696 9
	/**
697 9
	 * Calculate the great circle distance between two points identified by longitude and latitude.
698 1
	 *
699 1
	 * @since   1.0.0
700
	 * @package GeoDirectory
701 9
	 *
702 9
	 * @param array $point1 Latitude and Longitude of point 1.
703
	 * @param array $point2 Latitude and Longitude of point 2.
704 9
	 * @param string $uom   Unit of measurement.
705
	 *
706 9
	 * @return float The distance.
707 2
	 */
708 2
	function geodir_calculateDistanceFromLatLong( $point1, $point2, $uom = 'km' ) {
709 2
//	Use Haversine formula to calculate the great circle distance between two points identified by longitude and latitude
710 9
711 9
		$earthMeanRadius = geodir_getDistanceRadius( $uom );
712 9
713 9
		$deltaLatitude  = deg2rad( (float) $point2['latitude'] - (float) $point1['latitude'] );
714
		$deltaLongitude = deg2rad( (float) $point2['longitude'] - (float) $point1['longitude'] );
715 9
		$a              = sin( $deltaLatitude / 2 ) * sin( $deltaLatitude / 2 ) +
716 9
		                  cos( deg2rad( (float) $point1['latitude'] ) ) * cos( deg2rad( (float) $point2['latitude'] ) ) *
717 9
		                  sin( $deltaLongitude / 2 ) * sin( $deltaLongitude / 2 );
718
		$c              = 2 * atan2( sqrt( $a ), sqrt( 1 - $a ) );
719 9
		$distance       = $earthMeanRadius * $c;
720 6
721 6
		return $distance;
722
723 9
	}
724 6
}
725 6
726
727 9
if ( ! function_exists( 'geodir_sendEmail' ) ) {
728 9
	/**
729 9
	 * The main function that send transactional emails using the args provided.
730
	 *
731 9
	 * @since   1.0.0
732 9
	 * @since   1.5.7 Added db translations for notifications subject and content.
733 9
	 * @package GeoDirectory
734
	 *
735 9
	 * @param string $fromEmail     Sender email address.
736 9
	 * @param string $fromEmailName Sender name.
737 9
	 * @param string $toEmail       Receiver email address.
738 9
	 * @param string $toEmailName   Receiver name.
739
	 * @param string $to_subject    Email subject.
740 9
	 * @param string $to_message    Email content.
741
	 * @param string $extra         Not being used.
742
	 * @param string $message_type  The message type. Can be send_friend, send_enquiry, forgot_password, registration, post_submit, listing_published.
743
	 * @param string $post_id       The post ID.
744
	 * @param string $user_id       The user ID.
745
	 */
746
	function geodir_sendEmail( $fromEmail, $fromEmailName, $toEmail, $toEmailName, $to_subject, $to_message, $extra = '', $message_type, $post_id = '', $user_id = '' ) {
747
		$login_details = '';
748
749
		// strip slashes from subject & message text
750
		$to_subject = stripslashes_deep( $to_subject );
751
		$to_message = stripslashes_deep( $to_message );
752
753
		if ( $message_type == 'send_friend' ) {
754
			$subject = get_option( 'geodir_email_friend_subject' );
755
			$message = get_option( 'geodir_email_friend_content' );
756
		} elseif ( $message_type == 'send_enquiry' ) {
757
			$subject = get_option( 'geodir_email_enquiry_subject' );
758
			$message = get_option( 'geodir_email_enquiry_content' );
759 9
760
			// change to name in some cases
761
			$post_author = get_post_field( 'post_author', $post_id );
762
			if(is_super_admin( $post_author  )){// if admin probably not the post author so change name
763
				$toEmailName = __('Business Owner','geodirectory');
764
			}elseif(defined('GEODIRCLAIM_VERSION') && geodir_get_post_meta($post_id,'claimed')!='1'){// if claim manager installed but listing not claimed
765
				$toEmailName = __('Business Owner','geodirectory');
766
			}
767
768
769
		} elseif ( $message_type == 'forgot_password' ) {
770
			$subject       = get_option( 'geodir_forgot_password_subject' );
771
			$message       = get_option( 'geodir_forgot_password_content' );
772
			$login_details = $to_message;
773
		} elseif ( $message_type == 'registration' ) {
774
			$subject       = get_option( 'geodir_registration_success_email_subject' );
775
			$message       = get_option( 'geodir_registration_success_email_content' );
776
			$login_details = $to_message;
777 9
		} elseif ( $message_type == 'post_submit' ) {
778
			$subject = get_option( 'geodir_post_submited_success_email_subject' );
779
			$message = get_option( 'geodir_post_submited_success_email_content' );
780
		} elseif ( $message_type == 'listing_published' ) {
781
			$subject = get_option( 'geodir_post_published_email_subject' );
782
			$message = get_option( 'geodir_post_published_email_content' );
783
		} elseif ( $message_type == 'listing_edited' ) {
784
			$subject = get_option( 'geodir_post_edited_email_subject_admin' );
785
			$message = get_option( 'geodir_post_edited_email_content_admin' );
786
		}
787
788
		if ( ! empty( $subject ) ) {
789
			$subject = __( stripslashes_deep( $subject ), 'geodirectory' );
790
		}
791
792
		if ( ! empty( $message ) ) {
793
			$message = __( stripslashes_deep( $message ), 'geodirectory' );
794
		}
795 9
796
		$to_message        = nl2br( $to_message );
797
		$sitefromEmail     = get_option( 'site_email' );
798
		$sitefromEmailName = get_site_emailName();
799
		$productlink       = get_permalink( $post_id );
800
801
		$user_login = '';
802
		if ( $user_id > 0 && $user_info = get_userdata( $user_id ) ) {
803
			$user_login = $user_info->user_login;
804
		}
805
806
		$posted_date = '';
807
		$listingLink = '';
808
809
		$post_info = get_post( $post_id );
810
811
		if ( $post_info ) {
812
			$posted_date = $post_info->post_date;
813 9
			$listingLink = '<a href="' . $productlink . '"><b>' . $post_info->post_title . '</b></a>';
814
		}
815 9
		$siteurl       = home_url();
816
		$siteurl_link  = '<a href="' . $siteurl . '">' . $siteurl . '</a>';
817 9
		$loginurl      = geodir_login_url();
818
		$loginurl_link = '<a href="' . $loginurl . '">login</a>';
819
        
820
		$post_author_id   = ! empty( $post_info ) ? $post_info->post_author : 0;
821
		$post_author_data = $post_author_id ? get_userdata( $post_author_id ) : NULL;
822
		$post_author_name = geodir_get_client_name( $post_author_id );
823
		$post_author_email = !empty( $post_author_data->user_email ) ? $post_author_data->user_email : '';
824
		$current_date     = date_i18n( 'Y-m-d H:i:s', current_time( 'timestamp' ) );
825
826
		if ( $fromEmail == '' ) {
827
			$fromEmail = get_option( 'site_email' );
828
		}
829
830
		if ( $fromEmailName == '' ) {
831
			$fromEmailName = get_option( 'site_email_name' );
832 9
		}
833 9
834
		$search_array  = array(
835 9
			'[#listing_link#]',
836 9
			'[#site_name_url#]',
837 1
			'[#post_id#]',
838 1
			'[#site_name#]',
839
			'[#to_name#]',
840 1
			'[#from_name#]',
841 1
			'[#subject#]',
842 1
			'[#comments#]',
843
			'[#login_url#]',
844 1
			'[#login_details#]',
845 1
			'[#client_name#]',
846 1
			'[#posted_date#]',
847
			'[#from_email#]',
848 1
			'[#user_login#]',
849 1
			'[#username#]',
850
			'[#post_author_id#]',
851 1
			'[#post_author_name#]',
852 8
			'[#user_email#]',
853 2
			'[#current_date#]',
854 2
		);
855 2
		$replace_array = array(
856 6
			$listingLink,
857 2
			$siteurl_link,
858 2
			$post_id,
859 2
			$sitefromEmailName,
860 4
			$toEmailName,
861 2
			$fromEmailName,
862 2
			$to_subject,
863 2
			$to_message,
864 2
			$loginurl_link,
865 1
			$login_details,
866 1
			$toEmailName,
867 1
			$posted_date,
868
			$fromEmail,
869 9
			$user_login,
870 8
			$user_login,
871
			$post_author_id,
872 8
			$post_author_name,
873
			$post_author_email,
874
			$current_date,
875
		);
876
		$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...
877
878
		$search_array  = array(
879
			'[#listing_link#]',
880
			'[#site_name_url#]',
881
			'[#post_id#]',
882
			'[#site_name#]',
883
			'[#to_name#]',
884
			'[#from_name#]',
885 8
			'[#subject#]',
886
			'[#client_name#]',
887 9
			'[#posted_date#]',
888
			'[#from_email#]',
889
			'[#user_login#]',
890
			'[#username#]',
891
			'[#post_author_id#]',
892
			'[#post_author_name#]',
893
			'[#user_email#]',
894
			'[#current_date#]'
895
		);
896
		$replace_array = array(
897
			$listingLink,
898
			$siteurl_link,
899
			$post_id,
900
			$sitefromEmailName,
901
			$toEmailName,
902
			$fromEmailName,
903
			$to_subject,
904
			$toEmailName,
905
			$posted_date,
906
			$fromEmail,
907
			$user_login,
908
			$user_login,
909
			$post_author_id,
910
			$post_author_name,
911
			$post_author_email,
912
			$current_date
913
		);
914
		$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...
915
916
		$headers =  array();
917
		$headers[] = 'Content-type: text/html; charset=UTF-8';
918
		$headers[] = "Reply-To: " . $fromEmail;
919
		$headers[] = 'From: ' . $sitefromEmailName . ' <' . $sitefromEmail . '>';
920
921
		$to = $toEmail;
922
923
		/**
924
		 * Filter the client email to address.
925
		 *
926
		 * @since   1.6.1
927
		 * @package GeoDirectory
928
		 *
929
		 * @param string $to            The email address the email is being sent to.
930
		 * @param string $fromEmail     Sender email address.
931
		 * @param string $fromEmailName Sender name.
932
		 * @param string $toEmail       Receiver email address.
933
		 * @param string $toEmailName   Receiver name.
934
		 * @param string $to_subject    Email subject.
935
		 * @param string $to_message    Email content.
936 5
		 * @param string $extra         Not being used.
937
		 * @param string $message_type  The message type. Can be send_friend, send_enquiry, forgot_password, registration, post_submit, listing_published.
938
		 * @param string $post_id       The post ID.
939
		 * @param string $user_id       The user ID.
940
		 */
941
		$to = apply_filters( 'geodir_sendEmail_to', $to, $fromEmail, $fromEmailName, $toEmail, $toEmailName, $to_subject, $to_message, $extra, $message_type, $post_id, $user_id );
942
		/**
943 5
		 * Filter the client email subject.
944
		 *
945 5
		 * @since   1.6.1
946 5
		 * @package GeoDirectory_Payment_Manager
947 5
		 *
948 5
		 * @param string $subject       The email subject.
949
		 * @param string $fromEmail     Sender email address.
950
		 * @param string $fromEmailName Sender name.
951
		 * @param string $toEmail       Receiver email address.
952
		 * @param string $toEmailName   Receiver name.
953
		 * @param string $to_subject    Email subject.
954 5
		 * @param string $to_message    Email content.
955
		 * @param string $extra         Not being used.
956 5
		 * @param string $message_type  The message type. Can be send_friend, send_enquiry, forgot_password, registration, post_submit, listing_published.
957 5
		 * @param string $post_id       The post ID.
958
		 * @param string $user_id       The user ID.
959 5
		 */
960
		$subject = apply_filters( 'geodir_sendEmail_subject', $subject, $fromEmail, $fromEmailName, $toEmail, $toEmailName, $to_subject, $to_message, $extra, $message_type, $post_id, $user_id );
961 5
		/**
962
		 * Filter the client email message.
963 5
		 *
964 5
		 * @since   1.6.1
965 5
		 * @package GeoDirectory_Payment_Manager
966
		 *
967 5
		 * @param string $message       The email message text.
968 5
		 * @param string $fromEmail     Sender email address.
969
		 * @param string $fromEmailName Sender name.
970 5
		 * @param string $toEmail       Receiver email address.
971 5
		 * @param string $toEmailName   Receiver name.
972
		 * @param string $to_subject    Email subject.
973 5
		 * @param string $to_message    Email content.
974 2
		 * @param string $extra         Not being used.
975 2
		 * @param string $message_type  The message type. Can be send_friend, send_enquiry, forgot_password, registration, post_submit, listing_published.
976 2
		 * @param string $post_id       The post ID.
977
		 * @param string $user_id       The user ID.
978 2
		 */
979
		$message = apply_filters( 'geodir_sendEmail_message', $message, $fromEmail, $fromEmailName, $toEmail, $toEmailName, $to_subject, $to_message, $extra, $message_type, $post_id, $user_id );
980
		/**
981
		 * Filter the client email headers.
982
		 *
983
		 * @since   1.6.1
984
		 * @since 1.6.11 $headers changed from string to an array.
985
		 *
986
		 * @param array $headers       The email headers.
987
		 * @param string $fromEmail     Sender email address.
988
		 * @param string $fromEmailName Sender name.
989
		 * @param string $toEmail       Receiver email address.
990 2
		 * @param string $toEmailName   Receiver name.
991
		 * @param string $to_subject    Email subject.
992 2
		 * @param string $to_message    Email content.
993 2
		 * @param string $extra         Not being used.
994
		 * @param string $message_type  The message type. Can be send_friend, send_enquiry, forgot_password, registration, post_submit, listing_published.
995
		 * @param string $post_id       The post ID.
996
		 * @param string $user_id       The user ID.
997
		 */
998
		$headers = apply_filters( 'geodir_sendEmail_headers', $headers, $fromEmail, $fromEmailName, $toEmail, $toEmailName, $to_subject, $to_message, $extra, $message_type, $post_id, $user_id );
999
1000
		$sent = wp_mail( $to, $subject, $message, $headers );
1001
1002
		if ( ! $sent ) {
1003
			if ( is_array( $to ) ) {
1004
				$to = implode( ',', $to );
1005
			}
1006 2
			$log_message = sprintf(
1007 2
				__( "Email from GeoDirectory failed to send.\nMessage type: %s\nSend time: %s\nTo: %s\nSubject: %s\n\n", 'geodirectory' ),
1008
				$message_type,
1009
				date_i18n( 'F j Y H:i:s', current_time( 'timestamp' ) ),
1010
				$to,
1011
				$subject
1012
			);
1013 2
			geodir_error_log( $log_message );
1014
		}
1015
1016
		///////// ADMIN BCC EMIALS
1017
		$adminEmail = get_bloginfo( 'admin_email' );
1018
		$to         = $adminEmail;
1019 2
1020
		$admin_bcc = false;
1021
		if ( $message_type == 'registration' ) {
1022
			$message_raw  = explode( __( "Password:", 'geodirectory' ), $message );
1023
			$message_raw2 = explode( "</p>", $message_raw[1], 2 );
1024
			$message      = $message_raw[0] . __( 'Password:', 'geodirectory' ) . ' **********</p>' . $message_raw2[1];
1025
		}
1026
		if ( $message_type == 'post_submit' ) {
1027
			$subject = __( stripslashes_deep( get_option( 'geodir_post_submited_success_email_subject_admin' ) ), 'geodirectory' );
1028
			$message = __( stripslashes_deep( get_option( 'geodir_post_submited_success_email_content_admin' ) ), 'geodirectory' );
1029
1030 2
			$search_array  = array(
1031 2
				'[#listing_link#]',
1032 2
				'[#site_name_url#]',
1033 2
				'[#post_id#]',
1034 2
				'[#site_name#]',
1035 2
				'[#to_name#]',
1036
				'[#from_name#]',
1037
				'[#from_email#]',
1038 2
				'[#subject#]',
1039 2
				'[#comments#]',
1040 2
				'[#login_url#]',
1041
				'[#login_details#]',
1042 1
				'[#client_name#]',
1043
				'[#posted_date#]',
1044 2
				'[#user_login#]',
1045 2
				'[#username#]',
1046
				'[#user_email#]',
1047 2
			);
1048
			$replace_array = array(
1049 2
				$listingLink,
1050
				$siteurl_link,
1051
				$post_id,
1052
				$sitefromEmailName,
1053
				$toEmailName,
1054
				$fromEmailName,
1055
				$fromEmail,
1056
				$to_subject,
1057
				$to_message,
1058
				$loginurl_link,
1059
				$login_details,
1060
				$toEmailName,
1061
				$posted_date,
1062
				$user_login,
1063
				$user_login,
1064
				$post_author_email,
1065
			);
1066
			$message       = str_replace( $search_array, $replace_array, $message );
1067
1068
			$search_array  = array(
1069
				'[#listing_link#]',
1070
				'[#site_name_url#]',
1071
				'[#post_id#]',
1072
				'[#site_name#]',
1073
				'[#to_name#]',
1074
				'[#from_name#]',
1075
				'[#from_email#]',
1076
				'[#subject#]',
1077
				'[#client_name#]',
1078
				'[#posted_date#]',
1079
				'[#user_login#]',
1080
				'[#username#]',
1081
				'[#user_email#]',
1082
			);
1083
			$replace_array = array(
1084
				$listingLink,
1085
				$siteurl_link,
1086
				$post_id,
1087
				$sitefromEmailName,
1088
				$toEmailName,
1089
				$fromEmailName,
1090
				$fromEmail,
1091
				$to_subject,
1092
				$toEmailName,
1093
				$posted_date,
1094
				$user_login,
1095
				$user_login,
1096
				$post_author_email,
1097
			);
1098
			$subject       = str_replace( $search_array, $replace_array, $subject );
1099
1100
			$subject .= ' - ADMIN BCC COPY';
1101
			$admin_bcc = true;
1102
1103
		} elseif ( $message_type == 'registration' && get_option( 'geodir_bcc_new_user' ) ) {
1104
			$subject .= ' - ADMIN BCC COPY';
1105
			$admin_bcc = true;
1106
		} elseif ( $message_type == 'send_friend' && get_option( 'geodir_bcc_friend' ) ) {
1107
			$subject .= ' - ADMIN BCC COPY';
1108
			$admin_bcc = true;
1109
		} elseif ( $message_type == 'send_enquiry' && get_option( 'geodir_bcc_enquiry' ) ) {
1110
			$subject .= ' - ADMIN BCC COPY';
1111
			$admin_bcc = true;
1112
		} elseif ( $message_type == 'listing_published' && get_option( 'geodir_bcc_listing_published' ) ) {
1113
			$subject .= ' - ADMIN BCC COPY';
1114
			$admin_bcc = true;
1115
		}
1116
1117
		if ( $admin_bcc === true ) {
1118
1119
			/**
1120
			 * Filter the client email subject.
1121
			 *
1122 2
			 * @since   1.6.1
1123
			 * @package GeoDirectory_Payment_Manager
1124
			 *
1125
			 * @param string $subject       The email subject.
1126
			 * @param string $fromEmail     Sender email address.
1127
			 * @param string $fromEmailName Sender name.
1128
			 * @param string $toEmail       Receiver email address.
1129
			 * @param string $toEmailName   Receiver name.
1130
			 * @param string $to_subject    Email subject.
1131
			 * @param string $to_message    Email content.
1132
			 * @param string $extra         Not being used.
1133
			 * @param string $message_type  The message type. Can be send_friend, send_enquiry, forgot_password, registration, post_submit, listing_published.
1134
			 * @param string $post_id       The post ID.
1135
			 * @param string $user_id       The user ID.
1136
			 */
1137
			$subject = apply_filters( 'geodir_sendEmail_subject_admin_bcc', $subject, $fromEmail, $fromEmailName, $toEmail, $toEmailName, $to_subject, $to_message, $extra, $message_type, $post_id, $user_id );
1138
			/**
1139
			 * Filter the client email message.
1140
			 *
1141
			 * @since   1.6.1
1142
			 * @package GeoDirectory_Payment_Manager
1143
			 *
1144
			 * @param string $message       The email message text.
1145
			 * @param string $fromEmail     Sender email address.
1146
			 * @param string $fromEmailName Sender name.
1147
			 * @param string $toEmail       Receiver email address.
1148
			 * @param string $toEmailName   Receiver name.
1149
			 * @param string $to_subject    Email subject.
1150
			 * @param string $to_message    Email content.
1151
			 * @param string $extra         Not being used.
1152
			 * @param string $message_type  The message type. Can be send_friend, send_enquiry, forgot_password, registration, post_submit, listing_published.
1153
			 * @param string $post_id       The post ID.
1154
			 * @param string $user_id       The user ID.
1155
			 */
1156
			$message = apply_filters( 'geodir_sendEmail_message_admin_bcc', $message, $fromEmail, $fromEmailName, $toEmail, $toEmailName, $to_subject, $to_message, $extra, $message_type, $post_id, $user_id );
1157
1158
1159
			$sent = wp_mail( $to, $subject, $message, $headers );
1160
1161
			if ( ! $sent ) {
1162
				if ( is_array( $to ) ) {
1163
					$to = implode( ',', $to );
1164
				}
1165
				$log_message = sprintf(
1166
					__( "Email from GeoDirectory failed to send.\nMessage type: %s\nSend time: %s\nTo: %s\nSubject: %s\n\n", 'geodirectory' ),
1167
					$message_type,
1168
					date_i18n( 'F j Y H:i:s', current_time( 'timestamp' ) ),
1169
					$to,
1170 2
					$subject
1171 2
				);
1172
				geodir_error_log( $log_message );
1173 2
			}
1174
		}
1175
1176 5
	}
1177 1
}
1178 1
1179 1
1180
/**
1181
 * Generates breadcrumb for taxonomy (category, tags etc.) pages.
1182
 *
1183
 * @since   1.0.0
1184
 * @package GeoDirectory
1185
 */
1186
function geodir_taxonomy_breadcrumb() {
1187
1188 1
	$term   = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
1189
	$parent = $term->parent;
1190 1
1191 1
	while ( $parent ):
1192
		$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...
1193 1
		$new_parent = get_term_by( 'id', $parent, get_query_var( 'taxonomy' ) );
1194
		$parent     = $new_parent->parent;
1195
	endwhile;
1196
1197
	if ( ! empty( $parents ) ):
1198
		$parents = array_reverse( $parents );
1199
1200
		foreach ( $parents as $parent ):
1201
			$item = get_term_by( 'id', $parent, get_query_var( 'taxonomy' ) );
1202
			$url  = get_term_link( $item, get_query_var( 'taxonomy' ) );
1203
			echo '<li> > <a href="' . $url . '">' . $item->name . '</a></li>';
1204
		endforeach;
1205
1206
	endif;
1207
1208
	echo '<li> > ' . $term->name . '</li>';
1209 1
}
1210
1211 1
function geodir_wpml_post_type_archive_link($link, $post_type){
1212 4
	if (function_exists('icl_object_id')) {
1213
		$post_types   = get_option( 'geodir_post_types' );
1214
		$slug         = $post_types[ $post_type ]['rewrite']['slug'];
1215
1216
		// Alter the CPT slug if WPML is set to do so
1217
		if ( function_exists( 'icl_object_id' ) ) {
1218
			if ( gd_wpml_slug_translation_turned_on( $post_type ) && $language_code = gd_wpml_get_lang_from_url( $link) ) {
1219
1220
				$org_slug = $slug;
1221
				$slug     = apply_filters( 'wpml_translate_single_string',
1222 3
					$slug,
1223 2
					'WordPress',
1224
					'URL slug: ' . $slug,
1225 2
					$language_code );
1226 1
                    
1227 1
				if ( ! $slug ) {
1228 1
					$slug = $org_slug;
0 ignored issues
show
Unused Code introduced by
$slug 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...
1229 1
				} else {
1230 1
					$link = str_replace( $org_slug, $slug, $link );
1231 1
				}
1232
			}
1233 2
		}
1234 2
	}
1235 2
1236 3
	return $link;
1237
}
1238 1
add_filter( 'post_type_archive_link','geodir_wpml_post_type_archive_link', 1000, 2);
1239
1240
/**
1241
 * Main function that generates breadcrumb for all pages.
1242 1
 *
1243
 * @since   1.0.0
1244
 * @since   1.5.7 Changes for the neighbourhood system improvement.
1245
 * @since   1.6.16 Fix: Breadcrumb formatting issue with the neighbourhood name.
1246 1
 * @package GeoDirectory
1247
 * @global object $wp_query   WordPress Query object.
1248
 * @global object $post       The current post object.
1249
 * @global object $gd_session GeoDirectory Session object.
1250 1
 */
1251
function geodir_breadcrumb() {
1252
	global $wp_query, $geodir_add_location_url;
1253 1
1254
	/**
1255
	 * Filter breadcrumb separator.
1256 1
	 *
1257 1
	 * @since 1.0.0
1258 1
	 */
1259 1
	$separator = apply_filters( 'geodir_breadcrumb_separator', ' > ' );
1260 5
1261
	if ( ! geodir_is_page( 'home' ) ) {
1262
		$breadcrumb    = '';
1263
		$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...
1264
		$breadcrumb .= '<div class="geodir-breadcrumb clearfix"><ul id="breadcrumbs">';
1265
		/**
1266
		 * Filter breadcrumb's first link.
1267
		 *
1268
		 * @since 1.0.0
1269 5
		 */
1270 5
		$breadcrumb .= '<li>' . apply_filters( 'geodir_breadcrumb_first_link', '<a href="' . home_url() . '">' . __( 'Home', 'geodirectory' ) . '</a>' ) . '</li>';
1271 5
1272
		$gd_post_type   = geodir_get_current_posttype();
1273
		$post_type_info = get_post_type_object( $gd_post_type );
1274
1275
		remove_filter( 'post_type_archive_link', 'geodir_get_posttype_link' );
1276
1277
		$listing_link = get_post_type_archive_link( $gd_post_type );
1278
1279
		add_filter( 'post_type_archive_link', 'geodir_get_posttype_link', 10, 2 );
1280
		$listing_link = rtrim( $listing_link, '/' );
1281
		$listing_link .= '/';
1282
1283
		$post_type_for_location_link = $listing_link;
1284
		$location_terms              = geodir_get_current_location_terms( 'query_vars', $gd_post_type );
1285
1286
		global $wp, $gd_session;
1287 1
		$location_link = $post_type_for_location_link;
1288 1
1289 1
		if ( geodir_is_page( 'detail' ) || geodir_is_page( 'listing' ) ) {
1290
			global $post;
1291
			$location_manager     = defined( 'POST_LOCATION_TABLE' ) ? true : false;
1292
			$neighbourhood_active = $location_manager && get_option( 'location_neighbourhoods' ) ? true : false;
1293
1294 View Code Duplication
			if ( geodir_is_page( 'detail' ) && isset( $post->country_slug ) ) {
1295
				$location_terms = array(
1296
					'gd_country' => $post->country_slug,
1297
					'gd_region'  => $post->region_slug,
1298 1
					'gd_city'    => $post->city_slug
1299
				);
1300
1301
				if ( $neighbourhood_active && ! empty( $location_terms['gd_city'] ) && $gd_ses_neighbourhood = $gd_session->get( 'gd_neighbourhood' ) ) {
1302
					$location_terms['gd_neighbourhood'] = $gd_ses_neighbourhood;
1303
				}
1304
			}
1305
1306
			$geodir_show_location_url = get_option( 'geodir_show_location_url' );
1307
1308
			$hide_url_part = array();
1309
			if ( $location_manager ) {
1310
				$hide_country_part = get_option( 'geodir_location_hide_country_part' );
1311
				$hide_region_part  = get_option( 'geodir_location_hide_region_part' );
1312
1313 1
				if ( $hide_region_part && $hide_country_part ) {
1314 1
					$hide_url_part = array( 'gd_country', 'gd_region' );
1315 1
				} else if ( $hide_region_part && ! $hide_country_part ) {
1316
					$hide_url_part = array( 'gd_region' );
1317
				} else if ( ! $hide_region_part && $hide_country_part ) {
1318 1
					$hide_url_part = array( 'gd_country' );
1319 1
				}
1320 1
			}
1321 1
1322 1
			$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...
1323 1
			if ( $geodir_show_location_url == 'country_city' ) {
1324 1
				$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...
1325 1
1326 1
				if ( isset( $location_terms['gd_region'] ) && ! $location_manager ) {
1327 1
					unset( $location_terms['gd_region'] );
1328
				}
1329 1
			} else if ( $geodir_show_location_url == 'region_city' ) {
1330
				$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...
1331 1
1332
				if ( isset( $location_terms['gd_country'] ) && ! $location_manager ) {
1333
					unset( $location_terms['gd_country'] );
1334 1
				}
1335
			} else if ( $geodir_show_location_url == 'city' ) {
1336
				$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...
1337
1338 1
				if ( isset( $location_terms['gd_country'] ) && ! $location_manager ) {
1339
					unset( $location_terms['gd_country'] );
1340 1
				}
1341 1
				if ( isset( $location_terms['gd_region'] ) && ! $location_manager ) {
1342 1
					unset( $location_terms['gd_region'] );
1343
				}
1344
			}
1345 1
1346
			$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...
1347
			$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...
1348 1
			$breadcrumb .= '<li>';
1349
			if ( get_query_var( $gd_post_type . 'category' ) ) {
1350 1
				$gd_taxonomy = $gd_post_type . 'category';
1351 1
			} elseif ( get_query_var( $gd_post_type . '_tags' ) ) {
1352
				$gd_taxonomy = $gd_post_type . '_tags';
1353
			}
1354
1355
			$breadcrumb .= $separator . '<a href="' . $listing_link . '">' . __( ucfirst( $post_type_info->label ), 'geodirectory' ) . '</a>';
1356 1
			if ( ! empty( $gd_taxonomy ) || geodir_is_page( 'detail' ) ) {
1357
				$is_location_last = false;
1358 1
			} else {
1359
				$is_location_last = true;
1360
			}
1361
1362 1
			if ( ! empty( $gd_taxonomy ) && geodir_is_page( 'listing' ) ) {
1363
				$is_taxonomy_last = true;
1364
			} else {
1365 1
				$is_taxonomy_last = false;
1366
			}
1367
1368 1
			if ( ! empty( $location_terms ) ) {
1369
				$geodir_get_locations = function_exists( 'get_actual_location_name' ) ? true : false;
1370
1371
				foreach ( $location_terms as $key => $location_term ) {
1372 1
					if ( $location_term != '' ) {
1373
						if ( ! empty( $hide_url_part ) && in_array( $key, $hide_url_part ) ) { // Hide location part from url & breadcrumb.
1374
							continue;
1375
						}
1376
1377
						$gd_location_link_text = preg_replace( '/-(\d+)$/', '', $location_term );
1378 1
						$gd_location_link_text = preg_replace( '/[_-]/', ' ', $gd_location_link_text );
1379 1
						$gd_location_link_text = ucfirst( $gd_location_link_text );
1380 1
1381 1
						$location_term_actual_country = '';
1382
						$location_term_actual_region  = '';
1383
						$location_term_actual_city    = '';
1384
						$location_term_actual_neighbourhood = '';
1385
						if ( $geodir_get_locations ) {
1386 1
							if ( $key == 'gd_country' ) {
1387 1
								$location_term_actual_country = get_actual_location_name( 'country', $location_term, true );
1388
							} else if ( $key == 'gd_region' ) {
1389 1
								$location_term_actual_region = get_actual_location_name( 'region', $location_term, true );
1390
							} else if ( $key == 'gd_city' ) {
1391
								$location_term_actual_city = get_actual_location_name( 'city', $location_term, true );
1392
							} else if ( $key == 'gd_neighbourhood' ) {
1393
								$location_term_actual_neighbourhood = get_actual_location_name( 'neighbourhood', $location_term, true );
1394
							}
1395
						} else {
1396
							$location_info = geodir_get_location();
1397
1398
							if ( ! empty( $location_info ) && isset( $location_info->location_id ) ) {
1399
								if ( $key == 'gd_country' ) {
1400
									$location_term_actual_country = __( $location_info->country, 'geodirectory' );
1401 1
								} else if ( $key == 'gd_region' ) {
1402
									$location_term_actual_region = __( $location_info->region, 'geodirectory' );
1403 1
								} else if ( $key == 'gd_city' ) {
1404
									$location_term_actual_city = __( $location_info->city, 'geodirectory' );
1405
								}
1406 1
							}
1407
						}
1408
1409
						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'] != '' ) ) {
1410
							$breadcrumb .= $location_term_actual_country != '' ? $separator . $location_term_actual_country : $separator . $gd_location_link_text;
1411
						} else if ( $is_location_last && $key == 'gd_region' && ! ( isset( $location_terms['gd_city'] ) && $location_terms['gd_city'] != '' ) ) {
1412
							$breadcrumb .= $location_term_actual_region != '' ? $separator . $location_term_actual_region : $separator . $gd_location_link_text;
1413
						} else if ( $is_location_last && $key == 'gd_city' && empty( $location_terms['gd_neighbourhood'] ) ) {
1414
							$breadcrumb .= $location_term_actual_city != '' ? $separator . $location_term_actual_city : $separator . $gd_location_link_text;
1415 1
						} else if ( $is_location_last && $key == 'gd_neighbourhood' ) {
1416
							$breadcrumb .= $location_term_actual_neighbourhood != '' ? $separator . $location_term_actual_neighbourhood : $separator . $gd_location_link_text;
1417
						} else {
1418
							if ( get_option( 'permalink_structure' ) != '' ) {
1419
								$location_link .= $location_term . '/';
1420
							} else {
1421
								$location_link .= "&$key=" . $location_term;
1422
							}
1423
1424
							if ( $key == 'gd_country' && $location_term_actual_country != '' ) {
1425
								$gd_location_link_text = $location_term_actual_country;
1426
							} else if ( $key == 'gd_region' && $location_term_actual_region != '' ) {
1427
								$gd_location_link_text = $location_term_actual_region;
1428
							} else if ( $key == 'gd_city' && $location_term_actual_city != '' ) {
1429 1
								$gd_location_link_text = $location_term_actual_city;
1430 1
							} else if ( $key == 'gd_neighbourhood' && $location_term_actual_neighbourhood != '' ) {
1431 1
								$gd_location_link_text = $location_term_actual_neighbourhood;
1432
							}
1433
1434
							/*
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...
1435
                            if (geodir_is_page('detail') && !empty($hide_text_part) && in_array($key, $hide_text_part)) {
1436
                                continue;
1437
                            }
1438
                            */
1439
1440
							$breadcrumb .= $separator . '<a href="' . $location_link . '">' . $gd_location_link_text . '</a>';
1441
						}
1442
					}
1443
				}
1444
			}
1445
1446
			if ( ! empty( $gd_taxonomy ) ) {
1447
				$term_index = 1;
1448
1449
				//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...
1450
				{
1451
					if ( get_query_var( $gd_post_type . '_tags' ) ) {
1452
						$cat_link = $listing_link . 'tags/';
1453
					} else {
1454
						$cat_link = $listing_link;
1455
					}
1456
1457
					foreach ( $location_terms as $key => $location_term ) {
1458
						if ( $location_manager && in_array( $key, $hide_url_part ) ) {
1459
							continue;
1460
						}
1461
1462
						if ( $location_term != '' ) {
1463
							if ( get_option( 'permalink_structure' ) != '' ) {
1464
								$cat_link .= $location_term . '/';
1465
							}
1466
						}
1467
					}
1468
1469
					$term_array = explode( "/", trim( $wp_query->query[ $gd_taxonomy ], "/" ) );
1470
					foreach ( $term_array as $term ) {
1471
						$term_link_text = preg_replace( '/-(\d+)$/', '', $term );
1472
						$term_link_text = preg_replace( '/[_-]/', ' ', $term_link_text );
0 ignored issues
show
Unused Code introduced by
$term_link_text 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...
1473
1474
						// get term actual name
1475
						$term_info = get_term_by( 'slug', $term, $gd_taxonomy, 'ARRAY_A' );
1476
						if ( ! empty( $term_info ) && isset( $term_info['name'] ) && $term_info['name'] != '' ) {
1477
							$term_link_text = urldecode( $term_info['name'] );
1478
						} else {
1479
							continue;
1480
							//$term_link_text = wp_strip_all_tags(geodir_ucwords(urldecode($term_link_text)));
0 ignored issues
show
Unused Code Comprehensibility introduced by
60% 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...
1481
						}
1482
1483
						if ( $term_index == count( $term_array ) && $is_taxonomy_last ) {
1484
							$breadcrumb .= $separator . $term_link_text;
1485
						} else {
1486
							$cat_link .= $term . '/';
1487
							$breadcrumb .= $separator . '<a href="' . $cat_link . '">' . $term_link_text . '</a>';
1488
						}
1489
						$term_index ++;
1490
					}
1491
				}
1492
1493
1494
			}
1495
1496
			if ( geodir_is_page( 'detail' ) ) {
1497
				$breadcrumb .= $separator . get_the_title();
1498
			}
1499
1500
			$breadcrumb .= '</li>';
1501
1502
1503
		} elseif ( geodir_is_page( 'author' ) ) {
1504
			$user_id             = get_current_user_id();
1505
			$author_link         = get_author_posts_url( $user_id );
1506
			$default_author_link = geodir_getlink( $author_link, array(
1507
				'geodir_dashbord' => 'true',
1508
				'stype'           => 'gd_place'
1509
			), false );
1510
1511
			/**
1512
			 * Filter author page link.
1513
			 *
1514
			 * @since 1.0.0
1515
			 *
1516
			 * @param string $default_author_link Default author link.
1517
			 * @param int $user_id                Author ID.
1518
			 */
1519
			$default_author_link = apply_filters( 'geodir_dashboard_author_link', $default_author_link, $user_id );
1520
1521
			$breadcrumb .= '<li>';
1522
			$breadcrumb .= $separator . '<a href="' . $default_author_link . '">' . __( 'My Dashboard', 'geodirectory' ) . '</a>';
1523
1524
			if ( isset( $_REQUEST['list'] ) ) {
1525
				$author_link = geodir_getlink( $author_link, array(
1526
					'geodir_dashbord' => 'true',
1527
					'stype'           => $_REQUEST['stype']
1528
				), false );
1529
1530
				/**
1531
				 * Filter author page link.
1532
				 *
1533
				 * @since 1.0.0
1534
				 *
1535
				 * @param string $author_link Author page link.
1536
				 * @param int $user_id        Author ID.
1537
				 * @param string $_REQUEST    ['stype'] Post type.
1538
				 */
1539
				$author_link = apply_filters( 'geodir_dashboard_author_link', $author_link, $user_id, $_REQUEST['stype'] );
1540
1541
				$breadcrumb .= $separator . '<a href="' . $author_link . '">' . __( ucfirst( $post_type_info->label ), 'geodirectory' ) . '</a>';
1542
				$breadcrumb .= $separator . ucfirst( __( 'My', 'geodirectory' ) . ' ' . $_REQUEST['list'] );
1543
			} else {
1544
				$breadcrumb .= $separator . __( ucfirst( $post_type_info->label ), 'geodirectory' );
1545
			}
1546
1547
			$breadcrumb .= '</li>';
1548
		} elseif ( is_category() || is_single() ) {
1549
			$category = get_the_category();
1550
			if ( is_category() ) {
1551
				$breadcrumb .= '<li>' . $separator . $category[0]->cat_name . '</li>';
1552
			}
1553
			if ( is_single() ) {
1554
				$breadcrumb .= '<li>' . $separator . '<a href="' . get_category_link( $category[0]->term_id ) . '">' . $category[0]->cat_name . '</a></li>';
1555
				$breadcrumb .= '<li>' . $separator . get_the_title() . '</li>';
1556
			}
1557
			/* End of my version ##################################################### */
1558
		} else if ( is_page() ) {
1559
			$page_title = get_the_title();
1560
1561
			if ( geodir_is_page( 'location' ) ) {
1562
				$location_page_id = geodir_location_page_id();
1563
				$loc_post         = get_post( $location_page_id );
1564
				$post_name        = $loc_post->post_name;
1565
				$slug             = ucwords( str_replace( '-', ' ', $post_name ) );
1566
				$page_title       = ! empty( $slug ) ? $slug : __( 'Location', 'geodirectory' );
1567
			}
1568
1569
			$breadcrumb .= '<li>' . $separator;
1570
			$breadcrumb .= stripslashes_deep( $page_title );
1571
			$breadcrumb .= '</li>';
1572
		} else if ( is_tag() ) {
1573
			$breadcrumb .= "<li> " . $separator . single_tag_title( '', false ) . '</li>';
1574
		} else if ( is_day() ) {
1575
			$breadcrumb .= "<li> " . $separator . __( " Archive for", 'geodirectory' ) . " ";
1576
			the_time( 'F jS, Y' );
1577
			$breadcrumb .= '</li>';
1578
		} else if ( is_month() ) {
1579
			$breadcrumb .= "<li> " . $separator . __( " Archive for", 'geodirectory' ) . " ";
1580
			the_time( 'F, Y' );
1581
			$breadcrumb .= '</li>';
1582
		} else if ( is_year() ) {
1583
			$breadcrumb .= "<li> " . $separator . __( " Archive for", 'geodirectory' ) . " ";
1584
			the_time( 'Y' );
1585
			$breadcrumb .= '</li>';
1586
		} else if ( is_author() ) {
1587
			$breadcrumb .= "<li> " . $separator . __( " Author Archive", 'geodirectory' );
1588
			$breadcrumb .= '</li>';
1589
		} else if ( isset( $_GET['paged'] ) && ! empty( $_GET['paged'] ) ) {
1590
			$breadcrumb .= "<li>" . $separator . __( "Blog Archives", 'geodirectory' );
1591
			$breadcrumb .= '</li>';
1592
		} else if ( is_search() ) {
1593
			$breadcrumb .= "<li> " . $separator . __( " Search Results", 'geodirectory' );
1594
			$breadcrumb .= '</li>';
1595
		}
1596
		$breadcrumb .= '</ul></div>';
1597
1598
		/**
1599
		 * Filter breadcrumb html output.
1600
		 *
1601
		 * @since 1.0.0
1602
		 *
1603
		 * @param string $breadcrumb Breadcrumb HTML.
1604
		 * @param string $separator  Breadcrumb separator.
1605
		 */
1606
		echo $breadcrumb = apply_filters( 'geodir_breadcrumb', $breadcrumb, $separator );
1607
	}
1608
}
1609
1610
1611
add_action( "admin_init", "geodir_allow_wpadmin" ); // check user is admin
1612
if ( ! function_exists( 'geodir_allow_wpadmin' ) ) {
1613
	/**
1614
	 * Allow only admins to access wp-admin.
1615
	 *
1616
	 * Normal users will be redirected to home page.
1617
	 *
1618
	 * @since   1.0.0
1619
	 * @package GeoDirectory
1620
	 * @global object $wpdb WordPress Database object.
1621
	 */
1622
	function geodir_allow_wpadmin() {
1623
		global $wpdb;
1624
		if ( get_option( 'geodir_allow_wpadmin' ) == '0' && is_user_logged_in() && ( ! defined( 'DOING_AJAX' ) ) ) // checking action in request to allow ajax request go through
1625
		{
1626
			if ( current_user_can( 'administrator' ) ) {
1627
			} else {
1628
1629
				wp_redirect( home_url() );
1630
				exit;
1631
			}
1632
1633
		}
1634
	}
1635
}
1636
1637
1638
/**
1639
 * Move Images from a remote url to upload directory.
1640
 *
1641
 * @since   1.0.0
1642
 * @package GeoDirectory
1643
 *
1644
 * @param string $url The remote image url.
1645
 *
1646
 * @return array|WP_Error The uploaded data as array. When failure returns error.
1647
 */
1648
function fetch_remote_file( $url ) {
1649
	// extract the file name and extension from the url
1650
	require_once( ABSPATH . 'wp-includes/pluggable.php' );
1651
	$file_name = basename( $url );
1652
	if ( strpos( $file_name, '?' ) !== false ) {
1653
		list( $file_name ) = explode( '?', $file_name );
1654
	}
1655
	$dummy        = false;
1656
	$add_to_cache = false;
1657
	$key          = null;
1658
	if ( strpos( $url, '/dummy/' ) !== false ) {
1659
		$dummy = true;
1660
		$key   = "dummy_" . str_replace( '.', '_', $file_name );
1661
		$value = get_transient( 'cached_dummy_images' );
1662
		if ( $value ) {
1663
			if ( isset( $value[ $key ] ) ) {
1664
				return $value[ $key ];
1665
			} else {
1666
				$add_to_cache = true;
1667
			}
1668
		} else {
1669
			$add_to_cache = true;
1670
		}
1671
	}
1672
1673
	// get placeholder file in the upload dir with a unique, sanitized filename
1674
1675
	$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...
1676
1677
	$upload = wp_upload_bits( $file_name, 0, '', $post_upload_date );
1678
	if ( $upload['error'] ) {
1679
		return new WP_Error( 'upload_dir_error', $upload['error'] );
1680
	}
1681
1682
1683
	sleep( 0.3 );// if multiple remote file this can cause the remote server to timeout so we add a slight delay
1684
1685
	// fetch the remote url and write it to the placeholder file
1686
	$headers = wp_remote_get( $url, array( 'stream' => true, 'filename' => $upload['file'] ) );
1687
1688
	$log_message = '';
1689
	if ( is_wp_error( $headers ) ) {
1690
		echo 'file: ' . $url;
1691
1692
		return new WP_Error( 'import_file_error', $headers->get_error_message() );
1693
	}
1694
1695
	$filesize = filesize( $upload['file'] );
1696
	// request failed
1697
	if ( ! $headers ) {
1698
		$log_message = __( 'Remote server did not respond', 'geodirectory' );
1699
	} // make sure the fetch was successful
1700
	elseif ( $headers['response']['code'] != '200' ) {
1701
		$log_message = sprintf( __( 'Remote server returned error response %1$d %2$s', 'geodirectory' ), esc_html( $headers['response'] ), get_status_header_desc( $headers['response'] ) );
1702
	} elseif ( isset( $headers['headers']['content-length'] ) && $filesize != $headers['headers']['content-length'] ) {
1703
		$log_message = __( 'Remote file is incorrect size', 'geodirectory' );
1704
	} elseif ( 0 == $filesize ) {
1705
		$log_message = __( 'Zero size file downloaded', 'geodirectory' );
1706
	}
1707
1708
	if ( $log_message ) {
1709
		$del = unlink( $upload['file'] );
1710
		if ( ! $del ) {
1711
			geodir_error_log( __( 'GeoDirectory: fetch_remote_file() failed to delete temp file.', 'geodirectory' ) );
1712
		}
1713
1714
		return new WP_Error( 'import_file_error', $log_message );
1715
	}
1716
1717
	if ( $dummy && $add_to_cache && is_array( $upload ) ) {
1718
		$images = get_transient( 'cached_dummy_images' );
1719
		if ( is_array( $images ) ) {
1720
			$images[ $key ] = $upload;
1721
		} else {
1722
			$images = array( $key => $upload );
1723
		}
1724
1725
		//setting the cache using the WP Transient API
1726
		set_transient( 'cached_dummy_images', $images, 60 * 10 ); //10 minutes cache
1727
	}
1728
1729
	return $upload;
1730
}
1731
1732
/**
1733
 * Get maximum file upload size.
1734
 *
1735
 * @since   1.0.0
1736
 * @package GeoDirectory
1737
 * @return string|void Max upload size.
1738
 */
1739 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 (L1804-1815) 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...
1740
	$max_filesize = (float) get_option( 'geodir_upload_max_filesize', 2 );
1741
1742
	if ( $max_filesize > 0 && $max_filesize < 1 ) {
1743
		$max_filesize = (int) ( $max_filesize * 1024 ) . 'kb';
1744
	} else {
1745
		$max_filesize = $max_filesize > 0 ? $max_filesize . 'mb' : '2mb';
1746
	}
1747
1748
	/**
1749
	 * Filter default image upload size limit.
1750
	 *
1751
	 * @since 1.0.0
1752
	 *
1753
	 * @param string $max_filesize Max file upload size. Ex. 10mb, 512kb.
1754
	 */
1755
	return apply_filters( 'geodir_default_image_upload_size_limit', $max_filesize );
1756
}
1757
1758
/**
1759
 * Check if dummy folder exists or not.
1760
 *
1761
 * Check if dummy folder exists or not , if not then fetch from live url.
1762
 *
1763
 * @since   1.0.0
1764
 * @package GeoDirectory
1765
 * @return bool If dummy folder exists returns true, else false.
1766
 */
1767
function geodir_dummy_folder_exists() {
1768
	$path = geodir_plugin_path() . '/geodirectory-admin/dummy/';
1769
	if ( ! is_dir( $path ) ) {
1770
		return false;
1771
	} else {
1772
		return true;
1773 7
	}
1774 7
1775 7
}
1776
1777
/**
1778
 * Get the author info.
1779
 *
1780 7
 * @since   1.0.0
1781
 * @package GeoDirectory
1782
 * @global object $wpdb WordPress Database object.
1783
 *
1784
 * @param int $aid      The author ID.
1785
 *
1786
 * @return object Author info.
1787
 */
1788
function geodir_get_author_info( $aid ) {
1789
	global $wpdb;
1790
	/*$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...
1791
	$infosql = $wpdb->prepare( "select * from $wpdb->users where ID=%d", array( $aid ) );
1792
	$info    = $wpdb->get_results( $infosql );
1793 7
	if ( $info ) {
1794
		return $info[0];
1795
	}
1796
}
1797 7
1798
if ( ! function_exists( 'adminEmail' ) ) {
1799
	/**
1800
	 * Send emails to client on post submission, renew etc.
1801
	 *
1802
	 * @since   1.0.0
1803
	 * @package GeoDirectory
1804
	 * @global object $wpdb        WordPress Database object.
1805
	 *
1806
	 * @param int|string $page_id  Page ID.
1807
	 * @param int|string $user_id  User ID.
1808
	 * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1809
	 * @param string $custom_1     Custom data to be sent.
1810
	 */
1811
	function adminEmail( $page_id, $user_id, $message_type, $custom_1 = '' ) {
1812
		global $wpdb;
1813
		if ( $message_type == 'expiration' ) {
1814
			$subject        = stripslashes( __( get_option( 'renew_email_subject' ), 'geodirectory' ) );
1815
			$client_message = stripslashes( __( get_option( 'renew_email_content' ), 'geodirectory' ) );
1816
		} elseif ( $message_type == 'post_submited' ) {
1817 2
			$subject        = __( get_option( 'post_submited_success_email_subject_admin' ), 'geodirectory' );
1818
			$client_message = __( get_option( 'post_submited_success_email_content_admin' ), 'geodirectory' );
1819
		} elseif ( $message_type == 'renew' ) {
1820
			$subject        = __( get_option( 'post_renew_success_email_subject_admin' ), 'geodirectory' );
1821
			$client_message = __( get_option( 'post_renew_success_email_content_admin' ), 'geodirectory' );
1822
		} elseif ( $message_type == 'upgrade' ) {
1823
			$subject        = __( get_option( 'post_upgrade_success_email_subject_admin' ), 'geodirectory' );
1824
			$client_message = __( get_option( 'post_upgrade_success_email_content_admin' ), 'geodirectory' );
1825
		} elseif ( $message_type == 'claim_approved' ) {
1826
			$subject        = __( get_option( 'claim_approved_email_subject' ), 'geodirectory' );
1827
			$client_message = __( get_option( 'claim_approved_email_content' ), 'geodirectory' );
1828
		} elseif ( $message_type == 'claim_rejected' ) {
1829
			$subject        = __( get_option( 'claim_rejected_email_subject' ), 'geodirectory' );
1830
			$client_message = __( get_option( 'claim_rejected_email_content' ), 'geodirectory' );
1831
		} elseif ( $message_type == 'claim_requested' ) {
1832
			$subject        = __( get_option( 'claim_email_subject_admin' ), 'geodirectory' );
1833
			$client_message = __( get_option( 'claim_email_content_admin' ), 'geodirectory' );
1834
		} elseif ( $message_type == 'auto_claim' ) {
1835
			$subject        = __( get_option( 'auto_claim_email_subject' ), 'geodirectory' );
1836
			$client_message = __( get_option( 'auto_claim_email_content' ), 'geodirectory' );
1837
		} elseif ( $message_type == 'payment_success' ) {
1838
			$subject        = __( get_option( 'post_payment_success_admin_email_subject' ), 'geodirectory' );
1839
			$client_message = __( get_option( 'post_payment_success_admin_email_content' ), 'geodirectory' );
1840
		} elseif ( $message_type == 'payment_fail' ) {
1841
			$subject        = __( get_option( 'post_payment_fail_admin_email_subject' ), 'geodirectory' );
1842
			$client_message = __( get_option( 'post_payment_fail_admin_email_content' ), 'geodirectory' );
1843
		}
1844
		$transaction_details = $custom_1;
1845
		$fromEmail           = get_option( 'site_email' );
1846
		$fromEmailName       = get_site_emailName();
1847
//$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...
1848
		$pkg_limit            = get_property_price_info_listing( $page_id );
1849 18
		$alivedays            = $pkg_limit['days'];
1850
		$productlink          = get_permalink( $page_id );
1851
		$post_info            = get_post( $page_id );
1852
		$post_date            = date( 'dS F,Y', strtotime( $post_info->post_date ) );
1853 18
		$listingLink          = '<a href="' . $productlink . '"><b>' . $post_info->post_title . '</b></a>';
1854
		$loginurl             = geodir_login_url();
1855
		$loginurl_link        = '<a href="' . $loginurl . '">login</a>';
1856
		$siteurl              = home_url();
1857
		$siteurl_link         = '<a href="' . $siteurl . '">' . $fromEmailName . '</a>';
1858
		$user_info            = get_userdata( $user_id );
1859
		$user_email           = $user_info->user_email;
1860
		$display_name         = geodir_get_client_name( $user_id );
1861
		$user_login           = $user_info->user_login;
1862
		$number_of_grace_days = get_option( 'ptthemes_listing_preexpiry_notice_days' );
1863
		if ( $number_of_grace_days == '' ) {
1864
			$number_of_grace_days = 1;
1865 18
		}
1866
		if ( $post_info->post_type == 'event' ) {
1867
			$post_type = 'event';
1868 18
		} else {
1869
			$post_type = 'listing';
1870
		}
1871
		$renew_link     = '<a href="' . $siteurl . '?ptype=post_' . $post_type . '&renew=1&pid=' . $page_id . '">' . RENEW_LINK . '</a>';
1872
		$search_array   = array(
1873
			'[#client_name#]',
1874
			'[#listing_link#]',
1875
			'[#posted_date#]',
1876
			'[#number_of_days#]',
1877
			'[#number_of_grace_days#]',
1878
			'[#login_url#]',
1879
			'[#username#]',
1880
			'[#user_email#]',
1881
			'[#site_name_url#]',
1882
			'[#renew_link#]',
1883
			'[#post_id#]',
1884
			'[#site_name#]',
1885
			'[#transaction_details#]'
1886
		);
1887
		$replace_array  = array(
1888
			$display_name,
1889
			$listingLink,
1890
			$post_date,
1891
			$alivedays,
1892
			$number_of_grace_days,
1893
			$loginurl_link,
1894
			$user_login,
1895
			$user_email,
1896
			$siteurl_link,
1897
			$renew_link,
1898
			$page_id,
1899
			$fromEmailName,
1900
			$transaction_details
1901
		);
1902
		$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...
1903
		$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...
1904
		
1905
		
1906
		$headers  = array();
1907
		$headers[] = 'Content-type: text/html; charset=UTF-8';
1908
		$headers[] = 'From: ' . $fromEmailName . ' <' . $fromEmail . '>';
1909
1910
		$to      = $fromEmail;
1911
		$message = $client_message;
1912
1913
1914
		/**
1915
		 * Filter the admin email to address.
1916
		 *
1917
		 * @since   1.6.1
1918
		 * @package GeoDirectory
1919
		 *
1920
		 * @param string $to           The email address the email is being sent to.
1921
		 * @param int|string $page_id  Page ID.
1922
		 * @param int|string $user_id  User ID.
1923
		 * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1924
		 * @param string $custom_1     Custom data to be sent.
1925
		 */
1926
		$to = apply_filters( 'geodir_adminEmail_to', $to, $page_id, $user_id, $message_type, $custom_1 );
1927
		/**
1928
		 * Filter the admin email subject.
1929
		 *
1930
		 * @since   1.6.1
1931
		 * @package GeoDirectory_Payment_Manager
1932
		 *
1933
		 * @param string $subject      The email subject.
1934
		 * @param int|string $page_id  Page ID.
1935
		 * @param int|string $user_id  User ID.
1936
		 * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1937 8
		 * @param string $custom_1     Custom data to be sent.
1938
		 */
1939 8
		$subject = apply_filters( 'geodir_adminEmail_subject', $subject, $page_id, $user_id, $message_type, $custom_1 );
1940 8
		/**
1941
		 * Filter the admin email message.
1942
		 *
1943
		 * @since   1.6.1
1944 8
		 * @package GeoDirectory_Payment_Manager
1945 8
		 *
1946
		 * @param string $message      The email message text.
1947 8
		 * @param int|string $page_id  Page ID.
1948
		 * @param int|string $user_id  User ID.
1949
		 * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1950 8
		 * @param string $custom_1     Custom data to be sent.
1951 8
		 */
1952 4
		$message = apply_filters( 'geodir_adminEmail_message', $message, $page_id, $user_id, $message_type, $custom_1 );
1953 4
		/**
1954 4
		 * Filter the admin email headers.
1955
		 *
1956
		 * @since   1.6.1
1957 4
		 * @since 1.6.11 $headers changed from string to an array.         
1958
		 *
1959
		 * @param array $headers      The email headers.
1960 4
		 * @param int|string $page_id  Page ID.
1961 3
		 * @param int|string $user_id  User ID.
1962 3
		 * @param string $message_type Can be 'expiration','post_submited','renew','upgrade','claim_approved','claim_rejected','claim_requested','auto_claim','payment_success','payment_fail'.
1963 1
		 * @param string $custom_1     Custom data to be sent.
1964
		 */
1965
		$headers = apply_filters( 'geodir_adminEmail_headers', $headers, $page_id, $user_id, $message_type, $custom_1 );
1966 1
1967
1968
		$sent = wp_mail( $to, $subject, $message, $headers );
1969 1
		if ( ! $sent ) {
1970 1
			if ( is_array( $to ) ) {
1971 1
				$to = implode( ',', $to );
1972 1
			}
1973
			$log_message = sprintf(
1974 8
				__( "Email from GeoDirectory failed to send.\nMessage type: %s\nSend time: %s\nTo: %s\nSubject: %s\n\n", 'geodirectory' ),
1975
				$message_type,
1976
				date_i18n( 'F j Y H:i:s', current_time( 'timestamp' ) ),
1977
				$to,
1978
				$subject
1979
			);
1980
			geodir_error_log( $log_message );
1981
		}
1982
	}
1983
}
1984
1985
/*
1986
Language translation helper functions
1987
*/
1988
1989
/**
1990
 * Function to get the translated category id's.
1991
 *
1992 8
 * @since   1.0.0
1993 8
 * @package GeoDirectory
1994 8
 *
1995
 * @param array $ids_array Category IDs.
1996 8
 * @param string $type     Category taxonomy.
1997 8
 *
1998
 * @return array Category IDs.
1999 8
 */
2000
function gd_lang_object_ids( $ids_array, $type ) {
2001
	if ( function_exists( 'icl_object_id' ) ) {
2002
		$res = array();
2003
		foreach ( $ids_array as $id ) {
2004
			$xlat = icl_object_id( $id, $type, false );
2005
			if ( ! is_null( $xlat ) ) {
2006
				$res[] = $xlat;
2007
			}
2008 8
		}
2009
2010 8
		return $res;
2011
	} else {
2012
		return $ids_array;
2013
	}
2014 8
}
2015
2016
2017
/**
2018
 * function to add class to body when multi post type is active.
2019
 *
2020
 * @since   1.0.0
2021
 * @since   1.5.6 Add geodir-page class to body for all gd pages.
2022
 * @package GeoDirectory
2023
 * @global object $wpdb  WordPress Database object.
2024
 *
2025
 * @param array $classes Body CSS classes.
2026
 *
2027
 * @return array Modified Body CSS classes.
2028
 */
2029
function geodir_custom_posts_body_class( $classes ) {
2030
	global $wpdb, $wp;
2031 8
	$post_types = geodir_get_posttypes( 'object' );
2032
	if ( ! empty( $post_types ) && count( (array) $post_types ) > 1 ) {
2033 8
		$classes[] = 'geodir_custom_posts';
2034
	}
2035 8
2036
	// fix body class for signup page
2037
	if ( geodir_is_page( 'login' ) ) {
2038 8
		$new_classes   = array();
2039
		$new_classes[] = 'signup page-geodir-signup';
2040
		if ( ! empty( $classes ) ) {
2041
			foreach ( $classes as $class ) {
2042
				if ( $class && $class != 'home' && $class != 'blog' ) {
2043
					$new_classes[] = $class;
2044
				}
2045
			}
2046
		}
2047
		$classes = $new_classes;
2048
	}
2049
2050
	if ( geodir_is_geodir_page() ) {
2051 8
		$classes[] = 'geodir-page';
2052 8
	}
2053
2054 8
	return $classes;
2055
}
2056
2057
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
2058
2059
2060
/**
2061
 * Returns available map zoom levels.
2062 8
 *
2063
 * @since   1.0.0
2064 8
 * @package GeoDirectory
2065 1
 * @return array Available map zoom levels.
2066 1
 */
2067 1
function geodir_map_zoom_level() {
2068 1
	/**
2069 1
	 * Filter GD map zoom level.
2070 8
	 *
2071
	 * @since 1.0.0
2072
	 */
2073
	return apply_filters( 'geodir_map_zoom_level', array(
2074
		1,
2075
		2,
2076
		3,
2077
		4,
2078
		5,
2079 8
		6,
2080 8
		7,
2081 8
		8,
2082
		9,
2083 8
		10,
2084
		11,
2085
		12,
2086
		13,
2087
		14,
2088
		15,
2089
		16,
2090
		17,
2091 8
		18,
2092
		19
2093 8
	) );
2094 8
2095 8
}
2096
2097 8
2098
/**
2099 8
 * This function takes backup of an option so they can be restored later.
2100 8
 *
2101 8
 * @since   1.0.0
2102 8
 * @package GeoDirectory
2103 8
 *
2104 8
 * @param string $geodir_option_name Option key.
2105 8
 */
2106
function geodir_option_version_backup( $geodir_option_name ) {
2107
	$version_date  = time();
2108 8
	$geodir_option = get_option( $geodir_option_name );
2109 8
2110
	if ( ! empty( $geodir_option ) ) {
2111 8
		add_option( $geodir_option_name . '_' . $version_date, $geodir_option );
2112
	}
2113
}
2114
2115
/**
2116
 * display add listing page for wpml.
2117
 *
2118
 * @since   1.0.0
2119
 * @package GeoDirectory
2120
 *
2121
 * @param int $page_id The page ID.
2122
 *
2123
 * @return int Page ID.
2124
 */
2125
function get_page_id_geodir_add_listing_page( $page_id ) {
2126 8
	if ( geodir_wpml_multilingual_status() ) {
2127
		$post_type = 'post_page';
2128 8
		$page_id   = geodir_get_wpml_element_id( $page_id, $post_type );
2129 8
	}
2130
2131
	return $page_id;
2132
}
2133 8
2134
/**
2135
 * Returns wpml multilingual status.
2136
 *
2137
 * @since   1.0.0
2138
 * @package GeoDirectory
2139
 * @return bool Returns true when sitepress multilingual CMS active. else returns false.
2140
 */
2141
function geodir_wpml_multilingual_status() {
2142
	if ( function_exists( 'icl_object_id' ) ) {
2143
		return true;
2144
	}
2145
2146
	return false;
2147
}
2148 8
2149
/**
2150 8
 * Returns WPML element ID.
2151 8
 *
2152
 * @since   1.0.0
2153
 * @package GeoDirectory
2154
 *
2155 8
 * @param int $page_id      The page ID.
2156 8
 * @param string $post_type The post type.
2157
 *
2158 8
 * @return int Element ID when exists. Else the page id.
2159
 */
2160
function geodir_get_wpml_element_id( $page_id, $post_type ) {
2161
	global $sitepress;
2162 8
	if ( geodir_wpml_multilingual_status() && ! empty( $sitepress ) && isset( $sitepress->queries ) ) {
2163 4
		$trid = $sitepress->get_element_trid( $page_id, $post_type );
2164 4
2165 2
		if ( $trid > 0 ) {
2166 2
			$translations = $sitepress->get_element_translations( $trid, $post_type );
2167 4
2168
			$lang = $sitepress->get_current_language();
2169 8
			$lang = $lang ? $lang : $sitepress->get_default_language();
2170
2171
			if ( ! empty( $translations ) && ! empty( $lang ) && isset( $translations[ $lang ] ) && isset( $translations[ $lang ]->element_id ) && ! empty( $translations[ $lang ]->element_id ) ) {
2172
				$page_id = $translations[ $lang ]->element_id;
2173
			}
2174
		}
2175
	}
2176
2177
	return $page_id;
2178
}
2179
2180
/**
2181
 * WPML check element ID.
2182
 *
2183
 * @since      1.0.0
2184 8
 * @package    GeoDirectory
2185
 * @deprecated 1.4.6 No longer needed as we handle translating GD pages as normal now.
2186 8
 */
2187 8
function geodir_wpml_check_element_id() {
2188
	global $sitepress;
2189
	if ( geodir_wpml_multilingual_status() && ! empty( $sitepress ) && isset( $sitepress->queries ) ) {
2190 8
		$el_type      = 'post_page';
2191 8
		$el_id        = get_option( 'geodir_add_listing_page' );
2192
		$default_lang = $sitepress->get_default_language();
2193 8
		$el_details   = $sitepress->get_element_language_details( $el_id, $el_type );
2194 8
2195
		if ( ! ( $el_id > 0 && $default_lang && ! empty( $el_details ) && isset( $el_details->language_code ) && $el_details->language_code == $default_lang ) ) {
2196
			if ( ! $el_details->source_language_code ) {
2197
				$sitepress->set_element_language_details( $el_id, $el_type, '', $default_lang );
2198 8
				$sitepress->icl_translations_cache->clear();
2199
			}
2200
		}
2201
	}
2202 8
}
2203 2
2204 2
/**
2205
 * Returns orderby SQL using the given query args.
2206 8
 *
2207
 * @since   1.0.0
2208
 * @package GeoDirectory
2209
 * @global object $wpdb          WordPress Database object.
2210 8
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2211
 *
2212
 * @param array $query_args      The query array.
2213
 *
2214 8
 * @return string Orderby SQL.
2215 2
 */
2216 2
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...
2217
	global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2218 8
2219
	$query_args = $gd_query_args_widgets;
2220
	if ( empty( $query_args ) || empty( $query_args['is_geodir_loop'] ) ) {
2221
		return $wpdb->posts . ".post_date DESC, ";
2222 8
	}
2223 4
2224
	$post_type = empty( $query_args['post_type'] ) ? 'gd_place' : $query_args['post_type'];
2225 4
	$table     = $plugin_prefix . $post_type . '_detail';
2226 2
2227 2
	$sort_by = ! empty( $query_args['order_by'] ) ? $query_args['order_by'] : '';
2228 4
2229 8
	switch ( $sort_by ) {
2230
		case 'latest':
2231 8
		case 'newest':
2232
			$orderby = $wpdb->posts . ".post_date DESC, ";
2233
			break;
2234
		case 'featured':
2235
			$orderby = $table . ".is_featured ASC, ". $wpdb->posts . ".post_date DESC, ";
2236
			break;
2237
		case 'az':
2238
			$orderby = $wpdb->posts . ".post_title ASC, ";
2239
			break;
2240
		case 'high_review':
2241
			$orderby = $table . ".rating_count DESC, " . $table . ".overall_rating DESC, ";
2242
			break;
2243
		case 'high_rating':
2244
			$orderby = "( " . $table . ".overall_rating  ) DESC, ";
2245
			break;
2246 8
		case 'random':
2247
			$orderby = "RAND(), ";
2248 8
			break;
2249 8
		default:
2250
			$orderby = $wpdb->posts . ".post_title ASC, ";
2251
			break;
2252
	}
2253 8
2254
	return $orderby;
2255
}
2256
2257
/**
2258
 * Retrieve listings/count using requested filter parameters.
2259
 *
2260
 * @since   1.0.0
2261
 * @package GeoDirectory
2262
 * @since   1.4.2 New parameter $count_only added
2263
 * @since   1.6.11 FIXED: GD listings query returns wrong total when category has sub categories.
2264
 * @global object $wpdb          WordPress Database object.
2265
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2266
 * @global string $table_prefix  WordPress Database Table prefix.
2267
 *
2268 8
 * @param array $query_args      The query array.
2269
 * @param  int|bool $count_only  If true returns listings count only, otherwise returns array
2270 8
 *
2271 8
 * @return mixed Result object.
2272
 */
2273
function geodir_get_widget_listings( $query_args = array(), $count_only = false ) {
2274
	global $wpdb, $plugin_prefix, $table_prefix;
2275 8
	$GLOBALS['gd_query_args_widgets'] = $query_args;
2276 8
	$gd_query_args_widgets            = $query_args;
2277 8
2278
	$post_type = empty( $query_args['post_type'] ) ? 'gd_place' : $query_args['post_type'];
2279 8
	$table     = $plugin_prefix . $post_type . '_detail';
2280
2281
	$fields = $wpdb->posts . ".*, " . $table . ".*";
2282
	/**
2283
	 * Filter widget listing fields string part that is being used for query.
2284
	 *
2285
	 * @since 1.0.0
2286
	 *
2287
	 * @param string $fields    Fields string.
2288
	 * @param string $table     Table name.
2289
	 * @param string $post_type Post type.
2290
	 */
2291
	$fields = apply_filters( 'geodir_filter_widget_listings_fields', $fields, $table, $post_type );
2292
2293 2
	$join = "INNER JOIN " . $table . " ON (" . $table . ".post_id = " . $wpdb->posts . ".ID)";
2294 2
2295 2
	########### WPML ###########
2296
2297 2
	if ( function_exists( 'icl_object_id' ) ) {
2298 2
		global $sitepress;
2299 2
		$lang_code = ICL_LANGUAGE_CODE;
2300
		if ( $lang_code ) {
2301
			$join .= " JOIN " . $table_prefix . "icl_translations icl_t ON icl_t.element_id = " . $table_prefix . "posts.ID";
2302
		}
2303
	}
2304
2305
	########### WPML ###########
2306
2307
	/**
2308
	 * Filter widget listing join clause string part that is being used for query.
2309 2
	 *
2310 2
	 * @since 1.0.0
2311
	 *
2312
	 * @param string $join      Join clause string.
2313
	 * @param string $post_type Post type.
2314
	 */
2315
	$join = apply_filters( 'geodir_filter_widget_listings_join', $join, $post_type );
2316
2317
	$post_status = is_super_admin() ? " OR " . $wpdb->posts . ".post_status = 'private'" : '';
2318
2319
	$where = " AND ( " . $wpdb->posts . ".post_status = 'publish' " . $post_status . " ) AND " . $wpdb->posts . ".post_type = '" . $post_type . "'";
2320
2321
	########### WPML ###########
2322
	if ( function_exists( 'icl_object_id' ) ) {
2323
		if ( $lang_code ) {
2324 2
			$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...
2325 2
		}
2326 2
	}
2327
	########### WPML ###########
2328 2
	/**
2329 2
	 * Filter widget listing where clause string part that is being used for query.
2330 2
	 *
2331
	 * @since 1.0.0
2332
	 *
2333
	 * @param string $where     Where clause string.
2334
	 * @param string $post_type Post type.
2335
	 */
2336
	$where = apply_filters( 'geodir_filter_widget_listings_where', $where, $post_type );
2337
	$where = $where != '' ? " WHERE 1=1 " . $where : '';
2338
2339
	$groupby = " GROUP BY $wpdb->posts.ID "; //@todo is this needed? faster withotu
2340 2
	/**
2341
	 * Filter widget listing groupby clause string part that is being used for query.
2342 2
	 *
2343
	 * @since 1.0.0
2344
	 *
2345
	 * @param string $groupby   Group by clause string.
2346
	 * @param string $post_type Post type.
2347
	 */
2348
	$groupby = apply_filters( 'geodir_filter_widget_listings_groupby', $groupby, $post_type );
2349
2350
	if ( $count_only ) {
2351
		$sql  = "SELECT COUNT(DISTINCT " . $wpdb->posts . ".ID) AS total FROM " . $wpdb->posts . "
2352
			" . $join . "
2353
			" . $where;
2354
		$rows = (int) $wpdb->get_var( $sql );
2355
	} else {
2356
		$orderby = geodir_widget_listings_get_order( $query_args );
2357
		/**
2358
		 * Filter widget listing orderby clause string part that is being used for query.
2359
		 *
2360
		 * @since 1.0.0
2361
		 *
2362
		 * @param string $orderby   Order by clause string.
2363
		 * @param string $table     Table name.
2364
		 * @param string $post_type Post type.
2365
		 */
2366
		$orderby = apply_filters( 'geodir_filter_widget_listings_orderby', $orderby, $table, $post_type );
2367
		$orderby .= $wpdb->posts . ".post_title ASC";
2368
		$orderby = $orderby != '' ? " ORDER BY " . $orderby : '';
2369
2370
		$limit = ! empty( $query_args['posts_per_page'] ) ? $query_args['posts_per_page'] : 5;
2371
		/**
2372
		 * Filter widget listing limit that is being used for query.
2373
		 *
2374
		 * @since 1.0.0
2375
		 *
2376
		 * @param int $limit        Query results limit.
2377
		 * @param string $post_type Post type.
2378
		 */
2379
		$limit = apply_filters( 'geodir_filter_widget_listings_limit', $limit, $post_type );
2380
2381
		$page = ! empty( $query_args['pageno'] ) ? absint( $query_args['pageno'] ) : 1;
2382
		if ( ! $page ) {
2383
			$page = 1;
2384
		}
2385
2386
		$limit = (int) $limit > 0 ? " LIMIT " . absint( ( $page - 1 ) * (int) $limit ) . ", " . (int) $limit : "";
2387
2388
		//@todo removed SQL_CALC_FOUND_ROWS from below as don't think it is needed and query is faster without
2389 9
		$sql  = "SELECT " . $fields . " FROM " . $wpdb->posts . "
2390
			" . $join . "
2391 9
			" . $where . "
2392 9
			" . $groupby . "
2393 9
			" . $orderby . "
2394 4
			" . $limit;
2395
		$rows = $wpdb->get_results( $sql );
2396 9
	}
2397 9
2398
	unset( $GLOBALS['gd_query_args_widgets'] );
2399
	unset( $gd_query_args_widgets );
2400
2401
	return $rows;
2402
}
2403
2404
/**
2405
 * Listing query fields SQL part for widgets.
2406
 *
2407
 * @since   1.0.0
2408
 * @package GeoDirectory
2409 8
 * @global object $wpdb          WordPress Database object.
2410 8
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2411 8
 *
2412
 * @param string $fields         Fields SQL.
2413
 *
2414 8
 * @return string Modified fields SQL.
2415 8
 */
2416
function geodir_function_widget_listings_fields( $fields ) {
2417
	global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2418 8
2419 8
	$query_args = $gd_query_args_widgets;
2420
	if ( empty( $query_args ) || empty( $query_args['is_geodir_loop'] ) ) {
2421 8
		return $fields;
2422
	}
2423
2424 8
	return $fields;
2425
}
2426
2427
/**
2428
 * Listing query join clause SQL part for widgets.
2429
 *
2430
 * @since   1.0.0
2431
 * @package GeoDirectory
2432
 * @global object $wpdb          WordPress Database object.
2433
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2434
 *
2435
 * @param string $join           Join clause SQL.
2436
 *
2437
 * @return string Modified join clause SQL.
2438
 */
2439
function geodir_function_widget_listings_join( $join ) {
2440
	global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2441
2442
	$query_args = $gd_query_args_widgets;
2443
	if ( empty( $query_args ) || empty( $query_args['is_geodir_loop'] ) ) {
2444
		return $join;
2445
	}
2446
2447
	$post_type = empty( $query_args['post_type'] ) ? 'gd_place' : $query_args['post_type'];
2448
	$table     = $plugin_prefix . $post_type . '_detail';
2449
2450 View Code Duplication
	if ( ! empty( $query_args['with_pics_only'] ) ) {
2451
		$join .= " LEFT JOIN " . GEODIR_ATTACHMENT_TABLE . " ON ( " . GEODIR_ATTACHMENT_TABLE . ".post_id=" . $table . ".post_id AND " . GEODIR_ATTACHMENT_TABLE . ".mime_type LIKE '%image%' )";
2452
	}
2453
2454 View Code Duplication
	if ( ! empty( $query_args['tax_query'] ) ) {
2455
		$tax_queries = get_tax_sql( $query_args['tax_query'], $wpdb->posts, 'ID' );
2456
		if ( ! empty( $tax_queries['join'] ) && ! empty( $tax_queries['where'] ) ) {
2457
			$join .= $tax_queries['join'];
2458
		}
2459
	}
2460
2461
	return $join;
2462
}
2463
2464 7
/**
2465 7
 * Listing query where clause SQL part for widgets.
2466 7
 *
2467
 * @since   1.0.0
2468
 * @package GeoDirectory
2469 7
 * @global object $wpdb          WordPress Database object.
2470 1
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2471 1
 *
2472
 * @param string $where          Where clause SQL.
2473 7
 *
2474
 * @return string Modified where clause SQL.
2475
 */
2476
function geodir_function_widget_listings_where( $where ) {
2477
	global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2478
2479
	$query_args = $gd_query_args_widgets;
2480
	if ( empty( $query_args ) || empty( $query_args['is_geodir_loop'] ) ) {
2481
		return $where;
2482
	}
2483
	$post_type = empty( $query_args['post_type'] ) ? 'gd_place' : $query_args['post_type'];
2484
	$table     = $plugin_prefix . $post_type . '_detail';
2485
2486
	if ( ! empty( $query_args ) ) {
2487
		if ( ! empty( $query_args['gd_location'] ) && function_exists( 'geodir_default_location_where' ) ) {
2488
			$where = geodir_default_location_where( $where, $table );
2489
		}
2490
2491
		if ( ! empty( $query_args['post_author'] ) ) {
2492
			$where .= " AND " . $wpdb->posts . ".post_author = " . (int) $query_args['post_author'];
2493
		}
2494 3
2495 3
		if ( ! empty( $query_args['show_featured_only'] ) ) {
2496
			$where .= " AND " . $table . ".is_featured = '1'";
2497 3
		}
2498
2499
		if ( ! empty( $query_args['show_special_only'] ) ) {
2500 3
			$where .= " AND ( " . $table . ".geodir_special_offers != '' AND " . $table . ".geodir_special_offers IS NOT NULL )";
2501
		}
2502 3
2503
		if ( ! empty( $query_args['with_pics_only'] ) ) {
2504 3
			$where .= " AND " . GEODIR_ATTACHMENT_TABLE . ".ID IS NOT NULL ";
2505 3
		}
2506
2507 3
		if ( ! empty( $query_args['featured_image_only'] ) ) {
2508
			$where .= " AND " . $table . ".featured_image IS NOT NULL AND " . $table . ".featured_image!='' ";
2509
		}
2510 3
2511 3
		if ( ! empty( $query_args['with_videos_only'] ) ) {
2512
			$where .= " AND ( " . $table . ".geodir_video != '' AND " . $table . ".geodir_video IS NOT NULL )";
2513
		}
2514 3
2515 3 View Code Duplication
		if ( ! empty( $query_args['tax_query'] ) ) {
2516
			$tax_queries = get_tax_sql( $query_args['tax_query'], $wpdb->posts, 'ID' );
2517
2518 3
			if ( ! empty( $tax_queries['join'] ) && ! empty( $tax_queries['where'] ) ) {
2519
				$where .= $tax_queries['where'];
2520
			}
2521 3
		}
2522 3
	}
2523 3
2524
	return $where;
2525 3
}
2526 3
2527 3
/**
2528 3
 * Listing query orderby clause SQL part for widgets.
2529 3
 *
2530
 * @since   1.0.0
2531 3
 * @package GeoDirectory
2532 3
 * @global object $wpdb          WordPress Database object.
2533 3
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2534 3
 *
2535
 * @param string $orderby        Orderby clause SQL.
2536 3
 *
2537
 * @return string Modified orderby clause SQL.
2538 3
 */
2539 3
function geodir_function_widget_listings_orderby( $orderby ) {
2540
	global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2541
2542
	$query_args = $gd_query_args_widgets;
2543
	if ( empty( $query_args ) || empty( $query_args['is_geodir_loop'] ) ) {
2544
		return $orderby;
2545
	}
2546
2547
	return $orderby;
2548
}
2549 3
2550 3
/**
2551 3
 * Listing query limit for widgets.
2552 3
 *
2553
 * @since   1.0.0
2554
 * @package GeoDirectory
2555
 * @global object $wpdb          WordPress Database object.
2556
 * @global string $plugin_prefix Geodirectory plugin table prefix.
2557 3
 *
2558
 * @param int $limit             Query limit.
2559 3
 *
2560
 * @return int Query limit.
2561 3
 */
2562
function geodir_function_widget_listings_limit( $limit ) {
2563 3
	global $wpdb, $plugin_prefix, $gd_query_args_widgets;
2564
2565 3
	$query_args = $gd_query_args_widgets;
2566
	if ( empty( $query_args ) || empty( $query_args['is_geodir_loop'] ) ) {
2567
		return $limit;
2568
	}
2569 3
2570 3
	if ( ! empty( $query_args ) && ! empty( $query_args['posts_per_page'] ) ) {
2571 3
		$limit = (int) $query_args['posts_per_page'];
2572 3
	}
2573 3
2574 3
	return $limit;
2575 3
}
2576 3
2577
/**
2578 3
 * WP media large width.
2579
 *
2580
 * @since   1.0.0
2581
 * @package GeoDirectory
2582 3
 *
2583 3
 * @param int $default         Default width.
2584 3
 * @param string|array $params Image parameters.
2585 3
 *
2586
 * @return int Large size width.
2587
 */
2588 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...
2589
	$large_size_w = get_option( 'large_size_w' );
2590
	$large_size_w = $large_size_w > 0 ? $large_size_w : $default;
2591
	$large_size_w = absint( $large_size_w );
2592
2593
	if ( ! get_option( 'geodir_use_wp_media_large_size' ) ) {
2594
		$large_size_w = 800;
2595
	}
2596
2597
	/**
2598 3
	 * Filter large image width.
2599 3
	 *
2600
	 * @since 1.0.0
2601 3
	 *
2602
	 * @param int $large_size_w    Large image width.
2603
	 * @param int $default         Default width.
2604 3
	 * @param string|array $params Image parameters.
2605 3
	 */
2606 3
	$large_size_w = apply_filters( 'geodir_filter_media_image_large_width', $large_size_w, $default, $params );
2607
2608 3
	return $large_size_w;
2609
}
2610 3
2611
/**
2612 3
 * WP media large height.
2613 3
 *
2614
 * @since   1.0.0
2615 3
 * @package GeoDirectory
2616
 *
2617
 * @param int $default   Default height.
2618
 * @param string $params Image parameters.
2619
 *
2620
 * @return int Large size height.
2621
 */
2622 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...
2623
	$large_size_h = get_option( 'large_size_h' );
2624 3
	$large_size_h = $large_size_h > 0 ? $large_size_h : $default;
2625
	$large_size_h = absint( $large_size_h );
2626 3
2627 3
	if ( ! get_option( 'geodir_use_wp_media_large_size' ) ) {
2628 3
		$large_size_h = 800;
2629 3
	}
2630 3
2631
	/**
2632
	 * Filter large image height.
2633
	 *
2634
	 * @since 1.0.0
2635
	 *
2636
	 * @param int $large_size_h    Large image height.
2637
	 * @param int $default         Default height.
2638
	 * @param string|array $params Image parameters.
2639
	 */
2640
	$large_size_h = apply_filters( 'geodir_filter_media_image_large_height', $large_size_h, $default, $params );
2641
2642
	return $large_size_h;
2643
}
2644 2
2645
/**
2646 2
 * Sanitize location name.
2647
 *
2648
 * @since   1.0.0
2649 2
 * @package GeoDirectory
2650
 *
2651
 * @param string $type    Location type. Can be gd_country, gd_region, gd_city.
2652
 * @param string $name    Location name.
2653
 * @param bool $translate Do you want to translate the name? Default: true.
2654
 *
2655
 * @return string Sanitized name.
2656 2
 */
2657
function geodir_sanitize_location_name( $type, $name, $translate = true ) {
2658
	if ( $name == '' ) {
2659
		return null;
2660
	}
2661
2662
	$type = $type == 'gd_country' ? 'country' : $type;
2663 2
	$type = $type == 'gd_region' ? 'region' : $type;
2664
	$type = $type == 'gd_city' ? 'city' : $type;
2665
2666
	$return = $name;
2667
	if ( function_exists( 'get_actual_location_name' ) ) {
2668
		$return = get_actual_location_name( $type, $name, $translate );
2669
	} else {
2670 2
		$return = preg_replace( '/-(\d+)$/', '', $return );
2671
		$return = preg_replace( '/[_-]/', ' ', $return );
2672
		$return = geodir_ucwords( $return );
2673
		$return = $translate ? __( $return, 'geodirectory' ) : $return;
2674
	}
2675
2676
	return $return;
2677 2
}
2678
2679
2680
/**
2681
 * Pluralize comment number.
2682
 *
2683
 * @since 1.0.0
2684 2
 * @since 1.6.16 Changes for disable review stars for certain post type.
2685
 * @package GeoDirectory
2686
 *
2687
 * @global object $post The current post object.
2688
 *
2689
 * @param int $number Comments number.
2690
 */
2691 2
function geodir_comments_number( $number ) {
2692
	global $post;
2693
	
2694
	if ( !empty( $post->post_type ) && geodir_cpt_has_rating_disabled( $post->post_type ) ) {
2695
		$number = get_comments_number();
2696
		
2697 View Code Duplication
		if ( $number > 1 ) {
2698 2
			$output = str_replace( '%', number_format_i18n( $number ), __( '% Comments', 'geodirectory' ) );
2699
		} elseif ( $number == 0 || $number == '' ) {
2700
			$output = __( 'No Comments', 'geodirectory' );
2701
		} else { // must be one
2702
			$output = __( '1 Comment', 'geodirectory' );
2703
		}
2704 View Code Duplication
	} else {    
2705 2
		if ( $number > 1 ) {
2706
			$output = str_replace( '%', number_format_i18n( $number ), __( '% Reviews', 'geodirectory' ) );
2707
		} elseif ( $number == 0 || $number == '' ) {
2708
			$output = __( 'No Reviews', 'geodirectory' );
2709
		} else { // must be one
2710
			$output = __( '1 Review', 'geodirectory' );
2711
		}
2712 2
	}
2713
	
2714
	echo $output;
2715
}
2716
2717
/**
2718
 * Checks whether the current page is geodirectory home page or not.
2719 2
 *
2720
 * @since   1.0.0
2721
 * @package GeoDirectory
2722
 * @global object $wpdb WordPress Database object.
2723
 * @return bool If current page is GD home page returns true, else false.
2724
 */
2725
function is_page_geodir_home() {
2726 2
	global $wpdb;
2727
	$cur_url = str_replace( array( "https://", "http://", "www." ), array( '', '', '' ), geodir_curPageURL() );
2728
	if ( function_exists( 'geodir_location_geo_home_link' ) ) {
2729
		remove_filter( 'home_url', 'geodir_location_geo_home_link', 100000 );
2730
	}
2731
	$home_url = home_url( '', 'http' );
2732
	if ( function_exists( 'geodir_location_geo_home_link' ) ) {
2733 2
		add_filter( 'home_url', 'geodir_location_geo_home_link', 100000, 2 );
2734
	}
2735
	$home_url = str_replace( "www.", "", $home_url );
2736
	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' ) ) ) {
2737
		return true;
2738
	} 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' ) ) {
2739
		return true;
2740 2
	} else {
2741 2
		return false;
2742
	}
2743 2
2744
}
2745
2746
2747
/**
2748
 * Returns homepage canonical url for SEO plugins.
2749
 *
2750
 * @since   1.0.0
2751
 * @package GeoDirectory
2752
 * @global object $post The current post object.
2753
 *
2754
 * @param string $url   The old url.
2755
 *
2756
 * @return string The canonical URL.
2757
 */
2758
function geodir_wpseo_homepage_canonical( $url ) {
2759
	global $post;
2760
2761
	if ( is_page_geodir_home() ) {
2762
		return home_url();
2763
	}
2764
2765
	return $url;
2766
}
2767
2768
add_filter( 'wpseo_canonical', 'geodir_wpseo_homepage_canonical', 10 );
2769
add_filter( 'aioseop_canonical_url', 'geodir_wpseo_homepage_canonical', 10 );
2770
2771
/**
2772
 * Add extra fields to google maps script call.
2773
 *
2774
 * @since   1.0.0
2775
 * @package GeoDirectory
2776
 * @global object $post The current post object.
2777
 *
2778
 * @param string $extra Old extra string.
2779
 *
2780
 * @return string Modified extra string.
2781
 */
2782
function geodir_googlemap_script_extra_details_page( $extra ) {
2783
	global $post;
2784
	$add_google_places_api = false;
2785
	if ( isset( $post->post_content ) && has_shortcode( $post->post_content, 'gd_add_listing' ) ) {
2786 2
		$add_google_places_api = true;
2787 2
	}
2788 2
	if ( ! str_replace( 'libraries=places', '', $extra ) && ( geodir_is_page( 'detail' ) || $add_google_places_api ) ) {
2789
		$extra .= "&amp;libraries=places";
2790 2
	}
2791 2
2792 1
	return $extra;
2793 1
}
2794
2795 2
add_filter( 'geodir_googlemap_script_extra', 'geodir_googlemap_script_extra_details_page', 101, 1 );
2796 2
2797
2798 2
/**
2799 2
 * Generates popular post category HTML.
2800
 *
2801 2
 * @since   1.0.0
2802
 * @since   1.5.1 Added option to set default post type.
2803 2
 * @since   1.6.9 Added option to show parent categories only.
2804 2
 * @package GeoDirectory
2805
 * @global object $wpdb                     WordPress Database object.
2806
 * @global string $plugin_prefix            Geodirectory plugin table prefix.
2807 2
 * @global string $geodir_post_category_str The geodirectory post category.
2808
 *
2809 2
 * @param array|string $args                Display arguments including before_title, after_title, before_widget, and
2810
 *                                          after_widget.
2811
 * @param array|string $instance            The settings for the particular instance of the widget.
2812
 */
2813 2
function geodir_popular_post_category_output( $args = '', $instance = '' ) {
2814 2
	// prints the widget
2815 1
	global $wpdb, $plugin_prefix, $geodir_post_category_str;
2816
	extract( $args, EXTR_SKIP );
2817
2818
	echo $before_widget;
2819 1
2820
	/** This filter is documented in geodirectory_widgets.php */
2821 1
	$title = empty( $instance['title'] ) ? __( 'Popular Categories', 'geodirectory' ) : apply_filters( 'widget_title', __( $instance['title'], 'geodirectory' ) );
2822
2823 1
	$gd_post_type = geodir_get_current_posttype();
2824 1
2825 1
	$category_limit = isset( $instance['category_limit'] ) && $instance['category_limit'] > 0 ? (int) $instance['category_limit'] : 15;
2826
	if (!isset($category_restrict)) {
2827 1
		$category_restrict = false;
2828 1
	}
2829 1
	if ( ! empty( $gd_post_type ) ) {
2830 1
		$default_post_type = $gd_post_type;
2831
	} elseif ( isset( $instance['default_post_type'] ) && gdsc_is_post_type_valid( $instance['default_post_type'] ) ) {
2832 1
		$default_post_type = $instance['default_post_type'];
2833 1
	} else {
2834 1
		$all_gd_post_type  = geodir_get_posttypes();
2835 1
		$default_post_type = ( isset( $all_gd_post_type[0] ) ) ? $all_gd_post_type[0] : '';
2836 1
	}
2837
	$parent_only = !empty( $instance['parent_only'] ) ? true : false;
2838
2839 1
	$taxonomy = array();
2840
	if ( ! empty( $gd_post_type ) ) {
2841 1
		$taxonomy[] = $gd_post_type . "category";
2842 1
	} else {
2843
		$taxonomy = geodir_get_taxonomies( $gd_post_type );
2844
	}
2845
2846
	$taxonomy = apply_filters('geodir_pp_category_taxonomy', $taxonomy);
2847
2848
	$term_args = array( 'taxonomy' => $taxonomy );
2849
	if ( $parent_only ) {
2850
		$term_args['parent'] = 0;
2851
	}
2852
2853
	$terms   = get_terms( $term_args );
2854
	$a_terms = array();
2855
	$b_terms = array();
2856
2857
	foreach ( $terms as $term ) {
2858
		if ( $term->count > 0 ) {
2859 1
			$a_terms[ $term->taxonomy ][] = $term;
2860 1
		}
2861 1
	}
2862 1
2863 1
	if ( ! empty( $a_terms ) ) {
2864
		foreach ( $a_terms as $b_key => $b_val ) {
2865
			$b_terms[ $b_key ] = geodir_sort_terms( $b_val, 'count' );
2866
		}
2867
2868
		$default_taxonomy = $default_post_type != '' && isset( $b_terms[ $default_post_type . 'category' ] ) ? $default_post_type . 'category' : '';
2869
2870
		$tax_change_output = '';
2871
		if ( count( $b_terms ) > 1 ) {
2872
			$tax_change_output .= "<select data-limit='$category_limit' data-parent='" . (int)$parent_only . "' class='geodir-cat-list-tax'  onchange='geodir_get_post_term(this);'>";
2873
			foreach ( $b_terms as $key => $val ) {
2874
				$ptype    = get_post_type_object( str_replace( "category", "", $key ) );
2875
				$cpt_name = __( $ptype->labels->singular_name, 'geodirectory' );
2876
				$tax_change_output .= "<option value='$key' " . selected( $key, $default_taxonomy, false ) . ">" . sprintf( __( '%s Categories', 'geodirectory' ), $cpt_name ) . "</option>";
2877 1
			}
2878 1
			$tax_change_output .= "</select>";
2879 1
		}
2880 2
2881 2
		if ( ! empty( $b_terms ) ) {
2882
			$terms = $default_taxonomy != '' && isset( $b_terms[ $default_taxonomy ] ) ? $b_terms[ $default_taxonomy ] : reset( $b_terms );// get the first array
2883
			global $cat_count;//make global so we can change via function
2884
			$cat_count = 0;
2885
			?>
2886
			<div class="geodir-category-list-in clearfix">
2887
				<div class="geodir-cat-list clearfix">
2888
					<?php
2889
					echo $before_title . __( $title ) . $after_title;
2890
2891
					echo $tax_change_output;
2892
2893
					echo '<ul class="geodir-popular-cat-list">';
2894
2895
					geodir_helper_cat_list_output( $terms, $category_limit, $category_restrict);
2896
2897
					echo '</ul>';
2898 2
					?>
2899
				</div>
2900
				<?php
2901 2
				$hide = '';
2902
				if ( $cat_count < $category_limit ) {
2903 2
					$hide = 'style="display:none;"';
2904 2
				}
2905
				echo "<div class='geodir-cat-list-more' $hide >";
2906 2
				echo '<a href="javascript:void(0)" class="geodir-morecat geodir-showcat">' . __( 'More Categories', 'geodirectory' ) . '</a>';
2907 2
				echo '<a href="javascript:void(0)" class="geodir-morecat geodir-hidecat geodir-hide">' . __( 'Less Categories', 'geodirectory' ) . '</a>';
2908
				echo "</div>";
2909 2
				/* add scripts */
2910 2
				add_action( 'wp_footer', 'geodir_popular_category_add_scripts', 100 );
2911
				?>
2912 2
			</div>
2913 2
			<?php
2914
		}
2915
	}
2916
	echo $after_widget;
2917
}
2918 2
2919 2
/**
2920 2
 * Generates category list HTML.
2921
 *
2922 2
 * @since   1.0.0
2923 2
 * @package GeoDirectory
2924 2
 * @global string $geodir_post_category_str The geodirectory post category.
2925
 *
2926 2
 * @param array $terms                      An array of term objects.
2927
 * @param int $category_limit               Number of categories to display by default.
2928 2
 * @param bool $category_restrict           If the cat limit shoudl be hidden or not shown.
2929
 */
2930 2
function geodir_helper_cat_list_output( $terms, $category_limit , $category_restrict=false) {
2931
	global $geodir_post_category_str, $cat_count;
2932 2
	$term_icons = geodir_get_term_icon();
2933 2
2934 2
	$geodir_post_category_str = array();
2935
2936
2937
	foreach ( $terms as $cat ) {
2938
		$post_type     = str_replace( "category", "", $cat->taxonomy );
2939
		$term_icon_url = ! empty( $term_icons ) && isset( $term_icons[ $cat->term_id ] ) ? $term_icons[ $cat->term_id ] : '';
2940
2941
		$cat_count ++;
2942
2943
		$geodir_post_category_str[] = array( 'posttype' => $post_type, 'termid' => $cat->term_id );
2944 2
2945
		$class_row  = $cat_count > $category_limit ? 'geodir-pcat-hide geodir-hide' : 'geodir-pcat-show';
2946 2
		if($category_restrict && $cat_count > $category_limit ){
2947
			continue;
2948 2
		}
2949 2
		$total_post = $cat->count;
2950
2951 2
		$term_link = get_term_link( $cat, $cat->taxonomy );
2952
		/**
2953
		 * Filer the category term link.
2954
		 *
2955
		 * @since 1.4.5
2956
		 *
2957
		 * @param string $term_link The term permalink.
2958
		 * @param int $cat          ->term_id The term id.
2959
		 * @param string $post_type Wordpress post type.
2960
		 */
2961
		$term_link = apply_filters( 'geodir_category_term_link', $term_link, $cat->term_id, $post_type );
2962 2
2963
		echo '<li class="' . $class_row . '"><a href="' . $term_link . '">';
2964 2
		echo '<img alt="' . esc_attr( $cat->name ) . ' icon" style="height:20px;vertical-align:middle;" src="' . $term_icon_url . '"/> <span class="cat-link">';
2965
		echo $cat->name . '</span> <span class="geodir_term_class geodir_link_span geodir_category_class_' . $post_type . '_' . $cat->term_id . '">(' . $total_post . ')</span> ';
2966 2
		echo '</a></li>';
2967 2
	}
2968
}
2969 2
2970
/**
2971
 * Generates listing slider HTML.
2972
 *
2973
 * @since   1.0.0
2974
 * @package GeoDirectory
2975
 * @global object $post          The current post object.
2976
 *
2977
 * @param array|string $args     Display arguments including before_title, after_title, before_widget, and after_widget.
2978
 * @param array|string $instance The settings for the particular instance of the widget.
2979
 */
2980
function geodir_listing_slider_widget_output( $args = '', $instance = '' ) {
2981
	// prints the widget
2982
	extract( $args, EXTR_SKIP );
2983
2984
	echo $before_widget;
2985
2986
	/** This filter is documented in geodirectory_widgets.php */
2987
	$title = empty( $instance['title'] ) ? '' : apply_filters( 'widget_title', __( $instance['title'], 'geodirectory' ) );
2988
	/**
2989
	 * Filter the widget post type.
2990
	 *
2991
	 * @since 1.0.0
2992
	 *
2993
	 * @param string $instance ['post_type'] Post type of listing.
2994
	 */
2995
	$post_type = empty( $instance['post_type'] ) ? 'gd_place' : apply_filters( 'widget_post_type', $instance['post_type'] );
2996
	/**
2997
	 * Filter the widget's term.
2998
	 *
2999
	 * @since 1.0.0
3000
	 *
3001
	 * @param string $instance ['category'] Filter by term. Can be any valid term.
3002
	 */
3003
	$category = empty( $instance['category'] ) ? '0' : apply_filters( 'widget_category', $instance['category'] );
3004
	/**
3005
	 * Filter widget's "add_location_filter" value.
3006
	 *
3007
	 * @since 1.0.0
3008
	 *
3009
	 * @param string|bool $instance ['add_location_filter'] Do you want to add location filter? Can be 1 or 0.
3010
	 */
3011 2
	$add_location_filter = empty( $instance['add_location_filter'] ) ? '0' : apply_filters( 'widget_add_location_filter', $instance['add_location_filter'] );
3012 2
	/**
3013
	 * Filter the widget listings limit.
3014 2
	 *
3015 2
	 * @since 1.0.0
3016
	 *
3017 2
	 * @param string $instance ['post_number'] Number of listings to display.
3018 2
	 */
3019 2
	$post_number = empty( $instance['post_number'] ) ? '5' : apply_filters( 'widget_post_number', $instance['post_number'] );
3020 2
	/**
3021
	 * Filter the widget listings limit shown at one time.
3022 2
	 *
3023 2
	 * @since 1.5.0
3024 1
	 *
3025 1
	 * @param string $instance ['max_show'] Number of listings to display on screen.
3026
	 */
3027
	$max_show = empty( $instance['max_show'] ) ? '1' : apply_filters( 'widget_max_show', $instance['max_show'] );
3028
	/**
3029
	 * Filter the widget slide width.
3030
	 *
3031
	 * @since 1.5.0
3032
	 *
3033
	 * @param string $instance ['slide_width'] Width of the slides shown.
3034
	 */
3035 2
	$slide_width = empty( $instance['slide_width'] ) ? '' : apply_filters( 'widget_slide_width', $instance['slide_width'] );
3036
	/**
3037 2
	 * Filter widget's "show title" value.
3038 2
	 *
3039 2
	 * @since 1.0.0
3040
	 *
3041 2
	 * @param string|bool $instance ['show_title'] Do you want to display title? Can be 1 or 0.
3042
	 */
3043
	$show_title = empty( $instance['show_title'] ) ? '' : apply_filters( 'widget_show_title', $instance['show_title'] );
3044
	/**
3045
	 * Filter widget's "slideshow" value.
3046
	 *
3047
	 * @since 1.0.0
3048
	 *
3049
	 * @param int $instance ['slideshow'] Setup a slideshow for the slider to animate automatically.
3050
	 */
3051
	$slideshow = empty( $instance['slideshow'] ) ? 0 : apply_filters( 'widget_slideshow', $instance['slideshow'] );
3052 2
	/**
3053 2
	 * Filter widget's "animationLoop" value.
3054
	 *
3055 2
	 * @since 1.0.0
3056
	 *
3057
	 * @param int $instance ['animationLoop'] Gives the slider a seamless infinite loop.
3058
	 */
3059
	$animationLoop = empty( $instance['animationLoop'] ) ? 0 : apply_filters( 'widget_animationLoop', $instance['animationLoop'] );
3060
	/**
3061
	 * Filter widget's "directionNav" value.
3062 2
	 *
3063 2
	 * @since 1.0.0
3064 2
	 *
3065
	 * @param int $instance ['directionNav'] Enable previous/next arrow navigation?. Can be 1 or 0.
3066
	 */
3067
	$directionNav = empty( $instance['directionNav'] ) ? 0 : apply_filters( 'widget_directionNav', $instance['directionNav'] );
3068
	/**
3069
	 * Filter widget's "slideshowSpeed" value.
3070
	 *
3071
	 * @since 1.0.0
3072
	 *
3073
	 * @param int $instance ['slideshowSpeed'] Set the speed of the slideshow cycling, in milliseconds.
3074
	 */
3075
	$slideshowSpeed = empty( $instance['slideshowSpeed'] ) ? 5000 : apply_filters( 'widget_slideshowSpeed', $instance['slideshowSpeed'] );
3076
	/**
3077
	 * Filter widget's "animationSpeed" value.
3078
	 *
3079
	 * @since 1.0.0
3080
	 *
3081
	 * @param int $instance ['animationSpeed'] Set the speed of animations, in milliseconds.
3082
	 */
3083
	$animationSpeed = empty( $instance['animationSpeed'] ) ? 600 : apply_filters( 'widget_animationSpeed', $instance['animationSpeed'] );
3084
	/**
3085
	 * Filter widget's "animation" value.
3086
	 *
3087
	 * @since 1.0.0
3088
	 *
3089
	 * @param string $instance ['animation'] Controls the animation type, "fade" or "slide".
3090
	 */
3091
	$animation = empty( $instance['animation'] ) ? 'slide' : apply_filters( 'widget_animation', $instance['animation'] );
3092
	/**
3093
	 * Filter widget's "list_sort" type.
3094
	 *
3095
	 * @since 1.0.0
3096
	 *
3097
	 * @param string $instance ['list_sort'] Listing sort by type.
3098
	 */
3099
	$list_sort          = empty( $instance['list_sort'] ) ? 'latest' : apply_filters( 'widget_list_sort', $instance['list_sort'] );
3100
	$show_featured_only = ! empty( $instance['show_featured_only'] ) ? 1 : null;
3101
3102
	wp_enqueue_script( 'geodirectory-jquery-flexslider-js' );
3103
	?>
3104
	<script type="text/javascript">
3105
		jQuery(window).load(function () {
3106
			// chrome 53 introduced a bug, so we need to repaint the slider when shown.
3107
			jQuery('.geodir-slides').addClass('flexslider-fix-rtl');
3108
3109
			jQuery('#geodir_widget_carousel').flexslider({
3110
				animation: "slide",
3111
				selector: ".geodir-slides > li",
3112
				namespace: "geodir-",
3113 2
				controlNav: false,
3114 2
				directionNav: false,
3115
				animationLoop: false,
3116
				slideshow: false,
3117
				itemWidth: 75,
3118
				itemMargin: 5,
3119
				asNavFor: '#geodir_widget_slider',
3120
				rtl: <?php echo( is_rtl() ? 'true' : 'false' ); /* fix rtl issue */ ?>
3121
			});
3122
3123
			jQuery('#geodir_widget_slider').flexslider({
3124
				animation: "<?php echo $animation;?>",
3125
				selector: ".geodir-slides > li",
3126
				namespace: "geodir-",
3127
				controlNav: true,
3128
				animationLoop: <?php echo $animationLoop;?>,
3129
				slideshow: <?php echo $slideshow;?>,
3130
				slideshowSpeed: <?php echo $slideshowSpeed;?>,
3131
				animationSpeed: <?php echo $animationSpeed;?>,
3132 2
				directionNav: <?php echo $directionNav;?>,
3133
				maxItems: <?php echo $max_show;?>,
3134
				move: 1,
3135 2
				<?php if ( $slide_width ) {
3136
				echo "itemWidth: " . $slide_width . ",";
3137 2
			}?>
3138
				sync: "#geodir_widget_carousel",
3139
				start: function (slider) {
3140 2
3141
					// chrome 53 introduced a bug, so we need to repaint the slider when shown.
3142
					jQuery('.geodir-slides').removeClass('flexslider-fix-rtl');
3143
3144
					jQuery('.geodir-listing-flex-loader').hide();
3145
					jQuery('#geodir_widget_slider').css({'visibility': 'visible'});
3146
					jQuery('#geodir_widget_carousel').css({'visibility': 'visible'});
3147 2
				},
3148
				rtl: <?php echo( is_rtl() ? 'true' : 'false' ); /* fix rtl issue */ ?>
3149
			});
3150
		});
3151
	</script>
3152
	<?php
3153
	$query_args = array(
3154 2
		'posts_per_page' => $post_number,
3155
		'is_geodir_loop' => true,
3156
		'gd_location'    => $add_location_filter ? true : false,
3157
		'post_type'      => $post_type,
3158
		'order_by'       => $list_sort
3159
	);
3160
3161 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...
3162
		$query_args['show_featured_only'] = 1;
3163
	}
3164
3165
	if ( $category != 0 || $category != '' ) {
3166
		$category_taxonomy = geodir_get_taxonomies( $post_type );
3167
		$tax_query         = array(
3168 2
			'taxonomy' => $category_taxonomy[0],
3169
			'field'    => 'id',
3170
			'terms'    => $category
3171
		);
3172
3173
		$query_args['tax_query'] = array( $tax_query );
3174
	}
3175 2
3176
	// we want listings with featured image only
3177
	$query_args['featured_image_only'] = 1;
3178
3179
	if ( $post_type == 'gd_event' ) {
3180
		$query_args['gedir_event_listing_filter'] = 'upcoming';
3181
	}// show only upcoming events
3182 2
3183
	$widget_listings = geodir_get_widget_listings( $query_args );
3184
	if ( ! empty( $widget_listings ) || ( isset( $with_no_results ) && $with_no_results ) ) {
3185
		if ( $title ) {
3186
			echo $before_title . $title . $after_title;
3187
		}
3188
3189 2
		global $post;
3190 2
3191
		$current_post = $post;// keep current post info
3192
3193 2
		$widget_main_slides = '';
3194 1
		$nav_slides         = '';
3195 1
		$widget_slides      = 0;
3196
3197
		foreach ( $widget_listings as $widget_listing ) {
3198
			global $gd_widget_listing_type;
3199 1
			$post         = $widget_listing;
3200
			$widget_image = geodir_get_featured_image( $post->ID, 'thumbnail', get_option( 'geodir_listing_no_img' ) );
3201 2
3202 2
			if ( ! empty( $widget_image ) ) {
3203
				if ( $widget_image->height >= 200 ) {
3204 2
					$widget_spacer_height = 0;
3205 2
				} else {
3206
					$widget_spacer_height = ( ( 200 - $widget_image->height ) / 2 );
3207 2
				}
3208
3209
				$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" />';
3210
3211
				$title = '';
3212
				if ( $show_title ) {
3213
					$title_html     = '<div class="geodir-slider-title"><a href="' . get_permalink( $post->ID ) . '">' . get_the_title( $post->ID ) . '</a></div>';
3214 1
					$post_id        = $post->ID;
3215 1
					$post_permalink = get_permalink( $post->ID );
3216 1
					$post_title     = get_the_title( $post->ID );
3217
					/**
3218
					 * Filter the listing slider widget title.
3219 2
					 *
3220 2
					 * @since 1.6.1
3221 2
					 *
3222
					 * @param string $title_html     The html output of the title.
3223 2
					 * @param int $post_id           The post id.
3224 2
					 * @param string $post_permalink The post permalink url.
3225 2
					 * @param string $post_title     The post title text.
3226
					 */
3227
					$title = apply_filters( 'geodir_listing_slider_title', $title_html, $post_id, $post_permalink, $post_title );
3228
				}
3229
3230
				$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>';
3231
				$nav_slides .= '<li><img src="' . $widget_image->src . '" alt="' . $widget_image->title . '" title="' . $widget_image->title . '" style="max-height:48px;margin:0 auto;" /></li>';
3232
				$widget_slides ++;
3233
			}
3234
		}
3235
		?>
3236
		<div class="flex-container" style="min-height:200px;">
3237
			<div class="geodir-listing-flex-loader"><i class="fa fa-refresh fa-spin"></i></div>
3238
			<div id="geodir_widget_slider" class="geodir_flexslider">
3239
				<ul class="geodir-slides clearfix"><?php echo $widget_main_slides; ?></ul>
3240
			</div>
3241
			<?php if ( $widget_slides > 1 ) { ?>
3242
				<div id="geodir_widget_carousel" class="geodir_flexslider">
3243
					<ul class="geodir-slides clearfix"><?php echo $nav_slides; ?></ul>
3244
				</div>
3245
			<?php } ?>
3246
		</div>
3247
		<?php
3248
		$GLOBALS['post'] = $current_post;
3249
		setup_postdata( $current_post );
3250
	}
3251
	echo $after_widget;
3252 2
}
3253 2
3254 2
3255
/**
3256
 * Generates login box HTML.
3257
 *
3258
 * @since   1.0.0
3259 2
 * @package GeoDirectory
3260
 * @global object $current_user  Current user object.
3261
 *
3262 2
 * @param array|string $args     Display arguments including before_title, after_title, before_widget, and after_widget.
3263
 * @param array|string $instance The settings for the particular instance of the widget.
3264
 */
3265 2
function geodir_loginwidget_output( $args = '', $instance = '' ) {
3266
	//print_r($args);
3267
	//print_r($instance);
3268
	// prints the widget
3269
	extract( $args, EXTR_SKIP );
3270
3271
	/** This filter is documented in geodirectory_widgets.php */
3272
	$title = empty( $instance['title'] ) ? __( 'My Dashboard', 'geodirectory' ) : apply_filters( 'my_dashboard_widget_title', __( $instance['title'], 'geodirectory' ) );
3273
3274
	echo $before_widget;
3275
	echo $before_title . $title . $after_title;
3276
3277
	if ( is_user_logged_in() ) {
3278 2
		global $current_user;
3279
3280
		$author_link = get_author_posts_url( $current_user->data->ID );
3281
		$author_link = geodir_getlink( $author_link, array( 'geodir_dashbord' => 'true' ), false );
3282 2
3283
		echo '<ul class="geodir-loginbox-list">';
3284
		ob_start();
3285 2
		?>
3286 2
		<li><a class="signin"
3287 2
		       href="<?php echo wp_logout_url( home_url() ); ?>"><?php _e( 'Logout', 'geodirectory' ); ?></a></li>
3288 2
		<?php
3289
		$post_types                           = geodir_get_posttypes( 'object' );
3290 2
		$show_add_listing_post_types_main_nav = get_option( 'geodir_add_listing_link_user_dashboard' );
3291
		$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...
3292 2
3293 1
		if ( ! empty( $show_add_listing_post_types_main_nav ) ) {
3294 1
			$addlisting_links = '';
3295
			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...
3296 2
3297 1
				if ( in_array( $key, $show_add_listing_post_types_main_nav ) ) {
3298 1
3299
					if ( $add_link = geodir_get_addlisting_link( $key ) ) {
3300 2
3301
						$name = $postobj->labels->name;
3302
3303
						$selected = '';
3304 2
						if ( geodir_get_current_posttype() == $key && geodir_is_page( 'add-listing' ) ) {
3305
							$selected = 'selected="selected"';
3306
						}
3307
3308
						/**
3309 2
						 * Filter add listing link.
3310
						 *
3311
						 * @since 1.0.0
3312 2
						 *
3313
						 * @param string $add_link  Add listing link.
3314 2
						 * @param string $key       Add listing array key.
3315
						 * @param int $current_user ->ID Current user ID.
3316
						 */
3317
						$add_link = apply_filters( 'geodir_dashboard_link_add_listing', $add_link, $key, $current_user->ID );
3318
3319
						$addlisting_links .= '<option ' . $selected . ' value="' . $add_link . '">' . __( ucfirst( $name ), 'geodirectory' ) . '</option>';
3320
3321
					}
3322
				}
3323
3324
			}
3325
3326 View Code Duplication
			if ( $addlisting_links != '' ) { ?>
3327
3328
				<li><select id="geodir_add_listing" class="chosen_select" onchange="window.location.href=this.value"
3329
				            option-autoredirect="1" name="geodir_add_listing" option-ajaxchosen="false"
3330
				            data-placeholder="<?php echo esc_attr( __( 'Add Listing', 'geodirectory' ) ); ?>">
3331
						<option value="" disabled="disabled" selected="selected"
3332 2
						        style='display:none;'><?php echo esc_attr( __( 'Add Listing', 'geodirectory' ) ); ?></option>
3333
						<?php echo $addlisting_links; ?>
3334 2
					</select></li> <?php
3335
3336 2
			}
3337
3338
		}
3339
		// My Favourites in Dashboard
3340
		$show_favorite_link_user_dashboard = get_option( 'geodir_favorite_link_user_dashboard' );
3341
		$user_favourite                    = geodir_user_favourite_listing_count();
3342
3343
		if ( ! empty( $show_favorite_link_user_dashboard ) && ! empty( $user_favourite ) ) {
3344
			$favourite_links = '';
3345
3346
			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...
3347
				if ( in_array( $key, $show_favorite_link_user_dashboard ) && array_key_exists( $key, $user_favourite ) ) {
3348
					$name           = $postobj->labels->name;
3349
					$post_type_link = geodir_getlink( $author_link, array(
3350
						'stype' => $key,
3351
						'list'  => 'favourite'
3352
					), false );
3353
3354
					$selected = '';
3355
3356 View Code Duplication
					if ( isset( $_REQUEST['list'] ) && $_REQUEST['list'] == 'favourite' && isset( $_REQUEST['stype'] ) && $_REQUEST['stype'] == $key && isset( $_REQUEST['geodir_dashbord'] ) ) {
3357
						$selected = 'selected="selected"';
3358
					}
3359
					/**
3360 2
					 * Filter favorite listing link.
3361 2
					 *
3362 2
					 * @since 1.0.0
3363 2
					 *
3364 2
					 * @param string $post_type_link Favorite listing link.
3365
					 * @param string $key            Favorite listing array key.
3366
					 * @param int $current_user      ->ID Current user ID.
3367
					 */
3368
					$post_type_link = apply_filters( 'geodir_dashboard_link_favorite_listing', $post_type_link, $key, $current_user->ID );
3369
3370
					$favourite_links .= '<option ' . $selected . ' value="' . $post_type_link . '">' . __( ucfirst( $name ), 'geodirectory' ) . '</option>';
3371
				}
3372
			}
3373 2
3374 2 View Code Duplication
			if ( $favourite_links != '' ) {
3375
				?>
3376
				<li>
3377
					<select id="geodir_my_favourites" class="chosen_select" onchange="window.location.href=this.value"
3378
					        option-autoredirect="1" name="geodir_my_favourites" option-ajaxchosen="false"
3379
					        data-placeholder="<?php echo esc_attr( __( 'My Favorites', 'geodirectory' ) ); ?>">
3380
						<option value="" disabled="disabled" selected="selected"
3381
						        style='display:none;'><?php echo esc_attr( __( 'My Favorites', 'geodirectory' ) ); ?></option>
3382
						<?php echo $favourite_links; ?>
3383
					</select>
3384 2
				</li>
3385
				<?php
3386 2
			}
3387 2
		}
3388 2
3389 2
3390
		$show_listing_link_user_dashboard = get_option( 'geodir_listing_link_user_dashboard' );
3391
		$user_listing                     = geodir_user_post_listing_count();
3392
3393
		if ( ! empty( $show_listing_link_user_dashboard ) && ! empty( $user_listing ) ) {
3394
			$listing_links = '';
3395
3396 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...
3397
				if ( in_array( $key, $show_listing_link_user_dashboard ) && array_key_exists( $key, $user_listing ) ) {
3398 2
					$name         = $postobj->labels->name;
3399
					$listing_link = geodir_getlink( $author_link, array( 'stype' => $key ), false );
3400 2
3401 2
					$selected = '';
3402 2 View Code Duplication
					if ( ! isset( $_REQUEST['list'] ) && isset( $_REQUEST['geodir_dashbord'] ) && isset( $_REQUEST['stype'] ) && $_REQUEST['stype'] == $key ) {
3403 2
						$selected = 'selected="selected"';
3404 2
					}
3405
3406
					/**
3407
					 * Filter my listing link.
3408 2
					 *
3409 2
					 * @since 1.0.0
3410
					 *
3411 2
					 * @param string $listing_link My listing link.
3412
					 * @param string $key          My listing array key.
3413
					 * @param int $current_user    ->ID Current user ID.
3414
					 */
3415
					$listing_link = apply_filters( 'geodir_dashboard_link_my_listing', $listing_link, $key, $current_user->ID );
3416
3417
					$listing_links .= '<option ' . $selected . ' value="' . $listing_link . '">' . __( ucfirst( $name ), 'geodirectory' ) . '</option>';
3418
				}
3419
			}
3420
3421 View Code Duplication
			if ( $listing_links != '' ) {
3422
				?>
3423
				<li>
3424
					<select id="geodir_my_listings" class="chosen_select" onchange="window.location.href=this.value"
3425
					        option-autoredirect="1" name="geodir_my_listings" option-ajaxchosen="false"
3426
					        data-placeholder="<?php echo esc_attr( __( 'My Listings', 'geodirectory' ) ); ?>">
3427
						<option value="" disabled="disabled" selected="selected"
3428
						        style='display:none;'><?php echo esc_attr( __( 'My Listings', 'geodirectory' ) ); ?></option>
3429
						<?php echo $listing_links; ?>
3430
					</select>
3431
				</li>
3432 2
				<?php
3433
			}
3434 2
		}
3435
3436 2
		$dashboard_link = ob_get_clean();
3437
		/**
3438
		 * Filter dashboard links HTML.
3439
		 *
3440
		 * @since 1.0.0
3441
		 *
3442
		 * @param string $dashboard_link Dashboard links HTML.
3443
		 */
3444
		echo apply_filters( 'geodir_dashboard_links', $dashboard_link );
3445
		echo '</ul>';
3446
3447 2
		/**
3448
		 * Called after the loginwidget form for logged in users.
3449 2
		 *
3450
		 * @since 1.6.6
3451 2
		 */
3452
		do_action( 'geodir_after_loginwidget_form_logged_in' );
3453
3454
3455
	} else {
3456
		?>
3457
		<?php
3458
		/**
3459
		 * Filter signup form action link.
3460
		 *
3461
		 * @since 1.0.0
3462
		 */
3463
		?>
3464
		<form name="loginform" class="loginform1"
3465
		      action="<?php echo geodir_login_url(); ?>"
3466
		      method="post">
3467
			<div class="geodir_form_row"><input placeholder="<?php _e( 'Email', 'geodirectory' ); ?>" name="log"
3468
			                                    type="text" class="textfield user_login1"/> <span
3469
					class="user_loginInfo"></span></div>
3470
			<div class="geodir_form_row"><input placeholder="<?php _e( 'Password', 'geodirectory' ); ?>"
3471
			                                    name="pwd" type="password"
3472
			                                    class="textfield user_pass1 input-text"/><span
3473
					class="user_passInfo"></span></div>
3474
3475 8
			<input type="hidden" name="redirect_to" value="<?php echo htmlspecialchars( geodir_curPageURL() ); ?>"/>
3476 8
			<input type="hidden" name="testcookie" value="1"/>
3477
3478
				<?php do_action( 'login_form' ); ?>
3479
3480 8
			<div class="geodir_form_row clearfix"><input type="submit" name="submit"
3481
			                                             value="<?php echo SIGN_IN_BUTTON; ?>" class="b_signin"/>
3482 8
3483 7
				<p class="geodir-new-forgot-link">
3484 7
					<?php
3485 7
					/**
3486 7
					 * Filter signup page register form link.
3487 7
					 *
3488 7
					 * @since 1.0.0
3489
					 */
3490 7
					?>
3491 2
					<a href="<?php echo geodir_login_url( array( 'signup' => true ) ); ?>"
3492 2
					   class="goedir-newuser-link"><?php echo NEW_USER_TEXT; ?></a>
3493 2
3494 2
					<?php
3495 2
					/**
3496 2
					 * Filter signup page forgot password form link.
3497
					 *
3498 7
					 * @since 1.0.0
3499
					 */
3500 7
					?>
3501 7
					<a href="<?php echo geodir_login_url( array( 'forgot' => true ) ); ?>"
3502
					   class="goedir-forgot-link"><?php echo FORGOT_PW_TEXT; ?></a></p></div>
3503 7
		</form>
3504
		<?php
3505
		/**
3506
		 * Called after the loginwidget form for logged out users.
3507 7
		 *
3508
		 * @since 1.6.6
3509
		 */
3510
		do_action( 'geodir_after_loginwidget_form_logged_out' );
3511
	}
3512
3513
	echo $after_widget;
3514
}
3515
3516 7
3517
/**
3518
 * Generates popular postview HTML.
3519
 *
3520
 * @since   1.0.0
3521
 * @since   1.5.1 View all link fixed for location filter disabled.
3522
 * @package GeoDirectory
3523
 * @global object $post                    The current post object.
3524
 * @global string $gridview_columns_widget The girdview style of the listings for widget.
3525
 * @global bool $geodir_is_widget_listing  Is this a widget listing?. Default: false.
3526
 * @global object $gd_session              GeoDirectory Session object.
3527
 *
3528
 * @param array|string $args               Display arguments including before_title, after_title, before_widget, and
3529
 *                                         after_widget.
3530
 * @param array|string $instance           The settings for the particular instance of the widget.
3531
 */
3532
function geodir_popular_postview_output( $args = '', $instance = '' ) {
3533
	global $gd_session;
3534
3535
	// prints the widget
3536
	extract( $args, EXTR_SKIP );
3537
3538
	echo $before_widget;
3539
3540
	/** This filter is documented in geodirectory_widgets.php */
3541
	$title = empty( $instance['title'] ) ? geodir_ucwords( $instance['category_title'] ) : apply_filters( 'widget_title', __( $instance['title'], 'geodirectory' ) );
3542
	/**
3543
	 * Filter the widget post type.
3544 7
	 *
3545
	 * @since 1.0.0
3546 7
	 *
3547 7
	 * @param string $instance ['post_type'] Post type of listing.
3548
	 */
3549 1
	$post_type = empty( $instance['post_type'] ) ? 'gd_place' : apply_filters( 'widget_post_type', $instance['post_type'] );
3550
	/**
3551
	 * Filter the widget's term.
3552
	 *
3553
	 * @since 1.0.0
3554
	 *
3555
	 * @param string $instance ['category'] Filter by term. Can be any valid term.
3556
	 */
3557
	$category = empty( $instance['category'] ) ? '0' : apply_filters( 'widget_category', $instance['category'] );
3558
	/**
3559
	 * Filter the widget listings limit.
3560
	 *
3561
	 * @since 1.0.0
3562 8
	 *
3563
	 * @param string $instance ['post_number'] Number of listings to display.
3564
	 */
3565
	$post_number = empty( $instance['post_number'] ) ? '5' : apply_filters( 'widget_post_number', $instance['post_number'] );
3566 8
	/**
3567
	 * Filter widget's "layout" type.
3568
	 *
3569
	 * @since 1.0.0
3570 8
	 *
3571 8
	 * @param string $instance ['layout'] Widget layout type.
3572 8
	 */
3573 2
	$layout = empty( $instance['layout'] ) ? 'gridview_onehalf' : apply_filters( 'widget_layout', $instance['layout'] );
3574
	/**
3575
	 * Filter widget's "add_location_filter" value.
3576 6
	 *
3577
	 * @since 1.0.0
3578
	 *
3579
	 * @param string|bool $instance ['add_location_filter'] Do you want to add location filter? Can be 1 or 0.
3580 6
	 */
3581 6
	$add_location_filter = empty( $instance['add_location_filter'] ) ? '0' : apply_filters( 'widget_add_location_filter', $instance['add_location_filter'] );
3582 6
	/**
3583 6
	 * Filter widget's listing width.
3584
	 *
3585 6
	 * @since 1.0.0
3586 5
	 *
3587 5
	 * @param string $instance ['listing_width'] Listing width.
3588
	 */
3589 6
	$listing_width = empty( $instance['listing_width'] ) ? '' : apply_filters( 'widget_listing_width', $instance['listing_width'] );
3590
	/**
3591
	 * Filter widget's "list_sort" type.
3592
	 *
3593 4
	 * @since 1.0.0
3594 4
	 *
3595
	 * @param string $instance ['list_sort'] Listing sort by type.
3596
	 */
3597
	$list_sort             = empty( $instance['list_sort'] ) ? 'latest' : apply_filters( 'widget_list_sort', $instance['list_sort'] );
3598
	$use_viewing_post_type = ! empty( $instance['use_viewing_post_type'] ) ? true : false;
3599
3600
	// set post type to current viewing post type
3601 View Code Duplication
	if ( $use_viewing_post_type ) {
3602
		$current_post_type = geodir_get_current_posttype();
3603
		if ( $current_post_type != '' && $current_post_type != $post_type ) {
3604
			$post_type = $current_post_type;
3605
			$category  = array(); // old post type category will not work for current changed post type
3606
		}
3607
	}
3608
	// replace widget title dynamically
3609
	$posttype_plural_label   = __( get_post_type_plural_label( $post_type ), 'geodirectory' );
3610
	$posttype_singular_label = __( get_post_type_singular_label( $post_type ), 'geodirectory' );
3611
3612
	$title = str_replace( "%posttype_plural_label%", $posttype_plural_label, $title );
3613
	$title = str_replace( "%posttype_singular_label%", $posttype_singular_label, $title );
3614
3615 View Code Duplication
	if ( isset( $instance['character_count'] ) ) {
3616
		/**
3617
		 * Filter the widget's excerpt character count.
3618
		 *
3619
		 * @since 1.0.0
3620
		 *
3621
		 * @param int $instance ['character_count'] Excerpt character count.
3622
		 */
3623
		$character_count = apply_filters( 'widget_list_character_count', $instance['character_count'] );
3624
	} else {
3625
		$character_count = '';
3626
	}
3627
3628
	if ( empty( $title ) || $title == 'All' ) {
3629
		$title .= ' ' . __( get_post_type_plural_label( $post_type ), 'geodirectory' );
3630
	}
3631
3632 4
	$location_url = array();
3633 4
	$city         = get_query_var( 'gd_city' );
3634
	if ( ! empty( $city ) ) {
3635
		$country = get_query_var( 'gd_country' );
3636
		$region  = get_query_var( 'gd_region' );
3637
3638
		$geodir_show_location_url = get_option( 'geodir_show_location_url' );
3639
3640
		if ( $geodir_show_location_url == 'all' ) {
3641
			if ( $country != '' ) {
3642
				$location_url[] = $country;
3643
			}
3644
3645
			if ( $region != '' ) {
3646 1
				$location_url[] = $region;
3647 1
			}
3648
		} else if ( $geodir_show_location_url == 'country_city' ) {
3649
			if ( $country != '' ) {
3650
				$location_url[] = $country;
3651
			}
3652
		} else if ( $geodir_show_location_url == 'region_city' ) {
3653
			if ( $region != '' ) {
3654
				$location_url[] = $region;
3655
			}
3656
		}
3657
3658
		$location_url[] = $city;
3659
	}
3660
3661 5
	$location_url  = implode( '/', $location_url );
3662 4
	$skip_location = false;
3663
	if ( ! $add_location_filter && $gd_session->get( 'gd_multi_location' ) ) {
3664 1
		$skip_location = true;
3665 1
		$gd_session->un_set( 'gd_multi_location' );
3666
	}
3667
3668
	if ( get_option( 'permalink_structure' ) ) {
3669
		$viewall_url = get_post_type_archive_link( $post_type );
3670
	} else {
3671
		$viewall_url = get_post_type_archive_link( $post_type );
3672
	}
3673
3674
	if ( ! empty( $category ) && $category[0] != '0' ) {
3675
		global $geodir_add_location_url;
3676
3677
		$geodir_add_location_url = '0';
3678
3679
		if ( $add_location_filter != '0' ) {
3680
			$geodir_add_location_url = '1';
3681
		}
3682
3683
		$viewall_url = get_term_link( (int) $category[0], $post_type . 'category' );
3684
3685
		$geodir_add_location_url = null;
3686
	}
3687
	if ( $skip_location ) {
3688
		$gd_session->set( 'gd_multi_location', 1 );
3689
	}
3690
3691
	if ( is_wp_error( $viewall_url ) ) {
3692
		$viewall_url = '';
3693
	}
3694
3695
	$query_args = array(
3696
		'posts_per_page' => $post_number,
3697 4
		'is_geodir_loop' => true,
3698
		'gd_location'    => $add_location_filter ? true : false,
3699
		'post_type'      => $post_type,
3700
		'order_by'       => $list_sort
3701
	);
3702
3703
	if ( $character_count ) {
3704
		$query_args['excerpt_length'] = $character_count;
3705
	}
3706
3707
	if ( ! empty( $instance['show_featured_only'] ) ) {
3708
		$query_args['show_featured_only'] = 1;
3709
	}
3710
3711 1
	if ( ! empty( $instance['show_special_only'] ) ) {
3712
		$query_args['show_special_only'] = 1;
3713
	}
3714
3715 View Code Duplication
	if ( ! empty( $instance['with_pics_only'] ) ) {
3716
		$query_args['with_pics_only']      = 0;
3717
		$query_args['featured_image_only'] = 1;
3718
	}
3719
3720
	if ( ! empty( $instance['with_videos_only'] ) ) {
3721
		$query_args['with_videos_only'] = 1;
3722
	}
3723
	$with_no_results = ! empty( $instance['without_no_results'] ) ? false : true;
3724
3725 View Code Duplication
	if ( ! empty( $category ) && $category[0] != '0' ) {
3726
		$category_taxonomy = geodir_get_taxonomies( $post_type );
3727
3728
		######### WPML #########
3729
		if ( function_exists( 'icl_object_id' ) ) {
3730
			$category = gd_lang_object_ids( $category, $category_taxonomy[0] );
3731
		}
3732
		######### WPML #########
3733
3734
		$tax_query = array(
3735
			'taxonomy' => $category_taxonomy[0],
3736
			'field'    => 'id',
3737
			'terms'    => $category
3738
		);
3739
3740
		$query_args['tax_query'] = array( $tax_query );
3741
	}
3742
3743
	global $gridview_columns_widget, $geodir_is_widget_listing;
3744
3745
	$widget_listings = geodir_get_widget_listings( $query_args );
3746
3747
	if ( ! empty( $widget_listings ) || $with_no_results ) {
3748
		?>
3749
		<div class="geodir_locations geodir_location_listing">
3750
3751
			<?php
3752
			/**
3753
			 * Called before the div containing the title and view all link in popular post view widget.
3754
			 *
3755
			 * @since 1.0.0
3756
			 */
3757
			do_action( 'geodir_before_view_all_link_in_widget' ); ?>
3758
			<div class="geodir_list_heading clearfix">
3759
				<?php echo $before_title . $title . $after_title; ?>
3760
				<a href="<?php echo $viewall_url; ?>"
3761
				   class="geodir-viewall"><?php _e( 'View all', 'geodirectory' ); ?></a>
3762
			</div>
3763
			<?php
3764
			/**
3765
			 * Called after the div containing the title and view all link in popular post view widget.
3766
			 *
3767
			 * @since 1.0.0
3768
			 */
3769
			do_action( 'geodir_after_view_all_link_in_widget' ); ?>
3770
			<?php
3771 1 View Code Duplication
			if ( strstr( $layout, 'gridview' ) ) {
3772 1
				$listing_view_exp        = explode( '_', $layout );
3773 1
				$gridview_columns_widget = $layout;
3774 1
				$layout                  = $listing_view_exp[0];
3775 1
			} else {
3776 1
				$gridview_columns_widget = '';
3777
			}
3778 1
3779
			/**
3780 1
			 * Filter the widget listing listview template path.
3781 1
			 *
3782
			 * @since 1.0.0
3783 1
			 */
3784 1
			$template = apply_filters( "geodir_template_part-widget-listing-listview", geodir_locate_template( 'widget-listing-listview' ) );
3785
			if ( ! isset( $character_count ) ) {
3786 1
				/**
3787
				 * Filter the widget's excerpt character count.
3788
				 *
3789
				 * @since 1.0.0
3790
				 *
3791
				 * @param int $instance ['character_count'] Excerpt character count.
3792
				 */
3793
				$character_count = $character_count == '' ? 50 : apply_filters( 'widget_character_count', $character_count );
3794
			}
3795 1
3796
			global $post, $map_jason, $map_canvas_arr;
3797 1
3798
			$current_post             = $post;
3799 1
			$current_map_jason        = $map_jason;
3800 1
			$current_map_canvas_arr   = $map_canvas_arr;
3801 1
			$geodir_is_widget_listing = true;
3802 1
3803 1
			/**
3804 1
			 * Includes related listing listview template.
3805 1
			 *
3806 1
			 * @since 1.0.0
3807 1
			 */
3808 1
			include( $template );
3809
3810 1
			$geodir_is_widget_listing = false;
3811 1
3812 1
			$GLOBALS['post'] = $current_post;
3813
			if ( ! empty( $current_post ) ) {
3814 1
				setup_postdata( $current_post );
3815
			}
3816 1
			$map_jason      = $current_map_jason;
3817 1
			$map_canvas_arr = $current_map_canvas_arr;
3818 1
			?>
3819 1
		</div>
3820 1
		<?php
3821 1
	}
3822 1
	echo $after_widget;
3823 1
3824
}
3825 1
3826
3827 1
/*-----------------------------------------------------------------------------------*/
3828 1
/*  Review count functions
3829
/*-----------------------------------------------------------------------------------*/
3830
/**
3831
 * Count reviews by term ID.
3832
 *
3833
 * @since   1.0.0
3834
 * @since   1.5.1 Added filter to change SQL.
3835
 * @package GeoDirectory
3836
 * @global object $wpdb          WordPress Database object.
3837
 * @global string $plugin_prefix Geodirectory plugin table prefix.
3838
 *
3839
 * @param int $term_id           The term ID.
3840
 * @param int $taxonomy          The taxonomy Id.
3841
 * @param string $post_type      The post type.
3842
 *
3843
 * @return int Reviews count.
3844
 */
3845
function geodir_count_reviews_by_term_id( $term_id, $taxonomy, $post_type ) {
3846 1
	global $wpdb, $plugin_prefix;
3847
3848
	$detail_table = $plugin_prefix . $post_type . '_detail';
3849 1
3850 1
	$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 . ")";
3851
3852 1
	/**
3853 1
	 * Filter count review sql query.
3854 1
	 *
3855 1
	 * @since 1.5.1
3856
	 *
3857 1
	 * @param string $sql       Database sql query..
3858 1
	 * @param int $term_id      The term ID.
3859
	 * @param int $taxonomy     The taxonomy Id.
3860 1
	 * @param string $post_type The post type.
3861 1
	 */
3862
	$sql = apply_filters( 'geodir_count_reviews_by_term_sql', $sql, $term_id, $taxonomy, $post_type );
3863 1
3864 1
	$count = $wpdb->get_var( $sql );
3865
3866 1
	return $count;
3867 1
}
3868
3869 1
/**
3870 1
 * Count reviews by terms.
3871
 *
3872 1
 * @since   1.0.0
3873 1
 * @since   1.6.1 Fixed add listing page load time.
3874
 * @package GeoDirectory
3875 1
 *
3876 1
 * @global object $gd_session GeoDirectory Session object.
3877 1
 *
3878 1
 * @param bool $force_update  Force update option value?. Default.false.
3879 1
 *
3880 1
 * @return array Term array data.
3881 1
 */
3882 1
function geodir_count_reviews_by_terms( $force_update = false, $post_ID = 0 ) {
3883 1
	/**
3884 1
	 * Filter review count option data.
3885
	 *
3886
	 * @since 1.0.0
3887 1
	 * @since 1.6.1 Added $post_ID param.
3888 1
	 *
3889
	 * @param bool $force_update Force update option value?. Default.false.
3890 1
	 * @param int $post_ID       The post id to update if any.
3891
	 */
3892
	$option_data = apply_filters( 'geodir_count_reviews_by_terms_before', '', $force_update, $post_ID );
3893
	if ( ! empty( $option_data ) ) {
3894
		return $option_data;
3895
	}
3896
3897
	$option_data = get_option( 'geodir_global_review_count' );
3898
3899
	if ( ! $option_data || $force_update ) {
3900
		if ( (int) $post_ID > 0 ) { // Update reviews count for specific post categories only.
3901
			global $gd_session;
3902
			$term_array = (array) $option_data;
3903
			$post_type  = get_post_type( $post_ID );
3904 1
			$taxonomy   = $post_type . 'category';
3905
			$terms      = wp_get_object_terms( $post_ID, $taxonomy, array( 'fields' => 'ids' ) );
3906
3907 View Code Duplication
			if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
3908
				foreach ( $terms as $term_id ) {
3909
					$count                  = geodir_count_reviews_by_term_id( $term_id, $taxonomy, $post_type );
3910
					$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...
3911
					$term_array[ $term_id ] = $count;
3912
				}
3913
			}
3914
3915
			$session_listing = $gd_session->get( 'listing' );
3916
3917
			$terms = array();
3918
			if ( isset( $_POST['post_category'][ $taxonomy ] ) ) {
3919
				$terms = (array) $_POST['post_category'][ $taxonomy ];
3920
			} else if ( ! empty( $session_listing ) && isset( $session_listing['post_category'][ $taxonomy ] ) ) {
3921
				$terms = (array) $session_listing['post_category'][ $taxonomy ];
3922 1
			}
3923
3924 1 View Code Duplication
			if ( ! empty( $terms ) ) {
3925
				foreach ( $terms as $term_id ) {
3926
					if ( $term_id > 0 ) {
3927
						$count                  = geodir_count_reviews_by_term_id( $term_id, $taxonomy, $post_type );
3928
						$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...
3929
						$term_array[ $term_id ] = $count;
3930
					}
3931
				}
3932
			}
3933
		} else { // Update reviews count for all post categories.
3934
			$term_array = array();
3935
			$post_types = geodir_get_posttypes();
3936
			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...
3937
3938
				$taxonomy = geodir_get_taxonomies( $post_type );
3939
				$taxonomy = $taxonomy[0];
3940
3941
				$args = array(
3942
					'hide_empty' => false
3943
				);
3944
3945
				$terms = get_terms( $taxonomy, $args );
3946
3947
				foreach ( $terms as $term ) {
3948
					$count    = geodir_count_reviews_by_term_id( $term->term_id, $taxonomy, $post_type );
3949
					$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...
3950
					/*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...
3951
                        foreach ( $children as $child_id ) {
3952
                            $child_count = geodir_count_reviews_by_term_id($child_id, $taxonomy, $post_type);
3953
                            $count = $count + $child_count;
3954
                        }
3955
                    }*/
3956
					$term_array[ $term->term_id ] = $count;
3957
				}
3958
			}
3959
		}
3960
3961
		update_option( 'geodir_global_review_count', $term_array );
3962
		//clear cache
3963
		wp_cache_delete( 'geodir_global_review_count' );
3964
3965
		return $term_array;
3966
	} else {
3967
		return $option_data;
3968
	}
3969
}
3970
3971
/**
3972
 * Force update review count.
3973
 *
3974
 * @since   1.0.0
3975
 * @since   1.6.1 Fixed add listing page load time.
3976
 * @package GeoDirectory
3977
 * @return bool
3978
 */
3979
function geodir_term_review_count_force_update( $new_status, $old_status = '', $post = '' ) {
3980
	if ( isset( $_REQUEST['action'] ) && $_REQUEST['action'] == 'geodir_import_export' ) {
3981
		return; // do not run if importing listings
3982
	}
3983
3984
	if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
3985
		return;
3986
	}
3987
3988
	$post_ID = 0;
3989
	if ( ! empty( $post ) ) {
3990
		if ( isset( $post->post_type ) && strpos( $post->post_type, 'gd_' ) !== 0 ) {
3991
			return;
3992
		}
3993
3994
		if ( $new_status == 'auto-draft' && $old_status == 'new' ) {
3995
			return;
3996
		}
3997
3998
		if ( ! empty( $post->ID ) ) {
3999
			$post_ID = $post->ID;
4000
		}
4001
	}
4002
4003
	if ( $new_status != $old_status ) {
4004
		geodir_count_reviews_by_terms( true, $post_ID );
4005
	}
4006
4007
	return true;
4008
}
4009
4010
function geodir_term_review_count_force_update_single_post( $post_id ) {
4011
	geodir_count_reviews_by_terms( true, $post_id );
4012 9
}
4013
4014 9
/*-----------------------------------------------------------------------------------*/
4015
/*  Term count functions
4016 9
/*-----------------------------------------------------------------------------------*/
4017 2
/**
4018 2
 * Count posts by term.
4019 2
 *
4020
 * @since   1.0.0
4021
 * @package GeoDirectory
4022
 *
4023
 * @param array $data  Count data array.
4024 2
 * @param object $term The term object.
4025
 *
4026 9
 * @return int Post count.
4027
 */
4028
function geodir_count_posts_by_term( $data, $term ) {
4029
4030
	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...
4031
		if ( isset( $data[ $term->term_id ] ) ) {
4032
			return $data[ $term->term_id ];
4033
		} else {
4034
			return 0;
4035
		}
4036
	} else {
4037
		return $term->count;
4038
	}
4039
}
4040
4041
/**
4042
 * Sort terms object by post count.
4043
 *
4044
 * @since   1.0.0
4045
 * @package GeoDirectory
4046
 * param array $terms An array of term objects.
4047
 * @return array Sorted terms array.
4048
 */
4049
function geodir_sort_terms_by_count( $terms ) {
4050
	usort( $terms, "geodir_sort_by_count_obj" );
4051
4052
	return $terms;
4053
}
4054
4055
/**
4056
 * Sort terms object by review count.
4057
 *
4058
 * @since   1.0.0
4059
 * @package GeoDirectory
4060
 *
4061
 * @param array $terms An array of term objects.
4062
 *
4063
 * @return array Sorted terms array.
4064
 */
4065
function geodir_sort_terms_by_review_count( $terms ) {
4066
	usort( $terms, "geodir_sort_by_review_count_obj" );
4067
4068
	return $terms;
4069
}
4070
4071
/**
4072
 * Sort terms either by post count or review count.
4073
 *
4074
 * @since   1.0.0
4075
 * @package GeoDirectory
4076
 *
4077
 * @param array $terms An array of term objects.
4078
 * @param string $sort The sort type. Can be count (Post Count) or review_count. Default. count.
4079
 *
4080
 * @return array Sorted terms array.
4081
 */
4082
function geodir_sort_terms( $terms, $sort = 'count' ) {
4083
	if ( $sort == 'count' ) {
4084
		return geodir_sort_terms_by_count( $terms );
4085
	}
4086
	if ( $sort == 'review_count' ) {
4087
		return geodir_sort_terms_by_review_count( $terms );
4088
	}
4089
}
4090
4091
/*-----------------------------------------------------------------------------------*/
4092
/*  Utils
4093
/*-----------------------------------------------------------------------------------*/
4094
/**
4095
 * Compares post count from array for sorting.
4096
 *
4097
 * @since   1.0.0
4098
 * @package GeoDirectory
4099
 *
4100
 * @param array $a The left side array to compare.
4101
 * @param array $b The right side array to compare.
4102
 *
4103
 * @return bool
4104
 */
4105
function geodir_sort_by_count( $a, $b ) {
4106
	return $a['count'] < $b['count'];
4107
}
4108
4109
/**
4110
 * Compares post count from object for sorting.
4111
 *
4112
 * @since   1.0.0
4113
 * @package GeoDirectory
4114
 *
4115
 * @param object $a The left side object to compare.
4116
 * @param object $b The right side object to compare.
4117
 *
4118
 * @return bool
4119
 */
4120
function geodir_sort_by_count_obj( $a, $b ) {
4121
	return $a->count < $b->count;
4122
}
4123
4124
/**
4125
 * Compares review count from object for sorting.
4126
 *
4127
 * @since   1.0.0
4128
 * @package GeoDirectory
4129
 *
4130
 * @param object $a The left side object to compare.
4131
 * @param object $b The right side object to compare.
4132
 *
4133
 * @return bool
4134
 */
4135
function geodir_sort_by_review_count_obj( $a, $b ) {
4136
	return $a->review_count < $b->review_count;
4137
}
4138
4139
/**
4140
 * Load geodirectory plugin textdomain.
4141
 *
4142
 * @since   1.4.2
4143
 * @package GeoDirectory
4144
 */
4145
function geodir_load_textdomain() {
4146
	/**
4147
	 * Filter the plugin locale.
4148
	 *
4149
	 * @since   1.4.2
4150
	 * @package GeoDirectory
4151
	 */
4152
	$locale = apply_filters( 'plugin_locale', get_locale(), 'geodirectory' );
4153
4154
	load_textdomain( 'geodirectory', WP_LANG_DIR . '/' . 'geodirectory' . '/' . 'geodirectory' . '-' . $locale . '.mo' );
4155
	load_plugin_textdomain( 'geodirectory', false, plugin_basename( dirname( dirname( __FILE__ ) ) ) . '/geodirectory-languages' );
4156
4157
	/**
4158
	 * Define language constants.
4159
	 *
4160
	 * @since 1.0.0
4161
	 */
4162
	require_once( geodir_plugin_path() . '/language.php' );
4163
4164
	$language_file = geodir_plugin_path() . '/db-language.php';
4165
4166
	// Load language string file if not created yet
4167
	if ( ! file_exists( $language_file ) ) {
4168
		geodirectory_load_db_language();
4169
	}
4170
4171
	if ( file_exists( $language_file ) ) {
4172
		/**
4173
		 * Language strings from database.
4174
		 *
4175
		 * @since 1.4.2
4176
		 */
4177
		try {
4178
			require_once( $language_file );
4179
		} catch ( Exception $e ) {
4180
			error_log( 'Language Error: ' . $e->getMessage() );
4181
		}
4182
	}
4183
}
4184
4185
/**
4186
 * Load language strings in to file to translate via po editor
4187
 *
4188
 * @since   1.4.2
4189
 * @package GeoDirectory
4190
 *
4191
 * @global null|object $wp_filesystem WP_Filesystem object.
4192
 *
4193
 * @return bool True if file created otherwise false
4194
 */
4195
function geodirectory_load_db_language() {
4196
	global $wp_filesystem;
4197
	if ( empty( $wp_filesystem ) ) {
4198
		require_once( ABSPATH . '/wp-admin/includes/file.php' );
4199
		WP_Filesystem();
4200
		global $wp_filesystem;
4201
	}
4202
4203
	$language_file = geodir_plugin_path() . '/db-language.php';
4204
4205
	if ( is_file( $language_file ) && ! is_writable( $language_file ) ) {
4206
		return false;
4207 7
	} // Not possible to create.
4208
4209 7
	if ( ! is_file( $language_file ) && ! is_writable( dirname( $language_file ) ) ) {
4210 3
		return false;
4211
	} // Not possible to create.
4212
4213 5
	$contents_strings = array();
4214
4215
	/**
4216
	 * Filter the language string from database to translate via po editor
4217
	 *
4218
	 * @since 1.4.2
4219
	 * @since 1.6.16 Register the string for WPML translation.
4220
	 *
4221 2
	 * @param array $contents_strings Array of strings.
4222 2
	 */
4223
	$contents_strings = apply_filters( 'geodir_load_db_language', $contents_strings );
4224 5
4225 3
	$contents_strings = array_unique( $contents_strings );
4226 3
4227
	$contents_head   = array();
4228 5
	$contents_head[] = "<?php";
4229 5
	$contents_head[] = "/**";
4230 5
	$contents_head[] = " * Translate language string stored in database. Ex: Custom Fields";
4231
	$contents_head[] = " *";
4232 5
	$contents_head[] = " * @package GeoDirectory";
4233
	$contents_head[] = " * @since 1.4.2";
4234
	$contents_head[] = " */";
4235
	$contents_head[] = "";
4236 5
	$contents_head[] = "// Language keys";
4237
4238
	$contents_foot   = array();
4239
	$contents_foot[] = "";
4240 5
	$contents_foot[] = "";
4241 2
4242 5
	$contents = implode( PHP_EOL, $contents_head );
4243 1
4244 1
	if ( ! empty( $contents_strings ) ) {
4245 4
		foreach ( $contents_strings as $string ) {
4246 1
			if ( is_scalar( $string ) && $string != '' ) {
4247 1
				$string = str_replace( "'", "\'", $string );
4248 2
				geodir_wpml_register_string( $string );
4249
				$contents .= PHP_EOL . "__('" . $string . "', 'geodirectory');";
4250
			}
4251 5
		}
4252 1
	}
4253 1
4254 1
	$contents .= implode( PHP_EOL, $contents_foot );
4255 1
4256
	if ( $wp_filesystem->put_contents( $language_file, $contents, FS_CHMOD_FILE ) ) {
4257 1
		return false;
4258 1
	} // Failure; could not write file.
4259
4260 5
	return true;
4261 2
}
4262 2
4263 2
/**
4264 2
 * Get the custom fields texts for translation
4265
 *
4266 2
 * @since   1.4.2
4267 2
 * @since   1.5.7 Option values are translatable via db translation.
4268
 * @since   1.6.11 Some new labels translation for advance custom fields.
4269 5
 * @package GeoDirectory
4270
 *
4271
 * @global object $wpdb             WordPress database abstraction object.
4272
 *
4273
 * @param  array $translation_texts Array of text strings.
4274
 *
4275
 * @return array Translation texts.
4276
 */
4277
function geodir_load_custom_field_translation( $translation_texts = array() ) {
4278
	global $wpdb;
4279
4280
	// Custom fields table
4281
	$sql  = "SELECT admin_title, admin_desc, site_title, clabels, required_msg, default_value, option_values, validation_msg FROM " . GEODIR_CUSTOM_FIELDS_TABLE;
4282
	$rows = $wpdb->get_results( $sql );
4283
4284
	if ( ! empty( $rows ) ) {
4285
		foreach ( $rows as $row ) {
4286 5
			if ( ! empty( $row->admin_title ) ) {
4287
				$translation_texts[] = stripslashes_deep( $row->admin_title );
4288
			}
4289
4290
			if ( ! empty( $row->admin_desc ) ) {
4291
				$translation_texts[] = stripslashes_deep( $row->admin_desc );
4292
			}
4293
4294
			if ( ! empty( $row->site_title ) ) {
4295
				$translation_texts[] = stripslashes_deep( $row->site_title );
4296
			}
4297
4298
			if ( ! empty( $row->clabels ) ) {
4299
				$translation_texts[] = stripslashes_deep( $row->clabels );
4300
			}
4301
4302
			if ( ! empty( $row->required_msg ) ) {
4303 5
				$translation_texts[] = stripslashes_deep( $row->required_msg );
4304
			}
4305
            
4306
			if ( ! empty( $row->validation_msg ) ) {
4307
				$translation_texts[] = stripslashes_deep( $row->validation_msg );
4308 5
			}
4309 5
4310 5
			if ( ! empty( $row->default_value ) ) {
4311
				$translation_texts[] = stripslashes_deep( $row->default_value );
4312
			}
4313 5
4314 5
			if ( ! empty( $row->option_values ) ) {
4315
				$option_values = geodir_string_values_to_options( stripslashes_deep( $row->option_values ) );
4316
4317
				if ( ! empty( $option_values ) ) {
4318
					foreach ( $option_values as $option_value ) {
4319
						if ( ! empty( $option_value['label'] ) ) {
4320
							$translation_texts[] = $option_value['label'];
4321
						}
4322
					}
4323
				}
4324
			}
4325 5
		}
4326 5
	}
4327 5
4328
	// Custom sorting fields table
4329
	$sql  = "SELECT site_title, asc_title, desc_title FROM " . GEODIR_CUSTOM_SORT_FIELDS_TABLE;
4330
	$rows = $wpdb->get_results( $sql );
4331
4332 5
	if ( ! empty( $rows ) ) {
4333 5
		foreach ( $rows as $row ) {
4334 5
			if ( ! empty( $row->site_title ) ) {
4335 5
				$translation_texts[] = stripslashes_deep( $row->site_title );
4336
			}
4337 5
4338
			if ( ! empty( $row->asc_title ) ) {
4339 5
				$translation_texts[] = stripslashes_deep( $row->asc_title );
4340
			}
4341
4342
			if ( ! empty( $row->desc_title ) ) {
4343
				$translation_texts[] = stripslashes_deep( $row->desc_title );
4344
			}
4345 5
		}
4346
	}
4347
4348
	// Advance search filter fields table
4349
	if ( defined( 'GEODIR_ADVANCE_SEARCH_TABLE' ) ) {
4350
		$sql  = "SELECT field_site_name, front_search_title, first_search_text, last_search_text, field_desc FROM " . GEODIR_ADVANCE_SEARCH_TABLE;
4351
		$rows = $wpdb->get_results( $sql );
4352
4353
		if ( ! empty( $rows ) ) {
4354
			foreach ( $rows as $row ) {
4355 5
				if ( ! empty( $row->field_site_name ) ) {
4356
					$translation_texts[] = stripslashes_deep( $row->field_site_name );
4357
				}
4358
4359
				if ( ! empty( $row->front_search_title ) ) {
4360
					$translation_texts[] = stripslashes_deep( $row->front_search_title );
4361
				}
4362
4363
				if ( ! empty( $row->first_search_text ) ) {
4364
					$translation_texts[] = stripslashes_deep( $row->first_search_text );
4365 5
				}
4366
4367
				if ( ! empty( $row->last_search_text ) ) {
4368
					$translation_texts[] = stripslashes_deep( $row->last_search_text );
4369
				}
4370
4371
				if ( ! empty( $row->field_desc ) ) {
4372
					$translation_texts[] = stripslashes_deep( $row->field_desc );
4373
				}
4374
			}
4375
		}
4376
	}
4377 5
4378
	$translation_texts = ! empty( $translation_texts ) ? array_unique( $translation_texts ) : $translation_texts;
4379
4380
	return $translation_texts;
4381
}
4382
4383
/**
4384
 * Retrieve list of mime types and file extensions allowed for file upload.
4385
 *
4386
 * @since   1.4.7
4387
 * @package GeoDirectory
4388
 *
4389
 * @return array Array of mime types.
4390
 */
4391
function geodir_allowed_mime_types() {
4392
	/**
4393
	 * Filter the list of mime types and file extensions allowed for file upload.
4394
	 *
4395
	 * @since   1.4.7
4396
	 * @package GeoDirectory
4397
	 *
4398
	 * @param array $geodir_allowed_mime_types and file extensions.
4399
	 */
4400
	return apply_filters( 'geodir_allowed_mime_types', array(
4401
			'Image'       => array( // Image formats.
4402 5
				'jpg'  => 'image/jpeg',
4403 1
				'jpe'  => 'image/jpeg',
4404 1
				'jpeg' => 'image/jpeg',
4405
				'gif'  => 'image/gif',
4406
				'png'  => 'image/png',
4407 1
				'bmp'  => 'image/bmp',
4408 1
				'ico'  => 'image/x-icon',
4409
			),
4410 5
			'Video'       => array( // Video formats.
4411 1
				'asf'  => 'video/x-ms-asf',
4412 1
				'avi'  => 'video/avi',
4413
				'flv'  => 'video/x-flv',
4414
				'mkv'  => 'video/x-matroska',
4415 1
				'mp4'  => 'video/mp4',
4416 1
				'mpeg' => 'video/mpeg',
4417
				'mpg'  => 'video/mpeg',
4418 5
				'wmv'  => 'video/x-ms-wmv',
4419 1
				'3gp'  => 'video/3gpp',
4420
			),
4421
			'Audio'       => array( // Audio formats.
4422 1
				'ogg' => 'audio/ogg',
4423 1
				'mp3' => 'audio/mpeg',
4424
				'wav' => 'audio/wav',
4425 5
				'wma' => 'audio/x-ms-wma',
4426
			),
4427
			'Text'        => array( // Text formats.
4428
				'css'  => 'text/css',
4429
				'csv'  => 'text/csv',
4430 5
				'htm'  => 'text/html',
4431 1
				'html' => 'text/html',
4432 1
				'txt'  => 'text/plain',
4433
				'rtx'  => 'text/richtext',
4434
				'vtt'  => 'text/vtt',
4435 1
			),
4436 1
			'Application' => array( // Application formats.
4437
				'doc'  => 'application/msword',
4438 5
				'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
4439 1
				'exe'  => 'application/x-msdownload',
4440 1
				'js'   => 'application/javascript',
4441
				'odt'  => 'application/vnd.oasis.opendocument.text',
4442
				'pdf'  => 'application/pdf',
4443 1
				'pot'  => 'application/vnd.ms-powerpoint',
4444 1
				'ppt'  => 'application/vnd.ms-powerpoint',
4445
				'pptx' => 'application/vnd.ms-powerpoint',
4446 5
				'psd'  => 'application/octet-stream',
4447 1
				'rar'  => 'application/rar',
4448 1
				'rtf'  => 'application/rtf',
4449 1
				'swf'  => 'application/x-shockwave-flash',
4450
				'tar'  => 'application/x-tar',
4451 1
				'xls'  => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
4452 1
				'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
4453 1
				'zip'  => 'application/zip',
4454 1
			)
4455 1
		)
4456 1
	);
4457
}
4458 5
4459
/**
4460
 * Retrieve list of user display name for user id.
4461
 *
4462 5
 * @since 1.5.0
4463
 *
4464
 * @param  string $user_id The WP user id.
4465
 *
4466 5
 * @return string User display name.
4467
 */
4468
function geodir_get_client_name( $user_id ) {
4469
	$client_name = '';
4470
4471 5
	$user_data = get_userdata( $user_id );
4472 5
4473 5
	if ( ! empty( $user_data ) ) {
4474
		if ( isset( $user_data->display_name ) && trim( $user_data->display_name ) != '' ) {
4475
			$client_name = trim( $user_data->display_name );
4476
		} else if ( isset( $user_data->user_nicename ) && trim( $user_data->user_nicename ) != '' ) {
4477
			$client_name = trim( $user_data->user_nicename );
4478
		} else {
4479
			$client_name = trim( $user_data->user_login );
4480
		}
4481
	}
4482
4483
	return $client_name;
4484
}
4485
4486 5
4487
add_filter( 'wpseo_replacements', 'geodir_wpseo_replacements', 10, 1 );
4488
/*
4489
 * Add location variables to wpseo replacements.
4490
 *
4491
 * @since 1.5.4
4492
 */
4493
function geodir_wpseo_replacements( $vars ) {
4494
4495
	global $wp;
4496
	$title = '';
4497
	// location variables
4498
	$gd_post_type   = geodir_get_current_posttype();
4499 1
	$location_array = geodir_get_current_location_terms( 'query_vars', $gd_post_type );
4500
	/**
4501 1
	 * Filter the title variables location variables array
4502 1
	 *
4503 1
	 * @since   1.5.5
4504 1
	 * @package GeoDirectory
4505 1
	 *
4506
	 * @param array $location_array The array of location variables.
4507 1
	 * @param array $vars           The page title variables.
4508 1
	 */
4509 1
	$location_array  = apply_filters( 'geodir_filter_title_variables_location_arr_seo', $location_array, $vars );
4510 1
	$location_titles = array();
0 ignored issues
show
Unused Code introduced by
$location_titles 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...
4511 1 View Code Duplication
	if ( get_query_var( 'gd_country_full' ) ) {
4512 1
		if ( get_query_var( 'gd_country_full' ) ) {
4513 1
			$location_array['gd_country'] = get_query_var( 'gd_country_full' );
4514 1
		}
4515 1
		if ( get_query_var( 'gd_region_full' ) ) {
4516 1
			$location_array['gd_region'] = get_query_var( 'gd_region_full' );
4517 1
		}
4518 1
		if ( get_query_var( 'gd_city_full' ) ) {
4519 1
			$location_array['gd_city'] = get_query_var( 'gd_city_full' );
4520 1
		}
4521 1
		if ( get_query_var( 'gd_neighbourhood_full' ) ) {
4522 1
			$location_array['gd_neighbourhood'] = get_query_var( 'gd_neighbourhood_full' );
4523 1
		}
4524 1
	}
4525 1
	
4526 1
	/**
4527 1
	 * Filter the location terms variables.
4528 1
	 *
4529 1
	 * @since   1.6.16
4530 1
	 * @package GeoDirectory
4531 1
	 *
4532 1
	 * @param string $title         The title with variables.
4533 1
	 * @param array $location_array The array of location variables.
4534 1
	 * @param string $gd_page       The page being filtered.
4535 1
	 * @param string $sep           The separator, default: `|`.
4536 1
	 */
4537 1
	$title = apply_filters( 'geodir_replace_location_variables_seo', $title, $location_array, '', '' );
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...
4538 1
4539 1
	/**
4540 1
	 * Filter the title variables after standard ones have been filtered for wpseo.
4541
	 *
4542 1
	 * @since   1.5.7
4543 1
	 * @package GeoDirectory
4544 1
	 *
4545
	 * @param string $vars          The title with variables.
4546 1
	 * @param array $location_array The array of location variables.
4547
	 */
4548
	return apply_filters( 'geodir_wpseo_replacements_vars', $vars, $location_array );
4549
}
4550
4551
4552
add_filter( 'geodir_seo_meta_title', 'geodir_filter_title_variables', 10, 3 );
4553 1
add_filter( 'geodir_seo_page_title', 'geodir_filter_title_variables', 10, 2 );
4554 1
add_filter( 'geodir_seo_meta_description_pre', 'geodir_filter_title_variables', 10, 3 );
4555 1
4556
/**
4557 1
 * Filter the title variables.
4558
 *
4559
 * %%date%%                        Replaced with the date of the post/page
4560
 * %%title%%                    Replaced with the title of the post/page
4561
 * %%sitename%%                    The site's name
4562
 * %%sitedesc%%                    The site's tagline / description
4563
 * %%excerpt%%                    Replaced with the post/page excerpt (or auto-generated if it does not exist)
4564
 * %%tag%%                        Replaced with the current tag/tags
4565
 * %%category%%                    Replaced with the post categories (comma separated)
4566
 * %%category_description%%        Replaced with the category description
4567
 * %%tag_description%%            Replaced with the tag description
4568
 * %%term_description%%            Replaced with the term description
4569
 * %%term_title%%                Replaced with the term name
4570
 * %%searchphrase%%                Replaced with the current search phrase
4571
 * %%sep%%                        The separator defined in your theme's wp_title() tag.
4572
 *
4573
 * ADVANCED
4574
 * %%pt_single%%                Replaced with the post type single label
4575
 * %%pt_plural%%                Replaced with the post type plural label
4576
 * %%modified%%                    Replaced with the post/page modified time
4577
 * %%id%%                        Replaced with the post/page ID
4578
 * %%name%%                        Replaced with the post/page author's 'nicename'
4579
 * %%userid%%                    Replaced with the post/page author's userid
4580
 * %%page%%                        Replaced with the current page number (i.e. page 2 of 4)
4581
 * %%pagetotal%%                Replaced with the current page total
4582
 * %%pagenumber%%                Replaced with the current page number
4583
 *
4584
 * @since   1.5.7
4585
 * @package GeoDirectory
4586
 *
4587
 * @global object $wp     WordPress object.
4588
 * @global object $post   The current post object.
4589
 *
4590
 * @param string $title   The title with variables.
4591
 * @param string $gd_page The page being filtered.
4592
 * @param string $sep     The separator, default: `|`.
4593
 *
4594
 * @return string Title after filtered variables.
4595
 */
4596
function geodir_filter_title_variables( $title, $gd_page, $sep = '' ) {
4597
	global $wp, $post;
4598
4599
	if ( ! $gd_page || ! $title ) {
4600
		return $title; // if no a GD page then bail.
4601
	}
4602
4603
	if ( $sep == '' ) {
4604 8
		/**
4605 7
		 * Filter the page title separator.
4606
		 *
4607
		 * @since   1.0.0
4608 1
		 * @package GeoDirectory
4609 1
		 *
4610 1
		 * @param string $sep The separator, default: `|`.
4611
		 */
4612 1
		$sep = apply_filters( 'geodir_page_title_separator', '|' );
4613
	}
4614
4615
	if ( strpos( $title, '%%title%%' ) !== false ) {
4616 1
		$title = str_replace( "%%title%%", $post->post_title, $title );
4617
	}
4618
4619 View Code Duplication
	if ( strpos( $title, '%%sitename%%' ) !== false ) {
4620 1
		$title = str_replace( "%%sitename%%", get_bloginfo( 'name' ), $title );
4621
	}
4622 1
4623 View Code Duplication
	if ( strpos( $title, '%%sitedesc%%' ) !== false ) {
4624
		$title = str_replace( "%%sitedesc%%", get_bloginfo( 'description' ), $title );
4625
	}
4626
4627
	if ( strpos( $title, '%%excerpt%%' ) !== false ) {
4628
		$title = str_replace( "%%excerpt%%", strip_tags( get_the_excerpt() ), $title );
4629
	}
4630
4631
	if ( $gd_page == 'search' || $gd_page == 'author' ) {
4632
		$post_type = isset( $_REQUEST['stype'] ) ? sanitize_text_field( $_REQUEST['stype'] ) : '';
4633
	} else if ( $gd_page == 'add-listing' ) {
4634
		$post_type = ( isset( $_REQUEST['listing_type'] ) ) ? sanitize_text_field( $_REQUEST['listing_type'] ) : '';
4635
		$post_type = ! $post_type && ! empty( $_REQUEST['pid'] ) ? get_post_type( (int) $_REQUEST['pid'] ) : $post_type;
4636
	} else if ( isset( $post->post_type ) && $post->post_type && in_array( $post->post_type, geodir_get_posttypes() ) ) {
4637
		$post_type = $post->post_type;
4638
	} else {
4639
		$post_type = get_query_var( 'post_type' );
4640
	}
4641
4642 View Code Duplication
	if ( strpos( $title, '%%pt_single%%' ) !== false ) {
4643
		$singular_name = '';
4644
		if ( $post_type && $singular_name = get_post_type_singular_label( $post_type ) ) {
4645 1
			$singular_name = __( $singular_name, 'geodirectory' );
4646
		}
4647
4648
		$title = str_replace( "%%pt_single%%", $singular_name, $title );
4649
	}
4650
4651 View Code Duplication
	if ( strpos( $title, '%%pt_plural%%' ) !== false ) {
4652
		$plural_name = '';
4653
		if ( $post_type && $plural_name = get_post_type_plural_label( $post_type ) ) {
4654
			$plural_name = __( $plural_name, 'geodirectory' );
4655
		}
4656
4657
		$title = str_replace( "%%pt_plural%%", $plural_name, $title );
4658
	}
4659
4660 View Code Duplication
	if ( strpos( $title, '%%category%%' ) !== false ) {
4661
		$cat_name = '';
4662
4663
		if ( $gd_page == 'detail' ) {
4664
			if ( $post->default_category ) {
4665
				$cat      = get_term( $post->default_category, $post->post_type . 'category' );
4666
				$cat_name = ( isset( $cat->name ) ) ? $cat->name : '';
4667
			}
4668
		} else if ( $gd_page == 'listing' ) {
4669
			$queried_object = get_queried_object();
4670
			if ( isset( $queried_object->name ) ) {
4671
				$cat_name = $queried_object->name;
4672
			}
4673
		}
4674
		$title = str_replace( "%%category%%", $cat_name, $title );
4675
	}
4676
4677 View Code Duplication
	if ( strpos( $title, '%%tag%%' ) !== false ) {
4678
		$cat_name = '';
4679
4680
		if ( $gd_page == 'detail' ) {
4681
			if ( $post->default_category ) {
4682
				$cat      = get_term( $post->default_category, $post->post_type . 'category' );
4683
				$cat_name = ( isset( $cat->name ) ) ? $cat->name : '';
4684
			}
4685
		} else if ( $gd_page == 'listing' ) {
4686
			$queried_object = get_queried_object();
4687
			if ( isset( $queried_object->name ) ) {
4688
				$cat_name = $queried_object->name;
4689
			}
4690
		}
4691
		$title = str_replace( "%%tag%%", $cat_name, $title );
4692
	}
4693
4694
	if ( strpos( $title, '%%id%%' ) !== false ) {
4695
		$ID    = ( isset( $post->ID ) ) ? $post->ID : '';
4696
		$title = str_replace( "%%id%%", $ID, $title );
4697
	}
4698
4699
	if ( strpos( $title, '%%sep%%' ) !== false ) {
4700
		$title = str_replace( "%%sep%%", $sep, $title );
4701
	}
4702
4703
	// location variables
4704
	$gd_post_type   = geodir_get_current_posttype();
4705
	$location_array = geodir_get_current_location_terms( 'query_vars', $gd_post_type );
4706
	
4707
	/**
4708
	 * Filter the title variables location variables array
4709
	 *
4710
	 * @since   1.5.5
4711
	 * @package GeoDirectory
4712
	 *
4713
	 * @param array $location_array The array of location variables.
4714
	 * @param string $title         The title with variables..
4715
	 * @param string $gd_page       The page being filtered.
4716
	 * @param string $sep           The separator, default: `|`.
4717
	 */
4718
	$location_array  = apply_filters( 'geodir_filter_title_variables_location_arr', $location_array, $title, $gd_page, $sep );
4719
	
4720 View Code Duplication
	if ( $gd_page == 'location' && get_query_var( 'gd_country_full' ) ) {
4721
		if ( get_query_var( 'gd_country_full' ) ) {
4722
			$location_array['gd_country'] = get_query_var( 'gd_country_full' );
4723
		}
4724
		if ( get_query_var( 'gd_region_full' ) ) {
4725
			$location_array['gd_region'] = get_query_var( 'gd_region_full' );
4726
		}
4727
		if ( get_query_var( 'gd_city_full' ) ) {
4728
			$location_array['gd_city'] = get_query_var( 'gd_city_full' );
4729
		}
4730
		if ( get_query_var( 'gd_neighbourhood_full' ) ) {
4731
			$location_array['gd_neighbourhood'] = get_query_var( 'gd_neighbourhood_full' );
4732
		}
4733
	}
4734
	
4735
	/**
4736
	 * Filter the location terms variables.
4737
	 *
4738
	 * @since   1.6.16
4739
	 * @package GeoDirectory
4740
	 *
4741
	 * @param string $title         The title with variables.
4742
	 * @param array $location_array The array of location variables.
4743
	 * @param string $gd_page       The page being filtered.
4744
	 * @param string $sep           The separator, default: `|`.
4745
	 */
4746
	$title = apply_filters( 'geodir_replace_location_variables', $title, $location_array, $gd_page, $sep );
4747
	
4748 View Code Duplication
	if ( strpos( $title, '%%search_term%%' ) !== false ) {
4749
		$search_term = '';
4750
		if ( isset( $_REQUEST['s'] ) ) {
4751
			$search_term = esc_attr( $_REQUEST['s'] );
4752
		}
4753
		$title = str_replace( "%%search_term%%", $search_term, $title );
4754
	}
4755
4756 View Code Duplication
	if ( strpos( $title, '%%search_near%%' ) !== false ) {
4757
		$search_term = '';
4758
		if ( isset( $_REQUEST['snear'] ) ) {
4759
			$search_term = esc_attr( $_REQUEST['snear'] );
4760
		}
4761
		$title = str_replace( "%%search_near%%", $search_term, $title );
4762
	}
4763
4764
	if ( strpos( $title, '%%name%%' ) !== false ) {
4765
		if ( is_author() ) {
4766
			$curauth     = ( get_query_var( 'author_name' ) ) ? get_user_by( 'slug', get_query_var( 'author_name' ) ) : get_userdata( get_query_var( 'author' ) );
4767
			$author_name = $curauth->display_name;
4768
		} else {
4769
			$author_name = get_the_author();
4770
		}
4771 3
		if ( ! $author_name || $author_name === '' ) {
4772 3
			$queried_object = get_queried_object();
4773
4774
			if ( isset( $queried_object->data->user_nicename ) ) {
4775 3
				$author_name = $queried_object->data->display_name;
4776 3
			}
4777 3
		}
4778 3
		$title = str_replace( "%%name%%", $author_name, $title );
4779 3
	}
4780 3
4781 3
	if ( strpos( $title, '%%page%%' ) !== false ) {
4782
		$page  = geodir_title_meta_page( $sep );
4783
		$title = str_replace( "%%page%%", $page, $title );
4784
	}
4785
	if ( strpos( $title, '%%pagenumber%%' ) !== false ) {
4786
		$pagenumber = geodir_title_meta_pagenumber();
4787
		$title      = str_replace( "%%pagenumber%%", $pagenumber, $title );
4788
	}
4789
	if ( strpos( $title, '%%pagetotal%%' ) !== false ) {
4790
		$pagetotal = geodir_title_meta_pagetotal();
4791
		$title     = str_replace( "%%pagetotal%%", $pagetotal, $title );
4792
	}
4793
4794 2
	$title = wptexturize( $title );
4795 1
	$title = convert_chars( $title );
4796 1
	$title = esc_html( $title );
4797 2
4798
	/**
4799
	 * Filter the title variables after standard ones have been filtered.
4800
	 *
4801
	 * @since   1.5.7
4802
	 * @package GeoDirectory
4803
	 *
4804
	 * @param string $title         The title with variables.
4805
	 * @param array $location_array The array of location variables.
4806
	 * @param string $gd_page       The page being filtered.
4807
	 * @param string $sep           The separator, default: `|`.
4808
	 */
4809
4810
	return apply_filters( 'geodir_filter_title_variables_vars', $title, $location_array, $gd_page, $sep );
4811
}
4812
4813
/**
4814
 * Get the cpt texts for translation.
4815
 *
4816
 * @since   1.5.5
4817
 * @package GeoDirectory
4818
 *
4819
 * @param  array $translation_texts Array of text strings.
4820
 *
4821
 * @return array Translation texts.
4822
 */
4823
function geodir_load_cpt_text_translation( $translation_texts = array() ) {
4824
	$gd_post_types = geodir_get_posttypes( 'array' );
4825
4826
	if ( ! empty( $gd_post_types ) ) {
4827
		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...
4828
			$labels      = isset( $cpt_info['labels'] ) ? $cpt_info['labels'] : '';
4829
			$description = isset( $cpt_info['description'] ) ? $cpt_info['description'] : '';
4830
			$seo         = isset( $cpt_info['seo'] ) ? $cpt_info['seo'] : '';
4831
4832
			if ( ! empty( $labels ) ) {
4833 View Code Duplication
				if ( $labels['name'] != '' && ! in_array( $labels['name'], $translation_texts ) ) {
4834
					$translation_texts[] = $labels['name'];
4835
				}
4836 View Code Duplication
				if ( $labels['singular_name'] != '' && ! in_array( $labels['singular_name'], $translation_texts ) ) {
4837
					$translation_texts[] = $labels['singular_name'];
4838
				}
4839 View Code Duplication
				if ( $labels['add_new'] != '' && ! in_array( $labels['add_new'], $translation_texts ) ) {
4840
					$translation_texts[] = $labels['add_new'];
4841
				}
4842 View Code Duplication
				if ( $labels['add_new_item'] != '' && ! in_array( $labels['add_new_item'], $translation_texts ) ) {
4843
					$translation_texts[] = $labels['add_new_item'];
4844
				}
4845 View Code Duplication
				if ( $labels['edit_item'] != '' && ! in_array( $labels['edit_item'], $translation_texts ) ) {
4846
					$translation_texts[] = $labels['edit_item'];
4847
				}
4848 View Code Duplication
				if ( $labels['new_item'] != '' && ! in_array( $labels['new_item'], $translation_texts ) ) {
4849
					$translation_texts[] = $labels['new_item'];
4850
				}
4851 View Code Duplication
				if ( $labels['view_item'] != '' && ! in_array( $labels['view_item'], $translation_texts ) ) {
4852
					$translation_texts[] = $labels['view_item'];
4853
				}
4854 View Code Duplication
				if ( $labels['search_items'] != '' && ! in_array( $labels['search_items'], $translation_texts ) ) {
4855
					$translation_texts[] = $labels['search_items'];
4856
				}
4857 View Code Duplication
				if ( $labels['not_found'] != '' && ! in_array( $labels['not_found'], $translation_texts ) ) {
4858
					$translation_texts[] = $labels['not_found'];
4859
				}
4860 View Code Duplication
				if ( $labels['not_found_in_trash'] != '' && ! in_array( $labels['not_found_in_trash'], $translation_texts ) ) {
4861
					$translation_texts[] = $labels['not_found_in_trash'];
4862
				}
4863 View Code Duplication
				if ( isset( $labels['label_post_profile'] ) && $labels['label_post_profile'] != '' && ! in_array( $labels['label_post_profile'], $translation_texts ) ) {
4864
					$translation_texts[] = $labels['label_post_profile'];
4865
				}
4866 View Code Duplication
				if ( isset( $labels['label_post_info'] ) && $labels['label_post_info'] != '' && ! in_array( $labels['label_post_info'], $translation_texts ) ) {
4867
					$translation_texts[] = $labels['label_post_info'];
4868
				}
4869 View Code Duplication
				if ( isset( $labels['label_post_images'] ) && $labels['label_post_images'] != '' && ! in_array( $labels['label_post_images'], $translation_texts ) ) {
4870
					$translation_texts[] = $labels['label_post_images'];
4871
				}
4872 View Code Duplication
				if ( isset( $labels['label_post_map'] ) && $labels['label_post_map'] != '' && ! in_array( $labels['label_post_map'], $translation_texts ) ) {
4873
					$translation_texts[] = $labels['label_post_map'];
4874
				}
4875 View Code Duplication
				if ( isset( $labels['label_reviews'] ) && $labels['label_reviews'] != '' && ! in_array( $labels['label_reviews'], $translation_texts ) ) {
4876
					$translation_texts[] = $labels['label_reviews'];
4877
				}
4878 View Code Duplication
				if ( isset( $labels['label_related_listing'] ) && $labels['label_related_listing'] != '' && ! in_array( $labels['label_related_listing'], $translation_texts ) ) {
4879
					$translation_texts[] = $labels['label_related_listing'];
4880
				}
4881
			}
4882
4883
			if ( $description != '' && ! in_array( $description, $translation_texts ) ) {
4884
				$translation_texts[] = normalize_whitespace( $description );
4885
			}
4886
4887
			if ( ! empty( $seo ) ) {
4888 View Code Duplication
				if ( isset( $seo['meta_keyword'] ) && $seo['meta_keyword'] != '' && ! in_array( $seo['meta_keyword'], $translation_texts ) ) {
4889
					$translation_texts[] = normalize_whitespace( $seo['meta_keyword'] );
4890
				}
4891
4892 View Code Duplication
				if ( isset( $seo['meta_description'] ) && $seo['meta_description'] != '' && ! in_array( $seo['meta_description'], $translation_texts ) ) {
4893
					$translation_texts[] = normalize_whitespace( $seo['meta_description'] );
4894
				}
4895
			}
4896
		}
4897
	}
4898
	$translation_texts = ! empty( $translation_texts ) ? array_unique( $translation_texts ) : $translation_texts;
4899
4900
	return $translation_texts;
4901
}
4902
4903
/**
4904
 * Remove the location terms to hide term from location url.
4905
 *
4906
 * @since   1.5.5
4907
 * @package GeoDirectory
4908
 *
4909
 * @param  array $location_terms Array of location terms.
4910
 *
4911
 * @return array Location terms.
4912
 */
4913
function geodir_remove_location_terms( $location_terms = array() ) {
4914
	$location_manager = defined( 'POST_LOCATION_TABLE' ) ? true : false;
4915
4916
	if ( ! empty( $location_terms ) && $location_manager ) {
4917
		$hide_country_part = get_option( 'geodir_location_hide_country_part' );
4918
		$hide_region_part  = get_option( 'geodir_location_hide_region_part' );
4919
4920
		if ( $hide_region_part && $hide_country_part ) {
4921
			if ( isset( $location_terms['gd_country'] ) ) {
4922
				unset( $location_terms['gd_country'] );
4923
			}
4924
			if ( isset( $location_terms['gd_region'] ) ) {
4925
				unset( $location_terms['gd_region'] );
4926
			}
4927
		} else if ( $hide_region_part && ! $hide_country_part ) {
4928
			if ( isset( $location_terms['gd_region'] ) ) {
4929
				unset( $location_terms['gd_region'] );
4930
			}
4931
		} else if ( ! $hide_region_part && $hide_country_part ) {
4932
			if ( isset( $location_terms['gd_country'] ) ) {
4933
				unset( $location_terms['gd_country'] );
4934
			}
4935
		}
4936
	}
4937
4938
	return $location_terms;
4939
}
4940
4941
/**
4942
 * Send notification when a listing has been edited by it's author.
4943
 *
4944
 * @since   1.5.9
4945
 * @package GeoDirectory
4946
 *
4947
 * @param int $post_ID  Post ID.
4948
 * @param WP_Post $post Post object.
4949
 * @param bool $update  Whether this is an existing listing being updated or not.
4950
 */
4951
function geodir_on_wp_insert_post( $post_ID, $post, $update ) {
4952
	if ( ! $update ) {
4953
		return;
4954
	}
4955
4956
	$action      = isset( $_REQUEST['action'] ) ? sanitize_text_field( $_REQUEST['action'] ) : '';
4957
	$is_admin    = is_admin() && ( ! defined( 'DOING_AJAX' ) || ( defined( 'DOING_AJAX' ) && ! DOING_AJAX ) ) ? true : false;
4958
	$inline_save = $action == 'inline-save' ? true : false;
4959
4960
	if ( empty( $post->post_type ) || $is_admin || $inline_save || ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) ) {
4961
		return;
4962
	}
4963
4964
	if ( $action != '' && in_array( $action, array( 'geodir_import_export' ) ) ) {
4965
		return;
4966
	}
4967
4968
	$user_id = (int) get_current_user_id();
4969
4970
	if ( $user_id > 0 && get_option( 'geodir_notify_post_edited' ) && ! wp_is_post_revision( $post_ID ) && in_array( $post->post_type, geodir_get_posttypes() ) ) {
4971
		$author_id = ! empty( $post->post_author ) ? $post->post_author : 0;
4972
4973
		if ( $user_id == $author_id && ! is_super_admin() ) {
4974
			$from_email   = get_option( 'site_email' );
4975
			$from_name    = get_site_emailName();
4976
			$to_email     = get_option( 'admin_email' );
4977
			$to_name      = get_option( 'name' );
4978
			$message_type = 'listing_edited';
4979
4980
			$notify_edited = true;
4981
			/**
4982
			 * Send notification when listing edited by author?
4983
			 *
4984
			 * @since 1.6.0
4985
			 *
4986
			 * @param bool $notify_edited Notify on listing edited by author?
4987
			 * @param object $post        The current post object.
4988
			 */
4989
			$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...
4990
4991
			geodir_sendEmail( $from_email, $from_name, $to_email, $to_name, '', '', '', $message_type, $post_ID );
4992
		}
4993
	}
4994
}
4995
4996
/**
4997
 * Retrieve the current page start & end numbering with context (i.e. 'page 2 of 4') for use as replacement string.
4998
 *
4999
 * @since   1.6.0
5000
 * @package GeoDirectory
5001
 *
5002
 * @param string $sep The separator tag.
5003
 *
5004
 * @return string|null The current page start & end numbering.
5005
 */
5006
function geodir_title_meta_page( $sep ) {
5007
	$replacement = null;
5008
5009
	$max = geodir_title_meta_pagenumbering( 'max' );
5010
	$nr  = geodir_title_meta_pagenumbering( 'nr' );
5011
5012
	if ( $max > 1 && $nr > 1 ) {
5013
		$replacement = sprintf( $sep . ' ' . __( 'Page %1$d of %2$d', 'geodirectory' ), $nr, $max );
5014
	}
5015
5016
	return $replacement;
5017
}
5018
5019
/**
5020
 * Retrieve the current page number for use as replacement string.
5021
 *
5022
 * @since   1.6.0
5023
 * @package GeoDirectory
5024
 *
5025
 * @return string|null The current page number.
5026
 */
5027 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...
5028
	$replacement = null;
5029
5030
	$nr = geodir_title_meta_pagenumbering( 'nr' );
5031
	if ( isset( $nr ) && $nr > 0 ) {
5032
		$replacement = (string) $nr;
5033
	}
5034
5035
	return $replacement;
5036
}
5037
5038
/**
5039
 * Retrieve the current page total for use as replacement string.
5040
 *
5041
 * @since   1.6.0
5042
 * @package GeoDirectory
5043
 *
5044
 * @return string|null The current page total.
5045
 */
5046 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...
5047
	$replacement = null;
5048
5049
	$max = geodir_title_meta_pagenumbering( 'max' );
5050
	if ( isset( $max ) && $max > 0 ) {
5051
		$replacement = (string) $max;
5052
	}
5053
5054
	return $replacement;
5055
}
5056
5057
/**
5058
 * Determine the page numbering of the current post/page/cpt.
5059
 *
5060
 * @param string $request   'nr'|'max' - whether to return the page number or the max number of pages.
5061
 *
5062
 * @since   1.6.0
5063
 * @package GeoDirectory
5064
 *
5065
 * @global object $wp_query WordPress Query object.
5066
 * @global object $post     The current post object.
5067
 *
5068
 * @return int|null The current page numbering.
5069
 */
5070
function geodir_title_meta_pagenumbering( $request = 'nr' ) {
5071
	global $wp_query, $post;
5072
	$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...
5073
	$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...
5074
5075
	$max_num_pages = 1;
5076
5077
	if ( ! is_singular() ) {
5078
		$page_number = get_query_var( 'paged' );
5079
		if ( $page_number === 0 || $page_number === '' ) {
5080
			$page_number = 1;
5081
		}
5082
5083
		if ( isset( $wp_query->max_num_pages ) && ( $wp_query->max_num_pages != '' && $wp_query->max_num_pages != 0 ) ) {
5084
			$max_num_pages = $wp_query->max_num_pages;
5085
		}
5086
	} else {
5087
		$page_number = get_query_var( 'page' );
5088
		if ( $page_number === 0 || $page_number === '' ) {
5089
			$page_number = 1;
5090
		}
5091
5092
		if ( isset( $post->post_content ) ) {
5093
			$max_num_pages = ( substr_count( $post->post_content, '<!--nextpage-->' ) + 1 );
5094
		}
5095
	}
5096
5097
	$return = null;
5098
5099
	switch ( $request ) {
5100
		case 'nr':
5101
			$return = $page_number;
5102
			break;
5103
		case 'max':
5104
			$return = $max_num_pages;
5105
			break;
5106
	}
5107
5108
	return $return;
5109
}
5110
5111
/**
5112
 * Filter the terms with count empty.
5113
 *
5114
 * @since 1.5.4
5115
 *
5116
 * @param array $terms Terms array.
5117
 *
5118
 * @return array Terms.
5119
 */
5120
function geodir_filter_empty_terms( $terms ) {
5121
	if ( empty( $terms ) ) {
5122
		return $terms;
5123
	}
5124
5125
	$return = array();
5126
	foreach ( $terms as $term ) {
5127
		if ( isset( $term->count ) && $term->count > 0 ) {
5128
			$return[] = $term;
5129
		} else {
5130
			/**
5131
			 * Allow to filter terms with no count.
5132
			 *
5133
			 * @since 1.6.6
5134
			 *
5135
			 * @param array $return The array of terms to return.
5136
			 * @param object $term  The term object.
5137
			 */
5138
			$return = apply_filters( 'geodir_filter_empty_terms_filter', $return, $term );
5139
		}
5140
	}
5141
5142
	return $return;
5143
}
5144
5145
5146
/**
5147
 * Remove the hentry class structured data from details pages.
5148
 *
5149
 * @since 1.6.5
5150
 *
5151
 * @param $class
5152
 *
5153
 * @return array
5154
 */
5155
function geodir_remove_hentry( $class ) {
5156
	if ( geodir_is_page( 'detail' ) ) {
5157
		$class = array_diff( $class, array( 'hentry' ) );
5158
	}
5159
5160
	return $class;
5161
}
5162
5163
add_filter( 'post_class', 'geodir_remove_hentry' );
5164
5165
/**
5166
 * Registers a individual text string for WPML translation.
5167
 *
5168
 * @since 1.6.16 Details page add locations to the term links.
5169
 * @package GeoDirectory
5170
 *
5171
 * @param string $string The string that needs to be translated.
5172
 * @param string $domain The plugin domain. Default geodirectory.
5173
 * @param string $name The name of the string which helps to know what's being translated.
5174
 */
5175
function geodir_wpml_register_string( $string, $domain = 'geodirectory', $name = '' ) {
5176
    do_action( 'wpml_register_single_string', $domain, $name, $string );
5177
}
5178
5179
/**
5180
 * Retrieves an individual WPML text string translation.
5181
 *
5182
 * @since 1.6.16 Details page add locations to the term links.
5183
 * @package GeoDirectory
5184
 *
5185
 * @param string $string The string that needs to be translated.
5186
 * @param string $domain The plugin domain. Default geodirectory.
5187
 * @param string $name The name of the string which helps to know what's being translated.
5188
 * @param string $language_code Return the translation in this language. Default is NULL which returns the current language.
5189
 * @return string The translated string.
5190
 */
5191
function geodir_wpml_translate_string( $string, $domain = 'geodirectory', $name = '', $language_code = NULL ) {
5192
    return apply_filters( 'wpml_translate_single_string', $string, $domain, $name, $language_code );
5193
}