/[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.7 - (show annotations) (download)
Thu Apr 1 04:47:23 2004 UTC (20 years, 1 month ago) by wakaba
Branch: branch-suikawiki-1
Changes since 1.12.4.6: +4 -1 lines
Root WikiName implemented

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 ## 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 use Message::Util::Error;
29
30 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
274 };
275
276 =head1 SEE ALSO
277
278 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
282 =head1 LICENSE
283
284 Copyright 2003-2004 Wakaba <w@suika.fam.cx>. All rights reserved.
285
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 1; # $Date: 2004/03/29 03:23:15 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24