From 734d400b2f1a29ab595d1db0ee43be812a0fbdd7 Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Thu, 1 Mar 2012 00:25:34 -0500
Subject: [PATCH 01/17] 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.

---
 ljpost/ljpost.css |  15 ++++
 ljpost/ljpost.php | 183 +++++++++++++++++++++++-----------------------
 2 files changed, 107 insertions(+), 91 deletions(-)
 create mode 100644 ljpost/ljpost.css

diff --git a/ljpost/ljpost.css b/ljpost/ljpost.css
new file mode 100644
index 000000000..8edab3d99
--- /dev/null
+++ b/ljpost/ljpost.css
@@ -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;
+}
\ No newline at end of file
diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php
index de7567adb..8910adb6b 100644
--- a/ljpost/ljpost.php
+++ b/ljpost/ljpost.php
@@ -1,48 +1,41 @@
 <?php
 
 /**
-* Name: LiveJournal Post Connector
-* Description: Post to LiveJournal (or anything else which uses blogger XMLRPC API)
-* Version: 1.0
-* Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
-* Author: Tony Baldwin <http://theshi.re/profile/tony>
-*/
+ * Name: LiveJournal Post Connector
+ * Description: Post to LiveJournal
+ * Version: 1.0
+ * Author: Tony Baldwin <http://theshi.re/profile/tony>
+ * Author: Michael Johnston
+ */
 
 function ljpost_install() {
-    register_hook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local');
-    register_hook('notifier_normal', 'addon/ljpost/ljpost.php', 'ljpost_send');
-    register_hook('jot_networks', 'addon/ljpost/ljpost.php', 'ljpost_jot_nets');
-    register_hook('connector_settings', 'addon/ljpost/ljpost.php', 'ljpost_settings');
+    register_hook('post_local',           'addon/ljpost/ljpost.php', 'ljpost_post_local');
+    register_hook('notifier_normal',      'addon/ljpost/ljpost.php', 'ljpost_send');
+    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_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post');
 
 }
 function ljpost_uninstall() {
-    unregister_hook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local');
-    unregister_hook('notifier_normal', 'addon/ljpost/ljpost.php', 'ljpost_send');
-    unregister_hook('jot_networks', 'addon/ljpost/ljpost.php', 'ljpost_jot_nets');
-    unregister_hook('connector_settings', 'addon/ljpost/ljpost.php', 'ljpost_settings');
+    unregister_hook('post_local',       'addon/ljpost/ljpost.php', 'ljpost_post_local');
+    unregister_hook('notifier_normal',  'addon/ljpost/ljpost.php', 'ljpost_send');
+    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_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) {
     if(! local_user())
         return;
 
     $lj_post = get_pconfig(local_user(),'ljpost','post');
     if(intval($lj_post) == 1) {
-        $wp_defpost = get_pconfig(local_user(),'ljpost','post_by_default');
-        $selected = ((intval($wp_defpost) == 1) ? ' checked="checked" ' : '');
+        $lj_defpost = get_pconfig(local_user(),'ljpost','post_by_default');
+        $selected = ((intval($lj_defpost) == 1) ? ' checked="checked" ' : '');
         $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 */
 
-    $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 */
 
@@ -66,9 +59,8 @@ function ljpost_settings(&$a,&$s) {
 
     $def_checked = (($def_enabled) ? ' checked="checked" ' : '');
 
-$lj_username = get_pconfig(local_user(), 'ljpost', 'lj_username');
-$lj_password = get_pconfig(local_user(), 'ljpost', 'lj_password');
-$lj_blog = get_pconfig(local_user(), 'ljpost', 'lj_blog');
+	$lj_username = get_pconfig(local_user(), 'ljpost', 'lj_username');
+	$lj_password = get_pconfig(local_user(), 'ljpost', 'lj_password');
 
 
     /* 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 .= '</div><div class="clear"></div>';
 
-    $s .= '<div id="ljpost-blog-wrapper">';
-    $s .= '<label id="ljpost-blog-label" for="ljpost-blog">' . t('LiveJournal API URL') . '</label>';
-    $s .= '<input id="ljpost-blog" type="text" name="lj_blog" value="' . $lj_blog . '" />';
+    $s .= '<div id="ljpost-url-wrapper">';
+    $s .= '<label id="ljpost-url-label" for="ljpost-url">' . t('LiveJournal URL') . '</label>';
+    $s .= '<input id="ljpost-url" type="url" name="lj_url" value="' . $lj_url . '" />';
     $s .= '</div><div class="clear"></div>';
 
     $s .= '<div id="ljpost-bydefault-wrapper">';
     $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>';
 
     /* provide a submit button */
@@ -109,37 +101,36 @@ $lj_blog = get_pconfig(local_user(), 'ljpost', 'lj_blog');
 
 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_by_default',intval($_POST['lj_bydefault']));
-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_blog',trim($_POST['lj_blog']));
+		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','lj_username',trim($_POST['lj_username']));
+		set_pconfig(local_user(),'ljpost','lj_password',trim($_POST['lj_password']));
 
-}
+	}
 
 }
 
 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'])
-return;
+	if($b['edit'])
+		return;
 
-if((! local_user()) || (local_user() != $b['uid']))
-return;
+	if((! local_user()) || (local_user() != $b['uid']))
+		return;
 
-if($b['private'] || $b['parent'])
-return;
+	if($b['private'] || $b['parent'])
+		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')))
-$lj_enable = 1;
+	if($_REQUEST['api_source'] && intval(get_pconfig(local_user(),'ljpost','post_by_default')))
+		$lj_enable = 1;
 
     if(! $lj_enable)
        return;
@@ -163,59 +154,69 @@ function ljpost_send(&$a,&$b) {
     if($b['parent'] != $b['id'])
         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');
-$lj_password = get_pconfig($b['uid'],'ljpost','lj_password');
-$lj_blog = get_pconfig($b['uid'],'ljpost','lj_blog');
+	$tz = 'UTC';
 
-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>';
-$post = $title . bbcode($b['body']);
-$post = xmlify($post);
+	if($lj_username && $lj_password && $lj_blog) {
 
-$year = date('Y')
-$month = date('F')
-$day = date('l')
-$hour = date('H')
-$min = date('i')
+		require_once('include/bbcode.php');
+		require_once('include/datetime.php');
 
-$xml = <<< EOT
+		$title = $b['title'];
+		$post = bbcode($b['body']);
+		$post = xmlify($post);
 
-<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>
-<methodCall><methodName>LJ.XMLRPC.postevent</methodName>
-<params><param>
-<value><struct>
-<member><name>year</name><value><int>$year</int></value></member>
-<member><name>mon</name><value><int>$month</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>min</name><value><int>$min</int></value></member>
-<member><name>usejournal</name><value><string>$lj_blog</string></value></member>
-<member><name>event</name><value><string>$post</string></value></member>
-<member><name>username</name><value><string>$lj_username</string></value></member>
-<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>
+		$date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s');
+		$year = intval(substr($date,0,4));
+		$mon  = intval(substr($date,5,2));
+		$day  = intval(substr($date,8,2));
+		$hour = intval(substr($date,11,2));
+		$min  = intval(substr($date,14,2));
+
+		$xml = <<< EOT
+<?xml version="1.0" encoding="utf-8"?>
+<methodCall>
+  <methodName>LJ.XMLRPC.postevent</methodName>
+  <params>
+    <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>mon</name><value><int>$mon</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>min</name><value><int>$min</int></value></member>
+        </struct>
+    </value></param>
+  </params>
 </methodCall>
 
 EOT;
 
-logger('ljpost: data: ' . $xml, LOGGER_DATA);
+		logger('ljpost: data: ' . $xml, LOGGER_DATA);
 
-if($lj_blog !== 'test')
-$x = post_url($lj_blog,$xml);
-logger('posted to livejournal: ' . ($x) ? $x : '');
+		if($lj_blog !== 'test')
+			$x = post_url($lj_blog,$xml);
+		logger('posted to livejournal: ' . ($x) ? $x : '', LOGGER_DEBUG);
 
 	}
 }
+

From 4ff22560f88bc0400f695f11618ab85c8b2bf45e Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Thu, 1 Mar 2012 01:31:10 -0500
Subject: [PATCH 02/17] should work, doesn't. xml is correct, required
 parameters include, nothing gets through...

---
 ljpost/ljpost.php | 44 ++++++++++++++++++++++++--------------------
 1 file changed, 24 insertions(+), 20 deletions(-)

diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php
index 8910adb6b..3fb30bc8e 100644
--- a/ljpost/ljpost.php
+++ b/ljpost/ljpost.php
@@ -187,26 +187,30 @@ function ljpost_send(&$a,&$b) {
 		$min  = intval(substr($date,14,2));
 
 		$xml = <<< EOT
-<?xml version="1.0" encoding="utf-8"?>
-<methodCall>
-  <methodName>LJ.XMLRPC.postevent</methodName>
-  <params>
-    <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>mon</name><value><int>$mon</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>min</name><value><int>$min</int></value></member>
-        </struct>
-    </value></param>
-  </params>
+		
+<?xml version=\"1.0\" encoding=\"utf-8\"?>
+<methodCall><methodName>LJ.XMLRPC.postevent</methodName>
+<params><param>
+<value><struct>
+<member><name>year</name><value><int>$year</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>hour</name><value><int>$hour</int></value></member>
+<member><name>min</name><value><int>$min</int></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>username</name><value><string>$lj_username</string></value></member>
+<member><name>password</name><value><string>$lj_password</string></value></member>
+<member><name>subject</name><value><string>xpost from friendica</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</string></value></member>
+</struct></value></member>
+</struct></value>
+</param></params>
 </methodCall>
 
 EOT;

From df6ee56969a53bb20a4a67728c5fa538766a7a6f Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Thu, 1 Mar 2012 02:29:19 -0500
Subject: [PATCH 03/17] minor corrections, but still not working

---
 ljpost/ljpost.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php
index 3fb30bc8e..dfd51469e 100644
--- a/ljpost/ljpost.php
+++ b/ljpost/ljpost.php
@@ -4,7 +4,7 @@
  * Name: LiveJournal Post Connector
  * Description: Post to LiveJournal
  * Version: 1.0
- * Author: Tony Baldwin <http://theshi.re/profile/tony>
+ * Author: Tony Baldwin <http://tonybaldwin.me/friendica/profile/tony>
  * Author: Michael Johnston
  */
 

From 76b284de032ff7dd65f209dd64f392fee3b71897 Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Thu, 1 Mar 2012 19:06:46 -0500
Subject: [PATCH 04/17] working on adding support for other moveabletype sites.
 added entry for siteurl (lj_url)

---
 ljpost/ljpost.php | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php
index dfd51469e..3084b8bd3 100644
--- a/ljpost/ljpost.php
+++ b/ljpost/ljpost.php
@@ -61,6 +61,7 @@ function ljpost_settings(&$a,&$s) {
 
 	$lj_username = get_pconfig(local_user(), 'ljpost', 'lj_username');
 	$lj_password = get_pconfig(local_user(), 'ljpost', 'lj_password');
+	$lj_url = get_pconfig(local_user(), 'ljpost', 'lj_url');
 
 
     /* Add some HTML to the existing form */
@@ -107,6 +108,7 @@ function ljpost_settings_post(&$a,&$b) {
 		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_password',trim($_POST['lj_password']));
+		set_pconfig(local_user(),'ljpost','lj_url',trim($_POST['lj_url']));
 
 	}
 
@@ -187,8 +189,7 @@ function ljpost_send(&$a,&$b) {
 		$min  = intval(substr($date,14,2));
 
 		$xml = <<< EOT
-		
-<?xml version=\"1.0\" encoding=\"utf-8\"?>
+<?xml version="1.0" encoding="utf-8"?>
 <methodCall><methodName>LJ.XMLRPC.postevent</methodName>
 <params><param>
 <value><struct>
@@ -201,7 +202,7 @@ function ljpost_send(&$a,&$b) {
 <member><name>event</name><value><string>$post</string></value></member>
 <member><name>username</name><value><string>$lj_username</string></value></member>
 <member><name>password</name><value><string>$lj_password</string></value></member>
-<member><name>subject</name><value><string>xpost from friendica</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>ver</name><value><int>1</int></value></member>
 <member><name>props</name>

From 1b8ad8864de5e09c309542da7c88c3ac06aed837 Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Thu, 1 Mar 2012 22:33:55 -0500
Subject: [PATCH 05/17] added dreamwidth connector

---
 dwpost/dwpost.css |  15 ++++
 dwpost/dwpost.php | 220 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 235 insertions(+)
 create mode 100644 dwpost/dwpost.css
 create mode 100644 dwpost/dwpost.php

diff --git a/dwpost/dwpost.css b/dwpost/dwpost.css
new file mode 100644
index 000000000..8edab3d99
--- /dev/null
+++ b/dwpost/dwpost.css
@@ -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;
+}
\ No newline at end of file
diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php
new file mode 100644
index 000000000..0bf420e5e
--- /dev/null
+++ b/dwpost/dwpost.php
@@ -0,0 +1,220 @@
+<?php
+
+/**
+ * Name: Dreamwidth Post Connector
+ * Description: Post to dreamwidth
+ * Version: 1.0
+ * Author: Tony Baldwin <http://tonybaldwin.me/friendica/profile/tony>
+ * Author: Michael Johnston
+ */
+
+function dwpost_install() {
+    register_hook('post_local',           'addon/dwpost/dwpost.php', 'dwpost_post_local');
+    register_hook('notifier_normal',      'addon/dwpost/dwpost.php', 'dwpost_send');
+    register_hook('jot_networks',         'addon/dwpost/dwpost.php', 'dwpost_jot_nets');
+    register_hook('connector_settings',      'addon/dwpost/dwpost.php', 'dwpost_settings');
+    register_hook('connector_settings_post', 'addon/dwpost/dwpost.php', 'dwpost_settings_post');
+
+}
+function dwpost_uninstall() {
+    unregister_hook('post_local',       'addon/dwpost/dwpost.php', 'dwpost_post_local');
+    unregister_hook('notifier_normal',  'addon/dwpost/dwpost.php', 'dwpost_send');
+    unregister_hook('jot_networks',     'addon/dwpost/dwpost.php', 'dwpost_jot_nets');
+    unregister_hook('connector_settings',      'addon/dwpost/dwpost.php', 'dwpost_settings');
+    unregister_hook('connector_settings_post', 'addon/dwpost/dwpost.php', 'dwpost_settings_post');
+
+}
+
+
+function dwpost_jot_nets(&$a,&$b) {
+    if(! local_user())
+        return;
+
+    $dw_post = get_pconfig(local_user(),'dwpost','post');
+    if(intval($dw_post) == 1) {
+        $dw_defpost = get_pconfig(local_user(),'dwpost','post_by_default');
+        $selected = ((intval($dw_defpost) == 1) ? ' checked="checked" ' : '');
+        $b .= '<div class="profile-jot-net"><input type="checkbox" name="dwpost_enable" ' . $selected . ' value="1" /> '
+            . t('Post to Dreamwidth') . '</div>';
+    }
+}
+
+
+function dwpost_settings(&$a,&$s) {
+
+    if(! local_user())
+        return;
+
+    /* 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/dwpost/dwpost.css' . '" media="all" />' . "\r\n";
+
+    /* Get the current state of our config variables */
+
+    $enabled = get_pconfig(local_user(),'dwpost','post');
+
+    $checked = (($enabled) ? ' checked="checked" ' : '');
+
+    $def_enabled = get_pconfig(local_user(),'dwpost','post_by_default');
+
+    $def_checked = (($def_enabled) ? ' checked="checked" ' : '');
+
+	$dw_username = get_pconfig(local_user(), 'dwpost', 'dw_username');
+	$dw_password = get_pconfig(local_user(), 'dwpost', 'dw_password');
+
+
+    /* Add some HTML to the existing form */
+
+    $s .= '<div class="settings-block">';
+    $s .= '<h3>' . t('Dreamwidth Post Settings') . '</h3>';
+    $s .= '<div id="dwpost-enable-wrapper">';
+    $s .= '<label id="dwpost-enable-label" for="dwpost-checkbox">' . t('Enable dreamwidth Post Plugin') . '</label>';
+    $s .= '<input id="dwpost-checkbox" type="checkbox" name="dwpost" value="1" ' . $checked . '/>';
+    $s .= '</div><div class="clear"></div>';
+
+    $s .= '<div id="dwpost-username-wrapper">';
+    $s .= '<label id="dwpost-username-label" for="dwpost-username">' . t('dreamwidth username') . '</label>';
+    $s .= '<input id="dwpost-username" type="text" name="dw_username" value="' . $dw_username . '" />';
+    $s .= '</div><div class="clear"></div>';
+
+    $s .= '<div id="dwpost-password-wrapper">';
+    $s .= '<label id="dwpost-password-label" for="dwpost-password">' . t('dreamwidth password') . '</label>';
+    $s .= '<input id="dwpost-password" type="password" name="dw_password" value="' . $dw_password . '" />';
+    $s .= '</div><div class="clear"></div>';
+
+    $s .= '<div id="dwpost-bydefault-wrapper">';
+    $s .= '<label id="dwpost-bydefault-label" for="dwpost-bydefault">' . t('Post to dreamwidth by default') . '</label>';
+    $s .= '<input id="dwpost-bydefault" type="checkbox" name="dw_bydefault" value="1" ' . $def_checked . '/>';
+    $s .= '</div><div class="clear"></div>';
+
+    /* provide a submit button */
+
+    $s .= '<div class="settings-submit-wrapper" ><input type="submit" id="dwpost-submit" name="dwpost-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
+
+}
+
+
+function dwpost_settings_post(&$a,&$b) {
+
+	if(x($_POST,'dwpost-submit')) {
+
+		set_pconfig(local_user(),'dwpost','post',intval($_POST['dwpost']));
+		set_pconfig(local_user(),'dwpost','post_by_default',intval($_POST['dw_bydefault']));
+		set_pconfig(local_user(),'dwpost','dw_username',trim($_POST['dw_username']));
+		set_pconfig(local_user(),'dwpost','dw_password',trim($_POST['dw_password']));
+
+	}
+
+}
+
+function dwpost_post_local(&$a,&$b) {
+
+	// This can probably be changed to allow editing by pointing to a different API endpoint
+
+	if($b['edit'])
+		return;
+
+	if((! local_user()) || (local_user() != $b['uid']))
+		return;
+
+	if($b['private'] || $b['parent'])
+		return;
+
+    $dw_post   = intval(get_pconfig(local_user(),'dwpost','post'));
+
+	$dw_enable = (($dw_post && x($_REQUEST,'dwpost_enable')) ? intval($_REQUEST['dwpost_enable']) : 0);
+
+	if($_REQUEST['api_source'] && intval(get_pconfig(local_user(),'dwpost','post_by_default')))
+		$dw_enable = 1;
+
+    if(! $dw_enable)
+       return;
+
+    if(strlen($b['postopts']))
+       $b['postopts'] .= ',';
+     $b['postopts'] .= 'dwpost';
+}
+
+
+
+
+function dwpost_send(&$a,&$b) {
+
+    if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited']))
+        return;
+
+    if(! strstr($b['postopts'],'dwpost'))
+        return;
+
+    if($b['parent'] != $b['id'])
+        return;
+
+	// dreamwidth 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'];	
+
+	$dw_username = get_pconfig($b['uid'],'dwpost','dw_username');
+	$dw_password = get_pconfig($b['uid'],'dwpost','dw_password');
+	$dw_blog = 'http://www.dreamwidth.org/interface/xmlrpc';
+
+	if($dw_username && $dw_password && $dw_blog) {
+
+		require_once('include/bbcode.php');
+		require_once('include/datetime.php');
+
+		$title = $b['title'];
+		$post = bbcode($b['body']);
+		$post = xmlify($post);
+
+		$date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s');
+		$year = intval(substr($date,0,4));
+		$mon  = intval(substr($date,5,2));
+		$day  = intval(substr($date,8,2));
+		$hour = intval(substr($date,11,2));
+		$min  = intval(substr($date,14,2));
+
+		$xml = <<< EOT
+<?xml version="1.0" encoding="utf-8"?>
+<methodCall><methodName>LJ.XMLRPC.postevent</methodName>
+<params><param>
+<value><struct>
+<member><name>year</name><value><int>$year</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>hour</name><value><int>$hour</int></value></member>
+<member><name>min</name><value><int>$min</int></value></member>
+<member><name>usejournal</name><value><string>$dw_username</string></value></member>
+<member><name>event</name><value><string>$post</string></value></member>
+<member><name>username</name><value><string>$dw_username</string></value></member>
+<member><name>password</name><value><string>$dw_password</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>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</string></value></member>
+</struct></value></member>
+</struct></value>
+</param></params>
+</methodCall>
+
+EOT;
+
+		logger('dwpost: data: ' . $xml, LOGGER_DATA);
+
+		if($dw_blog !== 'test')
+			$x = post_url($dw_blog,$xml);
+		logger('posted to dreamwidth: ' . ($x) ? $x : '', LOGGER_DEBUG);
+
+	}
+}
+

From 0398585d6cb80a455ea79ce9a155e9f8c7895dbd Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Thu, 1 Mar 2012 22:39:14 -0500
Subject: [PATCH 06/17] minor adjustment to dwpost

---
 dwpost.tar.gz     | Bin 0 -> 2522 bytes
 dwpost/dwpost.php |   1 -
 2 files changed, 1 deletion(-)
 create mode 100644 dwpost.tar.gz

diff --git a/dwpost.tar.gz b/dwpost.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..d22d966e8eff1030c8c798fe03e798702df31dcf
GIT binary patch
literal 2522
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

literal 0
HcmV?d00001

diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php
index 0bf420e5e..c7bfd939f 100644
--- a/dwpost/dwpost.php
+++ b/dwpost/dwpost.php
@@ -191,7 +191,6 @@ function dwpost_send(&$a,&$b) {
 <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>
-<member><name>usejournal</name><value><string>$dw_username</string></value></member>
 <member><name>event</name><value><string>$post</string></value></member>
 <member><name>username</name><value><string>$dw_username</string></value></member>
 <member><name>password</name><value><string>$dw_password</string></value></member>

From 90039f5522cbb443d96994c88ee1e14d674d3c1a Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Fri, 2 Mar 2012 11:16:21 -0500
Subject: [PATCH 07/17] added a mibbit/irc chatroom plugin

---
 mibbit/mibbit.php | 62 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)
 create mode 100755 mibbit/mibbit.php

diff --git a/mibbit/mibbit.php b/mibbit/mibbit.php
new file mode 100755
index 000000000..df3494a42
--- /dev/null
+++ b/mibbit/mibbit.php
@@ -0,0 +1,62 @@
+<?php
+/**
+ * Name: Mibbit Chat Plugin
+ * Description: add a mibbit/irc chatroom
+ * Version: 1.0
+ * Author: tony baldwin | http://tonybaldwin.me
+ */
+
+
+function mibbit_install() {
+	register_hook('app_menu', 'addon/mibbit/mibbit.php', 'mibbit_app_menu');
+}
+
+function mibbit_uninstall() {
+	unregister_hook('app_menu', 'addon/mibbit/mibbit.php', 'mibbit_app_menu');
+
+}
+
+function mibbit_app_menu($a,&$b) {
+	$b['app_menu'][] = '<div class="app-title"><a href="mibbit">' . t('Mibbit IRC Chatroom') . '</a></div>'; 
+}
+
+
+function mibbit_module() {
+	return;
+}
+
+
+
+
+
+function mibbit_content(&$a) {
+
+// this stuff is supposed to go in the page header
+
+$a->page['htmlhead'] .= 'session_start();  
+ $nick   = empty($_SESSION[\'user_name\']) ? \'Wdg\' : $_SESSION[\'user_name\'];
+ $server = \"irc.mibbit.net\"; // default: 
+ $room   = \"friendica\"; // w/o # or %23 !
+ 
+ $uri = \"https://widget.mibbit.com/\" .
+ \"?nick=$nick_%3F%3F\" . // each %3F(=?) will be replaced by a random digit 
+ \"&customprompt=Welcome%20to%20$server/$room\" .
+ \"&customloading=maybe%20you%20need%20to%20close%20other%20Mibbit%20windows%20first...\" .
+ \"&settings=c76462e5055bace06e32d325963b39f2\"; // etc.
+ if (!empty($room))    {$uri .= \'&channel=%23\' . $room;}  
+ if (!empty($server )) {$uri .= \'&server=\'     . $server;}'
+ 
+ // add the chatroom frame and some html
+ 
+    $s .= '<h2>chat</h2>';
+    $s .= '<center>';
+    $s .= '<iframe  src=\"<?PHP echo $uri; ?>\" frameborder=\"0\">
+ [Your user agent does not support frames or is currently configured
+ not to display frames. However, you may want to open the
+ <A href=\"<?PHP echo $uri; ?>\" target=\"_blank\"> chat in a new browser window ...</A>]';
+    $s .= '</iframe>';
+    $s .= '<br>(no spaces, interpunctuation or leading ciphers in your /nick name)';
+    $s .= '<h4>type /help to learn about special commands</h4>';
+    $s .= '</center><hr>'
+    
+}

From 275d79ff9ab313f5a3dfc297baa5cb614d0b2faa Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Fri, 2 Mar 2012 11:29:19 -0500
Subject: [PATCH 08/17] minor alterations to mibbit.php

---
 mibbit.tar.gz     | Bin 0 -> 10240 bytes
 mibbit/mibbit.php |  16 +++++++++-------
 2 files changed, 9 insertions(+), 7 deletions(-)
 create mode 100644 mibbit.tar.gz

diff --git a/mibbit.tar.gz b/mibbit.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..6b0a386b4d67bcc995c723b573320affa65ddad7
GIT binary patch
literal 10240
zcmeH}U2oeq6ozv<{fbl1jqD<o{1GQ;{1Fu0hW4UeumUTFI4~%QwunlkKvFe~F8_Tm
zCA-U#cDq?FhEYf?i9Cnr@Hy|HU5X?THa>dHYk=!~GC9I+cs?22y}K!Q9Sw))qtoH}
za5x+t4Ti(P+2n{OkD1hA?b=wTiH@w2yTjPm?*BCZHJ|^$SlQOUy+u`CJwnc|z<*Q!
z@nn3z{^J2;LW4)h<-wBw^ZL&&QS%^v_AH=h^p2JMg5EZgpjSDwbXC+FA>G^$+@xAm
zRw#KvEX#<|UOPgkl)_jmRXWRGxi*c}FdDe`m$l86z982@l&~V(3Q50HZf$iD$8K~#
z7?m9MaS#OSTBa`2KEz5$bZJra`t&*YPV<d0mg`ln)W=@Ps%lkoS%)VSA}=N52by+M
z?cnN*b$=S%J`7aLzl5sgzZUFk(GJP<y6oh*n>4%YCf9#%>E`-|<`m8{@rlxc88h#|
z=eZTO;GM;cQLg!V-f8#NS%egk?S*gK0>1g>RZ~P)m#~kia2B)0EXHDsa7r$r2cS!p
z)dfFrwzZZGCRjc&O_j7<+TL-Oxx|AwCYuXG#@6dKxre%{l;If)Pa8!jy3ILNY{Mz%
zEaN%|y6pMF4P1x0Eekgq-cW=c8*ZG2R_<`Nz5bLapsp0@M<M{>Wo380?&|%I@87@q
z`Q7z0tPS)aA>U<q)2B;Xh99!cGNcRomemvs!s!#&Sa8{ah@%!`B)MI7riA@ue9h{@
zUbx_nViSDXS!=;%CQ`OH+s2B%C#C7>XiQH6XI*R2EbByWpz^KAHryT}q^gXU9f|@3
zzI3~qH+x$>9sh(sH{+snmga=_-u$vpTTv90aMHXgSPH1g4jrhO%#c<lHo_w8vU8l`
zJX2+*@o(oJc!5y->1bdTKKA>Ko4p+3?>!2|G9fqflI;@buv0ZYCFj|}J1tO5yeL#r
z<KC(a4`}C1Z4I8*LK_=J(U-Liw-&3Kd3t_!dN$&d!DNyk{lOU@kFxP-^5Sfqj9;ur
zdy?FyfFjn^d$O;w!`|-$JbiAULLAHR7{`s2yqE(xiX64oncg~;+;!g97yfsh+tE23
z-38}%V0s(6(gD0X-JDbphZ?Ollto}o1~_qYm4!3K)isS=XZdL1tY<MELP+b*REj3y
z`u?bB*CeCU`LZ*+yn1~_Jk3=johe-|z_2k%lt!z-X0Yrm0=oW9)ta2#34J3iWr`b;
z%C_yMZR=&69MOYmtu?HQ9id&<VpD6L1&ukHG7|=3+U-3edabq`{cu7kK0yeyWe5O6
zRq>{I1Dd^TkDPC%jCO_2k?krenEZ&88;Y*^8A-mSL_;b_z7-8YEVKCK;^rQ+xW#iH
zTA~*{smN52kU7Dk09(1Qikdaw7T9xvGX#pGR8)|uae=WLO>uL0xD%p(FIIlKu)B&=
zob#e`yTuY3=_aZM)QYEq6`)s^sJ}shPw!_H?<+jZQRSxeI9eb4&hP`CfG6Mycmke)
uC*TQq0-k^;;0bsFo`5Id33vjYfG6Mycmke)C*TQq0-k^;;0Zi3fj<DUnsxL5

literal 0
HcmV?d00001

diff --git a/mibbit/mibbit.php b/mibbit/mibbit.php
index df3494a42..443c8881b 100755
--- a/mibbit/mibbit.php
+++ b/mibbit/mibbit.php
@@ -31,6 +31,8 @@ function mibbit_module() {
 
 function mibbit_content(&$a) {
 
+	$o = '';
+
 // this stuff is supposed to go in the page header
 
 $a->page['htmlhead'] .= 'session_start();  
@@ -48,15 +50,15 @@ $a->page['htmlhead'] .= 'session_start();
  
  // add the chatroom frame and some html
  
-    $s .= '<h2>chat</h2>';
-    $s .= '<center>';
-    $s .= '<iframe  src=\"<?PHP echo $uri; ?>\" frameborder=\"0\">
+    $o .= '<h2>chat</h2>';
+    $o .= '<center>';
+    $o .= '<iframe  src=\"<?PHP echo $uri; ?>\" frameborder=\"0\">
  [Your user agent does not support frames or is currently configured
  not to display frames. However, you may want to open the
  <A href=\"<?PHP echo $uri; ?>\" target=\"_blank\"> chat in a new browser window ...</A>]';
-    $s .= '</iframe>';
-    $s .= '<br>(no spaces, interpunctuation or leading ciphers in your /nick name)';
-    $s .= '<h4>type /help to learn about special commands</h4>';
-    $s .= '</center><hr>'
+    $o .= '</iframe>';
+    $o .= '<br>(no spaces, interpunctuation or leading ciphers in your /nick name)';
+    $o .= '<h4>type /help to learn about special commands</h4>';
+    $o .= '</center><hr>'
     
 }

From dcddf61cce914bed74a52b1d1b6221ca5bb79697 Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Fri, 2 Mar 2012 11:35:06 -0500
Subject: [PATCH 09/17] again, just minor adjustment to mibbit

---
 mibbit/mibbit.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/mibbit/mibbit.php b/mibbit/mibbit.php
index 443c8881b..41568c11f 100755
--- a/mibbit/mibbit.php
+++ b/mibbit/mibbit.php
@@ -3,7 +3,7 @@
  * Name: Mibbit Chat Plugin
  * Description: add a mibbit/irc chatroom
  * Version: 1.0
- * Author: tony baldwin | http://tonybaldwin.me
+ * Author: tony baldwin <http://tonybaldwin.me>
  */
 
 

From 020f3f6e2ba230666816c6ea36ae617864b33cfe Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Fri, 2 Mar 2012 13:55:29 -0500
Subject: [PATCH 10/17] another minor alteration to mibbit

---
 mibbit/mibbit.php | 1 +
 1 file changed, 1 insertion(+)

diff --git a/mibbit/mibbit.php b/mibbit/mibbit.php
index 41568c11f..90f322c39 100755
--- a/mibbit/mibbit.php
+++ b/mibbit/mibbit.php
@@ -31,6 +31,7 @@ function mibbit_module() {
 
 function mibbit_content(&$a) {
 
+	$baseurl = $a->get_baseurl() . '/addon/mibbit';
 	$o = '';
 
 // this stuff is supposed to go in the page header

From 47e812e199eb1d7d1a66fa25d2f84b65bfc805c4 Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Fri, 2 Mar 2012 18:12:34 -0500
Subject: [PATCH 11/17] removed mibbit, added simpler irc chat

---
 irc/irc.php | 41 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)
 create mode 100644 irc/irc.php

diff --git a/irc/irc.php b/irc/irc.php
new file mode 100644
index 000000000..fa90029b6
--- /dev/null
+++ b/irc/irc.php
@@ -0,0 +1,41 @@
+<?php
+/**
+* Name: IRC Chat Plugin
+* Description: add an Internet Relay Chat chatroom
+* Version: 1.0
+* Author: tony baldwin <http://tonybaldwin.me>
+*/
+
+
+function irc_install() {
+register_hook('app_menu', 'addon/irc/irc.php', 'irc_app_menu');
+}
+
+function irc_uninstall() {
+unregister_hook('app_menu', 'addon/irc/irc.php', 'irc_app_menu');
+
+}
+
+function irc_app_menu($a,&$b) {
+$b['app_menu'][] = '<div class="app-title"><a href="irc">' . t('irc Chatroom') . '</a></div>';
+}
+
+
+function irc_module() {
+return;
+}
+
+
+function irc_content(&$a) {
+
+$baseurl = $a->get_baseurl() . '/addon/irc';
+$o = '';
+
+
+ // add the chatroom frame and some html
+    $o .= '<h2>IRC chat</h2>';
+    $o .= '<iframe src=\"http://webchat.freenode.net?channels=friendica\" width=\"600\" height=\"800\"></iframe>'
+    
+}
+
+

From 2ab37d3dbf8bca2ee458355d4272a63b527525c8 Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Fri, 2 Mar 2012 18:13:12 -0500
Subject: [PATCH 12/17] tarred up irc

---
 irc.tar.gz | Bin 0 -> 10240 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 irc.tar.gz

diff --git a/irc.tar.gz b/irc.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..82fcb9b33c72a7aaa08f966bb4bb93c3e10ee170
GIT binary patch
literal 10240
zcmeH{O>5gg5QcTuuNZ`gY?J82$aZmMg_2%!DJ6$ql3>=-+FB~_iq)zil>GP3%696e
zB|Q{FptE44o!$9*=9PsmBIm>_#x<Kv9DF3RNqqdYM|L?$G8?DkNis`jPMpMPJau4l
z;=20qU2B*IaEy|VujTvO`D?y!_)OsZ@fS8#bFwP!fTwACJokeR>`{`A(--qkrn89y
z@yRMW3jCkXKfA=qyU}Rmj^Gp9@;O}JT)|bv41BJ;jgV;n$lF4T#t0?nz{(PsgllQI
zmfXM%ui4|yp+GOK)D~U7aNYLTlQ72Zht5<=&%u5~uwr%jAS7g!G0i-RtZ{D(w>)=8
zk?XqaP8K#Hpg5O8;zwH7gCTr(HQ$I9b1y5Uz77J`G|MfQU2qNomZqdt^Fh(pX#Jlr
z4d1&@FJgD{IC>}lHU4i24#@{TJ3sSRwg-Q8`?K)-+k03*kd@*a6g6wxg@-N|Mwps=
zdB&j9e7*3n4=)cO1T(Nb^~5dgV2HLLi&&mT7$Oh)7JucpRb^N6JwDTE`G-4&!ih>V
zIP;k;5o=^E?{tl|`RpR!aI@T7Fb-yno@rx7U)dJ$#dRTydX1Qh!$A<R)+jBMO$n{S
zm&$Bw7jU6pXnU{5xs{#0pGCOANXN%w=ilmLap&z-^T1d3dbrk{OI7j^#dwJpDS6#4
z)>?2`ih|vF@E}T4q2n};aaVD%sSIx4*)2lb1<!*%qn)06^zT5gM1Tko0U|&IhyW2F
u0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)01<fe1bzTi<sfGO

literal 0
HcmV?d00001


From 11267085bf600f518e169bfc591c65b869462c5e Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Fri, 2 Mar 2012 18:21:37 -0500
Subject: [PATCH 13/17] fixed irc chat...IT WORKS!

---
 irc/irc.php | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/irc/irc.php b/irc/irc.php
index fa90029b6..139c5e61c 100644
--- a/irc/irc.php
+++ b/irc/irc.php
@@ -33,8 +33,12 @@ $o = '';
 
 
  // add the chatroom frame and some html
-    $o .= '<h2>IRC chat</h2>';
-    $o .= '<iframe src=\"http://webchat.freenode.net?channels=friendica\" width=\"600\" height=\"800\"></iframe>'
+  $o .= <<< EOT
+<h2>IRC chat</h2>
+<iframe src="http://webchat.freenode.net?channels=friendica" width="600" height="800"></iframe>
+EOT;
+
+return $o;
     
 }
 

From 2b876524a5b472c4cad88fc3e51f8cb8c33a0d41 Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Fri, 2 Mar 2012 18:25:34 -0500
Subject: [PATCH 14/17] for aesthetic reasons, reduced size of IRC chat window

---
 irc/irc.php | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/irc/irc.php b/irc/irc.php
index 139c5e61c..397844e05 100644
--- a/irc/irc.php
+++ b/irc/irc.php
@@ -35,7 +35,7 @@ $o = '';
  // add the chatroom frame and some html
   $o .= <<< EOT
 <h2>IRC chat</h2>
-<iframe src="http://webchat.freenode.net?channels=friendica" width="600" height="800"></iframe>
+<iframe src="http://webchat.freenode.net?channels=friendica" width="600" height="600"></iframe>
 EOT;
 
 return $o;

From e57eb5d1986efce574a2c9d88e24fc05262cc8c5 Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Fri, 2 Mar 2012 18:54:24 -0500
Subject: [PATCH 15/17] returned ljpost to same as in
 friendica/friendica-addons rather than make it offer other sites, I am
 writing separate plugins for separate sites. I already have a dreamwidth one
 written, as can be seen in my repo. Can/maybe will write up insanejournal,
 deadjournal, blurty, etc. eventually, too

---
 ljpost/ljpost.php | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php
index 3084b8bd3..8431b134d 100644
--- a/ljpost/ljpost.php
+++ b/ljpost/ljpost.php
@@ -61,7 +61,6 @@ function ljpost_settings(&$a,&$s) {
 
 	$lj_username = get_pconfig(local_user(), 'ljpost', 'lj_username');
 	$lj_password = get_pconfig(local_user(), 'ljpost', 'lj_password');
-	$lj_url = get_pconfig(local_user(), 'ljpost', 'lj_url');
 
 
     /* Add some HTML to the existing form */
@@ -83,11 +82,6 @@ function ljpost_settings(&$a,&$s) {
     $s .= '<input id="ljpost-password" type="password" name="lj_password" value="' . $lj_password . '" />';
     $s .= '</div><div class="clear"></div>';
 
-    $s .= '<div id="ljpost-url-wrapper">';
-    $s .= '<label id="ljpost-url-label" for="ljpost-url">' . t('LiveJournal URL') . '</label>';
-    $s .= '<input id="ljpost-url" type="url" name="lj_url" value="' . $lj_url . '" />';
-    $s .= '</div><div class="clear"></div>';
-
     $s .= '<div id="ljpost-bydefault-wrapper">';
     $s .= '<label id="ljpost-bydefault-label" for="ljpost-bydefault">' . t('Post to LiveJournal by default') . '</label>';
     $s .= '<input id="ljpost-bydefault" type="checkbox" name="lj_bydefault" value="1" ' . $def_checked . '/>';
@@ -108,7 +102,6 @@ function ljpost_settings_post(&$a,&$b) {
 		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_password',trim($_POST['lj_password']));
-		set_pconfig(local_user(),'ljpost','lj_url',trim($_POST['lj_url']));
 
 	}
 
@@ -170,7 +163,7 @@ function ljpost_send(&$a,&$b) {
 
 	$lj_username = get_pconfig($b['uid'],'ljpost','lj_username');
 	$lj_password = get_pconfig($b['uid'],'ljpost','lj_password');
-	$lj_blog = '$lj_url/interface/xmlrpc';
+	$lj_blog = 'http://www.livejournal.com/interface/xmlrpc';
 
 	if($lj_username && $lj_password && $lj_blog) {
 

From 99d9fddb6af9e872266666038447771e42ce13b4 Mon Sep 17 00:00:00 2001
From: Tony Baldwin <tony@baldwinsoftware.com>
Date: Fri, 2 Mar 2012 19:00:42 -0500
Subject: [PATCH 16/17] realized I had tarred up the irc, then made changes
 without updating the tarball, so, just now I updated the tarball.

---
 irc.tar.gz | Bin 10240 -> 10240 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/irc.tar.gz b/irc.tar.gz
index 82fcb9b33c72a7aaa08f966bb4bb93c3e10ee170..82c3baab84852e742798ec4e00baec3eca413486 100644
GIT binary patch
delta 171
zcmZn&Xb70l&u46GV#Z)#XkcPs#-Lz2*^n`1Gb3XwqqrG^p`p2viIFK(fuWhXIfH@$
zL;-U(vyMu>f}X8{jg5_htA7ZWO@@)3XOOc(az<i_jXsdWWs{j!l$e{UP+XL3J9#6U
zzNwNzd1gvUhOLsBfq{}jMrvkyMhS#tXQK~MY{vyO%bJU;D7B=tC{IBp-+D6_`xgZO
DCAuv}

delta 172
zcmZn&Xb70l&u3_EXwG0@XkcPs#-Lz2*^n`1Gb3Xwqqqr!p`p2viIFK(fuWhXDT9Im
zL;-U(v#ElDO1^@gt%ABuhLN3Tkh4N^Mq-JLK9Hks&7}YYFzL*+qQu-(h2o-Q+nC8K
x*z~nxloZM{Q%W*yW0cGc41m0h)XemZ5+K(C#I>{0hiI`=-^|1QMS+Qd0RZl(E2RJc


From 6995cf87de0a8ba32b9f10f738b6b9b1483228e0 Mon Sep 17 00:00:00 2001
From: friendica <info@friendica.com>
Date: Fri, 2 Mar 2012 16:46:56 -0800
Subject: [PATCH 17/17] please use make to build packages

---
 dwpost.tar.gz | Bin 2522 -> 0 bytes
 irc.tar.gz    | Bin 10240 -> 0 bytes
 2 files changed, 0 insertions(+), 0 deletions(-)
 delete mode 100644 dwpost.tar.gz
 delete mode 100644 irc.tar.gz

diff --git a/dwpost.tar.gz b/dwpost.tar.gz
deleted file mode 100644
index d22d966e8eff1030c8c798fe03e798702df31dcf..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 2522
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

diff --git a/irc.tar.gz b/irc.tar.gz
deleted file mode 100644
index 82c3baab84852e742798ec4e00baec3eca413486..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10240
zcmeH{TWi}e6vzFnPjN7zPD1NTnhT`1%jovdmu-}>mr{aaE3ud(1zBDwW8Zy8xpY}K
zx`z=c><EmdBb|$W=Wk0>MBa%<jAJqydH6~uqxkskw%qWNWHJ~IMwgevu@@)tFdlm_
zI&odw@NHwc0r0F=k1yr>+x|<wuXs;l|M3ae)%s*rx(1Jj!{fdmbl|p<;b8o%|H*hV
z@gP1~MMr`E^ZuvT*m)N9`>YS|`ASUT_U;C5DsJIp-7cj<`&-czMy{>YY6`q8fh)LG
zRv0BL+=-e$?i>pAGFq?D<+Cu&_IMJ;xO~&vN}DOTj|k?xE;mv^T3NfEMv*h_ZQ)Af
ztRFGP7Og5=LO^lOq{5H1uDd<>#*A3X26N9Ut-o{wzFyB(Lbbs;1X!9@PR$2JJEQY|
zI@G&j-=D>9)p7Jz{cHT+5*(6uJN*2tGk16B%<q2|{&4>Q83bu5zd}*-rpbJCxv<jK
z!p~C<l@W`~$9wpB03q0}yVI7qgB|qH7Nil+(+ET4!S;&3@>}V$t;HUnZH@ZFnL=Yn
zmF=E&xGNEB<c(-ejkR_7MZOevwzps$%osh<#*7{9u7DH9Ad0pcv6X;>AYfroS}2<m
z8jX|6u4)E=USS4ln!>vepIBNAa;H7#lt#E<soeQBrpWxgST<tr4ulIMgwmx5QG?fL
zQA*TJwlGqtQWo5YjVx`I`QteDp%QXg+1&y$?ZV~^vtq?YI3ifg6_y0x`p1s`4>TnL
zM1Tko0U|&IhyW2F0z`la5CI}U1c(3;AOb{y2oM1xKm>>Y5g-CYfCvx)B0vO)z$+*4
E1Lc1r0RR91