xref: /plugin/struct/meta/PageMeta.php (revision 58cb2b195be4f170c094cdbf3cc5cb0ee0d1e9f0)
13aad9612SMichael Grosse<?php
23aad9612SMichael Grosse
33aad9612SMichael Grossenamespace dokuwiki\plugin\struct\meta;
43aad9612SMichael Grosse
5d6d97f60SAnna Dabrowskaclass PageMeta
6d6d97f60SAnna Dabrowska{
73aad9612SMichael Grosse
83aad9612SMichael Grosse    /** @var \helper_plugin_sqlite */
93aad9612SMichael Grosse    protected $sqlite;
103aad9612SMichael Grosse
113aad9612SMichael Grosse    protected $pid;
123aad9612SMichael Grosse    protected $title = null;
133aad9612SMichael Grosse    protected $lasteditor = null;
143aad9612SMichael Grosse    protected $lastrev = null;
1588b58a21SSzymon Olewniczak    protected $lastsummary = null;
163aad9612SMichael Grosse
173aad9612SMichael Grosse    protected $saveNeeded = false;
183aad9612SMichael Grosse
19d6d97f60SAnna Dabrowska    public function __construct($pid)
20d6d97f60SAnna Dabrowska    {
213aad9612SMichael Grosse        /** @var \helper_plugin_struct_db $helper */
223aad9612SMichael Grosse        $helper = plugin_load('helper', 'struct_db');
233aad9612SMichael Grosse        $this->sqlite = $helper->getDB();
243aad9612SMichael Grosse        $this->pid = $pid;
253aad9612SMichael Grosse    }
263aad9612SMichael Grosse
273aad9612SMichael Grosse    /**
283aad9612SMichael Grosse     * If data was explicitly set, then save it to the database if that hasn't happened yet.
293aad9612SMichael Grosse     */
30d6d97f60SAnna Dabrowska    public function __destruct()
31d6d97f60SAnna Dabrowska    {
323aad9612SMichael Grosse        if ($this->saveNeeded) {
333aad9612SMichael Grosse            $this->savePageData();
343aad9612SMichael Grosse        }
353aad9612SMichael Grosse    }
363aad9612SMichael Grosse
373aad9612SMichael Grosse    /**
38*58cb2b19SAnna Dabrowska     * Get latest page metadata from database
39*58cb2b19SAnna Dabrowska     */
40*58cb2b19SAnna Dabrowska    public function getPageData()
41*58cb2b19SAnna Dabrowska    {
42*58cb2b19SAnna Dabrowska        $sql = "SELECT pid, title, lasteditor, lastrev, lastsummary FROM titles WHERE pid = ?";
43*58cb2b19SAnna Dabrowska        $res = $this->sqlite->query($sql, $this->pid);
44*58cb2b19SAnna Dabrowska        $data = $this->sqlite->res2row($res);
45*58cb2b19SAnna Dabrowska        $this->sqlite->res_close($res);
46*58cb2b19SAnna Dabrowska        return $data;
47*58cb2b19SAnna Dabrowska    }
48*58cb2b19SAnna Dabrowska
49*58cb2b19SAnna Dabrowska    /**
503aad9612SMichael Grosse     * Save title, last editor and revision timestamp to database
513aad9612SMichael Grosse     */
52d6d97f60SAnna Dabrowska    public function savePageData()
53d6d97f60SAnna Dabrowska    {
5488b58a21SSzymon Olewniczak        $sql = "REPLACE INTO titles (pid, title, lasteditor, lastrev, lastsummary) VALUES (?,?,?,?,?)";
5588b58a21SSzymon Olewniczak        $this->sqlite->query($sql, array($this->pid, $this->title, $this->lasteditor, $this->lastrev, $this->lastsummary));
563aad9612SMichael Grosse        $this->saveNeeded = false;
573aad9612SMichael Grosse    }
583aad9612SMichael Grosse
593aad9612SMichael Grosse    /**
603aad9612SMichael Grosse     * Sets a new title
613aad9612SMichael Grosse     *
623aad9612SMichael Grosse     * @param string|null $title set null to derive from PID
633aad9612SMichael Grosse     */
64d6d97f60SAnna Dabrowska    public function setTitle($title)
65d6d97f60SAnna Dabrowska    {
663aad9612SMichael Grosse        if ($title === null) {
673aad9612SMichael Grosse            $title = noNS($this->pid);
683aad9612SMichael Grosse        }
693aad9612SMichael Grosse
703aad9612SMichael Grosse        $this->title = $title;
713aad9612SMichael Grosse        $this->saveNeeded = true;
723aad9612SMichael Grosse    }
733aad9612SMichael Grosse
743aad9612SMichael Grosse    /**
753aad9612SMichael Grosse     * Sets the last editor
763aad9612SMichael Grosse     *
773aad9612SMichael Grosse     * @param string|null $lastEditor
783aad9612SMichael Grosse     */
79d6d97f60SAnna Dabrowska    public function setLastEditor($lastEditor)
80d6d97f60SAnna Dabrowska    {
813aad9612SMichael Grosse        if ($lastEditor === null) {
823aad9612SMichael Grosse            $lastEditor = '';
833aad9612SMichael Grosse        }
843aad9612SMichael Grosse
853aad9612SMichael Grosse        $this->lasteditor = $lastEditor;
863aad9612SMichael Grosse        $this->saveNeeded = true;
873aad9612SMichael Grosse    }
883aad9612SMichael Grosse
893aad9612SMichael Grosse    /**
903aad9612SMichael Grosse     * Sets the revision timestamp
913aad9612SMichael Grosse     *
923aad9612SMichael Grosse     * @param int|null $lastrev
933aad9612SMichael Grosse     */
94d6d97f60SAnna Dabrowska    public function setLastRevision($lastrev)
95d6d97f60SAnna Dabrowska    {
963aad9612SMichael Grosse        if ($lastrev === null) {
973aad9612SMichael Grosse            $lastrev = 0;
983aad9612SMichael Grosse        }
993aad9612SMichael Grosse
1003aad9612SMichael Grosse        $this->lastrev = $lastrev;
1013aad9612SMichael Grosse        $this->saveNeeded = true;
1023aad9612SMichael Grosse    }
1033aad9612SMichael Grosse
1043aad9612SMichael Grosse    /**
10588b58a21SSzymon Olewniczak     * Sets the last summary
10688b58a21SSzymon Olewniczak     *
10788b58a21SSzymon Olewniczak     * @param int|null $lastsummary
10888b58a21SSzymon Olewniczak     */
109d6d97f60SAnna Dabrowska    public function setLastSummary($lastsummary)
110d6d97f60SAnna Dabrowska    {
11188b58a21SSzymon Olewniczak        if ($lastsummary === null) {
11288b58a21SSzymon Olewniczak            $lastsummary = '';
11388b58a21SSzymon Olewniczak        }
11488b58a21SSzymon Olewniczak
11588b58a21SSzymon Olewniczak        $this->lastsummary = $lastsummary;
11688b58a21SSzymon Olewniczak        $this->saveNeeded = true;
11788b58a21SSzymon Olewniczak    }
11888b58a21SSzymon Olewniczak
11988b58a21SSzymon Olewniczak    /**
1203aad9612SMichael Grosse     * @return string the page's ID
1213aad9612SMichael Grosse     */
122d6d97f60SAnna Dabrowska    public function getPid()
123d6d97f60SAnna Dabrowska    {
1243aad9612SMichael Grosse        return $this->pid;
1253aad9612SMichael Grosse    }
1263aad9612SMichael Grosse}
127