Passed
Push — master ( dc3967...a95317 )
by Paul
07:16
created

Helper::prefixString()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 2
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 2
rs 10
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 $string
69
	 * @return string
70
	 */
71
	public function dashCase( $string )
72
	{
73
		return str_replace( '_', '-', $this->snakeCase( $string ));
74
	}
75
76
	/**
77
	 * @param string $needle
78
	 * @param string $haystack
79
	 * @return bool
80
	 */
81
	public function endsWith( $needle, $haystack )
82
	{
83
		$length = strlen( $needle );
84
		return $length != 0
85
			? substr( $haystack, -$length ) === $needle
86
			: true;
87
	}
88
89
	/**
90
	 * @param string $prefix
91
	 * @return array
92
	 */
93
	public function flattenArray( array $array, $prefix = '' )
94
	{
95
		$result = [];
96
		foreach( $array as $key => $value ) {
97
			$newKey = $prefix.( empty( $prefix ) ? '' : '.' ).$key;
98
			if( $this->isIndexedArray( $value )) {
99
				$value = '['.implode( ', ', $value ).']';
100
			}
101
			if( is_array( $value )) {
102
				$result = array_merge( $result, $this->flattenArray( $value, $newKey ));
103
				continue;
104
			}
105
			$result[$newKey] = $value;
106
		}
107
		return $result;
108
	}
109
110
	/**
111
	 * @return string
112
	 */
113
	public function getIpAddress()
114
	{
115
		$cloudflareIps = glsr( Cache::class )->getCloudflareIps();
116
		return (string)(new Whip( Whip::CLOUDFLARE_HEADERS | Whip::REMOTE_ADDR, [
117
			Whip::CLOUDFLARE_HEADERS => [
118
				Whip::IPV4 => $cloudflareIps['v4'],
119
				Whip::IPV6 => $cloudflareIps['v6'],
120
			],
121
		]))->getValidIpAddress();
122
	}
123
124
	/**
125
	 * Get a value from an array of values using a dot-notation path as reference
126
	 * @param string $path
127
	 * @param mixed $fallback
128
	 * @return void|mixed
129
	 */
130 7
	public function getPathValue( $path = '', $fallback, array $values )
131
	{
132 7
		$keys = explode( '.', $path );
133 7
		foreach( $keys as $key ) {
134 7
			if( !isset( $values[$key] )) {
135 7
				return $fallback;
136
			}
137 7
			$values = $values[$key];
138
		}
139 7
		return $values;
140
	}
141
142
	/**
143
	 * @param mixed $array
144
	 * @return bool
145
	 */
146
	public function isIndexedArray( $array )
147
	{
148
		if( !is_array( $array ) || array_filter( $array, 'is_array' )) {
149
			return false;
150
		}
151
		$current = 0;
152
		foreach( array_keys( $array ) as $key ) {
153
			if( $key !== $current ) {
154
				return false;
155
			}
156
			$current++;
157
		}
158
		return true;
159
	}
160
161
	/**
162
	 * @param string $string
163
	 * @param string $prefix
164
	 * @return string
165
	 */
166
	public function prefixString( $string, $prefix = '' )
167
	{
168
		return $prefix.str_replace( $prefix, '', trim( $string ));
169
	}
170
171
	/**
172
	 * Remove empty values from an array
173
	 * @return array
174
	 */
175 7
	public function removeEmptyArrayValues( array $array )
176
	{
177 7
		$result = [];
178 7
		foreach( $array as $key => $value ) {
179 7
			if( !$value )continue;
180 7
			$result[$key] = is_array( $value )
181 1
				? $this->removeEmptyArrayValues( $value )
182 7
				: $value;
183
		}
184 7
		return $result;
185
	}
186
187
	/**
188
	 * Set a value to an array of values using a dot-notation path as reference
189
	 * @param string $path
190
	 * @param mixed $value
191
	 * @return array
192
	 */
193 7
	public function setPathValue( $path, $value, array $values )
194
	{
195 7
		$token = strtok( $path, '.' );
196 7
		$ref = &$values;
197 7
		while( $token !== false ) {
198 7
			$ref = is_array( $ref )
199 7
				? $ref
200 7
				: [];
201 7
			$ref = &$ref[$token];
202 7
			$token = strtok( '.' );
203
		}
204 7
		$ref = $value;
205 7
		return $values;
206
	}
207
208
	/**
209
	 * @param string $string
210
	 * @return string
211
	 */
212 7
	public function snakeCase( $string )
213
	{
214 7
		if( !ctype_lower( $string )) {
215 7
			$string = preg_replace( '/\s+/u', '', $string );
216 7
			$string = preg_replace( '/(.)(?=[A-Z])/u', '$1_', $string );
217 7
			$string = mb_strtolower( $string, 'UTF-8' );
218
		}
219 7
		return str_replace( '-', '_', $string );
220
	}
221
222
	/**
223
	 * @param string $needle
224
	 * @param string $haystack
225
	 * @return bool
226
	 */
227 7
	public function startsWith( $needle, $haystack )
228
	{
229 7
		return substr( $haystack, 0, strlen( $needle )) === $needle;
230
	}
231
}
232