#!/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'

EOT;
}

require_once('include/cli_startup.php');

cli_startup();

	$plugs = get_config('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);
						set_config("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 == 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]);
					set_config("system","addon", implode(", ",App::$plugins));
					echo $p[0] . ' installed.' . "\n";
				}
			}
		}
	} 

	killme();
}



if($argc == 3 && $argv[1] === 'uninstall') {

	if($plugins) {
		foreach($plugins as $p) {
			if($p[0] === $argv[2]) {
				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]);
					set_config("system","addon", implode(", ",App::$plugins));
					echo $p[0] . ' uninstalled.' . "\n";
				}
			}
		}
	} 

	killme();
}