xref: /plugin/struct/admin/assignments.php (revision 7234bfb14e712ff548d9266ef32fdcc8eaf2d04e)
187fdbc6bSMichael Große<?php
2d6d97f60SAnna Dabrowska
387fdbc6bSMichael Große/**
487fdbc6bSMichael Große * DokuWiki Plugin struct (Admin Component)
587fdbc6bSMichael Große *
687fdbc6bSMichael Große * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
787fdbc6bSMichael Große * @author  Andreas Gohr, Michael Große <dokuwiki@cosmocode.de>
887fdbc6bSMichael Große */
987fdbc6bSMichael Große
1087fdbc6bSMichael Große// must be run within Dokuwiki
11*7234bfb1Ssplitbrainuse dokuwiki\Extension\AdminPlugin;
12ba766201SAndreas Gohruse dokuwiki\plugin\struct\meta\Assignments;
13ba766201SAndreas Gohruse dokuwiki\plugin\struct\meta\Schema;
147cbcfbdbSAndreas Gohruse dokuwiki\plugin\struct\meta\StructException;
1587fdbc6bSMichael Große
16*7234bfb1Ssplitbrainclass admin_plugin_struct_assignments extends AdminPlugin
17d6d97f60SAnna Dabrowska{
1887fdbc6bSMichael Große    /**
1987fdbc6bSMichael Große     * @return int sort number in admin menu
2087fdbc6bSMichael Große     */
21d6d97f60SAnna Dabrowska    public function getMenuSort()
22d6d97f60SAnna Dabrowska    {
2387fdbc6bSMichael Große        return 501;
2487fdbc6bSMichael Große    }
2587fdbc6bSMichael Große
2640b81cabSAndreas Gohr    /**
2740b81cabSAndreas Gohr     * Return the text that is displayed at the main admin menu
2840b81cabSAndreas Gohr     *
2940b81cabSAndreas Gohr     * @param string $language language code
3040b81cabSAndreas Gohr     * @return string menu string
3140b81cabSAndreas Gohr     */
32d6d97f60SAnna Dabrowska    public function getMenuText($language)
33d6d97f60SAnna Dabrowska    {
3440b81cabSAndreas Gohr        return $this->getLang('menu_assignments');
3587fdbc6bSMichael Große    }
3687fdbc6bSMichael Große
3787fdbc6bSMichael Große    /**
3887fdbc6bSMichael Große     * @return bool true if only access for superuser, false is for superusers and moderators
3987fdbc6bSMichael Große     */
40d6d97f60SAnna Dabrowska    public function forAdminOnly()
41d6d97f60SAnna Dabrowska    {
424d220607SAndreas Gohr        return false;
4387fdbc6bSMichael Große    }
4487fdbc6bSMichael Große
4587fdbc6bSMichael Große    /**
4687fdbc6bSMichael Große     * Should carry out any processing required by the plugin.
4787fdbc6bSMichael Große     */
48d6d97f60SAnna Dabrowska    public function handle()
49d6d97f60SAnna Dabrowska    {
5087fdbc6bSMichael Große        global $INPUT;
5128e05468SAndreas Gohr        global $ID;
5287fdbc6bSMichael Große
537cbcfbdbSAndreas Gohr        try {
54025cb9daSAndreas Gohr            $assignments = Assignments::getInstance();
557cbcfbdbSAndreas Gohr        } catch (StructException $e) {
567cbcfbdbSAndreas Gohr            msg($e->getMessage(), -1);
577cbcfbdbSAndreas Gohr            return false;
587cbcfbdbSAndreas Gohr        }
597cbcfbdbSAndreas Gohr
6087fdbc6bSMichael Große        if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) {
6187fdbc6bSMichael Große            $assignment = $INPUT->arr('assignment');
6228e05468SAndreas Gohr            if (!blank($assignment['assign']) && !blank($assignment['tbl'])) {
6387fdbc6bSMichael Große                if ($INPUT->str('action') === 'delete') {
6433d7be6aSAndreas Gohr                    $ok = $assignments->removePattern($assignment['assign'], $assignment['tbl']);
659914e87eSAndreas Gohr                    if (!$ok) msg('failed to remove pattern', -1);
661a8d1235SAndreas Gohr                } elseif ($INPUT->str('action') === 'add') {
67d982cb29SMichael Große                    if ($assignment['assign'][0] == '/') {
689914e87eSAndreas Gohr                        if (@preg_match($assignment['assign'], null) === false) {
699914e87eSAndreas Gohr                            msg('Invalid regular expression. Pattern not saved', -1);
709914e87eSAndreas Gohr                        } else {
7133d7be6aSAndreas Gohr                            $ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']);
729914e87eSAndreas Gohr                            if (!$ok) msg('failed to add pattern', -1);
739914e87eSAndreas Gohr                        }
749914e87eSAndreas Gohr                    } else {
759914e87eSAndreas Gohr                        $ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']);
769914e87eSAndreas Gohr                        if (!$ok) msg('failed to add pattern', -1);
779914e87eSAndreas Gohr                    }
7887fdbc6bSMichael Große                }
7928e05468SAndreas Gohr            }
8028e05468SAndreas Gohr
819914e87eSAndreas Gohr
82*7234bfb1Ssplitbrain            send_redirect(wl($ID, ['do' => 'admin', 'page' => 'struct_assignments'], true, '&'));
8387fdbc6bSMichael Große        }
8487fdbc6bSMichael Große    }
8587fdbc6bSMichael Große
8687fdbc6bSMichael Große    /**
8787fdbc6bSMichael Große     * Render HTML output, e.g. helpful text and a form
8887fdbc6bSMichael Große     */
89d6d97f60SAnna Dabrowska    public function html()
90d6d97f60SAnna Dabrowska    {
91a3d1e459SAndreas Gohr        global $ID;
92a3d1e459SAndreas Gohr
9387fdbc6bSMichael Große        echo $this->locale_xhtml('assignments_intro');
9487fdbc6bSMichael Große
957cbcfbdbSAndreas Gohr        try {
96025cb9daSAndreas Gohr            $ass = Assignments::getInstance();
977cbcfbdbSAndreas Gohr        } catch (StructException $e) {
987cbcfbdbSAndreas Gohr            msg($e->getMessage(), -1);
997cbcfbdbSAndreas Gohr            return false;
1007cbcfbdbSAndreas Gohr        }
10133d7be6aSAndreas Gohr        $assignments = $ass->getAllPatterns();
10287fdbc6bSMichael Große
10328e05468SAndreas Gohr        echo '<form action="' . wl($ID) . '" action="post">';
104a3d1e459SAndreas Gohr        echo '<input type="hidden" name="do" value="admin" />';
105a3d1e459SAndreas Gohr        echo '<input type="hidden" name="page" value="struct_assignments" />';
106a3d1e459SAndreas Gohr        echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
107a3d1e459SAndreas Gohr        echo '<table class="inline">';
108a3d1e459SAndreas Gohr
109a3d1e459SAndreas Gohr        // header
110a3d1e459SAndreas Gohr        echo '<tr>';
111ececd523SAndreas Gohr        echo '<th>' . $this->getLang('assign_assign') . '</th>';
112ececd523SAndreas Gohr        echo '<th>' . $this->getLang('assign_tbl') . '</th>';
113a3d1e459SAndreas Gohr        echo '<th></th>';
114a3d1e459SAndreas Gohr        echo '</tr>';
115a3d1e459SAndreas Gohr
116a3d1e459SAndreas Gohr        // existing assignments
11787fdbc6bSMichael Große        foreach ($assignments as $assignment) {
11887fdbc6bSMichael Große            $schema = $assignment['tbl'];
119f8d8a899SAndreas Gohr            $assignee = $assignment['pattern'];
120a3d1e459SAndreas Gohr
12128e05468SAndreas Gohr            $link = wl(
122d6d97f60SAnna Dabrowska                $ID,
123*7234bfb1Ssplitbrain                ['do' => 'admin', 'page' => 'struct_assignments', 'action' => 'delete', 'sectok' => getSecurityToken(), 'assignment[tbl]' => $schema, 'assignment[assign]' => $assignee]
12428e05468SAndreas Gohr            );
125a3d1e459SAndreas Gohr
126a3d1e459SAndreas Gohr            echo '<tr>';
127a3d1e459SAndreas Gohr            echo '<td>' . hsc($assignee) . '</td>';
128a3d1e459SAndreas Gohr            echo '<td>' . hsc($schema) . '</td>';
129e4e17387SMichael Grosse            echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>';
130a3d1e459SAndreas Gohr            echo '</tr>';
13187fdbc6bSMichael Große        }
132a3d1e459SAndreas Gohr
133a3d1e459SAndreas Gohr        // new assignment form
134a3d1e459SAndreas Gohr        echo '<tr>';
135a3d1e459SAndreas Gohr        echo '<td><input type="text" name="assignment[assign]" /></td>';
136a3d1e459SAndreas Gohr        echo '<td>';
137a3d1e459SAndreas Gohr        echo '<select name="assignment[tbl]">';
1386c9d1a10SAnna Dabrowska        $schemas = helper_plugin_struct::getSchema();
1396c9d1a10SAnna Dabrowska        foreach ($schemas as $schema) {
1406c9d1a10SAnna Dabrowska            if ($schema->isInternal()) continue;
1416c9d1a10SAnna Dabrowska            $table = $schema->getTable();
142097f4a53SAndreas Gohr            echo '<option value="' . hsc($table) . '">' . hsc($table) . '</option>';
14387fdbc6bSMichael Große        }
144a3d1e459SAndreas Gohr        echo '</select>';
145a3d1e459SAndreas Gohr        echo '</td>';
146ececd523SAndreas Gohr        echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>';
147a3d1e459SAndreas Gohr        echo '</tr>';
148a3d1e459SAndreas Gohr
149a3d1e459SAndreas Gohr        echo '</table>';
15061e808e6Sjf908        echo '</form>';
15187fdbc6bSMichael Große    }
152dbffe06eSAndreas Gohr
153dbffe06eSAndreas Gohr    /**
154dbffe06eSAndreas Gohr     * Copies the TOC from the Schema Editor
155dbffe06eSAndreas Gohr     *
156dbffe06eSAndreas Gohr     * @return array
157dbffe06eSAndreas Gohr     */
158d6d97f60SAnna Dabrowska    public function getTOC()
159d6d97f60SAnna Dabrowska    {
160dbffe06eSAndreas Gohr        /** @var admin_plugin_struct_schemas $plugin */
161dbffe06eSAndreas Gohr        $plugin = plugin_load('admin', 'struct_schemas');
162dbffe06eSAndreas Gohr        return $plugin->getTOC();
16387fdbc6bSMichael Große    }
16487fdbc6bSMichael Große}
16587fdbc6bSMichael Große
16687fdbc6bSMichael Große// vim:ts=4:sw=4:et:
167