/[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.16 - (show annotations) (download)
Sat Mar 20 04:25:49 2004 UTC (21 years, 1 month ago) by wakaba
Branch: MAIN
Changes since 1.15: +24 -10 lines
Example Namazu configuration added

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 push our @Config, sub ($) {
24 eval q{ use Message::Util::Error };
25 my $WIKI = shift;
26 use Cwd qw(abs_path);
27
28 ## -- Filesystem path mapping
29 for (
30 [db__cache__dir => q"./wikidata/lock/"],
31 [db__cache_struct__file => q"./wikidata/lock/struct.db"],
32 [db__content__dir => q"./wikidata/page/"],
33 [db__content__error_log => q"./wikidata/log/db-content.log"],
34 [db__bdb__home_dir => q"./wikidata/lock/"],
35 [db__bdb__log_dir => q"./wikidata/log/bdb/"],
36 [db__bdb__log_file => q"./wikidata/log/bdb.log"],
37 [db__bdb__temp_dir => q"./wikidata/lock/"],
38 [db__lock__dir => q"./wikidata/lock/"],
39 [db__lock__log_file => q"./wikidata/log/lock.log"],
40 [db__log__dir => q"./wikidata/log/"],
41 [db__temp__dir => q"./wikidata/lock/"],
42 # [namazu__index_dir => q"/var/namazu/index/wiki"],
43 ) {
44 ## On system that does not set current directory as main script
45 ## directory, you should specify it instead of using "abs_path".
46 $WIKI->{config}->{path_to}->{$_->[0]} = abs_path $_->[1];
47 }
48
49 =begin comment
50
51 ## -- Namazu URI Mapping (See SuikaWiki:SuikaWiki//Namazu) --
52 $WIKI->{config}->{nmz__uri_to_uri} = sub {
53 my ($nmzuri, %opt) = @_;
54 if ($nmzuri =~ s!^\Q$opt{o}->{wiki}->{config}->{path_to}->{db__content__dir}\E/*!!o) {
55 $nmzuri =~ s/\.txt$//;
56 return $opt{o}->{wiki}->uri_reference
57 (page => $opt{o}->{wiki}->name ([
58 map {s/([0-9A-F][0-9A-F])/pack 'C', hex $1/ge; $_}
59 split m!\.ns/!, $nmzuri
60 ]), base => 1);
61 } else {
62 return ($nmzuri, $nmzuri);
63 }
64 };
65
66 =end comment
67
68 ## -- WikiPlugin
69 push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
70 my $wiki = shift;
71
72 ## Installed plugin modules
73 $wiki->{plugin}->load_directory (qw(
74 lib/SuikaWiki/Plugin/
75 misc/plugins/
76 misc/plugins/form/
77 misc/plugins/format/
78 misc/plugins/link/
79 misc/plugins/view/
80 ));
81
82 ## Configuration file as pseudo-plugin module
83 require 'wikidata/config.ph';
84 };
85
86 ## -- WikiDatabase: Mapping logical to physical
87 push @{$WIKI->{event}->{database_loaded}}, sub {
88 my $wiki = shift;
89
90 ## Main content
91 $wiki->{db}->_set_prop_db (content => {-db_open => sub {
92 require SuikaWiki::DB::FileSystem::YukiWikiDBNS;
93 SuikaWiki::DB::FileSystem::YukiWikiDBNS->new
94 (directory => $wiki->{config}->{path_to}->{db__content__dir},
95 logfile => $wiki->{config}->{path_to}->{db__content__error_log},
96 suffix => '.txt',
97 -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
98 }, -db_close => sub {
99 my %opt = @_;
100 $opt{prop_info}->{-db}->close;
101 delete $opt{prop_info}->{-db};
102 }});
103
104 ## Last modified
105 $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
106 require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
107 SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
108 (directory => $wiki->{config}->{path_to}->{db__content__dir},
109 -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
110 }, -prop => 'last_modified', -db_close => sub {
111 my %opt = @_;
112 $opt{prop_info}->{-db}->close;
113 delete $opt{prop_info}->{-db};
114 }});
115
116 ## Cache DBs
117 require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
118 my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
119 (directory => $wiki->{config}->{path_to}->{db__cache__dir},
120 expires => 86400 * 3, removes => 86400 * 3); # 3 days
121 $wiki->{db}->_set_prop_db (m__search_result =>
122 {-db => $cachedb, -prop => 'search_result', -db_close => sub {
123 my %opt = @_;
124 $opt{prop_info}->{-db}->close;
125 delete $opt{prop_info}->{-db};
126 }});
127 $wiki->{db}->_set_prop_db (wpp__headsummary =>
128 {-db => $cachedb, -prop => 'headsummary', -db_close => sub {
129 my %opt = @_;
130 $opt{prop_info}->{-db}->close;
131 delete $opt{prop_info}->{-db};
132 }});
133 $wiki->{db}->_set_prop_db (ref__item_template =>
134 {-db => $cachedb, -prop => 'refereritem', -db_close => sub {
135 my %opt = @_;
136 $opt{prop_info}->{-db}->close;
137 delete $opt{prop_info}->{-db};
138 }});
139
140 ## Berkely DB Environment Preparation
141 use BerkeleyDB;
142 my $bdbenv = new BerkeleyDB::Env
143 -Home => $wiki->{config}->{path_to}->{db__bdb__home_dir},
144 -Config => {
145 DB_DATA_DIR => $wiki->{config}->{path_to}->{db__content__dir},
146 DB_LOG_DIR => $wiki->{config}->{path_to}->{db__bdb__log_dir},
147 DB_TMP_DIR => $wiki->{config}->{path_to}->{db__bdb__temp_dir},
148 },
149 -ErrFile => $wiki->{config}->{path_to}->{db__bdb__log_file},
150 -Flags => DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL,
151 -Verbose => $wiki->{config}->{debug}->{db};
152
153 $wiki->{db}->_set_prop_db (content__structured => {-db_open => sub {
154 require SuikaWiki::DB::Hash;
155 new SuikaWiki::DB::Hash constructor => sub {
156 use MLDBM qw(BerkeleyDB::Hash);# Storable);
157 tie my %mldb, 'MLDBM',
158 -Filename => $wiki->{config}->{path_to}
159 ->{db__cache_struct__file},
160 -Env => $bdbenv,
161 -Flags => DB_CREATE,
162 -Mode => 0644;
163 \%mldb;
164 };
165 }});
166
167 ## Referer Database (See Referer plugin module)
168 $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
169 require SuikaWiki::DB::Hash;
170 new SuikaWiki::DB::Hash constructor => sub {
171 tie my %db, 'BerkeleyDB::Hash',
172 -Filename => 'referer.db',
173 -Env => $bdbenv,
174 -Flags => DB_CREATE,
175 -Mode => 0644;
176 \%db;
177 };
178 }});
179
180 ## HTTP Request Logging Database (See RequestLog plugin module)
181 $wiki->{db}->_set_prop_db (log__http_request => {-db_open => sub {
182 require SuikaWiki::DB::Hash;
183 new SuikaWiki::DB::Hash constructor => sub {
184 tie my %db, 'BerkeleyDB::Hash',
185 -Filename => 'http-request-log.db',
186 -Env => $bdbenv,
187 -Flags => DB_CREATE,
188 -Mode => 0644;
189 \%db;
190 };
191 }});
192
193 ## Additional WikiDB properties should be defined here
194 # ...
195 };
196
197 push @{$WIKI->{event}->{input_close}}, sub {
198 my ($wiki, $event) = @_;
199 try {
200 SuikaWiki::Plugin->module_package ('Referer')
201 ->add_referer (wiki => $wiki,
202 uri => $wiki->{input}->meta_variable
203 ('HTTP_REFERER'));
204 } catch SuikaWiki::Plugin::error with {
205 my $err = shift;
206 $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
207 };
208 try {
209 SuikaWiki::Plugin->module_package ('RequestLog')
210 ->http_request_log (wiki => $wiki,
211 prop => 'log__http_request');
212 } catch SuikaWiki::Plugin::error with {
213 my $err = shift;
214 $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
215 };
216 };
217
218 ## -- WikiName of special purpose WikiPages
219 $WIKI->{config}->{page} = {
220 Default => $WIKI->name ([qw/HomePage/]),
221 InterWikiName => $WIKI->name ([qw/Wiki InterWikiName/]),
222 NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),
223 'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),
224 };
225
226 ## -- WikiNamespace constants
227 $WIKI->{config}->{name}->{space} = {
228 separator => '//',
229 separator_reg => qr#\s*//\s*#,
230 self => '.',
231 parent => '..',
232 };
233
234 ## -- Default character codes
235 $WIKI->{config}->{charset} = {
236 ## Internal code - MUST be ASCII + 8bit coding scheme
237 internal => 'euc-jp',
238 ## Default output code
239 output => 'iso-2022-jp',
240 ## "query" part in URI reference
241 uri_query => '', # auto-detected
242 uri_query_encode => 'euc-jp', ## For compatibility w/ SuikaWiki 2
243 uri_param => '', # auto-detected
244 uri_param_encode => 'euc-jp', ## For compatibility w/ SuikaWiki 2
245 ## PATH_INFO part in URI reference
246 uri_path_info => 'x-utf-8-10646', ## Reserved for future use
247 ## Fragment identifier in URI reference
248 uri_fragment => 'x-punycode', ## Reserved for possible future use
249 };
250
251 ## -- Expires duration templates
252 $WIKI->{config}->{entity}->{expires} = {
253 edit => {delta => 60},
254 view => {delta => 2*3600},
255 lm_flaged => {delta => 30*24*3600},
256 stylesheet => {delta => 30*24*3600},
257 error => {delta => 60},
258 };
259
260 ## -- Debug mode
261 $WIKI->{config}->{debug} = {
262 general => 0,
263 db => 0,
264 format => 0,
265 view => 0,
266 };
267
268 };
269
270 =head1 SEE ALSO
271
272 C<lib/suikawiki.pl>, C<wiki.cgi>,
273 <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>,
274 <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SWHCS>
275
276 =head1 LICENSE
277
278 Copyright 2003-2004 Wakaba <w@suika.fam.cx>. All rights reserved.
279
280 This program is free software; you can redistribute it and/or
281 modify it under the same terms as Perl itself.
282
283 =cut
284
285 1; # $Date: 2004/03/13 13:17:47 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24