#!/usr/bin/env php
<?php
// Hubzilla plugin management utility
function usage() {
echo <<< EOT
Usage:
util/addons list # list installed addons
util/addons list all # list all addons (*)= installed, (!)= disabled due to version compatibility
util/addons install foo # install addon named 'foo'
util/addons uninstall foo # uninstall addon named 'foo'
util/addons reinstall # reinstall all plugins
EOT;
}
require_once('include/cli_startup.php');
cli_startup();
use Zotlabs\Lib\Config;
$plugs = Config::Get('system', 'addon');
$plugins_arr = array();
if($plugs)
$plugins_arr = explode(',', str_replace(' ', '', $plugs));
App::$plugins = $plugins_arr;
$plugins = array();
$files = glob('addon/*/');
if($files) {
foreach($files as $file) {
if(is_dir($file)){
list($tmp, $id) = array_map('trim', explode('/', $file));
$info = get_plugin_info($id);
$enabled = in_array($id,App::$plugins);
$x = check_plugin_versions($info);
if($enabled && ! $x) {
$enabled = false;
$idz = array_search($id, App::$plugins);
if ($idz !== false) {
unset(App::$plugins[$idz]);
uninstall_plugin($id);
Config::Set("system","addon", implode(", ",App::$plugins));
}
}
$info['disabled'] = 1-intval($x);
$plugins[] = array( $id, (($enabled)? '*' : '') , $info);
}
}
}
if($argc == 1) {
usage();
killme();
}
if($argc == 2 && $argv[1] === 'list') {
if($plugins) {
foreach($plugins as $p) {
if($p[1]) {
echo $p[0] . "\n";
}
}
}
killme();
}
if($argc == 2 && $argv[1] === 'reinstall') {
require_once("include/plugin.php");
if($plugins) {
foreach($plugins as $p) {
if($p[1]) {
echo "Reinstall: ". $p[0] . "\n";
uninstall_plugin($p[0]);
install_plugin($p[0]);
}
}
}
killme();
}
if($argc == 3 && $argv[1] === 'list' && $argv[2] === 'all') {
if($plugins) {
foreach($plugins as $p) {
echo $p[0] . (($p[1]) ? $p[1] : (($p[2]['disabled']) ? '!' : '')) . "\n";
}
}
killme();
}
if($argc == 3 && $argv[1] === 'install') {
if($plugins) {
foreach($plugins as $p) {
if($p[0] === $argv[2]) {
if($p[1])
echo $p[0] . ' already installed.' . "\n";
elseif($p[2]['disabled'])
echo $p[0] . ' disabled (version compatibility).' . "\n";
else {
App::$plugins[] = $p[0];
install_plugin($p[0]);
Config::Set("system","addon", implode(", ",App::$plugins));
echo $p[0] . ' installed.' . "\n";
}
}
}
}
killme();
}
if($argc == 3 && $argv[1] === 'uninstall') {
$found = false;
if($plugins) {
foreach($plugins as $p) {
if($p[0] === $argv[2]) {
$found = true;
if(! $p[1])
echo $p[0] . ' not installed.' . "\n";
elseif($p[2]['disabled'])
echo $p[0] . ' disabled (version compatibility).' . "\n";
else {
$idx = array_search($p[0], App::$plugins);
if ($idx !== false)
unset(App::$plugins[$idx]);
uninstall_plugin($p[0]);
Config::Set("system","addon", implode(", ",App::$plugins));
echo $p[0] . ' uninstalled.' . "\n";
}
}
}
}
// force uninstall of addon which no longer exists
if(! $found) {
$idx = array_search($argv[2], App::$plugins);
if ($idx !== false)
unset(App::$plugins[$idx]);
uninstall_plugin($argv[2]);
Config::Set("system","addon", implode(", ",App::$plugins));
echo $argv[2] . ' uninstalled.' . "\n";
}
killme();
}