@@ -29,12 +29,22 @@ class Field extends Text
29
29
*/
30
30
public function write ()
31
31
{
32
- $ xmlWriter = $ this ->getXmlWriter ();
33
32
$ element = $ this ->getElement ();
34
33
if (!$ element instanceof \PhpOffice \PhpWord \Element \Field) {
35
34
return ;
36
35
}
37
36
37
+ $ methodName = 'write ' . ucfirst (strtolower ($ element ->getType ()));
38
+ if (method_exists ($ this , $ methodName )) {
39
+ $ this ->$ methodName ($ element );
40
+ } else {
41
+ $ this ->writeDefault ($ element );
42
+ }
43
+ }
44
+
45
+ private function writeDefault (\PhpOffice \PhpWord \Element \Field $ element )
46
+ {
47
+ $ xmlWriter = $ this ->getXmlWriter ();
38
48
$ this ->startElementP ();
39
49
40
50
$ xmlWriter ->startElement ('w:r ' );
@@ -104,6 +114,51 @@ public function write()
104
114
$ this ->endElementP (); // w:p
105
115
}
106
116
117
+ /**
118
+ * Writes a macrobutton field
119
+ *
120
+ * //TODO A lot of code duplication with general method, should maybe be refactored
121
+ * @param \PhpOffice\PhpWord\Element\Field $element
122
+ */
123
+ protected function writeMacrobutton (\PhpOffice \PhpWord \Element \Field $ element )
124
+ {
125
+ $ xmlWriter = $ this ->getXmlWriter ();
126
+ $ this ->startElementP ();
127
+
128
+ $ xmlWriter ->startElement ('w:r ' );
129
+ $ xmlWriter ->startElement ('w:fldChar ' );
130
+ $ xmlWriter ->writeAttribute ('w:fldCharType ' , 'begin ' );
131
+ $ xmlWriter ->endElement (); // w:fldChar
132
+ $ xmlWriter ->endElement (); // w:r
133
+
134
+ $ instruction = ' ' . $ element ->getType () . ' ' . $ this ->buildPropertiesAndOptions ($ element );
135
+ if (is_string ($ element ->getText ())) {
136
+ $ instruction .= $ element ->getText () . ' ' ;
137
+ }
138
+
139
+ $ xmlWriter ->startElement ('w:r ' );
140
+ $ xmlWriter ->startElement ('w:instrText ' );
141
+ $ xmlWriter ->writeAttribute ('xml:space ' , 'preserve ' );
142
+ $ xmlWriter ->text ($ instruction );
143
+ $ xmlWriter ->endElement (); // w:instrText
144
+ $ xmlWriter ->endElement (); // w:r
145
+
146
+ if ($ element ->getText () != null ) {
147
+ if ($ element ->getText () instanceof \PhpOffice \PhpWord \Element \TextRun) {
148
+ $ containerWriter = new Container ($ xmlWriter , $ element ->getText (), true );
149
+ $ containerWriter ->write ();
150
+ }
151
+ }
152
+
153
+ $ xmlWriter ->startElement ('w:r ' );
154
+ $ xmlWriter ->startElement ('w:fldChar ' );
155
+ $ xmlWriter ->writeAttribute ('w:fldCharType ' , 'end ' );
156
+ $ xmlWriter ->endElement (); // w:fldChar
157
+ $ xmlWriter ->endElement (); // w:r
158
+
159
+ $ this ->endElementP (); // w:p
160
+ }
161
+
107
162
private function buildPropertiesAndOptions (\PhpOffice \PhpWord \Element \Field $ element )
108
163
{
109
164
$ propertiesAndOptions = '' ;
@@ -119,6 +174,9 @@ private function buildPropertiesAndOptions(\PhpOffice\PhpWord\Element\Field $ele
119
174
case 'dateformat ' :
120
175
$ propertiesAndOptions .= '\@ " ' . $ propval . '" ' ;
121
176
break ;
177
+ case 'macroname ' :
178
+ $ propertiesAndOptions .= $ propval . ' ' ;
179
+ break ;
122
180
}
123
181
}
124
182
0 commit comments