<?php namespace Vimeo\Site\BlockLayout; use Omeka\Api\Representation\SiteRepresentation; use Omeka\Api\Representation\SitePageRepresentation; use Omeka\Api\Representation\SitePageBlockRepresentation; use Omeka\Site\BlockLayout\AbstractBlockLayout; use Laminas\View\Renderer\PhpRenderer; use Laminas\Form\FormElementManager; use Vimeo\Form\VimeoBlockForm; class Vimeo extends AbstractBlockLayout { /** * @var FormElementManager */ protected $formElementManager; /** * @var array */ protected $defaultSettings = []; /** * @param FormElementManager $formElementManager * @param array $defaultSettings */ public function __construct(FormElementManager $formElementManager, array $defaultSettings) { $this->formElementManager = $formElementManager; $this->defaultSettings = $defaultSettings; } public function getLabel() { return 'Vimeo model'; } public function form(PhpRenderer $view, SiteRepresentation $site, SitePageRepresentation $page = null, SitePageBlockRepresentation $block = null ) { $form = $this->formElementManager->get(VimeoBlockForm::class); $data = $block ? $block->data() + $this->defaultSettings : $this->defaultSettings; $form->setData([ 'o:block[__blockIndex__][o:data][title]' => $data['title'], 'o:block[__blockIndex__][o:data][width]' => $data['width'], 'o:block[__blockIndex__][o:data][ratio]' => $data['ratio'], 'o:block[__blockIndex__][o:data][renderSourceLink]' => $data['renderSourceLink'], ]); $form->prepare(); $html = ''; $html .= $view->blockAttachmentsForm($block); $html .= '<a href="#" class="collapse" aria-label="collapse"><h4>'; $html .= $view->translate('Options'). '</h4></a>'; $html .= '<div class="collapsible" style="padding-top:6px;">'; $html .= $view->formCollection($form); $html .= '</div>'; return $html; } public function render(PhpRenderer $view, SitePageBlockRepresentation $block) { $attachments = $block->attachments(); if (!$attachments) { return ''; } $thumbnails = []; static $id = 0; $media = $attachments[0]->item()->media()[0]; $vimeo_width = $media->mediaData()['width']; $vimeo_height = $media->mediaData()['height']; $ratio = $vimeo_width / $vimeo_height; return $view->partial('common/block-layout/vimeo', [ 'title' => $block->dataValue('title'), 'renderSourceLink' => $block->dataValue('renderSourceLink'), 'item_url' => $attachments[0]->item()->url(), 'width' => $block->dataValue('width'), 'video_id' => $media->mediaData()['video_id'], 'ratio' => $ratio, 'vimeo_iframe' => $media->mediaData()['html'], ]); } }