/[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.6 - (hide annotations) (download)
Mon Mar 29 03:23:15 2004 UTC (20 years, 1 month ago) by wakaba
Branch: branch-suikawiki-1
Changes since 1.12.4.5: +10 -4 lines
*** empty log message ***

1 wakaba 1.12.4.3 =head1 NAME
2 wakaba 1.6
3 wakaba 1.12.4.3 suikawiki-config.ph - SuikaWiki: Configuration for SuikaWiki HTTP CGI Driver
4 wakaba 1.6
5 wakaba 1.12.4.3 =head1 DESCRIPTION
6 wakaba 1.11
7 wakaba 1.12.4.3 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 wakaba 1.11
11 wakaba 1.12.4.3 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 wakaba 1.12.4.6 ## 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 wakaba 1.12.4.3 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 wakaba 1.12.4.6 [namazu__index_dir => q"/var/namazu/index/suikawiki"],
49 wakaba 1.12.4.3 ) {
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 wakaba 1.12.4.5
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 wakaba 1.12.4.3
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 wakaba 1.12.4.4
85 wakaba 1.12.4.3 ## 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     -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
101     }, -db_close => sub {
102     my %opt = @_;
103     $opt{prop_info}->{-db}->close;
104     delete $opt{prop_info}->{-db};
105     }});
106    
107     ## Last modified
108     $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
109     require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
110     SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
111     (directory => $wiki->{config}->{path_to}->{db__content__dir},
112     -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
113     }, -prop => 'last_modified', -db_close => sub {
114     my %opt = @_;
115     $opt{prop_info}->{-db}->close;
116     delete $opt{prop_info}->{-db};
117     }});
118    
119     ## Cache DBs
120     require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
121     my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
122 wakaba 1.12.4.6 (directory => $wiki->{config}->{path_to}->{db__cache__dir},
123 wakaba 1.12.4.5 expires => 86400 * 3, removes => 86400 * 3); # 3 days
124 wakaba 1.12.4.3 $wiki->{db}->_set_prop_db (m__search_result =>
125     {-db => $cachedb, -prop => 'search_result', -db_close => sub {
126     my %opt = @_;
127     $opt{prop_info}->{-db}->close;
128     delete $opt{prop_info}->{-db};
129     }});
130     $wiki->{db}->_set_prop_db (wpp__headsummary =>
131     {-db => $cachedb, -prop => 'headsummary', -db_close => sub {
132     my %opt = @_;
133     $opt{prop_info}->{-db}->close;
134     delete $opt{prop_info}->{-db};
135     }});
136     $wiki->{db}->_set_prop_db (ref__item_template =>
137     {-db => $cachedb, -prop => 'refereritem', -db_close => sub {
138     my %opt = @_;
139     $opt{prop_info}->{-db}->close;
140     delete $opt{prop_info}->{-db};
141     }});
142 wakaba 1.12.4.4
143 wakaba 1.12.4.3 ## Berkely DB Environment Preparation
144     use BerkeleyDB;
145     my $bdbenv = new BerkeleyDB::Env
146     -Home => $wiki->{config}->{path_to}->{db__bdb__home_dir},
147     -Config => {
148     DB_DATA_DIR => $wiki->{config}->{path_to}->{db__content__dir},
149     DB_LOG_DIR => $wiki->{config}->{path_to}->{db__bdb__log_dir},
150     DB_TMP_DIR => $wiki->{config}->{path_to}->{db__bdb__temp_dir},
151     },
152     -ErrFile => $wiki->{config}->{path_to}->{db__bdb__log_file},
153     -Flags => DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL,
154     -Verbose => $wiki->{config}->{debug}->{db};
155    
156     $wiki->{db}->_set_prop_db (content__structured => {-db_open => sub {
157     require SuikaWiki::DB::Hash;
158     new SuikaWiki::DB::Hash constructor => sub {
159     use MLDBM qw(BerkeleyDB::Hash);# Storable);
160     tie my %mldb, 'MLDBM',
161     -Filename => $wiki->{config}->{path_to}
162     ->{db__cache_struct__file},
163     -Env => $bdbenv,
164     -Flags => DB_CREATE,
165     -Mode => 0644;
166     \%mldb;
167     };
168     }});
169    
170     ## Referer Database (See Referer plugin module)
171     $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
172     require SuikaWiki::DB::Hash;
173     new SuikaWiki::DB::Hash constructor => sub {
174     tie my %db, 'BerkeleyDB::Hash',
175     -Filename => 'referer.db',
176     -Env => $bdbenv,
177     -Flags => DB_CREATE,
178     -Mode => 0644;
179     \%db;
180     };
181     }});
182    
183     ## HTTP Request Logging Database (See RequestLog plugin module)
184     $wiki->{db}->_set_prop_db (log__http_request => {-db_open => sub {
185     require SuikaWiki::DB::Hash;
186     new SuikaWiki::DB::Hash constructor => sub {
187     tie my %db, 'BerkeleyDB::Hash',
188     -Filename => 'http-request-log.db',
189     -Env => $bdbenv,
190     -Flags => DB_CREATE,
191     -Mode => 0644;
192     \%db;
193     };
194     }});
195    
196     ## Additional WikiDB properties should be defined here
197     # ...
198     };
199    
200     push @{$WIKI->{event}->{input_close}}, sub {
201     my ($wiki, $event) = @_;
202     try {
203     SuikaWiki::Plugin->module_package ('Referer')
204     ->add_referer (wiki => $wiki,
205     uri => $wiki->{input}->meta_variable
206     ('HTTP_REFERER'));
207     } catch SuikaWiki::Plugin::error with {
208     my $err = shift;
209     $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
210     };
211     try {
212     SuikaWiki::Plugin->module_package ('RequestLog')
213     ->http_request_log (wiki => $wiki,
214     prop => 'log__http_request');
215     } catch SuikaWiki::Plugin::error with {
216     my $err = shift;
217     $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
218     };
219     };
220    
221     ## -- WikiName of special purpose WikiPages
222     $WIKI->{config}->{page} = {
223     Default => $WIKI->name ([qw/HomePage/]),
224     InterWikiName => $WIKI->name ([qw/Wiki InterWikiName/]),
225     NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),
226     'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),
227     };
228    
229     ## -- WikiNamespace constants
230     $WIKI->{config}->{name}->{space} = {
231     separator => '//',
232     separator_reg => qr#\s*//\s*#,
233     self => '.',
234     parent => '..',
235     };
236    
237     ## -- Default character codes
238     $WIKI->{config}->{charset} = {
239     ## Internal code - MUST be ASCII + 8bit coding scheme
240     internal => 'euc-jp',
241     ## Default output code
242     output => 'iso-2022-jp',
243     ## "query" part in URI reference
244     uri_query => '', # auto-detected
245     uri_query_encode => 'euc-jp', ## For compatibility w/ SuikaWiki 2
246     uri_param => '', # auto-detected
247     uri_param_encode => 'euc-jp', ## For compatibility w/ SuikaWiki 2
248     ## PATH_INFO part in URI reference
249     uri_path_info => 'x-utf-8-10646', ## Reserved for future use
250     ## Fragment identifier in URI reference
251     uri_fragment => 'x-punycode', ## Reserved for possible future use
252     };
253    
254     ## -- Expires duration templates
255     $WIKI->{config}->{entity}->{expires} = {
256     edit => {delta => 60},
257     view => {delta => 2*3600},
258     lm_flaged => {delta => 30*24*3600},
259     stylesheet => {delta => 30*24*3600},
260     error => {delta => 60},
261     };
262    
263     ## -- Debug mode
264     $WIKI->{config}->{debug} = {
265     general => 0,
266     db => 0,
267     format => 0,
268     view => 0,
269     };
270 wakaba 1.11
271 wakaba 1.8 };
272 w 1.1
273 wakaba 1.12.4.3 =head1 SEE ALSO
274 wakaba 1.6
275 wakaba 1.12.4.3 C<lib/suikawiki.pl>, C<wiki.cgi>,
276     <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>,
277     <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SWHCS>
278 wakaba 1.6
279     =head1 LICENSE
280    
281 wakaba 1.12.4.3 Copyright 2003-2004 Wakaba <w@suika.fam.cx>. All rights reserved.
282 wakaba 1.6
283     This program is free software; you can redistribute it and/or
284     modify it under the same terms as Perl itself.
285    
286     =cut
287    
288 wakaba 1.12.4.6 1; # $Date: 2004/03/20 04:09:14 $

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24