mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Merge pull request #574 from mightycoco/master
Improving oEmbed insertion of direct image urls
This commit is contained in:
commit
0dfc82342a
@ -393,7 +393,6 @@ class File extends DataObject {
|
||||
return $fields;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Returns a category based on the file extension.
|
||||
* This can be useful when grouping files by type,
|
||||
@ -402,14 +401,23 @@ class File extends DataObject {
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
public function appCategory() {
|
||||
$ext = strtolower($this->Extension);
|
||||
public static function get_app_category($ext) {
|
||||
$ext = strtolower($ext);
|
||||
foreach(self::$app_categories as $category => $exts) {
|
||||
if(in_array($ext, $exts)) return $category;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a category based on the file extension.
|
||||
*
|
||||
* @return String
|
||||
*/
|
||||
public function appCategory() {
|
||||
return self::get_app_category($this->Extension);
|
||||
}
|
||||
|
||||
function CMSThumbnail() {
|
||||
return '<img src="' . $this->Icon() . '" />';
|
||||
}
|
||||
|
@ -515,7 +515,8 @@ class HtmlEditorField_Toolbar extends RequestHandler {
|
||||
}
|
||||
|
||||
// Instanciate file wrapper and get fields based on its type
|
||||
if($file && $file->appCategory() == 'image') {
|
||||
// Check if appCategory is an image and exists on the local system, otherwise use oEmbed to refference a remote image
|
||||
if($file && $file->appCategory() == 'image' && Director::is_site_url($url)) {
|
||||
$fileWrapper = new HtmlEditorField_Image($url, $file);
|
||||
} elseif(!Director::is_site_url($url)) {
|
||||
$fileWrapper = new HtmlEditorField_Embed($url, $file);
|
||||
|
@ -132,6 +132,13 @@ class Oembed {
|
||||
$oembedUrl = Controller::join_links($endpoint, '?format=json&url=' . rawurlencode($url));
|
||||
}
|
||||
|
||||
// If autodescovery failed the resource might be a direct link to a file
|
||||
if(!$oembedUrl) {
|
||||
if(File::get_app_category(File::get_file_extension($url)) == "image") {
|
||||
return new Oembed_Result($url, $url, $type, $options);
|
||||
}
|
||||
}
|
||||
|
||||
if($oembedUrl) {
|
||||
// Inject the options into the Oembed URL.
|
||||
if($options) {
|
||||
@ -233,7 +240,20 @@ class Oembed_Result extends ViewableData {
|
||||
$body = $body->getBody();
|
||||
$data = json_decode($body, true);
|
||||
if(!$data) {
|
||||
// if the response is no valid JSON we might have received a binary stream to an image
|
||||
$data = array();
|
||||
$image = @imagecreatefromstring($body);
|
||||
if($image !== FALSE) {
|
||||
preg_match("/^(http:\/\/)?([^\/]+)/i", $this->url, $matches);
|
||||
$protocoll = $matches[1];
|
||||
$host = $matches[2];
|
||||
$data['type'] = "photo";
|
||||
$data['title'] = basename($this->url) . " ($host)";
|
||||
$data['url'] = $this->url;
|
||||
$data['provider_url'] = $protocoll.$host;
|
||||
$data['width'] = imagesx($image);
|
||||
$data['height'] = imagesy($image);
|
||||
}
|
||||
}
|
||||
|
||||
// Convert all keys to lowercase
|
||||
|
Loading…
Reference in New Issue
Block a user