#?SuikaWikiConfig/2.0 Plugin: @Name: WikiDB @Description: @@@: WikiDatabase support @@lang:en @License: %%GPL%% @Author: @@Name: @@@@: Wakaba @@@lang:ja @@@script:Latn @@Mail[list]: w@suika.fam.cx @Date.RCS: $Date: 2003/12/26 06:38:12 $ @RequiredModule[list]: @RequiredPlugin[list]: Error WikiView WikiStruct WikiLinking HTML PluginConst: @NS_XHTML1: http://www.w3.org/1999/xhtml ViewDefinition: @Mode: -wdb--fatal-error @Description: @@@: Reporting fatal error with WikiDB system @@lang: en @method: @@Name: main @@@: require SuikaWiki::Output::HTTP; $opt2->{output} = SuikaWiki::Output::HTTP->new (wiki => $self->{view}->{wiki}, view => $self->{view}, viewobj => $self); for (@{$self->{view}->{wiki}->{var}->{client}->{used_for_negotiate}}, 'Accept-Language') { $opt2->{output}->add_negotiate_header_field ($_); } $opt2->{template} = q#%html-document ( title => {%res(name=>{WikiDB:FatalError:WebPageTitle});}p, link-meta => {%template (name => links); %html-meta(name => ROBOTS, content => NOINDEX);}p, content => { %section (title => {%res (name => {WikiDB:FatalError:Title});}p, content => { %paragraph (content => {%res (name => {WikiDB:FatalError:Description});}p); %error-list ( no-error => {%res (name => {Error:NoErrorReported});}p, ); }, ); }p, );#; $opt2->{o} = bless { wiki => $self->{view}->{wiki}, plugin => $self->{view}->{wiki}->{plugin}, var => {}, }, 'SuikaWiki::Plugin'; for (@{$self->{view}->{wiki}->{var}->{error}||{}}) { $opt2->{output}->{status_code} = $_->{http_status} if $opt2->{output}->{status_code} < $_->{http_status}; } $opt2->{output}->{status_code} ||= 500; $opt2->{output}->{entity}->{media_type} = q#text/html#; $opt2->{output}->{entity}->{charset} = $self->{view}->{wiki}->{config}->{charset}->{output}; $opt2->{output}->set_expires (%{$self->{view}->{wiki}->{config}->{entity}->{expires}->{q#error#}}); $self->{view}->{wiki}->close_db; $self->main_pre ($opt, $opt2); my $fmt = SuikaWiki::Plugin->formatter ('view'); $opt2->{output}->{entity}->{body} = $fmt->replace ($opt2->{template}, param => $opt2->{o}); $opt2->{output}->output (output => 'http-cgi'); $self->main_post ($opt, $opt2); Function: @Name: reporting_error @Description: @@@: Reporting database error (or warning) message @@lang:en @Main: my (undef, $err, $wiki) = @_; my $error = {http_status => $err->{-def}->{http_status}}; my $dl = $error->{description} = new Message::Markup::XML::Node (type => '#element', namespace_uri => $NS_XHTML1, local_name => 'dl'); ## TODO: Use resource $dl->append_new_node (type => '#element', namespace_uri => $NS_XHTML1, local_name => 'dt') ->append_text ('Detail'); $dl->append_new_node (type => '#element', namespace_uri => $NS_XHTML1, local_name => 'dd') ->append_text ($err->text); $dl->append_new_node (type => '#element', namespace_uri => $NS_XHTML1, local_name => 'dt') ->append_text ('Call stack trace'); SuikaWiki::Plugin->module_package ('Error')->make_caller_trace_table ($dl->append_new_node (type => '#element', namespace_uri => $NS_XHTML1, local_name => 'dd'), {skip => 2}); push @{$wiki->{var}->{error}||=[]}, $error; Resource: @WikiDB:FatalError:Description: @@@: Some fatal error occurs during processing your request. Please contact the administrator of the wiki with error messages below. @@lang:en @WikiDB:FatalError:Title: @@@: Internal WikiDatabase Error @@lang:en @WikiDB:FatalError:WebPageTitle: @@@: WikiDatabase Error (%page-name;) @@lang:en