/** * Loads a connection * * @param string $dsn * @param string $tbl_prefix * @param boolean $force_reconnect * @param boolean $show_error * @return boolean */ public static function loadDB($dsn = null, $tbl_prefix = null, $force_reconnect = false, $show_error = true) { if (!isset($dsn)) { if (!defined('PHPWS_DSN')) { exit(_('Cannot load database. DSN not defined.')); } $dsn = PHPWS_DSN; if (defined('PHPWS_TABLE_PREFIX')) { $tbl_prefix = PHPWS_TABLE_PREFIX; } } /** * if $dsn is already set and force_reconnect is false, don't bother on a reconnect */ if (isset($GLOBALS['PHPWS_DB']['dsn']) && $GLOBALS['PHPWS_DB']['dsn'] == $dsn && !$force_reconnect) { return; } if (isset($GLOBALS['PHPWS_DB']['connection'])) { $GLOBALS['PHPWS_DB']['connection']->disconnect(); } $dbname = PHPWS_DB::getDbName($dsn); $pear_db = new MDB2(); $connect = $pear_db->connect($dsn, array('persistent' => false)); if (PHPWS_Error::isError($connect)) { if (CLEAR_DSN) { $connect->userinfo = str_replace($dsn, '-- DSN removed --', $connect->userinfo); } PHPWS_Error::log($connect); if ($show_error) { PHPWS_Core::errorPage(); } else { return $connect; } } PHPWS_DB::logDB(sprintf(_('Connected to database "%s"'), $dbname)); // Load the factory files $type = $connect->dbsyntax; $result = PHPWS_Core::initCoreClass('DB/' . $type . '.php'); if ($result == false) { PHPWS_DB::logDB(_('Failed to connect.')); PHPWS_Error::log(PHPWS_FILE_NOT_FOUND, 'core', 'PHPWS_DB::loadDB', PHPWS_SOURCE_DIR . 'core/class/DB/' . $type . '.php'); PHPWS_Core::errorPage(); } $class_name = $type . '_PHPWS_SQL'; $dblib = new $class_name(); if (!empty($dblib->portability)) { $connect->setOption('portability', $dblib->portability); } $connect->setOption('seqcol_name', 'id'); $GLOBALS['PHPWS_DB']['lib'] = $dblib; $GLOBALS['PHPWS_DB']['dsn'] = $dsn; $GLOBALS['PHPWS_DB']['connection'] = $connect; $GLOBALS['PHPWS_DB']['tbl_prefix'] = $tbl_prefix; $GLOBALS['PHPWS_DB']['type'] = $type; return true; }