From e949c087d50da5c2834674ee05ded13ecb10684f Mon Sep 17 00:00:00 2001 From: azett Date: Mon, 7 Oct 2019 17:00:40 +0200 Subject: [PATCH] Enhanced [video] element accepts video URLs from YouTube, Vimeo and Facebook. Originally suggested by vodka on the support forum: https://forum.flatpress.org/viewtopic.php?f=2&t=15#p50 - thx! TO BE DONE: Does not support uploaded videos (like "attachs/video.mp4") yet. Also: Source code formatting. --- fp-plugins/bbcode/plugin.bbcode.php | 949 ++++++++++++---------------- 1 file changed, 415 insertions(+), 534 deletions(-) diff --git a/fp-plugins/bbcode/plugin.bbcode.php b/fp-plugins/bbcode/plugin.bbcode.php index c8a7a23..1e3a63d 100644 --- a/fp-plugins/bbcode/plugin.bbcode.php +++ b/fp-plugins/bbcode/plugin.bbcode.php @@ -1,15 +1,14 @@ BBCode markup; provides automatic integration with lightbox. -Author: Hydra, NoWhereMan -Author URI: http://flatpress.sf.net -*/ - -require(plugin_getdir('bbcode') .'/inc/stringparser_bbcode.class.php'); -require(plugin_getdir('bbcode') .'/panels/admin.plugin.panel.bbcode.php'); + * Plugin Name: BBCode + * Version: 1.5 + * Plugin URI: http://flatpress.sf.net + * Description: Allows using BBCode markup; provides automatic integration with lightbox. + * Author: Hydra, NoWhereMan + * Author URI: http://flatpress.sf.net + */ +require (plugin_getdir('bbcode') . '/inc/stringparser_bbcode.class.php'); +require (plugin_getdir('bbcode') . '/panels/admin.plugin.panel.bbcode.php'); /** * Setups the plugin. @@ -19,22 +18,10 @@ function plugin_bbcode_startup() { // load options $bbconf = plugin_getoptions('bbcode'); // get defaults if not configured - define('BBCODE_ALLOW_HTML', isset($bbconf['escape-html']) - ? $bbconf['escape-html'] - : true - ); - define('BBCODE_ENABLE_COMMENTS', isset($bbconf['comments']) - ? $bbconf['comments'] - : false - ); - define('BBCODE_USE_EDITOR', isset($bbconf['editor']) - ? $bbconf['editor'] - : true - ); - define('BBCODE_URL_MAXLEN', isset($bbconf['url-maxlen']) - ? $bbconf['url-maxlen'] - : 40 - ); + define('BBCODE_ALLOW_HTML', isset($bbconf ['escape-html']) ? $bbconf ['escape-html'] : true); + define('BBCODE_ENABLE_COMMENTS', isset($bbconf ['comments']) ? $bbconf ['comments'] : false); + define('BBCODE_USE_EDITOR', isset($bbconf ['editor']) ? $bbconf ['editor'] : true); + define('BBCODE_URL_MAXLEN', isset($bbconf ['url-maxlen']) ? $bbconf ['url-maxlen'] : 40); if (!file_exists('getfile.php')) { define('BBCODE_USE_WRAPPER', false); } else { @@ -45,9 +32,9 @@ function plugin_bbcode_startup() { define('BBCODE_USE_WRAPPER', true); } } - + // filter part - #add_filter('comment_text', 'plugin_bbcode_comment'); + // add_filter('comment_text', 'plugin_bbcode_comment'); add_filter('title_save_pre', 'wp_specialchars', 1); if (!BBCODE_ALLOW_HTML) { add_filter('content_save_pre', 'wp_specialchars', 1); @@ -58,7 +45,7 @@ function plugin_bbcode_startup() { add_filter('the_excerpt', 'BBCode', 1); add_filter('the_content', 'plugin_bbcode_undoHtml', 30); if (BBCODE_USE_EDITOR) { - add_filter('editor_toolbar', 'plugin_bbcode_toolbar'); + add_filter('editor_toolbar', 'plugin_bbcode_toolbar'); } if (BBCODE_ENABLE_COMMENTS) { add_filter('comment_text', 'plugin_bbcode_comment', 1); @@ -68,11 +55,10 @@ plugin_bbcode_startup(); /** * Adds special stlye definitions into the HTML head. - * */ function plugin_bbcode_style() { echo " \n"; - echo ' \n"; + echo ' \n"; echo " \n"; } add_action('wp_head', 'plugin_bbcode_style'); @@ -87,31 +73,26 @@ function bbcode_remap_url(&$d) { // NWM: "attachs/" is interpreted as a keyword, and it is translated to the actual path of ATTACHS_DIR // CHANGE! we use the getfile.php script to mask the actual path of the attachs dir! // DMKE: I got an idea about an integer-id based download/media manager... work-in-progress - if (strpos($d, ':') === false) { // if is relative url // absolute path, relative to this server - if ($d[0] == '/') { + if ($d [0] == '/') { /* - BLOG_BASEURL contains a trailing slash in the end. If - $d begins with a slash, we first strip it otherwise - the string would look like - http://mysite.com/flatpress//path/you/entered - ^^ ugly double slash :P - */ + * BLOG_BASEURL contains a trailing slash in the end. If + * $d begins with a slash, we first strip it otherwise + * the string would look like + * http://mysite.com/flatpress//path/you/entered + * ^^ ugly double slash :P + */ $d = BLOG_BASEURL . substr($d, 1); } if (substr($d, 0, 8) == 'attachs/') { - $d = BBCODE_USE_WRAPPER - ? 'getfile.php?f='. basename($d) .'&dl=true' - : substr_replace ($d, ATTACHS_DIR, 0, 8 ); + $d = BBCODE_USE_WRAPPER ? 'getfile.php?f=' . basename($d) . '&dl=true' : substr_replace($d, ATTACHS_DIR, 0, 8); return true; } if (substr($d, 0, 7) == 'images/') { - $d = substr_replace ($d, IMAGES_DIR, 0, 7 ); - $d = BBCODE_USE_WRAPPER - ? 'getfile.php?f='. basename($d) - : $d; + $d = substr_replace($d, IMAGES_DIR, 0, 7); + $d = BBCODE_USE_WRAPPER ? 'getfile.php?f=' . basename($d) : $d; } return true; } @@ -127,39 +108,35 @@ function bbcode_remap_url(&$d) { * @param string $action * @param array $attributes * @param string $content - * @param mixed $params Not used - * @param mixed $node_object Not used + * @param mixed $params + * Not used + * @param mixed $node_object + * Not used * @return string */ -function do_bbcode_url ($action, $attributes, $content, $params, $node_object) { +function do_bbcode_url($action, $attributes, $content, $params, $node_object) { if ($action == 'validate') { return true; } // the code was specified as follows: [url]http://.../[/url] - if (!isset ($attributes['default'])) { + if (!isset($attributes ['default'])) { // cut url if longer than > BBCODE_URL_MAXLEN $url = $content; if (($l = strlen($url)) > BBCODE_URL_MAXLEN) { - $t = (int)(BBCODE_URL_MAXLEN / 2); - $content = substr($url, 0, $t) .' … '. substr($url, $l-$t); + $t = (int) (BBCODE_URL_MAXLEN / 2); + $content = substr($url, 0, $t) . ' … ' . substr($url, $l - $t); } - } else { + } else { // else the code was specified as follows: [url=http://.../]Text[/url] - $url = $attributes['default']; + $url = $attributes ['default']; } $local = bbcode_remap_url($url); - $the_url = $local - ? (BLOG_BASEURL . $url) - : $url; + $the_url = $local ? (BLOG_BASEURL . $url) : $url; // DMKE: uh? - $content = $content; - $rel = isset($attributes['rel']) - ? ' rel="' . $attributes['rel'] . '"' - : ''; - $extern = !$local - ? ' class="externlink" title="Go to '.$the_url.'"' - : ''; - return ''. $content .''; + $content = $content; + $rel = isset($attributes ['rel']) ? ' rel="' . $attributes ['rel'] . '"' : ''; + $extern = !$local ? ' class="externlink" title="Go to ' . $the_url . '"' : ''; + return '' . $content . ''; } /** @@ -168,20 +145,22 @@ function do_bbcode_url ($action, $attributes, $content, $params, $node_object) { * @param string $action * @param array $attributes * @param string $content - * @param mixed $params Not used - * @param mixed $node_object Not used + * @param mixed $params + * Not used + * @param mixed $node_object + * Not used * @return string */ function do_bbcode_img($action, $attributes, $content, $params, $node_object) { if ($action == 'validate') { return true; } - if (!isset($attributes['default'])) { + if (!isset($attributes ['default'])) { return '[No valid img specified]'; } - $absolutepath = $actualpath = $attributes['default']; + $absolutepath = $actualpath = $attributes ['default']; // NWM: "images/" is interpreted as a keyword, and it is translated to the actual path of IMAGES_DIR - $image_is_local = bbcode_remap_url($actualpath); + $image_is_local = bbcode_remap_url($actualpath); $float = ' class="center" '; $popup_start = ''; $popup_end = ''; @@ -189,18 +168,16 @@ function do_bbcode_img($action, $attributes, $content, $params, $node_object) { $alt = $title = basename($actualpath); $useimageinfo = true; // use IPTC info - if (isset($attributes['alt'])) { - $alt = wp_specialchars($attributes['alt']); + if (isset($attributes ['alt'])) { + $alt = wp_specialchars($attributes ['alt']); $useimageinfo = false; } - if (isset($attributes['title'])) { - $title = wp_specialchars($attributes['title']); + if (isset($attributes ['title'])) { + $title = wp_specialchars($attributes ['title']); $useimageinfo = false; } - - $img_size = array(); // let's disable socket functions for remote files // slow remote servers may otherwise lockup the system @@ -208,115 +185,84 @@ function do_bbcode_img($action, $attributes, $content, $params, $node_object) { $img_info = array(); $img_size = @getimagesize($actualpath, $img_info); $absolutepath = BLOG_BASEURL . $actualpath; - + if ($useimageinfo && function_exists('iptcparse')) { - if ($img_size['mime'] == 'image/jpeg') { + if ($img_size ['mime'] == 'image/jpeg') { // tiffs won't be supported - - if(is_array($img_info)) { - $iptc = iptcparse($img_info["APP13"]); - $title = @$iptc["2#005"][0]? wp_specialchars($iptc["2#005"][0]) : $title; - $alt = isset($iptc["2#120"][0])? wp_specialchars($iptc["2#120"][0],1) : $title; - } - + + if (is_array($img_info)) { + $iptc = iptcparse($img_info ["APP13"]); + $title = @$iptc ["2#005"] [0] ? wp_specialchars($iptc ["2#005"] [0]) : $title; + $alt = isset($iptc ["2#120"] [0]) ? wp_specialchars($iptc ["2#120"] [0], 1) : $title; + } } } } - $orig_w = $width = isset($img_size[0]) - ? $img_size[0] - : 0; - $orig_h = $height = isset($img_size[1]) - ? $img_size[1] - : 0; - $thumbpath = null; + $orig_w = $width = isset($img_size [0]) ? $img_size [0] : 0; + $orig_h = $height = isset($img_size [1]) ? $img_size [1] : 0; + $thumbpath = null; // default: resize to 0, which means leaving it as it is, as width and hight will be ignored ;) $scalefact = 0; /* - scale attribute has priority over width and height if scale is - set popup is set to true automatically, unless it is explicitly - set to false - */ - if (isset($attributes['scale'])) { - if (substr($attributes['scale'], -1, 1) == '%') { + * scale attribute has priority over width and height if scale is + * set popup is set to true automatically, unless it is explicitly + * set to false + */ + if (isset($attributes ['scale'])) { + if (substr($attributes ['scale'], -1, 1) == '%') { // Format: NN%. We ignore % - $val = substr($attributes['scale'], 0, -1); + $val = substr($attributes ['scale'], 0, -1); } else { - $val = $attributes['scale']; + $val = $attributes ['scale']; } $scalefact = $val / 100.0; - $width = (int)($scalefact * $width); - $height = (int)($scalefact * $height); - } elseif (isset($attributes['width']) && isset($attributes['height'])) { + $width = (int) ($scalefact * $width); + $height = (int) ($scalefact * $height); + } elseif (isset($attributes ['width']) && isset($attributes ['height'])) { // if both width and height are set, we assume proportions are ok - $width = (int)$attributes['width']; - $height = (int)$attributes['height']; - } elseif (isset($attributes['width'])) { + $width = (int) $attributes ['width']; + $height = (int) $attributes ['height']; + } elseif (isset($attributes ['width'])) { // if only width is set we calc proportions - $scalefact = $orig_w? ($attributes['width'] / $orig_w) : 0; - $width = (int)$attributes['width']; - $height = (int)($scalefact * $orig_h); - } elseif (isset($attributes['height'])) { + $scalefact = $orig_w ? ($attributes ['width'] / $orig_w) : 0; + $width = (int) $attributes ['width']; + $height = (int) ($scalefact * $orig_h); + } elseif (isset($attributes ['height'])) { // if only height is set we calc proportions - $scalefact = $orig_w? ($attributes['height'] / $orig_h) : 0; - $height = (int)$attributes['height']; - $width = (int)($scalefact * $orig_w); + $scalefact = $orig_w ? ($attributes ['height'] / $orig_h) : 0; + $height = (int) $attributes ['height']; + $width = (int) ($scalefact * $orig_w); } if ($height < $orig_h) { - $attributes['popup'] = true; + $attributes ['popup'] = true; } if ($height != $orig_h) { - #bbcode_img_scale_filter($actualpath, $img_props, $newsize) - $thumbpath = apply_filters( - 'bbcode_img_scale', - $actualpath, - $img_size, - array($width, $height) - ); + // bbcode_img_scale_filter($actualpath, $img_props, $newsize) + $thumbpath = apply_filters('bbcode_img_scale', $actualpath, $img_size, array( + $width, + $height + )); } - - - if (isset($attributes['popup']) && ($attributes['popup'])) { - $pop_width = $orig_w - ? $orig_w - : 800; - $pop_height = $orig_h - ? $orig_h - : 600; - $popup = ' onclick="Popup=window.open("'. $absolutepath - .'","Popup","toolbar=no,location=no,status=no,"' - .'"menubar=no,scrollbars=yes,resizable=yes,width=' - . $pop_width .',height='. $pop_height .'"); return false;"'; + if (isset($attributes ['popup']) && ($attributes ['popup'])) { + $pop_width = $orig_w ? $orig_w : 800; + $pop_height = $orig_h ? $orig_h : 600; + $popup = ' onclick="Popup=window.open("' . $absolutepath . '","Popup","toolbar=no,location=no,status=no,"' . '"menubar=no,scrollbars=yes,resizable=yes,width=' . $pop_width . ',height=' . $pop_height . '"); return false;"'; // Plugin hook, here lightbox attachs $popup = apply_filters('bbcode_img_popup', $popup, $absolutepath); - $popup_start = $attributes['popup'] == 'true' - ? '' - : ''; - $popup_end = $attributes['popup'] == 'true' - ? '' - : ''; + $popup_start = $attributes ['popup'] == 'true' ? '' : ''; + $popup_end = $attributes ['popup'] == 'true' ? '' : ''; } - $img_width = $width - ? ' width="'.$width.'"' - : ''; - $img_height = $height - ? ' height="'.$height.'"' - : '' ; - if (isset($attributes['float'])) { - $float = ($attributes['float'] == 'left' || $attributes['float'] == 'right') - ? ' class="float'. $attributes['float'] .'"' - : ' class="center"'; + $img_width = $width ? ' width="' . $width . '"' : ''; + $img_height = $height ? ' height="' . $height . '"' : ''; + if (isset($attributes ['float'])) { + $float = ($attributes ['float'] == 'left' || $attributes ['float'] == 'right') ? ' class="float' . $attributes ['float'] . '"' : ' class="center"'; } - $src = $thumbpath - ? (BLOG_BASEURL . $thumbpath) - : $absolutepath; // $attributes['default']) - $pop = $popup_start - ? '' - : ' title="'.$title.'" '; - return $popup_start .''. $alt. ''. $popup_end; + $src = $thumbpath ? (BLOG_BASEURL . $thumbpath) : $absolutepath; // $attributes['default']) + $pop = $popup_start ? '' : ' title="' . $title . '" '; + return $popup_start . '' . $alt . '' . $popup_end; } /** @@ -325,48 +271,64 @@ function do_bbcode_img($action, $attributes, $content, $params, $node_object) { * @param string $action * @param array $attr * @param string $content - * @param mixed $params Not used - * @param mixed $node_object Not used + * @param mixed $params + * Not used + * @param mixed $node_object + * Not used * @return string */ function do_bbcode_video($action, $attr, $content, $params, $node_object) { if ($action == 'validate') { return true; } - $vurl = parse_url($attr['default']); - if (isset($attr['type'])) { - $type = $attr['type']; + + $vurl = parse_url($attr ['default']); + if (isset($attr ['type'])) { + $type = $attr ['type']; } else { - // is it http://www.MYSITE.com or http://MYSITE.com ? - $web = explode('.', $vurl['host']); + // is it http://www.MYSITE.com or http://MYSITE.com ? + $web = explode('.', $vurl ['host']); array_pop($web); - $type = isset($web[1]) - ? $web[1] - : $web[0]; + $type = isset($web [1]) ? $web [1] : $web [0]; } - $query = utils_kexplode($vurl['query'], '=&'); - $the_url = null; - $others = ''; + + // Check the [video] element's attributes width, height and float + $width = isset($attr ['width']) ? $attr ['width'] : '560'; + $height = isset($attr ['height']) ? $attr ['height'] : '315'; + $float = isset($attr ['float']) ? 'align="' . $attr ['float'] . '" ' : 'style="margin: 0 auto; display:block;" '; + + $query = utils_kexplode($vurl ['query'], '=&'); + $output = null; + + // We recognize different video providers by the given video URL. switch ($type) { + // YouTube case 'youtube': - $the_url = "https://www.youtube.com/embed/{$query['v']}"; + $output = ''; break; - case 'default': + // Vimeo + case 'vimeo': + $vid = isset($query ['sec']) ? $query ['sec'] : str_replace('/', '', $vurl ['path']); + $output = ''; + break; + // Facebook + case 'facebook': + $vid = isset($query ['sec']) ? $query ['sec'] : str_replace('/video/', '', $vurl ['path']); + $output = '
+ +
'; + break; + // Any video file that can be played with HTML5