mirror of
https://github.com/cosmocode/dokuwiki-plugin-struct.git
synced 2025-07-25 16:01:54 +00:00
173 lines
5.3 KiB
PHP
173 lines
5.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* DokuWiki Plugin struct (Admin Component)
|
|
*
|
|
* @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
|
|
* @author Andreas Gohr, Michael Große <dokuwiki@cosmocode.de>
|
|
*/
|
|
|
|
// must be run within Dokuwiki
|
|
use dokuwiki\Extension\AdminPlugin;
|
|
use dokuwiki\plugin\struct\meta\Assignments;
|
|
use dokuwiki\plugin\struct\meta\StructException;
|
|
|
|
class admin_plugin_struct_assignments extends AdminPlugin
|
|
{
|
|
/**
|
|
* @return int sort number in admin menu
|
|
*/
|
|
public function getMenuSort()
|
|
{
|
|
return 501;
|
|
}
|
|
|
|
/**
|
|
* Return the text that is displayed at the main admin menu
|
|
*
|
|
* @param string $language language code
|
|
* @return string menu string
|
|
*/
|
|
public function getMenuText($language)
|
|
{
|
|
return $this->getLang('menu_assignments');
|
|
}
|
|
|
|
/**
|
|
* @return bool true if only access for superuser, false is for superusers and moderators
|
|
*/
|
|
public function forAdminOnly()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* Should carry out any processing required by the plugin.
|
|
*/
|
|
public function handle()
|
|
{
|
|
global $INPUT;
|
|
global $ID;
|
|
|
|
try {
|
|
$assignments = Assignments::getInstance();
|
|
} catch (StructException $e) {
|
|
msg($e->getMessage(), -1);
|
|
return false;
|
|
}
|
|
|
|
if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) {
|
|
$assignment = $INPUT->arr('assignment');
|
|
if (!blank($assignment['assign']) && !blank($assignment['tbl'])) {
|
|
if ($INPUT->str('action') === 'delete') {
|
|
$ok = $assignments->removePattern($assignment['assign'], $assignment['tbl']);
|
|
if (!$ok) msg('failed to remove pattern', -1);
|
|
} elseif ($INPUT->str('action') === 'add') {
|
|
if ($assignment['assign'][0] == '/') {
|
|
if (@preg_match($assignment['assign'], null) === false) {
|
|
msg('Invalid regular expression. Pattern not saved', -1);
|
|
} else {
|
|
$ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']);
|
|
if (!$ok) msg('failed to add pattern', -1);
|
|
}
|
|
} else {
|
|
$ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']);
|
|
if (!$ok) msg('failed to add pattern', -1);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
send_redirect(wl($ID, ['do' => 'admin', 'page' => 'struct_assignments'], true, '&'));
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Render HTML output, e.g. helpful text and a form
|
|
*/
|
|
public function html()
|
|
{
|
|
global $ID;
|
|
|
|
echo $this->locale_xhtml('assignments_intro');
|
|
|
|
try {
|
|
$ass = Assignments::getInstance();
|
|
} catch (StructException $e) {
|
|
msg($e->getMessage(), -1);
|
|
return false;
|
|
}
|
|
$assignments = $ass->getAllPatterns();
|
|
|
|
echo '<form action="' . wl($ID) . '" action="post">';
|
|
echo '<input type="hidden" name="do" value="admin" />';
|
|
echo '<input type="hidden" name="page" value="struct_assignments" />';
|
|
echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
|
|
echo '<table class="inline">';
|
|
|
|
// header
|
|
echo '<tr>';
|
|
echo '<th>' . $this->getLang('assign_assign') . '</th>';
|
|
echo '<th>' . $this->getLang('assign_tbl') . '</th>';
|
|
echo '<th></th>';
|
|
echo '</tr>';
|
|
|
|
// existing assignments
|
|
foreach ($assignments as $assignment) {
|
|
$schema = $assignment['tbl'];
|
|
$assignee = $assignment['pattern'];
|
|
|
|
$link = wl(
|
|
$ID,
|
|
[
|
|
'do' => 'admin',
|
|
'page' => 'struct_assignments',
|
|
'action' => 'delete',
|
|
'sectok' => getSecurityToken(),
|
|
'assignment[tbl]' => $schema,
|
|
'assignment[assign]' => $assignee
|
|
]
|
|
);
|
|
|
|
echo '<tr>';
|
|
echo '<td>' . hsc($assignee) . '</td>';
|
|
echo '<td>' . hsc($schema) . '</td>';
|
|
echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>';
|
|
echo '</tr>';
|
|
}
|
|
|
|
// new assignment form
|
|
echo '<tr>';
|
|
echo '<td><input type="text" name="assignment[assign]" /></td>';
|
|
echo '<td>';
|
|
echo '<select name="assignment[tbl]">';
|
|
$schemas = helper_plugin_struct::getSchema();
|
|
foreach ($schemas as $schema) {
|
|
if ($schema->isInternal()) continue;
|
|
$table = $schema->getTable();
|
|
echo '<option value="' . hsc($table) . '">' . hsc($table) . '</option>';
|
|
}
|
|
echo '</select>';
|
|
echo '</td>';
|
|
echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>';
|
|
echo '</tr>';
|
|
|
|
echo '</table>';
|
|
echo '</form>';
|
|
}
|
|
|
|
/**
|
|
* Copies the TOC from the Schema Editor
|
|
*
|
|
* @return array
|
|
*/
|
|
public function getTOC()
|
|
{
|
|
/** @var admin_plugin_struct_schemas $plugin */
|
|
$plugin = plugin_load('admin', 'struct_schemas');
|
|
return $plugin->getTOC();
|
|
}
|
|
}
|
|
|
|
// vim:ts=4:sw=4:et:
|