/[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.8 by wakaba, Tue Apr 29 10:43:21 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         => '/temp/suikawiki/',  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}$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} = $url_cgi;  
53    
54  ## Path to modules and databases    ## -- WikiPlugin
55    use lib qw!/home/wakaba/temp/msg!;    # temporary    push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
56    use lib qw!../wiki/lib!;      my $wiki = shift;
57    $SuikaWiki::Plugin::plugin_directory = q(../wiki/lib/SuikaWiki/Plugin/);      
58    our %PathTo = (       ## Path to your data, from the main CGI script (NOT from this config script)      ## Installed plugin modules
59      CachePrefix         => q(./wikidata/.cache.),      $wiki->{plugin}->load_directory (qw(
60      TempPrefix  => q(./wikidata/.tmp.),        lib/SuikaWiki/Plugin/
61      WikiDataBase        => q(./wikidata/page),        misc/plugins/
62    );        misc/plugins/form/
63          misc/plugins/format/
64  ## Type of WikiPage Database        misc/plugins/link/
65    #our $modifier_dbtype = 'AnyDBM_File';  # Fast, not available on some server, page size limited.        misc/plugins/view/
66    #our $modifier_dbtype = 'dbmopen';      # Fast, not available on some server, page size limited.      ));
67    #our $modifier_dbtype = 'Yuki::YukiWikiDB';     # Slow, available on all environment.  
68    #our $modifier_dbtype = 'Yuki::YukiWikiDB2';     # Slow, available on all environment.      ## Configuration file as pseudo-plugin module
69    our $modifier_dbtype = 'Yuki::YukiWikiDBMeta';     # Slow, available on all environment.      require 'wikidata/config.ph';
70    our $use_exists = 1; # If you can use 'exists' method for your DB.    };
71    
72  ## Name of Special WikiPage (linked as parts of navigations)    ## -- WikiDatabase: Mapping logical to physical
73    our %PageName = (    push @{$WIKI->{event}->{database_loaded}}, sub {
74      FrontPage   => 'HomePage',        my $wiki = shift;
75      IndexPage   => 'IndexPage',        
76      SearchPage  => 'SearchPage',        ## Main content
77      CreatePage  => 'CreatePage',        $wiki->{db}->_set_prop_db (content => {-db_open => sub {
78      RecentChanges       => 'RecentChanges',          require SuikaWiki::DB::FileSystem::YukiWikiDBNS;
79      ResourceNS  => 'Wiki//Resource//',          SuikaWiki::DB::FileSystem::YukiWikiDBNS->new
80      StyleList   => 'Wiki//Style//List//',            (directory => $wiki->{config}->{path_to}->{db__content__dir},
81      UserAgentList       => 'Wiki//UserAgentList',             logfile   => $wiki->{config}->{path_to}->{db__content__error_log},
82      AdminSpecialPage    => "\x11\x11Admin\x11Special\x11Page\x11\x11",             suffix    => '.txt',
83    );             -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
84          }, -db_close => sub {
85  ## (Should be reimplemented)          my %opt = @_;
86    our $kanjicode = 'euc';          $opt{prop_info}->{-db}->close;
87    our $lang = 'ja';          delete $opt{prop_info}->{-db};
88    $wiki::useragent::UseLog = 0; ## Use User-Agent name log (WikiUserAgentList) or not        }});
89          
90  ## Misc. options        ## Last modified
91          $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
92  ## Definition of views          require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
93            SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
94  require SuikaWiki::View;            (directory => $wiki->{config}->{path_to}->{db__content__dir},
95  SuikaWiki::View->template ('links')->add_line (<<'EOH');             -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
96  %link-wiki(page=>IndexPage,rel=>index,class=>wiki,title=>"%res(name=>GoToIndexPageLink,safe);"p);        }, -prop => 'last_modified', -db_close => sub {
97  %link-wiki(page=>HomePage,rel=>home,class=>wiki,title=>"%res(name=>GoToHomePageLink,safe);"p);          my %opt = @_;
98  %link-wiki(page=>"Wiki//News",rel=>News,class=>wiki,title=>"%res(name=>GoToWikiNewsLink,safe);"p);          $opt{prop_info}->{-db}->close;
99  %link-wiki(page=>SearchPage,rel=>search,class=>wiki,title=>"%res(name=>GoToSearchPageLink,safe);"p);          delete $opt{prop_info}->{-db};
100  %link-wiki(page=>"Wiki//Help",mode=>read,rel=>help,class=>wiki,title=>"%res(name=>GoToWikiHelpLink,safe);"p);        }});
101  %link-wiki(page=>"Wiki//Page//License",rel=>copyright,class=>wiki,title=>"%res(name=>GoToWikiPageLicenseLink,safe);"p);        
102  %link-wiki(mode=>RandomJump,up_to_date,rel=>jump,class=>"wiki randomlink",title=>"%res(name=>GoSomewhereLink,safe);"p);        ## Cache DBs
103  %link-wiki(href=>"javascript:var%20WikiName=prompt('Please%20input%20the%20WikiName:','','Jump%20to%20SuikaWiki');if(WikiName)%7B_content.location.href='$url_cgi%3F'+encodeURIComponent(WikiName)%7D",rel=>jump,class=>wiki-cmd,title=>"%res(name=>JumpToLink,safe);"p);        require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
104  %link-wiki(href=>"javascript:var%20WikiName=prompt('Please%20input%20the%20WikiName:','','Jump%20to%20SuikaWiki');if(WikiName)%7B_content.location.href='$url_cgi%3Fmycmd=edit;mypage='+encodeURIComponent(WikiName)%7D",rel=>jump,class=>wiki-cmd,title=>"%res(name=>JumpToEditLink,safe);"p);        my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
105  EOH              (directory => $wiki->{config}->{path_to}->{db__cache__dir});
106  SuikaWiki::View->template ('navbar')->add_line (<<'EOH');        $wiki->{db}->_set_prop_db (m__search_result =>
107  %anchor-wiki(mode=>edit,rel=>edit,class=>wiki-cmd,label=>"%res(name=>EditThisPage,safe);"p,title=>"%res(name=>EditThisPageLong);"p,accesskey=>E);          {-db => $cachedb, -prop => 'search_result', -db_close => sub {
108  %anchor-wiki(rel=>view,up_to_date,class=>wiki-cmd,label=>"%res(name=>ViewThisPage,safe);"p,title=>"%res(name=>ViewThisPageLong);"p);            my %opt = @_;
109  %anchor-wiki(page=>CreatePage,class=>wiki,label=>"%res(name=>GoToCreatePage,safe);"p,title=>"%res(name=>GoToCreatePageLong,safe);"p);            $opt{prop_info}->{-db}->close;
110  %anchor-wiki(page=>IndexPage,class=>wiki,label=>"%res(name=>GoToIndexPage,safe);"p,title=>"%res(name=>GoToIndexPageLong,safe);"p);            delete $opt{prop_info}->{-db};
111  %anchor-wiki(page=>HomePage,class=>wiki,label=>"%res(name=>GoToHomePage,safe);"p,title=>"%res(name=>GoToHomePageLong,safe);"p);          }});
112  %anchor-wiki(page=>SearchPage,class=>wiki,label=>"%res(name=>GoToSearchPage,safe);"p,title=>"%res(name=>GoToSearchPageLong,safe);"p);        $wiki->{db}->_set_prop_db (wpp__headsummary =>
113  %anchor-wiki(mode=>RandomJump,up-to-date,rel=>lucky,class=>"wiki randomlink",label=>"%res(name=>GoSomewhere,safe);"p,title=>"%res(name=>GoSomewhereLong,safe);"p);          {-db => $cachedb, -prop => 'headsummary', -db_close => sub {
114  %anchor-wiki(page=>RecentChanges,class=>wiki,label=>"%res(name=>GoToRecentChanges,safe);"p,title=>"%res(name=>GoToRecentChangesLong,safe);"p);            my %opt = @_;
115  EOH            $opt{prop_info}->{-db}->close;
116              delete $opt{prop_info}->{-db};
117  push @{$SuikaWiki::Plugin::On{Load}}, sub {          }});
118    SuikaWiki::View->definition ('read')->property (template => <<'EOH');        $wiki->{db}->_set_prop_db (ref__item_template =>
119  %html-document(title=>{%res(name=>{View:WebPageTitle});}p,link-meta=>{%predefined-template(name=>links);}p,content=>{          {-db => $cachedb, -prop => 'refereritem', -db_close => sub {
120    %section(level=>1,add-to-toc=>0,type=>body,title=>{%ns-short-page-name;}p,heading,content=>{            my %opt = @_;
121      %section(id=>tools1,class=>tools,add-to-toc=>0,content=>{%predefined-template(name=>navbar);}p);            $opt{prop_info}->{-db}->close;
122      %section(level=>2,id=>read,add-to-toc=>0,content=>{            delete $opt{prop_info}->{-db};
123        %if-calender(month,true=>{          }});
124          %format(context=>form_input,template=>{%calender;});  
125        },false=>{        ## Berkely DB Environment Preparation
126          %if-calender(true=>{        use BerkeleyDB;
127            %format(context=>form_input,template=>{%calender-months;});        my $bdbenv = new BerkeleyDB::Env
128          });           -Home => $wiki->{config}->{path_to}->{db__bdb__home_dir},
129        });           -Config => {
130        %read(comment);             DB_DATA_DIR => $wiki->{config}->{path_to}->{db__content__dir},
131      }p);             DB_LOG_DIR => $wiki->{config}->{path_to}->{db__bdb__log_dir},
132      %section(level=>2,id=>children,title=>{%res(name=>{Children:Title});}p,heading,             DB_TMP_DIR => $wiki->{config}->{path_to}->{db__bdb__temp_dir},
133      content=>{%page-list(ns=>{%page-name;}p,recursive=>0,type=>both,template=>{           },
134        %wiki-link(label=>{%ns-short-page-or-ns-name;}p);           -ErrFile => $wiki->{config}->{path_to}->{db__bdb__log_file},
135      });}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                            -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.8  
changed lines
  Added in v.1.12.4.4

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24