Warning: Cannot modify header information - headers already sent by (output started at /var/www/jonas-eriksen.dk/pic/private/index.php:1) in /var/www/jonas-eriksen.dk/pic/private/index.php on line 215
*/
// must be run within Dokuwiki
use dokuwiki\plugin\prosemirror\parser\SyntaxTreeBuilder;
if (!defined('DOKU_INC')) {
die();
}
class action_plugin_prosemirror_parser extends DokuWiki_Action_Plugin
{
/**
* Registers a callback function for a given event
*
* @param Doku_Event_Handler $controller DokuWiki's event controller object
*
* @return void
*/
public function register(Doku_Event_Handler $controller)
{
$controller->register_hook('ACTION_ACT_PREPROCESS', 'BEFORE', $this, 'handle_preprocess');
$controller->register_hook('DRAFT_SAVE', 'BEFORE', $this, 'handle_draft');
}
/**
* Triggered by: COMMON_DRAFT_SAVE
*
* @param Doku_Event $event
* @param $param
*/
public function handle_draft(Doku_Event $event, $param)
{
global $INPUT;
$unparsedJSON = $INPUT->post->str('prosemirror_json');
if (empty($unparsedJSON)) {
return;
}
/** @var \helper_plugin_prosemirror $helper */
$helper = plugin_load('helper', 'prosemirror');
try {
$syntax = $helper->getSyntaxFromProsemirrorData($unparsedJSON);
} catch (\Throwable $e) {
$event->preventDefault();
$event->stopPropagation();
$errorMsg = $e->getMessage();
if ($helper->tryToLogErrorToSentry($e, ['json' => $unparsedJSON])) {
$errorMsg .= ' -- The error has been logged to Sentry.';
}
$event->data['errors'][] = $errorMsg;
return;
}
$event->data['text'] = $syntax;
}
/**
* [Custom event handler which performs action]
*
* Triggered by: ACTION_ACT_PREPROCESS
*
* @param Doku_Event $event event object by reference
* @param mixed $param [the parameters passed as fifth argument to register_hook() when this
* handler was registered]
*
* @return void
*/
public function handle_preprocess(Doku_Event $event, $param)
{
global $TEXT, $INPUT;
if ($INPUT->server->str('REQUEST_METHOD') !== 'POST'
|| !in_array($event->data, ['save', 'preview'])
|| !$INPUT->post->has('prosemirror_json')
|| !get_doku_pref('plugin_prosemirror_useWYSIWYG', false)
) {
return;
}
$unparsedJSON = $INPUT->post->str('prosemirror_json');
/** @var \helper_plugin_prosemirror $helper */
$helper = plugin_load('helper', 'prosemirror');
try {
$syntax = $helper->getSyntaxFromProsemirrorData($unparsedJSON);
} catch (\Throwable $e) {
$event->preventDefault();
$event->stopPropagation();
$errorMsg = $e->getMessage();
if ($helper->tryToLogErrorToSentry($e, ['json' => $unparsedJSON])) {
$errorMsg .= ' -- The error has been logged to Sentry.';
}
msg($errorMsg, -1);
return;
}
if ($syntax !== null) {
$TEXT = $syntax;
}
}
}
// vim:ts=4:sw=4:et: