13231ebaeSAnna Dabrowska<?php 23231ebaeSAnna Dabrowska 33231ebaeSAnna Dabrowskanamespace dokuwiki\plugin\structpublish\meta; 43231ebaeSAnna Dabrowska 56a791fefSAnna Dabrowskause dokuwiki\plugin\struct\meta\AccessTable; 63231ebaeSAnna Dabrowskause dokuwiki\plugin\struct\meta\AccessTableSerial; 73231ebaeSAnna Dabrowska 83231ebaeSAnna Dabrowska/** 93231ebaeSAnna Dabrowska * Class AccessTableStructpublish 103231ebaeSAnna Dabrowska * 116a791fefSAnna Dabrowska * Load and save publish data 123231ebaeSAnna Dabrowska * 133231ebaeSAnna Dabrowska * @package dokuwiki\plugin\struct\meta 143231ebaeSAnna Dabrowska */ 153231ebaeSAnna Dabrowskaclass AccessTableStructpublish extends AccessTableSerial 163231ebaeSAnna Dabrowska{ 176a791fefSAnna Dabrowska protected $published = 0; 186a791fefSAnna Dabrowska 193231ebaeSAnna Dabrowska /** 208b0ba635SAndreas Gohr * @param 0|1|bool $published 216a791fefSAnna Dabrowska * @return void 226a791fefSAnna Dabrowska */ 236a791fefSAnna Dabrowska public function setPublished($published) 246a791fefSAnna Dabrowska { 258b0ba635SAndreas Gohr $this->published = (int) $published; 266a791fefSAnna Dabrowska } 276a791fefSAnna Dabrowska 288b0ba635SAndreas Gohr /** @inheritDoc */ 293231ebaeSAnna Dabrowska protected function getSingleSql() 303231ebaeSAnna Dabrowska { 313231ebaeSAnna Dabrowska $cols = array_merge($this->getSingleNoninputCols(), $this->singleCols); 323231ebaeSAnna Dabrowska $cols = join(',', $cols); 333231ebaeSAnna Dabrowska $vals = array_merge($this->getSingleNoninputValues(), $this->singleValues); 343231ebaeSAnna Dabrowska $rid = $this->getRid() ?: "(SELECT (COALESCE(MAX(rid), 0 ) + 1) FROM $this->stable)"; 353231ebaeSAnna Dabrowska 363231ebaeSAnna Dabrowska return "REPLACE INTO $this->stable (rid, $cols) 373231ebaeSAnna Dabrowska VALUES ($rid," . trim(str_repeat('?,', count($vals)), ',') . ');'; 383231ebaeSAnna Dabrowska } 393231ebaeSAnna Dabrowska 408b0ba635SAndreas Gohr /** @inheritDoc */ 413231ebaeSAnna Dabrowska protected function getMultiSql() 423231ebaeSAnna Dabrowska { 433231ebaeSAnna Dabrowska return ''; 443231ebaeSAnna Dabrowska } 453231ebaeSAnna Dabrowska 468b0ba635SAndreas Gohr /** @inheritDoc */ 476a791fefSAnna Dabrowska protected function getSingleNoninputCols() 486a791fefSAnna Dabrowska { 496a791fefSAnna Dabrowska return ['pid', 'rev', 'latest', 'published']; 506a791fefSAnna Dabrowska } 516a791fefSAnna Dabrowska 528b0ba635SAndreas Gohr /** @inheritDoc */ 536a791fefSAnna Dabrowska protected function getSingleNoninputValues() 546a791fefSAnna Dabrowska { 556a791fefSAnna Dabrowska return [$this->pid, AccessTable::DEFAULT_REV, AccessTable::DEFAULT_LATEST, $this->published]; 566a791fefSAnna Dabrowska } 576a791fefSAnna Dabrowska 586a791fefSAnna Dabrowska /** 598b0ba635SAndreas Gohr * @inheritdoc 603231ebaeSAnna Dabrowska * @return int|bool 613231ebaeSAnna Dabrowska */ 623231ebaeSAnna Dabrowska protected function getLastRevisionTimestamp() 633231ebaeSAnna Dabrowska { 643231ebaeSAnna Dabrowska $table = 'data_structpublish'; 653231ebaeSAnna Dabrowska $where = "WHERE pid = ?"; 663231ebaeSAnna Dabrowska $opts = [$this->pid]; 673231ebaeSAnna Dabrowska if ($this->ts) { 683231ebaeSAnna Dabrowska $where .= " AND REV > 0 AND rev <= ?"; 693231ebaeSAnna Dabrowska $opts[] = $this->ts; 703231ebaeSAnna Dabrowska } 713231ebaeSAnna Dabrowska 723231ebaeSAnna Dabrowska /** @noinspection SqlResolve */ 733231ebaeSAnna Dabrowska $sql = "SELECT rev FROM $table $where ORDER BY rev DESC LIMIT 1"; 74f734c62fSAnna Dabrowska $ret = $this->sqlite->queryValue($sql, $opts); 75f734c62fSAnna Dabrowska 763231ebaeSAnna Dabrowska // make sure we don't cast empty result to 0 (serial data has rev = 0) 778b0ba635SAndreas Gohr if ($ret !== false) { 788b0ba635SAndreas Gohr $ret = (int) $ret; 798b0ba635SAndreas Gohr } 803231ebaeSAnna Dabrowska return $ret; 813231ebaeSAnna Dabrowska } 8294eb3960SAnna Dabrowska 8394eb3960SAnna Dabrowska /** 8494eb3960SAnna Dabrowska * Remove latest status from previous publish data 85*c4618b6cSAnna Dabrowska * for the current page id 8694eb3960SAnna Dabrowska */ 8794eb3960SAnna Dabrowska protected function beforeSave() 8894eb3960SAnna Dabrowska { 8994eb3960SAnna Dabrowska /** @noinspection SqlResolve */ 9094eb3960SAnna Dabrowska return $this->sqlite->query( 91*c4618b6cSAnna Dabrowska "UPDATE $this->stable SET latest = 0 WHERE latest = 1 AND pid = ?", 92*c4618b6cSAnna Dabrowska [$this->pid] 9394eb3960SAnna Dabrowska ); 9494eb3960SAnna Dabrowska } 953231ebaeSAnna Dabrowska} 96