Esempio n. 1
0
 /**
  * Return the listing of a directory
  *
  * @access public
  * @param  string  $directory
  * @param  string  $type
  * @param  string  $order
  * @param  string  $direction
  * @param  bool    $limit
  * @param  array   $fileExtensions
  * @return array
  * @throws \Exception
  */
 public function getListing($directory, $type = self::TYPE_BOTH, $order = self::KEY_NAME, $direction = self::ASC, $limit = false, $fileExtensions = array())
 {
     // Get the contents of the dir
     $listing = array();
     $directory = rtrim($directory, '/');
     // Check Dir
     if (!is_dir($directory)) {
         throw new \Exception('Directory does not exist: ' . $directory);
     }
     // Get Raw Listing
     $directoryHandle = opendir($directory);
     while (false !== ($file = readdir($directoryHandle))) {
         if (substr($file, 0, 1) != '.') {
             // skip anything that starts with a '.' i.e.:('.', '..', or any hidden file)
             // Directories
             if (is_dir($directory . '/' . $file) && ($type == self::TYPE_BOTH || $type == self::TYPE_DIR)) {
                 $listing[] = array(self::KEY_TYPE => self::TYPE_DIR, self::KEY_NAME => $file, self::KEY_DATE => filemtime($directory . '/' . $file), self::KEY_SIZE => filesize($directory . '/' . $file), self::KEY_EXT => '');
                 // Files
             } elseif (is_file($directory . '/' . $file) && ($type == self::TYPE_BOTH || $type == self::TYPE_FILE)) {
                 if (!count($fileExtensions) || in_array(Util::getExtension($file), $fileExtensions)) {
                     $listing[] = array(self::KEY_TYPE => self::TYPE_FILE, self::KEY_NAME => $file, self::KEY_DATE => filemtime($directory . '/' . $file), self::KEY_SIZE => filesize($directory . '/' . $file), self::KEY_EXT => Util::getExtension($file));
                 }
             }
         }
         // Impose Limit, if specified
         if ($limit && count($listing) >= $limit) {
             break;
         }
     }
     closedir($directoryHandle);
     // Sorting
     $listing = $this->sort($listing, $type, $order, $direction);
     // Callbacks
     if ($this->filterCallback) {
         $listing = call_user_func($this->filterCallback, $listing);
     }
     // Total Size
     $totalSize = 0;
     foreach ($listing as $item) {
         $totalSize += $item[self::KEY_SIZE];
     }
     $this->lastSize = $totalSize;
     // Item Count
     $this->lastItemCount = count($listing);
     // Done
     return $listing;
 }