1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
package Narwhal::Component::Wiki::Edit;
use Moose;
use Narwhal::Page;
use Narwhal::User;
with 'Narwhal::Component::Role::Wiki';
sub get {
my $self = shift;
my ($req, $page_name) = @_;
my $page = $self->lookup("page:$page_name");
my %template_env = (
page => $page_name,
text => '',
);
if ($page) {
%template_env = (
%template_env,
text => $page->text,
author => $page->author,
modified => $page->modification_date,
);
}
$self->render($req, 'edit.tt', \%template_env);
}
sub post {
my $self = shift;
my ($req, $page_name) = @_;
$self->txn_do(sub {
my $page = $self->lookup("page:$page_name");
my $user_id = 'foo'; # XXX
my $user = $self->lookup("user:$user_id")
|| Narwhal::User->new(id => $user_id);
if ($page) {
$page->new_revision(
text => $req->param('text'),
author => $user,
);
}
else {
$page = Narwhal::Page->new_page(
id => $page_name,
text => $req->param('text'),
author => $user,
);
}
$self->store($page);
});
my $res = $req->new_response(303);
$res->location(
$req->uri_for({
action => 'page',
page_name => $page_name,
})
);
return $res;
}
__PACKAGE__->meta->make_immutable;
no Moose;
1;
|