暫無描述

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. <?php
  2. /**
  3. * This file is part of PHPWord - A pure PHP library for reading and writing
  4. * word processing documents.
  5. *
  6. * PHPWord is free software distributed under the terms of the GNU Lesser
  7. * General Public License version 3 as published by the Free Software Foundation.
  8. *
  9. * For the full copyright and license information, please read the LICENSE
  10. * file that was distributed with this source code. For the full list of
  11. * contributors, visit https://github.com/PHPOffice/PHPWord/contributors.
  12. *
  13. * @link https://github.com/PHPOffice/PHPWord
  14. * @copyright 2010-2014 PHPWord contributors
  15. * @license http://www.gnu.org/licenses/lgpl.txt LGPL version 3
  16. */
  17. namespace PhpOffice\PhpWord\Writer\Word2007\Element;
  18. use PhpOffice\PhpWord\Element\SDT as SDTElement;
  19. use PhpOffice\PhpWord\Shared\XMLWriter;
  20. /**
  21. * Structured document tag element writer
  22. *
  23. * @since 0.12.0
  24. * @link http://www.datypic.com/sc/ooxml/t-w_CT_SdtBlock.html
  25. * @SuppressWarnings(PHPMD.UnusedPrivateMethod)
  26. */
  27. class SDT extends Text
  28. {
  29. /**
  30. * Write element.
  31. *
  32. * @return void
  33. */
  34. public function write()
  35. {
  36. $xmlWriter = $this->getXmlWriter();
  37. $element = $this->getElement();
  38. if (!$element instanceof SDTElement) {
  39. return;
  40. }
  41. $type = $element->getType();
  42. $writeFormField = "write{$type}";
  43. $this->startElementP();
  44. $xmlWriter->startElement('w:sdt');
  45. // Properties
  46. $xmlWriter->startElement('w:sdtPr');
  47. $xmlWriter->writeElementBlock('w:id', 'w:val', rand(100000000, 999999999));
  48. $xmlWriter->writeElementBlock('w:lock', 'w:val', 'sdtLocked');
  49. $this->$writeFormField($xmlWriter, $element);
  50. $xmlWriter->endElement(); // w:sdtPr
  51. // Content
  52. $xmlWriter->startElement('w:sdtContent');
  53. $xmlWriter->startElement('w:r');
  54. $xmlWriter->startElement('w:t');
  55. $xmlWriter->writeRaw('Pick value');
  56. $xmlWriter->endElement(); // w:t
  57. $xmlWriter->endElement(); // w:r
  58. $xmlWriter->endElement(); // w:sdtContent
  59. $xmlWriter->endElement(); // w:sdt
  60. $this->endElementP(); // w:p
  61. }
  62. /**
  63. * Write combo box.
  64. *
  65. * @link http://www.datypic.com/sc/ooxml/t-w_CT_SdtComboBox.html
  66. * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter
  67. * @param \PhpOffice\PhpWord\Element\SDT $element
  68. * @return void
  69. */
  70. private function writeComboBox(XMLWriter $xmlWriter, SDTElement $element)
  71. {
  72. $type = $element->getType();
  73. $listItems = $element->getListItems();
  74. $xmlWriter->startElement("w:{$type}");
  75. foreach ($listItems as $key => $val) {
  76. $xmlWriter->writeElementBlock('w:listItem', array('w:value' => $key, 'w:displayText' => $val));
  77. }
  78. $xmlWriter->endElement(); // w:{$type}
  79. }
  80. /**
  81. * Write drop down list.
  82. *
  83. * @link http://www.datypic.com/sc/ooxml/t-w_CT_SdtDropDownList.html
  84. * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter
  85. * @param \PhpOffice\PhpWord\Element\SDT $element
  86. * @return void
  87. */
  88. private function writeDropDownList(XMLWriter $xmlWriter, SDTElement $element)
  89. {
  90. $this->writecomboBox($xmlWriter, $element);
  91. }
  92. /**
  93. * Write date.
  94. *
  95. * @link http://www.datypic.com/sc/ooxml/t-w_CT_SdtDate.html
  96. * @param \PhpOffice\PhpWord\Shared\XMLWriter $xmlWriter
  97. * @param \PhpOffice\PhpWord\Element\SDT $element
  98. * @return void
  99. */
  100. private function writeDate(XMLWriter $xmlWriter, SDTElement $element)
  101. {
  102. $type = $element->getType();
  103. $xmlWriter->startElement("w:{$type}");
  104. $xmlWriter->writeElementBlock('w:dateFormat', 'w:val', 'd/M/yyyy');
  105. $xmlWriter->writeElementBlock('w:lid', 'w:val', 'en-US');
  106. $xmlWriter->writeElementBlock('w:storeMappedDataAs', 'w:val', 'dateTime');
  107. $xmlWriter->writeElementBlock('w:calendar', 'w:val', 'gregorian');
  108. $xmlWriter->endElement(); // w:date
  109. }
  110. }