. */ declare(strict_types=1); namespace Fisharebest\Webtrees\Elements; use Fisharebest\Webtrees\Gedcom; use Fisharebest\Webtrees\Http\RequestHandlers\CreateMediaObjectModal; use Fisharebest\Webtrees\I18N; use Fisharebest\Webtrees\Registry; use Fisharebest\Webtrees\Tree; use function e; use function preg_match; use function route; use function trim; use function view; /** * XREF:OBJE := {Size=1:22} * A pointer to, or a cross-reference identifier of, a multimedia object. */ class XrefMedia extends AbstractXrefElement { /** * An edit control for this data. * * @param string $id * @param string $name * @param string $value * @param Tree $tree * * @return string */ public function edit(string $id, string $name, string $value, Tree $tree): string { $select = view('components/select-media', [ 'id' => $id, 'name' => $name, 'media' => Registry::mediaFactory()->make(trim($value, '@'), $tree), 'tree' => $tree, 'at' => '@', ]); return '
' . '' . $select . '
'; } /** * Create a label/value pair for this element. * * @param string $value * @param Tree $tree * * @return string */ public function labelValue(string $value, Tree $tree): string { // Show the image instead of the label. if (preg_match('/^@(' . Gedcom::REGEX_XREF . ')@$/', $value, $match) === 1) { $media = Registry::mediaFactory()->make($match[1], $tree); if ($media === null) { return parent::labelValue($value, $tree); } $media_file = $media->mediaFiles()->first(); if ($media_file === null) { return parent::labelValue($value, $tree); } $label = $media_file->displayImage(100, 100, 'contain', []); $value = '' . $media->fullName() . ''; return '
' . $label . '
' . $value . '
'; } return parent::labelValue($value, $tree); } /** * Display the value of this type of element. * * @param string $value * @param Tree $tree * * @return string */ public function value(string $value, Tree $tree): string { return $this->valueXrefLink($value, $tree, Registry::mediaFactory()); } }