1 ###############################################################################
5 ###############################################################################
12 use Wiki::DefaultStorage;
14 use vars qw($VERSION $DEBUG);
17 #==============================================================================
21 #==============================================================================
27 my $setupfile = shift || 'setup.dat';
28 $self->{"config"} = &Util::load_config_hash(undef,$setupfile);
29 die "setup file ${setupfile} not found" if (keys %{$self->{"config"}} == 0);
30 $self->{"config"}->{"plugin_dir"} = "." unless exists($self->{"config"}->{"plugin_dir"});
31 $self->{"config"}->{"frontpage"} = "FrontPage" unless exists($self->{"config"}->{"frontpage"});
32 unshift(@INC, $self->{"config"}->{"plugin_dir"});
33 $ENV{'TZ'} = $self->{"config"}->{"time_zone"};
34 $CGI::POST_MAX = $self->{"config"}->{"post_max"} if $self->{"config"}->{"post_max"} ne '';
36 # ¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤ò½é´ü²½
37 $self->{"handler"} = {};
38 $self->{"handler_permission"} = {};
39 $self->{"plugin"} = {};
40 $self->{"title"} = "";
42 $self->{"CGI"} = CGI2->new();
45 $self->{"admin_menu"} = ();
46 $self->{"editform"} = ();
48 $self->{"parse_times"} = 0;
49 $self->{"format"} = {};
50 $self->{"installed_plugin"} = ();
51 $self->{"head_info"} = ();
53 # ¥¹¥È¥ì¡¼¥¸¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®
54 if($self->{config}->{"storage"} eq ""){
55 $self->{"storage"} = Wiki::DefaultStorage->new($self);
57 eval ("use ".$self->{config}->{"storage"}.";");
58 $self->{"storage"} = $self->{config}->{"storage"}->new($self);
61 return bless $self,$class;
64 ###############################################################################
66 # ¥æ¡¼¥¶´Ø·¸¤Î¥á¥½¥Ã¥É·²
68 ###############################################################################
69 #==============================================================================
74 # $wiki->add_user(ID,¥Ñ¥¹¥ï¡¼¥É,¥æ¡¼¥¶¥¿¥¤¥×);
77 # ¥æ¡¼¥¶¥¿¥¤¥×¤Ë¤Ï´ÉÍý¼Ô¥æ¡¼¥¶¤Î¾ì¹ç0¡¢°ìÈ̥桼¥¶¤Î¾ì¹ç1¤ò»ØÄꤷ¤Þ¤¹¡£
78 # ¤Ê¤ª¡¢¤³¤Î¥á¥½¥Ã¥É¤Ï¼Â¹Ô»þ¤ËWiki.pm¤Ë¥æ¡¼¥¶¤òÄɲ乤뤿¤á¤Î¤â¤Î¤Ç¡¢
79 # ¤³¤Î¥á¥½¥Ã¥É¤ËÂФ·¤Æ¥æ¡¼¥¶¤òÄɲ䷤Ƥâ±Ê³²½¤Ï¹Ô¤ï¤ì¤Þ¤»¤ó¡£
81 #==============================================================================
88 push(@{$self->{"user"}},{id=>$id,pass=>$pass,type=>$type});
91 #==============================================================================
93 # ¥æ¡¼¥¶¤¬Â¸ºß¤¹¤ë¤«¤É¤¦¤«¤ò³Îǧ¤·¤Þ¤¹
95 #==============================================================================
99 foreach my $user (@{$self->{"user"}}){
100 if($user->{id} eq $id){
107 #==============================================================================
109 # ¥í¥°¥¤¥ó¾ðÊó¤ò¼èÆÀ¤·¤Þ¤¹¡£
110 # ¥í¥°¥¤¥ó¤·¤Æ¤¤¤ë¾ì¹ç¤Ï¥í¥°¥¤¥ó¾ðÊó¤ò´Þ¤ó¤À¥Ï¥Ã¥·¥å¥ê¥Õ¥¡¥ì¥ó¥¹¤ò¡¢
111 # ¥í¥°¥¤¥ó¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ïundef¤òÊÖ¤·¤Þ¤¹¡£
114 # my $info = $wiki->get_login_info();
115 # if(defined($info)){ # ¥í¥°¥¤¥ó¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ïundef
116 # my $id = $info->{id}; # ¥í¥°¥¤¥ó¥æ¡¼¥¶¤ÎID
117 # my $type = $info->{type}; # ¥í¥°¥¤¥ó¥æ¡¼¥¶¤Î¼ïÊÌ(0:´ÉÍý¼Ô 1:°ìÈÌ)
120 #==============================================================================
123 if (exists($self->{'login_info'})){
124 return $self->{'login_info'};
127 my $cgi = $self->get_CGI();
128 return undef unless(defined($cgi));
130 my $session = $cgi->get_session($self);
131 unless(defined($session)){
132 $self->{'login_info'} = undef;
135 my $id = $session->param("wiki_id");
136 my $type = $session->param("wiki_type");
137 my $path = $session->param("wiki_path");
140 my $path_info = $cgi->path_info();
141 if(!defined($path_info)){ $path_info = ""; }
142 if(!defined($path )){ $path = ""; }
143 if(!defined($id )){ $id = ""; }
144 if(!defined($type )){ $type = ""; }
146 if($path_info eq "" && $path ne ""){
147 $self->{'login_info'} = undef;
149 } elsif($path ne "" && !($path_info =~ /^$path($|\/)/)){
150 $self->{'login_info'} = undef;
154 # ¥¯¥Ã¥¡¼¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤¤
155 if($id eq "" || $type eq ""){
156 $self->{'login_info'} = undef;
161 $self->{'login_info'} = {id=>$id,type=>$type,path=>$path};
162 return $self->{'login_info'};
165 #==============================================================================
167 # ¥í¥°¥¤¥ó¥Á¥§¥Ã¥¯¤ò¹Ô¤¤¤Þ¤¹¡£
169 #==============================================================================
174 my $path = $self->get_CGI()->path_info();
175 foreach(@{$self->{"user"}}){
176 if($_->{id} eq $id && $_->{pass} eq $pass){
177 return {id=>$id,pass=>$pass,type=>$_->{type},path=>$path};
183 ###############################################################################
185 # ¥×¥é¥°¥¤¥ó´Ø·¸¤Î¥á¥½¥Ã¥É·²
187 ###############################################################################
188 #==============================================================================
190 # ¥¨¥Ç¥£¥Ã¥È¥Õ¥©¡¼¥à¥×¥é¥°¥¤¥ó¤òÄɲä·¤Þ¤¹
193 # $wiki->add_editform_plugin(¥¨¥Ç¥£¥Ã¥È¥Õ¥©¡¼¥à¥×¥é¥°¥¤¥ó¤Î¥¯¥é¥¹Ì¾,Í¥ÀèÅÙ);
196 # Í¥ÀèÅÙ¤¬Â礤¤¤Û¤É¾å°Ì¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£
198 #==============================================================================
199 sub add_editform_plugin {
203 push(@{$self->{"editform"}},{class=>$plugin,weight=>$weight});
206 #==============================================================================
208 # ÊÔ½¸¥Õ¥©¡¼¥àÍѤΥץ饰¥¤¥ó¤Î½ÐÎϤò¼èÆÀ¤·¤Þ¤¹
210 #==============================================================================
211 sub get_editform_plugin {
214 foreach my $plugin (sort { $b->{weight}<=>$a->{weight} } @{$self->{"editform"}}){
215 my $obj = $self->get_plugin_instance($plugin->{class});
216 $buf .= $obj->editform($self)."\n";
221 #==============================================================================
223 # ´ÉÍý¼ÔÍѤΥá¥Ë¥å¡¼¤òÄɲä·¤Þ¤¹¡£´ÉÍý¼Ô¥æ¡¼¥¶¤¬¥í¥°¥¤¥ó¤·¤¿¾ì¹ç¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£
224 # Í¥ÀèÅÙ¤¬¹â¤¤¤Û¤É¾å¤Î¤Û¤¦¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£
227 # $wiki->add_admin_menu(¥á¥Ë¥å¡¼¹àÌÜ̾,Á«°Ü¤¹¤ëURL,Í¥ÀèÅÙ,¾ÜºÙÀâÌÀ);
229 #==============================================================================
237 push(@{$self->{"admin_menu"}},{label=>$label,url=>$url,weight=>$weight,desc=>$desc,type=>0});
240 #==============================================================================
242 # ¥í¥°¥¤¥ó¥æ¡¼¥¶ÍѤΥá¥Ë¥å¡¼¤òÄɲä·¤Þ¤¹¡£
243 # ¥æ¡¼¥¶¤¬¥í¥°¥¤¥ó¤·¤¿¾ì¹ç¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£´ÉÍý¼Ô¥æ¡¼¥¶¤Î¾ì¹ç¤âɽ¼¨¤µ¤ì¤Þ¤¹¡£
244 # Í¥ÀèÅÙ¤¬¹â¤¤¤Û¤É¾å¤Î¤Û¤¦¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£
247 # $wiki->add_admin_menu(¥á¥Ë¥å¡¼¹àÌÜ̾,Á«°Ü¤¹¤ëURL,Í¥ÀèÅÙ,¾ÜºÙÀâÌÀ);
249 #==============================================================================
257 push(@{$self->{"admin_menu"}},{label=>$label,url=>$url,weight=>$weight,desc=>$desc,type=>1});
260 #==============================================================================
262 # ´ÉÍý¼ÔÍѤΥá¥Ë¥å¡¼¤ò¼èÆÀ¤·¤Þ¤¹¡£
264 #==============================================================================
267 return sort { $b->{weight}<=>$a->{weight} } @{$self->{"admin_menu"}};
270 #==============================================================================
272 # ¥×¥é¥°¥¤¥ó¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¡£¤³¤Î¥á¥½¥Ã¥É¤Ïwiki.cgi¤Ë¤è¤Ã¤Æcall¤µ¤ì¤Þ¤¹¡£
273 # ¥×¥é¥°¥¤¥ó³«È¯¤Ë¤ª¤¤¤ÆÄ̾¤³¤Î¥á¥½¥Ã¥É¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£
275 #==============================================================================
280 if ($plugin =~ /\W/) {
281 return "<div class=\"error\">".Util::escapeHTML("${plugin}¥×¥é¥°¥¤¥ó¤ÏÉÔÀµ¤Ê¥×¥é¥°¥¤¥ó¤Ç¤¹¡£")."</div>";
284 my $module = "plugin::${plugin}::Install";
285 eval 'require &Util::get_module_file($module);'.$module.'::install($self);';
288 return "<div class=\"error\">".Util::escapeHTML("${plugin}¥×¥é¥°¥¤¥ó¤¬¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤¤Þ¤»¤ó¡£$@")."</div>";
290 push(@{$self->{"installed_plugin"}},$plugin);
295 #==============================================================================
297 # ¥×¥é¥°¥¤¥ó¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¤òÄ´¤Ù¤Þ¤¹¡£
299 #==============================================================================
304 foreach (@{$self->{"installed_plugin"}}){
312 #==============================================================================
314 # ¥á¥Ë¥å¡¼¹àÌܤòÄɲä·¤Þ¤¹¡£´û¤ËƱ¤¸Ì¾Á°¤Î¹àÌܤ¬ÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¾å½ñ¤¤·¤Þ¤¹¡£
315 # Í¥ÀèÅÙ¤¬¹â¤¤¤Û¤Éº¸Â¦¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£
318 # $wiki->add_menu(¹àÌÜ̾,URL,Í¥ÀèÅÙ,¥¯¥í¡¼¥ë¤òµñÈݤ¹¤ë¤«¤É¤¦¤«);
321 # ¸¡º÷¥¨¥ó¥¸¥ó¤Ë¥¯¥í¡¼¥ë¤µ¤»¤¿¤¯¤Ê¤¤¾ì¹ç¤ÏÂè4°ú¿ô¤Ë1¡¢µö²Ä¤¹¤ë¾ì¹ç¤Ï0¤ò»ØÄꤷ¤Þ¤¹¡£
322 # ¾Êά¤·¤¿¾ì¹ç¤Ï¥¯¥í¡¼¥ë¤òµö²Ä¤·¤Þ¤¹¡£
324 #==============================================================================
330 my $nofollow = shift;
333 foreach(@{$self->{"menu"}}){
334 if($_->{name} eq $name){
341 push(@{$self->{"menu"}},{name=>$name,href=>$href,weight=>$weight,nofollow=>$nofollow});
345 #===============================================================================
347 # ¥Õ¥Ã¥¯¥×¥é¥°¥¤¥ó¤òÅÐÏ¿¤·¤Þ¤¹¡£ÅÐÏ¿¤·¤¿¥×¥é¥°¥¤¥ó¤Ïdo_hook¥á¥½¥Ã¥É¤Ç¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
350 # $wiki->add_hook(¥Õ¥Ã¥¯Ì¾,¥Õ¥Ã¥¯¥×¥é¥°¥¤¥ó¤Î¥¯¥é¥¹Ì¾);
352 #===============================================================================
358 push(@{$self->{"hook"}->{$name}},$obj);
361 #===============================================================================
363 # add_hook¥á¥½¥Ã¥É¤ÇÅÐÏ¿¤µ¤ì¤¿¥Õ¥Ã¥¯¥×¥é¥°¥¤¥ó¤ò¼Â¹Ô¤·¤Þ¤¹¡£
364 # °ú¿ô¤Ë¤Ï¥Õ¥Ã¥¯¤Î̾Á°¤Ë²Ã¤¨¤ÆǤ°Õ¤Î¥Ñ¥é¥á¡¼¥¿¤òÅϤ¹¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
365 # ¤³¤ì¤é¤Î¥Ñ¥é¥á¡¼¥¿¤Ï¸Æ¤Ó½Ð¤µ¤ì¤ë¥¯¥é¥¹¤Îhook¥á¥½¥Ã¥É¤Î°ú¿ô¤È¤·¤ÆÅϤµ¤ì¤Þ¤¹¡£
368 # $wiki->do_hook(¥Õ¥Ã¥¯Ì¾[,°ú¿ô1[,°ú¿ô2...]]);
370 #===============================================================================
375 foreach my $class (@{$self->{"hook"}->{$name}}){
376 my $obj = $self->get_plugin_instance($class);
377 $obj->hook($self,$name,@_);
381 #==============================================================================
383 # ¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¥×¥é¥°¥¤¥ó¤òÄɲä·¤Þ¤¹¡£
384 # ¥ê¥¯¥¨¥¹¥È»þ¤Ëaction¤È¤¤¤¦¥Ñ¥é¥á¡¼¥¿¤¬°ìÃפ¹¤ë¥¢¥¯¥·¥ç¥ó¤¬¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
387 # $wiki->add_handler(action¥Ñ¥é¥á¡¼¥¿,¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤Î¥¯¥é¥¹Ì¾);
389 #==============================================================================
395 $self->{"handler"}->{$action}=$class;
396 $self->{"handler_permission"}->{$action} = 1;
399 #==============================================================================
401 # ¥í¥°¥¤¥ó¥æ¡¼¥¶ÍѤΥ¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤òÄɲä·¤Þ¤¹¡£
402 # ¤³¤Î¥á¥½¥Ã¥É¤Ë¤è¤Ã¤ÆÄɲ䵤줿¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤Ï¥í¥°¥¤¥ó¤·¤Æ¤¤¤ë¾ì¹ç¤Î¤ß¼Â¹Ô²Äǽ¤Ç¤¹¡£
403 # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹¡£
406 # $wiki->add_user_handler(action¥Ñ¥é¥á¡¼¥¿,¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤Î¥¯¥é¥¹Ì¾);
408 #==============================================================================
409 sub add_user_handler {
414 $self->{"handler"}->{$action}=$class;
415 $self->{"handler_permission"}->{$action} = 2;
418 #==============================================================================
420 # ´ÉÍý¼ÔÍѤΥ¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤òÄɲä·¤Þ¤¹¡£
421 # ¤³¤Î¥á¥½¥Ã¥É¤Ë¤è¤Ã¤ÆÄɲ䵤줿¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤Ï´ÉÍý¼Ô¤È¤·¤Æ¥í¥°¥¤¥ó¤·¤Æ¤¤¤ë¾ì¹ç¤Î¤ß¼Â¹Ô²Äǽ¤Ç¤¹¡£
422 # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹¡£
425 # $wiki->add_admin_handler(action¥Ñ¥é¥á¡¼¥¿,¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤Î¥¯¥é¥¹Ì¾);
427 #==============================================================================
428 sub add_admin_handler {
433 $self->{"handler"}->{$action}=$class;
434 $self->{"handler_permission"}->{$action} = 0;
436 #==============================================================================
438 # ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤òÄɲä·¤Þ¤¹¡£
441 # ¤³¤Î¥á¥½¥Ã¥É¤Ï3.4·Ï¤È¤Î¸ß´¹À¤ò°Ý»ý¤¹¤ë¤¿¤á¤Ë»Ä¤·¤Þ¤·¤¿¡£3.6¤ÇÇѻߤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£
443 #==============================================================================
449 $self->add_inline_plugin($name,$class,"HTML");
451 #==============================================================================
453 # ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤òÅÐÏ¿¤·¤Þ¤¹¡£¥×¥é¥°¥¤¥ó¤Î½ÐÎÏ¥¿¥¤¥×¤Ë¤Ï"WIKI"¤Þ¤¿¤Ï"HTML"¤ò»ØÄꤷ¤Þ¤¹¡£
454 # ¾Êά¤·¤¿¾ì¹ç¤Ï"HTML"¤ò»ØÄꤷ¤¿¤â¤Î¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£
457 # $wiki->add_inline_plugin(¥×¥é¥°¥¤¥ó̾,¥×¥é¥°¥¤¥ó¤Î¥¯¥é¥¹Ì¾,¥×¥é¥°¥¤¥ó¤Î½ÐÎÏ¥¿¥¤¥×);
459 #==============================================================================
460 sub add_inline_plugin {
461 my ($self, $name, $class, $format) = @_;
466 $format = uc($format);
469 $self->{"plugin"}->{$name} = {CLASS=>$class,TYPE=>'inline',FORMAT=>$format};
472 #==============================================================================
474 # ¥Ñ¥é¥°¥é¥Õ¥×¥é¥°¥¤¥ó¤òÅÐÏ¿¤·¤Þ¤¹¡£¥×¥é¥°¥¤¥ó¤Î½ÐÎÏ¥¿¥¤¥×¤Ë¤Ï"WIKI"¤Þ¤¿¤Ï"HTML"¤ò»ØÄꤷ¤Þ¤¹¡£
475 # ¾Êά¤·¤¿¾ì¹ç¤Ï"HTML"¤ò»ØÄꤷ¤¿¤â¤Î¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£
478 # $wiki->add_inline_plugin(¥×¥é¥°¥¤¥ó̾,¥×¥é¥°¥¤¥ó¤Î¥¯¥é¥¹Ì¾,¥×¥é¥°¥¤¥ó¤Î½ÐÎÏ¥¿¥¤¥×);
480 #==============================================================================
481 sub add_paragraph_plugin {
482 my ($self, $name, $class, $format) = @_;
487 $format = uc($format);
490 $self->{"plugin"}->{$name} = {CLASS=>$class,TYPE=>'paragraph',FORMAT=>$format};
493 #==============================================================================
495 # ¥Ö¥í¥Ã¥¯¥×¥é¥°¥¤¥ó¤òÅÐÏ¿¤·¤Þ¤¹¡£¥×¥é¥°¥¤¥ó¤Î½ÐÎÏ¥¿¥¤¥×¤Ë¤Ï"WIKI"¤Þ¤¿¤Ï"HTML"¤ò»ØÄꤷ¤Þ¤¹¡£
496 # ¾Êά¤·¤¿¾ì¹ç¤Ï"HTML"¤ò»ØÄꤷ¤¿¤â¤Î¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£
499 # $wiki->add_block_plugin(¥×¥é¥°¥¤¥ó̾,¥×¥é¥°¥¤¥ó¤Î¥¯¥é¥¹Ì¾,¥×¥é¥°¥¤¥ó¤Î½ÐÎÏ¥¿¥¤¥×);
501 #==============================================================================
502 sub add_block_plugin {
503 my ($self, $name, $class, $format) = @_;
508 $format = uc($format);
511 $self->{"plugin"}->{$name} = {CLASS=>$class,TYPE=>'block',FORMAT=>$format};
514 #==============================================================================
516 # ¥×¥é¥°¥¤¥ó¤Î¾ðÊó¤ò¼èÆÀ¤·¤Þ¤¹
519 # my $info = $wiki->get_plugin_info("include");
520 # my $class = $info->{CLASS}; # ¥×¥é¥°¥¤¥ó¤Î¥¯¥é¥¹Ì¾
521 # my $type = $info->{TYPE}; # inline¡¢paragraph¡¢block¤Î¤¤¤º¤ì¤«
522 # my $format = $info->{FORMAT}; # HTML¤Þ¤¿¤ÏWIKI
524 #==============================================================================
525 sub get_plugin_info {
529 return $self->{plugin}->{$name};
532 #==============================================================================
534 # add_handler¥á¥½¥Ã¥É¤ÇÅÐÏ¿¤µ¤ì¤¿¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤ò¼Â¹Ô¤·¤Þ¤¹¡£
535 # ¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤Îdo_action¥á¥½¥Ã¥É¤ÎÌá¤êÃͤòÊÖ¤·¤Þ¤¹¡£
538 # my $content = $wiki->call_handler(action¥Ñ¥é¥á¡¼¥¿);
540 #==============================================================================
545 if(!defined($action)){
549 my $obj = $self->get_plugin_instance($self->{"handler"}->{$action});
551 unless(defined($obj)){
552 return $self->error(RC_BAD_REQUEST, "ÉÔÀµ¤Ê¥¢¥¯¥·¥ç¥ó¤Ç¤¹¡£");
555 # ´ÉÍý¼ÔÍѤΥ¢¥¯¥·¥ç¥ó
556 if($self->{"handler_permission"}->{$action}==0){
557 my $login = $self->get_login_info();
558 if(!defined($login)){
559 return $self->error(RC_FORBIDDEN, "¥í¥°¥¤¥ó¤·¤Æ¤¤¤Þ¤»¤ó¡£");
561 } elsif($login->{type}!=0){
562 return $self->error(RC_FORBIDDEN, "´ÉÍý¼Ô¸¢¸Â¤¬É¬ÍפǤ¹¡£");
564 return $obj->do_action($self).
565 "<div class=\"comment\"><a href=\"".$self->create_url({action=>"LOGIN"})."\">¥á¥Ë¥å¡¼¤ËÌá¤ë</a></div>";
567 # ¥í¥°¥¤¥ó¥æ¡¼¥¶ÍѤΥ¢¥¯¥·¥ç¥ó
568 } elsif($self->{"handler_permission"}->{$action}==2){
569 my $login = $self->get_login_info();
570 if(!defined($login)){
571 return $self->error(RC_FORBIDDEN, "¥í¥°¥¤¥ó¤·¤Æ¤¤¤Þ¤»¤ó¡£");
573 return $obj->do_action($self).
574 "<div class=\"comment\"><a href=\"".$self->create_url({action=>"LOGIN"})."\">¥á¥Ë¥å¡¼¤ËÌá¤ë</a></div>";
578 return $obj->do_action($self);
582 #===============================================================================
584 # °ú¿ô¤ÇÅϤ·¤¿Wiki¥Õ¥©¡¼¥Þ¥Ã¥È¤Îʸ»úÎó¤òHTML¤ËÊÑ´¹¤·¤ÆÊÖ¤·¤Þ¤¹¡£
587 # my $html = $wiki->process_wiki(ʸ»úÎó);
589 #===============================================================================
595 if($self->{parse_times} >= 50){
596 return $self->error("Wiki::process_wiki¤Î¸Æ¤Ó½Ð¤·²ó¿ô¤¬¾å¸Â¤ò±Û¤¨¤Þ¤·¤¿¡£");
599 $self->{parse_times}++;
600 my $parser = Wiki::HTMLParser->new($self,$mainflg);
601 $parser->parse($source);
602 $self->{parse_times}--;
604 return $parser->{html};
607 #===============================================================================
609 # ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¡¢¥Ñ¥é¥°¥é¥Õ¥×¥é¥°¥¤¥ó¤Î¸Æ¤Ó½Ð¤·¡ÊÆâÉô½èÍýÍѤδؿô¡Ë¡£
610 # ½é´ü¤Î¥á¥½¥Ã¥É¤Î¤¿¤á̿̾µ¬Â§¡Êprivate¥á¥½¥Ã¥É¤Î¥á¥½¥Ã¥É̾¤Ï_¤«¤é»Ï¤á¤ë¡Ë
613 #===============================================================================
619 if(defined($plugin->{error}) && $plugin->{error} ne ""){
620 return "<font class=\"error\">".$plugin->{error}."</font>";
623 my $name = $plugin->{command};
624 my @args = @{$plugin->{args}};
625 my $info = $self->get_plugin_info($name);
626 my $obj = $self->get_plugin_instance($info->{CLASS});
629 return "<font class=\"error\">".&Util::escapeHTML($name)."¥×¥é¥°¥¤¥ó¤Ï¸ºß¤·¤Þ¤»¤ó¡£</font>";
632 if($info->{FORMAT} eq "WIKI"){
633 # ΢µ»ÍÑ(¥×¥é¥°¥¤¥óÆâÉô¤«¤é¥Ñ¡¼¥µ¤ò»È¤¦¾ì¹ç)
634 push(@{$self->{'current_parser'}}, $parser);
635 if($info->{TYPE} eq "inline"){
636 my @result = $parser->parse_line($obj->inline($self,@args));
637 pop(@{$self->{'current_parser'}});
639 } elsif($info->{TYPE} eq "paragraph"){
640 $parser->parse($obj->paragraph($self,@args));
642 $parser->parse($obj->block($self,@args));
645 pop(@{$self->{'current_parser'}});
648 if($info->{TYPE} eq "inline"){
649 return $obj->inline($self,@args);
650 } elsif($info->{TYPE} eq "paragraph"){
651 return $obj->paragraph($self,@args);
653 return $obj->block($self,@args);
659 #==============================================================================
661 # ¥Ñ¡¼¥¹Ãæ¤Î¾ì¹ç¡¢¸½ºß͸ú¤ÊWiki::Parser¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÊֵѤ·¤Þ¤¹¡£
662 # ¥Ñ¡¼¥¹Ãæ¤ÎÆâÍƤò¥×¥é¥°¥¤¥ó¤«¤éÊѹ¹¤·¤¿¤¤¾ì¹ç¤Ë»ÈÍѤ·¤Þ¤¹¡£
664 #==============================================================================
665 sub get_current_parser {
667 my @parsers = @{$self->{'current_parser'}};
668 return $parsers[$#parsers];
671 #==============================================================================
673 # ¥¨¥é¡¼¤Î¾ì¹ç¡¢¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
674 # ¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤«¤é¥¨¥é¡¼¤òÊó¹ð¤¹¤ëºÝ¤Ë»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
681 # return $wiki->error(¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸);
683 # return $wiki->error(¥¨¥é¡¼¥³¡¼¥É, ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸);
686 #==============================================================================
692 if(!defined($message)){
696 printf "Status: %d\n", $status;
699 $self->set_title("¥¨¥é¡¼");
700 $self->get_CGI->param("action","ERROR");
702 return "<div class=\"error\">".Util::escapeHTML($message)."</div>";
705 #===============================================================================
707 # ¥×¥é¥°¥¤¥ó¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò¼èÆÀ¤·¤Þ¤¹¡£Wiki.pm¤ÇÆâÉôŪ¤Ë»ÈÍѤµ¤ì¤ë¥á¥½¥Ã¥É¤Ç¤¹¡£
708 # ¥×¥é¥°¥¤¥ó³«È¯¤Ë¤ª¤¤¤ÆÄ̾¤³¤Î¥á¥½¥Ã¥É¤ò»ÈÍѤ¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£
710 #===============================================================================
711 sub get_plugin_instance {
719 if(!defined($self->{instance}->{$class})){
721 require &Util::get_module_file($class);
724 my $obj = $class->new();
725 $self->{instance}->{$class} = $obj;
729 return $self->{instance}->{$class};
733 #===============================================================================
735 # ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤ò¥Ñ¡¼¥¹¤·¤Æ¥³¥Þ¥ó¥É¤È°ú¿ô¤Ëʬ³ä¤·¤Þ¤¹¡£
737 #===============================================================================
738 sub parse_inline_plugin {
741 my ($cmd, @args_tmp) = split(/ /,$text);
742 my $args_txt = &Util::trim(join(" ",@args_tmp));
743 if($cmd =~ s/\}\}(.*?)$//){
744 return { command=>$cmd, args=>[], post=>"$1 $args_txt"};
753 for($i = 0; $i<length($args_txt); $i++){
754 my $c = substr($args_txt,$i,1);
755 if($quote!=1 && $c eq ","){
759 push(@ret_args,$tmp);
762 } elsif($quote==1 && $c eq "\\"){
769 } elsif($quote==0 && $c eq '"'){
775 } elsif($quote==1 && $c eq '"'){
782 } elsif(($quote==0 || $quote==2) && $c eq '}'){
792 return {error=>"¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤Î¹½Ê¸¤¬ÉÔÀµ¤Ç¤¹¡£"};
800 my $info = $self->get_plugin_info($cmd);
801 return undef if (defined($info->{TYPE}) && $info->{TYPE} ne 'block');
805 push(@ret_args,$tmp);
808 return { command=>$cmd, args=>\@ret_args,
809 post=>substr($args_txt, $i + 1, length($args_txt) - $i)};
812 #==============================================================================
814 # ¥Õ¥©¡¼¥Þ¥Ã¥È¥×¥é¥°¥¤¥ó¤òÄɲä·¤Þ¤¹¡£
815 # ¥Õ¥©¡¼¥Þ¥Ã¥È¥×¥é¥°¥¤¥ó¤Ïconvert_to_fswiki¥á¥½¥Ã¥É¤Èconvert_from_fswiki¥á¥½¥Ã¥É¤ò
816 # ¼ÂÁõ¤·¤¿¥¯¥é¥¹¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£
819 # $wiki->add_format_plugin(ʸˡ̾,¥¯¥é¥¹Ì¾);
821 #==============================================================================
822 sub add_format_plugin {
827 $self->{'format'}->{$name} = $class;
830 #==============================================================================
832 # ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¥Õ¥©¡¼¥Þ¥Ã¥È¥×¥é¥°¥¤¥ó¤Î°ìÍ÷¤ò¼èÆÀ¤·¤Þ¤¹¡£
835 # my @formats = $wiki->get_format_names();
837 #==============================================================================
838 sub get_format_names {
840 my @list = keys(%{$self->{'format'}});
842 push(@list, "FSWiki");
847 #==============================================================================
849 # ³ÆWiki½ñ¼°¤Çµ½Ò¤·¤¿¥½¡¼¥¹¤òFSWiki¤Î½ñ¼°¤ËÊÑ´¹¤·¤Þ¤¹¡£
852 # $source = $wiki->convert_to_fswiki($source,"YukiWiki");
855 # ¥¤¥ó¥é¥¤¥ó½ñ¼°¤Î¤ßÊÑ´¹¤ò¹Ô¤¦¾ì¹ç¤ÏÂè»°°ú¿ô¤Ë1¤òÅϤ·¤Þ¤¹¡£
858 # $source = $wiki->convert_to_fswiki($source,"YukiWiki",1);
860 #==============================================================================
861 sub convert_to_fswiki {
867 my $obj = $self->get_plugin_instance($self->{'format'}->{$type});
868 unless(defined($obj)){
871 $source =~ s/\r\n/\n/g;
872 $source =~ s/\r/\n/g;
874 return $obj->convert_to_fswiki_line($source);
876 return $obj->convert_to_fswiki($source);
881 #==============================================================================
883 # FSWiki¤Î½ñ¼°¤Çµ½Ò¤·¤¿¥½¡¼¥¹¤ò³ÆWiki¤Î½ñ¼°¤ËÊÑ´¹¤·¤Þ¤¹¡£
886 # $source = $wiki->convert_from_fswiki($source,"YukiWiki");
889 # ¥¤¥ó¥é¥¤¥ó½ñ¼°¤Î¤ßÊÑ´¹¤ò¹Ô¤¦¾ì¹ç¤ÏÂè»°°ú¿ô¤Ë1¤òÅϤ·¤Þ¤¹¡£
892 # $source = $wiki->convert_from_fswiki($source,"YukiWiki",1);
894 #==============================================================================
895 sub convert_from_fswiki {
901 my $obj = $self->get_plugin_instance($self->{'format'}->{$type});
902 unless(defined($obj)){
905 $source =~ s/\r\n/\n/g;
906 $source =~ s/\r/\n/g;
908 return $obj->convert_from_fswiki_line($source);
910 return $obj->convert_from_fswiki($source);
915 #==============================================================================
917 # ¸½ºß¤Î¥æ¡¼¥¶¤¬ÊÔ½¸¤Ë»ÈÍѤ¹¤ë¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼èÆÀ¤·¤Þ¤¹¡£
918 # format¥×¥é¥°¥¤¥ó¤¬¥¢¥¯¥Æ¥£¥Ù¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¾ï¤Ë"FSWiki"¤òÊÖ¤·¤Þ¤¹¡£
921 # my $format = $wiki->get_edit_format();
923 #==============================================================================
924 sub get_edit_format {
928 # format¥×¥é¥°¥¤¥ó¤¬¥¢¥¯¥Æ¥£¥Ù¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤ÐFSWiki¥Õ¥©¡¼¥Þ¥Ã¥È¤òÊÖ¤¹
929 unless($self->is_installed("format")){
933 #Ä̾ï¤Ï´Ä¶ÀßÄê²èÌ̤ÇÀßÄꤷ¤¿Wiki¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ÈÍÑ
934 my $config = &Util::load_config_hash($self, $self->config('config_file'));
935 my $format = $config->{site_wiki_format};
937 # Cookie¤Ë¥Õ¥©¡¼¥Þ¥Ã¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¤½¤Á¤é¤ò»ÈÍÑ
938 #(⤷¡¢config.dat¥Õ¥¡¥¤¥ë¤«¤é¤Î¼èÆÀ»ØÄê»þ¤ÏCookie¤ò̵»ë)
939 if($from ne "config"){
940 my $cgi = $self->get_CGI();
941 if($cgi->cookie(-name=>'edit_format') ne ""){
942 $format = $cgi->cookie(-name=>'edit_format');
953 #==============================================================================
955 # head¥¿¥°Æâ¤Ë½ÐÎϤ¹¤ë¾ðÊó¤òÄɲä·¤Þ¤¹¡£
956 # ¤¿¤À¤·¥µ¥¤¥È¥Æ¥ó¥×¥ì¡¼¥È¤¬Âбþ¤·¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
959 # $wiki->add_head_info("<link rel=\"alternate\" type=\"application/rss+xml\" title=\"RSS\" href=\"?action=RSS\">");
961 #==============================================================================
966 push(@{$self->{'head_info'}},$info);
969 ###############################################################################
971 # Åà·ë¤Ë´Ø¤¹¤ë¥á¥½¥Ã¥É·²
973 ###############################################################################
974 #==============================================================================
979 # $wiki->freeze_page(¥Ú¡¼¥¸Ì¾);
981 #==============================================================================
984 $self->{"storage"}->freeze_page(@_);
987 #==============================================================================
989 # ¥Ú¡¼¥¸¤ÎÅà·ë¤ò²ò½ü¤·¤Þ¤¹
992 # $wiki->un_freeze_page(¥Ú¡¼¥¸Ì¾);
994 #==============================================================================
997 $self->{"storage"}->un_freeze_page(@_);
1000 #==============================================================================
1002 # Åà·ë¤µ¤ì¤Æ¤¤¤ë¥Ú¡¼¥¸¤Î¥ê¥¹¥È¤ò¼èÆÀ¤·¤Þ¤¹¡£
1004 #==============================================================================
1005 sub get_freeze_list {
1007 return $self->{"storage"}->get_freeze_list();
1010 #==============================================================================
1012 # °ú¿ô¤ÇÅϤ·¤¿¥Ú¡¼¥¸¤¬Åà·ëÃ椫¤É¤¦¤«¤·¤é¤Ù¤Þ¤¹
1015 # if($wiki->is_freeze(¥Ú¡¼¥¸Ì¾)){
1019 #==============================================================================
1025 if($page =~ /(^.*?[^:]):([^:].*?$)/){
1030 return $self->{storage}->is_freeze($page,$path);
1033 #==============================================================================
1035 # °ú¿ô¤ÇÅϤ·¤¿¥Ú¡¼¥¸¤¬ÊÔ½¸²Äǽ¤«¤É¤¦¤«¤òÄ´¤Ù¤Þ¤¹¡£
1036 # ÊÔ½¸ÉԲĥ⡼¥É¡Êsetup.pl¤Ç$accept_edit¤¬0¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡Ë¤Ï¥í¥°¥¤¥ó¤·¤Æ¤¤¤ì¤ÐÊÔ½¸²Äǽ¡¢
1037 # ¥Ú¡¼¥¸¤¬Åà·ë¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï´ÉÍý¼Ô¥æ¡¼¥¶¤Ç¥í¥°¥¤¥ó¤·¤Æ¤¤¤ë¾ì¹ç¤ËÊÔ½¸²Äǽ¤È¤Ê¤ê¤Þ¤¹¡£
1040 # if($wiki->can_modify_page(¥Ú¡¼¥¸Ì¾)){
1044 #==============================================================================
1045 sub can_modify_page {
1048 my $login = $self->get_login_info();
1049 if($self->config('accept_edit')==0 && !defined($login)){
1052 if($self->config('accept_edit')==2 && (!defined($login) || $login->{type}!=0)){
1055 if($self->is_freeze($page) && (!defined($login) || $login->{type}!=0)){
1058 unless($self->can_show($page)){
1064 ###############################################################################
1066 # »²¾È¸¢¸Â¤Ë´Ø¤¹¤ë¥á¥½¥Ã¥É·²
1068 ###############################################################################
1069 #==============================================================================
1071 # ¥Ú¡¼¥¸¤Î»²¾È¥ì¥Ù¥ë¤òÀßÄꤷ¤Þ¤¹¡£
1074 # <li>0 - Á´°÷¤Ë¸ø³«</li>
1075 # <li>1 - ¥æ¡¼¥¶¤Ë¸ø³«</li>
1076 # <li>2 - ´ÉÍý¼Ô¤Ë¸ø³«</li>
1079 # $wiki->set_page_level(¥Ú¡¼¥¸Ì¾,¸ø³«¥ì¥Ù¥ë);
1081 #==============================================================================
1082 sub set_page_level {
1087 $self->{"storage"}->set_page_level($page,$level);
1089 # $level ¤¬Ì¤ÄêµÁ¤Ê¤é¥Ú¡¼¥¸¥Ç¡¼¥¿ºï½ü¤Ê¤Î¤Ç¡¢¥Õ¥Ã¥¯´ØÏ¢½èÍýÉÔÍס£
1090 return if (not defined $level);
1092 # ½èÍý¤ÎÀ®Èݤò¸¡ºº¡£
1093 my $new_level = $self->get_page_level($page);
1094 if ($new_level != $level) {
1095 die "¥Ú¡¼¥¸ '$page' ¤Î»²¾È¸¢¸Â¥ì¥Ù¥ë¤ò '$level' ¤ËÊѹ¹¤·¤è¤¦¤È¤·¤Þ¤·¤¿¤¬¼ºÇÔ¤·¤Þ¤·¤¿¡£";
1098 # ¥Ú¡¼¥¸¥ì¥Ù¥ë¤ÎÊѹ¹¤ËÀ®¸ù¤·¤¿¤Î¤Ç¡¢¥Õ¥Ã¥¯¤òȯ¹Ô¡£
1099 $self->do_hook('change_page_level', $page, $new_level);
1102 #==============================================================================
1104 # ¥Ú¡¼¥¸¤Î»²¾È¥ì¥Ù¥ë¤ò¼èÆÀ¤·¤Þ¤¹¡£
1105 # ¥Ú¡¼¥¸Ì¾¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢Á´¤Æ¤Î¥Ú¡¼¥¸¤Î»²¾È¥ì¥Ù¥ë¤ò
1106 # ¥Ï¥Ã¥·¥å¥ê¥Õ¥¡¥ì¥ó¥¹¤ÇÊÖ¤·¤Þ¤¹¡£
1109 # <li>0 - Á´°÷¤Ë¸ø³«</li>
1110 # <li>1 - ¥æ¡¼¥¶¤Ë¸ø³«</li>
1111 # <li>2 - ´ÉÍý¼Ô¤Ë¸ø³«</li>
1114 # my $level = $get_page_level(¥Ú¡¼¥¸Ì¾);
1116 #==============================================================================
1117 sub get_page_level {
1122 if($page =~ /(^.*?[^:]):([^:].*?$)/){
1127 $self->{"storage"}->get_page_level($page,$path);
1130 #==============================================================================
1132 # ¸½ºß¤Î¥æ¡¼¥¶¸¢¸Â¤Ç±ÜÍ÷²Äǽ¤Ê¥Ú¡¼¥¸¥ì¥Ù¥ë¤Î¾å¸ÂÃͤòµá¤á¤Þ¤¹¡£
1135 # my $can_show_max = $wiki->_get_can_show_max();
1137 #==============================================================================
1138 sub _get_can_show_max {
1141 # ¡Ö±ÜÍ÷²Äǽ¤Ê page level ¤Î¾å¸ÂÃ͡פ¬´ûÃΤʤé¤Ð¡¢¤½¤ì¤òÊֵѡ£
1142 if (exists $self->{'can_show_max'}) {
1143 return $self->{'can_show_max'};
1146 # Wiki Á´ÂΤαÜÍ÷¸¢¸Â¤ÎÀßÄêÃͤȡ¢±ÜÍ÷¼Ô¤Î¥æ¡¼¥¶¸¢¸Â¥ì¥Ù¥ë¤òµá¤á¤ë¡£
1147 my $accept_show = $self->config('accept_show'); # Wiki Á´ÂΤαÜÍ÷¸¢¸Â
1148 my $login_user = $self->get_login_info(); # ¸½ºß¤Î login ¾ðÊó
1149 my $user_level # ¥æ¡¼¥¶¸¢¸Â¥ì¥Ù¥ë
1150 = (not defined $login_user) ? 0 # Èó¥í¥°¥¤¥ó¥æ¡¼¥¶
1151 : ($login_user->{type} != 0) ? 1 # ¥í¥°¥¤¥ó¥æ¡¼¥¶
1154 # Wiki Á´ÂΤαÜÍ÷¸¢¸Â¤Ë㤷¤Æ¤¤¤ë¥æ¡¼¥¶¤Ê¤é¡¢
1155 if ($user_level >= $accept_show) {
1156 # ¡Ö±ÜÍ÷²Äǽ¤Ê page level ¾å¸ÂÃ͡פϡ¢¥æ¡¼¥¶¸¢¸Â¥ì¥Ù¥ë¤ËÅù¤·¤¤¡£
1157 return $self->{'can_show_max'} = $user_level;
1160 # Wiki Á´ÂΤαÜÍ÷¸¢¸Â¤Ë㤷¤Æ¤¤¤Ê¤¤¥æ¡¼¥¶¤Ê¤Î¤Ç¡¢
1161 # ¡Ö±ÜÍ÷²Äǽ¤Ê page level ¾å¸ÂÃÍ¡×¤Ï -1¡£¤¹¤Ê¤ï¤Á¡¢Á´¥Ú¡¼¥¸±ÜÍ÷ÉԲġ£
1162 return $self->{'can_show_max'} = -1;
1165 #==============================================================================
1167 # ¥Ú¡¼¥¸¤¬»²¾È²Äǽ¤«¤É¤¦¤«¤ò¼èÆÀ¤·¤Þ¤¹¡£
1170 # if($wiki->can_show(¥Ú¡¼¥¸Ì¾)){
1176 #==============================================================================
1178 my ($self, $page) = @_;
1180 #¡Ö±ÜÍ÷²Äǽ page level ¾å¸Â¡×¤¬Ì¤ÃΤʤé¤Ð¡¢µá¤á¤ë¡£
1181 if (not exists $self->{'can_show_max'}) {
1182 $self->_get_can_show_max();
1185 # page level ¤¬¡¢±ÜÍ÷²Äǽ page level ¾å¸Â°Ê²¼¤Ê¤é¿¿¤òÊÖ¤¹¡£
1186 return ($self->get_page_level($page) <= $self->{'can_show_max'});
1189 ###############################################################################
1191 # ¤½¤Î¾¤Î¥á¥½¥Ã¥É·²
1193 ###############################################################################
1194 #==============================================================================
1196 # ¥Ú¡¼¥¸¤Ë¥¸¥ã¥ó¥×¤¹¤ë¤¿¤á¤ÎURL¤òÀ¸À®¤¹¤ë¥æ¡¼¥Æ¥£¥ê¥Æ¥£¥á¥½¥Ã¥É¤Ç¤¹¡£
1197 # °ú¿ô¤È¤·¤Æ¥Ú¡¼¥¸Ì¾¤òÅϤ·¤Þ¤¹¡£
1200 # $wiki->create_page_url("FrontPage");
1203 # ¾åµ¤Î¥³¡¼¥É¤ÏÄ̾°Ê²¼¤ÎURL¤òÀ¸À®¤·¤Þ¤¹¡£
1206 # wiki.cgi?page=FrontPage
1208 #==============================================================================
1209 sub create_page_url {
1212 return $self->create_url({page=>$page});
1215 #==============================================================================
1217 # Ǥ°Õ¤ÎURL¤òÀ¸À®¤¹¤ë¤¿¤á¤Î¥æ¡¼¥Æ¥£¥ê¥Æ¥£¥á¥½¥Ã¥É¤Ç¤¹¡£
1218 # °ú¿ô¤È¤·¤Æ¥Ñ¥é¥á¡¼¥¿¤Î¥Ï¥Ã¥·¥å¥ê¥Õ¥¡¥ì¥ó¥¹¤òÅϤ·¤Þ¤¹¡£
1221 # $wiki->create_url({action=>HOGE,type=>1});
1224 # ¾åµ¤Î¥³¡¼¥É¤ÏÄ̾°Ê²¼¤ÎURL¤òÀ¸À®¤·¤Þ¤¹¡£
1227 # wiki.cgi?action=HOGE&type=1
1229 #==============================================================================
1233 my $url = $self->config('script_name');
1235 foreach my $key (keys(%$params)){
1239 $query .= Util::url_encode($key)."=".Util::url_encode($params->{$key});
1247 #==============================================================================
1249 # ¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥éÃæ¤Ç¥¿¥¤¥È¥ë¤òÀßÄꤹ¤ë¾ì¹ç¤Ë»ÈÍѤ·¤Þ¤¹¡£
1252 # $wiki->set_title(¥¿¥¤¥È¥ë[,ÊÔ½¸·Ï¤Î¥Ú¡¼¥¸¤¬¤É¤¦¤«]);
1255 # ÊÔ½¸·Ï¤Î²èÌ̤ξì¹ç¡¢ÂèÆó°ú¿ô¤Ë1¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
1256 # ¥í¥Ü¥Ã¥ÈÂкöÍѤ˰ʲ¼¤ÎMETA¥¿¥°¤¬½ÐÎϤµ¤ì¤Þ¤¹¡£
1259 # <meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
1261 #==============================================================================
1266 $self->{"title"} = $title;
1267 $self->{"edit"} = 1 if $edit;
1270 #==============================================================================
1272 # ¥¿¥¤¥È¥ë¤ò¼èÆÀ¤·¤Þ¤¹¡£
1274 #==============================================================================
1277 return $self->{"title"};
1280 #==============================================================================
1282 # ¥Ú¡¼¥¸¤Î°ìÍ÷¤ò¼èÆÀ¤·¤Þ¤¹¡£
1283 # °ú¿ô¤È¤·¤Æ¥Ï¥Ã¥·¥å¥ê¥Õ¥¡¥ì¥ó¥¹¤òÅϤ¹¤³¤È¤Ç¼èÆÀÆâÍƤò»ØÄꤹ¤ë¤³¤È¤¬²Äǽ¡£
1284 # ¥Ç¥Õ¥©¥ë¥È¤Ç¤ÏÁ´¤Æ¤Î¥Ú¡¼¥¸¤ò̾Á°¤Ç¥½¡¼¥È¤·¤¿¥ê¥¹¥È¤òÊֵѤ¹¤ë¡£
1287 # °Ê²¼¤ÎÎã¤Ï»²¾È¸¢¤Î¤¢¤ë¥Ú¡¼¥¸¤Î¤ß¼èÆÀ¤·¡¢¹¹¿·Æü»þ¤Ç¥½¡¼¥È¤¹¤ë¡£
1290 # my @list = $wiki->get_page_list({-sort => 'last_modified',
1291 # -permit => 'show'});
1294 # °Ê²¼¤ÎÎã¤ÏÁ´¤Æ¤Î¥Ú¡¼¥¸¤ò¼èÆÀ¤·¡¢Ì¾Á°¤Ç¥½¡¼¥È¤¹¤ë¡£
1297 # my @list = $wiki->get_page_list({-sort => 'name'});
1300 # °Ê²¼¤ÎÎã¤ÏºÇ¿·¤Î10·ï¤ò¼èÆÀ¤¹¤ë¡£
1303 # my @list = $wiki->get_page_list({-sort=>'last_modified',-max=>10});
1305 #==============================================================================
1310 return $self->{"storage"}->get_page_list($args);
1314 #==============================================================================
1316 # ¥Ú¡¼¥¸¤ÎʪÍýŪ¤Ê¡Ê¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤Î¹¹¿·Æü»þ¡ËºÇ½ª¹¹¿·»þ¹ï¤ò¼èÆÀ¤·¤Þ¤¹¡£
1319 # my $modified = $wiki->get_last_modified(¥Ú¡¼¥¸Ì¾);
1321 #==============================================================================
1322 sub get_last_modified {
1324 return $self->{"storage"}->get_last_modified(@_);
1327 #==============================================================================
1329 # ¥Ú¡¼¥¸ÏÀÍýŪ¤ÊºÇ½ª¹¹¿·»þ¹ï¤ò¼èÆÀ¤·¤Þ¤¹¡£
1330 # ¡Ö¥¿¥¤¥à¥¹¥¿¥ó¥×¤ò¹¹¿·¤·¤Ê¤¤¡×¤Ë¥Á¥§¥Ã¥¯¤òÆþ¤ì¤Æ¥Ú¡¼¥¸¤òÊݸ¤·¤¿¾ì¹ç¤Ï
1331 # ¤³¤Î¥á¥½¥Ã¥É¤ÇÊÖ¤µ¤ì¤ëÆü»þ¤ÏÊݸÁ°¤Î¤â¤Î¤Ë¤Ê¤ê¤Þ¤¹¡£
1334 # my $modified = $wiki->get_last_modified2(¥Ú¡¼¥¸Ì¾);
1336 #==============================================================================
1337 sub get_last_modified2 {
1339 return $self->{"storage"}->get_last_modified2(@_);
1342 #==============================================================================
1344 # ¥Ú¡¼¥¸¤Î¥½¡¼¥¹¤ò¼èÆÀ¤·¤Þ¤¹¡£
1347 # Âè»°°ú¿ô¤Ë¥Õ¥©¡¼¥Þ¥Ã¥È̾¤òÅϤ·¤¿¾ì¹ç¤Î¤ß¡¢¥Õ¥©¡¼¥Þ¥Ã¥È¥×¥é¥°¥¤¥ó¤Ë¤è¤ë
1348 # ¥½¡¼¥¹¤ÎÊÑ´¹¤ò¹Ô¤¤¤Þ¤¹¡£¤½¤ì°Ê³°¤Î¾ì¹ç¤ÏɬÍפ˱þ¤¸¤Æ¥×¥é¥°¥¤¥ó¦¤Ç
1349 # Wiki::convert_from_fswiki¥á¥½¥Ã¥É¤ò¸Æ¤ó¤ÇÊÑ´¹¤ò¹Ô¤¤¤Þ¤¹¡£
1351 #==============================================================================
1358 if($page =~ /(^.*?[^:]):([^:].*?$)/){
1363 my $content = $self->{"storage"}->get_page($page,$path);
1365 if($format eq "" || $format eq "FSWiki"){
1368 return $self->convert_from_fswiki($content,$format);
1372 #==============================================================================
1374 # ¥Ð¥Ã¥¯¥¢¥Ã¥×¤µ¤ì¤¿¥½¡¼¥¹¤ò¼èÆÀ¤·¤Þ¤¹¡£¥Ð¥Ã¥¯¥¢¥Ã¥×¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ï¶õʸ»úÎó¤òÊÖ¤·¤Þ¤¹¡£
1375 # À¤Âå¥Ð¥Ã¥¯¥¢¥Ã¥×¤ËÂбþ¤·¤¿¥¹¥È¥ì¡¼¥¸¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤ÏÂèÆó°ú¿ô¤Ë¼èÆÀ¤¹¤ëÀ¤Âå¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
1378 # # À¤Âå¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò»ÈÍѤ·¤Æ¤¤¤Ê¤¤¾ì¹ç
1379 # my $backup = $wiki->get_backup(¥Ú¡¼¥¸Ì¾);
1381 # # À¤Âå¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç
1382 # my $backup = $wiki->get_backup(¥Ú¡¼¥¸Ì¾,À¤Âå);
1385 # À¤Âå¤Ï¸Å¤¤¤â¤Î¤«¤é½ç¤Ë0¡Á¤Î¿ôÃͤǻØÄꤷ¤Þ¤¹¡£
1387 #==============================================================================
1390 return $self->{"storage"}->get_backup(@_);
1393 #==============================================================================
1395 # ¥Ú¡¼¥¸¤òÊݸ¤·¤Þ¤¹¡£
1398 # $wiki->save_page(¥Ú¡¼¥¸Ì¾,¥Ú¡¼¥¸ÆâÍÆ);
1401 # ¥Õ¥©¡¼¥Þ¥Ã¥È¥×¥é¥°¥¤¥ó¤Ë¤è¤ë¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎÊÑ´¹¤Ï¹Ô¤ï¤ì¤Þ¤»¤ó¡£
1402 # ¤Ä¤Þ¤ê¡¢¥Õ¥©¡¼¥Þ¥Ã¥È¥×¥é¥°¥¤¥ó¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¡¢¤³¤Î¥á¥½¥Ã¥É¤ËÅϤ¹
1403 # Wiki¥½¡¼¥¹¤Ï»öÁ°¤ËFSWiki·Á¼°¤ËÊÑ´¹¤µ¤ì¤¿¥½¡¼¥¹¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
1406 # Êݸ»þ¤Ë¥¿¥¤¥à¥¹¥¿¥ó¥×¤ò¹¹¿·¤·¤Ê¤¤¾ì¹ç¡¢Âè»°°ú¿ô¤Ë1¤òÅϤ·¤Þ¤¹¡£
1409 # $wiki->save_page(¥Ú¡¼¥¸Ì¾,¥Ú¡¼¥¸ÆâÍÆ,1);
1412 #==============================================================================
1415 my $pagename = shift;
1416 my $content = shift;
1419 # ¥Ú¡¼¥¸Ì¾¤ò¥Á¥§¥Ã¥¯
1420 if($pagename =~ /([\|\[\]])|^:|([^:]:[^:])/){
1421 die "¥Ú¡¼¥¸Ì¾¤Ë»ÈÍѤǤ¤Ê¤¤Ê¸»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£";
1423 # ¤¤¤Ã¤¿¤ó¥Ñ¥é¥á¡¼¥¿¤ò¾å½ñ¤
1424 $self->get_CGI->param("page" ,$pagename);
1425 $self->get_CGI->param("content",$content);
1426 $self->do_hook("save_before");
1427 # ¥Ñ¥é¥á¡¼¥¿¤òÆɤ߹þ¤ßľ¤¹
1428 $content = $self->get_CGI()->param("content");
1430 if($self->{"storage"}->save_page($pagename,$content,$sage)){
1432 $self->do_hook("save_after");
1434 $self->do_hook("delete");
1439 #===============================================================================
1441 # ¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¤«¤É¤¦¤«Ä´¤Ù¤Þ¤¹¡£
1444 # if($wiki->page_exists(¥Ú¡¼¥¸Ì¾)){
1445 # # ¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¾ì¹ç¤Î½èÍý
1447 # # ¥Ú¡¼¥¸¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Î½èÍý
1450 #===============================================================================
1456 if($page =~ /(^.*?[^:]):([^:].*?$)/){
1461 # InterWiki·Á¼°¤Î»ØÄê¤Ç¥É¥Ã¥È¤ò´Þ¤à¤³¤È¤Ï¤Ç¤¤Ê¤¤
1462 if(defined($path) && index($path,".")!=-1){
1466 return $self->{"storage"}->page_exists($page,$path);
1469 #===============================================================================
1471 # CGI¥ª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ
1474 # my $cgi = $wiki->get_CGI;
1476 #===============================================================================
1479 return $self->{"CGI"};
1482 #==============================================================================
1484 # °ú¿ô¤ÇÅϤ·¤¿¥Ú¡¼¥¸¤Ë¥ê¥À¥¤¥ì¥¯¥È¤·¤Þ¤¹¡£
1485 # ¥Ú¡¼¥¸¤ÎÊݸ¸å¤Ë¥Ú¡¼¥¸¤òºÆɽ¼¨¤¹¤ë¾ì¹ç¤Ï¤³¤Î¥á¥½¥Ã¥É¤ò»ÈÍѤ·¤Æ²¼¤µ¤¤¡£
1486 # ¤Ê¤ª¡¢¤³¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤È¤½¤³¤Ç¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô¤Ï½ªÎ»¤·¡¢¸Æ¤Ó½Ð¤·¸µ¤ËÀ©¸æ¤ÏÌá¤ê¤Þ¤»¤ó¡£
1489 # $wiki->redirect("FrontPage");
1492 # ÂèÆó°ú¿ô¤Ë¥Ñ¡¼¥ÈÈÖ¹æ¤òÅϤ¹¤È¤½¤Î¥Ñ¡¼¥È¤Ë¥ê¥À¥¤¥ì¥¯¥È¤·¤Þ¤¹¡£
1495 # $wiki->redirect("FrontPage", 1);
1498 #==============================================================================
1503 my $url = $self->create_page_url($page);
1505 $url .= "#p".Util::url_encode($part);
1507 $self->redirectURL($url);
1510 #==============================================================================
1512 # »ØÄê¤ÎURL¤Ë¥ê¥À¥¤¥ì¥¯¥È¤·¤Þ¤¹¡£
1513 # ¤³¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤È¤½¤³¤Ç¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô¤Ï½ªÎ»¤·¡¢¸Æ¤Ó½Ð¤·¸µ¤ËÀ©¸æ¤ÏÌá¤ê¤Þ¤»¤ó¡£
1516 # $wiki->redirectURL(¥ê¥À¥¤¥ì¥¯¥È¤¹¤ëURL);
1518 #==============================================================================
1523 # Location¥¿¥°¤Ç¥ê¥À¥¤¥ì¥¯¥È
1524 if($self->config('redirect')==1){
1525 my ($hoge,$param) = split(/\?/,$url);
1526 $url = $self->get_CGI->url().$self->get_CGI()->path_info();
1528 $url = "$url?$param";
1530 print "Location: $url\n\n";
1532 # META¥¿¥°¤Ç¥ê¥À¥¤¥ì¥¯¥È
1534 my $tmpl = HTML::Template->new(filename=>$self->config('tmpl_dir')."/redirect.tmpl",
1535 die_on_bad_params => 0);
1537 $tmpl->param(URL=>$url);
1539 print "Content-Type: text/html\n\n";
1540 print $tmpl->output();
1545 #==============================================================================
1547 # ¥°¥í¡¼¥Ð¥ëÀßÄê¤ò¼èÆÀ¤â¤·¤¯¤ÏÊѹ¹¤·¤Þ¤¹
1550 # # ¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤ò³ÊǼ¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê
1551 # my $data_dir = $wiki->config('data_dir');
1553 # # ÀßÄê¤ò$data_dir¤Ç¾å½ñ¤
1554 # $wiki->config('data_dir',$data_dir);
1556 #==============================================================================
1561 if(defined($value)){
1562 $self->{config}->{$name} = $value;
1564 return $self->{config}->{$name};
1567 ###############################################################################
1569 # Farm´Ø·¸¤Î¥á¥½¥Ã¥É·²
1571 ###############################################################################
1572 #==============================================================================
1574 # Farmµ¡Ç½¤¬Í¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤«¤É¤¦¤«¤ò¼èÆÀ¤·¤Þ¤¹
1577 # if($wiki->farm_is_enable()){
1578 # # Farm¤¬Í¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¤¤Î½èÍý
1580 # # Farm¤¬Ìµ¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¤¤Î½èÍý
1583 #==============================================================================
1584 sub farm_is_enable {
1586 my $farm_config = &Util::load_config_hash($self,$self->config('farmconf_file'));
1587 if(defined $farm_config->{usefarm} and $farm_config->{usefarm}==1){
1594 #==============================================================================
1596 # »ÒWiki¤òºîÀ®¤·¤Þ¤¹¡£°ú¿ô¤Ë¤ÏWiki¤Î̾Á°¡¢ºîÀ®¤¹¤ëWiki¥µ¥¤¥È¤Î´ÉÍý¼ÔID¡¢¥Ñ¥¹¥ï¡¼¥É¤òÅϤ·¤Þ¤¹¡£
1597 # ¤³¤Î¥á¥½¥Ã¥ÉÆâ¤Ç¤ÏWiki¥µ¥¤¥È̾¤Î¥Ð¥ê¥Ç¡¼¥·¥ç¥ó¤ä½ÅÊ£¥Á¥§¥Ã¥¯¤Ï¹Ô¤ï¤ì¤Þ¤»¤ó¡£
1598 # »öÁ°¤Ë¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£¤³¤Î¥á¥½¥Ã¥É¤Ïfarm¥×¥é¥°¥¤¥ó¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Î¤ß»ÈÍѲÄǽ¤Ç¤¹¡£
1601 # $wiki->create_wiki(Wiki¥µ¥¤¥È̾,´ÉÍý¼ÔID,¥Ñ¥¹¥ï¡¼¥É);
1603 #==============================================================================
1610 # data¡¢backup¥Ç¥£¥ì¥¯¥È¥ê¤ò·¡¤ë½èÍý¤ÏStorage¤ËǤ¤»¤¿¤Û¤¦¤¬¤¤¤¤¤«¤Ê¡©
1611 unless($self->wiki_exists($child)){
1613 # ¥³¥¢¤Ç¥µ¥Ý¡¼¥È¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ò·¡¤ë
1614 mkpath($self->config('data_dir' )."/$child") or die $!;
1615 mkpath($self->config('backup_dir')."/$child") or die $!;
1616 mkpath($self->config('config_dir')."/$child") or die $!;
1617 mkpath($self->config('log_dir' )."/$child") or die $!;
1620 copy($self->config('config_dir')."/".$self->config('config_file'),
1621 $self->config('config_dir')."/$child/".$self->config('config_file')) or die $!;
1622 copy($self->config('config_dir')."/".$self->config('usercss_file'),
1623 $self->config('config_dir')."/$child/".$self->config('usercss_file')) or die $!;
1624 copy($self->config('config_dir')."/".$self->config('plugin_file'),
1625 $self->config('config_dir')."/$child/".$self->config('plugin_file')) or die $!;
1626 copy($self->config('config_dir')."/".$self->config('mime_file'),
1627 $self->config('config_dir')."/$child/".$self->config('mime_file')) or die $!;
1629 # ´ÉÍý¥æ¡¼¥¶¤ÎºîÀ®¡Ê¤³¤³¤Çºî¤ë¤Î¤Ï¤Á¤ç¤Ã¤È¥¢¥ì¤«¤â¡¦¡¦¡¦¡Ë
1630 open(USERDAT,">".$self->config('config_dir')."/$child/".$self->config('userdat_file')) or die $!;
1631 print USERDAT "$id=".&Util::md5($pass,$id)."\t0\n";
1634 # ¥Æ¥ó¥×¥ì¡¼¥È¤«¤é¥Ú¡¼¥¸¤Î¥³¥Ô¡¼
1635 my $farm_config = &Util::load_config_hash($self,$self->config('farmconf_file'));
1636 if($farm_config->{'use_template'}==1 && $child ne "template"){
1637 my $template = $self->config('data_dir')."/template";
1638 my $depth = $self->_get_wiki_depth();
1640 while((!(-e $template) || !(-d $template)) && $count < $depth && $farm_config->{'search_parent'}==1){
1641 $template =~ s/\/template$//;
1642 $template = $template."/../template";
1645 if(-e $template && -d $template){
1646 opendir(DIR,$template) or die $!;
1647 while(my $entry = readdir(DIR)){
1648 if($entry =~ /\.wiki$/){
1649 copy($template."/$entry",$self->config('data_dir')."/$child/$entry");
1655 # create_wiki¥Õ¥Ã¥¯¤Î¸Æ¤Ó½Ð¤·
1656 $self->do_hook("create_wiki");
1659 # ¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¥¯¥ê¡¼¥ó¥¢¥Ã¥×½èÍý
1662 # ¤³¤³¤Ï¥¨¥é¡¼¤¬½Ð¤Æ¤â³¹Ô
1664 $self->remove_wiki("/$child");
1666 die "$child¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£È¯À¸¤·¤¿¥¨¥é¡¼¤Ï°Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹¡£\n\n$error";
1671 #==============================================================================
1673 # ¸½ºß¤ÎWiki¤Î³¬ÁؤòÊֵѤ·¤Þ¤¹¡£¥ë¡¼¥È¤Î¾ì¹ç¤Ï0¡¢»ÒWiki¤Î¾ì¹ç¤Ï1¡¢
1674 # ¹Wiki¤Î¾ì¹ç¤Ï2¡Ä¤È¤¤¤¦¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
1676 #==============================================================================
1677 sub _get_wiki_depth {
1679 my $path_info = $self->get_CGI()->path_info();
1680 $path_info =~ s/^\///;
1681 my $depth = split(/\//,$path_info);
1685 #==============================================================================
1687 # »ÒWiki¤òºï½ü¤·¤Þ¤¹¡£°ú¿ô¤Ë¤Ïºï½ü¤¹¤ëWiki¥µ¥¤¥È¤Î¥Ñ¥¹¡ÊPATH_INFOÉôʬ¡Ë¤òÅϤ·¤Þ¤¹¡£
1688 # ¤³¤Î¥á¥½¥Ã¥É¤Ïfarm¥×¥é¥°¥¤¥ó¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Î¤ß»ÈÍѲÄǽ¤Ç¤¹¡£
1691 # $wiki->remove_wiki(Wiki¥µ¥¤¥È¤Î¥Ñ¥¹);
1693 #==============================================================================
1698 # ¥³¥¢¤Ç¥µ¥Ý¡¼¥È¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤òºï½ü
1699 rmtree($self->config('data_dir' ).$path) or die $!;
1700 rmtree($self->config('backup_dir').$path) or die $!;
1701 rmtree($self->config('config_dir').$path) or die $!;
1702 rmtree($self->config('log_dir' ).$path) or die $!;
1704 # remove_wiki¥Õ¥Ã¥¯¤Î¸Æ¤Ó½Ð¤·
1705 $self->get_CGI()->param('path',$path);
1706 $self->do_hook("remove_wiki");
1709 #==============================================================================
1711 # °ú¿ô¤ÇÅϤ·¤¿Ì¾¾Î¤Î»ÒWiki¤¬Â¸ºß¤¹¤ë¤«¤É¤¦¤«¤òÄ´¤Ù¤Þ¤¹¡£
1712 # ¤³¤Î¥á¥½¥Ã¥É¤Ïfarm¥×¥é¥°¥¤¥ó¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Î¤ß»ÈÍѲÄǽ¤Ç¤¹¡£
1715 # $wiki->wiki_exists(Wiki¥µ¥¤¥È̾);
1717 #==============================================================================
1721 return ($child =~ /[A-Za-z0-9]+(\/[A-Za-z0-9]+)*/
1722 and -d $self->config('data_dir')."/$child");
1725 #==============================================================================
1727 # »ÒWiki¤òÇÛÎó¤Ç¼èÆÀ¤·¤Þ¤¹¡£Â¹Wiki¡¢Á½Â¹Wiki¤ÏÇÛÎó¤Î¥ê¥Õ¥¡¥ì¥ó¥¹¤È¤·¤Æ³ÊǼ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
1729 #==============================================================================
1732 if($self->farm_is_enable){
1733 my @list = $self->search_child($self->config('config_dir'));
1740 #==============================================================================
1742 # »ÒWiki¤Î¥Ä¥ê¡¼¤òÇÛÎó¤Ç¼èÆÀ¤·¤Þ¤¹¡£
1743 # ¥Í¥¹¥È¤·¤¿Wiki¤ÏÇÛÎó¥ê¥Õ¥¡¥ì¥ó¥¹¤Ç³ÊǼ¤·¤Þ¤¹¡£
1745 #==============================================================================
1752 opendir(DIR,$dir) or die $!;
1753 while(my $entry = readdir(DIR)){
1754 if(-d "$dir/$entry" && $entry ne "." && $entry ne ".."){
1761 foreach my $entry (@dirs){
1763 my @child = $self->search_child("$dir/$entry");
1765 push(@list,\@child);
1772 #==============================================================================
1776 #==============================================================================
1777 sub _process_before_exit {
1779 # ¥×¥é¥°¥¤¥óÍѤΥեå¯
1780 $self->do_hook('finalize');
1781 # finalize¥á¥½¥Ã¥É¤Î¸Æ¤Ó½Ð¤·
1782 $self->get_CGI()->finalize();
1783 $self->{storage}->finalize();