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