setDescription('Register a plugin.');
$this->setHelp('This command registers an installed plugin.');
$this->addArgument('pluginpath', InputArgument::REQUIRED, 'path to the plugin');
}
protected function execute(InputInterface $input, OutputInterface $output): int
{
$pluginpath = $input->getArgument('pluginpath');
$pluginManager = \PluginManager::getInstance();
$manifest = $pluginManager->getPluginManifest($pluginpath);
if (!$manifest) {
$output->writeln('The plugin\'s manifest is missing.');
return Command::FAILURE;
}
// get plugin meta data
$pluginclass = $manifest['pluginclassname'];
$origin = $manifest['origin'];
$minVersion = $manifest['studipMinVersion'];
$maxVersion = $manifest['studipMaxVersion'];
// check for compatible version
if (
(isset($minVersion) && \StudipVersion::olderThan($minVersion)) ||
(isset($maxVersion) && \StudipVersion::newerThan($maxVersion))
) {
$output->writeln('The plugin is not compatible with this version of Stud.IP.');
return Command::FAILURE;
}
// determine the plugin path
$pluginregistered = $pluginManager->getPluginInfo($pluginclass);
// create database schema if needed
if (isset($manifest['dbscheme']) && !$pluginregistered) {
$schemafile = $pluginpath . '/' . $manifest['dbscheme'];
$contents = file_get_contents($schemafile);
$statements = preg_split("/;[[:space:]]*\n/", $contents, -1, PREG_SPLIT_NO_EMPTY);
$db = \DBManager::get();
foreach ($statements as $statement) {
$db->exec($statement);
}
}
// check for migrations
if (is_dir($pluginpath . '/migrations')) {
$schemaVersion = new \DBSchemaVersion($manifest['pluginname']);
$migrator = new \Migrator($pluginpath . '/migrations', $schemaVersion);
$migrator->migrateTo(null);
}
$pluginpath = $origin . '/' . $pluginclass;
// now register the plugin in the database
$pluginid = $pluginManager->registerPlugin($manifest['pluginname'], $pluginclass, $pluginpath);
// register additional plugin classes in this package
$additionalclasses = $manifest['additionalclasses'];
if (is_array($additionalclasses)) {
foreach ($additionalclasses as $class) {
$pluginManager->registerPlugin($class, $class, $pluginpath, $pluginid);
}
}
$output->writeln('The plugin was successfully registered.');
return Command::SUCCESS;
}
}