OSDN Git Service

ソフト404等のレスポンスエラーコード対応
[fswiki/fswiki.git] / lib / Wiki.pm
index 6a60b39..8b0fd7b 100644 (file)
@@ -8,10 +8,11 @@ use strict;
 use CGI2;
 use File::Copy;
 use File::Path;
+use HTTP::Status;
 use Wiki::DefaultStorage;
 use Wiki::HTMLParser;
 use vars qw($VERSION $DEBUG);
-$VERSION = '3.6.4';
+$VERSION = '3.6.5';
 $DEBUG   = 0;
 #==============================================================================
 # <p>
@@ -548,17 +549,17 @@ sub call_handler {
        my $obj = $self->get_plugin_instance($self->{"handler"}->{$action});
        
        unless(defined($obj)){
-               return $self->error("ÉÔÀµ¤Ê¥¢¥¯¥·¥ç¥ó¤Ç¤¹¡£");
+               return $self->error(RC_BAD_REQUEST, "ÉÔÀµ¤Ê¥¢¥¯¥·¥ç¥ó¤Ç¤¹¡£");
        }
        
        # ´ÉÍý¼ÔÍѤΥ¢¥¯¥·¥ç¥ó
        if($self->{"handler_permission"}->{$action}==0){
                my $login = $self->get_login_info();
                if(!defined($login)){
-                       return $self->error("¥í¥°¥¤¥ó¤·¤Æ¤¤¤Þ¤»¤ó¡£");
+                       return $self->error(RC_FORBIDDEN, "¥í¥°¥¤¥ó¤·¤Æ¤¤¤Þ¤»¤ó¡£");
                        
                } elsif($login->{type}!=0){
-                       return $self->error("´ÉÍý¼Ô¸¢¸Â¤¬É¬ÍפǤ¹¡£");
+                       return $self->error(RC_FORBIDDEN, "´ÉÍý¼Ô¸¢¸Â¤¬É¬ÍפǤ¹¡£");
                }
                return $obj->do_action($self).
                       "<div class=\"comment\"><a href=\"".$self->create_url({action=>"LOGIN"})."\">¥á¥Ë¥å¡¼¤ËÌá¤ë</a></div>";
@@ -567,7 +568,7 @@ sub call_handler {
        } elsif($self->{"handler_permission"}->{$action}==2){
                my $login = $self->get_login_info();
                if(!defined($login)){
-                       return $self->error("¥í¥°¥¤¥ó¤·¤Æ¤¤¤Þ¤»¤ó¡£");
+                       return $self->error(RC_FORBIDDEN, "¥í¥°¥¤¥ó¤·¤Æ¤¤¤Þ¤»¤ó¡£");
                }
                return $obj->do_action($self).
                       "<div class=\"comment\"><a href=\"".$self->create_url({action=>"LOGIN"})."\">¥á¥Ë¥å¡¼¤ËÌá¤ë</a></div>";
@@ -678,13 +679,23 @@ sub get_current_parser {
 #   my $wiki = shift;
 #   ...
 #   return $wiki-&gt;error(¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸);
+#     or
+#   return $wiki-&gt;error(¥¨¥é¡¼¥³¡¼¥É, ¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸);
 # }
 # </pre>
 #==============================================================================
 sub error {
        my $self    = shift;
+       my $status = shift;
        my $message = shift;
        
+       if(!defined($message)){
+               $message = $status;
+               $status = undef;
+       } else {
+               printf "Status: %d\n", $status;
+       }
+       
        $self->set_title("¥¨¥é¡¼");
        $self->get_CGI->param("action","ERROR");
        
@@ -729,7 +740,7 @@ sub parse_inline_plugin {
        my $text = shift;
        my ($cmd, @args_tmp) = split(/ /,$text);
        my $args_txt = &Util::trim(join(" ",@args_tmp));
-       if($cmd =~ s/}}(.*?)$//){
+       if($cmd =~ s/\}\}(.*?)$//){
                return { command=>$cmd, args=>[], post=>"$1 $args_txt"};
        }
        
@@ -1072,13 +1083,12 @@ sub set_page_level {
        my $self  = shift;
        my $page  = shift;
        my $level = shift;
-       
-       # Í¿¤¨¤é¤ì¤¿ $level ¤¬¸½ºß¤Î¥Ú¡¼¥¸¥ì¥Ù¥ë¤ÈÅù¤·¤±¤ì¤Ð²¿¤â¤»¤º¤Ë½ªÎ»¡£
-       my $old_level = $self->get_page_level($page);
-       return if ($level == $old_level);
 
        $self->{"storage"}->set_page_level($page,$level);
 
+       # $level ¤¬Ì¤ÄêµÁ¤Ê¤é¥Ú¡¼¥¸¥Ç¡¼¥¿ºï½ü¤Ê¤Î¤Ç¡¢¥Õ¥Ã¥¯´ØÏ¢½èÍýÉÔÍס£
+       return if (not defined $level);
+
        # ½èÍý¤ÎÀ®Èݤò¸¡ºº¡£
        my $new_level = $self->get_page_level($page);
        if ($new_level != $level) {
@@ -1086,7 +1096,7 @@ sub set_page_level {
        }
 
        # ¥Ú¡¼¥¸¥ì¥Ù¥ë¤ÎÊѹ¹¤ËÀ®¸ù¤·¤¿¤Î¤Ç¡¢¥Õ¥Ã¥¯¤òȯ¹Ô¡£
-       $self->do_hook('change_page_level', $page, $new_level, $old_level);     
+       $self->do_hook('change_page_level', $page, $new_level);
 }
 
 #==============================================================================
@@ -1383,7 +1393,6 @@ sub get_backup {
 #==============================================================================
 # <p>
 # ¥Ú¡¼¥¸¤òÊݸ¤·¤Þ¤¹¡£
-# ¥­¥ã¥Ã¥·¥å¥â¡¼¥ÉON¤ÇÍøÍѤ·¤Æ¤¤¤ë¾ì¹ç¡¢¥Ú¡¼¥¸¤Î¥­¥ã¥Ã¥·¥å¤âºï½ü¤µ¤ì¤Þ¤¹¡£
 # </p>
 # <pre>
 # $wiki-&gt;save_page(¥Ú¡¼¥¸Ì¾,¥Ú¡¼¥¸ÆâÍÆ);
@@ -1479,11 +1488,23 @@ sub get_CGI {
 # <pre>
 # $wiki-&gt;redirect(&quot;FrontPage&quot;);
 # </pre>
+# <p>
+# ÂèÆó°ú¿ô¤Ë¥Ñ¡¼¥ÈÈÖ¹æ¤òÅϤ¹¤È¤½¤Î¥Ñ¡¼¥È¤Ë¥ê¥À¥¤¥ì¥¯¥È¤·¤Þ¤¹¡£
+# </p>
+# <pre>
+# $wiki-&gt;redirect(&quot;FrontPage&quot;, 1);
+# </pre>
+#
 #==============================================================================
 sub redirect {
        my $self = shift;
        my $page = shift;
-       $self->redirectURL($self->create_page_url($page));
+       my $part = shift;
+       my $url = $self->create_page_url($page);
+       if($part ne ""){
+               $url .= "#p".Util::url_encode($part);
+       }
+       $self->redirectURL($url);
 }
 
 #==============================================================================