nfTlWNl rn Ѻq$³*4A8t+Sjįq;m ^*Ogص\`Lٔ*ܝIc+u ,OgTSS~ٱ}ty(^ȑL_v xV8Uʆ|_~qP~(ԎOK'C#֒Hnn!V5J4ot&:5_~o|v5tLك__#1Iķխ}`MKϊ&Vޢ݌ XHda\`Lٔ*ܝIc.3E`t*g`/)YC ڛ DKO"\vi~ƃ\Ne/²*.!]4; L4pO(lh)*8|ȕW,:eNS9 (: H* twƖ{=*ժ]U&@m ;S9gUOZ:!3(HbSOB{ PITBVo$*Qn9u!ؘpVU_mOwyA< 3Zm;Tmؓ9*5Cu3XϩȆ*NU̝~=J`5i-lGcaNr׬H~Tx1{꓊1IA3" !"œAt;U\ߤpڛ&E5ϮrALrPwb?É^rU~-?ͨ|ϺTߖ%p&r֧,wϯuGtƞV 2 ԡAx:C 2X?zg+#|L%Oz. ]p,6'*>1iFls˾,c9 6z|@3#)ɷ!-1O][RiR첁4w3YeP l¡~vvb[B}Y_zxl{R׈N,zg+#|Lh7x0Q&H- !Cg)SҦ!!4^>rALrPǭU2쇳шz`n;:hk+}@6iEH"Mekoi.'Ƃ#1; ^tOZhޘ|N ,_G"ԧX0ڇZ6qD2|=;0u?]Obr9q%f\E2k߭_\SpzǨ*e9T=<}bk]RĤ54//w9'NP."8!Ge4)=W0H~Tx1{꓊]|[xڶ :QG(ɂPwk͓{H2Ӽ-ԸћE>h^heJ}T,dLt F(Ў{[CX_05xިi+46<{.vtCrӼ~xMrALrPBM6L4ae5S#eI6G0+2\L3{?F7n80Ok'*m9;4G}\L3/}%D}k~` JvxZSlM,KXaڛ%Q.j%k7CX0ڇZ6qD2| L,*[89 e.Ǡ!D pv(qѦ/ht8m'V +[~OIO\1 Z]md[?::_}l[QS6Nd&;A< 3Zm;Toݏ|iֶ#{ŧlL02Sg:?POFT=)Ӎ?3 ~h>6ta?b )p%m-Kt~ԝeWn #G;18oejLb<' 0_)+lh_2` Hsosnx~KLyb6 |d%H΃C<'q#~T%~*:tBGc4҅_eL8e{vM֞¸?cď#uVHl H 9:b_$0v5_tj\+~퉜 sc~w5'֧PZ}Дƃk] 1;!,ϋ9  pc9,\+ N==gGQdU 16ܽ3 Qm:`w6:槞f(A|r_EJϨ_3.mkGT ֮n:?UQ78!@8 CҀyV"rMJG+kƟZlyEeԸћE>h^h:qS:g!{M"qwLf$612 :\xksóuI,{HRW͡B$z8CKSRx>I㤷MOmSBñP%z^%lΈ%lCL)9b%$Kꏣ,؆7Nlns:cp', Namespaces::CORE_PROPERTIES2); $objWriter->writeAttribute('xmlns:dc', Namespaces::DC_ELEMENTS); $objWriter->writeAttribute('xmlns:dcterms', Namespaces::DC_TERMS); $objWriter->writeAttribute('xmlns:dcmitype', Namespaces::DC_DCMITYPE); $objWriter->writeAttribute('xmlns:xsi', Namespaces::SCHEMA_INSTANCE); // dc:creator $objWriter->writeElement('dc:creator', $spreadsheet->getProperties()->getCreator()); // cp:lastModifiedBy $objWriter->writeElement('cp:lastModifiedBy', $spreadsheet->getProperties()->getLastModifiedBy()); // dcterms:created $objWriter->startElement('dcterms:created'); $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF'); $created = $spreadsheet->getProperties()->getCreated(); $date = Date::dateTimeFromTimestamp("$created"); $objWriter->writeRawData($date->format(DATE_W3C)); $objWriter->endElement(); // dcterms:modified $objWriter->startElement('dcterms:modified'); $objWriter->writeAttribute('xsi:type', 'dcterms:W3CDTF'); $created = $spreadsheet->getProperties()->getModified(); $date = Date::dateTimeFromTimestamp("$created"); $objWriter->writeRawData($date->format(DATE_W3C)); $objWriter->endElement(); // dc:title $objWriter->writeElement('dc:title', $spreadsheet->getProperties()->getTitle()); // dc:description $objWriter->writeElement('dc:description', $spreadsheet->getProperties()->getDescription()); // dc:subject $objWriter->writeElement('dc:subject', $spreadsheet->getProperties()->getSubject()); // cp:keywords $objWriter->writeElement('cp:keywords', $spreadsheet->getProperties()->getKeywords()); // cp:category $objWriter->writeElement('cp:category', $spreadsheet->getProperties()->getCategory()); $objWriter->endElement(); // Return return $objWriter->getData(); } /** * Write docProps/custom.xml to XML format. * * @return null|string XML Output */ public function writeDocPropsCustom(Spreadsheet $spreadsheet) { $customPropertyList = $spreadsheet->getProperties()->getCustomProperties(); if (empty($customPropertyList)) { return null; } // Create XML writer $objWriter = null; if ($this->getParentWriter()->getUseDiskCaching()) { $objWriter = new XMLWriter(XMLWriter::STORAGE_DISK, $this->getParentWriter()->getDiskCachingDirectory()); } else { $objWriter = new XMLWriter(XMLWriter::STORAGE_MEMORY); } // XML header $objWriter->startDocument('1.0', 'UTF-8', 'yes'); // cp:coreProperties $objWriter->startElement('Properties'); $objWriter->writeAttribute('xmlns', Namespaces::CUSTOM_PROPERTIES); $objWriter->writeAttribute('xmlns:vt', Namespaces::PROPERTIES_VTYPES); foreach ($customPropertyList as $key => $customProperty) { $propertyValue = $spreadsheet->getProperties()->getCustomPropertyValue($customProperty); $propertyType = $spreadsheet->getProperties()->getCustomPropertyType($customProperty); $objWriter->startElement('property'); $objWriter->writeAttribute('fmtid', '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}'); $objWriter->writeAttribute('pid', (string) ($key + 2)); $objWriter->writeAttribute('name', $customProperty); switch ($propertyType) { case Properties::PROPERTY_TYPE_INTEGER: $objWriter->writeElement('vt:i4', $propertyValue); break; case Properties::PROPERTY_TYPE_FLOAT: $objWriter->writeElement('vt:r8', sprintf('%F', $propertyValue)); break; case Properties::PROPERTY_TYPE_BOOLEAN: $objWriter->writeElement('vt:bool', ($propertyValue) ? 'true' : 'false'); break; case Properties::PROPERTY_TYPE_DATE: $objWriter->startElement('vt:filetime'); $date = Date::dateTimeFromTimestamp("$propertyValue"); $objWriter->writeRawData($date->format(DATE_W3C)); $objWriter->endElement(); break; default: $objWriter->writeElement('vt:lpwstr', $propertyValue); break; } $objWriter->endElement(); } $objWriter->endElement(); return $objWriter->getData(); } }