Skip to content
Snippets Groups Projects
Select Git revision
  • 75cedc6df4797f2e2f90f06222ec5e5018fc0826
  • main default protected
  • studip-rector
  • ci-opt
  • course-members-export-as-word
  • data-vue-app
  • pipeline-improvements
  • webpack-optimizations
  • rector
  • icon-renewal
  • http-client-and-factories
  • jsonapi-atomic-operations
  • vueify-messages
  • tic-2341
  • 135-translatable-study-areas
  • extensible-sorm-action-parameters
  • sorm-configuration-trait
  • jsonapi-mvv-routes
  • docblocks-for-magic-methods
19 results

PluginInfo.php

Blame
  • Forked from Stud.IP / Stud.IP
    Source project has a limited visibility.
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    PluginInfo.php 2.65 KiB
    <?php
    
    namespace Studip\Cli\Commands\Plugins;
    
    use Studip\Cli\Commands\AbstractPluginCommand;
    use Symfony\Component\Console\Command\Command;
    use Symfony\Component\Console\Helper\Table;
    use Symfony\Component\Console\Input\InputArgument;
    use Symfony\Component\Console\Input\InputInterface;
    use Symfony\Component\Console\Output\OutputInterface;
    
    class PluginInfo extends AbstractPluginCommand
    {
        protected static $defaultName = 'plugin:info';
    
        protected function configure(): void
        {
            $this->setDescription('Shows information about matching plugins.');
            $this->setHelp('This command shows information about plugins whose name contains the optional pattern.');
            $this->addArgument('pattern', InputArgument::OPTIONAL, 'pattern to search for');
        }
    
        protected function execute(InputInterface $input, OutputInterface $output): int
        {
            $pattern = $input->getArgument('pattern');
    
            $pluginManager = \PluginManager::getInstance();
            $plugins = $pluginManager->getPluginInfos();
    
            if ($pattern) {
                $plugins = array_filter($plugins, function ($plugin) use ($pattern) {
                    return false !== mb_stripos($plugin['name'], $pattern);
                });
            }
    
            $basepath = \Config::get()->PLUGINS_PATH;
            foreach ($plugins as $plugin) {
                $plugindir = $basepath . '/' . $plugin['path'];
    
                $plugin['class_exists'] = $this->pluginClassExists($plugindir, $plugin);
                $plugin['type'] = join(',', $plugin['type']);
    
                if (is_dir($plugindir . '/migrations')) {
                    $schemaVersion = new \DBSchemaVersion($plugin['name']);
                    $migrator = new \Migrator($plugindir . '/migrations', $schemaVersion);
                    $plugin['pending_migrations'] = $migrator->pendingMigrations();
                    $plugin['schema_version'] = $schemaVersion->get();
                }
    
                $pairs = [];
                foreach ($plugin as $key => $value) {
                    $pairs[] = [$key, $value];
                }
    
                $table = new Table($output);
                $table->setHeaders(['Field', 'Value'])->setRows($pairs);
                $table->setStyle('box');
                $table->render();
    
                $output->writeln('');
            }
    
            return Command::SUCCESS;
        }
    
        private function pluginClassExists(string $plugindir, array $plugin)
        {
            $pluginfile = $plugindir . $plugin['class'] . '.class.php';
            if (file_exists($pluginfile)) {
                return 1;
            } else {
                $pluginfile = $plugindir . $plugin['class'] . '.php';
                if (file_exists($pluginfile)) {
                    return 1;
                }
            }
    
            return 0;
        }
    }