git-svn-id: https://192.168.0.254/svn/Proyectos.FundacionLQDVI_WebCongresos/trunk@2 94ccb1af-fd9d-d947-8d90-7f70ea60afc8
957 lines
25 KiB
PHP
957 lines
25 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @version $Id: model.php 12694 2009-09-11 21:03:02Z ian $
|
|
* @package Joomla
|
|
* @subpackage Installation
|
|
* @copyright Copyright (C) 2005 - 2008 Open Source Matters. All rights reserved.
|
|
* @license GNU/GPL, see LICENSE.php
|
|
* Joomla! is free software. This version may have been modified pursuant
|
|
* to the GNU General Public License, and as distributed it includes or
|
|
* is derivative of works licensed under the GNU General Public License or
|
|
* other free or open source software licenses.
|
|
* See COPYRIGHT.php for copyright notices and details.
|
|
*/
|
|
|
|
// no direct access
|
|
defined('_JEXEC') or die('Restricted access');
|
|
|
|
/**
|
|
* @package Joomla
|
|
* @subpackage Installation
|
|
*/
|
|
|
|
jimport('joomla.application.component.model');
|
|
|
|
class JInstallationModel extends JModel
|
|
{
|
|
/**
|
|
* Array used to store data between model and view
|
|
*
|
|
* @var Array
|
|
* @access protected
|
|
* @since 1.5
|
|
*/
|
|
var $data = array();
|
|
|
|
/**
|
|
* Array used to store user input created during the installation process
|
|
*
|
|
* @var Array
|
|
* @access protected
|
|
* @since 1.5
|
|
*/
|
|
var $vars = array();
|
|
|
|
/**
|
|
* Constructor
|
|
*/
|
|
function __construct($config = array())
|
|
{
|
|
$this->_state = new JObject();
|
|
//set the view name
|
|
if (empty( $this->_name ))
|
|
{
|
|
if (isset($config['name'])) {
|
|
$this->_name = $config['name'];
|
|
}
|
|
else
|
|
{
|
|
$r = null;
|
|
if (!preg_match('/Model(.*)/i', get_class($this), $r)) {
|
|
JError::raiseError (500, "JModel::__construct() : Can't get or parse class name.");
|
|
}
|
|
$this->_name = strtolower( $r[1] );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Generate a panel of language choices for the user to select their language
|
|
*
|
|
* @return boolean True if successful
|
|
* @access public
|
|
* @since 1.5
|
|
*/
|
|
function chooseLanguage()
|
|
{
|
|
global $mainframe;
|
|
|
|
$vars =& $this->getVars();
|
|
|
|
jimport('joomla.language.helper');
|
|
$native = JLanguageHelper::detectLanguage();
|
|
$forced = $mainframe->getLocalise();
|
|
|
|
if ( !empty( $forced['lang'] ) ){
|
|
$native = $forced['lang'];
|
|
}
|
|
|
|
$lists = array ();
|
|
$lists['langs'] = JLanguageHelper::createLanguageList($native);
|
|
|
|
$this->setData('lists', $lists);
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Gets the parameters for database creation
|
|
*
|
|
* @return boolean True if successful
|
|
* @access public
|
|
* @since 1.5
|
|
*/
|
|
function dbConfig()
|
|
{
|
|
global $mainframe;
|
|
|
|
$vars =& $this->getVars();
|
|
|
|
if (!isset ($vars['DBPrefix'])) {
|
|
$vars['DBPrefix'] = 'jos_';
|
|
}
|
|
|
|
$lists = array ();
|
|
$files = array ('mysql', 'mysqli',);
|
|
$db = JInstallationHelper::detectDB();
|
|
foreach ($files as $file)
|
|
{
|
|
$option = array ();
|
|
$option['text'] = $file;
|
|
if (strcasecmp($option['text'], $db) == 0)
|
|
{
|
|
$option['selected'] = 'selected="true"';
|
|
}
|
|
$lists['dbTypes'][] = $option;
|
|
}
|
|
|
|
$doc =& JFactory::getDocument();
|
|
|
|
$this->setData('lists', $lists);
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Displays the finish screen
|
|
*
|
|
* @return boolean True if successful
|
|
* @access public
|
|
* @since 1.5
|
|
*/
|
|
function finish()
|
|
{
|
|
global $mainframe;
|
|
|
|
$vars =& $this->getVars();
|
|
|
|
$vars['siteurl'] = JURI::root();
|
|
$vars['adminurl'] = $vars['siteurl'].'administrator/';
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Gets ftp configuration parameters
|
|
*
|
|
* @return boolean True if successful
|
|
* @access public
|
|
* @since 1.5
|
|
*/
|
|
function ftpConfig($DBcreated = '0')
|
|
{
|
|
global $mainframe;
|
|
|
|
$vars =& $this->getVars();
|
|
|
|
// Require the xajax library
|
|
require_once( JPATH_BASE.DS.'includes'.DS.'xajax'.DS.'xajax.inc.php' );
|
|
|
|
// Instantiate the xajax object and register the function
|
|
$xajax = new xajax(JURI::base().'installer/jajax.php');
|
|
$xajax->registerFunction(array('getFtpRoot', 'JAJAXHandler', 'ftproot'));
|
|
$xajax->registerFunction(array('FTPVerify', 'JAJAXHandler', 'ftpverify'));
|
|
//$xajax->debugOn();
|
|
|
|
$vars['DBcreated'] = JArrayHelper::getValue($vars, 'DBcreated', $DBcreated);
|
|
$strip = get_magic_quotes_gpc();
|
|
|
|
if (!isset ($vars['ftpEnable'])) {
|
|
$vars['ftpEnable'] = '1';
|
|
}
|
|
if (!isset ($vars['ftpHost'])) {
|
|
$vars['ftpHost'] = '127.0.0.1';
|
|
}
|
|
if (!isset ($vars['ftpPort'])) {
|
|
$vars['ftpPort'] = '21';
|
|
}
|
|
if (!isset ($vars['ftpUser'])) {
|
|
$vars['ftpUser'] = '';
|
|
}
|
|
if (!isset ($vars['ftpPassword'])) {
|
|
$vars['ftpPassword'] = '';
|
|
}
|
|
|
|
$doc =& JFactory::getDocument();
|
|
$doc->addCustomTag($xajax->getJavascript('', 'includes/js/xajax.js', 'includes/js/xajax.js'));
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Get data for later use
|
|
*
|
|
* @return string
|
|
* @access public
|
|
* @since 1.5
|
|
*/
|
|
function & getData($key){
|
|
|
|
if ( ! array_key_exists($key, $this->data) )
|
|
{
|
|
$null = null;
|
|
return $null;
|
|
}
|
|
|
|
return $this->data[$key];
|
|
}
|
|
|
|
/**
|
|
* Get the local PHP settings
|
|
*
|
|
* @param $val Value to get
|
|
* @return Mixed
|
|
* @access protected
|
|
* @since 1.5
|
|
*/
|
|
function getPhpSetting($val) {
|
|
$r = (ini_get($val) == '1' ? 1 : 0);
|
|
return $r ? 'ON' : 'OFF';
|
|
}
|
|
|
|
/**
|
|
* Get the configuration variables for the installation
|
|
*
|
|
* @return Array Configuration variables
|
|
* @access public
|
|
* @since 1.5
|
|
*/
|
|
function & getVars()
|
|
{
|
|
if ( ! $this->vars )
|
|
{
|
|
// get a recursively slash stripped version of post
|
|
$post = (array) JRequest::get( 'post' );
|
|
$postVars = JArrayHelper::getValue( $post, 'vars', array(), 'array' );
|
|
$session =& JFactory::getSession();
|
|
$registry =& $session->get('registry');
|
|
$registry->loadArray($postVars, 'application');
|
|
$this->vars = $registry->toArray('application');
|
|
}
|
|
|
|
return $this->vars;
|
|
}
|
|
|
|
/**
|
|
* Gets the parameters for database creation
|
|
*
|
|
*
|
|
* @return boolean True if successful
|
|
* @access public
|
|
* @since 1.5
|
|
*/
|
|
function license()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Gets the parameters for database creation
|
|
*
|
|
* @return boolean True if successful
|
|
* @access public
|
|
* @since 1.5
|
|
*/
|
|
function makeDB($vars = false)
|
|
{
|
|
global $mainframe;
|
|
|
|
// Initialize variables
|
|
if ($vars === false) {
|
|
$vars = $this->getVars();
|
|
}
|
|
|
|
$errors = null;
|
|
$lang = JArrayHelper::getValue($vars, 'lang', 'en-GB');
|
|
$DBcreated = JArrayHelper::getValue($vars, 'DBcreated', '0');
|
|
$DBtype = JArrayHelper::getValue($vars, 'DBtype', 'mysql');
|
|
$DBhostname = JArrayHelper::getValue($vars, 'DBhostname', '');
|
|
$DBuserName = JArrayHelper::getValue($vars, 'DBuserName', '');
|
|
$DBpassword = JArrayHelper::getValue($vars, 'DBpassword', '');
|
|
$DBname = JArrayHelper::getValue($vars, 'DBname', '');
|
|
$DBPrefix = JArrayHelper::getValue($vars, 'DBPrefix', 'jos_');
|
|
$DBOld = JArrayHelper::getValue($vars, 'DBOld', 'bu');
|
|
$DBversion = JArrayHelper::getValue($vars, 'DBversion', '');
|
|
|
|
// these 3 errors should be caught by the javascript in dbConfig
|
|
if ($DBtype == '')
|
|
{
|
|
$this->setError(JText::_('validType'));
|
|
$this->setData('back', 'dbconfig');
|
|
$this->setData('errors', $errors);
|
|
return false;
|
|
//return JInstallationView::error($vars, JText::_('validType'), 'dbconfig');
|
|
}
|
|
if (!$DBhostname || !$DBuserName || !$DBname)
|
|
{
|
|
$this->setError(JText::_('validDBDetails'));
|
|
$this->setData('back', 'dbconfig');
|
|
$this->setData('errors', $errors);
|
|
return false;
|
|
//return JInstallationView::error($vars, JText::_('validDBDetails'), 'dbconfig');
|
|
}
|
|
if ($DBname == '')
|
|
{
|
|
$this->setError(JText::_('emptyDBName'));
|
|
$this->setData('back', 'dbconfig');
|
|
$this->setData('errors', $errors);
|
|
return false;
|
|
//return JInstallationView::error($vars, JText::_('emptyDBName'), 'dbconfig');
|
|
}
|
|
if (!preg_match( '#^[a-zA-Z]+[a-zA-Z0-9_]*$#', $DBPrefix )) {
|
|
$this->setError(JText::_('MYSQLPREFIXINVALIDCHARS'));
|
|
$this->setData('back', 'dbconfig');
|
|
$this->setData('errors', $errors);
|
|
return false;
|
|
}
|
|
if (strlen($DBPrefix) > 15) {
|
|
$this->setError(JText::_('MYSQLPREFIXTOOLONG'));
|
|
$this->setData('back', 'dbconfig');
|
|
$this->setData('errors', $errors);
|
|
return false;
|
|
}
|
|
if (strlen($DBname) > 64) {
|
|
$this->setError(JText::_('MYSQLDBNAMETOOLONG'));
|
|
$this->setData('back', 'dbconfig');
|
|
$this->setData('errors', $errors);
|
|
return false;
|
|
}
|
|
|
|
if (!$DBcreated)
|
|
{
|
|
$DBselect = false;
|
|
$db = & JInstallationHelper::getDBO($DBtype, $DBhostname, $DBuserName, $DBpassword, null, $DBPrefix, $DBselect);
|
|
|
|
if ( JError::isError($db) ) {
|
|
// connection failed
|
|
$this->setError(JText::sprintf('WARNNOTCONNECTDB', $db->toString()));
|
|
$this->setData('back', 'dbconfig');
|
|
$this->setData('errors', $db->toString());
|
|
return false;
|
|
}
|
|
|
|
if ($err = $db->getErrorNum()) {
|
|
// connection failed
|
|
$this->setError(JText::sprintf('WARNNOTCONNECTDB', $db->getErrorNum()));
|
|
$this->setData('back', 'dbconfig');
|
|
$this->setData('errors', $db->getErrorMsg());
|
|
return false;
|
|
}
|
|
|
|
//Check utf8 support of database
|
|
$DButfSupport = $db->hasUTF();
|
|
|
|
// Try to select the database
|
|
if ( ! $db->select($DBname) )
|
|
{
|
|
if (JInstallationHelper::createDatabase($db, $DBname, $DButfSupport))
|
|
{
|
|
$db->select($DBname);
|
|
/*
|
|
// make the new connection to the new database
|
|
$db = NULL;
|
|
$db = & JInstallationHelper::getDBO($DBtype, $DBhostname, $DBuserName, $DBpassword, $DBname, $DBPrefix);
|
|
*/
|
|
} else {
|
|
$this->setError(JText::sprintf('WARNCREATEDB', $DBname));
|
|
$this->setData('back', 'dbconfig');
|
|
$this->setData('errors', $db->getErrorMsg());
|
|
return false;
|
|
//return JInstallationView::error($vars, array (JText::sprintf('WARNCREATEDB', $DBname)), 'dbconfig', $error);
|
|
}
|
|
} else {
|
|
|
|
// pre-existing database - need to set character set to utf8
|
|
// will only affect MySQL 4.1.2 and up
|
|
JInstallationHelper::setDBCharset($db, $DBname);
|
|
}
|
|
|
|
$db = & JInstallationHelper::getDBO($DBtype, $DBhostname, $DBuserName, $DBpassword, $DBname, $DBPrefix);
|
|
|
|
if ($DBOld == 'rm') {
|
|
if (JInstallationHelper::deleteDatabase($db, $DBname, $DBPrefix, $errors)) {
|
|
$this->setError(JText::_('WARNDELETEDB'));
|
|
$this->setData('back', 'dbconfig');
|
|
$this->setData('errors', $errors);
|
|
return false;
|
|
//return JInstallationView::error($vars, , 'dbconfig', JInstallationHelper::errors2string($errors));
|
|
}
|
|
}
|
|
else
|
|
{
|
|
/*
|
|
* We assume since we aren't deleting the database that we need
|
|
* to back it up :)
|
|
*/
|
|
if (JInstallationHelper::backupDatabase($db, $DBname, $DBPrefix, $errors)) {
|
|
$this->setError(JText::_('WARNBACKINGUPDB'));
|
|
$this->setData('back', 'dbconfig');
|
|
$this->setData('errors', JInstallationHelper::errors2string($errors));
|
|
return false;
|
|
//return JInstallationView::error($vars, JText::_('WARNBACKINGUPDB'), 'dbconfig', JInstallationHelper::errors2string($errors));
|
|
}
|
|
}
|
|
|
|
$type = $DBtype;
|
|
if ($type == 'mysqli') {
|
|
$type = 'mysql';
|
|
}
|
|
|
|
// set collation and use utf-8 compatibile script if appropriate
|
|
if ($DButfSupport) {
|
|
$dbscheme = 'sql'.DS.$type.DS.'joomla.sql';
|
|
} else {
|
|
$dbscheme = 'sql'.DS.$type.DS.'joomla_backward.sql';
|
|
}
|
|
|
|
if (JInstallationHelper::populateDatabase($db, $dbscheme, $errors) > 0)
|
|
{
|
|
$this->setError(JText::_('WARNPOPULATINGDB'));
|
|
$this->setData('back', 'dbconfig');
|
|
$this->setData('errors', JInstallationHelper::errors2string($errors));
|
|
return false;
|
|
//return JInstallationView::error($vars, JText::_('WARNPOPULATINGDB'), 'dbconfig', JInstallationHelper::errors2string($errors));
|
|
}
|
|
|
|
// Load the localise.sql for translating the data in joomla.sql/joomla_backwards.sql
|
|
// This feature is available for localized version of Joomla! 1.5
|
|
jimport('joomla.filesystem.file');
|
|
$dblocalise = 'sql'.DS.$type.DS.'localise.sql';
|
|
if(JFile::exists($dblocalise)) {
|
|
if(JInstallationHelper::populateDatabase($db, $dblocalise, $errors) > 0) {
|
|
$this->setError(JText::_('WARNPOPULATINGDB'));
|
|
$this->setData('back', 'dbconfig');
|
|
$this->setData('errors', JInstallationHelper::errors2string($errors));
|
|
return false;
|
|
}
|
|
}
|
|
|
|
// Handle default backend language setting. This feature is available for
|
|
// localized versions of Joomla! 1.5.
|
|
$langfiles = $mainframe->getLocaliseAdmin();
|
|
if (in_array($lang, $langfiles['admin']) || in_array($lang, $langfiles['site'])) {
|
|
// Determine the language settings
|
|
$param[] = Array();
|
|
if (in_array($lang, $langfiles['admin'])) {
|
|
$langparam[] = "administrator=$lang";
|
|
}
|
|
|
|
if (in_array($lang, $langfiles['site'])) {
|
|
$langparam[] = "site=$lang";
|
|
}
|
|
$langparams = implode("\n", $langparam);
|
|
|
|
// Because database config has not yet been set we just
|
|
// do the trick by a plain update of the proper record.
|
|
$where[] = "`option`='com_languages'";
|
|
$where = (count($where) ? ' WHERE '.implode(' AND ', $where) : '');
|
|
|
|
$query = "UPDATE #__components " .
|
|
"SET params='$langparams'" .
|
|
$where;
|
|
|
|
$db->setQuery($query);
|
|
if (!$db->query()) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Finishes configuration parameters
|
|
*
|
|
* @return boolean True if successful
|
|
* @access public
|
|
* @since 1.5
|
|
*/
|
|
function mainConfig()
|
|
{
|
|
global $mainframe;
|
|
|
|
$vars =& $this->getVars();
|
|
|
|
// get ftp configuration into registry for use in case of safe mode
|
|
if($vars['ftpEnable']) {
|
|
JInstallationHelper::setFTPCfg( $vars );
|
|
}
|
|
|
|
// Check a few directories are writeable as this may cause issues
|
|
if(!is_writeable(JPATH_SITE.DS.'tmp') || !is_writeable(JPATH_SITE.DS.'installation'.DS.'sql'.DS.'migration')) {
|
|
$vars['dircheck'] = JText::_('Some paths may be unwritable');
|
|
}
|
|
|
|
// Require the xajax library
|
|
require_once( JPATH_BASE.DS.'includes'.DS.'xajax'.DS.'xajax.inc.php' );
|
|
|
|
// Instantiate the xajax object and register the function
|
|
$xajax = new xajax(JURI::base().'installer/jajax.php');
|
|
$xajax->registerFunction(array('instDefault', 'JAJAXHandler', 'sampledata'));
|
|
// $xajax->debugOn();
|
|
$xajax->errorHandlerOn();
|
|
$doc =& JFactory::getDocument();
|
|
$doc->addCustomTag($xajax->getJavascript('', 'includes/js/xajax.js', 'includes/js/xajax.js'));
|
|
|
|
// Deal with possible sql script uploads from this stage
|
|
$vars['loadchecked'] = 0;
|
|
if (JRequest::getVar( 'sqlupload', 0, 'post', 'int' ) == 1)
|
|
{
|
|
$vars['sqlresponse'] = JInstallationHelper::uploadSql( $vars );
|
|
$vars['dataloaded'] = '1';
|
|
$vars['loadchecked'] = 1;
|
|
}
|
|
if ((JRequest::getVar( 'migrationupload', 0, 'post', 'int' ) == 1) && (JRequest::getVar( 'migrationUploaded', 0, 'post', 'int' ) == 0))
|
|
{
|
|
jexit(print_r(JRequest::getVar( 'migrationUploaded', 0, 'post', 'int' )));
|
|
$vars['migresponse'] = JInstallationHelper::uploadSql( $vars, true );
|
|
$vars['dataloaded'] = '1';
|
|
$vars['loadchecked'] = 2;
|
|
}
|
|
if(JRequest::getVar( 'migrationUploaded',0,'post','int') == 1) {
|
|
$vars['migresponse'] = JInstallationHelper::findMigration( $vars );
|
|
$vars['dataloaded'] = '1';
|
|
$vars['loadchecked'] = 2;
|
|
}
|
|
|
|
// $strip = get_magic_quotes_gpc();
|
|
|
|
if (isset ($vars['siteName']))
|
|
{
|
|
$vars['siteName'] = stripslashes(stripslashes($vars['siteName']));
|
|
}
|
|
|
|
$folders = array (
|
|
'administrator/backups',
|
|
'administrator/cache',
|
|
'administrator/components',
|
|
'administrator/language',
|
|
'administrator/modules',
|
|
'administrator/templates',
|
|
'cache',
|
|
'components',
|
|
'images',
|
|
'images/banners',
|
|
'images/stories',
|
|
'language',
|
|
'plugins',
|
|
'plugins/content',
|
|
'plugins/editors',
|
|
'plugins/search',
|
|
'plugins/system',
|
|
'tmp',
|
|
'modules',
|
|
'templates',
|
|
);
|
|
|
|
// Now lets make sure we have permissions set on the appropriate folders
|
|
// foreach ($folders as $folder)
|
|
// {
|
|
// if (!JInstallationHelper::setDirPerms( $folder, $vars ))
|
|
// {
|
|
// $lists['folderPerms'][] = $folder;
|
|
// }
|
|
// }
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Perform a preinstall check
|
|
*
|
|
* @return boolean True if successful
|
|
* @access public
|
|
* @since 1.5
|
|
*/
|
|
function preInstall()
|
|
{
|
|
$vars =& $this->getVars();
|
|
$lists = array ();
|
|
|
|
$phpOptions[] = array (
|
|
'label' => JText::_('PHP version').' >= 4.3.10',
|
|
'state' => phpversion() < '4.3.10' ? 'No' : 'Yes'
|
|
);
|
|
$phpOptions[] = array (
|
|
'label' => '- '.JText::_('zlib compression support'),
|
|
'state' => extension_loaded('zlib') ? 'Yes' : 'No'
|
|
);
|
|
$phpOptions[] = array (
|
|
'label' => '- '.JText::_('XML support'),
|
|
'state' => extension_loaded('xml') ? 'Yes' : 'No',
|
|
'statetext' => extension_loaded('xml') ? 'Yes' : 'No'
|
|
);
|
|
$phpOptions[] = array (
|
|
'label' => '- '.JText::_('MySQL support'),
|
|
'state' => (function_exists('mysql_connect') || function_exists('mysqli_connect')) ? 'Yes' : 'No'
|
|
);
|
|
if (extension_loaded( 'mbstring' )) {
|
|
$mbDefLang = strtolower( ini_get( 'mbstring.language' ) ) == 'neutral';
|
|
$phpOptions[] = array (
|
|
'label' => JText::_( 'MB language is default' ),
|
|
'state' => $mbDefLang ? 'Yes' : 'No',
|
|
'notice' => $mbDefLang ? '' : JText::_( 'NOTICEMBLANGNOTDEFAULT' )
|
|
);
|
|
$mbOvl = ini_get('mbstring.func_overload') != 0;
|
|
$phpOptions[] = array (
|
|
'label' => JText::_('MB string overload off'),
|
|
'state' => !$mbOvl ? 'Yes' : 'No',
|
|
'notice' => $mbOvl ? JText::_('NOTICEMBSTRINGOVERLOAD') : ''
|
|
);
|
|
}
|
|
$sp = '';
|
|
/*$phpOptions[] = array (
|
|
'label' => JText::_('Session path set'),
|
|
'state' => ($sp = ini_get('session.save_path')) ? 'Yes' : 'No'
|
|
);
|
|
$phpOptions[] = array (
|
|
'label' => JText::_('Session path writable'),
|
|
'state' => is_writable($sp) ? 'Yes' : 'No'
|
|
);*/
|
|
$cW = (@ file_exists('../configuration.php') && @ is_writable('../configuration.php')) || is_writable('../');
|
|
$phpOptions[] = array (
|
|
'label' => 'configuration.php '.JText::_('writable'),
|
|
'state' => $cW ? 'Yes' : 'No',
|
|
'notice' => $cW ? '' : JText::_('NOTICEYOUCANSTILLINSTALL')
|
|
);
|
|
$lists['phpOptions'] = & $phpOptions;
|
|
|
|
$phpRecommended = array (
|
|
array (
|
|
JText::_('Safe Mode'),
|
|
'safe_mode',
|
|
'OFF'
|
|
),
|
|
array (
|
|
JText::_('Display Errors'),
|
|
'display_errors',
|
|
'OFF'
|
|
),
|
|
array (
|
|
JText::_('File Uploads'),
|
|
'file_uploads',
|
|
'ON'
|
|
),
|
|
array (
|
|
JText::_('Magic Quotes Runtime'),
|
|
'magic_quotes_runtime',
|
|
'OFF'
|
|
),
|
|
array (
|
|
JText::_('Register Globals'),
|
|
'register_globals',
|
|
'OFF'
|
|
),
|
|
array (
|
|
JText::_('Output Buffering'),
|
|
'output_buffering',
|
|
'OFF'
|
|
),
|
|
array (
|
|
JText::_('Session auto start'),
|
|
'session.auto_start',
|
|
'OFF'
|
|
),
|
|
);
|
|
|
|
foreach ($phpRecommended as $setting)
|
|
{
|
|
$lists['phpSettings'][] = array (
|
|
'label' => $setting[0],
|
|
'setting' => $setting[2],
|
|
'actual' => $this->getPhpSetting( $setting[1] ),
|
|
'state' => $this->getPhpSetting($setting[1]) == $setting[2] ? 'Yes' : 'No'
|
|
);
|
|
}
|
|
|
|
$this->setData('lists', $lists);
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Remove directory messages
|
|
*
|
|
* @return Boolean True if successful
|
|
* @access public
|
|
* @since 1.5
|
|
*/
|
|
function removedir()
|
|
{
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Save the configuration information
|
|
*
|
|
* @return boolean True if successful
|
|
* @access public
|
|
* @since 1.5
|
|
*/
|
|
function saveConfig()
|
|
{
|
|
global $mainframe;
|
|
|
|
$vars =& $this->getVars();
|
|
$lang =& JFactory::getLanguage();
|
|
|
|
// Import authentication library
|
|
jimport( 'joomla.user.helper' );
|
|
|
|
// Set some needed variables
|
|
$vars['siteUrl'] = JURI::root();
|
|
$vars['secret'] = JUserHelper::genRandomPassword(16);
|
|
|
|
$vars['offline'] = JText::_( 'STDOFFLINEMSG' );
|
|
$vars['errormsg'] = JText::_( 'STDERRORMSG' );
|
|
$vars['metadesc'] = JText::_( 'STDMETADESC' );
|
|
$vars['metakeys'] = JText::_( 'STDMETAKEYS' );
|
|
$vars['tmp_path'] = JPATH_ROOT.DS.'tmp';
|
|
$vars['log_path'] = JPATH_ROOT.DS.'logs';
|
|
|
|
// set default language
|
|
$forced = $mainframe->getLocalise();
|
|
if ( empty($forced['lang']) ) {
|
|
$vars['deflang'] = 'en-GB';
|
|
$vars['bclang'] = 'english';
|
|
} else {
|
|
$vars['deflang'] = $forced['lang'];
|
|
$vars['bclang'] = $lang->getBackwardLang();
|
|
}
|
|
|
|
if ( empty( $forced['helpurl'] ) ) {
|
|
$vars['helpurl'] = 'http://help.joomla.org';
|
|
} else {
|
|
$vars['helpurl'] = $forced['helpurl'];
|
|
}
|
|
|
|
// If FTP has not been enabled, set the value to 0
|
|
if (!isset($vars['ftpEnable']))
|
|
{
|
|
$vars['ftpEnable'] = 0;
|
|
}
|
|
|
|
/*
|
|
* Trim the last slash from the FTP root, as the FTP root usually replaces JPATH_ROOT.
|
|
* If the path had a trailing slash, this would lead to double slashes, like "/joomla//configuration.php"
|
|
*/
|
|
if (isset($vars['ftpRoot'])) {
|
|
$vars['ftpRoot'] = rtrim($vars['ftpRoot'], '/');
|
|
}
|
|
|
|
switch ($vars['DBtype']) {
|
|
|
|
case 'mssql' :
|
|
$vars['ZERO_DATE'] = '1/01/1990';
|
|
break;
|
|
|
|
default :
|
|
$vars['ZERO_DATE'] = '0000-00-00 00:00:00';
|
|
break;
|
|
}
|
|
|
|
JInstallationHelper::createAdminUser($vars);
|
|
|
|
/**
|
|
* Write the configuration file
|
|
*/
|
|
jimport('joomla.template.template');
|
|
|
|
$tmpl = new JTemplate();
|
|
$tmpl->applyInputFilter('ShortModifiers');
|
|
|
|
// load the wrapper and common templates
|
|
$tmpl->setRoot( JPATH_BASE . DS . 'template' . DS. 'tmpl' );
|
|
|
|
$tmpl->readTemplatesFromFile('configuration.html');
|
|
$tmpl->addVars('configuration', $vars, 'var_');
|
|
|
|
if (empty($vars['ftpSavePass'])) {
|
|
$tmpl->addVar('configuration', 'var_ftpuser', '');
|
|
$tmpl->addVar('configuration', 'var_ftppassword', '');
|
|
}
|
|
|
|
$buffer = $tmpl->getParsedTemplate('configuration');
|
|
$path = JPATH_CONFIGURATION.DS.'configuration.php';
|
|
|
|
if (file_exists($path)) {
|
|
$canWrite = is_writable($path);
|
|
} else {
|
|
$canWrite = is_writable(JPATH_CONFIGURATION.DS);
|
|
}
|
|
|
|
/*
|
|
* If the file exists but isn't writable OR if the file doesn't exist and the parent directory
|
|
* is not writable we need to use FTP
|
|
*/
|
|
$ftpFlag = false;
|
|
if ((file_exists($path) && !is_writable($path)) || (!file_exists($path) && !is_writable(dirname($path).'/'))) {
|
|
$ftpFlag = true;
|
|
}
|
|
|
|
// Check for safe mode
|
|
if (ini_get('safe_mode'))
|
|
{
|
|
$ftpFlag = true;
|
|
}
|
|
|
|
// Enable/Disable override
|
|
if (!isset($vars['ftpEnable']) || ($vars['ftpEnable'] != 1))
|
|
{
|
|
$ftpFlag = false;
|
|
}
|
|
|
|
if ($ftpFlag == true)
|
|
{
|
|
// Connect the FTP client
|
|
jimport('joomla.client.ftp');
|
|
jimport('joomla.filesystem.path');
|
|
|
|
$ftp = & JFTP::getInstance($vars['ftpHost'], $vars['ftpPort']);
|
|
$ftp->login($vars['ftpUser'], $vars['ftpPassword']);
|
|
|
|
// Translate path for the FTP account
|
|
$file = JPath::clean(str_replace(JPATH_CONFIGURATION, $vars['ftpRoot'], $path), '/');
|
|
|
|
// Use FTP write buffer to file
|
|
if (!$ftp->write($file, $buffer)) {
|
|
$this->setData('buffer', $buffer);
|
|
return false;
|
|
}
|
|
|
|
$ftp->quit();
|
|
|
|
}
|
|
else
|
|
{
|
|
if ($canWrite) {
|
|
file_put_contents($path, $buffer);
|
|
} else {
|
|
$this->setData('buffer', $buffer);
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Set data for later use
|
|
*
|
|
* @param string $key Data key
|
|
* @param Mixed data
|
|
* @access public
|
|
* @since 1.5
|
|
*/
|
|
function setData($key, $value){
|
|
$this->data[$key] = $value;
|
|
}
|
|
|
|
function dumpLoad() {
|
|
include (JPATH_BASE . '/includes/bigdump.php');
|
|
}
|
|
|
|
function checkUpload() {
|
|
// pie
|
|
$vars =& $this->getVars();
|
|
//print_r($vars);
|
|
$sqlFile = JRequest::getVar('sqlFile', '', 'files', 'array');
|
|
if(JRequest::getVar( 'sqlUploaded', 0, 'post', 'bool' ) == false) {
|
|
/*
|
|
* Move uploaded file
|
|
*/
|
|
// Set permissions for tmp dir
|
|
JInstallationHelper::_chmod(JPATH_SITE.DS.'tmp', 0777);
|
|
jimport('joomla.filesystem.file');
|
|
$uploaded = JFile::upload($sqlFile['tmp_name'], JPATH_SITE.DS.'tmp'.DS.$sqlFile['name']);
|
|
if(!$uploaded) {
|
|
$this->setError(JText::_('WARNUPLOADFAILURE'));
|
|
return false;
|
|
}
|
|
|
|
if( !preg_match('#\.sql$#i', $sqlFile['name']) )
|
|
{
|
|
$archive = JPATH_SITE.DS.'tmp'.DS.$sqlFile['name'];
|
|
}
|
|
else
|
|
{
|
|
$script = JPATH_SITE.DS.'tmp'.DS.$sqlFile['name'];
|
|
}
|
|
|
|
// unpack archived sql files
|
|
if (isset($archive) && $archive )
|
|
{
|
|
$package = JInstallationHelper::unpack( $archive, $vars );
|
|
if ( $package === false )
|
|
{
|
|
$this->setError(JText::_('WARNUNPACK'));
|
|
return false;
|
|
}
|
|
$script = $package['folder'].DS.$package['script'];
|
|
}
|
|
} else {
|
|
$script = JPATH_BASE . DS . 'sql' . DS . 'migration' . DS . 'migrate.sql';
|
|
}
|
|
$migration = JRequest::getVar( 'migration', 0, 'post', 'bool' );
|
|
/*
|
|
* If migration perform manipulations on script file before population
|
|
*/
|
|
if ($migration == true) {
|
|
$db = & JInstallationHelper::getDBO($vars['DBtype'], $vars['DBhostname'], $vars['DBuserName'], $vars['DBpassword'], $vars['DBname'], $vars['DBPrefix']);
|
|
$script = JInstallationHelper::preMigrate($script, $vars, $db);
|
|
if ( $script == false )
|
|
{
|
|
$this->setError(JText::_( 'Script operations failed' ));
|
|
return false;
|
|
}
|
|
} // Disable in testing */
|
|
// Ensure the script is always in the same location
|
|
if($script != JPATH_BASE . DS . 'sql' . DS . 'migration' . DS . 'migrate.sql') {
|
|
JFile::move($script, JPATH_BASE . DS . 'sql' . DS . 'migration' . DS . 'migrate.sql');
|
|
}
|
|
//$this->setData('scriptpath',$script);
|
|
$vars['dataloaded'] = '1';
|
|
$vars['loadchecked'] = '1';
|
|
$vars['migration'] = $migration;
|
|
return true;
|
|
}
|
|
|
|
|
|
function postMigrate() {
|
|
$migErrors = null;
|
|
$args =& $this->getVars();
|
|
$db = & JInstallationHelper::getDBO($args['DBtype'], $args['DBhostname'], $args['DBuserName'], $args['DBpassword'], $args['DBname'], $args['DBPrefix']);
|
|
$migResult = JInstallationHelper::postMigrate( $db, $migErrors, $args );
|
|
if(!$migResult) echo JText::_("Migration Successful");
|
|
else {
|
|
echo '<div id="installer">';
|
|
echo '<p>'.JText::_('Migration failed').':</p>';
|
|
foreach($migErrors as $error) echo '<p>'.$error['msg'].'</p>';
|
|
echo '</div>';
|
|
}
|
|
return $migResult;
|
|
}
|
|
}
|