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

@ -2,10 +2,10 @@
/** /**
* 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() {
@ -23,26 +23,19 @@ function ljpost_uninstall() {
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>';
} }
} }
@ -68,7 +61,6 @@ function ljpost_settings(&$a,&$s) {
$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 */
@ -115,7 +107,6 @@ 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']));
} }
@ -163,50 +154,59 @@ 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.
$tz = 'UTC';
$x = q("select timezone from user where uid = %d limit 1",
intval($b['uid'])
);
if($x && strlen($x[0]['timezone']))
$tz = $x[0]['timezone'];
$lj_username = get_pconfig($b['uid'],'ljpost','lj_username'); $lj_username = get_pconfig($b['uid'],'ljpost','lj_username');
$lj_password = get_pconfig($b['uid'],'ljpost','lj_password'); $lj_password = get_pconfig($b['uid'],'ljpost','lj_password');
$lj_blog = get_pconfig($b['uid'],'ljpost','lj_blog'); $lj_blog = '$lj_url/interface/xmlrpc';
if($lj_username && $lj_password && $lj_blog) { if($lj_username && $lj_password && $lj_blog) {
require_once('include/bbcode.php'); require_once('include/bbcode.php');
require_once('include/datetime.php');
$title = '<title>' . (($b['title']) ? $b['title'] : t('Post from Friendica')) . '</title>'; $title = $b['title'];
$post = $title . bbcode($b['body']); $post = bbcode($b['body']);
$post = xmlify($post); $post = xmlify($post);
$year = date('Y') $date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s');
$month = date('F') $year = intval(substr($date,0,4));
$day = date('l') $mon = intval(substr($date,5,2));
$hour = date('H') $day = intval(substr($date,8,2));
$min = date('i') $hour = intval(substr($date,11,2));
$min = intval(substr($date,14,2));
$xml = <<< EOT $xml = <<< EOT
<?xml version="1.0" encoding="utf-8"?>
<?xml version=\"1.0\" encoding=\"iso-8859-1\"?> <methodCall>
<methodCall><methodName>LJ.XMLRPC.postevent</methodName> <methodName>LJ.XMLRPC.postevent</methodName>
<params><param> <params>
<value><struct> <param><value>
<struct>
<member><name>username</name><value><string>$lj_username</string></value></member>
<member><name>password</name><value><string>$lj_password</string></value></member>
<member><name>usejournal</name><value><string>$lj_username</string></value></member>
<member><name>event</name><value><string>$post</string></value></member>
<member><name>subject</name><value><string>$title</string></value></member>
<member><name>lineendings</name><value><string>unix</string></value></member>
<member><name>year</name><value><int>$year</int></value></member> <member><name>year</name><value><int>$year</int></value></member>
<member><name>mon</name><value><int>$month</int></value></member> <member><name>mon</name><value><int>$mon</int></value></member>
<member><name>day</name><value><int>$day</int></value></member> <member><name>day</name><value><int>$day</int></value></member>
<member><name>hour</name><value><int>$hour</int></value></member> <member><name>hour</name><value><int>$hour</int></value></member>
<member><name>min</name><value><int>$min</int></value></member> <member><name>min</name><value><int>$min</int></value></member>
<member><name>usejournal</name><value><string>$lj_blog</string></value></member> </struct>
<member><name>event</name><value><string>$post</string></value></member> </value></param>
<member><name>username</name><value><string>$lj_username</string></value></member> </params>
<member><name>password</name><value><string>$lj_password</string></value></member>
<member><name>subject</name><value><string>friendica post</string></value></member>
<member><name>lineendings</name><value><string>unix</string></value></member>
<member><name>ver</name><value><int>1</int></value></member>
<member><name>props</name>
<value><struct>
<member><name>useragent</name><value><string>Friendica</string></value></member>
<member><name>taglist</name><value><string>friendica,crosspost</string></value></member>
</struct></value></member>
</struct></value>
</param></params>
</methodCall> </methodCall>
EOT; EOT;
@ -215,7 +215,8 @@ 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);
} }
} }