package Kwiki::Atom::Server;
use strict;
use base 'XML::Atom::Server';
sub client { $_[0]{client} = $_[1] if @_ > 1; $_[0]{client} }
sub print { $_[0]{print} .= $_[1] if @_ > 1; $_[0]{print} }
*XML::Atom::Server::textValue = \&XML::Atom::Util::textValue;
sub xml_body {
my $server = shift;
unless (exists $server->{xml_body}) {
$server->{xml_body} = XML::XPath->new(
xml => $server->request_content
);
}
$server->{xml_body};
}
sub handle_request {
my $server = shift;
my $self = $server->client;
# local $SIG{__DIE__} = sub { print "\n\n@_\n"; exit };
my $page;
if ($server->request_method eq 'POST') {
$page = $self->update_page or return undef;
my $url = $server->uri;
$self->fill_header(
-status => 201,
-location => "$url?action=atom_edit;page_id=".$page->id,
);
# $server->{is_soap} = 0;
# return '';
}
else {
$server->{cgi}->parse_params($ENV{QUERY_STRING});
if (my $name = $self->utf8_decode($server->{cgi}->param('page_name'))) {
$page = $self->pages->new_page( $self->pages->name_to_id($name) );
}
else {
$page = $self->pages->current;
}
if ($server->request_method eq 'PUT') {
$self->update_page($page);
}
}
my $entry = $self->make_entry($page, 1);
return $self->munge($entry->as_xml);
}
sub show_error {
my $self = shift;
$self->SUPER::show_error($self->{_error});
}
sub send_http_header { return }
1;