xref: /plugin/structpublish/action/publish.php (revision 8d2065f7b2b1f3b8d189ad26587e4daa79a85afd)
1<?php
2
3use dokuwiki\plugin\structpublish\meta\Revision;
4
5class action_plugin_structpublish_publish extends DokuWiki_Action_Plugin
6{
7    /** @var \helper_plugin_structpublish_permissions */
8    protected $permissionsHelper;
9
10    /**
11     * @inheritDoc
12     */
13    public function register(Doku_Event_Handler $controller)
14    {
15        $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handleApprove');
16        $controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handlePublish');
17    }
18
19    public function handlePublish(Doku_Event $event)
20    {
21        if ($event->data != 'show') return;
22
23        global $INPUT;
24        $in = $INPUT->arr('structpublish');
25        if (!$in || !isset($in[\helper_plugin_structpublish_permissions::ACTION_PUBLISH])) {
26            return;
27        }
28
29        // FIXME prevent bumping published version
30
31        $this->permissionsHelper = plugin_load('helper', 'structpublish_permissions');
32
33        global $ID;
34        global $INFO;
35        $sqlite = $this->permissionsHelper->getDb();
36        $revision = new Revision($sqlite, $ID, $INFO['currentrev']);
37        // TODO do not autoincrement version, make it a string
38        $revision->setVersion($revision->getVersion() + 1);
39        $revision->setUser($_SERVER['REMOTE_USER']);
40        $revision->setStatus(Revision::STATUS_PUBLISHED);
41        $revision->setDate(time());
42
43        $revision->save();
44    }
45
46    public function handleApprove(Doku_Event $event)
47    {
48        if ($event->data != 'show') return;
49
50        global $INPUT;
51        $in = $INPUT->arr('structpublish');
52        if (!$in || !isset($in[\helper_plugin_structpublish_permissions::ACTION_APPROVE])) {
53            return;
54        }
55
56        $this->permissionsHelper = plugin_load('helper', 'structpublish_permissions');
57
58        global $ID;
59        global $INFO;
60        $sqlite = $this->permissionsHelper->getDb();
61        $revision = new Revision($sqlite, $ID, $INFO['currentrev']);
62        $revision->setVersion($revision->getVersion());
63        $revision->setUser($_SERVER['REMOTE_USER']);
64        $revision->setStatus(Revision::STATUS_APPROVED);
65        $revision->setDate(time());
66
67        $revision->save();
68    }
69}
70