1*3b7236c0SAnna Dabrowska<?php 2*3b7236c0SAnna Dabrowska 3*3b7236c0SAnna Dabrowskause dokuwiki\plugin\struct\meta\Assignments; 4*3b7236c0SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Constants; 5*3b7236c0SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision; 6*3b7236c0SAnna Dabrowska 7*3b7236c0SAnna Dabrowska/** 8*3b7236c0SAnna Dabrowska * DokuWiki Plugin structpublish (Helper Component) 9*3b7236c0SAnna Dabrowska * 10*3b7236c0SAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 11*3b7236c0SAnna Dabrowska * @author Anna Dabrowska <dokuwiki@cosmocode.de> 12*3b7236c0SAnna Dabrowska */ 13*3b7236c0SAnna Dabrowskaclass helper_plugin_structpublish_publish extends DokuWiki_Plugin 14*3b7236c0SAnna Dabrowska{ 15*3b7236c0SAnna Dabrowska 16*3b7236c0SAnna Dabrowska /** @var helper_plugin_structpublish_db */ 17*3b7236c0SAnna Dabrowska protected $dbHelper; 18*3b7236c0SAnna Dabrowska 19*3b7236c0SAnna Dabrowska public function __construct() 20*3b7236c0SAnna Dabrowska { 21*3b7236c0SAnna Dabrowska $this->dbHelper = plugin_load('helper', 'structpublish_db'); 22*3b7236c0SAnna Dabrowska } 23*3b7236c0SAnna Dabrowska 24*3b7236c0SAnna Dabrowska /** 25*3b7236c0SAnna Dabrowska * Save publish data 26*3b7236c0SAnna Dabrowska * 27*3b7236c0SAnna Dabrowska * @param string $action 28*3b7236c0SAnna Dabrowska * @return void 29*3b7236c0SAnna Dabrowska * @throws Exception 30*3b7236c0SAnna Dabrowska */ 31*3b7236c0SAnna Dabrowska public function saveRevision($action, $newversion = '') 32*3b7236c0SAnna Dabrowska { 33*3b7236c0SAnna Dabrowska global $ID; 34*3b7236c0SAnna Dabrowska global $INFO; 35*3b7236c0SAnna Dabrowska 36*3b7236c0SAnna Dabrowska if ( 37*3b7236c0SAnna Dabrowska !$this->dbHelper->checkAccess($ID, [$action]) 38*3b7236c0SAnna Dabrowska ) { 39*3b7236c0SAnna Dabrowska throw new \Exception('User may not ' . $action); 40*3b7236c0SAnna Dabrowska } 41*3b7236c0SAnna Dabrowska 42*3b7236c0SAnna Dabrowska $sqlite = $this->dbHelper->getDB(); 43*3b7236c0SAnna Dabrowska $revision = new Revision($sqlite, $ID, $INFO['currentrev']); 44*3b7236c0SAnna Dabrowska 45*3b7236c0SAnna Dabrowska if ($action === Constants::ACTION_PUBLISH) { 46*3b7236c0SAnna Dabrowska $revision->setVersion($newversion); 47*3b7236c0SAnna Dabrowska } 48*3b7236c0SAnna Dabrowska $revision->setUser($_SERVER['REMOTE_USER']); 49*3b7236c0SAnna Dabrowska $revision->setStatus(Constants::transitionBy($action)); 50*3b7236c0SAnna Dabrowska $revision->setTimestamp(time()); 51*3b7236c0SAnna Dabrowska $revision->save(); 52*3b7236c0SAnna Dabrowska 53*3b7236c0SAnna Dabrowska if ($action === Constants::ACTION_PUBLISH) { 54*3b7236c0SAnna Dabrowska $this->updateSchemaData(); 55*3b7236c0SAnna Dabrowska } 56*3b7236c0SAnna Dabrowska } 57*3b7236c0SAnna Dabrowska 58*3b7236c0SAnna Dabrowska /** 59*3b7236c0SAnna Dabrowska * Set "published" status in all assigned schemas 60*3b7236c0SAnna Dabrowska * 61*3b7236c0SAnna Dabrowska * @return void 62*3b7236c0SAnna Dabrowska */ 63*3b7236c0SAnna Dabrowska protected function updateSchemaData() 64*3b7236c0SAnna Dabrowska { 65*3b7236c0SAnna Dabrowska global $ID; 66*3b7236c0SAnna Dabrowska global $INFO; 67*3b7236c0SAnna Dabrowska 68*3b7236c0SAnna Dabrowska $schemaAssignments = Assignments::getInstance(); 69*3b7236c0SAnna Dabrowska $tables = $schemaAssignments->getPageAssignments($ID); 70*3b7236c0SAnna Dabrowska 71*3b7236c0SAnna Dabrowska if (empty($tables)) { 72*3b7236c0SAnna Dabrowska return; 73*3b7236c0SAnna Dabrowska } 74*3b7236c0SAnna Dabrowska 75*3b7236c0SAnna Dabrowska $sqlite = $this->dbHelper->getDB(); 76*3b7236c0SAnna Dabrowska 77*3b7236c0SAnna Dabrowska foreach ($tables as $table) { 78*3b7236c0SAnna Dabrowska // TODO unpublish earlier revisions 79*3b7236c0SAnna Dabrowska $sqlite->query("UPDATE data_$table SET published = 1 WHERE pid = ? AND rev = ?", 80*3b7236c0SAnna Dabrowska [$ID, $INFO['currentrev']]); 81*3b7236c0SAnna Dabrowska $sqlite->query("UPDATE multi_$table SET published = 1 WHERE pid = ? AND rev = ?", 82*3b7236c0SAnna Dabrowska [$ID, $INFO['currentrev']]); 83*3b7236c0SAnna Dabrowska } 84*3b7236c0SAnna Dabrowska } 85*3b7236c0SAnna Dabrowska} 86