<?php /** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category Zend * @package Zend_Search_Lucene * @subpackage Document * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id: OpenXml.php 20096 2010-01-06 02:05:09Z bkarwin $ */ /** Zend_Search_Lucene_Document */ require_once 'Zend/Search/Lucene/Document.php'; /** * OpenXML document. * * @category Zend * @package Zend_Search_Lucene * @subpackage Document * @copyright Copyright (c) 2005-2010 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ abstract class Zend_Search_Lucene_Document_OpenXml extends Zend_Search_Lucene_Document { /** * Xml Schema - Relationships * * @var string */ const SCHEMA_RELATIONSHIP = 'http://schemas.openxmlformats.org/package/2006/relationships'; /** * Xml Schema - Office document * * @var string */ const SCHEMA_OFFICEDOCUMENT = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument'; /** * Xml Schema - Core properties * * @var string */ const SCHEMA_COREPROPERTIES = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties'; /** * Xml Schema - Dublin Core * * @var string */ const SCHEMA_DUBLINCORE = 'http://purl.org/dc/elements/1.1/'; /** * Xml Schema - Dublin Core Terms * * @var string */ const SCHEMA_DUBLINCORETERMS = 'http://purl.org/dc/terms/'; /** * Extract metadata from document * * @param ZipArchive $package ZipArchive OpenXML package * @return array Key-value pairs containing document meta data */ protected function extractMetaData(ZipArchive $package) { // Data holders $coreProperties = array(); // Read relations and search for core properties $relations = simplexml_load_string($package->getFromName("_rels/.rels")); foreach ($relations->Relationship as $rel) { if ($rel["Type"] == Zend_Search_Lucene_Document_OpenXml::SCHEMA_COREPROPERTIES) { // Found core properties! Read in contents... $contents = simplexml_load_string( $package->getFromName(dirname($rel["Target"]) . "/" . basename($rel["Target"])) ); foreach ($contents->children(Zend_Search_Lucene_Document_OpenXml::SCHEMA_DUBLINCORE) as $child) { $coreProperties[$child->getName()] = (string)$child; } foreach ($contents->children(Zend_Search_Lucene_Document_OpenXml::SCHEMA_COREPROPERTIES) as $child) { $coreProperties[$child->getName()] = (string)$child; } foreach ($contents->children(Zend_Search_Lucene_Document_OpenXml::SCHEMA_DUBLINCORETERMS) as $child) { $coreProperties[$child->getName()] = (string)$child; } } } return $coreProperties; } /** * Determine absolute zip path * * @param string $path * @return string */ protected function absoluteZipPath($path) { $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path); $parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen'); $absolutes = array(); foreach ($parts as $part) { if ('.' == $part) continue; if ('..' == $part) { array_pop($absolutes); } else { $absolutes[] = $part; } } return implode('/', $absolutes); } }