OSDN Git Service

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