/[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.16 - (hide annotations) (download)
Sat Mar 20 04:25:49 2004 UTC (20 years, 8 months ago) by wakaba
Branch: MAIN
Changes since 1.15: +24 -10 lines
Example Namazu configuration added

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24