OSDN Git Service

FSWiki 3.6.4対応
[fswiki/sandbox.git] / kgsoft / _ex_spam_filter_light / trunk / plugin / _ex_spam_filter_light / core.pm
index 7f2b2f1..c0bcc87 100644 (file)
@@ -40,11 +40,31 @@ sub do_action {
        #--------------------------------------------------------------------------
        # Êݸ½èÍý
        if($cgi->param("save") ne ""){
-               if($wiki->page_exists($pagename)){
-                       if($cgi->param("lastmodified") < $time){
-                               return $wiki->error("¥Ú¡¼¥¸¤Ï´û¤ËÊ̤Υ桼¥¶¤Ë¤è¤Ã¤Æ¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£");
+               if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){
+                       if(length($content) > $wiki->config('page_max')){
+                               return $wiki->error('¥Ú¡¼¥¸¤¬Êݸ²Äǽ¤ÊºÇÂ祵¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£');
                        }
                }
+               if($wiki->page_exists($pagename) && $cgi->param("lastmodified") != $time){
+                       $buf .= "<p><span class=\"error\">¥Ú¡¼¥¸¤Ï´û¤ËÊ̤Υ桼¥¶¤Ë¤è¤Ã¤Æ¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ºÇ¿·ÈǤȤκ¹Ê¬¤ò³Îǧ¤·¤ÆºÆÅÙÊÔ½¸¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£</span></p>";
+                       
+                       my $mode = $wiki->get_edit_format();
+                       my $orig_source = undef;
+                       if($artno eq ""){
+                               $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode);
+                       } else {
+                               $orig_source = $wiki->convert_from_fswiki(&read_by_part($wiki->get_page($pagename), $artno), $mode);
+                       }
+                       my $your_source = $content;
+                       $your_source =~ s/\r\n/\n/g;
+                       $your_source =~ s/\r/\n/g;
+                       
+                       my $diff = plugin::core::Diff::_get_diff_html($wiki, $orig_source, $your_source);
+                       $buf .= $diff."<br>";
+                       
+                       $content = $orig_source;
+                       
+               } else {
 
 #--------------------------------------------------------------------------------------------------
   if($content){
@@ -73,37 +93,71 @@ sub do_action {
   }
 #--------------------------------------------------------------------------------------------------
 \r
-               #my $save_content = $content;
-               my $mode = $wiki->get_edit_format();
-               my $save_content = $wiki->convert_to_fswiki($content,$mode);
+                       #my $save_content = $content;
+                       my $mode = $wiki->get_edit_format();
+                       my $save_content = $wiki->convert_to_fswiki($content,$mode);
 
-               # ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç
-               if($artno ne ""){
-                       $save_content = &make_save_source($wiki->get_page($pagename),$save_content,$artno,$wiki);
-               }
-               # FrontPage¤Ïºï½üÉÔ²Ä
-               if($pagename eq $wiki->config("frontpage") && $save_content eq ""){
-                       $buf = "<b>".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£</b>\n";
+                       # ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç
+                       if($artno ne ""){
+                               $save_content = &make_save_source($wiki->get_page($pagename), $save_content, $artno, $wiki);
+                       }
+                       # FrontPage¤Ïºï½üÉÔ²Ä
+                       if($pagename eq $wiki->config("frontpage") && $save_content eq ""){
+                               $buf = "<b>".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£</b>\n";
 
-               # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï½èÍý¤ò¼Â¹Ô¤·¤Æ¥á¥Ã¥»¡¼¥¸¤òÊÖµÑ
-               } else {
-                       $wiki->save_page($pagename,$save_content,$sage);
-                       
-                       if($content ne ""){
-                               $wiki->redirect($pagename);
+                       # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï½èÍý¤ò¼Â¹Ô¤·¤Æ¥á¥Ã¥»¡¼¥¸¤òÊÖµÑ
                        } else {
-                               if($artno eq ""){
-                                       $wiki->set_title($pagename."¤òºï½ü¤·¤Þ¤·¤¿");
-                                       return $cgi->escapeHTML($pagename)."¤òºï½ü¤·¤Þ¤·¤¿¡£";
+                               $wiki->save_page($pagename, $save_content, $sage);
+                               
+                               if($content ne ""){
+                                       $wiki->redirect($pagename, $artno);
                                } else {
-                                       $wiki->set_title($pagename."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿");
-                                       return $cgi->escapeHTML($pagename)."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿¡£";
+                                       if($artno eq ""){
+                                               $wiki->set_title($pagename."¤òºï½ü¤·¤Þ¤·¤¿");
+                                               return Util::escapeHTML($pagename)."¤òºï½ü¤·¤Þ¤·¤¿¡£";
+                                       } else {
+                                               $wiki->set_title($pagename."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿");
+                                               return Util::escapeHTML($pagename)."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿¡£";
+                                       }
                                }
                        }
                }
        #--------------------------------------------------------------------------
+       # º¹Ê¬³Îǧ½èÍý
+       } elsif($cgi->param("diff") ne ""){
+               if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){
+                       if(length($content) > $wiki->config('page_max')){
+                               return $wiki->error('¥Ú¡¼¥¸¤¬Êݸ²Äǽ¤ÊºÇÂ祵¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£');
+                       }
+               }
+               $time = $cgi->param("lastmodified");
+               
+               my $mode = $wiki->get_edit_format();
+               my $orig_source = undef;
+               if($artno eq ""){
+                       $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode);
+               } else {
+                       $orig_source = $wiki->convert_from_fswiki(&read_by_part($wiki->get_page($pagename), $artno), $mode);
+               }
+               my $your_source = $content;
+               $your_source =~ s/\r\n/\n/g;
+               $your_source =~ s/\r/\n/g;
+               
+               if($orig_source eq $your_source){
+                       $buf .= '<p class="error">º¹Ê¬¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>';
+               } else {
+                       my $diff = plugin::core::Diff::_get_diff_html($wiki, $your_source, $orig_source);
+                       $buf .= $diff."<br>";
+               }
+               
+       #--------------------------------------------------------------------------
        # ¥×¥ì¥Ó¥å¡¼½èÍý
        } elsif($cgi->param("preview") ne ""){
+               if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){
+                       if(length($content) > $wiki->config('page_max')){
+                               return $wiki->error('¥Ú¡¼¥¸¤¬Êݸ²Äǽ¤ÊºÇÂ祵¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£');
+                       }
+               }
                $time = $cgi->param("lastmodified");
                $buf = "°Ê²¼¤Î¥×¥ì¥Ó¥å¡¼¤ò³Îǧ¤·¤Æ¤è¤í¤·¤±¤ì¤Ð¡ÖÊݸ¡×¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£<br>";
                if($content eq ""){
@@ -125,7 +179,7 @@ sub do_action {
                if($artno eq ""){
                        $content = $wiki->get_page($pagename);
                } else {
-                       $content = &read_by_part($wiki->get_page($pagename),$artno);
+                       $content = &read_by_part($wiki->get_page($pagename), $artno);
                }
        } elsif($template ne ""){
                #¥Æ¥ó¥×¥ì¡¼¥È¤ò»ØÄꤵ¤ì¤¿¾ì¹ç
@@ -139,16 +193,16 @@ sub do_action {
        my $tmpl = HTML::Template->new(filename=>$wiki->config('tmpl_dir')."/editform.tmpl",
                                    die_on_bad_params => 0);
 
-       $tmpl->param({SCRIPT_NAME   => $wiki->config('script_name'),
+       $tmpl->param({SCRIPT_NAME   => $wiki->create_url(),
                                  PAGE_NAME     => $pagename,
-                                 CONTENT       => $wiki->convert_from_fswiki($content,$format),
+                                 CONTENT       => $wiki->convert_from_fswiki($content, $format),
                                  LAST_MODIFIED => $time,
                                  ACTION        => 'EDIT',
                                  EXISTS_PAGE   => $wiki->page_exists($pagename),
                                  SAGE          => $sage});
        
        if($artno ne ""){
-               $tmpl->param(OPTIONAL_PARAMS=>[{NAME=>'artno',VALUE=>$artno}]);
+               $tmpl->param(OPTIONAL_PARAMS=>[{NAME=>'artno', VALUE=>$artno}]);
        }
 
        $buf .= $tmpl->output();