1<?php
2// stolen from PEAR2_Pyrus_Developer_Creator_Zip by Greg Beaver, the original author, for use in unit tests
3class zipmaker
4{
5    /**
6     * Path to archive file
7     *
8     * @var string
9     */
10    protected $archive;
11    /**
12     * @var ZIPArchive
13     */
14    protected $zip;
15    protected $path;
16    function __construct($path)
17    {
18        if (!class_exists('ZIPArchive')) {
19            throw new Exception(
20                'Zip extension is not available');
21        }
22        $this->path = $path;
23    }
24
25    /**
26     * save a file inside this package
27     * @param string relative path within the package
28     * @param string|resource file contents or open file handle
29     */
30    function addFile($path, $fileOrStream)
31    {
32        if (is_resource($fileOrStream)) {
33            $this->zip->addFromString($path, stream_get_contents($fileOrStream));
34        } else {
35            $this->zip->addFromString($path, $fileOrStream);
36        }
37    }
38
39    /**
40     * Initialize the package creator
41     */
42    function init()
43    {
44        $this->zip = new ZipArchive;
45        if (true !== $this->zip->open($this->path, ZIPARCHIVE::CREATE)) {
46            throw new Exception(
47                'Cannot open ZIP archive ' . $this->path
48            );
49        }
50    }
51
52    /**
53     * Create an internal directory, creating parent directories as needed
54     *
55     * This is a no-op for the tar creator
56     * @param string $dir
57     */
58    function mkdir($dir)
59    {
60        $this->zip->addEmptyDir($dir);
61    }
62
63    /**
64     * Finish saving the package
65     */
66    function close()
67    {
68        $this->zip->close();
69    }
70}