/[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.10 by wakaba, Sat Jul 26 09:22:36 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;
22    
23  ## 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 = (  
29      cookie_path         => '/~wakaba/-temp/wiki/',  use Message::Util::Error;
30      external_script     => '../wiki/script/',  push our @Config, sub ($) {
31      script_short_name   => 'wiki',    my $WIKI = shift;
32      ## If you use CVS repository of WikiDatabase,    use Cwd qw(abs_path);
33      #cvs_repository     => 'http://path-to-viewcvs/path-to-repository/',    
34    );    ## -- Filesystem path mapping
35    our $url_cgi; {    for (
36      my $scheme = 'http';       [db__cache__dir          => q"./wikidata/lock/"],
37      $scheme = lc $1 if $main::ENV{SERVER_PROTOCOL} =~ m#([A-Za-z0-9+.%-]+)#;       [db__cache_struct__file  => q"./wikidata/lock/struct.db"],
38      $url_cgi = "$scheme://$main::ENV{SERVER_NAME}".($main::ENV{SERVER_PORT}==80?'':":$main::ENV{SERVER_PORT}")."$uri{cookie_path}$uri{script_short_name}";       [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    }    }
   $uri{wiki_abs} = $url_cgi;  
   $uri{wiki} = qq($uri{cookie_path}$uri{script_short_name});      
53    
54  ## Path to modules and databases    ## -- WikiPlugin
55    push @main::INC, 'lib';    push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
56    push @SuikaWiki::Plugin::plugin_directory, (      my $wiki = shift;
57          q(lib/SuikaWiki/Plugin/),      
58          q(misc/plugins/),      ## Installed plugin modules
59    );      $wiki->{plugin}->load_directory (qw(
60    our %PathTo = (       ## Path to your data, from the main CGI script (NOT from this config script)        lib/SuikaWiki/Plugin/
61      CachePrefix         => q(./wikidata/.cache.),        misc/plugins/
62      TempPrefix  => q(./wikidata/.tmp.),        misc/plugins/form/
63      WikiDataBase        => q(./wikidata/page),        misc/plugins/format/
64      WikiDatabaseErrorLog        => q(./wikidata/error.log),        misc/plugins/link/
65      convert     => q(/usr/X11R6/bin/convert),        misc/plugins/view/
66    );      ));
67    
68  ## Type of WikiPage Database      ## Configuration file as pseudo-plugin module
69    #our $modifier_dbtype = 'AnyDBM_File';  # Fast, not available on some server, page size limited.      require 'wikidata/config.ph';
70    #our $modifier_dbtype = 'dbmopen';      # Fast, not available on some server, page size limited.    };
71    #our $modifier_dbtype = 'Yuki::YukiWikiDB';     # Slow, available on all environment.  
72    #our $modifier_dbtype = 'Yuki::YukiWikiDB2';     # Slow, available on all environment.    ## -- WikiDatabase: Mapping logical to physical
73    our $modifier_dbtype = 'Yuki::YukiWikiDBMeta';     # Slow, available on all environment.    push @{$WIKI->{event}->{database_loaded}}, sub {
74    our $use_exists = 1; # If you can use 'exists' method for your DB.        my $wiki = shift;
75          
76  ## Name of Special WikiPage (linked as parts of navigations)        ## Main content
77    our %PageName = (        $wiki->{db}->_set_prop_db (content => {-db_open => sub {
78      FrontPage   => 'HomePage',          require SuikaWiki::DB::FileSystem::YukiWikiDBNS;
79      IndexPage   => 'IndexPage',          SuikaWiki::DB::FileSystem::YukiWikiDBNS->new
80      InterWikiName       => 'Wiki//InterWikiName',            (directory => $wiki->{config}->{path_to}->{db__content__dir},
81      SearchPage  => 'Wiki//Page//Search',             logfile   => $wiki->{config}->{path_to}->{db__content__error_log},
82      CreatePage  => 'Wiki//Page//Create',             suffix    => '.txt',
83      MenuBar     => 'Wiki//MenuBar',             -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
84      RecentChanges       => 'RecentChanges',        }, -db_close => sub {
85      RefererDontRecord   => 'Wiki//Referer//IgnoreSite',          my %opt = @_;
86      RefererSiteName     => 'Wiki//Referer//SiteName',          $opt{prop_info}->{-db}->close;
87      ResourceNS  => 'Wiki//Resource//',          delete $opt{prop_info}->{-db};
88      StyleList   => 'Wiki//Style//List//',        }});
89      UserAgentList       => 'Wiki//UserAgentList',        
90      AdminSpecialPage    => "\x11\x11Admin\x11Special\x11Page\x11\x11",        ## Last modified
91    );        $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
92            require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
93  ## (Should be reimplemented)          SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
94    our $kanjicode = 'euc';            (directory => $wiki->{config}->{path_to}->{db__content__dir},
95    our $lang = 'ja';             -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
96          }, -prop => 'last_modified', -db_close => sub {
97  ## Misc. options          my %opt = @_;
98    $SuikaWiki::Plugin::UserAgent::LoggingName = 1;          $opt{prop_info}->{-db}->close;
99          ## Use UA-name log? (require UserAgent plugin module)          delete $opt{prop_info}->{-db};
100          }});
101  ## Definition of views        
102          ## Cache DBs
103  require SuikaWiki::View;        require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
104  SuikaWiki::View->template ('links')->add_line (<<'EOH');        my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
105  %link-wiki(page=>"Wiki//News",rel=>News,class=>wiki,title=>"%res(name=>GoToWikiNewsLink);"p);              (directory => $wiki->{config}->{path_to}->{db__cache__dir});
106  %link-wiki(page=>"Wiki//Help",rel=>help,class=>wiki,title=>"%res(name=>GoToWikiHelpLink);"p);        $wiki->{db}->_set_prop_db (m__search_result =>
107  %link-wiki(page=>"Wiki//Page//License",rel=>copyright,class=>wiki,title=>"%res(name=>GoToWikiPageLicenseLink);"p);          {-db => $cachedb, -prop => 'search_result', -db_close => sub {
108  EOH            my %opt = @_;
109  SuikaWiki::View->template ('navbar')->add_line (<<"EOH");            $opt{prop_info}->{-db}->close;
110  %anchor-wiki(mode=>edit,rel=>edit,class=>wiki-cmd,label=>"%res(name=>EditThisPage);"p,title=>"%res(name=>EditThisPageLong);"p,accesskey=>E);            delete $opt{prop_info}->{-db};
111  %anchor-wiki(rel=>view,up_to_date,class=>wiki-cmd,label=>"%res(name=>ViewThisPage);"p,title=>"%res(name=>ViewThisPageLong);"p);          }});
112  %anchor-wiki(page=>{$main::PageName{CreatePage}},class=>wiki,label=>"%res(name=>GoToCreatePage);"p,title=>"%res(name=>GoToCreatePageLong);"p);        $wiki->{db}->_set_prop_db (wpp__headsummary =>
113  %anchor-wiki(page=>{$main::PageName{IndexPage}},class=>wiki,label=>"%res(name=>GoToIndexPage);"p,title=>"%res(name=>GoToIndexPageLong);"p);          {-db => $cachedb, -prop => 'headsummary', -db_close => sub {
114  %anchor-wiki(page=>{$main::PageName{SearchPage}},class=>wiki,label=>"%res(name=>GoToSearchPage);"p,title=>"%res(name=>GoToSearchPageLong);"p);            my %opt = @_;
115  %anchor-wiki(mode=>RandomJump,up-to-date,rel=>lucky,class=>"wiki randomlink",label=>"%res(name=>GoSomewhere);"p,title=>"%res(name=>GoSomewhereLong);"p);            $opt{prop_info}->{-db}->close;
116  %anchor-wiki(page=>{$main::PageName{RecentChanges}},class=>wiki,label=>"%res(name=>GoToRecentChanges);"p,title=>"%res(name=>GoToRecentChangesLong,safe);"p);            delete $opt{prop_info}->{-db};
117  EOH          }});
118          $wiki->{db}->_set_prop_db (ref__item_template =>
119  push @{$SuikaWiki::Plugin::On{Load}}, sub {          {-db => $cachedb, -prop => 'refereritem', -db_close => sub {
120    SuikaWiki::View->definition ('read')->property (template => <<'EOH');            my %opt = @_;
121  %html-document(title=>{%res(name=>{View:WebPageTitle});}p,link-meta=>{%predefined-template(name=>links);}p,content=>{            $opt{prop_info}->{-db}->close;
122    %section(level=>1,add-to-toc=>0,type=>body,title=>{%ns-short-page-name;}p,heading,content=>{            delete $opt{prop_info}->{-db};
123      %section(id=>tools1,class=>tools,add-to-toc=>0,content=>{%predefined-template(name=>navbar);}p);          }});
124      %section(level=>2,id=>read,add-to-toc=>0,content=>{  
125        %if-calender(month,true=>{        ## Berkely DB Environment Preparation
126          %format(context=>form_input,template=>{%calender;});        use BerkeleyDB;
127        },false=>{        my $bdbenv = new BerkeleyDB::Env
128          %if-calender(true=>{           -Home => $wiki->{config}->{path_to}->{db__bdb__home_dir},
129            %format(context=>form_input,template=>{%calender-months;});           -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        %read(comment);             DB_TMP_DIR => $wiki->{config}->{path_to}->{db__bdb__temp_dir},
133      }p);           },
134      %section(level=>2,id=>children,title=>{%res(name=>{Children:Title});}p,heading,           -ErrFile => $wiki->{config}->{path_to}->{db__bdb__log_file},
135      content=>{%page-list(ns=>{%page-name;}p,recursive=>0,type=>both,template=>{%res(name=>{Children:Item});}p);}p);           -Flags => DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL,
136      %section(level=>2,id=>see-also,title=>{%res(name=>SeeAlso);}p,heading,content=>{%search-result;}p);           -Verbose => $wiki->{config}->{debug}->{db};
137      %section(level=>2,id=>referer,title=>{%res(name=>Referer);}p,heading,content=>{%referer-list;}p);  
138      %section(level=>2,id=>toc,title=>{%res(name=>{TOC:Title});}p,heading,add_to_toc=>0,content=>{%toc(drag);}p);        $wiki->{db}->_set_prop_db (content__structured => {-db_open => sub {
139      %section(id=>last-modified,add_to_toc=>0,content=>{%res(name=>{LastModified=});%last-modified;}p);          require SuikaWiki::DB::Hash;
140      %section(class=>tools,add_to_toc=>0,content=>{%predefined-template(name=>navbar);}p);          new SuikaWiki::DB::Hash constructor => sub {
141      %section(id=>footer,add-to-toc=>0,content=>{%predefined-template(name=>footer);}p);            use MLDBM qw(BerkeleyDB::Hash);# Storable);
142    }p);            tie my %mldb, 'MLDBM',
143  }p);%log-hotness;                          -Filename => $wiki->{config}->{path_to}
144  EOH                                            ->{db__cache_struct__file},
145    SuikaWiki::View->definition ('-wrote')->property (template => SuikaWiki::View->definition ('-wrote')->property ('template').q(%log-hotness(weight=>2);));                          -Env => $bdbenv,
146    SuikaWiki::View->definition ('WithMenu')->property (template => SuikaWiki::View->definition ('WithMenu')->property ('template').q(%log-hotness;));                          -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 NAME  =head1 SEE ALSO
256    
257  suikawiki-config.ph --- SuikaWiki: site configuration script  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  =head1 LICENSE
262    
263  Copyright 2003 Wakaba <w@suika.fam.cx>  Copyright 2003-2004 Wakaba <w@suika.fam.cx>.  All rights reserved.
264    
265  This program is free software; you can redistribute it and/or  This program is free software; you can redistribute it and/or
266  modify it under the same terms as Perl itself.  modify it under the same terms as Perl itself.

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

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24