Create New Item
Item Type
File
Folder
Item Name
Search file in folder and subfolders...
Are you sure want to rename?
File Manager
/
wp-content
/
plugins
/
backup
/
src
/
JetBackup
/
Destination
/
Vendors
/
DropBox
:
DirIterator.php
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php /* * * JetBackup @ package * Created By Idan Ben-Ezra * * Copyrights @ JetApps * https://www.jetapps.com * **/ namespace JetBackup\Destination\Vendors\DropBox; use JetBackup\Destination\DestinationFile; use JetBackup\Destination\Integration\DestinationDirIterator; use JetBackup\Destination\Integration\DestinationFile as iDestinationFile; use JetBackup\Exception\IOException; defined( '__JETBACKUP__' ) or die( 'Restricted access' ); class DirIterator implements DestinationDirIterator { private DropBox $_destination; private string $_directory; private array $_items=[]; private bool $_recursive; /** * @param DropBox $destination * @param string $directory * @param bool $recursive * * @throws IOException */ public function __construct(DropBox $destination, string $directory, bool $recursive=false) { $this->_destination = $destination; $this->_directory = rtrim( $destination->getRealPath( $directory ), "/" ); $this->_recursive = $recursive; if(!$destination->dirExists($directory)) return; $this->rewind(); } /** * @return void * @throws IOException */ private function _load():void { try { $this->_items = []; $list = null; while (!$list || $list->Body->has_more) { $cursor = ''; if($list && !($cursor = $list->Body->cursor)) return; if($cursor) $list = $this->_destination->client('listFolderContinue',$cursor); else $list = $this->_destination->client('listFolder', $this->_directory, $this->_recursive); foreach($list->Body->entries as $item) $this->_items[$item->name] = $item; } krsort($this->_items, SORT_STRING); } catch(\Exception $e) { throw new IOException($e->getMessage(), $e->getCode(), $e); } } /** * @return void * @throws IOException */ public function rewind():void { $this->_load(); } /** * @return bool */ public function hasNext():bool { return $this->_items && sizeof($this->_items); } /** * @throws IOException * @return iDestinationFile|null */ public function getNext():?iDestinationFile { if(!$this->hasNext()) return null; $nextfile = array_pop($this->_items); $path = $this->_destination->removeRealPath('/' . trim($nextfile->path_display, '/')); if(strpos($path, '/') !== false) $path = preg_replace("/^\/+/", "", dirname($path)); else $path = ''; $is_dir = $nextfile->{'.tag'} == 'folder'; $file = new DestinationFile(); $file->setType($is_dir ? iDestinationFile::TYPE_DIRECTORY : iDestinationFile::TYPE_FILE); $file->setName($nextfile->name); $file->setPath('/' . $path); $file->setSize($is_dir ? 4096 : $nextfile->size); if(!$is_dir) $file->setModifyTime(strtotime($nextfile->client_modified)); return $file; } }