Completed
Push — 2.x ( 043669...4fa139 )
by Mikaël
65:52 queued 32:03
created

Utils::getContentFromUrl()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 9
ccs 7
cts 7
cp 1
rs 9.6666
c 0
b 0
f 0
cc 2
eloc 6
nc 2
nop 8
crap 2

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

1
<?php
2
3
namespace WsdlToPhp\PackageGenerator\Generator;
4
5
use WsdlToPhp\PackageGenerator\ConfigurationReader\GeneratorOptions;
6
7
class Utils
8
{
9
    /**
10
     * Gets upper case word admong a string from the end or from the beginning part
11
     * @param string $optionValue
12
     * @param string $string the string from which we can extract the part
13
     * @return string
14
     */
15 472
    public static function getPart($optionValue, $string)
16
    {
17 472
        $elementType = '';
18 472
        $string = str_replace('_', '', $string);
19 472
        $string = preg_replace('/([0-9])/', '', $string);
20 472
        if (!empty($string)) {
21
            switch ($optionValue) {
22 472
                case GeneratorOptions::VALUE_END:
23 12
                    $parts = preg_split('/[A-Z]/', ucfirst($string));
24 12
                    $partsCount = count($parts);
25 12
                    if ($partsCount == 0) {
26
                        $elementType = $string;
27 12
                    } elseif (!empty($parts[$partsCount - 1])) {
28 12
                        $elementType = substr($string, strrpos($string, implode('', array_slice($parts, -1))) - 1);
29 9
                    } else {
30
                        for ($i = $partsCount - 1; $i >= 0; $i--) {
31
                            $part = trim($parts[$i]);
32
                            if (!empty($part)) {
33
                                break;
34
                            }
35
                        }
36
                        $elementType = substr($string, ((count($parts) - 2 - $i) + 1) * -1);
37
                    }
38 12
                    break;
39 460
                case GeneratorOptions::VALUE_START:
40 460
                    $parts = preg_split('/[A-Z]/', ucfirst($string));
41 460
                    $partsCount = count($parts);
42 460
                    if ($partsCount == 0) {
43
                        $elementType = $string;
44 460
                    } elseif (empty($parts[0]) && !empty($parts[1])) {
45 460
                        $elementType = substr($string, 0, strlen($parts[1]) + 1);
46 345
                    } else {
47 16
                        for ($i = 0; $i < $partsCount; $i++) {
48 16
                            $part = trim($parts[$i]);
49 16
                            if (!empty($part)) {
50 16
                                break;
51
                            }
52 12
                        }
53 16
                        $elementType = substr($string, 0, $i);
54
                    }
55 460
                    break;
56
                default:
57
                    break;
58
            }
59 354
        }
60 472
        return $elementType;
61
    }
62
    /**
63
     * Get content from url using a proxy or not
64
     * @param string $url
65
     * @param string $basicAuthLogin
66
     * @param string $basicAuthPassword
67
     * @param string $proxyHost
68
     * @param string $proxyPort
69
     * @param string $proxyLogin
70
     * @param string $proxyPassword
71
     * @param array $contextOptions
72
     * @return string
73
     */
74 8
    public static function getContentFromUrl($url, $basicAuthLogin = null, $basicAuthPassword = null, $proxyHost = null, $proxyPort = null, $proxyLogin = null, $proxyPassword = null, array $contextOptions = array())
75
    {
76 8
        $context = null;
77 8
        $options = self::getContentFromUrlContextOptions($url, $basicAuthLogin, $basicAuthPassword, $proxyHost, $proxyPort, $proxyLogin, $proxyPassword, $contextOptions);
78 8
        if (!empty($options)) {
79 5
            $context = stream_context_create($options);
80 3
        }
81 8
        return file_get_contents($url, false, $context);
82
    }
83
    /**
84
     * @param string $url
85
     * @param string $basicAuthLogin
86
     * @param string $basicAuthPassword
87
     * @param string $proxyHost
88
     * @param string $proxyPort
89
     * @param string $proxyLogin
90
     * @param string $proxyPassword
91
     * @param array $contextOptions
92
     * @return string[]
93
     */
94 24
    public static function getContentFromUrlContextOptions($url, $basicAuthLogin = null, $basicAuthPassword = null, $proxyHost = null, $proxyPort = null, $proxyLogin = null, $proxyPassword = null, array $contextOptions = array())
95
    {
96 24
        $protocol = strpos($url, 'https://') !== false ? 'https' : 'http';
97 24
        $proxyOptions = $basicAuthOptions = array();
98 24
        if (!empty($basicAuthLogin) && !empty($basicAuthPassword)) {
99
            $basicAuthOptions = array(
100
                $protocol => array(
101
                    'header' => array(
102 12
                        sprintf('Authorization: Basic %s', base64_encode(sprintf('%s:%s', $basicAuthLogin, $basicAuthPassword))),
103 9
                    ),
104 9
                ),
105 9
            );
106 9
        }
107 24
        if (!empty($proxyHost)) {
108
            $proxyOptions = array(
109
                $protocol => array(
110 12
                    'proxy' => sprintf('tcp://%s%s', $proxyHost, empty($proxyPort) ? '' : sprintf(':%s', $proxyPort)),
111
                    'header' => array(
112 12
                        sprintf('Proxy-Authorization: Basic %s', base64_encode(sprintf('%s:%s', $proxyLogin, $proxyPassword))),
113 9
                    ),
114 9
                ),
115 9
            );
116 9
        }
117 24
        return array_merge_recursive($contextOptions, $proxyOptions, $basicAuthOptions);
118
    }
119
    /**
120
     * Returns the value with good type
121
     * @param mixed $value the value
122
     * @return mixed
123
     */
124 580
    public static function getValueWithinItsType($value, $knownType = null)
125
    {
126 580
        if (is_int($value) || (!is_null($value) && in_array($knownType, array(
127 580
            'time',
128 435
            'positiveInteger',
129 435
            'unsignedLong',
130 435
            'unsignedInt',
131 435
            'short',
132 435
            'long',
133 435
            'int',
134 435
            'integer',
135 580
        ), true))) {
136 8
            return intval($value);
137 580
        } elseif (is_float($value) || (!is_null($value) && in_array($knownType, array(
138 580
            'float',
139 435
            'double',
140 435
            'decimal',
141 580
        ), true))) {
142
            return floatval($value);
143 580
        } elseif (is_bool($value) || (!is_null($value) && in_array($knownType, array(
144 580
            'bool',
145 435
            'boolean',
146 580
        ), true))) {
147 108
            return ($value === 'true' || $value === true || $value === 1 || $value === '1');
148
        }
149 564
        return $value;
150
    }
151
    /**
152
     * @param string $origin
153
     * @param string $destination
154
     * @return string
155
     */
156 188
    public static function resolveCompletePath($origin, $destination)
157
    {
158 188
        $resolvedPath = $destination;
159 188
        if (!empty($destination) && strpos($destination, 'http://') === false && strpos($destination, 'https://') === false && !empty($origin)) {
160 188
            if (substr($destination, 0, 2) === './') {
161 8
                $destination = substr($destination, 2);
162 6
            }
163 188
            $destinationParts = explode('/', $destination);
164 188
            $fileParts = pathinfo($origin);
165 188
            $fileBasename = (is_array($fileParts) && array_key_exists('basename', $fileParts)) ? $fileParts['basename'] : '';
166 188
            $parts = parse_url(str_replace('/' . $fileBasename, '', $origin));
167 188
            $scheme = (is_array($parts) && array_key_exists('scheme', $parts)) ? $parts['scheme'] : '';
168 188
            $host = (is_array($parts) && array_key_exists('host', $parts)) ? $parts['host'] : '';
169 188
            $path = (is_array($parts) && array_key_exists('path', $parts)) ? $parts['path'] : '';
170 188
            $path = str_replace('/' . $fileBasename, '', $path);
171 188
            $pathParts = explode('/', $path);
172 188
            $finalPath = implode('/', $pathParts);
173 188
            foreach ($destinationParts as $locationPart) {
174 188
                if ($locationPart == '..') {
175 8
                    $finalPath = substr($finalPath, 0, strrpos($finalPath, '/', 0));
176 6
                } else {
177 188
                    $finalPath .= '/' . $locationPart;
178
                }
179 141
            }
180 188
            $port = (is_array($parts) && array_key_exists('port', $parts)) ? $parts['port'] : '';
181
            /**
182
             * Remote file
183
             */
184 188
            if (!empty($scheme) && !empty($host)) {
185 4
                $resolvedPath = str_replace('urn', 'http', $scheme) . '://' . $host . (!empty($port) ? ':' . $port : '') . str_replace('//', '/', $finalPath);
186 187
            } elseif (empty($scheme) && empty($host) && count($pathParts)) {
187
                /**
188
                 * Local file
189
                 */
190 184
                if (is_file($finalPath)) {
191 184
                    $resolvedPath = $finalPath;
192 138
                }
193 138
            }
194 141
        }
195 188
        return $resolvedPath;
196
    }
197
    /**
198
     * Clean comment
199
     * @param string $comment the comment to clean
200
     * @param string $glueSeparator ths string to use when gathering values
201
     * @param bool $uniqueValues indicates if comment values must be unique or not
202
     * @return string
203
     */
204 136
    public static function cleanComment($comment, $glueSeparator = ',', $uniqueValues = true)
205
    {
206 136
        if (!is_scalar($comment) && !is_array($comment)) {
207 4
            return '';
208
        }
209 132
        return trim(str_replace('*/', '*[:slash:]', is_scalar($comment) ? $comment : implode($glueSeparator, $uniqueValues ? array_unique($comment) : $comment)));
210
    }
211
    /**
212
     * Clean a string to make it valid as PHP variable
213
     * See more about the used regular expression at {@link http://www.regular-expressions.info/unicode.html}:
214
     * - \p{L} for any valid letter
215
     * - \p{N} for any valid number
216
     * - /u for suporting unicode
217
     * @param string $string the string to clean
218
     * @param bool $keepMultipleUnderscores optional, allows to keep the multiple consecutive underscores
219
     * @return string
220
     */
221 532
    public static function cleanString($string, $keepMultipleUnderscores = true)
222
    {
223 532
        $cleanedString = preg_replace('/[^\p{L}\p{N}_]/u', '_', $string);
224 532
        if (!$keepMultipleUnderscores) {
225 96
            $cleanedString = preg_replace('/[_]+/', '_', $cleanedString);
226 72
        }
227 532
        return $cleanedString;
228
    }
229
    /**
230
     * @param string $namespacedClassName
231
     * @return string
232
     */
233 196
    public static function removeNamespace($namespacedClassName)
234
    {
235 196
        $elements = explode('\\', $namespacedClassName);
236 196
        return (string) array_pop($elements);
237
    }
238
    /**
239
     * @param string $directory
240
     * @param int $permissions
241
     * @return bool
242
     */
243 220
    public static function createDirectory($directory, $permissions = 0775)
244
    {
245 220
        if (!is_dir($directory)) {
246 44
            mkdir($directory, $permissions, true);
247 33
        }
248 220
        return true;
249
    }
250
}
251