use CGI2;
use File::Copy;
use File::Path;
+use HTTP::Status;
use Wiki::DefaultStorage;
use Wiki::HTMLParser;
-#use Wiki::CacheParser;
use vars qw($VERSION $DEBUG);
-$VERSION = '3.6.4';
+$VERSION = '3.6.5';
$DEBUG = 0;
#==============================================================================
# <p>
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>";
} 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>";
# my $wiki = shift;
# ...
# return $wiki->error(¥¨¥é¡¼¥á¥Ã¥»¡¼¥¸);
+# or
+# return $wiki->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");
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"};
}
my $self = shift;
my $page = shift;
my $level = shift;
-
+
$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) {
+ die "¥Ú¡¼¥¸ '$page' ¤Î»²¾È¸¢¸Â¥ì¥Ù¥ë¤ò '$level' ¤ËÊѹ¹¤·¤è¤¦¤È¤·¤Þ¤·¤¿¤¬¼ºÇÔ¤·¤Þ¤·¤¿¡£";
+ }
+
+ # ¥Ú¡¼¥¸¥ì¥Ù¥ë¤ÎÊѹ¹¤ËÀ®¸ù¤·¤¿¤Î¤Ç¡¢¥Õ¥Ã¥¯¤òȯ¹Ô¡£
+ $self->do_hook('change_page_level', $page, $new_level);
}
#==============================================================================
# </pre>
#==============================================================================
sub _get_can_show_max {
- my $self = shift;
-
- # ¡Ö±ÜÍ÷²Äǽ¤Ê page level ¤Î¾å¸ÂÃ͡פ¬´ûÃΤʤé¤Ð¡¢¤½¤ì¤òÊֵѡ£
- if (exists $self->{'can_show_max'}) {
- return $self->{'can_show_max'};
- }
-
- # Wiki Á´ÂΤαÜÍ÷¸¢¸Â¤ÎÀßÄêÃͤȡ¢±ÜÍ÷¼Ô¤Î¥æ¡¼¥¶¸¢¸Â¥ì¥Ù¥ë¤òµá¤á¤ë¡£
- my $accept_show = $self->config('accept_show'); # Wiki Á´ÂΤαÜÍ÷¸¢¸Â
- my $login_user = $self->get_login_info(); # ¸½ºß¤Î login ¾ðÊó
- my $user_level # ¥æ¡¼¥¶¸¢¸Â¥ì¥Ù¥ë
- = (not defined $login_user) ? 0 # Èó¥í¥°¥¤¥ó¥æ¡¼¥¶
- : ($login_user->{type} != 0) ? 1 # ¥í¥°¥¤¥ó¥æ¡¼¥¶
- : 2; # ´ÉÍý¼Ô
+ my $self = shift;
- # Wiki Á´ÂΤαÜÍ÷¸¢¸Â¤Ë㤷¤Æ¤¤¤ë¥æ¡¼¥¶¤Ê¤é¡¢
- if ($user_level >= $accept_show) {
+ # ¡Ö±ÜÍ÷²Äǽ¤Ê page level ¤Î¾å¸ÂÃ͡פ¬´ûÃΤʤé¤Ð¡¢¤½¤ì¤òÊֵѡ£
+ if (exists $self->{'can_show_max'}) {
+ return $self->{'can_show_max'};
+ }
- # ¡Ö±ÜÍ÷²Äǽ¤Ê page level ¾å¸ÂÃ͡פϡ¢¥æ¡¼¥¶¸¢¸Â¥ì¥Ù¥ë¤ËÅù¤·¤¤¡£
- return $self->{'can_show_max'} = $user_level;
- }
+ # Wiki Á´ÂΤαÜÍ÷¸¢¸Â¤ÎÀßÄêÃͤȡ¢±ÜÍ÷¼Ô¤Î¥æ¡¼¥¶¸¢¸Â¥ì¥Ù¥ë¤òµá¤á¤ë¡£
+ my $accept_show = $self->config('accept_show'); # Wiki Á´ÂΤαÜÍ÷¸¢¸Â
+ my $login_user = $self->get_login_info(); # ¸½ºß¤Î login ¾ðÊó
+ my $user_level # ¥æ¡¼¥¶¸¢¸Â¥ì¥Ù¥ë
+ = (not defined $login_user) ? 0 # Èó¥í¥°¥¤¥ó¥æ¡¼¥¶
+ : ($login_user->{type} != 0) ? 1 # ¥í¥°¥¤¥ó¥æ¡¼¥¶
+ : 2; # ´ÉÍý¼Ô
+
+ # Wiki Á´ÂΤαÜÍ÷¸¢¸Â¤Ë㤷¤Æ¤¤¤ë¥æ¡¼¥¶¤Ê¤é¡¢
+ if ($user_level >= $accept_show) {
+ # ¡Ö±ÜÍ÷²Äǽ¤Ê page level ¾å¸ÂÃ͡פϡ¢¥æ¡¼¥¶¸¢¸Â¥ì¥Ù¥ë¤ËÅù¤·¤¤¡£
+ return $self->{'can_show_max'} = $user_level;
+ }
- # Wiki Á´ÂΤαÜÍ÷¸¢¸Â¤Ë㤷¤Æ¤¤¤Ê¤¤¥æ¡¼¥¶¤Ê¤Î¤Ç¡¢
- # ¡Ö±ÜÍ÷²Äǽ¤Ê page level ¾å¸ÂÃÍ¡×¤Ï -1¡£¤¹¤Ê¤ï¤Á¡¢Á´¥Ú¡¼¥¸±ÜÍ÷ÉԲġ£
- return $self->{'can_show_max'} = -1;
+ # Wiki Á´ÂΤαÜÍ÷¸¢¸Â¤Ë㤷¤Æ¤¤¤Ê¤¤¥æ¡¼¥¶¤Ê¤Î¤Ç¡¢
+ # ¡Ö±ÜÍ÷²Äǽ¤Ê page level ¾å¸ÂÃÍ¡×¤Ï -1¡£¤¹¤Ê¤ï¤Á¡¢Á´¥Ú¡¼¥¸±ÜÍ÷ÉԲġ£
+ return $self->{'can_show_max'} = -1;
}
#==============================================================================
# </pre>
#==============================================================================
sub can_show {
- my ($self, $page) = @_;
+ my ($self, $page) = @_;
- #¡Ö±ÜÍ÷²Äǽ page level ¾å¸Â¡×¤¬Ì¤ÃΤʤé¤Ð¡¢µá¤á¤ë¡£
- if (not exists $self->{'can_show_max'}) {
- $self->_get_can_show_max();
- }
+ #¡Ö±ÜÍ÷²Äǽ page level ¾å¸Â¡×¤¬Ì¤ÃΤʤé¤Ð¡¢µá¤á¤ë¡£
+ if (not exists $self->{'can_show_max'}) {
+ $self->_get_can_show_max();
+ }
- # page level ¤¬¡¢±ÜÍ÷²Äǽ page level ¾å¸Â°Ê²¼¤Ê¤é¿¿¤òÊÖ¤¹¡£
- return ($self->get_page_level($page) <= $self->{'can_show_max'});
+ # page level ¤¬¡¢±ÜÍ÷²Äǽ page level ¾å¸Â°Ê²¼¤Ê¤é¿¿¤òÊÖ¤¹¡£
+ return ($self->get_page_level($page) <= $self->{'can_show_max'});
}
###############################################################################
#==============================================================================
# <p>
# ¥Ú¡¼¥¸¤òÊݸ¤·¤Þ¤¹¡£
-# ¥¥ã¥Ã¥·¥å¥â¡¼¥ÉON¤ÇÍøÍѤ·¤Æ¤¤¤ë¾ì¹ç¡¢¥Ú¡¼¥¸¤Î¥¥ã¥Ã¥·¥å¤âºï½ü¤µ¤ì¤Þ¤¹¡£
# </p>
# <pre>
# $wiki->save_page(¥Ú¡¼¥¸Ì¾,¥Ú¡¼¥¸ÆâÍÆ);
# <pre>
# $wiki->redirect("FrontPage");
# </pre>
+# <p>
+# ÂèÆó°ú¿ô¤Ë¥Ñ¡¼¥ÈÈÖ¹æ¤òÅϤ¹¤È¤½¤Î¥Ñ¡¼¥È¤Ë¥ê¥À¥¤¥ì¥¯¥È¤·¤Þ¤¹¡£
+# </p>
+# <pre>
+# $wiki->redirect("FrontPage", 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);
}
#==============================================================================