<?php
+/**
+ * Cache of the contents of localisation files.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
define( 'MW_LC_VERSION', 2 );
$storeClass = 'LCStore_Accel';
break;
case 'detect':
- try {
- $c = wfGetCache( CACHE_ACCEL );
- $storeClass = 'LCStore_Accel';
- } catch( Exception $c ) {
- $storeClass = $wgCacheDirectory ? 'LCStore_CDB' : 'LCStore_DB';
- }
+ $storeClass = $wgCacheDirectory ? 'LCStore_CDB' : 'LCStore_DB';
break;
default:
throw new MWException(
/**
* Returns true if the cache identified by $code is missing or expired.
+ * @return bool
*/
public function isExpired( $code ) {
if ( $this->forceRecache && !isset( $this->recachedLangs[$code] ) ) {
* @param $code
*/
public function recache( $code ) {
- global $wgExtensionMessagesFiles, $wgExtensionAliasesFiles;
+ global $wgExtensionMessagesFiles;
wfProfileIn( __METHOD__ );
if ( !$code ) {
}
}
- # Load deprecated $wgExtensionAliasesFiles
- foreach ( $wgExtensionAliasesFiles as $fileName ) {
- $data = $this->readPHPFile( $fileName, 'aliases' );
-
- if ( !isset( $data['aliases'] ) ) {
- continue;
- }
-
- $used = $this->mergeExtensionItem( $codeSequence, 'specialPageAliases',
- $allData['specialPageAliases'], $data['aliases'] );
-
- if ( $used ) {
- $deps[] = new FileDependency( $fileName );
- }
- }
-
# Merge core data into extension data
foreach ( $coreData as $key => $item ) {
$this->mergeItem( $key, $allData[$key], $item );
# Add cache dependencies for any referenced globals
$deps['wgExtensionMessagesFiles'] = new GlobalDependency( 'wgExtensionMessagesFiles' );
- $deps['wgExtensionAliasesFiles'] = new GlobalDependency( 'wgExtensionAliasesFiles' );
$deps['version'] = new ConstantDependency( 'MW_LC_VERSION' );
# Add dependencies to the cache entry
$this->loadedItems[$code][$key] = true;
}
- # Write data to the persistant store
- $this->saveLangInStore( $code, $data );
-
- wfProfileOut( __METHOD__ );
- }
-
- /**
- * Helper for recache() this is not mean to be called outside of recache()
- * When the localisation store is null (LCStore_Null), method does nothing.
- *
- * @param $code String: language code to save data for
- * @param $data Array: language data forged by recache()
- */
- protected function saveLangInStore( $code, $data ) {
- wfProfileIn( __METHOD__ );
-
- if( $this->store instanceof LCStore_Null ) {
- # No point in saving data to /dev/null
- wfProfileOut( __METHOD__ );
- return;
- }
-
# Save to the persistent cache
$this->store->startWrite( $code );
foreach ( $allData as $key => $value ) {
$this->store->finishWrite();
# Clear out the MessageBlobStore
- MessageBlobStore::clear();
+ # HACK: If using a null (i.e. disabled) storage backend, we
+ # can't write to the MessageBlobStore either
+ if ( !$this->store instanceof LCStore_Null ) {
+ MessageBlobStore::clear();
+ }
wfProfileOut( __METHOD__ );
}
interface LCStore {
/**
* Get a value.
- * @param $code Language code
- * @param $key Cache key
+ * @param $code string Language code
+ * @param $key string Cache key
*/
function get( $code, $key );
/**
* LCStore implementation which uses PHP accelerator to store data.
- * This will work if one of XCache, eAccelerator, or APC cacher is configured.
+ * This will work if one of XCache, WinCache or APC cacher is configured.
* (See ObjectCache.php)
*/
class LCStore_Accel implements LCStore {
$this->dbw = wfGetDB( DB_MASTER );
try {
- $this->dbw->begin();
+ $this->dbw->begin( __METHOD__ );
$this->dbw->delete( 'l10n_cache', array( 'lc_lang' => $code ), __METHOD__ );
} catch ( DBQueryError $e ) {
if ( $this->dbw->wasReadOnlyError() ) {
$this->readOnly = true;
- $this->dbw->rollback();
+ $this->dbw->rollback( __METHOD__ );
$this->dbw->ignoreErrors( false );
return;
} else {
$this->dbw->insert( 'l10n_cache', $this->batch, __METHOD__ );
}
- $this->dbw->commit();
+ $this->dbw->commit( __METHOD__ );
$this->currentLang = null;
$this->dbw = null;
$this->batch = array();