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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24