xref: /plugin/structpublish/meta/AccessTableStructpublish.php (revision 3231ebae4b1306b9f8a4137b83017a39a16e79eb)
1*3231ebaeSAnna Dabrowska<?php
2*3231ebaeSAnna Dabrowska
3*3231ebaeSAnna Dabrowskanamespace dokuwiki\plugin\structpublish\meta;
4*3231ebaeSAnna Dabrowska
5*3231ebaeSAnna Dabrowskause dokuwiki\plugin\struct\meta\AccessTableSerial;
6*3231ebaeSAnna Dabrowska
7*3231ebaeSAnna Dabrowska/**
8*3231ebaeSAnna Dabrowska * Class AccessTableStructpublish
9*3231ebaeSAnna Dabrowska *
10*3231ebaeSAnna Dabrowska * Load and save serial data
11*3231ebaeSAnna Dabrowska *
12*3231ebaeSAnna Dabrowska * @package dokuwiki\plugin\struct\meta
13*3231ebaeSAnna Dabrowska */
14*3231ebaeSAnna Dabrowskaclass AccessTableStructpublish extends AccessTableSerial
15*3231ebaeSAnna Dabrowska{
16*3231ebaeSAnna Dabrowska    public function __construct($table, $pid, $ts = 0, $rid = 0)
17*3231ebaeSAnna Dabrowska    {
18*3231ebaeSAnna Dabrowska        parent::__construct($table, $pid, $ts, $rid);
19*3231ebaeSAnna Dabrowska    }
20*3231ebaeSAnna Dabrowska
21*3231ebaeSAnna Dabrowska    /**
22*3231ebaeSAnna Dabrowska     * @inheritDoc
23*3231ebaeSAnna Dabrowska     */
24*3231ebaeSAnna Dabrowska    protected function getSingleSql()
25*3231ebaeSAnna Dabrowska    {
26*3231ebaeSAnna Dabrowska        $cols = array_merge($this->getSingleNoninputCols(), $this->singleCols);
27*3231ebaeSAnna Dabrowska        $cols = join(',', $cols);
28*3231ebaeSAnna Dabrowska        $vals = array_merge($this->getSingleNoninputValues(), $this->singleValues);
29*3231ebaeSAnna Dabrowska        $rid = $this->getRid() ?: "(SELECT (COALESCE(MAX(rid), 0 ) + 1) FROM $this->stable)";
30*3231ebaeSAnna Dabrowska
31*3231ebaeSAnna Dabrowska        return "REPLACE INTO $this->stable (rid, $cols)
32*3231ebaeSAnna Dabrowska                      VALUES ($rid," . trim(str_repeat('?,', count($vals)), ',') . ');';
33*3231ebaeSAnna Dabrowska    }
34*3231ebaeSAnna Dabrowska
35*3231ebaeSAnna Dabrowska    /**
36*3231ebaeSAnna Dabrowska     * @inheritDoc
37*3231ebaeSAnna Dabrowska     */
38*3231ebaeSAnna Dabrowska    protected function getMultiSql()
39*3231ebaeSAnna Dabrowska    {
40*3231ebaeSAnna Dabrowska        return '';
41*3231ebaeSAnna Dabrowska    }
42*3231ebaeSAnna Dabrowska
43*3231ebaeSAnna Dabrowska    /**
44*3231ebaeSAnna Dabrowska     * @return int|bool
45*3231ebaeSAnna Dabrowska     */
46*3231ebaeSAnna Dabrowska    protected function getLastRevisionTimestamp()
47*3231ebaeSAnna Dabrowska    {
48*3231ebaeSAnna Dabrowska        $table = 'data_structpublish';
49*3231ebaeSAnna Dabrowska        $where = "WHERE pid = ?";
50*3231ebaeSAnna Dabrowska        $opts = [$this->pid];
51*3231ebaeSAnna Dabrowska        if ($this->ts) {
52*3231ebaeSAnna Dabrowska            $where .= " AND REV > 0 AND rev <= ?";
53*3231ebaeSAnna Dabrowska            $opts[] = $this->ts;
54*3231ebaeSAnna Dabrowska        }
55*3231ebaeSAnna Dabrowska
56*3231ebaeSAnna Dabrowska        /** @noinspection SqlResolve */
57*3231ebaeSAnna Dabrowska        $sql = "SELECT rev FROM $table $where ORDER BY rev DESC LIMIT 1";
58*3231ebaeSAnna Dabrowska        $res = $this->sqlite->query($sql, $opts);
59*3231ebaeSAnna Dabrowska        $ret = $this->sqlite->res2single($res);
60*3231ebaeSAnna Dabrowska        $this->sqlite->res_close($res);
61*3231ebaeSAnna Dabrowska        // make sure we don't cast empty result to 0 (serial data has rev = 0)
62*3231ebaeSAnna Dabrowska        if ($ret !== false) $ret = (int)$ret;
63*3231ebaeSAnna Dabrowska        return $ret;
64*3231ebaeSAnna Dabrowska    }
65*3231ebaeSAnna Dabrowska}
66