/[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.15 - (show annotations) (download)
Sat Mar 13 13:17:47 2004 UTC (21 years, 1 month ago) by wakaba
Branch: MAIN
Changes since 1.14: +8 -1 lines
*** empty log message ***

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24