From 83f14ca0e9f9910a730074e38d48f6ee673b4f03 Mon Sep 17 00:00:00 2001
From: gtbu <manbu@mail.de>
Date: Fri, 21 Mar 2025 19:25:10 +0100
Subject: [PATCH] removed-multisite-addon

removed-multisite-addon (replaced with zip)
---
 addons/--removed-Multi Site.zip     |  Bin 0 -> 13143 bytes
 addons/Multi Site/Addon.ini         |   20 -
 addons/Multi Site/Install_Check.php |   33 -
 addons/Multi Site/SetupSite.php     | 2016 ---------------------------
 addons/Multi Site/multi_site.scss   |  221 ---
 5 files changed, 2290 deletions(-)
 create mode 100644 addons/--removed-Multi Site.zip
 delete mode 100644 addons/Multi Site/Addon.ini
 delete mode 100644 addons/Multi Site/Install_Check.php
 delete mode 100644 addons/Multi Site/SetupSite.php
 delete mode 100644 addons/Multi Site/multi_site.scss

diff --git a/addons/--removed-Multi Site.zip b/addons/--removed-Multi Site.zip
new file mode 100644
index 0000000000000000000000000000000000000000..4d30c8bb9ed091cd742f7dd8b84e7f6b22d6f869
GIT binary patch
literal 13143
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
C(zh@G

literal 0
HcmV?d00001

diff --git a/addons/Multi Site/Addon.ini b/addons/Multi Site/Addon.ini
deleted file mode 100644
index ea3825e..0000000
--- a/addons/Multi Site/Addon.ini	
+++ /dev/null
@@ -1,20 +0,0 @@
-
-Addon_Name = 'Multiple Site'
-Addon_Unique_ID = 16
-Addon_Version = 1.2.3
-
-min_gpeasy_version = 2.1.1
-
-About = 'Helps you manage multiple installations of gpEasy. The Multiple Sites plugin is prepackaged with gpEasy.';
-
-
-;Admin_links (Optional)
-;Define scripts that are only accessible to administrators with appropriate permissions
-[Admin_Link:Site_Setup]
-label = 'Setup Site'
-script = 'SetupSite.php'
-class = 'SetupSite'
-
-
-
-
diff --git a/addons/Multi Site/Install_Check.php b/addons/Multi Site/Install_Check.php
deleted file mode 100644
index 8d29441..0000000
--- a/addons/Multi Site/Install_Check.php	
+++ /dev/null
@@ -1,33 +0,0 @@
-<?php
-defined('is_running') or die('Not an entry point...');
-
-
-/*
- * Install_Check() can be used to check the destination server for required features
- * 		This can be helpful for addons that require PEAR support or extra PHP Extensions
- * 		Install_Check() is called from step1 of the install/upgrade process
- */
-function Install_Check(){
-	global $config;
-
-
-	$passed = true;
-	if( defined('multi_site_unique') ){
-		echo '<p style="color:red">Cannot install this addon. This is not the root installation of gpEasy.</p>';
-		$passed = false;
-	}
-
-
-	if( !function_exists('symlink') ){
-		echo '<p style="color:red">Cannot install this addon. Your installation of PHP has the symlink() function disabled.</p>';
-		$passed = false;
-	}
-
-
-	if( !isset($_SERVER['SCRIPT_FILENAME']) && (GETENV('SCRIPT_FILENAME') === FALSE) ){
-		echo '<p style="color:red">Cannot install this addon. $_SERVER[\'SCRIPT_FILENAME\'] and GETENV(\'SCRIPT_FILENAME\') are unavailable.</p>';
-		$passed = false;
-	}
-
-	return $passed;
-}
diff --git a/addons/Multi Site/SetupSite.php b/addons/Multi Site/SetupSite.php
deleted file mode 100644
index 215ad3f..0000000
--- a/addons/Multi Site/SetupSite.php	
+++ /dev/null
@@ -1,2016 +0,0 @@
-<?php
-defined('is_running') or die('Not an entry point...');
-
-/*
-
-
-
-bool symlink ( string $target , string $link )
-symlink() creates a symbolic link to the existing target with the specified name link .
-
-
-A Script Like this would most likely need to work with install.php to set up the data directories
-	Using the Install_DataFiles_New() function
-		- $_POST['username']
-		- $_POST['password']
-
-
-*/
-
-$langmessage['not root install'] = 'Notice: This is not the root installation of gpEasy.';
-$langmessage['site url'] = 'Site URL';
-$langmessage['easily add installations'] = 'This addon will allow you to easily add installations of gpEasy to your server.';
-$langmessage['multi_site_notes'] = ' This will not copy gpEasy code to new folders.';
-$langmessage['multi_site_notes'] .= ' Rather, new installations will use the code running the current gpEasy installation.';
-$langmessage['multi_site_notes'] .= ' This is more efficient and will enable you to update all of your gpEasy installations at once by updating the root installation.';
-$langmessage['new_installation'] = 'Create a New Installation';
-
-
-
-class SetupSite{
-
-	public $siteData = array();
-	public $dataFile;
-	public $checksum;
-	public $site_uniq_id;
-
-	public function __construct(){
-		global $dataDir, $page, $addonFolderName,$langmessage;
-
-		if( defined('multi_site_unique') ){
-			msg($langmessage['not root install']);
-			return;
-		}
-
-		gpPlugin::css('multi_site.scss',false);
-
-		//$page->css_user[] = '/data/_addoncode/'.$addonFolderName.'/multi_site.css';
-		//$page->head_js[] = '/data/_addoncode/'.$addonFolderName.'/multi_site.js';
-		$page->head_js[] = '/include/js/admin_users.js';
-
-
-		$page->admin_links[] = array('Admin_Site_Setup','Multi-Site Home');
-		$page->admin_links[] = array('Admin_Site_Setup','New Installation','cmd=new');
-		$page->admin_links[] = array('Admin_Site_Setup','Settings','cmd=settings');
-		$page->admin_links[] = array('Admin_Site_Setup','About','cmd=about');
-
-		$_REQUEST += array('install'=>array());
-
-
-		//ftp setup
-		$this->GetSiteData();
-
-
-		$hide = false;
-		$cmd = \gp\tool::GetCommand();
-		switch($cmd){
-
-			case 'about':
-				$this->About(true);
-				$hide = true;
-			break;
-
-			case 'installed':
-				$this->ShowSites();
-				$hide = true;
-			break;
-
-			/* settings */
-			case 'settings':
-				$this->SettingsForm($this->siteData);
-				$hide = true;
-			break;
-			case 'Save Settings':
-				if( !$this->SaveSettings() ){
-					$this->SettingsForm($_POST);
-					$hide = true;
-				}
-			break;
-
-
-			case 'save_options':
-			case 'options':
-				$this->Options($cmd);
-				$hide = true;
-			break;
-
-
-
-
-			case 'uninstall':
-				$this->UninstallSite();
-			break;
-
-
-			/*
-			 * New Installation
-			 */
-
-			case 'new';
-			case 'Install Now':
-			case 'new_plugins':
-			case 'new_install':
-			case 'new_destination':
-			case 'new_themes':
-			case 'Continue':
-				$this->InstallStatus($cmd);
-				$hide = true;
-			break;
-
-
-			case 'subfolder':
-				$this->SubFolder();
-				$this->InstallStatus($cmd);
-				$hide = true;
-			break;
-
-			case 'expandfolder':
-				$this->ExpandFolder();
-				$hide = true;
-			return;
-			case 'newfolder':
-				$this->NewFolder();
-				$hide = true;
-			break;
-
-
-			case 'Delete Folder':
-				$hide = true;
-				$this->RemoveDir();
-			break;
-
-			case 'rmdir':
-				$hide = true;
-				$this->RemoveDirPrompt();
-			break;
-
-
-		}
-
-		if( !$hide ){
-			$this->FrontPage();
-		}
-	}
-
-
-	public function Options($cmd = ''){
-		global $langmessage;
-
-		$site =& $_REQUEST['site'];
-		if( !isset($this->siteData['sites'][$site]) ){
-			msg($langmessage['OOPS']);
-			return false;
-		}
-
-		switch($cmd){
-			case 'save_options';
-				$this->Options_Save($site);
-			break;
-		}
-
-		$args = $_POST + $this->siteData['sites'][$site] + array('url'=>'http://');
-
-		echo '<div id="install_step">';
-		echo '<form action="'.\gp\tool::GetUrl('Admin_Site_Setup').'" method="post">';
-		echo '<table width="100%">';
-
-		echo '<tr><th colspan="2">';
-		echo $langmessage['options'];
-		echo ': '.$site;
-		echo '</th></tr>';
-
-		echo '<tr><td class="label">';
-		echo $langmessage['site url'];
-		echo '</td><td>';
-		echo '<input type="text" name="url" value="'.htmlspecialchars($args['url']).'" />';
-		echo '</td></tr>';
-
-		echo '<tr><td class="label">';
-		echo $langmessage['hide_index'];
-		echo '</td><td>';
-
-		if( \gp\tool\RemoteGet::Test() ){
-			if( isset($args['hide_index']) ){
-				echo '<input type="checkbox" name="hide_index" value="hide_index" checked="checked"/>';
-			}else{
-				echo '<input type="checkbox" name="hide_index" value="hide_index"/>';
-			}
-		}else{
-			echo 'Unavailable: Your php installation doesn\'t support the necessary functions to enable this option.';
-		}
-
-		echo '</td>';
-		echo '</tr>';
-
-		echo '</table>';
-
-		echo '<div id="install_continue">';
-		echo '<input type="hidden" name="site" value="'.htmlspecialchars($site).'" />';
-		echo '<input type="hidden" name="cmd" value="save_options" />';
-		echo '<input type="submit" name="" value="'.$langmessage['save_changes'].'" class="continue"/>';
-		echo ' <input type="submit" name="cmd" value="Cancel" />';
-		echo '</div>';
-
-		echo '<p>';
- 		echo \gp\tool::Link('Admin_Site_Setup',$langmessage['back']);
- 		echo '</p>';
-
-		echo '</form>';
-		echo '</div>';
-	}
-
-	public function Options_Save($site){
-		global $langmessage;
-		$save = $this->Options_SiteUrl($site);
-		$save = $save && $this->Options_htaccess($site);
-
-		if( $save ){
-			$this->SaveSiteData();
-			msg($langmessage['SAVED']);
-		}
-	}
-
-	public function Options_htaccess($site){
-		global $langmessage;
-
-		if( !\gp\tool\RemoteGet::Test() ){
-			return;
-		}
-
-		$site_info = $this->siteData['sites'][$site];
-		$site_url = $site_info['url'];
-		$site_uniq = false;
-		if( isset($site_info['gpuniq']) ){
-			$site_uniq = $site_info['gpuniq'];
-		}
-		$file_path = $site.'/.htaccess';
-		if( file_exists($file_path) ){
-			$original_contents = $contents = file_get_contents($file_path);
-		}
-
-		if( !isset($_POST['hide_index']) ){
-			$to_hide_index = false;
-			unset($this->siteData['sites'][$site]['hide_index']);
-			$prefix = '';
-
-		}else{
-
-			if( empty($site_url) ){
-				msg('A valid site url is required to hide index.php');
-				return false;
-			}
-
-			$array = @parse_url($site_url);
-			$prefix =& $array['path'];
-			$to_hide_index = $this->siteData['sites'][$site]['hide_index'] = true;
-		}
-
-		//add the gpeasy rules
-		\gp\admin\Settings\Permalinks::StripRules($contents);
-		$contents .= \gp\admin\Settings\Permalinks::Rewrite_Rules($to_hide_index,$prefix);
-		if( !\gp\tool\Files::Save($file_path,$contents) ){
-			msg($langmessage['OOPS'].' (Couldn\'t save .htaccess)');
-			return false;
-		}
-
-		//check for valid response when hiding index.php
-		if( $to_hide_index ){
-			$check_url = $site_url.'/Special_Site_Map';
-			$result = \gp\tool\RemoteGet::Get_Successful($check_url);
-			if( !$result ){
-				msg('Did not recieve valid response when fetching url without index.php: '.htmlspecialchars($check_url));
-				\gp\tool\Files::Save($file_path,$original_contents);
-				return false;
-			}
-
-		}
-
-
-
-		return true;
-	}
-
-	public function Options_SiteUrl($site){
-		global $langmessage;
-
-		if( empty($_POST['url']) ){
-			unset($this->siteData['sites'][$site]['url']);
-			return true;
-		}
-		$site_url = $_POST['url'];
-
-		//remove index.php
-		$pos = strpos($site_url,'/index.php');
-		if( $pos ){
-			$site_url = substr($site_url,0,$pos);
-		}
-
-		if( $site_url == 'http://' ){
-			msg($langmessage['OOPS'].' (Invalid URL)');
-			return false;
-		}
-
-		$array = @parse_url($site_url);
-		if( $array === false ){
-			msg($langmessage['OOPS'].' Invalid URL');
-			return false;
-		}
-
-		if( empty($array['scheme']) ){
-			$site_url = 'http://'.$site_url;
-		}
-
-		$this->siteData['sites'][$site]['url'] = rtrim($site_url,'/');
-
-		return true;
-	}
-
-	public function FrontPage(){
-		global $langmessage;
-
-		$this->Heading();
-
-		echo '<hr/>';
-		echo '<div class="lead">';
-		echo 'Add multiple installations of gpEasy to your server.';
-		echo '</div>';
-		echo '<hr/>';
-
-		echo '<div id="ms_links">';
-		echo \gp\tool::Link('Admin_Site_Setup',$langmessage['new_installation'],'cmd=new');
-		echo ' &nbsp; &nbsp; ';
-		echo \gp\tool::Link('Admin_Site_Setup',$langmessage['Settings'],'cmd=settings');
-		echo ' &nbsp; &nbsp; ';
-		echo \gp\tool::Link('Admin_Site_Setup',$langmessage['about'],'cmd=about');
-		echo '</div>';
-
-		$this->ShowSimple();
-	}
-
-
-	/**
-	 * About this plugin
-	 *
-	 */
-	public function About($full){
-		global $langmessage;
-
-		$this->Heading($langmessage['about']);
-
-		echo '<hr/>';
-		echo '<p class="lead">';
-		echo $langmessage['easily add installations'];
-		echo $langmessage['multi_site_notes'];
-		echo '</p>';
-
-		echo '<br/>';
-
-		echo '<h2>';
-		echo \gp\tool::Link('Admin_Site_Setup',$langmessage['Settings'],'cmd=settings');
-		echo '</h3>';
-
-		echo '<dl class="lead">';
-		echo '<dt>Service Provider ID</dt>';
-		echo '<dd>When your provider id is entered, <a href="http://www.gpeasy.com/Special_Services">gpEasy.com Services</a> can attribute each installation to your service.</dd>';
-		echo '</dl>';
-
-		echo '<dl class="lead">';
-		echo '<dt>Service Provider Name</dt>';
-		echo '<dd>Displayed on the site map of your hosted installations.</dd>';
-		echo '</dl>';
-
-		echo '<p>';
- 		echo \gp\tool::Link('Admin_Site_Setup',$langmessage['back']);
- 		echo '</p>';
-
-	}
-
-
-
-	public function SaveSettings(){
-		global $langmessage;
-
-		$UpdateIndexFiles = false;
-
-		//ftp information
-		$ok_to_save = $this->SaveFTPInformation();
-
-
-		//provider id
-		if( !empty($_POST['service_provider_id']) ){
-			if( is_numeric($_POST['service_provider_id']) ){
-
-				//update index.php files
-				if( !isset($this->siteData['service_provider_id']) || ($_POST['service_provider_id'] != $this->siteData['service_provider_id']) ){
-					$UpdateIndexFiles = true;
-				}
-
-				$this->siteData['service_provider_id'] = $_POST['service_provider_id'];
-			}else{
-				msg('The Service Provider ID must be a number.');
-				$ok_to_save = false;
-			}
-		}
-
-		//provider name
-		if( !empty($_POST['service_provider_name']) ){
-
-			//update index.php files
-			if( !isset($this->siteData['service_provider_name']) || ($_POST['service_provider_name'] != $this->siteData['service_provider_name']) ){
-				$UpdateIndexFiles = true;
-			}
-
-			$this->siteData['service_provider_name'] = $_POST['service_provider_name'];
-		}
-
-		if( $UpdateIndexFiles ){
-			$this->UpdateProviderID();
-		}
-
-		if( !$ok_to_save ){
-			return false;
-		}
-
-		if( $this->SaveSiteData() ){
-			msg($langmessage['SAVED']);
-			return true;
-		}
-		msg($langmessage['OOPS']);
-		return false;
-
-	}
-
-	public function UpdateProviderID(){
-		foreach($this->siteData['sites'] as $path => $info){
-			if( !isset($info['unique']) ){
-				$info['unique'] = $this->NewId();
-			}
-			$this->CreateIndex($path,$info['unique']);
-		}
-		$this->SaveSiteData();
-	}
-
-
-	public function SettingsForm($values=array()){
-		global $langmessage,$config;
-
-		$values += array('service_provider_id'=>'','service_provider_name'=>'');
-
-		$ftp_vals = $_POST + $config + array('ftp_server'=>\gp\tool\FileSystemFtp::GetFTPServer(),'ftp_user'=>'');
-
-		$this->Heading('Settings');
-
-		echo '<form action="'.\gp\tool::GetUrl('Admin_Site_Setup').'" method="post">';
-		echo '<table class="bordered" width="100%">';
-
-		echo '<tr>';
-		echo '<th colspan="2">Service Provider Identification</th>';
-		echo '</tr>';
-
-		echo '<tr>';
-		echo '<td colspan="2">';
-		echo 'When your provider id is entered, <a href="http://www.gpeasy.com/Special_Services">gpEasy.com Services</a> can attribute each installation to your service.';
-		echo '</td>';
-		echo '</tr>';
-
-		echo '<tr>';
-		echo '<td>';
-		echo 'Service Provider ID';
-		echo '</td>';
-		echo '<td>';
-		echo '<input type="text" name="service_provider_id" value="'.htmlspecialchars($values['service_provider_id']).'" size="30" />';
-		echo '</td>';
-		echo '</tr>';
-
-		echo '<tr>';
-		echo '<td>';
-		echo 'Service Provider Name';
-		echo '</td>';
-		echo '<td>';
-		echo '<input type="text" name="service_provider_name" value="'.htmlspecialchars($values['service_provider_name']).'" size="30" />';
-		echo '</td>';
-		echo '</tr>';
-
-		echo '<tr>';
-		echo '<td>&nbsp;</td>';
-		echo '<td>&nbsp;</td>';
-		echo '</tr>';
-
-
-		if( function_exists('ftp_connect') ){
-			echo '<tr><th>FTP</th>';
-			echo '<th>&nbsp;</th>';
-			echo '</tr>';
-
-			echo '<tr><td>FTP Server</td>';
-			echo '<td>';
-			echo '<input type="text" name="ftp_server" value="'.$ftp_vals['ftp_server'].'" size="30" />';
-			echo '</td></tr>';
-
-			echo '<tr><td>FTP Username</td>';
-			echo '<td>';
-			echo '<input type="text" name="ftp_user" value="'.$ftp_vals['ftp_user'].'" size="30" />';
-			echo '</td></tr>';
-
-			echo '<tr><td>FTP Password</td>';
-			echo '<td>';
-			echo '<input type="password" name="ftp_pass" value="" size="30" />';
-			echo '</td></tr>';
-		}
-
-		echo '</table>';
-
-		echo '<div id="install_continue">';
-		echo '<input type="submit" name="cmd" value="Save Settings" class="continue"/>';
-		echo ' <input type="submit" name="" value="Cancel" />';
-		echo '</div>';
-
-
-		echo '</form>';
-	}
-
-	public function ShowSimple(){
-		global $langmessage;
-
-		if( !isset($this->siteData['sites']) || (count($this->siteData['sites']) == 0) ){
-			return;
-		}
-		echo '<form action="'.\gp\tool::GetUrl('Admin_Site_Setup').'" method="get">';
-		echo '<table class="bordered" style="width:100%">';
-		echo '<tr>';
-		echo '<th>';
-		echo 'Recent Installations';
-		echo '</th>';
-		echo '<th>';
-		echo 'URL';
-		echo '</th>';
-		echo '<th>';
-		echo $langmessage['options'];
-		echo '</th>';
-		echo '</tr>';
-		$reverse = 	array_reverse($this->siteData['sites']);
-		$i = 0;
-
-
-		foreach($reverse as $site => $data){
-			$this->ShowRow($site,$data);
-			$i++;
-			if( $i == 5 ){
-				break;
-			}
-		}
-		$this->SearchRow();
-		echo '</table>';
-
-		if( count($this->siteData['sites']) > 5 ){
-			echo '<p>';
-			echo \gp\tool::Link('Admin_Site_Setup','More Installations','cmd=installed');
-			echo '</p>';
-		}
-
-	}
-
-	public function ShowRow(&$site,&$data){
-		global $langmessage;
-
-		echo '<tr>';
-		echo '<td>';
-		if( strlen($site) > 25 ){
-			echo '...'.substr($site,-21);;
-		}else{
-			echo $site;
-		}
-		echo '</td>';
-		echo '<td>';
-		if( !empty($data['url']) ){
-			echo '<a href="'.$data['url'].'" target="_blank">';
-			if( strlen($data['url']) > 40 ){
-				echo substr($data['url'],0,35).'...';
-			}else{
-				echo $data['url'];
-			}
-			echo '</a>';
-		}
-
-		echo '</td>';
-		echo '<td>';
-		echo \gp\tool::Link('Admin_Site_Setup',$langmessage['options'],'cmd=options&site='.urlencode($site));
-		echo ' &nbsp; ';
-		//echo \gp\tool::Link('Admin_Site_Setup',$langmessage['uninstall'],'cmd=uninstall&site='.urlencode($site),' data-cmd="gpajax"');
-
-		$title = sprintf($langmessage['generic_delete_confirm'],' &quot;'.htmlspecialchars($site).'&quot; ');
-		echo \gp\tool::Link('Admin_Site_Setup',$langmessage['uninstall'],'cmd=uninstall&site='.urlencode($site),array('data-cmd'=>'postlink','class'=>'gpconfirm','title'=>$title));
-
-		echo '</td>';
-		echo '</tr>';
-	}
-
-
-	public function ShowSites(){
-		global $langmessage;
-
-		$limit = 20; //20
-		$offset = 0;
-		if( isset($_GET['offset']) && is_numeric($_GET['offset']) ){
-			$offset = $_GET['offset'];
-		}
-
-		if( !isset($this->siteData['sites']) || (count($this->siteData['sites']) == 0) ){
-			return;
-		}
-
-		echo '<form action="'.\gp\tool::GetUrl('Admin_Site_Setup').'" method="get">';
-		echo '<table class="bordered">';
-		echo '<tr>';
-		echo '<th>';
-		echo 'Recent Installations';
-		echo '</th>';
-		echo '<th>';
-		echo 'URL';
-		echo '</th>';
-		echo '<th>';
-		echo '&nbsp;';
-		echo '</th>';
-		echo '</tr>';
-
-		$this->SearchRow();
-
-		$reverse = 	array_reverse($this->siteData['sites']);
-		if( !empty($_GET['q']) ){
-			$reverse = $this->Search($reverse);
-			if( count($reverse) == 0 ){
-				echo '<tr>';
-				echo '<td colspan="2">';
-				echo 'Could not find any installations matching your search criteria.';
-				echo '</td>';
-				echo '</tr>';
-			}
-		}
-		if( $offset > 0 ){
-			$reverse = array_splice($reverse,$offset);
-		}
-
-		$i = 0;
-		foreach($reverse as $site => $data){
-			$this->ShowRow($site,$data);
-			$i++;
-			if( $i == $limit ){
-				break;
-			}
-		}
-
-
-		echo '</table>';
-		echo '</form>';
-
-		//navigation links
-		if( $offset > 0 ){
-			echo \gp\tool::Link('Admin_Site_Setup','Prev','cmd=installed&q='.urlencode($_GET['q']).'&offset='.max(0,$offset-$limit));
-		}else{
-			echo 'Prev';
-		}
-		echo ' &nbsp; ';
-		if( count($reverse) > $limit ){
-			echo \gp\tool::Link('Admin_Site_Setup','Next','cmd=installed&q='.urlencode($_GET['q']).'&offset='.($offset+$limit));
-		}else{
-			echo 'Next';
-		}
-
-		echo '<p>';
- 		echo \gp\tool::Link('Admin_Site_Setup',$langmessage['back']);
- 		echo '</p>';
-
-	}
-
-	public function Search(&$array){
-		$result = array();
-		$key = $_GET['q'];
-		foreach($array as $path => $info){
-
-			if( strpos($path,$key) !== false ){
-				$result[$path] = $info;
-				continue;
-			}
-		}
-		return $result;
-	}
-
-	public function SearchRow(){
-		$_GET += array('q'=>'');
-
-		echo '<tr>';
-			echo '<td colspan="2">';
-			echo '<input type="text" name="q" value="'.htmlspecialchars($_GET['q']).'" />';
-			echo '</td>';
-			echo '<td>';
-			echo '<input type="hidden" name="cmd" value="installed" />';
-			echo '<input type="submit" name="" value="Search" />';
-			echo '</td>';
-			echo '</tr>';
-	}
-
-
-	/**
-	 * Remove the files and folders of an installation as determined by the post request
-	 *
-	 */
-	public function UninstallSite(){
-		global $langmessage, $config;
-
-		$site =& $_POST['site'];
-		if( empty($site) ){
-			return false;
-		}
-		if( !isset($this->siteData['sites'][$site]) ){
-			msg($langmessage['OOPS'].' (Invalid Site)');
-			return false;
-		}
-
-		if( !$this->RmSite($site) ){
-			msg($langmessage['OOPS'].'(Files not completely removed)');
-			return false;
-		}
-
-		msg($langmessage['SAVED']);
-
-		unset($this->siteData['sites'][$site]);
-		$this->SaveSiteData();
-	}
-
-	/**
-	 * Remove the files and folders of an installation
-	 *
-	 */
-	public function RmSite($site){
-		global $config;
-
-		if( !$this->EmptyDir($site) ){
-			return false;
-		}
-
-		return $this->RmDir($site);
-	}
-
-	/**
-	 * Remove a folder that was created by the multi-site manager
-	 *
-	 */
-	public function RmDir($dir){
-		global $config;
-
-		if( @rmdir($dir) ){
-			return true;
-		}
-
-		if( empty($config['ftp_server']) ){
-			return false;
-		}
-
-		if( !function_exists('ftp_connect') ){
-			return false;
-		}
-
-		$conn_id = self::FTPConnect();
-		if( !$conn_id ){
-			return false;
-		}
-
-		$ftp_site = \gp\tool\FileSystemFtp::GetFTPRoot($conn_id,$dir);
-		if( $ftp_site === false ){
-			return false;
-		}
-		return ftp_rmdir($conn_id,$ftp_site);
-	}
-
-	/**
-	 * Remove all the contents of a directory
-	 *
-	 */
-	public function EmptyDir($dir){
-
-		if( !file_exists($dir) ){
-			return true;
-		}
-
-		if( is_link($dir) ){
-			return unlink($dir);
-		}
-
-		$dh = @opendir($dir);
-		if( !$dh ){
-			return false;
-		}
-
-		$dh = @opendir($dir);
-		if( !$dh ){
-			return false;
-		}
-		$success = true;
-
-		$subDirs = array();
-		while( ($file = readdir($dh)) !== false){
-			if( $file == '.' || $file == '..' ){
-				continue;
-			}
-
-			$fullPath = $dir.'/'.$file;
-
-			if( is_link($fullPath) ){
-				if( !unlink($fullPath) ){
-					$success = false;
-				}
-				continue;
-			}
-
-
-			if( is_dir($fullPath) ){
-				$subDirs[] = $fullPath;
-				continue;
-			}
-			if( !unlink($fullPath) ){
-				$success = false;
-			}
-		}
-		closedir($dh);
-
-		foreach($subDirs as $subDir){
-			if( !$this->EmptyDir($subDir) ){
-				$success = false;
-			}
-			if( !\gp\tool\Files::RmDir($subDir) ){
-				$success = false;
-			}
-
-		}
-
-		return $success;
-	}
-
-
-
-
-	public function GetSiteData(){
-		global $addonPathData;
-
-		$this->dataFile		= $addonPathData.'/data.php';
-		$this->siteData		= \gp\tool\Files::Get($this->dataFile,'siteData');
-		$this->siteData		+= array('sites'=>array());
-		$this->checksum		= $this->CheckSum($this->siteData);
-	}
-
-	public function SaveSiteData(){
-		$check = $this->CheckSum($this->siteData);
-		if( $check === $this->checksum ){
-			return true;
-		}
-
-		unset($this->siteData['destination']); //no longer used
-
-		return \gp\tool\Files::SaveData( $this->dataFile,'siteData',$this->siteData );
-	}
-
-	public function CheckSum($array){
-		return crc32( serialize($array) );
-	}
-
-
-	public function CreatePlugins($destination,$args = false){
-		global $rootDir;
-
-		if( $args === false ){
-			$args = $_POST;
-		}
-
-		//may be valid even if plugins is not set
-		$args += array('plugins'=>array());
-
-		//selection of themes
-		if( !\gp\tool\Files::CheckDir($destination.'/addons') ){
-			msg('Failed to create <em>'.$destination.'/addons'.'</em>');
-			return false;
-		}
-
-		foreach($args['plugins'] as $plugin){
-			$target = $rootDir.'/addons/'.$plugin;
-			if( !file_exists($target) ){
-				continue;
-			}
-			$name = $destination.'/addons/'.$plugin;
-			$this->Create_Symlink($target,$name);
-		}
-
-
-		return true;
-	}
-
-
-	//Don't create symlink for /themes, users may want to add to their collection of themes
-	public function CopyThemes($destination,$args=false){
-		global $rootDir;
-
-		if( $args === false ){
-			$args = $_POST;
-		}
-
-		//selection of themes
-		if( !\gp\tool\Files::CheckDir($destination.'/themes') ){
-			msg('Failed to create <em>'.$destination.'/themes'.'</em>');
-			return false;
-		}
-
-		$count = 0;
-		foreach($args['themes'] as $theme){
-			$target = $rootDir.'/themes/'.$theme;
-			if( !file_exists($target) ){
-				continue;
-			}
-			$name = $destination.'/themes/'.$theme;
-			if( $this->Create_Symlink($target,$name) ){
-				$count++;
-			}
-		}
-		if( $count == 0 ){
-			msg('Failed to populate <em>'.$destination.'/themes'.'</em>');
-			return false;
-		}
-
-		return true;
-	}
-
-	//create the index.php file
-	public function CreateIndex($destination,$unique){
-
-		$path = $destination.'/index.php';
-
-
-		$indexA = array();
-		$indexA[] = '<'.'?'.'php';
-		if( isset($this->siteData['service_provider_id']) ){
-			$indexA[] = 'define(\'service_provider_id\',\''.(int)$this->siteData['service_provider_id'].'\');';
-		}
-		if( isset($this->siteData['service_provider_name']) ){
-			$indexA[] = 'define(\'service_provider_name\',\''.addslashes($this->siteData['service_provider_name']).'\');';
-		}
-		$indexA[] = 'define(\'multi_site_unique\',\''.$unique.'\');';
-		$indexA[] = 'require_once(\'include/main.php\');';
-		$index = implode("\n",$indexA);
-		if( !\gp\tool\Files::Save($path,$index) ){
-			return false;
-		}
-
-		@chmod($path,0644); //to prevent 500 Internal Server Errors on some servers
-
-		return true;
-	}
-
-	public function NewId(){
-
-		do{
-			$unique = \gp\tool::RandomString(20);
-			foreach($this->siteData['sites'] as $array){
-				if( isset($array['unique']) && ($array['unique'] == $unique) ){
-					$unique = false;
-					break;
-				}
-			}
-		}while($unique==false);
-
-		return $unique;
-	}
-
-	//create a symbolic link and test for $test_file
-	public function Create_Symlink($target,$path,$test_file = false ){
-
-		echo '<li>Create Symlink: <em>'.$path.'</em></li>';
-		if( !symlink($target,$path) ){
-			msg('Oops, Symlink creation failed (1)');
-			return false;
-		}
-
-		if( $test_file && !file_exists($path.'/'.$test_file) ){
-			msg('Oops, Symlink creation failed (2)');
-			return false;
-		}
-
-		return true;
-	}
-
-
-	/**
-	 * Save the ftp connection information if a connection can be made
-	 *
-	 */
-	public function SaveFTPInformation(){
-		global $config, $langmessage;
-
-		$_POST += array('ftp_server'=>'','ftp_user'=>'','ftp_pass'=>'');
-
-		//try to connect and login if ftp_server is not empty
-		if( !empty($_POST['ftp_server']) ){
-
-			$conn_id = @ftp_connect($_POST['ftp_server'],21,6);
-			if( !$conn_id ){
-				msg('Oops, could not connect using ftp_connect() for server <i>'.htmlspecialchars($_POST['ftp_server']).'</i>');
-				return false;
-			}
-
-			ob_start();
-			$login_result = @ftp_login($conn_id,$_POST['ftp_user'],$_POST['ftp_pass'] );
-			if( !$login_result ){
-				msg('Oops, could not login using ftp_login() for server <i>'.$_POST['ftp_server'].'</i> and user <i>'.$_POST['ftp_user'].'</i>');
-				@ftp_close($conn_id);
-				ob_end_clean();
-				return false;
-			}
-			@ftp_close($conn_id);
-			ob_end_clean();
-		}
-
-
-		$config['ftp_user']		= $_POST['ftp_user'];
-		$config['ftp_server']	= $_POST['ftp_server'];
-		$config['ftp_pass']		= $_POST['ftp_pass'];
-
-		if( !admin_tools::SaveConfig() ){
-			msg('Oops, there was an error saving your ftp information.');
-			return false;
-		}
-
-		return true;
-	}
-
-
-
-
-	/*
-	 * New Installation Functions
-	 *
-	 *
-	 *
-	 */
-
-
-	public function InstallStatus($cmd){
-		global $rootDir;
-
-		$default_theme = explode('/',gp_default_theme);
-
-		//make sure default theme exists
-		$path = $rootDir.'/themes/'.$default_theme[0];
-		if( !file_exists($path) ){
-			msg('The default theme for gpEasy "'.$default_theme[0].'" does not exist. Please make sure it exists before continuing.');
-			return;
-		}
-
-
-
-		if( empty($cmd) || $cmd == 'Continue' ){
-			$cmd = false;
-		}elseif( $cmd == 'Install Now' ){
-			if( $this->NewCreate() ){
-				return;
-			}else{
-				$cmd = false;
-			}
-		}
-
-		$this->CheckFolder();
-
-		$this->Heading('Installation');
-
-		$this->InstallStatus_Steps($cmd);
-
-		echo '<div id="install_step">';
-		switch($cmd){
-
-			case 'subfolder':
-			case 'new':
-			case 'new_destination':
-				$this->NewDestination();
-			break;
-
-			case 'new_themes':
-				$this->NewThemes($_REQUEST['install']);
-			break;
-
-			case 'new_plugins':
-				$this->NewPlugins($_REQUEST['install']);
-			break;
-
-			case 'new_install':
-				$this->NewInstall();
-			break;
-
-		}
-		echo '</div>';
-	}
-
-	public function InstallStatus_Steps(&$cmd){
-		echo '<hr/>';
-		echo '<div id="install_status">';
-
-		echo '<ul>';
-		$ready = true;
-		$ready = $this->InstallStatus_Step($cmd,$ready,'Destination','new_destination','folder');
-		$ready = $this->InstallStatus_Step($cmd,$ready,'Themes','new_themes','themes');
-		$this->InstallStatus_Step($cmd,$ready,'Plugins','new_plugins','plugins','plugins_submitted');
-
-
-		if( $ready ){
-			echo '<li id="install_state" class="ready">';
-			$query_array = array('cmd'=>'new_install');
-			echo $this->InstallLink('Ready To Install',$query_array);
-			if( $cmd === false ){
-				$cmd = 'new_install';
-			}
-			echo '</li>';
-		}else{
-			echo '<li id="install_state">';
-			echo '<a>Not Ready to Install</a>';
-			echo '</li>';
-		}
-
-		echo '</ul>';
-
-		echo '</div>';
-		echo '<hr/>';
-	}
-
-
-	/**
-	 * Show an installation step and it's status
-	 *
-	 */
-	public function InstallStatus_Step(&$cmd,$ready,$label,$step_cmd,$step_key,$step_key2=false){
-
-		$class = 'ready';
-
-		if( isset($_REQUEST['install'][$step_key]) ){
-			$step_value = $_REQUEST['install'][$step_key];
-			if( is_array($step_value) ){
-				$link_label = implode(', ',$step_value);
-				if( strlen($link_label) > 40 ){
-					$link_label = substr($link_label,0,40).'...';
-				}
-			}else{
-				$link_label = $step_value;
-			}
-		}elseif( $step_key2 && isset($_REQUEST['install'][$step_key2]) ){
-			$link_label = 'Empty';
-		}else{
-			$ready			= false;
-			$query_array	= array('cmd'=>'new_destination');
-			$link_label		= 'Not Set';
-			$class			= '';
-
-			if( !$cmd ){
-				$cmd = $step_cmd;
-			}
-		}
-
-		if( empty($link_label) ){
-			$link_label = 'Empty';
-		}
-		$query_array = array('cmd'=>$step_cmd);
-
-		echo '<li class="'.$class.'">';
-		echo $this->InstallLink($label.': '.$link_label,$query_array);
-		echo '</li>';
-
-		return $ready;
-	}
-
-
-
-	/**
-	 * Make sure the install folder is writable before continuing with the installation process
-	 *
-	 */
-	public function CheckFolder(){
-		global $config;
-
-		if( empty($_REQUEST['install']['folder']) ){
-			return;
-		}
-
-		$folder = $_REQUEST['install']['folder'];
-
-		if( is_writable($folder) ){
-			return true;
-		}
-
-		if( !function_exists('ftp_connect') ){
-			$this->FolderNotWritable('FTP Extension Not Available');
-			return false;
-		}
-
-		if( empty($config['ftp_server']) ){
-			$this->FolderNotWritable('FTP connection values not set');
-			return false;
-		}
-
-
-		$conn_id	= self::FTPConnect();
-		if( !$conn_id ){
-			$this->FolderNotWritable('FTP connection could not be made with the supplied values');
-			return false;
-		}
-
-
-		$ftp_root	= \gp\tool\FileSystemFtp::GetFTPRoot($conn_id,$folder);
-		if( $ftp_root === false ){
-			$this->FolderNotWritable('Root folder not found by FTP');
-			return false;
-		}
-	}
-
-
-	/**
-	 * Display message to user about not being able to write to the installation folder
-	 *
-	 */
-	public function FolderNotWritable($reason = ''){
-		global $langmessage;
-
-		$message = '<p>Sorry, the selected folder could not be written to.</p> ';
-		$message .= '<em>'.$reason.'</em> ';
-		$message .= '<p>You may still be able to install in this folder by doing one of the following:</p>';
-		$message .= '<ul>';
-		$message .= '<li>Make the folder writable by changing it\'s permissions.</li>';
-
-		if( function_exists('ftp_connect') ){
-			$message .= '<li>Supply your server\'s <a href="%s">ftp connection information</a>.</li>';
-		}else{
-			$message .= '<li>Enabling the FTP extension in php and supplying <a href="%s">ftp connection information</a>.</li>';
-		}
-		$message = sprintf($message,\gp\tool::GetUrl('Admin_Site_Setup','cmd=settings'));
-		$message .= '</ul>';
-
-
-
-		//msg($langmessage['not_created'].' (FTP Connection Failed)');
-		unset($_REQUEST['install']['folder']);
-		msg($message);
-	}
-
-	public function NewInstall(){
-
-		echo '<form action="'.\gp\tool::GetUrl('Admin_Site_Setup').'" method="post">';
-		echo '<table style="width:100%">';
-		\gp\install\Tools::Form_UserDetails();
-		echo '</table>';
-		$this->InstallFields($_REQUEST['install'],'install');
-		echo '<div id="install_continue">';
-		echo '<input type="submit" name="cmd" value="Install Now" class="continue"/>';
-		echo ' <input type="submit" name="" value="Cancel" />';
-		echo '</div>';
-		echo '</form>';
-	}
-
-
-	public function NewDestination(){
-		global $rootDir,$config;
-
-		if( empty($this->siteData['last_folder']) ){
-			$folder = $rootDir;
-		}else{
-			$folder = $this->siteData['last_folder'];
-		}
-
-		$this->InstallFolder($folder);
-	}
-
-
-	/**
-	 * Display form for selecting which themes should be included
-	 *
-	 */
-	public function NewThemes($values=array()){
-		global $rootDir;
-
-		if( !isset($values['themes']) ){
-			$values += array('all_themes'=>'all');
-		}
-		$values += array('themes'=>array());
-
-
-
-		$all_themes = false;
-		if( isset($values['all_themes']) && $values['all_themes'] == 'all' ){
-			$all_themes = true;
-		}
-
-		echo '<form action="'.\gp\tool::GetUrl('Admin_Site_Setup').'" method="post">';
-		echo '<table style="width:100%">';
-		echo '<tr>';
-		echo '<th>Select Themes</th>';
-		echo '</tr>';
-		echo '<tr><td class="all_checkboxes">';
-			echo '<div>';
-			echo 'Select which themes will be available to the new installation. ';
-			echo '</div>';
-			echo '<br/>';
-
-			echo '<table border="0" cellpadding="7">';
-			echo '<tr><td>';
-			$checked = '';
-			if( $all_themes ){
-				$checked = ' checked="checked" ';
-			}
-			echo '<label class="select_all"><input type="checkbox" class="select_all" name="install[all_themes]" value="all" '.$checked.'/> All Themes</label> ';
-			echo '</td></tr>';
-			echo '<tr><td style="border-top:1px solid #ccc;border-bottom:1px solid #ccc;vertical-align:middle;font-weight:bold;">';
-			echo ' OR ';
-			echo '</td></tr>';
-
-			echo '<tr><td>';
-
-
-			$default_theme = explode('/',gp_default_theme);
-
-			//default theme
-			echo '<input type="hidden" name="install[themes][]" value="'.$default_theme[0].'" />';
-			echo '<label class="all_checkbox">';
-			echo '<input type="checkbox" name="install[themes][]" value="'.$default_theme[0].'" checked="checked" disabled="disabled" />';
-			echo '<span>'.$default_theme[0].'</span>';
-			echo '</label>';
-
-			//all other available themes
-			echo ' And ... <br/>';
-			echo '<p>';
-			$dir = $rootDir.'/themes';
-			$layouts = \gp\tool\Files::readDir($dir,1);
-			asort($layouts);
-			$i = 1;
-			foreach($layouts as $name){
-				if( $name == $default_theme[0] ){
-					continue;
-				}
-
-				$checked = '';
-				if( $all_themes || (array_search($name,$values['themes']) > 0) ){
-					$checked = ' checked="checked" ';
-				}
-
-				echo '<label class="all_checkbox">';
-				echo '<input type="checkbox" name="install[themes]['.$i++.']" value="'.htmlspecialchars($name).'" '.$checked.'/>';
-				echo '<span>';
-				echo str_replace('_',' ',$name);
-				echo '</span>';
-				echo '</label>';
-			}
-			echo '</p>';
-			echo '</td>';
-			echo '</tr>';
-			echo '</table>';
-
-
-			echo '</td>';
-			echo '</tr>';
-		echo '</table>';
-
-		$this->InstallFields($_REQUEST['install'],'install');
-		echo '<div id="install_continue">';
-		echo '<input type="submit" name="cmd" value="Continue" class="continue"/> ';
-		echo ' <input type="submit" name="" value="Cancel" />';
-		echo '</div>';
-		echo '</form>';
-	}
-
-	public function NewPlugins($values = array()){
-		global $rootDir;
-
-		$values += array('plugins'=>array());
-
-
-		echo '<form action="'.\gp\tool::GetUrl('Admin_Site_Setup').'" method="post">';
-		echo '<table style="width:100%">';
-		echo '<tr>';
-			echo '<th>Select Plugins</th>';
-			echo '</tr>';
-		echo '<tr>';
-			echo '<td class="all_checkboxes">';
-			echo '<div>';
-			echo 'Select which plugins will be available to the new installation. Note, selected plugins will not be installed.';
-			echo '</div>';
-			echo '<br/>';
-
-			$dir = $rootDir.'/addons';
-			$addons = \gp\tool\Files::readDir($dir,1);
-			$i = 1;
-			foreach($addons as $addon){
-				$checked = '';
-				if( array_search($addon,$values['plugins']) > 0 ){
-					$checked = ' checked="checked" ';
-				}
-				echo '<label class="all_checkbox">';
-				echo '<input type="checkbox" name="install[plugins]['.$i++.']" value="'.htmlspecialchars($addon).'"'.$checked.'/>';
-				echo '<span>';
-				echo str_replace('_',' ',$addon);
-				echo '</span>';
-				echo '</label>';
-			}
-
-			echo '</td>';
-			echo '</tr>';
-		echo '</table>';
-
-		$this->InstallFields($_REQUEST['install'],'install');
-		echo '<div id="install_continue">';
-		echo '<input type="submit" name="cmd" value="Continue" class="continue"/>';
-		echo ' <input type="submit" name="" value="Cancel" />';
-		echo '</div>';
-		echo '<input type="hidden" name="install[plugins_submitted]" value="plugins_submitted" />';
-		echo '</form>';
-	}
-
-
-
-	public function InstallLink($label,$query_array=array(),$attr=''){
-		return '<a href="'.$this->InstallUrl($query_array).'" '.$attr.'>'.\gp\tool::Ampersands($label).'</a>';
-	}
-
-	public function InstallUrl($query_array=array()){
-		$query_array += array('install'=>array());
-		$query_array['install'] = $query_array['install'] + $_REQUEST['install'];
-		$query = http_build_query($query_array);
-
-		return \gp\tool::GetUrl('Admin_Site_Setup',$query);
-	}
-
-	public function InstallFields($array,$key=null){
-		foreach($array as $k => $v){
-
-			if( !empty($key) || ($key === 0) ){
-				$k = $key.'['.urlencode($k).']';
-			}
-
-			if (is_array($v) || is_object($v)) {
-				$this->InstallFields($v,$k);
-			} else {
-				echo '<input type="hidden" name="'.htmlspecialchars($k).'" value="'.htmlspecialchars($v).'" />';
-			}
-		}
-	}
-
-
-	/**
-	 * Display window for selecting where to install
-	 *
-	 */
-	public function InstallFolder($destination){
-
-		echo '<table>';
-		echo '<tr><th>';
-		echo 'Select Destination Folder';
-		echo '</th></tr></table>';
-
-
-		$previous = $destination;
-		$parent = $destination;
-		$links = array();
-		do{
-			$previous = $parent;
-			$query_array = array('cmd'=>'expandfolder','folder'=>$parent);
-			$links[] = $this->InstallLink(basename($parent).'/',$query_array,' data-cmd="gpajax" ');
-			$parent = dirname($parent);
-		}while( $previous != $parent );
-
-
-		echo '<div id="parent_folders">';
-		$links = array_reverse($links);
-		echo implode('',$links);
-
-		$query_array = array('cmd'=>'expandfolder','folder'=>$destination);
-		echo '<form method="post" action="'.$this->InstallUrl($query_array).'">';
-		echo '<input type="text" name="sub_dir" value="" />';
-		echo '<input type="hidden" name="cmd" value="subfolder" />';
-		echo '</form>';
-		echo '</div>';
-
-
-
-		//show subfolders
-		echo '<div style="clear:both"></div>';
-
-		echo '<div id="destination_select">';
-		$this->InstallFolders($destination);
-		echo '</div>';
-
-		echo '<div id="install_continue">';
-		echo '<form action="'.\gp\tool::GetUrl('Admin_Site_Setup').'" method="get">';
-		echo '<input type="submit" name="" value="Cancel" />';
-		echo '</form>';
-		echo '</div>';
-
-	}
-
-
-	public function InstallFolders($dir){
-
-		if( !is_readable($dir) ){
-			echo '<p>';
-			echo 'Sorry, <i>'.$dir.'</i> is not readable.';
-			echo '</p>';
-			return;
-		}
-
-		$subdirs = \gp\tool\Files::readDir($dir,1);
-
-		echo '<ul>';
-		$i = 0;
-		$classes = array('even','odd');
-		if( count($subdirs) > 0 ){
-			natcasesort($subdirs);
-			$temp = rtrim($dir,'/');
-			foreach($subdirs as $subdir){
-				echo '<li>';
-				$this->FolderLink($subdir,$temp.'/'.$subdir,$classes[$i%2]);
-				echo '</li>';
-				$i++;
-			}
-		}
-
-
-		echo '<li>';
-		echo '<form action="'.\gp\tool::GetUrl('Admin_Site_Setup').'" method="post" class="'.$classes[$i%2].'">';
-		echo '<input type="submit" name="" value="New Folder" class="gppost" /> ';
-		echo '<input type="text" name="new_folder" value="" class="text"/> ';
-		echo '<input type="hidden" name="folder" value="'.htmlspecialchars($dir).'" /> ';
-		echo '<input type="hidden" name="cmd" value="newfolder" /> ';
-		$this->InstallFields($_REQUEST['install'],'install');
-		echo '</form>';
-		echo '</li>';
-
-		echo '</ul>';
-	}
-
-	public function GetSubdirs($dir){
-		global $config;
-
-		if( is_readable($dir) ){
-			return \gp\tool\Files::readDir($dir,1);
-		}
-
-		return false;
-	}
-
-	public function FolderLink($base,$full,$class){
-		echo '<span class="expand_child '.$class.'">';
-
-		$this->InstallLinks($full);
-
-
-		$query_array = array('cmd'=>'expandfolder','folder'=>$full);
-		echo $this->InstallLink($base,$query_array,' data-cmd="gpajax" rel="'.htmlspecialchars($full).'" ');
-		echo '</span>';
-	}
-
-
-	/*
-	 * Check for /addons, /data, /include, /themes and /index.php
-	 */
-	public function InstallLinks($dir){
-		global $config;
-
-		$check_short = array('addons','data','include','themes','index.php');
-		$failed = array();
-
-		//readable
-		if( !is_readable($dir) ){
-			return false;
-		}
-
-		//existing contents
-		foreach($check_short as $short){
-			$check_full = rtrim($dir,'/').'/'.$short;
-			if( file_exists($check_full) ){
-				$failed[] = $check_short;
-			}
-		}
-
-		if( count($failed) > 0 ){
-			return false;
-		}
-
-		$query_array = array('cmd'=>'Continue','install'=>array('folder'=>$dir));
-		echo $this->InstallLink('Install Here',$query_array,' class="select" ');
-
-		$query_array = array('cmd'=>'rmdir','dir'=>$dir);
-		echo $this->InstallLink('Delete',$query_array,' class="rm" data-cmd="gpajax" ');
-	}
-
-
-	/**
-	 * Show the contents of folder
-	 *
-	 */
-	public function ExpandFolder(){
-		global $page, $langmessage,$config;
-
-		$_REQUEST += array('install'=>array());
-		$page->ajaxReplace = array();
-		$page->ajaxReplace[] = 'messages';
-
-		$folder =& $_REQUEST['folder'];
-		if( empty($folder) || !file_exists($folder) || !is_dir($folder) ){
-			msg($langmessage['OOPS']);
-			return;
-		}
-
-		$this->LoadFolder($folder);
-	}
-
-	/**
-	 * Go to a user supplied sub directory in the browser
-	 *
-	 */
-	public function SubFolder(){
-		global $langmessage;
-
-		$folder =& $_REQUEST['folder'];
-		if( !empty($_REQUEST['sub_dir']) ){
-			$folder .= '/'.$_REQUEST['sub_dir'];
-		}
-		if( empty($folder) || !file_exists($folder) || !is_dir($folder) ){
-			msg($langmessage['OOPS']);
-			return;
-		}
-
-		$this->LoadFolder($folder);
-	}
-
-
-	public function LoadFolder($folder){
-		global $page;
-
-		ob_start();
-		echo $this->InstallFolder($folder);
-		$content = ob_get_clean();
-
-		$page->ajaxReplace[] = array('inner','#install_step',$content);
-
-		//save the folder location
-		if( !isset($this->siteData['last_folder']) || $this->siteData['last_folder'] !== $folder ){
-			$this->siteData['last_folder'] = $folder;
-			unset($this->siteData['last_folder_ftp']);
-			$this->SaveSiteData();
-		}
-	}
-
-
-	/*
-	 * Create a new folder
-	 *
-	 */
-	public function NewFolder(){
-		global $page, $langmessage;
-
-		$page->ajaxReplace = array();
-		$page->ajaxReplace[] = 'messages';
-
-		$folder =& $_POST['folder'];
-		if( empty($folder) || !file_exists($folder) || !is_dir($folder) ){
-			msg($langmessage['OOPS']. ' (Parent Dir)');
-			return false;
-		}
-
-		$new_name =& $_POST['new_folder'];
-		if( empty($new_name) ){
-			msg($langmessage['OOPS']. ' (Empty Name)');
-			return false;
-		}
-
-		$new_name = trim($new_name,'/\\');
-		$folder = rtrim($folder,'/\\');
-
-		$new_folder = $folder.'/'.$new_name;
-
-		if( file_exists($new_folder) ){
-			msg($langmessage['OOPS']. ' (Already Exists)');
-			return false;
-		}
-
-		if( !$this->MakeDir($folder,$new_name) ){
-			return false;
-		}
-
-		$this->ExpandFolder();
-	}
-
-	public function RemoveDirPrompt(){
-		global $page, $langmessage;
-
-		$page->ajaxReplace = array();
-		$page->ajaxReplace[] = 'messages';
-
-
-		$dir = $_REQUEST['dir'];
-		if( !$this->RemoveDirCheck($dir) ){
-			return;
-		}
-
-		ob_start();
-
-		echo '<div class="inline_box">';
-		echo '<form action="'.\gp\tool::GetUrl('Admin_Site_Setup').'" method="post">';
-		echo '<input type="hidden" name="dir" value="'.htmlspecialchars($dir).'" />';
-		echo '<input type="hidden" name="cmd" value="new_destination" />';
-		$this->InstallFields($_REQUEST['install'],'install');
-
-		echo sprintf($langmessage['generic_delete_confirm'],'<i>'.htmlspecialchars($dir).'</i>');
-
-		echo '<p>';
-		echo '<input type="submit" name="cmd" value="Delete Folder" class="gppost" />';
-		echo ' <input type="submit" value="Cancel" class="admin_box_close" /> ';
-		echo '</p>';
-
-		echo '</form>';
-		echo '</div>';
-
-
-		$content = ob_get_clean();
-
-		$page->ajaxReplace[] = array('gpabox','',$content);
-	}
-
-	public function RemoveDir(){
-		global $page, $langmessage;
-
-		$page->ajaxReplace = array();
-		$page->ajaxReplace[] = 'messages';
-
-		$dir = $_POST['dir'];
-		if( !$this->RemoveDirCheck($dir) ){
-			return;
-		}
-
-		$parent = dirname($dir);
-
-		if( !$this->RmDir($dir) ){
-			msg($langmessage['OOPS']);
-			return;
-		}
-
-		$this->LoadFolder($parent);
-	}
-
-	public function RemoveDirCheck($dir){
-		global $langmessage;
-
-		if( empty($dir) || !file_exists($dir) || !is_dir($dir) ){
-			msg($langmessage['OOPS'].' (Invalid)');
-			return false;
-		}
-
-		$dh = @opendir($dir);
-		if( !$dh ){
-			msg($langmessage['OOPS'].' (Not Readable)');
-			return false;
-		}
-
-		$count = 0;
-		while( ($file = readdir($dh)) !== false){
-			if( $file == '.' || $file == '..' ){
-				continue;
-			}
-			closedir($dh);
-			msg($langmessage['dir_not_empty']);
-			return false;
-		}
-
-		closedir($dh);
-		return true;
-	}
-
-	public function MakeDir($parent,$new_name){
-		global $config, $langmessage;
-
-
-		$langmessage['not_created'] = 'Oops, the folder could not be created. ';
-		$langmessage['not_created'] .= 'You may still be able to create it by doing one of the following: ';
-		$langmessage['not_created'] .= '<ul>';
-		$langmessage['not_created'] .= '<li>Make the parent folder writable by changing it\'s permissions.</li>';
-		$langmessage['not_created'] .= '<li>Supply your server\'s <a href="%s">ftp information</a> to this plugin.</li>';
-		$langmessage['not_created'] .= '</ul>';
-
-		$langmessage['not_created'] = sprintf($langmessage['not_created'],\gp\tool::GetUrl('Admin_Site_Setup','cmd=settings'));
-
-
-		$new_folder = $parent.'/'.$new_name;
-
-		if( mkdir($new_folder,0755) ){
-			chmod($new_folder,0755); //some systems need more than just the 0755 in the mkdir() function
-			return true;
-		}
-
-		if( $this->HasFTP() ){
-			msg($langmessage['not_created']);
-			return false;
-		}
-
-		$conn_id = self::FTPConnect();
-		if( !$conn_id ){
-			msg($langmessage['not_created'].' (FTP Connection Failed)');
-			return false;
-		}
-
-
-		$ftp_parent = \gp\tool\FileSystemFtp::GetFTPRoot($conn_id,$parent);
-		if( $ftp_parent === false ){
-			msg('Oops, could not find the ftp location of <i>'.$parent.'</i> using the current ftp login.');
-			return false;
-		}
-
-		$ftp_destination = $ftp_parent.'/'.$new_name;
-		if( !ftp_mkdir($conn_id,$ftp_destination) ){
-			msg('Oops, could not create the folder using the current ftp login.');
-			return false;
-		}
-
-		ftp_site($conn_id, 'CHMOD 0755 '. $ftp_destination );
-		return true;
-	}
-
-
-	public function NewCreate(){
-		global $rootDir,$config,$checkFileIndex;
-		global $dataDir; //for SaveTitle(), SaveConfig()
-
-		$_POST					+= array('themes'=>array(),'plugins'=>array());
-		$destination			= $_REQUEST['install']['folder'];
-		$this->site_uniq_id 	= $this->NewId();
-		$checkFileIndex			= false;
-
-
-		//prevent reposting
-		if( isset($this->siteData['sites'][$destination]) ){
-			msg('Oops, there\'s already an installation in '.htmlspecialchars($destination));
-			return false;
-		}
-
-		echo '<ul>';
-		echo '<li>Starting Installation</li>';
-
-
-		//check user values first
-		if( !\gp\install\Tools::gpInstall_Check() ){
-			$this->Install_Aborted($destination);
-			return false;
-		}
-
-
-		//	Create index.php file
-		echo '<li>Create index.php file</li>';
-		if( !$this->CreateIndex($destination,$this->site_uniq_id) ){
-			echo '<li>Failed to save the index.php file</li>';
-			$this->Install_Aborted($destination);
-			return false;
-		}
-
-		//	Create /include symlink
-		$target = $rootDir.'/include';
-		$name = $destination.'/include';
-		if( !$this->Create_Symlink($target,$name,'main.php') ){
-			$this->Install_Aborted($destination);
-			return false;
-		}
-
-
-		//	Create /themes folder
-		if( !$this->CopyThemes($destination,$_REQUEST['install']) ){
-			$this->Install_Aborted($destination);
-			return false;
-		}
-
-		//	Create /plugins folder
-		if( !$this->CreatePlugins($destination,$_REQUEST['install']) ){
-			$this->Install_Aborted($destination);
-			return false;
-		}
-
-
-		//	variable juggling
-		$oldDir = $dataDir;
-		$dataDir = $destination;
-		$old_unique = $config['gpuniq'];
-
-
-		$new_config = array();
-		$new_config['language'] = $config['language'];
-		$config['gpuniq'] = $new_config['gpuniq'] = $this->NewId();
-
-		ob_start();
-		if( !\gp\install\Tools::Install_DataFiles_New( $destination, $new_config, false ) ){
-			$this->Install_Aborted($destination);
-			$dataDir = $oldDir;
-			$config['gpuniq'] = $old_unique;
-			ob_get_clean();
-			return false;
-		}
-		ob_get_clean();
-
-		$dataDir = $oldDir;
-		$config['gpuniq'] = $old_unique;
-
-
-		$this->siteData['sites'][$destination] = array();
-		$this->siteData['sites'][$destination]['unique'] = $this->site_uniq_id;
-		$this->siteData['sites'][$destination]['gpuniq'] = $new_config['gpuniq'];
-
-		$this->SaveSiteData();
-		$this->Install_Success();
-		return true;
-	}
-
-	public function Install_Aborted($destination){
-
-		echo '<li><b>Installation Aborted</b></li>';
-		echo '</ul>';
-		if( $destination ){
-			$this->EmptyDir($destination);
-		}
-	}
-
-	public function Install_Success(){
-		echo '</ul>';
-		echo '<p></p>';
-		echo '<b>Installation was completed successfully.</b> ';
-
-		//show the options
-		$_REQUEST['site'] = $_REQUEST['install']['folder'];
-		$this->Options();
-
-	}
-
-	/**
-	 * Return true if FTP can be used
-	 *
-	 */
-	public function HasFTP(){
-		global $config;
-
-		if( empty($config['ftp_server']) || !function_exists('ftp_connect') ){
-			return false;
-		}
-
-		return true;
-	}
-
-
-	/**
-	 * Multi Site Heading
-	 *
-	 */
-	public function Heading($sub_heading=false){
-		echo '<h1>';
-		echo \gp\tool::Link('Admin_Site_Setup','Multi-Site');
-
-		if( $sub_heading ){
-			echo ' &#187; ';
-			echo $sub_heading;
-		}
-		echo '</h1>';
-	}
-
-
-	/**
-	 * FTP Functions
-	 *
-	 */
-	public static function FTPConnect(){
-		global $config;
-
-		static $conn_id = false;
-
-		if( $conn_id ){
-			return $conn_id;
-		}
-
-		if( empty($config['ftp_server']) ){
-			return false;
-		}
-
-		$conn_id = @ftp_connect($config['ftp_server'], 21, 6);
-		if( !$conn_id ){
-			//trigger_error('ftp_connect() failed for server : '.$config['ftp_server']);
-			return false;
-		}
-
-		$login_result = @ftp_login($conn_id, $config['ftp_user'], $config['ftp_pass']);
-		if( !$login_result ){
-			//trigger_error('ftp_login() failed for server : '.$config['ftp_server'].' and user: '.$config['ftp_user']);
-			return false;
-		}
-		register_shutdown_function(array('SetupSite', 'ftpClose'), $conn_id);
-		return $conn_id;
-	}
-
-
-	public static function ftpClose($connection=false){
-		if( $connection !== false ){
-			@ftp_quit($connection);
-		}
-	}
-
-}
diff --git a/addons/Multi Site/multi_site.scss b/addons/Multi Site/multi_site.scss
deleted file mode 100644
index 91a5136..0000000
--- a/addons/Multi Site/multi_site.scss	
+++ /dev/null
@@ -1,221 +0,0 @@
-
-@import 'include/thirdparty/Bootstrap3/scss/bootstrap/_variables.scss';
-@import 'include/css/variables.scss';
-
-
-//@import 'include/thirdparty/Bootstrap3/less/variables.less';
-//@import 'include/css/variables.less';
-
-
-
-#install_step{
-	margin-top:30px;
-	}
-
-#install_step th{
-	font-size:20px !important;
-	font-weight:normal;
-	border:none;
-	background:#fff;
-	padding:0 0 10px;
-	text-align:left;
-	}
-
-#install_step .label{
-	white-space:nowrap;
-	padding-right:20px;
-	}
-
-#parent_folders{
-	margin-bottom:10px;
-	background: #eee;
-	border-radius:3px;
-	}
-
-#parent_folders a{
-	display:inline-block;
-	padding:0;
-	margin:0;
-	padding: 5px 10px;
-	color:#333 !important;
-	line-height:18px;
-	}
-#parent_folders a:hover{
-	background:#f5f5f5;
-	}
-
-#parent_folders form,
-#parent_folders input{
-	display:inline;
-	}
-
-#parent_folders input{
-	display:inline-block;
-	background: #fff;
-	border: 1px solid #efefef;
-	border-radius: 5px;
-	padding:0;
-	margin:1px;
-	height:24px;
-	width:200px;
-	}
-
-#destination_select ul{
-	list-style:none;
-	margin:1px 0;
-	padding:0;
-	}
-#destination_select ul li{
-	overflow:hidden;
-	padding: 0 0 0 20px;
-	padding: 0;
-	}
-#destination_select li span{
-	display:block;
-	white-space:nowrap;
-	padding:0;
-
-	background: #e9e9e9 url('../../../include/imgs/folder.png') 4px 50% no-repeat;
-	}
-#destination_select li span.odd{
-	background-color:#f7f7f7;
-	}
-
-#destination_select span:hover{
-	background-color: #ccc !important;
-	}
-
-#destination_select li a{
-	display:block;
-	padding: 5px 10px 5px 24px;
-	color:#333 !important;
-	margin-right:100px;
-	}
-
-#destination_select a.select,
-#destination_select input.gppost{
-	float:right;
-	padding:2px 5px;
-	margin:3px;
-	border:0;
-	border-radius:3px;
-	font-size:13px;
-
-	color:#fff !important;
-	background-color:#6aa84f;
-	}
-
-#destination_select a.rm{
-	float:right;
-	padding:2px 5px;
-	margin:3px;
-	display:none;
-	}
-#destination_select span.expand a.rm{
-	display:block;
-	}
-
-/*
-#destination_select a.not_installable{
-	color:#990000 !important;
-	background:none;
-	}
-*/
-
-#destination_select form{
-	display:block;
-	background: #e9e9e9;
-	border:2px solid #e9e9e9;
-	border-width:2px 0 2px 2px;
-	}
-#destination_select form.odd{
-	background-color:#f7f7f7;
-	border-color:#f7f7f7;
-	}
-#destination_select input.text{
-	border:1px solid #ccc;
-	padding: 4px;
-	display: block;
-	}
-
-
-
-#install_status{
-	width:100%;
-	border-radius:5px;
-	padding:0;
-	color:#555;
-	box-sizing:border-box;
-	margin-top:20px;
-	}
-
-#install_status ul{
-	list-style:none;
-	margin:0;
-	padding:0;
-	}
-
-#install_status li{
-	display:inline-block;
-	}
-
-#install_status li a{
-	color:				#333;
-	padding:			7px 10px;
-	margin-right:		10px;
-	display:			inline-block;
-	max-width:			200px;
-	overflow:			hidden;
-	text-overflow:		ellipsis;
-	white-space:		nowrap;
-
-	color:				$btn-warning-color !important;
-	background-color:	$btn-warning-bg;
-	border:				1px solid $btn-warning-border;
-	border-radius:3px;
-	}
-
-#install_status li.ready a{
-	color:				$btn-success-color !important;
-	background-color:	$btn-success-bg;
-	border:				1px solid $btn-success-border;
-}
-
-#install_state{
-	float:right;
-	}
-#install_state.ready a{
-	font-weight:bold;
-	}
-
-#install_continue{
-	text-align:right;
-	margin-top:10px;
-	}
-
-#install_continue input{
-	border:1px solid #ccc;
-	border-radius:5px;
-	padding:1px 5px;
-	margin:5px;
-	cursor:pointer;
-	}
-
-#install_continue .continue{
-	padding:4px 26px;
-	font-size:15px;
-
-	color:				$btn-success-color;
-	background-color:	$btn-success-bg;
-	border:				1px solid $btn-success-border;
-	border-radius:5px;
-	}
-
-#ms_links{
-	padding:25px 0;
-	}
-
-#ms_links a{
-	font-size:17px;
-	margin:3px 7px 3px 0;
-	}