/[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.12 - (show annotations) (download)
Wed Feb 18 07:23:48 2004 UTC (21 years, 2 months ago) by wakaba
Branch: MAIN
Changes since 1.11: +65 -4 lines
New pathes and event handler

1 =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 use strict;
22
23 sub config ($) {
24 my $WIKI = shift;
25 use Cwd qw(abs_path);
26
27 ## -- Filesystem path mapping
28 for (
29 [db__cache__dir => q"./wikidata/lock/"],
30 [db__content__dir => q"./wikidata/page/"],
31 [db__content__error_log => q"./wikidata/log/db-content.log"],
32 [db__bdb__home_dir => q"./wikidata/lock/"],
33 [db__bdb__log_dir => q"./wikidata/log/bdb/"],
34 [db__bdb__log_file => q"./wikidata/log/bdb.log"],
35 [db__bdb__temp_dir => q"./wikidata/lock/"],
36 [db__lock__dir => q"./wikidata/lock/"],
37 [db__lock__log_file => q"./wikidata/log/lock.log"],
38 [db__log__dir => q"./wikidata/log/"],
39 [db__temp__dir => q"./wikidata/lock/"],
40 ) {
41 ## On system that does not set current directory as main script
42 ## directory, you should specify it instead of using "abs_path".
43 $WIKI->{config}->{path_to}->{$_->[0]} = abs_path $_->[1];
44 }
45
46 ## -- WikiPlugin
47 push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
48 my $wiki = shift;
49
50 ## Installed plugin modules
51 $wiki->{plugin}->load_directory (qw(
52 lib/SuikaWiki/Plugin/
53 misc/plugins/
54 misc/plugins/form/
55 misc/plugins/format/
56 misc/plugins/link/
57 misc/plugins/view/
58 ));
59
60 ## Configuration file as pseudo-plugin module
61 require 'wikidata/config.ph';
62 };
63
64 ## -- WikiDatabase: Mapping logical to physical
65 push @{$WIKI->{event}->{database_loaded}}, sub {
66 my $wiki = shift;
67
68 ## Main content
69 $wiki->{db}->_set_prop_db (content => {-db_open => sub {
70 require SuikaWiki::DB::FileSystem::YukiWikiDBNS;
71 SuikaWiki::DB::FileSystem::YukiWikiDBNS->new
72 (directory => $wiki->{config}->{path_to}->{db__content__dir},
73 logfile => $wiki->{config}->{path_to}->{db__content__error_log},
74 suffix => '.txt',
75 -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
76 }, -db_close => sub {
77 my %opt = @_;
78 $opt{prop_info}->{-db}->close;
79 delete $opt{prop_info}->{-db};
80 }});
81
82 ## Last modified
83 $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
84 require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
85 SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
86 (directory => $wiki->{config}->{path_to}->{db__content__dir},
87 -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
88 }, -prop => 'last_modified', -db_close => sub {
89 my %opt = @_;
90 $opt{prop_info}->{-db}->close;
91 delete $opt{prop_info}->{-db};
92 }});
93
94 ## Cache DBs
95 require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
96 my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
97 (directory => $wiki->{config}->{path_to}->{db__cache__dir});
98 $wiki->{db}->_set_prop_db (m__search_result =>
99 {-db => $cachedb, -prop => 'search_result', -db_close => sub {
100 my %opt = @_;
101 $opt{prop_info}->{-db}->close;
102 delete $opt{prop_info}->{-db};
103 }});
104 $wiki->{db}->_set_prop_db (wpp__headsummary =>
105 {-db => $cachedb, -prop => 'headsummary', -db_close => sub {
106 my %opt = @_;
107 $opt{prop_info}->{-db}->close;
108 delete $opt{prop_info}->{-db};
109 }});
110
111 ## Berkely DB Environment Preparation
112 use BerkeleyDB;
113 my $bdbenv = new BerkeleyDB::Env
114 -Home => $wiki->{config}->{path_to}->{db__bdb__home_dir},
115 -Config => {
116 DB_DATA_DIR => $wiki->{config}->{path_to}->{db__content__dir},
117 DB_LOG_DIR => $wiki->{config}->{path_to}->{db__bdb__log_dir},
118 DB_TMP_DIR => $wiki->{config}->{path_to}->{db__bdb__temp_dir},
119 },
120 -ErrFile => $wiki->{config}->{path_to}->{db__bdb__log_file},
121 -Flags => DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL,
122 -Verbose => $wiki->{config}->{debug}->{db};
123
124 ## Referer Database (See Referer plugin module)
125 $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
126 require SuikaWiki::DB::Hash;
127 new SuikaWiki::DB::Hash constructor => sub {
128 tie my %db, 'BerkeleyDB::Hash',
129 -Filename => 'referer.db',
130 -Env => $bdbenv,
131 -Flags => DB_CREATE,
132 -Mode => 0644;
133 \%db;
134 };
135 }});
136
137 ## HTTP Request Logging Database (See RequestLog plugin module)
138 $wiki->{db}->_set_prop_db (log__http_request => {-db_open => sub {
139 require SuikaWiki::DB::Hash;
140 new SuikaWiki::DB::Hash constructor => sub {
141 tie my %db, 'BerkeleyDB::Hash',
142 -Filename => 'http-request-log.db',
143 -Env => $bdbenv,
144 -Flags => DB_CREATE,
145 -Mode => 0644;
146 \%db;
147 };
148 }});
149
150 ## Additional WikiDB properties should be defined here
151 # ...
152 };
153
154 push @{$WIKI->{event}->{input_close}}, sub {
155 my ($wiki, $event) = @_;
156 SuikaWiki::Plugin->module_package ('Referer')
157 ->add_referer (wiki => $wiki,
158 uri => $wiki->{input}->meta_variable
159 ('HTTP_REFERER'));
160 SuikaWiki::Plugin->module_package ('RequestLog')
161 ->http_request_log (wiki => $wiki,
162 prop => 'log__http_request');
163 };
164
165 ## -- WikiName of special purpose WikiPages
166 $WIKI->{config}->{page} = {
167 Default => $WIKI->name ([qw/HomePage/]),
168 InterWikiName => $WIKI->name ([qw/Wiki InterWikiName/]),
169 NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),
170 'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),
171 };
172
173 ## -- WikiNamespace constants
174 $WIKI->{config}->{name}->{space} = {
175 separator => '//',
176 separator_reg => qr#\s*//\s*#,
177 self => '.',
178 parent => '..',
179 };
180
181 ## -- Default character codes
182 $WIKI->{config}->{charset} = {
183 ## Internal code - MUST be ASCII + 8bit coding scheme
184 internal => 'euc-jp',
185 ## Default output code
186 output => 'iso-2022-jp',
187 ## "query" part in URI reference
188 uri_query => '', # auto-detected
189 uri_query_encode => 'euc-jp', ## For compatibility w/ SuikaWiki 2
190 uri_param => '', # auto-detected
191 uri_param_encode => 'euc-jp', ## For compatibility w/ SuikaWiki 2
192 ## PATH_INFO part in URI reference
193 uri_path_info => 'x-utf-8-10646', ## Reserved for future use
194 ## Fragment identifier in URI reference
195 uri_fragment => 'x-punycode', ## Reserved for possible future use
196 };
197
198 ## -- Expires duration templates
199 $WIKI->{config}->{entity}->{expires} = {
200 edit => {delta => 60},
201 view => {delta => 2*3600},
202 lm_flaged => {delta => 30*24*3600},
203 stylesheet => {delta => 30*24*3600},
204 error => {delta => 60},
205 };
206
207 ## -- Debug mode
208 $WIKI->{config}->{debug} = {
209 general => 1,
210 db => 0,
211 format => 0,
212 view => 1,
213 };
214
215 }
216
217 =head1 SEE ALSO
218
219 C<lib/suikawiki.pl>, C<wiki.cgi>,
220 <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>,
221 <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SWHCS>
222
223 =head1 LICENSE
224
225 Copyright 2003-2004 Wakaba <w@suika.fam.cx>. All rights reserved.
226
227 This program is free software; you can redistribute it and/or
228 modify it under the same terms as Perl itself.
229
230 =cut
231
232 1; # $Date: 2004/02/08 09:01:57 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24