/[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 - (hide annotations) (download)
Sun Apr 25 07:12:56 2004 UTC (20 years, 7 months 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 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.17 ## 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 wakaba 1.14 push our @Config, sub ($) {
35 wakaba 1.10 my $WIKI = shift;
36 wakaba 1.12 use Cwd qw(abs_path);
37 wakaba 1.10
38     ## -- Filesystem path mapping
39 wakaba 1.6 for (
40 wakaba 1.17 [db__cache__dir => q"./wikidata/cache/"],
41     [db__cache_struct__file => q"./wikidata/cache/struct.db"],
42 wakaba 1.12 [db__content__dir => q"./wikidata/page/"],
43 wakaba 1.6 [db__content__error_log => q"./wikidata/log/db-content.log"],
44 wakaba 1.12 [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 wakaba 1.6 [db__lock__dir => q"./wikidata/lock/"],
49 wakaba 1.12 [db__lock__log_file => q"./wikidata/log/lock.log"],
50     [db__log__dir => q"./wikidata/log/"],
51     [db__temp__dir => q"./wikidata/lock/"],
52 wakaba 1.16 # [namazu__index_dir => q"/var/namazu/index/wiki"],
53 wakaba 1.6 ) {
54 wakaba 1.12 ## 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 wakaba 1.6 }
58    
59 wakaba 1.16 =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 wakaba 1.10 ## -- WikiPlugin
79 wakaba 1.6 push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
80 wakaba 1.8 my $wiki = shift;
81 wakaba 1.10
82     ## Installed plugin modules
83 wakaba 1.8 $wiki->{plugin}->load_directory (qw(
84     lib/SuikaWiki/Plugin/
85     misc/plugins/
86 wakaba 1.10 misc/plugins/form/
87 wakaba 1.9 misc/plugins/format/
88 wakaba 1.10 misc/plugins/link/
89 wakaba 1.8 misc/plugins/view/
90     ));
91 wakaba 1.10
92     ## Configuration file as pseudo-plugin module
93 wakaba 1.6 require 'wikidata/config.ph';
94     };
95    
96 wakaba 1.10 ## -- WikiDatabase: Mapping logical to physical
97 wakaba 1.6 push @{$WIKI->{event}->{database_loaded}}, sub {
98 wakaba 1.10 my $wiki = shift;
99    
100 wakaba 1.6 ## Main content
101 wakaba 1.10 $wiki->{db}->_set_prop_db (content => {-db_open => sub {
102 wakaba 1.17 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 wakaba 1.10 -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
124 wakaba 1.8 }, -db_close => sub {
125     my %opt = @_;
126     $opt{prop_info}->{-db}->close;
127     delete $opt{prop_info}->{-db};
128     }});
129 wakaba 1.6
130     ## Last modified
131 wakaba 1.10 $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
132 wakaba 1.6 require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
133     SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
134 wakaba 1.10 (directory => $wiki->{config}->{path_to}->{db__content__dir},
135     -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
136 wakaba 1.8 }, -prop => 'last_modified', -db_close => sub {
137     my %opt = @_;
138     $opt{prop_info}->{-db}->close;
139     delete $opt{prop_info}->{-db};
140     }});
141 wakaba 1.10
142 wakaba 1.12 ## Cache DBs
143 wakaba 1.10 require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
144     my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
145 wakaba 1.16 (directory => $wiki->{config}->{path_to}->{db__cache__dir},
146     expires => 86400 * 3, removes => 86400 * 3); # 3 days
147 wakaba 1.10 $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 wakaba 1.14 $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 wakaba 1.10
166 wakaba 1.12 ## Referer Database (See Referer plugin module)
167     $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
168 wakaba 1.17 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 wakaba 1.12 }});
181    
182 wakaba 1.10 ## Additional WikiDB properties should be defined here
183     # ...
184 wakaba 1.6 };
185    
186 wakaba 1.12 push @{$WIKI->{event}->{input_close}}, sub {
187     my ($wiki, $event) = @_;
188 wakaba 1.13 try {
189     SuikaWiki::Plugin->module_package ('Referer')
190 wakaba 1.12 ->add_referer (wiki => $wiki,
191     uri => $wiki->{input}->meta_variable
192     ('HTTP_REFERER'));
193 wakaba 1.13 } 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 wakaba 1.12 ->http_request_log (wiki => $wiki,
200     prop => 'log__http_request');
201 wakaba 1.13 } catch SuikaWiki::Plugin::error with {
202     my $err = shift;
203     $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
204     };
205 wakaba 1.12 };
206    
207 wakaba 1.10 ## -- WikiName of special purpose WikiPages
208 wakaba 1.8 $WIKI->{config}->{page} = {
209 wakaba 1.11 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 wakaba 1.8 };
214    
215 wakaba 1.10 ## -- WikiNamespace constants
216 wakaba 1.11 $WIKI->{config}->{name}->{space} = {
217     separator => '//',
218     separator_reg => qr#\s*//\s*#,
219     self => '.',
220     parent => '..',
221 wakaba 1.17 root => '//',
222 wakaba 1.11 };
223 wakaba 1.7
224 wakaba 1.10 ## -- Default character codes
225 wakaba 1.11 $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 wakaba 1.7
241 wakaba 1.17 ## -- 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 wakaba 1.10 ## -- Expires duration templates
250 wakaba 1.6 $WIKI->{config}->{entity}->{expires} = {
251 wakaba 1.7 edit => {delta => 60},
252     view => {delta => 2*3600},
253 wakaba 1.17 list => {delta => 60},
254 wakaba 1.6 lm_flaged => {delta => 30*24*3600},
255 wakaba 1.11 stylesheet => {delta => 30*24*3600},
256     error => {delta => 60},
257     };
258    
259     ## -- Debug mode
260     $WIKI->{config}->{debug} = {
261 wakaba 1.13 general => 0,
262 wakaba 1.11 db => 0,
263 wakaba 1.12 format => 0,
264 wakaba 1.13 view => 0,
265 wakaba 1.6 };
266 wakaba 1.4
267 wakaba 1.14 };
268 wakaba 1.8
269 wakaba 1.10 =head1 SEE ALSO
270 w 1.3
271 wakaba 1.10 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 w 1.3
275     =head1 LICENSE
276    
277 wakaba 1.10 Copyright 2003-2004 Wakaba <w@suika.fam.cx>. All rights reserved.
278 w 1.3
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 w 1.1
284 wakaba 1.17 1; # $Date: 2004/03/20 04:25:49 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24