diff --git a/app/config.php b/app/config.php index a09cde69..f0d85155 100644 --- a/app/config.php +++ b/app/config.php @@ -32,6 +32,7 @@ use PhpSchool\PhpWorkshop\Patch; use PhpSchool\PhpWorkshop\ResultAggregator; use PhpSchool\PSX\Factory as PsxFactory; +use PhpSchool\PhpWorkshop\WorkshopType; use PhpSchool\PSX\SyntaxHighlighter; use PhpSchool\PhpWorkshop\Check\FileExistsCheck; use PhpSchool\PhpWorkshop\Check\FunctionRequirementsCheck; @@ -46,7 +47,6 @@ use PhpSchool\PhpWorkshop\CommandRouter; use PhpSchool\PhpWorkshop\ExerciseRenderer; use PhpSchool\PhpWorkshop\ExerciseRepository; -use PhpSchool\PhpWorkshop\ExerciseRunner; use PhpSchool\PhpWorkshop\Factory\MarkdownCliRendererFactory; use PhpSchool\PhpWorkshop\MarkdownRenderer; use PhpSchool\PhpWorkshop\ResultRenderer\ResultsRenderer; @@ -58,6 +58,7 @@ return [ 'appName' => basename($_SERVER['argv'][0]), + WorkshopType::class => WorkshopType::STANDARD(), ExerciseDispatcher::class => function (ContainerInterface $c) { $dispatcher = new ExerciseDispatcher( $c->get(RunnerFactory::class), diff --git a/composer.json b/composer.json index a0e76d97..fc6223e6 100644 --- a/composer.json +++ b/composer.json @@ -25,7 +25,7 @@ "fzaninotto/faker": "^1.5", "aydin-hassan/cli-md-renderer": "^2.0", "php-school/psx": "~1.0", - "php-school/cli-menu": "^1.0.3", + "php-school/cli-menu": "^1.2.0", "beberlei/assert": "^2.4", "psr/http-message": "^1.0", "zendframework/zend-diactoros": "^1.1.3", diff --git a/composer.lock b/composer.lock index fb3291da..837b5565 100644 --- a/composer.lock +++ b/composer.lock @@ -4,8 +4,8 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "hash": "175a827bff16df6442df853b0cfbf0cb", - "content-hash": "be74ee1640009c2f55fbaa5dd674d7a9", + "hash": "845883fbd1c2d093860eb38eed31f15d", + "content-hash": "6131dd4336b6da5ef329e0c40ecd285e", "packages": [ { "name": "aydin-hassan/cli-md-renderer", @@ -52,16 +52,16 @@ }, { "name": "beberlei/assert", - "version": "v2.5.1", + "version": "v2.6.4", "source": { "type": "git", "url": "https://github.com/beberlei/assert.git", - "reference": "8a9ad22f1220e47a6d174843e8abef08f5eac441" + "reference": "ebab3d93e5f8f1ef95e016970ef149b4ad5ac024" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/beberlei/assert/zipball/8a9ad22f1220e47a6d174843e8abef08f5eac441", - "reference": "8a9ad22f1220e47a6d174843e8abef08f5eac441", + "url": "https://api.github.com/repos/beberlei/assert/zipball/ebab3d93e5f8f1ef95e016970ef149b4ad5ac024", + "reference": "ebab3d93e5f8f1ef95e016970ef149b4ad5ac024", "shasum": "" }, "require": { @@ -74,7 +74,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "2.5-dev" } }, "autoload": { @@ -92,7 +92,13 @@ "authors": [ { "name": "Benjamin Eberlei", - "email": "kontakt@beberlei.de" + "email": "kontakt@beberlei.de", + "role": "Lead Developer" + }, + { + "name": "Richard Quadling", + "email": "rquadling@gmail.com", + "role": "Collaborator" } ], "description": "Thin assertion library for input validation in business models.", @@ -101,7 +107,7 @@ "assertion", "validation" ], - "time": "2016-06-20 12:01:28" + "time": "2016-10-03 10:58:03" }, { "name": "container-interop/container-interop", @@ -300,16 +306,16 @@ }, { "name": "myclabs/php-enum", - "version": "1.4.1", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/myclabs/php-enum.git", - "reference": "07da9d1a7469941ae05b046193fac4c83bdb0d7e" + "reference": "e83e992a5b5a0858ef7adbc9239a749d71fb6979" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/php-enum/zipball/07da9d1a7469941ae05b046193fac4c83bdb0d7e", - "reference": "07da9d1a7469941ae05b046193fac4c83bdb0d7e", + "url": "https://api.github.com/repos/myclabs/php-enum/zipball/e83e992a5b5a0858ef7adbc9239a749d71fb6979", + "reference": "e83e992a5b5a0858ef7adbc9239a749d71fb6979", "shasum": "" }, "require": { @@ -340,20 +346,20 @@ "keywords": [ "enum" ], - "time": "2015-07-22 16:14:03" + "time": "2016-08-01 15:48:47" }, { "name": "nikic/php-parser", - "version": "v2.1.0", + "version": "v2.1.1", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "47b254ea51f1d6d5dc04b9b299e88346bf2369e3" + "reference": "4dd659edadffdc2143e4753df655d866dbfeedf0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/47b254ea51f1d6d5dc04b9b299e88346bf2369e3", - "reference": "47b254ea51f1d6d5dc04b9b299e88346bf2369e3", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/4dd659edadffdc2143e4753df655d866dbfeedf0", + "reference": "4dd659edadffdc2143e4753df655d866dbfeedf0", "shasum": "" }, "require": { @@ -391,20 +397,20 @@ "parser", "php" ], - "time": "2016-04-19 13:41:41" + "time": "2016-09-16 12:04:44" }, { "name": "php-di/invoker", - "version": "1.3.2", + "version": "1.3.3", "source": { "type": "git", "url": "https://github.com/PHP-DI/Invoker.git", - "reference": "4140c38ca17268adc500b1e5c85c4055e48608d2" + "reference": "1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/4140c38ca17268adc500b1e5c85c4055e48608d2", - "reference": "4140c38ca17268adc500b1e5c85c4055e48608d2", + "url": "https://api.github.com/repos/PHP-DI/Invoker/zipball/1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7", + "reference": "1f4ca63b9abc66109e53b255e465d0ddb5c2e3f7", "shasum": "" }, "require": { @@ -434,26 +440,26 @@ "invoke", "invoker" ], - "time": "2016-06-12 09:09:55" + "time": "2016-07-14 13:09:58" }, { "name": "php-di/php-di", - "version": "5.3.0", + "version": "5.4.0", "source": { "type": "git", "url": "https://github.com/PHP-DI/PHP-DI.git", - "reference": "854a6d8f54e2146f0a34f0a28f0adea688b634a3" + "reference": "e348393488fa909e4bc0707ba5c9c44cd602a1cb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/854a6d8f54e2146f0a34f0a28f0adea688b634a3", - "reference": "854a6d8f54e2146f0a34f0a28f0adea688b634a3", + "url": "https://api.github.com/repos/PHP-DI/PHP-DI/zipball/e348393488fa909e4bc0707ba5c9c44cd602a1cb", + "reference": "e348393488fa909e4bc0707ba5c9c44cd602a1cb", "shasum": "" }, "require": { "container-interop/container-interop": "~1.0", "php": ">=5.5.0", - "php-di/invoker": "^1.1.1", + "php-di/invoker": "^1.3.2", "php-di/phpdoc-reader": "^2.0.1" }, "provide": { @@ -494,7 +500,7 @@ "dependency injection", "di" ], - "time": "2016-06-01 17:23:41" + "time": "2016-08-23 20:18:00" }, { "name": "php-di/phpdoc-reader", @@ -535,16 +541,16 @@ }, { "name": "php-school/cli-menu", - "version": "1.0.3", + "version": "1.2.0", "source": { "type": "git", "url": "https://github.com/php-school/cli-menu.git", - "reference": "6efe9f6203ce311cc49c74d8f8ac281f0d8dbfae" + "reference": "c7bdb1b67a9d394151b8c4bc78f8d1594d21c0c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-school/cli-menu/zipball/6efe9f6203ce311cc49c74d8f8ac281f0d8dbfae", - "reference": "6efe9f6203ce311cc49c74d8f8ac281f0d8dbfae", + "url": "https://api.github.com/repos/php-school/cli-menu/zipball/c7bdb1b67a9d394151b8c4bc78f8d1594d21c0c5", + "reference": "c7bdb1b67a9d394151b8c4bc78f8d1594d21c0c5", "shasum": "" }, "require": { @@ -576,7 +582,15 @@ } ], "description": "A command line menu helper in PHP", - "time": "2016-01-03 11:32:10" + "keywords": [ + "cli", + "console", + "menu", + "php-school", + "phpschool", + "terminal" + ], + "time": "2016-10-03 18:37:45" }, { "name": "php-school/psx", @@ -622,16 +636,16 @@ }, { "name": "psr/http-message", - "version": "1.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/http-message.git", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298" + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/http-message/zipball/85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", - "reference": "85d63699f0dbedb190bbd4b0d2b9dc707ea4c298", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", "shasum": "" }, "require": { @@ -659,6 +673,7 @@ } ], "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", "keywords": [ "http", "http-message", @@ -667,20 +682,20 @@ "request", "response" ], - "time": "2015-05-04 20:22:00" + "time": "2016-08-06 14:39:51" }, { "name": "symfony/filesystem", - "version": "v3.1.1", + "version": "v3.1.5", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "5751e80d6f94b7c018f338a4a7be0b700d6f3058" + "reference": "682fd8fdb3135fdf05fc496a01579ccf6c85c0e5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/5751e80d6f94b7c018f338a4a7be0b700d6f3058", - "reference": "5751e80d6f94b7c018f338a4a7be0b700d6f3058", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/682fd8fdb3135fdf05fc496a01579ccf6c85c0e5", + "reference": "682fd8fdb3135fdf05fc496a01579ccf6c85c0e5", "shasum": "" }, "require": { @@ -716,20 +731,20 @@ ], "description": "Symfony Filesystem Component", "homepage": "https://symfony.com", - "time": "2016-04-12 18:27:47" + "time": "2016-09-14 00:18:46" }, { "name": "symfony/process", - "version": "v3.1.1", + "version": "v3.1.5", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "6350e63ed9c232da50e00f00a7e0330f066387a2" + "reference": "66de154ae86b1a07001da9fbffd620206e4faf94" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/6350e63ed9c232da50e00f00a7e0330f066387a2", - "reference": "6350e63ed9c232da50e00f00a7e0330f066387a2", + "url": "https://api.github.com/repos/symfony/process/zipball/66de154ae86b1a07001da9fbffd620206e4faf94", + "reference": "66de154ae86b1a07001da9fbffd620206e4faf94", "shasum": "" }, "require": { @@ -765,20 +780,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2016-06-06 11:42:41" + "time": "2016-09-29 14:13:09" }, { "name": "zendframework/zend-diactoros", - "version": "1.3.5", + "version": "1.3.6", "source": { "type": "git", "url": "https://github.com/zendframework/zend-diactoros.git", - "reference": "b1d59735b672865dbeb930805029c24f226e3e77" + "reference": "a60da179c37f2c4e44ef734d0b92824a58943f7f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/b1d59735b672865dbeb930805029c24f226e3e77", - "reference": "b1d59735b672865dbeb930805029c24f226e3e77", + "url": "https://api.github.com/repos/zendframework/zend-diactoros/zipball/a60da179c37f2c4e44ef734d0b92824a58943f7f", + "reference": "a60da179c37f2c4e44ef734d0b92824a58943f7f", "shasum": "" }, "require": { @@ -789,7 +804,7 @@ "psr/http-message-implementation": "~1.0.0" }, "require-dev": { - "phpunit/phpunit": "~4.6", + "phpunit/phpunit": "^4.6 || ^5.5", "squizlabs/php_codesniffer": "^2.3.1" }, "type": "library", @@ -815,28 +830,31 @@ "psr", "psr-7" ], - "time": "2016-03-17 18:02:05" + "time": "2016-09-07 17:57:29" } ], "packages-dev": [ { "name": "composer/ca-bundle", - "version": "1.0.2", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/composer/ca-bundle.git", - "reference": "a2995e5fe351055f2c7630166af12ce8fd03edfc" + "reference": "ec21a59414b99501e723b63fd664aa8ead9c5680" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/ca-bundle/zipball/a2995e5fe351055f2c7630166af12ce8fd03edfc", - "reference": "a2995e5fe351055f2c7630166af12ce8fd03edfc", + "url": "https://api.github.com/repos/composer/ca-bundle/zipball/ec21a59414b99501e723b63fd664aa8ead9c5680", + "reference": "ec21a59414b99501e723b63fd664aa8ead9c5680", "shasum": "" }, "require": { + "ext-openssl": "*", + "ext-pcre": "*", "php": "^5.3.2 || ^7.0" }, "require-dev": { + "psr/log": "^1.0", "symfony/process": "^2.5 || ^3.0" }, "suggest": { @@ -872,27 +890,27 @@ "ssl", "tls" ], - "time": "2016-04-13 10:13:24" + "time": "2016-09-04 19:00:06" }, { "name": "composer/composer", - "version": "1.1.3", + "version": "1.2.1", "source": { "type": "git", "url": "https://github.com/composer/composer.git", - "reference": "30ab6f1c1753267d181839142fafe022313c3c9a" + "reference": "16422c4b1ac4286f7caecf5211136dc073191672" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/composer/zipball/30ab6f1c1753267d181839142fafe022313c3c9a", - "reference": "30ab6f1c1753267d181839142fafe022313c3c9a", + "url": "https://api.github.com/repos/composer/composer/zipball/16422c4b1ac4286f7caecf5211136dc073191672", + "reference": "16422c4b1ac4286f7caecf5211136dc073191672", "shasum": "" }, "require": { "composer/ca-bundle": "^1.0", "composer/semver": "^1.0", "composer/spdx-licenses": "^1.0", - "justinrainbow/json-schema": "^1.6", + "justinrainbow/json-schema": "^1.6 || ^2.0", "php": "^5.3.2 || ^7.0", "psr/log": "^1.0", "seld/cli-prompt": "^1.0", @@ -905,7 +923,7 @@ }, "require-dev": { "phpunit/phpunit": "^4.5 || ^5.0.5", - "phpunit/phpunit-mock-objects": "2.3.0 || ^3.0" + "phpunit/phpunit-mock-objects": "^2.3 || ^3.0" }, "suggest": { "ext-openssl": "Enabling the openssl extension allows you to access https URLs for repositories and packages", @@ -918,7 +936,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.1-dev" + "dev-master": "1.2-dev" } }, "autoload": { @@ -949,20 +967,20 @@ "dependency", "package" ], - "time": "2016-06-26 14:42:08" + "time": "2016-09-12 09:27:20" }, { "name": "composer/semver", - "version": "1.4.1", + "version": "1.4.2", "source": { "type": "git", "url": "https://github.com/composer/semver.git", - "reference": "03c9de5aa25e7672c4ad251eeaba0c47a06c8b98" + "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/semver/zipball/03c9de5aa25e7672c4ad251eeaba0c47a06c8b98", - "reference": "03c9de5aa25e7672c4ad251eeaba0c47a06c8b98", + "url": "https://api.github.com/repos/composer/semver/zipball/c7cb9a2095a074d131b65a8a0cd294479d785573", + "reference": "c7cb9a2095a074d131b65a8a0cd294479d785573", "shasum": "" }, "require": { @@ -1011,20 +1029,20 @@ "validation", "versioning" ], - "time": "2016-06-02 09:04:51" + "time": "2016-08-30 16:08:34" }, { "name": "composer/spdx-licenses", - "version": "1.1.4", + "version": "1.1.5", "source": { "type": "git", "url": "https://github.com/composer/spdx-licenses.git", - "reference": "88c26372b1afac36d8db601cdf04ad8716f53d88" + "reference": "96c6a07b05b716e89a44529d060bc7f5c263cb13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/88c26372b1afac36d8db601cdf04ad8716f53d88", - "reference": "88c26372b1afac36d8db601cdf04ad8716f53d88", + "url": "https://api.github.com/repos/composer/spdx-licenses/zipball/96c6a07b05b716e89a44529d060bc7f5c263cb13", + "reference": "96c6a07b05b716e89a44529d060bc7f5c263cb13", "shasum": "" }, "require": { @@ -1072,7 +1090,7 @@ "spdx", "validator" ], - "time": "2016-05-04 12:27:30" + "time": "2016-09-28 07:17:45" }, { "name": "doctrine/instantiator", @@ -1130,25 +1148,25 @@ }, { "name": "justinrainbow/json-schema", - "version": "1.6.1", + "version": "2.0.5", "source": { "type": "git", "url": "https://github.com/justinrainbow/json-schema.git", - "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341" + "reference": "6b2a33e6a768f96bdc2ead5600af0822eed17d67" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/cc84765fb7317f6b07bd8ac78364747f95b86341", - "reference": "cc84765fb7317f6b07bd8ac78364747f95b86341", + "url": "https://api.github.com/repos/justinrainbow/json-schema/zipball/6b2a33e6a768f96bdc2ead5600af0822eed17d67", + "reference": "6b2a33e6a768f96bdc2ead5600af0822eed17d67", "shasum": "" }, "require": { - "php": ">=5.3.29" + "php": ">=5.3.3" }, "require-dev": { - "json-schema/json-schema-test-suite": "1.1.0", + "json-schema/json-schema-test-suite": "1.2.0", "phpdocumentor/phpdocumentor": "~2", - "phpunit/phpunit": "~3.7" + "phpunit/phpunit": "^4.8.22" }, "bin": [ "bin/validate-json" @@ -1156,7 +1174,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "1.6.x-dev" + "dev-master": "2.0.x-dev" } }, "autoload": { @@ -1166,7 +1184,7 @@ }, "notification-url": "https://packagist.org/downloads/", "license": [ - "BSD-3-Clause" + "MIT" ], "authors": [ { @@ -1192,20 +1210,20 @@ "json", "schema" ], - "time": "2016-01-25 15:43:01" + "time": "2016-06-02 10:59:52" }, { "name": "myclabs/deep-copy", - "version": "1.5.1", + "version": "1.5.4", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "a8773992b362b58498eed24bf85005f363c34771" + "reference": "ea74994a3dc7f8d2f65a06009348f2d63c81e61f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/a8773992b362b58498eed24bf85005f363c34771", - "reference": "a8773992b362b58498eed24bf85005f363c34771", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/ea74994a3dc7f8d2f65a06009348f2d63c81e61f", + "reference": "ea74994a3dc7f8d2f65a06009348f2d63c81e61f", "shasum": "" }, "require": { @@ -1234,7 +1252,7 @@ "object", "object graph" ], - "time": "2015-11-20 12:04:31" + "time": "2016-09-16 13:37:59" }, { "name": "phpdocumentor/reflection-common", @@ -1292,16 +1310,16 @@ }, { "name": "phpdocumentor/reflection-docblock", - "version": "3.1.0", + "version": "3.1.1", "source": { "type": "git", "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "9270140b940ff02e58ec577c237274e92cd40cdd" + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/9270140b940ff02e58ec577c237274e92cd40cdd", - "reference": "9270140b940ff02e58ec577c237274e92cd40cdd", + "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/8331b5efe816ae05461b7ca1e721c01b46bafb3e", + "reference": "8331b5efe816ae05461b7ca1e721c01b46bafb3e", "shasum": "" }, "require": { @@ -1333,7 +1351,7 @@ } ], "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", - "time": "2016-06-10 09:48:41" + "time": "2016-09-30 07:12:33" }, { "name": "phpdocumentor/type-resolver", @@ -1446,16 +1464,16 @@ }, { "name": "phpunit/php-code-coverage", - "version": "4.0.0", + "version": "4.0.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "900370c81280cc0d942ffbc5912d80464eaee7e9" + "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/900370c81280cc0d942ffbc5912d80464eaee7e9", - "reference": "900370c81280cc0d942ffbc5912d80464eaee7e9", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/5f3f7e736d6319d5f1fc402aff8b026da26709a3", + "reference": "5f3f7e736d6319d5f1fc402aff8b026da26709a3", "shasum": "" }, "require": { @@ -1464,7 +1482,7 @@ "phpunit/php-text-template": "~1.2", "phpunit/php-token-stream": "^1.4.2", "sebastian/code-unit-reverse-lookup": "~1.0", - "sebastian/environment": "^1.3.2", + "sebastian/environment": "^1.3.2 || ^2.0", "sebastian/version": "~1.0|~2.0" }, "require-dev": { @@ -1505,7 +1523,7 @@ "testing", "xunit" ], - "time": "2016-06-03 05:03:56" + "time": "2016-07-26 14:39:29" }, { "name": "phpunit/php-file-iterator", @@ -1690,28 +1708,28 @@ }, { "name": "phpunit/phpunit", - "version": "5.4.6", + "version": "5.5.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "2f1fc94b77ea6418bd6a06c64a1dac0645fbce59" + "reference": "146e0fe0bb7f44d1cefade0c93e86fe0b206dd79" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/2f1fc94b77ea6418bd6a06c64a1dac0645fbce59", - "reference": "2f1fc94b77ea6418bd6a06c64a1dac0645fbce59", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/146e0fe0bb7f44d1cefade0c93e86fe0b206dd79", + "reference": "146e0fe0bb7f44d1cefade0c93e86fe0b206dd79", "shasum": "" }, "require": { "ext-dom": "*", "ext-json": "*", - "ext-pcre": "*", - "ext-reflection": "*", - "ext-spl": "*", + "ext-libxml": "*", + "ext-mbstring": "*", + "ext-xml": "*", "myclabs/deep-copy": "~1.3", "php": "^5.6 || ^7.0", "phpspec/prophecy": "^1.3.1", - "phpunit/php-code-coverage": "^4.0", + "phpunit/php-code-coverage": "^4.0.1", "phpunit/php-file-iterator": "~1.4", "phpunit/php-text-template": "~1.2", "phpunit/php-timer": "^1.0.6", @@ -1729,7 +1747,12 @@ "conflict": { "phpdocumentor/reflection-docblock": "3.0.2" }, + "require-dev": { + "ext-pdo": "*" + }, "suggest": { + "ext-tidy": "*", + "ext-xdebug": "*", "phpunit/php-invoker": "~1.1" }, "bin": [ @@ -1738,7 +1761,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "5.4.x-dev" + "dev-master": "5.5.x-dev" } }, "autoload": { @@ -1764,20 +1787,20 @@ "testing", "xunit" ], - "time": "2016-06-16 06:01:15" + "time": "2016-10-03 07:48:45" }, { "name": "phpunit/phpunit-mock-objects", - "version": "3.2.3", + "version": "3.3.0", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit-mock-objects.git", - "reference": "b13d0d9426ced06958bd32104653526a6c998a52" + "reference": "7462c19bdb9814f6e6bdeb5cad3eb3ce72c6e0da" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/b13d0d9426ced06958bd32104653526a6c998a52", - "reference": "b13d0d9426ced06958bd32104653526a6c998a52", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit-mock-objects/zipball/7462c19bdb9814f6e6bdeb5cad3eb3ce72c6e0da", + "reference": "7462c19bdb9814f6e6bdeb5cad3eb3ce72c6e0da", "shasum": "" }, "require": { @@ -1823,26 +1846,34 @@ "mock", "xunit" ], - "time": "2016-06-12 07:37:26" + "time": "2016-09-27 03:17:40" }, { "name": "psr/log", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/log.git", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b" + "reference": "5277094ed527a1c4477177d102fe4c53551953e0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/log/zipball/fe0936ee26643249e916849d48e3a51d5f5e278b", - "reference": "fe0936ee26643249e916849d48e3a51d5f5e278b", + "url": "https://api.github.com/repos/php-fig/log/zipball/5277094ed527a1c4477177d102fe4c53551953e0", + "reference": "5277094ed527a1c4477177d102fe4c53551953e0", "shasum": "" }, + "require": { + "php": ">=5.3.0" + }, "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, "autoload": { - "psr-0": { - "Psr\\Log\\": "" + "psr-4": { + "Psr\\Log\\": "Psr/Log/" } }, "notification-url": "https://packagist.org/downloads/", @@ -1856,12 +1887,13 @@ } ], "description": "Common interface for logging libraries", + "homepage": "https://github.com/php-fig/log", "keywords": [ "log", "psr", "psr-3" ], - "time": "2012-12-21 11:40:51" + "time": "2016-09-19 16:02:08" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -2026,23 +2058,23 @@ }, { "name": "sebastian/environment", - "version": "1.3.7", + "version": "1.3.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716" + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/4e8f0da10ac5802913afc151413bc8c53b6c2716", - "reference": "4e8f0da10ac5802913afc151413bc8c53b6c2716", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/be2c607e43ce4c89ecd60e75c6a85c126e754aea", + "reference": "be2c607e43ce4c89ecd60e75c6a85c126e754aea", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3 || ^7.0" }, "require-dev": { - "phpunit/phpunit": "~4.4" + "phpunit/phpunit": "^4.8 || ^5.0" }, "type": "library", "extra": { @@ -2072,7 +2104,7 @@ "environment", "hhvm" ], - "time": "2016-05-17 03:18:57" + "time": "2016-08-18 05:49:44" }, { "name": "sebastian/exporter", @@ -2426,16 +2458,16 @@ }, { "name": "seld/jsonlint", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/Seldaek/jsonlint.git", - "reference": "66834d3e3566bb5798db7294619388786ae99394" + "reference": "e827b5254d3e58c736ea2c5616710983d80b0b70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/66834d3e3566bb5798db7294619388786ae99394", - "reference": "66834d3e3566bb5798db7294619388786ae99394", + "url": "https://api.github.com/repos/Seldaek/jsonlint/zipball/e827b5254d3e58c736ea2c5616710983d80b0b70", + "reference": "e827b5254d3e58c736ea2c5616710983d80b0b70", "shasum": "" }, "require": { @@ -2468,7 +2500,7 @@ "parser", "validator" ], - "time": "2015-11-21 02:21:41" + "time": "2016-09-14 15:17:56" }, { "name": "seld/phar-utils", @@ -2516,16 +2548,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "2.6.1", + "version": "2.7.0", "source": { "type": "git", "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "fb72ed32f8418db5e7770be1653e62e0d6f5dd3d" + "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/fb72ed32f8418db5e7770be1653e62e0d6f5dd3d", - "reference": "fb72ed32f8418db5e7770be1653e62e0d6f5dd3d", + "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", + "reference": "571e27b6348e5b3a637b2abc82ac0d01e6d7bbed", "shasum": "" }, "require": { @@ -2590,24 +2622,25 @@ "phpcs", "standards" ], - "time": "2016-05-30 22:24:32" + "time": "2016-09-01 23:53:02" }, { "name": "symfony/console", - "version": "v3.1.1", + "version": "v3.1.5", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "64a4d43b045f07055bb197650159769604cb2a92" + "reference": "6cb0872fb57b38b3b09ff213c21ed693956b9eb0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/64a4d43b045f07055bb197650159769604cb2a92", - "reference": "64a4d43b045f07055bb197650159769604cb2a92", + "url": "https://api.github.com/repos/symfony/console/zipball/6cb0872fb57b38b3b09ff213c21ed693956b9eb0", + "reference": "6cb0872fb57b38b3b09ff213c21ed693956b9eb0", "shasum": "" }, "require": { "php": ">=5.5.9", + "symfony/debug": "~2.8|~3.0", "symfony/polyfill-mbstring": "~1.0" }, "require-dev": { @@ -2650,20 +2683,77 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2016-06-14 11:18:07" + "time": "2016-09-28 00:11:12" + }, + { + "name": "symfony/debug", + "version": "v3.1.5", + "source": { + "type": "git", + "url": "https://github.com/symfony/debug.git", + "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/debug/zipball/e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", + "reference": "e2b3f74a67fc928adc3c1b9027f73e1bc01190a8", + "shasum": "" + }, + "require": { + "php": ">=5.5.9", + "psr/log": "~1.0" + }, + "conflict": { + "symfony/http-kernel": ">=2.3,<2.3.24|~2.4.0|>=2.5,<2.5.9|>=2.6,<2.6.2" + }, + "require-dev": { + "symfony/class-loader": "~2.8|~3.0", + "symfony/http-kernel": "~2.8|~3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "3.1-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Component\\Debug\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony Debug Component", + "homepage": "https://symfony.com", + "time": "2016-09-06 11:02:40" }, { "name": "symfony/finder", - "version": "v3.1.1", + "version": "v3.1.5", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "40d17ed287bf51a2f884c4619ce8ff2a1c5cd219" + "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/40d17ed287bf51a2f884c4619ce8ff2a1c5cd219", - "reference": "40d17ed287bf51a2f884c4619ce8ff2a1c5cd219", + "url": "https://api.github.com/repos/symfony/finder/zipball/205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", + "reference": "205b5ffbb518a98ba2ae60a52656c4a31ab00c6f", "shasum": "" }, "require": { @@ -2699,7 +2789,7 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2016-05-13 18:06:41" + "time": "2016-09-28 00:11:12" }, { "name": "symfony/polyfill-mbstring", @@ -2762,16 +2852,16 @@ }, { "name": "symfony/yaml", - "version": "v3.1.1", + "version": "v3.1.5", "source": { "type": "git", "url": "https://github.com/symfony/yaml.git", - "reference": "c5a7e7fc273c758b92b85dcb9c46149ccda89623" + "reference": "368b9738d4033c8b93454cb0dbd45d305135a6d3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/yaml/zipball/c5a7e7fc273c758b92b85dcb9c46149ccda89623", - "reference": "c5a7e7fc273c758b92b85dcb9c46149ccda89623", + "url": "https://api.github.com/repos/symfony/yaml/zipball/368b9738d4033c8b93454cb0dbd45d305135a6d3", + "reference": "368b9738d4033c8b93454cb0dbd45d305135a6d3", "shasum": "" }, "require": { @@ -2807,32 +2897,33 @@ ], "description": "Symfony Yaml Component", "homepage": "https://symfony.com", - "time": "2016-06-14 11:18:07" + "time": "2016-09-25 08:27:07" }, { "name": "webmozart/assert", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/webmozart/assert.git", - "reference": "30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde" + "reference": "bb2d123231c095735130cc8f6d31385a44c7b308" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/webmozart/assert/zipball/30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde", - "reference": "30eed06dd6bc88410a4ff7f77b6d22f3ce13dbde", + "url": "https://api.github.com/repos/webmozart/assert/zipball/bb2d123231c095735130cc8f6d31385a44c7b308", + "reference": "bb2d123231c095735130cc8f6d31385a44c7b308", "shasum": "" }, "require": { - "php": ">=5.3.3" + "php": "^5.3.3|^7.0" }, "require-dev": { - "phpunit/phpunit": "^4.6" + "phpunit/phpunit": "^4.6", + "sebastian/version": "^1.0.1" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "1.0-dev" + "dev-master": "1.2-dev" } }, "autoload": { @@ -2856,7 +2947,7 @@ "check", "validate" ], - "time": "2015-08-24 13:29:44" + "time": "2016-08-09 15:02:57" } ], "aliases": [], diff --git a/src/Factory/MenuFactory.php b/src/Factory/MenuFactory.php index b233674a..33830bf1 100644 --- a/src/Factory/MenuFactory.php +++ b/src/Factory/MenuFactory.php @@ -13,7 +13,9 @@ use PhpSchool\PhpWorkshop\ExerciseRenderer; use PhpSchool\PhpWorkshop\ExerciseRepository; use PhpSchool\PhpWorkshop\MenuItem\ResetProgress; +use PhpSchool\PhpWorkshop\UserState; use PhpSchool\PhpWorkshop\UserStateSerializer; +use PhpSchool\PhpWorkshop\WorkshopType; /** * Class MenuFactory @@ -31,6 +33,7 @@ public function __invoke(ContainerInterface $c) $exerciseRepository = $c->get(ExerciseRepository::class); $userState = $userStateSerializer->deSerialize(); $exerciseRenderer = $c->get(ExerciseRenderer::class); + $workshopType = $c->get(WorkshopType::class); $builder = (new CliMenuBuilder) ->addLineBreak(); @@ -44,13 +47,16 @@ public function __invoke(ContainerInterface $c) ->addLineBreak() ->addStaticItem('Exercises') ->addStaticItem('---------') - ->addItems(array_map(function (ExerciseInterface $exercise) use ($exerciseRenderer, $userState) { - return [ - $exercise->getName(), - $exerciseRenderer, - $userState->completedExercise($exercise->getName()) - ]; - }, $exerciseRepository->findAll())) + ->addItems( + array_map(function (ExerciseInterface $exercise) use ($exerciseRenderer, $userState, $workshopType) { + return [ + $exercise->getName(), + $exerciseRenderer, + $userState->completedExercise($exercise->getName()), + $this->isExerciseDisabled($exercise, $userState, $workshopType) + ]; + }, $exerciseRepository->findAll()) + ) ->addLineBreak() ->addLineBreak('-') ->addLineBreak() @@ -91,4 +97,28 @@ public function __invoke(ContainerInterface $c) return $builder->build(); } + + /** + * @param ExerciseInterface $exercise + * @param UserState $userState + * @param WorkshopType $type + * @return bool + */ + private function isExerciseDisabled(ExerciseInterface $exercise, UserState $userState, WorkshopType $type) + { + static $previous = null; + + if (null === $previous || !$type->isTutorialMode()) { + $previous = $exercise; + return false; + } + + if (in_array($previous->getName(), $userState->getCompletedExercises())) { + $previous = $exercise; + return false; + } + + $previous = $exercise; + return true; + } } diff --git a/src/WorkshopType.php b/src/WorkshopType.php new file mode 100644 index 00000000..7157f1de --- /dev/null +++ b/src/WorkshopType.php @@ -0,0 +1,24 @@ + + */ +class WorkshopType extends Enum +{ + const STANDARD = 1; + const TUTORIAL = 2; + + /** + * @return bool + */ + public function isTutorialMode() + { + return $this->getValue() === static::TUTORIAL; + } +} diff --git a/test/Factory/MenuFactoryTest.php b/test/Factory/MenuFactoryTest.php index 0d31d475..292e32fd 100644 --- a/test/Factory/MenuFactoryTest.php +++ b/test/Factory/MenuFactoryTest.php @@ -13,6 +13,7 @@ use PhpSchool\PhpWorkshop\MenuItem\ResetProgress; use PhpSchool\PhpWorkshop\UserState; use PhpSchool\PhpWorkshop\UserStateSerializer; +use PhpSchool\PhpWorkshop\WorkshopType; use PHPUnit_Framework_TestCase; /** @@ -52,6 +53,7 @@ public function testFactoryReturnsInstance() 'bgColour' => 'black', 'fgColour' => 'green', 'workshopTitle' => 'TITLE', + WorkshopType::class => WorkshopType::STANDARD() ]; $container diff --git a/test/TestWorkshopType.php b/test/TestWorkshopType.php new file mode 100644 index 00000000..d57a1e35 --- /dev/null +++ b/test/TestWorkshopType.php @@ -0,0 +1,22 @@ + + */ +class TestWorkshopType extends TestCase +{ + public function testIsTutorialMode() + { + $tutorial = WorkshopType::TUTORIAL(); + $standard = WorkshopType::STANDARD(); + + static::assertTrue($tutorial->isTutorialMode()); + static::assertFalse($standard->isTutorialMode()); + } +}