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}