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