File Coverage

lib/Kwiki/Edit.pm
Criterion Covered Total %
statement 1 3 33.3
branch n/a
condition n/a
subroutine 1 1 100.0
pod n/a
total 2 4 50.0


line stmt bran cond sub pod time code
1             package Kwiki::Edit;
2 1     1   1840 use Kwiki::Plugin -Base;
  0            
  0            
3             use mixin 'Kwiki::Installer';
4              
5             const class_id => 'edit';
6             const class_title => 'Page Edit';
7             const cgi_class => 'Kwiki::Edit::CGI';
8             const config_file => 'edit.yaml';
9              
10             sub register {
11             my $registry = shift;
12             $registry->add(action => 'edit');
13             $registry->add(action => 'edit_contention');
14             $registry->add(toolbar => 'edit_button',
15             template => 'edit_button.html',
16             show_for => ['display', 'revisions', 'edit_contention'],
17             );
18             }
19              
20             sub edit {
21             my $page = $self->pages->current;
22             return $self->redirect($page->uri)
23             unless $page->is_writable;
24             return $self->save
25             if $self->cgi->button eq $self->config->edit_save_button_text;
26             return $self->preview
27             if $self->cgi->button eq $self->config->edit_preview_button_text;
28             my $content = $self->cgi->revision_id
29             ? $self->hub->archive->fetch($page, $self->cgi->revision_id)
30             : $page->content;
31             $content ||= $self->config->default_content;
32             $self->render_screen(
33             screen_title => $page->title,
34             page_content => $content,
35             page_time => $page->modified_time,
36             );
37             }
38              
39             sub save {
40             my $page = $self->pages->current;
41             $page->content($self->cgi->page_content);
42             if ($page->modified_time != $self->cgi->page_time) {
43             my $page_uri = $page->uri;
44             return $self->redirect("action=edit_contention;page_name=$page_uri");
45             }
46             $page->update->store;
47             return $self->redirect($page->uri);
48             }
49              
50             sub preview {
51             my $preview = $self->hub->formatter->text_to_html($self->cgi->page_content);
52             $self->render_screen(
53             preview_content => $preview,
54             );
55             }
56              
57             sub edit_contention {
58             return $self->render_screen(
59             content_pane => 'edit_contention.html',
60             );
61             }
62              
63             package Kwiki::Edit::CGI;
64             use base 'Kwiki::CGI';
65              
66             cgi 'page_content' => qw(-utf8 -newlines);
67             cgi 'revision_id';
68             cgi 'page_time';
69              
70             package Kwiki::Edit;
71              
72             __DATA__