xref: /plugin/structpublish/meta/AccessTableStructpublish.php (revision 6a791fefb264d258b097578a4fa501e8985bcd4e)
13231ebaeSAnna Dabrowska<?php
23231ebaeSAnna Dabrowska
33231ebaeSAnna Dabrowskanamespace dokuwiki\plugin\structpublish\meta;
43231ebaeSAnna Dabrowska
5*6a791fefSAnna Dabrowskause dokuwiki\plugin\struct\meta\AccessTable;
63231ebaeSAnna Dabrowskause dokuwiki\plugin\struct\meta\AccessTableSerial;
73231ebaeSAnna Dabrowska
83231ebaeSAnna Dabrowska/**
93231ebaeSAnna Dabrowska * Class AccessTableStructpublish
103231ebaeSAnna Dabrowska *
11*6a791fefSAnna Dabrowska * Load and save publish data
123231ebaeSAnna Dabrowska *
133231ebaeSAnna Dabrowska * @package dokuwiki\plugin\struct\meta
143231ebaeSAnna Dabrowska */
153231ebaeSAnna Dabrowskaclass AccessTableStructpublish extends AccessTableSerial
163231ebaeSAnna Dabrowska{
17*6a791fefSAnna Dabrowska    protected $published = 0;
18*6a791fefSAnna Dabrowska
193231ebaeSAnna Dabrowska    public function __construct($table, $pid, $ts = 0, $rid = 0)
203231ebaeSAnna Dabrowska    {
213231ebaeSAnna Dabrowska        parent::__construct($table, $pid, $ts, $rid);
223231ebaeSAnna Dabrowska    }
233231ebaeSAnna Dabrowska
243231ebaeSAnna Dabrowska    /**
25*6a791fefSAnna Dabrowska     * @param int $published
26*6a791fefSAnna Dabrowska     * @return void
27*6a791fefSAnna Dabrowska     */
28*6a791fefSAnna Dabrowska    public function setPublished($published)
29*6a791fefSAnna Dabrowska    {
30*6a791fefSAnna Dabrowska        $this->published = $published;
31*6a791fefSAnna Dabrowska    }
32*6a791fefSAnna Dabrowska
33*6a791fefSAnna Dabrowska    /**
343231ebaeSAnna Dabrowska     * @inheritDoc
353231ebaeSAnna Dabrowska     */
363231ebaeSAnna Dabrowska    protected function getSingleSql()
373231ebaeSAnna Dabrowska    {
383231ebaeSAnna Dabrowska        $cols = array_merge($this->getSingleNoninputCols(), $this->singleCols);
393231ebaeSAnna Dabrowska        $cols = join(',', $cols);
403231ebaeSAnna Dabrowska        $vals = array_merge($this->getSingleNoninputValues(), $this->singleValues);
413231ebaeSAnna Dabrowska        $rid = $this->getRid() ?: "(SELECT (COALESCE(MAX(rid), 0 ) + 1) FROM $this->stable)";
423231ebaeSAnna Dabrowska
433231ebaeSAnna Dabrowska        return "REPLACE INTO $this->stable (rid, $cols)
443231ebaeSAnna Dabrowska                      VALUES ($rid," . trim(str_repeat('?,', count($vals)), ',') . ');';
453231ebaeSAnna Dabrowska    }
463231ebaeSAnna Dabrowska
473231ebaeSAnna Dabrowska    /**
483231ebaeSAnna Dabrowska     * @inheritDoc
493231ebaeSAnna Dabrowska     */
503231ebaeSAnna Dabrowska    protected function getMultiSql()
513231ebaeSAnna Dabrowska    {
523231ebaeSAnna Dabrowska        return '';
533231ebaeSAnna Dabrowska    }
543231ebaeSAnna Dabrowska
553231ebaeSAnna Dabrowska    /**
56*6a791fefSAnna Dabrowska     * @inheritDoc
57*6a791fefSAnna Dabrowska     */
58*6a791fefSAnna Dabrowska    protected function getSingleNoninputCols()
59*6a791fefSAnna Dabrowska    {
60*6a791fefSAnna Dabrowska        return ['pid', 'rev', 'latest', 'published'];
61*6a791fefSAnna Dabrowska    }
62*6a791fefSAnna Dabrowska
63*6a791fefSAnna Dabrowska    /**
64*6a791fefSAnna Dabrowska     * @inheritDoc
65*6a791fefSAnna Dabrowska     */
66*6a791fefSAnna Dabrowska    protected function getSingleNoninputValues()
67*6a791fefSAnna Dabrowska    {
68*6a791fefSAnna Dabrowska        return [$this->pid, AccessTable::DEFAULT_REV, AccessTable::DEFAULT_LATEST, $this->published];
69*6a791fefSAnna Dabrowska    }
70*6a791fefSAnna Dabrowska
71*6a791fefSAnna Dabrowska    /**
723231ebaeSAnna Dabrowska     * @return int|bool
733231ebaeSAnna Dabrowska     */
743231ebaeSAnna Dabrowska    protected function getLastRevisionTimestamp()
753231ebaeSAnna Dabrowska    {
763231ebaeSAnna Dabrowska        $table = 'data_structpublish';
773231ebaeSAnna Dabrowska        $where = "WHERE pid = ?";
783231ebaeSAnna Dabrowska        $opts = [$this->pid];
793231ebaeSAnna Dabrowska        if ($this->ts) {
803231ebaeSAnna Dabrowska            $where .= " AND REV > 0 AND rev <= ?";
813231ebaeSAnna Dabrowska            $opts[] = $this->ts;
823231ebaeSAnna Dabrowska        }
833231ebaeSAnna Dabrowska
843231ebaeSAnna Dabrowska        /** @noinspection SqlResolve */
853231ebaeSAnna Dabrowska        $sql = "SELECT rev FROM $table $where ORDER BY rev DESC LIMIT 1";
863231ebaeSAnna Dabrowska        $res = $this->sqlite->query($sql, $opts);
873231ebaeSAnna Dabrowska        $ret = $this->sqlite->res2single($res);
883231ebaeSAnna Dabrowska        $this->sqlite->res_close($res);
893231ebaeSAnna Dabrowska        // make sure we don't cast empty result to 0 (serial data has rev = 0)
903231ebaeSAnna Dabrowska        if ($ret !== false) $ret = (int)$ret;
913231ebaeSAnna Dabrowska        return $ret;
923231ebaeSAnna Dabrowska    }
933231ebaeSAnna Dabrowska}
94