-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathUtils.php
104 lines (87 loc) · 2.43 KB
/
Utils.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
<?php
namespace Mathielen\ImportEngineBundle;
class Utils
{
/**
* @return array
*/
public static function parseSourceId($sourceId)
{
if (is_file($sourceId)) {
return $sourceId;
} elseif (preg_match('/^[a-zA-Z0-9]+(\.[a-zA-Z0-9]+)+/', $sourceId)) {
$parsedSourceId = parse_url($sourceId);
if (isset($parsedSourceId['query'])) {
parse_str($parsedSourceId['query'], $parsedSourceId['query']);
}
$pathTokens = explode('.', $parsedSourceId['path']);
$method = array_pop($pathTokens);
$service = implode('.', $pathTokens);
return array(
'service' => $service,
'method' => $method,
'arguments' => isset($parsedSourceId['query']) ? $parsedSourceId['query'] : null,
);
}
return $sourceId;
}
/**
* @return bool
*/
public static function isWindows()
{
return strtoupper(substr(PHP_OS, 0, 3)) === 'WIN';
}
/**
* @return bool
*/
public static function isCli()
{
return php_sapi_name() == 'cli';
}
/**
* @return string
*/
public static function whoAmI()
{
if (self::isWindows()) {
$user = getenv('username');
} else {
$processUser = posix_getpwuid(posix_geteuid());
$user = $processUser['name'];
}
return $user;
}
/**
* @return array
*/
public static function numbersToRangeText(array $numbers)
{
if (empty($numbers)) {
return [];
}
$ranges = [];
sort($numbers);
$currentRange = [];
foreach ($numbers as $number) {
if (!empty($currentRange) && current($currentRange) !== $number - 1) {
self::addRangeText($ranges, $currentRange);
$currentRange = [];
}
$currentRange[] = $number;
end($currentRange);
}
self::addRangeText($ranges, $currentRange);
return $ranges;
}
private static function addRangeText(array &$ranges, array $currentRange)
{
$lastItem = current($currentRange);
if (count($currentRange) === 1) {
$ranges[] = $lastItem;
} else {
$firstItem = reset($currentRange);
$ranges[] = $firstItem.'-'.$lastItem;
}
}
}