mirror of
https://codeberg.org/streams/streams.git
synced 2024-09-20 04:15:12 +00:00
wordpress-to-red cross-posting tool ported from Friendica
This commit is contained in:
parent
a82a1d7c05
commit
ac3ae83a16
2 changed files with 325 additions and 0 deletions
286
util/wp/post_to_red/post_to_red.php
Normal file
286
util/wp/post_to_red/post_to_red.php
Normal 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}"/>
|
||||
Password: <input type="password" name="post_to_red_password" value="{$password}"/>
|
||||
Red Matrix URL: <input type="text" name="post_to_red_url" value="{$seed_url}"/>
|
||||
Optional channel nickname: <input type="text" name="post_to_red_channel" value="{$channel}"/>
|
||||
<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;
|
||||
}
|
||||
|
||||
|
39
util/wp/post_to_red/readme.txt
Normal file
39
util/wp/post_to_red/readme.txt
Normal 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 ==
|
Loading…
Reference in a new issue