1<?php
2
3use dokuwiki\plugin\prosemirror\parser\SyntaxTreeBuilder;
4use dokuwiki\plugin\sentry\Event;
5
6/**
7 * DokuWiki Plugin prosemirror (Helper Component)
8 *
9 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
10 * @author  Andreas Gohr <gohr@cosmocode.de>
11 */
12class helper_plugin_prosemirror extends DokuWiki_Plugin
13{
14
15    /**
16     * Decode json and parse the data back into DokuWiki Syntax
17     *
18     * @param string $unparsedJSON the json produced by Prosemirror
19     *
20     * @return null|string DokuWiki syntax or null on error
21     */
22    public function getSyntaxFromProsemirrorData($unparsedJSON)
23    {
24        $prosemirrorData = json_decode($unparsedJSON, true);
25        if ($prosemirrorData === null) {
26            $errorMsg = 'Error decoding prosemirror json ' . json_last_error_msg();
27            throw new RuntimeException($errorMsg);
28        }
29
30        $rootNode = SyntaxTreeBuilder::parseDataIntoTree($prosemirrorData);
31        $syntax = $rootNode->toSyntax();
32        return $syntax;
33    }
34
35    /**
36     * Try to log an error to sentry if the sentry plugin exists
37     *
38     * @param Throwable $exception
39     * @param array     $extraData associative array for sentries `extra` field
40     *
41     * @return bool true if the exception has been logged to sentry, false otherwise
42     */
43    public function tryToLogErrorToSentry(Throwable $exception, array $extraData = [])
44    {
45        global $ID;
46
47        /** @var helper_plugin_sentry $sentry */
48        $sentry = plugin_load('helper', 'sentry');
49        if (!$sentry) {
50            return false;
51        }
52        $sentryEvent = new Event([
53            'extra' => $extraData,
54            'tags' => [
55                'plugin' => 'prosemirror',
56                'id' => $ID,
57            ],
58        ]);
59        $sentryEvent->addException($exception);
60        $sentry->logEvent($sentryEvent);
61        return true;
62    }
63}
64// vim:ts=4:sw=4:et:
65