/[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.7 by wakaba, Thu Apr 3 01:10:10 2003 UTC revision 1.15 by wakaba, Sun Apr 25 07:13:16 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;
         ##       URI parts MUST NOT contains "&" and/or non-URI characters.  
   our %uri = (  
     cookie_path         => '/temp/suikawiki/',  
     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; {  
     my $scheme = 'http';  
     $scheme = lc $1 if $main::ENV{SERVER_PROTOCOL} =~ m#([A-Za-z0-9+.%-]+)#;  
     $url_cgi = "$scheme://$main::ENV{SERVER_NAME}:$main::ENV{SERVER_PORT}$uri{cookie_path}$uri{script_short_name}";  
27    }    }
28    $uri{wiki} = $url_cgi;    use Message::Util::Error;
29    
30  ## Path to modules and databases  use Message::Util::QName::General [q<ExpandedURI>], {
31    use lib qw!../wiki/lib!;    'media-type' => q<http://suika.fam.cx/~wakaba/-temp/2004/04/24/mt#>,
32    $SuikaWiki::Plugin::plugin_directory = q(../wiki/lib/SuikaWiki/Plugin/);  };
33    our %PathTo = (       ## Path to your data, from the main CGI script (NOT from this config script)  
34      CachePrefix         => q(./wikidata/.cache.),  BEGIN {
35      WikiDataBase        => q(./wikidata/page),    if ($main::ENV{REQUEST_URI} =~ /\#/) {
36    );      require SuikaWiki::Output::HTTP;
37        my $out = SuikaWiki::Output::HTTP->new;
38  ## Type of WikiPage Database      $out->{status_code} = 401;
39    #our $modifier_dbtype = 'AnyDBM_File';  # Fast, not available on some server, page size limited.      $out->{status_phrase} = q<Request-URI MUST NOT have Fragment Identifier>;
40    #our $modifier_dbtype = 'dbmopen';      # Fast, not available on some server, page size limited.      $out->{entity}->{media_type} = q<text/html>;
41    #our $modifier_dbtype = 'Yuki::YukiWikiDB';     # Slow, available on all environment.      $out->{entity}->{charset} = q<iso-8859-1>;
42    #our $modifier_dbtype = 'Yuki::YukiWikiDB2';     # Slow, available on all environment.      $out->{entity}->{language} = [q<en>];
43    our $modifier_dbtype = 'Yuki::YukiWikiDBMeta';     # Slow, available on all environment.      $out->{entity}->{body_is_octet_stream} = 1;
44    our $use_exists = 1; # If you can use 'exists' method for your DB.      my $ua = $main::ENV{HTTP_USER_AGENT};
45        for ($ua) {
46  ## Name of Special WikiPage (linked as parts of navigations)        s/&/&amp;/g; s/</&lt;/g; s/([^\x20-\x7E])/sprintf '&#x%02X;', ord $1/ge;
47    our %PageName = (      };
48      FrontPage   => 'HomePage',      $out->{entity}->{body} = qq<
49      IndexPage   => 'IndexPage',        <!DOCTYPE html SYSTEM>
50      SearchPage  => 'SearchPage',        <title>401 Bad Request-URI</title>
51      CreatePage  => 'CreatePage',        <h1>Bad Request-URI</h1>
52      RecentChanges       => 'RecentChanges',        <p>Your Request-URI has fragment identifier but it is not allowed here.
53      ResourceNS  => 'Wiki//Resource//',        It might be a bug of your user agent ($ua).  Please contact to the UA
54      UserAgentList       => 'WikiUserAgentList',        vendor.</p>
55      AdminSpecialPage    => "\x11\x11Admin\x11Special\x11Page\x11\x11",      >;
56    );      $out->output (output => 'http-cgi');
57        exit;
58  ## (Should be reimplemented)    }
   our $kanjicode = 'euc';  
   our $lang = 'ja';  
   $wiki::useragent::UseLog = 0; ## Use User-Agent name log (WikiUserAgentList) or not  
   
 ## Misc. options  
   
 ## Definition of views  
   
 require SuikaWiki::View;  
 my %vd;  
 $vd{links} = SuikaWiki::View->template ('links')->add_line (<<'EOH');  
 %link-wiki(mode=>edit,rel=>edit,class=>wiki-cmd,title=>"%res(name=>EditThisPageLink,safe);"p);  
 %link-wiki(mode=>edit,rel=>edit,class=>wiki-cmd,title=>"%res(name=>AdminEditThisPageLink,safe);"p,add-param=>"admin=1");  
 %link-wiki(rel=>view,class=>wiki-cmd,title=>"%res(name=>ViewThisPageLink,safe);"p,up_to_date);  
 %link-wiki(rel=>myself,class=>wiki,title=>"%res(name=>GoToMyselfLink,safe);"p);  
 %link-wiki(page=>IndexPage,rel=>index,class=>wiki,title=>"%res(name=>GoToIndexPageLink,safe);"p);  
 %link-wiki(page=>HomePage,rel=>home,class=>wiki,title=>"%res(name=>GoToHomePageLink,safe);"p);  
 %link-wiki(page=>"Wiki//News",rel=>News,class=>wiki,title=>"%res(name=>GoToWikiNewsLink,safe);"p);  
 %link-wiki(page=>RecentChanges,rel=>News,class=>wiki,title=>"%res(name=>GoToRecentChangesLink,safe);"p);  
 %link-wiki(page=>RecentChanges,mode=>rss,rel=>News,class=>wiki,title=>"%res(name=>GoToRssPageLink,safe);"p,type=>"application/xml");  
 %link-wiki(page=>SearchPage,rel=>search,class=>wiki,title=>"%res(name=>GoToSearchPageLink,safe);"p);  
 %link-wiki(page=>"Wiki//Help",mode=>read,rel=>help,class=>wiki,title=>"%res(name=>GoToWikiHelpLink,safe);"p);  
 %link-wiki(page=>"Wiki//Page//License",rel=>copyright,class=>wiki,title=>"%res(name=>GoToWikiPageLicenseLink,safe);"p);  
 %link-wiki(mode=>map,rel=>sitemap,class=>wiki-cmd,title=>"%res(name=>ShowMapOfThisPageLink,safe);"p);  
 %link-wiki(mode=>RandomJump,up_to_date,rel=>lucky,class=>"wiki randomlink",title=>"%res(name=>GoSomewhereLink,safe);"p);  
 EOH  
 $vd{links} .= <<EOH;  
   %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);  
   %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);  
 EOH  
 $vd{navbar} = SuikaWiki::View->template ('navbar')->add_line (<<'EOH');  
 %anchor-wiki(mode=>edit,rel=>edit,class=>wiki-cmd,label=>"%res(name=>EditThisPage,safe);"p,title=>"%res(name=>EditThisPageLong,safe);"p,accesskey=>E);  
 %anchor-wiki(rel=>view,up_to_date,class=>wiki-cmd,label=>"%res(name=>ViewThisPage,safe);"p,title=>"%res(name=>ViewThisPageLong,safe);"p);  
 %anchor-wiki(page=>CreatePage,class=>wiki,label=>"%res(name=>GoToCreatePage,safe);"p,title=>"%res(name=>GoToCreatePageLong,safe);"p);  
 %anchor-wiki(page=>IndexPage,class=>wiki,label=>"%res(name=>GoToIndexPage,safe);"p,title=>"%res(name=>GoToIndexPageLong,safe);"p);  
 %anchor-wiki(page=>HomePage,class=>wiki,label=>"%res(name=>GoToHomePage,safe);"p,title=>"%res(name=>GoToHomePageLong,safe);"p);  
 %anchor-wiki(page=>SearchPage,class=>wiki,label=>"%res(name=>GoToSearchPage,safe);"p,title=>"%res(name=>GoToSearchPageLong,safe);"p);  
 %anchor-wiki(mode=>RandomJump,up-to-date,rel=>lucky,class=>"wiki randomlink",label=>"%res(name=>GoSomewhere,safe);"p,title=>"%res(name=>GoSomewhereLong,safe);"p);  
 %anchor-wiki(page=>RecentChanges,class=>wiki,label=>"%res(name=>GoToRecentChanges,safe);"p,title=>"%res(name=>GoToRecentChangesLong,safe);"p);  
 EOH  
   
   
 my %ViewDefinition = (  
 read => {media => {type => 'text/html', charset => 1, expires => 120}, check => sub {1},  
   #xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 120},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"View:WebPageTitle\\",safe);"p,link-meta=>"%predefined-template(name=>links);"p);  
 %section(level=>1,add-to-toc=>0,type=>body,title=>"%ns-short-page-name(safe);"p,heading,content=>"  
   %section(id=>tools1,class=>tools,add-to-toc=>0,content=>\\"%predefined-template(name=>navbar);\\"p);  
   %section(level=>2,id=>read,add-to-toc=>0,content=>\\"%read(comment);\\");  
   %section(level=>2,id=>children,  
     title=>\\"%res(name=>\\\\\\"Children:Title\\\\\\",safe);\\"p,heading,  
     content=>\\"%page-list(ns=>\\\\\\"%page-name(safe);\\\\\\"p,recursive=>0,type=>both,  
       template=>\\\\\\"%wiki-link(label=>\\\\\\\\\\\\\\"%ns-short-page-or-ns-name;\\\\\\\\\\\\\\"ps);\\\\\\"  
     );\\"  
   );  
   %section(level=>2,id=>\\"see-also\\",title=>SeeAlso,heading,content=>\\"%search-result;\\");  
   %section(level=>2,id=>referer,title=>Referer,heading,content=>\\"%referer-list;\\");  
   %section(level=>2,id=>toc,title=>\\"TOC:Title\\",heading,add_to_toc=>0,content=>\\"%toc(drag);\\");  
   %section(id=>last-modified,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"LastModified=\\\\\\");%last-modified;\\");  
   %section(class=>tools,add_to_toc=>0,content=>\\\"%predefined-template(name=>navbar);\\"p);  
   %section(id=>footer,add-to-toc=>0,content=>\\"%predefined-template(name=>footer);\\");  
 %apply-user-preferred-style;");%html-end;  
 %log-hotness();  
 EOH  
 map => {media => {type => 'text/html', charset => 1, expires => 120}, check => sub {1},  
   #xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 120},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Map:WebPageTitle\\");",link_meta=>"%predefined-template(name=>links);"p);  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"%predefined-template(name=>navbar);\\"p);  
   %section(level=>2,id=>\\"link-map\\",title=>\\"Map:Title\\",heading,content=>\\"  
     <p>%res(name=>\\\\\\"Map:Description\\\\\\");</p>  
     %link-map;  
   \\");  
   %section(level=>2,id=>\\"see-also\\",title=>SeeAlso,heading,content=>\\"%search-result;\\");  
   %section(level=>2,id=>referer,title=>Referer,heading,content=>\\"%referer-list;\\");  
   %section(level=>2,id=>toc,title=>\\"TOC:Title\\",heading,add_to_toc=>0,content=>\\"%toc(drag);\\");  
   %section(class=>tools,add_to_toc=>0,content=>\\\"%predefined-template(name=>navbar);\\"p);  
   %section(id=>footer,add-to-toc=>0,content=>\\"%predefined-template(name=>footer);\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
   
 edit => {media => {type => 'text/html', charset => 1, expires => 60}, check => sub {1},  
   #xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 60},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Edit:WebPageTitle\\");",link-meta=>"%predefined-template(name=>links);%html-meta(name=>ROBOTS,content=>NOINDEX);"p);  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"%predefined-template(name=>navbar);\\"p);  
   %section(level=>2,id=>edit,title=>\\"Edit:Title\\",heading,content=>\\"  
     %edit-form;  
     %section(level=>3,id=>edit-help,add_to_toc=>0,content=>\\\\\\"%read(page=>\\\\\\\\\\\\\\"Wiki//Help//Edit\\\\\\\\\\\\\\");\\\\\\");  
   \\");  
   %section(level=>2,id=>\\"see-also\\",title=>SeeAlso,heading,content=>\\"%search-result;\\");  
   %section(level=>2,id=>referer,title=>Referer,heading,content=>\\"%referer-list;\\");  
   %section(level=>2,id=>toc,title=>\\"TOC:Title\\",heading,add_to_toc=>0,content=>\\"%toc(drag);\\");  
   %section(id=>last-modified,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"LastModified=\\\\\\");%last-modified;\\");  
   %section(class=>tools,add_to_toc=>0,content=>\\\"%predefined-template(name=>navbar);\\"p);  
   %section(id=>footer,add-to-toc=>0,content=>\\"%predefined-template(name=>footer);\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
 adminedit => {media => {type => 'text/html', charset => 1, expires => 60}, check => sub {1},  
   xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 60},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Edit:Admin:WebPageTitle\\");"p,link_meta=>"%predefined-template(name=>links); %html-meta(name=>ROBOTS,content=>NOINDEX);"p);  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"%predefined-template(name=>navbar);\\"p);  
   %section(level=>2,id=>edit,title=>\\"Edit:Title\\",heading,content=>\\"%edit-form(admin);\\");  
   %section(level=>2,id=>edit,title=>\\"Edit:Rename:Title\\",heading,content=>  
     \\"%wp-rename-form-start;  
     %format(context=>form_input,template=>\\\\\\\"  
       %text(id=>to,label=>\\\\\\\\\\\\\\\"%res(name=>\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"Edit:Rename:To=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\");\\\\\\\\\\\\\\\",size=>10,default=>\\\\\\\\\\\\\\\"%page-name;\\\\\\\\\\\\\\\"ps);  
       %submit;  
     \\\\\\\");  
     %form-end;\\"  
   );  
   %section(level=>2,id=>toc,title=>\\"TOC:Title\\",heading,add_to_toc=>0,content=>\\"%toc(drag);\\");  
   %section(id=>last-modified,add_to_toc=>0,content=>\\"%res(name=>\\\\\\"LastModified=\\\\\\");%last-modified;\\");  
   %section(id=>footer,add-to-toc=>0,content=>\\"%predefined-template(name=>footer);\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
 -conflict => {media => {type => 'text/html', charset => 1, expires => 60}, check => sub {1},  
   #xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 60},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Edit:Conflict:WebPageTitle\\");",link_meta=>"%predefined-template(name=>links); %html-meta(name=>ROBOTS,content=>NOINDEX);"p);  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"%predefined-template(name=>navbar);\\"p);  
   %section(level=>2,id=>edit-conflict,title=>\\"Edit:Conflict:Title\\",heading,content=>\\"  
     <p>%res(name=>\\\\\\"Edit:Conflict:Description\\\\\\");</p>  
     %conflict-form;  
     %section(level=>3,id=>edit-conflict-diff,title=>\\\\\\"Edit:Conflict:Diff:Title\\\\\\",heading,content=>\\\\\\"  
       <p>%res(name=>\\\\\\\\\\\\\\"Edit:Conflict:Diff:Description\\\\\\\\\\\\\\");</p>  
       %conflict-diff;  
     \\\\\\");  
   \\");  
   %section(level=>2,id=>edit,title=>\\"Edit:Title\\",heading,content=>\\"  
     <p>%res(name=>\\\\\\"Edit:Conflict:Edit:Description\\\\\\");</p>  
     %edit-form;  
     %section(level=>3,id=>edit-help,add_to_toc=>0,content=>\\\\\\"%read(page=>\\\\\\\\\\\\\\"Wiki//Help//Edit\\\\\\\\\\\\\\");\\\\\\");  
   \\");  
   %section(level=>2,id=>\\"see-also\\",title=>SeeAlso,heading,content=>\\"%search-result;\\");  
   %section(level=>2,id=>referer,title=>Referer,heading,content=>\\"%referer-list;\\");  
   %section(level=>2,id=>toc,title=>\\"TOC:Title\\",heading,add_to_toc=>0,content=>\\"%toc(drag);\\");  
   %section(class=>tools,add_to_toc=>0,content=>\\\"%predefined-template(name=>navbar);\\"p);  
   %section(id=>footer,add-to-toc=>0,content=>\\"%predefined-template(name=>footer);\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
 -wrote => {media => {type => 'text/html', charset => 1, expires => 60}, check => sub {1},  
   xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 60},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Edit:Wrote:WebPageTitle\\");",link_meta=>"%predefined-template(name=>links); %html-meta(name=>ROBOTS,content=>NOINDEX);"p);  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"%predefined-template(name=>navbar);\\"p);  
   <p>%res(name=>\\"Edit:SavedSuccessfully\\");</p>  
   %section(id=>footer,add-to-toc=>0,content=>\\"%predefined-template(name=>footer);\\");  
 %apply-user-preferred-style;");%html-end;  
 %log-hotness(weight=>2);  
 EOH  
 -deleted => {media => {type => 'text/html', charset => 1, expires => 60}, check => sub {1},  
   xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 60},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Edit:Deleted:WebPageTitle\\");",link_meta=>"%predefined-template(name=>links); %html-meta(name=>ROBOTS,content=>NOINDEX);"p);  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"%predefined-template(name=>navbar);\\"p);  
   <p>%res(name=>\\"Edit:PageIsDeletedSuccessfully\\");</p>  
   %section(id=>footer,add-to-toc=>0,content=>\\"%predefined-template(name=>footer);\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
 -error => {media => {type => 'text/html', charset => 1, expires => 60}, check => sub {1},  
   xmedia => {type => 'application/xhtml+xml', charset => 1, expires => 60},  
   template => <<EOH},  
 %html-start;%html-head(title=>"%res(name=>\\"Error:WebPageTitle\\");",link_meta=>"%predefined-template(name=>links); %html-meta(name=>ROBOTS,content=>NOINDEX);"p);  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"%predefined-template(name=>navbar);\\"p);  
   %section(level=>2,id=>error,title=>\\"Error:Title\\",heading,content=>\\"  
     <p>%error-message;</p>  
   \\");  
   %section(level=>2,id=>toc,title=>\\"TOC:Title\\",heading,add_to_toc=>0,content=>\\"%toc(drag);\\");  
   %section(id=>footer,add-to-toc=>0,content=>\\"%predefined-template(name=>footer);\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
   
   
 rss => {media => {type => 'application/rss+xml', charset => 1, expires => 3600},  
   check => sub { ref $_[0]->format_converter ($_[0]->{magic} => 'RSS') ? 1 : 0 },  
   template => '<?xml version="1.0"?>%styles-wiki-xml(page=>"Wiki//Style//List//RSS");%read(to=>RSS);'},  
 -UnsupportedMediaType => {media => {type => 'text/html', charset => 1, expires => -1},  
   xmedia => {type => 'application/xhtml+xml', charset => 1, expires => -1},  
   check => sub {1}, template => <<EOH},  
 %html-start;%html-head(title=>"%page-name;",link_meta=>"%predefined-template(name=>links); %html-meta(name=>ROBOTS,content=>NOINDEX);"p);  
 %section(level=>1,add_to_toc=>0,type=>body,title=>"%page-name;",heading,content=>"  
   %section(id=>tools1,class=>tools,add_to_toc=>0,content=>\\"%predefined-template(name=>navbar);\\"p);  
   %section(level=>2,title=>\\"UnsupportedMediaType:Title\\",heading,content=>\\"  
     <p>%res(name=>\\\\\\"UnsupportedMediaType:Description\\\\\\");</p>  
   \\");  
   %section(id=>footer,add-to-toc=>0,content=>\\"%predefined-template(name=>footer);\\");  
 %apply-user-preferred-style;");%html-end;  
 EOH  
 );  
   
 require SuikaWiki::View;  
 for (keys %ViewDefinition) {  
   SuikaWiki::View->definition ($_)->properties ($ViewDefinition{$_});  
59  }  }
60    
61  =head1 NAME  push our @Config, sub ($) {
62      my $WIKI = shift;
63  suikawiki-config.ph --- SuikaWiki: site configuration script    use Cwd qw(abs_path);
64      
65      ## -- Filesystem path mapping
66      for (
67         [db__cache__dir          => q"./wikidata/cache/"],
68         [db__cache_struct__file  => q"./wikidata/cache/struct.db"],
69         [db__content__dir        => q"./wikidata/page/"],
70         [db__content__error_log  => q"./wikidata/log/db-content.log"],
71         [db__bdb__home_dir       => q"./wikidata/lock/"],
72         [db__bdb__log_dir        => q"./wikidata/log/bdb/"],
73         [db__bdb__log_file       => q"./wikidata/log/bdb.log"],
74         [db__bdb__temp_dir       => q"./wikidata/lock/"],
75         [db__lock__dir           => q"./wikidata/lock/"],
76         [db__lock__log_file      => q"./wikidata/log/lock.log"],
77         [db__log__dir            => q"./wikidata/log/"],
78         [db__temp__dir           => q"./wikidata/lock/"],
79         [namazu__index_dir       => q"/var/namazu/index/suikawiki"],
80      ) {
81        ## On system that does not set current directory as main script
82        ## directory, you should specify it instead of using "abs_path".
83        $WIKI->{config}->{path_to}->{$_->[0]} = abs_path $_->[1];
84      }
85      
86      ## -- Namazu URI Mapping (See SuikaWiki:SuikaWiki//Namazu) --
87      $WIKI->{config}->{nmz__uri_to_uri} = sub {
88        my ($nmzuri, %opt) = @_;
89        if ($nmzuri =~ s!^\Q$opt{o}->{wiki}->{config}->{path_to}->{db__content__dir}\E/*!!o) {
90          $nmzuri =~ s/\.txt$//;
91          return $opt{o}->{wiki}->uri_reference
92                          (page => $opt{o}->{wiki}->name ([
93            map {s/([0-9A-F][0-9A-F])/pack 'C', hex $1/ge; $_}
94            split m!\.ns/!, $nmzuri
95          ]), base => 1);
96        } else {
97          $nmzuri =~ s<^/home/wakaba/public_html/([^.]+)><http://suika.fam.cx/~wakaba/$1>;
98          return ($nmzuri, $nmzuri);
99        }
100      };
101    
102      ## -- WikiPlugin
103      push @{$WIKI->{event}->{plugin_manager_loaded}}, sub {
104        my $wiki = shift;
105        
106        ## Installed plugin modules
107        $wiki->{plugin}->load_directory (qw(
108          lib/SuikaWiki/Plugin/
109          misc/plugins/
110          misc/plugins/form/
111          misc/plugins/format/
112          misc/plugins/link/
113          misc/plugins/view/
114        ));
115    
116        ## Configuration file as pseudo-plugin module
117        require 'wikidata/config.ph';
118      };
119    
120      ## -- WikiDatabase: Mapping logical to physical
121      push @{$WIKI->{event}->{database_loaded}}, sub {
122          my $wiki = shift;
123          
124          ## Main content
125          $wiki->{db}->_set_prop_db (content => {-db_open => sub {
126            require SuikaWiki::DB::FileSystem::LeafFile;
127            SuikaWiki::DB::FileSystem::LeafFile->new
128              (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
129               directory_suffix => '.ns',
130               file_suffix    => '.txt',
131               root_key => $wiki->{config}->{page}->{Default},
132               -lock => $wiki->{var}->{db}->{lock_prop}->('content_prop'));
133          }, -db_close => sub {
134            my %opt = @_;
135            $opt{prop_info}->{-db}->close;
136            delete $opt{prop_info}->{-db};
137          }});
138    
139          ## Properties
140          $wiki->{db}->_set_prop_db (content_prop => {-db_open => sub {
141            require SuikaWiki::DB::FileSystem::LeafProp;
142            SuikaWiki::DB::FileSystem::LeafProp->new
143              (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
144               directory_suffix => '.ns',
145               file_suffix    => '.prop',
146               root_key => $wiki->{config}->{page}->{Default},
147               -lock => $wiki->{var}->{db}->{lock_prop}->('content'));
148          }, -db_close => sub {
149            my %opt = @_;
150            $opt{prop_info}->{-db}->close;
151            delete $opt{prop_info}->{-db};
152          }});
153          
154          ## Last modified
155          $wiki->{db}->_set_prop_db (lastmodified => {-db_open => sub {
156            require SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09;
157            SuikaWiki::DB::FileSystem::SuikaWikiMetaInfo09->new
158              (directory => $wiki->{config}->{path_to}->{db__content__dir},
159               -lock => $wiki->{var}->{db}->{lock_prop}->('lastmodified'));
160          }, -prop => 'last_modified', -db_close => sub {
161            my %opt = @_;
162            $opt{prop_info}->{-db}->close;
163            delete $opt{prop_info}->{-db};
164          }});
165          
166          ## Cache DBs
167          require SuikaWiki::DB::FileSystem::SuikaWikiCache09;
168          my $cachedb = SuikaWiki::DB::FileSystem::SuikaWikiCache09->new
169                (directory => $wiki->{config}->{path_to}->{db__cache__dir},
170                 expires => 86400 * 3, removes => 86400 * 3); # 3 days
171          $wiki->{db}->_set_prop_db (m__search_result =>
172            {-db => $cachedb, -prop => 'search_result', -db_close => sub {
173              my %opt = @_;
174              $opt{prop_info}->{-db}->close;
175              delete $opt{prop_info}->{-db};
176            }});
177          $wiki->{db}->_set_prop_db (wpp__headsummary =>
178            {-db => $cachedb, -prop => 'headsummary', -db_close => sub {
179              my %opt = @_;
180              $opt{prop_info}->{-db}->close;
181              delete $opt{prop_info}->{-db};
182            }});
183          $wiki->{db}->_set_prop_db (ref__item_template =>
184            {-db => $cachedb, -prop => 'refereritem', -db_close => sub {
185              my %opt = @_;
186              $opt{prop_info}->{-db}->close;
187              delete $opt{prop_info}->{-db};
188            }});
189    
190          ## Berkely DB Environment Preparation
191          use BerkeleyDB;
192          my $bdbenv = new BerkeleyDB::Env
193             -Home => $wiki->{config}->{path_to}->{db__bdb__home_dir},
194             -Config => {
195               DB_DATA_DIR => $wiki->{config}->{path_to}->{db__content__dir},
196               DB_LOG_DIR => $wiki->{config}->{path_to}->{db__bdb__log_dir},
197               DB_TMP_DIR => $wiki->{config}->{path_to}->{db__bdb__temp_dir},
198             },
199             -ErrFile => $wiki->{config}->{path_to}->{db__bdb__log_file},
200             -Flags => DB_CREATE | DB_INIT_LOCK | DB_INIT_LOG | DB_INIT_MPOOL,
201             -Verbose => $wiki->{config}->{debug}->{db};
202    
203          $wiki->{db}->_set_prop_db (content__structured => {-db_open => sub {
204            require SuikaWiki::DB::Hash;
205            new SuikaWiki::DB::Hash constructor => sub {
206              use MLDBM qw(BerkeleyDB::Hash);# Storable);
207              tie my %mldb, 'MLDBM',
208                            -Filename => $wiki->{config}->{path_to}
209                                              ->{db__cache_struct__file},
210                            -Env => $bdbenv,
211                            -Flags => DB_CREATE,
212                            -Mode => 0644;
213              \%mldb;
214           };
215          }});
216          
217          ## Referer Database (See Referer plugin module)
218          $wiki->{db}->_set_prop_db (referer => {-db_open => sub {
219            require SuikaWiki::DB::FileSystem::Count;
220            SuikaWiki::DB::FileSystem::Count->new
221              (base_directory => $wiki->{config}->{path_to}->{db__content__dir},
222               directory_suffix => '.ns',
223               file_suffix    => '.ref',
224               root_key => $wiki->{config}->{page}->{Default},
225               auto_mkdir => 0,
226               -lock => $wiki->{var}->{db}->{lock_prop}->('referer'));
227          }, -db_close => sub {
228            my %opt = @_;
229            $opt{prop_info}->{-db}->close;
230            delete $opt{prop_info}->{-db};
231          }});
232    
233          ## HTTP Request Logging Database (See RequestLog plugin module)
234          $wiki->{db}->_set_prop_db (log__http_request => {-db_open => sub {
235            require SuikaWiki::DB::Hash;
236            new SuikaWiki::DB::Hash constructor => sub {
237              tie my %db, 'BerkeleyDB::Hash',
238                            -Filename => 'http-request-log.db',
239                            -Env => $bdbenv,
240                            -Flags => DB_CREATE,
241                            -Mode => 0644;
242              \%db;
243           };
244          }});
245          
246          ## Additional WikiDB properties should be defined here
247          # ...    
248      };
249    
250      push @{$WIKI->{event}->{input_close}}, sub {
251        my ($wiki, $event) = @_;
252        try {
253          SuikaWiki::Plugin->module_package ('Referer')
254                         ->add_referer (wiki => $wiki,
255                                        uri => $wiki->{input}->meta_variable
256                                                 ('HTTP_REFERER'));
257        } catch SuikaWiki::Plugin::error with {
258          my $err = shift;
259          $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
260        };
261        try {
262          SuikaWiki::Plugin->module_package ('RequestLog')
263                         ->http_request_log (wiki => $wiki,
264                                             prop => 'log__http_request');
265        } catch SuikaWiki::Plugin::error with {
266          my $err = shift;
267          $err->raise unless $err->{-type} eq 'PLUGIN_NOT_FOUND';
268        };
269      };
270    
271      ## -- WikiName of special purpose WikiPages
272      $WIKI->{config}->{page} = {
273        Default         => $WIKI->name ([qw/HomePage/]),
274        InterWikiName   => $WIKI->name ([qw/Wiki InterWikiName/]),
275        NewPageTemplate => $WIKI->name ([qw/Wiki NewPageTemplate/]),
276        'StyleSheetList(text/html)' => $WIKI->name ([qw<Wiki Style List text/html>]),
277      };
278      
279      ## -- WikiNamespace constants
280      $WIKI->{config}->{name}->{space} = {
281        separator => '//',
282        separator_reg => qr#\s*//\s*#,
283        self => '.',
284        parent => '..',
285        root => '//',
286      };
287      
288      ## -- Default character codes
289      $WIKI->{config}->{charset} = {
290        ## Internal code - MUST be ASCII + 8bit coding scheme
291          internal => 'euc-jp',
292        ## Default output code
293          output => 'iso-2022-jp',
294        ## "query" part in URI reference
295          uri_query => '', # auto-detected
296          uri_query_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
297          uri_param => '', # auto-detected
298          uri_param_encode => 'euc-jp',     ## For compatibility w/ SuikaWiki 2
299        ## PATH_INFO part in URI reference
300          uri_path_info => 'x-utf-8-10646', ## Reserved for future use
301        ## Fragment identifier in URI reference
302          uri_fragment => 'x-punycode',     ## Reserved for possible future use
303      };
304    
305      ## -- User option for media types
306      $WIKI->{config}->{ExpandedURI q<media-type:accept-media-type>} = {
307        q<IMT:text/css##> => 1,
308        q<IMT:text/plain##> => 1,
309        q<IMT:text/x-suikawiki;version="0.9"##> => 1,
310        q<IMT:application/x.suikawiki.config;version="2.0"##> => 1,
311      };
312      
313      ## -- Expires duration templates
314      $WIKI->{config}->{entity}->{expires} = {
315        edit      => {delta => 60},
316        view      => {delta => 2*3600},
317        list      => {delta => 60},
318        lm_flaged => {delta => 30*24*3600},
319        stylesheet => {delta => 30*24*3600},
320        error     => {delta => 60},
321      };
322    
323      ## -- Debug mode
324      $WIKI->{config}->{debug} = {
325        general => 0,
326        db => 0,
327        format => 0,
328        view => 0,
329      };
330    
331    };
332    
333    =head1 SEE ALSO
334    
335    C<lib/suikawiki.pl>, C<wiki.cgi>,
336    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SuikaWiki>,
337    <http://suika.fam.cx/~wakaba/-temp/wiki/wiki?SWHCS>
338    
339  =head1 LICENSE  =head1 LICENSE
340    
341  Copyright 2003 Wakaba <w@suika.fam.cx>  Copyright 2003-2004 Wakaba <w@suika.fam.cx>.  All rights reserved.
342    
343  This program is free software; you can redistribute it and/or  This program is free software; you can redistribute it and/or
344  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.15

admin@suikawiki.org
ViewVC Help
Powered by ViewVC 1.1.24