トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

FSWikiカスタマイズ

InterWiki改造

/lib/wiki/InterWiki.pm

エクセルの学校URL変更に伴いコードを改造する。

#$self->{g_url} = $keyword->{url}.Util::url_encode($param);
if($keyword->{label} eq "エクセルの学校P"){
	$self->{g_url} = $keyword->{url}."[[".Util::url_encode($param)."]]";
} else {
	$self->{g_url} = $keyword->{url}.Util::url_encode($param);
}
return 1;

一覧出力形式変更

/plugin/core/ListPage.pm

一覧の並べ替えは/lib/Wiki/DefaultStorage.pmで行われているようで、last_modifiedとnameから選べる。更新日時から表示されるように変更。

3.6.2以前

 $wiki->set_title("ページの一覧");
#my @list = $wiki->get_page_list({-sort=>'last_modified',-permit=>'show'});
 my @list = $wiki->get_page_list({-sort=>'name',-permit=>'show'});
	
 my $cnt = $cgi->param("cnt");
 if($cnt eq ""){ $cnt = 0; }
 my $row = $cnt * $self->{once};
	
 my $content;
 my $count = 0;

 foreach(@list){
     if($self->{once}==0 ||($count>=$row && $count<$row+$self->{once})){
         $content = $content.
#        "<li><a href=\"".$wiki->config('script_name')."?page=".Util::url_encode($_)."\">".
#        Util::escapeHTML($_)."</a>".
#        " - ".Util::format_date($wiki->get_last_modified2($_)).
#        "</li>\n";

         "<li>".Util::format_date($wiki->get_last_modified2($_)).
         " - <a href=\"".$wiki->config('script_name')."?page=".Util::url_encode($_)."\">".
         Util::escapeHTML($_)."</a>".
         "</li>\n";
      }
      $count++;
  }

3.6.3では

foreach(@list){
	if($self->{once}==0 ||($count>=$row && $count<$row+$self->{once})){
		$content = $content.
#		"<li>".
#		"<a href=\"".$wiki->create_page_url($_)."\">".Util::escapeHTML($_)."</a>".
#		" - ".
#		Util::format_date($wiki->get_last_modified2($_)).
#		"</li>\n";

ちょっと違う。

/plugin/recent/Recent.pm

プラグインの更新順へ日付出力追加

#$content = $content."[[$page]]";
 $content = $content.Util::format_date($wiki->get_last_modified2($page))." - [[$page]]";

日付フォーマット変更

/lib/Util.pm

YYYY年MM月DD日 hh時mm分ss秒よりYYYY/MM/DD (WEEK) hh:mm:ssに変更。

sub format_date {
    my (@week) = qw(Sun Mon Tue Wed Thu Fri Sat);
	my $t = shift;
#	my ($sec, $min, $hour, $mday, $mon, $year) = localtime($t);
	my ($sec, $min, $hour, $mday, $mon, $year, $weekday) = localtime($t);
    $weekday = $week[$weekday];
#	return sprintf("%04d年%02d月%02d日 %02d時%02d分%02d秒",
#	               $year+1900,$mon+1,$mday,$hour,$min,$sec);
 	return sprintf("%04d/%02d/%02d (%s) %02d:%02d:%02d",
                   $year+1900,$mon+1,$mday,$weekday,$hour,$min,$sec);
}

コメント出力フォーマット変更

/plugin/comment/CommentHandler.pm

メッセージとユーザー名、日付の出力順を変更。

#	$content = $content."*$message - $name (".Util::format_date(time()).")\n";
	$content = $content."*".Util::format_date(time())." '''$name''' : $message\n";

新着順、投稿順、ページ末尾に追加で3ヶ所有り。

テーマの変更

/theme/monotone/monotone.css

/*
フォント指定(変更 2004/5/7)
*/
body {
	background-color: #FFFFFF;
	color: #666666;
	margin: 0em 4em;
	font-family: MS Reference Sans Serif, arial,verdana,
		MS Sans Serif, "MS ゴシック", Osaka−等幅, monospace;
/*	font-family: palatino,  georgia, verdana, arial, sans-serif; */
}

/*
リンク文字列に関する設定(変更 2004/5/7)
underline、colorの変更
*/
a:link {
/*	text-decoration: underline; */
	text-decoration: none;
	font-weight: bold;
	color: #666666;
}

a:visited {
/*	text-decoration: underline; */
	text-decoration: none;
	font-weight: bold;
	color: #666666;
}

a:focus {
	background-color:#000000;
	color: #FFFFFF;
}

a:hover {
	background-color:#000000;
	color: #FFFFFF;
}
/*
ページトップにある操作ボタンの並ぶ行の設定
*/
div.adminmenu {
	margin-left: 150px;  /* 3.6.3より追加 */
	background-color: #E7E8E2;
	text-align: right;
	font-size: 12pt;
}
/*
日記タイトルの設定
*/
h1 {
	margin-left: 150px; /* 3.6.3より追加 */
	text-align: left;
	color: #666666;
}
/*
見出し2、3の設定(変更 2004/2/18)
*/
h3 {
	border-left   : #E7E8E2 10px solid;
	border-top    : #E7E8E2 5px solid;
	border-right  : #E7E8E2 1px solid;
	border-bottom : #E7E8E2 1px solid;
	font-family   : Verdana,Arial,Helvetica,sans-serif;
	padding-left  : 3pt;
	margin-left   : 10px;
	margin-bottom : 0px;
}

h4 {
	border-left   : #E7E8E2 10px solid;
	font-family   : Verdana,Arial,Helvetica,sans-serif;
	padding-left  : 4pt;
	margin-left   : 10px;
	margin-bottom : 0px;
}

/*
複数行入力フィールドの設定(幅のコメント化 2004/2/18)
*/
textarea {
	background-color: #FFFFFF;
	color: #000000;
	margin-left: 1em;
	/* width: 30em; */
}

/*
整形済みテキスト(preタグ)の設定(バックの色変更 2004/2/18)
*/
pre {
	background-color: #D5D5D5;
	color: #4B5A66;
	margin-left: 2em;
	margin-right: 1em;
	padding: 8px 8px 8px 8px;
}

/*
サイドバー用の設定(追加 2004/2/18)
*/
dd {
	margin-left   : 20pt;
	margin-bottom : 5pt;
}

div.main {
	margin-left: 150px;
}

div.sidebar {
	position        : absolute;
	top             : 0px;
	left            : 0px;
	width           : 175px;
	font-size       : x-small;
	padding         : 2pt;
	border-right    : #E7E8E2 1px solid;
	border-bottom   : #E7E8E2 1px solid;
	color           : #666666;
	background-color: #FFFFFF;
	word-break      : break-all;
}

div.comment {
	margin-top       : 10px;
	margin-bottom    : 10px;
	background-color : #FFFFFF;
	border           : #E7E8E2 1px solid;
	font-size        : 80%;
}

div.comment p {
	margin-top : 5pt;
	margin-bottom : 5pt;
}

div.sidebar ul,div.sidebar li {
	padding-left : 0pt;
	margin-left  : 10pt;
}

div.sidebar h2,div.sidebar h3,div.sidebar h4 {
	margin-top : 0px;
}

/*
tableの設定(追加 2004/2/18)
*/
table {
	border: 1px solid #999999;
	margin: 20pt;
	border-collapse: collapse;
}

th {
	border: 1px solid #999999;
	padding: 5px;
	background: white;
}

td {
	border: 1px solid #999999;
	padding: 5px;
	background: white;
}

スタイル設定

ログインのスタイル設定。

/* Wikiページへのアンカ */
a.wikipage:link { 
/*
  color            : #4444FF;
  text-decoration : underline;
*/
  color            : #666666;
}

a.wikipage:visited {
/*
  color            : #4444FF;
  text-decoration : underline;
*/
  color            : #666666;
}

a.wikipage:hover {
/*
  color           : #FF4444;
  background-color: #DDDDDD;
  text-decoration : underline;
*/
  color           : #FFFFFF;
  background-color: #000000;

}

フォームCSS

3.5.7より変更あり。
押しボタンの表示がおかしいため、暫定でclass除去。

/tmpl/editform.tmpl

<!-- <form class="update" method="post" action="<!--TMPL_VAR NAME="SCRIPT_NAME"-->"> -->
<form method="post" action="<!--TMPL_VAR NAME="SCRIPT_NAME"-->">

パート編集の表示変更

/lib/Wiki/HTMLParser.pm

'編集'より'edit'へ。

$self->{html} .= "<div class=\"partedit\"><a class=\"partedit\" href=\"$path?action=EDIT".
 	"&page=".&Util::url_encode($page).
	"&artno=".$self->{partedit}->{$full}."\">edit</a></div>\n";

Searchプラグイン

/plugin/search/SearchForm.pm

入力欄の長さをレイアウトに合わせる。

	my $buf = "<form method=\"GET\" action=\"".$wiki->config('script_name')."\">\n".
#	          "キーワード <input type=\"TEXT\" name=\"word\" size=\"20\">";
	          "キーワード <br><input type=\"TEXT\" name=\"word\" size=\"30\">";
	
	if($way eq "v" || $way eq "V"){
		$buf .= "<br>";
	}

SpeedyCGIを使用しているときfooterに表示する

/tmpl/footer.tmpl

mod_perlの項目の下にSpeedyCGI項目を追加。

<!--TMPL_IF NAME="MOD_PERL"-->
  / mod_perl
<!--/TMPL_IF-->
<!--TMPL_IF NAME="SPEEDYCGI"-->
  / SpeedyCGI
<!--/TMPL_IF-->

/wiki.cgi

SpeedyCGIオブジェクトの作成

:
:
use Jcode;
use HTML::Template;

#SpeedyCGI オブジェクトの作成
use CGI::SpeedyCGI;
my $sp = CGI::SpeedyCGI->new;

おなじくmod_perl検出の下にSpeedyCGI検出の追加

if(exists $ENV{MOD_PERL}){
    $footer_tmpl->param(MOD_PERL=>1);
}

# SpeedyCGIの下で実行されているかどうかを調べる
if($sp->i_am_speedy){
    $footer_tmpl->param(SPEEDYCGI=>1);
}

SpeedyCGIで運用していると、自分の環境ではハングアップ?する模様

英語スパム対策

コメントスパムに対しては下記のサイトを参考にして、ページ編集に関しても同じ処理を組み込んでみた。
※現在はcaptcha-0.5を組み込んでいるため未使用

/plugin/core/EditPage.pm

#my $save_content = $content;
my $mode = $wiki->get_edit_format();
my $save_content = $wiki->convert_to_fswiki($content,$mode);

# ↓ 2008/04/06 英語スパム対策
if($content ne ""){
if($content !~ /[\xA1-\xFE]/){
	return $wiki->error("英文だけの書き込みは禁止されています。");
}
}
# ↑ 2008/04/06 英語スパム対策

# パート編集の場合
if($artno ne ""){
	$save_content = &make_save_source($wiki->get_page ($pagename),$save_content,$artno,$wiki);
}

/plugin/comment/CommentHandler.pm

# ↓ 2008/04/06 英語スパム対策
	if($message !~ /[\xA1-\xFE]/){
		return $wiki->error("英文だけの書き込みは禁止されています。");
	}
# ↑ 2008/04/06 英語スパム対策
	
	# フォーマットプラグインへの対応
	my $format = $wiki->get_edit_format();

改行の処理

fswiki3.6.2から3.6.3にバージョンアップするにあたり、BRの処理が変更になった。
とりあえず自分は以前の状態のほうが好きなので該当処理をコメントアウト。

/lib/Wiki/HTMLParser.pm

#==============================================================================
# 段落区切り
#==============================================================================
sub l_paragraph {
	my $self = shift;
	
	$self->end_list;
	$self->end_verbatim;
	$self->end_table;
	$self->end_quote;
	
	if($self->{para}==1){
		$self->{html} .= "</p>\n";
		$self->{para} = 0;
#	} elsif($self->{wiki}->config('br_mode')==1){
#		$self->{html} .= "<br>\n";
	}
}