silverstripe-framework/forms/htmleditor/EmbedShortcodeProvider.php

78 lines
1.8 KiB
PHP

<?php
namespace SilverStripe\Forms\HtmlEditor;
use Embed\Adapters\Adapter;
use Embed\Embed;
use ShortcodeHandler;
/**
* Class EmbedShortcodeProvider
*
* Provider for the [embed] shortcode tag used by the embedding service
* in the HTML Editor field.
* Provides the html needed for the frontend and the editor field itself.
*
*
* @package SilverStripe\Forms\HtmlEditor
*/
class EmbedShortcodeProvider implements ShortcodeHandler
{
/**
* Gets the list of shortcodes provided by this handler
*
* @return mixed
*/
public static function get_shortcodes()
{
return array('embed');
}
/**
* Embed shortcode parser from Oembed. This is a temporary workaround.
* Oembed class has been replaced with the Embed external service.
*
* @param $arguments
* @param $content
* @param $parser
* @param $shortcode
* @param array $extra
*
* @return string
*/
public static function handle_shortcode($arguments, $content, $parser, $shortcode, $extra = array()) {
$embed = Embed::create($content, $arguments);
if($embed && $embed instanceof \Embed\Adapters\Adapter) {
return self::embedForTemplate($embed);
} else {
return '<a href="' . $content . '">' . $content . '</a>';
}
}
/**
* @param Adapter $embed
*
* @return string
*/
public static function embedForTemplate($embed)
{
switch ($embed->type) {
case 'video':
case 'rich':
if ($embed->extraClass) {
return "<div class='media $embed->extraClass'>$embed->code</div>";
} else {
return "<div class='media'>$embed->code</div>";
}
break;
case 'link':
return '<a class="' . $embed->extraClass . '" href="' . $embed->origin . '">' . $embed->title . '</a>';
break;
case 'photo':
return "<img src='$embed->url' width='$embed->width' height='$embed->height' class='$embed->extraClass' />";
break;
}
}
}