############################################################################### # # ページを管理するモジュール # ############################################################################### package plugin::admin::AdminPageHandler; use strict; #============================================================================== # コンストラクタ #============================================================================== sub new { my $class = shift; my $self = {}; # フィルタ情報を保存するファイル $self->{filter_file} = "filter.dat"; return bless $self,$class; } #============================================================================== # アクションハンドラメソッド #============================================================================== sub do_action { my $self = shift; my $wiki = shift; my $cgi = $wiki->get_CGI; my $login = $wiki->get_login_info(); if($cgi->param("freeze") ne ""){ $self->freeze_page($wiki); $self->reload($wiki); } elsif($cgi->param("unfreeze") ne ""){ $self->unfreeze_page($wiki); $self->reload($wiki); } elsif($cgi->param("delete") ne ""){ $self->delete_page($wiki); $self->reload($wiki); } elsif($cgi->param("show_all") ne ""){ $self->show_all($wiki); $self->reload($wiki); } elsif($cgi->param("show_user") ne ""){ $self->show_user($wiki); $self->reload($wiki); } elsif($cgi->param("show_admin") ne ""){ $self->show_admin($wiki); $self->reload($wiki); } return $self->page_list($wiki); } #============================================================================== # ページの削除 #============================================================================== sub delete_page { my $self = shift; my $wiki = shift; my @pages = $wiki->get_CGI->param("pages"); foreach(@pages){ $wiki->save_page($_,""); } } #============================================================================== # 全員に公開 #============================================================================== sub show_all { my $self = shift; my $wiki = shift; my @pages = $wiki->get_CGI->param("pages"); foreach(@pages){ $wiki->set_page_level($_,0); } } #============================================================================== # ユーザのみ参照可能 #============================================================================== sub show_user { my $self = shift; my $wiki = shift; my @pages = $wiki->get_CGI->param("pages"); foreach(@pages){ $wiki->set_page_level($_,1); } } #============================================================================== # 管理者のみ参照可能 #============================================================================== sub show_admin { my $self = shift; my $wiki = shift; my @pages = $wiki->get_CGI->param("pages"); foreach(@pages){ $wiki->set_page_level($_,2); } } #============================================================================== # ページの凍結 #============================================================================== sub freeze_page { my $self = shift; my $wiki = shift; my @freeze_list = $wiki->get_freeze_list; my @pages = $wiki->get_CGI->param("pages"); foreach my $page (@pages){ my $flag = 1; foreach(@freeze_list){ if($_ eq $page){ $flag = 0; last; } } if($flag){ $wiki->freeze_page($page); } } } #============================================================================== # ページの凍結解除 #============================================================================== sub unfreeze_page { my $self = shift; my $wiki = shift; my @freeze_list = $wiki->get_freeze_list; my @pages = $wiki->get_CGI->param("pages"); foreach my $page (@pages){ my $flag = 0; foreach(@freeze_list){ if($_ eq $page){ $flag = 1; last; } } if($flag){ $wiki->un_freeze_page($page); } } } #============================================================================== # ページ一覧 #============================================================================== sub page_list { my $self = shift; my $wiki = shift; my $cgi = $wiki->get_CGI(); my @freeze_list = $wiki->get_freeze_list(); my @pages = $wiki->get_page_list(); my $level_list = $wiki->get_page_level(); my $filter = $cgi->param("filter"); my $filterType = $cgi->param("filterType"); if($filterType ne "AND" && $filterType ne "OR" && $filterType ne "NOT"){ $filterType = "AND"; } # フィルタを保存。パラメータで指定されていなければ読み込み。 if(defined($filter)){ &Util::save_config_text($wiki,$self->{filter_file},"$filterType:$filter"); } else { $filter = &Util::load_config_text($wiki,$self->{filter_file}); my $index = index($filter,":"); if($index > 0){ $filterType = substr($filter,0,$index); $filter = substr($filter,$index+1); } } my $buf = "

ページ一覧

\n". "
config('script_name')."\" method=\"POST\">\n". "

\n". " フィルタ\n". " \n". " AND\n". " OR\n". " NOT\n". " \n". "

\n". " \n". " \n". " \n". " \n". " \n". " \n". " \n". " \n"; foreach my $page (@pages){ if($filter ne ""){ my @dim = split(/\s+/,$filter); my $flag = 0; foreach my $word (split(/\s+/,$filter)){ if(index($page,$word) >= 0){ if($filterType eq "NOT"){ $flag = 0; last; } $flag = 1; } else { if($filterType eq "AND"){ $flag = 0; last; } elsif($filterType eq "NOT"){ $flag = 1; } } } if($flag==0){ next; } } $buf .= " \n". " \n"; # 凍結されているか調べる my $is_freeze = 0; foreach(@freeze_list){ if($_ eq $page){ $is_freeze = 1; last; } } if($is_freeze){ $buf .= " \n"; } else { $buf .= " \n"; } # 参照レベルを調べる if(!defined($level_list->{$page}) || $level_list->{$page}==0){ $buf .= " \n"; } elsif($level_list->{$page}==1){ $buf .= " \n"; } elsif($level_list->{$page}==2){ $buf .= " \n"; } $buf .= " \n". " \n". " \n"; } $buf .= "

状態参照ページ名最終更新日時
凍結
公開ユーザ管理者config('script_name')."?page=".&Util::url_encode($page)."\">".&Util::escapeHTML($page)."".&Util::format_date($wiki->get_last_modified($page))."
\n". "
\n". " \n". "

ページの凍結

\n". "

チェックしたページを凍結します。凍結したページはログイン時のみ編集となります。

\n". " \n". " \n". "

ページの削除

\n". "

チェックしたページを削除します。

\n". " \n". "

参照権限の設定

\n". "

チェックしたページの参照権限を設定します。

\n". " \n". " \n". " \n". "
\n"; $wiki->set_title("ページの管理"); return $buf."\n"; } #============================================================================== # ページ一覧をリロード #============================================================================== sub reload { my $self = shift; my $wiki = shift; $wiki->redirectURL($wiki->config('script_name')."?action=ADMINPAGE"); } 1;