xref: /plugin/structpublish/meta/AccessTableStructpublish.php (revision 9ab8cbae39a6ffa37705f745bc76916ea212a92b)
13231ebaeSAnna Dabrowska<?php
23231ebaeSAnna Dabrowska
33231ebaeSAnna Dabrowskanamespace dokuwiki\plugin\structpublish\meta;
43231ebaeSAnna Dabrowska
56a791fefSAnna Dabrowskause dokuwiki\plugin\struct\meta\AccessTable;
63231ebaeSAnna Dabrowskause dokuwiki\plugin\struct\meta\AccessTableSerial;
73231ebaeSAnna Dabrowska
83231ebaeSAnna Dabrowska/**
93231ebaeSAnna Dabrowska * Class AccessTableStructpublish
103231ebaeSAnna Dabrowska *
116a791fefSAnna Dabrowska * Load and save publish data
123231ebaeSAnna Dabrowska *
133231ebaeSAnna Dabrowska * @package dokuwiki\plugin\struct\meta
143231ebaeSAnna Dabrowska */
153231ebaeSAnna Dabrowskaclass AccessTableStructpublish extends AccessTableSerial
163231ebaeSAnna Dabrowska{
176a791fefSAnna Dabrowska    protected $published = 0;
186a791fefSAnna Dabrowska
193231ebaeSAnna Dabrowska    /**
208b0ba635SAndreas Gohr     * @param 0|1|bool $published
216a791fefSAnna Dabrowska     * @return void
226a791fefSAnna Dabrowska     */
236a791fefSAnna Dabrowska    public function setPublished($published)
246a791fefSAnna Dabrowska    {
258b0ba635SAndreas Gohr        $this->published = (int) $published;
266a791fefSAnna Dabrowska    }
276a791fefSAnna Dabrowska
288b0ba635SAndreas Gohr    /** @inheritDoc */
293231ebaeSAnna Dabrowska    protected function getSingleSql()
303231ebaeSAnna Dabrowska    {
313231ebaeSAnna Dabrowska        $cols = array_merge($this->getSingleNoninputCols(), $this->singleCols);
32*9ab8cbaeSannda        $cols = implode(',', $cols);
33*9ab8cbaeSannda
343231ebaeSAnna Dabrowska        $vals = array_merge($this->getSingleNoninputValues(), $this->singleValues);
353231ebaeSAnna Dabrowska        $rid = $this->getRid() ?: "(SELECT (COALESCE(MAX(rid), 0 ) + 1) FROM $this->stable)";
363231ebaeSAnna Dabrowska
373231ebaeSAnna Dabrowska        return "REPLACE INTO $this->stable (rid, $cols)
383231ebaeSAnna Dabrowska                      VALUES ($rid," . trim(str_repeat('?,', count($vals)), ',') . ');';
393231ebaeSAnna Dabrowska    }
403231ebaeSAnna Dabrowska
418b0ba635SAndreas Gohr    /** @inheritDoc */
423231ebaeSAnna Dabrowska    protected function getMultiSql()
433231ebaeSAnna Dabrowska    {
443231ebaeSAnna Dabrowska        return '';
453231ebaeSAnna Dabrowska    }
463231ebaeSAnna Dabrowska
478b0ba635SAndreas Gohr    /** @inheritDoc */
486a791fefSAnna Dabrowska    protected function getSingleNoninputCols()
496a791fefSAnna Dabrowska    {
506a791fefSAnna Dabrowska        return ['pid', 'rev', 'latest', 'published'];
516a791fefSAnna Dabrowska    }
526a791fefSAnna Dabrowska
538b0ba635SAndreas Gohr    /** @inheritDoc */
546a791fefSAnna Dabrowska    protected function getSingleNoninputValues()
556a791fefSAnna Dabrowska    {
566a791fefSAnna Dabrowska        return [$this->pid, AccessTable::DEFAULT_REV, AccessTable::DEFAULT_LATEST, $this->published];
576a791fefSAnna Dabrowska    }
586a791fefSAnna Dabrowska
596a791fefSAnna Dabrowska    /**
608b0ba635SAndreas Gohr     * @inheritdoc
613231ebaeSAnna Dabrowska     * @return int|bool
623231ebaeSAnna Dabrowska     */
633231ebaeSAnna Dabrowska    protected function getLastRevisionTimestamp()
643231ebaeSAnna Dabrowska    {
653231ebaeSAnna Dabrowska        $table = 'data_structpublish';
663231ebaeSAnna Dabrowska        $where = "WHERE pid = ?";
673231ebaeSAnna Dabrowska        $opts = [$this->pid];
683231ebaeSAnna Dabrowska        if ($this->ts) {
693231ebaeSAnna Dabrowska            $where .= " AND REV > 0 AND rev <= ?";
703231ebaeSAnna Dabrowska            $opts[] = $this->ts;
713231ebaeSAnna Dabrowska        }
723231ebaeSAnna Dabrowska
733231ebaeSAnna Dabrowska        /** @noinspection SqlResolve */
743231ebaeSAnna Dabrowska        $sql = "SELECT rev FROM $table $where ORDER BY rev DESC LIMIT 1";
75f734c62fSAnna Dabrowska        $ret = $this->sqlite->queryValue($sql, $opts);
76f734c62fSAnna Dabrowska
773231ebaeSAnna Dabrowska        // make sure we don't cast empty result to 0 (serial data has rev = 0)
788b0ba635SAndreas Gohr        if ($ret !== false) {
798b0ba635SAndreas Gohr            $ret = (int) $ret;
808b0ba635SAndreas Gohr        }
813231ebaeSAnna Dabrowska        return $ret;
823231ebaeSAnna Dabrowska    }
8394eb3960SAnna Dabrowska
8494eb3960SAnna Dabrowska    /**
8594eb3960SAnna Dabrowska     * Remove latest status from previous publish data
86c4618b6cSAnna Dabrowska     * for the current page id
8794eb3960SAnna Dabrowska     */
8894eb3960SAnna Dabrowska    protected function beforeSave()
8994eb3960SAnna Dabrowska    {
9094eb3960SAnna Dabrowska        /** @noinspection SqlResolve */
9194eb3960SAnna Dabrowska        return $this->sqlite->query(
92c4618b6cSAnna Dabrowska            "UPDATE $this->stable SET latest = 0 WHERE latest = 1 AND pid = ?",
93c4618b6cSAnna Dabrowska            [$this->pid]
9494eb3960SAnna Dabrowska        );
9594eb3960SAnna Dabrowska    }
963231ebaeSAnna Dabrowska}
97