1c2f8a3c4SAnna Dabrowska<?php 2c2f8a3c4SAnna Dabrowska 3c2f8a3c4SAnna Dabrowskanamespace dokuwiki\plugin\structpublish\meta; 4c2f8a3c4SAnna Dabrowska 5e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\ConfigParser; 6e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\Schema; 7e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\SearchConfig; 8e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\Value; 9e394901aSAnna Dabrowska 10c2f8a3c4SAnna Dabrowskaclass Revision 11c2f8a3c4SAnna Dabrowska{ 12c2f8a3c4SAnna Dabrowska const STATUS_DRAFT = 'draft'; 133231ebaeSAnna Dabrowska const STATUS_APPROVED = 'approved'; 14c2f8a3c4SAnna Dabrowska const STATUS_PUBLISHED = 'published'; 15c2f8a3c4SAnna Dabrowska 16e394901aSAnna Dabrowska /** @var \helper_plugin_sqlite */ 17c2f8a3c4SAnna Dabrowska protected $sqlite; 18e7259784SAnna Dabrowska 19e7259784SAnna Dabrowska protected $schema; 20e7259784SAnna Dabrowska 21e7259784SAnna Dabrowska 22c2f8a3c4SAnna Dabrowska protected $id; 23c2f8a3c4SAnna Dabrowska protected $rev; 24c2f8a3c4SAnna Dabrowska protected $status; 25e394901aSAnna Dabrowska protected $version; 26c2f8a3c4SAnna Dabrowska protected $user; 27e394901aSAnna Dabrowska protected $date; 28e7259784SAnna Dabrowska /** 29e7259784SAnna Dabrowska * @var bool|\dokuwiki\plugin\struct\meta\Column 30e7259784SAnna Dabrowska */ 31e7259784SAnna Dabrowska protected $statusCol; 32e7259784SAnna Dabrowska protected $versionCol; 33e7259784SAnna Dabrowska protected $userCol; 34e7259784SAnna Dabrowska protected $dateCol; 35e7259784SAnna Dabrowska protected $revisionCol; 36c2f8a3c4SAnna Dabrowska 37c2f8a3c4SAnna Dabrowska /** 38c2f8a3c4SAnna Dabrowska * @param $sqlite 393449f9ceSAnna Dabrowska * @param string $id 403449f9ceSAnna Dabrowska * @param int $rev 41c2f8a3c4SAnna Dabrowska */ 423449f9ceSAnna Dabrowska public function __construct($sqlite, $id, $rev) 43c2f8a3c4SAnna Dabrowska { 44c2f8a3c4SAnna Dabrowska $this->sqlite = $sqlite; 45c2f8a3c4SAnna Dabrowska $this->id = $id; 46c2f8a3c4SAnna Dabrowska $this->rev = $rev; 47c2f8a3c4SAnna Dabrowska 48e7259784SAnna Dabrowska $this->schema = new Schema('structpublish'); 49e7259784SAnna Dabrowska $this->statusCol = $this->schema->findColumn('status'); 50e7259784SAnna Dabrowska $this->versionCol = $this->schema->findColumn('version'); 51e7259784SAnna Dabrowska $this->userCol = $this->schema->findColumn('user'); 52e7259784SAnna Dabrowska $this->dateCol = $this->schema->findColumn('date'); 53e7259784SAnna Dabrowska $this->revisionCol = $this->schema->findColumn('revision'); 543449f9ceSAnna Dabrowska 55e394901aSAnna Dabrowska /** @var Value[] $values */ 5651066f27SAnna Dabrowska $values = $this->getCoreData('revision=' . $this->rev); 57e394901aSAnna Dabrowska 58e394901aSAnna Dabrowska if (!empty($values)) { 59e7259784SAnna Dabrowska $this->status = $values[$this->statusCol->getColref() - 1]->getRawValue(); 60e7259784SAnna Dabrowska $this->version = $values[$this->versionCol->getColref() - 1]->getRawValue(); 61e7259784SAnna Dabrowska $this->user = $values[$this->userCol->getColref() - 1]->getRawValue(); 62e7259784SAnna Dabrowska $this->date = $values[$this->dateCol->getColref() - 1]->getRawValue(); 633449f9ceSAnna Dabrowska } 64c2f8a3c4SAnna Dabrowska } 65c2f8a3c4SAnna Dabrowska 66c2f8a3c4SAnna Dabrowska public function save() 67c2f8a3c4SAnna Dabrowska { 68e394901aSAnna Dabrowska // drafts reference the latest version 69e394901aSAnna Dabrowska if ($this->status === self::STATUS_DRAFT) { 70e394901aSAnna Dabrowska //FIXME no rev yet 71e394901aSAnna Dabrowska $this->setVersion($this->getVersion()); 72e394901aSAnna Dabrowska } 73e394901aSAnna Dabrowska 743449f9ceSAnna Dabrowska // TODO reset publish status of older revisions 753449f9ceSAnna Dabrowska 76e394901aSAnna Dabrowska $this->updateCoreData($this->id); 77c2f8a3c4SAnna Dabrowska } 78c2f8a3c4SAnna Dabrowska 79c2f8a3c4SAnna Dabrowska /** 803449f9ceSAnna Dabrowska * @return int 81c2f8a3c4SAnna Dabrowska */ 82c2f8a3c4SAnna Dabrowska public function getVersion() 83c2f8a3c4SAnna Dabrowska { 843231ebaeSAnna Dabrowska return (int)$this->version; 85c2f8a3c4SAnna Dabrowska } 86c2f8a3c4SAnna Dabrowska 87c2f8a3c4SAnna Dabrowska /** 883449f9ceSAnna Dabrowska * @param int $version 89c2f8a3c4SAnna Dabrowska */ 90c2f8a3c4SAnna Dabrowska public function setVersion($version): void 91c2f8a3c4SAnna Dabrowska { 92c2f8a3c4SAnna Dabrowska $this->version = $version; 93c2f8a3c4SAnna Dabrowska } 94c2f8a3c4SAnna Dabrowska 95c2f8a3c4SAnna Dabrowska /** 963449f9ceSAnna Dabrowska * @return int 97c2f8a3c4SAnna Dabrowska */ 98c2f8a3c4SAnna Dabrowska public function getRev() 99c2f8a3c4SAnna Dabrowska { 100c2f8a3c4SAnna Dabrowska return $this->rev; 101c2f8a3c4SAnna Dabrowska } 102c2f8a3c4SAnna Dabrowska 103c2f8a3c4SAnna Dabrowska /** 1043449f9ceSAnna Dabrowska * @param int $rev 105c2f8a3c4SAnna Dabrowska */ 106c2f8a3c4SAnna Dabrowska public function setRev($rev): void 107c2f8a3c4SAnna Dabrowska { 108c2f8a3c4SAnna Dabrowska $this->rev = $rev; 109c2f8a3c4SAnna Dabrowska } 110c2f8a3c4SAnna Dabrowska 111c2f8a3c4SAnna Dabrowska /** 1123449f9ceSAnna Dabrowska * @return string 113c2f8a3c4SAnna Dabrowska */ 114c2f8a3c4SAnna Dabrowska public function getStatus() 115c2f8a3c4SAnna Dabrowska { 116e394901aSAnna Dabrowska return $this->status; 117c2f8a3c4SAnna Dabrowska } 118c2f8a3c4SAnna Dabrowska 119c2f8a3c4SAnna Dabrowska /** 1203449f9ceSAnna Dabrowska * @param string $status 121c2f8a3c4SAnna Dabrowska */ 122c2f8a3c4SAnna Dabrowska public function setStatus($status): void 123c2f8a3c4SAnna Dabrowska { 124c2f8a3c4SAnna Dabrowska $this->status = $status; 125c2f8a3c4SAnna Dabrowska } 126c2f8a3c4SAnna Dabrowska 127c2f8a3c4SAnna Dabrowska /** 1283449f9ceSAnna Dabrowska * @return string 129c2f8a3c4SAnna Dabrowska */ 130c2f8a3c4SAnna Dabrowska public function getUser() 131c2f8a3c4SAnna Dabrowska { 132c2f8a3c4SAnna Dabrowska return $this->user; 133c2f8a3c4SAnna Dabrowska } 134c2f8a3c4SAnna Dabrowska 135c2f8a3c4SAnna Dabrowska /** 1363449f9ceSAnna Dabrowska * @param string $user 137c2f8a3c4SAnna Dabrowska */ 138c2f8a3c4SAnna Dabrowska public function setUser($user): void 139c2f8a3c4SAnna Dabrowska { 140c2f8a3c4SAnna Dabrowska $this->user = $user; 141c2f8a3c4SAnna Dabrowska } 1423449f9ceSAnna Dabrowska 143e394901aSAnna Dabrowska public function getDate() 144e394901aSAnna Dabrowska { 145e394901aSAnna Dabrowska return $this->date; 146e394901aSAnna Dabrowska } 147e394901aSAnna Dabrowska 148e394901aSAnna Dabrowska public function setDate($time) 149e394901aSAnna Dabrowska { 150e394901aSAnna Dabrowska $this->date = date('Y-m-d', $time); 151e394901aSAnna Dabrowska } 152e394901aSAnna Dabrowska 1533449f9ceSAnna Dabrowska /** 1543449f9ceSAnna Dabrowska * Update publish status in the core table 1553449f9ceSAnna Dabrowska */ 156e394901aSAnna Dabrowska protected function updateCoreData($pid, $rid = 0) 1573449f9ceSAnna Dabrowska { 158e394901aSAnna Dabrowska $data = [ 159e394901aSAnna Dabrowska 'status' => $this->status, 160e394901aSAnna Dabrowska 'user' => $this->user, 161e394901aSAnna Dabrowska 'date' => $this->date, 162e394901aSAnna Dabrowska 'revision' => $this->rev, 163e394901aSAnna Dabrowska 'version' => $this->version, 164e394901aSAnna Dabrowska ]; 1653231ebaeSAnna Dabrowska $schema = new Schema('structpublish', 0); 1663231ebaeSAnna Dabrowska $access = new AccessTableStructpublish($schema, $pid, 0, $rid); 167e394901aSAnna Dabrowska $access->saveData($data); 168e394901aSAnna Dabrowska } 169e394901aSAnna Dabrowska 170e7259784SAnna Dabrowska public function getCoreData($andFilter = '') 171e394901aSAnna Dabrowska { 172e394901aSAnna Dabrowska $lines = [ 173e394901aSAnna Dabrowska 'schema: structpublish', 174e394901aSAnna Dabrowska 'cols: *', 175e394901aSAnna Dabrowska 'filter: %pageid% = $ID$' 176e394901aSAnna Dabrowska ]; 177e7259784SAnna Dabrowska 178e7259784SAnna Dabrowska if ($andFilter) { 179e7259784SAnna Dabrowska $lines[] = 'filter: ' . $andFilter; 180e7259784SAnna Dabrowska } 181e7259784SAnna Dabrowska 182e394901aSAnna Dabrowska $parser = new ConfigParser($lines); 183e394901aSAnna Dabrowska $config = $parser->getConfig(); 184*40f4519bSAnna Dabrowska $search = new SearchConfig($config, $this->sqlite); 185e394901aSAnna Dabrowska $data = $search->execute(); 186e394901aSAnna Dabrowska if (!empty($data)) { 18751066f27SAnna Dabrowska // FIXME 188e394901aSAnna Dabrowska return $data[array_key_last($data)]; 189e394901aSAnna Dabrowska } 190e394901aSAnna Dabrowska return []; 1913449f9ceSAnna Dabrowska } 192e7259784SAnna Dabrowska 193e7259784SAnna Dabrowska public function getLatestPublished() 194e7259784SAnna Dabrowska { 195e7259784SAnna Dabrowska return $this->getCoreData('status=' . self::STATUS_PUBLISHED); 196e7259784SAnna Dabrowska } 197e7259784SAnna Dabrowska 198e7259784SAnna Dabrowska public function getLatestPublishedRev() 199e7259784SAnna Dabrowska { 200e7259784SAnna Dabrowska return $this->getLatestPublished()[$this->revisionCol->getColref() - 1]->getRawValue(); 201e7259784SAnna Dabrowska } 202c2f8a3c4SAnna Dabrowska} 203