diff options
-rw-r--r-- | util/wp/post_to_red/post_to_red.php | 493 | ||||
-rw-r--r-- | util/wp/post_to_red/readme.txt | 39 | ||||
-rw-r--r-- | version.inc | 2 |
3 files changed, 1 insertions, 533 deletions
diff --git a/util/wp/post_to_red/post_to_red.php b/util/wp/post_to_red/post_to_red.php deleted file mode 100644 index ea6026ae2..000000000 --- a/util/wp/post_to_red/post_to_red.php +++ /dev/null @@ -1,493 +0,0 @@ -<?php -/* -Plugin Name: CrossPost to Red Matrix -Plugin URI: http://blog.duthied.com/2011/09/12/friendika-cross-poster-wordpress-plugin/ -Description: This plugin allows you to cross post to your Red Matrix account. Extended by Mike Macgirvin from a Friendica cross-posting tool -Version: 1.2 -Author: Devlon Duthied -Author URI: http://blog.duthied.com -*/ - -/* Copyright 2011 Devlon Duthie (email: duthied@gmail.com) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License, version 2, as - published by the Free Software Foundation. - - 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. - - 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 -*/ - -define("post_to_red_path", WP_PLUGIN_URL . "/" . str_replace(basename( __FILE__), "", plugin_basename(__FILE__))); -define("post_to_red_version", "1.2"); -$plugin_dir = basename(dirname(__FILE__)); -$plugin = plugin_basename(__FILE__); - -define("post_to_red_acct_name", "post_to_red_admin_options"); - -function post_to_red_deactivate() { - delete_option('post_to_red_seed_location'); - delete_option('post_to_red_acct_name'); - delete_option('post_to_red_user_name'); - delete_option('post_to_red_password'); -} - -function post_to_red_get_seed_location() { - return get_option('post_to_red_seed_location'); -} - -function post_to_red_get_acct_name() { - return get_option('post_to_red_acct_name'); -} - -function post_to_red_get_channel_name() { - return get_option('post_to_red_channel_name'); -} - -function post_to_red_get_password() { - return get_option('post_to_red_password'); -} - -function post_to_red_post($post_id) { - - $post = get_post($post_id); - - if (isset($_POST['post_to_red'])) { - update_post_meta($post_id, 'post_to_red', '1'); - } - - // if meta has been set - if (get_post_meta($post_id, "post_to_red", true) === '1') { - - $user_name = post_to_red_get_acct_name(); - $password = post_to_red_get_password(); - $seed_location = post_to_red_get_seed_location(); - $channel = post_to_red_get_channel_name(); - $backlink = get_option('post_to_red_backlink'); - - if ((isset($user_name)) && (isset($password)) && (isset($seed_location))) { - // remove potential comments - $message = preg_replace('/<!--(.*)-->/Uis', '', $post->post_content); - - // get any tags and make them hashtags - $post_tags = get_the_tags($post_id); - if ($post_tags) { - foreach($post_tags as $tag) { - $tag_string .= "#" . $tag->name . " "; - } - } - - $message_id = site_url() . '/' . $post_id; - - if (isset($tag_string)) { - $message .= "<br />$tag_string"; - } - - $cats = ''; - - $terms = get_the_terms($post_id,'category'); - if($terms) { - foreach($terms as $term) { - if(strlen($cats)) - $cats .= ','; - $cats .= htmlspecialchars_decode($term->name, ENT_COMPAT); - } - } - - - - $bbcode = xpost_to_html2bbcode($message); - - if($backlink) - $bbcode .= "\n\n" . _('Source:') . ' ' . '[url]' . get_permalink($post_id) . '[/url]'; - - $url = $seed_location . '/api/statuses/update'; - - $headers = array('Authorization' => 'Basic '.base64_encode("$user_name:$password")); - $body = array( - 'title' => xpost_to_html2bbcode($post->post_title), - 'status' => $bbcode, - 'source' => 'WordPress', - 'namespace' => 'wordpress', - 'remote_id' => $message_id, - 'permalink' => $post->guid - ); - if($channel) - $body['channel'] = $channel; - if($cats) - $body['category'] = $cats; - - // post: - $request = new WP_Http; - $result = $request->request($url , array( 'method' => 'POST', 'body' => $body, 'headers' => $headers)); - - } - - } -} - - -function post_to_red_delete_post($post_id) { - - $post = get_post($post_id); - - // if meta has been set - if ((get_post_meta($post_id, "post_to_red", true) == '1') || (get_post_meta($post_id, "post_from_red", true) == '1')) { - - $user_name = post_to_red_get_acct_name(); - $password = post_to_red_get_password(); - $seed_location = post_to_red_get_seed_location(); - $channel = post_to_red_get_channel_name(); - - if ((isset($user_name)) && (isset($password)) && (isset($seed_location))) { - - $message_id = site_url() . '/' . $post_id; - $url = $seed_location . '/api/statuses/destroy'; - - $headers = array('Authorization' => 'Basic '.base64_encode("$user_name:$password")); - $body = array( - 'namespace' => 'wordpress', - 'remote_id' => $message_id, - ); - if($channel) - $body['channel'] = $channel; - - // post: - $request = new WP_Http; - $result = $request->request($url , array( 'method' => 'POST', 'body' => $body, 'headers' => $headers)); - - } - - } -} - -function post_to_red_delete_comment($post_id) { - - // The comment may already be destroyed so we can't query it or the parent post. That means - // we have to make a network call for any deleted comment to see if it's registered on Red. - // We really need a "before_delete_comment" action in WP to make - // this more efficient. - - $user_name = post_to_red_get_acct_name(); - $password = post_to_red_get_password(); - $seed_location = post_to_red_get_seed_location(); - $channel = post_to_red_get_channel_name(); - - if ((isset($user_name)) && (isset($password)) && (isset($seed_location))) { - - $message_id = site_url() . '/' . $post_id; - $url = $seed_location . '/api/statuses/destroy'; - - $headers = array('Authorization' => 'Basic '.base64_encode("$user_name:$password")); - $body = array( - 'namespace' => 'wordpress', - 'comment_id' => $message_id, - ); - if($channel) - $body['channel'] = $channel; - - // post: - $request = new WP_Http; - $result = $request->request($url , array( 'method' => 'POST', 'body' => $body, 'headers' => $headers)); - } -} - - - - -function post_to_red_displayAdminContent() { - - $seed_url = post_to_red_get_seed_location(); - $password = post_to_red_get_password(); - $user_acct = post_to_red_get_acct_name(); - $channel = post_to_red_get_channel_name(); - $backlink = get_option('post_to_red_backlink'); - $backlink_checked = ((intval($backlink)) ? ' checked="checked" ' : ''); - // debug... - // echo "seed location: $seed_url</br>"; - // echo "password: $password</br>"; - // echo "user_acct: $user_acct</br>"; - - echo <<<EOF - <div class='wrap'> - <h2>CrossPost to Red Matrix</h2> - <p>This plugin allows you to cross post to your Red Matrix channel.</p> - </div> - - <div class="wrap"> - <h2>Configuration</h2> - <form method="post" action="{$_SERVER["REQUEST_URI"]}"> - Enter the login details of your Red Matrix account<br /><br /> - Login (email): <input type="text" name="post_to_red_acct_name" value="{$user_acct}"/><br /> - Password: <input type="password" name="post_to_red_password" value="{$password}"/><br /> - Red Matrix URL: <input type="text" name="post_to_red_url" value="{$seed_url}"/><br /> - Optional channel nickname: <input type="text" name="post_to_red_channel" value="{$channel}"/><br /> - Add permalink to posts? <input type="checkbox" name="post_to_red_backlink" value="1" {$backlink_checked} /><br /> - <input type="submit" value="Save" name="submit" /> - </form> - <p></p> - </div> -EOF; - - if(isset($_POST['submit'])) { - echo "<div style='text-align:center;padding:4px;width:200px;background-color:#FFFF99;border:1xp solid #CCCCCC;color:#000000;'>Settings Saved!</div>"; - } -} - -function post_to_red_post_checkbox() { - - add_meta_box( - 'post_to_red_meta_box_id', - 'Cross Post to Red Matrix', - 'post_to_red_post_meta_content', - 'post', - 'normal', - 'default' - ); -} - -function post_to_red_post_meta_content($post_id) { - wp_nonce_field(plugin_basename( __FILE__ ), 'post_to_red_nonce'); - echo '<input type="checkbox" name="post_to_red" value="1" /> Cross post?'; -} - -function post_to_red_post_field_data($post_id) { - - // check if this isn't an auto save - if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) - return; - - // security check - if((! array_key_exists('post_to_red_nonce', $_POST)) - || (!wp_verify_nonce( $_POST['post_to_red_nonce'], plugin_basename( __FILE__ )))) - return; - - // now store data in custom fields based on checkboxes selected - if (isset($_POST['post_to_red'])) { - update_post_meta($post_id, 'post_to_red', '1'); - } -} - -function post_to_red_display_admin_page() { - - if ((isset($_REQUEST["post_to_red_acct_name"])) && (isset($_REQUEST["post_to_red_password"]))) { - - $password = $_REQUEST["post_to_red_password"]; - $red_url = $_REQUEST["post_to_red_url"]; - $channelname = $_REQUEST['post_to_red_channel']; - - - update_option('post_to_red_acct_name', $_REQUEST["post_to_red_acct_name"]); - update_option('post_to_red_channel_name', $channelname); - update_option('post_to_red_seed_location', $red_url); - update_option('post_to_red_password', $password); - update_option('post_to_red_backlink', $_REQUEST['post_to_red_backlink']); - } - - post_to_red_displayAdminContent(); -} - -function post_to_red_settings_link($links) { - $settings_link = '<a href="options-general.php?page=xpost-to-redmatrix">Settings</a>'; - array_unshift($links, $settings_link); - return $links; -} - -function post_to_red_admin() { - add_options_page("Crosspost to redmatrix", "Crosspost to redmatrix", "manage_options", "xpost-to-redmatrix", "post_to_red_display_admin_page"); -} - -register_deactivation_hook( __FILE__, 'post_to_red_deactivate' ); - -add_filter("plugin_action_links_$plugin", "post_to_red_settings_link"); - -add_action("admin_menu", "post_to_red_admin"); -add_action('publish_post', 'post_to_red_post'); -add_action('add_meta_boxes', 'post_to_red_post_checkbox'); -add_action('save_post', 'post_to_red_post_field_data'); -add_action('before_delete_post', 'post_to_red_delete_post'); - -add_action('delete_comment', 'post_to_red_delete_comment'); - -add_filter('xmlrpc_methods', 'red_xmlrpc_methods'); - -add_filter('get_avatar', 'post_to_red_get_avatar',10,5); - - -function red_xmlrpc_methods($methods) { - $methods['red.Comment'] = 'red_comment'; - return $methods; -} - -function red_comment($args) { - global $wp_xmlrpc_server; - $wp_xmlrpc_server->escape( $args ); - - $blog_id = $args[0]; - $username = $args[1]; - $password = $args[2]; - $post = $args[3]; - $content_struct = $args[4]; - - if ( ! $user = $wp_xmlrpc_server->login( $username, $password ) ) - return $wp_xmlrpc_server->error; - - if ( is_numeric($post) ) - $post_id = absint($post); - else - $post_id = url_to_postid($post); - - if ( ! $post_id ) - return new IXR_Error( 404, __( 'Invalid post ID.' ) ); - if ( ! get_post($post_id) ) - return new IXR_Error( 404, __( 'Invalid post ID.' ) ); - - $comment['comment_post_ID'] = $post_id; - - $comment['comment_author'] = ''; - if ( isset($content_struct['author']) ) - $comment['comment_author'] = $content_struct['author']; - - $comment['comment_author_email'] = ''; - if ( isset($content_struct['author_email']) ) - $comment['comment_author_email'] = $content_struct['author_email']; - - $comment['comment_author_url'] = ''; - if ( isset($content_struct['author_url']) ) - $comment['comment_author_url'] = $content_struct['author_url']; - - $comment['user_ID'] = 0; - - if ( get_option('require_name_email') ) { - if ( 6 > strlen($comment['comment_author_email']) || '' == $comment['comment_author'] ) - return new IXR_Error( 403, __( 'Comment author name and email are required' ) ); - elseif ( !is_email($comment['comment_author_email']) ) - return new IXR_Error( 403, __( 'A valid email address is required' ) ); - } - - if(isset($content_struct['comment_id'])) { - $comment['comment_ID'] = intval($content_struct['comment_id']); - $edit = true; - } - $comment['comment_post_ID'] = $post_id; - $comment['comment_parent'] = isset($content_struct['comment_parent']) ? absint($content_struct['comment_parent']) : 0; - $comment['comment_content'] = isset($content_struct['content']) ? $content_struct['content'] : null; - - do_action('xmlrpc_call', 'red.Comment'); - - if($edit) { - $result = wp_update_comment($comment); - $comment_ID = $comment['comment_ID']; - } - else { - $comment_ID = wp_new_comment( $comment ); - if($comment_ID) - wp_set_comment_status($comment_ID,'approve'); - } - - if(isset($content_struct['red_avatar'])) - add_comment_meta($comment_ID,'red_avatar',$content_struct['red_avatar'],true); - - do_action( 'xmlrpc_call_success_red_Comment', $comment_ID, $args ); - - return $comment_ID; -} - -function post_to_red_get_avatar($avatar,$id_or_email,$size,$default,$alt) { - - if(! is_object($id_or_email)) - return $avatar; - if((! array_key_exists('comment_author_email',$id_or_email)) || (empty($id_or_email->comment_author_email))) - return $avatar; - if((! array_key_exists('comment_ID', $id_or_email)) || (! intval($id_or_email->comment_ID))) - return $avatar; - $l = get_comment_meta($id_or_email->comment_ID,'red_avatar',true); - if($l) { - $safe_alt = esc_attr($alt); - $avatar = "<img alt='{$safe_alt}' src='{$l}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />"; - } - return $avatar; -} - - -// from: -// http://www.docgate.com/tutorial/php/how-to-convert-html-to-bbcode-with-php-script.html - -//function exists also in post to friendica plugin; load only if not yet loaded by that plugin -if(!function_exists('xpost_to_html2bbcode')) { - function xpost_to_html2bbcode($text) { - $htmltags = array( - '/\<b\>(.*?)\<\/b\>/is', - '/\<i\>(.*?)\<\/i\>/is', - '/\<u\>(.*?)\<\/u\>/is', - '/\<ul.*?\>(.*?)\<\/ul\>/is', - '/\<li\>(.*?)\<\/li\>/is', - '/\<img(.*?) src=\"(.*?)\" alt=\"(.*?)\" title=\"Smile(y?)\" \/\>/is', // some smiley - '/\<img(.*?) src=\"http:\/\/(.*?)\" (.*?)\>/is', - '/\<img(.*?) src=\"(.*?)\" alt=\":(.*?)\" .*? \/\>/is', // some smiley - '/\<div class=\"quotecontent\"\>(.*?)\<\/div\>/is', - '/\<div class=\"codecontent\"\>(.*?)\<\/div\>/is', - '/\<div class=\"quotetitle\"\>(.*?)\<\/div\>/is', - '/\<div class=\"codetitle\"\>(.*?)\<\/div\>/is', - '/\<cite.*?\>(.*?)\<\/cite\>/is', - '/\<blockquote.*?\>(.*?)\<\/blockquote\>/is', - '/\<div\>(.*?)\<\/div\>/is', - '/\<code\>(.*?)\<\/code\>/is', - '/\<br(.*?)\>/is', - '/\<strong\>(.*?)\<\/strong\>/is', - '/\<em\>(.*?)\<\/em\>/is', - '/\<a href=\"mailto:(.*?)\"(.*?)\>(.*?)\<\/a\>/is', - '/\<a .*?href=\"(.*?)\"(.*?)\>http:\/\/(.*?)\<\/a\>/is', - '/\<a .*?href=\"(.*?)\"(.*?)\>(.*?)\<\/a\>/is' - ); - - $bbtags = array( - '[b]$1[/b]', - '[i]$1[/i]', - '[u]$1[/u]', - '[list]$1[/list]', - '[*]$1', - '$3', - '[img]http://$2[/img]' . "\n", - ':$3', - '[quote]$1[/quote]', - '[code]$1[/code]', - '', - '', - '', - '[quote]$1[/quote]', - '$1', - '[code]$1[/code]', - "\n", - '[b]$1[/b]', - '[i]$1[/i]', - '[email=$1]$3[/email]', - '[url]$1[/url]', - '[url=$1]$3[/url]' - ); - - $text = str_replace ("\n", ' ', $text); - $ntext = preg_replace ($htmltags, $bbtags, $text); - $ntext = preg_replace ($htmltags, $bbtags, $ntext); - - // for too large text and cannot handle by str_replace - if (!$ntext) { - $ntext = str_replace(array('<br>', '<br />'), "\n", $text); - $ntext = str_replace(array('<strong>', '</strong>'), array('[b]', '[/b]'), $ntext); - $ntext = str_replace(array('<em>', '</em>'), array('[i]', '[/i]'), $ntext); - } - - $ntext = strip_tags($ntext); - - $ntext = trim(html_entity_decode($ntext,ENT_QUOTES,'UTF-8')); - return $ntext; - } -} - - diff --git a/util/wp/post_to_red/readme.txt b/util/wp/post_to_red/readme.txt deleted file mode 100644 index e27c46236..000000000 --- a/util/wp/post_to_red/readme.txt +++ /dev/null @@ -1,39 +0,0 @@ -=== CrossPost to redmatrix === -Contributors: duthied, macgirvin -Donate link: TBD -Tags: redmatrix, crosspost -Requires at least: 3.2 -Tested up to: 3.2 -Stable tag: 1.2 - -CrossPost to Red Matrix for WordPress - -== Description == -This plugin allows you to cross post to your Red Matrix account. - -**Note, this plugin converts the html from wordpress into bbcode. -The bbcode conversion doesn't handle height and width of an image, so be warned that if you post a very large -image that is resized via height and with attributes, those attributes won't be honored in the resulatant post. - -== Changelog == -= 1.2 = -* ensured no function name collision - -= 1.1 = -* Added feedback to settings form post. - -= 1.0 = -* Initial release. - -== Installation == - -1. Install the plugin from your Wordpress admin panel. - -OR - -1. Upload the plugin folder to the `/wp-content/plugins/` directory. -2. Activate the plugin through the 'Plugins' menu in WordPress. -3. On the settings page enter your account name and password and the nickname of the channel to post to - then click the submit button -4. To cross-post ensure the check box in the 'Cross Post To redmatrix' is checked before publishing. - -== Frequently Asked Questions == diff --git a/version.inc b/version.inc index 98534153c..ae378dbba 100644 --- a/version.inc +++ b/version.inc @@ -1 +1 @@ -2014-10-24.838 +2014-10-25.839 |