xref: /plugin/structpublish/helper/publish.php (revision 31e730e145521fb7010758415a11c928f44439b8)
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