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