mirror of
				https://github.com/gtbu/Typesetter-5.3-p8.git
				synced 2025-11-04 14:58:28 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			660 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			660 lines
		
	
	
	
		
			15 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace gp\admin;
 | 
						|
 | 
						|
defined('is_running') or die('Not an entry point...');
 | 
						|
 | 
						|
 | 
						|
/**
 | 
						|
 * Admin Plugin
 | 
						|
 * 		/addons/<addon>/Addon.ini
 | 
						|
 * 			- Addon_Name (required)
 | 
						|
 * 			- link definitions: (optional)
 | 
						|
 * 				- should be able to have multiple links,
 | 
						|
 *
 | 
						|
 *
 | 
						|
 * 				- link_name (required)
 | 
						|
 * 					an example link: Admin_<linkname>
 | 
						|
 * 				- labels (required) should pull the language values during installation/upgrading
 | 
						|
 * 				- script (required)
 | 
						|
 * 				- class / function to call once opened (optional)
 | 
						|
 *
 | 
						|
 * 			- minimum version / max version
 | 
						|
 * 		/addons/<addon>/<php files>
 | 
						|
 */
 | 
						|
 | 
						|
 | 
						|
class Addons extends \gp\admin\Addon\Install{
 | 
						|
 | 
						|
	public $dataFile;
 | 
						|
 | 
						|
 | 
						|
	public function __construct( $args ){
 | 
						|
		global $langmessage;
 | 
						|
 | 
						|
		parent::__construct($args);
 | 
						|
 | 
						|
		$this->InitRating();
 | 
						|
		$this->GetData();
 | 
						|
 | 
						|
		$this->avail_addons			= $this->GetAvailAddons();
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
	public function RunScript(){
 | 
						|
 | 
						|
		$cmd = \gp\tool::GetCommand();
 | 
						|
		switch($cmd){
 | 
						|
 | 
						|
			case 'LocalInstall':
 | 
						|
				$this->LocalInstall();
 | 
						|
			break;
 | 
						|
 | 
						|
			case 'remote_install':
 | 
						|
			case 'RemoteInstall':
 | 
						|
				$this->RemoteInstall();
 | 
						|
			return;
 | 
						|
			case 'RemoteInstallConfirmed':
 | 
						|
				$this->RemoteInstallConfirmed();
 | 
						|
			break;
 | 
						|
 | 
						|
 | 
						|
			case 'SendAddonReview':
 | 
						|
			case 'ReviewAddonForm':
 | 
						|
				$this->AdminAddonRating();
 | 
						|
				if( $this->ShowRatingText ){
 | 
						|
					return;
 | 
						|
				}
 | 
						|
			break;
 | 
						|
 | 
						|
			case 'enable':
 | 
						|
			case 'disable':
 | 
						|
				$this->GadgetVisibility($cmd);
 | 
						|
			return;
 | 
						|
 | 
						|
			case 'uninstall':
 | 
						|
				$this->Uninstall();
 | 
						|
			return;
 | 
						|
 | 
						|
			case 'confirm_uninstall':
 | 
						|
				$this->Confirm_Uninstall();
 | 
						|
			break;
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
		//single addon
 | 
						|
		$request_parts = explode('/',$this->page->requested);
 | 
						|
		if( count($request_parts) > 2 ){
 | 
						|
			$this->ShowAddon($request_parts[2]);
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
		$this->Select();
 | 
						|
		$this->CleanAddonFolder();
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Remove unused code folders created by incomplete addon installations
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	public function CleanAddonFolder(){
 | 
						|
		global $config;
 | 
						|
 | 
						|
 | 
						|
		//get a list of all folders
 | 
						|
		$folder = '/data/_addoncode';
 | 
						|
		$code_folders = $this->GetCleanFolders($folder);
 | 
						|
		$folder = '/data/_addondata';
 | 
						|
		$data_folders = $this->GetCleanFolders($folder);
 | 
						|
 | 
						|
		//check against folders used by addons
 | 
						|
		$addons = $config['addons'];
 | 
						|
		foreach($addons as $addon_key => $info){
 | 
						|
			$addon_config = \gp\tool\Plugins::GetAddonConfig($addon_key);
 | 
						|
			if( array_key_exists($addon_config['code_folder_part'],$code_folders) ){
 | 
						|
				$code_folders[$addon_config['code_folder_part']] = false;
 | 
						|
			}
 | 
						|
			if( array_key_exists($addon_config['data_folder_part'],$data_folders) ){
 | 
						|
				$data_folders[$addon_config['data_folder_part']] = false;
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		//remove unused folders
 | 
						|
		$folders = array_filter($code_folders) + array_filter($data_folders);
 | 
						|
		foreach($folders as $folder => $full_path){
 | 
						|
			\gp\tool\Files::RmAll($full_path);
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Get a list of folders within $dir that
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	public function GetCleanFolders($relative){
 | 
						|
		global $dataDir;
 | 
						|
 | 
						|
		$dir = $dataDir.$relative;
 | 
						|
		$folders = array();
 | 
						|
 | 
						|
		if( file_exists($dir) ){
 | 
						|
			$files = scandir($dir);
 | 
						|
			foreach($files as $file){
 | 
						|
				if( $file == '.' || $file == '..' ){
 | 
						|
					continue;
 | 
						|
				}
 | 
						|
				$full_path = $dir.'/'.$file;
 | 
						|
				if( !is_dir($full_path) ){
 | 
						|
					continue;
 | 
						|
				}
 | 
						|
				$mtime = filemtime($full_path);
 | 
						|
				$diff = time() - $mtime;
 | 
						|
				if( $diff < 3600 ){
 | 
						|
					continue;
 | 
						|
				}
 | 
						|
				$folders[$relative.'/'.$file] = $full_path;
 | 
						|
			}
 | 
						|
		}
 | 
						|
		return $folders;
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
 | 
						|
	public function GadgetVisibility($cmd){
 | 
						|
		global $config, $langmessage;
 | 
						|
 | 
						|
		$this->page->ajaxReplace = array();
 | 
						|
		$gadget = $_GET['gadget'];
 | 
						|
 | 
						|
		if( !isset($config['gadgets']) || !is_array($config['gadgets']) || !isset($config['gadgets'][$gadget]) ){
 | 
						|
			msg($langmessage['OOPS'].' (Invalid Gadget)');
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		$gadgetInfo =& $config['gadgets'][$gadget];
 | 
						|
 | 
						|
		switch($cmd){
 | 
						|
			case 'enable':
 | 
						|
				unset($gadgetInfo['disabled']);
 | 
						|
			break;
 | 
						|
			case 'disable':
 | 
						|
				$gadgetInfo['disabled']	= true;
 | 
						|
			break;
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		if( !\gp\admin\Tools::SaveConfig(true) ){
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		$link = $this->GadgetLink($gadget);
 | 
						|
		$this->page->ajaxReplace[] = array('replace','.gadget_link_'.md5($gadget),$link);
 | 
						|
	}
 | 
						|
 | 
						|
	public function GadgetLink($name){
 | 
						|
		global $config, $langmessage;
 | 
						|
		$info =& $config['gadgets'][$name];
 | 
						|
		if( !$info ){
 | 
						|
			return '';
 | 
						|
		}
 | 
						|
 | 
						|
		if( isset($info['disabled']) ){
 | 
						|
			return \gp\tool::Link('Admin/Addons',str_replace('_',' ',$name).' ('.$langmessage['disabled'].')','cmd=enable&addon='.rawurlencode($info['addon']).'&gadget='.rawurlencode($name),'data-cmd="gpajax" class="gadget_link_'.md5($name).'"');
 | 
						|
		}else{
 | 
						|
			return \gp\tool::Link('Admin/Addons',str_replace('_',' ',$name) .' ('.$langmessage['enabled'].')','cmd=disable&addon='.rawurlencode($info['addon']).'&gadget='.rawurlencode($name),'data-cmd="gpajax" class="gadget_link_'.md5($name).'"');
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Addon Data
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	public function GetData(){
 | 
						|
		global $dataDir,$config;
 | 
						|
 | 
						|
		//new
 | 
						|
		if( !isset($config['addons']) ){
 | 
						|
			$config['addons'] = array();
 | 
						|
		}
 | 
						|
 | 
						|
		if( !isset($config['admin_links']) ){
 | 
						|
			$config['admin_links'] = array();
 | 
						|
		}
 | 
						|
 | 
						|
		if( !isset($config['gadgets']) ){
 | 
						|
			$config['gadgets'] = array();
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//fix data
 | 
						|
		$firstValue = current($config['addons']);
 | 
						|
		if( is_string($firstValue) ){
 | 
						|
 | 
						|
			foreach($config['addons'] as $addon => $addonName){
 | 
						|
				$config['addons'][$addon] = array();
 | 
						|
				$config['addons'][$addon]['name'] = $addonName;
 | 
						|
			}
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Prompt User about uninstalling an addon
 | 
						|
	 */
 | 
						|
	public function Uninstall(){
 | 
						|
		global $config,$langmessage;
 | 
						|
 | 
						|
		echo '<div class="inline_box">';
 | 
						|
		echo '<h3>'.$langmessage['uninstall'].'</h3>';
 | 
						|
		echo '<form action="'.\gp\tool::GetUrl('Admin/Addons').'" method="post">';
 | 
						|
 | 
						|
		$addon =& $_REQUEST['addon'];
 | 
						|
		if( !isset($config['addons'][$addon]) ){
 | 
						|
			echo $langmessage['OOPS'];
 | 
						|
			echo '<p>';
 | 
						|
			echo ' <input type="submit" value="'.$langmessage['Close'].'" class="admin_box_close" /> ';
 | 
						|
			echo '</p>';
 | 
						|
 | 
						|
		}else{
 | 
						|
 | 
						|
			echo $langmessage['confirm_uninstall'];
 | 
						|
 | 
						|
			echo '<p>';
 | 
						|
			echo '<input type="hidden" name="addon" value="'.htmlspecialchars($addon).'" />';
 | 
						|
			echo '<input type="hidden" name="cmd" value="confirm_uninstall" />';
 | 
						|
			echo ' <input type="submit" name="aaa" value="'.$langmessage['continue'].'" class="gpsubmit"/> ';
 | 
						|
			echo ' <input type="submit" value="'.$langmessage['cancel'].'" class="admin_box_close gpcancel" /> ';
 | 
						|
			echo '</p>';
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		echo '</form>';
 | 
						|
		echo '</div>';
 | 
						|
	}
 | 
						|
 | 
						|
	public function Confirm_Uninstall(){
 | 
						|
 | 
						|
		$addon =& $_POST['addon'];
 | 
						|
 | 
						|
		$installer = new \gp\admin\Addon\Installer();
 | 
						|
		$installer->Uninstall($addon);
 | 
						|
		$installer->OutputMessages();
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Display addon details
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	public function ShowAddon($encoded_key){
 | 
						|
		global $config, $langmessage;
 | 
						|
 | 
						|
		$addon_key	= \gp\admin\Tools::decode64($encoded_key);
 | 
						|
 | 
						|
		if( !isset($config['addons'][$addon_key]) ){
 | 
						|
			msg($langmessage['OOPS'].'(Addon Not Found)');
 | 
						|
			$this->Select();
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		$show						= $this->GetDisplayInfo();
 | 
						|
		$info						= $show[$addon_key];
 | 
						|
 | 
						|
 | 
						|
		$this->ShowHeader($info['name']);
 | 
						|
 | 
						|
 | 
						|
		$this->UpgradeLinks($info);
 | 
						|
 | 
						|
		//about
 | 
						|
		if( !empty($info['About']) ){
 | 
						|
			echo '<hr/>';
 | 
						|
			echo '<div class="lead">';
 | 
						|
			echo $info['About'];
 | 
						|
			echo '</div>';
 | 
						|
			echo '<hr/><br/>';
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		echo '<div id="adminlinks2">';
 | 
						|
 | 
						|
		$format = array();
 | 
						|
		$format['end']		= '</div></div>';
 | 
						|
		$format['start']	= '<div class="panelgroup"><h3>%s</h3><div class="panelgroup2">';
 | 
						|
 | 
						|
		$this->AddonPanel_Special($addon_key,$format);
 | 
						|
		$this->AddonPanel_Admin($addon_key,$format);
 | 
						|
		$this->AddonPanel_Gadget($addon_key,$format);
 | 
						|
		$this->AddonPanel_Hooks($addon_key, $format);
 | 
						|
		$this->OptionLinks($addon_key, $info, $format);
 | 
						|
 | 
						|
 | 
						|
 | 
						|
		echo '</div>';
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Get a list of available addons
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	public function GetAvailAddons(){
 | 
						|
		global $dataDir;
 | 
						|
 | 
						|
		$addonPath			= $dataDir.'/addons';
 | 
						|
 | 
						|
		if( !file_exists($addonPath) ){
 | 
						|
			msg('Warning: The /addons folder "<em>'.$addonPath.'</em>" does not exist on your server.');
 | 
						|
			return array();
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		$folders			= \gp\tool\Files::ReadDir($addonPath,1);
 | 
						|
		$versions			= array();
 | 
						|
		$avail				= array();
 | 
						|
 | 
						|
		foreach($folders as $value){
 | 
						|
			$fullPath		= $addonPath .'/'.$value;
 | 
						|
			$info			= $this->GetAvailInstall($fullPath);
 | 
						|
 | 
						|
			if( !$info ){
 | 
						|
				continue;
 | 
						|
			}
 | 
						|
 | 
						|
 | 
						|
			$info['source_folder']		= $addonPath .'/'. $value;
 | 
						|
			$info['upgrade_key']		= \gp\admin\Addon\Tools::UpgradePath($info);
 | 
						|
			$avail[$value]				= $info;
 | 
						|
 | 
						|
			if( isset($info['Addon_Version']) && isset($info['Addon_Unique_ID']) ){
 | 
						|
 | 
						|
				$id = $info['Addon_Unique_ID'];
 | 
						|
				if( !isset($versions[$id]) ){
 | 
						|
					$versions[$id] = $info['Addon_Version'];
 | 
						|
				}elseif( version_compare($versions[$id],$info['Addon_Version'],'<') ){
 | 
						|
					$versions[$id] = $info['Addon_Version'];
 | 
						|
					continue;
 | 
						|
				}
 | 
						|
			}
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		if( gp_unique_addons ){
 | 
						|
			$avail = self::FilterUnique($avail, $versions);
 | 
						|
		}
 | 
						|
 | 
						|
		return $avail;
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Filter the list of addons so we only have a list of the most recent versions
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	protected static function FilterUnique($addons, $versions){
 | 
						|
 | 
						|
		$temp = array();
 | 
						|
		foreach($addons as $key => $info){
 | 
						|
 | 
						|
			if( !isset($info['Addon_Version']) || !isset($info['Addon_Unique_ID']) ){
 | 
						|
				$temp[$key] = $info;
 | 
						|
				continue;
 | 
						|
			}
 | 
						|
 | 
						|
			$id = $info['Addon_Unique_ID'];
 | 
						|
			$version = $info['Addon_Version'];
 | 
						|
 | 
						|
			if( version_compare($versions[$id], $version,'>') ){
 | 
						|
				continue;
 | 
						|
			}
 | 
						|
 | 
						|
			$temp[$key] = $info;
 | 
						|
		}
 | 
						|
 | 
						|
		return $temp;
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	public function Instructions(){
 | 
						|
		echo '<hr/>';
 | 
						|
		echo '<a href="' . \CMS_DOMAIN . '/Docs/Plugins">Plugin Documentation</a>';
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Show installed and locally available plugins
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	public function Select(){
 | 
						|
		$this->ShowHeader();
 | 
						|
		$this->ShowInstalled();
 | 
						|
		$this->Instructions();
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Show installed addons
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	public function ShowInstalled(){
 | 
						|
 | 
						|
		$show = $this->GetDisplayInfo();
 | 
						|
 | 
						|
		echo '<div id="adminlinks2">';
 | 
						|
 | 
						|
		// sort installed addons by name
 | 
						|
		$names = [];
 | 
						|
		foreach($show as $key => $row){
 | 
						|
			$names[$key] = $row['name'];
 | 
						|
		}
 | 
						|
		// PHP 5.5+: $names = array_column($show, 'name');
 | 
						|
		array_multisort($names, SORT_ASC, $show);
 | 
						|
 | 
						|
		foreach($show as $addon_key => $info){
 | 
						|
			$this->PluginPanelGroup($addon_key,$info);
 | 
						|
		}
 | 
						|
		echo '</div>';
 | 
						|
 | 
						|
		return true;
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Get addon configuration along with upgrade info
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	public function GetDisplayInfo(){
 | 
						|
		global $config;
 | 
						|
 | 
						|
		//show installed addons
 | 
						|
		$show = $config['addons'];
 | 
						|
		if( !is_array($show) ){
 | 
						|
			return array();
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		//set upgrade_from
 | 
						|
		foreach($this->avail_addons as $folder => $info){
 | 
						|
			if( !$info['upgrade_key'] ){
 | 
						|
				continue;
 | 
						|
			}
 | 
						|
 | 
						|
			$upgrade_key = $info['upgrade_key'];
 | 
						|
			if( !isset($show[$upgrade_key]) ){
 | 
						|
				continue;
 | 
						|
			}
 | 
						|
 | 
						|
 | 
						|
			if( !isset($info['Addon_Version']) ){
 | 
						|
				$show[$upgrade_key]['upgrade_from'] = $folder;
 | 
						|
				continue;
 | 
						|
			}
 | 
						|
 | 
						|
			if( !isset($show[$upgrade_key]['upgrade_version']) || version_compare($show[$upgrade_key]['upgrade_version'], $info['Addon_Version'], '<') ){
 | 
						|
				$show[$upgrade_key]['upgrade_from']		= $folder;
 | 
						|
				$show[$upgrade_key]['upgrade_version']	= $info['Addon_Version'];
 | 
						|
			}
 | 
						|
 | 
						|
		}
 | 
						|
 | 
						|
		return $show;
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	public function PluginPanelGroup($addon_key,$info){
 | 
						|
		global $langmessage, $gpLayouts;
 | 
						|
 | 
						|
		$addon_config = \gp\tool\Plugins::GetAddonConfig($addon_key);
 | 
						|
 | 
						|
		$addon_config += $info; //merge the upgrade info
 | 
						|
 | 
						|
		echo '<div class="panelgroup" id="panelgroup_'.md5($addon_key).'">';
 | 
						|
 | 
						|
		echo '<h3>';
 | 
						|
		echo \gp\tool::Link('Admin/Addons/'.\gp\admin\Tools::encode64($addon_key),$addon_config['name']);
 | 
						|
		echo '</h3>';
 | 
						|
 | 
						|
		echo '<div class="panelgroup2">';
 | 
						|
		echo '<ul class="submenu">';
 | 
						|
		$this->AddonPanelGroup($addon_key);
 | 
						|
		$this->OptionLinks($addon_key, $addon_config);
 | 
						|
		echo '</ul>';
 | 
						|
 | 
						|
		$this->UpgradeLinks($addon_config);
 | 
						|
 | 
						|
		echo '</div>';
 | 
						|
		echo '</div>';
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Plugin Upgrade links
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	public function UpgradeLinks($addon_config){
 | 
						|
		global $langmessage;
 | 
						|
 | 
						|
		//upgrade local
 | 
						|
		if( isset($addon_config['upgrade_from']) && isset($addon_config['upgrade_version']) ){
 | 
						|
			if(version_compare($addon_config['upgrade_version'],$addon_config['version'] ,'>') ){
 | 
						|
				echo '<div class="gp_notice">';
 | 
						|
				$label = $langmessage['new_version'].'   '.$addon_config['upgrade_version'];
 | 
						|
				echo '<a href="?cmd=LocalInstall&source='.rawurlencode($addon_config['upgrade_from']).'" data-cmd="cnreq">'.$label.'</a>';
 | 
						|
				echo '</div>';
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		//upgrade cms
 | 
						|
		if( isset($addon_config['id']) && isset(\gp\admin\Tools::$new_versions[$addon_config['id']]) ){
 | 
						|
 | 
						|
			$new_version = \gp\admin\Tools::$new_versions[$addon_config['id']];
 | 
						|
 | 
						|
			if( version_compare($new_version['version'],$addon_config['version'],'>') ){
 | 
						|
 | 
						|
				echo '<div class="gp_notice">';
 | 
						|
				echo '<a href="'.addon_browse_path.'/Plugins?id='.$addon_config['id'].'" data-cmd="remote">';
 | 
						|
				echo $langmessage['new_version'];
 | 
						|
				echo '   '.$new_version['version'].' ('.CMS_READABLE_DOMAIN.')</a>';
 | 
						|
				echo '</div>';
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Plugin option links
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	public function OptionLinks($addon_key, $addon_config, $format = false){
 | 
						|
		global $langmessage, $gpLayouts;
 | 
						|
 | 
						|
		$list	= array();
 | 
						|
 | 
						|
		if( !isset($addon_config['is_theme']) || !$addon_config['is_theme'] ){
 | 
						|
 | 
						|
			//editable text
 | 
						|
			if( isset($addon_config['editable_text']) && \gp\admin\Tools::HasPermission('Admin_Theme_Content') ){
 | 
						|
				$list[] = \gp\tool::Link('Admin_Theme_Content/Text',$langmessage['editable_text'],'cmd=AddonTextForm&addon='.urlencode($addon_key),array('title'=>urlencode($langmessage['editable_text']),'data-cmd'=>'gpabox'));
 | 
						|
			}
 | 
						|
 | 
						|
			//upgrade link
 | 
						|
			if( isset($addon_config['upgrade_from']) ){
 | 
						|
				$list[] = '<a href="?cmd=LocalInstall&source='.rawurlencode($addon_config['upgrade_from']).'" data-cmd="cnreq">'.$langmessage['upgrade'].'</a>';
 | 
						|
			}
 | 
						|
 | 
						|
			//uninstall
 | 
						|
			$list[] = \gp\tool::Link('Admin/Addons',$langmessage['uninstall'],'cmd=uninstall&addon='.rawurlencode($addon_key),'data-cmd="gpabox"');
 | 
						|
 | 
						|
 | 
						|
			//version
 | 
						|
			if( !empty($addon_config['version']) ){
 | 
						|
				$list[] = '<a>'.$langmessage['Your_version'].' '.$addon_config['version']. '</a>';
 | 
						|
			}
 | 
						|
 | 
						|
			//rating
 | 
						|
			if( isset($addon_config['id']) && is_numeric($addon_config['id']) ){
 | 
						|
				$id = $addon_config['id'];
 | 
						|
 | 
						|
				$rating = 5;
 | 
						|
				if( isset($this->addonReviews[$id]) ){
 | 
						|
					$rating = $this->addonReviews[$id]['rating'];
 | 
						|
				}
 | 
						|
				$label = $langmessage['rate_this_addon'].' '.$this->ShowRating($id,$rating);
 | 
						|
				$list[] = '<span>'.$label. '</span>';
 | 
						|
			}
 | 
						|
 | 
						|
			$this->FormatList($list,$langmessage['options'],$format);
 | 
						|
			return;
 | 
						|
		}
 | 
						|
 | 
						|
		//show list of themes using these addons
 | 
						|
		foreach($gpLayouts as $layout_id => $layout_info){
 | 
						|
			if( !isset($layout_info['addon_key']) || $layout_info['addon_key'] !== $addon_key ){
 | 
						|
				continue;
 | 
						|
			}
 | 
						|
 | 
						|
			$item = '<span><span class="layout_color_id" style="background:'.$layout_info['color'].'"></span> ';
 | 
						|
			$item .= \gp\tool::Link('Admin_Theme_Content',$layout_info['label']);
 | 
						|
			$item .= ' ( ';
 | 
						|
			$item .= \gp\tool::Link('Admin_Theme_Content/Edit/'.$layout_id,$langmessage['edit']);
 | 
						|
			$item .= ' )</span>';
 | 
						|
 | 
						|
			$list[] = $item;
 | 
						|
		}
 | 
						|
 | 
						|
		$this->FormatList($list,$langmessage['layouts'],$format);
 | 
						|
	}
 | 
						|
 | 
						|
 | 
						|
	/**
 | 
						|
	 * Install Local Packages
 | 
						|
	 *
 | 
						|
	 */
 | 
						|
	public function LocalInstall(){
 | 
						|
		global $dataDir, $langmessage;
 | 
						|
 | 
						|
		$_REQUEST				+= array('source'=>'');
 | 
						|
 | 
						|
		if( !isset($this->avail_addons[$_REQUEST['source']]) ){
 | 
						|
			msg($langmessage['OOPS'].' (Invalid Request)');
 | 
						|
			return false;
 | 
						|
		}
 | 
						|
 | 
						|
 | 
						|
		$installer				= new \gp\admin\Addon\Installer();
 | 
						|
		$installer->source		= $this->avail_addons[$_REQUEST['source']]['source_folder'];
 | 
						|
 | 
						|
		$installer->Install();
 | 
						|
		$installer->OutputMessages();
 | 
						|
	}
 | 
						|
 | 
						|
}
 |