xref: /plugin/struct/helper/lookup.php (revision 7234bfb14e712ff548d9266ef32fdcc8eaf2d04e)
1b193f1eeSSzymon Olewniczak<?php
2d6d97f60SAnna Dabrowska
3b193f1eeSSzymon Olewniczakuse dokuwiki\plugin\struct\meta\AccessTable;
4308cc83fSAndreas Gohruse dokuwiki\plugin\struct\meta\AccessTableGlobal;
5b193f1eeSSzymon Olewniczak
6b193f1eeSSzymon Olewniczak/**
7b193f1eeSSzymon Olewniczak * Allows adding a lookup schema as a bureaucracy action
8b193f1eeSSzymon Olewniczak *
9b193f1eeSSzymon Olewniczak */
10d6d97f60SAnna Dabrowskaclass helper_plugin_struct_lookup extends helper_plugin_bureaucracy_action
11d6d97f60SAnna Dabrowska{
12b193f1eeSSzymon Olewniczak    /**
13b193f1eeSSzymon Olewniczak     * Performs struct_lookup action
14b193f1eeSSzymon Olewniczak     *
15b193f1eeSSzymon Olewniczak     * @param helper_plugin_bureaucracy_field[] $fields array with form fields
16b193f1eeSSzymon Olewniczak     * @param string $thanks thanks message
17b193f1eeSSzymon Olewniczak     * @param array $argv array with entries: template, pagename, separator
18b193f1eeSSzymon Olewniczak     * @return array|mixed
19b193f1eeSSzymon Olewniczak     *
20b193f1eeSSzymon Olewniczak     * @throws Exception
21b193f1eeSSzymon Olewniczak     */
22d6d97f60SAnna Dabrowska    public function run($fields, $thanks, $argv)
23d6d97f60SAnna Dabrowska    {
24b193f1eeSSzymon Olewniczak        global $ID;
25b193f1eeSSzymon Olewniczak
26b193f1eeSSzymon Olewniczak        // get all struct values and their associated schemas
27*7234bfb1Ssplitbrain        $tosave = [];
28b193f1eeSSzymon Olewniczak        foreach ($fields as $field) {
29b193f1eeSSzymon Olewniczak            if (!is_a($field, 'helper_plugin_struct_field')) continue;
30b193f1eeSSzymon Olewniczak            /** @var helper_plugin_struct_field $field */
31b193f1eeSSzymon Olewniczak            $tbl = $field->column->getTable();
32b193f1eeSSzymon Olewniczak            $lbl = $field->column->getLabel();
33*7234bfb1Ssplitbrain            if (!isset($tosave[$tbl])) $tosave[$tbl] = [];
34b193f1eeSSzymon Olewniczak            $tosave[$tbl][$lbl] = $field->getParam('value');
35b193f1eeSSzymon Olewniczak        }
36b193f1eeSSzymon Olewniczak
37b193f1eeSSzymon Olewniczak        foreach ($tosave as $table => $data) {
38308cc83fSAndreas Gohr            $access = AccessTable::getGlobalAccess($table);
39308cc83fSAndreas Gohr            if (!$access instanceof AccessTableGlobal) continue;
40b193f1eeSSzymon Olewniczak
41b193f1eeSSzymon Olewniczak            if (!$access->getSchema()->isEditable()) {
426d71ffefSSzymon Olewniczak                msg('lookup save error: no permission for schema', -1);
436d71ffefSSzymon Olewniczak                return false;
44b193f1eeSSzymon Olewniczak            }
45b193f1eeSSzymon Olewniczak            $validator = $access->getValidator($data);
46b193f1eeSSzymon Olewniczak            if ($validator->validate()) {
47b193f1eeSSzymon Olewniczak                $validator->saveData();
48b193f1eeSSzymon Olewniczak            }
49b193f1eeSSzymon Olewniczak        }
50b193f1eeSSzymon Olewniczak
51b193f1eeSSzymon Olewniczak        // set thank you message
52b193f1eeSSzymon Olewniczak        if (!$thanks) {
53b193f1eeSSzymon Olewniczak            $thanks = sprintf($this->getLang('bureaucracy_action_struct_lookup_thanks'), wl($ID));
54b193f1eeSSzymon Olewniczak        } else {
55b193f1eeSSzymon Olewniczak            $thanks = hsc($thanks);
56b193f1eeSSzymon Olewniczak        }
57b193f1eeSSzymon Olewniczak
58b193f1eeSSzymon Olewniczak        return $thanks;
59b193f1eeSSzymon Olewniczak    }
60b193f1eeSSzymon Olewniczak}
61