xref: /plugin/struct/meta/PageMeta.php (revision 7234bfb14e712ff548d9266ef32fdcc8eaf2d04e)
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;
11*7234bfb1Ssplitbrain    protected $title;
12*7234bfb1Ssplitbrain    protected $lasteditor;
13*7234bfb1Ssplitbrain    protected $lastrev;
14*7234bfb1Ssplitbrain    protected $lastsummary;
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 = ?";
4279b29326SAnna Dabrowska        $data = $this->sqlite->queryRecord($sql, [$this->pid]);
4358cb2b19SAnna Dabrowska        return $data;
4458cb2b19SAnna Dabrowska    }
4558cb2b19SAnna Dabrowska
4658cb2b19SAnna Dabrowska    /**
473aad9612SMichael Grosse     * Save title, last editor and revision timestamp to database
483aad9612SMichael Grosse     */
49d6d97f60SAnna Dabrowska    public function savePageData()
50d6d97f60SAnna Dabrowska    {
5188b58a21SSzymon Olewniczak        $sql = "REPLACE INTO titles (pid, title, lasteditor, lastrev, lastsummary) VALUES (?,?,?,?,?)";
5217a3a578SAndreas Gohr        $this->sqlite->query($sql, [$this->pid, $this->title, $this->lasteditor, $this->lastrev, $this->lastsummary]);
533aad9612SMichael Grosse        $this->saveNeeded = false;
543aad9612SMichael Grosse    }
553aad9612SMichael Grosse
563aad9612SMichael Grosse    /**
573aad9612SMichael Grosse     * Sets a new title
583aad9612SMichael Grosse     *
593aad9612SMichael Grosse     * @param string|null $title set null to derive from PID
603aad9612SMichael Grosse     */
61d6d97f60SAnna Dabrowska    public function setTitle($title)
62d6d97f60SAnna Dabrowska    {
633aad9612SMichael Grosse        if ($title === null) {
643aad9612SMichael Grosse            $title = noNS($this->pid);
653aad9612SMichael Grosse        }
663aad9612SMichael Grosse
673aad9612SMichael Grosse        $this->title = $title;
683aad9612SMichael Grosse        $this->saveNeeded = true;
693aad9612SMichael Grosse    }
703aad9612SMichael Grosse
713aad9612SMichael Grosse    /**
723aad9612SMichael Grosse     * Sets the last editor
733aad9612SMichael Grosse     *
743aad9612SMichael Grosse     * @param string|null $lastEditor
753aad9612SMichael Grosse     */
76d6d97f60SAnna Dabrowska    public function setLastEditor($lastEditor)
77d6d97f60SAnna Dabrowska    {
783aad9612SMichael Grosse        if ($lastEditor === null) {
793aad9612SMichael Grosse            $lastEditor = '';
803aad9612SMichael Grosse        }
813aad9612SMichael Grosse
823aad9612SMichael Grosse        $this->lasteditor = $lastEditor;
833aad9612SMichael Grosse        $this->saveNeeded = true;
843aad9612SMichael Grosse    }
853aad9612SMichael Grosse
863aad9612SMichael Grosse    /**
873aad9612SMichael Grosse     * Sets the revision timestamp
883aad9612SMichael Grosse     *
893aad9612SMichael Grosse     * @param int|null $lastrev
903aad9612SMichael Grosse     */
91d6d97f60SAnna Dabrowska    public function setLastRevision($lastrev)
92d6d97f60SAnna Dabrowska    {
933aad9612SMichael Grosse        if ($lastrev === null) {
943aad9612SMichael Grosse            $lastrev = 0;
953aad9612SMichael Grosse        }
963aad9612SMichael Grosse
973aad9612SMichael Grosse        $this->lastrev = $lastrev;
983aad9612SMichael Grosse        $this->saveNeeded = true;
993aad9612SMichael Grosse    }
1003aad9612SMichael Grosse
1013aad9612SMichael Grosse    /**
10288b58a21SSzymon Olewniczak     * Sets the last summary
10388b58a21SSzymon Olewniczak     *
10488b58a21SSzymon Olewniczak     * @param int|null $lastsummary
10588b58a21SSzymon Olewniczak     */
106d6d97f60SAnna Dabrowska    public function setLastSummary($lastsummary)
107d6d97f60SAnna Dabrowska    {
10888b58a21SSzymon Olewniczak        if ($lastsummary === null) {
10988b58a21SSzymon Olewniczak            $lastsummary = '';
11088b58a21SSzymon Olewniczak        }
11188b58a21SSzymon Olewniczak
11288b58a21SSzymon Olewniczak        $this->lastsummary = $lastsummary;
11388b58a21SSzymon Olewniczak        $this->saveNeeded = true;
11488b58a21SSzymon Olewniczak    }
11588b58a21SSzymon Olewniczak
11688b58a21SSzymon Olewniczak    /**
1173aad9612SMichael Grosse     * @return string the page's ID
1183aad9612SMichael Grosse     */
119d6d97f60SAnna Dabrowska    public function getPid()
120d6d97f60SAnna Dabrowska    {
1213aad9612SMichael Grosse        return $this->pid;
1223aad9612SMichael Grosse    }
1233aad9612SMichael Grosse}
124