/[pub]/suikawiki/script/default/suikawiki-config.ph
Suika

Diff of /suikawiki/script/default/suikawiki-config.ph

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.1 by w, Wed Jan 1 12:10:10 2003 UTC revision 1.18 by wakaba, Fri Apr 30 06:04:17 2004 UTC
# Line 1  Line 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;  use strict;
 #  
 # You MUST modify following '$modifier_...' variables.  
 #  
 # our $modifier_dbtype = 'AnyDBM_File';  # Fast, not available on some server, page size limited.  
 # our $modifier_dbtype = 'dbmopen';      # Fast, not available on some server, page size limited.  
 our $modifier_dbtype = 'YukiWikiDB';     # Slow, available on all environment.  
 our $url_cgi = '/~wakaba/wiki/wiki';  
         ## - MUST be started by '/'  
         ## - MUST NOT include [&<>"] and/or non-URI characters  
 our %uri;  
 $uri{wiki} = $url_cgi;  
 $uri{cvs_wikipage} = '/gate/cvs/wakaba/suikawiki/wiki/';        ## URI path to Web interface of CVS repository of WikiPages ("" = none)  
 $SuikaWiki::Plugin::plugin_directory = q(./SuikaWiki/Plugin/);  
 our %PathTo = ( ## Path to your data, from the main CGI script (NOT from this config script)  
   TouchFile     => q(./wikidata/touched.txt),  
   WikiDataBase  => q(./wikidata/page),  
   WikiInfoBase  => q(./wikidata/info),  
   WikiDiffBase  => q(./wikidata/diff),  
 );  
 our $use_exists = 0; # If you can use 'exists' method for your DB.  
 ##############################  
 our %PageName = (  
   FrontPage     => 'HomePage',  
   IndexPage     => 'IndexPage',  
   SearchPage    => 'SearchPage',  
   CreatePage    => 'CreatePage',  
   ErrorPage     => 'ErrorPage',  
   RssPage       => 'RssPage',  
   AdminSpecialPage      => 'Admin Special Page', # must include spaces.  
   DefaultStyleForHTML   => 'WikiHTMLStyle',  
 );  
 our $kanjicode = 'euc';  
 our $lang = 'ja';  
 our %fixedpage = (  
     $PageName{IndexPage}        => 1,  
     $PageName{ErrorPage}        => 1,  
     $PageName{RssPage}  => 1,  
     RecentChanges => 1,  
     AdminChangePassword => 1,  
     CompletedSuccessfully => 1,  
     WikiUserAgentList => 1,  
 );  
22    
23  1;    ## 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->catfile ($Bin, $_->[1]);
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      push @{$WIKI->{event}->{input_close}}, sub {
190        my ($wiki, $event) = @_;
191        try {
192          SuikaWiki::Plugin->module_package ('Referer')
193                         ->add_referer (wiki => $wiki,
194                                        uri => $wiki->{input}->meta_variable
195                                                 ('HTTP_REFERER'));
196        } catch SuikaWiki::Plugin::error with {
197          my $err = shift;
198          $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
199        };
200        try {
201          SuikaWiki::Plugin->module_package ('RequestLog')
202                         ->http_request_log (wiki => $wiki,
203                                             prop => 'log__http_request');
204        } catch SuikaWiki::Plugin::error with {
205          my $err = shift;
206          $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
207        };
208      };
209    
210      ## -- WikiName of special purpose WikiPages
211      $WIKI->{config}->{page} = {
212        Default         => $WIKI->name ([qw/HomePage/]),
213        InterWikiName   => $WIKI->name ([qw/Wiki InterWikiName/]),
214        NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),
215        'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),
216      };
217      
218      ## -- WikiNamespace constants
219      $WIKI->{config}->{name}->{space} = {
220        separator => '//',
221        separator_reg => qr#\s*//\s*#,
222        self => '.',
223        parent => '..',
224        root => '//',
225      };
226      
227      ## -- Default character codes
228      $WIKI->{config}->{charset} = {
229        ## Internal code - MUST be ASCII + 8bit coding scheme
230          internal => 'euc-jp',
231        ## Default output code
232          output => 'iso-2022-jp',
233        ## "query" part in URI reference
234          uri_query => '', # auto-detected
235          uri_query_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
236          uri_param => '', # auto-detected
237          uri_param_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
238        ## PATH_INFO part in URI reference
239          uri_path_info => 'x-utf-8-10646', ## Reserved for future use
240        ## Fragment identifier in URI reference
241          uri_fragment => 'x-punycode',     ## Reserved for possible future use
242      };
243      
244      ## -- User option for media types
245      $WIKI->{config}->{ExpandedURI q<media-type:accept-media-type>} = {
246        q<IMT:text/css##> => 1,
247        q<IMT:text/plain##> => 1,
248        q<IMT:text/x-suikawiki;version="0.9"##> => 1,
249        q<IMT:application/x.suikawiki.config;version="2.0"##> => 1,
250      };
251      
252      ## -- Expires duration templates
253      $WIKI->{config}->{entity}->{expires} = {
254        edit      => {delta => 60},
255        view      => {delta => 2*3600},
256        list      => {delta => 60},
257        lm_flaged => {delta => 30*24*3600},
258        stylesheet => {delta => 30*24*3600},
259        error     => {delta => 60},
260      };
261    
262      ## -- Debug mode
263      $WIKI->{config}->{debug} = {
264        general => 0,
265        db => 0,
266        format => 0,
267        view => 0,
268      };
269    
270    };
271    
272    =head1 SEE ALSO
273    
274    C<lib/suikawiki.pl>, C<wiki.cgi>,
275    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>,
276    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SWHCS>
277    
278    =head1 LICENSE
279    
280    Copyright 2003-2004 Wakaba <w@suika.fam.cx>.  All rights reserved.
281    
282    This program is free software; you can redistribute it and/or
283    modify it under the same terms as Perl itself.
284    
285    =cut
286    
287    1; # $Date$

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.18

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24