13b7236c0SAnna Dabrowska<?php 23b7236c0SAnna Dabrowska 33b7236c0SAnna Dabrowskause dokuwiki\plugin\struct\meta\Assignments; 43b7236c0SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Constants; 53b7236c0SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision; 63b7236c0SAnna Dabrowska 73b7236c0SAnna Dabrowska/** 83b7236c0SAnna Dabrowska * DokuWiki Plugin structpublish (Helper Component) 93b7236c0SAnna Dabrowska * 103b7236c0SAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 113b7236c0SAnna Dabrowska * @author Anna Dabrowska <dokuwiki@cosmocode.de> 123b7236c0SAnna Dabrowska */ 133b7236c0SAnna Dabrowskaclass helper_plugin_structpublish_publish extends DokuWiki_Plugin 143b7236c0SAnna Dabrowska{ 153b7236c0SAnna Dabrowska /** @var helper_plugin_structpublish_db */ 163b7236c0SAnna Dabrowska protected $dbHelper; 173b7236c0SAnna Dabrowska 183b7236c0SAnna Dabrowska public function __construct() 193b7236c0SAnna Dabrowska { 203b7236c0SAnna Dabrowska $this->dbHelper = plugin_load('helper', 'structpublish_db'); 213b7236c0SAnna Dabrowska } 223b7236c0SAnna Dabrowska 233b7236c0SAnna Dabrowska /** 243b7236c0SAnna Dabrowska * Save publish data 253b7236c0SAnna Dabrowska * 263b7236c0SAnna Dabrowska * @param string $action 27a42bec4dSAnna Dabrowska * @return Revision 283b7236c0SAnna Dabrowska * @throws Exception 293b7236c0SAnna Dabrowska */ 303b7236c0SAnna Dabrowska public function saveRevision($action, $newversion = '') 313b7236c0SAnna Dabrowska { 323b7236c0SAnna Dabrowska global $ID; 333b7236c0SAnna Dabrowska global $INFO; 343b7236c0SAnna Dabrowska 35*31e730e1SAnna Dabrowska if (!$this->dbHelper->checkAccess($ID, [$action])) { 363b7236c0SAnna Dabrowska throw new \Exception('User may not ' . $action); 373b7236c0SAnna Dabrowska } 383b7236c0SAnna Dabrowska 39b476f81dSAnna Dabrowska $revision = new Revision($ID, $INFO['currentrev']); 403b7236c0SAnna Dabrowska 413b7236c0SAnna Dabrowska if ($action === Constants::ACTION_PUBLISH) { 423b7236c0SAnna Dabrowska $revision->setVersion($newversion); 433b7236c0SAnna Dabrowska } 443b7236c0SAnna Dabrowska $revision->setUser($_SERVER['REMOTE_USER']); 453b7236c0SAnna Dabrowska $revision->setStatus(Constants::transitionBy($action)); 463b7236c0SAnna Dabrowska $revision->setTimestamp(time()); 473b7236c0SAnna Dabrowska $revision->save(); 483b7236c0SAnna Dabrowska 493b7236c0SAnna Dabrowska if ($action === Constants::ACTION_PUBLISH) { 503b7236c0SAnna Dabrowska $this->updateSchemaData(); 513b7236c0SAnna Dabrowska } 52a42bec4dSAnna Dabrowska 53a42bec4dSAnna Dabrowska return $revision; 543b7236c0SAnna Dabrowska } 553b7236c0SAnna Dabrowska 563b7236c0SAnna Dabrowska /** 573b7236c0SAnna Dabrowska * Set "published" status in all assigned schemas 583b7236c0SAnna Dabrowska * 593b7236c0SAnna Dabrowska * @return void 603b7236c0SAnna Dabrowska */ 613b7236c0SAnna Dabrowska protected function updateSchemaData() 623b7236c0SAnna Dabrowska { 633b7236c0SAnna Dabrowska global $ID; 643b7236c0SAnna Dabrowska global $INFO; 653b7236c0SAnna Dabrowska 663b7236c0SAnna Dabrowska $schemaAssignments = Assignments::getInstance(); 673b7236c0SAnna Dabrowska $tables = $schemaAssignments->getPageAssignments($ID); 683b7236c0SAnna Dabrowska 693b7236c0SAnna Dabrowska if (empty($tables)) { 703b7236c0SAnna Dabrowska return; 713b7236c0SAnna Dabrowska } 723b7236c0SAnna Dabrowska 733b7236c0SAnna Dabrowska $sqlite = $this->dbHelper->getDB(); 743b7236c0SAnna Dabrowska 753b7236c0SAnna Dabrowska foreach ($tables as $table) { 76f1c406c2SAnna Dabrowska // unpublish earlier revisions 77f1c406c2SAnna Dabrowska $sqlite->query("UPDATE data_$table SET published = 0 WHERE pid = ?", [$ID]); 78f1c406c2SAnna Dabrowska $sqlite->query("UPDATE multi_$table SET published = 0 WHERE pid = ?", [$ID]); 79f1c406c2SAnna Dabrowska 80f1c406c2SAnna Dabrowska // publish the current revision 81*31e730e1SAnna Dabrowska $sqlite->query( 82*31e730e1SAnna Dabrowska "UPDATE data_$table SET published = 1 WHERE pid = ? AND rev = ?", 83*31e730e1SAnna Dabrowska [$ID, $INFO['currentrev']] 84*31e730e1SAnna Dabrowska ); 85*31e730e1SAnna Dabrowska $sqlite->query( 86*31e730e1SAnna Dabrowska "UPDATE multi_$table SET published = 1 WHERE pid = ? AND rev = ?", 87*31e730e1SAnna Dabrowska [$ID, $INFO['currentrev']] 88*31e730e1SAnna Dabrowska ); 893b7236c0SAnna Dabrowska } 903b7236c0SAnna Dabrowska } 913b7236c0SAnna Dabrowska} 92