1###############################################################################
2#
3# �ڡ������������⥸�塼��
4#
5###############################################################################
6package plugin::admin::AdminPageHandler;
7use strict;
8#==============================================================================
9# �����ȥ饯��
10#==============================================================================
11sub new {
12	my $class = shift;
13	my $self = {};
14
15	# �ե��륿�������¸����ե�����
16	$self->{filter_file} = "filter.dat";
17
18	return bless $self,$class;
19}
20
21#==============================================================================
22# ���������ϥ�ɥ�᥽�å�
23#==============================================================================
24sub do_action {
25	my $self  = shift;
26	my $wiki  = shift;
27	my $cgi   = $wiki->get_CGI;
28	my $login = $wiki->get_login_info();
29
30	if($cgi->param("freeze") ne ""){
31		$self->freeze_page($wiki);
32		$self->reload($wiki);
33
34	} elsif($cgi->param("unfreeze") ne ""){
35		$self->unfreeze_page($wiki);
36		$self->reload($wiki);
37
38	} elsif($cgi->param("delete") ne ""){
39		$self->delete_page($wiki);
40		$self->reload($wiki);
41
42	} elsif($cgi->param("show_all") ne ""){
43		$self->show_all($wiki);
44		$self->reload($wiki);
45
46	} elsif($cgi->param("show_user") ne ""){
47		$self->show_user($wiki);
48		$self->reload($wiki);
49
50	} elsif($cgi->param("show_admin") ne ""){
51		$self->show_admin($wiki);
52		$self->reload($wiki);
53
54	}
55	return $self->page_list($wiki);
56}
57
58#==============================================================================
59# �ڡ����κ��
60#==============================================================================
61sub delete_page {
62	my $self = shift;
63	my $wiki = shift;
64	my @pages = $wiki->get_CGI->param("pages");
65	foreach(@pages){
66		$wiki->save_page($_,"");
67	}
68}
69
70#==============================================================================
71# �����˸���
72#==============================================================================
73sub show_all {
74	my $self = shift;
75	my $wiki = shift;
76	my @pages = $wiki->get_CGI->param("pages");
77	foreach(@pages){
78		$wiki->set_page_level($_,0);
79	}
80}
81
82#==============================================================================
83# �桼���Τ߻��Ȳ�ǽ
84#==============================================================================
85sub show_user {
86	my $self = shift;
87	my $wiki = shift;
88	my @pages = $wiki->get_CGI->param("pages");
89	foreach(@pages){
90		$wiki->set_page_level($_,1);
91	}
92}
93
94#==============================================================================
95# �����ԤΤ߻��Ȳ�ǽ
96#==============================================================================
97sub show_admin {
98	my $self = shift;
99	my $wiki = shift;
100	my @pages = $wiki->get_CGI->param("pages");
101	foreach(@pages){
102		$wiki->set_page_level($_,2);
103	}
104}
105
106#==============================================================================
107# �ڡ��������
108#==============================================================================
109sub freeze_page {
110	my $self = shift;
111	my $wiki = shift;
112	my @freeze_list = $wiki->get_freeze_list;
113	my @pages = $wiki->get_CGI->param("pages");
114	foreach my $page (@pages){
115		my $flag = 1;
116		foreach(@freeze_list){
117			if($_ eq $page){
118				$flag = 0;
119				last;
120			}
121		}
122		if($flag){
123			$wiki->freeze_page($page);
124		}
125	}
126}
127
128#==============================================================================
129# �ڡ����������
130#==============================================================================
131sub unfreeze_page {
132	my $self = shift;
133	my $wiki = shift;
134	my @freeze_list = $wiki->get_freeze_list;
135	my @pages = $wiki->get_CGI->param("pages");
136	foreach my $page (@pages){
137		my $flag = 0;
138		foreach(@freeze_list){
139			if($_ eq $page){
140				$flag = 1;
141				last;
142			}
143		}
144		if($flag){
145			$wiki->un_freeze_page($page);
146		}
147	}
148}
149
150#==============================================================================
151# �ڡ�������
152#==============================================================================
153sub page_list {
154	my $self = shift;
155	my $wiki = shift;
156	my $cgi  = $wiki->get_CGI();
157
158	my @freeze_list = $wiki->get_freeze_list();
159	my @pages       = $wiki->get_page_list();
160	my $level_list  = $wiki->get_page_level();
161	my $filter = $cgi->param("filter");
162	my $filterType = $cgi->param("filterType");
163
164	if($filterType ne "AND" && $filterType ne "OR" && $filterType ne "NOT"){
165		$filterType = "AND";
166	}
167
168	# �ե��륿����¸���ѥ�᡼���ǻ��ꤵ��Ƥ��ʤ�����ɤ߹��ߡ�
169	if(defined($filter)){
170		&Util::save_config_text($wiki,$self->{filter_file},"$filterType:$filter");
171	} else {
172		$filter = &Util::load_config_text($wiki,$self->{filter_file});
173		my $index = index($filter,":");
174		if($index > 0){
175			$filterType = substr($filter,0,$index);
176			$filter = substr($filter,$index+1);
177		}
178	}
179
180	my $buf = "<h2>�ڡ�������</h2>\n".
181	          "<form action=\"".$wiki->config('script_name')."\" method=\"POST\">\n".
182	          "  <p>\n".
183	          "    �ե��륿\n".
184	          "    <input type=\"text\" name=\"filter\" size=\"30\" value=\"".Util::escapeHTML($filter)."\">\n".
185	          "    <input type=\"radio\" name=\"filterType\" value=\"AND\"".($filterType eq "AND" ? " checked" : "").">AND\n".
186	          "    <input type=\"radio\" name=\"filterType\" value=\"OR\"".($filterType eq "OR" ? " checked" : "").">OR\n".
187	          "    <input type=\"radio\" name=\"filterType\" value=\"NOT\"".($filterType eq "NOT" ? " checked" : "").">NOT\n".
188	          "    <input type=\"submit\" value=\"��ɽ��\">\n".
189	          "  </p>\n".
190	          "  <table>\n".
191	          "  <tr>\n".
192	          "    <th><br></th>\n".
193	          "    <th>����</th>\n".
194	          "    <th>����</th>\n".
195	          "    <th width=\"200\">�ڡ���̾</th>\n".
196	          "    <th>�ǽ���������</th>\n".
197	          "  </tr>\n";
198
199	foreach my $page (@pages){
200		if($filter ne ""){
201			my @dim = split(/\s+/,$filter);
202			my $flag = 0;
203			foreach my $word (split(/\s+/,$filter)){
204				if(index($page,$word) >= 0){
205					if($filterType eq "NOT"){
206						$flag = 0;
207						last;
208					}
209					$flag = 1;
210				} else {
211					if($filterType eq "AND"){
212						$flag = 0;
213						last;
214					} elsif($filterType eq "NOT"){
215						$flag = 1;
216					}
217				}
218			}
219			if($flag==0){
220				next;
221			}
222		}
223		$buf .= "  <tr>\n".
224		        "    <td><input type=\"checkbox\" name=\"pages\" value=\"".&Util::escapeHTML($page)."\"></td>\n";
225
226		# ��뤵��Ƥ��뤫Ĵ�٤�
227		my $is_freeze = 0;
228		foreach(@freeze_list){
229			if($_ eq $page){
230				$is_freeze = 1;
231				last;
232			}
233		}
234		if($is_freeze){
235			$buf .= "    <td align=\"center\">���</td>\n";
236		} else {
237			$buf .= "    <td><br></td>\n";
238		}
239
240		# ���ȥ�٥��Ĵ�٤�
241		if(!defined($level_list->{$page}) || $level_list->{$page}==0){
242			$buf .= "    <td>����</td>\n";
243		} elsif($level_list->{$page}==1){
244			$buf .= "    <td>�桼��</td>\n";
245		} elsif($level_list->{$page}==2){
246			$buf .= "    <td>������</td>\n";
247		}
248
249		$buf .= "    <td><a href=\"".$wiki->config('script_name')."?page=".&Util::url_encode($page)."\">".&Util::escapeHTML($page)."</a></td>\n".
250		        "    <td>".&Util::format_date($wiki->get_last_modified($page))."</td>\n".
251		        "  </tr>\n";
252	}
253
254	$buf .= "  </table>\n".
255	        "  <br>\n".
256	        "  <input type=\"hidden\" name=\"action\" value=\"ADMINPAGE\">\n".
257	        "  <h3>�ڡ��������</h3>\n".
258	        "  <p>�����å������ڡ�������뤷�ޤ�����뤷���ڡ����ϥ�������Τ��Խ��Ȥʤ�ޤ���</p>\n".
259	        "  <input type=\"submit\" name=\"freeze\" value=\" �� �� \">\n".
260	        "  <input type=\"submit\" name=\"unfreeze\" value=\"�����\">\n".
261	        "  <h3>�ڡ����κ��</h3>\n".
262	        "  <p>�����å������ڡ����������ޤ���</p>\n".
263	        "  <input type=\"submit\" name=\"delete\" value=\" �� �� \">\n".
264	        "  <h3>���ȸ��¤�����</h3>\n".
265	        "  <p>�����å������ڡ����λ��ȸ��¤����ꤷ�ޤ���</p>\n".
266	        "  <input type=\"submit\" name=\"show_all\"   value=\" �� �� \">\n".
267	        "  <input type=\"submit\" name=\"show_user\"  value=\"�桼���Τ�\">\n".
268	        "  <input type=\"submit\" name=\"show_admin\" value=\"�����ԤΤ�\">\n".
269	        "</form>\n";
270
271	$wiki->set_title("�ڡ����δ���");
272	return $buf."</ul>\n";
273}
274
275#==============================================================================
276# �ڡ�������������
277#==============================================================================
278sub reload {
279	my $self = shift;
280	my $wiki = shift;
281	$wiki->redirectURL($wiki->config('script_name')."?action=ADMINPAGE");
282}
283
2841;
285