※この改造で得られる機能は、のぶのぶさん[1] にすべて取り込んで頂きました。
(2004-08-23にCVS[2]で確認。)
modPukiWikiの改造メモ [3]
- modPukiWikiの改造メモ
- 共通リンクディレクトリに対応してみた。
- PukiWikiConfig.php - class PukiWikiConfig
- PukiWikiLink.php - class PukiWikiLink_autolink
- PukiWikiFunc.php
- レンダリングデータをキャッシュするようにしてみた。
- PukiWikiConfig.php - class PukiWikiConfig
- PukiWikiRender.php
- PukiWikiLink.php - class PukiWikiLink_autolink
- WikiNameの自動リンクが有効の時、ページがない場合のページ作成リンク有り無しのオプションを追加してみた。
共通リンクディレクトリに対応してみた。 [4]
PukiWikiConfig.php - class PukiWikiConfig [5]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| function initParams() {
global $_PukiWikiParam;
$_PukiWikiParam = array();
//PukiWikiMod 共通リンクディレクトリ読み込み by nao-pon[6]
$wiki_common_dirs = "";
if (MOD_PUKI_WIKI_VER == "1.3" && file_exists(MOD_PUKI_WIKI_CACHE_DIR."config.php"))
{
include(MOD_PUKI_WIKI_CACHE_DIR."config.php");
}
// 共通リンクディレクトリ展開
$wiki_common_dirs = preg_split("/\s+/",trim($wiki_common_dirs));
sort($wiki_common_dirs,SORT_STRING);
$_PukiWikiParam['wiki_common_dirs'] = $wiki_common_dirs;
// オートリンクデータ読み込みとチェック
$need_cache_clear = 0;
$_PukiWikiParam['autolink_dat'] = array();
if (file_exists(MOD_PUKI_WIKI_CACHE_DIR.'autolink.dat'))
{
$_PukiWikiParam['autolink_dat'] = file(MOD_PUKI_WIKI_CACHE_DIR.'autolink.dat');
if (!file_exists(MOD_PUKI_CACHE_DIR .'autolink.dat') || ($_PukiWikiParam['autolink_dat'] != file(MOD_PUKI_CACHE_DIR .'autolink.dat')))
{
// 比較用オートリンクデータを保存
list($pattern, $pattern_a, $forceignorelist) = $_PukiWikiParam['autolink_dat'];
$fp = fopen(MOD_PUKI_CACHE_DIR . 'autolink.dat', 'wb') or
die_message('Cannot write autolink file ' .
MOD_PUKI_CACHE_DIR . '/autolink.dat' .
'<br />Maybe permission is not writable');
set_file_buffer($fp, 0);
flock($fp, LOCK_EX);
rewind($fp);
fputs($fp, trim($pattern) . "\n");
fputs($fp, trim($pattern_a) . "\n");
fputs($fp, trim($forceignorelist) . "\n");
flock($fp, LOCK_UN);
fclose($fp);
// オートリンクデータが更新されているのでキャッシュをクリア
$dh = dir(MOD_PUKI_CACHE_DIR);
while (($file = $dh->read()) !== FALSE)
{
if (substr($file,-6) != '.cache')
{
continue;
}
$file = MOD_PUKI_CACHE_DIR.$file;
unlink($file);
}
$dh->close();
}
}
}
|
PukiWikiLink.php - class PukiWikiLink_autolink [7]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
| function set($arr,$page)
{
$WikiName = PukiWikiConfig::getParam('WikiName');
list($name) = $this->splice($arr);
// 共通リンクディレクトリ対応 by nao-pon[6]
$alias = $name;
// 無視リストに含まれている、あるいは存在しないページを捨てる
// 共通リンクディレクトリ対応 by nao-pon[6]
//if (in_array($name,$this->forceignorepages) or !PukiWikiFunc::is_page($name))
if (in_array($name,$this->forceignorepages))
{
return FALSE;
}
// 共通リンクディレクトリを探す by nao-pon[6]
if (!PukiWikiFunc::is_page($name))
{
if (!$name = PukiWikiFunc::get_real_pagename($name))
return FALSE;
}
// 共通リンクディレクトリ対応 by nao-pon[6]
//return parent::setParam($page,$name,'','pagename',$name);
return parent::setParam($page,$name,'','pagename',$alias);
}
|
PukiWikiFunc.php [8]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| // 共通リンクディレクトリの処理(該当フルネームを返す:ブラケットなし) by nao-pon[6]
function get_real_pagename($page)
{
static $real_pages = array();
$page = PukiWikiFunc::strip_bracket($page);
if (isset($real_pages[$page])) return $real_pages[$page];
$real_pages[$page] = false;
foreach(PukiWikiConfig::getParam('wiki_common_dirs') as $dir)
{
$check = $dir.$page;
if (PukiWikiFunc::is_page($check))
{
$real_pages[$page] = $check;
break;
}
}
return $real_pages[$page];
}
|
レンダリングデータをキャッシュするようにしてみた。 [9]
PukiWikiConfig.php - class PukiWikiConfig [10]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
| function initParams() {
global $_PukiWikiParam;
$_PukiWikiParam = array();
//PukiWikiMod 共通リンクディレクトリ読み込み by nao-pon[6]
$wiki_common_dirs = "";
if (MOD_PUKI_WIKI_VER == "1.3" && file_exists(MOD_PUKI_WIKI_CACHE_DIR."config.php"))
{
include(MOD_PUKI_WIKI_CACHE_DIR."config.php");
}
// 共通リンクディレクトリ展開
$wiki_common_dirs = preg_split("/\s+/",trim($wiki_common_dirs));
sort($wiki_common_dirs,SORT_STRING);
$_PukiWikiParam['wiki_common_dirs'] = $wiki_common_dirs;
// オートリンクデータ読み込みとチェック
$need_cache_clear = 0;
$_PukiWikiParam['autolink_dat'] = array();
if (file_exists(MOD_PUKI_WIKI_CACHE_DIR.'autolink.dat'))
{
$_PukiWikiParam['autolink_dat'] = file(MOD_PUKI_WIKI_CACHE_DIR.'autolink.dat');
if (!file_exists(MOD_PUKI_CACHE_DIR .'autolink.dat') || ($_PukiWikiParam['autolink_dat'] != file(MOD_PUKI_CACHE_DIR .'autolink.dat')))
{
// 比較用オートリンクデータを保存
list($pattern, $pattern_a, $forceignorelist) = $_PukiWikiParam['autolink_dat'];
$fp = fopen(MOD_PUKI_CACHE_DIR . 'autolink.dat', 'wb') or
die_message('Cannot write autolink file ' .
MOD_PUKI_CACHE_DIR . '/autolink.dat' .
'<br />Maybe permission is not writable');
set_file_buffer($fp, 0);
flock($fp, LOCK_EX);
rewind($fp);
fputs($fp, trim($pattern) . "\n");
fputs($fp, trim($pattern_a) . "\n");
fputs($fp, trim($forceignorelist) . "\n");
flock($fp, LOCK_UN);
fclose($fp);
// オートリンクデータが更新されているのでキャッシュをクリア
$dh = dir(MOD_PUKI_CACHE_DIR);
while (($file = $dh->read()) !== FALSE)
{
if (substr($file,-6) != '.cache')
{
continue;
}
$file = MOD_PUKI_CACHE_DIR.$file;
unlink($file);
}
$dh->close();
}
}
}
|
PukiWikiRender.php [11]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| function transform($wikistr) {
global $_PukiWikiFootExplain;
if (PukiWikiConfig::getParam('use_cache'))
{
// キャッシュ確認 by nao-pon[6]
$cache_file = MOD_PUKI_CACHE_DIR.md5($wikistr).".cache";
if (file_exists($cache_file)) return join('',file($cache_file));
}
if (!is_array($wikistr)) {
$wikistr = explode("\n", $wikistr);
}
$this->_body->parse($wikistr);
$retstr = $this->_body->toString();
if (count($_PukiWikiFootExplain)) {
ksort($_PukiWikiFootExplain,SORT_NUMERIC);
$retstr .= count($_PukiWikiFootExplain) ? PukiWikiConfig::getParam('note_hr').join("\n",$_PukiWikiFootExplain) : '';
}
$_PukiWikiFootExplain=array();
if (PukiWikiConfig::getParam('use_cache'))
{
//キャッシュ保存 by nao-pon[6]
$fp = fopen($cache_file, "wb");
fwrite($fp, $retstr);
fclose($fp);
}
return $retstr;
}
|
PukiWikiLink.php - class PukiWikiLink_autolink [12]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| function PukiWikiLink_autolink($start)
{
parent::PukiWikiLink($start);
$autolink = PukiWikiConfig::getParam('autolink');
$autolink_data = PukiWikiConfig::getParam('autolink_dat');
// AutoLinkデータを予めチェックするようにした by nao-pon[6]
//if (!$autolink or !file_exists(MOD_PUKI_WIKI_CACHE_DIR.'autolink.dat'))
if (!$autolink or !$autolink_data)
{
return;
}
// AutoLinkデータを予めチェックするようにした by nao-pon[6]
//@list($auto,$auto_a,$forceignorepages) = file(MOD_PUKI_WIKI_CACHE_DIR.'autolink.dat');
@list($auto,$auto_a,$forceignorepages) = $autolink_data;
$this->auto = $auto;
$this->auto_a = $auto_a;
$this->forceignorepages = explode("\t",trim($forceignorepages));
}
|
WikiNameの自動リンクが有効の時、ページがない場合のページ作成リンク有り無しのオプションを追加してみた。 [13]
PukiWikiLink.php [14]
※ 関数作成
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| function make_pagelink($page, $alias='',$anchor='',$refer='')
{
$s_page = htmlspecialchars(PukiWikiFunc::strip_bracket($page));
$s_alias = ($alias == '') ? $s_page : $alias;
if ($page == '') {
return "<a href=\"$anchor\">$s_alias</a>";
}
$r_page = rawurlencode($page);
$r_refer = ($refer == '') ? '' : '&refer='.rawurlencode($refer);
if (PukiWikiFunc::is_page($page)) {
$passage = "";
$title = PukiWikiConfig::getParam('link_compact') ? '' : " title=\"$s_page$passage\"";
return "<a href=\"".MOD_PUKI_WIKI_URL."?$r_page$anchor\"$title>$s_alias</a>";
} else {
// ページ作成リンクをつけないオプション追加 by nao-pon[6]
if (!PukiWikiConfig::getParam('makepage_link')) return $s_alias;
$retval = "$s_alias<a href=\"".MOD_PUKI_WIKI_URL."?cmd=edit&page=$r_page$r_refer\">".PukiWikiConfig::getParam('_symbol_noexists')."</a>";
if (!PukiWikiConfig::getParam('link_compact')) {
$retval = "<span class=\"".PukiWikiConfig::getParam('style_prefix')."noexists\">$retval</span>";
}
return $retval;
}
}
|