13b7236c0SAnna Dabrowska<?php 23b7236c0SAnna Dabrowska 3*9ab8cbaeSanndause dokuwiki\Extension\Plugin; 43b7236c0SAnna Dabrowskause dokuwiki\plugin\struct\meta\Assignments; 53b7236c0SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Constants; 63b7236c0SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision; 73b7236c0SAnna Dabrowska 83b7236c0SAnna Dabrowska/** 93b7236c0SAnna Dabrowska * DokuWiki Plugin structpublish (Helper Component) 103b7236c0SAnna Dabrowska * 113b7236c0SAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 123b7236c0SAnna Dabrowska * @author Anna Dabrowska <dokuwiki@cosmocode.de> 133b7236c0SAnna Dabrowska */ 14*9ab8cbaeSanndaclass helper_plugin_structpublish_publish extends Plugin 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 3631e730e1SAnna Dabrowska if (!$this->dbHelper->checkAccess($ID, [$action])) { 373b7236c0SAnna Dabrowska throw new \Exception('User may not ' . $action); 383b7236c0SAnna Dabrowska } 393b7236c0SAnna Dabrowska 40b476f81dSAnna Dabrowska $revision = new Revision($ID, $INFO['currentrev']); 413b7236c0SAnna Dabrowska 423b7236c0SAnna Dabrowska if ($action === Constants::ACTION_PUBLISH) { 433b7236c0SAnna Dabrowska $revision->setVersion($newversion); 443b7236c0SAnna Dabrowska } 453b7236c0SAnna Dabrowska $revision->setUser($_SERVER['REMOTE_USER']); 463b7236c0SAnna Dabrowska $revision->setStatus(Constants::transitionBy($action)); 473b7236c0SAnna Dabrowska $revision->setTimestamp(time()); 483b7236c0SAnna Dabrowska $revision->save(); 493b7236c0SAnna Dabrowska 503b7236c0SAnna Dabrowska if ($action === Constants::ACTION_PUBLISH) { 513b7236c0SAnna Dabrowska $this->updateSchemaData(); 523b7236c0SAnna Dabrowska } 53a42bec4dSAnna Dabrowska 54a42bec4dSAnna Dabrowska return $revision; 553b7236c0SAnna Dabrowska } 563b7236c0SAnna Dabrowska 573b7236c0SAnna Dabrowska /** 583b7236c0SAnna Dabrowska * Set "published" status in all assigned schemas 593b7236c0SAnna Dabrowska * 603b7236c0SAnna Dabrowska * @return void 613b7236c0SAnna Dabrowska */ 623b7236c0SAnna Dabrowska protected function updateSchemaData() 633b7236c0SAnna Dabrowska { 643b7236c0SAnna Dabrowska global $ID; 653b7236c0SAnna Dabrowska global $INFO; 663b7236c0SAnna Dabrowska 673b7236c0SAnna Dabrowska $schemaAssignments = Assignments::getInstance(); 683b7236c0SAnna Dabrowska $tables = $schemaAssignments->getPageAssignments($ID); 693b7236c0SAnna Dabrowska 703b7236c0SAnna Dabrowska if (empty($tables)) { 713b7236c0SAnna Dabrowska return; 723b7236c0SAnna Dabrowska } 733b7236c0SAnna Dabrowska 743b7236c0SAnna Dabrowska $sqlite = $this->dbHelper->getDB(); 753b7236c0SAnna Dabrowska 763b7236c0SAnna Dabrowska foreach ($tables as $table) { 77f1c406c2SAnna Dabrowska // unpublish earlier revisions 78f1c406c2SAnna Dabrowska $sqlite->query("UPDATE data_$table SET published = 0 WHERE pid = ?", [$ID]); 79f1c406c2SAnna Dabrowska $sqlite->query("UPDATE multi_$table SET published = 0 WHERE pid = ?", [$ID]); 80f1c406c2SAnna Dabrowska 81f1c406c2SAnna Dabrowska // publish the current revision 8231e730e1SAnna Dabrowska $sqlite->query( 8331e730e1SAnna Dabrowska "UPDATE data_$table SET published = 1 WHERE pid = ? AND rev = ?", 8431e730e1SAnna Dabrowska [$ID, $INFO['currentrev']] 8531e730e1SAnna Dabrowska ); 8631e730e1SAnna Dabrowska $sqlite->query( 8731e730e1SAnna Dabrowska "UPDATE multi_$table SET published = 1 WHERE pid = ? AND rev = ?", 8831e730e1SAnna Dabrowska [$ID, $INFO['currentrev']] 8931e730e1SAnna Dabrowska ); 903b7236c0SAnna Dabrowska } 913b7236c0SAnna Dabrowska } 923b7236c0SAnna Dabrowska} 93