1 ###############################################################################
3 # ¥Ú¡¼¥¸¤òÊÔ½¸¤¹¤ë¥×¥é¥°¥¤¥ó
5 ###############################################################################
6 package plugin::core::EditPage;
8 use plugin::core::Diff;
9 #==============================================================================
11 #==============================================================================
15 return bless $self,$class;
18 #==============================================================================
20 #==============================================================================
24 my $cgi = $wiki->get_CGI;
26 my $pagename = $cgi->param("page");
27 my $format = $wiki->get_edit_format();
28 my $content = $cgi->param("content");
29 my $sage = $cgi->param("sage");
30 my $template = $cgi->param("template");
31 my $artno = $cgi->param("artno");
32 my $time = $wiki->get_last_modified($pagename);
35 my $login = $wiki->get_login_info();
38 return $wiki->error("¥Ú¡¼¥¸¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
40 if($pagename =~ /([\|\[\]])|^:|([^:]:[^:])/){
41 return $wiki->error("¥Ú¡¼¥¸Ì¾¤Ë»ÈÍѤǤ¤Ê¤¤Ê¸»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£");
43 if(!$wiki->can_modify_page($pagename)){
44 return $wiki->error("¥Ú¡¼¥¸¤ÎÊÔ½¸¤Ïµö²Ä¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
47 #--------------------------------------------------------------------------
49 if($cgi->param("save") ne ""){
50 if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){
51 if(length($content) > $wiki->config('page_max')){
52 return $wiki->error('¥Ú¡¼¥¸¤¬Êݸ²Äǽ¤ÊºÇÂ祵¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£');
55 if($wiki->page_exists($pagename) && $cgi->param("lastmodified") != $time){
56 $buf .= "<p><span class=\"error\">¥Ú¡¼¥¸¤Ï´û¤ËÊ̤Υ桼¥¶¤Ë¤è¤Ã¤Æ¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£</span></p>";
58 my $mode = $wiki->get_edit_format();
59 my $orig_source = undef;
61 $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode);
63 $orig_source = $wiki->convert_from_fswiki(&read_by_part($wiki->get_page($pagename), $artno), $mode);
65 my $your_source = $content;
66 $your_source =~ s/\r\n/\n/g;
67 $your_source =~ s/\r/\n/g;
69 my $diff = plugin::core::Diff::_get_diff_html($orig_source, $your_source);
74 <li>Äɲ䵤줿Éôʬ¤Ï<ins class="diff">¤³¤Î¤è¤¦¤Ë</ins>ɽ¼¨¤µ¤ì¤Þ¤¹¡£</li>
75 <li>ºï½ü¤µ¤ì¤¿Éôʬ¤Ï<del class="diff">¤³¤Î¤è¤¦¤Ë</del>ɽ¼¨¤µ¤ì¤Þ¤¹¡£</li>
78 ºÇ¿·ÈǤȤκ¹Ê¬¤ò³Îǧ¤·¤ÆºÆÅÙÊÔ½¸¤ò¹Ô¤Ã¤Æ¤¯¤À¤µ¤¤¡§
80 <div class="diff">$diff</div>
83 $content = $orig_source;
86 #my $save_content = $content;
87 my $mode = $wiki->get_edit_format();
88 my $save_content = $wiki->convert_to_fswiki($content,$mode);
92 $save_content = &make_save_source($wiki->get_page($pagename), $save_content, $artno, $wiki);
95 if($pagename eq $wiki->config("frontpage") && $save_content eq ""){
96 $buf = "<b>".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£</b>\n";
98 # ¤½¤ì°Ê³°¤Î¾ì¹ç¤Ï½èÍý¤ò¼Â¹Ô¤·¤Æ¥á¥Ã¥»¡¼¥¸¤òÊÖµÑ
100 $wiki->save_page($pagename, $save_content, $sage);
103 $wiki->redirect($pagename, $artno);
106 $wiki->set_title($pagename."¤òºï½ü¤·¤Þ¤·¤¿");
107 return Util::escapeHTML($pagename)."¤òºï½ü¤·¤Þ¤·¤¿¡£";
109 $wiki->set_title($pagename."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿");
110 return Util::escapeHTML($pagename)."¤Î¥Ñ¡¼¥È¤òºï½ü¤·¤Þ¤·¤¿¡£";
115 #--------------------------------------------------------------------------
117 } elsif($cgi->param("diff") ne ""){
118 if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){
119 if(length($content) > $wiki->config('page_max')){
120 return $wiki->error('¥Ú¡¼¥¸¤¬Êݸ²Äǽ¤ÊºÇÂ祵¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£');
123 $time = $cgi->param("lastmodified");
125 my $mode = $wiki->get_edit_format();
126 my $orig_source = undef;
128 $orig_source = $wiki->convert_from_fswiki($wiki->get_page($pagename), $mode);
130 $orig_source = $wiki->convert_from_fswiki(&read_by_part($wiki->get_page($pagename), $artno), $mode);
132 my $your_source = $content;
133 $your_source =~ s/\r\n/\n/g;
134 $your_source =~ s/\r/\n/g;
138 <li>Äɲ䵤줿Éôʬ¤Ï<ins class="diff">¤³¤Î¤è¤¦¤Ë</ins>ɽ¼¨¤µ¤ì¤Þ¤¹¡£</li>
139 <li>ºï½ü¤µ¤ì¤¿Éôʬ¤Ï<del class="diff">¤³¤Î¤è¤¦¤Ë</del>ɽ¼¨¤µ¤ì¤Þ¤¹¡£</li>
143 if($orig_source eq $your_source){
144 $buf .= '<p class="error">º¹Ê¬¤Ï¤¢¤ê¤Þ¤»¤ó¡£</p>';
146 my $diff = plugin::core::Diff::_get_diff_html($your_source, $orig_source);
147 $diff =~ s/\n/<br>/g;
148 $buf .= qq|<div class="diff">$diff</div>|;
151 #--------------------------------------------------------------------------
153 } elsif($cgi->param("preview") ne ""){
154 if($wiki->config('page_max') ne '' && $wiki->config('page_max') > 0){
155 if(length($content) > $wiki->config('page_max')){
156 return $wiki->error('¥Ú¡¼¥¸¤¬Êݸ²Äǽ¤ÊºÇÂ祵¥¤¥º¤òĶ¤¨¤Æ¤¤¤Þ¤¹¡£');
159 $time = $cgi->param("lastmodified");
160 $buf = "°Ê²¼¤Î¥×¥ì¥Ó¥å¡¼¤ò³Îǧ¤·¤Æ¤è¤í¤·¤±¤ì¤Ð¡ÖÊݸ¡×¥Ü¥¿¥ó¤ò²¡¤·¤Æ¤¯¤À¤µ¤¤¡£<br>";
162 if($pagename eq $wiki->config("frontpage") && $artno eq ""){
163 $buf = $buf."<b>¡Ê".&Util::escapeHTML($wiki->config("frontpage"))."¤Ïºï½ü¤¹¤ë¤³¤È¤Ï¤Ç¤¤Þ¤»¤ó¡£¡Ë</b>";
166 $buf = $buf."<b>¡Ê¥Ú¡¼¥¸ÆâÍƤ϶õ¤Ç¤¹¡£¹¹¿·¤¹¤ë¤È¤³¤Î¥Ú¡¼¥¸¤Ïºï½ü¤µ¤ì¤Þ¤¹¡£¡Ë</b>";
168 $buf = $buf."<b>¡Ê¥Ú¡¼¥¸ÆâÍƤ϶õ¤Ç¤¹¡£¹¹¿·¤¹¤ë¤È¤³¤Î¥Ñ¡¼¥È¤Ïºï½ü¤µ¤ì¤Þ¤¹¡£¡Ë</b>";
172 $content = $wiki->convert_to_fswiki($content,$format);
173 $buf = $buf."<br>".$wiki->process_wiki($content);
175 } elsif($wiki->page_exists($pagename)) {
176 #¥Ú¡¼¥¸¤¬Â¸ºß¤¹¤ë¾ì¹ç
178 $content = $wiki->get_page($pagename);
180 $content = &read_by_part($wiki->get_page($pagename), $artno);
182 } elsif($template ne ""){
183 #¥Æ¥ó¥×¥ì¡¼¥È¤ò»ØÄꤵ¤ì¤¿¾ì¹ç
184 $content = $wiki->get_page($template);
187 #--------------------------------------------------------------------------
189 $wiki->set_title($pagename."¤ÎÊÔ½¸",1);
191 my $tmpl = HTML::Template->new(filename=>$wiki->config('tmpl_dir')."/editform.tmpl",
192 die_on_bad_params => 0);
194 $tmpl->param({SCRIPT_NAME => $wiki->create_url(),
195 PAGE_NAME => $pagename,
196 CONTENT => $wiki->convert_from_fswiki($content, $format),
197 LAST_MODIFIED => $time,
199 EXISTS_PAGE => $wiki->page_exists($pagename),
203 $tmpl->param(OPTIONAL_PARAMS=>[{NAME=>'artno', VALUE=>$artno}]);
206 $buf .= $tmpl->output();
209 $buf .= $wiki->get_editform_plugin();
214 #==============================================================================
215 # ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç¤ÎÊÔ½¸Éôʬ¤Î¼è¤ê½Ð¤·
216 #==============================================================================
224 foreach my $line (split(/\n/,$page)){
225 if($line=~/^(!{1,3})/){
226 if($flag==1 && $level<=length($1)){
242 #==============================================================================
243 # ¥Ñ¡¼¥ÈÊÔ½¸¤Î¾ì¹ç¤ÎÊݸÍÑ¥½¡¼¥¹¤ÎºîÀ®
244 #==============================================================================
245 sub make_save_source {
254 foreach my $line (split(/\n/,$org)){
255 if($line=~/^(!{1,3})/){
256 if($flag==1 && $level<=length($1)){
263 # ºÇ¸å¤¬²þ¹Ô¤Ç¤Ê¤¤¾ì¹ç¤À¤±²þ¹Ô¤òÄɲáʼ¡¤Î¥»¥¯¥·¥ç¥ó¤È¤¯¤Ã¤Ä¤¤¤Æ¤·¤Þ¤¦¤¿¤á¡Ë
264 $buf .= "\n" unless($edit =~ /\n$/);
275 #==============================================================================
276 # ¥Ú¡¼¥¸É½¼¨»þ¤Î¥Õ¥Ã¥¯¥á¥½¥Ã¥É
277 # ¡ÖÊÔ½¸¡×¥á¥Ë¥å¡¼¤ò͸ú¤Ë¤·¤Þ¤¹
278 #==============================================================================
282 my $cgi = $wiki->get_CGI;
284 my $pagename = $cgi->param("page");
285 my $login = $wiki->get_login_info();
288 if($wiki->can_modify_page($pagename)){
289 $wiki->add_menu("ÊÔ½¸",$wiki->create_url({ action=>"EDIT",page=>$pagename }));