/[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.7 by wakaba, Thu Oct 30 07:48:44 2003 UTC revision 1.16 by wakaba, Sat Mar 20 04:25:49 2004 UTC
# Line 1  Line 1 
1  package main;  =head1 NAME
2  use strict;  
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  ## [OBSOLETE] URI (or part of URI) of Wiki CGI itself and its external addons  More complex customizing, e.g. modifying navigation bar or
12          ## Note: If your Wiki CGI URI is <http://foo.example/path/to/wiki.cgi>,  adding new mode, is also possible by config.ph (generated from
13          ##              cookie-path: /path/to/  config.wp2) and WikiPlugin modules.  For more information,
14          ##              script-short-name: wiki.cgi  see <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>.
15          ##       URI parts MUST NOT contains "&" and/or non-URI characters.  
16    our %uri = (  This file is part of SuikaWiki.
17      cookie_path         => '/~wakaba/-temp/expwiki/',  
18      external_script     => '../wiki/script/',  =cut
19      script_short_name   => 'wiki',  
20      ## If you use CVS repository of WikiDatabase,  package wiki::driver::http;
21      #cvs_repository     => 'http://path-to-viewcvs/path-to-repository/',  use strict;
   );  
   our $url_cgi = "http://".($main::ENV{HTTP_HOST} || $main::ENV{SERVER_NAME}.($main::ENV{SERVER_PORT}==80?'':":$main::ENV{SERVER_PORT}"))."$uri{cookie_path}$uri{script_short_name}";  
   $uri{wiki_abs} = $url_cgi;  
   $uri{wiki} = qq($uri{cookie_path}$uri{script_short_name});      
   
 ## Path to modules and databases  
   push @main::INC, qw'lib ../wiki/lib lib';  
   
 ## Constructing a new instance of the WikiEngine  
   require SuikaWiki::Implementation;  
   our $WIKI = SuikaWiki::Implementation->new;  
   
   ## Obsolete interface  
   our %PathTo = (       ## Path to your data, from the main CGI script (NOT from this config script)  
     CachePrefix         => q(./wikidata/.cache.),  # WikiPlugin  
     TempPrefix  => q(./wikidata/.tmp.),            # WikiPlugin, Image  
     convert     => q(/usr/X11R6/bin/convert),      # Image  
   );  
22    
23  ## Filesystem path mapping  push our @Config, sub ($) {
24      eval q{ use Message::Util::Error };
25      my $WIKI = shift;
26      use Cwd qw(abs_path);
27      
28      ## -- Filesystem path mapping
29    for (    for (
30       [db__content__dir        => q"./wikidata/page"],       [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"],       [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/"],       [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    #     [namazu__index_dir       => q"/var/namazu/index/wiki"],
43    ) {    ) {
44      $WIKI->{config}->{path_to}->{$_->[0]} = $_->[1];      ## 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    
49  ## WikiPlugin  =begin comment
50    
51      ## -- Namazu URI Mapping (See SuikaWiki:SuikaWiki//Namazu) --
52      $WIKI->{config}->{nmz__uri_to_uri} = sub {
53        my ($nmzuri, %opt) = @_;
54        if ($nmzuri =~ s!^\Q$opt{o}->{wiki}->{config}->{path_to}->{db__content__dir}\E/*!!o) {
55          $nmzuri =~ s/\.txt$//;
56          return $opt{o}->{wiki}->uri_reference
57                          (page => $opt{o}->{wiki}->name ([
58            map {s/([0-9A-F][0-9A-F])/pack 'C', hex $1/ge; $_}
59            split m!\.ns/!, $nmzuri
60          ]), base => 1);
61        } else {
62          return ($nmzuri, $nmzuri);
63        }
64      };
65    
66    =end comment
67    
68      ## -- WikiPlugin
69    push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {    push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
70      ## Obsolete interface      my $wiki = shift;
71      push @SuikaWiki::Plugin::plugin_directory, (      
72  #       q(../wiki/lib/SuikaWiki/Plugin/),      ## Installed plugin modules
73  #       q(../wiki/misc/plugins/),      $wiki->{plugin}->load_directory (qw(
74          q(lib/SuikaWiki/Plugin/),        lib/SuikaWiki/Plugin/
75          q(misc/plugins/),        misc/plugins/
76      );        misc/plugins/form/
77      SuikaWiki::Plugin->import_plugins ();        misc/plugins/format/
78          misc/plugins/link/
79          misc/plugins/view/
80        ));
81            
82      ## Plugin style new configuration file      ## Configuration file as pseudo-plugin module
83      require 'wikidata/config.ph';      require 'wikidata/config.ph';
84    };    };
85    
86  ## WikiDatabase : Mapping of logical to physical    ## -- WikiDatabase: Mapping logical to physical
87    push @{$WIKI->{event}->{database_loaded}}, sub {    push @{$WIKI->{event}->{database_loaded}}, sub {
88          my $wiki = shift;
89          
90        ## Main content        ## Main content
91        $WIKI->{db}->_set_prop_db (content => {-db_open => sub {        $wiki->{db}->_set_prop_db (content => {-db_open => sub {
92          require SuikaWiki::DB::FileSystem::YukiWikiDBNS;          require SuikaWiki::DB::FileSystem::YukiWikiDBNS;
93          SuikaWiki::DB::FileSystem::YukiWikiDBNS->new          SuikaWiki::DB::FileSystem::YukiWikiDBNS->new
94            (directory => $WIKI->{config}->{path_to}->{db__content__dir},            (directory => $wiki->{config}->{path_to}->{db__content__dir},
95             logfile   => $WIKI->{config}->{path_to}->{db__content__error_log},             logfile   => $wiki->{config}->{path_to}->{db__content__error_log},
96             suffix    => '.txt',             suffix    => '.txt',
97             -lock => &{$WIKI->{var}->{db}->{lock_prop}} ('content'));             -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
98        }, -own => 1});        }, -db_close => sub {
99            my %opt = @_;
100            $opt{prop_info}->{-db}->close;
101            delete $opt{prop_info}->{-db};
102          }});
103                
104        ## Last modified        ## Last modified
105        $WIKI->{db}->_set_prop_db (lastmodified => {-db_open => sub {        $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
106          require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;          require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
107          SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new          SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
108            (directory => $WIKI->{config}->{path_to}->{db__content__dir},            (directory => $wiki->{config}->{path_to}->{db__content__dir},
109             -lock => &{$WIKI->{var}->{db}->{lock_prop}} ('lastmodified'));             -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
110        }, -prop => 'last_modified', -own => 1});        }, -prop => 'last_modified', -db_close => sub {
111              my %opt = @_;
112    ## OBSOLETE interface for transition          $opt{prop_info}->{-db}->close;
113      $WIKI->{db}->get (content => ['dummy']);          delete $opt{prop_info}->{-db};
114      *main::database = $WIKI->{db}->{prop}->{content}->{-db}->{db_hash};        }});
115      $SuikaWiki::Plugin::DB = $WIKI->{db};        
116      for (@{$SuikaWiki::Plugin::On{WikiDatabaseLoaded}||[]}) { &{$_} }        ## Cache DBs
117              require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
118      package wiki::dummy;        my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
119      sub meta {undef};              (directory => $wiki->{config}->{path_to}->{db__cache__dir},
120      sub list_items {};               expires => 86400 * 3, removes => 86400 * 3); # 3 days
121      sub STORE {};        $wiki->{db}->_set_prop_db (m__search_result =>
122    };          {-db => $cachedb, -prop => 'search_result', -db_close => sub {
123              my %opt = @_;
124    ## [OBSOLETE] Name of Special WikiPage (linked as parts of navigations)            $opt{prop_info}->{-db}->close;
125    our %PageName = (            delete $opt{prop_info}->{-db};
126      FrontPage   => 'HomePage',          }});
127      IndexPage   => 'IndexPage',        $wiki->{db}->_set_prop_db (wpp__headsummary =>
128      InterWikiName       => 'Wiki//InterWikiName',          {-db => $cachedb, -prop => 'headsummary', -db_close => sub {
129      SearchPage  => 'Wiki//Page//Search',            my %opt = @_;
130      CreatePage  => 'Wiki//Page//Create',            $opt{prop_info}->{-db}->close;
131      MenuBar     => 'Wiki//MenuBar',            delete $opt{prop_info}->{-db};
132      RecentChanges       => 'RecentChanges',          }});
133      RefererDontRecord   => 'Wiki//Referer//IgnoreSite',        $wiki->{db}->_set_prop_db (ref__item_template =>
134      RefererSiteName     => 'Wiki//Referer//SiteName',          {-db => $cachedb, -prop => 'refereritem', -db_close => sub {
135      ResourceNS  => 'Wiki//Resource//',            my %opt = @_;
136      StyleList   => 'Wiki//Style//List//',            $opt{prop_info}->{-db}->close;
137      UserAgentList       => 'Wiki//UserAgentList',            delete $opt{prop_info}->{-db};
138      AdminSpecialPage    => "\x11\x11Admin\x11Special\x11Page\x11\x11",          }});
139    );        
140            ## Berkely DB Environment Preparation
141    ## WikiName of special purpose WikiPages        use BerkeleyDB;
142          my $bdbenv = new BerkeleyDB::Env
143             -Home => $wiki->{config}->{path_to}->{db__bdb__home_dir},
144             -Config => {
145               DB_DATA_DIR => $wiki->{config}->{path_to}->{db__content__dir},
146               DB_LOG_DIR => $wiki->{config}->{path_to}->{db__bdb__log_dir},
147               DB_TMP_DIR => $wiki->{config}->{path_to}->{db__bdb__temp_dir},
148             },
149             -ErrFile => $wiki->{config}->{path_to}->{db__bdb__log_file},
150             -Flags => DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL,
151             -Verbose => $wiki->{config}->{debug}->{db};
152    
153          $wiki->{db}->_set_prop_db (content__structured => {-db_open => sub {
154            require SuikaWiki::DB::Hash;
155            new SuikaWiki::DB::Hash constructor => sub {
156              use MLDBM qw(BerkeleyDB::Hash);# Storable);
157              tie my %mldb, 'MLDBM',
158                            -Filename => $wiki->{config}->{path_to}
159                                              ->{db__cache_struct__file},
160                            -Env => $bdbenv,
161                            -Flags => DB_CREATE,
162                            -Mode => 0644;
163              \%mldb;
164           };
165          }});
166          
167          ## Referer Database (See Referer plugin module)
168          $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
169            require SuikaWiki::DB::Hash;
170            new SuikaWiki::DB::Hash constructor => sub {
171              tie my %db, 'BerkeleyDB::Hash',
172                            -Filename => 'referer.db',
173                            -Env => $bdbenv,
174                            -Flags => DB_CREATE,
175                            -Mode => 0644;
176              \%db;
177           };
178          }});
179    
180          ## HTTP Request Logging Database (See RequestLog plugin module)
181          $wiki->{db}->_set_prop_db (log__http_request => {-db_open => sub {
182            require SuikaWiki::DB::Hash;
183            new SuikaWiki::DB::Hash constructor => sub {
184              tie my %db, 'BerkeleyDB::Hash',
185                            -Filename => 'http-request-log.db',
186                            -Env => $bdbenv,
187                            -Flags => DB_CREATE,
188                            -Mode => 0644;
189              \%db;
190           };
191          }});
192          
193          ## Additional WikiDB properties should be defined here
194          # ...    
195      };
196    
197      push @{$WIKI->{event}->{input_close}}, sub {
198        my ($wiki, $event) = @_;
199        try {
200          SuikaWiki::Plugin->module_package ('Referer')
201                         ->add_referer (wiki => $wiki,
202                                        uri => $wiki->{input}->meta_variable
203                                                 ('HTTP_REFERER'));
204        } catch SuikaWiki::Plugin::error with {
205          my $err = shift;
206          $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
207        };
208        try {
209          SuikaWiki::Plugin->module_package ('RequestLog')
210                         ->http_request_log (wiki => $wiki,
211                                             prop => 'log__http_request');
212        } catch SuikaWiki::Plugin::error with {
213          my $err = shift;
214          $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
215        };
216      };
217    
218      ## -- WikiName of special purpose WikiPages
219    $WIKI->{config}->{page} = {    $WIKI->{config}->{page} = {
220      Default         => [qw/HomePage/],      Default         => $WIKI->name ([qw/HomePage/]),
221      NewPageTemplate => [qw/Wiki NewPageTemplate/],      InterWikiName   => $WIKI->name ([qw/Wiki InterWikiName/]),
222        NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),
223        'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),
224    };    };
   our %PageOf = %{$WIKI->{config}->{page}};  
225        
226    ## WikiNamespace constants    ## -- WikiNamespace constants
227    $WIKI->{config}->{name}->{space}->{separator} = '//';    $WIKI->{config}->{name}->{space} = {
228    $WIKI->{config}->{name}->{space}->{separator_reg} = qr#//#;      separator => '//',
229        separator_reg => qr#\s*//\s*#,
230        self => '.',
231        parent => '..',
232      };
233        
234    ## Character code    ## -- Default character codes
235    $WIKI->{config}->{charset}->{internal} = 'euc-jp';    $WIKI->{config}->{charset} = {
236    $WIKI->{config}->{charset}->{output} = 'iso-2022-jp';      ## Internal code - MUST be ASCII + 8bit coding scheme
237    $WIKI->{config}->{charset}->{uri_param} = ''; # auto detect        internal => 'euc-jp',
238    $WIKI->{config}->{charset}->{uri_query} = ''; # auto detect      ## Default output code
239          output => 'iso-2022-jp',
240        ## "query" part in URI reference
241          uri_query => '', # auto-detected
242          uri_query_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
243          uri_param => '', # auto-detected
244          uri_param_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
245        ## PATH_INFO part in URI reference
246          uri_path_info => 'x-utf-8-10646', ## Reserved for future use
247        ## Fragment identifier in URI reference
248          uri_fragment => 'x-punycode',     ## Reserved for possible future use
249      };
250        
251    ## Expires duration templates    ## -- Expires duration templates
252    $WIKI->{config}->{entity}->{expires} = {    $WIKI->{config}->{entity}->{expires} = {
253      edit      => {delta => 60},      edit      => {delta => 60},
254      view      => {delta => 2*3600},      view      => {delta => 2*3600},
255      lm_flaged => {delta => 30*24*3600},      lm_flaged => {delta => 30*24*3600},
256        stylesheet => {delta => 30*24*3600},
257        error     => {delta => 60},
258    };    };
259    
260  =head1 NAME    ## -- Debug mode
261      $WIKI->{config}->{debug} = {
262        general => 0,
263        db => 0,
264        format => 0,
265        view => 0,
266      };
267    
268    };
269    
270    =head1 SEE ALSO
271    
272  suikawiki-config.ph --- SuikaWiki: Configuration of the wiki  C<lib/suikawiki.pl>, C<wiki.cgi>,
273    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>,
274    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SWHCS>
275    
276  =head1 LICENSE  =head1 LICENSE
277    
278  Copyright 2003 Wakaba <w@suika.fam.cx>  Copyright 2003-2004 Wakaba <w@suika.fam.cx>.  All rights reserved.
279    
280  This program is free software; you can redistribute it and/or  This program is free software; you can redistribute it and/or
281  modify it under the same terms as Perl itself.  modify it under the same terms as Perl itself.

Legend:
Removed from v.1.7  
changed lines
  Added in v.1.16

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24