xref: /plugin/struct/meta/PageMeta.php (revision 17a3a5782666ca8742a2c64cc11565d4f9fe1076)
13aad9612SMichael Grosse<?php
23aad9612SMichael Grosse
33aad9612SMichael Grossenamespace dokuwiki\plugin\struct\meta;
43aad9612SMichael Grosse
5d6d97f60SAnna Dabrowskaclass PageMeta
6d6d97f60SAnna Dabrowska{
73aad9612SMichael Grosse    /** @var \helper_plugin_sqlite */
83aad9612SMichael Grosse    protected $sqlite;
93aad9612SMichael Grosse
103aad9612SMichael Grosse    protected $pid;
113aad9612SMichael Grosse    protected $title = null;
123aad9612SMichael Grosse    protected $lasteditor = null;
133aad9612SMichael Grosse    protected $lastrev = null;
1488b58a21SSzymon Olewniczak    protected $lastsummary = null;
153aad9612SMichael Grosse
163aad9612SMichael Grosse    protected $saveNeeded = false;
173aad9612SMichael Grosse
18d6d97f60SAnna Dabrowska    public function __construct($pid)
19d6d97f60SAnna Dabrowska    {
203aad9612SMichael Grosse        /** @var \helper_plugin_struct_db $helper */
213aad9612SMichael Grosse        $helper = plugin_load('helper', 'struct_db');
223aad9612SMichael Grosse        $this->sqlite = $helper->getDB();
233aad9612SMichael Grosse        $this->pid = $pid;
243aad9612SMichael Grosse    }
253aad9612SMichael Grosse
263aad9612SMichael Grosse    /**
273aad9612SMichael Grosse     * If data was explicitly set, then save it to the database if that hasn't happened yet.
283aad9612SMichael Grosse     */
29d6d97f60SAnna Dabrowska    public function __destruct()
30d6d97f60SAnna Dabrowska    {
313aad9612SMichael Grosse        if ($this->saveNeeded) {
323aad9612SMichael Grosse            $this->savePageData();
333aad9612SMichael Grosse        }
343aad9612SMichael Grosse    }
353aad9612SMichael Grosse
363aad9612SMichael Grosse    /**
3758cb2b19SAnna Dabrowska     * Get latest page metadata from database
3858cb2b19SAnna Dabrowska     */
3958cb2b19SAnna Dabrowska    public function getPageData()
4058cb2b19SAnna Dabrowska    {
4158cb2b19SAnna Dabrowska        $sql = "SELECT pid, title, lasteditor, lastrev, lastsummary FROM titles WHERE pid = ?";
4258cb2b19SAnna Dabrowska        $res = $this->sqlite->query($sql, $this->pid);
4358cb2b19SAnna Dabrowska        $data = $this->sqlite->res2row($res);
4458cb2b19SAnna Dabrowska        $this->sqlite->res_close($res);
4558cb2b19SAnna Dabrowska        return $data;
4658cb2b19SAnna Dabrowska    }
4758cb2b19SAnna Dabrowska
4858cb2b19SAnna Dabrowska    /**
493aad9612SMichael Grosse     * Save title, last editor and revision timestamp to database
503aad9612SMichael Grosse     */
51d6d97f60SAnna Dabrowska    public function savePageData()
52d6d97f60SAnna Dabrowska    {
5388b58a21SSzymon Olewniczak        $sql = "REPLACE INTO titles (pid, title, lasteditor, lastrev, lastsummary) VALUES (?,?,?,?,?)";
54*17a3a578SAndreas Gohr        $this->sqlite->query($sql, [$this->pid, $this->title, $this->lasteditor, $this->lastrev, $this->lastsummary]);
553aad9612SMichael Grosse        $this->saveNeeded = false;
563aad9612SMichael Grosse    }
573aad9612SMichael Grosse
583aad9612SMichael Grosse    /**
593aad9612SMichael Grosse     * Sets a new title
603aad9612SMichael Grosse     *
613aad9612SMichael Grosse     * @param string|null $title set null to derive from PID
623aad9612SMichael Grosse     */
63d6d97f60SAnna Dabrowska    public function setTitle($title)
64d6d97f60SAnna Dabrowska    {
653aad9612SMichael Grosse        if ($title === null) {
663aad9612SMichael Grosse            $title = noNS($this->pid);
673aad9612SMichael Grosse        }
683aad9612SMichael Grosse
693aad9612SMichael Grosse        $this->title = $title;
703aad9612SMichael Grosse        $this->saveNeeded = true;
713aad9612SMichael Grosse    }
723aad9612SMichael Grosse
733aad9612SMichael Grosse    /**
743aad9612SMichael Grosse     * Sets the last editor
753aad9612SMichael Grosse     *
763aad9612SMichael Grosse     * @param string|null $lastEditor
773aad9612SMichael Grosse     */
78d6d97f60SAnna Dabrowska    public function setLastEditor($lastEditor)
79d6d97f60SAnna Dabrowska    {
803aad9612SMichael Grosse        if ($lastEditor === null) {
813aad9612SMichael Grosse            $lastEditor = '';
823aad9612SMichael Grosse        }
833aad9612SMichael Grosse
843aad9612SMichael Grosse        $this->lasteditor = $lastEditor;
853aad9612SMichael Grosse        $this->saveNeeded = true;
863aad9612SMichael Grosse    }
873aad9612SMichael Grosse
883aad9612SMichael Grosse    /**
893aad9612SMichael Grosse     * Sets the revision timestamp
903aad9612SMichael Grosse     *
913aad9612SMichael Grosse     * @param int|null $lastrev
923aad9612SMichael Grosse     */
93d6d97f60SAnna Dabrowska    public function setLastRevision($lastrev)
94d6d97f60SAnna Dabrowska    {
953aad9612SMichael Grosse        if ($lastrev === null) {
963aad9612SMichael Grosse            $lastrev = 0;
973aad9612SMichael Grosse        }
983aad9612SMichael Grosse
993aad9612SMichael Grosse        $this->lastrev = $lastrev;
1003aad9612SMichael Grosse        $this->saveNeeded = true;
1013aad9612SMichael Grosse    }
1023aad9612SMichael Grosse
1033aad9612SMichael Grosse    /**
10488b58a21SSzymon Olewniczak     * Sets the last summary
10588b58a21SSzymon Olewniczak     *
10688b58a21SSzymon Olewniczak     * @param int|null $lastsummary
10788b58a21SSzymon Olewniczak     */
108d6d97f60SAnna Dabrowska    public function setLastSummary($lastsummary)
109d6d97f60SAnna Dabrowska    {
11088b58a21SSzymon Olewniczak        if ($lastsummary === null) {
11188b58a21SSzymon Olewniczak            $lastsummary = '';
11288b58a21SSzymon Olewniczak        }
11388b58a21SSzymon Olewniczak
11488b58a21SSzymon Olewniczak        $this->lastsummary = $lastsummary;
11588b58a21SSzymon Olewniczak        $this->saveNeeded = true;
11688b58a21SSzymon Olewniczak    }
11788b58a21SSzymon Olewniczak
11888b58a21SSzymon Olewniczak    /**
1193aad9612SMichael Grosse     * @return string the page's ID
1203aad9612SMichael Grosse     */
121d6d97f60SAnna Dabrowska    public function getPid()
122d6d97f60SAnna Dabrowska    {
1233aad9612SMichael Grosse        return $this->pid;
1243aad9612SMichael Grosse    }
1253aad9612SMichael Grosse}
126