/[suikacvs]/2005/helowiki/suikawiki-config.ph
Suika

Contents of /2005/helowiki/suikawiki-config.ph

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1 - (hide annotations) (download)
Fri Jan 21 14:38:15 2005 UTC (19 years, 3 months ago) by hero
Branch: MAIN
CVS Tags: HEAD
New from SuikaWiki default distribution

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24