/[pub]/suikawiki/wikidata/suikawiki-config.ph
Suika

Diff of /suikawiki/wikidata/suikawiki-config.ph

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

revision 1.3 by w, Fri Jan 3 03:43:07 2003 UTC revision 1.12.4.4 by wakaba, Sat Mar 13 13:16:59 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 = 'Yuki::YukiWikiDB';     # Slow, available on all environment.  
 #our $modifier_dbtype = 'Yuki::YukiWikiDB2';     # Slow, available on all environment.  
 our $modifier_dbtype = 'Yuki::YukiWikiDBMeta';     # Slow, available on all environment.  
 our $url_cgi = '/~wakaba/suikawiki/wiki';  
         ## - MUST be started by '/'  
         ## - MUST NOT include [&<>"] and/or non-URI characters  
 our %uri;  
 $uri{wiki} = $url_cgi;  
 $uri{cvs_wikipage} = '';        ## URI path to Web interface of CVS repository of WikiPages ("" = none)  
 $SuikaWiki::Plugin::plugin_directory = q(lib/SuikaWiki/Plugin/);  
 our %PathTo = ( ## Path to your data, from the main CGI script (NOT from this config script)  
   WikiDataBase  => q(./wikidata/page),  
 );  
 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',  
   RecentChanges => 'RecentChanges',  
   RssPage       => 'RssPage',  
   AdminSpecialPage      => "\x11\x11Admin\x11Special\x11Page\x11\x11",  
   DefaultStyleForHTML   => 'WikiHTMLStyle',  
   UserAgentList => 'WikiUserAgentList',  
 );  
 our $kanjicode = 'euc';  
 our $lang = 'ja';  
 ## List of WikiPages should not be changed  
 our %FixedPage = (  
     $PageName{ErrorPage}        => 1,  
     $PageName{RssPage}  => 1,  
     CompletedSuccessfully => 1,  
 );  
22    
23  $wiki::useragent::UseLog = 0;   ## Use User-Agent name log (WikiUserAgentList) or not    ## These lines should be removed after utf8 support
24  $wiki::diff::UseDiff = 1;       ## Use diff mode or not    BEGIN {
25        $Message::Util::Formatter::Base::Token = qr/[\w._+\x80-\xFF-]+/;
26        require Message::Util::Formatter::Base;
27      }
28    
29    use Message::Util::Error;
30    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      ) {
49        ## On system that does not set current directory as main script
50        ## directory, you should specify it instead of using "abs_path".
51        $WIKI->{config}->{path_to}->{$_->[0]} = abs_path $_->[1];
52      }
53    
54      ## -- WikiPlugin
55      push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
56        my $wiki = shift;
57        
58        ## Installed plugin modules
59        $wiki->{plugin}->load_directory (qw(
60          lib/SuikaWiki/Plugin/
61          misc/plugins/
62          misc/plugins/form/
63          misc/plugins/format/
64          misc/plugins/link/
65          misc/plugins/view/
66        ));
67    
68        ## Configuration file as pseudo-plugin module
69        require 'wikidata/config.ph';
70      };
71    
72      ## -- WikiDatabase: Mapping logical to physical
73      push @{$WIKI->{event}->{database_loaded}}, sub {
74          my $wiki = shift;
75          
76          ## Main content
77          $wiki->{db}->_set_prop_db (content => {-db_open => sub {
78            require SuikaWiki::DB::FileSystem::YukiWikiDBNS;
79            SuikaWiki::DB::FileSystem::YukiWikiDBNS->new
80              (directory => $wiki->{config}->{path_to}->{db__content__dir},
81               logfile   => $wiki->{config}->{path_to}->{db__content__error_log},
82               suffix    => '.txt',
83               -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
84          }, -db_close => sub {
85            my %opt = @_;
86            $opt{prop_info}->{-db}->close;
87            delete $opt{prop_info}->{-db};
88          }});
89          
90          ## Last modified
91          $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
92            require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
93            SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
94              (directory => $wiki->{config}->{path_to}->{db__content__dir},
95               -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
96          }, -prop => 'last_modified', -db_close => sub {
97            my %opt = @_;
98            $opt{prop_info}->{-db}->close;
99            delete $opt{prop_info}->{-db};
100          }});
101          
102          ## Cache DBs
103          require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
104          my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
105                (directory => $wiki->{config}->{path_to}->{db__cache__dir});
106          $wiki->{db}->_set_prop_db (m__search_result =>
107            {-db => $cachedb, -prop => 'search_result', -db_close => sub {
108              my %opt = @_;
109              $opt{prop_info}->{-db}->close;
110              delete $opt{prop_info}->{-db};
111            }});
112          $wiki->{db}->_set_prop_db (wpp__headsummary =>
113            {-db => $cachedb, -prop => 'headsummary', -db_close => sub {
114              my %opt = @_;
115              $opt{prop_info}->{-db}->close;
116              delete $opt{prop_info}->{-db};
117            }});
118          $wiki->{db}->_set_prop_db (ref__item_template =>
119            {-db => $cachedb, -prop => 'refereritem', -db_close => sub {
120              my %opt = @_;
121              $opt{prop_info}->{-db}->close;
122              delete $opt{prop_info}->{-db};
123            }});
124    
125          ## Berkely DB Environment Preparation
126          use BerkeleyDB;
127          my $bdbenv = new BerkeleyDB::Env
128             -Home => $wiki->{config}->{path_to}->{db__bdb__home_dir},
129             -Config => {
130               DB_DATA_DIR => $wiki->{config}->{path_to}->{db__content__dir},
131               DB_LOG_DIR => $wiki->{config}->{path_to}->{db__bdb__log_dir},
132               DB_TMP_DIR => $wiki->{config}->{path_to}->{db__bdb__temp_dir},
133             },
134             -ErrFile => $wiki->{config}->{path_to}->{db__bdb__log_file},
135             -Flags => DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL,
136             -Verbose => $wiki->{config}->{debug}->{db};
137    
138          $wiki->{db}->_set_prop_db (content__structured => {-db_open => sub {
139            require SuikaWiki::DB::Hash;
140            new SuikaWiki::DB::Hash constructor => sub {
141              use MLDBM qw(BerkeleyDB::Hash);# Storable);
142              tie my %mldb, 'MLDBM',
143                            -Filename => $wiki->{config}->{path_to}
144                                              ->{db__cache_struct__file},
145                            -Env => $bdbenv,
146                            -Flags => DB_CREATE,
147                            -Mode => 0644;
148              \%mldb;
149           };
150          }});
151          
152          ## Referer Database (See Referer plugin module)
153          $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
154            require SuikaWiki::DB::Hash;
155            new SuikaWiki::DB::Hash constructor => sub {
156              tie my %db, 'BerkeleyDB::Hash',
157                            -Filename => 'referer.db',
158                            -Env => $bdbenv,
159                            -Flags => DB_CREATE,
160                            -Mode => 0644;
161              \%db;
162           };
163          }});
164    
165          ## HTTP Request Logging Database (See RequestLog plugin module)
166          $wiki->{db}->_set_prop_db (log__http_request => {-db_open => sub {
167            require SuikaWiki::DB::Hash;
168            new SuikaWiki::DB::Hash constructor => sub {
169              tie my %db, 'BerkeleyDB::Hash',
170                            -Filename => 'http-request-log.db',
171                            -Env => $bdbenv,
172                            -Flags => DB_CREATE,
173                            -Mode => 0644;
174              \%db;
175           };
176          }});
177          
178          ## Additional WikiDB properties should be defined here
179          # ...    
180      };
181    
182      push @{$WIKI->{event}->{input_close}}, sub {
183        my ($wiki, $event) = @_;
184        try {
185          SuikaWiki::Plugin->module_package ('Referer')
186                         ->add_referer (wiki => $wiki,
187                                        uri => $wiki->{input}->meta_variable
188                                                 ('HTTP_REFERER'));
189        } catch SuikaWiki::Plugin::error with {
190          my $err = shift;
191          $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
192        };
193        try {
194          SuikaWiki::Plugin->module_package ('RequestLog')
195                         ->http_request_log (wiki => $wiki,
196                                             prop => 'log__http_request');
197        } catch SuikaWiki::Plugin::error with {
198          my $err = shift;
199          $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
200        };
201      };
202    
203      ## -- WikiName of special purpose WikiPages
204      $WIKI->{config}->{page} = {
205        Default         => $WIKI->name ([qw/HomePage/]),
206        InterWikiName   => $WIKI->name ([qw/Wiki InterWikiName/]),
207        NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),
208        'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),
209      };
210      
211      ## -- WikiNamespace constants
212      $WIKI->{config}->{name}->{space} = {
213        separator => '//',
214        separator_reg => qr#\s*//\s*#,
215        self => '.',
216        parent => '..',
217      };
218      
219      ## -- Default character codes
220      $WIKI->{config}->{charset} = {
221        ## Internal code - MUST be ASCII + 8bit coding scheme
222          internal => 'euc-jp',
223        ## Default output code
224          output => 'iso-2022-jp',
225        ## "query" part in URI reference
226          uri_query => '', # auto-detected
227          uri_query_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
228          uri_param => '', # auto-detected
229          uri_param_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
230        ## PATH_INFO part in URI reference
231          uri_path_info => 'x-utf-8-10646', ## Reserved for future use
232        ## Fragment identifier in URI reference
233          uri_fragment => 'x-punycode',     ## Reserved for possible future use
234      };
235      
236      ## -- Expires duration templates
237      $WIKI->{config}->{entity}->{expires} = {
238        edit      => {delta => 60},
239        view      => {delta => 2*3600},
240        lm_flaged => {delta => 30*24*3600},
241        stylesheet => {delta => 30*24*3600},
242        error     => {delta => 60},
243      };
244    
245      ## -- Debug mode
246      $WIKI->{config}->{debug} = {
247        general => 0,
248        db => 0,
249        format => 0,
250        view => 0,
251      };
252    
253    };
254    
255    =head1 SEE ALSO
256    
257    C<lib/suikawiki.pl>, C<wiki.cgi>,
258    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>,
259    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SWHCS>
260    
261    =head1 LICENSE
262    
263    Copyright 2003-2004 Wakaba <w@suika.fam.cx>.  All rights reserved.
264    
265    This program is free software; you can redistribute it and/or
266    modify it under the same terms as Perl itself.
267    
268    =cut
269    
270  1;  1; # $Date$

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.12.4.4

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24