Create New Item
×
Item Type
File
Folder
Item Name
×
Search file in folder and subfolders...
File Manager
/
wp-content
/
plugins
/
shortpixel-image-optimiser
/
class
/
Model
Advanced Search
Upload
New Item
Settings
Back
Back Up
Advanced Editor
Save
<?php class ShortPixelFolder extends ShortPixelEntity { const META_VERSION = 1; protected $id; protected $path; protected $type; protected $status; protected $fileCount; protected $tsCreated; protected $tsUpdated; protected $excludePatterns; const TABLE_SUFFIX = 'folders'; public function __construct($data, $excludePatterns = false) { parent::__construct($data); $this->excludePatterns = $excludePatterns; } public static function checkFolder($folder, $base) { if (strtoupper(substr(PHP_OS, 0, 3)) !== 'WIN' && substr($folder, 0, 1) !== '/') { $folder = '/' . $folder; } if (is_dir($folder)) { return $folder; } elseif (is_dir($base . $folder)) { return $base . $folder; } return false; } public static function createBackUpFolder($folder = SHORTPIXEL_BACKUP_FOLDER) { $fs = \wpSPIO()->filesystem(); $dir = $fs->getDirectory($folder); $result = false; if (!$dir->exists()) { $dir->check(); self::protectDirectoryListing($folder); $result = true; } return $result; } public static function protectDirectoryListing($dirname) { $rules = "Options -Indexes"; file_put_contents(trailingslashit($dirname) . 'index.html', chr(0)); if (\wpSPIO()->env()->is_nginx) { return; } file_put_contents(trailingslashit($dirname) . '.htaccess', $rules); } public static function deleteFolder($dirname) { if (is_dir($dirname)) { $dir_handle = opendir($dirname); } if (!$dir_handle) { return false; } while ($file = @readdir($dir_handle)) { if ($file != "." && $file != "..") { if (!is_dir($dirname . "/" . $file)) { @unlink($dirname . "/" . $file); } else { self::deleteFolder($dirname . '/' . $file); } } } closedir($dir_handle); @rmdir($dirname); return true; } public static function checkFolderIsSubfolder($folder, $parents) { if (!is_array($parents)) { $parents = array($parents); } foreach ($parents as $parent) { if (strpos($folder, $parent) === 0 && (strlen($parent) == strlen($folder) || substr($folder, strlen($parent), 1) == '/')) { return $parent; } } return false; } public static function checkFolderIsParent($folder, $subfolders) { if (!is_array($subfolders)) { $subfolders[] = $subfolders; } foreach ($subfolders as $sub) { if (strpos($sub, $folder) === 0 && (strlen($folder) == strlen($sub) || substr($sub, strlen($folder) - 1, 1) == '/')) { return $sub; } } return false; } public function getFileList($onlyNewerThan = 0) { $fileListPath = tempnam(SHORTPIXEL_UPLOADS_BASE . '/', 'sp_'); $fileHandle = fopen($fileListPath, 'w+'); self::getFileListRecursive($this->getPath(), $fileHandle, $onlyNewerThan); fclose($fileHandle); return $fileListPath; } protected static function getFileListRecursive($path, $fileHandle, $onlyNewerThan) { $ignore = array('.', '..'); $files = scandir($path); $add = filemtime($path) > $onlyNewerThan; foreach ($files as $t) { if (in_array($t, $ignore)) { continue; } $tpath = trailingslashit($path) . $t; if (is_dir($tpath)) { self::getFileListRecursive($tpath, $fileHandle, $onlyNewerThan); } elseif ($add && WPShortPixel::_isProcessablePath($tpath, array(), WPShortPixelSettings::getOpt('excludePatterns'))) { fwrite($fileHandle, $tpath . "\n"); } } } public function checkFolderContents($callback) { $changed = array(); self::checkFolderContentsRecursive($this->getPath(), $changed, $callback); return $changed; } protected static function checkFolderContentsRecursive($path, &$changed, $callback) { $ignore = array('.', '..'); $files = scandir($path); $reference = call_user_func_array($callback, array($path)); foreach ($files as $t) { if (in_array($t, $ignore)) { continue; } $tpath = trailingslashit($path) . $t; if (is_dir($tpath)) { self::checkFolderContentsRecursive($tpath, $changed, $callback); } elseif (WPShortPixel::_isProcessablePath($tpath, array(), WPShortPixelSettings::getOpt('excludePatterns')) && !(in_array($tpath, $reference) && $reference[$tpath]->compressedSize == filesize($tpath))) { $changed[] = $tpath; } } } function getId() { return $this->id; } function getPath() { return $this->path; } function getTsCreated() { return $this->tsCreated; } function getTsUpdated() { return $this->tsUpdated; } function setId($id) { $this->id = $id; } function setPath($path) { $this->path = trailingslashit($path); } function getType() { return $this->type; } function setType($type) { $this->type = $type; } function getStatus() { return $this->status; } function setStatus($status) { $this->status = $status; } function getFileCount() { return $this->fileCount; } function setFileCount($fileCount) { $this->fileCount = $fileCount; } function setTsCreated($tsCreated) { $this->tsCreated = $tsCreated; } function setTsUpdated($tsUpdated) { $this->tsUpdated = $tsUpdated; } public static function path($item) { return $item->getPath(); } }