the xml POST data was missing the "usejournal" parameter,

required for LJ to know to which blog to post (since users
have posting permission to their own AND to community blogs).
It is now hardwired to their own, personal blog.
Eventually this should be more configurable.
Also, the plugin shouldn't be hardwired for livejournal,
but also allow dreamwidth, insanejournal, deadjournal, etc.
I'll work on that.
This commit is contained in:
Tony Baldwin 2012-03-01 00:25:34 -05:00
parent 7740ca3907
commit 734d400b2f
2 changed files with 107 additions and 91 deletions

15
ljpost/ljpost.css Normal file
View file

@ -0,0 +1,15 @@
#ljpost-enable-label, #ljpost-username-label, #ljpost-password-label, #ljpost-bydefault-label {
float: left;
width: 200px;
margin-top: 10px;
}
#ljpost-checkbox, #ljpost-username, #ljpost-password, #ljpost-bydefault {
float: left;
margin-top: 10px;
}
#ljpost-submit {
margin-top: 15px;
}

View file

@ -1,48 +1,41 @@
<?php <?php
/** /**
* Name: LiveJournal Post Connector * Name: LiveJournal Post Connector
* Description: Post to LiveJournal (or anything else which uses blogger XMLRPC API) * Description: Post to LiveJournal
* Version: 1.0 * Version: 1.0
* Author: Mike Macgirvin <http://macgirvin.com/profile/mike> * Author: Tony Baldwin <http://theshi.re/profile/tony>
* Author: Tony Baldwin <http://theshi.re/profile/tony> * Author: Michael Johnston
*/ */
function ljpost_install() { function ljpost_install() {
register_hook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local'); register_hook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local');
register_hook('notifier_normal', 'addon/ljpost/ljpost.php', 'ljpost_send'); register_hook('notifier_normal', 'addon/ljpost/ljpost.php', 'ljpost_send');
register_hook('jot_networks', 'addon/ljpost/ljpost.php', 'ljpost_jot_nets'); register_hook('jot_networks', 'addon/ljpost/ljpost.php', 'ljpost_jot_nets');
register_hook('connector_settings', 'addon/ljpost/ljpost.php', 'ljpost_settings'); register_hook('connector_settings', 'addon/ljpost/ljpost.php', 'ljpost_settings');
register_hook('connector_settings_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post'); register_hook('connector_settings_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post');
} }
function ljpost_uninstall() { function ljpost_uninstall() {
unregister_hook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local'); unregister_hook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local');
unregister_hook('notifier_normal', 'addon/ljpost/ljpost.php', 'ljpost_send'); unregister_hook('notifier_normal', 'addon/ljpost/ljpost.php', 'ljpost_send');
unregister_hook('jot_networks', 'addon/ljpost/ljpost.php', 'ljpost_jot_nets'); unregister_hook('jot_networks', 'addon/ljpost/ljpost.php', 'ljpost_jot_nets');
unregister_hook('connector_settings', 'addon/ljpost/ljpost.php', 'ljpost_settings'); unregister_hook('connector_settings', 'addon/ljpost/ljpost.php', 'ljpost_settings');
unregister_hook('connector_settings_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post'); unregister_hook('connector_settings_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post');
// obsolete - remove
unregister_hook('post_local_end', 'addon/ljpost/ljpost.php', 'ljpost_send');
unregister_hook('plugin_settings', 'addon/ljpost/ljpost.php', 'ljpost_settings');
unregister_hook('plugin_settings_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post');
} }
function ljpost_jot_nets(&$a,&$b) { function ljpost_jot_nets(&$a,&$b) {
if(! local_user()) if(! local_user())
return; return;
$lj_post = get_pconfig(local_user(),'ljpost','post'); $lj_post = get_pconfig(local_user(),'ljpost','post');
if(intval($lj_post) == 1) { if(intval($lj_post) == 1) {
$wp_defpost = get_pconfig(local_user(),'ljpost','post_by_default'); $lj_defpost = get_pconfig(local_user(),'ljpost','post_by_default');
$selected = ((intval($wp_defpost) == 1) ? ' checked="checked" ' : ''); $selected = ((intval($lj_defpost) == 1) ? ' checked="checked" ' : '');
$b .= '<div class="profile-jot-net"><input type="checkbox" name="ljpost_enable" ' . $selected . ' value="1" /> ' $b .= '<div class="profile-jot-net"><input type="checkbox" name="ljpost_enable" ' . $selected . ' value="1" /> '
. t('Post to Livejournal') . '</div>'; . t('Post to LiveJournal') . '</div>';
} }
} }
@ -54,7 +47,7 @@ function ljpost_settings(&$a,&$s) {
/* Add our stylesheet to the page so we can make our settings look nice */ /* Add our stylesheet to the page so we can make our settings look nice */
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/ljpost/ljpost.css' . '" media="all" />' . "\r\n"; $a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/ljpost/ljpost.css' . '" media="all" />' . "\r\n";
/* Get the current state of our config variables */ /* Get the current state of our config variables */
@ -66,9 +59,8 @@ function ljpost_settings(&$a,&$s) {
$def_checked = (($def_enabled) ? ' checked="checked" ' : ''); $def_checked = (($def_enabled) ? ' checked="checked" ' : '');
$lj_username = get_pconfig(local_user(), 'ljpost', 'lj_username'); $lj_username = get_pconfig(local_user(), 'ljpost', 'lj_username');
$lj_password = get_pconfig(local_user(), 'ljpost', 'lj_password'); $lj_password = get_pconfig(local_user(), 'ljpost', 'lj_password');
$lj_blog = get_pconfig(local_user(), 'ljpost', 'lj_blog');
/* Add some HTML to the existing form */ /* Add some HTML to the existing form */
@ -90,14 +82,14 @@ $lj_blog = get_pconfig(local_user(), 'ljpost', 'lj_blog');
$s .= '<input id="ljpost-password" type="password" name="lj_password" value="' . $lj_password . '" />'; $s .= '<input id="ljpost-password" type="password" name="lj_password" value="' . $lj_password . '" />';
$s .= '</div><div class="clear"></div>'; $s .= '</div><div class="clear"></div>';
$s .= '<div id="ljpost-blog-wrapper">'; $s .= '<div id="ljpost-url-wrapper">';
$s .= '<label id="ljpost-blog-label" for="ljpost-blog">' . t('LiveJournal API URL') . '</label>'; $s .= '<label id="ljpost-url-label" for="ljpost-url">' . t('LiveJournal URL') . '</label>';
$s .= '<input id="ljpost-blog" type="text" name="lj_blog" value="' . $lj_blog . '" />'; $s .= '<input id="ljpost-url" type="url" name="lj_url" value="' . $lj_url . '" />';
$s .= '</div><div class="clear"></div>'; $s .= '</div><div class="clear"></div>';
$s .= '<div id="ljpost-bydefault-wrapper">'; $s .= '<div id="ljpost-bydefault-wrapper">';
$s .= '<label id="ljpost-bydefault-label" for="ljpost-bydefault">' . t('Post to LiveJournal by default') . '</label>'; $s .= '<label id="ljpost-bydefault-label" for="ljpost-bydefault">' . t('Post to LiveJournal by default') . '</label>';
$s .= '<input id="ljpost-bydefault" type="checkbox" name="wp_bydefault" value="1" ' . $def_checked . '/>'; $s .= '<input id="ljpost-bydefault" type="checkbox" name="lj_bydefault" value="1" ' . $def_checked . '/>';
$s .= '</div><div class="clear"></div>'; $s .= '</div><div class="clear"></div>';
/* provide a submit button */ /* provide a submit button */
@ -109,37 +101,36 @@ $lj_blog = get_pconfig(local_user(), 'ljpost', 'lj_blog');
function ljpost_settings_post(&$a,&$b) { function ljpost_settings_post(&$a,&$b) {
if(x($_POST,'ljpost-submit')) { if(x($_POST,'ljpost-submit')) {
set_pconfig(local_user(),'ljpost','post',intval($_POST['ljpost'])); set_pconfig(local_user(),'ljpost','post',intval($_POST['ljpost']));
set_pconfig(local_user(),'ljpost','post_by_default',intval($_POST['lj_bydefault'])); set_pconfig(local_user(),'ljpost','post_by_default',intval($_POST['lj_bydefault']));
set_pconfig(local_user(),'ljpost','lj_username',trim($_POST['lj_username'])); set_pconfig(local_user(),'ljpost','lj_username',trim($_POST['lj_username']));
set_pconfig(local_user(),'ljpost','lj_password',trim($_POST['lj_password'])); set_pconfig(local_user(),'ljpost','lj_password',trim($_POST['lj_password']));
set_pconfig(local_user(),'ljpost','lj_blog',trim($_POST['lj_blog']));
} }
} }
function ljpost_post_local(&$a,&$b) { function ljpost_post_local(&$a,&$b) {
// This can probably be changed to allow editing by pointing to a different API endpoint // This can probably be changed to allow editing by pointing to a different API endpoint
if($b['edit']) if($b['edit'])
return; return;
if((! local_user()) || (local_user() != $b['uid'])) if((! local_user()) || (local_user() != $b['uid']))
return; return;
if($b['private'] || $b['parent']) if($b['private'] || $b['parent'])
return; return;
$lj_post = intval(get_pconfig(local_user(),'ljpost','post')); $lj_post = intval(get_pconfig(local_user(),'ljpost','post'));
$lj_enable = (($lj_post && x($_REQUEST,'ljpost_enable')) ? intval($_REQUEST['ljpost_enable']) : 0); $lj_enable = (($lj_post && x($_REQUEST,'ljpost_enable')) ? intval($_REQUEST['ljpost_enable']) : 0);
if($_REQUEST['api_source'] && intval(get_pconfig(local_user(),'ljpost','post_by_default'))) if($_REQUEST['api_source'] && intval(get_pconfig(local_user(),'ljpost','post_by_default')))
$lj_enable = 1; $lj_enable = 1;
if(! $lj_enable) if(! $lj_enable)
return; return;
@ -163,59 +154,69 @@ function ljpost_send(&$a,&$b) {
if($b['parent'] != $b['id']) if($b['parent'] != $b['id'])
return; return;
// LiveJournal post in the LJ user's timezone.
// Hopefully the person's Friendica account
// will be set to the same thing.
$lj_username = get_pconfig($b['uid'],'ljpost','lj_username'); $tz = 'UTC';
$lj_password = get_pconfig($b['uid'],'ljpost','lj_password');
$lj_blog = get_pconfig($b['uid'],'ljpost','lj_blog');
if($lj_username && $lj_password && $lj_blog) { $x = q("select timezone from user where uid = %d limit 1",
intval($b['uid'])
);
if($x && strlen($x[0]['timezone']))
$tz = $x[0]['timezone'];
require_once('include/bbcode.php'); $lj_username = get_pconfig($b['uid'],'ljpost','lj_username');
$lj_password = get_pconfig($b['uid'],'ljpost','lj_password');
$lj_blog = '$lj_url/interface/xmlrpc';
$title = '<title>' . (($b['title']) ? $b['title'] : t('Post from Friendica')) . '</title>'; if($lj_username && $lj_password && $lj_blog) {
$post = $title . bbcode($b['body']);
$post = xmlify($post);
$year = date('Y') require_once('include/bbcode.php');
$month = date('F') require_once('include/datetime.php');
$day = date('l')
$hour = date('H')
$min = date('i')
$xml = <<< EOT $title = $b['title'];
$post = bbcode($b['body']);
$post = xmlify($post);
<?xml version=\"1.0\" encoding=\"iso-8859-1\"?> $date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s');
<methodCall><methodName>LJ.XMLRPC.postevent</methodName> $year = intval(substr($date,0,4));
<params><param> $mon = intval(substr($date,5,2));
<value><struct> $day = intval(substr($date,8,2));
<member><name>year</name><value><int>$year</int></value></member> $hour = intval(substr($date,11,2));
<member><name>mon</name><value><int>$month</int></value></member> $min = intval(substr($date,14,2));
<member><name>day</name><value><int>$day</int></value></member>
<member><name>hour</name><value><int>$hour</int></value></member> $xml = <<< EOT
<member><name>min</name><value><int>$min</int></value></member> <?xml version="1.0" encoding="utf-8"?>
<member><name>usejournal</name><value><string>$lj_blog</string></value></member> <methodCall>
<member><name>event</name><value><string>$post</string></value></member> <methodName>LJ.XMLRPC.postevent</methodName>
<member><name>username</name><value><string>$lj_username</string></value></member> <params>
<member><name>password</name><value><string>$lj_password</string></value></member> <param><value>
<member><name>subject</name><value><string>friendica post</string></value></member> <struct>
<member><name>lineendings</name><value><string>unix</string></value></member> <member><name>username</name><value><string>$lj_username</string></value></member>
<member><name>ver</name><value><int>1</int></value></member> <member><name>password</name><value><string>$lj_password</string></value></member>
<member><name>props</name> <member><name>usejournal</name><value><string>$lj_username</string></value></member>
<value><struct> <member><name>event</name><value><string>$post</string></value></member>
<member><name>useragent</name><value><string>Friendica</string></value></member> <member><name>subject</name><value><string>$title</string></value></member>
<member><name>taglist</name><value><string>friendica,crosspost</string></value></member> <member><name>lineendings</name><value><string>unix</string></value></member>
</struct></value></member> <member><name>year</name><value><int>$year</int></value></member>
</struct></value> <member><name>mon</name><value><int>$mon</int></value></member>
</param></params> <member><name>day</name><value><int>$day</int></value></member>
<member><name>hour</name><value><int>$hour</int></value></member>
<member><name>min</name><value><int>$min</int></value></member>
</struct>
</value></param>
</params>
</methodCall> </methodCall>
EOT; EOT;
logger('ljpost: data: ' . $xml, LOGGER_DATA); logger('ljpost: data: ' . $xml, LOGGER_DATA);
if($lj_blog !== 'test') if($lj_blog !== 'test')
$x = post_url($lj_blog,$xml); $x = post_url($lj_blog,$xml);
logger('posted to livejournal: ' . ($x) ? $x : ''); logger('posted to livejournal: ' . ($x) ? $x : '', LOGGER_DEBUG);
} }
} }