/[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.14 - (hide annotations) (download)
Fri Mar 12 04:56:00 2004 UTC (20 years, 8 months ago) by wakaba
Branch: MAIN
Changes since 1.13: +25 -3 lines
Use Message::Util::Error

1 wakaba 1.10 =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 w 1.1 use strict;
22 wakaba 1.14 use Message::Util::Error;
23 wakaba 1.4
24 wakaba 1.14 push our @Config, sub ($) {
25 wakaba 1.10 my $WIKI = shift;
26 wakaba 1.12 use Cwd qw(abs_path);
27 wakaba 1.10
28     ## -- Filesystem path mapping
29 wakaba 1.6 for (
30 wakaba 1.10 [db__cache__dir => q"./wikidata/lock/"],
31 wakaba 1.14 [db__cache_struct__file => q"./wikidata/lock/struct.db"],
32 wakaba 1.12 [db__content__dir => q"./wikidata/page/"],
33 wakaba 1.6 [db__content__error_log => q"./wikidata/log/db-content.log"],
34 wakaba 1.12 [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 wakaba 1.6 [db__lock__dir => q"./wikidata/lock/"],
39 wakaba 1.12 [db__lock__log_file => q"./wikidata/log/lock.log"],
40     [db__log__dir => q"./wikidata/log/"],
41     [db__temp__dir => q"./wikidata/lock/"],
42 wakaba 1.6 ) {
43 wakaba 1.12 ## 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 wakaba 1.6 }
47    
48 wakaba 1.10 ## -- WikiPlugin
49 wakaba 1.6 push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
50 wakaba 1.8 my $wiki = shift;
51 wakaba 1.10
52     ## Installed plugin modules
53 wakaba 1.8 $wiki->{plugin}->load_directory (qw(
54     lib/SuikaWiki/Plugin/
55     misc/plugins/
56 wakaba 1.10 misc/plugins/form/
57 wakaba 1.9 misc/plugins/format/
58 wakaba 1.10 misc/plugins/link/
59 wakaba 1.8 misc/plugins/view/
60     ));
61 wakaba 1.10
62     ## Configuration file as pseudo-plugin module
63 wakaba 1.6 require 'wikidata/config.ph';
64     };
65    
66 wakaba 1.10 ## -- WikiDatabase: Mapping logical to physical
67 wakaba 1.6 push @{$WIKI->{event}->{database_loaded}}, sub {
68 wakaba 1.10 my $wiki = shift;
69    
70 wakaba 1.6 ## Main content
71 wakaba 1.10 $wiki->{db}->_set_prop_db (content => {-db_open => sub {
72 wakaba 1.6 require SuikaWiki::DB::FileSystem::YukiWikiDBNS;
73     SuikaWiki::DB::FileSystem::YukiWikiDBNS->new
74 wakaba 1.10 (directory => $wiki->{config}->{path_to}->{db__content__dir},
75     logfile => $wiki->{config}->{path_to}->{db__content__error_log},
76 wakaba 1.6 suffix => '.txt',
77 wakaba 1.10 -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
78 wakaba 1.8 }, -db_close => sub {
79     my %opt = @_;
80     $opt{prop_info}->{-db}->close;
81     delete $opt{prop_info}->{-db};
82     }});
83 wakaba 1.6
84     ## Last modified
85 wakaba 1.10 $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
86 wakaba 1.6 require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
87     SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
88 wakaba 1.10 (directory => $wiki->{config}->{path_to}->{db__content__dir},
89     -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
90 wakaba 1.8 }, -prop => 'last_modified', -db_close => sub {
91     my %opt = @_;
92     $opt{prop_info}->{-db}->close;
93     delete $opt{prop_info}->{-db};
94     }});
95 wakaba 1.10
96 wakaba 1.12 ## Cache DBs
97 wakaba 1.10 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 wakaba 1.14 $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 wakaba 1.10
119 wakaba 1.12 ## 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 wakaba 1.14
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 wakaba 1.12
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 wakaba 1.10 ## Additional WikiDB properties should be defined here
173     # ...
174 wakaba 1.6 };
175    
176 wakaba 1.12 push @{$WIKI->{event}->{input_close}}, sub {
177     my ($wiki, $event) = @_;
178 wakaba 1.13 try {
179     SuikaWiki::Plugin->module_package ('Referer')
180 wakaba 1.12 ->add_referer (wiki => $wiki,
181     uri => $wiki->{input}->meta_variable
182     ('HTTP_REFERER'));
183 wakaba 1.13 } 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 wakaba 1.12 ->http_request_log (wiki => $wiki,
190     prop => 'log__http_request');
191 wakaba 1.13 } catch SuikaWiki::Plugin::error with {
192     my $err = shift;
193     $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
194     };
195 wakaba 1.12 };
196    
197 wakaba 1.10 ## -- WikiName of special purpose WikiPages
198 wakaba 1.8 $WIKI->{config}->{page} = {
199 wakaba 1.11 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 wakaba 1.8 };
204    
205 wakaba 1.10 ## -- WikiNamespace constants
206 wakaba 1.11 $WIKI->{config}->{name}->{space} = {
207     separator => '//',
208     separator_reg => qr#\s*//\s*#,
209     self => '.',
210     parent => '..',
211     };
212 wakaba 1.7
213 wakaba 1.10 ## -- Default character codes
214 wakaba 1.11 $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 wakaba 1.7
230 wakaba 1.10 ## -- Expires duration templates
231 wakaba 1.6 $WIKI->{config}->{entity}->{expires} = {
232 wakaba 1.7 edit => {delta => 60},
233     view => {delta => 2*3600},
234 wakaba 1.6 lm_flaged => {delta => 30*24*3600},
235 wakaba 1.11 stylesheet => {delta => 30*24*3600},
236     error => {delta => 60},
237     };
238    
239     ## -- Debug mode
240     $WIKI->{config}->{debug} = {
241 wakaba 1.13 general => 0,
242 wakaba 1.11 db => 0,
243 wakaba 1.12 format => 0,
244 wakaba 1.13 view => 0,
245 wakaba 1.6 };
246 wakaba 1.4
247 wakaba 1.14 };
248 wakaba 1.8
249 wakaba 1.10 =head1 SEE ALSO
250 w 1.3
251 wakaba 1.10 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 w 1.3
255     =head1 LICENSE
256    
257 wakaba 1.10 Copyright 2003-2004 Wakaba <w@suika.fam.cx>. All rights reserved.
258 w 1.3
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 w 1.1
264 wakaba 1.14 1; # $Date: 2004/03/11 10:09:41 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24