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