Completed
Push — master ( c895c4...ad675b )
by Daryl
01:23
created

Google_Maps::_wp_enqueue_scripts_9()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 9
ccs 5
cts 5
cp 1
rs 9.6666
c 0
b 0
f 0
cc 2
eloc 4
nc 2
nop 0
crap 2
1
<?php
2
3
namespace Clubdeuce\WPGoogleMaps;
4
5
/**
6
 * Class Google_Maps
7
 * @package Clubdeuce\WPGoogleMaps
8
 */
9
class Google_Maps {
10
11
	/**
12
	 * @var string
13
	 */
14
	protected static $_version = '0.1.6';
15
16
	/**
17
	 * @var string
18
	 */
19
	protected static $_api_key = '';
20
21
	/**
22
	 * @var Geocoder
23
	 */
24
	protected static $_geocoder;
25
26
	/**
27
	 * These conditions will be used to determine whether to enqueue the Google Maps JS.
28
	 *
29
	 * @var array
30
	 */
31
	protected static $_script_conditions = array();
32
33
	/**
34
	 * The path to this library's directory
35
	 *
36
	 * @var string
37
	 */
38
	protected static $_source_dir;
39
40
	/**
41
	 * The url to this module's directory
42
	 *
43
	 * @var string
44
	 */
45
	protected static $_source_url;
46
47
	/**
48
	 *
49
	 */
50
	public static function initialize() {
51
52
		self::$_source_dir = dirname( __DIR__ );
53
54
		add_action( 'wp_enqueue_scripts', array( __CLASS__, '_wp_enqueue_scripts_9' ), 9 );
55
56
	}
57
58
	/**
59
	 * @return string
60
	 */
61 1
	public static function api_key() {
62
63 1
		return static::$_api_key;
64
65
	}
66
67
	/**
68
	 * @param  array $args
69
	 * @return Map
70
	 */
71 1
	public static function make_new_map( $args = array() ) {
72
73 1
		$class = __NAMESPACE__ . '\Map';
74 1
		return new $class( $args );
75
76
	}
77
78
	/**
79
	 * @param string $key
80
	 */
81 1
	public static function register_api_key( $key ) {
82
83 1
		static::$_api_key = filter_var( $key, FILTER_SANITIZE_STRING );
84
85 1
	}
86
87
	/**
88
	 * @param callable|bool $condition
89
	 */
90 1
	public static function register_script_condition( $condition ) {
91
92 1
		static::$_script_conditions[] = $condition;
93
94 1
	}
95
96 1
	public static function _wp_enqueue_scripts_9() {
97
98 1
		self::_register_scripts();
99
100 1
		if ( self::_evaluate_conditions() ) {
101 1
			wp_enqueue_script( 'map-control' );
102
		}
103
104 1
	}
105
106
	/**
107
	 * @param  string $address
108
	 * @param  array  $args
109
	 * @return Marker
110
	 */
111 1
	public static function make_marker_by_address( $address, $args = array() ) {
112
113 1
		$args = wp_parse_args( $args, array(
114 1
			'address' => $address,
115 1
			'geocoder' => self::_geocoder(),
116
		) );
117
118 1
		return new Marker( $args );
119
120
	}
121
122
	/**
123
	 * @param float $lat
124
	 * @param float $lng
125
	 *
126
	 * @return Marker
127
	 */
128 1
	public static function make_marker_by_position( $lat, $lng, $args = array() ) {
129
130 1
		$args = wp_parse_args( $args, array(
131 1
			'geocoder' => self::_geocoder(),
132 1
			'lat' => $lat,
133 1
			'lng' => $lng,
134
135
		));
136
137 1
		return new Marker( $args );
138
139
	}
140
141
	/**
142
	 * @param  string $destination
143
	 * @param  array  $args
144
	 * @return string
145
	 */
146 1
	public static function driving_directions_href($destination, $args = array() ) {
147
148 1
		$args = wp_parse_args( $args, array(
149 1
			'start' => 'My Location',
150
		) );
151
152 1
		return sprintf( 'https://maps.google.com/maps?saddr=%1$s&daddr=%2$s', urlencode( $args['start'] ), urlencode( $destination ) );
153
	}
154
155
	/**
156
	 * @return string
157
	 */
158 1
	public static function source_dir() {
159
160 1
		return self::$_source_dir;
161
162
	}
163
164
	/**
165
	 * @return string
166
	 */
167
	public static function source_url() {
168
169
		$path = dirname( __DIR__ );
170
171
		$url = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, $path );
172
173
		if ( is_ssl() ) {
174
			$url = preg_replace( '#^https*:\/\/([a-zA-z0-9\.]*)#', 'https://$1', $url );
175
		}
176
177
		return $url;
178
179
	}
180
181
	/**
182
	 * @return string
183
	 */
184 1
	public static function version() {
185
186 1
		return self::$_version;
187
188
	}
189
190
	/**
191
	 * @return bool
192
	 */
193 1
	protected static function _evaluate_conditions() {
194
195 1
		$result     = false;
196 1
		$conditions = self::_script_conditions();
197
198 1
		foreach( $conditions as $key => $condition ) {
199 1
			if ( is_callable( $condition ) ) {
200 1
				$conditions[ $key ] = call_user_func( $condition );
201
			}
202
		}
203
204 1
		if ( in_array( true, $conditions ) ) {
205 1
			$result = true;
206
		}
207
208 1
		return $result;
209
210
	}
211
212
	/**
213
	 *
214
	 */
215 1
	protected static function _register_scripts() {
216
217 1
		$key    = static::api_key();
218 1
		$source = sprintf( '%1$s/dist/scripts/maps.min.js', self::source_url() );
219
220 1
		if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
221 1
			$source = sprintf( '%1$s/assets/maps.js', self::source_url() );
222
		}
223
224 1
		wp_register_script('google-maps', "https://maps.google.com/maps/api/js?v=3&key={$key}", false, '3.0', true );
225 1
		wp_register_script('map-control', $source, array( 'jquery', 'google-maps' ), self::version(), true );
226
227 1
	}
228
229
	/**
230
	 * @return array
231
	 */
232 1
	protected static function _script_conditions() {
233
234 1
		return static::$_script_conditions;
235
236
	}
237
238
	/**
239
	 * @return Geocoder
240
	 */
241 1
	protected static function _geocoder() {
242
243 1
		if ( ! isset( static::$_geocoder ) ) {
244 1
			static::$_geocoder = new Geocoder( ['api_key' => self::api_key() ] );
245
		}
246
247 1
		return static::$_geocoder;
248
249
	}
250
251
}
252