diff options
author | Zach Copley <zach@controlyourself.ca> | 2009-01-04 23:02:12 -0500 |
---|---|---|
committer | Zach Copley <zach@controlyourself.ca> | 2009-01-04 23:02:12 -0500 |
commit | e0fbf02bbf516db10070bddaabbbaea31d336cda (patch) | |
tree | c44b562a6a8bb73766884f2539928b2fb6209729 | |
parent | fd6f9b9d7622f280f92810770deb217eb7301c14 (diff) |
trac750 configurable sync flags for Facebook app (noticesync, replysync)
darcs-hash:20090105040212-7b5ce-37f6195649dc673241e4566a93183b13e428d98f.gz
-rw-r--r-- | _darcs/inventory | 4 | ||||
-rw-r--r-- | _darcs/patches/20090105040212-7b5ce-37f6195649dc673241e4566a93183b13e428d98f.gz | bin | 0 -> 1897 bytes | |||
-rw-r--r-- | _darcs/pristine/actions/facebookhome.php | 3 | ||||
-rw-r--r-- | _darcs/pristine/actions/facebooksettings.php | 66 | ||||
-rw-r--r-- | _darcs/pristine/actions/twittersettings.php | 26 | ||||
-rw-r--r-- | _darcs/pristine/classes/Foreign_link.php | 23 | ||||
-rw-r--r-- | _darcs/pristine/lib/facebookaction.php | 83 | ||||
-rw-r--r-- | _darcs/pristine/scripts/update_facebook.php | 17 | ||||
-rw-r--r-- | _darcs/tentative_pristine | 428 | ||||
-rw-r--r-- | actions/facebookhome.php | 3 | ||||
-rw-r--r-- | actions/facebooksettings.php | 66 | ||||
-rw-r--r-- | actions/twittersettings.php | 26 | ||||
-rw-r--r-- | classes/Foreign_link.php | 23 | ||||
-rw-r--r-- | lib/facebookaction.php | 83 | ||||
-rwxr-xr-x | scripts/update_facebook.php | 17 |
15 files changed, 502 insertions, 366 deletions
diff --git a/_darcs/inventory b/_darcs/inventory index 8c94c559c..909443c81 100644 --- a/_darcs/inventory +++ b/_darcs/inventory @@ -114,4 +114,6 @@ Evan Prodromou <evan@prodromou.name>**20081230211957] [wrapper element for config.xml Evan Prodromou <evan@prodromou.name>**20081230212202] [trac750 Automatically update linked Facebook users' statuses -Zach Copley <zach@controlyourself.ca>**20090105010407]
\ No newline at end of file +Zach Copley <zach@controlyourself.ca>**20090105010407] +[trac750 configurable sync flags for Facebook app (noticesync, replysync) +Zach Copley <zach@controlyourself.ca>**20090105040212]
\ No newline at end of file diff --git a/_darcs/patches/20090105040212-7b5ce-37f6195649dc673241e4566a93183b13e428d98f.gz b/_darcs/patches/20090105040212-7b5ce-37f6195649dc673241e4566a93183b13e428d98f.gz Binary files differnew file mode 100644 index 000000000..d497340bd --- /dev/null +++ b/_darcs/patches/20090105040212-7b5ce-37f6195649dc673241e4566a93183b13e428d98f.gz diff --git a/_darcs/pristine/actions/facebookhome.php b/_darcs/pristine/actions/facebookhome.php index a23d1aa07..069ea5e75 100644 --- a/_darcs/pristine/actions/facebookhome.php +++ b/_darcs/pristine/actions/facebookhome.php @@ -70,8 +70,7 @@ class FacebookhomeAction extends FacebookAction $flink->foreign_id = $fbuid; $flink->service = 2; # Facebook $flink->created = common_sql_now(); - - # $this->set_flags($flink, $noticesync, $replysync, $friendsync); + $flink->set_flags(true, false, false); $flink_id = $flink->insert(); diff --git a/_darcs/pristine/actions/facebooksettings.php b/_darcs/pristine/actions/facebooksettings.php index 17812850c..469bcfc45 100644 --- a/_darcs/pristine/actions/facebooksettings.php +++ b/_darcs/pristine/actions/facebooksettings.php @@ -28,30 +28,82 @@ class FacebooksettingsAction extends FacebookAction { parent::handle($args); - $this->display(); + if ($this->arg('save')) { + $this->save_settings(); + } else { + $this->show_form(); + } } - function display() - { + + function save_settings() { + + $noticesync = $this->arg('noticesync'); + $replysync = $this->arg('replysync'); $facebook = get_facebook(); + $fbuid = $facebook->require_login(); + + $flink = Foreign_link::getByForeignID($fbuid, 2); // 2 == Facebook + + $original = clone($flink); + $flink->set_flags($noticesync, $replysync, false); + $result = $flink->update($original); + + if ($result) { + echo '<fb:success message="Sync preferences saved." />'; + } + + $this->show_form(); + + } + + function show_form() { + $facebook = get_facebook(); $fbuid = $facebook->require_login(); + $flink = Foreign_link::getByForeignID($fbuid, 2); // 2 == Facebook + + $this->show_header('Settings'); + $fbml = '<fb:if-section-not-added section="profile">' - .'<h2>Add an Identi.ca box to your profile!</h2>' + .'<h2>Add an Identi.ca box to my profile</h2>' .'<fb:add-section-button section="profile"/>' .'</fb:if-section-not-added>'; - $fbml .= '<fb:prompt-permission perms="status_update"><h2>Allow Identi.ca to update my Facebook status</h2></fb:prompt-permission>'; - $this->show_header('Settings'); + $fbml .= '<form method="post" id="facebook_settings">' + .'<h2>Sync preferences</h2>' + .'<p>'; + + if ($flink->noticesync & FOREIGN_NOTICE_SEND) { + $fbml .= '<input name="noticesync" type="checkbox" class="checkbox" id="noticesync" checked="checked"/>'; + } else { + $fbml .= '<input name="noticesync" type="checkbox" class="checkbox" id="noticesync">'; + } + + $fbml .= '<label class="checkbox_label" for="noticesync">Automatically update my Facebook status with my notices.</label>' + .'</p>' + .'<p>'; + + if ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) { + $fbml .= '<input name="replysync" type="checkbox" class="checkbox" id="replysync" checked="checked"/>'; + } else { + $fbml .= '<input name="replysync" type="checkbox" class="checkbox" id="replysync"/>'; + } + + $fbml .= '<label class="checkbox_label" for="replysync">Send "@" replies to Facebook.</label>' + .'</p>' + .'<p>' + .'<input type="submit" id="save" name="save" class="submit" value="Save"/>' + .'</p>' + .'</form>'; echo $fbml; $this->show_footer(); - } } diff --git a/_darcs/pristine/actions/twittersettings.php b/_darcs/pristine/actions/twittersettings.php index 26dede0ac..d66427339 100644 --- a/_darcs/pristine/actions/twittersettings.php +++ b/_darcs/pristine/actions/twittersettings.php @@ -251,7 +251,7 @@ class TwittersettingsAction extends SettingsAction $flink->credentials = $password; $flink->created = common_sql_now(); - $this->set_flags($flink, $noticesync, $replysync, $friendsync); + $flink->set_flags($noticesync, $replysync, $friendsync); $flink_id = $flink->insert(); @@ -323,7 +323,7 @@ class TwittersettingsAction extends SettingsAction $screen_name = $fuser->nickname; $original = clone($flink); - $this->set_flags($flink, $noticesync, $replysync, $friendsync); + $flink->set_flags($noticesync, $replysync, $friendsync); $result = $flink->update($original); if ($result === false) { @@ -363,27 +363,5 @@ class TwittersettingsAction extends SettingsAction return false; } - function set_flags(&$flink, $noticesync, $replysync, $friendsync) - { - if ($noticesync) { - $flink->noticesync |= FOREIGN_NOTICE_SEND; - } else { - $flink->noticesync &= ~FOREIGN_NOTICE_SEND; - } - - if ($replysync) { - $flink->noticesync |= FOREIGN_NOTICE_SEND_REPLY; - } else { - $flink->noticesync &= ~FOREIGN_NOTICE_SEND_REPLY; - } - - if ($friendsync) { - $flink->friendsync |= FOREIGN_FRIEND_RECV; - } else { - $flink->friendsync &= ~FOREIGN_FRIEND_RECV; - } - - $flink->profilesync = 0; - } }
\ No newline at end of file diff --git a/_darcs/pristine/classes/Foreign_link.php b/_darcs/pristine/classes/Foreign_link.php index c89124d19..afc0e2180 100644 --- a/_darcs/pristine/classes/Foreign_link.php +++ b/_darcs/pristine/classes/Foreign_link.php @@ -57,6 +57,29 @@ class Foreign_link extends Memcached_DataObject return null; } + function set_flags($noticesync, $replysync, $friendsync) + { + if ($noticesync) { + $this->noticesync |= FOREIGN_NOTICE_SEND; + } else { + $this->noticesync &= ~FOREIGN_NOTICE_SEND; + } + + if ($replysync) { + $this->noticesync |= FOREIGN_NOTICE_SEND_REPLY; + } else { + $this->noticesync &= ~FOREIGN_NOTICE_SEND_REPLY; + } + + if ($friendsync) { + $this->friendsync |= FOREIGN_FRIEND_RECV; + } else { + $this->friendsync &= ~FOREIGN_FRIEND_RECV; + } + + $this->profilesync = 0; + } + # Convenience methods function getForeignUser() { diff --git a/_darcs/pristine/lib/facebookaction.php b/_darcs/pristine/lib/facebookaction.php index ee9f783c4..7fa097587 100644 --- a/_darcs/pristine/lib/facebookaction.php +++ b/_darcs/pristine/lib/facebookaction.php @@ -37,47 +37,48 @@ class FacebookAction extends Action # Need to include inline CSS for styling the Profile box - $style = '<style> - #notices { - clear: both; - margin: 0 auto; - padding: 0; - list-style-type: none; - width: 600px; - border-top: 1px solid #dec5b5; - } - #notices a:hover { - text-decoration: underline; - } - .notice_single { - clear: both; - display: block; - margin: 0; - padding: 5px 5px 5px 0; - min-height: 48px; - font-family: Georgia, "Times New Roman", Times, serif; - font-size: 13px; - line-height: 16px; - border-bottom: 1px solid #dec5b5; - background-color:#FCFFF5; - opacity:1; - } - .notice_single:hover { - background-color: #f7ebcc; - } - .notice_single p { - display: inline; - margin: 0; - padding: 0; - } - </style>'; - - $html = $this->render_notice($notice); - - $fbml = "<fb:wide>$content $html</fb:wide>"; - $fbml .= "<fb:narrow>$content $html</fb:narrow>"; - - $fbml_main = "<fb:narrow>$content $html</fb:narrow>"; + $style = '<style> + #notices { + clear: both; + margin: 0 auto; + padding: 0; + list-style-type: none; + width: 600px; + border-top: 1px solid #dec5b5; + } + #notices a:hover { + text-decoration: underline; + } + .notice_single { + clear: both; + display: block; + margin: 0; + padding: 5px 5px 5px 0; + min-height: 48px; + font-family: Georgia, "Times New Roman", Times, serif; + font-size: 13px; + line-height: 16px; + border-bottom: 1px solid #dec5b5; + background-color:#FCFFF5; + opacity:1; + } + .notice_single:hover { + background-color: #f7ebcc; + } + .notice_single p { + display: inline; + margin: 0; + padding: 0; + } + </style>'; + + $html = Facebookaction::Aender_notice($notice); + + + $fbml = "<fb:wide>$style $html</fb:wide>"; + $fbml .= "<fb:narrow>$style $html</fb:narrow>"; + + $fbml_main = "<fb:narrow>$style $html</fb:narrow>"; $facebook->api_client->profile_setFBML(null, $fbuid, $fbml, null, null, $fbml_main); } diff --git a/_darcs/pristine/scripts/update_facebook.php b/_darcs/pristine/scripts/update_facebook.php index d2440b163..02e47cefe 100644 --- a/_darcs/pristine/scripts/update_facebook.php +++ b/_darcs/pristine/scripts/update_facebook.php @@ -52,9 +52,16 @@ while($notice->fetch()) { $flink = Foreign_link::getByUserID($notice->profile_id, 2); $fbuid = $flink->foreign_id; + $content = $notice->content; - update_status($fbuid, $notice); + if (($flink->noticesync & FOREIGN_NOTICE_SEND) == FOREIGN_NOTICE_SEND) { + // If it's not a reply, or if the user WANTS to send replies... + if (!preg_match('/@[a-zA-Z0-9_]{1,15}\b/u', $content) || + (($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) == FOREIGN_NOTICE_SEND_REPLY)) { + update_status($fbuid, $content); + } + } } update_last_updated($current_time); @@ -63,18 +70,14 @@ exit(0); -function update_status($fbuid, $notice) { +function update_status($fbuid, $content) { global $facebook; try { - - $result = $facebook->api_client->users_setStatus($notice->content, $fbuid, false, true); - + $result = $facebook->api_client->users_setStatus($content, $fbuid, false, true); } catch(FacebookRestClientException $e){ - print_r($e); } - } function get_last_updated(){ diff --git a/_darcs/tentative_pristine b/_darcs/tentative_pristine index 15afe3e09..a69792432 100644 --- a/_darcs/tentative_pristine +++ b/_darcs/tentative_pristine @@ -1,215 +1,237 @@ -hunk ./actions/facebookhome.php 39 -- $facebook = $this->get_facebook(); -+ $facebook = get_facebook(); -hunk ./actions/facebookinvite.php 37 -- $facebook = $this->get_facebook(); -+ $facebook = get_facebook(); -hunk ./actions/facebooksettings.php 37 -- $facebook = $this->get_facebook(); -+ $facebook = get_facebook(); -hunk ./actions/facebooksettings.php 47 -+ $fbml .= '<fb:prompt-permission perms="status_update"><h2>Allow Identi.ca to update my Facebook status</h2></fb:prompt-permission>'; -+ -hunk ./classes/Foreign_link.php 7 --class Foreign_link extends Memcached_DataObject -+class Foreign_link extends Memcached_DataObject -hunk ./classes/Foreign_link.php 16 -- public $credentials; // varchar(255) -+ public $credentials; // varchar(255) -hunk ./classes/Foreign_link.php 32 -- static function getByUserID($user_id, $service) { -+ static function getByUserID($user_id, $service) -+ { -hunk ./classes/Foreign_link.php 43 -- return null; -+ return null; -hunk ./classes/Foreign_link.php 45 -- -- static function getByForeignID($foreign_id, $service) { -+ -+ static function getByForeignID($foreign_id, $service) -+ { -hunk ./classes/Foreign_link.php 57 -- return null; -+ return null; -hunk ./classes/Foreign_link.php 59 -- -+ -hunk ./classes/Foreign_link.php 62 -- { -+ { -hunk ./classes/Foreign_link.php 66 -- -+ -hunk ./classes/Foreign_link.php 68 -- -+ -hunk ./classes/Foreign_link.php 72 -- -- return null; -+ -+ return null; -hunk ./classes/Foreign_link.php 75 -- -+ -hunk ./classes/Foreign_link.php 80 -- -+ -hunk ./lib/facebookaction.php 22 --require_once(INSTALLDIR.'/extlib/facebook/facebook.php'); -+require_once(INSTALLDIR.'/lib/facebookutil.php'); -+ -hunk ./lib/facebookaction.php 32 +hunk ./actions/facebookhome.php 73 - -- function get_facebook() +- # $this->set_flags($flink, $noticesync, $replysync, $friendsync); ++ $flink->set_flags(true, false, false); +hunk ./actions/facebooksettings.php 31 +- $this->display(); ++ if ($this->arg('save')) { ++ $this->save_settings(); ++ } else { ++ $this->show_form(); ++ } +hunk ./actions/facebooksettings.php 38 +- function display() - { -- $apikey = common_config('facebook', 'apikey'); -- $secret = common_config('facebook', 'secret'); -- return new Facebook($apikey, $secret); -- } -addfile ./lib/facebookutil.php -hunk ./lib/facebookutil.php 1 -+<?php -+/* -+ * Laconica - a distributed open-source microblogging tool -+ * Copyright (C) 2008, Controlez-Vous, Inc. -+ * -+ * This program is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Affero General Public License as published by -+ * the Free Software Foundation, either version 3 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU Affero General Public License for more details. -+ * -+ * You should have received a copy of the GNU Affero General Public License -+ * along with this program. If not, see <http://www.gnu.org/licenses/>. -+ */ -+ -+require_once(INSTALLDIR.'/extlib/facebook/facebook.php'); -+ -+// Gets all the notices from users with a Facebook link since a given ID -+function get_facebook_notices($since) -+{ -+ $qry = 'SELECT notice.* ' . -+ 'FROM notice ' . -+ 'JOIN foreign_link ' . -+ 'WHERE notice.profile_id = foreign_link.user_id ' . -+ 'AND foreign_link.service = 2'; -+ -+ // XXX: What should the limit be? -+ return Notice::getStreamDirect($qry, 0, 100, 0, 0, null, $since); -+} -+ -+function get_facebook() -+{ -+ $apikey = common_config('facebook', 'apikey'); -+ $secret = common_config('facebook', 'secret'); -+ return new Facebook($apikey, $secret); -+} -addfile ./scripts/update_facebook.php -hunk ./scripts/update_facebook.php 1 -+#!/usr/bin/env php -+<?php -+/* -+ * Laconica - a distributed open-source microblogging tool -+ * Copyright (C) 2008, Controlez-Vous, Inc. -+ * -+ * This program is free software: you can redistribute it and/or modify -+ * it under the terms of the GNU Affero General Public License as published by -+ * the Free Software Foundation, either version 3 of the License, or -+ * (at your option) any later version. -+ * -+ * This program is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -+ * GNU Affero General Public License for more details. -+ * -+ * You should have received a copy of the GNU Affero General Public License -+ * along with this program. If not, see <http://www.gnu.org/licenses/>. -+ */ -+ -+# Abort if called from a web server -+if (isset($_SERVER) && array_key_exists('REQUEST_METHOD', $_SERVER)) { -+ print "This script must be run from the command line\n"; -+ exit(); -+} -+ -+define('INSTALLDIR', realpath(dirname(__FILE__) . '/..')); -+define('LACONICA', true); -+ -+require_once(INSTALLDIR . '/lib/common.php'); -+require_once(INSTALLDIR . '/lib/facebookutil.php'); -+ -+// For storing the last run date-time -+$last_updated_file = "/home/zach/laconica/scripts/facebook_last_updated"; -+ -+// Lock file name -+$tmp_file = "/tmp/update_facebook.lock"; -+ -+// Make sure only one copy of the script is running at a time -+if (!($tmp_file = @fopen($tmp_file, "w"))) -+{ -+ die("Can't open lock file. Script already running?"); -+} -+ -+$facebook = get_facebook(); -+ -+$current_time = time(); -+ -+$notice = get_facebook_notices(get_last_updated()); -+ -+while($notice->fetch()) { -+ -+ $flink = Foreign_link::getByUserID($notice->profile_id, 2); -+ $fbuid = $flink->foreign_id; -+ -+ update_status($fbuid, $notice); -+ -+} -+ -+update_last_updated($current_time); -+ -+exit(0); -+ -+ -+ -+function update_status($fbuid, $notice) { -+ global $facebook; -+ -+ try { + -+ $result = $facebook->api_client->users_setStatus($notice->content, $fbuid, false, true); ++ function save_settings() { + -+ } catch(FacebookRestClientException $e){ ++ $noticesync = $this->arg('noticesync'); ++ $replysync = $this->arg('replysync'); +hunk ./actions/facebooksettings.php 45 ++ $fbuid = $facebook->require_login(); + -+ print_r($e); -+ } ++ $flink = Foreign_link::getByForeignID($fbuid, 2); // 2 == Facebook ++ ++ $original = clone($flink); ++ $flink->set_flags($noticesync, $replysync, false); ++ $result = $flink->update($original); + -+} ++ if ($result) { ++ echo '<fb:success message="Sync preferences saved." />'; ++ } +hunk ./actions/facebooksettings.php 57 ++ $this->show_form(); + -+function get_last_updated(){ -+ global $last_updated_file, $current_time; ++ } + -+ $file = fopen($last_updated_file, 'r'); ++ function show_form() { + -+ if ($file) { -+ $last = fgets($file); -+ } else { -+ print "Unable to read $last_updated_file. Using current time.\n"; -+ return $current_time; -+ } ++ $facebook = get_facebook(); +hunk ./actions/facebooksettings.php 66 ++ $flink = Foreign_link::getByForeignID($fbuid, 2); // 2 == Facebook + -+ fclose($file); ++ $this->show_header('Settings'); + -+ return $last; -+} +hunk ./actions/facebooksettings.php 71 +- .'<h2>Add an Identi.ca box to your profile!</h2>' ++ .'<h2>Add an Identi.ca box to my profile</h2>' +hunk ./actions/facebooksettings.php 75 +- +hunk ./actions/facebooksettings.php 77 +- $this->show_header('Settings'); ++ $fbml .= '<form method="post" id="facebook_settings">' ++ .'<h2>Sync preferences</h2>' ++ .'<p>'; ++ ++ if ($flink->noticesync & FOREIGN_NOTICE_SEND) { ++ $fbml .= '<input name="noticesync" type="checkbox" class="checkbox" id="noticesync" checked="checked"/>'; ++ } else { ++ $fbml .= '<input name="noticesync" type="checkbox" class="checkbox" id="noticesync">'; ++ } ++ ++ $fbml .= '<label class="checkbox_label" for="noticesync">Automatically update my Facebook status with my notices.</label>' ++ .'</p>' ++ .'<p>'; ++ ++ if ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) { ++ $fbml .= '<input name="replysync" type="checkbox" class="checkbox" id="replysync" checked="checked"/>'; ++ } else { ++ $fbml .= '<input name="replysync" type="checkbox" class="checkbox" id="replysync"/>'; ++ } ++ ++ $fbml .= '<label class="checkbox_label" for="replysync">Send "@" replies to Facebook.</label>' ++ .'</p>' ++ .'<p>' ++ .'<input type="submit" id="save" name="save" class="submit" value="Save"/>' ++ .'</p>' ++ .'</form>'; +hunk ./actions/facebooksettings.php 107 +- +hunk ./actions/twittersettings.php 254 +- $this->set_flags($flink, $noticesync, $replysync, $friendsync); ++ $flink->set_flags($noticesync, $replysync, $friendsync); +hunk ./actions/twittersettings.php 326 +- $this->set_flags($flink, $noticesync, $replysync, $friendsync); ++ $flink->set_flags($noticesync, $replysync, $friendsync); +hunk ./actions/twittersettings.php 366 +- function set_flags(&$flink, $noticesync, $replysync, $friendsync) +- { +- if ($noticesync) { +- $flink->noticesync |= FOREIGN_NOTICE_SEND; +- } else { +- $flink->noticesync &= ~FOREIGN_NOTICE_SEND; +- } +- +- if ($replysync) { +- $flink->noticesync |= FOREIGN_NOTICE_SEND_REPLY; +- } else { +- $flink->noticesync &= ~FOREIGN_NOTICE_SEND_REPLY; +- } +- +- if ($friendsync) { +- $flink->friendsync |= FOREIGN_FRIEND_RECV; +- } else { +- $flink->friendsync &= ~FOREIGN_FRIEND_RECV; +- } +- +- $flink->profilesync = 0; +- } +hunk ./classes/Foreign_link.php 59 + -+function update_last_updated($time){ -+ global $last_updated_file; -+ $file = fopen($last_updated_file, 'w') or die("Can't open $last_updated_file for writing!"); -+ fwrite($file, $time); -+ fclose($file); -+} ++ function set_flags($noticesync, $replysync, $friendsync) ++ { ++ if ($noticesync) { ++ $this->noticesync |= FOREIGN_NOTICE_SEND; ++ } else { ++ $this->noticesync &= ~FOREIGN_NOTICE_SEND; ++ } ++ ++ if ($replysync) { ++ $this->noticesync |= FOREIGN_NOTICE_SEND_REPLY; ++ } else { ++ $this->noticesync &= ~FOREIGN_NOTICE_SEND_REPLY; ++ } ++ ++ if ($friendsync) { ++ $this->friendsync |= FOREIGN_FRIEND_RECV; ++ } else { ++ $this->friendsync &= ~FOREIGN_FRIEND_RECV; ++ } ++ ++ $this->profilesync = 0; ++ } +hunk ./lib/facebookaction.php 40 +- $style = '<style> +- #notices { +- clear: both; +- margin: 0 auto; +- padding: 0; +- list-style-type: none; +- width: 600px; +- border-top: 1px solid #dec5b5; +- } +- #notices a:hover { +- text-decoration: underline; +- } +- .notice_single { +- clear: both; +- display: block; +- margin: 0; +- padding: 5px 5px 5px 0; +- min-height: 48px; +- font-family: Georgia, "Times New Roman", Times, serif; +- font-size: 13px; +- line-height: 16px; +- border-bottom: 1px solid #dec5b5; +- background-color:#FCFFF5; +- opacity:1; +- } +- .notice_single:hover { +- background-color: #f7ebcc; +- } +- .notice_single p { +- display: inline; +- margin: 0; +- padding: 0; +- } +- </style>'; ++ $style = '<style> ++ #notices { ++ clear: both; ++ margin: 0 auto; ++ padding: 0; ++ list-style-type: none; ++ width: 600px; ++ border-top: 1px solid #dec5b5; ++ } ++ #notices a:hover { ++ text-decoration: underline; ++ } ++ .notice_single { ++ clear: both; ++ display: block; ++ margin: 0; ++ padding: 5px 5px 5px 0; ++ min-height: 48px; ++ font-family: Georgia, "Times New Roman", Times, serif; ++ font-size: 13px; ++ line-height: 16px; ++ border-bottom: 1px solid #dec5b5; ++ background-color:#FCFFF5; ++ opacity:1; ++ } ++ .notice_single:hover { ++ background-color: #f7ebcc; ++ } ++ .notice_single p { ++ display: inline; ++ margin: 0; ++ padding: 0; ++ } ++ </style>'; +hunk ./lib/facebookaction.php 75 +- $html = $this->render_notice($notice); ++ $html = Facebookaction::Aender_notice($notice); +hunk ./lib/facebookaction.php 77 +- $fbml = "<fb:wide>$content $html</fb:wide>"; +- $fbml .= "<fb:narrow>$content $html</fb:narrow>"; ++ ++ $fbml = "<fb:wide>$style $html</fb:wide>"; ++ $fbml .= "<fb:narrow>$style $html</fb:narrow>"; +hunk ./lib/facebookaction.php 81 +- $fbml_main = "<fb:narrow>$content $html</fb:narrow>"; ++ $fbml_main = "<fb:narrow>$style $html</fb:narrow>"; +hunk ./scripts/update_facebook.php 55 ++ $content = $notice->content; +hunk ./scripts/update_facebook.php 57 +- update_status($fbuid, $notice); ++ if (($flink->noticesync & FOREIGN_NOTICE_SEND) == FOREIGN_NOTICE_SEND) { +hunk ./scripts/update_facebook.php 59 ++ // If it's not a reply, or if the user WANTS to send replies... ++ if (!preg_match('/@[a-zA-Z0-9_]{1,15}\b/u', $content) || ++ (($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) == FOREIGN_NOTICE_SEND_REPLY)) { ++ update_status($fbuid, $content); ++ } ++ } +hunk ./scripts/update_facebook.php 73 +-function update_status($fbuid, $notice) { ++function update_status($fbuid, $content) { +hunk ./scripts/update_facebook.php 77 +- +- $result = $facebook->api_client->users_setStatus($notice->content, $fbuid, false, true); +- ++ $result = $facebook->api_client->users_setStatus($content, $fbuid, false, true); +hunk ./scripts/update_facebook.php 79 +- +hunk ./scripts/update_facebook.php 81 +- diff --git a/actions/facebookhome.php b/actions/facebookhome.php index a23d1aa07..069ea5e75 100644 --- a/actions/facebookhome.php +++ b/actions/facebookhome.php @@ -70,8 +70,7 @@ class FacebookhomeAction extends FacebookAction $flink->foreign_id = $fbuid; $flink->service = 2; # Facebook $flink->created = common_sql_now(); - - # $this->set_flags($flink, $noticesync, $replysync, $friendsync); + $flink->set_flags(true, false, false); $flink_id = $flink->insert(); diff --git a/actions/facebooksettings.php b/actions/facebooksettings.php index 17812850c..469bcfc45 100644 --- a/actions/facebooksettings.php +++ b/actions/facebooksettings.php @@ -28,30 +28,82 @@ class FacebooksettingsAction extends FacebookAction { parent::handle($args); - $this->display(); + if ($this->arg('save')) { + $this->save_settings(); + } else { + $this->show_form(); + } } - function display() - { + + function save_settings() { + + $noticesync = $this->arg('noticesync'); + $replysync = $this->arg('replysync'); $facebook = get_facebook(); + $fbuid = $facebook->require_login(); + + $flink = Foreign_link::getByForeignID($fbuid, 2); // 2 == Facebook + + $original = clone($flink); + $flink->set_flags($noticesync, $replysync, false); + $result = $flink->update($original); + + if ($result) { + echo '<fb:success message="Sync preferences saved." />'; + } + + $this->show_form(); + + } + + function show_form() { + $facebook = get_facebook(); $fbuid = $facebook->require_login(); + $flink = Foreign_link::getByForeignID($fbuid, 2); // 2 == Facebook + + $this->show_header('Settings'); + $fbml = '<fb:if-section-not-added section="profile">' - .'<h2>Add an Identi.ca box to your profile!</h2>' + .'<h2>Add an Identi.ca box to my profile</h2>' .'<fb:add-section-button section="profile"/>' .'</fb:if-section-not-added>'; - $fbml .= '<fb:prompt-permission perms="status_update"><h2>Allow Identi.ca to update my Facebook status</h2></fb:prompt-permission>'; - $this->show_header('Settings'); + $fbml .= '<form method="post" id="facebook_settings">' + .'<h2>Sync preferences</h2>' + .'<p>'; + + if ($flink->noticesync & FOREIGN_NOTICE_SEND) { + $fbml .= '<input name="noticesync" type="checkbox" class="checkbox" id="noticesync" checked="checked"/>'; + } else { + $fbml .= '<input name="noticesync" type="checkbox" class="checkbox" id="noticesync">'; + } + + $fbml .= '<label class="checkbox_label" for="noticesync">Automatically update my Facebook status with my notices.</label>' + .'</p>' + .'<p>'; + + if ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) { + $fbml .= '<input name="replysync" type="checkbox" class="checkbox" id="replysync" checked="checked"/>'; + } else { + $fbml .= '<input name="replysync" type="checkbox" class="checkbox" id="replysync"/>'; + } + + $fbml .= '<label class="checkbox_label" for="replysync">Send "@" replies to Facebook.</label>' + .'</p>' + .'<p>' + .'<input type="submit" id="save" name="save" class="submit" value="Save"/>' + .'</p>' + .'</form>'; echo $fbml; $this->show_footer(); - } } diff --git a/actions/twittersettings.php b/actions/twittersettings.php index 26dede0ac..d66427339 100644 --- a/actions/twittersettings.php +++ b/actions/twittersettings.php @@ -251,7 +251,7 @@ class TwittersettingsAction extends SettingsAction $flink->credentials = $password; $flink->created = common_sql_now(); - $this->set_flags($flink, $noticesync, $replysync, $friendsync); + $flink->set_flags($noticesync, $replysync, $friendsync); $flink_id = $flink->insert(); @@ -323,7 +323,7 @@ class TwittersettingsAction extends SettingsAction $screen_name = $fuser->nickname; $original = clone($flink); - $this->set_flags($flink, $noticesync, $replysync, $friendsync); + $flink->set_flags($noticesync, $replysync, $friendsync); $result = $flink->update($original); if ($result === false) { @@ -363,27 +363,5 @@ class TwittersettingsAction extends SettingsAction return false; } - function set_flags(&$flink, $noticesync, $replysync, $friendsync) - { - if ($noticesync) { - $flink->noticesync |= FOREIGN_NOTICE_SEND; - } else { - $flink->noticesync &= ~FOREIGN_NOTICE_SEND; - } - - if ($replysync) { - $flink->noticesync |= FOREIGN_NOTICE_SEND_REPLY; - } else { - $flink->noticesync &= ~FOREIGN_NOTICE_SEND_REPLY; - } - - if ($friendsync) { - $flink->friendsync |= FOREIGN_FRIEND_RECV; - } else { - $flink->friendsync &= ~FOREIGN_FRIEND_RECV; - } - - $flink->profilesync = 0; - } }
\ No newline at end of file diff --git a/classes/Foreign_link.php b/classes/Foreign_link.php index c89124d19..afc0e2180 100644 --- a/classes/Foreign_link.php +++ b/classes/Foreign_link.php @@ -57,6 +57,29 @@ class Foreign_link extends Memcached_DataObject return null; } + function set_flags($noticesync, $replysync, $friendsync) + { + if ($noticesync) { + $this->noticesync |= FOREIGN_NOTICE_SEND; + } else { + $this->noticesync &= ~FOREIGN_NOTICE_SEND; + } + + if ($replysync) { + $this->noticesync |= FOREIGN_NOTICE_SEND_REPLY; + } else { + $this->noticesync &= ~FOREIGN_NOTICE_SEND_REPLY; + } + + if ($friendsync) { + $this->friendsync |= FOREIGN_FRIEND_RECV; + } else { + $this->friendsync &= ~FOREIGN_FRIEND_RECV; + } + + $this->profilesync = 0; + } + # Convenience methods function getForeignUser() { diff --git a/lib/facebookaction.php b/lib/facebookaction.php index ee9f783c4..7fa097587 100644 --- a/lib/facebookaction.php +++ b/lib/facebookaction.php @@ -37,47 +37,48 @@ class FacebookAction extends Action # Need to include inline CSS for styling the Profile box - $style = '<style> - #notices { - clear: both; - margin: 0 auto; - padding: 0; - list-style-type: none; - width: 600px; - border-top: 1px solid #dec5b5; - } - #notices a:hover { - text-decoration: underline; - } - .notice_single { - clear: both; - display: block; - margin: 0; - padding: 5px 5px 5px 0; - min-height: 48px; - font-family: Georgia, "Times New Roman", Times, serif; - font-size: 13px; - line-height: 16px; - border-bottom: 1px solid #dec5b5; - background-color:#FCFFF5; - opacity:1; - } - .notice_single:hover { - background-color: #f7ebcc; - } - .notice_single p { - display: inline; - margin: 0; - padding: 0; - } - </style>'; - - $html = $this->render_notice($notice); - - $fbml = "<fb:wide>$content $html</fb:wide>"; - $fbml .= "<fb:narrow>$content $html</fb:narrow>"; - - $fbml_main = "<fb:narrow>$content $html</fb:narrow>"; + $style = '<style> + #notices { + clear: both; + margin: 0 auto; + padding: 0; + list-style-type: none; + width: 600px; + border-top: 1px solid #dec5b5; + } + #notices a:hover { + text-decoration: underline; + } + .notice_single { + clear: both; + display: block; + margin: 0; + padding: 5px 5px 5px 0; + min-height: 48px; + font-family: Georgia, "Times New Roman", Times, serif; + font-size: 13px; + line-height: 16px; + border-bottom: 1px solid #dec5b5; + background-color:#FCFFF5; + opacity:1; + } + .notice_single:hover { + background-color: #f7ebcc; + } + .notice_single p { + display: inline; + margin: 0; + padding: 0; + } + </style>'; + + $html = Facebookaction::Aender_notice($notice); + + + $fbml = "<fb:wide>$style $html</fb:wide>"; + $fbml .= "<fb:narrow>$style $html</fb:narrow>"; + + $fbml_main = "<fb:narrow>$style $html</fb:narrow>"; $facebook->api_client->profile_setFBML(null, $fbuid, $fbml, null, null, $fbml_main); } diff --git a/scripts/update_facebook.php b/scripts/update_facebook.php index d2440b163..02e47cefe 100755 --- a/scripts/update_facebook.php +++ b/scripts/update_facebook.php @@ -52,9 +52,16 @@ while($notice->fetch()) { $flink = Foreign_link::getByUserID($notice->profile_id, 2); $fbuid = $flink->foreign_id; + $content = $notice->content; - update_status($fbuid, $notice); + if (($flink->noticesync & FOREIGN_NOTICE_SEND) == FOREIGN_NOTICE_SEND) { + // If it's not a reply, or if the user WANTS to send replies... + if (!preg_match('/@[a-zA-Z0-9_]{1,15}\b/u', $content) || + (($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) == FOREIGN_NOTICE_SEND_REPLY)) { + update_status($fbuid, $content); + } + } } update_last_updated($current_time); @@ -63,18 +70,14 @@ exit(0); -function update_status($fbuid, $notice) { +function update_status($fbuid, $content) { global $facebook; try { - - $result = $facebook->api_client->users_setStatus($notice->content, $fbuid, false, true); - + $result = $facebook->api_client->users_setStatus($content, $fbuid, false, true); } catch(FacebookRestClientException $e){ - print_r($e); } - } function get_last_updated(){ |