xref: /plugin/diagrams/action/mediafile.php (revision 5f757686d683fd550247221d4a6d2848f21773e6)
1<?php
2
3/**
4 * Action component of diagrams plugin
5 *
6 */
7class action_plugin_diagrams_mediafile extends DokuWiki_Action_Plugin
8{
9
10    /**
11     * Registers a callback function for a given event
12     *
13     * @param \Doku_Event_Handler $controller
14     */
15    public function register(Doku_Event_Handler $controller)
16    {
17        $controller->register_hook('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleEditCheck');
18    }
19
20    /**
21     * Check all supplied diagrams and return only editable diagrams
22     *
23     * @param Doku_Event $event
24     */
25    public function handleEditCheck(Doku_Event $event)
26    {
27        if ($event->data !== 'plugin_diagrams_mediafile_editcheck') return;
28        $event->preventDefault();
29        $event->stopPropagation();
30
31        global $INPUT;
32        $diagrams = (array) json_decode($INPUT->str('diagrams'));
33
34        /** @var helper_plugin_diagrams $helper */
35        $helper = plugin_load('helper', 'diagrams');
36
37        $editable = [];
38        foreach ($diagrams as $image) {
39            $image = cleanID($image);
40            $file = mediaFN($image);
41
42            if (
43                file_exists($file) &&
44                auth_quickaclcheck($image) >= AUTH_UPLOAD &&
45                $helper->isDiagramFile($file)
46            ) {
47                $editable[] = $image;
48            }
49        }
50
51        echo json_encode($editable);
52    }
53
54}
55