cloudinary-8.x-1.x-dev/modules/cloudinary_media_library_widget/src/Controller/MediaController.php
modules/cloudinary_media_library_widget/src/Controller/MediaController.php
<?php
namespace Drupal\cloudinary_media_library_widget\Controller;
use Drupal\cloudinary_media_library_widget\Model\Asset;
use Drupal\Component\Serialization\Json;
use Drupal\Core\Controller\ControllerBase;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
/**
* Media controller.
*
* @deprecated in cloudinary:3.0.0 and is removed from cloudinary:4.0.0. Use
* a dedicated source plugin instead.
*
* @see https://www.drupal.org/project/cloudinary/issues/3314722
*/
class MediaController extends ControllerBase {
/**
* The serializer which serializes the views result.
*
* @var \Symfony\Component\Serializer\Serializer
*/
protected $serializer;
/**
* The Cloudinary media manager.
*
* @var \Drupal\cloudinary_media_library_widget\CloudinaryMediaManagerInterface
*/
protected $cloudinaryMediaManager;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
$instance = parent::create($container);
$instance->serializer = $container->get('serializer');
$instance->cloudinaryMediaManager = $container->get('cloudinary_media_library_widget.manager.cloudinary_media');
return $instance;
}
/**
* Returns Ajax Response containing the media id and preview.
*
* @param \Symfony\Component\HttpFoundation\Request $request
* The current request object.
* @param string $bundle
* Media bundle type.
*
* @return \Symfony\Component\HttpFoundation\JsonResponse
* The json response.
*
* @throws \Symfony\Component\Serializer\Exception\ExceptionInterface
*/
public function createMedia(Request $request, string $bundle): JsonResponse {
$assets_data = Json::decode($request->getContent());
if (is_null($assets_data)) {
throw new \InvalidArgumentException('Assert data have not been provided');
}
$ids = [];
foreach ($assets_data as $asset_data) {
/** @var \Drupal\cloudinary_media_library_widget\Model\Asset $asset */
$asset = $this->serializer->denormalize($asset_data, Asset::class);
$cloudinary_media_plugin = $this->cloudinaryMediaManager->createInstanceByType($asset->getResourceType());
$media = $cloudinary_media_plugin->createMedia($asset, $bundle);
$ids[] = $media->id();
}
return new JsonResponse([
'ids' => $ids,
]);
}
}
