Cancelled
Push — master ( 28a5cf...9e6262 )
by Paul
06:07
created

Helper::convertPathToName()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 4
nc 1
nop 2
dl 0
loc 6
ccs 0
cts 5
cp 0
crap 2
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace GeminiLabs\SiteReviews;
4
5
use GeminiLabs\SiteReviews\Database\Cache;
6
use Vectorface\Whip\Whip;
7
8
class Helper
9
{
10
	/**
11
	 * @param string $name
12
	 * @param string $path
13
	 * @return string
14
	 */
15
	public function buildClassName( $name, $path = '' )
16
	{
17
		$className = array_map( 'strtolower', (array)preg_split( '/[-_]/', $name ));
18
		$className = array_map( 'ucfirst', $className );
19
		$className = implode( '', $className );
20
		$path = ltrim( str_replace( __NAMESPACE__, '', $path ), '\\' );
21
		return !empty( $path )
22
			? __NAMESPACE__.'\\'.$path.'\\'.$className
23
			: $className;
24
	}
25
26
	/**
27
	 * @param string $name
28
	 * @param string $prefix
29
	 * @return string
30
	 */
31
	public function buildMethodName( $name, $prefix = '' )
32
	{
33
		return lcfirst( $prefix.$this->buildClassName( $name ));
34
	}
35
36
	/**
37
	 * @param string $name
38
	 * @return string
39
	 */
40
	public function buildPropertyName( $name )
41
	{
42
		return lcfirst( $this->buildClassName( $name ));
43
	}
44
45
	/**
46
	 * @return bool
47
	 */
48
	public function compareArrays( array $arr1, array $arr2 )
49
	{
50
		sort( $arr1 );
51
		sort( $arr2 );
52
		return $arr1 == $arr2;
53
	}
54
55
	/**
56
	 * @return array
57
	 */
58 7
	public function convertDotNotationArray( array $array )
59
	{
60 7
		$results = [];
61 7
		foreach( $array as $path => $value ) {
62 7
			$results = $this->setPathValue( $path, $value, $results );
63
		}
64 7
		return $results;
65
	}
66
67
	/**
68
	 * @param string $name
69
	 * @return string
70
	 */
71
	public function convertNameToId( $name )
72
	{
73
		return str_replace( ['[', ']'], ['-', ''], $name );
74
	}
75
76
	/**
77
	 * @param string $path
78
	 * @return string
79
	 */
80
	public function convertPathToName( $path, $prefix = '' )
81
	{
82
		$levels = explode( '.', $path );
83
		return array_reduce( $levels, function( $result, $value ) {
84
			return $result.= '['.$value.']';
85
		}, $prefix );
86
	}
87
88
	/**
89
	 * @param string $string
90
	 * @return string
91
	 */
92
	public function dashCase( $string )
93
	{
94
		return str_replace( '_', '-', $this->snakeCase( $string ));
95
	}
96
97
	/**
98
	 * @param string $needle
99
	 * @param string $haystack
100
	 * @return bool
101
	 */
102
	public function endsWith( $needle, $haystack )
103
	{
104
		$length = strlen( $needle );
105
		return $length != 0
106
			? substr( $haystack, -$length ) === $needle
107
			: true;
108
	}
109
110
	/**
111
	 * @param string $prefix
112
	 * @return array
113
	 */
114
	public function flattenArray( array $array, $prefix = '' )
115
	{
116
		$result = [];
117
		foreach( $array as $key => $value ) {
118
			$newKey = $prefix.( empty( $prefix ) ? '' : '.' ).$key;
119
			if( $this->isIndexedArray( $value )) {
120
				$value = '['.implode( ', ', $value ).']';
121
			}
122
			if( is_array( $value )) {
123
				$result = array_merge( $result, $this->flattenArray( $value, $newKey ));
124
				continue;
125
			}
126
			$result[$newKey] = $value;
127
		}
128
		return $result;
129
	}
130
131
	/**
132
	 * @return string
133
	 */
134
	public function getIpAddress()
135
	{
136
		$cloudflareIps = glsr( Cache::class )->getCloudflareIps();
137
		return (string)(new Whip( Whip::CLOUDFLARE_HEADERS | Whip::REMOTE_ADDR, [
138
			Whip::CLOUDFLARE_HEADERS => [
139
				Whip::IPV4 => $cloudflareIps['v4'],
140
				Whip::IPV6 => $cloudflareIps['v6'],
141
			],
142
		]))->getValidIpAddress();
143
	}
144
145
	/**
146
	 * Get a value from an array of values using a dot-notation path as reference
147
	 * @param string $path
148
	 * @param mixed $fallback
149
	 * @return void|mixed
150
	 */
151 7
	public function getPathValue( $path = '', $fallback, array $values )
152
	{
153 7
		$keys = explode( '.', $path );
154 7
		foreach( $keys as $key ) {
155 7
			if( !isset( $values[$key] )) {
156 7
				return $fallback;
157
			}
158 7
			$values = $values[$key];
159
		}
160 7
		return $values;
161
	}
162
163
	/**
164
	 * @param mixed $array
165
	 * @return bool
166
	 */
167
	public function isIndexedArray( $array )
168
	{
169
		if( !is_array( $array ) || array_filter( $array, 'is_array' )) {
170
			return false;
171
		}
172
		$current = 0;
173
		foreach( array_keys( $array ) as $key ) {
174
			if( $key !== $current ) {
175
				return false;
176
			}
177
			$current++;
178
		}
179
		return true;
180
	}
181
182
	/**
183
	 * @param string $string
184
	 * @param string $prefix
185
	 * @return string
186
	 */
187
	public function prefixString( $string, $prefix = '' )
188
	{
189
		return $prefix.str_replace( $prefix, '', trim( $string ));
190
	}
191
192
	/**
193
	 * Remove empty values from an array
194
	 * @return array
195
	 */
196 7
	public function removeEmptyArrayValues( array $array )
197
	{
198 7
		$result = [];
199 7
		foreach( $array as $key => $value ) {
200 7
			if( !$value )continue;
201 7
			$result[$key] = is_array( $value )
202 1
				? $this->removeEmptyArrayValues( $value )
203 7
				: $value;
204
		}
205 7
		return $result;
206
	}
207
208
	/**
209
	 * Set a value to an array of values using a dot-notation path as reference
210
	 * @param string $path
211
	 * @param mixed $value
212
	 * @return array
213
	 */
214 7
	public function setPathValue( $path, $value, array $values )
215
	{
216 7
		$token = strtok( $path, '.' );
217 7
		$ref = &$values;
218 7
		while( $token !== false ) {
219 7
			$ref = is_array( $ref )
220 7
				? $ref
221 7
				: [];
222 7
			$ref = &$ref[$token];
223 7
			$token = strtok( '.' );
224
		}
225 7
		$ref = $value;
226 7
		return $values;
227
	}
228
229
	/**
230
	 * @param string $string
231
	 * @return string
232
	 */
233 7
	public function snakeCase( $string )
234
	{
235 7
		if( !ctype_lower( $string )) {
236 7
			$string = preg_replace( '/\s+/u', '', $string );
237 7
			$string = preg_replace( '/(.)(?=[A-Z])/u', '$1_', $string );
238 7
			$string = mb_strtolower( $string, 'UTF-8' );
239
		}
240 7
		return str_replace( '-', '_', $string );
241
	}
242
243
	/**
244
	 * @param string $needle
245
	 * @param string $haystack
246
	 * @return bool
247
	 */
248 7
	public function startsWith( $needle, $haystack )
249
	{
250 7
		return substr( $haystack, 0, strlen( $needle )) === $needle;
251
	}
252
}
253