1 ###############################################################################
5 ###############################################################################
11 use Wiki::DefaultStorage;
13 use vars qw($VERSION $DEBUG);
16 #==============================================================================
20 #==============================================================================
26 my $setupfile = shift || 'setup.dat';
27 $self->{"config"} = &Util::load_config_hash(undef,$setupfile);
28 die "setup file ${setupfile} not found" if (keys %{$self->{"config"}} == 0);
29 $self->{"config"}->{"plugin_dir"} = "." unless exists($self->{"config"}->{"plugin_dir"});
30 $self->{"config"}->{"frontpage"} = "FrontPage" unless exists($self->{"config"}->{"frontpage"});
31 unshift(@INC, $self->{"config"}->{"plugin_dir"});
32 $ENV{'TZ'} = $self->{"config"}->{"time_zone"};
33 $CGI::POST_MAX = $self->{"config"}->{"post_max"} if $self->{"config"}->{"post_max"} ne '';
35 # ¥¤¥ó¥¹¥¿¥ó¥¹ÊÑ¿ô¤ò½é´ü²½
36 $self->{"handler"} = {};
37 $self->{"handler_permission"} = {};
38 $self->{"plugin"} = {};
39 $self->{"title"} = "";
41 $self->{"CGI"} = CGI2->new();
44 $self->{"admin_menu"} = ();
45 $self->{"editform"} = ();
47 $self->{"parse_times"} = 0;
48 $self->{"format"} = {};
49 $self->{"installed_plugin"} = ();
50 $self->{"head_info"} = ();
52 # ¥¹¥È¥ì¡¼¥¸¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÀ¸À®
53 if($self->{config}->{"storage"} eq ""){
54 $self->{"storage"} = Wiki::DefaultStorage->new($self);
56 eval ("use ".$self->{config}->{"storage"}.";");
57 $self->{"storage"} = $self->{config}->{"storage"}->new($self);
60 return bless $self,$class;
63 ###############################################################################
65 # ¥æ¡¼¥¶´Ø·¸¤Î¥á¥½¥Ã¥É·²
67 ###############################################################################
68 #==============================================================================
73 # $wiki->add_user(ID,¥Ñ¥¹¥ï¡¼¥É,¥æ¡¼¥¶¥¿¥¤¥×);
76 # ¥æ¡¼¥¶¥¿¥¤¥×¤Ë¤Ï´ÉÍý¼Ô¥æ¡¼¥¶¤Î¾ì¹ç0¡¢°ìÈ̥桼¥¶¤Î¾ì¹ç1¤ò»ØÄꤷ¤Þ¤¹¡£
77 # ¤Ê¤ª¡¢¤³¤Î¥á¥½¥Ã¥É¤Ï¼Â¹Ô»þ¤ËWiki.pm¤Ë¥æ¡¼¥¶¤òÄɲ乤뤿¤á¤Î¤â¤Î¤Ç¡¢
78 # ¤³¤Î¥á¥½¥Ã¥É¤ËÂФ·¤Æ¥æ¡¼¥¶¤òÄɲ䷤Ƥâ±Ê³²½¤Ï¹Ô¤ï¤ì¤Þ¤»¤ó¡£
80 #==============================================================================
87 push(@{$self->{"user"}},{id=>$id,pass=>$pass,type=>$type});
90 #==============================================================================
92 # ¥æ¡¼¥¶¤¬Â¸ºß¤¹¤ë¤«¤É¤¦¤«¤ò³Îǧ¤·¤Þ¤¹
94 #==============================================================================
98 foreach my $user (@{$self->{"user"}}){
99 if($user->{id} eq $id){
106 #==============================================================================
108 # ¥í¥°¥¤¥ó¾ðÊó¤ò¼èÆÀ¤·¤Þ¤¹¡£
109 # ¥í¥°¥¤¥ó¤·¤Æ¤¤¤ë¾ì¹ç¤Ï¥í¥°¥¤¥ó¾ðÊó¤ò´Þ¤ó¤À¥Ï¥Ã¥·¥å¥ê¥Õ¥¡¥ì¥ó¥¹¤ò¡¢
110 # ¥í¥°¥¤¥ó¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ïundef¤òÊÖ¤·¤Þ¤¹¡£
113 # my $info = $wiki->get_login_info();
114 # if(defined($info)){ # ¥í¥°¥¤¥ó¤·¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ïundef
115 # my $id = $info->{id}; # ¥í¥°¥¤¥ó¥æ¡¼¥¶¤ÎID
116 # my $type = $info->{type}; # ¥í¥°¥¤¥ó¥æ¡¼¥¶¤Î¼ïÊÌ(0:´ÉÍý¼Ô 1:°ìÈÌ)
119 #==============================================================================
122 if (exists($self->{'login_info'})){
123 return $self->{'login_info'};
126 my $cgi = $self->get_CGI();
127 return undef unless(defined($cgi));
129 my $session = $cgi->get_session($self);
130 unless(defined($session)){
131 $self->{'login_info'} = undef;
134 my $id = $session->param("wiki_id");
135 my $type = $session->param("wiki_type");
136 my $path = $session->param("wiki_path");
139 my $path_info = $cgi->path_info();
140 if(!defined($path_info)){ $path_info = ""; }
141 if(!defined($path )){ $path = ""; }
142 if(!defined($id )){ $id = ""; }
143 if(!defined($type )){ $type = ""; }
145 if($path_info eq "" && $path ne ""){
146 $self->{'login_info'} = undef;
148 } elsif($path ne "" && !($path_info =~ /^$path($|\/)/)){
149 $self->{'login_info'} = undef;
153 # ¥¯¥Ã¥¡¼¤¬¥»¥Ã¥È¤µ¤ì¤Æ¤¤¤Ê¤¤
154 if($id eq "" || $type eq ""){
155 $self->{'login_info'} = undef;
160 $self->{'login_info'} = {id=>$id,type=>$type,path=>$path};
161 return $self->{'login_info'};
164 #==============================================================================
166 # ¥í¥°¥¤¥ó¥Á¥§¥Ã¥¯¤ò¹Ô¤¤¤Þ¤¹¡£
168 #==============================================================================
173 my $path = $self->get_CGI()->path_info();
174 foreach(@{$self->{"user"}}){
175 if($_->{id} eq $id && $_->{pass} eq $pass){
176 return {id=>$id,pass=>$pass,type=>$_->{type},path=>$path};
182 ###############################################################################
184 # ¥×¥é¥°¥¤¥ó´Ø·¸¤Î¥á¥½¥Ã¥É·²
186 ###############################################################################
187 #==============================================================================
189 # ¥¨¥Ç¥£¥Ã¥È¥Õ¥©¡¼¥à¥×¥é¥°¥¤¥ó¤òÄɲä·¤Þ¤¹
192 # $wiki->add_editform_plugin(¥¨¥Ç¥£¥Ã¥È¥Õ¥©¡¼¥à¥×¥é¥°¥¤¥ó¤Î¥¯¥é¥¹Ì¾,Í¥ÀèÅÙ);
195 # Í¥ÀèÅÙ¤¬Â礤¤¤Û¤É¾å°Ì¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£
197 #==============================================================================
198 sub add_editform_plugin {
202 push(@{$self->{"editform"}},{class=>$plugin,weight=>$weight});
205 #==============================================================================
207 # ÊÔ½¸¥Õ¥©¡¼¥àÍѤΥץ饰¥¤¥ó¤Î½ÐÎϤò¼èÆÀ¤·¤Þ¤¹
209 #==============================================================================
210 sub get_editform_plugin {
213 foreach my $plugin (sort { $b->{weight}<=>$a->{weight} } @{$self->{"editform"}}){
214 my $obj = $self->get_plugin_instance($plugin->{class});
215 $buf .= $obj->editform($self)."\n";
220 #==============================================================================
222 # ´ÉÍý¼ÔÍѤΥá¥Ë¥å¡¼¤òÄɲä·¤Þ¤¹¡£´ÉÍý¼Ô¥æ¡¼¥¶¤¬¥í¥°¥¤¥ó¤·¤¿¾ì¹ç¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£
223 # Í¥ÀèÅÙ¤¬¹â¤¤¤Û¤É¾å¤Î¤Û¤¦¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£
226 # $wiki->add_admin_menu(¥á¥Ë¥å¡¼¹àÌÜ̾,Á«°Ü¤¹¤ëURL,Í¥ÀèÅÙ,¾ÜºÙÀâÌÀ);
228 #==============================================================================
236 push(@{$self->{"admin_menu"}},{label=>$label,url=>$url,weight=>$weight,desc=>$desc,type=>0});
239 #==============================================================================
241 # ¥í¥°¥¤¥ó¥æ¡¼¥¶ÍѤΥá¥Ë¥å¡¼¤òÄɲä·¤Þ¤¹¡£
242 # ¥æ¡¼¥¶¤¬¥í¥°¥¤¥ó¤·¤¿¾ì¹ç¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£´ÉÍý¼Ô¥æ¡¼¥¶¤Î¾ì¹ç¤âɽ¼¨¤µ¤ì¤Þ¤¹¡£
243 # Í¥ÀèÅÙ¤¬¹â¤¤¤Û¤É¾å¤Î¤Û¤¦¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£
246 # $wiki->add_admin_menu(¥á¥Ë¥å¡¼¹àÌÜ̾,Á«°Ü¤¹¤ëURL,Í¥ÀèÅÙ,¾ÜºÙÀâÌÀ);
248 #==============================================================================
256 push(@{$self->{"admin_menu"}},{label=>$label,url=>$url,weight=>$weight,desc=>$desc,type=>1});
259 #==============================================================================
261 # ´ÉÍý¼ÔÍѤΥá¥Ë¥å¡¼¤ò¼èÆÀ¤·¤Þ¤¹¡£
263 #==============================================================================
266 return sort { $b->{weight}<=>$a->{weight} } @{$self->{"admin_menu"}};
269 #==============================================================================
271 # ¥×¥é¥°¥¤¥ó¤ò¥¤¥ó¥¹¥È¡¼¥ë¤·¤Þ¤¹¡£¤³¤Î¥á¥½¥Ã¥É¤Ïwiki.cgi¤Ë¤è¤Ã¤Æcall¤µ¤ì¤Þ¤¹¡£
272 # ¥×¥é¥°¥¤¥ó³«È¯¤Ë¤ª¤¤¤ÆÄ̾¤³¤Î¥á¥½¥Ã¥É¤ò»ÈÍѤ¹¤ë¤³¤È¤Ï¤¢¤ê¤Þ¤»¤ó¡£
274 #==============================================================================
279 if ($plugin =~ /\W/) {
280 return "<div class=\"error\">".Util::escapeHTML("${plugin}¥×¥é¥°¥¤¥ó¤ÏÉÔÀµ¤Ê¥×¥é¥°¥¤¥ó¤Ç¤¹¡£")."</div>";
283 my $module = "plugin::${plugin}::Install";
284 eval 'require &Util::get_module_file($module);'.$module.'::install($self);';
287 return "<div class=\"error\">".Util::escapeHTML("${plugin}¥×¥é¥°¥¤¥ó¤¬¥¤¥ó¥¹¥È¡¼¥ë¤Ç¤¤Þ¤»¤ó¡£$@")."</div>";
289 push(@{$self->{"installed_plugin"}},$plugin);
294 #==============================================================================
296 # ¥×¥é¥°¥¤¥ó¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¤òÄ´¤Ù¤Þ¤¹¡£
298 #==============================================================================
303 foreach (@{$self->{"installed_plugin"}}){
311 #==============================================================================
313 # ¥á¥Ë¥å¡¼¹àÌܤòÄɲä·¤Þ¤¹¡£´û¤ËƱ¤¸Ì¾Á°¤Î¹àÌܤ¬ÅÐÏ¿¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¾å½ñ¤¤·¤Þ¤¹¡£
314 # Í¥ÀèÅÙ¤¬¹â¤¤¤Û¤Éº¸Â¦¤Ëɽ¼¨¤µ¤ì¤Þ¤¹¡£
317 # $wiki->add_menu(¹àÌÜ̾,URL,Í¥ÀèÅÙ,¥¯¥í¡¼¥ë¤òµñÈݤ¹¤ë¤«¤É¤¦¤«);
320 # ¸¡º÷¥¨¥ó¥¸¥ó¤Ë¥¯¥í¡¼¥ë¤µ¤»¤¿¤¯¤Ê¤¤¾ì¹ç¤ÏÂè4°ú¿ô¤Ë1¡¢µö²Ä¤¹¤ë¾ì¹ç¤Ï0¤ò»ØÄꤷ¤Þ¤¹¡£
321 # ¾Êά¤·¤¿¾ì¹ç¤Ï¥¯¥í¡¼¥ë¤òµö²Ä¤·¤Þ¤¹¡£
323 #==============================================================================
329 my $nofollow = shift;
332 foreach(@{$self->{"menu"}}){
333 if($_->{name} eq $name){
340 push(@{$self->{"menu"}},{name=>$name,href=>$href,weight=>$weight,nofollow=>$nofollow});
344 #===============================================================================
346 # ¥Õ¥Ã¥¯¥×¥é¥°¥¤¥ó¤òÅÐÏ¿¤·¤Þ¤¹¡£ÅÐÏ¿¤·¤¿¥×¥é¥°¥¤¥ó¤Ïdo_hook¥á¥½¥Ã¥É¤Ç¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
349 # $wiki->add_hook(¥Õ¥Ã¥¯Ì¾,¥Õ¥Ã¥¯¥×¥é¥°¥¤¥ó¤Î¥¯¥é¥¹Ì¾);
351 #===============================================================================
357 push(@{$self->{"hook"}->{$name}},$obj);
360 #===============================================================================
362 # add_hook¥á¥½¥Ã¥É¤ÇÅÐÏ¿¤µ¤ì¤¿¥Õ¥Ã¥¯¥×¥é¥°¥¤¥ó¤ò¼Â¹Ô¤·¤Þ¤¹¡£
363 # °ú¿ô¤Ë¤Ï¥Õ¥Ã¥¯¤Î̾Á°¤Ë²Ã¤¨¤ÆǤ°Õ¤Î¥Ñ¥é¥á¡¼¥¿¤òÅϤ¹¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
364 # ¤³¤ì¤é¤Î¥Ñ¥é¥á¡¼¥¿¤Ï¸Æ¤Ó½Ð¤µ¤ì¤ë¥¯¥é¥¹¤Îhook¥á¥½¥Ã¥É¤Î°ú¿ô¤È¤·¤ÆÅϤµ¤ì¤Þ¤¹¡£
367 # $wiki->do_hook(¥Õ¥Ã¥¯Ì¾[,°ú¿ô1[,°ú¿ô2...]]);
369 #===============================================================================
374 foreach my $class (@{$self->{"hook"}->{$name}}){
375 my $obj = $self->get_plugin_instance($class);
376 $obj->hook($self,$name,@_);
380 #==============================================================================
382 # ¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¥×¥é¥°¥¤¥ó¤òÄɲä·¤Þ¤¹¡£
383 # ¥ê¥¯¥¨¥¹¥È»þ¤Ëaction¤È¤¤¤¦¥Ñ¥é¥á¡¼¥¿¤¬°ìÃפ¹¤ë¥¢¥¯¥·¥ç¥ó¤¬¸Æ¤Ó½Ð¤µ¤ì¤Þ¤¹¡£
386 # $wiki->add_handler(action¥Ñ¥é¥á¡¼¥¿,¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤Î¥¯¥é¥¹Ì¾);
388 #==============================================================================
394 $self->{"handler"}->{$action}=$class;
395 $self->{"handler_permission"}->{$action} = 1;
398 #==============================================================================
400 # ¥í¥°¥¤¥ó¥æ¡¼¥¶ÍѤΥ¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤òÄɲä·¤Þ¤¹¡£
401 # ¤³¤Î¥á¥½¥Ã¥É¤Ë¤è¤Ã¤ÆÄɲ䵤줿¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤Ï¥í¥°¥¤¥ó¤·¤Æ¤¤¤ë¾ì¹ç¤Î¤ß¼Â¹Ô²Äǽ¤Ç¤¹¡£
402 # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹¡£
405 # $wiki->add_user_handler(action¥Ñ¥é¥á¡¼¥¿,¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤Î¥¯¥é¥¹Ì¾);
407 #==============================================================================
408 sub add_user_handler {
413 $self->{"handler"}->{$action}=$class;
414 $self->{"handler_permission"}->{$action} = 2;
417 #==============================================================================
419 # ´ÉÍý¼ÔÍѤΥ¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤òÄɲä·¤Þ¤¹¡£
420 # ¤³¤Î¥á¥½¥Ã¥É¤Ë¤è¤Ã¤ÆÄɲ䵤줿¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤Ï´ÉÍý¼Ô¤È¤·¤Æ¥í¥°¥¤¥ó¤·¤Æ¤¤¤ë¾ì¹ç¤Î¤ß¼Â¹Ô²Äǽ¤Ç¤¹¡£
421 # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸¤òɽ¼¨¤·¤Þ¤¹¡£
424 # $wiki->add_admin_handler(action¥Ñ¥é¥á¡¼¥¿,¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤Î¥¯¥é¥¹Ì¾);
426 #==============================================================================
427 sub add_admin_handler {
432 $self->{"handler"}->{$action}=$class;
433 $self->{"handler_permission"}->{$action} = 0;
435 #==============================================================================
437 # ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤òÄɲä·¤Þ¤¹¡£
440 # ¤³¤Î¥á¥½¥Ã¥É¤Ï3.4·Ï¤È¤Î¸ß´¹À¤ò°Ý»ý¤¹¤ë¤¿¤á¤Ë»Ä¤·¤Þ¤·¤¿¡£3.6¤ÇÇѻߤ¹¤ë¤â¤Î¤È¤·¤Þ¤¹¡£
442 #==============================================================================
448 $self->add_inline_plugin($name,$class,"HTML");
450 #==============================================================================
452 # ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤òÅÐÏ¿¤·¤Þ¤¹¡£¥×¥é¥°¥¤¥ó¤Î½ÐÎÏ¥¿¥¤¥×¤Ë¤Ï"WIKI"¤Þ¤¿¤Ï"HTML"¤ò»ØÄꤷ¤Þ¤¹¡£
453 # ¾Êά¤·¤¿¾ì¹ç¤Ï"HTML"¤ò»ØÄꤷ¤¿¤â¤Î¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£
456 # $wiki->add_inline_plugin(¥×¥é¥°¥¤¥ó̾,¥×¥é¥°¥¤¥ó¤Î¥¯¥é¥¹Ì¾,¥×¥é¥°¥¤¥ó¤Î½ÐÎÏ¥¿¥¤¥×);
458 #==============================================================================
459 sub add_inline_plugin {
460 my ($self, $name, $class, $format) = @_;
465 $format = uc($format);
468 $self->{"plugin"}->{$name} = {CLASS=>$class,TYPE=>'inline',FORMAT=>$format};
471 #==============================================================================
473 # ¥Ñ¥é¥°¥é¥Õ¥×¥é¥°¥¤¥ó¤òÅÐÏ¿¤·¤Þ¤¹¡£¥×¥é¥°¥¤¥ó¤Î½ÐÎÏ¥¿¥¤¥×¤Ë¤Ï"WIKI"¤Þ¤¿¤Ï"HTML"¤ò»ØÄꤷ¤Þ¤¹¡£
474 # ¾Êά¤·¤¿¾ì¹ç¤Ï"HTML"¤ò»ØÄꤷ¤¿¤â¤Î¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£
477 # $wiki->add_inline_plugin(¥×¥é¥°¥¤¥ó̾,¥×¥é¥°¥¤¥ó¤Î¥¯¥é¥¹Ì¾,¥×¥é¥°¥¤¥ó¤Î½ÐÎÏ¥¿¥¤¥×);
479 #==============================================================================
480 sub add_paragraph_plugin {
481 my ($self, $name, $class, $format) = @_;
486 $format = uc($format);
489 $self->{"plugin"}->{$name} = {CLASS=>$class,TYPE=>'paragraph',FORMAT=>$format};
492 #==============================================================================
494 # ¥Ö¥í¥Ã¥¯¥×¥é¥°¥¤¥ó¤òÅÐÏ¿¤·¤Þ¤¹¡£¥×¥é¥°¥¤¥ó¤Î½ÐÎÏ¥¿¥¤¥×¤Ë¤Ï"WIKI"¤Þ¤¿¤Ï"HTML"¤ò»ØÄꤷ¤Þ¤¹¡£
495 # ¾Êά¤·¤¿¾ì¹ç¤Ï"HTML"¤ò»ØÄꤷ¤¿¤â¤Î¤È¤ß¤Ê¤µ¤ì¤Þ¤¹¡£
498 # $wiki->add_block_plugin(¥×¥é¥°¥¤¥ó̾,¥×¥é¥°¥¤¥ó¤Î¥¯¥é¥¹Ì¾,¥×¥é¥°¥¤¥ó¤Î½ÐÎÏ¥¿¥¤¥×);
500 #==============================================================================
501 sub add_block_plugin {
502 my ($self, $name, $class, $format) = @_;
507 $format = uc($format);
510 $self->{"plugin"}->{$name} = {CLASS=>$class,TYPE=>'block',FORMAT=>$format};
513 #==============================================================================
515 # ¥×¥é¥°¥¤¥ó¤Î¾ðÊó¤ò¼èÆÀ¤·¤Þ¤¹
518 # my $info = $wiki->get_plugin_info("include");
519 # my $class = $info->{CLASS}; # ¥×¥é¥°¥¤¥ó¤Î¥¯¥é¥¹Ì¾
520 # my $type = $info->{TYPE}; # inline¡¢paragraph¡¢block¤Î¤¤¤º¤ì¤«
521 # my $format = $info->{FORMAT}; # HTML¤Þ¤¿¤ÏWIKI
523 #==============================================================================
524 sub get_plugin_info {
528 return $self->{plugin}->{$name};
531 #==============================================================================
533 # add_handler¥á¥½¥Ã¥É¤ÇÅÐÏ¿¤µ¤ì¤¿¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤ò¼Â¹Ô¤·¤Þ¤¹¡£
534 # ¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤Îdo_action¥á¥½¥Ã¥É¤ÎÌá¤êÃͤòÊÖ¤·¤Þ¤¹¡£
537 # my $content = $wiki->call_handler(action¥Ñ¥é¥á¡¼¥¿);
539 #==============================================================================
544 if(!defined($action)){
548 my $obj = $self->get_plugin_instance($self->{"handler"}->{$action});
550 unless(defined($obj)){
551 return $self->error("ÉÔÀµ¤Ê¥¢¥¯¥·¥ç¥ó¤Ç¤¹¡£");
554 # ´ÉÍý¼ÔÍѤΥ¢¥¯¥·¥ç¥ó
555 if($self->{"handler_permission"}->{$action}==0){
556 my $login = $self->get_login_info();
557 if(!defined($login)){
558 return $self->error("¥í¥°¥¤¥ó¤·¤Æ¤¤¤Þ¤»¤ó¡£");
560 } elsif($login->{type}!=0){
561 return $self->error("´ÉÍý¼Ô¸¢¸Â¤¬É¬ÍפǤ¹¡£");
563 return $obj->do_action($self).
564 "<div class=\"comment\"><a href=\"".$self->create_url({action=>"LOGIN"})."\">¥á¥Ë¥å¡¼¤ËÌá¤ë</a></div>";
566 # ¥í¥°¥¤¥ó¥æ¡¼¥¶ÍѤΥ¢¥¯¥·¥ç¥ó
567 } elsif($self->{"handler_permission"}->{$action}==2){
568 my $login = $self->get_login_info();
569 if(!defined($login)){
570 return $self->error("¥í¥°¥¤¥ó¤·¤Æ¤¤¤Þ¤»¤ó¡£");
572 return $obj->do_action($self).
573 "<div class=\"comment\"><a href=\"".$self->create_url({action=>"LOGIN"})."\">¥á¥Ë¥å¡¼¤ËÌá¤ë</a></div>";
577 return $obj->do_action($self);
581 #===============================================================================
583 # °ú¿ô¤ÇÅϤ·¤¿Wiki¥Õ¥©¡¼¥Þ¥Ã¥È¤Îʸ»úÎó¤òHTML¤ËÊÑ´¹¤·¤ÆÊÖ¤·¤Þ¤¹¡£
586 # my $html = $wiki->process_wiki(ʸ»úÎó);
588 #===============================================================================
594 if($self->{parse_times} >= 50){
595 return $self->error("Wiki::process_wiki¤Î¸Æ¤Ó½Ð¤·²ó¿ô¤¬¾å¸Â¤ò±Û¤¨¤Þ¤·¤¿¡£");
598 $self->{parse_times}++;
599 my $parser = Wiki::HTMLParser->new($self,$mainflg);
600 $parser->parse($source);
601 $self->{parse_times}--;
603 return $parser->{html};
606 #===============================================================================
608 # ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¡¢¥Ñ¥é¥°¥é¥Õ¥×¥é¥°¥¤¥ó¤Î¸Æ¤Ó½Ð¤·¡ÊÆâÉô½èÍýÍѤδؿô¡Ë¡£
609 # ½é´ü¤Î¥á¥½¥Ã¥É¤Î¤¿¤á̿̾µ¬Â§¡Êprivate¥á¥½¥Ã¥É¤Î¥á¥½¥Ã¥É̾¤Ï_¤«¤é»Ï¤á¤ë¡Ë
612 #===============================================================================
618 if(defined($plugin->{error}) && $plugin->{error} ne ""){
619 return "<font class=\"error\">".$plugin->{error}."</font>";
622 my $name = $plugin->{command};
623 my @args = @{$plugin->{args}};
624 my $info = $self->get_plugin_info($name);
625 my $obj = $self->get_plugin_instance($info->{CLASS});
628 return "<font class=\"error\">".&Util::escapeHTML($name)."¥×¥é¥°¥¤¥ó¤Ï¸ºß¤·¤Þ¤»¤ó¡£</font>";
631 if($info->{FORMAT} eq "WIKI"){
632 # ΢µ»ÍÑ(¥×¥é¥°¥¤¥óÆâÉô¤«¤é¥Ñ¡¼¥µ¤ò»È¤¦¾ì¹ç)
633 push(@{$self->{'current_parser'}}, $parser);
634 if($info->{TYPE} eq "inline"){
635 my @result = $parser->parse_line($obj->inline($self,@args));
636 pop(@{$self->{'current_parser'}});
638 } elsif($info->{TYPE} eq "paragraph"){
639 $parser->parse($obj->paragraph($self,@args));
641 $parser->parse($obj->block($self,@args));
644 pop(@{$self->{'current_parser'}});
647 if($info->{TYPE} eq "inline"){
648 return $obj->inline($self,@args);
649 } elsif($info->{TYPE} eq "paragraph"){
650 return $obj->paragraph($self,@args);
652 return $obj->block($self,@args);
658 #==============================================================================
660 # ¥Ñ¡¼¥¹Ãæ¤Î¾ì¹ç¡¢¸½ºß͸ú¤ÊWiki::Parser¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤òÊֵѤ·¤Þ¤¹¡£
661 # ¥Ñ¡¼¥¹Ãæ¤ÎÆâÍƤò¥×¥é¥°¥¤¥ó¤«¤éÊѹ¹¤·¤¿¤¤¾ì¹ç¤Ë»ÈÍѤ·¤Þ¤¹¡£
663 #==============================================================================
664 sub get_current_parser {
666 my @parsers = @{$self->{'current_parser'}};
667 return $parsers[$#parsers];
670 #==============================================================================
672 # ¥¨¥é¡¼¤Î¾ì¹ç¡¢¸Æ¤Ó½Ð¤·¤Þ¤¹¡£
673 # ¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤«¤é¥¨¥é¡¼¤òÊó¹ð¤¹¤ëºÝ¤Ë»ÈÍѤ·¤Æ¤¯¤À¤µ¤¤¡£
680 # return $wiki->error(¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸);
683 #==============================================================================
688 $self->set_title("¥¨¥é¡¼");
689 $self->get_CGI->param("action","ERROR");
691 return "<div class=\"error\">".Util::escapeHTML($message)."</div>";
694 #===============================================================================
696 # ¥×¥é¥°¥¤¥ó¤Î¥¤¥ó¥¹¥¿¥ó¥¹¤ò¼èÆÀ¤·¤Þ¤¹¡£Wiki.pm¤ÇÆâÉôŪ¤Ë»ÈÍѤµ¤ì¤ë¥á¥½¥Ã¥É¤Ç¤¹¡£
697 # ¥×¥é¥°¥¤¥ó³«È¯¤Ë¤ª¤¤¤ÆÄ̾¤³¤Î¥á¥½¥Ã¥É¤ò»ÈÍѤ¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£
699 #===============================================================================
700 sub get_plugin_instance {
708 if(!defined($self->{instance}->{$class})){
710 require &Util::get_module_file($class);
713 my $obj = $class->new();
714 $self->{instance}->{$class} = $obj;
718 return $self->{instance}->{$class};
722 #===============================================================================
724 # ¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤ò¥Ñ¡¼¥¹¤·¤Æ¥³¥Þ¥ó¥É¤È°ú¿ô¤Ëʬ³ä¤·¤Þ¤¹¡£
726 #===============================================================================
727 sub parse_inline_plugin {
730 my ($cmd, @args_tmp) = split(/ /,$text);
731 my $args_txt = &Util::trim(join(" ",@args_tmp));
732 if($cmd =~ s/}}(.*?)$//){
733 return { command=>$cmd, args=>[], post=>"$1 $args_txt"};
742 for($i = 0; $i<length($args_txt); $i++){
743 my $c = substr($args_txt,$i,1);
744 if($quote!=1 && $c eq ","){
748 push(@ret_args,$tmp);
751 } elsif($quote==1 && $c eq "\\"){
758 } elsif($quote==0 && $c eq '"'){
764 } elsif($quote==1 && $c eq '"'){
771 } elsif(($quote==0 || $quote==2) && $c eq '}'){
781 return {error=>"¥¤¥ó¥é¥¤¥ó¥×¥é¥°¥¤¥ó¤Î¹½Ê¸¤¬ÉÔÀµ¤Ç¤¹¡£"};
789 my $info = $self->get_plugin_info($cmd);
790 return undef if (defined($info->{TYPE}) && $info->{TYPE} ne 'block');
794 push(@ret_args,$tmp);
797 return { command=>$cmd, args=>\@ret_args,
798 post=>substr($args_txt, $i + 1, length($args_txt) - $i)};
801 #==============================================================================
803 # ¥Õ¥©¡¼¥Þ¥Ã¥È¥×¥é¥°¥¤¥ó¤òÄɲä·¤Þ¤¹¡£
804 # ¥Õ¥©¡¼¥Þ¥Ã¥È¥×¥é¥°¥¤¥ó¤Ïconvert_to_fswiki¥á¥½¥Ã¥É¤Èconvert_from_fswiki¥á¥½¥Ã¥É¤ò
805 # ¼ÂÁõ¤·¤¿¥¯¥é¥¹¤Ç¤Ê¤¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£
808 # $wiki->add_format_plugin(ʸˡ̾,¥¯¥é¥¹Ì¾);
810 #==============================================================================
811 sub add_format_plugin {
816 $self->{'format'}->{$name} = $class;
819 #==============================================================================
821 # ¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¥Õ¥©¡¼¥Þ¥Ã¥È¥×¥é¥°¥¤¥ó¤Î°ìÍ÷¤ò¼èÆÀ¤·¤Þ¤¹¡£
824 # my @formats = $wiki->get_format_names();
826 #==============================================================================
827 sub get_format_names {
829 my @list = keys(%{$self->{'format'}});
831 push(@list, "FSWiki");
836 #==============================================================================
838 # ³ÆWiki½ñ¼°¤Çµ½Ò¤·¤¿¥½¡¼¥¹¤òFSWiki¤Î½ñ¼°¤ËÊÑ´¹¤·¤Þ¤¹¡£
841 # $source = $wiki->convert_to_fswiki($source,"YukiWiki");
844 # ¥¤¥ó¥é¥¤¥ó½ñ¼°¤Î¤ßÊÑ´¹¤ò¹Ô¤¦¾ì¹ç¤ÏÂè»°°ú¿ô¤Ë1¤òÅϤ·¤Þ¤¹¡£
847 # $source = $wiki->convert_to_fswiki($source,"YukiWiki",1);
849 #==============================================================================
850 sub convert_to_fswiki {
856 my $obj = $self->get_plugin_instance($self->{'format'}->{$type});
857 unless(defined($obj)){
860 $source =~ s/\r\n/\n/g;
861 $source =~ s/\r/\n/g;
863 return $obj->convert_to_fswiki_line($source);
865 return $obj->convert_to_fswiki($source);
870 #==============================================================================
872 # FSWiki¤Î½ñ¼°¤Çµ½Ò¤·¤¿¥½¡¼¥¹¤ò³ÆWiki¤Î½ñ¼°¤ËÊÑ´¹¤·¤Þ¤¹¡£
875 # $source = $wiki->convert_from_fswiki($source,"YukiWiki");
878 # ¥¤¥ó¥é¥¤¥ó½ñ¼°¤Î¤ßÊÑ´¹¤ò¹Ô¤¦¾ì¹ç¤ÏÂè»°°ú¿ô¤Ë1¤òÅϤ·¤Þ¤¹¡£
881 # $source = $wiki->convert_from_fswiki($source,"YukiWiki",1);
883 #==============================================================================
884 sub convert_from_fswiki {
890 my $obj = $self->get_plugin_instance($self->{'format'}->{$type});
891 unless(defined($obj)){
894 $source =~ s/\r\n/\n/g;
895 $source =~ s/\r/\n/g;
897 return $obj->convert_from_fswiki_line($source);
899 return $obj->convert_from_fswiki($source);
904 #==============================================================================
906 # ¸½ºß¤Î¥æ¡¼¥¶¤¬ÊÔ½¸¤Ë»ÈÍѤ¹¤ë¥Õ¥©¡¼¥Þ¥Ã¥È¤ò¼èÆÀ¤·¤Þ¤¹¡£
907 # format¥×¥é¥°¥¤¥ó¤¬¥¢¥¯¥Æ¥£¥Ù¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¾ï¤Ë"FSWiki"¤òÊÖ¤·¤Þ¤¹¡£
910 # my $format = $wiki->get_edit_format();
912 #==============================================================================
913 sub get_edit_format {
917 # format¥×¥é¥°¥¤¥ó¤¬¥¢¥¯¥Æ¥£¥Ù¡¼¥È¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤ÐFSWiki¥Õ¥©¡¼¥Þ¥Ã¥È¤òÊÖ¤¹
918 unless($self->is_installed("format")){
922 #Ä̾ï¤Ï´Ä¶ÀßÄê²èÌ̤ÇÀßÄꤷ¤¿Wiki¥Õ¥©¡¼¥Þ¥Ã¥È¤ò»ÈÍÑ
923 my $config = &Util::load_config_hash($self, $self->config('config_file'));
924 my $format = $config->{site_wiki_format};
926 # Cookie¤Ë¥Õ¥©¡¼¥Þ¥Ã¥È¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¤½¤Á¤é¤ò»ÈÍÑ
927 #(⤷¡¢config.dat¥Õ¥¡¥¤¥ë¤«¤é¤Î¼èÆÀ»ØÄê»þ¤ÏCookie¤ò̵»ë)
928 if($from ne "config"){
929 my $cgi = $self->get_CGI();
930 if($cgi->cookie(-name=>'edit_format') ne ""){
931 $format = $cgi->cookie(-name=>'edit_format');
942 #==============================================================================
944 # head¥¿¥°Æâ¤Ë½ÐÎϤ¹¤ë¾ðÊó¤òÄɲä·¤Þ¤¹¡£
945 # ¤¿¤À¤·¥µ¥¤¥È¥Æ¥ó¥×¥ì¡¼¥È¤¬Âбþ¤·¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£
948 # $wiki->add_head_info("<link rel=\"alternate\" type=\"application/rss+xml\" title=\"RSS\" href=\"?action=RSS\">");
950 #==============================================================================
955 push(@{$self->{'head_info'}},$info);
958 ###############################################################################
960 # Åà·ë¤Ë´Ø¤¹¤ë¥á¥½¥Ã¥É·²
962 ###############################################################################
963 #==============================================================================
968 # $wiki->freeze_page(¥Ú¡¼¥¸Ì¾);
970 #==============================================================================
973 $self->{"storage"}->freeze_page(@_);
976 #==============================================================================
978 # ¥Ú¡¼¥¸¤ÎÅà·ë¤ò²ò½ü¤·¤Þ¤¹
981 # $wiki->un_freeze_page(¥Ú¡¼¥¸Ì¾);
983 #==============================================================================
986 $self->{"storage"}->un_freeze_page(@_);
989 #==============================================================================
991 # Åà·ë¤µ¤ì¤Æ¤¤¤ë¥Ú¡¼¥¸¤Î¥ê¥¹¥È¤ò¼èÆÀ¤·¤Þ¤¹¡£
993 #==============================================================================
994 sub get_freeze_list {
996 return $self->{"storage"}->get_freeze_list();
999 #==============================================================================
1001 # °ú¿ô¤ÇÅϤ·¤¿¥Ú¡¼¥¸¤¬Åà·ëÃ椫¤É¤¦¤«¤·¤é¤Ù¤Þ¤¹
1004 # if($wiki->is_freeze(¥Ú¡¼¥¸Ì¾)){
1008 #==============================================================================
1014 if($page =~ /(^.*?[^:]):([^:].*?$)/){
1019 return $self->{storage}->is_freeze($page,$path);
1022 #==============================================================================
1024 # °ú¿ô¤ÇÅϤ·¤¿¥Ú¡¼¥¸¤¬ÊÔ½¸²Äǽ¤«¤É¤¦¤«¤òÄ´¤Ù¤Þ¤¹¡£
1025 # ÊÔ½¸ÉԲĥ⡼¥É¡Êsetup.pl¤Ç$accept_edit¤¬0¤ËÀßÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¡Ë¤Ï¥í¥°¥¤¥ó¤·¤Æ¤¤¤ì¤ÐÊÔ½¸²Äǽ¡¢
1026 # ¥Ú¡¼¥¸¤¬Åà·ë¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï´ÉÍý¼Ô¥æ¡¼¥¶¤Ç¥í¥°¥¤¥ó¤·¤Æ¤¤¤ë¾ì¹ç¤ËÊÔ½¸²Äǽ¤È¤Ê¤ê¤Þ¤¹¡£
1029 # if($wiki->can_modify_page(¥Ú¡¼¥¸Ì¾)){
1033 #==============================================================================
1034 sub can_modify_page {
1037 my $login = $self->get_login_info();
1038 if($self->config('accept_edit')==0 && !defined($login)){
1041 if($self->config('accept_edit')==2 && (!defined($login) || $login->{type}!=0)){
1044 if($self->is_freeze($page) && (!defined($login) || $login->{type}!=0)){
1047 unless($self->can_show($page)){
1053 ###############################################################################
1055 # »²¾È¸¢¸Â¤Ë´Ø¤¹¤ë¥á¥½¥Ã¥É·²
1057 ###############################################################################
1058 #==============================================================================
1060 # ¥Ú¡¼¥¸¤Î»²¾È¥ì¥Ù¥ë¤òÀßÄꤷ¤Þ¤¹¡£
1063 # <li>0 - Á´°÷¤Ë¸ø³«</li>
1064 # <li>1 - ¥æ¡¼¥¶¤Ë¸ø³«</li>
1065 # <li>2 - ´ÉÍý¼Ô¤Ë¸ø³«</li>
1068 # $wiki->set_page_level(¥Ú¡¼¥¸Ì¾,¸ø³«¥ì¥Ù¥ë);
1070 #==============================================================================
1071 sub set_page_level {
1076 $self->{"storage"}->set_page_level($page,$level);
1078 # $level ¤¬Ì¤ÄêµÁ¤Ê¤é¥Ú¡¼¥¸¥Ç¡¼¥¿ºï½ü¤Ê¤Î¤Ç¡¢¥Õ¥Ã¥¯´ØÏ¢½èÍýÉÔÍס£
1079 return if (not defined $level);
1081 # ½èÍý¤ÎÀ®Èݤò¸¡ºº¡£
1082 my $new_level = $self->get_page_level($page);
1083 if ($new_level != $level) {
1084 die "¥Ú¡¼¥¸ '$page' ¤Î»²¾È¸¢¸Â¥ì¥Ù¥ë¤ò '$level' ¤ËÊѹ¹¤·¤è¤¦¤È¤·¤Þ¤·¤¿¤¬¼ºÇÔ¤·¤Þ¤·¤¿¡£";
1087 # ¥Ú¡¼¥¸¥ì¥Ù¥ë¤ÎÊѹ¹¤ËÀ®¸ù¤·¤¿¤Î¤Ç¡¢¥Õ¥Ã¥¯¤òȯ¹Ô¡£
1088 $self->do_hook('change_page_level', $page, $new_level);
1091 #==============================================================================
1093 # ¥Ú¡¼¥¸¤Î»²¾È¥ì¥Ù¥ë¤ò¼èÆÀ¤·¤Þ¤¹¡£
1094 # ¥Ú¡¼¥¸Ì¾¤¬»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢Á´¤Æ¤Î¥Ú¡¼¥¸¤Î»²¾È¥ì¥Ù¥ë¤ò
1095 # ¥Ï¥Ã¥·¥å¥ê¥Õ¥¡¥ì¥ó¥¹¤ÇÊÖ¤·¤Þ¤¹¡£
1098 # <li>0 - Á´°÷¤Ë¸ø³«</li>
1099 # <li>1 - ¥æ¡¼¥¶¤Ë¸ø³«</li>
1100 # <li>2 - ´ÉÍý¼Ô¤Ë¸ø³«</li>
1103 # my $level = $get_page_level(¥Ú¡¼¥¸Ì¾);
1105 #==============================================================================
1106 sub get_page_level {
1111 if($page =~ /(^.*?[^:]):([^:].*?$)/){
1116 $self->{"storage"}->get_page_level($page,$path);
1119 #==============================================================================
1121 # ¸½ºß¤Î¥æ¡¼¥¶¸¢¸Â¤Ç±ÜÍ÷²Äǽ¤Ê¥Ú¡¼¥¸¥ì¥Ù¥ë¤Î¾å¸ÂÃͤòµá¤á¤Þ¤¹¡£
1124 # my $can_show_max = $wiki->_get_can_show_max();
1126 #==============================================================================
1127 sub _get_can_show_max {
1130 # ¡Ö±ÜÍ÷²Äǽ¤Ê page level ¤Î¾å¸ÂÃ͡פ¬´ûÃΤʤé¤Ð¡¢¤½¤ì¤òÊֵѡ£
1131 if (exists $self->{'can_show_max'}) {
1132 return $self->{'can_show_max'};
1135 # Wiki Á´ÂΤαÜÍ÷¸¢¸Â¤ÎÀßÄêÃͤȡ¢±ÜÍ÷¼Ô¤Î¥æ¡¼¥¶¸¢¸Â¥ì¥Ù¥ë¤òµá¤á¤ë¡£
1136 my $accept_show = $self->config('accept_show'); # Wiki Á´ÂΤαÜÍ÷¸¢¸Â
1137 my $login_user = $self->get_login_info(); # ¸½ºß¤Î login ¾ðÊó
1138 my $user_level # ¥æ¡¼¥¶¸¢¸Â¥ì¥Ù¥ë
1139 = (not defined $login_user) ? 0 # Èó¥í¥°¥¤¥ó¥æ¡¼¥¶
1140 : ($login_user->{type} != 0) ? 1 # ¥í¥°¥¤¥ó¥æ¡¼¥¶
1143 # Wiki Á´ÂΤαÜÍ÷¸¢¸Â¤Ë㤷¤Æ¤¤¤ë¥æ¡¼¥¶¤Ê¤é¡¢
1144 if ($user_level >= $accept_show) {
1145 # ¡Ö±ÜÍ÷²Äǽ¤Ê page level ¾å¸ÂÃ͡פϡ¢¥æ¡¼¥¶¸¢¸Â¥ì¥Ù¥ë¤ËÅù¤·¤¤¡£
1146 return $self->{'can_show_max'} = $user_level;
1149 # Wiki Á´ÂΤαÜÍ÷¸¢¸Â¤Ë㤷¤Æ¤¤¤Ê¤¤¥æ¡¼¥¶¤Ê¤Î¤Ç¡¢
1150 # ¡Ö±ÜÍ÷²Äǽ¤Ê page level ¾å¸ÂÃÍ¡×¤Ï -1¡£¤¹¤Ê¤ï¤Á¡¢Á´¥Ú¡¼¥¸±ÜÍ÷ÉԲġ£
1151 return $self->{'can_show_max'} = -1;
1154 #==============================================================================
1156 # ¥Ú¡¼¥¸¤¬»²¾È²Äǽ¤«¤É¤¦¤«¤ò¼èÆÀ¤·¤Þ¤¹¡£
1159 # if($wiki->can_show(¥Ú¡¼¥¸Ì¾)){
1165 #==============================================================================
1167 my ($self, $page) = @_;
1169 #¡Ö±ÜÍ÷²Äǽ page level ¾å¸Â¡×¤¬Ì¤ÃΤʤé¤Ð¡¢µá¤á¤ë¡£
1170 if (not exists $self->{'can_show_max'}) {
1171 $self->_get_can_show_max();
1174 # page level ¤¬¡¢±ÜÍ÷²Äǽ page level ¾å¸Â°Ê²¼¤Ê¤é¿¿¤òÊÖ¤¹¡£
1175 return ($self->get_page_level($page) <= $self->{'can_show_max'});
1178 ###############################################################################
1180 # ¤½¤Î¾¤Î¥á¥½¥Ã¥É·²
1182 ###############################################################################
1183 #==============================================================================
1185 # ¥Ú¡¼¥¸¤Ë¥¸¥ã¥ó¥×¤¹¤ë¤¿¤á¤ÎURL¤òÀ¸À®¤¹¤ë¥æ¡¼¥Æ¥£¥ê¥Æ¥£¥á¥½¥Ã¥É¤Ç¤¹¡£
1186 # °ú¿ô¤È¤·¤Æ¥Ú¡¼¥¸Ì¾¤òÅϤ·¤Þ¤¹¡£
1189 # $wiki->create_page_url("FrontPage");
1192 # ¾åµ¤Î¥³¡¼¥É¤ÏÄ̾°Ê²¼¤ÎURL¤òÀ¸À®¤·¤Þ¤¹¡£
1195 # wiki.cgi?page=FrontPage
1197 #==============================================================================
1198 sub create_page_url {
1201 return $self->create_url({page=>$page});
1204 #==============================================================================
1206 # Ǥ°Õ¤ÎURL¤òÀ¸À®¤¹¤ë¤¿¤á¤Î¥æ¡¼¥Æ¥£¥ê¥Æ¥£¥á¥½¥Ã¥É¤Ç¤¹¡£
1207 # °ú¿ô¤È¤·¤Æ¥Ñ¥é¥á¡¼¥¿¤Î¥Ï¥Ã¥·¥å¥ê¥Õ¥¡¥ì¥ó¥¹¤òÅϤ·¤Þ¤¹¡£
1210 # $wiki->create_url({action=>HOGE,type=>1});
1213 # ¾åµ¤Î¥³¡¼¥É¤ÏÄ̾°Ê²¼¤ÎURL¤òÀ¸À®¤·¤Þ¤¹¡£
1216 # wiki.cgi?action=HOGE&type=1
1218 #==============================================================================
1222 my $url = $self->config('script_name');
1224 foreach my $key (keys(%$params)){
1228 $query .= Util::url_encode($key)."=".Util::url_encode($params->{$key});
1236 #==============================================================================
1238 # ¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥éÃæ¤Ç¥¿¥¤¥È¥ë¤òÀßÄꤹ¤ë¾ì¹ç¤Ë»ÈÍѤ·¤Þ¤¹¡£
1241 # $wiki->set_title(¥¿¥¤¥È¥ë[,ÊÔ½¸·Ï¤Î¥Ú¡¼¥¸¤¬¤É¤¦¤«]);
1244 # ÊÔ½¸·Ï¤Î²èÌ̤ξì¹ç¡¢ÂèÆó°ú¿ô¤Ë1¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£
1245 # ¥í¥Ü¥Ã¥ÈÂкöÍѤ˰ʲ¼¤ÎMETA¥¿¥°¤¬½ÐÎϤµ¤ì¤Þ¤¹¡£
1248 # <meta name="ROBOTS" content="NOINDEX, NOFOLLOW">
1250 #==============================================================================
1255 $self->{"title"} = $title;
1256 $self->{"edit"} = 1 if $edit;
1259 #==============================================================================
1261 # ¥¿¥¤¥È¥ë¤ò¼èÆÀ¤·¤Þ¤¹¡£
1263 #==============================================================================
1266 return $self->{"title"};
1269 #==============================================================================
1271 # ¥Ú¡¼¥¸¤Î°ìÍ÷¤ò¼èÆÀ¤·¤Þ¤¹¡£
1272 # °ú¿ô¤È¤·¤Æ¥Ï¥Ã¥·¥å¥ê¥Õ¥¡¥ì¥ó¥¹¤òÅϤ¹¤³¤È¤Ç¼èÆÀÆâÍƤò»ØÄꤹ¤ë¤³¤È¤¬²Äǽ¡£
1273 # ¥Ç¥Õ¥©¥ë¥È¤Ç¤ÏÁ´¤Æ¤Î¥Ú¡¼¥¸¤ò̾Á°¤Ç¥½¡¼¥È¤·¤¿¥ê¥¹¥È¤òÊֵѤ¹¤ë¡£
1276 # °Ê²¼¤ÎÎã¤Ï»²¾È¸¢¤Î¤¢¤ë¥Ú¡¼¥¸¤Î¤ß¼èÆÀ¤·¡¢¹¹¿·Æü»þ¤Ç¥½¡¼¥È¤¹¤ë¡£
1279 # my @list = $wiki->get_page_list({-sort => 'last_modified',
1280 # -permit => 'show'});
1283 # °Ê²¼¤ÎÎã¤ÏÁ´¤Æ¤Î¥Ú¡¼¥¸¤ò¼èÆÀ¤·¡¢Ì¾Á°¤Ç¥½¡¼¥È¤¹¤ë¡£
1286 # my @list = $wiki->get_page_list({-sort => 'name'});
1289 # °Ê²¼¤ÎÎã¤ÏºÇ¿·¤Î10·ï¤ò¼èÆÀ¤¹¤ë¡£
1292 # my @list = $wiki->get_page_list({-sort=>'last_modified',-max=>10});
1294 #==============================================================================
1299 return $self->{"storage"}->get_page_list($args);
1303 #==============================================================================
1305 # ¥Ú¡¼¥¸¤ÎʪÍýŪ¤Ê¡Ê¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤Î¹¹¿·Æü»þ¡ËºÇ½ª¹¹¿·»þ¹ï¤ò¼èÆÀ¤·¤Þ¤¹¡£
1308 # my $modified = $wiki->get_last_modified(¥Ú¡¼¥¸Ì¾);
1310 #==============================================================================
1311 sub get_last_modified {
1313 return $self->{"storage"}->get_last_modified(@_);
1316 #==============================================================================
1318 # ¥Ú¡¼¥¸ÏÀÍýŪ¤ÊºÇ½ª¹¹¿·»þ¹ï¤ò¼èÆÀ¤·¤Þ¤¹¡£
1319 # ¡Ö¥¿¥¤¥à¥¹¥¿¥ó¥×¤ò¹¹¿·¤·¤Ê¤¤¡×¤Ë¥Á¥§¥Ã¥¯¤òÆþ¤ì¤Æ¥Ú¡¼¥¸¤òÊݸ¤·¤¿¾ì¹ç¤Ï
1320 # ¤³¤Î¥á¥½¥Ã¥É¤ÇÊÖ¤µ¤ì¤ëÆü»þ¤ÏÊݸÁ°¤Î¤â¤Î¤Ë¤Ê¤ê¤Þ¤¹¡£
1323 # my $modified = $wiki->get_last_modified2(¥Ú¡¼¥¸Ì¾);
1325 #==============================================================================
1326 sub get_last_modified2 {
1328 return $self->{"storage"}->get_last_modified2(@_);
1331 #==============================================================================
1333 # ¥Ú¡¼¥¸¤Î¥½¡¼¥¹¤ò¼èÆÀ¤·¤Þ¤¹¡£
1336 # Âè»°°ú¿ô¤Ë¥Õ¥©¡¼¥Þ¥Ã¥È̾¤òÅϤ·¤¿¾ì¹ç¤Î¤ß¡¢¥Õ¥©¡¼¥Þ¥Ã¥È¥×¥é¥°¥¤¥ó¤Ë¤è¤ë
1337 # ¥½¡¼¥¹¤ÎÊÑ´¹¤ò¹Ô¤¤¤Þ¤¹¡£¤½¤ì°Ê³°¤Î¾ì¹ç¤ÏɬÍפ˱þ¤¸¤Æ¥×¥é¥°¥¤¥ó¦¤Ç
1338 # Wiki::convert_from_fswiki¥á¥½¥Ã¥É¤ò¸Æ¤ó¤ÇÊÑ´¹¤ò¹Ô¤¤¤Þ¤¹¡£
1340 #==============================================================================
1347 if($page =~ /(^.*?[^:]):([^:].*?$)/){
1352 my $content = $self->{"storage"}->get_page($page,$path);
1354 if($format eq "" || $format eq "FSWiki"){
1357 return $self->convert_from_fswiki($content,$format);
1361 #==============================================================================
1363 # ¥Ð¥Ã¥¯¥¢¥Ã¥×¤µ¤ì¤¿¥½¡¼¥¹¤ò¼èÆÀ¤·¤Þ¤¹¡£¥Ð¥Ã¥¯¥¢¥Ã¥×¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Ï¶õʸ»úÎó¤òÊÖ¤·¤Þ¤¹¡£
1364 # À¤Âå¥Ð¥Ã¥¯¥¢¥Ã¥×¤ËÂбþ¤·¤¿¥¹¥È¥ì¡¼¥¸¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤ÏÂèÆó°ú¿ô¤Ë¼èÆÀ¤¹¤ëÀ¤Âå¤ò»ØÄꤹ¤ë¤³¤È¤¬¤Ç¤¤Þ¤¹¡£
1367 # # À¤Âå¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò»ÈÍѤ·¤Æ¤¤¤Ê¤¤¾ì¹ç
1368 # my $backup = $wiki->get_backup(¥Ú¡¼¥¸Ì¾);
1370 # # À¤Âå¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç
1371 # my $backup = $wiki->get_backup(¥Ú¡¼¥¸Ì¾,À¤Âå);
1374 # À¤Âå¤Ï¸Å¤¤¤â¤Î¤«¤é½ç¤Ë0¡Á¤Î¿ôÃͤǻØÄꤷ¤Þ¤¹¡£
1376 #==============================================================================
1379 return $self->{"storage"}->get_backup(@_);
1382 #==============================================================================
1384 # ¥Ú¡¼¥¸¤òÊݸ¤·¤Þ¤¹¡£
1385 # ¥¥ã¥Ã¥·¥å¥â¡¼¥ÉON¤ÇÍøÍѤ·¤Æ¤¤¤ë¾ì¹ç¡¢¥Ú¡¼¥¸¤Î¥¥ã¥Ã¥·¥å¤âºï½ü¤µ¤ì¤Þ¤¹¡£
1388 # $wiki->save_page(¥Ú¡¼¥¸Ì¾,¥Ú¡¼¥¸ÆâÍÆ);
1391 # ¥Õ¥©¡¼¥Þ¥Ã¥È¥×¥é¥°¥¤¥ó¤Ë¤è¤ë¥Õ¥©¡¼¥Þ¥Ã¥È¤ÎÊÑ´¹¤Ï¹Ô¤ï¤ì¤Þ¤»¤ó¡£
1392 # ¤Ä¤Þ¤ê¡¢¥Õ¥©¡¼¥Þ¥Ã¥È¥×¥é¥°¥¤¥ó¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¡¢¤³¤Î¥á¥½¥Ã¥É¤ËÅϤ¹
1393 # Wiki¥½¡¼¥¹¤Ï»öÁ°¤ËFSWiki·Á¼°¤ËÊÑ´¹¤µ¤ì¤¿¥½¡¼¥¹¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£
1396 # Êݸ»þ¤Ë¥¿¥¤¥à¥¹¥¿¥ó¥×¤ò¹¹¿·¤·¤Ê¤¤¾ì¹ç¡¢Âè»°°ú¿ô¤Ë1¤òÅϤ·¤Þ¤¹¡£
1399 # $wiki->save_page(¥Ú¡¼¥¸Ì¾,¥Ú¡¼¥¸ÆâÍÆ,1);
1402 #==============================================================================
1405 my $pagename = shift;
1406 my $content = shift;
1409 # ¥Ú¡¼¥¸Ì¾¤ò¥Á¥§¥Ã¥¯
1410 if($pagename =~ /([\|\[\]])|^:|([^:]:[^:])/){
1411 die "¥Ú¡¼¥¸Ì¾¤Ë»ÈÍѤǤ¤Ê¤¤Ê¸»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£";
1413 # ¤¤¤Ã¤¿¤ó¥Ñ¥é¥á¡¼¥¿¤ò¾å½ñ¤
1414 $self->get_CGI->param("page" ,$pagename);
1415 $self->get_CGI->param("content",$content);
1416 $self->do_hook("save_before");
1417 # ¥Ñ¥é¥á¡¼¥¿¤òÆɤ߹þ¤ßľ¤¹
1418 $content = $self->get_CGI()->param("content");
1420 if($self->{"storage"}->save_page($pagename,$content,$sage)){
1422 $self->do_hook("save_after");
1424 $self->do_hook("delete");
1429 #===============================================================================
1431 # ¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¤«¤É¤¦¤«Ä´¤Ù¤Þ¤¹¡£
1434 # if($wiki->page_exists(¥Ú¡¼¥¸Ì¾)){
1435 # # ¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¾ì¹ç¤Î½èÍý
1437 # # ¥Ú¡¼¥¸¤¬Â¸ºß¤·¤Ê¤¤¾ì¹ç¤Î½èÍý
1440 #===============================================================================
1446 if($page =~ /(^.*?[^:]):([^:].*?$)/){
1451 # InterWiki·Á¼°¤Î»ØÄê¤Ç¥É¥Ã¥È¤ò´Þ¤à¤³¤È¤Ï¤Ç¤¤Ê¤¤
1452 if(defined($path) && index($path,".")!=-1){
1456 return $self->{"storage"}->page_exists($page,$path);
1459 #===============================================================================
1461 # CGI¥ª¥Ö¥¸¥§¥¯¥È¤ò¼èÆÀ
1464 # my $cgi = $wiki->get_CGI;
1466 #===============================================================================
1469 return $self->{"CGI"};
1472 #==============================================================================
1474 # °ú¿ô¤ÇÅϤ·¤¿¥Ú¡¼¥¸¤Ë¥ê¥À¥¤¥ì¥¯¥È¤·¤Þ¤¹¡£
1475 # ¥Ú¡¼¥¸¤ÎÊݸ¸å¤Ë¥Ú¡¼¥¸¤òºÆɽ¼¨¤¹¤ë¾ì¹ç¤Ï¤³¤Î¥á¥½¥Ã¥É¤ò»ÈÍѤ·¤Æ²¼¤µ¤¤¡£
1476 # ¤Ê¤ª¡¢¤³¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤È¤½¤³¤Ç¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô¤Ï½ªÎ»¤·¡¢¸Æ¤Ó½Ð¤·¸µ¤ËÀ©¸æ¤ÏÌá¤ê¤Þ¤»¤ó¡£
1479 # $wiki->redirect("FrontPage");
1482 # ÂèÆó°ú¿ô¤Ë¥Ñ¡¼¥ÈÈÖ¹æ¤òÅϤ¹¤È¤½¤Î¥Ñ¡¼¥È¤Ë¥ê¥À¥¤¥ì¥¯¥È¤·¤Þ¤¹¡£
1485 # $wiki->redirect("FrontPage", 1);
1488 #==============================================================================
1493 my $url = $self->create_page_url($page);
1495 $url .= "#p".Util::url_encode($part);
1497 $self->redirectURL($url);
1500 #==============================================================================
1502 # »ØÄê¤ÎURL¤Ë¥ê¥À¥¤¥ì¥¯¥È¤·¤Þ¤¹¡£
1503 # ¤³¤Î¥á¥½¥Ã¥É¤ò¸Æ¤Ó½Ð¤¹¤È¤½¤³¤Ç¥¹¥¯¥ê¥×¥È¤Î¼Â¹Ô¤Ï½ªÎ»¤·¡¢¸Æ¤Ó½Ð¤·¸µ¤ËÀ©¸æ¤ÏÌá¤ê¤Þ¤»¤ó¡£
1506 # $wiki->redirectURL(¥ê¥À¥¤¥ì¥¯¥È¤¹¤ëURL);
1508 #==============================================================================
1513 # Location¥¿¥°¤Ç¥ê¥À¥¤¥ì¥¯¥È
1514 if($self->config('redirect')==1){
1515 my ($hoge,$param) = split(/\?/,$url);
1516 $url = $self->get_CGI->url().$self->get_CGI()->path_info();
1518 $url = "$url?$param";
1520 print "Location: $url\n\n";
1522 # META¥¿¥°¤Ç¥ê¥À¥¤¥ì¥¯¥È
1524 my $tmpl = HTML::Template->new(filename=>$self->config('tmpl_dir')."/redirect.tmpl",
1525 die_on_bad_params => 0);
1527 $tmpl->param(URL=>$url);
1529 print "Content-Type: text/html\n\n";
1530 print $tmpl->output();
1535 #==============================================================================
1537 # ¥°¥í¡¼¥Ð¥ëÀßÄê¤ò¼èÆÀ¤â¤·¤¯¤ÏÊѹ¹¤·¤Þ¤¹
1540 # # ¥Ç¡¼¥¿¥Õ¥¡¥¤¥ë¤ò³ÊǼ¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê
1541 # my $data_dir = $wiki->config('data_dir');
1543 # # ÀßÄê¤ò$data_dir¤Ç¾å½ñ¤
1544 # $wiki->config('data_dir',$data_dir);
1546 #==============================================================================
1551 if(defined($value)){
1552 $self->{config}->{$name} = $value;
1554 return $self->{config}->{$name};
1557 ###############################################################################
1559 # Farm´Ø·¸¤Î¥á¥½¥Ã¥É·²
1561 ###############################################################################
1562 #==============================================================================
1564 # Farmµ¡Ç½¤¬Í¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤«¤É¤¦¤«¤ò¼èÆÀ¤·¤Þ¤¹
1567 # if($wiki->farm_is_enable()){
1568 # # Farm¤¬Í¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¤¤Î½èÍý
1570 # # Farm¤¬Ìµ¸ú¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤È¤¤Î½èÍý
1573 #==============================================================================
1574 sub farm_is_enable {
1576 my $farm_config = &Util::load_config_hash($self,$self->config('farmconf_file'));
1577 if(defined $farm_config->{usefarm} and $farm_config->{usefarm}==1){
1584 #==============================================================================
1586 # »ÒWiki¤òºîÀ®¤·¤Þ¤¹¡£°ú¿ô¤Ë¤ÏWiki¤Î̾Á°¡¢ºîÀ®¤¹¤ëWiki¥µ¥¤¥È¤Î´ÉÍý¼ÔID¡¢¥Ñ¥¹¥ï¡¼¥É¤òÅϤ·¤Þ¤¹¡£
1587 # ¤³¤Î¥á¥½¥Ã¥ÉÆâ¤Ç¤ÏWiki¥µ¥¤¥È̾¤Î¥Ð¥ê¥Ç¡¼¥·¥ç¥ó¤ä½ÅÊ£¥Á¥§¥Ã¥¯¤Ï¹Ô¤ï¤ì¤Þ¤»¤ó¡£
1588 # »öÁ°¤Ë¹Ô¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£¤³¤Î¥á¥½¥Ã¥É¤Ïfarm¥×¥é¥°¥¤¥ó¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Î¤ß»ÈÍѲÄǽ¤Ç¤¹¡£
1591 # $wiki->create_wiki(Wiki¥µ¥¤¥È̾,´ÉÍý¼ÔID,¥Ñ¥¹¥ï¡¼¥É);
1593 #==============================================================================
1600 # data¡¢backup¥Ç¥£¥ì¥¯¥È¥ê¤ò·¡¤ë½èÍý¤ÏStorage¤ËǤ¤»¤¿¤Û¤¦¤¬¤¤¤¤¤«¤Ê¡©
1601 unless($self->wiki_exists($child)){
1603 # ¥³¥¢¤Ç¥µ¥Ý¡¼¥È¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤ò·¡¤ë
1604 mkpath($self->config('data_dir' )."/$child") or die $!;
1605 mkpath($self->config('backup_dir')."/$child") or die $!;
1606 mkpath($self->config('config_dir')."/$child") or die $!;
1607 mkpath($self->config('log_dir' )."/$child") or die $!;
1610 copy($self->config('config_dir')."/".$self->config('config_file'),
1611 $self->config('config_dir')."/$child/".$self->config('config_file')) or die $!;
1612 copy($self->config('config_dir')."/".$self->config('usercss_file'),
1613 $self->config('config_dir')."/$child/".$self->config('usercss_file')) or die $!;
1614 copy($self->config('config_dir')."/".$self->config('plugin_file'),
1615 $self->config('config_dir')."/$child/".$self->config('plugin_file')) or die $!;
1616 copy($self->config('config_dir')."/".$self->config('mime_file'),
1617 $self->config('config_dir')."/$child/".$self->config('mime_file')) or die $!;
1619 # ´ÉÍý¥æ¡¼¥¶¤ÎºîÀ®¡Ê¤³¤³¤Çºî¤ë¤Î¤Ï¤Á¤ç¤Ã¤È¥¢¥ì¤«¤â¡¦¡¦¡¦¡Ë
1620 open(USERDAT,">".$self->config('config_dir')."/$child/".$self->config('userdat_file')) or die $!;
1621 print USERDAT "$id=".&Util::md5($pass,$id)."\t0\n";
1624 # ¥Æ¥ó¥×¥ì¡¼¥È¤«¤é¥Ú¡¼¥¸¤Î¥³¥Ô¡¼
1625 my $farm_config = &Util::load_config_hash($self,$self->config('farmconf_file'));
1626 if($farm_config->{'use_template'}==1 && $child ne "template"){
1627 my $template = $self->config('data_dir')."/template";
1628 my $depth = $self->_get_wiki_depth();
1630 while((!(-e $template) || !(-d $template)) && $count < $depth && $farm_config->{'search_parent'}==1){
1631 $template =~ s/\/template$//;
1632 $template = $template."/../template";
1635 if(-e $template && -d $template){
1636 opendir(DIR,$template) or die $!;
1637 while(my $entry = readdir(DIR)){
1638 if($entry =~ /\.wiki$/){
1639 copy($template."/$entry",$self->config('data_dir')."/$child/$entry");
1645 # create_wiki¥Õ¥Ã¥¯¤Î¸Æ¤Ó½Ð¤·
1646 $self->do_hook("create_wiki");
1649 # ¥¨¥é¡¼¤¬È¯À¸¤·¤¿¾ì¹ç¥¯¥ê¡¼¥ó¥¢¥Ã¥×½èÍý
1652 # ¤³¤³¤Ï¥¨¥é¡¼¤¬½Ð¤Æ¤â³¹Ô
1654 $self->remove_wiki("/$child");
1656 die "$child¤ÎºîÀ®¤Ë¼ºÇÔ¤·¤Þ¤·¤¿¡£È¯À¸¤·¤¿¥¨¥é¡¼¤Ï°Ê²¼¤Î¤È¤ª¤ê¤Ç¤¹¡£\n\n$error";
1661 #==============================================================================
1663 # ¸½ºß¤ÎWiki¤Î³¬ÁؤòÊֵѤ·¤Þ¤¹¡£¥ë¡¼¥È¤Î¾ì¹ç¤Ï0¡¢»ÒWiki¤Î¾ì¹ç¤Ï1¡¢
1664 # ¹Wiki¤Î¾ì¹ç¤Ï2¡Ä¤È¤¤¤¦¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
1666 #==============================================================================
1667 sub _get_wiki_depth {
1669 my $path_info = $self->get_CGI()->path_info();
1670 $path_info =~ s/^\///;
1671 my $depth = split(/\//,$path_info);
1675 #==============================================================================
1677 # »ÒWiki¤òºï½ü¤·¤Þ¤¹¡£°ú¿ô¤Ë¤Ïºï½ü¤¹¤ëWiki¥µ¥¤¥È¤Î¥Ñ¥¹¡ÊPATH_INFOÉôʬ¡Ë¤òÅϤ·¤Þ¤¹¡£
1678 # ¤³¤Î¥á¥½¥Ã¥É¤Ïfarm¥×¥é¥°¥¤¥ó¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Î¤ß»ÈÍѲÄǽ¤Ç¤¹¡£
1681 # $wiki->remove_wiki(Wiki¥µ¥¤¥È¤Î¥Ñ¥¹);
1683 #==============================================================================
1688 # ¥³¥¢¤Ç¥µ¥Ý¡¼¥È¤¹¤ë¥Ç¥£¥ì¥¯¥È¥ê¤òºï½ü
1689 rmtree($self->config('data_dir' ).$path) or die $!;
1690 rmtree($self->config('backup_dir').$path) or die $!;
1691 rmtree($self->config('config_dir').$path) or die $!;
1692 rmtree($self->config('log_dir' ).$path) or die $!;
1694 # remove_wiki¥Õ¥Ã¥¯¤Î¸Æ¤Ó½Ð¤·
1695 $self->get_CGI()->param('path',$path);
1696 $self->do_hook("remove_wiki");
1699 #==============================================================================
1701 # °ú¿ô¤ÇÅϤ·¤¿Ì¾¾Î¤Î»ÒWiki¤¬Â¸ºß¤¹¤ë¤«¤É¤¦¤«¤òÄ´¤Ù¤Þ¤¹¡£
1702 # ¤³¤Î¥á¥½¥Ã¥É¤Ïfarm¥×¥é¥°¥¤¥ó¤ò»ÈÍѤ·¤Æ¤¤¤ë¾ì¹ç¤Î¤ß»ÈÍѲÄǽ¤Ç¤¹¡£
1705 # $wiki->wiki_exists(Wiki¥µ¥¤¥È̾);
1707 #==============================================================================
1711 return ($child =~ /[A-Za-z0-9]+(\/[A-Za-z0-9]+)*/
1712 and -d $self->config('data_dir')."/$child");
1715 #==============================================================================
1717 # »ÒWiki¤òÇÛÎó¤Ç¼èÆÀ¤·¤Þ¤¹¡£Â¹Wiki¡¢Á½Â¹Wiki¤ÏÇÛÎó¤Î¥ê¥Õ¥¡¥ì¥ó¥¹¤È¤·¤Æ³ÊǼ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£
1719 #==============================================================================
1722 if($self->farm_is_enable){
1723 my @list = $self->search_child($self->config('config_dir'));
1730 #==============================================================================
1732 # »ÒWiki¤Î¥Ä¥ê¡¼¤òÇÛÎó¤Ç¼èÆÀ¤·¤Þ¤¹¡£
1733 # ¥Í¥¹¥È¤·¤¿Wiki¤ÏÇÛÎó¥ê¥Õ¥¡¥ì¥ó¥¹¤Ç³ÊǼ¤·¤Þ¤¹¡£
1735 #==============================================================================
1742 opendir(DIR,$dir) or die $!;
1743 while(my $entry = readdir(DIR)){
1744 if(-d "$dir/$entry" && $entry ne "." && $entry ne ".."){
1751 foreach my $entry (@dirs){
1753 my @child = $self->search_child("$dir/$entry");
1755 push(@list,\@child);
1762 #==============================================================================
1766 #==============================================================================
1767 sub _process_before_exit {
1769 # ¥×¥é¥°¥¤¥óÍѤΥեå¯
1770 $self->do_hook('finalize');
1771 # finalize¥á¥½¥Ã¥É¤Î¸Æ¤Ó½Ð¤·
1772 $self->get_CGI()->finalize();
1773 $self->{storage}->finalize();