From e0fbf02bbf516db10070bddaabbbaea31d336cda Mon Sep 17 00:00:00 2001 From: Zach Copley Date: Sun, 4 Jan 2009 23:02:12 -0500 Subject: [PATCH] trac750 configurable sync flags for Facebook app (noticesync, replysync) darcs-hash:20090105040212-7b5ce-37f6195649dc673241e4566a93183b13e428d98f.gz --- _darcs/inventory | 4 +- ...7f6195649dc673241e4566a93183b13e428d98f.gz | Bin 0 -> 1897 bytes _darcs/pristine/actions/facebookhome.php | 3 +- _darcs/pristine/actions/facebooksettings.php | 68 ++- _darcs/pristine/actions/twittersettings.php | 26 +- _darcs/pristine/classes/Foreign_link.php | 23 + _darcs/pristine/lib/facebookaction.php | 77 ++-- _darcs/pristine/scripts/update_facebook.php | 17 +- _darcs/tentative_pristine | 420 +++++++++--------- actions/facebookhome.php | 3 +- actions/facebooksettings.php | 68 ++- actions/twittersettings.php | 26 +- classes/Foreign_link.php | 23 + lib/facebookaction.php | 77 ++-- scripts/update_facebook.php | 17 +- 15 files changed, 494 insertions(+), 358 deletions(-) create mode 100644 _darcs/patches/20090105040212-7b5ce-37f6195649dc673241e4566a93183b13e428d98f.gz diff --git a/_darcs/inventory b/_darcs/inventory index 8c94c559c8..909443c81e 100644 --- a/_darcs/inventory +++ b/_darcs/inventory @@ -114,4 +114,6 @@ Evan Prodromou **20081230211957] [wrapper element for config.xml Evan Prodromou **20081230212202] [trac750 Automatically update linked Facebook users' statuses -Zach Copley **20090105010407] \ No newline at end of file +Zach Copley **20090105010407] +[trac750 configurable sync flags for Facebook app (noticesync, replysync) +Zach Copley **20090105040212] \ No newline at end of file diff --git a/_darcs/patches/20090105040212-7b5ce-37f6195649dc673241e4566a93183b13e428d98f.gz b/_darcs/patches/20090105040212-7b5ce-37f6195649dc673241e4566a93183b13e428d98f.gz new file mode 100644 index 0000000000000000000000000000000000000000..d497340bd9d56a74088faa39026282b2b207a2f7 GIT binary patch literal 1897 zcmV-v2bTCBiwFP!000001JzmWPun;c|IT0Wte~}QZIc3p5ok4z(Fy6qPB7i+wwo$9 zaT<#>&Jt(PZQS2}cH$(?OWVM49}Wp zLhRao6OCWJ+SB!8eV`BZ1AT9>_XU1zIgxh@eGQq6P%qSMsm!4Z-1i+Hj`p{DTRo`x z*@hkFkgzunF`LG4J3F>ZyxT79s3>)LE91Iny_ADZnkeHJ8#sU5skpNF!IwxN2DV1I%2B)9U0F${l6<-Zwj@d6uxpeui zlSu8t-tGx#8tlPnlvPkc8Vv~7fm|-obg74B@)qo_q~glNPSaBLSs1x2HZPG9`4(ba zO{%zPU7UmoPbKrP=}>5&+A|}JOs+kI1^MhJ(ze>WmL zsx-^h&QWT3;X;2TvXh6O=OuHfHEQ`ZWGx{4Q>rWLMlIFo#NcugmtDiD{5YLUchv&^NZ=t#nroNC(lt6&yN^*Xu)eKm(v2a^!bYEVDpxHzr|Yw z3PW{4*rqbXJJ^yW*lLvuu>RTb{6I=&|GG9-E}CJtENU9Bw#3X)lz0{~xI%HkgDAu_%N)!W^+KdHbhYEU^?x&40$wPOmS1`}NPJ0nYk$L$@mQ&l%pQ!zefP zr$#rIIKJWI7`*%%QFih+`4^9sgg;7n%Sl80h*%cBCuS#BhS6+6WLFSRsg`s{@>#-7 ziM}B>5|1~rr)|=ziQXez)1=Q0^rLD=WIT5n4hn>O!-Hx^{MV!IBW8-Cga(NB_YVJW zhz}1-qiwF`<)Z+nlW=B#+(vTFU3E`2OKCAbM|C~sBaomP* zsHrn%G8-RPr{2dEM8f@}^q?zdXx+)NL4r0rf;P#|`iDz3Kc56N&8FvqTa{OxBMRAB zr=~%2HpAN_H&;Bn69JXfd|gOQm&~#!TGCUKBekw1dB~P71~CN0pT_ytwsfajS*D9o zVDRGwbCj}K@S{EP4A24b!B5%nk!A7DZDds=eq0i=UaYJq9`gpD{yePg-w}&B1{~_T zf3GahXuwYuJw|;42L3&S)Fl>dTi6`VhQ%7LSbz+Ne#3!k3B&iS$C+t>gkubdJT9IW zFRqu>Ph?F)ZjXyM`$S&2@O77(w{^~{^V5(Umj0>)3*z-0-d-GLz`>h>Uu^2Jo{bj7 z<;vb;%B7<&v_2Ak;)g4I2iJTQ_gYX0k-WUJTuKkq4ZTzS=fkI z%7wLY)9W>zYDrP4Gk8tO<$Fra<%@*`%a_Ylm+z>s^3@e}mlG5VFJIqKc{$-joh5ng z<(un@uU=fG{5HC$T!1x>tMyr_1QoVQ4d#1KEW(liwF=d^Rm!jun>BT)(5@`RoJOg{ zCV{Al?V4h26k5L^tx}Io!>F%Pr_|*7$E3IiOPO{Yws7;S>;Q{=ohHE3iL7t}lJt{; zSi?A5!MFj5deIi2+DFh5m%F@T@pwnPx4|Aul=7pkTyLF}x%!gLLqS0A>KNrtOPEr= zDJbYndRSFs^>(44vCNk1TknB4gOV-N1tK0i%ASqv8^MKUKztTz$%R&SHJwcR@;yZc zVw9djdtR15to{y+8KK{f2X$=*m3SdO@m7t2y2Jp>JCuy zUa<=_5RjOIA>thl{y4k(cq1-_LUCmzFNym7esSV{;Rkrm1Hw$F)7IX8M!oN6y-#}Y zc>3kXpgR~o{58{}b~p3vF8usi9H*Q6Aie#o_k`T7%>8TPkzy*nntUit;_DnM-j`-4 z#Pwkpz&4R)UTPFo(OQ(!QeHu2Z`hDerY4UZe?W~zSVM6!eD9mHYNlg@>?T$o=NEYE=tP^@df560VX~5lWgh?lm*ut& literal 0 HcmV?d00001 diff --git a/_darcs/pristine/actions/facebookhome.php b/_darcs/pristine/actions/facebookhome.php index a23d1aa07f..069ea5e75c 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 17812850c0..469bcfc459 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 ''; + } + + $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 = '' - .'

Add an Identi.ca box to your profile!

' + .'

Add an Identi.ca box to my profile

' .'' .'
'; - $fbml .= '

Allow Identi.ca to update my Facebook status

'; - $this->show_header('Settings'); + $fbml .= '
' + .'

Sync preferences

' + .'

'; + + if ($flink->noticesync & FOREIGN_NOTICE_SEND) { + $fbml .= ''; + } else { + $fbml .= ''; + } + + $fbml .= '' + .'

' + .'

'; + + if ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) { + $fbml .= ''; + } else { + $fbml .= ''; + } + + $fbml .= '' + .'

' + .'

' + .'' + .'

' + .'
'; echo $fbml; $this->show_footer(); - } } diff --git a/_darcs/pristine/actions/twittersettings.php b/_darcs/pristine/actions/twittersettings.php index 26dede0ac2..d664273397 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 c89124d19c..afc0e21804 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 ee9f783c40..7fa097587d 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 = ''; - $html = $this->render_notice($notice); + $html = Facebookaction::Aender_notice($notice); - $fbml = "$content $html"; - $fbml .= "$content $html"; + + $fbml = "$style $html"; + $fbml .= "$style $html"; - $fbml_main = "$content $html"; + $fbml_main = "$style $html"; $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 d2440b163c..02e47cefea 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 15afe3e099..a69792432d 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 .= '

Allow Identi.ca to update my Facebook status

'; -+ -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 -+. -+ */ + -+require_once(INSTALLDIR.'/extlib/facebook/facebook.php'); ++ function save_settings() { + -+// 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'; ++ $noticesync = $this->arg('noticesync'); ++ $replysync = $this->arg('replysync'); +hunk ./actions/facebooksettings.php 45 ++ $fbuid = $facebook->require_login(); + -+ // XXX: What should the limit be? -+ return Notice::getStreamDirect($qry, 0, 100, 0, 0, null, $since); -+} ++ $flink = Foreign_link::getByForeignID($fbuid, 2); // 2 == Facebook + -+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 -+. -+ */ ++ $original = clone($flink); ++ $flink->set_flags($noticesync, $replysync, false); ++ $result = $flink->update($original); + -+# 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(); -+} ++ if ($result) { ++ echo ''; ++ } +hunk ./actions/facebooksettings.php 57 ++ $this->show_form(); + -+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); -+ -+ } catch(FacebookRestClientException $e){ -+ -+ print_r($e); + } + -+} ++ function show_form() { + -+function get_last_updated(){ -+ global $last_updated_file, $current_time; ++ $facebook = get_facebook(); +hunk ./actions/facebooksettings.php 66 ++ $flink = Foreign_link::getByForeignID($fbuid, 2); // 2 == Facebook + -+ $file = fopen($last_updated_file, 'r'); ++ $this->show_header('Settings'); + -+ if ($file) { -+ $last = fgets($file); -+ } else { -+ print "Unable to read $last_updated_file. Using current time.\n"; -+ return $current_time; -+ } +hunk ./actions/facebooksettings.php 71 +- .'

Add an Identi.ca box to your profile!

' ++ .'

Add an Identi.ca box to my profile

' +hunk ./actions/facebooksettings.php 75 +- +hunk ./actions/facebooksettings.php 77 +- $this->show_header('Settings'); ++ $fbml .= '
' ++ .'

Sync preferences

' ++ .'

'; + -+ fclose($file); ++ if ($flink->noticesync & FOREIGN_NOTICE_SEND) { ++ $fbml .= ''; ++ } else { ++ $fbml .= ''; ++ } + -+ return $last; -+} ++ $fbml .= '' ++ .'

' ++ .'

'; + -+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); -+} ++ if ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) { ++ $fbml .= ''; ++ } else { ++ $fbml .= ''; ++ } ++ ++ $fbml .= '' ++ .'

' ++ .'

' ++ .'' ++ .'

' ++ .'
'; +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 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 = ''; +hunk ./lib/facebookaction.php 75 +- $html = $this->render_notice($notice); ++ $html = Facebookaction::Aender_notice($notice); +hunk ./lib/facebookaction.php 77 +- $fbml = "$content $html"; +- $fbml .= "$content $html"; ++ ++ $fbml = "$style $html"; ++ $fbml .= "$style $html"; +hunk ./lib/facebookaction.php 81 +- $fbml_main = "$content $html"; ++ $fbml_main = "$style $html"; +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 a23d1aa07f..069ea5e75c 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 17812850c0..469bcfc459 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 ''; + } + + $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 = '' - .'

Add an Identi.ca box to your profile!

' + .'

Add an Identi.ca box to my profile

' .'' .'
'; - $fbml .= '

Allow Identi.ca to update my Facebook status

'; - $this->show_header('Settings'); + $fbml .= '
' + .'

Sync preferences

' + .'

'; + + if ($flink->noticesync & FOREIGN_NOTICE_SEND) { + $fbml .= ''; + } else { + $fbml .= ''; + } + + $fbml .= '' + .'

' + .'

'; + + if ($flink->noticesync & FOREIGN_NOTICE_SEND_REPLY) { + $fbml .= ''; + } else { + $fbml .= ''; + } + + $fbml .= '' + .'

' + .'

' + .'' + .'

' + .'
'; echo $fbml; $this->show_footer(); - } } diff --git a/actions/twittersettings.php b/actions/twittersettings.php index 26dede0ac2..d664273397 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 c89124d19c..afc0e21804 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 ee9f783c40..7fa097587d 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 = ''; - $html = $this->render_notice($notice); + $html = Facebookaction::Aender_notice($notice); - $fbml = "$content $html"; - $fbml .= "$content $html"; + + $fbml = "$style $html"; + $fbml .= "$style $html"; - $fbml_main = "$content $html"; + $fbml_main = "$style $html"; $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 d2440b163c..02e47cefea 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(){