You are here

class MinisiteArchive in Mini site 7

Class MinisiteArchive.

Hierarchy

Expanded class hierarchy of MinisiteArchive

File

includes/minisite.archive.inc, line 11
Minisite archive class.

View source
class MinisiteArchive {
  protected $archiver;

  /**
   * Open archive file.
   */
  public static function open(\stdClass $file) {
    $archive = new static();
    $file_path = drupal_realpath($file->uri);
    try {
      switch ($file->filemime) {
        case 'application/zip':
          $archive->archiver = new \ArchiverZip($file_path);
          $archive->archiver
            ->listContents();
          break;
        default:
          return FALSE;
      }
    } catch (\Exception $e) {
      return FALSE;
    }
    return $archive;
  }

  /**
   * Exact files to given path.
   */
  public function extract($path, array $files = array()) {
    if ($files) {
      $this->archiver
        ->extract($path, $files);
    }
    else {
      $this->archiver
        ->extract($path);
    }
    return $this;
  }

  /**
   * Remove file from archive file.
   */
  public function fileRemove($file_path) {
    $this->archiver
      ->remove($file_path);
    return $this;
  }

  /**
   * Return files listing.
   */
  public function filesList() {
    $listing = $this->archiver
      ->listContents();
    foreach ($listing as $k => $file) {
      if (strpos(strtolower($file), '.ds_store') !== FALSE) {
        $this
          ->fileRemove($file);
        unset($listing[$k]);
      }
      if (strpos(strtolower($file), '__macosx') !== FALSE) {
        unset($listing[$k]);
        $this
          ->fileRemove($file);
      }
      if (strpos(strtolower($file), '_notes') !== FALSE) {
        $this
          ->fileRemove($file);
        unset($listing[$k]);
      }
      if (strpos(strtolower($file), '.dropbox') !== FALSE) {
        $this
          ->fileRemove($file);
        unset($listing[$k]);
      }
      if (strpos(strtolower($file), 'thumbs.db') !== FALSE) {
        $this
          ->fileRemove($file);
        unset($listing[$k]);
      }
      if (strpos(strtolower($file), 'desktop.ini') !== FALSE) {
        $this
          ->fileRemove($file);
        unset($listing[$k]);
      }
      if (!$file) {
        unset($listing[$k]);
      }
    }
    return $listing;
  }

  /**
   * Return files tree listing.
   */
  public function filesTree() {
    $listing = $this
      ->filesList();
    $tree = array();
    foreach ($listing as $file_path) {
      $parts = explode('/', $file_path);

      // Files in archive end in / if a directory.
      if (substr($file_path, -1) === '/') {
        $parts = array_slice($parts, 0, -1);
        drupal_array_set_nested_value($tree, $parts, array(
          '.' => $file_path,
        ));
      }
      else {
        drupal_array_set_nested_value($tree, $parts, $file_path);
      }
    }
    return $tree;
  }

  /**
   * Checks that the filename ends with an allowed extension.
   */
  public static function fileExtensionCheck($files, $extensions) {
    $invalid_files = array();
    foreach ($files as $file_name) {

      // Ignore folder in minisite.
      if (substr($file_name, -1) == '/') {
        continue;
      }
      $regex = '/\\.(' . preg_replace('/ +/', '|', preg_quote($extensions)) . ')$/i';
      if (!preg_match($regex, $file_name)) {
        $invalid_files[] = $file_name;
      }
    }
    return $invalid_files;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
MinisiteArchive::$archiver protected property
MinisiteArchive::extract public function Exact files to given path.
MinisiteArchive::fileExtensionCheck public static function Checks that the filename ends with an allowed extension.
MinisiteArchive::fileRemove public function Remove file from archive file.
MinisiteArchive::filesList public function Return files listing.
MinisiteArchive::filesTree public function Return files tree listing.
MinisiteArchive::open public static function Open archive file.