function WikiDB_backend_PearDB($dbparams) { // Find and include PEAR's DB.php. maybe we should force our private version again... // if DB would have exported its version number, it would be easier. @(require_once 'DB/common.php'); // Either our local pear copy or the system one // check the version! $name = check_php_version(5) ? "escapeSimple" : strtolower("escapeSimple"); // TODO: apparently some Pear::Db version adds LIMIT 1,0 to getOne(), // which is invalid for "select version()" if (!in_array($name, get_class_methods("DB_common"))) { $finder = new FileFinder(); $dir = dirname(__FILE__) . "/../../pear"; $finder->_prepend_to_include_path($dir); include_once "{$dir}/DB/common.php"; // use our version instead. if (!in_array($name, get_class_methods("DB_common"))) { $pearFinder = new PearFileFinder("lib/pear"); $pearFinder->includeOnce('DB.php'); } else { include_once "{$dir}/DB.php"; } } else { include_once "DB.php"; } // Install filter to handle bogus error notices from buggy DB.php's. // TODO: check the Pear_DB version, but how? if (DEBUG) { global $ErrorManager; $ErrorManager->pushErrorHandler(new WikiMethodCb($this, '_pear_notice_filter')); $this->_pearerrhandler = true; } // Open connection to database $this->_dsn = $dbparams['dsn']; $this->_dbparams = $dbparams; $this->_lock_count = 0; // persistent is usually a DSN option: we override it with a config value. // phptype://username:password@hostspec/database?persistent=false $dboptions = array('persistent' => DATABASE_PERSISTENT, 'debug' => 2); //if (preg_match('/^pgsql/', $this->_dsn)) $dboptions['persistent'] = false; $this->_dbh = DB::connect($this->_dsn, $dboptions); $dbh =& $this->_dbh; if (DB::isError($dbh)) { trigger_error(sprintf("Can't connect to database: %s", $this->_pear_error_message($dbh)), isset($dbparams['_tryroot_from_upgrade']) ? E_USER_WARNING : E_USER_ERROR); if (isset($dbparams['_tryroot_from_upgrade'])) { return; } } $dbh->setErrorHandling(PEAR_ERROR_CALLBACK, array($this, '_pear_error_callback')); $dbh->setFetchMode(DB_FETCHMODE_ASSOC); $prefix = isset($dbparams['prefix']) ? $dbparams['prefix'] : ''; $this->_table_names = array('page_tbl' => $prefix . 'page', 'version_tbl' => $prefix . 'version', 'link_tbl' => $prefix . 'link', 'recent_tbl' => $prefix . 'recent', 'nonempty_tbl' => $prefix . 'nonempty'); $page_tbl = $this->_table_names['page_tbl']; $version_tbl = $this->_table_names['version_tbl']; $this->page_tbl_fields = "{$page_tbl}.id AS id, {$page_tbl}.pagename AS pagename, {$page_tbl}.hits AS hits"; $this->version_tbl_fields = "{$version_tbl}.version AS version, {$version_tbl}.mtime AS mtime, " . "{$version_tbl}.minor_edit AS minor_edit, {$version_tbl}.content AS content, {$version_tbl}.versiondata AS versiondata"; $this->_expressions = array('maxmajor' => "MAX(CASE WHEN minor_edit=0 THEN version END)", 'maxminor' => "MAX(CASE WHEN minor_edit<>0 THEN version END)", 'maxversion' => "MAX(version)", 'notempty' => "<>''", 'iscontent' => "content<>''"); }
function FindFile($file, $missing_okay = false, $slashify = false) { static $finder; if (!isset($finder)) { $finder = new FileFinder(); // remove "/lib" from dirname(__FILE__) $wikidir = preg_replace('/.lib$/', '', dirname(__FILE__)); // let the system favor its local pear? $finder->_append_to_include_path(dirname(__FILE__) . "/pear"); $finder->_prepend_to_include_path($wikidir); // Don't override existing INCLUDE_PATH config. if (!defined("INCLUDE_PATH")) { define("INCLUDE_PATH", implode($finder->_get_ini_separator(), $finder->_path)); } } $s = $finder->findFile($file, $missing_okay); if ($slashify) { $s = $finder->slashifyPath($s); } return $s; }