directory = $conf['directory']; } 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 ) && !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"; } }