MediaWiki REL1_31
LCStoreStaticArray.php
Go to the documentation of this file.
1<?php
26class LCStoreStaticArray implements LCStore {
28 private $currentLang = null;
29
31 private $data = [];
32
34 private $fname = null;
35
37 private $directory;
38
39 public function __construct( $conf = [] ) {
40 global $wgCacheDirectory;
41
42 if ( isset( $conf['directory'] ) ) {
43 $this->directory = $conf['directory'];
44 } else {
46 }
47 }
48
49 public function startWrite( $code ) {
50 $this->currentLang = $code;
51 $this->fname = $this->directory . '/' . $code . '.l10n.php';
52 $this->data[$code] = [];
53 if ( file_exists( $this->fname ) ) {
54 $this->data[$code] = require $this->fname;
55 }
56 }
57
58 public function set( $key, $value ) {
59 $this->data[$this->currentLang][$key] = self::encode( $value );
60 }
61
69 public static function encode( $value ) {
70 if ( is_scalar( $value ) || $value === null ) {
71 // [V]alue
72 return [ 'v', $value ];
73 }
74 if ( is_object( $value ) ) {
75 // [S]erialized
76 return [ 's', serialize( $value ) ];
77 }
78 if ( is_array( $value ) ) {
79 // [A]rray
80 return [ 'a', array_map( function ( $v ) {
81 return LCStoreStaticArray::encode( $v );
82 }, $value ) ];
83 }
84
85 throw new RuntimeException( 'Cannot encode ' . var_export( $value, true ) );
86 }
87
95 public static function decode( array $encoded ) {
96 $type = $encoded[0];
97 $data = $encoded[1];
98
99 switch ( $type ) {
100 case 'v':
101 return $data;
102 case 's':
103 return unserialize( $data );
104 case 'a':
105 return array_map( function ( $v ) {
106 return LCStoreStaticArray::decode( $v );
107 }, $data );
108 default:
109 throw new RuntimeException(
110 'Unable to decode ' . var_export( $encoded, true ) );
111 }
112 }
113
114 public function finishWrite() {
115 file_put_contents(
116 $this->fname,
117 "<?php\n" .
118 "// Generated by LCStoreStaticArray.php -- do not edit!\n" .
119 "return " .
120 var_export( $this->data[$this->currentLang], true ) . ';'
121 );
122 $this->currentLang = null;
123 $this->fname = null;
124 }
125
126 public function get( $code, $key ) {
127 if ( !array_key_exists( $code, $this->data ) ) {
128 $fname = $this->directory . '/' . $code . '.l10n.php';
129 if ( !file_exists( $fname ) ) {
130 return null;
131 }
132 $this->data[$code] = require $fname;
133 }
134 $data = $this->data[$code];
135 if ( array_key_exists( $key, $data ) ) {
136 return self::decode( $data[$key] );
137 }
138 return null;
139 }
140}
serialize()
unserialize( $serialized)
$wgCacheDirectory
Directory for caching data in the local filesystem.
finishWrite()
Finish a write transaction.
static encode( $value)
Encodes a value into an array format.
static decode(array $encoded)
Decode something that was encoded with encode.
string $fname
File name.
array $data
Localisation data.
startWrite( $code)
Start a write transaction.
string $directory
Directory for cache files.
string null $currentLang
Current language code.
this hook is for auditing only or null if authentication failed before getting that far or null if we can t even determine that probably a stub it is not rendered in wiki pages or galleries in category pages allow injecting custom HTML after the section Any uses of the hook need to handle escaping see BaseTemplate::getToolbox and BaseTemplate::makeListItem for details on the format of individual items inside of this array or by returning and letting standard HTTP rendering take place modifiable or by returning false and taking over the output modifiable & $code
Definition hooks.txt:865
Interface for the persistence layer of LocalisationCache.
Definition LCStore.php:38
The most up to date schema for the tables in the database will always be tables sql in the maintenance directory
Definition schema.txt:2