From 79a8b437ea3a820c8ab32ab5baf752965340d1d4 Mon Sep 17 00:00:00 2001 From: milkyway <ackerm75@hotmail.com> Date: Tue, 7 Nov 2023 07:11:06 +0100 Subject: [PATCH 1/9] Add Field 'Filename' --- src/PhpWord/Element/Field.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/PhpWord/Element/Field.php b/src/PhpWord/Element/Field.php index 68a5296d7a..c79f51e427 100644 --- a/src/PhpWord/Element/Field.php +++ b/src/PhpWord/Element/Field.php @@ -85,6 +85,10 @@ class Field extends AbstractElement 'properties' => ['StyleIdentifier' => ''], 'options' => ['PreserveFormat'], ], + 'FILENAME' => [ + 'properties' => [], + 'options' => ['Path', 'PreserveFormat'], + ], ]; /** From 1ce853e8bd86081413e860fcd00947351704b861 Mon Sep 17 00:00:00 2001 From: milkyway <ackerm75@hotmail.com> Date: Tue, 7 Nov 2023 07:18:31 +0100 Subject: [PATCH 2/9] Add 'Path' for Filename and double backslashes --- src/PhpWord/Writer/Word2007/Element/Field.php | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/PhpWord/Writer/Word2007/Element/Field.php b/src/PhpWord/Writer/Word2007/Element/Field.php index 6fdb48b0f4..4d7c2a0b46 100644 --- a/src/PhpWord/Writer/Word2007/Element/Field.php +++ b/src/PhpWord/Writer/Word2007/Element/Field.php @@ -166,15 +166,15 @@ private function buildPropertiesAndOptions(\PhpOffice\PhpWord\Element\Field $ele foreach ($properties as $propkey => $propval) { switch ($propkey) { case 'format': - $propertiesAndOptions .= '\* ' . $propval . ' '; + $propertiesAndOptions .= '\\* ' . $propval . ' '; break; case 'numformat': - $propertiesAndOptions .= '\# ' . $propval . ' '; + $propertiesAndOptions .= '\\# ' . $propval . ' '; break; case 'dateformat': - $propertiesAndOptions .= '\@ "' . $propval . '" '; + $propertiesAndOptions .= '\\@ "' . $propval . '" '; break; case 'macroname': @@ -192,27 +192,31 @@ private function buildPropertiesAndOptions(\PhpOffice\PhpWord\Element\Field $ele foreach ($options as $option) { switch ($option) { case 'PreserveFormat': - $propertiesAndOptions .= '\* MERGEFORMAT '; + $propertiesAndOptions .= '\\* MERGEFORMAT '; break; case 'LunarCalendar': - $propertiesAndOptions .= '\h '; + $propertiesAndOptions .= '\\h '; break; case 'SakaEraCalendar': - $propertiesAndOptions .= '\s '; + $propertiesAndOptions .= '\\s '; break; case 'LastUsedFormat': - $propertiesAndOptions .= '\l '; + $propertiesAndOptions .= '\\l '; break; case 'Bold': - $propertiesAndOptions .= '\b '; + $propertiesAndOptions .= '\\b '; break; case 'Italic': - $propertiesAndOptions .= '\i '; + $propertiesAndOptions .= '\\i '; + + break; + case 'Path': + $propertiesAndOptions .= '\\p '; break; default: From 143d2a14bbe13db9d3b7d51e0d7c00f7750e41c0 Mon Sep 17 00:00:00 2001 From: milkyway <ackerm75@hotmail.com> Date: Tue, 7 Nov 2023 08:08:40 +0100 Subject: [PATCH 3/9] Added field 'filename' --- src/PhpWord/Writer/ODText/Element/Field.php | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/PhpWord/Writer/ODText/Element/Field.php b/src/PhpWord/Writer/ODText/Element/Field.php index 1bfdbc9301..46f62b0f02 100644 --- a/src/PhpWord/Writer/ODText/Element/Field.php +++ b/src/PhpWord/Writer/ODText/Element/Field.php @@ -15,7 +15,7 @@ * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3 */ // Not fully implemented -// - supports only PAGE and NUMPAGES +// - supports only PAGE, NUMPAGES, DATE and FILENAME // - supports only default formats and options // - supports style only if specified by name // - spaces before and after field may be dropped @@ -44,6 +44,7 @@ public function write(): void case 'date': case 'page': case 'numpages': + case 'filename': $this->writeDefault($element, $type); break; @@ -78,6 +79,18 @@ private function writeDefault(\PhpOffice\PhpWord\Element\Field $element, $type): $xmlWriter->startElement('text:page-count'); $xmlWriter->endElement(); + break; + case 'filename': + $xmlWriter->startElement('text:file-name'); + $xmlWriter->writeAttribute('text:fixed', 'false'); + $options = $element->getOptions(); + if ($options != null && in_array('Path', $options)) { + $xmlWriter->writeAttribute('text:display', 'full'); + } else { + $xmlWriter->writeAttribute('text:display', 'name'); + } + $xmlWriter->endElement(); + break; } $xmlWriter->endElement(); // text:span From 0701c92fbffc19c1529b676e24f768dde4acc1dc Mon Sep 17 00:00:00 2001 From: milkyway <ackerm75@hotmail.com> Date: Tue, 7 Nov 2023 08:29:05 +0100 Subject: [PATCH 4/9] Added field 'Filenane' --- src/PhpWord/Writer/RTF/Element/Field.php | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/PhpWord/Writer/RTF/Element/Field.php b/src/PhpWord/Writer/RTF/Element/Field.php index 37f203aca8..bc924c01d2 100644 --- a/src/PhpWord/Writer/RTF/Element/Field.php +++ b/src/PhpWord/Writer/RTF/Element/Field.php @@ -20,7 +20,7 @@ /** * Field element writer. * - * Note: for now, only date, page and numpages fields are implemented for RTF. + * Note: for now, only date, page, numpages and filenane fields are implemented for RTF. */ class Field extends Text { @@ -66,6 +66,16 @@ protected function writeNumpages() return 'NUMPAGES'; } + protected function writeFilename(\PhpOffice\PhpWord\Element\Field $element) + { + $content = 'FILENAME'; + $options = $element->getOptions(); + if ($options != null && in_array('Path', $options)) { + $content .= ' \\\\p'; + } + return $content; + } + protected function writeDate(\PhpOffice\PhpWord\Element\Field $element) { $content = ''; From 9b90673267775d54bcf6903bb50dcf28e8bde794 Mon Sep 17 00:00:00 2001 From: milkyway <ackerm75@hotmail.com> Date: Tue, 7 Nov 2023 08:29:30 +0100 Subject: [PATCH 5/9] Typo --- src/PhpWord/Writer/RTF/Element/Field.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PhpWord/Writer/RTF/Element/Field.php b/src/PhpWord/Writer/RTF/Element/Field.php index bc924c01d2..a852baf799 100644 --- a/src/PhpWord/Writer/RTF/Element/Field.php +++ b/src/PhpWord/Writer/RTF/Element/Field.php @@ -20,7 +20,7 @@ /** * Field element writer. * - * Note: for now, only date, page, numpages and filenane fields are implemented for RTF. + * Note: for now, only date, page, numpages and filename fields are implemented for RTF. */ class Field extends Text { From 7ff41b52eb2992c377c7f2f23881df389129f960 Mon Sep 17 00:00:00 2001 From: milkyway <ackerm75@hotmail.com> Date: Tue, 7 Nov 2023 08:31:49 +0100 Subject: [PATCH 6/9] Added field 'FILENAME' --- docs/usage/elements/field.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/usage/elements/field.md b/docs/usage/elements/field.md index 10492cc742..fe8e9756fc 100644 --- a/docs/usage/elements/field.md +++ b/docs/usage/elements/field.md @@ -7,6 +7,7 @@ Currently the following fields are supported: - DATE - XE - INDEX +- FILENAME ``` php <?php @@ -36,4 +37,4 @@ $section->addField('XE', array(), array(), $fieldText); //this actually adds the index $section->addField('INDEX', array(), array('\\e " " \\h "A" \\c "3"'), 'right click to update index'); -``` \ No newline at end of file +``` From 71d482065bda8dc1492260f699db8493b4172aa1 Mon Sep 17 00:00:00 2001 From: milkyway <ackerm75@hotmail.com> Date: Tue, 7 Nov 2023 08:35:22 +0100 Subject: [PATCH 7/9] Added example for filename field --- samples/Sample_27_Field.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/samples/Sample_27_Field.php b/samples/Sample_27_Field.php index d250946169..575933ec30 100644 --- a/samples/Sample_27_Field.php +++ b/samples/Sample_27_Field.php @@ -26,6 +26,9 @@ $section->addText('Number of pages field:'); $section->addField('NUMPAGES', ['numformat' => '0,00', 'format' => 'Arabic'], ['PreserveFormat']); + +$section->addText('Filename:'); +$section->addField('FILENAME', ['format' => 'Upper'], ['Path', 'PreserveFormat']); $section->addTextBreak(); $textrun = $section->addTextRun(); From 24a7dc203187e4fe96aead680099f1261feca0cb Mon Sep 17 00:00:00 2001 From: milkyway <ackerm75@hotmail.com> Date: Tue, 7 Nov 2023 08:36:35 +0100 Subject: [PATCH 8/9] Added formatting properties --- src/PhpWord/Element/Field.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/PhpWord/Element/Field.php b/src/PhpWord/Element/Field.php index c79f51e427..b371bb80d7 100644 --- a/src/PhpWord/Element/Field.php +++ b/src/PhpWord/Element/Field.php @@ -86,7 +86,9 @@ class Field extends AbstractElement 'options' => ['PreserveFormat'], ], 'FILENAME' => [ - 'properties' => [], + 'properties' => [ + 'format' => ['Upper', 'Lower', 'FirstCap', 'Caps'], + ], 'options' => ['Path', 'PreserveFormat'], ], ]; From 442fc6436b578146f0415ed34a0c28d7c6e454a1 Mon Sep 17 00:00:00 2001 From: milkyway <ackerm75@hotmail.com> Date: Tue, 7 Nov 2023 08:46:25 +0100 Subject: [PATCH 9/9] Update Sample_27_Field.php --- samples/Sample_27_Field.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/Sample_27_Field.php b/samples/Sample_27_Field.php index 575933ec30..fd441ba022 100644 --- a/samples/Sample_27_Field.php +++ b/samples/Sample_27_Field.php @@ -27,7 +27,7 @@ $section->addText('Number of pages field:'); $section->addField('NUMPAGES', ['numformat' => '0,00', 'format' => 'Arabic'], ['PreserveFormat']); -$section->addText('Filename:'); +$section->addText('Filename field:'); $section->addField('FILENAME', ['format' => 'Upper'], ['Path', 'PreserveFormat']); $section->addTextBreak();