X-Git-Url: https://scripts.mit.edu/gitweb/autoinstallsdev/mediawiki.git/blobdiff_plain/19e297c21b10b1b8a3acad5e73fc71dcb35db44a..6932310fd58ebef145fa01eb76edf7150284d8ea:/includes/cache/localisation/LCStoreCDB.php diff --git a/includes/cache/localisation/LCStoreCDB.php b/includes/cache/localisation/LCStoreCDB.php new file mode 100644 index 00000000..78a4863f --- /dev/null +++ b/includes/cache/localisation/LCStoreCDB.php @@ -0,0 +1,144 @@ +directory = $conf['directory']; + } else { + $this->directory = $wgCacheDirectory; + } + } + + public function get( $code, $key ) { + if ( !isset( $this->readers[$code] ) ) { + $fileName = $this->getFileName( $code ); + + $this->readers[$code] = false; + if ( file_exists( $fileName ) ) { + try { + $this->readers[$code] = Reader::open( $fileName ); + } catch ( Exception $e ) { + wfDebug( __METHOD__ . ": unable to open cdb file for reading\n" ); + } + } + } + + if ( !$this->readers[$code] ) { + return null; + } else { + $value = false; + try { + $value = $this->readers[$code]->get( $key ); + } catch ( Exception $e ) { + wfDebug( __METHOD__ . ": \Cdb\Exception caught, error message was " + . $e->getMessage() . "\n" ); + } + if ( $value === false ) { + return null; + } + + return unserialize( $value ); + } + } + + public function startWrite( $code ) { + if ( !file_exists( $this->directory ) ) { + if ( !wfMkdirParents( $this->directory, null, __METHOD__ ) ) { + throw new MWException( "Unable to create the localisation store " . + "directory \"{$this->directory}\"" ); + } + } + + // Close reader to stop permission errors on write + if ( !empty( $this->readers[$code] ) ) { + $this->readers[$code]->close(); + } + + try { + $this->writer = Writer::open( $this->getFileName( $code ) ); + } catch ( Exception $e ) { + throw new MWException( $e->getMessage() ); + } + $this->currentLang = $code; + } + + public function finishWrite() { + // Close the writer + try { + $this->writer->close(); + } catch ( Exception $e ) { + throw new MWException( $e->getMessage() ); + } + $this->writer = null; + unset( $this->readers[$this->currentLang] ); + $this->currentLang = null; + } + + public function set( $key, $value ) { + if ( is_null( $this->writer ) ) { + throw new MWException( __CLASS__ . ': must call startWrite() before calling set()' ); + } + try { + $this->writer->set( $key, serialize( $value ) ); + } catch ( Exception $e ) { + throw new MWException( $e->getMessage() ); + } + } + + protected function getFileName( $code ) { + if ( strval( $code ) === '' || strpos( $code, '/' ) !== false ) { + throw new MWException( __METHOD__ . ": Invalid language \"$code\"" ); + } + + return "{$this->directory}/l10n_cache-$code.cdb"; + } + +}