diff --git a/wp-content/plugins/oembed-provider/oembed-provider.php b/wp-content/plugins/oembed-provider/oembed-provider.php index a8a35fa6706c174d10239c72a1031e9b3a287e37..3e7c39c26d7f60e2ea4e4266ddba152b9f8a7927 100644 --- a/wp-content/plugins/oembed-provider/oembed-provider.php +++ b/wp-content/plugins/oembed-provider/oembed-provider.php @@ -3,104 +3,178 @@ Plugin Name: oEmbed Provider Plugin URI: http://wordpress.org/extend/plugins/oembed-provider/ Description: An oEmbed provider for Wordpress -Version: 1.1 -Author: Craig Andrews <candrews@integralblue.com> -Author URI: http://candrews.integralblue.com +Version: 2.0.0 +Author: pfefferle, candrews +Author URI: https://github.com/pfefferle/oEmbedProvider/ */ -/* - Copyright 2009 Craig Andrews (candrews@integralblue.com) +/** + * oEmbed Provider for WordPress + * + * @author Matthias Pfefferle + * @author Craig Andrews + */ +class OembedProvider { + + /** + * auto discovery links + */ + function add_oembed_links(){ + if(is_singular()){ + echo '<link rel="alternate" type="application/json+oembed" href="' . site_url('/?oembed=true&format=json&url=' . urlencode(get_permalink())) . '" />'."\n"; + echo '<link rel="alternate" type="text/xml+oembed" href="' . site_url('/?oembed=true&format=xml&url=' . urlencode(get_permalink())) . '" />'."\n"; + } + } - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. + /** + * adds query vars + */ + function query_vars($query_vars) { + $query_vars[] = 'oembed'; + $query_vars[] = 'format'; + $query_vars[] = 'url'; + $query_vars[] = 'callback'; - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + return $query_vars; + } + + /** + * handles request + */ + function parse_query($wp) { + if (!array_key_exists('oembed', $wp->query_vars) || + !array_key_exists('url', $wp->query_vars)) { + return; + } - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ + $post_ID = url_to_postid($wp->query_vars['url']); + $post = get_post($post_ID); + + if(!$post) { + header('Status: 404'); + die("Not found"); + } + + $post_type = get_post_type($post); + + // add support for alternate output formats + $oembed_provider_formats = apply_filters("oembed_provider_formats", array('json', 'xml')); + + // check output format + $format = "json"; + if (array_key_exists('format', $wp->query_vars) && in_array(strtolower($wp->query_vars['format']), $oembed_provider_formats)) { + $format = $wp->query_vars['format']; + } + + // content filter + $oembed_provider_data = apply_filters("oembed_provider_data", array(), $post_type, $post); + $oembed_provider_data = apply_filters("oembed_provider_data_{$post_type}", $oembed_provider_data, $post); + + do_action("oembed_provider_render", $oembed_provider_data, $wp->query_vars); + do_action("oembed_provider_render_{$format}", $oembed_provider_data, $wp->query_vars); + } + + /** + * adds default content + * + * @param array $oembed_provider_data + * @param string $post_type + * @param Object $post + */ + function generate_default_content($oembed_provider_data, $post_type, $post) { + $author = get_userdata($post->post_author); -if(function_exists('add_action')){ - // Running inside of Wordpress - add_action('wp_head', 'add_oembed_links'); + $oembed_provider_data['version'] = '1.0'; + $oembed_provider_data['provider_name'] = get_bloginfo('name'); + $oembed_provider_data['provider_url'] = home_url(); + $oembed_provider_data['author_name'] = $author->display_name; + $oembed_provider_data['author_url'] = get_author_posts_url($author->ID, $author->nicename); + $oembed_provider_data['title'] = $post->post_title; - function add_oembed_links(){ - if(is_single() || is_page() || is_attachment()){ - print '<link rel="alternate" type="application/json+oembed" href="' . plugins_url('oembed-provider/oembed-provider.php') . '?format=json&url=' . urlencode(get_permalink()) . '" />'; - print '<link rel="alternate" type="application/xml+oembed" href="' . plugins_url('oembed-provider/oembed-provider.php') . '?format=xml&url=' . urlencode(get_permalink()) . '" />'; - } + return $oembed_provider_data; + } + + /** + * adds attachement specific content + * + * @param array $oembed_provider_data + * @param Object $post + */ + function generate_attachement_content($oembed_provider_data, $post) { + if (substr($post->post_mime_type,0,strlen('image/'))=='image/') { + $oembed_provider_data['type']='photo'; + } else { + $oembed_provider_data['type']='link'; } -}else{ - //Directly called (not by Wordpress) - require('../../../wp-load.php'); + $oembed_provider_data['url'] = wp_get_attachment_url($post->ID); - $url = $_GET['url']; - $post_ID = url_to_postid($url); - $post=get_post($post_ID); - if(empty($post)){ - header('Status: 404'); - die("Not found"); - }else{ - $author = get_userdata($post->post_author); - $oembed=array(); - $oembed['version']='1.0'; - $oembed['provider_name']=get_option('blogname'); - $oembed['provider_url']=get_option('home'); - $oembed['author_name']=$author->display_name; - $oembed['author_url']=get_author_posts_url($author->ID, $author->nicename); - $oembed['title']=$post->post_title; - switch(get_post_type($post)){ - case 'attachment': - if(substr($post->post_mime_type,0,strlen('image/'))=='image/'){ - $oembed['type']='photo'; - }else{ - $oembed['type']='link'; - } - $oembed['url']=wp_get_attachment_url($post->ID); - break; - case 'post': - case 'page': - $oembed['type']='link'; - $oembed['html']=empty($post->post_excerpt)?$post->post_content:$post->post_excerpt; - break; - default: - header('Status: 501'); - die('oEmbed not supported for posts of type \'' . $post->type . '\''); - break; - } + return $oembed_provider_data; + } + + /** + * adds post/page specific content + * + * @param array $oembed_provider_data + * @param Object $post + */ + function generate_post_content($oembed_provider_data, $post) { + if (function_exists('has_post_thumbnail') && has_post_thumbnail($post->ID)) { + $image = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID)); + $oembed_provider_data['thumbnail_url'] = $image[0]; + $oembed_provider_data['thumbnail_width'] = $image[1]; + $oembed_provider_data['thumbnail_height'] = $image[2]; + } + $oembed_provider_data['type']='rich'; + $oembed_provider_data['html'] = empty($post->post_excerpt) ? $post->post_content : $post->post_excerpt; - $format = $_GET['format']; - switch($format){ - case 'json': - header('Content-Type: application/json; charset=' . get_option('blog_charset'), true); - $callback = $_GET['callback']; - if($callback){ - print $callback . '('; - } - print(json_encode($oembed)); - if($callback){ - print ')'; - } - break; - case 'xml': - header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true); - print '<?xml version="1.0" encoding="' . get_option('blog_charset') . '" standalone="yes"?>'; - print '<oembed>'; - foreach(array_keys($oembed) as $element){ - print '<' . $element . '><![CDATA[' . $oembed[$element] . ']]></' . $element . '>'; - } - print '</oembed>'; - break; - default: - header('Status: 501'); - die('Format \'' . $format . '\' not supported'); - } + return $oembed_provider_data; + } + + /** + * render json output + * + * @param array $oembed_provider_data + */ + function render_json($oembed_provider_data, $wp_query) { + header('Content-Type: application/json; charset=' . get_bloginfo('charset'), true); + + // render json output + $json = json_encode($oembed_provider_data); + + // add callback if available + if (array_key_exists('callback', $wp_query)) { + $json = $wp_query['callback'] . "($json);"; } + + echo $json; + exit; + } + + /** + * render xml output + * + * @param array $oembed_provider_data + */ + function render_xml($oembed_provider_data) { + header('Content-Type: text/xml; charset=' . get_bloginfo('charset'), true); + + // render xml-output + echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '" ?>'; + echo '<oembed>'; + foreach(array_keys($oembed_provider_data) as $element){ + echo '<' . $element . '>' . htmlspecialchars($oembed_provider_data[$element]) . '</' . $element . '>'; + } + echo '</oembed>'; + exit; + } } -?> + +add_action('wp_head', array('OembedProvider', 'add_oembed_links')); +add_action('parse_query', array('OembedProvider', 'parse_query')); +add_filter('query_vars', array('OembedProvider', 'query_vars')); +add_filter('oembed_provider_data', array('OembedProvider', 'generate_default_content'), 90, 3); +add_filter('oembed_provider_data_attachement', array('OembedProvider', 'generate_attachement_content'), 91, 2); +add_filter('oembed_provider_data_post', array('OembedProvider', 'generate_post_content'), 91, 2); +add_filter('oembed_provider_data_page', array('OembedProvider', 'generate_post_content'), 91, 2); +add_action('oembed_provider_render_json', array('OembedProvider', 'render_json'), 99, 2); +add_action('oembed_provider_render_xml', array('OembedProvider', 'render_xml'), 99); \ No newline at end of file diff --git a/wp-content/plugins/oembed-provider/readme.txt b/wp-content/plugins/oembed-provider/readme.txt index b27a9a28bdbc89b37606c46f95375daa76c217e2..8463320fb1d5ee23ccf15d79fbf714bc0746c043 100644 --- a/wp-content/plugins/oembed-provider/readme.txt +++ b/wp-content/plugins/oembed-provider/readme.txt @@ -1,10 +1,9 @@ === oEmbed Provider === -Contributors: candrews -Donate link: http://candrews.integralblue.com/ +Contributors: pfefferle, candrews Tags: oembed, links -Requires at least: 2.8.0 -Tested up to: 2.8.2 -Stable tag: 1.1 +Requires at least: 3.0 +Tested up to: 3.5.1 +Stable tag: 2.0.0 An oEmbed provider for Wordpress. @@ -28,8 +27,8 @@ Yes! == Changelog == -= 1.1 = -* Added callback parameter for JSON-P += 2.0.0 = +* complete refactoring = 1.0 = * Initial release