Completed
Push — 1.x ( d5da2a...9204c0 )
by Mikaël
76:43 queued 56:16
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::getStreamContextOptions($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 $basicAuthLogin
85
     * @param string $basicAuthPassword
86
     * @param string $proxyHost
87
     * @param string $proxyPort
88
     * @param string $proxyLogin
89
     * @param string $proxyPassword
90
     * @param array $contextOptions
91
     * @return string[]
92
     */
93 24
    public static function getStreamContextOptions($basicAuthLogin = null, $basicAuthPassword = null, $proxyHost = null, $proxyPort = null, $proxyLogin = null, $proxyPassword = null, array $contextOptions = array())
94
    {
95 24
        $proxyOptions = $basicAuthOptions = array();
96 24
        if (!empty($basicAuthLogin) && !empty($basicAuthPassword)) {
97
            $basicAuthOptions = array(
98
                'http' => array(
99
                    'header' => array(
100 12
                        sprintf('Authorization: Basic %s', base64_encode(sprintf('%s:%s', $basicAuthLogin, $basicAuthPassword))),
101 9
                    ),
102 9
                ),
103 9
            );
104 9
        }
105 24
        if (!empty($proxyHost)) {
106
            $proxyOptions = array(
107
                'http' => array(
108 12
                    'proxy' => sprintf('tcp://%s%s', $proxyHost, empty($proxyPort) ? '' : sprintf(':%s', $proxyPort)),
109
                    'header' => array(
110 12
                        sprintf('Proxy-Authorization: Basic %s', base64_encode(sprintf('%s:%s', $proxyLogin, $proxyPassword))),
111 9
                    ),
112 9
                ),
113 9
            );
114 9
        }
115 24
        return array_merge_recursive($contextOptions, $proxyOptions, $basicAuthOptions);
116
    }
117
    /**
118
     * Returns the value with good type
119
     * @param mixed $value the value
120
     * @param string $knownType the value
121
     * @return mixed
122
     */
123 580
    public static function getValueWithinItsType($value, $knownType = null)
124
    {
125 580
        if (is_int($value) || (!is_null($value) && in_array($knownType, array(
126 580
            'time',
127 435
            'positiveInteger',
128 435
            'unsignedLong',
129 435
            'unsignedInt',
130 435
            'short',
131 435
            'long',
132 435
            'int',
133 435
            'integer',
134 580
        ), true))) {
135 8
            return intval($value);
136 580
        } elseif (is_float($value) || (!is_null($value) && in_array($knownType, array(
137 580
            'float',
138 435
            'double',
139 435
            'decimal',
140 580
        ), true))) {
141
            return floatval($value);
142 580
        } elseif (is_bool($value) || (!is_null($value) && in_array($knownType, array(
143 580
            'bool',
144 435
            'boolean',
145 580
        ), true))) {
146 108
            return ($value === 'true' || $value === true || $value === 1 || $value === '1');
147
        }
148 564
        return $value;
149
    }
150
    /**
151
     * @param string $origin
152
     * @param string $destination
153
     * @return string
154
     */
155 188
    public static function resolveCompletePath($origin, $destination)
156
    {
157 188
        $resolvedPath = $destination;
158 188
        if (!empty($destination) && strpos($destination, 'http://') === false && strpos($destination, 'https://') === false && !empty($origin)) {
159 188
            if (substr($destination, 0, 2) === './') {
160 8
                $destination = substr($destination, 2);
161 6
            }
162 188
            $destinationParts = explode('/', $destination);
163 188
            $fileParts = pathinfo($origin);
164 188
            $fileBasename = (is_array($fileParts) && array_key_exists('basename', $fileParts)) ? $fileParts['basename'] : '';
165 188
            $parts = parse_url(str_replace('/' . $fileBasename, '', $origin));
166 188
            $scheme = (is_array($parts) && array_key_exists('scheme', $parts)) ? $parts['scheme'] : '';
167 188
            $host = (is_array($parts) && array_key_exists('host', $parts)) ? $parts['host'] : '';
168 188
            $path = (is_array($parts) && array_key_exists('path', $parts)) ? $parts['path'] : '';
169 188
            $path = str_replace('/' . $fileBasename, '', $path);
170 188
            $pathParts = explode('/', $path);
171 188
            $finalPath = implode('/', $pathParts);
172 188
            foreach ($destinationParts as $locationPart) {
173 188
                if ($locationPart == '..') {
174 8
                    $finalPath = substr($finalPath, 0, strrpos($finalPath, '/', 0));
175 6
                } else {
176 188
                    $finalPath .= '/' . $locationPart;
177
                }
178 141
            }
179 188
            $port = (is_array($parts) && array_key_exists('port', $parts)) ? $parts['port'] : '';
180
            /**
181
             * Remote file
182
             */
183 188
            if (!empty($scheme) && !empty($host)) {
184 4
                $resolvedPath = str_replace('urn', 'http', $scheme) . '://' . $host . (!empty($port) ? ':' . $port : '') . str_replace('//', '/', $finalPath);
185 187
            } elseif (empty($scheme) && empty($host) && count($pathParts)) {
186
                /**
187
                 * Local file
188
                 */
189 184
                if (is_file($finalPath)) {
190 184
                    $resolvedPath = $finalPath;
191 138
                }
192 138
            }
193 141
        }
194 188
        return $resolvedPath;
195
    }
196
    /**
197
     * Clean comment
198
     * @param string $comment the comment to clean
199
     * @param string $glueSeparator ths string to use when gathering values
200
     * @param bool $uniqueValues indicates if comment values must be unique or not
201
     * @return string
202
     */
203 136
    public static function cleanComment($comment, $glueSeparator = ',', $uniqueValues = true)
204
    {
205 136
        if (!is_scalar($comment) && !is_array($comment)) {
206 4
            return '';
207
        }
208 132
        return trim(str_replace('*/', '*[:slash:]', is_scalar($comment) ? $comment : implode($glueSeparator, $uniqueValues ? array_unique($comment) : $comment)));
209
    }
210
    /**
211
     * Clean a string to make it valid as PHP variable
212
     * See more about the used regular expression at {@link http://www.regular-expressions.info/unicode.html}:
213
     * - \p{L} for any valid letter
214
     * - \p{N} for any valid number
215
     * - /u for suporting unicode
216
     * @param string $string the string to clean
217
     * @param bool $keepMultipleUnderscores optional, allows to keep the multiple consecutive underscores
218
     * @return string
219
     */
220 532
    public static function cleanString($string, $keepMultipleUnderscores = true)
221
    {
222 532
        $cleanedString = preg_replace('/[^\p{L}\p{N}_]/u', '_', $string);
223 532
        if (!$keepMultipleUnderscores) {
224 96
            $cleanedString = preg_replace('/[_]+/', '_', $cleanedString);
225 72
        }
226 532
        return $cleanedString;
227
    }
228
    /**
229
     * @param string $namespacedClassName
230
     * @return string
231
     */
232 196
    public static function removeNamespace($namespacedClassName)
233
    {
234 196
        $elements = explode('\\', $namespacedClassName);
235 196
        return (string) array_pop($elements);
236
    }
237
    /**
238
     * @param string $directory
239
     * @param int $permissions
240
     * @return bool
241
     */
242 220
    public static function createDirectory($directory, $permissions = 0775)
243
    {
244 220
        if (!is_dir($directory)) {
245 44
            mkdir($directory, $permissions, true);
246 33
        }
247 220
        return true;
248
    }
249
}
250