Skip to content
Snippets Groups Projects
Commit 09b6b7a6 authored by Laurent Destailleur's avatar Laurent Destailleur
Browse files

New: Add OdtPHP to generate documents from odt models.

parent e35c385c
Branches
Tags
No related merge requests found
......@@ -22,6 +22,7 @@ GeoIP x.x Yes GeoIP Ma
iWebkit 4.6.2 LGPL 3.0 Yes Iphone templates framework
MagPieRss 0.72 GPL 2.0 Yes Load RSS
NuSoap 0.7.3 LGPL 2.1 Yes Interfaces with third tools
OdtPHP 1.0.1 GPL 2.0 Yes Mibrary to build/edit ODT files
PHP_WriteExcel 0.3.0 LGPL 2.1 Yes Excel files generation
PHP_ExcelReader 2.21 MIT License Yes Parse and retrieve information from XLS files
Prototype 1.6.0.3 MIT License Yes Ajax library
......
<?php
require 'SegmentIterator.php';
class SegmentException extends Exception
{}
/**
* Class for handling templating segments with odt files
* You need PHP 5.2 at least
* You need Zip Extension or PclZip library
* Encoding : ISO-8859-1
* Last commit by $Author$
* Date - $Date$
* SVN Revision - $Rev: 44 $
* Id : $Id$
*
* @copyright GPL License 2008 - Julien Pauli - Cyril PIERRE de GEYER - Anaska (http://www.anaska.com)
* @license http://www.gnu.org/copyleft/gpl.html GPL License
* @version 1.3
*/
class Segment implements IteratorAggregate, Countable
{
protected $xml;
protected $xmlParsed = '';
protected $name;
protected $children = array();
protected $vars = array();
protected $images = array();
protected $odf;
protected $file;
/**
* Constructor
*
* @param string $name name of the segment to construct
* @param string $xml XML tree of the segment
*/
public function __construct($name, $xml, $odf)
{
$this->name = (string) $name;
$this->xml = (string) $xml;
$this->odf = $odf;
$zipHandler = $this->odf->getConfig('ZIP_PROXY');
$this->file = new $zipHandler();
$this->_analyseChildren($this->xml);
}
/**
* Returns the name of the segment
*
* @return string
*/
public function getName()
{
return $this->name;
}
/**
* Does the segment have children ?
*
* @return bool
*/
public function hasChildren()
{
return $this->getIterator()->hasChildren();
}
/**
* Countable interface
*
* @return int
*/
public function count()
{
return count($this->children);
}
/**
* IteratorAggregate interface
*
* @return Iterator
*/
public function getIterator()
{
return new RecursiveIteratorIterator(new SegmentIterator($this->children), 1);
}
/**
* Replace variables of the template in the XML code
* All the children are also called
*
* @return string
*/
public function merge()
{
$this->xmlParsed .= str_replace(array_keys($this->vars), array_values($this->vars), $this->xml);
if ($this->hasChildren()) {
foreach ($this->children as $child) {
$this->xmlParsed = str_replace($child->xml, ($child->xmlParsed=="")?$child->merge():$child->xmlParsed, $this->xmlParsed);
$child->xmlParsed = '';
}
}
$reg = "/\[!--\sBEGIN\s$this->name\s--\](.*)\[!--\sEND\s$this->name\s--\]/sm";
$this->xmlParsed = preg_replace($reg, '$1', $this->xmlParsed);
$this->file->open($this->odf->getTmpfile());
foreach ($this->images as $imageKey => $imageValue) {
if ($this->file->getFromName('Pictures/' . $imageValue) === false) {
$this->file->addFile($imageKey, 'Pictures/' . $imageValue);
}
}
$this->file->close();
return $this->xmlParsed;
}
/**
* Analyse the XML code in order to find children
*
* @param string $xml
* @return Segment
*/
protected function _analyseChildren($xml)
{
// $reg2 = "#\[!--\sBEGIN\s([\S]*)\s--\](?:<\/text:p>)?(.*)(?:<text:p\s.*>)?\[!--\sEND\s(\\1)\s--\]#sm";
$reg2 = "#\[!--\sBEGIN\s([\S]*)\s--\](.*)\[!--\sEND\s(\\1)\s--\]#sm";
preg_match_all($reg2, $xml, $matches);
for ($i = 0, $size = count($matches[0]); $i < $size; $i++) {
if ($matches[1][$i] != $this->name) {
$this->children[$matches[1][$i]] = new self($matches[1][$i], $matches[0][$i], $this->odf);
} else {
$this->_analyseChildren($matches[2][$i]);
}
}
return $this;
}
/**
* Assign a template variable to replace
*
* @param string $key
* @param string $value
* @throws SegmentException
* @return Segment
*/
public function setVars($key, $value, $encode = true, $charset = 'ISO-8859')
{
if (strpos($this->xml, $this->odf->getConfig('DELIMITER_LEFT') . $key . $this->odf->getConfig('DELIMITER_RIGHT')) === false) {
throw new SegmentException("var $key not found in {$this->getName()}");
}
$value = $encode ? htmlspecialchars($value) : $value;
$value = ($charset == 'ISO-8859') ? utf8_encode($value) : $value;
$this->vars[$this->odf->getConfig('DELIMITER_LEFT') . $key . $this->odf->getConfig('DELIMITER_RIGHT')] = str_replace("\n", "<text:line-break/>", $value);
return $this;
}
/**
* Assign a template variable as a picture
*
* @param string $key name of the variable within the template
* @param string $value path to the picture
* @throws OdfException
* @return Segment
*/
public function setImage($key, $value)
{
$filename = strtok(strrchr($value, '/'), '/.');
$file = substr(strrchr($value, '/'), 1);
$size = @getimagesize($value);
if ($size === false) {
throw new OdfException("Invalid image");
}
list ($width, $height) = $size;
$width *= Odf::PIXEL_TO_CM;
$height *= Odf::PIXEL_TO_CM;
$xml = <<<IMG
<draw:frame draw:style-name="fr1" draw:name="$filename" text:anchor-type="char" svg:width="{$width}cm" svg:height="{$height}cm" draw:z-index="3"><draw:image xlink:href="Pictures/$file" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/></draw:frame>
IMG;
$this->images[$value] = $file;
$this->setVars($key, $xml, false);
return $this;
}
/**
* Shortcut to retrieve a child
*
* @param string $prop
* @return Segment
* @throws SegmentException
*/
public function __get($prop)
{
if (array_key_exists($prop, $this->children)) {
return $this->children[$prop];
} else {
throw new SegmentException('child ' . $prop . ' does not exist');
}
}
/**
* Proxy for setVars
*
* @param string $meth
* @param array $args
* @return Segment
*/
public function __call($meth, $args)
{
try {
return $this->setVars($meth, $args[0]);
} catch (SegmentException $e) {
throw new SegmentException("method $meth nor var $meth exist");
}
}
/**
* Returns the parsed XML
*
* @return string
*/
public function getXmlParsed()
{
return $this->xmlParsed;
}
}
?>
\ No newline at end of file
<?php
/**
* Segments iterator
* You need PHP 5.2 at least
* You need Zip Extension or PclZip library
* Encoding : ISO-8859-1
* Last commit by $Author$
* Date - $Date$
* SVN Revision - $Rev: 42 $
* Id : $Id$
*
* @copyright GPL License 2008 - Julien Pauli - Cyril PIERRE de GEYER - Anaska (http://www.anaska.com)
* @license http://www.gnu.org/copyleft/gpl.html GPL License
* @version 1.3
*/
class SegmentIterator implements RecursiveIterator
{
private $ref;
private $key;
public function __construct(array $ref)
{
$this->ref = $ref;
$this->key = 0;
$this->keys = array_keys($this->ref);
}
public function hasChildren()
{
return $this->valid() && $this->current() instanceof Segment;
}
public function current()
{
return $this->ref[$this->keys[$this->key]];
}
function getChildren()
{
return new self($this->current()->children);
}
public function key()
{
return $this->key;
}
public function valid()
{
return array_key_exists($this->key, $this->keys);
}
public function rewind()
{
$this->key = 0;
}
public function next()
{
$this->key ++;
}
}
?>
\ No newline at end of file
<?php
require 'zip/PclZipProxy.php';
require 'zip/PhpZipProxy.php';
require 'Segment.php';
class OdfException extends Exception
{}
/**
* Templating class for odt file
* You need PHP 5.2 at least
* You need Zip Extension or PclZip library
* Encoding : ISO-8859-1
* Last commit by $Author$
* Date - $Date$
* SVN Revision - $Rev: 42 $
* Id : $Id$
*
* @copyright GPL License 2008 - Julien Pauli - Cyril PIERRE de GEYER - Anaska (http://www.anaska.com)
* @license http://www.gnu.org/copyleft/gpl.html GPL License
* @version 1.3
*/
class Odf
{
protected $config = array(
'ZIP_PROXY' => 'PclZipProxy',
'DELIMITER_LEFT' => '{',
'DELIMITER_RIGHT' => '}',
'PATH_TO_TMP' => null
);
protected $file;
protected $contentXml;
protected $tmpfile;
protected $images = array();
protected $vars = array();
protected $segments = array();
const PIXEL_TO_CM = 0.026458333;
/**
* Class constructor
*
* @param string $filename the name of the odt file
* @throws OdfException
*/
public function __construct($filename, $config = array())
{
if (! is_array($config)) {
throw new OdfException('Configuration data must be provided as array');
}
foreach ($config as $configKey => $configValue) {
if (array_key_exists($configKey, $this->config)) {
$this->config[$configKey] = $configValue;
}
}
if (! class_exists($this->config['ZIP_PROXY'])) {
throw new OdfException($this->config['ZIP_PROXY'] . ' class not found - check your php settings');
}
$zipHandler = $this->config['ZIP_PROXY'];
$this->file = new $zipHandler();
if ($this->file->open($filename) !== true) {
throw new OdfException("Error while Opening the file '$filename' - Check your odt file");
}
if (($this->contentXml = $this->file->getFromName('content.xml')) === false) {
throw new OdfException("Nothing to parse - check that the content.xml file is correctly formed");
}
$this->file->close();
$tmp = tempnam($this->config['PATH_TO_TMP'], md5(uniqid()));
copy($filename, $tmp);
$this->tmpfile = $tmp;
$this->_moveRowSegments();
}
/**
* Assing a template variable
*
* @param string $key name of the variable within the template
* @param string $value replacement value
* @param bool $encode if true, special XML characters are encoded
* @throws OdfException
* @return odf
*/
public function setVars($key, $value, $encode = true, $charset = 'ISO-8859')
{
if (strpos($this->contentXml, $this->config['DELIMITER_LEFT'] . $key . $this->config['DELIMITER_RIGHT']) === false) {
throw new OdfException("var $key not found in the document");
}
$value = $encode ? htmlspecialchars($value) : $value;
$value = ($charset == 'ISO-8859') ? utf8_encode($value) : $value;
$this->vars[$this->config['DELIMITER_LEFT'] . $key . $this->config['DELIMITER_RIGHT']] = str_replace("\n", "<text:line-break/>", $value);
return $this;
}
/**
* Assign a template variable as a picture
*
* @param string $key name of the variable within the template
* @param string $value path to the picture
* @throws OdfException
* @return odf
*/
public function setImage($key, $value)
{
$filename = strtok(strrchr($value, '/'), '/.');
$file = substr(strrchr($value, '/'), 1);
$size = @getimagesize($value);
if ($size === false) {
throw new OdfException("Invalid image");
}
list ($width, $height) = $size;
$width *= self::PIXEL_TO_CM;
$height *= self::PIXEL_TO_CM;
$xml = <<<IMG
<draw:frame draw:style-name="fr1" draw:name="$filename" text:anchor-type="char" svg:width="{$width}cm" svg:height="{$height}cm" draw:z-index="3"><draw:image xlink:href="Pictures/$file" xlink:type="simple" xlink:show="embed" xlink:actuate="onLoad"/></draw:frame>
IMG;
$this->images[$value] = $file;
$this->setVars($key, $xml, false);
return $this;
}
/**
* Move segment tags for lines of tables
* Called automatically within the constructor
*
* @return void
*/
private function _moveRowSegments()
{
// Search all possible rows in the document
$reg1 = "#<table:table-row[^>]*>(.*)</table:table-row>#smU";
preg_match_all($reg1, $this->contentXml, $matches);
for ($i = 0, $size = count($matches[0]); $i < $size; $i++) {
// Check if the current row contains a segment row.*
$reg2 = '#\[!--\sBEGIN\s(row.[\S]*)\s--\](.*)\[!--\sEND\s\\1\s--\]#sm';
if (preg_match($reg2, $matches[0][$i], $matches2)) {
$balise = str_replace('row.', '', $matches2[1]);
// Move segment tags around the row
$replace = array(
'[!-- BEGIN ' . $matches2[1] . ' --]' => '',
'[!-- END ' . $matches2[1] . ' --]' => '',
'<table:table-row' => '[!-- BEGIN ' . $balise . ' --]<table:table-row',
'</table:table-row>' => '</table:table-row>[!-- END ' . $balise . ' --]'
);
$replacedXML = str_replace(array_keys($replace), array_values($replace), $matches[0][$i]);
$this->contentXml = str_replace($matches[0][$i], $replacedXML, $this->contentXml);
}
}
}
/**
* Merge template variables
* Called automatically for a save
*
* @return void
*/
private function _parse()
{
$this->contentXml = str_replace(array_keys($this->vars), array_values($this->vars), $this->contentXml);
}
/**
* Add the merged segment to the document
*
* @param Segment $segment
* @throws OdfException
* @return odf
*/
public function mergeSegment(Segment $segment)
{
if (! array_key_exists($segment->getName(), $this->segments)) {
throw new OdfException($segment->getName() . 'cannot be parsed, has it been set yet ?');
}
$string = $segment->getName();
// $reg = '@<text:p[^>]*>\[!--\sBEGIN\s' . $string . '\s--\](.*)\[!--.+END\s' . $string . '\s--\]<\/text:p>@smU';
$reg = '@\[!--\sBEGIN\s' . $string . '\s--\](.*)\[!--.+END\s' . $string . '\s--\]@smU';
$this->contentXml = preg_replace($reg, $segment->getXmlParsed(), $this->contentXml);
return $this;
}
/**
* Display all the current template variables
*
* @return string
*/
public function printVars()
{
return print_r('<pre>' . print_r($this->vars, true) . '</pre>', true);
}
/**
* Display the XML content of the file from odt document
* as it is at the moment
*
* @return string
*/
public function __toString()
{
return $this->contentXml;
}
/**
* Display loop segments declared with setSegment()
*
* @return string
*/
public function printDeclaredSegments()
{
return '<pre>' . print_r(implode(' ', array_keys($this->segments)), true) . '</pre>';
}
/**
* Declare a segment in order to use it in a loop
*
* @param string $segment
* @throws OdfException
* @return Segment
*/
public function setSegment($segment)
{
if (array_key_exists($segment, $this->segments)) {
return $this->segments[$segment];
}
// $reg = "#\[!--\sBEGIN\s$segment\s--\]<\/text:p>(.*)<text:p\s.*>\[!--\sEND\s$segment\s--\]#sm";
$reg = "#\[!--\sBEGIN\s$segment\s--\](.*)\[!--\sEND\s$segment\s--\]#sm";
if (preg_match($reg, html_entity_decode($this->contentXml), $m) == 0) {
throw new OdfException("'$segment' segment not found in the document");
}
$this->segments[$segment] = new Segment($segment, $m[1], $this);
return $this->segments[$segment];
}
/**
* Save the odt file on the disk
*
* @param string $file name of the desired file
* @throws OdfException
* @return void
*/
public function saveToDisk($file = null)
{
if ($file !== null && is_string($file)) {
if (file_exists($file) && !(is_file($file) && is_writable($file))) {
throw new OdfException('Permission denied : can\'t create ' . $file);
}
$this->_save();
copy($this->tmpfile, $file);
} else {
$this->_save();
}
}
/**
* Internal save
*
* @throws OdfException
* @return void
*/
private function _save()
{
$this->file->open($this->tmpfile);
$this->_parse();
if (! $this->file->addFromString('content.xml', $this->contentXml)) {
throw new OdfException('Error during file export');
}
foreach ($this->images as $imageKey => $imageValue) {
$this->file->addFile($imageKey, 'Pictures/' . $imageValue);
}
$this->file->close(); // seems to bug on windows CLI sometimes
}
/**
* Export the file as attached file by HTTP
*
* @param string $name (optionnal)
* @throws OdfException
* @return void
*/
public function exportAsAttachedFile($name="")
{
$this->_save();
if (headers_sent($filename, $linenum)) {
throw new OdfException("headers already sent ($filename at $linenum)");
}
if( $name == "" )
{
$name = md5(uniqid()) . ".odt";
}
header('Content-type: application/vnd.oasis.opendocument.text');
header('Content-Disposition: attachment; filename="'.$name.'"');
readfile($this->tmpfile);
}
/**
* Returns a variable of configuration
*
* @return string The requested variable of configuration
*/
public function getConfig($configKey)
{
if (array_key_exists($configKey, $this->config)) {
return $this->config[$configKey];
}
return false;
}
/**
* Returns the temporary working file
*
* @return string le chemin vers le fichier temporaire de travail
*/
public function getTmpfile()
{
return $this->tmpfile;
}
/**
* Delete the temporary file when the object is destroyed
*/
public function __destruct() {
if (file_exists($this->tmpfile)) {
unlink($this->tmpfile);
}
}
}
?>
\ No newline at end of file
<?php
require_once 'pclzip/pclzip.lib.php';
require_once 'ZipInterface.php';
class PclZipProxyException extends Exception
{ }
/**
* Proxy class for the PclZip library
* You need PHP 5.2 at least
* You need Zip Extension or PclZip library
* Encoding : ISO-8859-1
* Last commit by $Author$
* Date - $Date$
* SVN Revision - $Rev: 28 $
* Id : $Id$
*
* @copyright GPL License 2008 - Julien Pauli - Cyril PIERRE de GEYER - Anaska (http://www.anaska.com)
* @license http://www.gnu.org/copyleft/gpl.html GPL License
* @version 1.3
*/
class PclZipProxy implements ZipInterface
{
const TMP_DIR = './tmp';
protected $openned = false;
protected $filename;
protected $pclzip;
/**
* Class constructor
*
* @throws PclZipProxyException
*/
public function __construct()
{
if (! class_exists('PclZip')) {
throw new PclZipProxyException('PclZip class not loaded - PclZip library
is required for using PclZipProxy'); ;
}
}
/**
* Open a Zip archive
*
* @param string $filename the name of the archive to open
* @return true if openning has succeeded
*/
public function open($filename)
{
if (true === $this->openned) {
$this->close();
}
if (!file_exists(self::TMP_DIR)) {
mkdir(self::TMP_DIR);
}
$this->filename = $filename;
$this->pclzip = new PclZip($this->filename);
$this->openned = true;
return true;
}
/**
* Retrieve the content of a file within the archive from its name
*
* @param string $name the name of the file to extract
* @return the content of the file in a string
*/
public function getFromName($name)
{
if (false === $this->openned) {
return false;
}
$name = preg_replace("/(?:\.|\/)*(.*)/", "\\1", $name);
$extraction = $this->pclzip->extract(PCLZIP_OPT_BY_NAME, $name,
PCLZIP_OPT_EXTRACT_AS_STRING);
if (!empty($extraction)) {
return $extraction[0]['content'];
}
return false;
}
/**
* Add a file within the archive from a string
*
* @param string $localname the local path to the file in the archive
* @param string $contents the content of the file
* @return true if the file has been successful added
*/
public function addFromString($localname, $contents)
{
if (false === $this->openned) {
return false;
}
if (file_exists($this->filename) && !is_writable($this->filename)) {
return false;
}
$localname = preg_replace("/(?:\.|\/)*(.*)/", "\\1", $localname);
$localpath = dirname($localname);
$tmpfilename = self::TMP_DIR . '/' . basename($localname);
if (false !== file_put_contents($tmpfilename, $contents)) {
$this->pclzip->delete(PCLZIP_OPT_BY_NAME, $localname);
$add = $this->pclzip->add($tmpfilename,
PCLZIP_OPT_REMOVE_PATH, self::TMP_DIR,
PCLZIP_OPT_ADD_PATH, $localpath);
unlink($tmpfilename);
if (!empty($add)) {
return true;
}
}
return false;
}
/**
* Add a file within the archive from a file
*
* @param string $filename the path to the file we want to add
* @param string $localname the local path to the file in the archive
* @return true if the file has been successful added
*/
public function addFile($filename, $localname = null)
{
if (false === $this->openned) {
return false;
}
if ((file_exists($this->filename) && !is_writable($this->filename))
|| !file_exists($filename)) {
return false;
}
if (isSet($localname)) {
$localname = preg_replace("/(?:\.|\/)*(.*)/", "\\1", $localname);
$localpath = dirname($localname);
$tmpfilename = self::TMP_DIR . '/' . basename($localname);
} else {
$localname = basename($filename);
$tmpfilename = self::TMP_DIR . '/' . $localname;
$localpath = '';
}
if (file_exists($filename)) {
copy($filename, $tmpfilename);
$this->pclzip->delete(PCLZIP_OPT_BY_NAME, $localname);
$this->pclzip->add($tmpfilename,
PCLZIP_OPT_REMOVE_PATH, self::TMP_DIR,
PCLZIP_OPT_ADD_PATH, $localpath);
unlink($tmpfilename);
return true;
}
return false;
}
/**
* Close the Zip archive
* @return true
*/
public function close()
{
if (false === $this->openned) {
return false;
}
$this->pclzip = $this->filename = null;
$this->openned = false;
if (file_exists(self::TMP_DIR)) {
$this->_rrmdir(self::TMP_DIR);
rmdir(self::TMP_DIR);
}
return true;
}
/**
* Empty the temporary working directory recursively
* @param $dir the temporary working directory
* @return void
*/
private function _rrmdir($dir)
{
if ($handle = opendir($dir)) {
while (false !== ($file = readdir($handle))) {
if ($file != '.' && $file != '..') {
if (is_dir($dir . '/' . $file)) {
$this->_rrmdir($dir . '/' . $file);
rmdir($dir . '/' . $file);
} else {
unlink($dir . '/' . $file);
}
}
}
closedir($handle);
}
}
}
?>
\ No newline at end of file
<?php
require_once 'ZipInterface.php';
class PhpZipProxyException extends Exception
{ }
/**
* Proxy class for the PHP Zip Extension
* You need PHP 5.2 at least
* You need Zip Extension or PclZip library
* Encoding : ISO-8859-1
* Last commit by $Author$
* Date - $Date$
* SVN Revision - $Rev: 28 $
* Id : $Id$
*
* @copyright GPL License 2008 - Julien Pauli - Cyril PIERRE de GEYER - Anaska (http://www.anaska.com)
* @license http://www.gnu.org/copyleft/gpl.html GPL License
* @version 1.3
*/
class PhpZipProxy implements ZipInterface
{
protected $zipArchive;
protected $filename;
/**
* Class constructor
*
* @throws PhpZipProxyException
*/
public function __construct()
{
if (! class_exists('ZipArchive')) {
throw new PhpZipProxyException('Zip extension not loaded - check your php settings, PHP5.2 minimum with zip extension
is required for using PhpZipProxy'); ;
}
$this->zipArchive = new ZipArchive();
}
/**
* Open a Zip archive
*
* @param string $filename the name of the archive to open
* @return true if openning has succeeded
*/
public function open($filename)
{
$this->filename = $filename;
return $this->zipArchive->open($filename, ZIPARCHIVE::CREATE);
}
/**
* Retrieve the content of a file within the archive from its name
*
* @param string $name the name of the file to extract
* @return the content of the file in a string
*/
public function getFromName($name)
{
return $this->zipArchive->getFromName($name);
}
/**
* Add a file within the archive from a string
*
* @param string $localname the local path to the file in the archive
* @param string $contents the content of the file
* @return true if the file has been successful added
*/
public function addFromString($localname, $contents)
{
if (file_exists($this->filename) && !is_writable($this->filename)) {
return false;
}
return $this->zipArchive->addFromString($localname, $contents);
}
/**
* Add a file within the archive from a file
*
* @param string $filename the path to the file we want to add
* @param string $localname the local path to the file in the archive
* @return true if the file has been successful added
*/
public function addFile($filename, $localname = null)
{
if ((file_exists($this->filename) && !is_writable($this->filename))
|| !file_exists($filename)) {
return false;
}
return $this->zipArchive->addFile($filename, $localname);
}
/**
* Close the Zip archive
* @return true
*/
public function close()
{
return $this->zipArchive->close();
}
}
?>
\ No newline at end of file
<?php
/**
* Interface for Zip libraries used in odtPHP
* You need PHP 5.2 at least
* You need Zip Extension or PclZip library
* Encoding : ISO-8859-1
* Last commit by $Author$
* Date - $Date$
* SVN Revision - $Rev: 28 $
* Id : $Id$
*
* @copyright GPL License 2008 - Julien Pauli - Cyril PIERRE de GEYER - Anaska (http://www.anaska.com)
* @license http://www.gnu.org/copyleft/gpl.html GPL License
* @version 1.3
*/
interface ZipInterface
{
/**
* Open a Zip archive
*
* @param string $filename the name of the archive to open
* @return true if openning has succeeded
*/
public function open($filename);
/**
* Retrieve the content of a file within the archive from its name
*
* @param string $name the name of the file to extract
* @return the content of the file in a string
*/
public function getFromName($name);
/**
* Add a file within the archive from a string
*
* @param string $localname the local path to the file in the archive
* @param string $contents the content of the file
* @return true if the file has been successful added
*/
public function addFromString($localname, $contents);
/**
* Add a file within the archive from a file
*
* @param string $filename the path to the file we want to add
* @param string $localname the local path to the file in the archive
* @return true if the file has been successful added
*/
public function addFile($filename, $localname = null);
/**
* Close the Zip archive
* @return true
*/
public function close();
}
?>
\ No newline at end of file
Source diff could not be displayed: it is too large. Options to address this: view the blob.
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment