/[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 - (hide 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 wakaba 1.12.4.3 =head1 NAME
2 wakaba 1.6
3 wakaba 1.12.4.3 suikawiki-config.ph - SuikaWiki: Configuration for SuikaWiki HTTP CGI Driver
4 wakaba 1.6
5 wakaba 1.12.4.3 =head1 DESCRIPTION
6 wakaba 1.11
7 wakaba 1.12.4.3 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 wakaba 1.11
11 wakaba 1.12.4.3 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 wakaba 1.11
247 wakaba 1.8 };
248 w 1.1
249 wakaba 1.12.4.3 =head1 SEE ALSO
250 wakaba 1.6
251 wakaba 1.12.4.3 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 wakaba 1.6
255     =head1 LICENSE
256    
257 wakaba 1.12.4.3 Copyright 2003-2004 Wakaba <w@suika.fam.cx>. All rights reserved.
258 wakaba 1.6
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 wakaba 1.12.4.3 1; # $Date: 2004/03/12 04:56:00 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24