OSDN Git Service

FSWiki 3.6.4対応版
[fswiki/sandbox.git] / kgsoft / _ex_spam_filter_light / tags / _ex_spam_filter_light#20171207 / _ex_spam_filter_light / core.pm
1 ##########################################################################################
2 #
3 # ¥¹¥Ñ¥à¥Õ¥£¥ë¥¿¡¼¥×¥é¥°¥¤¥ó¡Ê³Ø½¬µ¡Ç½Ìµ¤·ÈÇ¡Ë
4 #¡Êcore::EditPage¥×¥é¥°¥¤¥ó¡Ê¥Ú¡¼¥¸¤ÎÊÔ½¸¡Ë¤Î¥ª¡¼¥Ð¡¼¥é¥¤¥É¡Ë
5 #
6 ##########################################################################################
7 use strict;
8
9 use plugin::core::EditPage;
10
11 # plugin::core::EditPage¤Îdo_action¥á¥½¥Ã¥É¤ÎÃÖ¤­´¹¤¨
12 package plugin::core::EditPage;
13
14 sub do_action {
15         my $self = shift;
16         my $wiki = shift;
17         my $cgi = $wiki->get_CGI;
18         
19         my $pagename = $cgi->param("page");
20         my $format   = $wiki->get_edit_format();
21         my $content  = $cgi->param("content");
22         my $sage     = $cgi->param("sage");
23         my $template = $cgi->param("template");
24         my $artno    = $cgi->param("artno");
25         my $time     = $wiki->get_last_modified($pagename);
26         
27         my $buf = "";
28         my $login = $wiki->get_login_info();
29
30         if($pagename eq ""){
31                 return $wiki->error("¥Ú¡¼¥¸¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
32         }
33         if($pagename =~ /([\|\[\]])|^:|([^:]:[^:])/){
34                 return $wiki->error("¥Ú¡¼¥¸Ì¾¤Ë»ÈÍѤǤ­¤Ê¤¤Ê¸»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£");
35         }
36         if(!$wiki->can_modify_page($pagename)){
37                 return $wiki->error("¥Ú¡¼¥¸¤ÎÊÔ½¸¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
38         }
39         
40         #--------------------------------------------------------------------------
41         # Êݸ½èÍý
42         if($cgi->param("save") ne ""){
43                 if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){
44                         if(length($content) > $wiki->config('page_max')){
45                                 return $wiki->error('¥Ú¡¼¥¸¤¬Êݸ²Äǽ¤ÊºÇÂ祵¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£');
46                         }
47                 }
48                 if($wiki->page_exists($pagename) && $cgi->param("lastmodified") != $time){
49                         $buf .= "<p><span class=\"error\">¥Ú¡¼¥¸¤Ï´û¤ËÊ̤Υ桼¥¶¤Ë¤è¤Ã¤Æ¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£ºÇ¿·ÈǤȤκ¹Ê¬¤ò³Îǧ¤·¤ÆºÆÅÙÊÔ½¸¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡£</span></p>";
50                         
51                         my $mode = $wiki->get_edit_format();
52                         my $orig_source = undef;
53                         if($artno eq ""){
54                                 $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode);
55                         } else {
56                                 $orig_source = $wiki->convert_from_fswiki(&read_by_part($wiki->get_page($pagename), $artno), $mode);
57                         }
58                         my $your_source = $content;
59                         $your_source =~ s/\r\n/\n/g;
60                         $your_source =~ s/\r/\n/g;
61                         
62                         my $diff = plugin::core::Diff::_get_diff_html($wiki, $orig_source, $your_source);
63                         $buf .= $diff."<br>";
64                         
65                         $content = $orig_source;
66                         
67                 } else {
68
69 #--------------------------------------------------------------------------------------------------
70   if($content){
71     unless(&plugin::_ex_spam_filter_light::Install::judgment_text($content)){
72       my $time = Util::format_date(time());
73       my $file = $wiki->config('log_dir')."/spam_page.txt";
74       if(open(SPAM_LOG, ">>$file")){
75         print SPAM_LOG "-" x 70 . "\n";
76         print SPAM_LOG "$pagename:$artno ($time)\n";
77         print SPAM_LOG "-" x 70 . "\n";
78         print SPAM_LOG "$content\n";
79         close(SPAM_LOG);
80       }
81       my $error_message = $wiki->error("ÊÔ½¸¤µ¤ì¤¿Ê¸¾Ï¤Ï¥¹¥Ñ¥àʸ¾Ï¤ÈȽÄꤵ¤ì¤Þ¤·¤¿¡£\n");
82       $content = Util::escapeHTML($content);
83       $content =~ s/\n/<br>/g;
84       $error_message .= "<p>\n";
85       $error_message .= "<div>Åê¹Æ¤µ¤ì¤¿Ê¸¾Ï¡§</div>\n";
86       $error_message .= "<div>¡ã¥Ú¡¼¥¸Ì¾¡ä</div>\n";
87       $error_message .= "<div>$pagename</div>\n";
88       $error_message .= "<div>¡ãËÜʸ¡ä</div>\n";
89       $error_message .= "<div>$content</div>\n";
90       $error_message .= "</p>\n";
91       return $error_message;
92     }
93   }
94 #--------------------------------------------------------------------------------------------------
95 \r
96                         #my $save_content = $content;
97                         my $mode = $wiki->get_edit_format();
98                         my $save_content = $wiki->convert_to_fswiki($content,$mode);
99
100                         # ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç
101                         if($artno ne ""){
102                                 $save_content = &make_save_source($wiki->get_page($pagename), $save_content, $artno, $wiki);
103                         }
104                         # FrontPage¤Ïºï½üÉÔ²Ä
105                         if($pagename eq $wiki->config("frontpage") && $save_content eq ""){
106                                 $buf = "<b>".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£</b>\n";
107
108                         # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï½èÍý¤ò¼Â¹Ô¤·¤Æ¥á¥Ã¥»¡¼¥¸¤òÊÖµÑ
109                         } else {
110                                 $wiki->save_page($pagename, $save_content, $sage);
111                                 
112                                 if($content ne ""){
113                                         $wiki->redirect($pagename, $artno);
114                                 } else {
115                                         if($artno eq ""){
116                                                 $wiki->set_title($pagename."¤òºï½ü¤·¤Þ¤·¤¿");
117                                                 return Util::escapeHTML($pagename)."¤òºï½ü¤·¤Þ¤·¤¿¡£";
118                                         } else {
119                                                 $wiki->set_title($pagename."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿");
120                                                 return Util::escapeHTML($pagename)."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿¡£";
121                                         }
122                                 }
123                         }
124                 }
125         #--------------------------------------------------------------------------
126         # º¹Ê¬³Îǧ½èÍý
127         } elsif($cgi->param("diff") ne ""){
128                 if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){
129                         if(length($content) > $wiki->config('page_max')){
130                                 return $wiki->error('¥Ú¡¼¥¸¤¬Êݸ²Äǽ¤ÊºÇÂ祵¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£');
131                         }
132                 }
133                 $time = $cgi->param("lastmodified");
134                 
135                 my $mode = $wiki->get_edit_format();
136                 my $orig_source = undef;
137                 if($artno eq ""){
138                         $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode);
139                 } else {
140                         $orig_source = $wiki->convert_from_fswiki(&read_by_part($wiki->get_page($pagename), $artno), $mode);
141                 }
142                 my $your_source = $content;
143                 $your_source =~ s/\r\n/\n/g;
144                 $your_source =~ s/\r/\n/g;
145                 
146                 if($orig_source eq $your_source){
147                         $buf .= '<p class="error">º¹Ê¬¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>';
148                 } else {
149                         my $diff = plugin::core::Diff::_get_diff_html($wiki, $your_source, $orig_source);
150                         $buf .= $diff."<br>";
151                 }
152                 
153         #--------------------------------------------------------------------------
154         # ¥×¥ì¥Ó¥å¡¼½èÍý
155         } elsif($cgi->param("preview") ne ""){
156                 if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){
157                         if(length($content) > $wiki->config('page_max')){
158                                 return $wiki->error('¥Ú¡¼¥¸¤¬Êݸ²Äǽ¤ÊºÇÂ祵¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£');
159                         }
160                 }
161                 $time = $cgi->param("lastmodified");
162                 $buf = "°Ê²¼¤Î¥×¥ì¥Ó¥å¡¼¤ò³Îǧ¤·¤Æ¤è¤í¤·¤±¤ì¤Ð¡ÖÊݸ¡×¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£<br>";
163                 if($content eq ""){
164                         if($pagename eq $wiki->config("frontpage") && $artno eq ""){
165                                 $buf = $buf."<b>¡Ê".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¡Ë</b>";
166                         } else {
167                                 if($artno eq ""){
168                                         $buf = $buf."<b>¡Ê¥Ú¡¼¥¸ÆâÍƤ϶õ¤Ç¤¹¡£¹¹¿·¤¹¤ë¤È¤³¤Î¥Ú¡¼¥¸¤Ïºï½ü¤µ¤ì¤Þ¤¹¡£¡Ë</b>";
169                                 } else {
170                                         $buf = $buf."<b>¡Ê¥Ú¡¼¥¸ÆâÍƤ϶õ¤Ç¤¹¡£¹¹¿·¤¹¤ë¤È¤³¤Î¥Ñ¡¼¥È¤Ïºï½ü¤µ¤ì¤Þ¤¹¡£¡Ë</b>";
171                                 }
172                         }
173                 }
174                 $content = $wiki->convert_to_fswiki($content,$format);
175                 $buf = $buf."<br>".$wiki->process_wiki($content);
176
177         } elsif($wiki->page_exists($pagename)) {
178                 #¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¾ì¹ç
179                 if($artno eq ""){
180                         $content = $wiki->get_page($pagename);
181                 } else {
182                         $content = &read_by_part($wiki->get_page($pagename), $artno);
183                 }
184         } elsif($template ne ""){
185                 #¥Æ¥ó¥×¥ì¡¼¥È¤ò»ØÄꤵ¤ì¤¿¾ì¹ç
186                 $content = $wiki->get_page($template);
187         }
188         
189         #--------------------------------------------------------------------------
190         # ÆþÎÏ¥Õ¥©¡¼¥à
191         $wiki->set_title($pagename."¤ÎÊÔ½¸",1);
192
193         my $tmpl = HTML::Template->new(filename=>$wiki->config('tmpl_dir')."/editform.tmpl",
194                                    die_on_bad_params => 0);
195
196         $tmpl->param({SCRIPT_NAME   => $wiki->create_url(),
197                                   PAGE_NAME     => $pagename,
198                                   CONTENT       => $wiki->convert_from_fswiki($content, $format),
199                                   LAST_MODIFIED => $time,
200                                   ACTION        => 'EDIT',
201                                   EXISTS_PAGE   => $wiki->page_exists($pagename),
202                                   SAGE          => $sage});
203         
204         if($artno ne ""){
205                 $tmpl->param(OPTIONAL_PARAMS=>[{NAME=>'artno', VALUE=>$artno}]);
206         }
207
208         $buf .= $tmpl->output();
209
210         # ¥×¥é¥°¥¤¥ó¤òÁÞÆþ
211         $buf .= $wiki->get_editform_plugin();
212         
213         return $buf;
214 }
215
216 1;