summaryrefslogtreecommitdiff
path: root/lib/VNDB/DB/Docs.pm
blob: 27cabf6e0a3a93c412084105def22becfc88baea (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

package VNDB::DB::Docs;

use strict;
use warnings;
use Exporter 'import';

our @EXPORT = qw|dbDocGet dbDocGetRev dbDocRevisionInsert|;


# Can only fetch a single document.
# $doc = $self->dbDocGet(id => $id);
sub dbDocGet {
  my $self = shift;
  my %o = @_;

  my $r = $self->dbAll('SELECT id, title, content FROM docs WHERE id = ?', $o{id});
  return wantarray ? ($r, 0) : $r;
}


# options: id, rev
sub dbDocGetRev {
  my $self = shift;
  my %o = @_;

  $o{rev} ||= $self->dbRow('SELECT MAX(rev) AS rev FROM changes WHERE type = \'d\' AND itemid = ?', $o{id})->{rev};

  my $r = $self->dbAll(q|
    SELECT de.id, d.title, d.content, de.hidden, de.locked,
           extract('epoch' from c.added) as added, c.requester, c.comments, u.username, c.rev, c.ihid, c.ilock, c.id AS cid,
           NOT EXISTS(SELECT 1 FROM changes c2 WHERE c2.type = c.type AND c2.itemid = c.itemid AND c2.rev = c.rev+1) AS lastrev
      FROM changes c
      JOIN docs de ON de.id = c.itemid
      JOIN docs_hist d ON d.chid = c.id
      JOIN users u ON u.id = c.requester
      WHERE c.type = 'd' AND c.itemid = ? AND c.rev = ?|,
     $o{id}, $o{rev}
  );
  return wantarray ? ($r, 0) : $r;
}


# Updates the edit_* tables, used from dbItemEdit()
# Arguments: { title content },
sub dbDocRevisionInsert {
  my($self, $o) = @_;
  my %set = map exists($o->{$_}) ? (qq|"$_" = ?|, $o->{$_}) : (), qw|title content|;
  $self->dbExec('UPDATE edit_docs !H', \%set) if keys %set;
}


1;