1c2f8a3c4SAnna Dabrowska<?php 2c2f8a3c4SAnna Dabrowska 3c2f8a3c4SAnna Dabrowskanamespace dokuwiki\plugin\structpublish\meta; 4c2f8a3c4SAnna Dabrowska 5c2f8a3c4SAnna Dabrowskaclass Revision 6c2f8a3c4SAnna Dabrowska{ 7c2f8a3c4SAnna Dabrowska const STATUS_DRAFT = 'draft'; 8c2f8a3c4SAnna Dabrowska const STATUS_APPROVED = 'approved'; 9c2f8a3c4SAnna Dabrowska const STATUS_PUBLISHED = 'published'; 10c2f8a3c4SAnna Dabrowska 11c2f8a3c4SAnna Dabrowska protected $sqlite; 12*3449f9ceSAnna Dabrowska protected $schemas; 13c2f8a3c4SAnna Dabrowska protected $id; 14c2f8a3c4SAnna Dabrowska protected $rev; 15c2f8a3c4SAnna Dabrowska protected $status; 16*3449f9ceSAnna Dabrowska protected $version = 0; 17c2f8a3c4SAnna Dabrowska protected $user; 18c2f8a3c4SAnna Dabrowska 19c2f8a3c4SAnna Dabrowska /** 20c2f8a3c4SAnna Dabrowska * @param $sqlite 21*3449f9ceSAnna Dabrowska * @param string $id 22*3449f9ceSAnna Dabrowska * @param int $rev 23c2f8a3c4SAnna Dabrowska */ 24*3449f9ceSAnna Dabrowska public function __construct($sqlite, $id, $rev) 25c2f8a3c4SAnna Dabrowska { 26c2f8a3c4SAnna Dabrowska $this->sqlite = $sqlite; 27c2f8a3c4SAnna Dabrowska $this->id = $id; 28c2f8a3c4SAnna Dabrowska $this->rev = $rev; 29c2f8a3c4SAnna Dabrowska 30*3449f9ceSAnna Dabrowska $sql = 'SELECT * FROM structpublish_revisions WHERE id = ? AND rev = ?'; 31*3449f9ceSAnna Dabrowska $res = $sqlite->query($sql, $id, $rev); 32c2f8a3c4SAnna Dabrowska $vals = $sqlite->res2row($res); 33*3449f9ceSAnna Dabrowska 34*3449f9ceSAnna Dabrowska if (!empty($vals)) { 35*3449f9ceSAnna Dabrowska $this->status = $vals['status']; 36*3449f9ceSAnna Dabrowska $this->version = $vals['version']; 37*3449f9ceSAnna Dabrowska $this->user = $vals['user']; 38*3449f9ceSAnna Dabrowska } 39c2f8a3c4SAnna Dabrowska } 40c2f8a3c4SAnna Dabrowska 41c2f8a3c4SAnna Dabrowska public function save() 42c2f8a3c4SAnna Dabrowska { 43*3449f9ceSAnna Dabrowska // TODO reset publish status of older revisions 44*3449f9ceSAnna Dabrowska $sql = 'REPLACE INTO structpublish_revisions (id, rev, status, version, user) VALUES (?,?,?,?,?)'; 45c2f8a3c4SAnna Dabrowska $res = $this->sqlite->query( 46c2f8a3c4SAnna Dabrowska $sql, 47c2f8a3c4SAnna Dabrowska $this->id, 48c2f8a3c4SAnna Dabrowska $this->rev, 49c2f8a3c4SAnna Dabrowska $this->status, 50c2f8a3c4SAnna Dabrowska $this->version, 51c2f8a3c4SAnna Dabrowska $this->user 52c2f8a3c4SAnna Dabrowska ); 53*3449f9ceSAnna Dabrowska 54*3449f9ceSAnna Dabrowska if ($this->status === self::STATUS_PUBLISHED) { 55*3449f9ceSAnna Dabrowska $this->updateCoreData(); 56*3449f9ceSAnna Dabrowska } 57c2f8a3c4SAnna Dabrowska } 58c2f8a3c4SAnna Dabrowska 59c2f8a3c4SAnna Dabrowska /** 60*3449f9ceSAnna Dabrowska * Returns the latest version for a given id, or 0 61*3449f9ceSAnna Dabrowska * 62*3449f9ceSAnna Dabrowska * @return int 63*3449f9ceSAnna Dabrowska */ 64*3449f9ceSAnna Dabrowska public function getLatestVersion() 65*3449f9ceSAnna Dabrowska { 66*3449f9ceSAnna Dabrowska $sql = 'SELECT MAX(version) AS latest FROM structpublish_revisions WHERE id = ?'; 67*3449f9ceSAnna Dabrowska $res = $this->sqlite->query($sql, $this->id); 68*3449f9ceSAnna Dabrowska $res = $this->sqlite->res2arr($res); 69*3449f9ceSAnna Dabrowska return $res['latest'] ?? 0; 70*3449f9ceSAnna Dabrowska } 71*3449f9ceSAnna Dabrowska 72*3449f9ceSAnna Dabrowska /** 73*3449f9ceSAnna Dabrowska * @return string 74c2f8a3c4SAnna Dabrowska */ 75c2f8a3c4SAnna Dabrowska public function getId() 76c2f8a3c4SAnna Dabrowska { 77c2f8a3c4SAnna Dabrowska return $this->id; 78c2f8a3c4SAnna Dabrowska } 79c2f8a3c4SAnna Dabrowska 80c2f8a3c4SAnna Dabrowska /** 81*3449f9ceSAnna Dabrowska * @return int 82c2f8a3c4SAnna Dabrowska */ 83c2f8a3c4SAnna Dabrowska public function getVersion() 84c2f8a3c4SAnna Dabrowska { 85c2f8a3c4SAnna Dabrowska return $this->version; 86c2f8a3c4SAnna Dabrowska } 87c2f8a3c4SAnna Dabrowska 88c2f8a3c4SAnna Dabrowska /** 89*3449f9ceSAnna Dabrowska * @param int $version 90c2f8a3c4SAnna Dabrowska */ 91c2f8a3c4SAnna Dabrowska public function setVersion($version): void 92c2f8a3c4SAnna Dabrowska { 93c2f8a3c4SAnna Dabrowska $this->version = $version; 94c2f8a3c4SAnna Dabrowska } 95c2f8a3c4SAnna Dabrowska 96c2f8a3c4SAnna Dabrowska /** 97*3449f9ceSAnna Dabrowska * @return int 98c2f8a3c4SAnna Dabrowska */ 99c2f8a3c4SAnna Dabrowska public function getRev() 100c2f8a3c4SAnna Dabrowska { 101c2f8a3c4SAnna Dabrowska return $this->rev; 102c2f8a3c4SAnna Dabrowska } 103c2f8a3c4SAnna Dabrowska 104c2f8a3c4SAnna Dabrowska /** 105*3449f9ceSAnna Dabrowska * @param int $rev 106c2f8a3c4SAnna Dabrowska */ 107c2f8a3c4SAnna Dabrowska public function setRev($rev): void 108c2f8a3c4SAnna Dabrowska { 109c2f8a3c4SAnna Dabrowska $this->rev = $rev; 110c2f8a3c4SAnna Dabrowska } 111c2f8a3c4SAnna Dabrowska 112c2f8a3c4SAnna Dabrowska /** 113*3449f9ceSAnna Dabrowska * @return string 114c2f8a3c4SAnna Dabrowska */ 115c2f8a3c4SAnna Dabrowska public function getStatus() 116c2f8a3c4SAnna Dabrowska { 117c2f8a3c4SAnna Dabrowska return $this->status ?? self::STATUS_DRAFT; 118c2f8a3c4SAnna Dabrowska } 119c2f8a3c4SAnna Dabrowska 120c2f8a3c4SAnna Dabrowska /** 121*3449f9ceSAnna Dabrowska * @param string $status 122c2f8a3c4SAnna Dabrowska */ 123c2f8a3c4SAnna Dabrowska public function setStatus($status): void 124c2f8a3c4SAnna Dabrowska { 125c2f8a3c4SAnna Dabrowska $this->status = $status; 126c2f8a3c4SAnna Dabrowska } 127c2f8a3c4SAnna Dabrowska 128c2f8a3c4SAnna Dabrowska /** 129*3449f9ceSAnna Dabrowska * @return string 130c2f8a3c4SAnna Dabrowska */ 131c2f8a3c4SAnna Dabrowska public function getUser() 132c2f8a3c4SAnna Dabrowska { 133c2f8a3c4SAnna Dabrowska return $this->user; 134c2f8a3c4SAnna Dabrowska } 135c2f8a3c4SAnna Dabrowska 136c2f8a3c4SAnna Dabrowska /** 137*3449f9ceSAnna Dabrowska * @param string $user 138c2f8a3c4SAnna Dabrowska */ 139c2f8a3c4SAnna Dabrowska public function setUser($user): void 140c2f8a3c4SAnna Dabrowska { 141c2f8a3c4SAnna Dabrowska $this->user = $user; 142c2f8a3c4SAnna Dabrowska } 143*3449f9ceSAnna Dabrowska 144*3449f9ceSAnna Dabrowska /** 145*3449f9ceSAnna Dabrowska * Update publish status in the core table 146*3449f9ceSAnna Dabrowska */ 147*3449f9ceSAnna Dabrowska protected function updateCoreData() 148*3449f9ceSAnna Dabrowska { 149*3449f9ceSAnna Dabrowska // FIXME we don't know anything about schemas yet! 150*3449f9ceSAnna Dabrowska// $sql = 'UPDATE data_schema SET published = NULL WHERE id = ?'; 151*3449f9ceSAnna Dabrowska// $this->sqlite->query($sql, $this->id); 152*3449f9ceSAnna Dabrowska } 153c2f8a3c4SAnna Dabrowska} 154