/[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 - (show annotations) (download)
Fri Apr 30 06:04:17 2004 UTC (21 years ago) by wakaba
Branch: MAIN
Changes since 1.17: +8 -5 lines
Use FindBin and File::Spec for portability.

1 =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 use strict;
22
23 ## 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 push our @Config, sub ($) {
35 my $WIKI = shift;
36 use FindBin q($Bin);
37 use File::Spec;
38
39 ## -- Filesystem path mapping
40 for (
41 [db__cache__dir => q"./wikidata/cache/"],
42 [db__cache_struct__file => q"./wikidata/cache/struct.db"],
43 [db__content__dir => q"./wikidata/page/"],
44 [db__content__error_log => q"./wikidata/log/db-content.log"],
45 [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 [db__lock__dir => q"./wikidata/lock/"],
50 [db__lock__log_file => q"./wikidata/log/lock.log"],
51 [db__log__dir => q"./wikidata/log/"],
52 [db__temp__dir => q"./wikidata/lock/"],
53 # [namazu__index_dir => q"/var/namazu/index/wiki"],
54 ) {
55 ## On system that does not set current directory as main script
56 ## directory, you should specify it instead of using "abs_path".
57 $WIKI->{config}->{path_to}->{$_->[0]} = File::Spec->catfile ($Bin, $_->[1]);
58 }
59
60 =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 =cut
80
81 ## -- WikiPlugin
82 push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
83 my $wiki = shift;
84
85 ## Installed plugin modules
86 $wiki->{plugin}->load_directory (qw(
87 lib/SuikaWiki/Plugin/
88 misc/plugins/
89 misc/plugins/form/
90 misc/plugins/format/
91 misc/plugins/link/
92 misc/plugins/view/
93 ));
94
95 ## Configuration file as pseudo-plugin module
96 require 'wikidata/config.ph';
97 };
98
99 ## -- WikiDatabase: Mapping logical to physical
100 push @{$WIKI->{event}->{database_loaded}}, sub {
101 my $wiki = shift;
102
103 ## Main content
104 $wiki->{db}->_set_prop_db (content => {-db_open => sub {
105 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 -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
112 }, -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 -lock => $wiki->{var}->{db}->{lock_prop}->('content_prop'));
127 }, -db_close => sub {
128 my %opt = @_;
129 $opt{prop_info}->{-db}->close;
130 delete $opt{prop_info}->{-db};
131 }});
132
133 ## Last modified
134 $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
135 require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
136 SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
137 (directory => $wiki->{config}->{path_to}->{db__content__dir},
138 -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
139 }, -prop => 'last_modified', -db_close => sub {
140 my %opt = @_;
141 $opt{prop_info}->{-db}->close;
142 delete $opt{prop_info}->{-db};
143 }});
144
145 ## Cache DBs
146 require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
147 my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
148 (directory => $wiki->{config}->{path_to}->{db__cache__dir},
149 expires => 86400 * 3, removes => 86400 * 3); # 3 days
150 $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 $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
169 ## Referer Database (See Referer plugin module)
170 $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
171 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 }});
184
185 ## Additional WikiDB properties should be defined here
186 # ...
187 };
188
189 push @{$WIKI->{event}->{input_close}}, sub {
190 my ($wiki, $event) = @_;
191 try {
192 SuikaWiki::Plugin->module_package ('Referer')
193 ->add_referer (wiki => $wiki,
194 uri => $wiki->{input}->meta_variable
195 ('HTTP_REFERER'));
196 } 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 ->http_request_log (wiki => $wiki,
203 prop => 'log__http_request');
204 } catch SuikaWiki::Plugin::error with {
205 my $err = shift;
206 $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
207 };
208 };
209
210 ## -- WikiName of special purpose WikiPages
211 $WIKI->{config}->{page} = {
212 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 };
217
218 ## -- WikiNamespace constants
219 $WIKI->{config}->{name}->{space} = {
220 separator => '//',
221 separator_reg => qr#\s*//\s*#,
222 self => '.',
223 parent => '..',
224 root => '//',
225 };
226
227 ## -- Default character codes
228 $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
244 ## -- 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 ## -- Expires duration templates
253 $WIKI->{config}->{entity}->{expires} = {
254 edit => {delta => 60},
255 view => {delta => 2*3600},
256 list => {delta => 60},
257 lm_flaged => {delta => 30*24*3600},
258 stylesheet => {delta => 30*24*3600},
259 error => {delta => 60},
260 };
261
262 ## -- Debug mode
263 $WIKI->{config}->{debug} = {
264 general => 0,
265 db => 0,
266 format => 0,
267 view => 0,
268 };
269
270 };
271
272 =head1 SEE ALSO
273
274 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
278 =head1 LICENSE
279
280 Copyright 2003-2004 Wakaba <w@suika.fam.cx>. All rights reserved.
281
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
287 1; # $Date: 2004/04/25 07:12:56 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24