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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24