xref: /plugin/struct/admin/assignments.php (revision 7fe2cdf28c472c686961bf42f0123eb33d2f3e60)
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
117234bfb1Ssplitbrainuse dokuwiki\Extension\AdminPlugin;
12ba766201SAndreas Gohruse dokuwiki\plugin\struct\meta\Assignments;
137cbcfbdbSAndreas Gohruse dokuwiki\plugin\struct\meta\StructException;
1487fdbc6bSMichael Große
157234bfb1Ssplitbrainclass admin_plugin_struct_assignments extends AdminPlugin
16d6d97f60SAnna Dabrowska{
1787fdbc6bSMichael Große    /**
1887fdbc6bSMichael Große     * @return int sort number in admin menu
1987fdbc6bSMichael Große     */
20d6d97f60SAnna Dabrowska    public function getMenuSort()
21d6d97f60SAnna Dabrowska    {
2287fdbc6bSMichael Große        return 501;
2387fdbc6bSMichael Große    }
2487fdbc6bSMichael Große
2540b81cabSAndreas Gohr    /**
2640b81cabSAndreas Gohr     * Return the text that is displayed at the main admin menu
2740b81cabSAndreas Gohr     *
2840b81cabSAndreas Gohr     * @param string $language language code
2940b81cabSAndreas Gohr     * @return string menu string
3040b81cabSAndreas Gohr     */
31d6d97f60SAnna Dabrowska    public function getMenuText($language)
32d6d97f60SAnna Dabrowska    {
3340b81cabSAndreas Gohr        return $this->getLang('menu_assignments');
3487fdbc6bSMichael Große    }
3587fdbc6bSMichael Große
3687fdbc6bSMichael Große    /**
3787fdbc6bSMichael Große     * @return bool true if only access for superuser, false is for superusers and moderators
3887fdbc6bSMichael Große     */
39d6d97f60SAnna Dabrowska    public function forAdminOnly()
40d6d97f60SAnna Dabrowska    {
414d220607SAndreas Gohr        return false;
4287fdbc6bSMichael Große    }
4387fdbc6bSMichael Große
4487fdbc6bSMichael Große    /**
4587fdbc6bSMichael Große     * Should carry out any processing required by the plugin.
4687fdbc6bSMichael Große     */
47d6d97f60SAnna Dabrowska    public function handle()
48d6d97f60SAnna Dabrowska    {
4987fdbc6bSMichael Große        global $INPUT;
5028e05468SAndreas Gohr        global $ID;
5187fdbc6bSMichael Große
527cbcfbdbSAndreas Gohr        try {
53025cb9daSAndreas Gohr            $assignments = Assignments::getInstance();
547cbcfbdbSAndreas Gohr        } catch (StructException $e) {
557cbcfbdbSAndreas Gohr            msg($e->getMessage(), -1);
567cbcfbdbSAndreas Gohr            return false;
577cbcfbdbSAndreas Gohr        }
587cbcfbdbSAndreas Gohr
5987fdbc6bSMichael Große        if ($INPUT->str('action') && $INPUT->arr('assignment') && checkSecurityToken()) {
6087fdbc6bSMichael Große            $assignment = $INPUT->arr('assignment');
6128e05468SAndreas Gohr            if (!blank($assignment['assign']) && !blank($assignment['tbl'])) {
6287fdbc6bSMichael Große                if ($INPUT->str('action') === 'delete') {
6333d7be6aSAndreas Gohr                    $ok = $assignments->removePattern($assignment['assign'], $assignment['tbl']);
649914e87eSAndreas Gohr                    if (!$ok) msg('failed to remove pattern', -1);
651a8d1235SAndreas Gohr                } elseif ($INPUT->str('action') === 'add') {
66d982cb29SMichael Große                    if ($assignment['assign'][0] == '/') {
679914e87eSAndreas Gohr                        if (@preg_match($assignment['assign'], null) === false) {
689914e87eSAndreas Gohr                            msg('Invalid regular expression. Pattern not saved', -1);
699914e87eSAndreas Gohr                        } else {
7033d7be6aSAndreas Gohr                            $ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']);
719914e87eSAndreas Gohr                            if (!$ok) msg('failed to add pattern', -1);
729914e87eSAndreas Gohr                        }
739914e87eSAndreas Gohr                    } else {
749914e87eSAndreas Gohr                        $ok = $assignments->addPattern($assignment['assign'], $assignment['tbl']);
759914e87eSAndreas Gohr                        if (!$ok) msg('failed to add pattern', -1);
769914e87eSAndreas Gohr                    }
7787fdbc6bSMichael Große                }
7828e05468SAndreas Gohr            }
7928e05468SAndreas Gohr
809914e87eSAndreas Gohr
817234bfb1Ssplitbrain            send_redirect(wl($ID, ['do' => 'admin', 'page' => 'struct_assignments'], true, '&'));
8287fdbc6bSMichael Große        }
8387fdbc6bSMichael Große    }
8487fdbc6bSMichael Große
8587fdbc6bSMichael Große    /**
8687fdbc6bSMichael Große     * Render HTML output, e.g. helpful text and a form
8787fdbc6bSMichael Große     */
88d6d97f60SAnna Dabrowska    public function html()
89d6d97f60SAnna Dabrowska    {
90a3d1e459SAndreas Gohr        global $ID;
91a3d1e459SAndreas Gohr
9287fdbc6bSMichael Große        echo $this->locale_xhtml('assignments_intro');
9387fdbc6bSMichael Große
947cbcfbdbSAndreas Gohr        try {
95025cb9daSAndreas Gohr            $ass = Assignments::getInstance();
967cbcfbdbSAndreas Gohr        } catch (StructException $e) {
977cbcfbdbSAndreas Gohr            msg($e->getMessage(), -1);
987cbcfbdbSAndreas Gohr            return false;
997cbcfbdbSAndreas Gohr        }
10033d7be6aSAndreas Gohr        $assignments = $ass->getAllPatterns();
10187fdbc6bSMichael Große
10228e05468SAndreas Gohr        echo '<form action="' . wl($ID) . '" action="post">';
103a3d1e459SAndreas Gohr        echo '<input type="hidden" name="do" value="admin" />';
104a3d1e459SAndreas Gohr        echo '<input type="hidden" name="page" value="struct_assignments" />';
105a3d1e459SAndreas Gohr        echo '<input type="hidden" name="sectok" value="' . getSecurityToken() . '" />';
106a3d1e459SAndreas Gohr        echo '<table class="inline">';
107a3d1e459SAndreas Gohr
108a3d1e459SAndreas Gohr        // header
109a3d1e459SAndreas Gohr        echo '<tr>';
110ececd523SAndreas Gohr        echo '<th>' . $this->getLang('assign_assign') . '</th>';
111ececd523SAndreas Gohr        echo '<th>' . $this->getLang('assign_tbl') . '</th>';
112a3d1e459SAndreas Gohr        echo '<th></th>';
113a3d1e459SAndreas Gohr        echo '</tr>';
114a3d1e459SAndreas Gohr
115a3d1e459SAndreas Gohr        // existing assignments
11687fdbc6bSMichael Große        foreach ($assignments as $assignment) {
11787fdbc6bSMichael Große            $schema = $assignment['tbl'];
118f8d8a899SAndreas Gohr            $assignee = $assignment['pattern'];
119a3d1e459SAndreas Gohr
12028e05468SAndreas Gohr            $link = wl(
121d6d97f60SAnna Dabrowska                $ID,
122*7fe2cdf2SAndreas Gohr                [
123*7fe2cdf2SAndreas Gohr                    'do' => 'admin',
124*7fe2cdf2SAndreas Gohr                    'page' => 'struct_assignments',
125*7fe2cdf2SAndreas Gohr                    'action' => 'delete',
126*7fe2cdf2SAndreas Gohr                    'sectok' => getSecurityToken(),
127*7fe2cdf2SAndreas Gohr                    'assignment[tbl]' => $schema,
128*7fe2cdf2SAndreas Gohr                    'assignment[assign]' => $assignee
129*7fe2cdf2SAndreas Gohr                ]
13028e05468SAndreas Gohr            );
131a3d1e459SAndreas Gohr
132a3d1e459SAndreas Gohr            echo '<tr>';
133a3d1e459SAndreas Gohr            echo '<td>' . hsc($assignee) . '</td>';
134a3d1e459SAndreas Gohr            echo '<td>' . hsc($schema) . '</td>';
135e4e17387SMichael Grosse            echo '<td><a class="deleteSchema" href="' . $link . '">' . $this->getLang('assign_del') . '</a></td>';
136a3d1e459SAndreas Gohr            echo '</tr>';
13787fdbc6bSMichael Große        }
138a3d1e459SAndreas Gohr
139a3d1e459SAndreas Gohr        // new assignment form
140a3d1e459SAndreas Gohr        echo '<tr>';
141a3d1e459SAndreas Gohr        echo '<td><input type="text" name="assignment[assign]" /></td>';
142a3d1e459SAndreas Gohr        echo '<td>';
143a3d1e459SAndreas Gohr        echo '<select name="assignment[tbl]">';
1446c9d1a10SAnna Dabrowska        $schemas = helper_plugin_struct::getSchema();
1456c9d1a10SAnna Dabrowska        foreach ($schemas as $schema) {
1466c9d1a10SAnna Dabrowska            if ($schema->isInternal()) continue;
1476c9d1a10SAnna Dabrowska            $table = $schema->getTable();
148097f4a53SAndreas Gohr            echo '<option value="' . hsc($table) . '">' . hsc($table) . '</option>';
14987fdbc6bSMichael Große        }
150a3d1e459SAndreas Gohr        echo '</select>';
151a3d1e459SAndreas Gohr        echo '</td>';
152ececd523SAndreas Gohr        echo '<td><button type="submit" name="action" value="add">' . $this->getLang('assign_add') . '</button></td>';
153a3d1e459SAndreas Gohr        echo '</tr>';
154a3d1e459SAndreas Gohr
155a3d1e459SAndreas Gohr        echo '</table>';
15661e808e6Sjf908        echo '</form>';
15787fdbc6bSMichael Große    }
158dbffe06eSAndreas Gohr
159dbffe06eSAndreas Gohr    /**
160dbffe06eSAndreas Gohr     * Copies the TOC from the Schema Editor
161dbffe06eSAndreas Gohr     *
162dbffe06eSAndreas Gohr     * @return array
163dbffe06eSAndreas Gohr     */
164d6d97f60SAnna Dabrowska    public function getTOC()
165d6d97f60SAnna Dabrowska    {
166dbffe06eSAndreas Gohr        /** @var admin_plugin_struct_schemas $plugin */
167dbffe06eSAndreas Gohr        $plugin = plugin_load('admin', 'struct_schemas');
168dbffe06eSAndreas Gohr        return $plugin->getTOC();
16987fdbc6bSMichael Große    }
17087fdbc6bSMichael Große}
17187fdbc6bSMichael Große
17287fdbc6bSMichael Große// vim:ts=4:sw=4:et:
173