[
'name' => 'BBCode',
'description' => 'Standard forum BBCode',
'template' => '[img]{url}[/img]',
'separator' => "\n",
],
'bbcode_linked' => [
'name' => 'BBCode (clickable)',
'description' => 'BBCode with link to original',
'template' => '[url={original}][img]{url}[/img][/url]',
'separator' => "\n",
],
'html' => [
'name' => 'HTML',
'description' => 'HTML img tag',
'template' => '
',
'separator' => "\n",
],
'html_linked' => [
'name' => 'HTML (clickable)',
'description' => 'HTML img with link to original',
'template' => '
',
'separator' => "\n",
],
'html_figure' => [
'name' => 'HTML Figure',
'description' => 'HTML5 figure with caption',
'template' => "\n
\n {title}\n",
'separator' => "\n\n",
],
'markdown' => [
'name' => 'Markdown',
'description' => 'Markdown image syntax',
'template' => '',
'separator' => "\n",
],
'markdown_linked' => [
'name' => 'Markdown (clickable)',
'description' => 'Markdown with link to original',
'template' => '[]({original})',
'separator' => "\n",
],
'url_only' => [
'name' => 'URL only',
'description' => 'Just the image URL',
'template' => '{url}',
'separator' => "\n",
],
'url_list' => [
'name' => 'URL list (comma)',
'description' => 'Comma-separated URLs',
'template' => '{url}',
'separator' => ', ',
],
// ============ FORUM PRESETS ============
'bjdclub' => [
'name' => 'BJDClub.ru',
'description' => 'Оптимизировано для BJDClub (phpBB)',
'template' => '[url={original}][img]{url}[/img][/url]',
'separator' => "\n\n",
'category' => 'forum',
],
'babiki' => [
'name' => 'Babiki.ru',
'description' => 'Оптимизировано для Бэбиков',
'template' => '
',
'separator' => "\n\n",
'category' => 'forum',
],
'babiki_simple' => [
'name' => 'Babiki.ru (простой)',
'description' => 'Только картинки для Бэбиков',
'template' => '
',
'separator' => "\n",
'category' => 'forum',
],
'doll_forum' => [
'name' => 'Кукольный форум',
'description' => 'Универсальный BBCode для кукольных форумов',
'template' => '[url={original}][img]{url}[/img][/url]',
'separator' => "\n",
'category' => 'forum',
],
];
/**
* Add a custom format
*
* @param string $key Format key
* @param string $name Display name
* @param string $template Template with placeholders
* @param string $separator Separator between multiple images
* @param string $description Format description
*/
public function addFormat($key, $name, $template, $separator = "\n", $description = '')
{
$this->formats[$key] = [
'name' => $name,
'description' => $description,
'template' => $template,
'separator' => $separator,
];
}
/**
* Get all available formats
*
* @return array Format definitions
*/
public function getFormats()
{
return $this->formats;
}
/**
* Generate formatted output for a single image
*
* @param string $formatKey Format key
* @param array $imageData Image data with url, original, title
* @return string Formatted output
*/
public function generate($formatKey, $imageData)
{
if (!isset($this->formats[$formatKey])) {
throw new InvalidArgumentException("Unknown format: {$formatKey}");
}
$template = $this->formats[$formatKey]['template'];
$replacements = [
'{url}' => isset($imageData['url']) ? $imageData['url'] : '',
'{original}' => isset($imageData['original']) ? $imageData['original'] : (isset($imageData['url']) ? $imageData['url'] : ''),
'{title}' => htmlspecialchars(isset($imageData['title']) ? $imageData['title'] : 'Image', ENT_QUOTES),
'{description}' => htmlspecialchars(isset($imageData['description']) ? $imageData['description'] : '', ENT_QUOTES),
'{photo_id}' => isset($imageData['photo_id']) ? $imageData['photo_id'] : '',
'{width}' => isset($imageData['width']) ? $imageData['width'] : '',
'{height}' => isset($imageData['height']) ? $imageData['height'] : '',
];
return str_replace(array_keys($replacements), array_values($replacements), $template);
}
/**
* Generate formatted output for multiple images
*
* @param string $formatKey Format key
* @param array $images Array of image data
* @return string Formatted output
*/
public function generateMultiple($formatKey, $images)
{
if (!isset($this->formats[$formatKey])) {
throw new InvalidArgumentException("Unknown format: {$formatKey}");
}
$separator = $this->formats[$formatKey]['separator'];
$outputs = [];
foreach ($images as $imageData) {
$outputs[] = $this->generate($formatKey, $imageData);
}
return implode($separator, $outputs);
}
/**
* Generate output in all formats at once
*
* @param array $images Array of image data
* @return array Keyed by format key
*/
public function generateAll($images)
{
$result = [];
foreach (array_keys($this->formats) as $formatKey) {
$result[$formatKey] = [
'name' => $this->formats[$formatKey]['name'],
'description' => $this->formats[$formatKey]['description'],
'output' => $this->generateMultiple($formatKey, $images),
];
}
return $result;
}
}