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