xref: /plugin/structpublish/action/revisions.php (revision 12c71b5626ce64f2ad1efe13981adc19f2a54a11)
1*12c71b56SAnna Dabrowska<?php
2*12c71b56SAnna Dabrowska
3*12c71b56SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision;
4*12c71b56SAnna Dabrowskause \dokuwiki\plugin\structpublish\meta\Constants;
5*12c71b56SAnna Dabrowska
6*12c71b56SAnna Dabrowskaclass action_plugin_structpublish_revisions extends DokuWiki_Action_Plugin
7*12c71b56SAnna Dabrowska{
8*12c71b56SAnna Dabrowska
9*12c71b56SAnna Dabrowska    public function register(Doku_Event_Handler $controller)
10*12c71b56SAnna Dabrowska    {
11*12c71b56SAnna Dabrowska        $controller->register_hook('FORM_REVISIONS_OUTPUT', 'BEFORE', $this, 'handleRevisions');
12*12c71b56SAnna Dabrowska    }
13*12c71b56SAnna Dabrowska
14*12c71b56SAnna Dabrowska    /**
15*12c71b56SAnna Dabrowska     * Adds publish info to page revisions
16*12c71b56SAnna Dabrowska     *
17*12c71b56SAnna Dabrowska     * @param Doku_Event $event
18*12c71b56SAnna Dabrowska     * @return void
19*12c71b56SAnna Dabrowska     */
20*12c71b56SAnna Dabrowska    public function handleRevisions(Doku_Event $event)
21*12c71b56SAnna Dabrowska    {
22*12c71b56SAnna Dabrowska        global $INFO;
23*12c71b56SAnna Dabrowska
24*12c71b56SAnna Dabrowska        /** @var dokuwiki\Form\Form $form */
25*12c71b56SAnna Dabrowska        $form = $event->data;
26*12c71b56SAnna Dabrowska
27*12c71b56SAnna Dabrowska        /** @var helper_plugin_structpublish_db $helper */
28*12c71b56SAnna Dabrowska        $helper = plugin_load('helper', 'structpublish_db');
29*12c71b56SAnna Dabrowska
30*12c71b56SAnna Dabrowska        if (!$helper->isPublishable()) return;
31*12c71b56SAnna Dabrowska
32*12c71b56SAnna Dabrowska        $sqlite = $helper->getDB();
33*12c71b56SAnna Dabrowska
34*12c71b56SAnna Dabrowska        $elCount = $form->elementCount();
35*12c71b56SAnna Dabrowska        $checkName = 'rev2[]';
36*12c71b56SAnna Dabrowska
37*12c71b56SAnna Dabrowska        for ($i = 0; $i < $elCount; $i++) {
38*12c71b56SAnna Dabrowska            $el = $form->getElementAt($i);
39*12c71b56SAnna Dabrowska
40*12c71b56SAnna Dabrowska            if (!is_a($el, \dokuwiki\Form\CheckableElement::class) && !is_a($el, \dokuwiki\Form\HTMLElement::class)) {
41*12c71b56SAnna Dabrowska                continue;
42*12c71b56SAnna Dabrowska            }
43*12c71b56SAnna Dabrowska
44*12c71b56SAnna Dabrowska            // extract rev from checkbox info
45*12c71b56SAnna Dabrowska            if (is_a($el, \dokuwiki\Form\CheckableElement::class)) {
46*12c71b56SAnna Dabrowska                if ($el->attr('name') === $checkName) {
47*12c71b56SAnna Dabrowska                    $rev = $el->attr('value');
48*12c71b56SAnna Dabrowska                }
49*12c71b56SAnna Dabrowska            }
50*12c71b56SAnna Dabrowska
51*12c71b56SAnna Dabrowska            // get most recent status for rev
52*12c71b56SAnna Dabrowska            $revision = new Revision($sqlite, $INFO['id'], $rev);
53*12c71b56SAnna Dabrowska            $status = $revision->getStatus();
54*12c71b56SAnna Dabrowska            $version = $revision->getVersion();
55*12c71b56SAnna Dabrowska
56*12c71b56SAnna Dabrowska            // insert status for published revisions
57*12c71b56SAnna Dabrowska            if (is_a($el, \dokuwiki\Form\HTMLElement::class) && !empty(trim($el->val())) && $status === Constants::STATUS_PUBLISHED) {
58*12c71b56SAnna Dabrowska                $val = $el->val();
59*12c71b56SAnna Dabrowska                $label = '<span class="plugin-structpublish-version">' . $status . ' (' . $this->getLang('version') . ' ' . $version . ')</span>';
60*12c71b56SAnna Dabrowska                $el->val("$val $label");
61*12c71b56SAnna Dabrowska            }
62*12c71b56SAnna Dabrowska        }
63*12c71b56SAnna Dabrowska    }
64*12c71b56SAnna Dabrowska}
65