/[pub]/suikawiki/script/default/suikawiki-config.ph
Suika

Contents of /suikawiki/script/default/suikawiki-config.ph

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.18 - (hide annotations) (download)
Fri Apr 30 06:04:17 2004 UTC (20 years, 6 months ago) by wakaba
Branch: MAIN
Changes since 1.17: +8 -5 lines
Use FindBin and File::Spec for portability.

1 wakaba 1.10 =head1 NAME
2    
3     suikawiki-config.ph - SuikaWiki: Configuration for SuikaWiki HTTP CGI Driver
4    
5     =head1 DESCRIPTION
6    
7     This is a configuration file for SuikaWiki Driver for HTTP CGI Script
8     (SWHCS). Basic options such as WikiDB directory mapping and
9     special purpose WikiPage names can be customized with this file.
10    
11     More complex customizing, e.g. modifying navigation bar or
12     adding new mode, is also possible by config.ph (generated from
13     config.wp2) and WikiPlugin modules. For more information,
14     see <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>.
15    
16     This file is part of SuikaWiki.
17    
18     =cut
19    
20     package wiki::driver::http;
21 w 1.1 use strict;
22 wakaba 1.15
23 wakaba 1.17 ## These lines should be removed after utf8 support
24     BEGIN {
25     $Message::Util::Formatter::Base::Token = qr/[\w._+\x80-\xFF-]+/;
26     require Message::Util::Formatter::Base;
27     }
28     use Message::Util::Error;
29    
30     use Message::Util::QName::General [q<ExpandedURI>], {
31     'media-type' => q<http://suika.fam.cx/~wakaba/-temp/2004/04/24/mt#>,
32     };
33    
34 wakaba 1.14 push our @Config, sub ($) {
35 wakaba 1.10 my $WIKI = shift;
36 wakaba 1.18 use FindBin q($Bin);
37     use File::Spec;
38 wakaba 1.10
39     ## -- Filesystem path mapping
40 wakaba 1.6 for (
41 wakaba 1.17 [db__cache__dir => q"./wikidata/cache/"],
42     [db__cache_struct__file => q"./wikidata/cache/struct.db"],
43 wakaba 1.12 [db__content__dir => q"./wikidata/page/"],
44 wakaba 1.6 [db__content__error_log => q"./wikidata/log/db-content.log"],
45 wakaba 1.12 [db__bdb__home_dir => q"./wikidata/lock/"],
46     [db__bdb__log_dir => q"./wikidata/log/bdb/"],
47     [db__bdb__log_file => q"./wikidata/log/bdb.log"],
48     [db__bdb__temp_dir => q"./wikidata/lock/"],
49 wakaba 1.6 [db__lock__dir => q"./wikidata/lock/"],
50 wakaba 1.12 [db__lock__log_file => q"./wikidata/log/lock.log"],
51     [db__log__dir => q"./wikidata/log/"],
52     [db__temp__dir => q"./wikidata/lock/"],
53 wakaba 1.16 # [namazu__index_dir => q"/var/namazu/index/wiki"],
54 wakaba 1.6 ) {
55 wakaba 1.12 ## On system that does not set current directory as main script
56     ## directory, you should specify it instead of using "abs_path".
57 wakaba 1.18 $WIKI->{config}->{path_to}->{$_->[0]} = File::Spec->catfile ($Bin, $_->[1]);
58 wakaba 1.6 }
59    
60 wakaba 1.16 =begin comment
61    
62     ## -- Namazu URI Mapping (See SuikaWiki:SuikaWiki//Namazu) --
63     $WIKI->{config}->{nmz__uri_to_uri} = sub {
64     my ($nmzuri, %opt) = @_;
65     if ($nmzuri =~ s!^\Q$opt{o}->{wiki}->{config}->{path_to}->{db__content__dir}\E/*!!o) {
66     $nmzuri =~ s/\.txt$//;
67     return $opt{o}->{wiki}->uri_reference
68     (page => $opt{o}->{wiki}->name ([
69     map {s/([0-9A-F][0-9A-F])/pack 'C', hex $1/ge; $_}
70     split m!\.ns/!, $nmzuri
71     ]), base => 1);
72     } else {
73     return ($nmzuri, $nmzuri);
74     }
75     };
76    
77     =end comment
78    
79 wakaba 1.18 =cut
80    
81 wakaba 1.10 ## -- WikiPlugin
82 wakaba 1.6 push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
83 wakaba 1.8 my $wiki = shift;
84 wakaba 1.10
85     ## Installed plugin modules
86 wakaba 1.8 $wiki->{plugin}->load_directory (qw(
87     lib/SuikaWiki/Plugin/
88     misc/plugins/
89 wakaba 1.10 misc/plugins/form/
90 wakaba 1.9 misc/plugins/format/
91 wakaba 1.10 misc/plugins/link/
92 wakaba 1.8 misc/plugins/view/
93     ));
94 wakaba 1.10
95     ## Configuration file as pseudo-plugin module
96 wakaba 1.6 require 'wikidata/config.ph';
97     };
98    
99 wakaba 1.10 ## -- WikiDatabase: Mapping logical to physical
100 wakaba 1.6 push @{$WIKI->{event}->{database_loaded}}, sub {
101 wakaba 1.10 my $wiki = shift;
102    
103 wakaba 1.6 ## Main content
104 wakaba 1.10 $wiki->{db}->_set_prop_db (content => {-db_open => sub {
105 wakaba 1.17 require SuikaWiki::DB::FileSystem::LeafFile;
106     SuikaWiki::DB::FileSystem::LeafFile->new
107     (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
108     directory_suffix => '.ns',
109     file_suffix => '.txt',
110     root_key => $wiki->{config}->{page}->{Default},
111 wakaba 1.18 -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
112 wakaba 1.17 }, -db_close => sub {
113     my %opt = @_;
114     $opt{prop_info}->{-db}->close;
115     delete $opt{prop_info}->{-db};
116     }});
117    
118     ## Properties
119     $wiki->{db}->_set_prop_db (content_prop => {-db_open => sub {
120     require SuikaWiki::DB::FileSystem::LeafProp;
121     SuikaWiki::DB::FileSystem::LeafProp->new
122     (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
123     directory_suffix => '.ns',
124     file_suffix => '.prop',
125     root_key => $wiki->{config}->{page}->{Default},
126 wakaba 1.18 -lock => $wiki->{var}->{db}->{lock_prop}->('content_prop'));
127 wakaba 1.8 }, -db_close => sub {
128     my %opt = @_;
129     $opt{prop_info}->{-db}->close;
130     delete $opt{prop_info}->{-db};
131     }});
132 wakaba 1.6
133     ## Last modified
134 wakaba 1.10 $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
135 wakaba 1.6 require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
136     SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
137 wakaba 1.10 (directory => $wiki->{config}->{path_to}->{db__content__dir},
138     -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
139 wakaba 1.8 }, -prop => 'last_modified', -db_close => sub {
140     my %opt = @_;
141     $opt{prop_info}->{-db}->close;
142     delete $opt{prop_info}->{-db};
143     }});
144 wakaba 1.10
145 wakaba 1.12 ## Cache DBs
146 wakaba 1.10 require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
147     my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
148 wakaba 1.16 (directory => $wiki->{config}->{path_to}->{db__cache__dir},
149     expires => 86400 * 3, removes => 86400 * 3); # 3 days
150 wakaba 1.10 $wiki->{db}->_set_prop_db (m__search_result =>
151     {-db => $cachedb, -prop => 'search_result', -db_close => sub {
152     my %opt = @_;
153     $opt{prop_info}->{-db}->close;
154     delete $opt{prop_info}->{-db};
155     }});
156     $wiki->{db}->_set_prop_db (wpp__headsummary =>
157     {-db => $cachedb, -prop => 'headsummary', -db_close => sub {
158     my %opt = @_;
159     $opt{prop_info}->{-db}->close;
160     delete $opt{prop_info}->{-db};
161     }});
162 wakaba 1.14 $wiki->{db}->_set_prop_db (ref__item_template =>
163     {-db => $cachedb, -prop => 'refereritem', -db_close => sub {
164     my %opt = @_;
165     $opt{prop_info}->{-db}->close;
166     delete $opt{prop_info}->{-db};
167     }});
168 wakaba 1.10
169 wakaba 1.12 ## Referer Database (See Referer plugin module)
170     $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
171 wakaba 1.17 require SuikaWiki::DB::FileSystem::Count;
172     SuikaWiki::DB::FileSystem::Count->new
173     (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
174     directory_suffix => '.ns',
175     file_suffix => '.ref',
176     root_key => $wiki->{config}->{page}->{Default},
177     auto_mkdir => 0,
178     -lock => $wiki->{var}->{db}->{lock_prop}->('referer'));
179     }, -db_close => sub {
180     my %opt = @_;
181     $opt{prop_info}->{-db}->close;
182     delete $opt{prop_info}->{-db};
183 wakaba 1.12 }});
184    
185 wakaba 1.10 ## Additional WikiDB properties should be defined here
186     # ...
187 wakaba 1.6 };
188    
189 wakaba 1.12 push @{$WIKI->{event}->{input_close}}, sub {
190     my ($wiki, $event) = @_;
191 wakaba 1.13 try {
192     SuikaWiki::Plugin->module_package ('Referer')
193 wakaba 1.12 ->add_referer (wiki => $wiki,
194     uri => $wiki->{input}->meta_variable
195     ('HTTP_REFERER'));
196 wakaba 1.13 } catch SuikaWiki::Plugin::error with {
197     my $err = shift;
198     $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
199     };
200     try {
201     SuikaWiki::Plugin->module_package ('RequestLog')
202 wakaba 1.12 ->http_request_log (wiki => $wiki,
203     prop => 'log__http_request');
204 wakaba 1.13 } catch SuikaWiki::Plugin::error with {
205     my $err = shift;
206     $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
207     };
208 wakaba 1.12 };
209    
210 wakaba 1.10 ## -- WikiName of special purpose WikiPages
211 wakaba 1.8 $WIKI->{config}->{page} = {
212 wakaba 1.11 Default => $WIKI->name ([qw/HomePage/]),
213     InterWikiName => $WIKI->name ([qw/Wiki InterWikiName/]),
214     NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),
215     'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),
216 wakaba 1.8 };
217    
218 wakaba 1.10 ## -- WikiNamespace constants
219 wakaba 1.11 $WIKI->{config}->{name}->{space} = {
220     separator => '//',
221     separator_reg => qr#\s*//\s*#,
222     self => '.',
223     parent => '..',
224 wakaba 1.17 root => '//',
225 wakaba 1.11 };
226 wakaba 1.7
227 wakaba 1.10 ## -- Default character codes
228 wakaba 1.11 $WIKI->{config}->{charset} = {
229     ## Internal code - MUST be ASCII + 8bit coding scheme
230     internal => 'euc-jp',
231     ## Default output code
232     output => 'iso-2022-jp',
233     ## "query" part in URI reference
234     uri_query => '', # auto-detected
235     uri_query_encode => 'euc-jp', ## For compatibility w/ SuikaWiki 2
236     uri_param => '', # auto-detected
237     uri_param_encode => 'euc-jp', ## For compatibility w/ SuikaWiki 2
238     ## PATH_INFO part in URI reference
239     uri_path_info => 'x-utf-8-10646', ## Reserved for future use
240     ## Fragment identifier in URI reference
241     uri_fragment => 'x-punycode', ## Reserved for possible future use
242     };
243 wakaba 1.7
244 wakaba 1.17 ## -- User option for media types
245     $WIKI->{config}->{ExpandedURI q<media-type:accept-media-type>} = {
246     q<IMT:text/css##> => 1,
247     q<IMT:text/plain##> => 1,
248     q<IMT:text/x-suikawiki;version="0.9"##> => 1,
249     q<IMT:application/x.suikawiki.config;version="2.0"##> => 1,
250     };
251    
252 wakaba 1.10 ## -- Expires duration templates
253 wakaba 1.6 $WIKI->{config}->{entity}->{expires} = {
254 wakaba 1.7 edit => {delta => 60},
255     view => {delta => 2*3600},
256 wakaba 1.17 list => {delta => 60},
257 wakaba 1.6 lm_flaged => {delta => 30*24*3600},
258 wakaba 1.11 stylesheet => {delta => 30*24*3600},
259     error => {delta => 60},
260     };
261    
262     ## -- Debug mode
263     $WIKI->{config}->{debug} = {
264 wakaba 1.13 general => 0,
265 wakaba 1.11 db => 0,
266 wakaba 1.12 format => 0,
267 wakaba 1.13 view => 0,
268 wakaba 1.6 };
269 wakaba 1.4
270 wakaba 1.14 };
271 wakaba 1.8
272 wakaba 1.10 =head1 SEE ALSO
273 w 1.3
274 wakaba 1.10 C<lib/suikawiki.pl>, C<wiki.cgi>,
275     <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>,
276     <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SWHCS>
277 w 1.3
278     =head1 LICENSE
279    
280 wakaba 1.10 Copyright 2003-2004 Wakaba <w@suika.fam.cx>. All rights reserved.
281 w 1.3
282     This program is free software; you can redistribute it and/or
283     modify it under the same terms as Perl itself.
284    
285     =cut
286 w 1.1
287 wakaba 1.18 1; # $Date: 2004/04/25 07:12:56 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24