summaryrefslogtreecommitdiff
path: root/lib/VNDB/Handler/Docs.pm
blob: 4fabf1d3709ac42576df71ef373add9bef74fc20 (plain)
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
70
71
72
73
74
75
76
77
78

package VNDB::Handler::Docs;


use strict;
use warnings;
use TUWF ':html';
use VNDB::Func;
use Text::MultiMarkdown 'markdown';
use VNWeb::Docs::Lib;


TUWF::register(
  qr{d([1-9]\d*)(?:\.([1-9]\d*))?/edit} => \&edit,
);


sub edit {
  my($self, $id, $rev) = @_;

  my $d = $self->dbDocGetRev(id => $id, rev => $rev)->[0];
  return $self->resNotFound if !$d->{id};
  $rev = undef if $d->{lastrev};

  return $self->htmlDenied if !$self->authCan('dbmod');

  my %b4 = map { $_ => $d->{$_} } qw|title content ihid ilock|;
  my $frm;

  if($self->reqMethod eq 'POST') {
    return if !$self->authCheckCode;
    $frm = $self->formValidate(
      { post => 'title',         maxlength => 200 },
      { post => 'content',       },
      { post => 'editsum',       template => 'editsum' },
      { post => 'ihid',          required  => 0 },
      { post => 'ilock',         required  => 0 },
      { post => 'preview',       required  => 0 },
    );
    if(!$frm->{_err} && !$frm->{preview}) {
      $frm->{ihid} = $frm->{ihid}?1:0;
      $frm->{ilock} = $frm->{ilock}?1:0;

      return $self->resRedirect("/d$id", 'post') if !form_compare(\%b4, $frm);
      my $nrev = $self->dbItemEdit(d => $id, $d->{rev}, %$frm);
      return $self->resRedirect("/d$nrev->{itemid}.$nrev->{rev}", 'post');
    }
  }

  !defined $frm->{$_} && ($frm->{$_} = $b4{$_}) for keys %b4;
  $frm->{editsum} = sprintf 'Reverted to revision d%d.%d', $id, $rev if $rev && !defined $frm->{editsum};
  delete $frm->{_err} if $frm->{preview};

  my $title = "Edit $d->{title}";
  $self->htmlHeader(title => $title, noindex => 1);
  $self->htmlMainTabs('d', $d, 'edit');

  if($frm->{preview}) {
    div class => 'mainbox';
     h1 'Preview';
     div class => 'docs';
      lit md2html $frm->{content};
     end;
    end;
  }

  $self->htmlForm({ frm => $frm, action => "/d$id/edit", editsum => 1, preview => 1 }, dedit => [ $title,
    [ input  => name => 'Title', short => 'title', width => 300 ],
    [ static => nolabel => 1, content => q{
         <br>Contents (HTML and MultiMarkdown supported, which is
         <a href="https://daringfireball.net/projects/markdown/basics">Markdown</a>
         with some <a href="http://fletcher.github.io/MultiMarkdown-5/syntax.html">extensions</a>).} ],
    [ textarea => short => 'content', name => 'Content', rows => 50, cols => 90, nolabel => 1 ],
  ]);
  $self->htmlFooter;
}

1;