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