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