Files
dokuwiki-plugin-struct/admin/assignments.php
Andreas Gohr 7fe2cdf28c apply #670 and manually cleanup afterwards
fixes some failing tests
uses sexplode over array_pad
reformats multiline arrays
2023-09-13 13:28:04 +02:00

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: