/** * {@inheritdoc} */ public function validate($value, Constraint $constraint) { $formats = $this->pool->getFormatNamesByContext($value->getContext()); if (!$value instanceof GalleryInterface) { $this->context->addViolationAtPath('defaultFormat', 'Invalid instance, expected GalleryInterface'); } if (!array_key_exists($value->getDefaultFormat(), $formats)) { $this->context->addViolation('invalid format'); } }
/** * {@Inheritdoc} * @param Image $image * @SuppressWarnings(PHPMD.UnusedLocalVariable) */ public function getAdditionalData($image) { $media = $image->getFile(); $provider = $this->sonataMediaPool->getProvider($media->getProviderName()); $formatNames = $this->sonataMediaPool->getFormatNamesByContext($media->getContext()); $thumbnails = []; foreach ($formatNames as $formatName => $details) { $thumbnails[$formatName] = $this->generateFullPublicUrl($provider->generatePublicUrl($media, $formatName)); } $reference = $this->generateFullPublicUrl($provider->generatePublicUrl($media, 'reference')); return ['url' => $reference, 'thumbnails' => $thumbnails]; }
/** * {@inheritdoc} */ public function validate($value, Constraint $constraint) { $formats = $this->pool->getFormatNamesByContext($value->getContext()); if (!$value instanceof GalleryInterface) { // Interface compatibility, support for LegacyExecutionContextInterface can be removed when support for Symfony <2.5 is dropped if ($this->context instanceof LegacyExecutionContextInterface) { $this->context->addViolationAt('defaultFormat', 'Invalid instance, expected GalleryInterface'); } else { $this->context->buildViolation('Invalid instance, expected GalleryInterface')->atPath('defaultFormat')->addViolation(); } } if (!array_key_exists($value->getDefaultFormat(), $formats)) { $this->context->addViolation('invalid format'); } }
/** * {@inheritdoc} */ protected function configureFormFields(FormMapper $formMapper) { // define group zoning $formMapper->with($this->trans('Gallery'), array('class' => 'col-md-9'))->end()->with($this->trans('Options'), array('class' => 'col-md-3'))->end(); $context = $this->getPersistentParameter('context'); if (!$context) { $context = $this->pool->getDefaultContext(); } $formats = array(); foreach ((array) $this->pool->getFormatNamesByContext($context) as $name => $options) { $formats[$name] = $name; } $contexts = array(); foreach ((array) $this->pool->getContexts() as $contextItem => $format) { $contexts[$contextItem] = $contextItem; } $formMapper->with('Options')->add('context', 'sonata_type_translatable_choice', array('choices' => $contexts, 'catalogue' => 'SonataMediaBundle'))->add('enabled', null, array('required' => false))->add('name')->add('defaultFormat', 'choice', array('choices' => $formats))->end()->with('Gallery')->add('galleryHasMedias', 'sonata_type_collection', array('cascade_validation' => true), array('edit' => 'inline', 'inline' => 'table', 'sortable' => 'position', 'link_parameters' => array('context' => $context), 'admin_code' => 'sonata.media.admin.gallery_has_media'))->end(); }
/** * Serialize images styles if the provider is an image type * * @param ObjectEvent $event */ public function onPostSerialize(ObjectEvent $event) { $visitor = $event->getVisitor(); $object = $event->getObject(); $context = $event->getContext(); if ($object instanceof Media) { $styles = []; $provider = $this->mediaPool->getProvider($object->getProviderName()); $formats = $this->mediaPool->getFormatNamesByContext($object->getContext()); if (is_array($formats)) { foreach ($formats as $formatName => $format) { $styles[$formatName] = $provider->generatePublicUrl($object, $formatName); } } $visitor->addData('src', $provider->generatePublicUrl($object, 'reference')); $visitor->addData('styles', $styles); } }
/** * Returns media urls for each format. * * @ApiDoc( * requirements={ * {"name"="id", "dataType"="integer", "requirement"="\d+", "description"="media id"} * }, * statusCodes={ * 200="Returned when successful", * 404="Returned when media is not found" * } * ) * * @param $id * * @return array */ public function getMediumFormatsAction($id) { $media = $this->getMedium($id); $formats = array('reference'); $formats = array_merge($formats, array_keys($this->mediaPool->getFormatNamesByContext($media->getContext()))); $provider = $this->mediaPool->getProvider($media->getProviderName()); $properties = array(); foreach ($formats as $format) { $properties[$format]['url'] = $provider->generatePublicUrl($media, $format); $properties[$format]['properties'] = $provider->getHelperProperties($media, $format); } return $properties; }