/[pub]/suikawiki/wikidata/suikawiki-config.ph
Suika

Contents of /suikawiki/wikidata/suikawiki-config.ph

Parent Directory Parent Directory | Revision Log Revision Log


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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24