1c2f8a3c4SAnna Dabrowska<?php 2c2f8a3c4SAnna Dabrowska 3c2f8a3c4SAnna Dabrowskanamespace dokuwiki\plugin\structpublish\meta; 4c2f8a3c4SAnna Dabrowska 5*e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\AccessTable; 6*e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\AccessTableSerial; 7*e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\ConfigParser; 8*e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\Schema; 9*e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\SearchConfig; 10*e394901aSAnna Dabrowskause dokuwiki\plugin\struct\meta\Value; 11*e394901aSAnna Dabrowska 12c2f8a3c4SAnna Dabrowskaclass Revision 13c2f8a3c4SAnna Dabrowska{ 14c2f8a3c4SAnna Dabrowska const STATUS_DRAFT = 'draft'; 15*e394901aSAnna Dabrowska const STATUS_REVIEWED = 'reviewed'; 16c2f8a3c4SAnna Dabrowska const STATUS_PUBLISHED = 'published'; 17c2f8a3c4SAnna Dabrowska 18*e394901aSAnna Dabrowska /** @var \helper_plugin_sqlite */ 19c2f8a3c4SAnna Dabrowska protected $sqlite; 203449f9ceSAnna Dabrowska protected $schemas; 21c2f8a3c4SAnna Dabrowska protected $id; 22c2f8a3c4SAnna Dabrowska protected $rev; 23c2f8a3c4SAnna Dabrowska protected $status; 24*e394901aSAnna Dabrowska protected $version; 25c2f8a3c4SAnna Dabrowska protected $user; 26*e394901aSAnna Dabrowska protected $date; 27c2f8a3c4SAnna Dabrowska 28c2f8a3c4SAnna Dabrowska /** 29c2f8a3c4SAnna Dabrowska * @param $sqlite 303449f9ceSAnna Dabrowska * @param string $id 313449f9ceSAnna Dabrowska * @param int $rev 32c2f8a3c4SAnna Dabrowska */ 333449f9ceSAnna Dabrowska public function __construct($sqlite, $id, $rev) 34c2f8a3c4SAnna Dabrowska { 35c2f8a3c4SAnna Dabrowska $this->sqlite = $sqlite; 36c2f8a3c4SAnna Dabrowska $this->id = $id; 37c2f8a3c4SAnna Dabrowska $this->rev = $rev; 38c2f8a3c4SAnna Dabrowska 39*e394901aSAnna Dabrowska $schema = new Schema('structpublish'); 40*e394901aSAnna Dabrowska $statusCol = $schema->findColumn('status'); 41*e394901aSAnna Dabrowska $versionCol = $schema->findColumn('version'); 42*e394901aSAnna Dabrowska $userCol = $schema->findColumn('user'); 43*e394901aSAnna Dabrowska $dateCol = $schema->findColumn('date'); 443449f9ceSAnna Dabrowska 45*e394901aSAnna Dabrowska /** @var Value[] $values */ 46*e394901aSAnna Dabrowska $values = $this->getCoreData($id); 47*e394901aSAnna Dabrowska 48*e394901aSAnna Dabrowska if (!empty($values)) { 49*e394901aSAnna Dabrowska $this->status = $values[$statusCol->getColref() - 1]->getRawValue(); 50*e394901aSAnna Dabrowska $this->version = $values[$versionCol->getColref() - 1]->getRawValue(); 51*e394901aSAnna Dabrowska $this->user = $values[$userCol->getColref() - 1]->getRawValue(); 52*e394901aSAnna Dabrowska $this->date = $values[$dateCol->getColref() - 1]->getRawValue(); 533449f9ceSAnna Dabrowska } 54c2f8a3c4SAnna Dabrowska } 55c2f8a3c4SAnna Dabrowska 56c2f8a3c4SAnna Dabrowska public function save() 57c2f8a3c4SAnna Dabrowska { 58*e394901aSAnna Dabrowska // drafts reference the latest version 59*e394901aSAnna Dabrowska if ($this->status === self::STATUS_DRAFT) { 60*e394901aSAnna Dabrowska //FIXME no rev yet 61*e394901aSAnna Dabrowska $this->setVersion($this->getVersion()); 62*e394901aSAnna Dabrowska } 63*e394901aSAnna Dabrowska 643449f9ceSAnna Dabrowska // TODO reset publish status of older revisions 653449f9ceSAnna Dabrowska 66*e394901aSAnna Dabrowska $this->updateCoreData($this->id); 67c2f8a3c4SAnna Dabrowska } 68c2f8a3c4SAnna Dabrowska 69c2f8a3c4SAnna Dabrowska /** 703449f9ceSAnna Dabrowska * @return int 71c2f8a3c4SAnna Dabrowska */ 72c2f8a3c4SAnna Dabrowska public function getVersion() 73c2f8a3c4SAnna Dabrowska { 74c2f8a3c4SAnna Dabrowska return $this->version; 75c2f8a3c4SAnna Dabrowska } 76c2f8a3c4SAnna Dabrowska 77c2f8a3c4SAnna Dabrowska /** 783449f9ceSAnna Dabrowska * @param int $version 79c2f8a3c4SAnna Dabrowska */ 80c2f8a3c4SAnna Dabrowska public function setVersion($version): void 81c2f8a3c4SAnna Dabrowska { 82c2f8a3c4SAnna Dabrowska $this->version = $version; 83c2f8a3c4SAnna Dabrowska } 84c2f8a3c4SAnna Dabrowska 85c2f8a3c4SAnna Dabrowska /** 863449f9ceSAnna Dabrowska * @return int 87c2f8a3c4SAnna Dabrowska */ 88c2f8a3c4SAnna Dabrowska public function getRev() 89c2f8a3c4SAnna Dabrowska { 90c2f8a3c4SAnna Dabrowska return $this->rev; 91c2f8a3c4SAnna Dabrowska } 92c2f8a3c4SAnna Dabrowska 93c2f8a3c4SAnna Dabrowska /** 943449f9ceSAnna Dabrowska * @param int $rev 95c2f8a3c4SAnna Dabrowska */ 96c2f8a3c4SAnna Dabrowska public function setRev($rev): void 97c2f8a3c4SAnna Dabrowska { 98c2f8a3c4SAnna Dabrowska $this->rev = $rev; 99c2f8a3c4SAnna Dabrowska } 100c2f8a3c4SAnna Dabrowska 101c2f8a3c4SAnna Dabrowska /** 1023449f9ceSAnna Dabrowska * @return string 103c2f8a3c4SAnna Dabrowska */ 104c2f8a3c4SAnna Dabrowska public function getStatus() 105c2f8a3c4SAnna Dabrowska { 106*e394901aSAnna Dabrowska return $this->status; 107c2f8a3c4SAnna Dabrowska } 108c2f8a3c4SAnna Dabrowska 109c2f8a3c4SAnna Dabrowska /** 1103449f9ceSAnna Dabrowska * @param string $status 111c2f8a3c4SAnna Dabrowska */ 112c2f8a3c4SAnna Dabrowska public function setStatus($status): void 113c2f8a3c4SAnna Dabrowska { 114c2f8a3c4SAnna Dabrowska $this->status = $status; 115c2f8a3c4SAnna Dabrowska } 116c2f8a3c4SAnna Dabrowska 117c2f8a3c4SAnna Dabrowska /** 1183449f9ceSAnna Dabrowska * @return string 119c2f8a3c4SAnna Dabrowska */ 120c2f8a3c4SAnna Dabrowska public function getUser() 121c2f8a3c4SAnna Dabrowska { 122c2f8a3c4SAnna Dabrowska return $this->user; 123c2f8a3c4SAnna Dabrowska } 124c2f8a3c4SAnna Dabrowska 125c2f8a3c4SAnna Dabrowska /** 1263449f9ceSAnna Dabrowska * @param string $user 127c2f8a3c4SAnna Dabrowska */ 128c2f8a3c4SAnna Dabrowska public function setUser($user): void 129c2f8a3c4SAnna Dabrowska { 130c2f8a3c4SAnna Dabrowska $this->user = $user; 131c2f8a3c4SAnna Dabrowska } 1323449f9ceSAnna Dabrowska 133*e394901aSAnna Dabrowska public function getDate() 134*e394901aSAnna Dabrowska { 135*e394901aSAnna Dabrowska return $this->date; 136*e394901aSAnna Dabrowska } 137*e394901aSAnna Dabrowska 138*e394901aSAnna Dabrowska public function setDate($time) 139*e394901aSAnna Dabrowska { 140*e394901aSAnna Dabrowska $this->date = date('Y-m-d', $time); 141*e394901aSAnna Dabrowska } 142*e394901aSAnna Dabrowska 1433449f9ceSAnna Dabrowska /** 1443449f9ceSAnna Dabrowska * Update publish status in the core table 1453449f9ceSAnna Dabrowska */ 146*e394901aSAnna Dabrowska protected function updateCoreData($pid, $rid = 0) 1473449f9ceSAnna Dabrowska { 148*e394901aSAnna Dabrowska $data = [ 149*e394901aSAnna Dabrowska 'status' => $this->status, 150*e394901aSAnna Dabrowska 'user' => $this->user, 151*e394901aSAnna Dabrowska 'date' => $this->date, 152*e394901aSAnna Dabrowska 'revision' => $this->rev, 153*e394901aSAnna Dabrowska 'version' => $this->version, 154*e394901aSAnna Dabrowska ]; 155*e394901aSAnna Dabrowska $access = AccessTable::getSerialAccess('structpublish', $pid, $rid); 156*e394901aSAnna Dabrowska $access->saveData($data); 157*e394901aSAnna Dabrowska } 158*e394901aSAnna Dabrowska 159*e394901aSAnna Dabrowska public function getCoreData($id) 160*e394901aSAnna Dabrowska { 161*e394901aSAnna Dabrowska $lines = [ 162*e394901aSAnna Dabrowska 'schema: structpublish', 163*e394901aSAnna Dabrowska 'cols: *', 164*e394901aSAnna Dabrowska 'filter: %pageid% = $ID$' 165*e394901aSAnna Dabrowska ]; 166*e394901aSAnna Dabrowska $parser = new ConfigParser($lines); 167*e394901aSAnna Dabrowska $config = $parser->getConfig(); 168*e394901aSAnna Dabrowska $search = new SearchConfig($config); 169*e394901aSAnna Dabrowska $data = $search->execute(); 170*e394901aSAnna Dabrowska if (!empty($data)) { 171*e394901aSAnna Dabrowska return $data[array_key_last($data)]; 172*e394901aSAnna Dabrowska } 173*e394901aSAnna Dabrowska return []; 1743449f9ceSAnna Dabrowska } 175c2f8a3c4SAnna Dabrowska} 176