xref: /plugin/structpublish/action/revisions.php (revision 9ab8cbae39a6ffa37705f745bc76916ea212a92b)
112c71b56SAnna Dabrowska<?php
212c71b56SAnna Dabrowska
3*9ab8cbaeSanndause dokuwiki\Extension\ActionPlugin;
4*9ab8cbaeSanndause dokuwiki\Extension\EventHandler;
5*9ab8cbaeSanndause dokuwiki\Extension\Event;
6*9ab8cbaeSanndause dokuwiki\Form\CheckableElement;
7*9ab8cbaeSanndause dokuwiki\Form\HTMLElement;
812c71b56SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Revision;
931e730e1SAnna Dabrowskause dokuwiki\plugin\structpublish\meta\Constants;
1012c71b56SAnna Dabrowska
11*9ab8cbaeSanndaclass action_plugin_structpublish_revisions extends ActionPlugin
1212c71b56SAnna Dabrowska{
13*9ab8cbaeSannda    public function register(EventHandler $controller)
1412c71b56SAnna Dabrowska    {
1512c71b56SAnna Dabrowska        $controller->register_hook('FORM_REVISIONS_OUTPUT', 'BEFORE', $this, 'handleRevisions');
1612c71b56SAnna Dabrowska    }
1712c71b56SAnna Dabrowska
1812c71b56SAnna Dabrowska    /**
1912c71b56SAnna Dabrowska     * Adds publish info to page revisions
2012c71b56SAnna Dabrowska     *
21*9ab8cbaeSannda     * @param Event $event
2212c71b56SAnna Dabrowska     * @return void
2312c71b56SAnna Dabrowska     */
24*9ab8cbaeSannda    public function handleRevisions(Event $event)
2512c71b56SAnna Dabrowska    {
2612c71b56SAnna Dabrowska        global $INFO;
2712c71b56SAnna Dabrowska
2812c71b56SAnna Dabrowska        /** @var dokuwiki\Form\Form $form */
2912c71b56SAnna Dabrowska        $form = $event->data;
3012c71b56SAnna Dabrowska
3112c71b56SAnna Dabrowska        /** @var helper_plugin_structpublish_db $helper */
3212c71b56SAnna Dabrowska        $helper = plugin_load('helper', 'structpublish_db');
3312c71b56SAnna Dabrowska
3431e730e1SAnna Dabrowska        if (!$helper->isPublishable()) {
3531e730e1SAnna Dabrowska            return;
3631e730e1SAnna Dabrowska        }
3712c71b56SAnna Dabrowska
3812c71b56SAnna Dabrowska        $elCount = $form->elementCount();
3912c71b56SAnna Dabrowska        $checkName = 'rev2[]';
4012c71b56SAnna Dabrowska
4112c71b56SAnna Dabrowska        for ($i = 0; $i < $elCount; $i++) {
4212c71b56SAnna Dabrowska            $el = $form->getElementAt($i);
4312c71b56SAnna Dabrowska
44*9ab8cbaeSannda            if (!$el instanceof CheckableElement && !$el instanceof HTMLElement) {
4512c71b56SAnna Dabrowska                continue;
4612c71b56SAnna Dabrowska            }
4712c71b56SAnna Dabrowska
4812c71b56SAnna Dabrowska            // extract rev from checkbox info
49*9ab8cbaeSannda            if (is_a($el, CheckableElement::class)) {
5012c71b56SAnna Dabrowska                if ($el->attr('name') === $checkName) {
5112c71b56SAnna Dabrowska                    $rev = $el->attr('value');
5212c71b56SAnna Dabrowska                }
5312c71b56SAnna Dabrowska            }
5412c71b56SAnna Dabrowska
5512c71b56SAnna Dabrowska            // get most recent status for rev
56b476f81dSAnna Dabrowska            $revision = new Revision($INFO['id'], $rev);
5712c71b56SAnna Dabrowska            $status = $revision->getStatus();
5812c71b56SAnna Dabrowska            $version = $revision->getVersion();
5912c71b56SAnna Dabrowska
6012c71b56SAnna Dabrowska            // insert status for published revisions
6131e730e1SAnna Dabrowska            if (
62*9ab8cbaeSannda                is_a($el, HTMLElement::class) &&
6331e730e1SAnna Dabrowska                !empty(trim($el->val())) &&
6431e730e1SAnna Dabrowska                $status === Constants::STATUS_PUBLISHED
6531e730e1SAnna Dabrowska            ) {
6612c71b56SAnna Dabrowska                $val = $el->val();
6731e730e1SAnna Dabrowska                $label = '<span class="plugin-structpublish-version">' .
6831e730e1SAnna Dabrowska                    $status . ' (' . $this->getLang('version') . ' ' . $version . ')</span>';
6912c71b56SAnna Dabrowska                $el->val("$val $label");
7012c71b56SAnna Dabrowska            }
7112c71b56SAnna Dabrowska        }
7212c71b56SAnna Dabrowska    }
7312c71b56SAnna Dabrowska}
74