/[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.13 - (show annotations) (download)
Thu Mar 11 10:09:41 2004 UTC (21 years, 2 months ago) by wakaba
Branch: MAIN
Changes since 1.12: +15 -5 lines
Don't raise error even Referer or RequestLog module not loaded

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24