xref: /plugin/structpublish/helper/publish.php (revision a42bec4d89385b31db812c8b46b99cce7509efed)
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
28*a42bec4dSAnna 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
423b7236c0SAnna Dabrowska        $sqlite = $this->dbHelper->getDB();
433b7236c0SAnna Dabrowska        $revision = new Revision($sqlite, $ID, $INFO['currentrev']);
443b7236c0SAnna Dabrowska
453b7236c0SAnna Dabrowska        if ($action === Constants::ACTION_PUBLISH) {
463b7236c0SAnna Dabrowska            $revision->setVersion($newversion);
473b7236c0SAnna Dabrowska        }
483b7236c0SAnna Dabrowska        $revision->setUser($_SERVER['REMOTE_USER']);
493b7236c0SAnna Dabrowska        $revision->setStatus(Constants::transitionBy($action));
503b7236c0SAnna Dabrowska        $revision->setTimestamp(time());
513b7236c0SAnna Dabrowska        $revision->save();
523b7236c0SAnna Dabrowska
533b7236c0SAnna Dabrowska        if ($action === Constants::ACTION_PUBLISH) {
543b7236c0SAnna Dabrowska            $this->updateSchemaData();
553b7236c0SAnna Dabrowska        }
56*a42bec4dSAnna Dabrowska
57*a42bec4dSAnna Dabrowska        return $revision;
583b7236c0SAnna Dabrowska    }
593b7236c0SAnna Dabrowska
603b7236c0SAnna Dabrowska    /**
613b7236c0SAnna Dabrowska     * Set "published" status in all assigned schemas
623b7236c0SAnna Dabrowska     *
633b7236c0SAnna Dabrowska     * @return void
643b7236c0SAnna Dabrowska     */
653b7236c0SAnna Dabrowska    protected function updateSchemaData()
663b7236c0SAnna Dabrowska    {
673b7236c0SAnna Dabrowska        global $ID;
683b7236c0SAnna Dabrowska        global $INFO;
693b7236c0SAnna Dabrowska
703b7236c0SAnna Dabrowska        $schemaAssignments = Assignments::getInstance();
713b7236c0SAnna Dabrowska        $tables = $schemaAssignments->getPageAssignments($ID);
723b7236c0SAnna Dabrowska
733b7236c0SAnna Dabrowska        if (empty($tables)) {
743b7236c0SAnna Dabrowska            return;
753b7236c0SAnna Dabrowska        }
763b7236c0SAnna Dabrowska
773b7236c0SAnna Dabrowska        $sqlite = $this->dbHelper->getDB();
783b7236c0SAnna Dabrowska
793b7236c0SAnna Dabrowska        foreach ($tables as $table) {
80f1c406c2SAnna Dabrowska            // unpublish earlier revisions
81f1c406c2SAnna Dabrowska            $sqlite->query("UPDATE data_$table SET published = 0 WHERE pid = ?", [$ID]);
82f1c406c2SAnna Dabrowska            $sqlite->query("UPDATE multi_$table SET published = 0 WHERE pid = ?", [$ID]);
83f1c406c2SAnna Dabrowska
84f1c406c2SAnna Dabrowska            // publish the current revision
853b7236c0SAnna Dabrowska            $sqlite->query("UPDATE data_$table SET published = 1 WHERE pid = ? AND rev = ?",
863b7236c0SAnna Dabrowska                [$ID, $INFO['currentrev']]);
873b7236c0SAnna Dabrowska            $sqlite->query("UPDATE multi_$table SET published = 1 WHERE pid = ? AND rev = ?",
883b7236c0SAnna Dabrowska                [$ID, $INFO['currentrev']]);
893b7236c0SAnna Dabrowska        }
903b7236c0SAnna Dabrowska    }
913b7236c0SAnna Dabrowska}
92