Pinterest.php in Media entity Pinterest 8.2
File
src/Plugin/media/Source/Pinterest.php
View source
<?php
namespace Drupal\media_entity_pinterest\Plugin\media\Source;
use Drupal\media\MediaSourceBase;
use Drupal\media\MediaInterface;
use Drupal\media\MediaSourceFieldConstraintsInterface;
class Pinterest extends MediaSourceBase implements MediaSourceFieldConstraintsInterface {
public static $validationRegexp = [
'@^\\s*(https?://)?(\\w+\\.)?pinterest\\.([a-zA-Z]+\\.)?([a-zA-Z]+)/pin/(?P<id>\\d+)/?\\s*$$@i' => 'id',
'@^\\s*(https?://)?(\\w+\\.)?pinterest\\.([a-zA-Z]+\\.)?([a-zA-Z]+)/(?P<username>\\w+)/(?P<slug>[\\w\\-_\\~%]+)/?\\s*$@iu' => 'board',
'@^\\s*(https?://)?(\\w+\\.)?pinterest\\.([a-zA-Z]+\\.)?([a-zA-Z]+)/(?P<username>\\w+)/(?P<slug>[\\w\\-_\\~%]+)/(?P<section>[\\w\\-_\\~%]+)/?\\s*$@iu' => 'section',
'@^\\s*(https?://)?(\\w+\\.)?pinterest\\.([a-zA-Z]+\\.)?([a-zA-Z]+)/(?P<username>\\w+)/?\\s*$@iu' => 'user',
];
public function getMetadataAttributes() {
$fields = [
'id' => $this
->t('Pin ID'),
'board' => $this
->t('Board name'),
'section' => $this
->t('Section name'),
'user' => $this
->t('Pinterest user'),
];
return $fields;
}
public function getMetadata(MediaInterface $media, $name) {
$matches = $this
->matchRegexp($media);
if (empty($matches)) {
return NULL;
}
switch ($name) {
case 'thumbnail_uri':
if ($local_image = $this
->getMetadata($media, 'thumbnail_local')) {
return $local_image;
}
return parent::getMetadata($media, 'thumbnail_uri');
case 'default_name':
$id = $this
->getMetadata($media, 'id');
$board = $this
->getMetadata($media, 'board');
$section = $this
->getMetadata($media, 'section');
$user = $this
->getMetadata($media, 'user');
if (!empty($id)) {
return $id;
}
if (!empty($user) && !empty($board) && !empty($section)) {
return $user . ' - ' . $board . ' - ' . $section;
}
if (!empty($user) && !empty($board)) {
return $user . ' - ' . $board;
}
if (!empty($user) && empty($board)) {
return $user;
}
return parent::getMetadata($media, 'default_name');
case 'id':
if (!empty($matches['id'])) {
return $matches['id'];
}
return NULL;
case 'section':
if (!empty($matches['section'])) {
return $matches['section'];
}
return NULL;
case 'board':
if (!empty($matches['slug'])) {
return $matches['slug'];
}
return NULL;
case 'user':
if (!empty($matches['username'])) {
return $matches['username'];
}
return NULL;
default:
return parent::getMetadata($media, $name);
}
}
public function getSourceFieldConstraints() {
return [
'PinEmbedCode' => [],
];
}
protected function matchRegexp(MediaInterface $media) {
$matches = [];
$source_field = $this
->getSourceFieldDefinition($media->bundle->entity)
->getName();
if ($media
->hasField($source_field)) {
$property_name = $media->{$source_field}
->first()
->mainPropertyName();
foreach (static::$validationRegexp as $pattern => $key) {
if (preg_match($pattern, urldecode($media->{$source_field}->{$property_name}), $matches)) {
return $matches;
}
}
}
return FALSE;
}
}
Classes
Name |
Description |
Pinterest |
Provides media type plugin for Pinterest. |