Add option to execute "install" part of the plugin

This commit is contained in:
slawkens 2023-11-25 10:10:15 +01:00
parent 19c06df300
commit 36ec2e1e56
2 changed files with 70 additions and 0 deletions

View File

@ -0,0 +1,31 @@
<?php
if(PHP_SAPI !== 'cli') {
echo 'This script can be run only in command line mode.';
exit(1);
}
require_once __DIR__ . '/../../common.php';
require_once SYSTEM . 'functions.php';
require_once SYSTEM . 'init.php';
require_once SYSTEM . 'hooks.php';
require_once LIBS . 'plugins.php';
if($argc !== 2) {
echo 'This command expects one parameter: plugin name' . PHP_EOL;
exit(2);
}
$pluginName = $argv[1];
if(Plugins::executeInstall($pluginName)) {
foreach(Plugins::getWarnings() as $warning) {
echo 'WARNING: ' . $warning;
}
$info = Plugins::getPluginJson();
echo 'Script for install ' . (isset($info['name']) ? $info['name'] . ' p' : 'P') . 'lugin has been successfully executed.' . PHP_EOL;
}
else {
echo 'ERROR: ' . Plugins::getError() . PHP_EOL;
exit(3);
}

View File

@ -557,6 +557,45 @@ class Plugins {
return true; return true;
} }
/**
* This function is to execute the "install" part of the plugin
*
* @param $plugin_name
* @return bool
*/
public static function executeInstall($plugin_name): bool
{
$filename = BASE . 'plugins/' . $plugin_name . '.json';
if(!file_exists($filename)) {
self::$error = 'Plugin ' . $plugin_name . ' does not exist.';
return false;
}
$string = file_get_contents($filename);
$plugin_json = json_decode($string, true);
if(!$plugin_json) {
self::$error = 'Cannot load plugin info ' . $plugin_name . '.json';
return false;
}
if(!isset($plugin_json['install'])) {
self::$error = "Plugin doesn't have install options defined. Skipping...";
return false;
}
global $db;
if (file_exists(BASE . $plugin_json['install'])) {
$db->revalidateCache();
require BASE . $plugin_json['install'];
$db->revalidateCache();
}
else {
self::$warnings[] = 'Cannot load install script. Your plugin might be not working correctly.';
}
return true;
}
public static function uninstall($plugin_name): bool public static function uninstall($plugin_name): bool
{ {
$filename = BASE . 'plugins/' . $plugin_name . '.json'; $filename = BASE . 'plugins/' . $plugin_name . '.json';