OSDN Git Service

BugTrack-wiki/353 : 番号付きリスト項目リストの組合せが正しく表示されない
[fswiki/fswiki-lite.git] / edit.cgi
1 #!/usr/bin/perl
2 ################################################################################
3 #
4 # FSWiki Lite - ¥Ú¡¼¥¸ºîÀ®¡¢ÊÔ½¸ÍÑ¥¹¥¯¥ê¥×¥È
5 #
6 ################################################################################
7 require "./lib/common.pl";
8 #===============================================================================
9 # ½èÍý¤Î¿¶¤êʬ¤±
10 #===============================================================================
11 &ReadParse();
12 if($in{"p"} eq ""){
13         $in{"p"} = "FrontPage";
14 }
15
16 if(!&Util::check_pagename($in{"p"})){
17         &Util::error("¥Ú¡¼¥¸Ì¾¤Ë»ÈÍѤǤ­¤Ê¤¤Ê¸»ú¤¬´Þ¤Þ¤ì¤Æ¤¤¤Þ¤¹¡£");
18 }
19
20 if($in{"a"} eq "edit"){
21         &edit_page();
22
23 } elsif($in{"a"} eq "new"){
24         &new_page();
25         
26 } elsif($in{"a"} eq "save"){
27         &save_page();
28         
29 } elsif($in{"a"} eq "attach"){
30         &attach_file();
31         
32 } elsif($in{"a"} eq "delconf"){
33         &attach_delete_confirm();
34         
35 } elsif($in{"a"} eq "delete"){
36         &attach_delete();
37         
38 } else {
39         &Wiki::redirect("FrontPage");
40 }
41
42 #-------------------------------------------------------------------------------
43 # ¥Ú¡¼¥¸¤ÎÊÔ½¸
44 #-------------------------------------------------------------------------------
45 sub edit_page {
46         my $source  = shift;
47         my $page    = $in{"p"};
48         my $preview = 0;
49         my $time    = $in{"t"};
50         
51         if($source ne ""){
52                 $preview = 1;
53         } elsif(&Wiki::page_exists($page)){
54                 $source = &Wiki::get_page($page);
55                 $time   = &Wiki::get_last_modified($page);
56         }
57         
58         &print_header($in{"p"}."¤ÎÊÔ½¸");
59         
60         if($preview==1){
61                 print &Wiki::process_wiki($source);
62         }
63         
64         print "<form action=\"$EDIT_SCRIPT\" method=\"POST\">\n";
65         print "  <textarea name=\"source\" rows=\"20\" cols=\"80\">".&Util::escapeHTML($source)."</textarea><br>\n";
66         print "  <input type=\"submit\" name=\"do_save\" value=\" Êݠ¸ \">\n";
67         print "  <input type=\"submit\" name=\"preview\" value=\"¥×¥ì¥Ó¥å¡¼\">\n";
68         print "  <input type=\"hidden\" name=\"a\" value=\"save\">\n";
69         print "  <input type=\"hidden\" name=\"p\" value=\"".&Util::escapeHTML($page)."\">\n";
70         print "  <input type=\"hidden\" name=\"t\" value=\"".&Util::escapeHTML($time)."\">\n";
71         print "</form>\n";
72         
73         opendir(DIR, $main::ATTACH_DIR);
74         my ($attachentry, @attachfiles);
75         while($attachentry = readdir(DIR)){
76                 my $type = rindex($attachentry,&Util::url_encode($page).".");
77                 if($type eq 0){
78                         push(@attachfiles, "$main::ATTACH_DIR/$attachentry");
79                 }
80         }
81         closedir(DIR);
82         foreach my $attach (@attachfiles){
83                 $attach =~ /^\Q$main::ATTACH_DIR\E\/(.+)\.(.+)$/;
84                 my $pagename = &Util::url_decode($1);
85                 my $filename = &Util::url_decode($2);
86                 print &Wiki::Plugin::ref($filename);
87                 printf("[<a href=\"%s\">ºï½ü</a>]\n",&Wiki::create_url({a=>delconf,p=>$pagename,f=>$filename}));
88         }
89         
90         print "<form action=\"$EDIT_SCRIPT\" method=\"post\" enctype=\"multipart/form-data\">\n";
91         print "  <input type=\"file\" name=\"f\">\n";
92         print "  <input type=\"submit\" name=\"do_attach\" value=\" Åº ÉÕ \">\n";
93         print "  <input type=\"hidden\" name=\"a\" value=\"attach\">\n";
94         print "  <input type=\"hidden\" name=\"p\" value=\"".&Util::escapeHTML($page)."\">\n";
95         print "</form>\n";
96         
97         &print_footer();
98 }
99
100 #-------------------------------------------------------------------------------
101 # ¥Ú¡¼¥¸¤ÎºîÀ®
102 #-------------------------------------------------------------------------------
103 sub new_page {
104         &print_header("¥Ú¡¼¥¸¤ÎºîÀ®");
105         print "<form action=\"$EDIT_SCRIPT\" method=\"POST\">\n";
106         print "  <input type=\"text\" name=\"p\" size=\"40\">\n";
107         print "  <input type=\"submit\" name=\"do_save\" value=\" ºî À® \">\n";
108         print "  <input type=\"hidden\" name=\"a\" value=\"edit\">\n";
109         print "</form>\n";
110         &print_footer();
111 }
112
113 #-------------------------------------------------------------------------------
114 # ¥Ú¡¼¥¸¤ÎÊݸ
115 #-------------------------------------------------------------------------------
116 sub save_page {
117         my $page   = $in{"p"};
118         my $source = $in{"source"};
119         
120         if($in{"preview"} ne ""){
121                 &edit_page($source);
122                 
123         } else {
124                 # ¥Ú¡¼¥¸¤Îºï½ü
125                 if($source eq ""){
126                         # ¹¹¿·¤Î½ÅÊ£¥Á¥§¥Ã¥¯
127                         if(&Wiki::page_exists($page)){
128                                 if($in{"t"} != &Wiki::get_last_modified($page)){
129                                         &Util::error("¤³¤Î¥Ú¡¼¥¸¤Ï´û¤Ë¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£");
130                                 } else {
131                                         &Wiki::remove_page($page);
132                                 }
133                         }
134                         &Wiki::redirect("FrontPage");
135                         
136                 # ¥Ú¡¼¥¸¤ÎºîÀ®¤Þ¤¿¤Ï¹¹¿·
137                 } else {
138                         # ¹¹¿·¤Î½ÅÊ£¥Á¥§¥Ã¥¯
139                         if(&Wiki::page_exists($page)){
140                                 if($in{"t"} != &Wiki::get_last_modified($page)){
141                                         &Util::error("¤³¤Î¥Ú¡¼¥¸¤Ï´û¤Ë¹¹¿·¤µ¤ì¤Æ¤¤¤Þ¤¹¡£");
142                                 }
143                         }
144                         &Wiki::save_page($page,$source);
145                         &Wiki::redirect($page);
146                 }
147         }
148 }
149
150 #-------------------------------------------------------------------------------
151 # ¥Õ¥¡¥¤¥ë¤ÎźÉÕ
152 #-------------------------------------------------------------------------------
153 sub attach_file {
154         my $page = $in{"p"};
155         my $file = $in{"f"};    # ¥Õ¥¡¥¤¥ëÆâÍƤò¼èÆÀ
156         my $name = $incfn{"f"}; # ¥Õ¥¡¥¤¥ë̾¤ò¼èÆÀ
157         
158         if($file eq ""){
159                 &Util::error("¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
160         }
161         
162         if($name eq ""){
163                 return;
164         }
165         
166         $name =~ s/\\/\//g;                        # ¥Ñ¥¹¶èÀÚ¤êʸ»ú¤ò/¤ËÊÑ´¹
167         $name = substr($name,rindex($name,"/")+1); # ¥Õ¥¡¥¤¥ë̾¤Î¤ß¤ò¼èÆÀ
168         
169         my $filename = sprintf("%s/%s.%s",$main::ATTACH_DIR,&Util::url_encode($page),&Util::url_encode($name));
170         open(DATA,">$filename");
171         binmode(DATA);
172         print DATA $file;
173         close(DATA);
174         
175         &Wiki::redirectURL(&Wiki::create_url({a=>edit,p=>$page}));
176 }
177
178 #-------------------------------------------------------------------------------
179 # ÅºÉÕ¥Õ¥¡¥¤¥ë¤Îºï½ü³Îǧ
180 #-------------------------------------------------------------------------------
181 sub attach_delete_confirm {
182         my $page = $in{"p"};
183         my $file = $in{"f"};
184         
185         if($file eq ""){
186                 &Util::error("¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
187         }
188         
189         &print_header("źÉÕ¥Õ¥¡¥¤¥ë¤Îºï½ü");
190         printf ("<p><a href=\"%s\">%s</a>¤«¤é".
191                         "<a href=\"%s\">%s</a>¤òºï½ü¤·¤Æ¤è¤í¤·¤¤¤Ç¤¹¤«¡©</p>\n",
192                         &Wiki::create_url({p=>$page}),&Util::escapeHTML($page),
193                         &Wiki::create_url({p=>$page,f=>$file},$main::DOWNLOAD_SCRIPT),&Util::escapeHTML($file));
194         
195         print "<form action=\"$EDIT_SCRIPT\" method=\"POST\">\n";
196         print "  <input type=\"submit\" name=\"do_delete\" value=\" ºï ½ü \">\n";
197         print "  <input type=\"hidden\" name=\"p\" value=\"".&Util::escapeHTML($page)."\">\n";
198         print "  <input type=\"hidden\" name=\"f\" value=\"".&Util::escapeHTML($file)."\">\n";
199         print "  <input type=\"hidden\" name=\"a\" value=\"delete\">\n";
200         print "</form>\n";
201         &print_footer();
202 }
203
204 #-------------------------------------------------------------------------------
205 # ÅºÉÕ¥Õ¥¡¥¤¥ë¤Îºï½ü
206 #-------------------------------------------------------------------------------
207 sub attach_delete {
208         my $page = $in{"p"};
209         my $file = $in{"f"};
210         
211         if($file eq ""){
212                 &Util::error("¥Õ¥¡¥¤¥ë¤¬»ØÄꤵ¤ì¤Æ¤¤¤Þ¤»¤ó¡£");
213         }
214         
215         my $filename = sprintf("$ATTACH_DIR/%s.%s",&Util::url_encode($page),&Util::url_encode($file));
216         unlink($filename);
217         
218         &Wiki::redirectURL(&Wiki::create_url({a=>edit,p=>$page}));
219 }