mirror of
https://github.com/Lastorder-DC/rhymix.git
synced 2026-01-07 02:31:40 +09:00
Improve thumbnail handling for image and video search results #2230
This commit is contained in:
parent
85fd994156
commit
76034163f9
3 changed files with 139 additions and 19 deletions
120
modules/integration_search/models/FileSearchResult.php
Normal file
120
modules/integration_search/models/FileSearchResult.php
Normal file
|
|
@ -0,0 +1,120 @@
|
|||
<?php
|
||||
|
||||
namespace Rhymix\Modules\Integration_Search\Models;
|
||||
|
||||
use Context;
|
||||
use FileHandler;
|
||||
|
||||
#[\AllowDynamicProperties]
|
||||
class FileSearchResult
|
||||
{
|
||||
/**
|
||||
* Properties of the file.
|
||||
*/
|
||||
public $file_srl;
|
||||
public $file_size;
|
||||
public $filename;
|
||||
public $uploaded_filename;
|
||||
public $download_count;
|
||||
public $download_url;
|
||||
public $video_thumbnail_url;
|
||||
public $target_srl;
|
||||
public $type;
|
||||
|
||||
/**
|
||||
* Properties of the upload target.
|
||||
*/
|
||||
public $url;
|
||||
public $regdate;
|
||||
public $nick_name;
|
||||
|
||||
/**
|
||||
* Get a thumbnail.
|
||||
*
|
||||
* @param int $width
|
||||
* @param int $height
|
||||
* @param string $type
|
||||
* @return string
|
||||
*/
|
||||
public function getThumbnail(int $width = 120, int $height = 0, string $type = 'crop'): string
|
||||
{
|
||||
if ($this->type !== 'image')
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
$thumbnail_path = sprintf('files/thumbnails/%s', getNumberingPath($this->file_srl, 3));
|
||||
if(!is_dir($thumbnail_path))
|
||||
{
|
||||
FileHandler::makeDir($thumbnail_path);
|
||||
}
|
||||
$thumbnail_file = sprintf('%s%dx%d.%s.jpg', $thumbnail_path, $width, $height ?: $width, $type);
|
||||
$thumbnail_url = \RX_BASEURL . $thumbnail_file;
|
||||
if (!file_exists($thumbnail_file))
|
||||
{
|
||||
FileHandler::createImageFile($this->uploaded_filename, $thumbnail_file, $width, $height ?: $width, 'jpg', $type, 50);
|
||||
}
|
||||
return $thumbnail_url;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display video.
|
||||
*
|
||||
* @param int $width
|
||||
* @param int $height
|
||||
* @return string
|
||||
*/
|
||||
public function displayVideo(int $width = 120, int $height = 0): string
|
||||
{
|
||||
if ($this->type !== 'multimedia')
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
$options = new \stdClass;
|
||||
if ($this->video_thumbnail_url)
|
||||
{
|
||||
$options->thumbnail = $this->video_thumbnail_url;
|
||||
}
|
||||
|
||||
return vsprintf('<script>displayMultimedia(%s, %d, %d, %s);</script>', [
|
||||
json_encode(\RX_BASEURL . preg_replace('!^\.\/!', '', $this->uploaded_filename)),
|
||||
$width,
|
||||
$height ?: $width,
|
||||
json_encode($options),
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Magic method to generate the 'src' attribute for backward compatibility.
|
||||
*
|
||||
* For images, it returns a 120x120 thumbnail.
|
||||
* For videos, it returns a 80x80 preview.
|
||||
* For other types of files, this method returns an empty string.
|
||||
*/
|
||||
public function __get(string $key)
|
||||
{
|
||||
if ($key === 'src')
|
||||
{
|
||||
if ($this->type === 'image')
|
||||
{
|
||||
return vsprintf('<img src="%s" alt="%s" width="120" height="120" class="thumb" />', [
|
||||
$this->getThumbnail(120, 120),
|
||||
escape($this->filename, false),
|
||||
]);
|
||||
}
|
||||
elseif ($this->type === 'multimedia')
|
||||
{
|
||||
return $this->displayVideo(80, 80);
|
||||
}
|
||||
else
|
||||
{
|
||||
return '';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue