diff --git a/addons/--removed-Multi Site.zip b/addons/--removed-Multi Site.zip
new file mode 100644
index 0000000..4d30c8b
Binary files /dev/null and b/addons/--removed-Multi Site.zip differ
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 @@
-Cannot install this addon. This is not the root installation of gpEasy.
';
- $passed = false;
- }
-
-
- if( !function_exists('symlink') ){
- echo 'Cannot install this addon. Your installation of PHP has the symlink() function disabled.
';
- $passed = false;
- }
-
-
- if( !isset($_SERVER['SCRIPT_FILENAME']) && (GETENV('SCRIPT_FILENAME') === FALSE) ){
- echo 'Cannot install this addon. $_SERVER[\'SCRIPT_FILENAME\'] and GETENV(\'SCRIPT_FILENAME\') are unavailable.
';
- $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 @@
-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 '';
- }
-
- 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 '
';
- echo '';
- echo 'Add multiple installations of gpEasy to your server.';
- echo '
';
- echo '
';
-
- echo '';
- echo \gp\tool::Link('Admin_Site_Setup',$langmessage['new_installation'],'cmd=new');
- echo ' ';
- echo \gp\tool::Link('Admin_Site_Setup',$langmessage['Settings'],'cmd=settings');
- echo ' ';
- echo \gp\tool::Link('Admin_Site_Setup',$langmessage['about'],'cmd=about');
- echo '
';
-
- $this->ShowSimple();
- }
-
-
- /**
- * About this plugin
- *
- */
- public function About($full){
- global $langmessage;
-
- $this->Heading($langmessage['about']);
-
- echo '
';
- echo '';
- echo $langmessage['easily add installations'];
- echo $langmessage['multi_site_notes'];
- echo '
';
-
- echo '
';
-
- echo '';
- echo \gp\tool::Link('Admin_Site_Setup',$langmessage['Settings'],'cmd=settings');
- echo '';
-
- echo '';
- echo '- Service Provider ID
';
- echo '- When your provider id is entered, gpEasy.com Services can attribute each installation to your service.
';
- echo '
';
-
- echo '';
- echo '- Service Provider Name
';
- echo '- Displayed on the site map of your hosted installations.
';
- echo '
';
-
- echo '
';
- echo \gp\tool::Link('Admin_Site_Setup',$langmessage['back']);
- echo '
';
-
- }
-
-
-
- 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 '';
- }
-
- public function ShowSimple(){
- global $langmessage;
-
- if( !isset($this->siteData['sites']) || (count($this->siteData['sites']) == 0) ){
- return;
- }
- echo '';
-
- //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 ' ';
- 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 '';
- echo \gp\tool::Link('Admin_Site_Setup',$langmessage['back']);
- echo '
';
-
- }
-
- 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 '';
- echo '';
- echo '';
- echo ' | ';
- echo '';
- echo '';
- echo '';
- echo ' | ';
- echo '
';
- }
-
-
- /**
- * 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 '.$destination.'/addons'.'');
- 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 '.$destination.'/themes'.'');
- 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 '.$destination.'/themes'.'');
- 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 'Create Symlink: '.$path.'';
- 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 '.htmlspecialchars($_POST['ftp_server']).'');
- 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 '.$_POST['ftp_server'].' and user '.$_POST['ftp_user'].'');
- @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 '';
- 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 '
';
- }
-
- public function InstallStatus_Steps(&$cmd){
- echo '
';
- echo '';
-
- echo '
';
- $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 '- ';
- $query_array = array('cmd'=>'new_install');
- echo $this->InstallLink('Ready To Install',$query_array);
- if( $cmd === false ){
- $cmd = 'new_install';
- }
- echo '
';
- }else{
- echo '- ';
- echo 'Not Ready to Install';
- echo '
';
- }
-
- echo '
';
-
- echo '
';
- echo '
';
- }
-
-
- /**
- * 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 '';
- echo $this->InstallLink($label.': '.$link_label,$query_array);
- echo '';
-
- 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 = 'Sorry, the selected folder could not be written to.
';
- $message .= ''.$reason.' ';
- $message .= 'You may still be able to install in this folder by doing one of the following:
';
- $message .= '';
- $message .= '- Make the folder writable by changing it\'s permissions.
';
-
- if( function_exists('ftp_connect') ){
- $message .= '- Supply your server\'s ftp connection information.
';
- }else{
- $message .= '- Enabling the FTP extension in php and supplying ftp connection information.
';
- }
- $message = sprintf($message,\gp\tool::GetUrl('Admin_Site_Setup','cmd=settings'));
- $message .= '
';
-
-
-
- //msg($langmessage['not_created'].' (FTP Connection Failed)');
- unset($_REQUEST['install']['folder']);
- msg($message);
- }
-
- public function NewInstall(){
-
- echo '';
- }
-
-
- 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 '';
- }
-
- public function NewPlugins($values = array()){
- global $rootDir;
-
- $values += array('plugins'=>array());
-
-
- echo '';
- }
-
-
-
- public function InstallLink($label,$query_array=array(),$attr=''){
- return ''.\gp\tool::Ampersands($label).'';
- }
-
- 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 '';
- }
- }
- }
-
-
- /**
- * Display window for selecting where to install
- *
- */
- public function InstallFolder($destination){
-
- echo '';
- echo '';
- echo 'Select Destination Folder';
- echo ' |
---|
';
-
-
- $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 '';
- $links = array_reverse($links);
- echo implode('',$links);
-
- $query_array = array('cmd'=>'expandfolder','folder'=>$destination);
- echo '';
- echo '
';
-
-
-
- //show subfolders
- echo '';
-
- echo '';
- $this->InstallFolders($destination);
- echo '
';
-
- echo '';
- echo '';
- echo '
';
-
- }
-
-
- public function InstallFolders($dir){
-
- if( !is_readable($dir) ){
- echo '';
- echo 'Sorry, '.$dir.' is not readable.';
- echo '
';
- return;
- }
-
- $subdirs = \gp\tool\Files::readDir($dir,1);
-
- echo '';
- $i = 0;
- $classes = array('even','odd');
- if( count($subdirs) > 0 ){
- natcasesort($subdirs);
- $temp = rtrim($dir,'/');
- foreach($subdirs as $subdir){
- echo '- ';
- $this->FolderLink($subdir,$temp.'/'.$subdir,$classes[$i%2]);
- echo '
';
- $i++;
- }
- }
-
-
- echo '- ';
- echo '';
- echo '
';
-
- echo '
';
- }
-
- 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 '';
-
- $this->InstallLinks($full);
-
-
- $query_array = array('cmd'=>'expandfolder','folder'=>$full);
- echo $this->InstallLink($base,$query_array,' data-cmd="gpajax" rel="'.htmlspecialchars($full).'" ');
- echo '';
- }
-
-
- /*
- * 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 '';
-
-
- $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'] .= '';
- $langmessage['not_created'] .= '- Make the parent folder writable by changing it\'s permissions.
';
- $langmessage['not_created'] .= '- Supply your server\'s ftp information to this plugin.
';
- $langmessage['not_created'] .= '
';
-
- $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 '.$parent.' 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 '';
- echo '- Starting Installation
';
-
-
- //check user values first
- if( !\gp\install\Tools::gpInstall_Check() ){
- $this->Install_Aborted($destination);
- return false;
- }
-
-
- // Create index.php file
- echo '- Create index.php file
';
- if( !$this->CreateIndex($destination,$this->site_uniq_id) ){
- echo '- Failed to save the index.php file
';
- $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 '- Installation Aborted
';
- echo '
';
- if( $destination ){
- $this->EmptyDir($destination);
- }
- }
-
- public function Install_Success(){
- echo '';
- echo '';
- echo 'Installation was completed successfully. ';
-
- //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 '';
- echo \gp\tool::Link('Admin_Site_Setup','Multi-Site');
-
- if( $sub_heading ){
- echo ' » ';
- echo $sub_heading;
- }
- echo '
';
- }
-
-
- /**
- * 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;
- }