public function getVideoThumbnailUrlFromParts(array $parts, $force = false) { if (!isset($parts[1]) || !isset($parts[2])) { return false; } $serviceId = preg_replace('#[^a-zA-Z0-9_]#', '', $parts[1]); $videoId = $parts[2]; $cleanVideoId = XenGallery_Helper_String::cleanVideoId($videoId); if (!strlen($serviceId) || !strlen($cleanVideoId)) { return false; } $videoThumbnail = sprintf('%s/xengallery/%s/%s_%s_thumb.jpg', XenForo_Application::$externalDataUrl, $serviceId, $serviceId, $cleanVideoId); $videoThumbnailPath = sprintf('%s/xengallery/%s/%s_%s.jpg', XenForo_Application::$externalDataPath, $serviceId, $serviceId, $cleanVideoId); if (!file_exists($videoThumbnailPath) || !is_readable($videoThumbnailPath) || $force) { $mediaSiteOptions = XenForo_Application::getOptions()->xengalleryMediaThumbs; if (empty($mediaSiteOptions[$serviceId])) { return false; } $mediaSite = $mediaSiteOptions[$serviceId]; if (strpos($mediaSite, '_')) { if (class_exists($mediaSite)) { /** @var $thumbnailObj XenGallery_Thumbnail_Abstract */ $thumbnailObj = XenGallery_Thumbnail_Abstract::create($mediaSite); if ($mediaSite == 'XenGallery_Thumbnail_NoThumb') { $videoThumbnailPath = $thumbnailObj->getNoThumbnailUrl($videoId, $serviceId); } else { $videoThumbnailPath = $thumbnailObj->getThumbnailUrl($videoId); } } else { $videoThumbnailPath = $mediaSite; } } else { $videoThumbnailPath = $mediaSite; } if (strpos($videoThumbnailPath, '{$id}')) { $this->_thumbnailPath = XenForo_Application::$externalDataPath . '/xengallery/' . $parts[0]; XenForo_Helper_File::createDirectory($this->_thumbnailPath, true); $videoThumbnailPath = str_replace('{$id}', rawurldecode($cleanVideoId), $videoThumbnailPath); XenGallery_Thumbnail_Abstract::saveThumbnailFromUrl($serviceId, $videoId, $videoThumbnailPath); } else { $this->_thumbnailPath = XenForo_Application::$externalDataPath . '/xengallery/' . $serviceId; XenForo_Helper_File::createDirectory($this->_thumbnailPath, true); XenGallery_Thumbnail_Abstract::saveThumbnailFromPath($serviceId, $videoId, $videoThumbnailPath); } if (!$mediaSite) { /** @var $thumbnailObj XenGallery_Thumbnail_Abstract */ $thumbnailObj = XenGallery_Thumbnail_Abstract::create('XenGallery_Thumbnail_NoThumb'); $thumbnailObj->getNoThumbnailUrl($videoId, $serviceId); } } return $videoThumbnail; }
public function actionThumbnail() { $mediaModel = $this->_getMediaModel(); $mediaSiteOptions = XenForo_Application::getOptions()->xengalleryMediaThumbs; $mediaSite = $this->_input->filterSingle('id', XenForo_Input::STRING); if (!$mediaSite) { return $this->responseView('XenGallery_ViewPublic_Media_Thumbnail', '', array()); } $parts = explode('.', $mediaSite, 2); $videoThumbnail = $mediaModel->getVideoThumbnailFromParts($parts); if (file_exists($videoThumbnail) && is_readable($videoThumbnail)) { $this->getRouteMatch()->setResponseType('raw'); $viewParams = array('thumbnailPath' => $videoThumbnail); return $this->responseView('XenGallery_ViewPublic_Media_Thumbnail', '', $viewParams); } else { $mediaSite = false; if (!empty($mediaSiteOptions[$parts[0]])) { $mediaSite = $mediaSiteOptions[$parts[0]]; } if (strpos($mediaSite, '_')) { if (class_exists($mediaSite)) { $thumbnailObj = XenGallery_Thumbnail_Abstract::create($mediaSite); $thumbnailPath = $thumbnailObj->getThumbnailUrl($parts[1]); } else { $thumbnailPath = $mediaSite; } } else { $thumbnailPath = $mediaSite; } if (strpos($thumbnailPath, '{$id}')) { $this->_thumbnailPath = XenForo_Application::$externalDataPath . '/xengallery/' . $parts[0]; XenForo_Helper_File::createDirectory($this->_thumbnailPath, true); $thumbnailUrl = str_replace('{$id}', $parts[1], $thumbnailPath); $thumbnailPath = XenGallery_Thumbnail_Abstract::saveThumbnailFromUrl($parts[0], $parts[1], $thumbnailUrl); } if (!$thumbnailPath) { $thumbnailPath = XenForo_Template_Helper_Core::callHelper('dummy', array('', '', '', true)); } } $this->getRouteMatch()->setResponseType('raw'); $viewParams = array('thumbnailPath' => $thumbnailPath); return $this->responseView('XenGallery_ViewPublic_Media_Thumbnail', '', $viewParams); }