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'; 13*3231ebaeSAnna Dabrowska const STATUS_APPROVED = 'approved'; 14c2f8a3c4SAnna Dabrowska const STATUS_PUBLISHED = 'published'; 15c2f8a3c4SAnna Dabrowska 16e394901aSAnna Dabrowska /** @var \helper_plugin_sqlite */ 17c2f8a3c4SAnna Dabrowska protected $sqlite; 183449f9ceSAnna Dabrowska protected $schemas; 19c2f8a3c4SAnna Dabrowska protected $id; 20c2f8a3c4SAnna Dabrowska protected $rev; 21c2f8a3c4SAnna Dabrowska protected $status; 22e394901aSAnna Dabrowska protected $version; 23c2f8a3c4SAnna Dabrowska protected $user; 24e394901aSAnna Dabrowska protected $date; 25c2f8a3c4SAnna Dabrowska 26c2f8a3c4SAnna Dabrowska /** 27c2f8a3c4SAnna Dabrowska * @param $sqlite 283449f9ceSAnna Dabrowska * @param string $id 293449f9ceSAnna Dabrowska * @param int $rev 30c2f8a3c4SAnna Dabrowska */ 313449f9ceSAnna Dabrowska public function __construct($sqlite, $id, $rev) 32c2f8a3c4SAnna Dabrowska { 33c2f8a3c4SAnna Dabrowska $this->sqlite = $sqlite; 34c2f8a3c4SAnna Dabrowska $this->id = $id; 35c2f8a3c4SAnna Dabrowska $this->rev = $rev; 36c2f8a3c4SAnna Dabrowska 37e394901aSAnna Dabrowska $schema = new Schema('structpublish'); 38e394901aSAnna Dabrowska $statusCol = $schema->findColumn('status'); 39e394901aSAnna Dabrowska $versionCol = $schema->findColumn('version'); 40e394901aSAnna Dabrowska $userCol = $schema->findColumn('user'); 41e394901aSAnna Dabrowska $dateCol = $schema->findColumn('date'); 423449f9ceSAnna Dabrowska 43e394901aSAnna Dabrowska /** @var Value[] $values */ 44e394901aSAnna Dabrowska $values = $this->getCoreData($id); 45e394901aSAnna Dabrowska 46e394901aSAnna Dabrowska if (!empty($values)) { 47e394901aSAnna Dabrowska $this->status = $values[$statusCol->getColref() - 1]->getRawValue(); 48e394901aSAnna Dabrowska $this->version = $values[$versionCol->getColref() - 1]->getRawValue(); 49e394901aSAnna Dabrowska $this->user = $values[$userCol->getColref() - 1]->getRawValue(); 50e394901aSAnna Dabrowska $this->date = $values[$dateCol->getColref() - 1]->getRawValue(); 513449f9ceSAnna Dabrowska } 52c2f8a3c4SAnna Dabrowska } 53c2f8a3c4SAnna Dabrowska 54c2f8a3c4SAnna Dabrowska public function save() 55c2f8a3c4SAnna Dabrowska { 56e394901aSAnna Dabrowska // drafts reference the latest version 57e394901aSAnna Dabrowska if ($this->status === self::STATUS_DRAFT) { 58e394901aSAnna Dabrowska //FIXME no rev yet 59e394901aSAnna Dabrowska $this->setVersion($this->getVersion()); 60e394901aSAnna Dabrowska } 61e394901aSAnna Dabrowska 623449f9ceSAnna Dabrowska // TODO reset publish status of older revisions 633449f9ceSAnna Dabrowska 64e394901aSAnna Dabrowska $this->updateCoreData($this->id); 65c2f8a3c4SAnna Dabrowska } 66c2f8a3c4SAnna Dabrowska 67c2f8a3c4SAnna Dabrowska /** 683449f9ceSAnna Dabrowska * @return int 69c2f8a3c4SAnna Dabrowska */ 70c2f8a3c4SAnna Dabrowska public function getVersion() 71c2f8a3c4SAnna Dabrowska { 72*3231ebaeSAnna Dabrowska return (int)$this->version; 73c2f8a3c4SAnna Dabrowska } 74c2f8a3c4SAnna Dabrowska 75c2f8a3c4SAnna Dabrowska /** 763449f9ceSAnna Dabrowska * @param int $version 77c2f8a3c4SAnna Dabrowska */ 78c2f8a3c4SAnna Dabrowska public function setVersion($version): void 79c2f8a3c4SAnna Dabrowska { 80c2f8a3c4SAnna Dabrowska $this->version = $version; 81c2f8a3c4SAnna Dabrowska } 82c2f8a3c4SAnna Dabrowska 83c2f8a3c4SAnna Dabrowska /** 843449f9ceSAnna Dabrowska * @return int 85c2f8a3c4SAnna Dabrowska */ 86c2f8a3c4SAnna Dabrowska public function getRev() 87c2f8a3c4SAnna Dabrowska { 88c2f8a3c4SAnna Dabrowska return $this->rev; 89c2f8a3c4SAnna Dabrowska } 90c2f8a3c4SAnna Dabrowska 91c2f8a3c4SAnna Dabrowska /** 923449f9ceSAnna Dabrowska * @param int $rev 93c2f8a3c4SAnna Dabrowska */ 94c2f8a3c4SAnna Dabrowska public function setRev($rev): void 95c2f8a3c4SAnna Dabrowska { 96c2f8a3c4SAnna Dabrowska $this->rev = $rev; 97c2f8a3c4SAnna Dabrowska } 98c2f8a3c4SAnna Dabrowska 99c2f8a3c4SAnna Dabrowska /** 1003449f9ceSAnna Dabrowska * @return string 101c2f8a3c4SAnna Dabrowska */ 102c2f8a3c4SAnna Dabrowska public function getStatus() 103c2f8a3c4SAnna Dabrowska { 104e394901aSAnna Dabrowska return $this->status; 105c2f8a3c4SAnna Dabrowska } 106c2f8a3c4SAnna Dabrowska 107c2f8a3c4SAnna Dabrowska /** 1083449f9ceSAnna Dabrowska * @param string $status 109c2f8a3c4SAnna Dabrowska */ 110c2f8a3c4SAnna Dabrowska public function setStatus($status): void 111c2f8a3c4SAnna Dabrowska { 112c2f8a3c4SAnna Dabrowska $this->status = $status; 113c2f8a3c4SAnna Dabrowska } 114c2f8a3c4SAnna Dabrowska 115c2f8a3c4SAnna Dabrowska /** 1163449f9ceSAnna Dabrowska * @return string 117c2f8a3c4SAnna Dabrowska */ 118c2f8a3c4SAnna Dabrowska public function getUser() 119c2f8a3c4SAnna Dabrowska { 120c2f8a3c4SAnna Dabrowska return $this->user; 121c2f8a3c4SAnna Dabrowska } 122c2f8a3c4SAnna Dabrowska 123c2f8a3c4SAnna Dabrowska /** 1243449f9ceSAnna Dabrowska * @param string $user 125c2f8a3c4SAnna Dabrowska */ 126c2f8a3c4SAnna Dabrowska public function setUser($user): void 127c2f8a3c4SAnna Dabrowska { 128c2f8a3c4SAnna Dabrowska $this->user = $user; 129c2f8a3c4SAnna Dabrowska } 1303449f9ceSAnna Dabrowska 131e394901aSAnna Dabrowska public function getDate() 132e394901aSAnna Dabrowska { 133e394901aSAnna Dabrowska return $this->date; 134e394901aSAnna Dabrowska } 135e394901aSAnna Dabrowska 136e394901aSAnna Dabrowska public function setDate($time) 137e394901aSAnna Dabrowska { 138e394901aSAnna Dabrowska $this->date = date('Y-m-d', $time); 139e394901aSAnna Dabrowska } 140e394901aSAnna Dabrowska 1413449f9ceSAnna Dabrowska /** 1423449f9ceSAnna Dabrowska * Update publish status in the core table 1433449f9ceSAnna Dabrowska */ 144e394901aSAnna Dabrowska protected function updateCoreData($pid, $rid = 0) 1453449f9ceSAnna Dabrowska { 146e394901aSAnna Dabrowska $data = [ 147e394901aSAnna Dabrowska 'status' => $this->status, 148e394901aSAnna Dabrowska 'user' => $this->user, 149e394901aSAnna Dabrowska 'date' => $this->date, 150e394901aSAnna Dabrowska 'revision' => $this->rev, 151e394901aSAnna Dabrowska 'version' => $this->version, 152e394901aSAnna Dabrowska ]; 153*3231ebaeSAnna Dabrowska $schema = new Schema('structpublish', 0); 154*3231ebaeSAnna Dabrowska $access = new AccessTableStructpublish($schema, $pid, 0, $rid); 155e394901aSAnna Dabrowska $access->saveData($data); 156e394901aSAnna Dabrowska } 157e394901aSAnna Dabrowska 158e394901aSAnna Dabrowska public function getCoreData($id) 159e394901aSAnna Dabrowska { 160e394901aSAnna Dabrowska $lines = [ 161e394901aSAnna Dabrowska 'schema: structpublish', 162e394901aSAnna Dabrowska 'cols: *', 163e394901aSAnna Dabrowska 'filter: %pageid% = $ID$' 164e394901aSAnna Dabrowska ]; 165e394901aSAnna Dabrowska $parser = new ConfigParser($lines); 166e394901aSAnna Dabrowska $config = $parser->getConfig(); 167e394901aSAnna Dabrowska $search = new SearchConfig($config); 168e394901aSAnna Dabrowska $data = $search->execute(); 169e394901aSAnna Dabrowska if (!empty($data)) { 170e394901aSAnna Dabrowska return $data[array_key_last($data)]; 171e394901aSAnna Dabrowska } 172e394901aSAnna Dabrowska return []; 1733449f9ceSAnna Dabrowska } 174c2f8a3c4SAnna Dabrowska} 175