OSDN Git Service

Import current code.
[osdn-codes/wiki-parser.git] / sfjp / wiki / storage / file.php
1 <?php
2 namespace sfjp\Wiki\Storage;
3 class File extends Base {
4         protected $datadir = './wikitexts';
5
6         function __construct($context = array()) {
7                 parent::__construct($context);
8                 if (!empty($context['storage.file.datadir']))
9                         $this->datadir = $context['storage.file.datadir'];
10         }
11
12         public function get($page) {
13                 return file_get_contents("{$this->datadir}/{$page}");
14         }
15
16         public function set($page, $text) {
17                 if (!is_dir($this->datadir))
18                         mkdir($this->datadir, 0755, true);
19                 $file = "{$this->datadir}/{$page}";
20                 $tmp  = "{$this->datadir}/.{$page}.tmp.".getmypid();
21                 file_put_contents($tmp, $text);
22                 rename($tmp, $file);
23         }
24
25         public function exists($page) {
26                 file_exists("{$this->datadir}/{$page}");
27         }
28
29         public function remove($page) {
30                 unlink("{$this->datadir}/{$page}");
31         }
32
33         public function get_list() {
34                 $dh = opendir($this->datadir);
35                 if (!$dh) return array();
36         
37                 $ret = array();
38                 while ($ent = readdir($dh)) {
39                         if (substr($ent, 0, 1) == '.')
40                                 continue;
41                         if (substr($ent, -1) == '~')
42                                 continue;
43                         $ret []= $ent;
44                 }
45                 closedir($dh);
46                 sort($ret, SORT_NATURAL|SORT_FLAG_CASE);
47                 return $ret;
48         }
49 }