📄 model.php
字号:
<?php/** * @version $Id: model.php 10381 2008-06-01 03:35:53Z pasamio $ * @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 accessdefined('_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; } } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -