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