/** * Load the interwiki, trying first memcached then the DB * * @param string $prefix The interwiki prefix * @return Interwiki|bool Interwiki if $prefix is valid, otherwise false */ protected static function load($prefix) { global $wgInterwikiExpiry; $iwData = array(); if (!Hooks::run('InterwikiLoadPrefix', array($prefix, &$iwData))) { return Interwiki::loadFromArray($iwData); } $cache = ObjectCache::getMainWANInstance(); if (!$iwData) { $key = wfMemcKey('interwiki', $prefix); $iwData = $cache->get($key); if ($iwData === '!NONEXISTENT') { // negative cache hit return false; } } // is_array is hack for old keys if ($iwData && is_array($iwData)) { $iw = Interwiki::loadFromArray($iwData); if ($iw) { return $iw; } } $db = wfGetDB(DB_SLAVE); $row = $db->fetchRow($db->select('interwiki', self::selectFields(), array('iw_prefix' => $prefix), __METHOD__)); $iw = Interwiki::loadFromArray($row); if ($iw) { $mc = array('iw_url' => $iw->mURL, 'iw_api' => $iw->mAPI, 'iw_local' => $iw->mLocal, 'iw_trans' => $iw->mTrans); $cache->set($key, $mc, $wgInterwikiExpiry); return $iw; } // negative cache hit $cache->set($key, '!NONEXISTENT', $wgInterwikiExpiry); return false; }
/** * Load the interwiki, trying first memcached then the DB * * @param string $prefix The interwiki prefix * @return Interwiki|bool Interwiki if $prefix is valid, otherwise false */ protected static function load($prefix) { global $wgInterwikiExpiry; $iwData = array(); if (!Hooks::run('InterwikiLoadPrefix', array($prefix, &$iwData))) { return Interwiki::loadFromArray($iwData); } if (is_array($iwData)) { $iw = Interwiki::loadFromArray($iwData); if ($iw) { return $iw; // handled by hook } } $iwData = ObjectCache::getMainWANInstance()->getWithSetCallback(wfMemcKey('interwiki', $prefix), $wgInterwikiExpiry, function ($oldValue, &$ttl, array &$setOpts) use($prefix) { $dbr = wfGetDB(DB_SLAVE); $setOpts += Database::getCacheSetOptions($dbr); $row = $dbr->selectRow('interwiki', Interwiki::selectFields(), array('iw_prefix' => $prefix), __METHOD__); return $row ? (array) $row : '!NONEXISTENT'; }); if (is_array($iwData)) { return Interwiki::loadFromArray($iwData) ?: false; } return false; }
/** * Load the interwiki, trying first memcached then the DB * * @param $prefix string The interwiki prefix * @return Boolean: the prefix is valid */ protected static function load($prefix) { global $wgMemc, $wgInterwikiExpiry; $iwData = false; if (!wfRunHooks('InterwikiLoadPrefix', array($prefix, &$iwData))) { return Interwiki::loadFromArray($iwData); } if (!$iwData) { $key = wfMemcKey('interwiki', md5($prefix)); $iwData = $wgMemc->get($key); if ($iwData === '!NONEXISTENT') { return false; // negative cache hit } } if ($iwData && is_array($iwData)) { // is_array is hack for old keys $iw = Interwiki::loadFromArray($iwData); if ($iw) { return $iw; } } $db = wfGetDB(DB_SLAVE); $row = $db->fetchRow($db->select('interwiki', '*', array('iw_prefix' => $prefix), __METHOD__)); $iw = Interwiki::loadFromArray($row); if ($iw) { $mc = array('iw_url' => $iw->mURL, 'iw_api' => $iw->mAPI, 'iw_local' => $iw->mLocal, 'iw_trans' => $iw->mTrans); $wgMemc->add($key, $mc, $wgInterwikiExpiry); return $iw; } else { $wgMemc->add($key, '!NONEXISTENT', $wgInterwikiExpiry); // negative cache hit } return false; }
/** * Load the interwiki, trying first memcached then the DB * * @param $prefix The interwiki prefix * @return bool The prefix is valid * @static * */ protected static function load($prefix) { global $wgMemc, $wgInterwikiExpiry; global $wgLanguageNames; $key = wfMemcKey('interwiki', $prefix); $mc = $wgMemc->get($key); $iw = false; if ($mc && is_array($mc)) { // is_array is hack for old keys $iw = Interwiki::loadFromArray($mc); if ($iw) { return $iw; } } # $$$ Sean: This is a hack to get the interwiki links working # but only accept a prefix that is a valid language if (isset($prefix, $wgLanguageNames[$prefix]) && '' != $wgLanguageNames[$prefix]) { $iw = new Interwiki(); $iw->mURL = $prefix . '.wiki'; $iw->mLocal = 0; $iw->mTrans = 0; } else { $iw = false; } /* $db = wfGetDB( DB_SLAVE ); $row = $db->fetchRow( $db->select( 'interwiki', '*', array( 'iw_prefix' => $prefix ), __METHOD__ ) ); $iw = Interwiki::loadFromArray( $row ); */ # $$$ end of hack if ($iw) { $mc = array('iw_url' => $iw->mURL, 'iw_local' => $iw->mLocal, 'iw_trans' => $iw->mTrans); $wgMemc->add($key, $mc, $wgInterwikiExpiry); return $iw; } return false; }
/** * Load the interwiki, trying first memcached then the DB * * @param $prefix The interwiki prefix * @return Boolean: the prefix is valid */ protected static function load($prefix) { global $wgMemc, $wgInterwikiExpiry; $key = wfMemcKey('interwiki', $prefix); $mc = $wgMemc->get($key); if ($mc && is_array($mc)) { // is_array is hack for old keys $iw = Interwiki::loadFromArray($mc); if ($iw) { return $iw; } } $db = wfGetDB(DB_SLAVE); $row = $db->fetchRow($db->select('interwiki', '*', array('iw_prefix' => $prefix), __METHOD__)); $iw = Interwiki::loadFromArray($row); if ($iw) { $mc = array('iw_url' => $iw->mURL, 'iw_api' => $iw->mAPI, 'iw_local' => $iw->mLocal, 'iw_trans' => $iw->mTrans); $wgMemc->add($key, $mc, $wgInterwikiExpiry); return $iw; } return false; }