/[pub]/suikawiki/wikidata/suikawiki-config.ph
Suika

Contents of /suikawiki/wikidata/suikawiki-config.ph

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.13 - (hide annotations) (download)
Thu Apr 1 04:53:58 2004 UTC (20 years, 1 month ago) by wakaba
Branch: MAIN
CVS Tags: before-db-leaffile
Changes since 1.12: +274 -138 lines
Copied from 1.12.4.7

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24