error_reporting(0); // Hide errors
if (! $dbconnected = $DB->connect($INSTALL['dbhost'], $INSTALL['dbuser'], $INSTALL['dbpass'], $INSTALL['dbname'], false, $INSTALL['prefix'])) {
- if (!$DB->create_database($INSTALL['dbhost'], $INSTALL['dbuser'], $INSTALL['dbpass'])) {
+ if (!$DB->create_database($INSTALL['dbhost'], $INSTALL['dbuser'], $INSTALL['dbpass'], $INSTALL['dbname'])) {
$errormsg = get_string('dbcreationerror', 'install');
$nextstage = DATABASE;
} else {
$str .= "\r\n";
$database = $databases[$CONFFILE['dbtype']];
- $database->connect($CONFFILE['dbhost'], $CONFFILE['dbuser'], $CONFFILE['dbpass'], $CONFFILE['dbname'], false, $CONFFILE['prefix']);
- $dbconfig = $database->export_dbconfig();
- $dbconfig->persistent = false;
+ $dbconfig = $database->export_dbconfig($CONFFILE['dbhost'], $CONFFILE['dbuser'], $CONFFILE['dbpass'], $CONFFILE['dbname'], false, $CONFFILE['prefix']);
foreach ($dbconfig as $key=>$value) {
$key = str_pad($key, 9);
- if (is_bool($value)) {
- if ($value) {
- $str .= '$CFG->'.$key.' = true;'."\r\n";
- } else {
- $str .= '$CFG->'.$key.' = false;'."\r\n";
- }
- } else {
- $str .= '$CFG->'.$key.' = \''.addsingleslashes($value)."';\r\n";
- }
+ $str .= '$CFG->'.$key.' = '.var_export($value, true).";\r\n";
}
$str .= "\r\n";
- $str .= '$CFG->wwwroot = \''.addsingleslashes($CONFFILE['wwwrootform'])."';\r\n";
- $str .= '$CFG->dirroot = \''.addsingleslashes($CONFFILE['dirrootform'])."';\r\n";
- $str .= '$CFG->dataroot = \''.addsingleslashes($CONFFILE['dataroot'])."';\r\n";
- $str .= '$CFG->admin = \''.addsingleslashes($CONFFILE['admindirname'])."';\r\n";
+ $str .= '$CFG->wwwroot = '.var_export($CONFFILE['wwwrootform'], true).";\r\n";
+ $str .= '$CFG->dirroot = '.var_export($CONFFILE['dirrootform'], true).";\r\n";
+ $str .= '$CFG->dataroot = '.var_export($CONFFILE['dataroot'], true).";\r\n";
+ $str .= '$CFG->admin = '.var_export($CONFFILE['admindirname'], true).";\r\n";
$str .= "\r\n";
$str .= '$CFG->directorypermissions = 00777; // try 02777 on a server in Safe Mode'."\r\n";
$str .= "\r\n";
$DB = $databases[$INSTALL['dbtype']];
- $DB->connect($INSTALL['dbhost'], $INSTALL['dbuser'], $INSTALL['dbpass'], $INSTALL['dbname'], false, $INSTALL['prefix']);
- $dbconfig = $DB->export_dbconfig();
- $dbconfig->persistent = false;
+ $dbconfig = $DB->export_dbconfig($INSTALL['dbhost'], $INSTALL['dbuser'], $INSTALL['dbpass'], $INSTALL['dbname'], false, $INSTALL['prefix']);
foreach ($dbconfig as $key=>$value) {
$key = str_pad($key, 9);
- if (is_bool($value)) {
- if ($value) {
- $str .= '$CFG->'.$key.' = true;'."\r\n";
- } else {
- $str .= '$CFG->'.$key.' = false;'."\r\n";
- }
- } else if (is_array($value)) {
- if (empty($value)) {
- $value = 'array()';
- } else {
- $value = 'unserialize(\'' . addsingleslashes(serialize($value)) . '\')';
- }
- $str .= '$CFG->'.$key.' = '. $value . ";\r\n";
- } else {
- $str .= '$CFG->'.$key.' = \''.addsingleslashes($value)."';\r\n";
- }
+ $str .= '$CFG->'.$key.' = '.var_export($value, true).";\r\n";
}
$str .= "\r\n";
- $str .= '$CFG->wwwroot = \''.addsingleslashes($INSTALL['wwwrootform'])."';\r\n";
- $str .= '$CFG->dirroot = \''.addsingleslashes($INSTALL['dirrootform'])."';\r\n";
- $str .= '$CFG->dataroot = \''.addsingleslashes($INSTALL['dataroot'])."';\r\n";
- $str .= '$CFG->admin = \''.addsingleslashes($INSTALL['admindirname'])."';\r\n";
+ $str .= '$CFG->wwwroot = '.var_export($INSTALL['wwwrootform'], true).";\r\n";
+ $str .= '$CFG->dirroot = '.var_export($INSTALL['dirrootform'], true).";\r\n";
+ $str .= '$CFG->dataroot = '.var_export($INSTALL['dataroot'], true).";\r\n";
+ $str .= '$CFG->admin = '.var_export($INSTALL['admindirname'], true).";\r\n";
$str .= "\r\n";
$str .= '$CFG->directorypermissions = 00777; // try 02777 on a server in Safe Mode'."\r\n";
protected $adodb;
/**
- * Returns localised database type name
+ * Returns general database library name
* Note: can be used before connect()
- * @return string
+ * @return string db type adodb, pdo, native
*/
- public function get_name() {
- $dbtype = $this->get_dbtype();
- return get_string($dbtype, 'install');
+ protected function get_dblibrary() {
+ return 'adodb';
}
/**
- * Returns db related part of config.php
+ * Returns localised database type name
* Note: can be used before connect()
* @return string
*/
- public function export_dbconfig() {
- $cfg = new stdClass();
- $cfg->dbtype = $this->get_dbtype();
- $cfg->dblibrary = 'adodb';
- $cfg->dbhost = $this->dbhost;
- $cfg->dbname = $this->dbname;
- $cfg->dbuser = $this->dbuser;
- $cfg->dbpass = $this->dbpass;
- $cfg->prefix = $this->prefix;
-
- return $cfg;
+ public function get_name() {
+ $dbtype = $this->get_dbtype();
+ return get_string($dbtype, 'install');
}
/**
protected abstract function preconfigure_dbconnection();
public function connect($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, array $dboptions=null) {
- $this->dbhost = $dbhost;
- $this->dbuser = $dbuser;
- $this->dbpass = $dbpass;
- $this->dbname = $dbname;
- $this->dbpersist = $dbpersist;
- $this->prefix = $prefix;
- $this->dboptions = (array)$dboptions;
-
global $CFG;
+ $this->store_settings($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, $dboptions);
+
$this->preconfigure_dbconnection();
require_once($CFG->libdir.'/adodb/adodb.inc.php');
*/
protected abstract function get_dbtype();
+ /**
+ * Returns general database library name
+ * Note: can be used before connect()
+ * @return string db type adodb, pdo, native
+ */
+ protected abstract function get_dblibrary();
+
/**
* Returns localised database type name
* Note: can be used before connect()
* Note: can be used before connect()
* @return string
*/
- public abstract function export_dbconfig();
+ public function export_dbconfig($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, array $dboptions=null) {
+ $this->store_settings($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, $dboptions);
+
+ $cfg = new stdClass();
+ $cfg->dbtype = $this->get_dbtype();
+ $cfg->dblibrary = $this->get_dblibrary();
+ $cfg->dbhost = $this->dbhost;
+ $cfg->dbname = $this->dbname;
+ $cfg->dbuser = $this->dbuser;
+ $cfg->dbpass = $this->dbpass;
+ $cfg->prefix = $this->prefix;
+ if ($this->dboptions) {
+ $cfg->dboptions = $this->dboptions;
+ }
+
+ return $cfg;
+ }
/**
* Connect to db
*/
public abstract function connect($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, array $dboptions=null);
+ /**
+ * Store various database settings
+ * @param string $dbhost
+ * @param string $dbuser
+ * @param string $dbpass
+ * @param string $dbname
+ * @param bool $dbpersist
+ * @param mixed $prefix string means moodle db prefix, false used for external databases where prefix not used
+ * @param array $dboptions driver specific options
+ * @return void
+ */
+ protected function store_settings($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, array $dboptions=null) {
+ $this->dbhost = $dbhost;
+ $this->dbuser = $dbuser;
+ $this->dbpass = $dbpass;
+ $this->dbname = $dbname;
+ $this->dbpersist = $dbpersist;
+ $this->prefix = $prefix;
+ $this->dboptions = (array)$dboptions;
+ }
+
/**
* Attempt to create the database
* @param string $dbhost
* @return bool success
*/
public function connect($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, array $dboptions=null) {
- $this->dbhost = $dbhost;
- $this->dbuser = $dbuser;
- $this->dbpass = $dbpass;
- $this->dbname = $dbname;
- $this->dbpersist = $dbpersist;
- $this->prefix = $prefix;
- $this->dboptions = (array)$dboptions;
+ $this->store_settings($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, $dboptions);
try {
$this->pdb = new PDO($this->get_dsn(), $this->dbuser, $this->dbpass, $this->get_pdooptions());
///TODO: not needed preconfigure_dbconnection() stuff for PDO drivers?
}
+ /**
+ * Returns general database library name
+ * Note: can be used before connect()
+ * @return string db type adodb, pdo, native
+ */
+ protected function get_dblibrary() {
+ return 'pdo';
+ }
+
/**
* Returns localised database type name
* Note: can be used before connect()
return get_string('databasesettingssub_' . $this->get_dbtype() . '_pdo', 'install');
}
- /**
- * Returns db related part of config.php
- * Note: can be used before connect()
- * @return string
- */
- public function export_dbconfig() {
- $cfg = new stdClass();
- $cfg->dbtype = $this->get_dbtype();
- $cfg->dblibrary = 'pdo';
- $cfg->dbhost = $this->dbhost;
- $cfg->dbname = $this->dbname;
- $cfg->dbuser = $this->dbuser;
- $cfg->dbpass = $this->dbpass;
- $cfg->prefix = $this->prefix;
- $cfg->dboptions = $this->dboptions;
- return $cfg;
- }
-
/**
* Returns database server info array
* @return array
* Note: can be used before connect()
* @return string
*/
- public function export_dbconfig() {
+ public function export_dbconfig($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, array $dboptions=null) {
+ $this->store_settings($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, $dboptions);
+
$cfg = new stdClass();
$cfg->dbtype = $this->get_dbtype();
- $cfg->dblibrary = 'adodb';
+ $cfg->dblibrary = $this->get_dblibrary();
if ($this->dbhost == 'localhost' or $this->dbhost == '127.0.0.1') {
$cfg->dbhost = "user='{$this->dbuser}' password='{$this->dbpass}' dbname='{$this->dbname}'";
$cfg->dbname = '';
$cfg->dbpass = $this->dbpass;
}
$cfg->prefix = $this->prefix;
+ if ($this->dboptions) {
+ $cfg->dboptions = $this->dboptions;
+ }
return $cfg;
}
public function driver_installed(){}
public function get_dbfamily(){}
protected function get_dbtype(){}
+ protected function get_dblibrary(){}
public function get_name(){}
public function get_configuration_hints(){}
- public function export_dbconfig(){}
public function connect($dbhost, $dbuser, $dbpass, $dbname, $dbpersist, $prefix, array $dboptions=null){}
public function get_server_info(){}
protected function allowed_param_types(){}
function inst_check_php_version() {
return check_php_version("5.2.0");
}
-
-/**
- * Add slashes for single quotes and backslashes
- * so they can be included in single quoted string
- * (for config.php)
- */
-function addsingleslashes($input){
- return preg_replace("/(['\\\])/", "\\\\$1", $input);
-}