2011-09-08 04:10:56 +00:00
< ? php
/**
* Name : WordPress Post Connector
2012-01-27 01:12:10 +00:00
* Description : Post to WordPress ( or anything else which uses blogger XMLRPC API )
2017-01-24 20:07:44 +00:00
* Version : 1.1
2011-09-08 04:10:56 +00:00
* Author : Mike Macgirvin < http :// macgirvin . com / profile / mike >
*/
2017-11-06 23:55:24 +00:00
use Friendica\Core\PConfig ;
2011-09-08 04:10:56 +00:00
function wppost_install () {
2011-10-12 01:46:33 +00:00
register_hook ( 'post_local' , 'addon/wppost/wppost.php' , 'wppost_post_local' );
register_hook ( 'notifier_normal' , 'addon/wppost/wppost.php' , 'wppost_send' );
register_hook ( 'jot_networks' , 'addon/wppost/wppost.php' , 'wppost_jot_nets' );
register_hook ( 'connector_settings' , 'addon/wppost/wppost.php' , 'wppost_settings' );
register_hook ( 'connector_settings_post' , 'addon/wppost/wppost.php' , 'wppost_settings_post' );
2011-09-08 04:10:56 +00:00
}
function wppost_uninstall () {
2011-10-12 01:46:33 +00:00
unregister_hook ( 'post_local' , 'addon/wppost/wppost.php' , 'wppost_post_local' );
unregister_hook ( 'notifier_normal' , 'addon/wppost/wppost.php' , 'wppost_send' );
2011-09-08 04:10:56 +00:00
unregister_hook ( 'jot_networks' , 'addon/wppost/wppost.php' , 'wppost_jot_nets' );
2011-10-12 01:46:33 +00:00
unregister_hook ( 'connector_settings' , 'addon/wppost/wppost.php' , 'wppost_settings' );
unregister_hook ( 'connector_settings_post' , 'addon/wppost/wppost.php' , 'wppost_settings_post' );
// obsolete - remove
unregister_hook ( 'post_local_end' , 'addon/wppost/wppost.php' , 'wppost_send' );
2011-09-08 04:10:56 +00:00
unregister_hook ( 'plugin_settings' , 'addon/wppost/wppost.php' , 'wppost_settings' );
unregister_hook ( 'plugin_settings_post' , 'addon/wppost/wppost.php' , 'wppost_settings_post' );
2011-10-12 01:46:33 +00:00
2011-09-08 04:10:56 +00:00
}
function wppost_jot_nets ( & $a , & $b ) {
if ( ! local_user ())
return ;
2017-11-06 23:55:24 +00:00
$wp_post = PConfig :: get ( local_user (), 'wppost' , 'post' );
2011-09-08 04:10:56 +00:00
if ( intval ( $wp_post ) == 1 ) {
2017-11-06 23:55:24 +00:00
$wp_defpost = PConfig :: get ( local_user (), 'wppost' , 'post_by_default' );
2011-09-08 04:10:56 +00:00
$selected = (( intval ( $wp_defpost ) == 1 ) ? ' checked="checked" ' : '' );
2012-02-21 23:08:51 +00:00
$b .= '<div class="profile-jot-net"><input type="checkbox" name="wppost_enable" ' . $selected . ' value="1" /> '
2011-09-08 04:10:56 +00:00
. t ( 'Post to Wordpress' ) . '</div>' ;
}
}
function wppost_settings ( & $a , & $s ) {
2014-05-29 10:42:25 +00:00
if ( ! local_user ())
return ;
2011-09-08 04:10:56 +00:00
2014-05-29 10:42:25 +00:00
/* Add our stylesheet to the page so we can make our settings look nice */
2011-09-08 04:10:56 +00:00
2014-05-29 10:42:25 +00:00
$a -> page [ 'htmlhead' ] .= '<link rel="stylesheet" type="text/css" href="' . $a -> get_baseurl () . '/addon/wppost/wppost.css' . '" media="all" />' . " \r \n " ;
2011-09-08 04:10:56 +00:00
2014-05-29 10:42:25 +00:00
/* Get the current state of our config variables */
2011-09-08 04:10:56 +00:00
2017-11-06 23:55:24 +00:00
$enabled = PConfig :: get ( local_user (), 'wppost' , 'post' );
2014-05-29 10:42:25 +00:00
$checked = (( $enabled ) ? ' checked="checked" ' : '' );
2011-09-08 04:10:56 +00:00
2014-05-29 10:42:25 +00:00
$css = (( $enabled ) ? '' : '-disabled' );
2014-04-24 14:18:36 +00:00
2017-11-06 23:55:24 +00:00
$def_enabled = PConfig :: get ( local_user (), 'wppost' , 'post_by_default' );
$back_enabled = PConfig :: get ( local_user (), 'wppost' , 'backlink' );
$shortcheck_enabled = PConfig :: get ( local_user (), 'wppost' , 'shortcheck' );
2011-09-08 04:10:56 +00:00
2014-05-29 10:42:25 +00:00
$def_checked = (( $def_enabled ) ? ' checked="checked" ' : '' );
$back_checked = (( $back_enabled ) ? ' checked="checked" ' : '' );
$shortcheck_checked = (( $shortcheck_enabled ) ? ' checked="checked" ' : '' );
2011-09-08 04:10:56 +00:00
2017-11-06 23:55:24 +00:00
$wp_username = PConfig :: get ( local_user (), 'wppost' , 'wp_username' );
$wp_password = PConfig :: get ( local_user (), 'wppost' , 'wp_password' );
$wp_blog = PConfig :: get ( local_user (), 'wppost' , 'wp_blog' );
$wp_backlink_text = PConfig :: get ( local_user (), 'wppost' , 'wp_backlink_text' );
2011-09-08 04:10:56 +00:00
/* Add some HTML to the existing form */
2013-11-30 20:27:39 +00:00
$s .= '<span id="settings_wppost_inflated" class="settings-block fakelink" style="display: block;" onclick="openClose(\'settings_wppost_expanded\'); openClose(\'settings_wppost_inflated\');">' ;
2014-04-24 14:18:36 +00:00
$s .= '<img class="connector' . $css . '" src="images/wordpress.png" /><h3 class="connector">' . t ( 'Wordpress Export' ) . '</h3>' ;
2013-11-30 20:27:39 +00:00
$s .= '</span>' ;
$s .= '<div id="settings_wppost_expanded" class="settings-block" style="display: none;">' ;
$s .= '<span class="fakelink" onclick="openClose(\'settings_wppost_expanded\'); openClose(\'settings_wppost_inflated\');">' ;
2014-04-24 14:18:36 +00:00
$s .= '<img class="connector' . $css . '" src="images/wordpress.png" /><h3 class="connector">' . t ( 'Wordpress Export' ) . '</h3>' ;
2013-11-30 20:27:39 +00:00
$s .= '</span>' ;
2011-09-08 04:10:56 +00:00
$s .= '<div id="wppost-enable-wrapper">' ;
$s .= '<label id="wppost-enable-label" for="wppost-checkbox">' . t ( 'Enable WordPress Post Plugin' ) . '</label>' ;
$s .= '<input id="wppost-checkbox" type="checkbox" name="wppost" value="1" ' . $checked . '/>' ;
$s .= '</div><div class="clear"></div>' ;
$s .= '<div id="wppost-username-wrapper">' ;
$s .= '<label id="wppost-username-label" for="wppost-username">' . t ( 'WordPress username' ) . '</label>' ;
$s .= '<input id="wppost-username" type="text" name="wp_username" value="' . $wp_username . '" />' ;
$s .= '</div><div class="clear"></div>' ;
$s .= '<div id="wppost-password-wrapper">' ;
$s .= '<label id="wppost-password-label" for="wppost-password">' . t ( 'WordPress password' ) . '</label>' ;
$s .= '<input id="wppost-password" type="password" name="wp_password" value="' . $wp_password . '" />' ;
$s .= '</div><div class="clear"></div>' ;
$s .= '<div id="wppost-blog-wrapper">' ;
$s .= '<label id="wppost-blog-label" for="wppost-blog">' . t ( 'WordPress API URL' ) . '</label>' ;
$s .= '<input id="wppost-blog" type="text" name="wp_blog" value="' . $wp_blog . '" />' ;
$s .= '</div><div class="clear"></div>' ;
$s .= '<div id="wppost-bydefault-wrapper">' ;
$s .= '<label id="wppost-bydefault-label" for="wppost-bydefault">' . t ( 'Post to WordPress by default' ) . '</label>' ;
$s .= '<input id="wppost-bydefault" type="checkbox" name="wp_bydefault" value="1" ' . $def_checked . '/>' ;
2012-06-07 05:27:35 +00:00
$s .= '</div><div class="clear"></div>' ;
2012-05-14 23:30:18 +00:00
$s .= '<div id="wppost-backlink-wrapper">' ;
$s .= '<label id="wppost-backlink-label" for="wppost-backlink">' . t ( 'Provide a backlink to the Friendica post' ) . '</label>' ;
2012-05-15 11:31:38 +00:00
$s .= '<input id="wppost-backlink" type="checkbox" name="wp_backlink" value="1" ' . $back_checked . '/>' ;
2014-05-29 10:42:25 +00:00
$s .= '</div><div class="clear"></div>' ;
2017-01-24 20:07:44 +00:00
$s .= '<div id="wppost-backlinktext-wrapper">' ;
$s .= '<label id="wppost-backlinktext-label" for="wp_backlink_text">' . t ( 'Text for the backlink, e.g. Read the original post and comment stream on Friendica.' ) . '</label>' ;
$s .= '<input id="wppost-backlinktext" type="text" name="wp_backlink_text" value="' . $wp_backlink_text . '" ' . $wp_backlink_text . '/>' ;
$s .= '</div><div class="clear"></div>' ;
2012-05-14 23:30:18 +00:00
2014-05-29 10:42:25 +00:00
$s .= '<div id="wppost-shortcheck-wrapper">' ;
$s .= '<label id="wppost-shortcheck-label" for="wppost-shortcheck">' . t ( " Don't post messages that are too short " ) . '</label>' ;
$s .= '<input id="wppost-shortcheck" type="checkbox" name="wp_shortcheck" value="1" ' . $shortcheck_checked . '/>' ;
2011-09-08 04:10:56 +00:00
$s .= '</div><div class="clear"></div>' ;
/* provide a submit button */
2013-11-19 13:10:27 +00:00
$s .= '<div class="settings-submit-wrapper" ><input type="submit" id="wppost-submit" name="wppost-submit" class="settings-submit" value="' . t ( 'Save Settings' ) . '" /></div></div>' ;
2011-09-08 04:10:56 +00:00
}
function wppost_settings_post ( & $a , & $b ) {
if ( x ( $_POST , 'wppost-submit' )) {
2017-11-06 23:55:24 +00:00
PConfig :: set ( local_user (), 'wppost' , 'post' , intval ( $_POST [ 'wppost' ]));
PConfig :: set ( local_user (), 'wppost' , 'post_by_default' , intval ( $_POST [ 'wp_bydefault' ]));
PConfig :: set ( local_user (), 'wppost' , 'wp_username' , trim ( $_POST [ 'wp_username' ]));
PConfig :: set ( local_user (), 'wppost' , 'wp_password' , trim ( $_POST [ 'wp_password' ]));
PConfig :: set ( local_user (), 'wppost' , 'wp_blog' , trim ( $_POST [ 'wp_blog' ]));
PConfig :: set ( local_user (), 'wppost' , 'backlink' , trim ( $_POST [ 'wp_backlink' ]));
PConfig :: set ( local_user (), 'wppost' , 'shortcheck' , trim ( $_POST [ 'wp_shortcheck' ]));
2017-01-24 20:07:44 +00:00
$wp_backlink_text = notags ( trim ( $_POST [ 'wp_backlink_text' ]));
$wp_backlink_text = bbcode ( $wp_backlink_text , false , false , 8 );
$wp_backlink_text = html2plain ( $wp_backlink_text , 0 , true );
2017-11-06 23:55:24 +00:00
PConfig :: set ( local_user (), 'wppost' , 'wp_backlink_text' , $wp_backlink_text );
2011-09-08 04:10:56 +00:00
}
}
2017-09-06 16:16:33 +00:00
function wppost_post_local ( & $a , & $b ) {
2011-09-08 04:10:56 +00:00
2011-10-12 01:46:33 +00:00
// This can probably be changed to allow editing by pointing to a different API endpoint
2011-09-08 04:10:56 +00:00
2017-09-06 16:16:33 +00:00
if ( $b [ 'edit' ]) {
2011-09-08 04:10:56 +00:00
return ;
2017-01-24 20:07:44 +00:00
}
2011-09-08 04:10:56 +00:00
2017-09-06 16:16:33 +00:00
if ( ! local_user () || ( local_user () != $b [ 'uid' ])) {
2011-09-08 04:10:56 +00:00
return ;
2017-01-24 20:07:44 +00:00
}
2011-09-08 04:10:56 +00:00
2017-09-06 16:16:33 +00:00
if ( $b [ 'private' ] || $b [ 'parent' ]) {
2011-09-08 04:10:56 +00:00
return ;
2017-01-24 20:07:44 +00:00
}
2011-09-08 04:10:56 +00:00
2017-11-06 23:55:24 +00:00
$wp_post = intval ( PConfig :: get ( local_user (), 'wppost' , 'post' ));
2011-09-08 04:10:56 +00:00
2011-11-07 22:25:11 +00:00
$wp_enable = (( $wp_post && x ( $_REQUEST , 'wppost_enable' )) ? intval ( $_REQUEST [ 'wppost_enable' ]) : 0 );
2011-09-08 04:10:56 +00:00
2017-11-06 23:55:24 +00:00
if ( $b [ 'api_source' ] && intval ( PConfig :: get ( local_user (), 'wppost' , 'post_by_default' ))) {
2011-09-08 04:10:56 +00:00
$wp_enable = 1 ;
2017-01-24 20:07:44 +00:00
}
2011-09-08 04:10:56 +00:00
2017-09-06 16:16:33 +00:00
if ( ! $wp_enable ) {
return ;
}
2011-10-12 01:46:33 +00:00
2017-09-06 16:16:33 +00:00
if ( strlen ( $b [ 'postopts' ])) {
$b [ 'postopts' ] .= ',' ;
}
$b [ 'postopts' ] .= 'wppost' ;
2011-10-12 01:46:33 +00:00
}
function wppost_send ( & $a , & $b ) {
2014-05-29 10:42:25 +00:00
if ( $b [ 'deleted' ] || $b [ 'private' ] || ( $b [ 'created' ] !== $b [ 'edited' ]))
return ;
2011-10-12 01:46:33 +00:00
2014-05-29 10:42:25 +00:00
if ( ! strstr ( $b [ 'postopts' ], 'wppost' ))
return ;
2011-10-12 01:46:33 +00:00
2014-05-29 10:42:25 +00:00
if ( $b [ 'parent' ] != $b [ 'id' ])
return ;
2011-10-12 01:46:33 +00:00
2017-11-25 23:56:18 +00:00
// Dont't post if the post doesn't belong to us.
// This is a check for forum postings
2018-01-10 03:27:30 +00:00
$self = dba :: selectOne ( 'contact' , [ 'id' ], [ 'uid' => $b [ 'uid' ], 'self' => true ]);
2017-11-25 23:56:18 +00:00
if ( $b [ 'contact-id' ] != $self [ 'id' ]) {
return ;
}
2011-10-12 01:46:33 +00:00
2017-11-06 23:55:24 +00:00
$wp_username = xmlify ( PConfig :: get ( $b [ 'uid' ], 'wppost' , 'wp_username' ));
$wp_password = xmlify ( PConfig :: get ( $b [ 'uid' ], 'wppost' , 'wp_password' ));
$wp_blog = PConfig :: get ( $b [ 'uid' ], 'wppost' , 'wp_blog' );
$wp_backlink_text = PConfig :: get ( $b [ 'uid' ], 'wppost' , 'wp_backlink_text' );
2017-01-24 20:07:44 +00:00
if ( $wp_backlink_text == '' ) {
$wp_backlink_text = t ( 'Read the orig i nal post and com ment stream on Friendica' );
}
2011-10-12 01:46:33 +00:00
if ( $wp_username && $wp_password && $wp_blog ) {
2011-09-08 04:10:56 +00:00
require_once ( 'include/bbcode.php' );
2012-04-01 17:20:40 +00:00
require_once ( 'include/html2plain.php' );
2014-05-29 10:42:25 +00:00
require_once ( 'include/plaintext.php' );
2012-04-01 17:20:40 +00:00
2012-06-17 23:30:44 +00:00
$wptitle = trim ( $b [ 'title' ]);
2017-11-06 23:55:24 +00:00
if ( intval ( PConfig :: get ( $b [ 'uid' ], 'wppost' , 'shortcheck' ))) {
2014-05-29 10:42:25 +00:00
// Checking, if its a post that is worth a blog post
$postentry = false ;
$siteinfo = get_attached_data ( $b [ " body " ]);
// Is it a link to an aricle, a video or a photo?
2017-01-24 20:07:44 +00:00
if ( isset ( $siteinfo [ " type " ])) {
if ( in_array ( $siteinfo [ " type " ], array ( " link " , " audio " , " video " , " photo " ))) {
2014-05-29 10:42:25 +00:00
$postentry = true ;
2017-01-24 20:07:44 +00:00
}
}
2014-05-29 10:42:25 +00:00
// Does it have a title?
2017-01-24 20:07:44 +00:00
if ( $wptitle != " " ) {
2014-05-29 10:42:25 +00:00
$postentry = true ;
2017-01-24 20:07:44 +00:00
}
2014-05-29 10:42:25 +00:00
// Is it larger than 500 characters?
2017-01-24 20:07:44 +00:00
if ( strlen ( $b [ 'body' ]) > 500 ) {
2014-05-29 10:42:25 +00:00
$postentry = true ;
2017-01-24 20:07:44 +00:00
}
2014-05-29 10:42:25 +00:00
2017-01-24 20:07:44 +00:00
if ( ! $postentry ) {
2014-05-29 10:42:25 +00:00
return ;
2017-01-24 20:07:44 +00:00
}
2014-05-29 10:42:25 +00:00
}
2012-04-01 17:20:40 +00:00
// If the title is empty then try to guess
2012-06-17 23:30:44 +00:00
if ( $wptitle == '' ) {
2016-06-23 18:25:00 +00:00
// Fetch information about the post
$siteinfo = get_attached_data ( $b [ " body " ]);
2017-01-24 20:07:44 +00:00
if ( isset ( $siteinfo [ " title " ])) {
2016-06-23 18:25:00 +00:00
$wptitle = $siteinfo [ " title " ];
2017-01-24 20:07:44 +00:00
}
2012-04-01 17:20:40 +00:00
// If no bookmark is found then take the first line
2012-06-17 23:30:44 +00:00
if ( $wptitle == '' ) {
2014-01-26 08:53:12 +00:00
// Remove the share element before fetching the first line
$title = trim ( preg_replace ( " / \ [share.*? \ ](.*?) \ [ \ /share \ ]/ism " , " \n $ 1 \n " , $b [ 'body' ]));
$title = html2plain ( bbcode ( $title , false , false ), 0 , true ) . " \n " ;
2012-04-01 17:20:40 +00:00
$pos = strpos ( $title , " \n " );
2013-07-14 12:58:12 +00:00
$trailer = " " ;
2017-06-09 01:20:27 +00:00
if (( $pos == 0 ) || ( $pos > 100 )) {
2013-07-14 12:58:12 +00:00
$pos = 100 ;
$trailer = " ... " ;
}
2012-04-01 17:20:40 +00:00
2013-07-14 12:58:12 +00:00
$wptitle = substr ( $title , 0 , $pos ) . $trailer ;
2012-04-01 17:20:40 +00:00
}
}
2011-09-08 04:33:54 +00:00
2012-06-17 23:30:44 +00:00
$title = '<title>' . (( $wptitle ) ? $wptitle : t ( 'Post from Friendica' )) . '</title>' ;
2014-01-26 08:53:12 +00:00
$post = bbcode ( $b [ 'body' ], false , false , 4 );
2013-07-20 12:28:17 +00:00
// If a link goes to youtube then remove the stuff around it. Wordpress detects youtube links and embeds it
$post = preg_replace ( '/<a.*?href="(https?:\/\/www.youtube.com\/.*?)".*?>(.*?)<\/a>/ism' , " \n $ 1 \n " , $post );
$post = preg_replace ( '/<a.*?href="(https?:\/\/youtu.be\/.*?)".*?>(.*?)<\/a>/ism' , " \n $ 1 \n " , $post );
$post = $title . $post ;
2012-05-14 23:30:18 +00:00
2017-11-06 23:55:24 +00:00
$wp_backlink = intval ( PConfig :: get ( $b [ 'uid' ], 'wppost' , 'backlink' ));
2017-01-24 20:07:44 +00:00
if ( $wp_backlink && $b [ 'plink' ]) {
2013-07-20 12:28:17 +00:00
$post .= EOL . EOL . '<a href="' . $b [ 'plink' ] . '">'
2017-01-24 20:07:44 +00:00
. $wp_backlink_text . '</a>' . EOL . EOL ;
}
2012-05-14 23:30:18 +00:00
2011-11-13 23:49:19 +00:00
$post = xmlify ( $post );
2011-09-08 04:10:56 +00:00
2012-05-14 23:30:18 +00:00
2011-09-08 04:10:56 +00:00
$xml = <<< EOT
2012-02-28 07:19:25 +00:00
< ? xml version = \ " 1.0 \" encoding= \" utf-8 \" ?>
2011-09-08 04:10:56 +00:00
< methodCall >
< methodName > blogger . newPost </ methodName >
< params >
< param >< value >< string /></ value ></ param >
< param >< value >< string /></ value ></ param >
< param >< value >< string > $wp_username </ string ></ value ></ param >
< param >< value >< string > $wp_password </ string ></ value ></ param >
< param >< value >< string > $post </ string ></ value ></ param >
< param >< value >< int > 1 </ int ></ value ></ param >
</ params >
</ methodCall >
EOT ;
logger ( 'wppost: data: ' . $xml , LOGGER_DATA );
2017-01-24 20:07:44 +00:00
if ( $wp_blog !== 'test' ) {
2011-09-08 04:10:56 +00:00
$x = post_url ( $wp_blog , $xml );
2017-01-24 20:07:44 +00:00
}
2012-02-28 07:19:25 +00:00
logger ( 'posted to wordpress: ' . (( $x ) ? $x : '' ), LOGGER_DEBUG );
2011-09-08 04:10:56 +00:00
}
}