/[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 - (hide 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 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    
23 wakaba 1.12.4.4 ## 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 wakaba 1.12.4.3 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 wakaba 1.12.4.4
68 wakaba 1.12.4.3 ## 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 wakaba 1.12.4.4
125 wakaba 1.12.4.3 ## 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 wakaba 1.11
253 wakaba 1.8 };
254 w 1.1
255 wakaba 1.12.4.3 =head1 SEE ALSO
256 wakaba 1.6
257 wakaba 1.12.4.3 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 wakaba 1.6
261     =head1 LICENSE
262    
263 wakaba 1.12.4.3 Copyright 2003-2004 Wakaba <w@suika.fam.cx>. All rights reserved.
264 wakaba 1.6
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 wakaba 1.12.4.4 1; # $Date: 2004/03/13 06:34:19 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24