visualizer
/
vendor
/
phpoffice
/
phpspreadsheet
/
src
/
PhpSpreadsheet
/
Reader
/
Ods
/
Properties.php
Properties.php in Visualizer – Tables & Charts Manager with Built-in AI Generator 3.9.0, at vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Reader/Ods/Properties.php
| 1 | <?php |
| 2 | |
| 3 | namespace PhpOffice\PhpSpreadsheet\Reader\Ods; |
| 4 | |
| 5 | use PhpOffice\PhpSpreadsheet\Document\Properties as DocumentProperties; |
| 6 | use PhpOffice\PhpSpreadsheet\Spreadsheet; |
| 7 | |
| 8 | class Properties |
| 9 | { |
| 10 | private $spreadsheet; |
| 11 | |
| 12 | public function __construct(Spreadsheet $spreadsheet) |
| 13 | { |
| 14 | $this->spreadsheet = $spreadsheet; |
| 15 | } |
| 16 | |
| 17 | public function load(\SimpleXMLElement $xml, $namespacesMeta) |
| 18 | { |
| 19 | $docProps = $this->spreadsheet->getProperties(); |
| 20 | $officeProperty = $xml->children($namespacesMeta['office']); |
| 21 | foreach ($officeProperty as $officePropertyData) { |
| 22 | /** @var \SimpleXMLElement $officePropertyData */ |
| 23 | $officePropertiesDC = (object) []; |
| 24 | if (isset($namespacesMeta['dc'])) { |
| 25 | $officePropertiesDC = $officePropertyData->children($namespacesMeta['dc']); |
| 26 | } |
| 27 | $this->setCoreProperties($docProps, $officePropertiesDC); |
| 28 | |
| 29 | $officePropertyMeta = (object) []; |
| 30 | if (isset($namespacesMeta['dc'])) { |
| 31 | $officePropertyMeta = $officePropertyData->children($namespacesMeta['meta']); |
| 32 | } |
| 33 | foreach ($officePropertyMeta as $propertyName => $propertyValue) { |
| 34 | $this->setMetaProperties($namespacesMeta, $propertyValue, $propertyName, $docProps); |
| 35 | } |
| 36 | } |
| 37 | } |
| 38 | |
| 39 | private function setCoreProperties(DocumentProperties $docProps, \SimpleXMLElement $officePropertyDC) |
| 40 | { |
| 41 | foreach ($officePropertyDC as $propertyName => $propertyValue) { |
| 42 | $propertyValue = (string) $propertyValue; |
| 43 | switch ($propertyName) { |
| 44 | case 'title': |
| 45 | $docProps->setTitle($propertyValue); |
| 46 | |
| 47 | break; |
| 48 | case 'subject': |
| 49 | $docProps->setSubject($propertyValue); |
| 50 | |
| 51 | break; |
| 52 | case 'creator': |
| 53 | $docProps->setCreator($propertyValue); |
| 54 | $docProps->setLastModifiedBy($propertyValue); |
| 55 | |
| 56 | break; |
| 57 | case 'creation-date': |
| 58 | $creationDate = strtotime($propertyValue); |
| 59 | $docProps->setCreated($creationDate); |
| 60 | $docProps->setModified($creationDate); |
| 61 | |
| 62 | break; |
| 63 | case 'keyword': |
| 64 | $docProps->setKeywords($propertyValue); |
| 65 | |
| 66 | break; |
| 67 | case 'description': |
| 68 | $docProps->setDescription($propertyValue); |
| 69 | |
| 70 | break; |
| 71 | } |
| 72 | } |
| 73 | } |
| 74 | |
| 75 | private function setMetaProperties( |
| 76 | $namespacesMeta, |
| 77 | \SimpleXMLElement $propertyValue, |
| 78 | $propertyName, |
| 79 | DocumentProperties $docProps |
| 80 | ) { |
| 81 | $propertyValueAttributes = $propertyValue->attributes($namespacesMeta['meta']); |
| 82 | $propertyValue = (string) $propertyValue; |
| 83 | switch ($propertyName) { |
| 84 | case 'initial-creator': |
| 85 | $docProps->setCreator($propertyValue); |
| 86 | |
| 87 | break; |
| 88 | case 'keyword': |
| 89 | $docProps->setKeywords($propertyValue); |
| 90 | |
| 91 | break; |
| 92 | case 'creation-date': |
| 93 | $creationDate = strtotime($propertyValue); |
| 94 | $docProps->setCreated($creationDate); |
| 95 | |
| 96 | break; |
| 97 | case 'user-defined': |
| 98 | $this->setUserDefinedProperty($propertyValueAttributes, $propertyValue, $docProps); |
| 99 | |
| 100 | break; |
| 101 | } |
| 102 | } |
| 103 | |
| 104 | private function setUserDefinedProperty($propertyValueAttributes, $propertyValue, DocumentProperties $docProps) |
| 105 | { |
| 106 | $propertyValueName = ''; |
| 107 | $propertyValueType = DocumentProperties::PROPERTY_TYPE_STRING; |
| 108 | foreach ($propertyValueAttributes as $key => $value) { |
| 109 | if ($key == 'name') { |
| 110 | $propertyValueName = (string) $value; |
| 111 | } elseif ($key == 'value-type') { |
| 112 | switch ($value) { |
| 113 | case 'date': |
| 114 | $propertyValue = DocumentProperties::convertProperty($propertyValue, 'date'); |
| 115 | $propertyValueType = DocumentProperties::PROPERTY_TYPE_DATE; |
| 116 | |
| 117 | break; |
| 118 | case 'boolean': |
| 119 | $propertyValue = DocumentProperties::convertProperty($propertyValue, 'bool'); |
| 120 | $propertyValueType = DocumentProperties::PROPERTY_TYPE_BOOLEAN; |
| 121 | |
| 122 | break; |
| 123 | case 'float': |
| 124 | $propertyValue = DocumentProperties::convertProperty($propertyValue, 'r4'); |
| 125 | $propertyValueType = DocumentProperties::PROPERTY_TYPE_FLOAT; |
| 126 | |
| 127 | break; |
| 128 | default: |
| 129 | $propertyValueType = DocumentProperties::PROPERTY_TYPE_STRING; |
| 130 | } |
| 131 | } |
| 132 | } |
| 133 | |
| 134 | $docProps->setCustomProperty($propertyValueName, $propertyValue, $propertyValueType); |
| 135 | } |
| 136 | } |
| 137 |