Differences Between: [Versions 310 and 311] [Versions 311 and 400] [Versions 311 and 401] [Versions 311 and 402] [Versions 311 and 403] [Versions 39 and 311]
1 <?php 2 3 namespace PhpOffice\PhpSpreadsheet\Reader\Ods; 4 5 use PhpOffice\PhpSpreadsheet\Document\Properties as DocumentProperties; 6 use PhpOffice\PhpSpreadsheet\Spreadsheet; 7 use SimpleXMLElement; 8 9 class Properties 10 { 11 private $spreadsheet; 12 13 public function __construct(Spreadsheet $spreadsheet) 14 { 15 $this->spreadsheet = $spreadsheet; 16 } 17 18 public function load(SimpleXMLElement $xml, $namespacesMeta): void 19 { 20 $docProps = $this->spreadsheet->getProperties(); 21 $officeProperty = $xml->children($namespacesMeta['office']); 22 foreach ($officeProperty as $officePropertyData) { 23 // @var \SimpleXMLElement $officePropertyData 24 if (isset($namespacesMeta['dc'])) { 25 $officePropertiesDC = $officePropertyData->children($namespacesMeta['dc']); 26 $this->setCoreProperties($docProps, $officePropertiesDC); 27 } 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): void 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 'date': 58 $creationDate = strtotime($propertyValue); 59 $docProps->setCreated($creationDate); 60 $docProps->setModified($creationDate); 61 62 break; 63 case 'description': 64 $docProps->setDescription($propertyValue); 65 66 break; 67 } 68 } 69 } 70 71 private function setMetaProperties( 72 $namespacesMeta, 73 SimpleXMLElement $propertyValue, 74 $propertyName, 75 DocumentProperties $docProps 76 ): void { 77 $propertyValueAttributes = $propertyValue->attributes($namespacesMeta['meta']); 78 $propertyValue = (string) $propertyValue; 79 switch ($propertyName) { 80 case 'initial-creator': 81 $docProps->setCreator($propertyValue); 82 83 break; 84 case 'keyword': 85 $docProps->setKeywords($propertyValue); 86 87 break; 88 case 'creation-date': 89 $creationDate = strtotime($propertyValue); 90 $docProps->setCreated($creationDate); 91 92 break; 93 case 'user-defined': 94 $this->setUserDefinedProperty($propertyValueAttributes, $propertyValue, $docProps); 95 96 break; 97 } 98 } 99 100 private function setUserDefinedProperty($propertyValueAttributes, $propertyValue, DocumentProperties $docProps): void 101 { 102 $propertyValueName = ''; 103 $propertyValueType = DocumentProperties::PROPERTY_TYPE_STRING; 104 foreach ($propertyValueAttributes as $key => $value) { 105 if ($key == 'name') { 106 $propertyValueName = (string) $value; 107 } elseif ($key == 'value-type') { 108 switch ($value) { 109 case 'date': 110 $propertyValue = DocumentProperties::convertProperty($propertyValue, 'date'); 111 $propertyValueType = DocumentProperties::PROPERTY_TYPE_DATE; 112 113 break; 114 case 'boolean': 115 $propertyValue = DocumentProperties::convertProperty($propertyValue, 'bool'); 116 $propertyValueType = DocumentProperties::PROPERTY_TYPE_BOOLEAN; 117 118 break; 119 case 'float': 120 $propertyValue = DocumentProperties::convertProperty($propertyValue, 'r4'); 121 $propertyValueType = DocumentProperties::PROPERTY_TYPE_FLOAT; 122 123 break; 124 default: 125 $propertyValueType = DocumentProperties::PROPERTY_TYPE_STRING; 126 } 127 } 128 } 129 130 $docProps->setCustomProperty($propertyValueName, $propertyValue, $propertyValueType); 131 } 132 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body