getType() != Video::$videoTypeImage && $video->getType() != Video::$videoTypeGallery) { return true; } return false; } static function dieIfIsInvalid($videos_id) { if (self::isInvalidType($videos_id)) { $video = new Video('', '', $videos_id); forbiddenPage('This media is not an image, type=['.$video->getType().']'); } } private static function getRelative($videos_id) { ImageGallery::dieIfIsInvalid($videos_id); $video = new Video('', '', $videos_id); $filename = $video->getFilename(); $dir = "videos/{$filename}/ImageGallery/"; return $dir; } static function getImageDir($videos_id) { global $global; $relative = self::getRelative($videos_id); $dir = "{$global['systemRootPath']}{$relative}"; make_path($dir); return $dir; } static function saveFile($file, $videos_id) { // Define allowed MIME types $allowedMimeTypes = ['image/jpeg', 'image/webp', 'image/gif', 'image/png', 'video/mp4']; $directory = self::getImageDir($videos_id); // Check MIME type of the file $finfo = new finfo(FILEINFO_MIME_TYPE); $fileType = $finfo->file($file['tmp_name']); if (in_array($fileType, $allowedMimeTypes)) { // Generate unique filename to avoid overwriting $extension = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION)); do { $newFilename = uniqid() . '.' . $extension; $newFilePath = $directory . $newFilename; } while (file_exists($newFilePath)); // Move the file to the target directory if (move_uploaded_file($file['tmp_name'], $newFilePath)) { return true; } else { return false; } } else { return false; } } static function listFiles($videos_id) { $filesList = []; $directory = self::getImageDir($videos_id); $relative = self::getRelative($videos_id); foreach (new DirectoryIterator($directory) as $file) { if ($file->isFile()) { $fileBase = $file->getBasename(); $filePath = $file->getPathname(); $fileType = mime_content_type($filePath); $relativeBaseName = "{$relative}{$fileBase}"; $filesList[] = [ //'path' => $filePath, 'base' => $fileBase, 'type' => $fileType, 'url'=>getURL($relativeBaseName) ]; } } return $filesList; } static function deleteFile($filename, $videos_id) { // Securely prevent path traversal $directory = self::getImageDir($videos_id); $filename = basename($filename); $filename = preg_replace('/[^a-z0-9.-]/i', '', $filename); $filePath = $directory . '/' . $filename; // Check if file exists and delete if (file_exists($filePath)) { return unlink($filePath); } else { return false; } } public static function getManagerVideosTab(){ return '