📄 model.php
字号:
<?php
/**
* @version $Id: model.php 8524 2007-08-23 04:52:30Z humvee $
* @package Joomla
* @subpackage Installation
* @copyright Copyright (C) 2005 - 2007 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();
$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'] = $mainframe->getSiteURL();
$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)
{
// 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');
// $DBSample = mosGetParam($vars, 'DBSample', 1);
$DButfSupport = intval(JArrayHelper::getValue($vars, 'DButfSupport', 0));
$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 (!$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;
}
// 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));
}
}
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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -