annotate modules/system/system.archiver.inc @ 13:134d4b2e75f6

updated quicktabs and google analytics modules
author danieleb <danielebarchiesi@me.com>
date Tue, 29 Oct 2013 13:48:59 +0000
parents ff03f76ab3fe
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Archiver implementations provided by the system module.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * Archiver for .tar files.
danielebarchiesi@0 10 */
danielebarchiesi@0 11 class ArchiverTar implements ArchiverInterface {
danielebarchiesi@0 12
danielebarchiesi@0 13 /**
danielebarchiesi@0 14 * The underlying Archive_Tar instance that does the heavy lifting.
danielebarchiesi@0 15 *
danielebarchiesi@0 16 * @var Archive_Tar
danielebarchiesi@0 17 */
danielebarchiesi@0 18 protected $tar;
danielebarchiesi@0 19
danielebarchiesi@0 20 public function __construct($file_path) {
danielebarchiesi@0 21 $this->tar = new Archive_Tar($file_path);
danielebarchiesi@0 22 }
danielebarchiesi@0 23
danielebarchiesi@0 24 public function add($file_path) {
danielebarchiesi@0 25 $this->tar->add($file_path);
danielebarchiesi@0 26
danielebarchiesi@0 27 return $this;
danielebarchiesi@0 28 }
danielebarchiesi@0 29
danielebarchiesi@0 30 public function remove($file_path) {
danielebarchiesi@0 31 // @todo Archive_Tar doesn't have a remove operation
danielebarchiesi@0 32 // so we'll have to simulate it somehow, probably by
danielebarchiesi@0 33 // creating a new archive with everything but the removed
danielebarchiesi@0 34 // file.
danielebarchiesi@0 35
danielebarchiesi@0 36 return $this;
danielebarchiesi@0 37 }
danielebarchiesi@0 38
danielebarchiesi@0 39 public function extract($path, Array $files = array()) {
danielebarchiesi@0 40 if ($files) {
danielebarchiesi@0 41 $this->tar->extractList($files, $path);
danielebarchiesi@0 42 }
danielebarchiesi@0 43 else {
danielebarchiesi@0 44 $this->tar->extract($path);
danielebarchiesi@0 45 }
danielebarchiesi@0 46
danielebarchiesi@0 47 return $this;
danielebarchiesi@0 48 }
danielebarchiesi@0 49
danielebarchiesi@0 50 public function listContents() {
danielebarchiesi@0 51 $files = array();
danielebarchiesi@0 52 foreach ($this->tar->listContent() as $file_data) {
danielebarchiesi@0 53 $files[] = $file_data['filename'];
danielebarchiesi@0 54 }
danielebarchiesi@0 55 return $files;
danielebarchiesi@0 56 }
danielebarchiesi@0 57
danielebarchiesi@0 58 /**
danielebarchiesi@0 59 * Retrieve the tar engine itself.
danielebarchiesi@0 60 *
danielebarchiesi@0 61 * In some cases it may be necessary to directly access the underlying
danielebarchiesi@0 62 * Archive_Tar object for implementation-specific logic. This is for advanced
danielebarchiesi@0 63 * use only as it is not shared by other implementations of ArchiveInterface.
danielebarchiesi@0 64 *
danielebarchiesi@0 65 * @return
danielebarchiesi@0 66 * The Archive_Tar object used by this object.
danielebarchiesi@0 67 */
danielebarchiesi@0 68 public function getArchive() {
danielebarchiesi@0 69 return $this->tar;
danielebarchiesi@0 70 }
danielebarchiesi@0 71 }
danielebarchiesi@0 72
danielebarchiesi@0 73 /**
danielebarchiesi@0 74 * Archiver for .zip files.
danielebarchiesi@0 75 *
danielebarchiesi@0 76 * @link http://php.net/zip
danielebarchiesi@0 77 */
danielebarchiesi@0 78 class ArchiverZip implements ArchiverInterface {
danielebarchiesi@0 79
danielebarchiesi@0 80 /**
danielebarchiesi@0 81 * The underlying ZipArchive instance that does the heavy lifting.
danielebarchiesi@0 82 *
danielebarchiesi@0 83 * @var ZipArchive
danielebarchiesi@0 84 */
danielebarchiesi@0 85 protected $zip;
danielebarchiesi@0 86
danielebarchiesi@0 87 public function __construct($file_path) {
danielebarchiesi@0 88 $this->zip = new ZipArchive();
danielebarchiesi@0 89 if ($this->zip->open($file_path) !== TRUE) {
danielebarchiesi@0 90 // @todo: This should be an interface-specific exception some day.
danielebarchiesi@0 91 throw new Exception(t('Cannot open %file_path', array('%file_path' => $file_path)));
danielebarchiesi@0 92 }
danielebarchiesi@0 93 }
danielebarchiesi@0 94
danielebarchiesi@0 95 public function add($file_path) {
danielebarchiesi@0 96 $this->zip->addFile($file_path);
danielebarchiesi@0 97
danielebarchiesi@0 98 return $this;
danielebarchiesi@0 99 }
danielebarchiesi@0 100
danielebarchiesi@0 101 public function remove($file_path) {
danielebarchiesi@0 102 $this->zip->deleteName($file_path);
danielebarchiesi@0 103
danielebarchiesi@0 104 return $this;
danielebarchiesi@0 105 }
danielebarchiesi@0 106
danielebarchiesi@0 107 public function extract($path, Array $files = array()) {
danielebarchiesi@0 108 if ($files) {
danielebarchiesi@0 109 $this->zip->extractTo($path, $files);
danielebarchiesi@0 110 }
danielebarchiesi@0 111 else {
danielebarchiesi@0 112 $this->zip->extractTo($path);
danielebarchiesi@0 113 }
danielebarchiesi@0 114
danielebarchiesi@0 115 return $this;
danielebarchiesi@0 116 }
danielebarchiesi@0 117
danielebarchiesi@0 118 public function listContents() {
danielebarchiesi@0 119 $files = array();
danielebarchiesi@0 120 for ($i=0; $i < $this->zip->numFiles; $i++) {
danielebarchiesi@0 121 $files[] = $this->zip->getNameIndex($i);
danielebarchiesi@0 122 }
danielebarchiesi@0 123 return $files;
danielebarchiesi@0 124 }
danielebarchiesi@0 125
danielebarchiesi@0 126 /**
danielebarchiesi@0 127 * Retrieve the zip engine itself.
danielebarchiesi@0 128 *
danielebarchiesi@0 129 * In some cases it may be necessary to directly access the underlying
danielebarchiesi@0 130 * ZipArchive object for implementation-specific logic. This is for advanced
danielebarchiesi@0 131 * use only as it is not shared by other implementations of ArchiveInterface.
danielebarchiesi@0 132 *
danielebarchiesi@0 133 * @return
danielebarchiesi@0 134 * The ZipArchive object used by this object.
danielebarchiesi@0 135 */
danielebarchiesi@0 136 public function getArchive() {
danielebarchiesi@0 137 return $this->zip;
danielebarchiesi@0 138 }
danielebarchiesi@0 139 }