|
|
|
<?php
|
|
|
|
|
|
|
|
/**
|
|
|
|
* @file
|
|
|
|
* Contains media_attribution.module.
|
|
|
|
*/
|
|
|
|
|
|
|
|
use Drupal\Core\Routing\RouteMatchInterface;
|
|
|
|
use Drupal\Core\Url;
|
|
|
|
use Drupal\Core\Render\Markup;
|
|
|
|
use Drupal\Core\Entity\Entity\EntityFormDisplay;
|
|
|
|
use Drupal\Core\Entity\Entity\EntityViewDisplay;
|
|
|
|
use Drupal\taxonomy\Entity\Term;
|
|
|
|
use Drupal\file\Entity\File;
|
|
|
|
use Drupal\Component\Serialization\Yaml;
|
|
|
|
use Drupal\media_attribution\LicenseLoader;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Implements hook_help().
|
|
|
|
*/
|
|
|
|
function media_attribution_help($route_name, RouteMatchInterface $route_match) {
|
|
|
|
switch ($route_name) {
|
|
|
|
// Main module help for the media_attribution module.
|
|
|
|
case 'help.page.media_attribution':
|
|
|
|
$output = '';
|
|
|
|
$output .= '<h3>' . t('About') . '</h3>';
|
|
|
|
$output .= '<p>' . t('Attach an attribution and license info to embedded media') . '</p>';
|
|
|
|
return $output;
|
|
|
|
|
|
|
|
default:
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Implements hook_modules_installed().
|
|
|
|
*
|
|
|
|
* Add attribution form to media embed forms and view displays.
|
|
|
|
*/
|
|
|
|
function media_attribution_modules_installed($modules) {
|
|
|
|
|
|
|
|
foreach (['default', 'media_browser'] as $form_variant) {
|
|
|
|
$form_entity = EntityFormDisplay::load("media.image.$form_variant");
|
|
|
|
if (!empty($form_entity)) {
|
|
|
|
$form_entity->setComponent('field_image_attribution',
|
|
|
|
[
|
|
|
|
'region' => 'content',
|
|
|
|
'settings' => [
|
|
|
|
'title' => 'Paragraph',
|
|
|
|
'title_plural' => 'Paragraphs',
|
|
|
|
'edit_mode' => 'open',
|
|
|
|
'closed_mode' => 'summary',
|
|
|
|
'autocollapse' => 'none',
|
|
|
|
'closed_mode_threshold' => 0,
|
|
|
|
'add_mode' => 'dropdown',
|
|
|
|
'form_display_mode' => 'default',
|
|
|
|
'default_paragraph_type' => '',
|
|
|
|
'features' => [
|
|
|
|
'duplicate' => 'duplicate',
|
|
|
|
'collapse_edit_all' => 'collapse_edit_all',
|
|
|
|
]
|
|
|
|
],
|
|
|
|
'weight' => 35,
|
|
|
|
'type' => 'paragraphs',
|
|
|
|
])
|
|
|
|
->save();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
foreach (['default', 'embedded'] as $entity_view_variant) {
|
|
|
|
$view_entity = EntityViewDisplay::load("media.image.$entity_view_variant");
|
|
|
|
if (!empty($view_entity)) {
|
|
|
|
$view_entity->setComponent('field_image_attribution', [
|
|
|
|
'type' => 'entity_reference_revisions_entity_view',
|
|
|
|
'label' => 'hidden',
|
|
|
|
'settings' => ['view_mode' => 'license_attribution', 'link' => ''],
|
|
|
|
])->save();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Load default license terms from the module config.
|
|
|
|
media_attribution_load_default_licenses();
|
|
|
|
}
|
|
|
|
|
|
|
|
function media_attribution_preprocess_field__paragraph__field_attribution_author__license_attribution(&$variables) {
|
|
|
|
$variables['source_prefix'] = \Drupal::translation()->translate('by');
|
|
|
|
}
|
|
|
|
|
|
|
|
function media_attribution_preprocess_paragraph__license_attribution__license_attribution(&$variables) {
|
|
|
|
$variables['license_prefix'] = \Drupal::translation()->translate('Licensed under');
|
|
|
|
$items = isset($variables['elements']['field_license']['#items']) ? $variables['elements']['field_license']['#items'] : [];
|
|
|
|
if (!empty($items)) {
|
|
|
|
$referencedEntity = $variables['elements']['field_license']['#items']
|
|
|
|
->first()->get('entity')->getTarget()->getValue();
|
|
|
|
|
|
|
|
$variables['license_link'] = $referencedEntity->get('field_license_link')->first()->view();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Implementation of hook_preprocess_entity_embed_container().
|
|
|
|
*
|
|
|
|
* @param $variables
|
|
|
|
*/
|
|
|
|
function media_attribution_preprocess_entity_embed_container(&$variables) {
|
|
|
|
|
|
|
|
if ($variables['element']['#entity']->hasField('field_image_attribution')
|
|
|
|
&& $attributions = $variables['element']['#entity']->get('field_image_attribution')
|
|
|
|
->referencedEntities()) {
|
|
|
|
$attribution = $attributions[0];
|
|
|
|
$author_field = $attribution->get('field_attribution_author')->getValue();
|
|
|
|
$author = isset($author_field[0]) ? $author_field[0] : '';
|
|
|
|
|
|
|
|
$source = $attribution->get('field_attribution_source')->count() > 0 ? $attribution->get('field_attribution_source')->getValue()[0] : '';
|
|
|
|
$license = $attribution->get('field_license')->entity;
|
|
|
|
$license_link = !empty($license) ? $license->get('field_license_link')->getValue()[0] : FALSE;
|
|
|
|
$attribution_note = $attribution->get('field_attribution_note')->count() > 0 ? $attribution->get('field_attribution_note')->getValue()[0]: '';
|
|
|
|
$attribution_text = [];
|
|
|
|
if (!empty($source['uri'])) {
|
|
|
|
$attribution_text['source'] = [
|
|
|
|
'#type' => 'link',
|
|
|
|
'#title' => $source['title'],
|
|
|
|
'#prefix' => "<br>“<cite>",
|
|
|
|
'#suffix' => "</cite>”",
|
|
|
|
'#url' => Url::fromUri($source['uri']),
|
|
|
|
];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (!empty($author)) {
|
|
|
|
$attribution_text['author'] = [
|
|
|
|
'#type' => 'link',
|
|
|
|
'#title' => $author['title'],
|
|
|
|
'#prefix' => ' ' . t('by') . ' ',
|
|
|
|
'#url' => Url::fromUri($author['uri']),
|
|
|
|
'#suffix' => '. ',
|
|
|
|
];
|
|
|
|
}
|
|
|
|
if (!empty($license_link)) {
|
|
|
|
$attribution_text['license'] = [
|
|
|
|
'#type' => 'link',
|
|
|
|
'#title' => $license_link['title'],
|
|
|
|
'#prefix' => ' ' . t('Licensed under') . ' ',
|
|
|
|
'#url' => Url::fromUri($license_link['uri']),
|
|
|
|
'#suffix' => '.',
|
|
|
|
|
|
|
|
];
|
|
|
|
}
|
|
|
|
if (!empty($attribution_note)) {
|
|
|
|
$attribution_text['note'] = [
|
|
|
|
'#type' => 'markup',
|
|
|
|
'#markup' => $attribution_note['value'],
|
|
|
|
'#prefix' => ' ',
|
|
|
|
];
|
|
|
|
}
|
|
|
|
$variables['children'] = [
|
|
|
|
'first' => [
|
|
|
|
'#type' => 'markup',
|
|
|
|
'#markup' => render($variables['children'])
|
|
|
|
],
|
|
|
|
$attribution_text
|
|
|
|
];
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Read the list of pre-defined Creative Commons media_attribution_licenses and create corresponding taxonomy terms.
|
|
|
|
*/
|
|
|
|
function media_attribution_load_default_licenses() {
|
|
|
|
$file_path = drupal_get_path('module', 'media_attribution') . '/media_attribution.default.licenses.yml';
|
|
|
|
$file_contents = file_get_contents($file_path);
|
|
|
|
$license_data = Yaml::decode($file_contents);
|
|
|
|
|
|
|
|
foreach ($license_data as $license_item) {
|
|
|
|
$icon_file_path = drupal_get_path('module', 'media_attribution') . "/" . $license_item['icon_file'];
|
|
|
|
LicenseLoader::createLicenseTerm($license_item['title'],$license_item['short_label'], $icon_file_path, $license_item['url']);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
function media_attribution_theme() {
|
|
|
|
return [
|
|
|
|
'paragraph__license_attribution__license_attribution' => [
|
|
|
|
'base hook' => 'paragraph',
|
|
|
|
],
|
|
|
|
'field__paragraph__field_attribution_source__license_attribution' => [
|
|
|
|
'base hook' => 'field',
|
|
|
|
],
|
|
|
|
'field__paragraph__field_attribution_author__license_attribution' => [
|
|
|
|
'base hook' => 'field',
|
|
|
|
],
|
|
|
|
];
|
|
|
|
}
|