Completed
Pull Request — master (#6)
by Daryl
01:24
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
	 * @return Geocoder
69
	 */
70 1
	public static function geocoder() {
71
72 1
		if ( ! isset( static::$_geocoder ) ) {
73 1
			static::$_geocoder = new Geocoder( ['api_key' => self::api_key() ] );
74
		}
75
76 1
		return static::$_geocoder;
77
78
	}
79
80
	/**
81
	 * @param  array $args
82
	 * @return Map
83
	 */
84 1
	public static function make_new_map( $args = array() ) {
85
86 1
		$class = __NAMESPACE__ . '\Map';
87 1
		return new $class( $args );
88
89
	}
90
91
	/**
92
	 * @param string $key
93
	 */
94 1
	public static function register_api_key( $key ) {
95
96 1
		static::$_api_key = filter_var( $key, FILTER_SANITIZE_STRING );
97
98 1
	}
99
100
	/**
101
	 * @param callable|bool $condition
102
	 */
103 1
	public static function register_script_condition( $condition ) {
104
105 1
		static::$_script_conditions[] = $condition;
106
107 1
	}
108
109 1
	public static function _wp_enqueue_scripts_9() {
110
111 1
		self::_register_scripts();
112
113 1
		if ( self::_evaluate_conditions() ) {
114 1
			wp_enqueue_script( 'map-control' );
115
		}
116
117 1
	}
118
119 1
	public static function script_conditions() {
120
121 1
		return static::$_script_conditions;
122
123
	}
124
125
	/**
126
	 * @param  string $address
127
	 * @param  array  $args
128
	 * @return Marker
129
	 */
130 1
	public static function make_marker_by_address( $address, $args = array() ) {
131
132 1
		$args = wp_parse_args( $args, array(
133 1
			'address' => $address,
134 1
			'geocoder' => self::geocoder(),
135
		) );
136
137 1
		return new Marker( $args );
138
139
	}
140
141
	/**
142
	 * @param float $lat
143
	 * @param float $lng
144
	 *
145
	 * @return Marker
146
	 */
147 1
	public static function make_marker_by_position( $lat, $lng, $args = array() ) {
148
149 1
		$args = wp_parse_args( $args, array(
150 1
			'geocoder' => self::geocoder(),
151 1
			'lat' => $lat,
152 1
			'lng' => $lng,
153
154
		));
155
156 1
		return new Marker( $args );
157
158
	}
159
160
	/**
161
	 * @param  string $destination
162
	 * @param  array  $args
163
	 * @return string
164
	 */
165 1
	public static function driving_directions_href($destination, $args = array() ) {
166
167 1
		$args = wp_parse_args( $args, array(
168 1
			'start' => 'My Location',
169
		) );
170
171 1
		return sprintf( 'https://maps.google.com/maps?saddr=%1$s&daddr=%2$s', urlencode( $args['start'] ), urlencode( $destination ) );
172
	}
173
174
	/**
175
	 * @return string
176
	 */
177 1
	public static function source_dir() {
178
179 1
		return self::$_source_dir;
180
181
	}
182
183
	/**
184
	 * @return string
185
	 */
186
	public static function source_url() {
187
188
		$path = dirname( __DIR__ );
189
190
		$url = str_replace( WP_CONTENT_DIR, WP_CONTENT_URL, $path );
191
192
		if ( is_ssl() ) {
193
			$url = preg_replace( '#^https*:\/\/([a-zA-z0-9\.]*)#', 'https://$1', $url );
194
		}
195
196
		return $url;
197
198
	}
199
200 1
	public static function version() {
201
202 1
		return self::$_version;
203
204
	}
205
206 1
	protected static function _evaluate_conditions() {
207
208 1
		$result     = false;
209 1
		$conditions = self::script_conditions();
210
211 1
		foreach( $conditions as $key => $condition ) {
212 1
			if ( is_callable( $condition ) ) {
213 1
				$conditions[ $key ] = call_user_func( $condition );
214
			}
215
		}
216
217 1
		if ( in_array( true, $conditions ) ) {
218 1
			$result = true;
219
		}
220
221 1
		return $result;
222
223
	}
224
225 1
	protected static function _register_scripts() {
226
227 1
		$key    = static::api_key();
228 1
		$source = sprintf( '%1$s/dist/scripts/maps.min.js', self::source_url() );
229
230 1
		if ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
231 1
			$source = sprintf( '%1$s/assets/maps.js', self::source_url() );
232
		}
233
234 1
		wp_register_script('google-maps', "https://maps.google.com/maps/api/js?v=3&key={$key}", false, '3.0', true );
235 1
		wp_register_script('map-control', $source, array( 'jquery', 'google-maps' ), self::version(), true );
236
237 1
	}
238
239
}
240