diff --git a/htdocs/includes/odtphp/odf.php b/htdocs/includes/odtphp/odf.php
index b88bc56a489..9acd0d0cc4b 100644
--- a/htdocs/includes/odtphp/odf.php
+++ b/htdocs/includes/odtphp/odf.php
@@ -9,7 +9,7 @@ class OdfException extends Exception
* Encoding : ISO-8859-1
* Last commit by $Author$
* Date - $Date$
- * SVN Revision - $Rev: 42 $
+ * SVN Revision - $Rev: 56 $
* Id : $Id$
*
* @copyright GPL License 2008 - Julien Pauli - Cyril PIERRE de GEYER - Anaska (http://www.anaska.com)
@@ -26,9 +26,10 @@ class Odf
'PATH_TO_TMP' => '/tmp'
);
protected $file;
- protected $contentXml;
+ protected $contentXml; // To store content of content.xml file
+ protected $manifestXml; // To store content of META-INF/manifest.xml file
protected $tmpfile;
- protected $tmpdir;
+ protected $tmpdir='';
protected $images = array();
protected $vars = array();
protected $segments = array();
@@ -53,7 +54,7 @@ class Odf
}
$md5uniqid = md5(uniqid());
- if ($this->config['PATH_TO_TMP']) $this->tmpdir = preg_replace('|[\/]$|','',$this->config['PATH_TO_TMP']);
+ if ($this->config['PATH_TO_TMP']) $this->tmpdir = preg_replace('|[\/]$|','',$this->config['PATH_TO_TMP']); // Remove last \ or /
$this->tmpdir .= ($this->tmpdir?'/':'').$md5uniqid;
$this->tmpfile = $this->tmpdir.'/'.$md5uniqid.'.odt'; // We keep .odt extension to allow OpenOffice usage during debug.
@@ -69,20 +70,25 @@ class Odf
// Load zip proxy
$zipHandler = $this->config['ZIP_PROXY'];
- define('PCLZIP_TEMPORARY_DIR',$this->tmpdir);
+ if (!defined('PCLZIP_TEMPORARY_DIR')) define('PCLZIP_TEMPORARY_DIR',$this->tmpdir);
include_once('zip/'.$zipHandler.'.php');
if (! class_exists($this->config['ZIP_PROXY'])) {
throw new OdfException($this->config['ZIP_PROXY'] . ' class not found - check your php settings');
}
$this->file = new $zipHandler($this->tmpdir);
+
if ($this->file->open($filename) !== true) { // This also create the tmpdir directory
- throw new OdfException("Error while Opening the file '$filename' - Check your odt file");
+ throw new OdfException("Error while Opening the file '$filename' - Check your odt filename");
}
if (($this->contentXml = $this->file->getFromName('content.xml')) === false) {
- throw new OdfException("Nothing to parse - check that the content.xml file is correctly formed");
+ throw new OdfException("Nothing to parse - Check that the content.xml file is correctly formed in source file '$filename'");
}
- $this->file->close(); // This also remove the tmpdir directory
+ if (($this->manifestXml = $this->file->getFromName('META-INF/manifest.xml')) === false) {
+ throw new OdfException("Something is wrong with META-INF/manifest.xm in source file '$filename'");
+ }
+ $this->file->close();
+
//print "tmpdir=".$tmpdir;
//print "filename=".$filename;
@@ -112,6 +118,7 @@ class Odf
$this->vars[$this->config['DELIMITER_LEFT'] . $key . $this->config['DELIMITER_RIGHT']] = str_replace("\n", "
' . print_r($this->vars, true) . '', true); } + /** * Display the XML content of the file from odt document * as it is at the moment @@ -213,6 +225,7 @@ IMG; { return $this->contentXml; } + /** * Display loop segments declared with setSegment() * @@ -222,6 +235,7 @@ IMG; { return '
' . print_r(implode(' ', array_keys($this->segments)), true) . '';
}
+
/**
* Declare a segment in order to use it in a loop
*
@@ -261,8 +275,9 @@ IMG;
$this->_save();
}
}
+
/**
- * Internal save
+ * Write output file onto disk
*
* @throws OdfException
* @return void
@@ -276,9 +291,26 @@ IMG;
}
foreach ($this->images as $imageKey => $imageValue) {
$this->file->addFile($imageKey, 'Pictures/' . $imageValue);
+ $this->addImageToManifest($imageValue);
}
+ if (! $this->file->addFromString('./META-INF/manifest.xml', $this->manifestXml)) {
+ throw new OdfException('Error during file export: manifest.xml');
+ }
$this->file->close();
}
+
+ /**
+ * Update Manifest file according to added image files
+ *
+ * @param string $file Image file to add into manifest content
+ */
+ public function addImageToManifest($file)
+ {
+ $extension = explode('.', $file);
+ $add = '