wordpress-to-red cross-posting tool ported from Friendica

This commit is contained in:
friendica 2013-11-24 18:03:12 -08:00
parent a82a1d7c05
commit ac3ae83a16
2 changed files with 325 additions and 0 deletions

View file

@ -0,0 +1,286 @@
<?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 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();
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 = $post->post_title . "<br /><br />" . $message;
$message .= "<br /><br />permalink: " . $post->guid;
if (isset($tag_string)) {
$message .= "<br />$tag_string";
}
$bbcode = xpost_to_html2bbcode($message);
$url = $seed_location . '/api/statuses/update';
$headers = array('Authorization' => 'Basic '.base64_encode("$user_name:$password"));
$body = array('status' => $bbcode,'source' => 'WordPress');
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();
// 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 />
<input type="text" name="post_to_red_acct_name" value="{$user_acct}"/> &nbsp;
Password: <input type="password" name="post_to_red_password" value="{$password}"/> &nbsp;
Red Matrix URL: <input type="text" name="post_to_red_url" value="{$seed_url}"/> &nbsp;
Optional channel nickname: <input type="text" name="post_to_red_channel" value="{$channel}"/> &nbsp;
<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 (!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);
} else {
update_post_meta($post_id, 'post_to_red', 0);
}
}
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"];
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);
}
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');
// from:
// http://www.docgate.com/tutorial/php/how-to-convert-html-to-bbcode-with-php-script.html
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;
}

View file

@ -0,0 +1,39 @@
=== 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 ==