Exemple #1
0
 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<>''");
 }
Exemple #2
0
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;
}