aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--README.md11
-rw-r--r--application/ApplicationUtils.php45
-rw-r--r--application/Updater.php44
-rw-r--r--composer.lock2424
-rw-r--r--index.php15
-rw-r--r--shaarli_version.php2
-rw-r--r--tests/ApplicationUtilsTest.php49
8 files changed, 2562 insertions, 29 deletions
diff --git a/.gitignore b/.gitignore
index e64c8a4b..984d9d1f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,7 +13,6 @@ pagecache
13*.rtpl.php 13*.rtpl.php
14 14
15# 3rd-party dependencies 15# 3rd-party dependencies
16composer.lock
17vendor/ 16vendor/
18 17
19# Release archives 18# Release archives
diff --git a/README.md b/README.md
index db1b901f..cfdefc66 100644
--- a/README.md
+++ b/README.md
@@ -6,13 +6,18 @@ _Do you want to share the links you discover?_
6_Shaarli is a minimalist delicious clone that you can install on your own server._ 6_Shaarli is a minimalist delicious clone that you can install on your own server._
7_It is designed to be personal (single-user), fast and handy._ 7_It is designed to be personal (single-user), fast and handy._
8 8
9[![](https://img.shields.io/travis/shaarli/Shaarli.svg?label=master)](https://travis-ci.org/shaarli/Shaarli) 9[![](https://img.shields.io/badge/stable-v0.7.1-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.7.1)
10[![](https://img.shields.io/travis/shaarli/Shaarli/stable.svg?label=stable)](https://travis-ci.org/shaarli/Shaarli) 10[![](https://img.shields.io/travis/shaarli/Shaarli/stable.svg?label=stable)](https://travis-ci.org/shaarli/Shaarli)
11[![](https://img.shields.io/github/release/shaarli/shaarli.svg)](https://github.com/shaarli/Shaarli/releases/latest/) 11•
12[![Docker repository](https://img.shields.io/docker/pulls/shaarli/shaarli.svg)](https://hub.docker.com/r/shaarli/shaarli/) 12[![](https://img.shields.io/badge/latest-v0.8.4-blue.svg)](https://github.com/shaarli/Shaarli/releases/tag/v0.8.4)
13[![](https://img.shields.io/travis/shaarli/Shaarli/latest.svg?label=latest)](https://travis-ci.org/shaarli/Shaarli)
14•
15[![](https://img.shields.io/badge/master-v0.9.x-blue.svg)](https://github.com/shaarli/Shaarli)
16[![](https://img.shields.io/travis/shaarli/Shaarli.svg?label=master)](https://travis-ci.org/shaarli/Shaarli)
13 17
14[![Join the chat at https://gitter.im/shaarli/Shaarli](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/shaarli/Shaarli) 18[![Join the chat at https://gitter.im/shaarli/Shaarli](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/shaarli/Shaarli)
15[![Bountysource](https://www.bountysource.com/badge/team?team_id=19583&style=bounties_received)](https://www.bountysource.com/teams/shaarli/issues) 19[![Bountysource](https://www.bountysource.com/badge/team?team_id=19583&style=bounties_received)](https://www.bountysource.com/teams/shaarli/issues)
20[![Docker repository](https://img.shields.io/docker/pulls/shaarli/shaarli.svg)](https://hub.docker.com/r/shaarli/shaarli/)
16 21
17## Quickstart 22## Quickstart
18- [Wiki/documentation](https://github.com/shaarli/Shaarli/wiki) 23- [Wiki/documentation](https://github.com/shaarli/Shaarli/wiki)
diff --git a/application/ApplicationUtils.php b/application/ApplicationUtils.php
index a0f482b0..85dcbeeb 100644
--- a/application/ApplicationUtils.php
+++ b/application/ApplicationUtils.php
@@ -4,9 +4,13 @@
4 */ 4 */
5class ApplicationUtils 5class ApplicationUtils
6{ 6{
7 /**
8 * @var string File containing the current version
9 */
10 public static $VERSION_FILE = 'shaarli_version.php';
11
7 private static $GIT_URL = 'https://raw.githubusercontent.com/shaarli/Shaarli'; 12 private static $GIT_URL = 'https://raw.githubusercontent.com/shaarli/Shaarli';
8 private static $GIT_BRANCHES = array('master', 'stable'); 13 private static $GIT_BRANCHES = array('latest', 'stable');
9 private static $VERSION_FILE = 'shaarli_version.php';
10 private static $VERSION_START_TAG = '<?php /* '; 14 private static $VERSION_START_TAG = '<?php /* ';
11 private static $VERSION_END_TAG = ' */ ?>'; 15 private static $VERSION_END_TAG = ' */ ?>';
12 16
@@ -29,6 +33,30 @@ class ApplicationUtils
29 return false; 33 return false;
30 } 34 }
31 35
36 return $data;
37 }
38
39 /**
40 * Retrieve the version from a remote URL or a file.
41 *
42 * @param string $remote URL or file to fetch.
43 * @param int $timeout For URLs fetching.
44 *
45 * @return bool|string The version or false if it couldn't be retrieved.
46 */
47 public static function getVersion($remote, $timeout = 2)
48 {
49 if (startsWith($remote, 'http')) {
50 if (($data = static::getLatestGitVersionCode($remote, $timeout)) === false) {
51 return false;
52 }
53 } else {
54 if (! is_file($remote)) {
55 return false;
56 }
57 $data = file_get_contents($remote);
58 }
59
32 return str_replace( 60 return str_replace(
33 array(self::$VERSION_START_TAG, self::$VERSION_END_TAG, PHP_EOL), 61 array(self::$VERSION_START_TAG, self::$VERSION_END_TAG, PHP_EOL),
34 array('', '', ''), 62 array('', '', ''),
@@ -65,13 +93,10 @@ class ApplicationUtils
65 $isLoggedIn, 93 $isLoggedIn,
66 $branch='stable') 94 $branch='stable')
67 { 95 {
68 if (! $isLoggedIn) { 96 // Do not check versions for visitors
69 // Do not check versions for visitors 97 // Do not check if the user doesn't want to
70 return false; 98 // Do not check with dev version
71 } 99 if (! $isLoggedIn || empty($enableCheck) || $currentVersion === 'dev') {
72
73 if (empty($enableCheck)) {
74 // Do not check if the user doesn't want to
75 return false; 100 return false;
76 } 101 }
77 102
@@ -93,7 +118,7 @@ class ApplicationUtils
93 118
94 // Late Static Binding allows overriding within tests 119 // Late Static Binding allows overriding within tests
95 // See http://php.net/manual/en/language.oop5.late-static-bindings.php 120 // See http://php.net/manual/en/language.oop5.late-static-bindings.php
96 $latestVersion = static::getLatestGitVersionCode( 121 $latestVersion = static::getVersion(
97 self::$GIT_URL . '/' . $branch . '/' . self::$VERSION_FILE 122 self::$GIT_URL . '/' . $branch . '/' . self::$VERSION_FILE
98 ); 123 );
99 124
diff --git a/application/Updater.php b/application/Updater.php
index efbfc832..0fb68c5a 100644
--- a/application/Updater.php
+++ b/application/Updater.php
@@ -396,6 +396,50 @@ class Updater
396 396
397 return true; 397 return true;
398 } 398 }
399
400 /**
401 * Update updates.check_updates_branch setting.
402 *
403 * If the current major version digit matches the latest branch
404 * major version digit, we set the branch to `latest`,
405 * otherwise we'll check updates on the `stable` branch.
406 *
407 * No update required for the dev version.
408 *
409 * Note: due to hardcoded URL and lack of dependency injection, this is not unit testable.
410 *
411 * FIXME! This needs to be removed when we switch to first digit major version
412 * instead of the second one since the versionning process will change.
413 */
414 public function updateMethodCheckUpdateRemoteBranch()
415 {
416 if (shaarli_version === 'dev' || $this->conf->get('updates.check_updates_branch') === 'latest') {
417 return true;
418 }
419
420 // Get latest branch major version digit
421 $latestVersion = ApplicationUtils::getLatestGitVersionCode(
422 'https://raw.githubusercontent.com/shaarli/Shaarli/latest/shaarli_version.php',
423 5
424 );
425 if (preg_match('/(\d+)\.\d+$/', $latestVersion, $matches) === false) {
426 return false;
427 }
428 $latestMajor = $matches[1];
429
430 // Get current major version digit
431 preg_match('/(\d+)\.\d+$/', shaarli_version, $matches);
432 $currentMajor = $matches[1];
433
434 if ($currentMajor === $latestMajor) {
435 $branch = 'latest';
436 } else {
437 $branch = 'stable';
438 }
439 $this->conf->set('updates.check_updates_branch', $branch);
440 $this->conf->write($this->isLoggedIn);
441 return true;
442 }
399} 443}
400 444
401/** 445/**
diff --git a/composer.lock b/composer.lock
new file mode 100644
index 00000000..b285fcc9
--- /dev/null
+++ b/composer.lock
@@ -0,0 +1,2424 @@
1{
2 "_readme": [
3 "This file locks the dependencies of your project to a known state",
4 "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
5 "This file is @generated automatically"
6 ],
7 "content-hash": "ffcfc8e42f14183de6ef90874429e77a",
8 "packages": [
9 {
10 "name": "container-interop/container-interop",
11 "version": "1.2.0",
12 "source": {
13 "type": "git",
14 "url": "https://github.com/container-interop/container-interop.git",
15 "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8"
16 },
17 "dist": {
18 "type": "zip",
19 "url": "https://api.github.com/repos/container-interop/container-interop/zipball/79cbf1341c22ec75643d841642dd5d6acd83bdb8",
20 "reference": "79cbf1341c22ec75643d841642dd5d6acd83bdb8",
21 "shasum": ""
22 },
23 "require": {
24 "psr/container": "^1.0"
25 },
26 "type": "library",
27 "autoload": {
28 "psr-4": {
29 "Interop\\Container\\": "src/Interop/Container/"
30 }
31 },
32 "notification-url": "https://packagist.org/downloads/",
33 "license": [
34 "MIT"
35 ],
36 "description": "Promoting the interoperability of container objects (DIC, SL, etc.)",
37 "homepage": "https://github.com/container-interop/container-interop",
38 "time": "2017-02-14T19:40:03+00:00"
39 },
40 {
41 "name": "erusev/parsedown",
42 "version": "1.6.0",
43 "source": {
44 "type": "git",
45 "url": "https://github.com/erusev/parsedown.git",
46 "reference": "3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7"
47 },
48 "dist": {
49 "type": "zip",
50 "url": "https://api.github.com/repos/erusev/parsedown/zipball/3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7",
51 "reference": "3ebbd730b5c2cf5ce78bc1bf64071407fc6674b7",
52 "shasum": ""
53 },
54 "type": "library",
55 "autoload": {
56 "psr-0": {
57 "Parsedown": ""
58 }
59 },
60 "notification-url": "https://packagist.org/downloads/",
61 "license": [
62 "MIT"
63 ],
64 "authors": [
65 {
66 "name": "Emanuil Rusev",
67 "email": "hello@erusev.com",
68 "homepage": "http://erusev.com"
69 }
70 ],
71 "description": "Parser for Markdown.",
72 "homepage": "http://parsedown.org",
73 "keywords": [
74 "markdown",
75 "parser"
76 ],
77 "time": "2015-10-04T16:44:32+00:00"
78 },
79 {
80 "name": "katzgrau/klogger",
81 "version": "1.2.1",
82 "source": {
83 "type": "git",
84 "url": "https://github.com/katzgrau/KLogger.git",
85 "reference": "a4ed373fa8a214aa4ae7aa4f221fe2c6ce862ef1"
86 },
87 "dist": {
88 "type": "zip",
89 "url": "https://api.github.com/repos/katzgrau/KLogger/zipball/a4ed373fa8a214aa4ae7aa4f221fe2c6ce862ef1",
90 "reference": "a4ed373fa8a214aa4ae7aa4f221fe2c6ce862ef1",
91 "shasum": ""
92 },
93 "require": {
94 "php": ">=5.3",
95 "psr/log": "^1.0.0"
96 },
97 "require-dev": {
98 "phpunit/phpunit": "4.0.*"
99 },
100 "type": "library",
101 "autoload": {
102 "psr-4": {
103 "Katzgrau\\KLogger\\": "src/"
104 },
105 "classmap": [
106 "src/"
107 ]
108 },
109 "notification-url": "https://packagist.org/downloads/",
110 "license": [
111 "MIT"
112 ],
113 "authors": [
114 {
115 "name": "Kenny Katzgrau",
116 "email": "katzgrau@gmail.com"
117 },
118 {
119 "name": "Dan Horrigan",
120 "email": "dan@dhorrigan.com"
121 }
122 ],
123 "description": "A Simple Logging Class",
124 "keywords": [
125 "logging"
126 ],
127 "time": "2016-11-07T19:29:14+00:00"
128 },
129 {
130 "name": "nikic/fast-route",
131 "version": "v1.2.0",
132 "source": {
133 "type": "git",
134 "url": "https://github.com/nikic/FastRoute.git",
135 "reference": "b5f95749071c82a8e0f58586987627054400cdf6"
136 },
137 "dist": {
138 "type": "zip",
139 "url": "https://api.github.com/repos/nikic/FastRoute/zipball/b5f95749071c82a8e0f58586987627054400cdf6",
140 "reference": "b5f95749071c82a8e0f58586987627054400cdf6",
141 "shasum": ""
142 },
143 "require": {
144 "php": ">=5.4.0"
145 },
146 "type": "library",
147 "autoload": {
148 "psr-4": {
149 "FastRoute\\": "src/"
150 },
151 "files": [
152 "src/functions.php"
153 ]
154 },
155 "notification-url": "https://packagist.org/downloads/",
156 "license": [
157 "BSD-3-Clause"
158 ],
159 "authors": [
160 {
161 "name": "Nikita Popov",
162 "email": "nikic@php.net"
163 }
164 ],
165 "description": "Fast request router for PHP",
166 "keywords": [
167 "router",
168 "routing"
169 ],
170 "time": "2017-01-19T11:35:12+00:00"
171 },
172 {
173 "name": "pimple/pimple",
174 "version": "v3.0.2",
175 "source": {
176 "type": "git",
177 "url": "https://github.com/silexphp/Pimple.git",
178 "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a"
179 },
180 "dist": {
181 "type": "zip",
182 "url": "https://api.github.com/repos/silexphp/Pimple/zipball/a30f7d6e57565a2e1a316e1baf2a483f788b258a",
183 "reference": "a30f7d6e57565a2e1a316e1baf2a483f788b258a",
184 "shasum": ""
185 },
186 "require": {
187 "php": ">=5.3.0"
188 },
189 "type": "library",
190 "extra": {
191 "branch-alias": {
192 "dev-master": "3.0.x-dev"
193 }
194 },
195 "autoload": {
196 "psr-0": {
197 "Pimple": "src/"
198 }
199 },
200 "notification-url": "https://packagist.org/downloads/",
201 "license": [
202 "MIT"
203 ],
204 "authors": [
205 {
206 "name": "Fabien Potencier",
207 "email": "fabien@symfony.com"
208 }
209 ],
210 "description": "Pimple, a simple Dependency Injection Container",
211 "homepage": "http://pimple.sensiolabs.org",
212 "keywords": [
213 "container",
214 "dependency injection"
215 ],
216 "time": "2015-09-11T15:10:35+00:00"
217 },
218 {
219 "name": "psr/container",
220 "version": "1.0.0",
221 "source": {
222 "type": "git",
223 "url": "https://github.com/php-fig/container.git",
224 "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f"
225 },
226 "dist": {
227 "type": "zip",
228 "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
229 "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f",
230 "shasum": ""
231 },
232 "require": {
233 "php": ">=5.3.0"
234 },
235 "type": "library",
236 "extra": {
237 "branch-alias": {
238 "dev-master": "1.0.x-dev"
239 }
240 },
241 "autoload": {
242 "psr-4": {
243 "Psr\\Container\\": "src/"
244 }
245 },
246 "notification-url": "https://packagist.org/downloads/",
247 "license": [
248 "MIT"
249 ],
250 "authors": [
251 {
252 "name": "PHP-FIG",
253 "homepage": "http://www.php-fig.org/"
254 }
255 ],
256 "description": "Common Container Interface (PHP FIG PSR-11)",
257 "homepage": "https://github.com/php-fig/container",
258 "keywords": [
259 "PSR-11",
260 "container",
261 "container-interface",
262 "container-interop",
263 "psr"
264 ],
265 "time": "2017-02-14T16:28:37+00:00"
266 },
267 {
268 "name": "psr/http-message",
269 "version": "1.0.1",
270 "source": {
271 "type": "git",
272 "url": "https://github.com/php-fig/http-message.git",
273 "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363"
274 },
275 "dist": {
276 "type": "zip",
277 "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363",
278 "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363",
279 "shasum": ""
280 },
281 "require": {
282 "php": ">=5.3.0"
283 },
284 "type": "library",
285 "extra": {
286 "branch-alias": {
287 "dev-master": "1.0.x-dev"
288 }
289 },
290 "autoload": {
291 "psr-4": {
292 "Psr\\Http\\Message\\": "src/"
293 }
294 },
295 "notification-url": "https://packagist.org/downloads/",
296 "license": [
297 "MIT"
298 ],
299 "authors": [
300 {
301 "name": "PHP-FIG",
302 "homepage": "http://www.php-fig.org/"
303 }
304 ],
305 "description": "Common interface for HTTP messages",
306 "homepage": "https://github.com/php-fig/http-message",
307 "keywords": [
308 "http",
309 "http-message",
310 "psr",
311 "psr-7",
312 "request",
313 "response"
314 ],
315 "time": "2016-08-06T14:39:51+00:00"
316 },
317 {
318 "name": "psr/log",
319 "version": "1.0.2",
320 "source": {
321 "type": "git",
322 "url": "https://github.com/php-fig/log.git",
323 "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d"
324 },
325 "dist": {
326 "type": "zip",
327 "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
328 "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d",
329 "shasum": ""
330 },
331 "require": {
332 "php": ">=5.3.0"
333 },
334 "type": "library",
335 "extra": {
336 "branch-alias": {
337 "dev-master": "1.0.x-dev"
338 }
339 },
340 "autoload": {
341 "psr-4": {
342 "Psr\\Log\\": "Psr/Log/"
343 }
344 },
345 "notification-url": "https://packagist.org/downloads/",
346 "license": [
347 "MIT"
348 ],
349 "authors": [
350 {
351 "name": "PHP-FIG",
352 "homepage": "http://www.php-fig.org/"
353 }
354 ],
355 "description": "Common interface for logging libraries",
356 "homepage": "https://github.com/php-fig/log",
357 "keywords": [
358 "log",
359 "psr",
360 "psr-3"
361 ],
362 "time": "2016-10-10T12:19:37+00:00"
363 },
364 {
365 "name": "pubsubhubbub/publisher",
366 "version": "dev-master",
367 "source": {
368 "type": "git",
369 "url": "https://github.com/pubsubhubbub/php-publisher.git",
370 "reference": "a5d6a0e1cc9d49101c3904480e5b06cbb8addba7"
371 },
372 "dist": {
373 "type": "zip",
374 "url": "https://api.github.com/repos/pubsubhubbub/php-publisher/zipball/a5d6a0e1cc9d49101c3904480e5b06cbb8addba7",
375 "reference": "a5d6a0e1cc9d49101c3904480e5b06cbb8addba7",
376 "shasum": ""
377 },
378 "require": {
379 "php": "~5.4 || ~7.0"
380 },
381 "type": "library",
382 "autoload": {
383 "psr-4": {
384 "pubsubhubbub\\publisher\\": "library/"
385 }
386 },
387 "notification-url": "https://packagist.org/downloads/",
388 "license": [
389 "Apache-2.0"
390 ],
391 "authors": [
392 {
393 "name": "pubsubhubbub publisher Contributors",
394 "homepage": "https://github.com/pubsubhubbub/php-publisher/contributors"
395 }
396 ],
397 "description": "pubsubhubbub implementation of publisher.",
398 "homepage": "https://github.com/pubsubhubbub/php-publisher",
399 "keywords": [
400 "data",
401 "feeds",
402 "publishers",
403 "pubsubhubbub"
404 ],
405 "time": "2016-11-15 06:24:01"
406 },
407 {
408 "name": "shaarli/netscape-bookmark-parser",
409 "version": "v2.0.1",
410 "source": {
411 "type": "git",
412 "url": "https://github.com/shaarli/netscape-bookmark-parser.git",
413 "reference": "b65c7235d490bd933cdd5f71520dae656253adb9"
414 },
415 "dist": {
416 "type": "zip",
417 "url": "https://api.github.com/repos/shaarli/netscape-bookmark-parser/zipball/b65c7235d490bd933cdd5f71520dae656253adb9",
418 "reference": "b65c7235d490bd933cdd5f71520dae656253adb9",
419 "shasum": ""
420 },
421 "require": {
422 "katzgrau/klogger": "~1.0",
423 "php": ">=5.3.4"
424 },
425 "require-dev": {
426 "phpunit/phpunit": "4.8.*"
427 },
428 "type": "library",
429 "autoload": {
430 "files": [
431 "NetscapeBookmarkParser.php"
432 ]
433 },
434 "notification-url": "https://packagist.org/downloads/",
435 "license": [
436 "MIT"
437 ],
438 "authors": [
439 {
440 "name": "Kafene",
441 "email": "io@kafene.org",
442 "homepage": "https://github.com/kafene",
443 "role": "Developer"
444 },
445 {
446 "name": "VirtualTam",
447 "email": "virtualtam@flibidi.net",
448 "homepage": "https://github.com/virtualtam",
449 "role": "Developer"
450 }
451 ],
452 "description": "Generic Netscape bookmark parser",
453 "homepage": "https://github.com/shaarli/netscape-bookmark-parser",
454 "keywords": [
455 "bookmark",
456 "link",
457 "netscape",
458 "parse"
459 ],
460 "time": "2017-03-08T20:11:40+00:00"
461 },
462 {
463 "name": "slim/slim",
464 "version": "3.8.1",
465 "source": {
466 "type": "git",
467 "url": "https://github.com/slimphp/Slim.git",
468 "reference": "5385302707530b2bccee1769613ad769859b826d"
469 },
470 "dist": {
471 "type": "zip",
472 "url": "https://api.github.com/repos/slimphp/Slim/zipball/5385302707530b2bccee1769613ad769859b826d",
473 "reference": "5385302707530b2bccee1769613ad769859b826d",
474 "shasum": ""
475 },
476 "require": {
477 "container-interop/container-interop": "^1.2",
478 "nikic/fast-route": "^1.0",
479 "php": ">=5.5.0",
480 "pimple/pimple": "^3.0",
481 "psr/container": "^1.0",
482 "psr/http-message": "^1.0"
483 },
484 "provide": {
485 "psr/http-message-implementation": "1.0"
486 },
487 "require-dev": {
488 "phpunit/phpunit": "^4.0",
489 "squizlabs/php_codesniffer": "^2.5"
490 },
491 "type": "library",
492 "autoload": {
493 "psr-4": {
494 "Slim\\": "Slim"
495 }
496 },
497 "notification-url": "https://packagist.org/downloads/",
498 "license": [
499 "MIT"
500 ],
501 "authors": [
502 {
503 "name": "Rob Allen",
504 "email": "rob@akrabat.com",
505 "homepage": "http://akrabat.com"
506 },
507 {
508 "name": "Josh Lockhart",
509 "email": "hello@joshlockhart.com",
510 "homepage": "https://joshlockhart.com"
511 },
512 {
513 "name": "Gabriel Manricks",
514 "email": "gmanricks@me.com",
515 "homepage": "http://gabrielmanricks.com"
516 },
517 {
518 "name": "Andrew Smith",
519 "email": "a.smith@silentworks.co.uk",
520 "homepage": "http://silentworks.co.uk"
521 }
522 ],
523 "description": "Slim is a PHP micro framework that helps you quickly write simple yet powerful web applications and APIs",
524 "homepage": "https://slimframework.com",
525 "keywords": [
526 "api",
527 "framework",
528 "micro",
529 "router"
530 ],
531 "time": "2017-03-19T17:55:20+00:00"
532 }
533 ],
534 "packages-dev": [
535 {
536 "name": "doctrine/instantiator",
537 "version": "1.0.5",
538 "source": {
539 "type": "git",
540 "url": "https://github.com/doctrine/instantiator.git",
541 "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d"
542 },
543 "dist": {
544 "type": "zip",
545 "url": "https://api.github.com/repos/doctrine/instantiator/zipball/8e884e78f9f0eb1329e445619e04456e64d8051d",
546 "reference": "8e884e78f9f0eb1329e445619e04456e64d8051d",
547 "shasum": ""
548 },
549 "require": {
550 "php": ">=5.3,<8.0-DEV"
551 },
552 "require-dev": {
553 "athletic/athletic": "~0.1.8",
554 "ext-pdo": "*",
555 "ext-phar": "*",
556 "phpunit/phpunit": "~4.0",
557 "squizlabs/php_codesniffer": "~2.0"
558 },
559 "type": "library",
560 "extra": {
561 "branch-alias": {
562 "dev-master": "1.0.x-dev"
563 }
564 },
565 "autoload": {
566 "psr-4": {
567 "Doctrine\\Instantiator\\": "src/Doctrine/Instantiator/"
568 }
569 },
570 "notification-url": "https://packagist.org/downloads/",
571 "license": [
572 "MIT"
573 ],
574 "authors": [
575 {
576 "name": "Marco Pivetta",
577 "email": "ocramius@gmail.com",
578 "homepage": "http://ocramius.github.com/"
579 }
580 ],
581 "description": "A small, lightweight utility to instantiate objects in PHP without invoking their constructors",
582 "homepage": "https://github.com/doctrine/instantiator",
583 "keywords": [
584 "constructor",
585 "instantiate"
586 ],
587 "time": "2015-06-14T21:17:01+00:00"
588 },
589 {
590 "name": "pdepend/pdepend",
591 "version": "2.5.0",
592 "source": {
593 "type": "git",
594 "url": "https://github.com/pdepend/pdepend.git",
595 "reference": "0c50874333149c0dad5a2877801aed148f2767ff"
596 },
597 "dist": {
598 "type": "zip",
599 "url": "https://api.github.com/repos/pdepend/pdepend/zipball/0c50874333149c0dad5a2877801aed148f2767ff",
600 "reference": "0c50874333149c0dad5a2877801aed148f2767ff",
601 "shasum": ""
602 },
603 "require": {
604 "php": ">=5.3.7",
605 "symfony/config": "^2.3.0|^3",
606 "symfony/dependency-injection": "^2.3.0|^3",
607 "symfony/filesystem": "^2.3.0|^3"
608 },
609 "require-dev": {
610 "phpunit/phpunit": "^4.4.0,<4.8",
611 "squizlabs/php_codesniffer": "^2.0.0"
612 },
613 "bin": [
614 "src/bin/pdepend"
615 ],
616 "type": "library",
617 "autoload": {
618 "psr-4": {
619 "PDepend\\": "src/main/php/PDepend"
620 }
621 },
622 "notification-url": "https://packagist.org/downloads/",
623 "license": [
624 "BSD-3-Clause"
625 ],
626 "description": "Official version of pdepend to be handled with Composer",
627 "time": "2017-01-19T14:23:36+00:00"
628 },
629 {
630 "name": "phpdocumentor/reflection-common",
631 "version": "1.0",
632 "source": {
633 "type": "git",
634 "url": "https://github.com/phpDocumentor/ReflectionCommon.git",
635 "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c"
636 },
637 "dist": {
638 "type": "zip",
639 "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/144c307535e82c8fdcaacbcfc1d6d8eeb896687c",
640 "reference": "144c307535e82c8fdcaacbcfc1d6d8eeb896687c",
641 "shasum": ""
642 },
643 "require": {
644 "php": ">=5.5"
645 },
646 "require-dev": {
647 "phpunit/phpunit": "^4.6"
648 },
649 "type": "library",
650 "extra": {
651 "branch-alias": {
652 "dev-master": "1.0.x-dev"
653 }
654 },
655 "autoload": {
656 "psr-4": {
657 "phpDocumentor\\Reflection\\": [
658 "src"
659 ]
660 }
661 },
662 "notification-url": "https://packagist.org/downloads/",
663 "license": [
664 "MIT"
665 ],
666 "authors": [
667 {
668 "name": "Jaap van Otterdijk",
669 "email": "opensource@ijaap.nl"
670 }
671 ],
672 "description": "Common reflection classes used by phpdocumentor to reflect the code structure",
673 "homepage": "http://www.phpdoc.org",
674 "keywords": [
675 "FQSEN",
676 "phpDocumentor",
677 "phpdoc",
678 "reflection",
679 "static analysis"
680 ],
681 "time": "2015-12-27T11:43:31+00:00"
682 },
683 {
684 "name": "phpdocumentor/reflection-docblock",
685 "version": "3.1.1",
686 "source": {
687 "type": "git",
688 "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git",
689 "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e"
690 },
691 "dist": {
692 "type": "zip",
693 "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e",
694 "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e",
695 "shasum": ""
696 },
697 "require": {
698 "php": ">=5.5",
699 "phpdocumentor/reflection-common": "^1.0@dev",
700 "phpdocumentor/type-resolver": "^0.2.0",
701 "webmozart/assert": "^1.0"
702 },
703 "require-dev": {
704 "mockery/mockery": "^0.9.4",
705 "phpunit/phpunit": "^4.4"
706 },
707 "type": "library",
708 "autoload": {
709 "psr-4": {
710 "phpDocumentor\\Reflection\\": [
711 "src/"
712 ]
713 }
714 },
715 "notification-url": "https://packagist.org/downloads/",
716 "license": [
717 "MIT"
718 ],
719 "authors": [
720 {
721 "name": "Mike van Riel",
722 "email": "me@mikevanriel.com"
723 }
724 ],
725 "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.",
726 "time": "2016-09-30T07:12:33+00:00"
727 },
728 {
729 "name": "phpdocumentor/type-resolver",
730 "version": "0.2.1",
731 "source": {
732 "type": "git",
733 "url": "https://github.com/phpDocumentor/TypeResolver.git",
734 "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb"
735 },
736 "dist": {
737 "type": "zip",
738 "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb",
739 "reference": "e224fb2ea2fba6d3ad6fdaef91cd09a172155ccb",
740 "shasum": ""
741 },
742 "require": {
743 "php": ">=5.5",
744 "phpdocumentor/reflection-common": "^1.0"
745 },
746 "require-dev": {
747 "mockery/mockery": "^0.9.4",
748 "phpunit/phpunit": "^5.2||^4.8.24"
749 },
750 "type": "library",
751 "extra": {
752 "branch-alias": {
753 "dev-master": "1.0.x-dev"
754 }
755 },
756 "autoload": {
757 "psr-4": {
758 "phpDocumentor\\Reflection\\": [
759 "src/"
760 ]
761 }
762 },
763 "notification-url": "https://packagist.org/downloads/",
764 "license": [
765 "MIT"
766 ],
767 "authors": [
768 {
769 "name": "Mike van Riel",
770 "email": "me@mikevanriel.com"
771 }
772 ],
773 "time": "2016-11-25T06:54:22+00:00"
774 },
775 {
776 "name": "phpmd/phpmd",
777 "version": "2.6.0",
778 "source": {
779 "type": "git",
780 "url": "https://github.com/phpmd/phpmd.git",
781 "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374"
782 },
783 "dist": {
784 "type": "zip",
785 "url": "https://api.github.com/repos/phpmd/phpmd/zipball/4e9924b2c157a3eb64395460fcf56b31badc8374",
786 "reference": "4e9924b2c157a3eb64395460fcf56b31badc8374",
787 "shasum": ""
788 },
789 "require": {
790 "ext-xml": "*",
791 "pdepend/pdepend": "^2.5",
792 "php": ">=5.3.9"
793 },
794 "require-dev": {
795 "phpunit/phpunit": "^4.0",
796 "squizlabs/php_codesniffer": "^2.0"
797 },
798 "bin": [
799 "src/bin/phpmd"
800 ],
801 "type": "project",
802 "autoload": {
803 "psr-0": {
804 "PHPMD\\": "src/main/php"
805 }
806 },
807 "notification-url": "https://packagist.org/downloads/",
808 "license": [
809 "BSD-3-Clause"
810 ],
811 "authors": [
812 {
813 "name": "Manuel Pichler",
814 "email": "github@manuel-pichler.de",
815 "homepage": "https://github.com/manuelpichler",
816 "role": "Project Founder"
817 },
818 {
819 "name": "Other contributors",
820 "homepage": "https://github.com/phpmd/phpmd/graphs/contributors",
821 "role": "Contributors"
822 },
823 {
824 "name": "Marc Würth",
825 "email": "ravage@bluewin.ch",
826 "homepage": "https://github.com/ravage84",
827 "role": "Project Maintainer"
828 }
829 ],
830 "description": "PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD.",
831 "homepage": "http://phpmd.org/",
832 "keywords": [
833 "mess detection",
834 "mess detector",
835 "pdepend",
836 "phpmd",
837 "pmd"
838 ],
839 "time": "2017-01-20T14:41:10+00:00"
840 },
841 {
842 "name": "phpspec/prophecy",
843 "version": "v1.7.0",
844 "source": {
845 "type": "git",
846 "url": "https://github.com/phpspec/prophecy.git",
847 "reference": "93d39f1f7f9326d746203c7c056f300f7f126073"
848 },
849 "dist": {
850 "type": "zip",
851 "url": "https://api.github.com/repos/phpspec/prophecy/zipball/93d39f1f7f9326d746203c7c056f300f7f126073",
852 "reference": "93d39f1f7f9326d746203c7c056f300f7f126073",
853 "shasum": ""
854 },
855 "require": {
856 "doctrine/instantiator": "^1.0.2",
857 "php": "^5.3|^7.0",
858 "phpdocumentor/reflection-docblock": "^2.0|^3.0.2",
859 "sebastian/comparator": "^1.1|^2.0",
860 "sebastian/recursion-context": "^1.0|^2.0|^3.0"
861 },
862 "require-dev": {
863 "phpspec/phpspec": "^2.5|^3.2",
864 "phpunit/phpunit": "^4.8 || ^5.6.5"
865 },
866 "type": "library",
867 "extra": {
868 "branch-alias": {
869 "dev-master": "1.6.x-dev"
870 }
871 },
872 "autoload": {
873 "psr-0": {
874 "Prophecy\\": "src/"
875 }
876 },
877 "notification-url": "https://packagist.org/downloads/",
878 "license": [
879 "MIT"
880 ],
881 "authors": [
882 {
883 "name": "Konstantin Kudryashov",
884 "email": "ever.zet@gmail.com",
885 "homepage": "http://everzet.com"
886 },
887 {
888 "name": "Marcello Duarte",
889 "email": "marcello.duarte@gmail.com"
890 }
891 ],
892 "description": "Highly opinionated mocking framework for PHP 5.3+",
893 "homepage": "https://github.com/phpspec/prophecy",
894 "keywords": [
895 "Double",
896 "Dummy",
897 "fake",
898 "mock",
899 "spy",
900 "stub"
901 ],
902 "time": "2017-03-02T20:05:34+00:00"
903 },
904 {
905 "name": "phpunit/php-code-coverage",
906 "version": "2.2.4",
907 "source": {
908 "type": "git",
909 "url": "https://github.com/sebastianbergmann/php-code-coverage.git",
910 "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979"
911 },
912 "dist": {
913 "type": "zip",
914 "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/eabf68b476ac7d0f73793aada060f1c1a9bf8979",
915 "reference": "eabf68b476ac7d0f73793aada060f1c1a9bf8979",
916 "shasum": ""
917 },
918 "require": {
919 "php": ">=5.3.3",
920 "phpunit/php-file-iterator": "~1.3",
921 "phpunit/php-text-template": "~1.2",
922 "phpunit/php-token-stream": "~1.3",
923 "sebastian/environment": "^1.3.2",
924 "sebastian/version": "~1.0"
925 },
926 "require-dev": {
927 "ext-xdebug": ">=2.1.4",
928 "phpunit/phpunit": "~4"
929 },
930 "suggest": {
931 "ext-dom": "*",
932 "ext-xdebug": ">=2.2.1",
933 "ext-xmlwriter": "*"
934 },
935 "type": "library",
936 "extra": {
937 "branch-alias": {
938 "dev-master": "2.2.x-dev"
939 }
940 },
941 "autoload": {
942 "classmap": [
943 "src/"
944 ]
945 },
946 "notification-url": "https://packagist.org/downloads/",
947 "license": [
948 "BSD-3-Clause"
949 ],
950 "authors": [
951 {
952 "name": "Sebastian Bergmann",
953 "email": "sb@sebastian-bergmann.de",
954 "role": "lead"
955 }
956 ],
957 "description": "Library that provides collection, processing, and rendering functionality for PHP code coverage information.",
958 "homepage": "https://github.com/sebastianbergmann/php-code-coverage",
959 "keywords": [
960 "coverage",
961 "testing",
962 "xunit"
963 ],
964 "time": "2015-10-06T15:47:00+00:00"
965 },
966 {
967 "name": "phpunit/php-file-iterator",
968 "version": "1.4.2",
969 "source": {
970 "type": "git",
971 "url": "https://github.com/sebastianbergmann/php-file-iterator.git",
972 "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5"
973 },
974 "dist": {
975 "type": "zip",
976 "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/3cc8f69b3028d0f96a9078e6295d86e9bf019be5",
977 "reference": "3cc8f69b3028d0f96a9078e6295d86e9bf019be5",
978 "shasum": ""
979 },
980 "require": {
981 "php": ">=5.3.3"
982 },
983 "type": "library",
984 "extra": {
985 "branch-alias": {
986 "dev-master": "1.4.x-dev"
987 }
988 },
989 "autoload": {
990 "classmap": [
991 "src/"
992 ]
993 },
994 "notification-url": "https://packagist.org/downloads/",
995 "license": [
996 "BSD-3-Clause"
997 ],
998 "authors": [
999 {
1000 "name": "Sebastian Bergmann",
1001 "email": "sb@sebastian-bergmann.de",
1002 "role": "lead"
1003 }
1004 ],
1005 "description": "FilterIterator implementation that filters files based on a list of suffixes.",
1006 "homepage": "https://github.com/sebastianbergmann/php-file-iterator/",
1007 "keywords": [
1008 "filesystem",
1009 "iterator"
1010 ],
1011 "time": "2016-10-03T07:40:28+00:00"
1012 },
1013 {
1014 "name": "phpunit/php-text-template",
1015 "version": "1.2.1",
1016 "source": {
1017 "type": "git",
1018 "url": "https://github.com/sebastianbergmann/php-text-template.git",
1019 "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686"
1020 },
1021 "dist": {
1022 "type": "zip",
1023 "url": "https://api.github.com/repos/sebastianbergmann/php-text-template/zipball/31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
1024 "reference": "31f8b717e51d9a2afca6c9f046f5d69fc27c8686",
1025 "shasum": ""
1026 },
1027 "require": {
1028 "php": ">=5.3.3"
1029 },
1030 "type": "library",
1031 "autoload": {
1032 "classmap": [
1033 "src/"
1034 ]
1035 },
1036 "notification-url": "https://packagist.org/downloads/",
1037 "license": [
1038 "BSD-3-Clause"
1039 ],
1040 "authors": [
1041 {
1042 "name": "Sebastian Bergmann",
1043 "email": "sebastian@phpunit.de",
1044 "role": "lead"
1045 }
1046 ],
1047 "description": "Simple template engine.",
1048 "homepage": "https://github.com/sebastianbergmann/php-text-template/",
1049 "keywords": [
1050 "template"
1051 ],
1052 "time": "2015-06-21T13:50:34+00:00"
1053 },
1054 {
1055 "name": "phpunit/php-timer",
1056 "version": "1.0.9",
1057 "source": {
1058 "type": "git",
1059 "url": "https://github.com/sebastianbergmann/php-timer.git",
1060 "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f"
1061 },
1062 "dist": {
1063 "type": "zip",
1064 "url": "https://api.github.com/repos/sebastianbergmann/php-timer/zipball/3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
1065 "reference": "3dcf38ca72b158baf0bc245e9184d3fdffa9c46f",
1066 "shasum": ""
1067 },
1068 "require": {
1069 "php": "^5.3.3 || ^7.0"
1070 },
1071 "require-dev": {
1072 "phpunit/phpunit": "^4.8.35 || ^5.7 || ^6.0"
1073 },
1074 "type": "library",
1075 "extra": {
1076 "branch-alias": {
1077 "dev-master": "1.0-dev"
1078 }
1079 },
1080 "autoload": {
1081 "classmap": [
1082 "src/"
1083 ]
1084 },
1085 "notification-url": "https://packagist.org/downloads/",
1086 "license": [
1087 "BSD-3-Clause"
1088 ],
1089 "authors": [
1090 {
1091 "name": "Sebastian Bergmann",
1092 "email": "sb@sebastian-bergmann.de",
1093 "role": "lead"
1094 }
1095 ],
1096 "description": "Utility class for timing",
1097 "homepage": "https://github.com/sebastianbergmann/php-timer/",
1098 "keywords": [
1099 "timer"
1100 ],
1101 "time": "2017-02-26T11:10:40+00:00"
1102 },
1103 {
1104 "name": "phpunit/php-token-stream",
1105 "version": "1.4.11",
1106 "source": {
1107 "type": "git",
1108 "url": "https://github.com/sebastianbergmann/php-token-stream.git",
1109 "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7"
1110 },
1111 "dist": {
1112 "type": "zip",
1113 "url": "https://api.github.com/repos/sebastianbergmann/php-token-stream/zipball/e03f8f67534427a787e21a385a67ec3ca6978ea7",
1114 "reference": "e03f8f67534427a787e21a385a67ec3ca6978ea7",
1115 "shasum": ""
1116 },
1117 "require": {
1118 "ext-tokenizer": "*",
1119 "php": ">=5.3.3"
1120 },
1121 "require-dev": {
1122 "phpunit/phpunit": "~4.2"
1123 },
1124 "type": "library",
1125 "extra": {
1126 "branch-alias": {
1127 "dev-master": "1.4-dev"
1128 }
1129 },
1130 "autoload": {
1131 "classmap": [
1132 "src/"
1133 ]
1134 },
1135 "notification-url": "https://packagist.org/downloads/",
1136 "license": [
1137 "BSD-3-Clause"
1138 ],
1139 "authors": [
1140 {
1141 "name": "Sebastian Bergmann",
1142 "email": "sebastian@phpunit.de"
1143 }
1144 ],
1145 "description": "Wrapper around PHP's tokenizer extension.",
1146 "homepage": "https://github.com/sebastianbergmann/php-token-stream/",
1147 "keywords": [
1148 "tokenizer"
1149 ],
1150 "time": "2017-02-27T10:12:30+00:00"
1151 },
1152 {
1153 "name": "phpunit/phpcov",
1154 "version": "2.0.2",
1155 "source": {
1156 "type": "git",
1157 "url": "https://github.com/sebastianbergmann/phpcov.git",
1158 "reference": "9ef291483ff65eefd8639584d61bbfb044d747f3"
1159 },
1160 "dist": {
1161 "type": "zip",
1162 "url": "https://api.github.com/repos/sebastianbergmann/phpcov/zipball/9ef291483ff65eefd8639584d61bbfb044d747f3",
1163 "reference": "9ef291483ff65eefd8639584d61bbfb044d747f3",
1164 "shasum": ""
1165 },
1166 "require": {
1167 "php": ">=5.3.3",
1168 "phpunit/php-code-coverage": "~2.0",
1169 "phpunit/phpunit": ">=4.1",
1170 "sebastian/diff": "~1.1",
1171 "sebastian/finder-facade": "~1.1",
1172 "sebastian/version": "~1.0",
1173 "symfony/console": "~2.2"
1174 },
1175 "bin": [
1176 "phpcov"
1177 ],
1178 "type": "library",
1179 "extra": {
1180 "branch-alias": {
1181 "dev-master": "2.0.x-dev"
1182 }
1183 },
1184 "autoload": {
1185 "classmap": [
1186 "src/"
1187 ]
1188 },
1189 "notification-url": "https://packagist.org/downloads/",
1190 "license": [
1191 "BSD-3-Clause"
1192 ],
1193 "authors": [
1194 {
1195 "name": "Sebastian Bergmann",
1196 "email": "sebastian@phpunit.de",
1197 "role": "lead"
1198 }
1199 ],
1200 "description": "CLI frontend for PHP_CodeCoverage",
1201 "homepage": "https://github.com/sebastianbergmann/phpcov",
1202 "time": "2015-10-05T09:24:23+00:00"
1203 },
1204 {
1205 "name": "phpunit/phpunit",
1206 "version": "4.8.35",
1207 "source": {
1208 "type": "git",
1209 "url": "https://github.com/sebastianbergmann/phpunit.git",
1210 "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87"
1211 },
1212 "dist": {
1213 "type": "zip",
1214 "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/791b1a67c25af50e230f841ee7a9c6eba507dc87",
1215 "reference": "791b1a67c25af50e230f841ee7a9c6eba507dc87",
1216 "shasum": ""
1217 },
1218 "require": {
1219 "ext-dom": "*",
1220 "ext-json": "*",
1221 "ext-pcre": "*",
1222 "ext-reflection": "*",
1223 "ext-spl": "*",
1224 "php": ">=5.3.3",
1225 "phpspec/prophecy": "^1.3.1",
1226 "phpunit/php-code-coverage": "~2.1",
1227 "phpunit/php-file-iterator": "~1.4",
1228 "phpunit/php-text-template": "~1.2",
1229 "phpunit/php-timer": "^1.0.6",
1230 "phpunit/phpunit-mock-objects": "~2.3",
1231 "sebastian/comparator": "~1.2.2",
1232 "sebastian/diff": "~1.2",
1233 "sebastian/environment": "~1.3",
1234 "sebastian/exporter": "~1.2",
1235 "sebastian/global-state": "~1.0",
1236 "sebastian/version": "~1.0",
1237 "symfony/yaml": "~2.1|~3.0"
1238 },
1239 "suggest": {
1240 "phpunit/php-invoker": "~1.1"
1241 },
1242 "bin": [
1243 "phpunit"
1244 ],
1245 "type": "library",
1246 "extra": {
1247 "branch-alias": {
1248 "dev-master": "4.8.x-dev"
1249 }
1250 },
1251 "autoload": {
1252 "classmap": [
1253 "src/"
1254 ]
1255 },
1256 "notification-url": "https://packagist.org/downloads/",
1257 "license": [
1258 "BSD-3-Clause"
1259 ],
1260 "authors": [
1261 {
1262 "name": "Sebastian Bergmann",
1263 "email": "sebastian@phpunit.de",
1264 "role": "lead"
1265 }
1266 ],
1267 "description": "The PHP Unit Testing framework.",
1268 "homepage": "https://phpunit.de/",
1269 "keywords": [
1270 "phpunit",
1271 "testing",
1272 "xunit"
1273 ],
1274 "time": "2017-02-06T05:18:07+00:00"
1275 },
1276 {
1277 "name": "phpunit/phpunit-mock-objects",
1278 "version": "2.3.8",
1279 "source": {
1280 "type": "git",
1281 "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git",
1282 "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983"
1283 },
1284 "dist": {
1285 "type": "zip",
1286 "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/ac8e7a3db35738d56ee9a76e78a4e03d97628983",
1287 "reference": "ac8e7a3db35738d56ee9a76e78a4e03d97628983",
1288 "shasum": ""
1289 },
1290 "require": {
1291 "doctrine/instantiator": "^1.0.2",
1292 "php": ">=5.3.3",
1293 "phpunit/php-text-template": "~1.2",
1294 "sebastian/exporter": "~1.2"
1295 },
1296 "require-dev": {
1297 "phpunit/phpunit": "~4.4"
1298 },
1299 "suggest": {
1300 "ext-soap": "*"
1301 },
1302 "type": "library",
1303 "extra": {
1304 "branch-alias": {
1305 "dev-master": "2.3.x-dev"
1306 }
1307 },
1308 "autoload": {
1309 "classmap": [
1310 "src/"
1311 ]
1312 },
1313 "notification-url": "https://packagist.org/downloads/",
1314 "license": [
1315 "BSD-3-Clause"
1316 ],
1317 "authors": [
1318 {
1319 "name": "Sebastian Bergmann",
1320 "email": "sb@sebastian-bergmann.de",
1321 "role": "lead"
1322 }
1323 ],
1324 "description": "Mock Object library for PHPUnit",
1325 "homepage": "https://github.com/sebastianbergmann/phpunit-mock-objects/",
1326 "keywords": [
1327 "mock",
1328 "xunit"
1329 ],
1330 "time": "2015-10-02T06:51:40+00:00"
1331 },
1332 {
1333 "name": "sebastian/comparator",
1334 "version": "1.2.4",
1335 "source": {
1336 "type": "git",
1337 "url": "https://github.com/sebastianbergmann/comparator.git",
1338 "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be"
1339 },
1340 "dist": {
1341 "type": "zip",
1342 "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
1343 "reference": "2b7424b55f5047b47ac6e5ccb20b2aea4011d9be",
1344 "shasum": ""
1345 },
1346 "require": {
1347 "php": ">=5.3.3",
1348 "sebastian/diff": "~1.2",
1349 "sebastian/exporter": "~1.2 || ~2.0"
1350 },
1351 "require-dev": {
1352 "phpunit/phpunit": "~4.4"
1353 },
1354 "type": "library",
1355 "extra": {
1356 "branch-alias": {
1357 "dev-master": "1.2.x-dev"
1358 }
1359 },
1360 "autoload": {
1361 "classmap": [
1362 "src/"
1363 ]
1364 },
1365 "notification-url": "https://packagist.org/downloads/",
1366 "license": [
1367 "BSD-3-Clause"
1368 ],
1369 "authors": [
1370 {
1371 "name": "Jeff Welch",
1372 "email": "whatthejeff@gmail.com"
1373 },
1374 {
1375 "name": "Volker Dusch",
1376 "email": "github@wallbash.com"
1377 },
1378 {
1379 "name": "Bernhard Schussek",
1380 "email": "bschussek@2bepublished.at"
1381 },
1382 {
1383 "name": "Sebastian Bergmann",
1384 "email": "sebastian@phpunit.de"
1385 }
1386 ],
1387 "description": "Provides the functionality to compare PHP values for equality",
1388 "homepage": "http://www.github.com/sebastianbergmann/comparator",
1389 "keywords": [
1390 "comparator",
1391 "compare",
1392 "equality"
1393 ],
1394 "time": "2017-01-29T09:50:25+00:00"
1395 },
1396 {
1397 "name": "sebastian/diff",
1398 "version": "1.4.1",
1399 "source": {
1400 "type": "git",
1401 "url": "https://github.com/sebastianbergmann/diff.git",
1402 "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e"
1403 },
1404 "dist": {
1405 "type": "zip",
1406 "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/13edfd8706462032c2f52b4b862974dd46b71c9e",
1407 "reference": "13edfd8706462032c2f52b4b862974dd46b71c9e",
1408 "shasum": ""
1409 },
1410 "require": {
1411 "php": ">=5.3.3"
1412 },
1413 "require-dev": {
1414 "phpunit/phpunit": "~4.8"
1415 },
1416 "type": "library",
1417 "extra": {
1418 "branch-alias": {
1419 "dev-master": "1.4-dev"
1420 }
1421 },
1422 "autoload": {
1423 "classmap": [
1424 "src/"
1425 ]
1426 },
1427 "notification-url": "https://packagist.org/downloads/",
1428 "license": [
1429 "BSD-3-Clause"
1430 ],
1431 "authors": [
1432 {
1433 "name": "Kore Nordmann",
1434 "email": "mail@kore-nordmann.de"
1435 },
1436 {
1437 "name": "Sebastian Bergmann",
1438 "email": "sebastian@phpunit.de"
1439 }
1440 ],
1441 "description": "Diff implementation",
1442 "homepage": "https://github.com/sebastianbergmann/diff",
1443 "keywords": [
1444 "diff"
1445 ],
1446 "time": "2015-12-08T07:14:41+00:00"
1447 },
1448 {
1449 "name": "sebastian/environment",
1450 "version": "1.3.8",
1451 "source": {
1452 "type": "git",
1453 "url": "https://github.com/sebastianbergmann/environment.git",
1454 "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea"
1455 },
1456 "dist": {
1457 "type": "zip",
1458 "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea",
1459 "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea",
1460 "shasum": ""
1461 },
1462 "require": {
1463 "php": "^5.3.3 || ^7.0"
1464 },
1465 "require-dev": {
1466 "phpunit/phpunit": "^4.8 || ^5.0"
1467 },
1468 "type": "library",
1469 "extra": {
1470 "branch-alias": {
1471 "dev-master": "1.3.x-dev"
1472 }
1473 },
1474 "autoload": {
1475 "classmap": [
1476 "src/"
1477 ]
1478 },
1479 "notification-url": "https://packagist.org/downloads/",
1480 "license": [
1481 "BSD-3-Clause"
1482 ],
1483 "authors": [
1484 {
1485 "name": "Sebastian Bergmann",
1486 "email": "sebastian@phpunit.de"
1487 }
1488 ],
1489 "description": "Provides functionality to handle HHVM/PHP environments",
1490 "homepage": "http://www.github.com/sebastianbergmann/environment",
1491 "keywords": [
1492 "Xdebug",
1493 "environment",
1494 "hhvm"
1495 ],
1496 "time": "2016-08-18T05:49:44+00:00"
1497 },
1498 {
1499 "name": "sebastian/exporter",
1500 "version": "1.2.2",
1501 "source": {
1502 "type": "git",
1503 "url": "https://github.com/sebastianbergmann/exporter.git",
1504 "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4"
1505 },
1506 "dist": {
1507 "type": "zip",
1508 "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/42c4c2eec485ee3e159ec9884f95b431287edde4",
1509 "reference": "42c4c2eec485ee3e159ec9884f95b431287edde4",
1510 "shasum": ""
1511 },
1512 "require": {
1513 "php": ">=5.3.3",
1514 "sebastian/recursion-context": "~1.0"
1515 },
1516 "require-dev": {
1517 "ext-mbstring": "*",
1518 "phpunit/phpunit": "~4.4"
1519 },
1520 "type": "library",
1521 "extra": {
1522 "branch-alias": {
1523 "dev-master": "1.3.x-dev"
1524 }
1525 },
1526 "autoload": {
1527 "classmap": [
1528 "src/"
1529 ]
1530 },
1531 "notification-url": "https://packagist.org/downloads/",
1532 "license": [
1533 "BSD-3-Clause"
1534 ],
1535 "authors": [
1536 {
1537 "name": "Jeff Welch",
1538 "email": "whatthejeff@gmail.com"
1539 },
1540 {
1541 "name": "Volker Dusch",
1542 "email": "github@wallbash.com"
1543 },
1544 {
1545 "name": "Bernhard Schussek",
1546 "email": "bschussek@2bepublished.at"
1547 },
1548 {
1549 "name": "Sebastian Bergmann",
1550 "email": "sebastian@phpunit.de"
1551 },
1552 {
1553 "name": "Adam Harvey",
1554 "email": "aharvey@php.net"
1555 }
1556 ],
1557 "description": "Provides the functionality to export PHP variables for visualization",
1558 "homepage": "http://www.github.com/sebastianbergmann/exporter",
1559 "keywords": [
1560 "export",
1561 "exporter"
1562 ],
1563 "time": "2016-06-17T09:04:28+00:00"
1564 },
1565 {
1566 "name": "sebastian/finder-facade",
1567 "version": "1.2.1",
1568 "source": {
1569 "type": "git",
1570 "url": "https://github.com/sebastianbergmann/finder-facade.git",
1571 "reference": "2a6f7f57efc0aa2d23297d9fd9e2a03111a8c0b9"
1572 },
1573 "dist": {
1574 "type": "zip",
1575 "url": "https://api.github.com/repos/sebastianbergmann/finder-facade/zipball/2a6f7f57efc0aa2d23297d9fd9e2a03111a8c0b9",
1576 "reference": "2a6f7f57efc0aa2d23297d9fd9e2a03111a8c0b9",
1577 "shasum": ""
1578 },
1579 "require": {
1580 "symfony/finder": "~2.3|~3.0",
1581 "theseer/fdomdocument": "~1.3"
1582 },
1583 "type": "library",
1584 "autoload": {
1585 "classmap": [
1586 "src/"
1587 ]
1588 },
1589 "notification-url": "https://packagist.org/downloads/",
1590 "license": [
1591 "BSD-3-Clause"
1592 ],
1593 "authors": [
1594 {
1595 "name": "Sebastian Bergmann",
1596 "email": "sebastian@phpunit.de",
1597 "role": "lead"
1598 }
1599 ],
1600 "description": "FinderFacade is a convenience wrapper for Symfony's Finder component.",
1601 "homepage": "https://github.com/sebastianbergmann/finder-facade",
1602 "time": "2016-02-17T07:02:23+00:00"
1603 },
1604 {
1605 "name": "sebastian/global-state",
1606 "version": "1.1.1",
1607 "source": {
1608 "type": "git",
1609 "url": "https://github.com/sebastianbergmann/global-state.git",
1610 "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4"
1611 },
1612 "dist": {
1613 "type": "zip",
1614 "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bc37d50fea7d017d3d340f230811c9f1d7280af4",
1615 "reference": "bc37d50fea7d017d3d340f230811c9f1d7280af4",
1616 "shasum": ""
1617 },
1618 "require": {
1619 "php": ">=5.3.3"
1620 },
1621 "require-dev": {
1622 "phpunit/phpunit": "~4.2"
1623 },
1624 "suggest": {
1625 "ext-uopz": "*"
1626 },
1627 "type": "library",
1628 "extra": {
1629 "branch-alias": {
1630 "dev-master": "1.0-dev"
1631 }
1632 },
1633 "autoload": {
1634 "classmap": [
1635 "src/"
1636 ]
1637 },
1638 "notification-url": "https://packagist.org/downloads/",
1639 "license": [
1640 "BSD-3-Clause"
1641 ],
1642 "authors": [
1643 {
1644 "name": "Sebastian Bergmann",
1645 "email": "sebastian@phpunit.de"
1646 }
1647 ],
1648 "description": "Snapshotting of global state",
1649 "homepage": "http://www.github.com/sebastianbergmann/global-state",
1650 "keywords": [
1651 "global state"
1652 ],
1653 "time": "2015-10-12T03:26:01+00:00"
1654 },
1655 {
1656 "name": "sebastian/phpcpd",
1657 "version": "2.0.4",
1658 "source": {
1659 "type": "git",
1660 "url": "https://github.com/sebastianbergmann/phpcpd.git",
1661 "reference": "24d9a880deadb0b8c9680e9cfe78e30b704225db"
1662 },
1663 "dist": {
1664 "type": "zip",
1665 "url": "https://api.github.com/repos/sebastianbergmann/phpcpd/zipball/24d9a880deadb0b8c9680e9cfe78e30b704225db",
1666 "reference": "24d9a880deadb0b8c9680e9cfe78e30b704225db",
1667 "shasum": ""
1668 },
1669 "require": {
1670 "php": ">=5.3.3",
1671 "phpunit/php-timer": ">=1.0.6",
1672 "sebastian/finder-facade": "~1.1",
1673 "sebastian/version": "~1.0|~2.0",
1674 "symfony/console": "~2.7|^3.0",
1675 "theseer/fdomdocument": "~1.4"
1676 },
1677 "bin": [
1678 "phpcpd"
1679 ],
1680 "type": "library",
1681 "extra": {
1682 "branch-alias": {
1683 "dev-master": "2.0-dev"
1684 }
1685 },
1686 "autoload": {
1687 "classmap": [
1688 "src/"
1689 ]
1690 },
1691 "notification-url": "https://packagist.org/downloads/",
1692 "license": [
1693 "BSD-3-Clause"
1694 ],
1695 "authors": [
1696 {
1697 "name": "Sebastian Bergmann",
1698 "email": "sebastian@phpunit.de",
1699 "role": "lead"
1700 }
1701 ],
1702 "description": "Copy/Paste Detector (CPD) for PHP code.",
1703 "homepage": "https://github.com/sebastianbergmann/phpcpd",
1704 "time": "2016-04-17T19:32:49+00:00"
1705 },
1706 {
1707 "name": "sebastian/recursion-context",
1708 "version": "1.0.5",
1709 "source": {
1710 "type": "git",
1711 "url": "https://github.com/sebastianbergmann/recursion-context.git",
1712 "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7"
1713 },
1714 "dist": {
1715 "type": "zip",
1716 "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
1717 "reference": "b19cc3298482a335a95f3016d2f8a6950f0fbcd7",
1718 "shasum": ""
1719 },
1720 "require": {
1721 "php": ">=5.3.3"
1722 },
1723 "require-dev": {
1724 "phpunit/phpunit": "~4.4"
1725 },
1726 "type": "library",
1727 "extra": {
1728 "branch-alias": {
1729 "dev-master": "1.0.x-dev"
1730 }
1731 },
1732 "autoload": {
1733 "classmap": [
1734 "src/"
1735 ]
1736 },
1737 "notification-url": "https://packagist.org/downloads/",
1738 "license": [
1739 "BSD-3-Clause"
1740 ],
1741 "authors": [
1742 {
1743 "name": "Jeff Welch",
1744 "email": "whatthejeff@gmail.com"
1745 },
1746 {
1747 "name": "Sebastian Bergmann",
1748 "email": "sebastian@phpunit.de"
1749 },
1750 {
1751 "name": "Adam Harvey",
1752 "email": "aharvey@php.net"
1753 }
1754 ],
1755 "description": "Provides functionality to recursively process PHP variables",
1756 "homepage": "http://www.github.com/sebastianbergmann/recursion-context",
1757 "time": "2016-10-03T07:41:43+00:00"
1758 },
1759 {
1760 "name": "sebastian/version",
1761 "version": "1.0.6",
1762 "source": {
1763 "type": "git",
1764 "url": "https://github.com/sebastianbergmann/version.git",
1765 "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6"
1766 },
1767 "dist": {
1768 "type": "zip",
1769 "url": "https://api.github.com/repos/sebastianbergmann/version/zipball/58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
1770 "reference": "58b3a85e7999757d6ad81c787a1fbf5ff6c628c6",
1771 "shasum": ""
1772 },
1773 "type": "library",
1774 "autoload": {
1775 "classmap": [
1776 "src/"
1777 ]
1778 },
1779 "notification-url": "https://packagist.org/downloads/",
1780 "license": [
1781 "BSD-3-Clause"
1782 ],
1783 "authors": [
1784 {
1785 "name": "Sebastian Bergmann",
1786 "email": "sebastian@phpunit.de",
1787 "role": "lead"
1788 }
1789 ],
1790 "description": "Library that helps with managing the version number of Git-hosted PHP projects",
1791 "homepage": "https://github.com/sebastianbergmann/version",
1792 "time": "2015-06-21T13:59:46+00:00"
1793 },
1794 {
1795 "name": "squizlabs/php_codesniffer",
1796 "version": "2.8.1",
1797 "source": {
1798 "type": "git",
1799 "url": "https://github.com/squizlabs/PHP_CodeSniffer.git",
1800 "reference": "d7cf0d894e8aa4c73712ee4a331cc1eaa37cdc7d"
1801 },
1802 "dist": {
1803 "type": "zip",
1804 "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/d7cf0d894e8aa4c73712ee4a331cc1eaa37cdc7d",
1805 "reference": "d7cf0d894e8aa4c73712ee4a331cc1eaa37cdc7d",
1806 "shasum": ""
1807 },
1808 "require": {
1809 "ext-simplexml": "*",
1810 "ext-tokenizer": "*",
1811 "ext-xmlwriter": "*",
1812 "php": ">=5.1.2"
1813 },
1814 "require-dev": {
1815 "phpunit/phpunit": "~4.0"
1816 },
1817 "bin": [
1818 "scripts/phpcs",
1819 "scripts/phpcbf"
1820 ],
1821 "type": "library",
1822 "extra": {
1823 "branch-alias": {
1824 "dev-master": "2.x-dev"
1825 }
1826 },
1827 "autoload": {
1828 "classmap": [
1829 "CodeSniffer.php",
1830 "CodeSniffer/CLI.php",
1831 "CodeSniffer/Exception.php",
1832 "CodeSniffer/File.php",
1833 "CodeSniffer/Fixer.php",
1834 "CodeSniffer/Report.php",
1835 "CodeSniffer/Reporting.php",
1836 "CodeSniffer/Sniff.php",
1837 "CodeSniffer/Tokens.php",
1838 "CodeSniffer/Reports/",
1839 "CodeSniffer/Tokenizers/",
1840 "CodeSniffer/DocGenerators/",
1841 "CodeSniffer/Standards/AbstractPatternSniff.php",
1842 "CodeSniffer/Standards/AbstractScopeSniff.php",
1843 "CodeSniffer/Standards/AbstractVariableSniff.php",
1844 "CodeSniffer/Standards/IncorrectPatternException.php",
1845 "CodeSniffer/Standards/Generic/Sniffs/",
1846 "CodeSniffer/Standards/MySource/Sniffs/",
1847 "CodeSniffer/Standards/PEAR/Sniffs/",
1848 "CodeSniffer/Standards/PSR1/Sniffs/",
1849 "CodeSniffer/Standards/PSR2/Sniffs/",
1850 "CodeSniffer/Standards/Squiz/Sniffs/",
1851 "CodeSniffer/Standards/Zend/Sniffs/"
1852 ]
1853 },
1854 "notification-url": "https://packagist.org/downloads/",
1855 "license": [
1856 "BSD-3-Clause"
1857 ],
1858 "authors": [
1859 {
1860 "name": "Greg Sherwood",
1861 "role": "lead"
1862 }
1863 ],
1864 "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.",
1865 "homepage": "http://www.squizlabs.com/php-codesniffer",
1866 "keywords": [
1867 "phpcs",
1868 "standards"
1869 ],
1870 "time": "2017-03-01T22:17:45+00:00"
1871 },
1872 {
1873 "name": "symfony/config",
1874 "version": "v3.2.6",
1875 "source": {
1876 "type": "git",
1877 "url": "https://github.com/symfony/config.git",
1878 "reference": "741d6d4cd1414d67d48eb71aba6072b46ba740c2"
1879 },
1880 "dist": {
1881 "type": "zip",
1882 "url": "https://api.github.com/repos/symfony/config/zipball/741d6d4cd1414d67d48eb71aba6072b46ba740c2",
1883 "reference": "741d6d4cd1414d67d48eb71aba6072b46ba740c2",
1884 "shasum": ""
1885 },
1886 "require": {
1887 "php": ">=5.5.9",
1888 "symfony/filesystem": "~2.8|~3.0"
1889 },
1890 "require-dev": {
1891 "symfony/yaml": "~3.0"
1892 },
1893 "suggest": {
1894 "symfony/yaml": "To use the yaml reference dumper"
1895 },
1896 "type": "library",
1897 "extra": {
1898 "branch-alias": {
1899 "dev-master": "3.2-dev"
1900 }
1901 },
1902 "autoload": {
1903 "psr-4": {
1904 "Symfony\\Component\\Config\\": ""
1905 },
1906 "exclude-from-classmap": [
1907 "/Tests/"
1908 ]
1909 },
1910 "notification-url": "https://packagist.org/downloads/",
1911 "license": [
1912 "MIT"
1913 ],
1914 "authors": [
1915 {
1916 "name": "Fabien Potencier",
1917 "email": "fabien@symfony.com"
1918 },
1919 {
1920 "name": "Symfony Community",
1921 "homepage": "https://symfony.com/contributors"
1922 }
1923 ],
1924 "description": "Symfony Config Component",
1925 "homepage": "https://symfony.com",
1926 "time": "2017-03-01T18:18:25+00:00"
1927 },
1928 {
1929 "name": "symfony/console",
1930 "version": "v2.8.18",
1931 "source": {
1932 "type": "git",
1933 "url": "https://github.com/symfony/console.git",
1934 "reference": "81508e6fac4476771275a3f4f53c3fee9b956bfa"
1935 },
1936 "dist": {
1937 "type": "zip",
1938 "url": "https://api.github.com/repos/symfony/console/zipball/81508e6fac4476771275a3f4f53c3fee9b956bfa",
1939 "reference": "81508e6fac4476771275a3f4f53c3fee9b956bfa",
1940 "shasum": ""
1941 },
1942 "require": {
1943 "php": ">=5.3.9",
1944 "symfony/debug": "^2.7.2|~3.0.0",
1945 "symfony/polyfill-mbstring": "~1.0"
1946 },
1947 "require-dev": {
1948 "psr/log": "~1.0",
1949 "symfony/event-dispatcher": "~2.1|~3.0.0",
1950 "symfony/process": "~2.1|~3.0.0"
1951 },
1952 "suggest": {
1953 "psr/log": "For using the console logger",
1954 "symfony/event-dispatcher": "",
1955 "symfony/process": ""
1956 },
1957 "type": "library",
1958 "extra": {
1959 "branch-alias": {
1960 "dev-master": "2.8-dev"
1961 }
1962 },
1963 "autoload": {
1964 "psr-4": {
1965 "Symfony\\Component\\Console\\": ""
1966 },
1967 "exclude-from-classmap": [
1968 "/Tests/"
1969 ]
1970 },
1971 "notification-url": "https://packagist.org/downloads/",
1972 "license": [
1973 "MIT"
1974 ],
1975 "authors": [
1976 {
1977 "name": "Fabien Potencier",
1978 "email": "fabien@symfony.com"
1979 },
1980 {
1981 "name": "Symfony Community",
1982 "homepage": "https://symfony.com/contributors"
1983 }
1984 ],
1985 "description": "Symfony Console Component",
1986 "homepage": "https://symfony.com",
1987 "time": "2017-03-04T11:00:12+00:00"
1988 },
1989 {
1990 "name": "symfony/debug",
1991 "version": "v3.0.9",
1992 "source": {
1993 "type": "git",
1994 "url": "https://github.com/symfony/debug.git",
1995 "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a"
1996 },
1997 "dist": {
1998 "type": "zip",
1999 "url": "https://api.github.com/repos/symfony/debug/zipball/697c527acd9ea1b2d3efac34d9806bf255278b0a",
2000 "reference": "697c527acd9ea1b2d3efac34d9806bf255278b0a",
2001 "shasum": ""
2002 },
2003 "require": {
2004 "php": ">=5.5.9",
2005 "psr/log": "~1.0"
2006 },
2007 "conflict": {
2008 "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2"
2009 },
2010 "require-dev": {
2011 "symfony/class-loader": "~2.8|~3.0",
2012 "symfony/http-kernel": "~2.8|~3.0"
2013 },
2014 "type": "library",
2015 "extra": {
2016 "branch-alias": {
2017 "dev-master": "3.0-dev"
2018 }
2019 },
2020 "autoload": {
2021 "psr-4": {
2022 "Symfony\\Component\\Debug\\": ""
2023 },
2024 "exclude-from-classmap": [
2025 "/Tests/"
2026 ]
2027 },
2028 "notification-url": "https://packagist.org/downloads/",
2029 "license": [
2030 "MIT"
2031 ],
2032 "authors": [
2033 {
2034 "name": "Fabien Potencier",
2035 "email": "fabien@symfony.com"
2036 },
2037 {
2038 "name": "Symfony Community",
2039 "homepage": "https://symfony.com/contributors"
2040 }
2041 ],
2042 "description": "Symfony Debug Component",
2043 "homepage": "https://symfony.com",
2044 "time": "2016-07-30T07:22:48+00:00"
2045 },
2046 {
2047 "name": "symfony/dependency-injection",
2048 "version": "v3.2.6",
2049 "source": {
2050 "type": "git",
2051 "url": "https://github.com/symfony/dependency-injection.git",
2052 "reference": "74e0935e414ad33d5e82074212c0eedb4681a691"
2053 },
2054 "dist": {
2055 "type": "zip",
2056 "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/74e0935e414ad33d5e82074212c0eedb4681a691",
2057 "reference": "74e0935e414ad33d5e82074212c0eedb4681a691",
2058 "shasum": ""
2059 },
2060 "require": {
2061 "php": ">=5.5.9"
2062 },
2063 "conflict": {
2064 "symfony/yaml": "<3.2"
2065 },
2066 "require-dev": {
2067 "symfony/config": "~2.8|~3.0",
2068 "symfony/expression-language": "~2.8|~3.0",
2069 "symfony/yaml": "~3.2"
2070 },
2071 "suggest": {
2072 "symfony/config": "",
2073 "symfony/expression-language": "For using expressions in service container configuration",
2074 "symfony/proxy-manager-bridge": "Generate service proxies to lazy load them",
2075 "symfony/yaml": ""
2076 },
2077 "type": "library",
2078 "extra": {
2079 "branch-alias": {
2080 "dev-master": "3.2-dev"
2081 }
2082 },
2083 "autoload": {
2084 "psr-4": {
2085 "Symfony\\Component\\DependencyInjection\\": ""
2086 },
2087 "exclude-from-classmap": [
2088 "/Tests/"
2089 ]
2090 },
2091 "notification-url": "https://packagist.org/downloads/",
2092 "license": [
2093 "MIT"
2094 ],
2095 "authors": [
2096 {
2097 "name": "Fabien Potencier",
2098 "email": "fabien@symfony.com"
2099 },
2100 {
2101 "name": "Symfony Community",
2102 "homepage": "https://symfony.com/contributors"
2103 }
2104 ],
2105 "description": "Symfony DependencyInjection Component",
2106 "homepage": "https://symfony.com",
2107 "time": "2017-03-05T00:06:55+00:00"
2108 },
2109 {
2110 "name": "symfony/filesystem",
2111 "version": "v3.2.6",
2112 "source": {
2113 "type": "git",
2114 "url": "https://github.com/symfony/filesystem.git",
2115 "reference": "bc0f17bed914df2cceb989972c3b996043c4da4a"
2116 },
2117 "dist": {
2118 "type": "zip",
2119 "url": "https://api.github.com/repos/symfony/filesystem/zipball/bc0f17bed914df2cceb989972c3b996043c4da4a",
2120 "reference": "bc0f17bed914df2cceb989972c3b996043c4da4a",
2121 "shasum": ""
2122 },
2123 "require": {
2124 "php": ">=5.5.9"
2125 },
2126 "type": "library",
2127 "extra": {
2128 "branch-alias": {
2129 "dev-master": "3.2-dev"
2130 }
2131 },
2132 "autoload": {
2133 "psr-4": {
2134 "Symfony\\Component\\Filesystem\\": ""
2135 },
2136 "exclude-from-classmap": [
2137 "/Tests/"
2138 ]
2139 },
2140 "notification-url": "https://packagist.org/downloads/",
2141 "license": [
2142 "MIT"
2143 ],
2144 "authors": [
2145 {
2146 "name": "Fabien Potencier",
2147 "email": "fabien@symfony.com"
2148 },
2149 {
2150 "name": "Symfony Community",
2151 "homepage": "https://symfony.com/contributors"
2152 }
2153 ],
2154 "description": "Symfony Filesystem Component",
2155 "homepage": "https://symfony.com",
2156 "time": "2017-03-06T19:30:27+00:00"
2157 },
2158 {
2159 "name": "symfony/finder",
2160 "version": "v3.2.6",
2161 "source": {
2162 "type": "git",
2163 "url": "https://github.com/symfony/finder.git",
2164 "reference": "92d7476d2df60cd851a3e13e078664b1deb8ce10"
2165 },
2166 "dist": {
2167 "type": "zip",
2168 "url": "https://api.github.com/repos/symfony/finder/zipball/92d7476d2df60cd851a3e13e078664b1deb8ce10",
2169 "reference": "92d7476d2df60cd851a3e13e078664b1deb8ce10",
2170 "shasum": ""
2171 },
2172 "require": {
2173 "php": ">=5.5.9"
2174 },
2175 "type": "library",
2176 "extra": {
2177 "branch-alias": {
2178 "dev-master": "3.2-dev"
2179 }
2180 },
2181 "autoload": {
2182 "psr-4": {
2183 "Symfony\\Component\\Finder\\": ""
2184 },
2185 "exclude-from-classmap": [
2186 "/Tests/"
2187 ]
2188 },
2189 "notification-url": "https://packagist.org/downloads/",
2190 "license": [
2191 "MIT"
2192 ],
2193 "authors": [
2194 {
2195 "name": "Fabien Potencier",
2196 "email": "fabien@symfony.com"
2197 },
2198 {
2199 "name": "Symfony Community",
2200 "homepage": "https://symfony.com/contributors"
2201 }
2202 ],
2203 "description": "Symfony Finder Component",
2204 "homepage": "https://symfony.com",
2205 "time": "2017-02-21T09:12:04+00:00"
2206 },
2207 {
2208 "name": "symfony/polyfill-mbstring",
2209 "version": "v1.3.0",
2210 "source": {
2211 "type": "git",
2212 "url": "https://github.com/symfony/polyfill-mbstring.git",
2213 "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4"
2214 },
2215 "dist": {
2216 "type": "zip",
2217 "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/e79d363049d1c2128f133a2667e4f4190904f7f4",
2218 "reference": "e79d363049d1c2128f133a2667e4f4190904f7f4",
2219 "shasum": ""
2220 },
2221 "require": {
2222 "php": ">=5.3.3"
2223 },
2224 "suggest": {
2225 "ext-mbstring": "For best performance"
2226 },
2227 "type": "library",
2228 "extra": {
2229 "branch-alias": {
2230 "dev-master": "1.3-dev"
2231 }
2232 },
2233 "autoload": {
2234 "psr-4": {
2235 "Symfony\\Polyfill\\Mbstring\\": ""
2236 },
2237 "files": [
2238 "bootstrap.php"
2239 ]
2240 },
2241 "notification-url": "https://packagist.org/downloads/",
2242 "license": [
2243 "MIT"
2244 ],
2245 "authors": [
2246 {
2247 "name": "Nicolas Grekas",
2248 "email": "p@tchwork.com"
2249 },
2250 {
2251 "name": "Symfony Community",
2252 "homepage": "https://symfony.com/contributors"
2253 }
2254 ],
2255 "description": "Symfony polyfill for the Mbstring extension",
2256 "homepage": "https://symfony.com",
2257 "keywords": [
2258 "compatibility",
2259 "mbstring",
2260 "polyfill",
2261 "portable",
2262 "shim"
2263 ],
2264 "time": "2016-11-14T01:06:16+00:00"
2265 },
2266 {
2267 "name": "symfony/yaml",
2268 "version": "v3.2.6",
2269 "source": {
2270 "type": "git",
2271 "url": "https://github.com/symfony/yaml.git",
2272 "reference": "093e416ad096355149e265ea2e4cc1f9ee40ab1a"
2273 },
2274 "dist": {
2275 "type": "zip",
2276 "url": "https://api.github.com/repos/symfony/yaml/zipball/093e416ad096355149e265ea2e4cc1f9ee40ab1a",
2277 "reference": "093e416ad096355149e265ea2e4cc1f9ee40ab1a",
2278 "shasum": ""
2279 },
2280 "require": {
2281 "php": ">=5.5.9"
2282 },
2283 "require-dev": {
2284 "symfony/console": "~2.8|~3.0"
2285 },
2286 "suggest": {
2287 "symfony/console": "For validating YAML files using the lint command"
2288 },
2289 "type": "library",
2290 "extra": {
2291 "branch-alias": {
2292 "dev-master": "3.2-dev"
2293 }
2294 },
2295 "autoload": {
2296 "psr-4": {
2297 "Symfony\\Component\\Yaml\\": ""
2298 },
2299 "exclude-from-classmap": [
2300 "/Tests/"
2301 ]
2302 },
2303 "notification-url": "https://packagist.org/downloads/",
2304 "license": [
2305 "MIT"
2306 ],
2307 "authors": [
2308 {
2309 "name": "Fabien Potencier",
2310 "email": "fabien@symfony.com"
2311 },
2312 {
2313 "name": "Symfony Community",
2314 "homepage": "https://symfony.com/contributors"
2315 }
2316 ],
2317 "description": "Symfony Yaml Component",
2318 "homepage": "https://symfony.com",
2319 "time": "2017-03-07T16:47:02+00:00"
2320 },
2321 {
2322 "name": "theseer/fdomdocument",
2323 "version": "1.6.1",
2324 "source": {
2325 "type": "git",
2326 "url": "https://github.com/theseer/fDOMDocument.git",
2327 "reference": "d9ad139d6c2e8edf5e313ffbe37ff13344cf0684"
2328 },
2329 "dist": {
2330 "type": "zip",
2331 "url": "https://api.github.com/repos/theseer/fDOMDocument/zipball/d9ad139d6c2e8edf5e313ffbe37ff13344cf0684",
2332 "reference": "d9ad139d6c2e8edf5e313ffbe37ff13344cf0684",
2333 "shasum": ""
2334 },
2335 "require": {
2336 "ext-dom": "*",
2337 "lib-libxml": "*",
2338 "php": ">=5.3.3"
2339 },
2340 "type": "library",
2341 "autoload": {
2342 "classmap": [
2343 "src/"
2344 ]
2345 },
2346 "notification-url": "https://packagist.org/downloads/",
2347 "license": [
2348 "BSD-3-Clause"
2349 ],
2350 "authors": [
2351 {
2352 "name": "Arne Blankerts",
2353 "email": "arne@blankerts.de",
2354 "role": "lead"
2355 }
2356 ],
2357 "description": "The classes contained within this repository extend the standard DOM to use exceptions at all occasions of errors instead of PHP warnings or notices. They also add various custom methods and shortcuts for convenience and to simplify the usage of DOM.",
2358 "homepage": "https://github.com/theseer/fDOMDocument",
2359 "time": "2015-05-27T22:58:02+00:00"
2360 },
2361 {
2362 "name": "webmozart/assert",
2363 "version": "1.2.0",
2364 "source": {
2365 "type": "git",
2366 "url": "https://github.com/webmozart/assert.git",
2367 "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f"
2368 },
2369 "dist": {
2370 "type": "zip",
2371 "url": "https://api.github.com/repos/webmozart/assert/zipball/2db61e59ff05fe5126d152bd0655c9ea113e550f",
2372 "reference": "2db61e59ff05fe5126d152bd0655c9ea113e550f",
2373 "shasum": ""
2374 },
2375 "require": {
2376 "php": "^5.3.3 || ^7.0"
2377 },
2378 "require-dev": {
2379 "phpunit/phpunit": "^4.6",
2380 "sebastian/version": "^1.0.1"
2381 },
2382 "type": "library",
2383 "extra": {
2384 "branch-alias": {
2385 "dev-master": "1.3-dev"
2386 }
2387 },
2388 "autoload": {
2389 "psr-4": {
2390 "Webmozart\\Assert\\": "src/"
2391 }
2392 },
2393 "notification-url": "https://packagist.org/downloads/",
2394 "license": [
2395 "MIT"
2396 ],
2397 "authors": [
2398 {
2399 "name": "Bernhard Schussek",
2400 "email": "bschussek@gmail.com"
2401 }
2402 ],
2403 "description": "Assertions to validate method input/output with nice error messages.",
2404 "keywords": [
2405 "assert",
2406 "check",
2407 "validate"
2408 ],
2409 "time": "2016-11-23T20:04:58+00:00"
2410 }
2411 ],
2412 "aliases": [],
2413 "minimum-stability": "stable",
2414 "stability-flags": {
2415 "pubsubhubbub/publisher": 20,
2416 "phpmd/phpmd": 0
2417 },
2418 "prefer-stable": false,
2419 "prefer-lowest": false,
2420 "platform": {
2421 "php": ">=5.5"
2422 },
2423 "platform-dev": []
2424}
diff --git a/index.php b/index.php
index e5bfc2c2..58bb3f44 100644
--- a/index.php
+++ b/index.php
@@ -1,8 +1,6 @@
1<?php 1<?php
2/** 2/**
3 * Shaarli v0.8.3 - Shaare your links... 3 * Shaarli - The personal, minimalist, super-fast, database free, bookmarking service.
4 *
5 * The personal, minimalist, super-fast, database free, bookmarking service.
6 * 4 *
7 * Friendly fork by the Shaarli community: 5 * Friendly fork by the Shaarli community:
8 * - https://github.com/shaarli/Shaarli 6 * - https://github.com/shaarli/Shaarli
@@ -25,7 +23,6 @@ if (date_default_timezone_get() == '') {
25/* 23/*
26 * PHP configuration 24 * PHP configuration
27 */ 25 */
28define('shaarli_version', '0.8.2');
29 26
30// http://server.com/x/shaarli --> /shaarli/ 27// http://server.com/x/shaarli --> /shaarli/
31define('WEB_PATH', substr($_SERVER['REQUEST_URI'], 0, 1+strrpos($_SERVER['REQUEST_URI'], '/', 0))); 28define('WEB_PATH', substr($_SERVER['REQUEST_URI'], 0, 1+strrpos($_SERVER['REQUEST_URI'], '/', 0)));
@@ -90,6 +87,8 @@ try {
90 exit; 87 exit;
91} 88}
92 89
90define('shaarli_version', ApplicationUtils::getVersion(__DIR__ .'/'. ApplicationUtils::$VERSION_FILE));
91
93// Force cookie path (but do not change lifetime) 92// Force cookie path (but do not change lifetime)
94$cookie = session_get_cookie_params(); 93$cookie = session_get_cookie_params();
95$cookiedir = ''; 94$cookiedir = '';
@@ -1246,7 +1245,7 @@ function renderPage($conf, $pluginManager, $LINKSDB)
1246 } 1245 }
1247 1246
1248 // lf_id should only be present if the link exists. 1247 // lf_id should only be present if the link exists.
1249 $id = !empty($_POST['lf_id']) ? intval(escape($_POST['lf_id'])) : $LINKSDB->getNextId(); 1248 $id = isset($_POST['lf_id']) ? intval(escape($_POST['lf_id'])) : $LINKSDB->getNextId();
1250 // Linkdate is kept here to: 1249 // Linkdate is kept here to:
1251 // - use the same permalink for notes as they're displayed when creating them 1250 // - use the same permalink for notes as they're displayed when creating them
1252 // - let users hack creation date of their posts 1251 // - let users hack creation date of their posts
@@ -1319,9 +1318,13 @@ function renderPage($conf, $pluginManager, $LINKSDB)
1319 // -------- User clicked the "Cancel" button when editing a link. 1318 // -------- User clicked the "Cancel" button when editing a link.
1320 if (isset($_POST['cancel_edit'])) 1319 if (isset($_POST['cancel_edit']))
1321 { 1320 {
1321 $id = isset($_POST['lf_id']) ? (int) escape($_POST['lf_id']) : false;
1322 if (! isset($LINKSDB[$id])) {
1323 header('Location: ?');
1324 }
1322 // If we are called from the bookmarklet, we must close the popup: 1325 // If we are called from the bookmarklet, we must close the popup:
1323 if (isset($_GET['source']) && ($_GET['source']=='bookmarklet' || $_GET['source']=='firefoxsocialapi')) { echo '<script>self.close();</script>'; exit; } 1326 if (isset($_GET['source']) && ($_GET['source']=='bookmarklet' || $_GET['source']=='firefoxsocialapi')) { echo '<script>self.close();</script>'; exit; }
1324 $link = $LINKSDB[(int) escape($_POST['lf_id'])]; 1327 $link = $LINKSDB[$id];
1325 $returnurl = ( isset($_POST['returnurl']) ? $_POST['returnurl'] : '?' ); 1328 $returnurl = ( isset($_POST['returnurl']) ? $_POST['returnurl'] : '?' );
1326 // Scroll to the link which has been edited. 1329 // Scroll to the link which has been edited.
1327 $returnurl .= '#'. $link['shorturl']; 1330 $returnurl .= '#'. $link['shorturl'];
diff --git a/shaarli_version.php b/shaarli_version.php
index 3f79a4c6..9167b43e 100644
--- a/shaarli_version.php
+++ b/shaarli_version.php
@@ -1 +1 @@
<?php /* 0.8.3 */ ?> <?php /* dev */ ?>
diff --git a/tests/ApplicationUtilsTest.php b/tests/ApplicationUtilsTest.php
index ad86e21c..ff4c9e17 100644
--- a/tests/ApplicationUtilsTest.php
+++ b/tests/ApplicationUtilsTest.php
@@ -17,7 +17,7 @@ class FakeApplicationUtils extends ApplicationUtils
17 /** 17 /**
18 * Toggle HTTP requests, allow overriding the version code 18 * Toggle HTTP requests, allow overriding the version code
19 */ 19 */
20 public static function getLatestGitVersionCode($url, $timeout=0) 20 public static function getVersion($url, $timeout=0)
21 { 21 {
22 return self::$VERSION_CODE; 22 return self::$VERSION_CODE;
23 } 23 }
@@ -45,17 +45,27 @@ class ApplicationUtilsTest extends PHPUnit_Framework_TestCase
45 } 45 }
46 46
47 /** 47 /**
48 * Remove test version file if it exists
49 */
50 public function tearDown()
51 {
52 if (is_file('sandbox/version.php')) {
53 unlink('sandbox/version.php');
54 }
55 }
56
57 /**
48 * Retrieve the latest version code available on Git 58 * Retrieve the latest version code available on Git
49 * 59 *
50 * Expected format: Semantic Versioning - major.minor.patch 60 * Expected format: Semantic Versioning - major.minor.patch
51 */ 61 */
52 public function testGetLatestGitVersionCode() 62 public function testGetVersionCode()
53 { 63 {
54 $testTimeout = 10; 64 $testTimeout = 10;
55 65
56 $this->assertEquals( 66 $this->assertEquals(
57 '0.5.4', 67 '0.5.4',
58 ApplicationUtils::getLatestGitVersionCode( 68 ApplicationUtils::getVersion(
59 'https://raw.githubusercontent.com/shaarli/Shaarli/' 69 'https://raw.githubusercontent.com/shaarli/Shaarli/'
60 .'v0.5.4/shaarli_version.php', 70 .'v0.5.4/shaarli_version.php',
61 $testTimeout 71 $testTimeout
@@ -63,23 +73,35 @@ class ApplicationUtilsTest extends PHPUnit_Framework_TestCase
63 ); 73 );
64 $this->assertRegExp( 74 $this->assertRegExp(
65 self::$versionPattern, 75 self::$versionPattern,
66 ApplicationUtils::getLatestGitVersionCode( 76 ApplicationUtils::getVersion(
67 'https://raw.githubusercontent.com/shaarli/Shaarli/' 77 'https://raw.githubusercontent.com/shaarli/Shaarli/'
68 .'master/shaarli_version.php', 78 .'latest/shaarli_version.php',
69 $testTimeout 79 $testTimeout
70 ) 80 )
71 ); 81 );
72 } 82 }
73 83
74 /** 84 /**
75 * Attempt to retrieve the latest version from an invalid URL 85 * Attempt to retrieve the latest version from an invalid File
86 */
87 public function testGetVersionCodeFromFile()
88 {
89 file_put_contents('sandbox/version.php', '<?php /* 1.2.3 */ ?>'. PHP_EOL);
90 $this->assertEquals(
91 '1.2.3',
92 ApplicationUtils::getVersion('sandbox/version.php', 1)
93 );
94 }
95
96 /**
97 * Attempt to retrieve the latest version from an invalid File
76 */ 98 */
77 public function testGetLatestGitVersionCodeInvalidUrl() 99 public function testGetVersionCodeInvalidFile()
78 { 100 {
79 $oldlog = ini_get('error_log'); 101 $oldlog = ini_get('error_log');
80 ini_set('error_log', '/dev/null'); 102 ini_set('error_log', '/dev/null');
81 $this->assertFalse( 103 $this->assertFalse(
82 ApplicationUtils::getLatestGitVersionCode('htttp://null.io', 1) 104 ApplicationUtils::getVersion('idontexist', 1)
83 ); 105 );
84 ini_set('error_log', $oldlog); 106 ini_set('error_log', $oldlog);
85 } 107 }
@@ -332,4 +354,15 @@ class ApplicationUtilsTest extends PHPUnit_Framework_TestCase
332 ApplicationUtils::checkResourcePermissions($conf) 354 ApplicationUtils::checkResourcePermissions($conf)
333 ); 355 );
334 } 356 }
357
358 /**
359 * Check update with 'dev' as curent version (master branch).
360 * It should always return false.
361 */
362 public function testCheckUpdateDev()
363 {
364 $this->assertFalse(
365 ApplicationUtils::checkUpdate('dev', self::$testUpdateFile, 100, true, true)
366 );
367 }
335} 368}