aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de>2024-03-26 21:11:58 +0000
committerMarcus Eibrink-Lunzenauer <lunzenauer@elan-ev.de>2024-03-26 21:11:58 +0000
commita4907198eb0edd9726f585b3d0f3b301f9a1d5ab (patch)
treeff6754d49d12a642cc2ae864447fe8b9ac53341c
parent8e82625c46852a81275fa8485995efca760b1abf (diff)
Add REPL cli script.
Closes #3897 Merge request studip/studip!2756
-rw-r--r--cli/Commands/Base/Tinker.php40
-rwxr-xr-xcli/studip13
-rw-r--r--composer.json3
-rw-r--r--composer.lock319
4 files changed, 277 insertions, 98 deletions
diff --git a/cli/Commands/Base/Tinker.php b/cli/Commands/Base/Tinker.php
new file mode 100644
index 0000000..1bc4f12
--- /dev/null
+++ b/cli/Commands/Base/Tinker.php
@@ -0,0 +1,40 @@
+<?php
+
+namespace Studip\Cli\Commands\Base;
+
+use Symfony\Component\Console\Command\Command;
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Style\SymfonyStyle;
+use Symfony\Component\Process\PhpExecutableFinder;
+use Symfony\Component\Process\Process;
+use Psy\Configuration;
+use Psy\Shell;
+use Psy\VersionUpdater\Checker;
+
+class Tinker extends Command
+{
+ protected static $defaultName = 'tinker';
+
+ protected function configure(): void
+ {
+ $this->setDescription('Interact with your Stud.IP in a read-eval-print loop (REPL).');
+ }
+
+ /**
+ * @SuppressWarnings(PHPMD.StaticAccess)
+ * @SuppressWarnings(PHPMD.UnusedFormalParameter)
+ */
+ protected function execute(InputInterface $input, OutputInterface $output): int
+ {
+ $config = Configuration::fromInput($input);
+ $config->setUpdateCheck(Checker::NEVER);
+ $config->setDefaultIncludes([__DIR__ . '/../../studip_cli_env.inc.php']);
+
+ $shell = new Shell($config);
+
+ return $shell->run();
+ }
+}
diff --git a/cli/studip b/cli/studip
index d981bd9..3acd4bc 100755
--- a/cli/studip
+++ b/cli/studip
@@ -13,6 +13,7 @@ require __DIR__.'/../composer/autoload.php';
$application = new Application();
$commands = [
Commands\Base\Dump::class,
+ Commands\Base\Tinker::class,
Commands\Checks\Compatibility::class,
Commands\Checks\GlobalizedConfig::class,
Commands\Checks\HelpTours::class,
@@ -38,29 +39,29 @@ $commands = [
Commands\Fix\Biest8136::class,
Commands\Fix\IconDimensions::class,
Commands\HelpContent\Migrate::class,
+ Commands\Migrate\Migrate::class,
Commands\Migrate\MigrateList::class,
Commands\Migrate\MigrateStatus::class,
- Commands\Migrate\Migrate::class,
Commands\OAuth2\Keys::class,
Commands\OAuth2\Purge::class,
+ Commands\Plugins\I18N\I18NCompile::class,
+ Commands\Plugins\I18N\I18NDetect::class,
+ Commands\Plugins\I18N\I18NExtract::class,
Commands\Plugins\PluginActivate::class,
Commands\Plugins\PluginDeactivate::class,
Commands\Plugins\PluginInfo::class,
Commands\Plugins\PluginInstall::class,
Commands\Plugins\PluginListMigrations::class,
- Commands\Plugins\PluginStatusMigrations::class,
Commands\Plugins\PluginMigrate::class,
Commands\Plugins\PluginRegister::class,
Commands\Plugins\PluginScan::class,
+ Commands\Plugins\PluginStatusMigrations::class,
Commands\Plugins\PluginUnregister::class,
- Commands\Plugins\I18N\I18NDetect::class,
- Commands\Plugins\I18N\I18NExtract::class,
- Commands\Plugins\I18N\I18NCompile::class,
Commands\Resources\UpdateBookingIntervals::class,
Commands\SORM\DescribeModels::class,
Commands\Twillo\PrivateKeys::class,
- Commands\User\UsersDelete::class,
Commands\User\GetUser::class,
+ Commands\User\UsersDelete::class,
];
$creator = function ($command) {
return app($command);
diff --git a/composer.json b/composer.json
index 031bd0f..dd95f12 100644
--- a/composer.json
+++ b/composer.json
@@ -60,7 +60,8 @@
"ksubileau/color-thief-php": "^2.0",
"symfony/polyfill-php82": "^1.28",
"symfony/polyfill-php83": "^1.28",
- "phpoffice/phpspreadsheet": "^1.19"
+ "phpoffice/phpspreadsheet": "^1.19",
+ "psy/psysh": "^0.12.2"
},
"replace": {
"symfony/polyfill-php54": "*",
diff --git a/composer.lock b/composer.lock
index cd649f9..dd52082 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
- "content-hash": "76e4dce9372399bca6af1762cd407649",
+ "content-hash": "57c5409fb404051d418751e660f3210f",
"packages": [
{
"name": "algo26-matthias/idna-convert",
@@ -1690,6 +1690,64 @@
"time": "2018-02-13T20:26:39+00:00"
},
{
+ "name": "nikic/php-parser",
+ "version": "v5.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nikic/PHP-Parser.git",
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13",
+ "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13",
+ "shasum": ""
+ },
+ "require": {
+ "ext-ctype": "*",
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "php": ">=7.4"
+ },
+ "require-dev": {
+ "ircmaxell/php-yacc": "^0.0.7",
+ "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0"
+ },
+ "bin": [
+ "bin/php-parse"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "5.0-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "PhpParser\\": "lib/PhpParser"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "Nikita Popov"
+ }
+ ],
+ "description": "A PHP parser written in PHP",
+ "keywords": [
+ "parser",
+ "php"
+ ],
+ "support": {
+ "issues": "https://github.com/nikic/PHP-Parser/issues",
+ "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2"
+ },
+ "time": "2024-03-05T20:51:40+00:00"
+ },
+ {
"name": "opis/closure",
"version": "3.6.3",
"source": {
@@ -3007,6 +3065,85 @@
"time": "2017-10-23T01:57:42+00:00"
},
{
+ "name": "psy/psysh",
+ "version": "v0.12.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/bobthecow/psysh.git",
+ "reference": "9185c66c2165bbf4d71de78a69dccf4974f9538d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/bobthecow/psysh/zipball/9185c66c2165bbf4d71de78a69dccf4974f9538d",
+ "reference": "9185c66c2165bbf4d71de78a69dccf4974f9538d",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-tokenizer": "*",
+ "nikic/php-parser": "^5.0 || ^4.0",
+ "php": "^8.0 || ^7.4",
+ "symfony/console": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4",
+ "symfony/var-dumper": "^7.0 || ^6.0 || ^5.0 || ^4.0 || ^3.4"
+ },
+ "conflict": {
+ "symfony/console": "4.4.37 || 5.3.14 || 5.3.15 || 5.4.3 || 5.4.4 || 6.0.3 || 6.0.4"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.2"
+ },
+ "suggest": {
+ "ext-pcntl": "Enabling the PCNTL extension makes PsySH a lot happier :)",
+ "ext-pdo-sqlite": "The doc command requires SQLite to work.",
+ "ext-posix": "If you have PCNTL, you'll want the POSIX extension as well."
+ },
+ "bin": [
+ "bin/psysh"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-main": "0.12.x-dev"
+ },
+ "bamarni-bin": {
+ "bin-links": false,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Psy\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Justin Hileman",
+ "email": "justin@justinhileman.info",
+ "homepage": "http://justinhileman.com"
+ }
+ ],
+ "description": "An interactive shell for modern PHP.",
+ "homepage": "http://psysh.org",
+ "keywords": [
+ "REPL",
+ "console",
+ "interactive",
+ "shell"
+ ],
+ "support": {
+ "issues": "https://github.com/bobthecow/psysh/issues",
+ "source": "https://github.com/bobthecow/psysh/tree/v0.12.2"
+ },
+ "time": "2024-03-17T01:53:00+00:00"
+ },
+ {
"name": "ralouphie/getallheaders",
"version": "3.0.3",
"source": {
@@ -4366,6 +4503,95 @@
"time": "2023-02-22T08:00:55+00:00"
},
{
+ "name": "symfony/var-dumper",
+ "version": "v5.4.21",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/var-dumper.git",
+ "reference": "6c5ac3a1be8b849d59a1a77877ee110e1b55eb74"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6c5ac3a1be8b849d59a1a77877ee110e1b55eb74",
+ "reference": "6c5ac3a1be8b849d59a1a77877ee110e1b55eb74",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/polyfill-mbstring": "~1.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "conflict": {
+ "phpunit/phpunit": "<5.4.3",
+ "symfony/console": "<4.4"
+ },
+ "require-dev": {
+ "ext-iconv": "*",
+ "symfony/console": "^4.4|^5.0|^6.0",
+ "symfony/process": "^4.4|^5.0|^6.0",
+ "symfony/uid": "^5.1|^6.0",
+ "twig/twig": "^2.13|^3.0.4"
+ },
+ "suggest": {
+ "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
+ "ext-intl": "To show region name in time zone dump",
+ "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
+ },
+ "bin": [
+ "Resources/bin/var-dump-server"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "Resources/functions/dump.php"
+ ],
+ "psr-4": {
+ "Symfony\\Component\\VarDumper\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides mechanisms for walking through any arbitrary PHP variable",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "debug",
+ "dump"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/var-dumper/tree/v5.4.21"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2023-02-23T10:00:28+00:00"
+ },
+ {
"name": "symfony/yaml",
"version": "v5.4.21",
"source": {
@@ -7326,95 +7552,6 @@
"time": "2023-02-16T09:33:00+00:00"
},
{
- "name": "symfony/var-dumper",
- "version": "v5.4.21",
- "source": {
- "type": "git",
- "url": "https://github.com/symfony/var-dumper.git",
- "reference": "6c5ac3a1be8b849d59a1a77877ee110e1b55eb74"
- },
- "dist": {
- "type": "zip",
- "url": "https://api.github.com/repos/symfony/var-dumper/zipball/6c5ac3a1be8b849d59a1a77877ee110e1b55eb74",
- "reference": "6c5ac3a1be8b849d59a1a77877ee110e1b55eb74",
- "shasum": ""
- },
- "require": {
- "php": ">=7.2.5",
- "symfony/polyfill-mbstring": "~1.0",
- "symfony/polyfill-php80": "^1.16"
- },
- "conflict": {
- "phpunit/phpunit": "<5.4.3",
- "symfony/console": "<4.4"
- },
- "require-dev": {
- "ext-iconv": "*",
- "symfony/console": "^4.4|^5.0|^6.0",
- "symfony/process": "^4.4|^5.0|^6.0",
- "symfony/uid": "^5.1|^6.0",
- "twig/twig": "^2.13|^3.0.4"
- },
- "suggest": {
- "ext-iconv": "To convert non-UTF-8 strings to UTF-8 (or symfony/polyfill-iconv in case ext-iconv cannot be used).",
- "ext-intl": "To show region name in time zone dump",
- "symfony/console": "To use the ServerDumpCommand and/or the bin/var-dump-server script"
- },
- "bin": [
- "Resources/bin/var-dump-server"
- ],
- "type": "library",
- "autoload": {
- "files": [
- "Resources/functions/dump.php"
- ],
- "psr-4": {
- "Symfony\\Component\\VarDumper\\": ""
- },
- "exclude-from-classmap": [
- "/Tests/"
- ]
- },
- "notification-url": "https://packagist.org/downloads/",
- "license": [
- "MIT"
- ],
- "authors": [
- {
- "name": "Nicolas Grekas",
- "email": "p@tchwork.com"
- },
- {
- "name": "Symfony Community",
- "homepage": "https://symfony.com/contributors"
- }
- ],
- "description": "Provides mechanisms for walking through any arbitrary PHP variable",
- "homepage": "https://symfony.com",
- "keywords": [
- "debug",
- "dump"
- ],
- "support": {
- "source": "https://github.com/symfony/var-dumper/tree/v5.4.21"
- },
- "funding": [
- {
- "url": "https://symfony.com/sponsor",
- "type": "custom"
- },
- {
- "url": "https://github.com/fabpot",
- "type": "github"
- },
- {
- "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
- "type": "tidelift"
- }
- ],
- "time": "2023-02-23T10:00:28+00:00"
- },
- {
"name": "theseer/tokenizer",
"version": "1.2.1",
"source": {
@@ -7553,5 +7690,5 @@
"platform-overrides": {
"php": "7.4"
},
- "plugin-api-version": "2.6.0"
+ "plugin-api-version": "2.2.0"
}