/[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.9 by wakaba, Fri Jan 16 08:06:53 2004 UTC revision 1.19 by wakaba, Sat May 1 04:03:00 2004 UTC
# Line 1  Line 1 
1  package main;  =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;
22    
23  ## [OBSOLETE] URI (or part of URI) of Wiki CGI script itself and its external addons    ## These lines should be removed after utf8 support
24          ## Note: If your Wiki CGI script URI is <http://foo.example/path/to/wiki.cgi>,    BEGIN {
25          ##              cookie-path: /path/to/      $Message::Util::Formatter::Base::Token = qr/[\w._+\x80-\xFF-]+/;
26          ##              script-short-name: wiki.cgi      require Message::Util::Formatter::Base;
27          ##       URI parts MUST NOT contains "&" and/or non-URI characters.    }
28    our %uri = (    use Message::Util::Error;
     cookie_path         => '/~wakaba/-temp/expwiki/',  
     external_script     => '../wiki/script/',  
     script_short_name   => 'wiki',  
     ## If you use CVS repository of WikiDatabase,  
     #cvs_repository     => 'http://path-to-viewcvs/path-to-repository/',  
   );  
   $uri{wiki_abs} = "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}";  
   $main::url_cgi = $uri{wiki_abs};  
   $uri{wiki} = qq($uri{cookie_path}$uri{script_short_name});      
   
 ## Path to modules and databases  
   push @main::INC, qw'lib ../wiki/lib lib';  
   
 ## These lines should be removed after utf8 support  
 $Message::Util::Formatter::Base::Token = qr/[\w._+\x80-\xFF-]+/;  
 require Message::Util::Formatter::Base;  
   
 ## Constructing a new instance of the WikiEngine  
   require SuikaWiki::Implementation;  
   our $WIKI = SuikaWiki::Implementation->new;  
   
   ## Obsolete interface  
   our %PathTo = (       ## Path to your data, relative to the main CGI script (NOT to this config script)  
     CachePrefix         => q(./wikidata/.cache.),  # WikiPlugin  
     TempPrefix  => q(./wikidata/.tmp.),            # WikiPlugin, Image  
     convert     => q(/usr/X11R6/bin/convert),      # Image  
   );  
29    
30  ## Filesystem path mapping  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 (    for (
41       [db__content__dir        => q"./wikidata/page"],       [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"],       [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/"],       [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      $WIKI->{config}->{path_to}->{$_->[0]} = $_->[1];      ## 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  ## Debug mode  =begin comment
61    $WIKI->{config}->{debug} = {  
62      general => 1,    ## -- Namazu URI Mapping (See SuikaWiki:SuikaWiki//Namazu) --
63      db => 0,    $WIKI->{config}->{nmz__uri_to_uri} = sub {
64      view => 1,      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  ## WikiPlugin  =end comment
78    
79    =cut
80    
81      ## -- WikiPlugin
82    push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {    push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
83      my $wiki = shift;      my $wiki = shift;
84        
85        ## Installed plugin modules
86      $wiki->{plugin}->load_directory (qw(      $wiki->{plugin}->load_directory (qw(
87        lib/SuikaWiki/Plugin/        lib/SuikaWiki/Plugin/
88        misc/plugins/        misc/plugins/
89          misc/plugins/form/
90        misc/plugins/format/        misc/plugins/format/
91          misc/plugins/link/
92        misc/plugins/view/        misc/plugins/view/
93      ));      ));
94        
95        ## Configuration file as pseudo-plugin module
96      require 'wikidata/config.ph';      require 'wikidata/config.ph';
97    };    };
98    
99  ## WikiDatabase : Mapping logical to physical    ## -- WikiDatabase: Mapping logical to physical
100    push @{$WIKI->{event}->{database_loaded}}, sub {    push @{$WIKI->{event}->{database_loaded}}, sub {
101          my $wiki = shift;
102          
103        ## Main content        ## Main content
104        $WIKI->{db}->_set_prop_db (content => {-db_open => sub {        $wiki->{db}->_set_prop_db (content => {-db_open => sub {
105          require SuikaWiki::DB::FileSystem::YukiWikiDBNS;          require SuikaWiki::DB::FileSystem::LeafFile;
106          SuikaWiki::DB::FileSystem::YukiWikiDBNS->new          SuikaWiki::DB::FileSystem::LeafFile->new
107            (directory => $WIKI->{config}->{path_to}->{db__content__dir},            (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
108             logfile   => $WIKI->{config}->{path_to}->{db__content__error_log},             directory_suffix => '.ns',
109             suffix    => '.txt',             file_suffix    => '.txt',
110             -lock => &{$WIKI->{var}->{db}->{lock_prop}} ('content'));             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 {        }, -db_close => sub {
128          my %opt = @_;          my %opt = @_;
129          $opt{prop_info}->{-db}->close;          $opt{prop_info}->{-db}->close;
# Line 80  require Message::Util::Formatter::Base; Line 131  require Message::Util::Formatter::Base;
131        }});        }});
132                
133        ## Last modified        ## Last modified
134        $WIKI->{db}->_set_prop_db (lastmodified => {-db_open => sub {        $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
135          require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;          require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
136          SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new          SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
137            (directory => $WIKI->{config}->{path_to}->{db__content__dir},            (directory => $wiki->{config}->{path_to}->{db__content__dir},
138             -lock => &{$WIKI->{var}->{db}->{lock_prop}} ('lastmodified'));             -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
139        }, -prop => 'last_modified', -db_close => sub {        }, -prop => 'last_modified', -db_close => sub {
140          my %opt = @_;          my %opt = @_;
141          $opt{prop_info}->{-db}->close;          $opt{prop_info}->{-db}->close;
142          delete $opt{prop_info}->{-db};          delete $opt{prop_info}->{-db};
143        }});        }});
144            
145    ## OBSOLETE interface for transition        ## Cache DBs
146    ## Don't remove until WikiResource is reimplemented        require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
147      $WIKI->{db}->get (content => ['dummy']);        my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
148      *main::database = $WIKI->{db}->{prop}->{content}->{-db}->{db_hash};              (directory => $wiki->{config}->{path_to}->{db__cache__dir},
149      $SuikaWiki::Plugin::DB = $WIKI->{db};               expires => 86400 * 3, removes => 86400 * 3); # 3 days
150      for (@{$SuikaWiki::Plugin::On{WikiDatabaseLoaded}||[]}) { &{$_} }        $wiki->{db}->_set_prop_db (m__search_result =>
151                {-db => $cachedb, -prop => 'search_result', -db_close => sub {
152      package wiki::dummy;            my %opt = @_;
153      sub meta {undef};            $opt{prop_info}->{-db}->close;
154      sub list_items {};            delete $opt{prop_info}->{-db};
155      sub STORE {};          }});
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    ## -- WikiName of special purpose WikiPages
190    $WIKI->{config}->{page} = {    $WIKI->{config}->{page} = {
191      Default         => [qw/HomePage/],      Default         => $WIKI->name ([qw/HomePage/]),
192      NewPageTemplate => [qw/Wiki NewPageTemplate/],      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    ## [OBSOLETE] Name of Special WikiPage (linked as parts of navigations)    ## -- WikiNamespace constants
198    our %PageName = (    $WIKI->{config}->{name}->{space} = {
199      FrontPage   => 'HomePage',      separator => '//',
200      InterWikiName       => 'Wiki//InterWikiName',      separator_reg => qr#\s*//\s*#,
201      MenuBar     => 'Wiki//MenuBar',      self => '.',
202      RefererDontRecord   => 'Wiki//Referer//IgnoreSite',      parent => '..',
203      RefererSiteName     => 'Wiki//Referer//SiteName',      root => '//',
204      ResourceNS  => 'Wiki//Resource//',    };
     StyleList   => 'Wiki//Style//List//',  
   );  
205        
206    ## WikiNamespace constants    ## -- Default character codes
207    $WIKI->{config}->{name}->{space}->{separator} = '//';    $WIKI->{config}->{charset} = {
208    $WIKI->{config}->{name}->{space}->{separator_reg} = qr#//#;      ## 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    ## Default character code    ## -- User option for media types
224    $WIKI->{config}->{charset}->{internal} = 'euc-jp';    $WIKI->{config}->{ExpandedURI q<media-type:accept-media-type>} = {
225    $WIKI->{config}->{charset}->{output} = 'iso-2022-jp';      q<IMT:text/css##> => 1,
226    $WIKI->{config}->{charset}->{uri_param} = ''; # auto detect      q<IMT:text/plain##> => 1,
227    $WIKI->{config}->{charset}->{uri_param_encode} = 'euc-jp';      q<IMT:text/x-suikawiki;version="0.9"##> => 1,
228    $WIKI->{config}->{charset}->{uri_query} = ''; # auto detect      q<IMT:application/x.suikawiki.config;version="2.0"##> => 1,
229    $WIKI->{config}->{charset}->{uri_query_encode} = 'euc-jp';    };
   $WIKI->{config}->{charset}->{uri_path_info} = 'utf-8';  
230        
231    ## Expires duration templates    ## -- Expires duration templates
232    $WIKI->{config}->{entity}->{expires} = {    $WIKI->{config}->{entity}->{expires} = {
233      edit      => {delta => 60},      edit      => {delta => 60},
234      view      => {delta => 2*3600},      view      => {delta => 2*3600},
235        list      => {delta => 60},
236      lm_flaged => {delta => 30*24*3600},      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  =head1 NAME  };
250    
251    =head1 SEE ALSO
252    
253  suikawiki-config.ph --- SuikaWiki: Configuration of the wiki  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  =head1 LICENSE
258    
259  Copyright 2003 Wakaba <w@suika.fam.cx>  Copyright 2003-2004 Wakaba <w@suika.fam.cx>.  All rights reserved.
260    
261  This program is free software; you can redistribute it and/or  This program is free software; you can redistribute it and/or
262  modify it under the same terms as Perl itself.  modify it under the same terms as Perl itself.

Legend:
Removed from v.1.9  
changed lines
  Added in v.1.19

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24