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