From c16e86add81d9f2867a0da024954b5cbc14a9f4b Mon Sep 17 00:00:00 2001
From: Friendika <info@friendika.com>
Date: Fri, 11 Feb 2011 02:35:19 -0800
Subject: [PATCH] toggles "post to facebook, post to twitter", etc.

---
 addon/facebook/facebook.php       | 45 ++++++++++++++++++++++++++-----
 addon/twitter/twitter.php         | 36 ++++++++++++++++++++++++-
 boot.php                          |  2 ++
 mod/network.php                   |  5 +++-
 mod/profile.php                   |  6 ++++-
 view/de/jot.tpl                   |  6 ++++-
 view/en/jot.tpl                   |  6 ++++-
 view/fr/jot.tpl                   |  7 +++--
 view/it/jot.tpl                   |  7 +++--
 view/theme/duepuntozero/style.css | 11 ++++++++
 view/theme/loozah/style.css       | 11 ++++++++
 11 files changed, 127 insertions(+), 15 deletions(-)

diff --git a/addon/facebook/facebook.php b/addon/facebook/facebook.php
index a41344a3d0..2a5715b2e0 100644
--- a/addon/facebook/facebook.php
+++ b/addon/facebook/facebook.php
@@ -3,6 +3,9 @@
 /**
  * This module still needs a lot of work, but is functional today.
  * Please review this section if you upgrade because things will change.
+ * If you have issues upgrading, remove facebook from the addon list, 
+ * view a page on your site, then add it back to the list. This will reset
+ * all of the plugin 'hooks'. 
  *
  * 1. register an API key from developer.facebook.com
  *   a. We'd be very happy if you include "Friendika" in the application name
@@ -77,7 +80,7 @@ function facebook_init(&$a) {
  			if(strpos($token,'&') !== false)
 				$token = substr($token,0,strpos($token,'&'));
 			set_pconfig($uid,'facebook','access_token',$token);
-			set_pconfig($uid,'facebook','post','true');
+			set_pconfig($uid,'facebook','post','1');
 		}
 
 		// todo: is this a browser session or a server session? where do we go? 
@@ -118,12 +121,41 @@ function facebook_content(&$a) {
 }
 
 function facebook_install() {
-	register_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook');
+	register_hook('post_local_end',  'addon/facebook/facebook.php', 'facebook_post_hook');
+	register_hook('jot_networks',    'addon/facebook/facebook.php', 'facebook_jot_nets');
+	register_hook('post_local_start','addon/facebook/facebook.php', 'facebook_post_local');
+
 }
 
 
 function facebook_uninstall() {
-	unregister_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook');
+	unregister_hook('post_local_end',  'addon/facebook/facebook.php', 'facebook_post_hook');
+	unregister_hook('jot_networks',    'addon/facebook/facebook.php', 'facebook_jot_nets');
+	unregister_hook('post_local_start','addon/facebook/facebook.php', 'facebook_post_local');
+}
+
+
+function facebook_jot_nets(&$a,&$b) {
+	if(! local_user())
+		return;
+
+	$fb_post = get_pconfig(local_user(),'facebook','post');
+	if(intval($fb_post) == 1) {
+		$fb_defpost = get_pconfig(local_user(),'facebook','post_by_default');
+		$selected = ((intval($fb_defpost == 1)) ? ' selected="selected" ' : '');
+		$b .= '<div class="profile-jot-net"><input type="checkbox" name="facebook_enable" $selected value="1" /> ' 
+			. t('Post to Facebook') . '</div>';	
+	}
+}
+
+function facebook_post_local(&$a,&$b) {
+	if(! local_user())
+		return;
+
+	if((x($b,'facebook_enable')) && (intval($b['facebook_enable'])))
+		set_pconfig(local_user(),'facebook','enable','1');
+	else
+		del_pconfig(local_user(),'facebook','enable');
 }
 
 
@@ -143,10 +175,11 @@ function facebook_post_hook(&$a,&$b) {
 
 		if($appid && $secret) {
 
-			$fb_post  = get_pconfig(local_user(),'facebook','post');
-			$fb_token = get_pconfig(local_user(),'facebook','access_token');
+			$fb_post   = intval(get_pconfig(local_user(),'facebook','post'));
+			$fb_enable = intval(get_pconfig(local_user(),'facebook','enable'));
+			$fb_token  = get_pconfig(local_user(),'facebook','access_token');
 
-			if($fb_post && $fb_token) {
+			if($fb_post && $fb_token && $fb_enable) {
 				require_once('library/facebook.php');
 				require_once('include/bbcode.php');	
 
diff --git a/addon/twitter/twitter.php b/addon/twitter/twitter.php
index a0c6db931f..6a0365e09d 100644
--- a/addon/twitter/twitter.php
+++ b/addon/twitter/twitter.php
@@ -40,6 +40,8 @@ function twitter_install() {
 	register_hook('plugin_settings', 'addon/twitter/twitter.php', 'twitter_settings'); 
 	register_hook('plugin_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post');
 	register_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook');
+	register_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets');
+	register_hook('post_local_start', 'addon/twitter/twitter.php', 'twitter_post_start');
 	logger("installed twitter");
 }
 
@@ -48,8 +50,39 @@ function twitter_uninstall() {
 	unregister_hook('plugin_settings', 'addon/twitter/twitter.php', 'twitter_settings'); 
 	unregister_hook('plugin_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post');
 	unregister_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook');
+	unregister_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets');
+	unregister_hook('post_local_start', 'addon/twitter/twitter.php', 'twitter_post_start');
+
 }
 
+function twitter_jot_nets(&$a,&$b) {
+	if(! local_user())
+		return;
+
+	$tw_post = get_pconfig(local_user(),'twitter','post');
+	if(intval($tw_post) == 1) {
+		$tw_defpost = get_pconfig(local_user(),'twitter','post_by_default');
+		$selected = ((intval($tw_defpost == 1)) ? ' selected="selected" ' : '');
+		$b .= '<div class="profile-jot-net"><input type="checkbox" name="twitter_enable" $selected value="1" /> ' 
+			. t('Post to Twitter') . '</div>';	
+	}
+
+
+}
+
+function twitter_post_start(&$a,&$b) {
+	if(! local_user())
+		return;
+
+	if((x($b,'twitter_enable')) && (intval($b['twitter_enable'])))
+		set_pconfig(local_user(),'twitter','enable','1');
+	else
+		del_pconfig(local_user(),'twitter','enable');
+
+
+}
+
+
 function twitter_settings_post ($a,$post) {
 	if(! local_user())
 		return;
@@ -181,8 +214,9 @@ function twitter_post_hook(&$a,&$b) {
 		if($ckey && $csecret && $otoken && $osecret) {
 
 			$twitter_post = get_pconfig(local_user(),'twitter','post');
+			$twitter_enable = intval(get_pconfig(local_user(),'twitter','enable'));
 
-			if($twitter_post) {
+			if($twitter_post && $twitter_enable) {
 				require_once('addon/twitter/twitteroauth.php');
 				require_once('include/bbcode.php');	
 				$tweet = new TwitterOAuth($ckey,$csecret,$otoken,$osecret);
diff --git a/boot.php b/boot.php
index f1edf798ea..9c87127509 100644
--- a/boot.php
+++ b/boot.php
@@ -516,6 +516,7 @@ function check_config(&$a) {
 			}
 		}
 	}
+	load_hooks();
 
 	return;
 }}
@@ -2189,6 +2190,7 @@ function unregister_hook($hook,$file,$function) {
 if(! function_exists('load_hooks')) {
 function load_hooks() {
 	$a = get_app();
+	$a->hooks = array();
 	$r = q("SELECT * FROM `hook` WHERE 1");
 	if(count($r)) {
 		foreach($r as $rr) {
diff --git a/mod/network.php b/mod/network.php
index b0196f92a4..f11db45a8b 100644
--- a/mod/network.php
+++ b/mod/network.php
@@ -79,8 +79,10 @@ function network_content(&$a, $update = 0) {
 
 		$celeb = ((($a->user['page-flags'] == PAGE_SOAPBOX) || ($a->user['page-flags'] == PAGE_COMMUNITY)) ? true : false);
 
-		$jotplugins = "";
+		$jotplugins = '';
+		$jotnets = '';
 		call_hooks('jot_tool', $jotplugins);
+		call_hooks('jot_networks', $jotnets);
 
 		$tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins));	
 
@@ -90,6 +92,7 @@ function network_content(&$a, $update = 0) {
 			'$defloc' => $a->user['default-location'],
 			'$visitor' => 'block',
 			'$emailcc' => t('CC: email addresses'),
+			'$jotnets' => $jotnets,
 			'$emtitle' => t('Example: bob@example.com, mary@example.com'),
 			'$lockstate' => $lockstate,
 			'$acl' => populate_acl((($group) ? $group_acl : $a->user), $celeb),
diff --git a/mod/profile.php b/mod/profile.php
index 3b4616a34f..8ec29d3827 100644
--- a/mod/profile.php
+++ b/mod/profile.php
@@ -135,9 +135,12 @@ function profile_content(&$a, $update = 0) {
 			else
 				$lockstate = 'unlock';
        
-			$jotplugins = "";
+			$jotplugins = '';
+			$jotnets = '';
 			call_hooks('jot_tool', $jotplugins); 
 
+			call_hooks('jot_networks', $jotnets);
+
 			$tpl = replace_macros($tpl,array('$jotplugins' => $jotplugins));	
 
 			$o .= replace_macros($tpl,array(
@@ -147,6 +150,7 @@ function profile_content(&$a, $update = 0) {
 				'$visitor' => (($is_owner || $commvisitor) ? 'block' : 'none'),
 				'$lockstate' => $lockstate,
 				'$emailcc' => t('CC: email addresses'),
+				'$jotnets' => $jotnets,
 				'$emtitle' => t('Example: bob@example.com, mary@example.com'),
 				'$bang' => '',
 				'$acl' => (($is_owner) ? populate_acl($a->user, $celeb) : ''),
diff --git a/view/de/jot.tpl b/view/de/jot.tpl
index 545bbdadd2..db73b17a64 100644
--- a/view/de/jot.tpl
+++ b/view/de/jot.tpl
@@ -42,12 +42,16 @@
 	<div id="profile-rotator-wrapper" style="display: $visitor;" >
 		<img id="profile-rotator" src="images/rotator.gif" alt="Bitte warten" title="Bitte warten" style="display: none;" />
 	</div> 
-	<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif"  alt="Berechtigungseinstellungen" title="Berechtigungseinstellungen" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper');" />$bang</div>
+	<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif"  alt="Berechtigungseinstellungen" title="Berechtigungseinstellungen" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper'); openClose('profile-jot-networks');" />$bang</div>
 	<div id="profile-jot-perms-end"></div>
 	<div id="profile-jot-email-wrapper" style="display: none;" >
 	<div id="profile-jot-email-label">$emailcc</div><input type="text" name="emailcc" id="profile-jot-email" title="$emtitle">
 	<div id="profile-jot-email-end"></div>
 	</div>
+	<div id="profile-jot-networks" style="display: none;" >
+	$jotnets
+	</div>
+	<div id="profile-jot-networks-end"></div>
 	<div id="profile-jot-acl-wrapper" style="display: none;" >$acl</div>
 </div>
 
diff --git a/view/en/jot.tpl b/view/en/jot.tpl
index 5f99357780..7c6a857e86 100644
--- a/view/en/jot.tpl
+++ b/view/en/jot.tpl
@@ -40,12 +40,16 @@
 	<div id="profile-rotator-wrapper" style="display: $visitor;" >
 		<img id="profile-rotator" src="images/rotator.gif" alt="Please wait" title="Please wait" style="display: none;" />
 	</div> 
-	<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif"  alt="Permission Settings" title="Permission Settings" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper');" />$bang</div>
+	<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif"  alt="Permission Settings" title="Permission Settings" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper'); openClose('profile-jot-networks');" />$bang</div>
 	<div id="profile-jot-perms-end"></div>
 	<div id="profile-jot-email-wrapper" style="display: none;" >
 	<div id="profile-jot-email-label">$emailcc</div><input type="text" name="emailcc" id="profile-jot-email" title="$emtitle">
 	<div id="profile-jot-email-end"></div>
 	</div>
+	<div id="profile-jot-networks" style="display: none;" >
+	$jotnets
+	</div>
+	<div id="profile-jot-networks-end"></div>
 	<div id="profile-jot-acl-wrapper" style="display: none;" >$acl</div>
 </div>
 
diff --git a/view/fr/jot.tpl b/view/fr/jot.tpl
index 720cb0d1bc..d64632da0d 100644
--- a/view/fr/jot.tpl
+++ b/view/fr/jot.tpl
@@ -42,13 +42,16 @@
 	<div id="profile-rotator-wrapper" style="display: $visitor;" >
 		<img id="profile-rotator" src="images/rotator.gif" alt="Please wait" title="Please wait" style="display: none;" />
 	</div> 
-	<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif"  alt="Permission Settings" title="Permission Settings" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper');" />$bang</div>
+	<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif"  alt="Permission Settings" title="Permission Settings" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper'); openClose('profile-jot-networks');" />$bang</div>
 	<div id="profile-jot-perms-end"></div>
 	<div id="profile-jot-email-wrapper" style="display: none;" >
 	<div id="profile-jot-email-label">$emailcc</div><input type="text" name="emailcc" id="profile-jot-email" title="$emtitle">
 	<div id="profile-jot-email-end"></div>
 	</div>
-
+	<div id="profile-jot-networks" style="display: none;" >
+	$jotnets
+	</div>
+	<div id="profile-jot-networks-end"></div>
 	<div id="profile-jot-acl-wrapper" style="display: none;" >$acl</div>
 </div>
 
diff --git a/view/it/jot.tpl b/view/it/jot.tpl
index eae3ecba8b..c4b63eb01a 100644
--- a/view/it/jot.tpl
+++ b/view/it/jot.tpl
@@ -41,13 +41,16 @@
 	<div id="profile-rotator-wrapper" style="display: $visitor;" >
 		<img id="profile-rotator" src="images/rotator.gif" alt="Attendi" title="Attendi" style="display: none;" />
 	</div> 
-	<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif"  alt="Impostazione permessi" title="Impostazione permessi" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper');" />$bang</div>
+	<div id="profile-jot-perms" class="profile-jot-perms" style="display: $visitor;" ><img id="jot-perms-icon" src="images/$lockstate_icon.gif"  alt="Impostazione permessi" title="Impostazione permessi" onClick="openClose('profile-jot-acl-wrapper'); openClose('profile-jot-email-wrapper'); openClose('profile-jot-networks');" />$bang</div>
 	<div id="profile-jot-perms-end"></div>
 	<div id="profile-jot-email-wrapper" style="display: none;" >
 	<div id="profile-jot-email-label">$emailcc</div><input type="text" name="emailcc" id="profile-jot-email" title="$emtitle">
 	<div id="profile-jot-email-end"></div>
 	</div>
-
+	<div id="profile-jot-networks" style="display: none;" >
+	$jotnets
+	</div>
+	<div id="profile-jot-networks-end"></div>
 	<div id="profile-jot-acl-wrapper" style="display: none;" >$acl</div>
 </div>
 
diff --git a/view/theme/duepuntozero/style.css b/view/theme/duepuntozero/style.css
index 0c56c42331..45e5efb6c4 100644
--- a/view/theme/duepuntozero/style.css
+++ b/view/theme/duepuntozero/style.css
@@ -960,6 +960,17 @@ input#dfrn-url {
 #profile-jot-plugin-end{
   clear: both;
 }
+.profile-jot-net {
+	float: left;
+	margin-right: 10px;
+	margin-top: 5px;
+	margin-bottom: 5px;
+}
+
+#profile-jot-networks-end {
+	clear: both;
+}
+
 #profile-jot-end {
 	/*clear: both;*/
 	margin-bottom: 30px;
diff --git a/view/theme/loozah/style.css b/view/theme/loozah/style.css
index d7d735d6df..2a037bf9f3 100644
--- a/view/theme/loozah/style.css
+++ b/view/theme/loozah/style.css
@@ -1085,6 +1085,17 @@ input#dfrn-url {
 #profile-jot-plugin-end {
   clear:both;
 }
+.profile-jot-net {
+	float: left;
+	margin-right: 10px;
+	margin-top: 5px;
+	margin-bottom: 5px;
+}
+
+#profile-jot-networks-end {
+	clear: both;
+}
+
 #profile-jot-end {
 	clear: both;
 	margin-bottom: 30px;