/[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.20 by wakaba, Fri May 7 07:51:33 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 itself and its external addons    ## These lines should be removed after utf8 support
24          ## Note: If your Wiki CGI 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/',  
   );  
   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  
   );  
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->rel2abs ($_->[1], $Bin);
58    }    }
59    
60  ## WikiPlugin  =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 {    push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
83      ## Obsolete interface      my $wiki = shift;
     push @SuikaWiki::Plugin::plugin_directory, (  
 #       q(../wiki/lib/SuikaWiki/Plugin/),  
 #       q(../wiki/misc/plugins/),  
         q(lib/SuikaWiki/Plugin/),  
         q(misc/plugins/),  
     );  
     SuikaWiki::Plugin->import_plugins ();  
84            
85      ## Plugin style new configuration file      ## 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';      require 'wikidata/config.ph';
97    };    };
98    
99  ## WikiDatabase : Mapping of 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        }, -own => 1});             -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        ## 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', -own => 1});        }, -prop => 'last_modified', -db_close => sub {
140              my %opt = @_;
141    ## OBSOLETE interface for transition          $opt{prop_info}->{-db}->close;
142      $WIKI->{db}->get (content => ['dummy']);          delete $opt{prop_info}->{-db};
143      *main::database = $WIKI->{db}->{prop}->{content}->{-db}->{db_hash};        }});
144      $SuikaWiki::Plugin::DB = $WIKI->{db};        
145      for (@{$SuikaWiki::Plugin::On{WikiDatabaseLoaded}||[]}) { &{$_} }        ## Cache DBs
146              require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
147      package wiki::dummy;        my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
148      sub meta {undef};              (directory => $wiki->{config}->{path_to}->{db__cache__dir},
149      sub list_items {};               expires => 86400 * 3, removes => 86400 * 3); # 3 days
150      sub STORE {};        $wiki->{db}->_set_prop_db (m__search_result =>
151    };          {-db => $cachedb, -prop => 'search_result', -db_close => sub {
152              my %opt = @_;
153    ## [OBSOLETE] Name of Special WikiPage (linked as parts of navigations)            $opt{prop_info}->{-db}->close;
154    our %PageName = (            delete $opt{prop_info}->{-db};
155      FrontPage   => 'HomePage',          }});
156      IndexPage   => 'IndexPage',        $wiki->{db}->_set_prop_db (wpp__headsummary =>
157      InterWikiName       => 'Wiki//InterWikiName',          {-db => $cachedb, -prop => 'headsummary', -db_close => sub {
158      SearchPage  => 'Wiki//Page//Search',            my %opt = @_;
159      CreatePage  => 'Wiki//Page//Create',            $opt{prop_info}->{-db}->close;
160      MenuBar     => 'Wiki//MenuBar',            delete $opt{prop_info}->{-db};
161      RecentChanges       => 'RecentChanges',          }});
162      RefererDontRecord   => 'Wiki//Referer//IgnoreSite',        $wiki->{db}->_set_prop_db (ref__item_template =>
163      RefererSiteName     => 'Wiki//Referer//SiteName',          {-db => $cachedb, -prop => 'refereritem', -db_close => sub {
164      ResourceNS  => 'Wiki//Resource//',            my %opt = @_;
165      StyleList   => 'Wiki//Style//List//',            $opt{prop_info}->{-db}->close;
166      UserAgentList       => 'Wiki//UserAgentList',            delete $opt{prop_info}->{-db};
167      AdminSpecialPage    => "\x11\x11Admin\x11Special\x11Page\x11\x11",          }});
168    );        
169            ## Referer Database (See Referer plugin module)
170    ## WikiName of special purpose WikiPages        $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} = {    $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    };    };
   our %PageOf = %{$WIKI->{config}->{page}};  
196        
197    ## WikiNamespace constants    ## -- WikiNamespace constants
198    $WIKI->{config}->{name}->{space}->{separator} = '//';    $WIKI->{config}->{name}->{space} = {
199    $WIKI->{config}->{name}->{space}->{separator_reg} = qr#//#;      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    ## 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_query} = ''; # auto detect      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    ## -- 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  =head1 NAME    ## -- 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  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.7  
changed lines
  Added in v.1.20

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24