xref: /plugin/struct/helper/lookup.php (revision 6d71ffef4f90b9781358c4719dfc7b6b808519db) !
1b193f1eeSSzymon Olewniczak<?php
2b193f1eeSSzymon Olewniczakuse dokuwiki\plugin\struct\meta\AccessTable;
3b193f1eeSSzymon Olewniczakuse dokuwiki\plugin\struct\meta\AccessTableLookup;
4b193f1eeSSzymon Olewniczakuse dokuwiki\plugin\struct\meta\StructException;
5b193f1eeSSzymon Olewniczak
6b193f1eeSSzymon Olewniczak/**
7b193f1eeSSzymon Olewniczak * Allows adding a lookup schema as a bureaucracy action
8b193f1eeSSzymon Olewniczak *
9b193f1eeSSzymon Olewniczak */
10b193f1eeSSzymon Olewniczakclass helper_plugin_struct_lookup extends helper_plugin_bureaucracy_action {
11b193f1eeSSzymon Olewniczak
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     */
22b193f1eeSSzymon Olewniczak    public function run($fields, $thanks, $argv) {
23b193f1eeSSzymon Olewniczak        global $ID;
24b193f1eeSSzymon Olewniczak
25b193f1eeSSzymon Olewniczak        // get all struct values and their associated schemas
26b193f1eeSSzymon Olewniczak        $tosave = array();
27b193f1eeSSzymon Olewniczak        foreach($fields as $field) {
28b193f1eeSSzymon Olewniczak            if(!is_a($field, 'helper_plugin_struct_field')) continue;
29b193f1eeSSzymon Olewniczak            /** @var helper_plugin_struct_field $field */
30b193f1eeSSzymon Olewniczak            $tbl = $field->column->getTable();
31b193f1eeSSzymon Olewniczak            $lbl = $field->column->getLabel();
32b193f1eeSSzymon Olewniczak            if(!isset($tosave[$tbl])) $tosave[$tbl] = array();
33b193f1eeSSzymon Olewniczak            $tosave[$tbl][$lbl] = $field->getParam('value');
34b193f1eeSSzymon Olewniczak        }
35b193f1eeSSzymon Olewniczak
36b193f1eeSSzymon Olewniczak        foreach($tosave as $table => $data) {
37b193f1eeSSzymon Olewniczak            $access = AccessTable::byTableName($table, 0, 0);
38b193f1eeSSzymon Olewniczak            if (!$access instanceof AccessTableLookup) continue;
39b193f1eeSSzymon Olewniczak
40b193f1eeSSzymon Olewniczak            if(!$access->getSchema()->isEditable()) {
41*6d71ffefSSzymon Olewniczak                msg('lookup save error: no permission for schema', -1);
42*6d71ffefSSzymon Olewniczak                return false;
43b193f1eeSSzymon Olewniczak            }
44b193f1eeSSzymon Olewniczak            $validator = $access->getValidator($data);
45b193f1eeSSzymon Olewniczak            if($validator->validate()) {
46b193f1eeSSzymon Olewniczak                $validator->saveData();
47b193f1eeSSzymon Olewniczak            }
48b193f1eeSSzymon Olewniczak        }
49b193f1eeSSzymon Olewniczak
50b193f1eeSSzymon Olewniczak        // set thank you message
51b193f1eeSSzymon Olewniczak        if(!$thanks) {
52b193f1eeSSzymon Olewniczak            $thanks = sprintf($this->getLang('bureaucracy_action_struct_lookup_thanks'), wl($ID));
53b193f1eeSSzymon Olewniczak        } else {
54b193f1eeSSzymon Olewniczak            $thanks = hsc($thanks);
55b193f1eeSSzymon Olewniczak        }
56b193f1eeSSzymon Olewniczak
57b193f1eeSSzymon Olewniczak        return $thanks;
58b193f1eeSSzymon Olewniczak    }
59b193f1eeSSzymon Olewniczak}