From 0fc17ec33810314adc091c17ec9c2247aeca3265 Mon Sep 17 00:00:00 2001 From: Peter Molnar Date: Fri, 22 Jul 2016 10:47:02 +0000 Subject: [PATCH] 0.2 --- readme.txt | 9 +- wp-featured2rss.php | 372 ++++++++++++++++++++++---------------------- 2 files changed, 196 insertions(+), 185 deletions(-) diff --git a/readme.txt b/readme.txt index 918b439..bf7c7d5 100644 --- a/readme.txt +++ b/readme.txt @@ -4,7 +4,7 @@ Donate link: https://paypal.me/petermolnar/3 Tags: RSS, feed, featured image, attachment Requires at least: 3.0 Tested up to: 4.4.2 -Stable tag: 0.1.1 +Stable tag: 0.2 License: GPLv3 License URI: http://www.gnu.org/licenses/gpl-3.0.html Required minimum PHP version: 5.3 @@ -32,6 +32,13 @@ Version numbering logic: * every .B version indicates new features. * every ..C indicates bugfixes for A.B version. += 0.2 = +*2016-07-22* + +* switched to namespace +* max 80 char long lines + + = 0.1.1 = *2016-03-08* diff --git a/wp-featured2rss.php b/wp-featured2rss.php index afbb850..45051dc 100644 --- a/wp-featured2rss.php +++ b/wp-featured2rss.php @@ -2,8 +2,8 @@ /* Plugin Name: wp-featured2rss Plugin URI: https://github.com/petermolnar/wp-featured2rss -Description: WordPress plugin to add featured image to RSS feed as attachment (which WordPress doesn't do by default) -Version: 0.1.1 +Description: WordPress plugin to add featured image to RSS feed as attachment +Version: 0.3 Author: Peter Molnar Author URI: http://petermolnar.eu/ License: GPLv3 @@ -26,191 +26,195 @@ Required minimum PHP version: 5.3 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ -if (!class_exists('WP_FEATURED2RSS')): +namespace WP_FEATURED2RSS; -class WP_FEATURED2RSS { - const expire = 30; +define ( 'WP_FEATURED2RSS\expire', 30000 ); +\register_activation_hook( __FILE__ , 'WP_FEATURED2RSS\plugin_activate' ); +\add_action( 'rss2_item', 'WP_FEATURED2RSS\insert_enclosure_image'); - public function __construct () { - register_activation_hook( __FILE__ , array( &$this, 'plugin_activate' ) ); - add_action( 'rss2_item', array(&$this,'insert_enclosure_image') ); + +/** + * activate hook + */ +function plugin_activate() { + if ( version_compare( phpversion(), 5.3, '<' ) ) { + die( 'The minimum PHP version required for this plugin is 5.3' ); } - - /** - * activate hook - */ - public static function plugin_activate() { - if ( version_compare( phpversion(), 5.3, '<' ) ) { - die( 'The minimum PHP version required for this plugin is 5.3' ); - } - } - - /** - * - */ - public static function insert_enclosure_image ( ) { - - $post = static::fix_post(); - - static::debug('insterting featured image to rss',7); - - if ($post === false ) - return false; - - $thid = get_post_thumbnail_id( $post->ID ); - if ( ! $thid ) - return false; - - if ( $cached = wp_cache_get ( $thid, __CLASS__ . __FUNCTION__ ) ) - return $cached; - - $asize = false; - $meta = wp_get_attachment_metadata($thid); - - // creating sorted candidates array from available sizes, - // sorted by width*height pixels - $candidates = array(); - foreach( $meta['sizes'] as $potential => $details ) { - if ( isset($details['width']) && isset($details['height']) ) { - $max = ((int)$details['width']) * ((int)$details['height']); - $candidates[ $potential ] = $max; - } - } - arsort($candidates); - - foreach ($candidates as $potential => $maxsize ) { - static::debug('checking size ' . $potential . ': ' . $meta['sizes'][$potential]['file'] . ' vs ' .$meta['file'], 7 ); - - if (isset($meta['sizes'][$potential]) && isset($meta['sizes'][$potential]['file']) && $meta['sizes'][$potential]['file'] != $meta['file']) { - static::debug( $meta['sizes'][$potential]['file'] . ' look like a resized file, using it', 7); - $asize = $potential; - $img = wp_get_attachment_image_src( $thid, $potential ); - break; - } - } - - if ( $asize == false ) - return false; - - $upload_dir = wp_upload_dir(); - // check for cached version of the image, in case the plugin is used - // in tandem with [wp-resized2cache](https://github.com/petermolnar/wp-resized2rss) - $cached = WP_CONTENT_DIR . '/cache/' . $meta['sizes'][$asize]['file']; - $file = $upload_dir['basedir'] . '/' . $meta['sizes'][$asize]['file']; - - if ( file_exists($cached)) - $fsize = filesize($cached); - elseif ( file_exists($file) ) - $fsize = filesize($file); - else - return false; - - $mime = $meta['sizes'][$asize]['mime-type']; - $str = sprintf('',static::fix_url($img[0]),$mime,$fsize); - - wp_cache_set ( $thid, $str, __CLASS__ . __FUNCTION__, static::expire ); - - echo $str; - } - - /** - * do everything to get the Post object - */ - public static function fix_post ( &$post = null ) { - if ($post === null || !static::is_post($post)) - global $post; - - if (static::is_post($post)) - return $post; - - return false; - } - - /** - * test if an object is actually a post - */ - public static function is_post ( &$post ) { - if ( !empty($post) && is_object($post) && isset($post->ID) && !empty($post->ID) ) - return true; - - return false; - } - - /** - * - * debug messages; will only work if WP_DEBUG is on - * or if the level is LOG_ERR, but that will kill the process - * - * @param string $message - * @param int $level - * - * @output log to syslog | wp_die on high level - * @return false on not taking action, true on log sent - */ - public static function debug( $message, $level = LOG_NOTICE ) { - if ( empty( $message ) ) - return false; - - if ( @is_array( $message ) || @is_object ( $message ) ) - $message = json_encode($message); - - $levels = array ( - LOG_EMERG => 0, // system is unusable - LOG_ALERT => 1, // Alert action must be taken immediately - LOG_CRIT => 2, // Critical critical conditions - LOG_ERR => 3, // Error error conditions - LOG_WARNING => 4, // Warning warning conditions - LOG_NOTICE => 5, // Notice normal but significant condition - LOG_INFO => 6, // Informational informational messages - LOG_DEBUG => 7, // Debug debug-level messages - ); - - // number for number based comparison - // should work with the defines only, this is just a make-it-sure step - $level_ = $levels [ $level ]; - - // in case WordPress debug log has a minimum level - if ( defined ( 'WP_DEBUG_LEVEL' ) ) { - $wp_level = $levels [ WP_DEBUG_LEVEL ]; - if ( $level_ > $wp_level ) { - return false; - } - } - - // ERR, CRIT, ALERT and EMERG - if ( 3 >= $level_ ) { - wp_die( '

Error:

' . '

' . $message . '

' ); - exit; - } - - $trace = debug_backtrace(); - $caller = $trace[1]; - $parent = $caller['function']; - - if (isset($caller['class'])) - $parent = $caller['class'] . '::' . $parent; - - return error_log( "{$parent}: {$message}" ); - } - - /** - * - */ - public static function fix_url ( $url, $absolute = true ) { - // move to generic scheme - $url = str_replace ( array('http://', 'https://'), 'https://', $url ); - - $domain = parse_url(get_bloginfo('url'), PHP_URL_HOST); - // relative to absolute - if ($absolute && !stristr($url, $domain)) { - $url = 'https://' . $domain . '/' . ltrim($url, '/'); - } - - return $url; - } - } -$WP_FEATURED2RSS = new WP_FEATURED2RSS(); +/** + * + */ +function insert_enclosure_image ( ) { -endif; + $post = fix_post(); + + if ($post === false ) + return false; + + $thid = get_post_thumbnail_id( $post->ID ); + if ( ! $thid ) + return false; + + debug('insterting featured image to rss',7); + if ( $cached = wp_cache_get ( $thid, __NAMESPACE__ . __FUNCTION__ ) ) + return $cached; + + $asize = false; + $meta = wp_get_attachment_metadata($thid); + + // creating sorted candidates array from available sizes, + // sorted by width*height pixels + $candidates = array(); + foreach( $meta['sizes'] as $potential => $details ) { + if ( isset($details['width']) && isset($details['height']) ) { + $max = ((int)$details['width']) * ((int)$details['height']); + $candidates[ $potential ] = $max; + } + } + arsort($candidates); + + foreach ($candidates as $potential => $maxsize ) { + debug( "checking size {$potential}: " + ."{$meta['sizes'][$potential]['file']} vs {$meta['file']}", 7 ); + + if ( isset( $meta['sizes'][$potential] ) && + isset( $meta['sizes'][$potential]['file'] ) && + $meta['sizes'][$potential]['file'] != $meta['file'] + ) { + debug( "{$meta['sizes'][$potential]['file']} look like a resized file;". + " using it", 7 ); + $asize = $potential; + $img = wp_get_attachment_image_src( $thid, $potential ); + break; + } + } + + if ( $asize == false ) + return false; + + $upload_dir = wp_upload_dir(); + // check for cached version of the image, in case the plugin is used + // in tandem with https://github.com/petermolnar/wp-resized2rss + $cached = WP_CONTENT_DIR . '/cache/' . $meta['sizes'][$asize]['file']; + $file = $upload_dir['basedir'] . '/' . $meta['sizes'][$asize]['file']; + + if ( file_exists($cached)) + $fsize = filesize($cached); + elseif ( file_exists($file) ) + $fsize = filesize($file); + else + return false; + + $mime = $meta['sizes'][$asize]['mime-type']; + $str = sprintf( + '', + \site_url( $img[0] ), + $mime, + $fsize + ); + + wp_cache_set ( $thid, $str, __NAMESPACE__ . __FUNCTION__, expire ); + + echo $str; +} + +/** + * do everything to get the Post object + */ +function fix_post ( &$post = null ) { + if ($post === null || !is_post($post)) + global $post; + + if (is_post($post)) + return $post; + + return false; +} + +/** + * test if an object is actually a post + */ +function is_post ( &$post ) { + if ( ! empty( $post ) && + is_object( $post ) && + isset( $post->ID ) && + ! empty( $post->ID ) ) + return true; + + return false; +} + +/** + * + * debug messages; will only work if WP_DEBUG is on + * or if the level is LOG_ERR, but that will kill the process + * + * @param string $message + * @param int $level + * + * @output log to syslog | wp_die on high level + * @return false on not taking action, true on log sent + */ +function debug( $message, $level = LOG_NOTICE ) { + if ( empty( $message ) ) + return false; + + if ( @is_array( $message ) || @is_object ( $message ) ) + $message = json_encode($message); + + $levels = array ( + LOG_EMERG => 0, // system is unusable + LOG_ALERT => 1, // Alert action must be taken immediately + LOG_CRIT => 2, // Critical critical conditions + LOG_ERR => 3, // Error error conditions + LOG_WARNING => 4, // Warning warning conditions + LOG_NOTICE => 5, // Notice normal but significant condition + LOG_INFO => 6, // Informational informational messages + LOG_DEBUG => 7, // Debug debug-level messages + ); + + // number for number based comparison + // should work with the defines only, this is just a make-it-sure step + $level_ = $levels [ $level ]; + + // in case WordPress debug log has a minimum level + if ( defined ( 'WP_DEBUG_LEVEL' ) ) { + $wp_level = $levels [ WP_DEBUG_LEVEL ]; + if ( $level_ > $wp_level ) { + return false; + } + } + + // ERR, CRIT, ALERT and EMERG + if ( 3 >= $level_ ) { + wp_die( '

Error:

' . '

' . $message . '

' ); + exit; + } + + $trace = debug_backtrace(); + $caller = $trace[1]; + $parent = $caller['function']; + + if (isset($caller['class'])) + $parent = $caller['class'] . '::' . $parent; + + return error_log( "{$parent}: {$message}" ); +} + +/** + * + * +function fix_url ( $url, $absolute = true ) { + // move to generic scheme + $url = str_replace ( array('http://', 'https://'), 'https://', $url ); + + $domain = parse_url(get_bloginfo('url'), PHP_URL_HOST); + // relative to absolute + if ($absolute && !stristr($url, $domain)) { + $url = 'https://' . $domain . '/' . ltrim($url, '/'); + } + + return $url; +} +*/