/[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.3 - (show annotations) (download)
Sat Mar 13 06:34:19 2004 UTC (20 years, 2 months ago) by wakaba
Branch: branch-suikawiki-1
CVS Tags: after-upgrade-to-suikawiki-3
Changes since 1.12.4.2: +247 -154 lines
Upgrade to SuikaWiki 3

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24