mirror of
https://github.com/cosmocode/dokuwiki-plugin-struct.git
synced 2025-08-15 21:43:17 +00:00
78 lines
2.2 KiB
PHP
78 lines
2.2 KiB
PHP
<?php
|
|
|
|
/**
|
|
* DokuWiki Plugin struct (Action Component)
|
|
*
|
|
* @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
|
|
* @author Andreas Gohr, Michael Große <dokuwiki@cosmocode.de>
|
|
*/
|
|
|
|
use dokuwiki\plugin\struct\meta\Schema;
|
|
use dokuwiki\plugin\struct\meta\StructException;
|
|
|
|
class action_plugin_struct_ajax 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('AJAX_CALL_UNKNOWN', 'BEFORE', $this, 'handleAjax');
|
|
}
|
|
|
|
/**
|
|
* Pass Ajax call to a type
|
|
*
|
|
* @param Doku_Event $event event object by reference
|
|
*/
|
|
public function handleAjax(Doku_Event $event)
|
|
{
|
|
if ($event->data != 'plugin_struct') return;
|
|
$event->preventDefault();
|
|
$event->stopPropagation();
|
|
global $conf;
|
|
|
|
header('Content-Type: application/json');
|
|
try {
|
|
$result = $this->executeTypeAjax();
|
|
} catch (StructException $e) {
|
|
$result = array(
|
|
'error' => $e->getMessage() . ' ' . basename($e->getFile()) . ':' . $e->getLine()
|
|
);
|
|
if ($conf['allowdebug']) {
|
|
$result['stacktrace'] = $e->getTraceAsString();
|
|
}
|
|
http_status(500);
|
|
}
|
|
|
|
echo json_encode($result);
|
|
}
|
|
|
|
/**
|
|
* Check the input variables and run the AJAX call
|
|
*
|
|
* @return mixed
|
|
* @throws StructException
|
|
*/
|
|
protected function executeTypeAjax()
|
|
{
|
|
global $INPUT;
|
|
|
|
$col = $INPUT->str('column');
|
|
if (blank($col)) throw new StructException('No column provided');
|
|
list($schema, $colname) = explode('.', $col, 2);
|
|
if (blank($schema) || blank($colname)) throw new StructException('Column format is wrong');
|
|
|
|
$schema = new Schema($schema);
|
|
if (!$schema->getId()) throw new StructException('Unknown Schema');
|
|
|
|
$column = $schema->findColumn($colname);
|
|
if ($column === false) throw new StructException('Column not found');
|
|
|
|
return $column->getType()->handleAjax();
|
|
}
|
|
}
|