2 ###############################################################################
4 # FreeStyleWiki ¥Õ¥í¥ó¥È¥¨¥ó¥ÉCGI¥¹¥¯¥ê¥×¥È
6 ###############################################################################
8 if(exists $ENV{MOD_PERL}){
9 # ¥«¥ì¥ó¥È¥Ç¥£¥ì¥¯¥È¥ê¤ÎÊѹ¹
10 chdir($ENV{FSWIKI_HOME});
13 # ModPerl::Registry(Prefork)¤Ç¤Ï¼Â¹Ô»þ¤ËÊѹ¹¤µ¤ì¤Æ¤¤¤ë²ÄǽÀ¤¬¤¢¤ë
14 if(exists $ENV{MOD_PERL}){
15 chdir($ENV{FSWIKI_HOME});
18 #==============================================================================
19 # ¥â¥¸¥å¡¼¥ë¤Î¥¤¥ó¥¯¥ë¡¼¥É
20 #==============================================================================
23 # ModPerl::Registry(Prefork)¤Ç¤Ï@INC¤¬½é´ü²½¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤¬¤¢¤ë
24 unshift @INC, './lib' if(exists $ENV{MOD_PERL});
26 #use CGI::Carp qw(fatalsToBrowser);
33 # ¤³¤ì¤ò¤ä¤é¤Ê¤¤¤ÈApache::Registory¤ÇÆ°¤«¤Ê¤¤
34 if(exists $ENV{MOD_PERL}){
35 eval("use Digest::Perl::MD5;");
36 eval("use plugin::core::Diff;");
37 eval("use plugin::pdf::PDFMaker;");
38 &Jcode::load_module("Jcode::Unicode") unless $Jcode::USE_ENCODE;
41 #==============================================================================
42 # CGI¤ÈWiki¤Î¥¤¥ó¥¹¥¿¥ó¥¹²½
43 #==============================================================================
44 my $wiki = Wiki->new('setup.dat');
45 my $cgi = $wiki->get_CGI();
49 # SessionÍѥǥ£¥ì¥¯¥È¥ê¤ÏFarm¤Ç¤â¶¦Ä̤˻ÈÍѤ¹¤ë
50 $wiki->config('session_dir',$wiki->config('log_dir')) if (!$wiki->config('session_dir'));
52 #==============================================================================
53 # Farm¤È¤·¤ÆÆ°ºî¤¹¤ë¾ì¹ç
54 #==============================================================================
55 my $path_info = $cgi->path_info();
57 if(length($path_info) > 0){
58 # Farm¤¬¤¢¤ë¤«³Îǧ¤¹¤ë
59 unless($path_info =~ m<^(/[A-Za-z0-9]+)*/?$> and -d $wiki->config('data_dir').$path_info){
60 CORE::die("Wiki¤¬Â¸ºß¤·¤Þ¤»¤ó¡£");
63 # PATH_INFO¤ÎºÇ¸å¤¬/¤À¤Ã¤¿¤é/¤Ê¤·¤ÎURL¤ËžÁ÷¤¹¤ë
64 if($path_info =~ m|/$|) {
66 $wiki->redirectURL($cgi->url().$path_info);
68 $path_info =~ m</([^/]+)$>;
69 $wiki->config('script_name', $1);
70 $wiki->config('data_dir' , $wiki->config('data_dir' ).$path_info);
71 $wiki->config('config_dir' , $wiki->config('config_dir').$path_info);
72 $wiki->config('backup_dir' , $wiki->config('backup_dir').$path_info);
73 $wiki->config('log_dir' , $wiki->config('log_dir' ).$path_info);
75 if(!($wiki->config('theme_uri') =~ /^(\/|http:|https:|ftp:)/)){
76 my @paths = split(/\//,$path_info);
77 $path_count = $#paths;
78 for(my $i=0;$i<$path_count;$i++){
79 $wiki->config('theme_uri','../'.$wiki->config('theme_uri'));
84 #==============================================================================
85 # ÀßÄê¤òÈ¿±Ç¡Ê¤â¤¦¤Á¤ç¤Ã¤È¥¹¥Þ¡¼¥È¤Ë¤ä¤ê¤¿¤¤¤Í¡Ë
86 #==============================================================================
87 my $config = &Util::load_config_hash($wiki,$wiki->config('config_file'));
88 foreach my $key (keys(%$config)){
89 $wiki->config($key,$config->{$key});
91 # ¸ÄÊ̤ËÀßÄ꤬ɬÍפʤâ¤Î¤À¤±¾å½ñ¤
93 $wiki->config('theme_uri')."/".$config->{theme}."/".$config->{theme}.".css");
94 $wiki->config('site_tmpl',
95 $wiki->config('tmpl_dir')."/site/".$config->{site_tmpl_theme}."/".$config->{site_tmpl_theme}.".tmpl");
96 $wiki->config('site_handyphone_tmpl',
97 $wiki->config('tmpl_dir')."/site/".$config->{site_tmpl_theme}."/".$config->{site_tmpl_theme}."_handyphone.tmpl");
98 $wiki->config('site_smartphone_tmpl',
99 $wiki->config('tmpl_dir')."/site/".$config->{site_tmpl_theme}."/".$config->{site_tmpl_theme}."_smartphone.tmpl");
101 #==============================================================================
102 # ¥¿¥¤¥à¥¢¥¦¥È¤·¤Æ¤¤¤ë¥»¥Ã¥·¥ç¥ó¤òÇË´þ
103 #==============================================================================
104 $cgi->remove_session($wiki);
106 #==============================================================================
107 # ¥æ¡¼¥¶¾ðÊó¤ÎÆɤ߹þ¤ß
108 #==============================================================================
109 my $users = &Util::load_config_hash($wiki,$wiki->config('userdat_file'));
110 foreach my $id (keys(%$users)){
111 my ($pass,$type) = split(/\t/,$users->{$id});
112 $wiki->add_user($id,$pass,$type);
115 #==============================================================================
116 # ¥×¥é¥°¥¤¥ó¤Î¥¤¥ó¥¹¥È¡¼¥ë¤È½é´ü²½
117 #==============================================================================
118 my @plugins = split(/\n/,&Util::load_config_text($wiki,$wiki->config('plugin_file')));
119 my $plugin_error = '';
120 foreach(sort(@plugins)){
121 $plugin_error .= $wiki->install_plugin($_);
123 # ¥×¥é¥°¥¤¥ó¤´¤È¤Î½é´ü²½½èÍý¤òµ¯Æ°
124 $wiki->do_hook("initialize");
126 #==============================================================================
127 # ¥¢¥¯¥·¥ç¥ó¥Ï¥ó¥É¥é¤Î¸Æ¤Ó½Ð¤·
128 #==============================================================================
129 my $action = $cgi->param("action");
130 my $content = $wiki->call_handler($action);
132 # ¥×¥é¥°¥¤¥ó¤Î¥¤¥ó¥¹¥È¡¼¥ë¤Ë¼ºÇÔ¤·¤¿¾ì¹ç
133 $content = $plugin_error . $content if $plugin_error ne '';
135 #==============================================================================
137 #==============================================================================
139 my $is_handyphone = &Util::handyphone();
140 my $is_smartphone = &Util::smartphone();
141 my $template_name = "";
143 if ($is_handyphone) {
144 $template_name = 'site_handyphone_tmpl';
145 } elsif ($is_smartphone) {
146 $template_name = 'site_smartphone_tmpl';
148 $template_name = 'site_tmpl';
151 # ¥È¥Ã¥×¥Ú¡¼¥¸¤«¤É¤¦¤«¤òȽÄê
153 if($cgi->param("page") eq $wiki->config("frontpage")){
157 # ¥Ú¡¼¥¸¤Î¥¿¥¤¥È¥ë¤ò·èÄê
159 if($cgi->param('action') eq "" && $wiki->page_exists($cgi->param('page')) && $wiki->is_installed('search')){
160 $title = "<a href=\"".$wiki->create_url({action=>"SEARCH",word=>$wiki->get_title()})."\">".
161 &Util::escapeHTML($wiki->get_title())."</a>";
163 $title = &Util::escapeHTML($wiki->get_title());
166 #------------------------------------------------------------------------------
168 #------------------------------------------------------------------------------
169 my $header_tmpl = HTML::Template->new(filename => $wiki->config('tmpl_dir')."/header.tmpl",
170 die_on_bad_params => 0,
171 case_sensitive => 1);
174 foreach(sort {$b->{weight}<=>$a->{weight}} @{$wiki->{menu}}){
175 if($_->{href} ne ""){
179 $header_tmpl->param(MENU => \@menu,
181 my $header = $header_tmpl->output();
183 #------------------------------------------------------------------------------
185 #------------------------------------------------------------------------------
186 my $footer_tmpl = HTML::Template->new(filename => $wiki->config('tmpl_dir')."/footer.tmpl",
187 die_on_bad_params => 0,
188 case_sensitive => 1);
190 # ¥³¥Ô¡¼¥é¥¤¥È¤òɽ¼¨¤¹¤ë¤«¤É¤¦¤«
191 my $admin_name = $wiki->config('admin_name');
192 my $admin_mail = $wiki->config('admin_mail_pub');
193 my $out_copyright = 1;
194 if($admin_name eq ""){ $admin_name = $admin_mail; }
195 if($admin_name eq "" && $admin_mail eq ""){ $out_copyright = 0; }
197 $footer_tmpl->param(ADMIN_NAME => $admin_name,
198 ADMIN_MAIL => $admin_mail,
199 OUT_COPYRIGHT => $out_copyright,
201 VERSION => Wiki->VERSION,
204 if(exists $ENV{MOD_PERL}){
205 $footer_tmpl->param(MOD_PERL=>$ENV{MOD_PERL});
208 my $footer = $footer_tmpl->output();
210 #------------------------------------------------------------------------------
211 # ¥µ¥¤¥È¥Æ¥ó¥×¥ì¡¼¥È¤Î½èÍý
212 #------------------------------------------------------------------------------
213 # ¥Æ¥ó¥×¥ì¡¼¥È¤ÎÆɤ߹þ¤ß
214 my $template = HTML::Template->new(filename => $wiki->config($template_name),
215 die_on_bad_params => 0,
216 case_sensitive => 1);
218 # »²¾È¸¢¸Â¤¬¤¢¤ë¤«¤É¤¦¤«
220 if($action ne '' || ($action eq '' && $wiki->can_show($cgi->param('page')))){
224 # head¥¿¥°Æâ¤Ëɽ¼¨¤¹¤ë¾ðÊó¤òºîÀ®
226 foreach (@{$wiki->{'head_info'}}){
227 $head_info .= $_."\n";
230 # ¥Æ¥ó¥×¥ì¡¼¥È¤Ë¥Ñ¥é¥á¡¼¥¿¤ò¥»¥Ã¥È
231 $template->param(SITE_TITLE => &Util::escapeHTML($wiki->get_title()." - ".$wiki->config('site_title')),
237 EDIT_MODE => $action,
238 CAN_SHOW => $can_show,
239 HEAD_INFO => $head_info,
240 SITE_NAME => $wiki->config('site_title'));
242 my $login = $wiki->get_login_info();
244 IS_ADMIN => defined($login) && $login->{type}==0,
245 IS_LOGIN => defined($login)
248 if ($is_handyphone) {
250 $output = $template->output;
251 &Jcode::convert(\$output,"sjis");
254 my $usercss = &Util::load_config_text($wiki,$wiki->config('usercss_file'));
256 if($config->{'theme'} eq ''){
257 # ¥Æ¡¼¥Þ¤¬»ÈÍѤµ¤ì¤Æ¤ª¤é¤º¡¢³°ÉôCSS¤¬»ØÄꤵ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¤½¤ì¤ò»ÈÍÑ
258 if($config->{'outer_css'} ne ''){
259 $wiki->config('css',$config->{'outer_css'});
260 # ¥Æ¡¼¥Þ¤â³°ÉôCSS¤â»ØÄꤵ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¤Ï¥¹¥¿¥¤¥ë¥·¡¼¥È¤ò»ÈÍѤ·¤Ê¤¤
262 $wiki->config('css','');
266 $template->param(HAVE_USER_CSS => $usercss ne "",
267 THEME_CSS => $wiki->config('css'),
268 USER_CSS => &Util::escapeHTML($usercss),
269 THEME_URI => $wiki->config('theme_uri'));
271 # ¥Ú¡¼¥¸Ì¾¤òEXIST_PAGE_¥Ú¡¼¥¸Ì¾¤È¤¤¤¦¥Ñ¥é¥á¡¼¥¿¤Ë¥»¥Ã¥È
272 # ¤¿¤À¤·¡¢¥¹¥é¥Ã¥·¥å¤ò´Þ¤à¥Ú¡¼¥¸Ì¾¤Ï¥»¥Ã¥È¤·¤Ê¤¤
273 my @pagelist = $wiki->get_page_list();
274 foreach my $page (@pagelist){
275 if(index($page,"/")==-1 && $wiki->can_show($page)){
276 $template->param("EXIST_PAGE_".$page=>1);
280 $output = $template->output;
283 # <!--FSWIKI_INCLUDE PAGE="¥Ú¡¼¥¸Ì¾"-->
284 # ¥Ú¡¼¥¸Ì¾¤ÇWikiName¤ò»ØÄꤹ¤ë¡£
285 my $fswiki_include_tag = '<!--\s*FSWIKI_INCLUDE\s+PAGE\s*=\s*"([^"]*)"\s*-->';
286 while($output =~ /$fswiki_include_tag/o){
287 if($wiki->page_exists($1) && $wiki->can_show($1)){
288 $output =~ s/$fswiki_include_tag/$wiki->process_wiki($wiki->get_page($1))/oe;
290 $output =~ s/$fswiki_include_tag//o;
295 #------------------------------------------------------------------------------
297 #------------------------------------------------------------------------------
300 print "Content-Type: text/html;charset=Shift_JIS\n";
302 print "Content-Type: text/html;charset=EUC-JP\n";
304 print "Pragma: no-cache\n";
305 print "Cache-Control: no-cache\n\n";
312 $ENV{'PATH_INFO'} = undef;
313 $wiki->_process_before_exit();
315 if($msg && index($msg, 'safe_die')<0){
316 $msg = Util::escapeHTML($msg);
317 print "Content-Type: text/html\n\n";
318 print "<html><head><title>Software Error</title></head>";
319 print "<body><h1>Software Error:</h1><p>$msg</p></body></html>";