From c51ae6551d9d3fd0afe1a8ea5c48663de05feca9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B6=C3=9Fl?= Date: Sun, 26 Feb 2012 14:45:26 +0000 Subject: [PATCH 01/38] Support for FB Real-Time Updates according to http://developers.facebook.com/docs/reference/api/realtime/ . Plugin needs to be deactivated and activated again in order to enable the settings --- facebook/facebook.php | 283 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 282 insertions(+), 1 deletion(-) diff --git a/facebook/facebook.php b/facebook/facebook.php index 6b6c7f84..cc8b85cd 100755 --- a/facebook/facebook.php +++ b/facebook/facebook.php @@ -76,10 +76,90 @@ function facebook_module() {} -/* If a->argv[1] is a nickname, this is a callback from Facebook oauth requests. */ +// If a->argv[1] is a nickname, this is a callback from Facebook oauth requests. +// If $_REQUEST["realtime_cb"] is set, this is a callback from the Real-Time Updates API function facebook_init(&$a) { + + if (x($_REQUEST, "realtime_cb") && x($_REQUEST, "realtime_cb")) { + logger("facebook_init: Facebook Real-Time callback called", LOGGER_DEBUG); + + if (x($_REQUEST["hub_verify_token"])) { + // this is the verification callback while registering for real time updates + + $verify_token = get_config('facebook', 'cb_verify_token'); + if ($verify_token != $_REQUEST["hub_verify_token"]) { + logger('facebook_init: Wrong Facebook Callback Verifier - expected ' . $verify_token . ', got ' . $_REQUEST["hub_verify_token"]); + return; + } + + if (x($_REQUEST, "hub_challenge")) { + logger('facebook_init: Answering Challenge: ' . $_REQUEST["hub_challenge"], LOGGER_DATA); + echo $_REQUEST["hub_challenge"]; + die(); + } + } + + require_once('include/items.php'); + + // this is a status update + $content = file_get_contents("php://input"); + if (is_numeric($content)) $content = file_get_contents("php://input"); + $js = json_decode($content); + logger(print_r($js, true), LOGGER_DATA); + + if (!isset($js->object) || $js->object != "user" || !isset($js->entry)) { + logger('facebook_init: Could not parse Real-Time Update data', LOGGER_DEBUG); + return; + } + + $affected_users = array("feed" => array(), "friends" => array(), "activities" => array()); + + foreach ($js->entry as $entry) { + $fbuser = $entry->uid; + foreach ($entry->changed_fields as $field) { + if (!isset($affected_users[$field])) { + logger('facebook_init: Unknown field "' . $field . '"'); + continue; + } + if (in_array($fbuser, $affected_users[$field])) continue; + switch ($field) { + case "feed": + logger('facebook_init: FB-User ' . $fbuser . ' / feed', LOGGER_DEBUG); + + $r = q("SELECT `uid` FROM `pconfig` WHERE `cat` = 'facebook' AND `k` = 'self_id' AND `v` = '%s' LIMIT 1", dbesc($fbuser)); + if(! count($r)) + continue; + $uid = $r[0]['uid']; + + $access_token = get_pconfig($uid,'facebook','access_token'); + if(! $access_token) + return; + + if(! get_pconfig($uid,'facebook','no_wall')) { + $private_wall = intval(get_pconfig($uid,'facebook','private_wall')); + $s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token); + if($s) { + $j = json_decode($s); + logger('facebook_init: wall: ' . print_r($j,true), LOGGER_DATA); + fb_consume_stream($uid,$j,($private_wall) ? false : true); + } + } + + break; + case "friend": + // @TODO + break; + case "activities": + //@TODO + break; + } + $affected_users[$field][] = $fbuser; + } + } + } + if($a->argc != 2) return; $nick = $a->argv[1]; @@ -479,6 +559,32 @@ function facebook_plugin_settings(&$a,&$b) { } + +function facebook_plugin_admin(&$a, &$o){ + + $activated = false; + $access_token = fb_get_app_access_token(); + if ($access_token) { + $ret = facebook_subscriptions_get(); + if (is_array($ret)) foreach ($ret as $re) if (is_object($re) && $re->object == "user") $activated = true; + } + if ($activated) { + $o = t('Real-Time Updates are activated.') . '

'; + $o .= ''; + } else { + $o = t('Real-Time Updates not activated.') . '
'; + } +} + +function facebook_plugin_admin_post(&$a, &$o){ + if (x($_REQUEST,'real_time_activate')) { + facebook_subscription_add_users(); + } + if (x($_REQUEST,'real_time_deactivate')) { + facebook_subscription_del_users(); + } +} + function facebook_jot_nets(&$a,&$b) { if(! local_user()) return; @@ -1153,3 +1259,178 @@ function fb_consume_stream($uid,$j,$wall = false) { } } + +function fb_get_app_access_token() { + + $acc_token = get_config('facebook','app_access_token'); + + if ($acc_token !== false) return $acc_token; + + $appid = get_config('facebook','appid'); + $appsecret = get_config('facebook', 'appsecret'); + + if ($appid === false || $appsecret === false) { + logger('fb_get_app_access_token: appid and/or appsecret not set', LOGGER_DEBUG); + return false; + } + + $x = fetch_url('https://graph.facebook.com/oauth/access_token?client_id=' . $appid . '&client_secret=' . $appsecret . "&grant_type=client_credentials"); + + if(strpos($x,'access_token=') !== false) { + logger('fb_get_app_access_token: returned access token: ' . $x, LOGGER_DATA); + + $token = str_replace('access_token=', '', $x); + if(strpos($token,'&') !== false) + $token = substr($token,0,strpos($token,'&')); + + if ($token == "") { + logger('fb_get_app_access_token: empty token: ' . $x, LOGGER_DEBUG); + return false; + } + set_config('facebook','app_access_token',$token); + return $token; + } else { + logger('fb_get_app_access_token: response did not contain an access_token: ' . $x, LOGGER_DATA); + return false; + } +} + +function facebook_subscription_del_users() { + $a = get_app(); + $access_token = fb_get_app_access_token(); + + $url = "https://graph.facebook.com/" . get_config('facebook', 'appid' ) . "/subscriptions?access_token=" . $access_token; + delete_url($url); +} + +function facebook_subscription_add_users() { + + $a = get_app(); + $access_token = fb_get_app_access_token(); + + $url = "https://graph.facebook.com/" . get_config('facebook', 'appid' ) . "/subscriptions?access_token=" . $access_token; + + list($usec, $sec) = explode(" ", microtime()); + $verify_token = sha1($usec . $sec . rand(0, 999999999)); + set_config('facebook', 'cb_verify_token', $verify_token); + + $cb = $a->get_baseurl() . '/facebook/?realtime_cb=1'; + + $j = post_url($url,array( + "object" => "user", + "fields" => "feed,friends,activities", + "callback_url" => $cb, + "verify_token" => $verify_token, + )); + del_config('facebook', 'cb_verify_token'); + + if ($j) { + logger("Facebook reponse: " . $j, LOGGER_DATA); + }; +} + +function facebook_subscriptions_get() { + + $access_token = fb_get_app_access_token(); + + $url = "https://graph.facebook.com/" . get_config('facebook', 'appid' ) . "/subscriptions?access_token=" . $access_token; + $j = fetch_url($url); + $ret = null; + if ($j) { + $x = json_decode($j); + if (isset($x->data)) $ret = $x->data; + } + return $ret; +} + + + + + + + +// DELETE-request to $url + +if(! function_exists('delete_url')) { +function delete_url($url,$headers = null, &$redirects = 0, $timeout = 0) { + $a = get_app(); + $ch = curl_init($url); + if(($redirects > 8) || (! $ch)) + return false; + + curl_setopt($ch, CURLOPT_HEADER, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); + curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE"); + curl_setopt($ch, CURLOPT_USERAGENT, "Friendica"); + + if(intval($timeout)) { + curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); + } + else { + $curl_time = intval(get_config('system','curl_timeout')); + curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60)); + } + + if(defined('LIGHTTPD')) { + if(!is_array($headers)) { + $headers = array('Expect:'); + } else { + if(!in_array('Expect:', $headers)) { + array_push($headers, 'Expect:'); + } + } + } + if($headers) + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + + $check_cert = get_config('system','verifyssl'); + curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false)); + $prx = get_config('system','proxy'); + if(strlen($prx)) { + curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1); + curl_setopt($ch, CURLOPT_PROXY, $prx); + $prxusr = get_config('system','proxyuser'); + if(strlen($prxusr)) + curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr); + } + + $a->set_curl_code(0); + + // don't let curl abort the entire application + // if it throws any errors. + + $s = @curl_exec($ch); + + $base = $s; + $curl_info = curl_getinfo($ch); + $http_code = $curl_info['http_code']; + + $header = ''; + + // Pull out multiple headers, e.g. proxy and continuation headers + // allow for HTTP/2.x without fixing code + + while(preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/',$base)) { + $chunk = substr($base,0,strpos($base,"\r\n\r\n")+4); + $header .= $chunk; + $base = substr($base,strlen($chunk)); + } + + if($http_code == 301 || $http_code == 302 || $http_code == 303) { + $matches = array(); + preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches); + $url = trim(array_pop($matches)); + $url_parsed = @parse_url($url); + if (isset($url_parsed)) { + $redirects++; + return delete_url($url,$headers,$redirects,$timeout); + } + } + $a->set_curl_code($http_code); + $body = substr($s,strlen($header)); + + $a->set_curl_headers($header); + + curl_close($ch); + return($body); +}} \ No newline at end of file -- 2.43.0 From b83a5a74241c2abeea45ad674fed958468896b0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B6=C3=9Fl?= Date: Sun, 26 Feb 2012 20:36:24 +0000 Subject: [PATCH 02/38] Bugfix --- facebook/facebook.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/facebook/facebook.php b/facebook/facebook.php index cc8b85cd..039b27ff 100755 --- a/facebook/facebook.php +++ b/facebook/facebook.php @@ -84,7 +84,7 @@ function facebook_init(&$a) { if (x($_REQUEST, "realtime_cb") && x($_REQUEST, "realtime_cb")) { logger("facebook_init: Facebook Real-Time callback called", LOGGER_DEBUG); - if (x($_REQUEST["hub_verify_token"])) { + if (x($_REQUEST, "hub_verify_token")) { // this is the verification callback while registering for real time updates $verify_token = get_config('facebook', 'cb_verify_token'); -- 2.43.0 From b2becc7552b1c1ccd9f4a4b27df5afde4d6120e0 Mon Sep 17 00:00:00 2001 From: Leonard Date: Sun, 26 Feb 2012 21:38:01 +0100 Subject: [PATCH 03/38] Updated the Readme (and added the "Select how your app integrates with Facebook" section) --- facebook/README | 2 ++ 1 file changed, 2 insertions(+) diff --git a/facebook/README b/facebook/README index ee7e489b..9e381e7d 100755 --- a/facebook/README +++ b/facebook/README @@ -17,6 +17,8 @@ Installing the Friendica/Facebook connector Replace with the settings Facebook gives you. d. Navigate to Set Web->Site URL & Domain -> Website Settings. Set Site URL to yoursubdomain.yourdomain.com. Set Site Domain to your yourdomain.com. + e. Chose "Website" (the url should be your site URL with a trailing slash) in the + "Select how your app integrates with Facebook" section. 2. Enable the facebook plugin by including it in .htconfig.php - e.g. $a->config['system']['addon'] = 'plugin1,plugin2,facebook'; 3. Visit the Facebook Settings section of the "Settings->Plugin Settings" page. -- 2.43.0 From 318b9e6806907368975e1c331b6c3c119efd5ac9 Mon Sep 17 00:00:00 2001 From: Leonard Lausen Date: Sun, 26 Feb 2012 21:42:44 +0100 Subject: [PATCH 04/38] created tgz (facebook) --- facebook.tgz | Bin 10958 -> 11028 bytes 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 facebook.tgz diff --git a/facebook.tgz b/facebook.tgz old mode 100755 new mode 100644 index 24fccdaf51555ab9c9dcfcf11a3bf1859e5efc34..2cb406a1a615a0be427fd1ec02c4f3d5490c8492 GIT binary patch delta 10996 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 blv+>yJa}~epRAgAz7yQa;FzF)Jx2(rWFr= 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 G*#7{9pyn$8 -- 2.43.0 From bce0e4f5a0e0d1bd72c5511cb284ee8e334ccd18 Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 27 Feb 2012 17:17:22 -0800 Subject: [PATCH 05/38] add gnot plugin --- gnot.tgz | Bin 0 -> 1388 bytes gnot/gnot.css | 16 ++++++++ gnot/gnot.php | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+) create mode 100644 gnot.tgz create mode 100755 gnot/gnot.css create mode 100755 gnot/gnot.php diff --git a/gnot.tgz b/gnot.tgz new file mode 100644 index 0000000000000000000000000000000000000000..fbf7f26721022228eadac4aecc59b449694cc4a9 GIT binary patch literal 1388 zcmV-y1(W(8iwFP%D@;!S1MOFTZ`(Ey&A;}ixT#rX7l~y%aZ)&Of}(4?0ZmdM!G<9% z3|gXOHWDdNl#^iHci$Z)*;dmc-H)^bszYpq)bV(H_wG@Sq%z*d!&)D0e}A+w9PRE8 zhr1j7(cW-xcVOpB+ZYV?hdce@Xo!A&9PI3E!03VVvX*CtX@HG{`H|2IAwT1nMx(vK z)2C0rMowSRBC0=q_53V*pgr!Z|FA!*>c2A>Q2lpy`&j?}1Lae*@4Wu)M^yanfM-7Z z(QYM7M?!ATlrbt9!=Rtu9JK#zmtHZO@tEAgSTQq(n1|+|-MSWmnU7)Ex85Je7>?Fs z+*yqe+TR+4@7PxTpU%?<+T))7AMFg*^?%p)|6srA|F2<($5{8a_vA?%p1>(f_!wRx z8))$${NSI5;t}T3 zrv!jlJQWh_8ONP23QfDEc_cE!^>nV(RmV-^9F=LBabtvxGItAH76eLqwJxA(8*Ay; zJ-9E_G*y}T(s+gQCxUVd=TEsCV42hrR8i(9naES1BWUyed2q4e62Il)Jm$nzFr9=ps zqRm0&n)V1qlxy33RZ0*ljhhNg4ZE$#sc4gW`D@^IHrbZVo2bwdVdn>kmCxcSC4v0- z@Bwh@rc)eb%i_76<+DU!UAoVWCEq(dvL^E6JZU2D$@V9T#u4ZDwv`p3OPdacw^;?KKCV$$}Tw zvq~;Tx`Pxxw+Xd2+4d2wxpe0yiRY-x?mOsBz&(tGyaLVRiL=_p0Wh~IpE!o!7!Tj_ z9Y8G)Cyt9iQm6=PHe(sjHK{=lT<_yX!bRllI*{-{u!)0EJK!DBr1Mt4l}>raS9B;m zk)LZ#7X(U-!Lx*Gj75TLK^!R0VqXd;Q1T)ALjH8E;@QPhf6o0Yto#Hz9Xr#7V{oCI zo;c+{4$h6ib%98>tVpI34nJRx2EHD*=&zI6j5FUE;_@EwCV3xM4t~E=sbDht7(2KfL#&@2@vAQOep}U!KMx_7t z4NdE;s^zoy+&6$6;ytHK7Wb~@Qv3o~W@CpAK~+ptnYk})nMx_LjaZQCxI)3Mtc4ab z&CM#b9Xcg-Z3$=U#sP`1DCJ%xl{pRuj@tvMbAeb~i*8S{UO_+R41r!A(J}&GGZrG? zD8q%m!7RrgG4g&I6z + * + * + */ + + +function gnot_install() { + + register_hook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings'); + register_hook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); + register_hook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail'); + + logger("installed gnot"); +} + + +function gnot_uninstall() { + + unregister_hook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings'); + unregister_hook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post'); + unregister_hook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail'); + + + logger("removed gnot"); +} + + + +/** + * + * Callback from the settings post function. + * $post contains the $_POST array. + * We will make sure we've got a valid user account + * and if so set our configuration setting for this person. + * + */ + +function gnot_settings_post($a,$post) { + if(! local_user() || (! x($_POST,'gnot-submit'))) + return; + + set_pconfig(local_user(),'gnot','enable',intval($_POST['gnot'])); + info( t('Gnot settings updated.') . EOL); +} + + +/** + * + * Called from the Plugin Setting form. + * Add our own settings info to the page. + * + */ + + + +function gnot_settings(&$a,&$s) { + + if(! local_user()) + return; + + /* Add our stylesheet to the page so we can make our settings look nice */ + + $a->page['htmlhead'] .= '' . "\r\n"; + + /* Get the current state of our config variable */ + + $gnot = intval(get_pconfig(local_user(),'gnot','enable')); + + $gnot_checked = (($gnot) ? ' checked="checked" ' : '' ); + + /* Add some HTML to the existing form */ + + $s .= '
'; + $s .= '

' . t('Gnot Settings') . '

'; + $s .= '
'; + $s .= '
' . t("Allows threading of email comment notifications on Gmail and anonymising the subject line.") . '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + /* provide a submit button */ + + $s .= '
'; + +} + + +function gnot_enotify_mail(&$a,&$b) { + if((! $b['uid']) || (! intval(get_pconfig($b['uid'], 'gnot','enable')))) + return; + if($b['type'] == NOTIFY_COMMENT) + $b['subject'] = sprintf( t('[Friendica:Notify] Comment to conversation #%d'), $b['parent']); +} + -- 2.43.0 From 4b35c8e1403c4a0aa1dc62149f93086454a0fe3d Mon Sep 17 00:00:00 2001 From: friendica Date: Mon, 27 Feb 2012 23:19:25 -0800 Subject: [PATCH 06/38] minor fixes --- wppost.tgz | Bin 2273 -> 2276 bytes wppost/wppost.php | 5 ++--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/wppost.tgz b/wppost.tgz index 6dad5c117973a78a07fc7ea29a3b82d21bed43aa..b5758f6e6c99366a5a5973d15c866826b072b12d 100755 GIT binary patch delta 2270 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 diff --git a/wppost/wppost.php b/wppost/wppost.php index 5c1482e7..f0786166 100755 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -174,8 +174,7 @@ function wppost_send(&$a,&$b) { $post = xmlify($post); $xml = <<< EOT - - + blogger.newPost @@ -194,7 +193,7 @@ EOT; if($wp_blog !== 'test') $x = post_url($wp_blog,$xml); - logger('posted to wordpress: ' . ($x) ? $x : ''); + logger('posted to wordpress: ' . (($x) ? $x : ''), LOGGER_DEBUG); } } -- 2.43.0 From 23e7a30108da87bfe42a39e9a4aa9f02034664bc Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Tue, 28 Feb 2012 02:27:12 -0500 Subject: [PATCH 07/38] added livejournal plugin --- ljpost/ljpost.php | 221 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 221 insertions(+) create mode 100644 ljpost/ljpost.php diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php new file mode 100644 index 00000000..de7567ad --- /dev/null +++ b/ljpost/ljpost.php @@ -0,0 +1,221 @@ + +* Author: Tony Baldwin +*/ + +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('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('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" ' : ''); + $b .= '
' + . t('Post to Livejournal') . '
'; + } +} + + +function ljpost_settings(&$a,&$s) { + + if(! local_user()) + return; + + /* Add our stylesheet to the page so we can make our settings look nice */ + + $a->page['htmlhead'] .= '' . "\r\n"; + + /* Get the current state of our config variables */ + + $enabled = get_pconfig(local_user(),'ljpost','post'); + + $checked = (($enabled) ? ' checked="checked" ' : ''); + + $def_enabled = get_pconfig(local_user(),'ljpost','post_by_default'); + + $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'); + + + /* Add some HTML to the existing form */ + + $s .= '
'; + $s .= '

' . t('LiveJournal Post Settings') . '

'; + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + /* provide a submit button */ + + $s .= '
'; + +} + + +function ljpost_settings_post(&$a,&$b) { + +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'])); + +} + +} + +function ljpost_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; + + $lj_post = intval(get_pconfig(local_user(),'ljpost','post')); + +$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(! $lj_enable) + return; + + if(strlen($b['postopts'])) + $b['postopts'] .= ','; + $b['postopts'] .= 'ljpost'; +} + + + + +function ljpost_send(&$a,&$b) { + + if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) + return; + + if(! strstr($b['postopts'],'ljpost')) + return; + + if($b['parent'] != $b['id']) + return; + + +$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'); + +if($lj_username && $lj_password && $lj_blog) { + +require_once('include/bbcode.php'); + +$title = '' . (($b['title']) ? $b['title'] : t('Post from Friendica')) . ''; +$post = $title . bbcode($b['body']); +$post = xmlify($post); + +$year = date('Y') +$month = date('F') +$day = date('l') +$hour = date('H') +$min = date('i') + +$xml = <<< EOT + + +LJ.XMLRPC.postevent + + +year$year +mon$month +day$day +hour$hour +min$min +usejournal$lj_blog +event$post +username$lj_username +password$lj_password +subjectfriendica post +lineendingsunix +ver1 +props + +useragentFriendica +taglistfriendica,crosspost + + + + + +EOT; + +logger('ljpost: data: ' . $xml, LOGGER_DATA); + +if($lj_blog !== 'test') +$x = post_url($lj_blog,$xml); +logger('posted to livejournal: ' . ($x) ? $x : ''); + + } +} -- 2.43.0 From 7740ca3907ff1ffe50d293997fb57dfa4e59e887 Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Tue, 28 Feb 2012 02:34:05 -0500 Subject: [PATCH 08/38] added the tarball --- ljpost.tar.gz | Bin 0 -> 2267 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 ljpost.tar.gz diff --git a/ljpost.tar.gz b/ljpost.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..b3f354fc337df7e5ff9f9f049aa1bf3b580a1d5a GIT binary patch literal 2267 zcmV<12qgC(iwFo;gG^5V18iz=Z*z1mbYXG;?OJVb+c*-=*YmGng`lzv+ltyvx|iAx zy4`H|7U?zDW)F903PUfn#Y7f;66M6$?SJ1Hilk&)PUK62!(mGVur=g7Gn_XL<-}KW zo(X5~F~ApNXsDA3P=ejSSzi?sV$lW_|UHAFn9yxqet<=af;iZJ^37#zP zT6f?4|LKSe{}&(qc{G0n8R+1n@4nmOfA{5)``q~d;0WmM3-|D7j~qOLE*s-d?*G9F z_`KC}o;_V(rot*BnnkRi zQp1K`1vaPEn&e4`E}ctYhoUFvE3!M7lu4> zHgXB46kKI}=T#kG!UdZ!cuaUYYl@oDB;0~`#l<+G;)bW!Su-%jk!=ACbQFM8A;7y0 zVa@8Mu+mn$VHYeQp!H?Lk$JN2$~^h%&fI`}usb&pAMVf%$gkzn2EY$;s^bvuXFR5Y zk{$%mj4$YYo*bhsA8z$|oKIQuwe7Qp`oM_Cu^#o>_wA?qUiay~uVbH0+D}MfAgIV` zyVH^6A~6M&a6rU|{rF0XAVV^x5b@yA37fX7oL!}p-LZy8FoT_#QIR_3XHL?p`zevZgyIqHea(jkG-^uR|9HC)I zKrG3`GKTY#QmGA`on-D!Dakmwp(OAUGV|bomMfK15WufV!U9V0NR{UFdLv}}WJh8a zN7M`L&xL_wmRy7EcxaV^EM-$cZ-oL}$uOcSFVJSmrX63F5?}oc& zN5QH>Pe!Z8xi>lsR*2~F&XU*CrbJp%qyl}vGMLyX3j_WxMTpS^zZn+9khKA_3y!lp z_p%0|Su_MTlsmBFa=C+QtY;i{@$<#IGacsi7HT!NuM;@COP^;Og+a%C4{(EPOQ)t@ z8NHAp2PwVLQhzijM3LCI^wowK7V2`+D}2+tNxk`;rW>MS&!=(CdP%o%BWA|bE3MqA zT)NrzpUXo^YbcS{#TIq2BDO4scNIsgQUhgb>rljuUY8+@Ue)SBOg*rGsfKr%O@~}_ z!x@em)9E>@&aY*3?_w|mS*d)bvBu@JvY0eiHT`6r`?^NcN!HwGhNH%4dal-JWj^m> zGy|!ORz4fUm83PpnWFOuhQspG+-P!jjlqy!Yb>}flV3la?Pe>9Rv%o&)S7){MSTq0 zEY%^jgMkc7ot5;YF;(5$2!Bb;*|(F`4EmNr2K{Aa&00CDp059WNrU4FI?n|QDe*{_ z`!gnpp9=xqUXwGa;4s!Et6gg`YgPBGN!3bii1p|z(E~2{D5-_1F@V%g&9?4pS>;us zdR=Kj&wAV5AD_Sfc%ge5CD-oA1zE%1tE+DX66=$m{oH|8pdm)Ji`s-MW1%r;%uglI0@^;R_%=jHANysJ>Dm!$nf^cJ((=tZ({ZBUXfnqIlmjU|v zg@^q9J6YK=c`_u(oHJ>f6=tN*Q?`KH09;srQxZJXU`5W_U0Fp&<4b|=ri*s1XvHT5kW~(t?@^xv8jh-8M#p#I1=Cw^?{VcQw~a+>?*!4R5;D z`KAswR$O?~m}U2wwi~28%kHzUqjYXC1(c%xsLu>3m6FzKK~;nTT>SRjR%g*MR#5M_ zxUfOJ?2@zhZ{MDN82|YC;&tV8lII#8_qL#TT0^ykT3h_Gn8s#F7cqcM3y~F5Hnws3 p8o!X%-oKSc(5-o&`WJke|G)lEfN$g5_%{A*;}1Kp{X+mK001^3Y~cU^ literal 0 HcmV?d00001 -- 2.43.0 From c76f70605f6a470b40f81ff6730509faec8cb66f Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 28 Feb 2012 00:12:18 -0800 Subject: [PATCH 09/38] add ljpost.css --- ljpost/ljpost.css | 16 ++++++++++++++++ ljpost/ljpost.php | 5 ----- wppost.tgz | Bin 2276 -> 2269 bytes 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100755 ljpost/ljpost.css diff --git a/ljpost/ljpost.css b/ljpost/ljpost.css new file mode 100755 index 00000000..50a3d4a0 --- /dev/null +++ b/ljpost/ljpost.css @@ -0,0 +1,16 @@ + +#ljpost-enable-label, #ljpost-username-label, #ljpost-password-label, #ljpost-blog-label, #ljpost-bydefault-label { + float: left; + width: 200px; + margin-top: 10px; +} + +#ljpost-checkbox, #ljpost-username, #ljpost-password, #ljpost-blog, #ljpost-bydefault { + float: left; + margin-top: 10px; +} + +#ljpost-submit { + margin-top: 15px; +} + diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index de7567ad..a55a7bf4 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -23,11 +23,6 @@ function ljpost_uninstall() { 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'); - } diff --git a/wppost.tgz b/wppost.tgz index b5758f6e6c99366a5a5973d15c866826b072b12d..50e9234c628c5420149913152f874806d1fbb167 100755 GIT binary patch delta 2244 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 i&!6AQ>;1p=W44p62qTle2n-DW Date: Tue, 28 Feb 2012 15:03:48 -0800 Subject: [PATCH 10/38] ljpost typos --- ljpost/ljpost.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index a55a7bf4..3b2bbe8b 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -171,11 +171,11 @@ $title = '' . (($b['title']) ? $b['title'] : t('Post from Friendica')) . $post = $title . bbcode($b['body']); $post = xmlify($post); -$year = date('Y') -$month = date('F') -$day = date('l') -$hour = date('H') -$min = date('i') +$year = date('Y'); +$month = date('F'); +$day = date('l'); +$hour = date('H'); +$min = date('i'); $xml = <<< EOT -- 2.43.0 From 8427fe4e03df638b91ed3ee7505ee07531d18a9b Mon Sep 17 00:00:00 2001 From: friendica <info@friendica.com> Date: Tue, 28 Feb 2012 18:41:24 -0800 Subject: [PATCH 11/38] descriptive text for qcomment settings --- qcomment.tgz | Bin 1426 -> 1489 bytes qcomment/qcomment.php | 1 + 2 files changed, 1 insertion(+) diff --git a/qcomment.tgz b/qcomment.tgz index 76dffda1c46b5eac43e558fa50e9ffa378a801e4..1ab55a43f8d3a0cc5b146950d35c7a65b5211726 100644 GIT binary patch literal 1489 zcmV;?1ups@iwFQtkWEhj1MOFBZ`(Ey&R6?a+|;153&(GXlOl~X3|$8dSl1RUwhwI) z&=O^Fp-6?K>=;G=`|c>oiJb%~hNK%X9a_Yu$b0U&J3eP!L^{j3a)X`6vmx5i(PU>l zIXD`R4|ax=!|~z4$gfwnGa4O@_xDHmak4WUjVDKkJ1}{~nATQU#|*$u#-h0}3!(1V zm(M4Mqvy|`e~*~Hqg~YXuRrwjG=E@>d+I+qJUG~@|73K4^&dWP9Jkv4y#6OYV!hk# z_TbsGHavshS;mjyT_K`#cv&_CE&t4IWJK<SR>$yRsUecIqiPvTTmIn2`p2XGkiP#^ zxKx{CcrDI3ysncAC#iG!@nEn{cORV$a-$O=`5?p1r*xYBzcqRxVs3$f<qmWLj$b+m ztP*+7oef}_iYSGMDVT8(%5vj)j31oFGgWY~6e`wBn61j7g_?s_;8LFT3FQ}ItOKst zOmbQU7RUHp_$^>p*6|G2GF-@+;<E2!`;c-4oFRISym3DT;h2!x&^cisO0|eMMZMG} zw&d_VcMjq0-sxLe%&#rfXz%Kn34+l2@T(F|Fez7{G}Lz#Q(`#eWq#rw%nC=G7J@H{ zo)5fsowGUbVLD=-utK^jl>~4Vngv_T=NzfVeWGT0om3V@Jg1~~%8I`)W|?qZK$<)j z^dO=9_2Cue!q-O%#li60pc@L6pb%ap2{*)TEj0egYo=Dd7+B|}kP=d)<QZHeJJSnJ zkOCKC!5qhQu=p<)kv}XpZLd=&RF2u0=}Rb-6Ou4ix<KDHrLBeKW$odO0;@A#gX5nS zWNbyO7s3i`2j3rmvPBtBrs*s*x==AF&deRK3?FaC?|Io2o3P0H@X{v|%SFtw1_VMe zP;@%yYQt^Syh%YFK%UDk-vH>B-58X$2`V`M1%x9K_;1i|CxwdW2ComEp)-fQ)#<{Q zcFXX&zz#5Hsn+M6F!wEbR`*fZgV5iM!L1X69<SZ{eOD*DFYa@GmTT+&IYN0HVcK8Y zx6v%r2GK%2D%JbkKPcH-`EDNQJl$ozr@NN8w_76V`~Xr%OrBvon@+deZeev?VHCOq zv;k^&9D^<lShtegrkt;D8L0_g8(5YKkuel^zq6JbiIhQ+@=?o?zg@O>O2<Bismo-_ zSsZ?b{uII!REl#{3ONm~fC2!w%K0=PEg3`>RX#O5nFb;By{kEQXESDbVW^ya2nToN z5f9U$FaWO_(*QdlfWav(2A|9)6(Hl*ZmEG&Ajf&6RU+n{>j~<uD-rfWzuA`=6Imaf zP9b5^a!Tdeo$G|hd)=_>!Bl{M{7UEg3N1-3eKmcmY?+u?EO1ycYcVtR%$Q+J=fP?C zVq<5z@9ChQjhVfkEFLX98PL8LH!wsz4Qg_GOT%!i8V}LBa~ICzD5x-l5_4lHC0FuT zYZ!_mw>>YmPLR~1#K&CKN?2=OHO|0_ESG+QNWpDCs2E@*+Y}_5ak&|uUkWe^bDbHL zqz*cKrSNLP#YX5o)MHMg+)uAEX>c;|-nLPxF_9_T%AUu#*1G{H{4I5JhYy2pg3Wn^ zlRZkAv7JI)W>O@ps;9aY=^AT02A_@VZ4yb$cyPK-)4lCf&WCl;;q;`OU?l-tjgk$D z_2L$<dii#Q02WLZyu81d{c=c^8K%p)j<~hKjVN5n(%1V{&dXvYb+d1gI)8!B-oAPN z;bXYPCH(B?M9Y4=BJ}F=ZF?*qf9{fGw1i4@=jLTyi>Jlk8gbtz=hd6v=*U;%{+Pf2 zZ<Wml#<=hOe;?oZ=>2avJ{nIZNB;e9a?rg0eGh9t+0;&I{6uQzjzRLoVGAxr?9yY{ z9}e?N{F*U?zh?HF&hb^xFJXs1+3fe5PHvv6{f;WX_|h~_@xW-}zi)c2e$9T_ax|&n r|Lr6;)>vbWHP%>TjWyO-V~sV|SYwSf)>vbW{Ri!DlOcU~04M+eqxt6n literal 1426 zcmV;D1#S8tiwFSsc0o@71MOFBZ`(Ey&e!-?+_a#w3&*nEI4RQD!_alWfOT!rV*Ah* z0WDD$7m8F#%8pU=zweH+9KWPUF{JH)>5#zo@!p<$qx2!xdCrxK4!$1sk<QLW2gA|H z*>HGr&>x)+PfrG(zoLV|;B43*o()H%vxEL%cse*efYDcsX-%bd%m5tZES?E77wR)| z#cXssc>MVBw}|N*(ucbK^_O0e75D7pj{1*I2E(2Dj|TVw{d<n%R{EdU|KcaCcdONk z9zJZrL->Q`{2X4DBEEvBRYMT_7j9!C3MaHWhc^oiu_TFA%UBZmlN;-g2faT1{<(CS zHs|nMTyc0_Cl@X<=Zf<vTBo~*Mxw&#R7f7>C_Eu;`hRKkTqN8A1Ir!g6db>H5LhLO zf;$_)A`@{2F;g(*Ae80C@dUp(jXJB~U?EhZ7cgB`K?^klt-xhG?~#{Zg|QB}VpGY9 z3oJ?STzC<%OY3-!yc`(?Q(X3ZY;Q8IfHU-7Aa0bWARH4?8`2X7;!KN}Q`8G>5=#bO zbLY^#J)XRj<!pmddwW&KOfJY<4}Md^2`1$dl!kgnF(rmWQROG;!nAaRX)gGJ;Q7F7 z(*>LHE~X>lDJ!L0rIH-ngl55(vl&OINspjeUMH2sF)t{o?W*Fh%V{oL2M{Jt1RbQ5 zzaBiJT=@D(p*R>`7&Jqnk}GsC(v%y*wq7*;<T+DIUkt4CLP!Z2Lh=YUz)tm?lS_e& zL@>uO9W42q#bghQP2zRxgeou_Q+*Akazc`ir7qF7%}BJgysACCP+)b=Yv=f}gq$r2 z^;}qi?cn?4FE+2@$u;RRqf3>5;>>);EyLsO_&qM0VH1``51#r&Vz~%8)_|N)3>2L% zxY{ziYTmS@4j{`_mv1@fRoxg=wFy@4{0|V0K;U20YNe%$X@b{^muSpkZ?!w{v2|$p zOkf9?%S`L5c3Aipy{!8v>_X@#Bf9m*pyRb!FL$Had2*NW%R*cC?>$uN=%)3lbsNl5 zZ2>LSSA}|)`FjO>E8cB|_JbqVeQ;z6d+Si7?H@qun8{0QXVdO<T8CI2R~m&T0V%@W zog|=31J*4iw;AW_DWh$IV*`t7L*xvXyO*rjjYP<xX!B9ak-Z~!JR!BWVdip~ah8Pd zp*M!`0yo7KZVEXLZX5*wZdvegK)WQ0EpGYD@N^u6(DSBd++9wY<)xu=_8^Qtmq%14 zr7!@$HO2vUKmgH%n87>qP6deg@Tl5>V<5vttW_#z?ac&r*Odsnp%?aL#zfYt<1wU6 zT2854n{(~({J0Z#yfYQxhv&36ImD7$`fB=A*(x!KnB!%|ti{aKcg7TBx(X)YlP$^Y zk%xnJw(jip&Ema<7ZJ%l+4CWiaZrOhUKobgs@ZcP*_6v|QO^n>)n-$lfCqIr&lC;- zd?+^`6S}zdI9-_jj;KO|i^yBs^-AT(OOEZt=zVN-NB|0-SoS4+7}RgJ;4$8xamI{o zm+Cr~B3-U3*I6Z}_O%;BggKgQ79*Cp_Jc`v5Pm_?sx7=uEle(|d!hnhR||U!V$Iya zRkLsR5Wt+tl2=oL*{`mGD#O(B>xd7xun~lt;s12^F7eA}wNR#CvQYe(T)uqq`pw&L z2TS<gZ{tJz<#X4q%eQN>I)2}w!8{Zy)$RR}Sg$CHH+s_Z$$9qTcT)L8*uVFa`1he( z*XBL@xa<A@QGc}m{&&*6|9uN;{kXl=X(UsrnL7u`Q-{N`5Q)pq;ZeU|T;tE28GM>K zcDle<J<r0~`Eh#^_l@jp)piFfyZF*H%TQr3^1rvOuAXK;?id=a+<)&RHq=l<4K>tI gLk%_5P(uwh)KEhWHPlc;4gCk{ABFtq4FD(r0Kyj0qyPW_ diff --git a/qcomment/qcomment.php b/qcomment/qcomment.php index 45e6332e..6b372579 100755 --- a/qcomment/qcomment.php +++ b/qcomment/qcomment.php @@ -53,6 +53,7 @@ function qcomment_addon_settings(&$a,&$s) { $s .= '<div class="settings-block">'; $s .= '<h3>' . t('Quick Comment Settings') . '</h3>'; $s .= '<div id="qcomment-wrapper">'; + $s .= '<div id="qcomment-desc">' . t("Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.") . '</div>'; $s .= '<label id="qcomment-label" for="qcomment-words">' . t('Enter quick comments, one per line') . ' </label>'; $s .= '<textarea id="qcomment-words" type="text" name="qcomment-words" >' . htmlspecialchars(unxmlify($words)) . '</textarea>'; $s .= '</div><div class="clear"></div>'; -- 2.43.0 From b0a59bd21a697b88a491fa454a1856e3f746d92c Mon Sep 17 00:00:00 2001 From: friendica <info@friendica.com> Date: Tue, 28 Feb 2012 20:54:02 -0800 Subject: [PATCH 12/38] some small improvements to ljpost --- ljpost.tgz | Bin 0 -> 2502 bytes ljpost/ljpost.css | 4 +- ljpost/ljpost.php | 176 +++++++++++++++++++++++----------------------- 3 files changed, 90 insertions(+), 90 deletions(-) create mode 100644 ljpost.tgz mode change 100644 => 100755 ljpost/ljpost.php diff --git a/ljpost.tgz b/ljpost.tgz new file mode 100644 index 0000000000000000000000000000000000000000..2af2a685aa0c8d000186514368467a2b70eb9c60 GIT binary patch literal 2502 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 Q(xeIKPsmd({s2$_0I*!jT>t<8 literal 0 HcmV?d00001 diff --git a/ljpost/ljpost.css b/ljpost/ljpost.css index 50a3d4a0..e0494c5c 100755 --- a/ljpost/ljpost.css +++ b/ljpost/ljpost.css @@ -1,11 +1,11 @@ -#ljpost-enable-label, #ljpost-username-label, #ljpost-password-label, #ljpost-blog-label, #ljpost-bydefault-label { +#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-blog, #ljpost-bydefault { +#ljpost-checkbox, #ljpost-username, #ljpost-password, #ljpost-bydefault { float: left; margin-top: 10px; } diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php old mode 100644 new mode 100755 index 3b2bbe8b..1ea8dfe5 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -1,43 +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'); } - - 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>'; } } @@ -49,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 */ @@ -61,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 */ @@ -85,14 +82,9 @@ $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><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 */ @@ -104,37 +96,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; @@ -158,59 +149,68 @@ 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 = 'http://www.livejournal.com/interface/xmlrpc'; -$title = '<title>' . (($b['title']) ? $b['title'] : t('Post from Friendica')) . ''; -$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']) ? $b['title'] : t('[no subject]')); + $post = bbcode($b['body']); + $post = xmlify($post); - -LJ.XMLRPC.postevent - - -year$year -mon$month -day$day -hour$hour -min$min -usejournal$lj_blog -event$post -username$lj_username -password$lj_password -subjectfriendica post -lineendingsunix -ver1 -props - -useragentFriendica -taglistfriendica,crosspost - - - + $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 + + + LJ.XMLRPC.postevent + + + + username$lj_username + password$lj_password + event$post + subject$title + lineendingsunix + year$year + mon$mon + day$day + hour$hour + min$min + + + 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); } } + -- 2.43.0 From 199df2a28bedc1fefb40d958127e60045ce44004 Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 28 Feb 2012 21:21:03 -0800 Subject: [PATCH 13/38] inconsistent file extension --- ljpost.tar.gz | Bin 2267 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 ljpost.tar.gz diff --git a/ljpost.tar.gz b/ljpost.tar.gz deleted file mode 100644 index b3f354fc337df7e5ff9f9f049aa1bf3b580a1d5a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2267 zcmV<12qgC(iwFo;gG^5V18iz=Z*z1mbYXG;?OJVb+c*-=*YmGng`lzv+ltyvx|iAx zy4`H|7U?zDW)F903PUfn#Y7f;66M6$?SJ1Hilk&)PUK62!(mGVur=g7Gn_XL<-}KW zo(X5~F~ApNXsDA3P=ejSSzi?sV$lW_|UHAFn9yxqet<=af;iZJ^37#zP zT6f?4|LKSe{}&(qc{G0n8R+1n@4nmOfA{5)``q~d;0WmM3-|D7j~qOLE*s-d?*G9F z_`KC}o;_V(rot*BnnkRi zQp1K`1vaPEn&e4`E}ctYhoUFvE3!M7lu4> zHgXB46kKI}=T#kG!UdZ!cuaUYYl@oDB;0~`#l<+G;)bW!Su-%jk!=ACbQFM8A;7y0 zVa@8Mu+mn$VHYeQp!H?Lk$JN2$~^h%&fI`}usb&pAMVf%$gkzn2EY$;s^bvuXFR5Y zk{$%mj4$YYo*bhsA8z$|oKIQuwe7Qp`oM_Cu^#o>_wA?qUiay~uVbH0+D}MfAgIV` zyVH^6A~6M&a6rU|{rF0XAVV^x5b@yA37fX7oL!}p-LZy8FoT_#QIR_3XHL?p`zevZgyIqHea(jkG-^uR|9HC)I zKrG3`GKTY#QmGA`on-D!Dakmwp(OAUGV|bomMfK15WufV!U9V0NR{UFdLv}}WJh8a zN7M`L&xL_wmRy7EcxaV^EM-$cZ-oL}$uOcSFVJSmrX63F5?}oc& zN5QH>Pe!Z8xi>lsR*2~F&XU*CrbJp%qyl}vGMLyX3j_WxMTpS^zZn+9khKA_3y!lp z_p%0|Su_MTlsmBFa=C+QtY;i{@$<#IGacsi7HT!NuM;@COP^;Og+a%C4{(EPOQ)t@ z8NHAp2PwVLQhzijM3LCI^wowK7V2`+D}2+tNxk`;rW>MS&!=(CdP%o%BWA|bE3MqA zT)NrzpUXo^YbcS{#TIq2BDO4scNIsgQUhgb>rljuUY8+@Ue)SBOg*rGsfKr%O@~}_ z!x@em)9E>@&aY*3?_w|mS*d)bvBu@JvY0eiHT`6r`?^NcN!HwGhNH%4dal-JWj^m> zGy|!ORz4fUm83PpnWFOuhQspG+-P!jjlqy!Yb>}flV3la?Pe>9Rv%o&)S7){MSTq0 zEY%^jgMkc7ot5;YF;(5$2!Bb;*|(F`4EmNr2K{Aa&00CDp059WNrU4FI?n|QDe*{_ z`!gnpp9=xqUXwGa;4s!Et6gg`YgPBGN!3bii1p|z(E~2{D5-_1F@V%g&9?4pS>;us zdR=Kj&wAV5AD_Sfc%ge5CD-oA1zE%1tE+DX66=$m{oH|8pdm)Ji`s-MW1%r;%uglI0@^;R_%=jHANysJ>Dm!$nf^cJ((=tZ({ZBUXfnqIlmjU|v zg@^q9J6YK=c`_u(oHJ>f6=tN*Q?`KH09;srQxZJXU`5W_U0Fp&<4b|=ri*s1XvHT5kW~(t?@^xv8jh-8M#p#I1=Cw^?{VcQw~a+>?*!4R5;D z`KAswR$O?~m}U2wwi~28%kHzUqjYXC1(c%xsLu>3m6FzKK~;nTT>SRjR%g*MR#5M_ zxUfOJ?2@zhZ{MDN82|YC;&tV8lII#8_qL#TT0^ykT3h_Gn8s#F7cqcM3y~F5Hnws3 p8o!X%-oKSc(5-o&`WJke|G)lEfN$g5_%{A*;}1Kp{X+mK001^3Y~cU^ -- 2.43.0 From e964ed80087532a507772d6081c630c70bfe51fa Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 28 Feb 2012 22:41:01 -0800 Subject: [PATCH 14/38] seems the subject isn't really required, contrary to the docs. --- ljpost/ljpost.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php index 1ea8dfe5..6a85d8f2 100755 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -170,7 +170,7 @@ function ljpost_send(&$a,&$b) { require_once('include/bbcode.php'); require_once('include/datetime.php'); - $title = (($b['title']) ? $b['title'] : t('[no subject]')); + $title = $b['title']; $post = bbcode($b['body']); $post = xmlify($post); -- 2.43.0 From 665ffab5c7572ba274402e9d42736590383d185d Mon Sep 17 00:00:00 2001 From: friendica Date: Tue, 28 Feb 2012 22:41:33 -0800 Subject: [PATCH 15/38] rebuild tgz --- ljpost.tgz | Bin 2502 -> 2494 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/ljpost.tgz b/ljpost.tgz index 2af2a685aa0c8d000186514368467a2b70eb9c60..5189d6e09312ad392b92620e95eda3e691992840 100644 GIT binary patch literal 2494 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 Q(xeIKPsmd({s2$_0I*!jT>t<8 -- 2.43.0 From 5a4ca9459ddf60d4b19748625b73015ff6149a92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B6=C3=9Fl?= Date: Wed, 29 Feb 2012 14:06:19 +0000 Subject: [PATCH 16/38] Real-Time Updates --- facebook/README | 5 +- facebook/facebook.php | 348 +++++++++++++++++++++++++----------------- 2 files changed, 210 insertions(+), 143 deletions(-) diff --git a/facebook/README b/facebook/README index ee7e489b..e2a3c838 100755 --- a/facebook/README +++ b/facebook/README @@ -23,7 +23,10 @@ Installing the Friendica/Facebook connector and click 'Install Facebook Connector'. 4. This will ask you to login to Facebook and grant permission to the plugin to do its stuff. Allow it to do so. -5. You're done. To turn it off visit the Plugin Settings page again and +5. Optional step: If you want to use Facebook Real Time Updates (so new messages + and new contacts are added ~1min after they are postet / added on FB), go to + Settings -> plugins -> facebook and press the "Activate Real-Time Updates"-button. +6. You're done. To turn it off visit the Plugin Settings page again and 'Remove Facebook posting'. Vidoes and embeds will not be posted if there is no other content. Links diff --git a/facebook/facebook.php b/facebook/facebook.php index 039b27ff..0e30b62b 100755 --- a/facebook/facebook.php +++ b/facebook/facebook.php @@ -1,8 +1,9 @@ + * Tobias Hößl */ /** @@ -31,7 +32,10 @@ * and click 'Install Facebook Connector'. * 4. This will ask you to login to Facebook and grant permission to the * plugin to do its stuff. Allow it to do so. - * 5. You're done. To turn it off visit the Plugin Settings page again and + * 5. Optional step: If you want to use Facebook Real Time Updates (so new messages + * and new contacts are added ~1min after they are postet / added on FB), go to + * Settings -> plugins -> facebook and press the "Activate Real-Time Updates"-button. + * 6. You're done. To turn it off visit the Plugin Settings page again and * 'Remove Facebook posting'. * * Vidoes and embeds will not be posted if there is no other content. Links @@ -53,6 +57,8 @@ function facebook_install() { register_hook('connector_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); register_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron'); register_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook'); + + if (get_config('facebook', 'realtime_active') == 1) facebook_subscription_add_users(); // Restore settings, if the plugin was installed before } @@ -67,6 +73,8 @@ function facebook_uninstall() { // hook moved unregister_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook'); unregister_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); + + if (get_config('facebook', 'realtime_active') == 1) facebook_subscription_del_users(); } @@ -113,7 +121,7 @@ function facebook_init(&$a) { return; } - $affected_users = array("feed" => array(), "friends" => array(), "activities" => array()); + $affected_users = array("feed" => array(), "friends" => array()); foreach ($js->entry as $entry) { $fbuser = $entry->uid; @@ -123,19 +131,20 @@ function facebook_init(&$a) { continue; } if (in_array($fbuser, $affected_users[$field])) continue; + + $r = q("SELECT `uid` FROM `pconfig` WHERE `cat` = 'facebook' AND `k` = 'self_id' AND `v` = '%s' LIMIT 1", dbesc($fbuser)); + if(! count($r)) + continue; + $uid = $r[0]['uid']; + + $access_token = get_pconfig($uid,'facebook','access_token'); + if(! $access_token) + return; + switch ($field) { case "feed": logger('facebook_init: FB-User ' . $fbuser . ' / feed', LOGGER_DEBUG); - $r = q("SELECT `uid` FROM `pconfig` WHERE `cat` = 'facebook' AND `k` = 'self_id' AND `v` = '%s' LIMIT 1", dbesc($fbuser)); - if(! count($r)) - continue; - $uid = $r[0]['uid']; - - $access_token = get_pconfig($uid,'facebook','access_token'); - if(! $access_token) - return; - if(! get_pconfig($uid,'facebook','no_wall')) { $private_wall = intval(get_pconfig($uid,'facebook','private_wall')); $s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token); @@ -147,12 +156,14 @@ function facebook_init(&$a) { } break; - case "friend": - // @TODO - break; - case "activities": - //@TODO + case "friends": + logger('facebook_init: FB-User ' . $fbuser . ' / friends', LOGGER_DEBUG); + + fb_get_friends($uid, false); + set_pconfig($uid,'facebook','friend_check',time()); break; + default: + logger('facebook_init: Unknown callback field for ' . $fbuser, LOGGER_NORMAL); } $affected_users[$field][] = $fbuser; } @@ -171,8 +182,8 @@ function facebook_init(&$a) { return; $uid = $r[0]['uid']; - $auth_code = (($_GET['code']) ? $_GET['code'] : ''); - $error = (($_GET['error_description']) ? $_GET['error_description'] : ''); + $auth_code = (x($_GET, 'code') ? $_GET['code'] : ''); + $error = (x($_GET, 'error_description') ? $_GET['error_description'] : ''); if($error) @@ -199,7 +210,7 @@ function facebook_init(&$a) { if(get_pconfig($uid,'facebook','no_linking') === false) set_pconfig($uid,'facebook','no_linking',1); fb_get_self($uid); - fb_get_friends($uid); + fb_get_friends($uid, true); fb_consume_all($uid); } @@ -220,9 +231,130 @@ function fb_get_self($uid) { } } +function fb_get_friends_sync_new($uid, $access_token, $person) { + $link = 'http://facebook.com/profile.php?id=' . $person->id; + + $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1", + intval($uid), + dbesc($link) + ); + + if (count($r) == 0) { + logger('fb_get_friends: new contact found: ' . $link, LOGGER_DEBUG); + + fb_get_friends_sync_full($uid, $access_token, $person); + } +} +function fb_get_friends_sync_full($uid, $access_token, $person) { + $s = fetch_url('https://graph.facebook.com/' . $person->id . '?access_token=' . $access_token); + if($s) { + $jp = json_decode($s); + logger('fb_get_friends: info: ' . print_r($jp,true), LOGGER_DATA); -function fb_get_friends($uid) { + // always use numeric link for consistency + + $jp->link = 'http://facebook.com/profile.php?id=' . $person->id; + + // check if we already have a contact + + $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1", + intval($uid), + dbesc($jp->link) + ); + + if(count($r)) { + + // check that we have all the photos, this has been known to fail on occasion + + if((! $r[0]['photo']) || (! $r[0]['thumb']) || (! $r[0]['micro'])) { + require_once("Photo.php"); + + $photos = import_profile_photo('https://graph.facebook.com/' . $jp->id . '/picture', $uid, $r[0]['id']); + + $r = q("UPDATE `contact` SET `photo` = '%s', + `thumb` = '%s', + `micro` = '%s', + `name-date` = '%s', + `uri-date` = '%s', + `avatar-date` = '%s' + WHERE `id` = %d LIMIT 1 + ", + dbesc($photos[0]), + dbesc($photos[1]), + dbesc($photos[2]), + dbesc(datetime_convert()), + dbesc(datetime_convert()), + dbesc(datetime_convert()), + intval($r[0]['id']) + ); + } + continue; + } + else { + + // create contact record + $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `addr`, `alias`, `notify`, `poll`, + `name`, `nick`, `photo`, `network`, `rel`, `priority`, + `writable`, `blocked`, `readonly`, `pending` ) + VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ", + intval($uid), + dbesc(datetime_convert()), + dbesc($jp->link), + dbesc(normalise_link($jp->link)), + dbesc(''), + dbesc(''), + dbesc($jp->id), + dbesc('facebook ' . $jp->id), + dbesc($jp->name), + dbesc(($jp->nickname) ? $jp->nickname : strtolower($jp->first_name)), + dbesc('https://graph.facebook.com/' . $jp->id . '/picture'), + dbesc(NETWORK_FACEBOOK), + intval(CONTACT_IS_FRIEND), + intval(1), + intval(1) + ); + } + + $r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1", + dbesc($jp->link), + intval($uid) + ); + + if(! count($r)) { + continue; + } + + $contact = $r[0]; + $contact_id = $r[0]['id']; + + require_once("Photo.php"); + + $photos = import_profile_photo($r[0]['photo'],$uid,$contact_id); + + $r = q("UPDATE `contact` SET `photo` = '%s', + `thumb` = '%s', + `micro` = '%s', + `name-date` = '%s', + `uri-date` = '%s', + `avatar-date` = '%s' + WHERE `id` = %d LIMIT 1 + ", + dbesc($photos[0]), + dbesc($photos[1]), + dbesc($photos[2]), + dbesc(datetime_convert()), + dbesc(datetime_convert()), + dbesc(datetime_convert()), + intval($contact_id) + ); + + } +} + +// if $fullsync is true, only new contacts are searched for + +function fb_get_friends($uid, $fullsync = true) { $r = q("SELECT `uid` FROM `user` WHERE `uid` = %d AND `account_expired` = 0 LIMIT 1", intval($uid) @@ -245,111 +377,11 @@ function fb_get_friends($uid) { logger('facebook: fb_get_friends: json: ' . print_r($j,true), LOGGER_DATA); if(! $j->data) return; - foreach($j->data as $person) { - $s = fetch_url('https://graph.facebook.com/' . $person->id . '?access_token=' . $access_token); - if($s) { - $jp = json_decode($s); - logger('fb_get_friends: info: ' . print_r($jp,true), LOGGER_DATA); - - // always use numeric link for consistency - - $jp->link = 'http://facebook.com/profile.php?id=' . $person->id; - - // check if we already have a contact - - $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1", - intval($uid), - dbesc($jp->link) - ); - - if(count($r)) { - - // check that we have all the photos, this has been known to fail on occasion - - if((! $r[0]['photo']) || (! $r[0]['thumb']) || (! $r[0]['micro'])) { - require_once("Photo.php"); - - $photos = import_profile_photo('https://graph.facebook.com/' . $jp->id . '/picture', $uid, $r[0]['id']); - - $r = q("UPDATE `contact` SET `photo` = '%s', - `thumb` = '%s', - `micro` = '%s', - `name-date` = '%s', - `uri-date` = '%s', - `avatar-date` = '%s' - WHERE `id` = %d LIMIT 1 - ", - dbesc($photos[0]), - dbesc($photos[1]), - dbesc($photos[2]), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - intval($r[0]['id']) - ); - } - continue; - } - else { - - // create contact record - $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `addr`, `alias`, `notify`, `poll`, - `name`, `nick`, `photo`, `network`, `rel`, `priority`, - `writable`, `blocked`, `readonly`, `pending` ) - VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ", - intval($uid), - dbesc(datetime_convert()), - dbesc($jp->link), - dbesc(normalise_link($jp->link)), - dbesc(''), - dbesc(''), - dbesc($jp->id), - dbesc('facebook ' . $jp->id), - dbesc($jp->name), - dbesc(($jp->nickname) ? $jp->nickname : strtolower($jp->first_name)), - dbesc('https://graph.facebook.com/' . $jp->id . '/picture'), - dbesc(NETWORK_FACEBOOK), - intval(CONTACT_IS_FRIEND), - intval(1), - intval(1) - ); - } - - $r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1", - dbesc($jp->link), - intval($uid) - ); - - if(! count($r)) { - continue; - } - - $contact = $r[0]; - $contact_id = $r[0]['id']; - - require_once("Photo.php"); - - $photos = import_profile_photo($r[0]['photo'],$uid,$contact_id); - - $r = q("UPDATE `contact` SET `photo` = '%s', - `thumb` = '%s', - `micro` = '%s', - `name-date` = '%s', - `uri-date` = '%s', - `avatar-date` = '%s' - WHERE `id` = %d LIMIT 1 - ", - dbesc($photos[0]), - dbesc($photos[1]), - dbesc($photos[2]), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - dbesc(datetime_convert()), - intval($contact_id) - ); - - } - } + foreach($j->data as $person) + if ($fullsync) + fb_get_friends_sync_full($uid, $access_token, $person); + else + fb_get_friends_sync_new($uid, $access_token, $person); } } @@ -394,7 +426,7 @@ function facebook_post(&$a) { elseif(intval($no_linking) && intval($linkvalue)) { // FB linkage is now allowed - import stuff. fb_get_self($uid); - fb_get_friends($uid); + fb_get_friends($uid, true); fb_consume_all($uid); } @@ -419,7 +451,7 @@ function facebook_content(&$a) { } if($a->argc > 1 && $a->argv[1] === 'friends') { - fb_get_friends(local_user()); + fb_get_friends(local_user(), true); info( t('Updating contacts') . EOL); } @@ -537,13 +569,40 @@ function facebook_cron($a,$b) { if($last_friend_check) $next_friend_check = $last_friend_check + 86400; if($next_friend_check <= time()) { - fb_get_friends($rr['uid']); + fb_get_friends($rr['uid'], true); set_pconfig($rr['uid'],'facebook','friend_check',time()); } fb_consume_all($rr['uid']); } - } - + } + + if (get_config('facebook', 'realtime_active') == 1) { + if (!facebook_check_realtime_active()) { + + logger('facebook_cron: Facebook is not sending Real-Time Updates any more, although it is supposed to. Trying to fix it...', LOGGER_NORMAL); + facebook_subscription_add_users(); + + if (facebook_check_realtime_active()) + logger('facebook_cron: Successful', LOGGER_NORMAL); + else { + logger('facebook_cron: Failed', LOGGER_NORMAL); + + if(strlen($a->config['admin_email']) && !get_config('facebook', 'realtime_err_mailsent')) { + $res = mail($a->config['admin_email'], t('Problems with Facebook Real-Time Updates'), + "Hi!\n\nThere's a problem with the Facebook Real-Time Updates that cannob be solved automatically. Maybe an permission issue?\n\nThis e-mail will only be sent once.", + 'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n" + . 'Content-type: text/plain; charset=UTF-8' . "\n" + . 'Content-transfer-encoding: 8bit' + ); + + set_config('facebook', 'realtime_err_mailsent', 1); + } + } + } else { // !facebook_check_realtime_active() + del_config('facebook', 'realtime_err_mailsent'); + } + } + set_config('facebook','last_poll', time()); } @@ -562,12 +621,7 @@ function facebook_plugin_settings(&$a,&$b) { function facebook_plugin_admin(&$a, &$o){ - $activated = false; - $access_token = fb_get_app_access_token(); - if ($access_token) { - $ret = facebook_subscriptions_get(); - if (is_array($ret)) foreach ($ret as $re) if (is_object($re) && $re->object == "user") $activated = true; - } + $activated = facebook_check_realtime_active(); if ($activated) { $o = t('Real-Time Updates are activated.') . '

'; $o .= ''; @@ -1300,7 +1354,9 @@ function facebook_subscription_del_users() { $access_token = fb_get_app_access_token(); $url = "https://graph.facebook.com/" . get_config('facebook', 'appid' ) . "/subscriptions?access_token=" . $access_token; - delete_url($url); + facebook_delete_url($url); + + del_config('facebook', 'realtime_active'); } function facebook_subscription_add_users() { @@ -1318,7 +1374,7 @@ function facebook_subscription_add_users() { $j = post_url($url,array( "object" => "user", - "fields" => "feed,friends,activities", + "fields" => "feed,friends", "callback_url" => $cb, "verify_token" => $verify_token, )); @@ -1326,12 +1382,15 @@ function facebook_subscription_add_users() { if ($j) { logger("Facebook reponse: " . $j, LOGGER_DATA); + + if (facebook_check_realtime_active()) set_config('facebook', 'realtime_active', 1); }; } function facebook_subscriptions_get() { $access_token = fb_get_app_access_token(); + if (!$access_token) return null; $url = "https://graph.facebook.com/" . get_config('facebook', 'appid' ) . "/subscriptions?access_token=" . $access_token; $j = fetch_url($url); @@ -1344,15 +1403,20 @@ function facebook_subscriptions_get() { } - +function facebook_check_realtime_active() { + $ret = facebook_subscriptions_get(); + if (is_null($ret)) return false; + if (is_array($ret)) foreach ($ret as $re) if (is_object($re) && $re->object == "user") return true; + return false; +} // DELETE-request to $url -if(! function_exists('delete_url')) { -function delete_url($url,$headers = null, &$redirects = 0, $timeout = 0) { +if(! function_exists('facebook_delete_url')) { +function facebook_delete_url($url,$headers = null, &$redirects = 0, $timeout = 0) { $a = get_app(); $ch = curl_init($url); if(($redirects > 8) || (! $ch)) -- 2.43.0 From b616382cbd07855c64a429ba03e81f5594cfeb55 Mon Sep 17 00:00:00 2001 From: friendica Date: Wed, 29 Feb 2012 16:28:28 -0800 Subject: [PATCH 17/38] Add Thomas Willingham contributed alternate version --- communityhome.tgz | Bin 3662 -> 4127 bytes communityhome/twillingham/README | 7 ++ communityhome/twillingham/communityhome.php | 107 ++++++++++++++++++++ 3 files changed, 114 insertions(+) create mode 100644 communityhome/twillingham/README create mode 100644 communityhome/twillingham/communityhome.php diff --git a/communityhome.tgz b/communityhome.tgz index b08abd2ec236c20a20c24d7b8083cff317798e8c..33c6abc12fee0a7042e3aa38e0850d9ec3f55dd9 100755 GIT binary patch literal 4127 zcmb8vWmgjppn&lKf=Eh9GeOc3Qh!<+q>-V7G}DdlMjE75KsqPg4WmJNG&s7uQy8_~ z`vLBod(LxyAK?MU5CW2Vv~>V@$0mMmi~STgof}1SZ2EG(XcXvG%y4sZLUBVuY`Ms> z_-lMhRZ1GOZbhMi&C`|Tc06x@8d8m>z@fTPZNt&Y%jxvQ%a7cf(%bAnYRHPk8-9Nz zmd7&Hy|Pl*y>ilRQGH+D)FeB%dhFH$hdyGuEuc=-)2s77sKe8v(_`7t_SODOwgML` zWx%+!osb(`YGAdCcI^84-u&yozu>v6FcF^m!1a>Eu#?|=YuB=KbC}R&OwdB7?A|f+ z6?yR^xu#*={Gw|R}>YgmsgeM~z-ptn?8&uK^kp591 z_3GiSCHcWYY39s@a*5KWi;`OB;Gks=1{<{_AR)$*Hy$T6>Eg4Dn$vRNN%qY#v)uH9bTZA4+oY zgo^5+sDZpOKo79N!v3P+D-r#_Rt!pJ70Dl{!#Qnu;fAPqP_HO|A<`H)KbBSd$DMM$ z@A!U@NRc9~{29j~ZW>-W-2s_j?FqMA9QOT7EJ9uXB={v9^Hljhc$wS1XR z)pY;U(0TBW(J#UFf-BuX!wxB2JQ~&CtW{>h`ETkfNm4VXalM`7 zUu`kuyX(LA&{q$utBdo8Rb$vtTTCF4B&1nMiMjbMCz>7tjlZCDaVS0ML_ij|8x zla+j(PdiMmnb61Sr!e5r*`J@H;+fzGgw@1>g1i5x%r97F4ObiEYAf89z46#wuy@3t|O^?dwv=|^G>BaXM%-D#Z2Azd_>&r$~lk5P$>+6Fn*QTpuum8I$arT2y>uYumTamWtaLd6x!6P|uYbBi~7ym}F;~_2gi2#1Pi@ zAPO;O*Sl+)T-Pnmu^h(!#p&6is!H8lrJRhh%j9e4M9FK?HvbH+IBpz?VtDHDre2RK zVS8TcLk2QN3|V`2ca;G`Bm3qN8xb*=ZA>xDmE3GRvH@PcK15>LOO4x(iNQ;*@AR(q0xoPOJt1jN9n zYt61On;uD_g7^Np*dSL06C13pta~h^*k7Xnl;==u;=1SYzt^Ef0B%!bs+aP$x|;M~ z9`8I93b}8heN|s+qC#g|MDLKV7@pSAu5te&CXg`96Eu^HETQAQe}WDOnRiJfW_RO? z$N>kl$Onm1HIu_X$?bio0C#_~m<^GVs2eD=emY4jWzBhBSU@>9l7R}8ZUn#}KLr@n zH_KvxV^s`dgDd$b`6UEAAIOw{`QzDY_Vr|~kocV)Z}*X}3QOnnhS4?M>gQB?07+?);)A|up9@HkPtC}Q0O!BWMf9Kn!@Rs-Oov3uK zJCCBl@YxNqyKBnsg5K#+OEAh(#5w6vLw(};FL8Eh+uLnSf1PS}^60BSZ)y1Nvh|XM zqssZlUse>*qSNR&P}jzf*?GDYszWK}3iOP1lWn!6K`@TpS+VV(cEeib9vpRPjc@)s zexQ4>6BH+VHK0>SYRz~~i4`>4IHDIgpMvenkxt>4GIyYWWTPw*LD8(B>~r3nvHFxkSI2ptI&TL>89v*lud6G1*DKGUrPP|rq{GYP zXdDuEi1aY*)PxH>!;-vSGN%78Wv0#N_9jBF+wj=v^j59==L`=AgfM{>Fh&qdSSs_* zEE$5>q@H|y*dVH5WY_@>;jU_Qt}obT$abc{qxZE+95mEiL+>ZUAl4*h9HUq4pU^RE zR7DVJ4f`pO0EO_ru%Sa%R?e<-neA7Xjt-Xy{o>U8>Y51%b-s}G4p@TRq2xznA)=mX z;k5*Pf@8&#O6grvzf45$d^r>UI%T?waL_2l3qJ&FT=l?Q48xH6v`9w5gC5n;x(e%? z(Cu`>YeC#ioi)BRLAdC}m-^2d^!7+^_4)X3;VB4XQ2MNZ2s8KD^lQU@2G-umv28ab z7(Rb%ATIou>2h(+>m);TFU!Ez4Up9x;j=6VL(Hw~hcNP$^LN=(T(T(4u}oCfk&aYW z1zgG;;tme;9d1ZUtTqGyEUREkTGix};;<6vYi639Ilm-!>!DqZu90)0dbV;ssW|c4 zDTr~K%xtophAw;yO3&+?mX|$$Z>L~k!WK(WK67H$s2o`nQY~q=6vySZZnPXwG|OQl zS!hFGTXr*|OMny60*aq@&rBpR$=uBo8KP6a+0$z{t2vT1;l}<;vhed;R60iFhmeb8 z>lH^%#pGG#t)rA9`Q~vne%Cf6=pl90<)0`VOR%6chh;0Y8_37cj+ z!-ixwvD;36Ll-9J^@X%~P1d2xvZ&}j;_$4JQZ<~0y7VM`4Z=~)QolbW?u|X~MxHkg zAysaQyygxg;=HhJ9RVv3`z?0$ki~dBKlvKRWu&sRQk5j`M!`*GU`2WI?l2>XQN_Bd zS$XlVf%Lbul~;`ggP#SaXH_LTgwmn%GW6BURRfesmVUb51BK50idew8mHm{M!2ul1 zm&bWEsnb_Z(WIzw0#K9PjQ)?~A9bTgJsx20LCK-G1<9(N_?<^<1g>9|1E6Vy4m4u@ zJ;lN}E)Ezjm8ZpILh3l6LS=l{;bL~wqLx^IqqVO;1+Q=MnCs)B!&X;N5h-sWOnn zE+3wL*zMF&K>k@d-K%ag%{4xbZVXWrE7&Xra4p{x3bI8&_~l0B{8xzE{PRG1Z{=fv z>|N04#-+N08GiqlXAHl~YV6tHOwjOt_Mt>22#UsE*~c&xi9(FJmRhKEGe$yRszh-I z^6urPtr1;pe*}ZZ@4cxSinj6RN9G>g4dkqbV@<>iSG!HtkaiNB+gp(uKiE@Rsu z43tKm%Lh~Bn(Ke9d4WuHj(^@pwijQAM=|}MuLBEOT;@;6+hpZAFE8z*SmqSvAC6%a zz30$x9Ot4ufhEj>!nqm3+~7O479Kl%tJhI4J+hd{fZ{S=liprWJnAr=Zr=k#Lk}>! zi9e*D7M(u@!a}Eirbx4`8@KH~)No3u)3Wg7w|X5x0tiFR1pL3(UDQ^K#^Z@;?Ky7D zkd|*vko)_l5<~yfA#<7M)tJ+cwH(`c?u{48xgWys_`j-#-@1lX(slV-XaTvZ_6`4aRR0bKIN^2wH86xLf+))e4G2zl) z@HgPJ<7l78C;-3IE~-6eVY`5byjH>B>A7Icm)inJn92LF_m7Vk51p-b2BTOV`MW;H z-;qTGtFr=y4Ttd#0MlLbPnz(Yo*UO&g+fXt#+sbx4Q5JT@Lr61MiN1v_A}UoA0_DW z=_Iy$C~MW=?_MZy%)3-XdP))YOTSOQKlw0bR5Tb0VI2bBKT6&=|fk1?CFhyiB+ zG#s%lv(Xwv9vArdDBD83a(KF#p6iP}<$<}~%dWHnV$WM!GZwHG)qX#kuokrEffK8z zKz%fpT7MZ^b%Hgx!Is@)J299*wo);`{~0Fm4Lb0O6mYwHgUDca;!LX@uk$}=QLHqq zG?uI;9tum&0Z5k z@!)-K<_g6p@@0h-A(3r*imIisr#t`gp1HK!Ba9nG(h8av7(SYoxoowwctA_=Z``0E zvGUH0cptl3`l#2Dt(spn4IFm17)JQ3E6kGO42ikJYzpJ#t_ZiQ zT@9>)UY2ITl#B0v-900%B!qDiLay$1$_6yk)353NP0vWv(D&zoD{p6^FFG&&kk-Yv zwXs3Jds`b_e(tTW^Kac=^m?0{-QMQb`o`LeZm++!x%L7!{up(NZJtOw26%B{Pu%c} zbRtfkL!sww)57`}p4u|tY^Er5grT<8y5VpN(&%JsI`DHX7}z=T5H{6oN^Z#tSdqV1!-_96NT9 zG?|4rR^xSXJd8x((&)@}L~fKNV7Ki!Z#+9mEW<_#*TN{0^pPYMet0das6;!8#kC0J zzPPaGp49wfA?I-b7q*uO>bT?XjOAC^mFZn+RnF=PyZVpY)q4uNRx;aa{ClU9F6!sc z;9fvI2#2l%cXzdwo!Q!MUFj}e>4}{Vb`Y6BUPQ4o_h3q@3=GsSF)%Q8JQrMtpHbi3 zC`{&3h5=}ucXw=<#o}UMd}Hj^nR=&V@9uOwx5TAi!KGq)e=&WhGxwC9frA#IqS}g! zF!pP;)KFw9IZ>5$Y!F*q>{nLrIPSI9!*r$alh#daN0Eq4mV})144DG#1nMq(vhHei zh>qlRkX=#5OfBW0D#h-Ne7$P0ty_6 z>`MW(MFt>42to-6&zHghc3ZnP3?RV`a)PeLxv>Bn{}UHRaY|sn2?VwvMW7~ug?Wi2 zw=lD>1=OaqFiemm@}CHBiJ?R-+*nLy7~eK>^P~9$w{=i>1h_?KLp6h8!+->LRhZm@ zt=N!6KxD8d;auiB%>)QjYPG`vd>f@s!$8tp^ozC^t;n(n5*Z8IZ$sX3PAHPVlu(<6 zK{$`$mVPXzuZ2Mvx7LY(uK>hnd z6_i*ZZ^L^EDbA-wOmQtje_*uJB#JSb_#^s^C-vH0dfuDMSr~7_cjRmmgwtVXCS|nU z>0G(-WgO04(lDW+`4xEPrdY zw48@RJdfM}*V^-}24ImNi%U0=A|7GBTv;X)=-f7&U}D`K2AxN;g9wWv=m+Vr!tfVc zhL(xARUo7S|L#FW@vpq9^Wd43RVR^Or7HcfUe@guo0MB3q+T)3B(ncU)P`DW7$LVbc{`UcBJ4=r}RRFyL`e=I{E z4Irn+>w9E0m#O&CvdBM5`k9$UOBCWZcuQmhI63(K@crq*$>`0|@cqGl1HM%UNWd*7 zo{NQQl-a$$+Jp0Ai$^GyO$rh@_m{LR9-Nq5`I^a+kKPE^IJU9dFsO(3>|}<|R;4HP z_z0KLB;`#LH8)`Icpt`kY>bn8*vAsW*ugCwxx?^e|KJ4v_AeM`j&W=$#;||z{tcjT zq$bLbmht}J=-|yMGF0d@Zog{g9>#Om8N=TDtZPIaNI{0;aNtg_0))^poyosD8NOT0 zg`fB(a!c8md5g{0Y$jefy%Nl-3po#K zR~#L_J3NI|2b%Q5pz!U|k6vE|W?e=ePG!6F3J|^|7S&i}mNgpj;D~ZBtGjr8>8g;| z-@UM=;XII5J#H{|t*BEWGB)LG?oTNFRxo&lJ)I#DAJyVmks_`3D`Ud|?j=36!OXS> z6Q3*#3nEVh$SOWF(*-ck8x$g?K8zRc$t@lds_PguG`>ZNv4}i-Dn`CNjl;wupENUw zpnTWK&Wvb&Q}=78Ez(?3jptiC3=-|NTijcAF11O4%f;tVY}plF`OKJ|MnDy zA5Z}eNJPhYMB{40AU~PJd^kQtioK&Fctq%eM_wqy->;C#A{lv>GYIl@yuk6D!{K;=!YRcE#lM-NUki)U+fl2I5kkL;qv#n zla=0OTj;b3a?g*%_TAK_Wo&U z5scNo{fVD694VQKLy90N0^n}Ih@jVl_@!O8H<=^49}iCvyTLNwC=&QV`3=ujtNil^ z#j4ofP|{X3CojAiO^G+wu(__we3v7F+aeM7q%;d`${Vi`Q}!6FRt}GkGq}}O509%C zXF!vRT^bt;OGZU16Q({@`_PImX=^!`mP=dBCq>egdxb0Sd4nzwE^s!ThetR`+h_`~ z8NyC72drQ-3l*UU-q|%K_Uf1Q(o48JUbc~meVidM#-SDre}_Ak+;srQ&a2EQ}kRG@ce)WZdI3LEBm z+o0oOn|ldva%FV^W{a5j7{Ydeu9F?UA}$=3vv*bnkX5g&is$6)t<@t4drEmX#TcSI zXzFL09T%V2d(@?B$yW=&%GEXkGZnS@wEARuBCvMphWXe2blF@KtHqhD@tHI zB1{mh^zB}HMaUP}Z9nNG)0yz?POshV5Vt(0cZ>L~(-Y$bX|yM9&u80#aQFSFY#z`n!tc#+3}9*&Ow;#uOa{UlV3jznR+{ zu8Nl~$BIHftIhhWx$*}Znk_*s3K*@&Ny4`RSK7e2@H4ZBSJj-21vtZw2WMIqS?W ztlC0B*`zLN>wKEqne}$n3G7qu0=Q|?8$`}MK7!>eHhvP`lrC}bG`N}=4QS@?jk9Uz z4caUXXeg(W6fMK`&AsZzWf5? z&wkPNU)qXqPwp45Pa)&6?>{zso9X-C{zh+u-v4g&*Ou>ppQGhJ>@u?DZ_)A_{JmbW zuZ6|C0rWXviFca?OOm5?`SwzH6y2%Kg$r-~td*IUt_%qPApADn>5=ZUza*=tC>wZXnp?$n;VtK_dg1^)~M z*DGgdLDVjMIb5j^fpCIs=wn0F=myt#F2mPp2q44N*BQIw-UOdhstr*_LhDmTlRVZP}J> g*_LhDmTlRVZP}J>*_LhD{s-EB006lu7XVNI0B4y)hyVZp diff --git a/communityhome/twillingham/README b/communityhome/twillingham/README new file mode 100644 index 00000000..bb574278 --- /dev/null +++ b/communityhome/twillingham/README @@ -0,0 +1,7 @@ +Thomas Willingham + +This isn't even close to being worth a pull request, but some people might find it useful. + +Enable community home in your admin panel, then replace communityhome.php with this one to get a front page like mine (a normal front page, but with latest users shown in the sidebar, which looks bleak when there's nothing in it). + +There are more graceful ways of doing this, I used communityhome as I plan to make use of a limited stream and likes in future. diff --git a/communityhome/twillingham/communityhome.php b/communityhome/twillingham/communityhome.php new file mode 100644 index 00000000..102732ac --- /dev/null +++ b/communityhome/twillingham/communityhome.php @@ -0,0 +1,107 @@ + + */ + + +require_once('mod/community.php'); + + +function communityhome_install() { + register_hook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home'); + logger("installed communityhome"); +} + +function communityhome_uninstall() { + unregister_hook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home'); + logger("removed communityhome"); +} + +function communityhome_home(&$a, &$o){ + // custom css + $a->page['htmlhead'] .= ''; + + $aside = array( + '$tab_1' => t('Login'), + '$tab_2' => t('OpenID'), + '$noOid' => get_config('system','no_openid'), + ); + + // login form + $aside['$login_title'] = t('Login'); + $aside['$login_form'] = login(($a->config['register_policy'] == REGISTER_CLOSED) ? false : true); + + // last 12 users + $aside['$lastusers_title'] = t('Latest users'); + $aside['$lastusers_items'] = array(); + $sql_extra = ""; + $publish = (get_config('system','publish_all') ? '' : " AND `publish` = 1 " ); + $order = " ORDER BY `register_date` DESC "; + + $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname` + FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` + WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra $order LIMIT %d , %d ", + 0, + 12 + ); + $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl'); + if(count($r)) { + $photo = 'thumb'; + foreach($r as $rr) { + $profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']); + $entry = replace_macros($tpl,array( + '$id' => $rr['id'], + '$profile-link' => $profile_link, + '$photo' => $rr[$photo], + '$alt-text' => $rr['name'], + )); + $aside['$lastusers_items'][] = $entry; + } + } + + // 12 most active users (by posts and contacts) + // this query don't work on some mysql versions + $r = q("SELECT `uni`.`contacts`,`uni`.`items`, `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname` FROM + (SELECT COUNT(`id`) as `contacts`, `uid` FROM `contact` WHERE `self`=0 GROUP BY `uid`) AS `con`, + (SELECT COUNT(`id`) as `items`, `uid` FROM `item` WHERE `item`.`changed` > DATE(NOW() - INTERVAL 1 MONTH) AND `item`.`wall` = 1 GROUP BY `uid`) AS `ite`, + ( + SELECT `contacts`,`items`,`ite`.`uid` FROM `con` RIGHT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid` + UNION ALL + SELECT `contacts`,`items`,`con`.`uid` FROM `con` LEFT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid` + ) AS `uni`, `user`, `profile` + WHERE `uni`.`uid`=`user`.`uid` + AND `uni`.`uid`=`profile`.`uid` AND `profile`.`publish`=1 + GROUP BY `uid` + ORDER BY `items` DESC,`contacts` DESC + LIMIT 0,10"); + if($r && count($r)) { + $aside['$activeusers_title'] = t('Most active users'); + $aside['$activeusers_items'] = array(); + + $photo = 'thumb'; + foreach($r as $rr) { + $profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']); + $entry = replace_macros($tpl,array( + '$id' => $rr['id'], + '$profile-link' => $profile_link, + '$photo' => $rr[$photo], + '$alt-text' => sprintf("%s (%s posts, %s contacts)",$rr['name'], ($rr['items']?$rr['items']:'0'), ($rr['contacts']?$rr['contacts']:'0')) + )); + $aside['$activeusers_items'][] = $entry; + } + } + + + + + $tpl = file_get_contents(dirname(__file__).'/communityhome.tpl'); + $a->page['aside'] = replace_macros($tpl, $aside); + $o = ''; + if(file_exists('home.html')) + + $o .= file_get_contents('home.html'); + +} -- 2.43.0 From 734d400b2f1a29ab595d1db0ee43be812a0fbdd7 Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Thu, 1 Mar 2012 00:25:34 -0500 Subject: [PATCH 18/38] 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 00000000..8edab3d9 --- /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 de7567ad..8910adb6 100644 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -1,48 +1,41 @@ -* Author: Tony Baldwin -*/ + * Name: LiveJournal Post Connector + * Description: Post to LiveJournal + * Version: 1.0 + * Author: Tony Baldwin + * 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 .= '
' - . t('Post to Livejournal') . '
'; + . t('Post to LiveJournal') . ''; } } @@ -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'] .= '' . "\r\n"; + $a->page['htmlhead'] .= '' . "\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 .= ''; $s .= '
'; - $s .= '
'; - $s .= ''; - $s .= ''; + $s .= '
'; + $s .= ''; + $s .= ''; $s .= '
'; $s .= '
'; $s .= ''; - $s .= ''; + $s .= ''; $s .= '
'; /* 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 = '' . (($b['title']) ? $b['title'] : t('Post from Friendica')) . ''; -$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); - -LJ.XMLRPC.postevent - - -year$year -mon$month -day$day -hour$hour -min$min -usejournal$lj_blog -event$post -username$lj_username -password$lj_password -subjectfriendica post -lineendingsunix -ver1 -props - -useragentFriendica -taglistfriendica,crosspost - - - + $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 + + + LJ.XMLRPC.postevent + + + + username$lj_username + password$lj_password + usejournal$lj_username + event$post + subject$title + lineendingsunix + year$year + mon$mon + day$day + hour$hour + min$min + + + 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); } } + -- 2.43.0 From 4ff22560f88bc0400f695f11618ab85c8b2bf45e Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Thu, 1 Mar 2012 01:31:10 -0500 Subject: [PATCH 19/38] 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 8910adb6..3fb30bc8 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 - - - LJ.XMLRPC.postevent - - - - username$lj_username - password$lj_password - usejournal$lj_username - event$post - subject$title - lineendingsunix - year$year - mon$mon - day$day - hour$hour - min$min - - - + + +LJ.XMLRPC.postevent + + +year$year +mon$mon +day$day +hour$hour +min$min +usejournal$lj_username +event$post +username$lj_username +password$lj_password +subjectxpost from friendica +lineendingsunix +ver1 +props + +useragentFriendica +taglistfriendica + + + EOT; -- 2.43.0 From df6ee56969a53bb20a4a67728c5fa538766a7a6f Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Thu, 1 Mar 2012 02:29:19 -0500 Subject: [PATCH 20/38] 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 3fb30bc8..dfd51469 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 + * Author: Tony Baldwin * Author: Michael Johnston */ -- 2.43.0 From 7b86f5babe9ac38fb2c878ba6b21e76f8907a935 Mon Sep 17 00:00:00 2001 From: friendica Date: Thu, 1 Mar 2012 00:21:30 -0800 Subject: [PATCH 21/38] xml escape ljpost vars --- ljpost.tgz | Bin 2494 -> 2538 bytes ljpost/ljpost.php | 14 ++++++++++---- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/ljpost.tgz b/ljpost.tgz index 5189d6e09312ad392b92620e95eda3e691992840..f14b33d4ac398b832e02f46d3469e83ea8db5a22 100644 GIT binary patch delta 2526 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 delta 2481 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 Date: Thu, 1 Mar 2012 15:48:58 -0800 Subject: [PATCH 22/38] xmlify the login credentials - just in case --- wppost.tgz | Bin 2269 -> 2280 bytes wppost/wppost.php | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/wppost.tgz b/wppost.tgz index 50e9234c628c5420149913152f874806d1fbb167..12f96d3b0c569d433447d2fb11310e8ef953834f 100755 GIT binary patch literal 2280 zcmVeWy0|OTK^3Ckrc7|L^=S?`S5|Ku3|LH7w{snP$r z{Tsg%ravTsJ@v_Ke1~r-{Bo6FlZ9KA*WEIA4b$sfF^V-?N{^v$?@r#j{l!Q!*jHGqhY;x z(SR55XN;o({0(F0GA2m^m*^DmCJX}N&@g5zej$kydlB`*U?8SxSlG}EW3YoYU3kG9 zh@TKxEj(ud7^DfXD4dfR{{H^m$ICbH`tnaL2KiSKCmgQV>9Xh7DP4r|0N#5y1l}vN zz;HonG_b79P#q^+T2UO%JfB!gTs+3zR--XX1Bb~6!l@@-fF}0+W(y-1kYY0T5=!F9 zA`EYuCST)+j_sRm$jP)_Hw>&=eBdHe0vC3+UTuO7Lh8*tdPnd5H(oshu22lUsF zP69$P!QCVUiMIfiJCl2W9c5?aPAM8N*-2ozWm{~nJqEBnw%CFUFxys*oCZ}hr@{9P z{U{^XfH#?vP^lv(G>rqq zV-E+bh%2(df!Gq|pSoIn!7 zihyGWu(a`B<|`#vWDwp!;5mffzg(I2;h1gvVlL>?Ul7|hzY6vGUT}lF{gII~GC-=7 zk~?Z)6KcRBCbN;jb%;>RQKoi6(wOCU)QPnzTyP`XU>dL_u4j)7ybhSI*`RS9Uk65h z+PCa@cs3`EV-iq2wT)ROobiJRmqdHT9Zt$(q%!GrY=kvnRFGpnRXTmd=f#!c(nW9CNS3psp0tpRx-=gf?6Fs>Z}~ zRXS09`6{-fh{QEUqNT2{=i>%DMmCe>D<#?mUs^5qFZm6nFiH+yavf)EY%U)Y-t+w)ujqwpLmB9Z*?iYHowd@<852Wf`DUS^k`)( zYipI|ugA*jV&fZBg&i_{{`hV;O>wNvjwPll+TnThDKwM4_S;@PD9jVDoQT5jk z(=}vQ-cCBpu$wDMkgpo2DWzEDZF3Ka9ht77T&s#% zqj+XDRLs!X;AZra@1Oxb@ll~_=05VI*|8ofRe6I@Y*HHgSghVP4A zV#R*4W!2SI?EpvnqGrFgSoN?iO0j~f1Lh8~18lJvYSY+T76G%Fo$#`JTEoj`cEaO@ zQVolba-7EgH*VRgVe=lmY*p;yuNGdyTL*OTDb^fom}2FEQ~nX6L0B z25}Uky4i0w39dJr5niRUgosT$pB4^tF#Te(jVK$QFzad9RJHSg-+qJAx#8Ie*#6Yx zDyr^hQ&H^QVq<{K3vT8EHWQ@6t<*OI7Nyczw(b$K;#yR1qBK{4&z}Pei;ow7`FxQ_ zhFr=b;~X;Ql#9Mp7JY4D4c~34gXPQY$eSeC@;K~>$Y?jgODzUhVCf9KSA`}tpUGO# zlKyZ}LSvrfUa7&IVgSBjH8N3yE74xOTv2*k;D~S2<#))d#i~eNXu81U%Z}Za)J0W3zu^!JYw*ua$^>UOZY?Vq4#)>&7zN&84`zO z*#r4`eXb-LFEWxI!3>ckL;t)Sblry1Z2g|F|-PEY$^Jdy-dd3o5aI- z$S?cx5FHj7vD;k^SYrOitQ{9^JhbHCj{B8QJZgW$^|8Z7Op@c?&|?2KESEn~mrBXP z9t|`mx3927Q+oXXT$|bhQAwhu+wktg+qV}VC%?SDdMzA61_F;EmTgQ*ShBzw^cD0J z@c|_EvsG;d#Jx=MVoStbyHYO~1xs}MJMQgw;w?|k{^Iwa-^%O$zxCs`CQX_&Y0{)g zlO|1?G-=YLNs}f`nlx$Bq)C$|O`0@m(xgd~CQX_&Y0{)glO|37WArcHv}9TUPyhh_ CT5YBP literal 2269 zcmV<32qO0%iwFQvj7(1e1ML}UZ`;bzU#(v;VU175|~ z$Aed|Ui}Q6ej==e|HZ$alO#_dgZuyFZvP(*4w?T42h9B^%>OSB@gMY`K$jZ)pZmY{ zJK_3$64*1J?EChN_+3z|X+q+_Ue(qkJ4x1I>{i!jez>Tu-MVCMr#=-M@Xyxn+z)L! z1fR_5>(=htbLnyj2mO9@gRd()UU_yZIgQ3`_VS%6>#$X4xbm;{PAbvt% zz4V+VV3H=lvT#9S`1^YdUTx2aE9ZY`>=`AtlDj!WObH) zidTHePCvp%6}HMik4=MmwNo+Be!gdSpYP37I(YN;GY}?X9aFp0X{pi?6Pm^W@?$T1 z>xc`0F)Rp%KRR{pE!suOuGGlvno1QZ!3*fM?Y9+=4vfbzP#P%i*nBk;FrD2_Wyhvu zab5}WG2DoYoZ3avQh<_v3MTNjk+@?+J{Y(*1hd3$2E8$uBiFkI$Hx|OY{<)HA8opi zHZ>+AFNjjS@@^v{Sz#+`0Bb+ThID{vq?v$TLB$@vqkbvk4Ggd*U}l0D^nkX_;&mFa z>(uNpx{-w{O-!Nb_l-_hp&^}~Fq1d(x`o%S>q3~ukkDJ7BuhfLE_6vCvKIuB5Y_}7 zJAjpq_cF(nQc*y71%c-fe*bb~+WQkm_SIa{mA@pmYkm{v^}XNcHx4_3wJ!Qd367|_$kk}Fx0 zb1ErPVEwQ%yDYoZymg-@kg39+G7`pw^H39710ISbn87EkJmgV_NnL5CKW7(&NNtArx+cVPRXI^} z`8u|vh{QEPVx+F)^L2wABiqU9l~V1DqgLDfbACf9{WzbhP*DX7Li191UuiT76_97P zibR&sRT;eK6)o=g#K!Yy)$l%}WuGm!He2~aN7-;{z}kL)Jq$`}^PUT&&szAf#= zja5uNUgUnP$+9mxTbr!>4XA7~wYR}!c_KG4S;kPBEPv0;mM>MzmQ|Z4FdP5iwYACe z&tqkCvGon6!U-9^e0tx^Qk>W3z!F;(>+m}I6qd<8`)zNY@|VJjjnrmlsQTxJ*)3#O zUL%`jyzeYv(*jPVj1@1{$Com^lCa;r_FMus$WM*4lv3>Swz-D{MP_R#_o`yoD4tm@ z6)SYMxS4w?cF+Nz`KmBA3m{$1;s(e5w4k@i&Y*ugDd(-oepD$D|BL$lsfw7xx z*>!c*IKa7mRlDChtb5p&ORA zD(BPM{mwmGb!T4`L~E`XK7S4@Ek2$7<;z)~84{Ic z#wldMDUrTbkiK=WhwpdP!E!V^@}>!nJPtb|3Tmc!X~f_LES+KSx-f+1JJ|?YvL7NP zH1Sh$h@G*??YL=asN4EA6H|sVV2;8E8m;nw)v}650`LbG#bI#$BWkJl)YbzA4SHO#-P`~G_dL+Q>=)%kka}7t4rf_ z(i*J@U54&kte+E%1Nq8+#F@z7T6zIlvvZ8B!X87#Sh82igh!8fnT+`5J{e(vq9Asg z%LPm9{}|j!(Z?f8E;giBG4Uw+h})w9Ar{5SU}Uj>8_?w=+EN)=_@jl+Coph1HM4H`6P(4axX|2X^$zz~Fu08jt`Zjp93 diff --git a/wppost/wppost.php b/wppost/wppost.php index f0786166..264a342c 100755 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -161,8 +161,8 @@ function wppost_send(&$a,&$b) { return; - $wp_username = get_pconfig($b['uid'],'wppost','wp_username'); - $wp_password = get_pconfig($b['uid'],'wppost','wp_password'); + $wp_username = xmlify(get_pconfig($b['uid'],'wppost','wp_username')); + $wp_password = xmlify(get_pconfig($b['uid'],'wppost','wp_password')); $wp_blog = get_pconfig($b['uid'],'wppost','wp_blog'); if($wp_username && $wp_password && $wp_blog) { -- 2.43.0 From 76b284de032ff7dd65f209dd64f392fee3b71897 Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Thu, 1 Mar 2012 19:06:46 -0500 Subject: [PATCH 23/38] 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 dfd51469..3084b8bd 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 - - + LJ.XMLRPC.postevent @@ -201,7 +202,7 @@ function ljpost_send(&$a,&$b) { event$post username$lj_username password$lj_password -subjectxpost from friendica +subject$title lineendingsunix ver1 props -- 2.43.0 From 1b8ad8864de5e09c309542da7c88c3ac06aed837 Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Thu, 1 Mar 2012 22:33:55 -0500 Subject: [PATCH 24/38] 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 00000000..8edab3d9 --- /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 00000000..0bf420e5 --- /dev/null +++ b/dwpost/dwpost.php @@ -0,0 +1,220 @@ + + * 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 .= '
' + . t('Post to Dreamwidth') . '
'; + } +} + + +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'] .= '' . "\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 .= '
'; + $s .= '

' . t('Dreamwidth Post Settings') . '

'; + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + /* provide a submit button */ + + $s .= '
'; + +} + + +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 + +LJ.XMLRPC.postevent + + +year$year +mon$mon +day$day +hour$hour +min$min +usejournal$dw_username +event$post +username$dw_username +password$dw_password +subject$title +lineendingsunix +ver1 +props + +useragentFriendica +taglistfriendica + + + + + +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); + + } +} + -- 2.43.0 From 0398585d6cb80a455ea79ce9a155e9f8c7895dbd Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Thu, 1 Mar 2012 22:39:14 -0500 Subject: [PATCH 25/38] 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 zcmV<02_^O)iwFqJKTuBq17vq_Z*z1mbYXG;?OJVb+sF~lSL;`7ST~ddNt7HrKG>3s zT;fX_IE|Y)MGIdbP~=kDm?CxL(z5O@|GhK&LQ*1SQ)%2oaU2+sxI6pI?7ZzPWp^n?-VP!6DhJ@zRI=;T!Fz%%HV0AJ4_){vN~V5AP= zO;eu`*_mSQ;ljQJIt@*!>eo`Q>)23UkJ08^x!r;@!*xlRL?q@*pT<*4g))3f$=se$ z5{G0#iDL(3W?xgusicB{@R|h7q2hQE*0kG0Ty|wn`OKeE+ciH+`}!=n2HF0=$OIWg z*_6{;ZaHymkZDA{fgy|tP#7s=JElp5PS8=ji9a z$aec0w+DN3k|?49hh5tocIAnU$(RI(MGT!8XWNqAb+^k7xm1Ooh*phrZ*;1hq~2(2 z$!lqoA+0EqgT7yx9ZWA2h7o_4CL~n_zoknML}1Jzzo2yAxtlc%y+kOIkJ&f`UEW;2 zJJ;b#Z=vQwToMmXo6L1_A-{F}w#Oj&+R!PcIj7G=W}J%%Q&$S=kX+($Z-RvoR|nPAPel~TnEKbf#VD=2{0rOINKlbThu zyDFTKD`X-+bv$8OuFDXmD{phhr#2WMt!Z~zO@~c&yQM2iET`vE%jHa#1?V>RN)dC_ zE3?%on^p!B*2-s)s8!$BW;#u(+bmsCVlzEgX0t3Ix3O7@sBD%!r*_MR*6fy6jR&yX zc&Tb-b;D&#N-UR7rlu=i0Lges(h9we5i{_OnL5hxtmSL|4EXk(h3X6a(G7Dcu}Pea zXN;3^!r_uxspQHPsj)H`1RnS(My07Se$-CWZQa#biH0`c zR5x~@x4LcajxOGRywpdp5^U~Cj-9w-lhD%bt3bQbv!D0yz^sarKk$oySwL(7n?Ji- zJYusvU^=rEURpK^cQ*lYg(BMt&U;>d2 znFsA)xFFCPitYfCZyth~@H9B82M!C#@^~Pl2&0g?d4&rbd#Z#m|FFYrTN&?aVx^M zxB@dS-wt35u|Ra-=Wj(vWyXZF8T~a3Xom>?H{qOmi4U16?v*r(!vMH`(r+?}?Koiq zNr%h}=KGkzads1pv1{T}NZAfXGXE9aZ+^ObX^OzUg{NPdhP-sAqKOxUGocSzOd-Ds zvHxy6XpL34Z6{d{F=Y?aSak;2@`&fQn0RM>`! zd(UlY!}9z^Ni2uk%>?bF-Xbp+i%#aZP8dxr*gTCq+o9I&%#Y@dsWUjQI~ZX_8TE|l z>a>gKFA0n2C=49hG+E&IiA$~V*a=-KUS^47qMXZxFh|R2K4DeHMS|l-#dk0%j;q&4 z5?GjF9J)*JMSd1`!n|cuJSset0W(_E2<&)6BWMgTf?D9j)=J8?%zw9MZI`?`X2-GA zeRm0+P*!;1v=?cHh^=nxK%RrUGf4jpOoy#~#pK${O-w(eOjCRtQO?xsrCc+%QC{yr zav>X71i1SBJ~?}T+326*^Nsxd0h+^3*MKt*EDFgrFcR*ye=tsmjsA@CY3RO$vva7v z<1Zh>^S7OUy*vMK@v?&krZ-SA`c`hf(T6f(&*Gu{glEx<4f~*5;&1^x8`Egm$KV>G zUHg{!su^KB!(BO!U;CCCx75Nl1TcCTfEcc_9{f?ZUJO@RkFF{MkmHqhz{+>PD((O> z^$Q3KY<~>~Ob$*R=CiqPslod|m1j%w(DRjnGRfafH(iQ0LuMQmAt8Cbz~Qk0Q52!d zSUw9V9&2!WD91|zc3T+@GPNW+deuS$8sfQD;+{-IFW8ffPEU{O%8GM);21nb25ZgAG9Vt~HZ>_T#75 z>M{iVO5{_IpEOi)*zb1dw4_022O3Gg z{VVEH)S^WGy5u`$sW*MUt#Ta-u0PsAHPuv8O*Pe2Q%yD1R8vhg)l^eWHPuv8O*Pe2 kQ%yD1R8vhg)l^eWHPuv8O*Pe2Q%!61A2yPday$day
hour$hour min$min -usejournal$dw_username event$post username$dw_username password$dw_password -- 2.43.0 From c406d4d01d2e0470cb8e46cf85497740eedbc65b Mon Sep 17 00:00:00 2001 From: Fabio Comuni Date: Fri, 2 Mar 2012 11:33:07 +0100 Subject: [PATCH 26/38] blockem: fix to work with changed 'display_item' hook --- blockem.tgz | Bin 1893 -> 1841 bytes blockem/blockem.php | 8 ++++---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/blockem.tgz b/blockem.tgz index 129a00652b979469e08b86f9fdb187bcb24c817a..ec7119f832cece136f5a921df77962c2c4a3f473 100755 GIT binary patch literal 1841 zcmV-12hR8(iwFRPp-@i%1MOK`Z`(!|_N(|S&a!GqrIIMccC)Z06`O3(hfOv`llH|i zgb_Isry@B7XXp!B|M#A`P!dHsR z=cfbxeRy)BKkYgi4xc|e89q}dM}y(;1j*s_OA1x3Qbp$@sHBcLVOK@zV4b? z|J%=g9_NqF7U=&N4p9Mi$ z?es&Q26@5fETKV)#1nNJe*?#vmszN|RYFWzh8{{1zXQKJt%5F?khGY_oG*PZFKA8* zI-T+8*6V^tqKId~j+j=56=3aB=ez+LF_93O}bCoLWP*q zVsrl=fOI68s@~yuI!+72UY13Mh=41=iWx<~%L0VFO{j<|l^{9Dm_kk#6apaslLRPRFjK zH!=u?a3L<}eC&GA*H8;8r!yjGS*Wb(gBR?!A6`{gJQq?LF*0^B&0Gj3YSaBte8^nX z*J-t{c@YU1gTl?xi*vT{H|^7{T;O#*O{@K?&1mi_1Fld!&swo9jE)hzf-oUMppw=` zJq_qikaUwWKGw2H-*aCWjxM}gC52LD6eybW20n|%t`)L(U64GdMFTw{Gn&*W^^Oa3 zUToY}YPgjgFL|00bS;(>B54G+H^MJJzka6zLfa5 zYIEw=)T;LCx>UQn@m;tgNl8t3qsiatU1L)ftyYnh)az8edob~Jp|jaP+b8?gaeMmH z+js9Tyt??_rEX9yv3HVmWx>)0nmN1ds1$0kY|ee9^o!STU;gLSn^m-fAXhZ%Yb(5Z z`&tp-?bLU()qRqpt9;GMBr)k+Bi71(W@)%HcC=Bdfk;sx486${9#J2uyY|?S(?n2B zSP6)mDC3-$S%mlI1ka6-A#O=u;aM3mdnpNHy#+*=l4OpI4TLNbn)${X`q18NwNN88 zcd4LTnxnp=iZXVyR2kN9&n|Sw@-8ntqQ~f-I`=NS7Ry4dWR-=*Yt2xwrG?hN)-IaT z+zSF4#vI%c`f=i(Uy))Om1&M#JLj-uNs>}uM@qZU;04Jdo?>?`FiQM?nxmQNE7()+ zD~CPZIuwLXDw~LNY+Xth7kCyXEL@IxPP3N@7u5f-3fRr7AJDy~CW#y+kaH8fnlgfK z1@z#h0#c<>VFjTA^E$>>U@O+DFl~ximr!@Zv1=!;Gst*G&%xHi4TV>D-Z_BHk!F%? z4sM%CqP&5o#2@WuUP>%)%F%joyzF{SJL)W|6U(?vXWIC?nzI|Q6kERtB048!B73%l z^hDbKEnm3z%*D-N>hrSulY4qSYkQN3NV2M4TFZNr_`We`G#X(Md+#_S^T;}BsH-E$ zH|eEWxBDo#U$Ol`e~vx)&X9DW0`Qf1Mp&ht+Unyt#YyC=Jk)~eM~`iezhtuqc$V4! z&UF-28arr!ds^1kT-)&Twxi*XKcH5Y1Wo3uqtqi{X0vi#J=;bP6{zk7J-_~9CAX{&714+NJNsv23(+IJpaM_0w) z$Q3cJINJ&UJ5?LYsM^yx$00#$OT(X#8EJDVGJDyku^ zW`?E^HVt=(QJq}wF=DjZ8ND_HCbG5GJLie!Kygz=s4@O#C>v#NI^9jJ)`A&hthit3 zCULVF&TEgcbVG1M-?4MhC(N8{l~=Q+rCC3qmU*NeW~$*56!m)6xO4vMSD%M<)O`Ps z5A%=Cmzc5FERyjV z91jM$swgQb7A)&Yo}a-`Z(-$FVVEM*z-V5oU{5S;OxYsF3m5_0nC7`yf!1J7E!|&j fz{5JM!#b?PI;_Jwtiw92ztQ>=aM=4r04M+eDcFri literal 1893 zcmV-r2b%aFiwFSjJPuC)1MOICbK1%k_E-27Ta`v41q3!Y85_tnX{H~VG@T~5UyO%Y zqy_e(x6!WrGQIxqJ!f|Xk|nN5>g3LyvSSahd(Ly-&mL(J#NLL5?#XvteORwvjZRKS z!&j%L!;}8#{PcV{Q2S<`3ISHw^;^_^K z_RuA((fQ!@>(@U*rysZ$CjRELm#mX#mw^F3KOgRi|KRj&FetG=uiKf5M1 z>;F9d<2MlTX0z$OeAy%~$v*Mdg zWO5y+7vv+~F!C{XC>gJ%OfFn^>*Aglhi;O_OCB&c1mY=j!@t{XF0;r(X}J<}9zleH zz-g2JG#e>faUoecU&ryrv6GY~G-dNe?BClRVpHFbBey1}@h}H0F|{u%pgtE#K=0>V zvhZNg5>pLm5@ahL%>|Q^M=NnKt|Hp8J&in1Vj;f~Uh~$-@Z#tOVofnHb1ay{CDgFi z2tc>ZlXWcPdB~#dVD!g)0R7OcNun$&rBN1rmqe<-K2IuDwSB&1dJ6k_(y1cl`4g%l z;u%v)vV;1MS-S_U8K3J z;B$Xs86~^7DNPcVR?q{wU_pse?O0?Prv+{_!^-t|7l$E*&_X+*lKI5kjpV0)efW$C zp}4eaWb7)u$6_&x(2QtVMcnU(LAZOM1*@hx&ggN*6)2A6+UyV|Fi zt;Ue8*1J-Dc(U+SqchdNIHdaVxHbRhr_W!m?6UgywYs1h;@~3b$drc_G<|m6#u94q zXc;?b^xF@g-u?ak$8EL~L2sDfQ(k!g=>rl!)Y@CT>b}a*ZM{ZW5a@C)5i4WAu{Ats zKbkC6Kr~GOhTSDW>@x?bJLXuEvp_IKm@5dIpyM*mA|Lpc6wbAh9&AYm@r;g8y^MNm zwMD4VElD3~9|)NSEOK--)S=;QG{7QocZSdnB~h_pQ-<3tM8`U<#g)3T?CUF=sxi8Y z=k|5SU>T^bt}-=vjRh#SG0^JY_(f3~zod#MrI8aFF44wJOoA9w_eQV&ACGiB0~jNjfA4a8Nz1ELw+KJ($j7>N{B0N-^c)#}a>v7Ej2` zqW@j$*v&0&f&=#4fRD!HN}L}Dn*8z$DRnu)f+b#1IN7O#)P!cr`_^r^Bxe+cot^9U2ciMx9+l-f8@FOE$E5Gf>YL*H_pCO=Qh06uYgO z@z3;z>QG!fN&r*l+A~pVS-|jdy0#PWh^yNFj&-kK zRmA5Tc0Xr#@bo84B|weO|Mvb%o4j~I)Hf69e7w?~8}Dn=3s9k451dpx=+4518L~=9 z+YzLygek)sHS&||116S6D`K~rKxekHx^_IN&L?+yhHB>*Q&}5x*X|Up+9{@;v6X&> z8PmEert>ahJS-@#>Dy+k`ic>DXYzJbH8i{D-7N9(*(je?2~ux(5QGff^6*=~Nd29z znuqykm+|ZG|NH&3zIp#Y7>-7xzJCATKfeF}5v%#f(pw5_8A})moX4s4XbJ-lnEJUGK}#?rL-$)d f@VJiaxQ^?%j_bIN>$r~VceMTs*y?&?04M+e(8#zV diff --git a/blockem/blockem.php b/blockem/blockem.php index 43f34554..9134bd0b 100755 --- a/blockem/blockem.php +++ b/blockem/blockem.php @@ -101,15 +101,15 @@ function blockem_prepare_body(&$a,&$b) { } } if($found) { - $rnd = random_string(8); + $rnd = random_string(8); $b['html'] = ''; } } function blockem_display_item(&$a,&$b) { - if(strstr($b['output'],'id="blockem-wrap-')) - $b['output'] = preg_replace('/\/','get_baseurl() . "/images/default-profile-sm.jpg" . '" class="wall-item-photo$3>',$b['output']); + if(strstr($b['output']['body'],'id="blockem-wrap-')) + $b['output']['thumb'] = $a->get_baseurl() . "/images/default-profile-sm.jpg"; } @@ -193,4 +193,4 @@ function blockem_init(&$a) { set_pconfig(local_user(),'blockem','words',$words); info( t('blockem settings updated') . EOL ); killme(); -} \ No newline at end of file +} -- 2.43.0 From 90039f5522cbb443d96994c88ee1e14d674d3c1a Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Fri, 2 Mar 2012 11:16:21 -0500 Subject: [PATCH 27/38] 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 00000000..df3494a4 --- /dev/null +++ b/mibbit/mibbit.php @@ -0,0 +1,62 @@ +' . t('Mibbit IRC Chatroom') . '
'; +} + + +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 .= '

chat

'; + $s .= '
'; + $s .= ''; + $s .= '
(no spaces, interpunctuation or leading ciphers in your /nick name)'; + $s .= '

type /help to learn about special commands

'; + $s .= '

' + +} -- 2.43.0 From 275d79ff9ab313f5a3dfc297baa5cb614d0b2faa Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Fri, 2 Mar 2012 11:29:19 -0500 Subject: [PATCH 28/38] 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<{fbl1jqDdHYk=!~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&*YPV4%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@MWo380?&|%I@87@q z`Q7z0tPS)aA>UXiQH6XI*R2EbByWpz^KAHryT}q^gXU9f|@3 zzI3~qH+x$>9sh(sH{+snmga=_-u$vpTTv90aMHXgSPH1g4jrhO%#c1bdTKKA>Ko4p+3?>!2|G9fqflI;@buv0ZYCFj|}J1tO5yeL#r z{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^;;0Zi3fjpage['htmlhead'] .= 'session_start(); @@ -48,15 +50,15 @@ $a->page['htmlhead'] .= 'session_start(); // add the chatroom frame and some html - $s .= '

chat

'; - $s .= '
'; - $s .= ''; - $s .= '
(no spaces, interpunctuation or leading ciphers in your /nick name)'; - $s .= '

type /help to learn about special commands

'; - $s .= '

' + $o .= ''; + $o .= '
(no spaces, interpunctuation or leading ciphers in your /nick name)'; + $o .= '

type /help to learn about special commands

'; + $o .= '
' } -- 2.43.0 From dcddf61cce914bed74a52b1d1b6221ca5bb79697 Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Fri, 2 Mar 2012 11:35:06 -0500 Subject: [PATCH 29/38] 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 443c8881..41568c11 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 */ -- 2.43.0 From 020f3f6e2ba230666816c6ea36ae617864b33cfe Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Fri, 2 Mar 2012 13:55:29 -0500 Subject: [PATCH 30/38] 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 41568c11..90f322c3 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 -- 2.43.0 From 47e812e199eb1d7d1a66fa25d2f84b65bfc805c4 Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Fri, 2 Mar 2012 18:12:34 -0500 Subject: [PATCH 31/38] 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 00000000..fa90029b --- /dev/null +++ b/irc/irc.php @@ -0,0 +1,41 @@ + +*/ + + +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'][] = ''; +} + + +function irc_module() { +return; +} + + +function irc_content(&$a) { + +$baseurl = $a->get_baseurl() . '/addon/irc'; +$o = ''; + + + // add the chatroom frame and some html + $o .= '

IRC chat

'; + $o .= '' + +} + + -- 2.43.0 From 2ab37d3dbf8bca2ee458355d4272a63b527525c8 Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Fri, 2 Mar 2012 18:13:12 -0500 Subject: [PATCH 32/38] 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`{`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?2`ih|vF@E}T4q2n};aaVD%sSIx4*)2lb1>Y5g-CYfCvx)B0vO)01 Date: Fri, 2 Mar 2012 18:21:37 -0500 Subject: [PATCH 33/38] 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 fa90029b..139c5e61 100644 --- a/irc/irc.php +++ b/irc/irc.php @@ -33,8 +33,12 @@ $o = ''; // add the chatroom frame and some html - $o .= '

IRC chat

'; - $o .= '' + $o .= <<< EOT +

IRC chat

+ +EOT; + +return $o; } -- 2.43.0 From 2b876524a5b472c4cad88fc3e51f8cb8c33a0d41 Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Fri, 2 Mar 2012 18:25:34 -0500 Subject: [PATCH 34/38] 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 139c5e61..397844e0 100644 --- a/irc/irc.php +++ b/irc/irc.php @@ -35,7 +35,7 @@ $o = ''; // add the chatroom frame and some html $o .= <<< EOT

IRC chat

- + EOT; return $o; -- 2.43.0 From e57eb5d1986efce574a2c9d88e24fc05262cc8c5 Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Fri, 2 Mar 2012 18:54:24 -0500 Subject: [PATCH 35/38] 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 3084b8bd..8431b134 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 .= ''; $s .= '
'; - $s .= '
'; - $s .= ''; - $s .= ''; - $s .= '
'; - $s .= '
'; $s .= ''; $s .= ''; @@ -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) { -- 2.43.0 From 99d9fddb6af9e872266666038447771e42ce13b4 Mon Sep 17 00:00:00 2001 From: Tony Baldwin Date: Fri, 2 Mar 2012 19:00:42 -0500 Subject: [PATCH 36/38] 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{0hiI`=-^|1QMS+Qd0RZl(E2RJc -- 2.43.0 From 6995cf87de0a8ba32b9f10f738b6b9b1483228e0 Mon Sep 17 00:00:00 2001 From: friendica Date: Fri, 2 Mar 2012 16:46:56 -0800 Subject: [PATCH 37/38] 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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 E1Lc1r0RR91 -- 2.43.0 From 49f2d04a152b651b8e47699fb28fffcc50abf1b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tobias=20H=C3=B6=C3=9Fl?= Date: Mon, 5 Mar 2012 11:43:38 +0000 Subject: [PATCH 38/38] Bugfix --- facebook/facebook.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/facebook/facebook.php b/facebook/facebook.php index 0e30b62b..35338fa1 100755 --- a/facebook/facebook.php +++ b/facebook/facebook.php @@ -289,7 +289,7 @@ function fb_get_friends_sync_full($uid, $access_token, $person) { intval($r[0]['id']) ); } - continue; + return; } else { @@ -322,7 +322,7 @@ function fb_get_friends_sync_full($uid, $access_token, $person) { ); if(! count($r)) { - continue; + return; } $contact = $r[0]; -- 2.43.0