OSDN Git Service

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