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}