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