############################################################################### # # <p>bugtrackプラグインで投稿されたバグの一覧を表示します。</p> # <p> # 第2引数にformを与えると状態変更用のフォームがあらわれます。 # </p> # <pre> # {{buglist プロジェクト名[,form]}} # </pre> # ############################################################################### package plugin::bugtrack::BugList; use strict; use plugin::bugtrack::BugState; #============================================================================== # コンストラクタ #============================================================================== sub new { my $class = shift; my $self = {}; return bless $self,$class; } #============================================================================== # インラインメソッド #============================================================================== sub paragraph { my $self = shift; my $wiki = shift; my $project = shift; my $form = shift; if($project eq ""){ return &Util::paragraph_error("プロジェクト名が指定されていません。"); } # form以外の文字列は無視 if($form ne "form"){ $form = 0; } my @pages = $wiki->get_page_list(); my $bugs = {}; my $quote = quotemeta($project); foreach(@pages){ if($_ =~ /^BugTrack-$quote\/([0-9]+)$/){ my $pagename = $_; my $count = $1; my $category = ""; my $status = ""; my $priority = ""; my $name = ""; my $subject = ""; my $date = ""; my $page = $wiki->get_page($pagename); my @lines = split(/\n/,$page); my $first = 0; foreach(@lines){ $_ =~ s/\r//; if($first==0 && $_ =~ /^!!!(.*)/){ $subject = $1; $first = 1; } elsif($_ =~ /^\*カテゴリ:\s*(.*)/){ $category = $1; } elsif($_ =~ /^\*優先度:\s*(.*)/){ $priority = $1; } elsif($_ =~ /^\*状態:\s*(.*)/){ $status = $1; } elsif($_ =~ /^\*投稿者:\s*(.*)/){ $name = $1; } elsif($_ =~ /^\*日時:\s*(.*)/){ $date = $1; } } my $bug = {page =>$pagename, count =>$count, category =>$category, status =>$status, priority =>$priority, name =>$name, date =>$date, subject =>$subject, form =>$form }; push(@{$bugs->{$status}},$bug); } } my $buf = ""; # サマリを作成 my $bug_teian = 0; my $bug_chakushu = 0; my $bug_kanryo = 0; my $bug_released = 0; my $bug_horyu = 0; my $bug_kyakka = 0; $bug_teian = @{$bugs->{"提案"}} if(defined($bugs->{"提案"})); $bug_chakushu = @{$bugs->{"着手"}} if(defined($bugs->{"着手"})); $bug_kanryo = @{$bugs->{"完了"}} if(defined($bugs->{"完了"})); $bug_released = @{$bugs->{"リリース済"}} if(defined($bugs->{"リリース済"})); $bug_horyu = @{$bugs->{"保留"}} if(defined($bugs->{"保留"})); $bug_kyakka = @{$bugs->{"却下"}} if(defined($bugs->{"却下"})); my $bug_count = $bug_teian + $bug_chakushu + $bug_kanryo + $bug_released + $bug_horyu + $bug_kyakka; $buf .= "<p>提案:$bug_teian / 着手:$bug_chakushu / 完了:$bug_kanryo / リリース済:$bug_released ". "/ 保留:$bug_horyu / 却下:$bug_kyakka / 合計:$bug_count</p>\n"; # 一覧を作成 $buf .= "<table border>\n". " <tr>\n". " <th><br></th>\n". " <th>カテゴリ</th>\n". " <th>優先度</th>\n". " <th>状態</th>\n". " <th>投稿者</th>\n". " <th>サマリ</th>\n". " </tr>\n"; my $tmp = $buf; $buf .= make_row(@{$bugs->{"提案"}} ,"#FFDDDD",$wiki); $buf .= make_row(@{$bugs->{"着手"}} ,"#FFFFDD",$wiki); $buf .= make_row(@{$bugs->{"完了"}} ,"#DDFFDD",$wiki); $buf .= make_row(@{$bugs->{"リリース済"}} ,"#DDDDFF",$wiki); $buf .= make_row(@{$bugs->{"保留"}} ,"#DDDDDD",$wiki); $buf .= make_row(@{$bugs->{"却下"}} ,"#FFFFFF",$wiki); if($buf eq $tmp){ $buf .= " <tr><td colspan=\"6\" align=\"center\">バグレポートはありません</td></tr>\n"; } return $buf .= "</table>\n"; } #============================================================================== # 1行分のデータを出力する内部用関数 #============================================================================== sub make_row { my $wiki = pop; my $color = pop; my @row = sort {$b->{count}<=>$a->{count}} @_; my $buf = ""; foreach(@row){ $buf .= " <tr bgcolor=\"$color\">\n". " <td><a href=\"".$wiki->create_page_url($_->{page})."\">".&Util::escapeHTML($_->{page})."</a></td>\n". " <td>".&Util::escapeHTML($_->{category})."</td>\n". " <td>".&Util::escapeHTML($_->{priority})."</td>\n". " <td>".&Util::escapeHTML($_->{status})."</td>\n". " <td>".&Util::escapeHTML($_->{name})."</td>\n". " <td>".&Util::escapeHTML($_->{subject})."</td>\n". " </tr>\n"; # フォームを表示する if($_->{form}){ my $page = $wiki->get_CGI->param("page"); my $source = $_->{page}; my $form = &plugin::bugtrack::BugState::make_form($wiki,$page,$source); $buf .= "<tr bgcolor=\"$color\"><td colspan=\"6\">".$form."</td></tr>\n"; } } return $buf; } #============================================================================== # ソート関数 #============================================================================== #sub by_count { # my $a_count = $a->{count}; # my $b_count = $b->{count}; # return $b_count <=> $a_count; #} 1;