libdir.'/dml/moodle_database.php'); /** * DML exception class, use instead of error() in dml code. */ class dml_exception extends moodle_exception { function __construct($errorcode, $a=NULL, $debuginfo=null) { parent::__construct($errorcode, '', '', $a, $debuginfo); } } /** * DML db connection exception - triggered if database not accessible. */ class dml_connection_exception extends dml_exception { function __construct($error) { $errorinfo = ''.s($error).''; parent::__construct('dbconnectionfailed', NULL, $errorinfo); } } /** * DML read exception - triggered by SQL syntax errors, missing tables, etc. */ class dml_read_exception extends dml_exception { public $error; public $sql; public $params; function __construct($error, $sql=null, array $params=null) { $this->error = $error; $this->sql = $sql; $this->params = $params; $errorinfo = s($error).'

'.s($sql).'
['.s(var_export($params, true)).']'; parent::__construct('dmlreadexception', NULL, $errorinfo); } } /** * DML read exception - triggered by SQL syntax errors, missing tables, etc. */ class dml_write_exception extends dml_exception { public $error; public $sql; public $params; function __construct($error, $sql=null, array $params=null) { $this->error = $error; $this->sql = $sql; $this->params = $params; $errorinfo = s($error).'

'.s($sql).'
['.s(var_export($params, true)).']'; parent::__construct('dmlwriteexception', NULL, $errorinfo); } } /** * Sets up global $DB moodle_database instance * @return void */ function setup_DB() { global $CFG, $DB; if (isset($DB)) { return; } if (!isset($CFG->dbuser)) { $CFG->dbuser = ''; } if (!isset($CFG->dbpass)) { $CFG->dbpass = ''; } if (!isset($CFG->dbname)) { $CFG->dbname = ''; } if (!isset($CFG->dblibrary)) { switch ($CFG->dbtype) { case 'postgres7' : $CFG->dbtype = 'pgsql'; // continue, no break here case 'pgsql' : $CFG->dblibrary = 'native'; break; case 'mysql' : if (!extension_loaded('mysqli')) { $CFG->dblibrary = 'adodb'; break; } $CFG->dbtype = 'mysqli'; // continue, no break here case 'mysqli' : $CFG->dblibrary = 'native'; break; default: // the rest of drivers is not converted yet - keep adodb for now $CFG->dblibrary = 'adodb'; } } if (!isset($CFG->dboptions)) { $CFG->dboptions = array(); } if (isset($CFG->dbpersist)) { $CFG->dboptions['dbpersist'] = $CFG->dbpersist; } if (!$DB = moodle_database::get_driver_instance($CFG->dbtype, $CFG->dblibrary)) { throw new dml_exception('dbdriverproblem', "Unknown driver $CFG->dblibrary/$CFG->dbtype"); } try { $DB->connect($CFG->dbhost, $CFG->dbuser, $CFG->dbpass, $CFG->dbname, $CFG->prefix, $CFG->dboptions); } catch (moodle_exception $e) { if (empty($CFG->noemailever) and !empty($CFG->emailconnectionerrorsto)) { if (file_exists($CFG->dataroot.'/emailcount')){ $fp = @fopen($CFG->dataroot.'/emailcount', 'r'); $content = @fread($fp, 24); @fclose($fp); if((time() - (int)$content) > 600){ @mail($CFG->emailconnectionerrorsto, 'WARNING: Database connection error: '.$CFG->wwwroot, 'Connection error: '.$CFG->wwwroot); $fp = @fopen($CFG->dataroot.'/emailcount', 'w'); @fwrite($fp, time()); } } else { @mail($CFG->emailconnectionerrorsto, 'WARNING: Database connection error: '.$CFG->wwwroot, 'Connection error: '.$CFG->wwwroot); $fp = @fopen($CFG->dataroot.'/emailcount', 'w'); @fwrite($fp, time()); } } // rethrow the exception throw $e; } $CFG->dbfamily = $DB->get_dbfamily(); // TODO: BC only for now return true; }