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 163b7236c0SAnna Dabrowska /** @var helper_plugin_structpublish_db */ 173b7236c0SAnna Dabrowska protected $dbHelper; 183b7236c0SAnna Dabrowska 193b7236c0SAnna Dabrowska public function __construct() 203b7236c0SAnna Dabrowska { 213b7236c0SAnna Dabrowska $this->dbHelper = plugin_load('helper', 'structpublish_db'); 223b7236c0SAnna Dabrowska } 233b7236c0SAnna Dabrowska 243b7236c0SAnna Dabrowska /** 253b7236c0SAnna Dabrowska * Save publish data 263b7236c0SAnna Dabrowska * 273b7236c0SAnna Dabrowska * @param string $action 28a42bec4dSAnna Dabrowska * @return Revision 293b7236c0SAnna Dabrowska * @throws Exception 303b7236c0SAnna Dabrowska */ 313b7236c0SAnna Dabrowska public function saveRevision($action, $newversion = '') 323b7236c0SAnna Dabrowska { 333b7236c0SAnna Dabrowska global $ID; 343b7236c0SAnna Dabrowska global $INFO; 353b7236c0SAnna Dabrowska 363b7236c0SAnna Dabrowska if ( 373b7236c0SAnna Dabrowska !$this->dbHelper->checkAccess($ID, [$action]) 383b7236c0SAnna Dabrowska ) { 393b7236c0SAnna Dabrowska throw new \Exception('User may not ' . $action); 403b7236c0SAnna Dabrowska } 413b7236c0SAnna Dabrowska 42*b476f81dSAnna Dabrowska $revision = new Revision($ID, $INFO['currentrev']); 433b7236c0SAnna Dabrowska 443b7236c0SAnna Dabrowska if ($action === Constants::ACTION_PUBLISH) { 453b7236c0SAnna Dabrowska $revision->setVersion($newversion); 463b7236c0SAnna Dabrowska } 473b7236c0SAnna Dabrowska $revision->setUser($_SERVER['REMOTE_USER']); 483b7236c0SAnna Dabrowska $revision->setStatus(Constants::transitionBy($action)); 493b7236c0SAnna Dabrowska $revision->setTimestamp(time()); 503b7236c0SAnna Dabrowska $revision->save(); 513b7236c0SAnna Dabrowska 523b7236c0SAnna Dabrowska if ($action === Constants::ACTION_PUBLISH) { 533b7236c0SAnna Dabrowska $this->updateSchemaData(); 543b7236c0SAnna Dabrowska } 55a42bec4dSAnna Dabrowska 56a42bec4dSAnna Dabrowska return $revision; 573b7236c0SAnna Dabrowska } 583b7236c0SAnna Dabrowska 593b7236c0SAnna Dabrowska /** 603b7236c0SAnna Dabrowska * Set "published" status in all assigned schemas 613b7236c0SAnna Dabrowska * 623b7236c0SAnna Dabrowska * @return void 633b7236c0SAnna Dabrowska */ 643b7236c0SAnna Dabrowska protected function updateSchemaData() 653b7236c0SAnna Dabrowska { 663b7236c0SAnna Dabrowska global $ID; 673b7236c0SAnna Dabrowska global $INFO; 683b7236c0SAnna Dabrowska 693b7236c0SAnna Dabrowska $schemaAssignments = Assignments::getInstance(); 703b7236c0SAnna Dabrowska $tables = $schemaAssignments->getPageAssignments($ID); 713b7236c0SAnna Dabrowska 723b7236c0SAnna Dabrowska if (empty($tables)) { 733b7236c0SAnna Dabrowska return; 743b7236c0SAnna Dabrowska } 753b7236c0SAnna Dabrowska 763b7236c0SAnna Dabrowska $sqlite = $this->dbHelper->getDB(); 773b7236c0SAnna Dabrowska 783b7236c0SAnna Dabrowska foreach ($tables as $table) { 79f1c406c2SAnna Dabrowska // unpublish earlier revisions 80f1c406c2SAnna Dabrowska $sqlite->query("UPDATE data_$table SET published = 0 WHERE pid = ?", [$ID]); 81f1c406c2SAnna Dabrowska $sqlite->query("UPDATE multi_$table SET published = 0 WHERE pid = ?", [$ID]); 82f1c406c2SAnna Dabrowska 83f1c406c2SAnna Dabrowska // publish the current revision 843b7236c0SAnna Dabrowska $sqlite->query("UPDATE data_$table SET published = 1 WHERE pid = ? AND rev = ?", 853b7236c0SAnna Dabrowska [$ID, $INFO['currentrev']]); 863b7236c0SAnna Dabrowska $sqlite->query("UPDATE multi_$table SET published = 1 WHERE pid = ? AND rev = ?", 873b7236c0SAnna Dabrowska [$ID, $INFO['currentrev']]); 883b7236c0SAnna Dabrowska } 893b7236c0SAnna Dabrowska } 903b7236c0SAnna Dabrowska} 91