############################################################## # #
ToDoリストを表示します。
## まず適当なページにToDoを記述します。ToDoの記述は以下のような感じです。 #
## * 22(優先度) トイレットペーパーを買う(行動) ##
# 優先度と行動の間は空白を一つ以上空けてください。 # プラグインの使い方は以下のようになります。 #
#
# {{todolist ToDo(ToDoを記述したページ),5(表示する件数、省略可)}}
#
# # 優先度の高い順に上から表示されます。 # alwaysオプションをつけるとチェックボックスと完了ボタンが表示され、 # ToDoが完了したらチェックボックスにチェックを入れて「完了」を押すと # ToDoを記述したページでは #
## * 済 22 トイレットペーパーを買う ##
# のように変更されtodolistから外されます。 # なお、alwaysオプションをつけていない場合でも、 # 管理者としてログインすれば同様のフォームが表示されます。 #
# ############################################################## package plugin::todo::ToDoList; use strict; #============================================================= # コンストラクタ #============================================================= sub new{ my $class = shift; my $self = {}; return bless $self,$class; } #============================================================= # パラグラフメソッド #============================================================= sub paragraph { my $self = shift; my $wiki = shift; my $source = shift; my $count = shift; my $option = shift; if($count eq "always"){ $option = "always"; } my $cgi = $wiki->get_CGI; my $page = $cgi->param("page"); my $buf = ""; my @todolist=(); if($source eq ""){ return &Util::paragraph_error("ページを指定してください。"); } unless($wiki->page_exists($source)){ return &Util::paragraph_error("$sourceが存在しません。"); } unless($wiki->can_show($source)){ return &Util::paragraph_error("ページの参照権がありません。"); } my $content = $wiki->get_page($source); my @lines = split(/\n/,$content); # 書式からtodoを抽出 foreach(@lines){ if($_ =~ /^\*\s*(\d+)\s+(.*)/){ my $priority = $1; my $dothing = $2; my $todo = {priority => $priority,dothing => $dothing}; push(@todolist,$todo); } } # 優先順位でソート @todolist = sort { return $b->{priority} <=> $a->{priority}; } @todolist; # リスト表示 + 完了フォーム my $login = $wiki->get_login_info(); if($option eq "always" || defined($login)){ $buf .= "