Merge branch 'master', remote-tracking branch 'remotes/upstream/master'
* remotes/upstream/master: package update FEATURE: AppID/Secret can now be entered on the plugin's admin page. BUG: if a connected FB-App is deleted and a new FB-App is connected, the app_access_token of the former App remained in the config and made it impossible to activate Real-Time Updates with the new App. USABILITY: Now the user's connector settings page automatically recognizes if the connection is still valid and acts accordingly. SECURITY: XSRF-Protection. pass IRC channel through url, allows simpler default choice. package update remove frown - no longer needed Show the pseudo-user Administrator instead of a broken image fixed a typo Provide a link to reactivate Real-Time Updated Another proposal for notifications after FB-Connection-Invalidation * master:
This commit is contained in:
commit
e5f3080f9c
11 changed files with 73 additions and 125 deletions
BIN
facebook.tgz
BIN
facebook.tgz
Binary file not shown.
|
@ -54,6 +54,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
define('FACEBOOK_MAXPOSTLEN', 420);
|
define('FACEBOOK_MAXPOSTLEN', 420);
|
||||||
|
define('FACEBOOK_SESSION_ERR_NOTIFICATION_INTERVAL', 259200); // 3 days
|
||||||
|
|
||||||
|
|
||||||
function facebook_install() {
|
function facebook_install() {
|
||||||
|
@ -463,8 +464,20 @@ function facebook_content(&$a) {
|
||||||
info( t('Updating contacts') . EOL);
|
info( t('Updating contacts') . EOL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$o = '';
|
||||||
|
|
||||||
$fb_installed = get_pconfig(local_user(),'facebook','post');
|
$fb_installed = false;
|
||||||
|
if (get_pconfig(local_user(),'facebook','post')) {
|
||||||
|
$access_token = get_pconfig(local_user(),'facebook','access_token');
|
||||||
|
if ($access_token) {
|
||||||
|
$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);
|
||||||
|
if (isset($j->data)) $fb_installed = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$appid = get_config('facebook','appid');
|
$appid = get_config('facebook','appid');
|
||||||
|
|
||||||
|
@ -597,7 +610,7 @@ function facebook_cron($a,$b) {
|
||||||
|
|
||||||
if(strlen($a->config['admin_email']) && !get_config('facebook', 'realtime_err_mailsent')) {
|
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'),
|
$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 cannot be solved automatically. Maybe an permission issue?\n\nThis e-mail will only be sent once.",
|
"Hi!\n\nThere's a problem with the Facebook Real-Time Updates that cannot be solved automatically. Maybe a permission issue?\n\nPlease try to re-activate it on " . $a->config["system"]["url"] . "/admin/plugins/facebook\n\nThis e-mail will only be sent once.",
|
||||||
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
|
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
|
||||||
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
. 'Content-type: text/plain; charset=UTF-8' . "\n"
|
||||||
. 'Content-transfer-encoding: 8bit'
|
. 'Content-transfer-encoding: 8bit'
|
||||||
|
@ -628,17 +641,39 @@ function facebook_plugin_settings(&$a,&$b) {
|
||||||
|
|
||||||
|
|
||||||
function facebook_plugin_admin(&$a, &$o){
|
function facebook_plugin_admin(&$a, &$o){
|
||||||
|
$o = '<input type="hidden" name="form_security_token" value="' . get_form_security_token("fbsave") . '">';
|
||||||
|
|
||||||
$activated = facebook_check_realtime_active();
|
$o .= '<h4>' . t('Facebook API Key') . '</h4>';
|
||||||
if ($activated) {
|
|
||||||
$o = t('Real-Time Updates are activated.') . '<br><br>';
|
$appid = get_config('facebook', 'appid' );
|
||||||
$o .= '<input type="submit" name="real_time_deactivate" value="' . t('Deactivate Real-Time Updates') . '">';
|
$appsecret = get_config('facebook', 'appsecret' );
|
||||||
} else {
|
|
||||||
$o = t('Real-Time Updates not activated.') . '<br><input type="submit" name="real_time_activate" value="' . t('Activate Real-Time Updates') . '">';
|
$o .= '<label for="fb_appid">' . t('App-ID / API-Key') . '</label><input name="appid" type="text" value="' . escape_tags($appid ? $appid : "") . '"><br style="clear: both;">';
|
||||||
|
$o .= '<label for="fb_appsecret">' . t('Application secret') . '</label><input name="appsecret" type="text" value="' . escape_tags($appsecret ? $appsecret : "") . '"><br style="clear: both;">';
|
||||||
|
$o .= '<input type="submit" name="fb_save_keys" value="' . t('Save') . '">';
|
||||||
|
|
||||||
|
if ($appid && $appsecret) {
|
||||||
|
$o .= '<h4>' . t('Real-Time Updates') . '</h4>';
|
||||||
|
|
||||||
|
$activated = facebook_check_realtime_active();
|
||||||
|
if ($activated) {
|
||||||
|
$o .= t('Real-Time Updates are activated.') . '<br><br>';
|
||||||
|
$o .= '<input type="submit" name="real_time_deactivate" value="' . t('Deactivate Real-Time Updates') . '">';
|
||||||
|
} else {
|
||||||
|
$o .= t('Real-Time Updates not activated.') . '<br><input type="submit" name="real_time_activate" value="' . t('Activate Real-Time Updates') . '">';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function facebook_plugin_admin_post(&$a, &$o){
|
function facebook_plugin_admin_post(&$a, &$o){
|
||||||
|
check_form_security_token_redirectOnErr('/admin/plugins/facebook', 'fbsave');
|
||||||
|
|
||||||
|
if (x($_REQUEST,'fb_save_keys')) {
|
||||||
|
set_config('facebook', 'appid', $_REQUEST['appid']);
|
||||||
|
set_config('facebook', 'appsecret', $_REQUEST['appsecret']);
|
||||||
|
del_config('facebook', 'app_access_token');
|
||||||
|
info(t('The new values have been saved.'));
|
||||||
|
}
|
||||||
if (x($_REQUEST,'real_time_activate')) {
|
if (x($_REQUEST,'real_time_activate')) {
|
||||||
facebook_subscription_add_users();
|
facebook_subscription_add_users();
|
||||||
}
|
}
|
||||||
|
@ -931,6 +966,7 @@ function facebook_post_hook(&$a,&$b) {
|
||||||
|
|
||||||
if(! get_config('facebook','test_mode')) {
|
if(! get_config('facebook','test_mode')) {
|
||||||
$x = post_url($url, $postvars);
|
$x = post_url($url, $postvars);
|
||||||
|
logger('Facebook post returns: ' . $x, LOGGER_DEBUG);
|
||||||
|
|
||||||
$retj = json_decode($x);
|
$retj = json_decode($x);
|
||||||
if($retj->id) {
|
if($retj->id) {
|
||||||
|
@ -938,7 +974,6 @@ function facebook_post_hook(&$a,&$b) {
|
||||||
dbesc('fb::' . $retj->id),
|
dbesc('fb::' . $retj->id),
|
||||||
intval($b['id'])
|
intval($b['id'])
|
||||||
);
|
);
|
||||||
del_pconfig($b['uid'], 'facebook', 'session_expired_mailsent');
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if(! $likes) {
|
if(! $likes) {
|
||||||
|
@ -950,7 +985,9 @@ function facebook_post_hook(&$a,&$b) {
|
||||||
|
|
||||||
if (isset($retj->error) && $retj->error->type == "OAuthException" && $retj->error->code == 190) {
|
if (isset($retj->error) && $retj->error->type == "OAuthException" && $retj->error->code == 190) {
|
||||||
logger('Facebook session has expired due to changed password.', LOGGER_DEBUG);
|
logger('Facebook session has expired due to changed password.', LOGGER_DEBUG);
|
||||||
if (!get_pconfig($b['uid'], 'facebook', 'session_expired_mailsent')) {
|
|
||||||
|
$last_notification = get_pconfig($b['uid'], 'facebook', 'session_expired_mailsent');
|
||||||
|
if (!$last_notification || $last_notification < (time() - FACEBOOK_SESSION_ERR_NOTIFICATION_INTERVAL)) {
|
||||||
require_once('include/enotify.php');
|
require_once('include/enotify.php');
|
||||||
|
|
||||||
$r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($b['uid']) );
|
$r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($b['uid']) );
|
||||||
|
@ -961,14 +998,15 @@ function facebook_post_hook(&$a,&$b) {
|
||||||
'language' => $r[0]['language'],
|
'language' => $r[0]['language'],
|
||||||
'to_name' => $r[0]['username'],
|
'to_name' => $r[0]['username'],
|
||||||
'to_email' => $r[0]['email'],
|
'to_email' => $r[0]['email'],
|
||||||
|
'source_name' => t('Administrator'),
|
||||||
|
'source_link' => $a->config["system"]["url"],
|
||||||
|
'source_photo' => $a->config["system"]["url"] . '/images/person-80.jpg',
|
||||||
));
|
));
|
||||||
|
|
||||||
set_pconfig($b['uid'], 'facebook', 'session_expired_mailsent', '1');
|
set_pconfig($b['uid'], 'facebook', 'session_expired_mailsent', time());
|
||||||
}
|
} else logger('Facebook: No notification, as the last one was sent on ' . $last_notification, LOGGER_DEBUG);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
logger('Facebook post returns: ' . $x, LOGGER_DEBUG);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -980,6 +1018,7 @@ function facebook_enotify(&$app, &$data) {
|
||||||
$data['itemlink'] = '/facebook';
|
$data['itemlink'] = '/facebook';
|
||||||
$data['epreamble'] = $data['preamble'] = t('Your Facebook connection became invalid. Please Re-authenticate.');
|
$data['epreamble'] = $data['preamble'] = t('Your Facebook connection became invalid. Please Re-authenticate.');
|
||||||
$data['subject'] = t('Facebook connection became invalid');
|
$data['subject'] = t('Facebook connection became invalid');
|
||||||
|
$data['body'] = sprintf( t("Hi %1\$s,\n\nThe connection between your accounts on %2\$s and Facebook became invalid. This usually happens after you change your Facebook-password. To enable the connection again, you have to %3\$sre-authenticate the Facebook-connector%4\$s."), $data['params']['to_name'], "[url=" . $app->config["system"]["url"] . "]" . $app->config["sitename"] . "[/url]", "[url=" . $app->config["system"]["url"] . "/facebook]", "[/url]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1443,8 +1482,8 @@ function fb_get_app_access_token() {
|
||||||
logger('fb_get_app_access_token: appid and/or appsecret not set', LOGGER_DEBUG);
|
logger('fb_get_app_access_token: appid and/or appsecret not set', LOGGER_DEBUG);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
logger('https://graph.facebook.com/oauth/access_token?client_id=' . $appid . '&client_secret=' . $appsecret . '&grant_type=client_credentials', LOGGER_DATA);
|
||||||
$x = fetch_url('https://graph.facebook.com/oauth/access_token?client_id=' . $appid . '&client_secret=' . $appsecret . "&grant_type=client_credentials");
|
$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) {
|
if(strpos($x,'access_token=') !== false) {
|
||||||
logger('fb_get_app_access_token: returned access token: ' . $x, LOGGER_DATA);
|
logger('fb_get_app_access_token: returned access token: ' . $x, LOGGER_DATA);
|
||||||
|
@ -1475,8 +1514,7 @@ function facebook_subscription_del_users() {
|
||||||
del_config('facebook', 'realtime_active');
|
del_config('facebook', 'realtime_active');
|
||||||
}
|
}
|
||||||
|
|
||||||
function facebook_subscription_add_users() {
|
function facebook_subscription_add_users($second_try = false) {
|
||||||
|
|
||||||
$a = get_app();
|
$a = get_app();
|
||||||
$access_token = fb_get_app_access_token();
|
$access_token = fb_get_app_access_token();
|
||||||
|
|
||||||
|
@ -1497,9 +1535,18 @@ function facebook_subscription_add_users() {
|
||||||
del_config('facebook', 'cb_verify_token');
|
del_config('facebook', 'cb_verify_token');
|
||||||
|
|
||||||
if ($j) {
|
if ($j) {
|
||||||
|
$x = json_decode($j);
|
||||||
logger("Facebook reponse: " . $j, LOGGER_DATA);
|
logger("Facebook reponse: " . $j, LOGGER_DATA);
|
||||||
|
if (isset($x->error)) {
|
||||||
if (facebook_check_realtime_active()) set_config('facebook', 'realtime_active', 1);
|
logger('facebook_subscription_add_users: got an error: ' . $j);
|
||||||
|
if ($x->error->type == "OAuthException" && $x->error->code == 190) {
|
||||||
|
del_config('facebook', 'app_access_token');
|
||||||
|
if ($second_try === false) facebook_subscription_add_users(true);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
logger('facebook_subscription_add_users: sucessful');
|
||||||
|
if (facebook_check_realtime_active()) set_config('facebook', 'realtime_active', 1);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
BIN
frown.tgz
BIN
frown.tgz
Binary file not shown.
|
@ -1,14 +0,0 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#frown-enable-label {
|
|
||||||
float: left;
|
|
||||||
width: 200px;
|
|
||||||
margin-bottom: 25px;
|
|
||||||
}
|
|
||||||
|
|
||||||
#frown-checkbox {
|
|
||||||
float: left;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
|
@ -1,86 +0,0 @@
|
||||||
<?php
|
|
||||||
/**
|
|
||||||
* Name: Frown
|
|
||||||
* Description: Disable graphical smilies
|
|
||||||
* Version: 1.0
|
|
||||||
* Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
function frown_install() {
|
|
||||||
|
|
||||||
register_hook('plugin_settings', 'addon/frown/frown.php', 'frown_settings');
|
|
||||||
register_hook('plugin_settings_post', 'addon/frown/frown.php', 'frown_settings_post');
|
|
||||||
|
|
||||||
logger("installed frown");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function frown_uninstall() {
|
|
||||||
|
|
||||||
unregister_hook('plugin_settings', 'addon/frown/frown.php', 'frown_settings');
|
|
||||||
unregister_hook('plugin_settings_post', 'addon/frown/frown.php', 'frown_settings_post');
|
|
||||||
|
|
||||||
|
|
||||||
logger("removed frown");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* 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 frown_settings_post($a,$post) {
|
|
||||||
if(! local_user() || (! x($_POST,'frown-submit')))
|
|
||||||
return;
|
|
||||||
set_pconfig(local_user(),'system','no_smilies',intval($_POST['frown']));
|
|
||||||
|
|
||||||
info( t('Frown settings updated.') . EOL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* Called from the Plugin Setting form.
|
|
||||||
* Add our own settings info to the page.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function frown_settings(&$a,&$s) {
|
|
||||||
|
|
||||||
if(! local_user())
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Add our stylesheet to the page so we can make our settings look nice */
|
|
||||||
|
|
||||||
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/frown/frown.css' . '" media="all" />' . "\r\n";
|
|
||||||
|
|
||||||
/* Get the current state of our config variable */
|
|
||||||
|
|
||||||
$enabled = get_pconfig(local_user(),'system','no_smilies');
|
|
||||||
$checked = (($enabled) ? ' checked="checked" ' : '');
|
|
||||||
|
|
||||||
/* Add some HTML to the existing form */
|
|
||||||
|
|
||||||
$s .= '<div class="settings-block">';
|
|
||||||
$s .= '<h3>' . t('Frown Settings') . '</h3>';
|
|
||||||
$s .= '<div id="frown-enable-wrapper">';
|
|
||||||
$s .= '<label id="frown-enable-label" for="frown-checkbox">' . t('Disable graphical smilies') . '</label>';
|
|
||||||
$s .= '<input id="frown-checkbox" type="checkbox" name="frown" value="1" ' . $checked . '/>';
|
|
||||||
$s .= '</div><div class="clear"></div>';
|
|
||||||
|
|
||||||
/* provide a submit button */
|
|
||||||
|
|
||||||
$s .= '<div class="settings-submit-wrapper" ><input type="submit" name="frown-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
|
|
||||||
|
|
||||||
}
|
|
BIN
irc.tgz
BIN
irc.tgz
Binary file not shown.
|
@ -36,6 +36,7 @@ function irc_content(&$a) {
|
||||||
$baseurl = $a->get_baseurl() . '/addon/irc';
|
$baseurl = $a->get_baseurl() . '/addon/irc';
|
||||||
$o = '';
|
$o = '';
|
||||||
|
|
||||||
|
$channels = ((x($_GET,'channels')) ? $_GET['channels'] : 'friendica');
|
||||||
|
|
||||||
/* add the chatroom frame and some html
|
/* add the chatroom frame and some html
|
||||||
* by altering the "channels=friendica" part of the URL, you can add/remove channels.
|
* by altering the "channels=friendica" part of the URL, you can add/remove channels.
|
||||||
|
@ -44,7 +45,7 @@ $o = '';
|
||||||
$o .= <<< EOT
|
$o .= <<< EOT
|
||||||
<h2>IRC chat</h2>
|
<h2>IRC chat</h2>
|
||||||
<p><a href="http://tldp.org/HOWTO/IRC/beginners.html" target="_blank">a beginner's guide to using IRC.</a></p>
|
<p><a href="http://tldp.org/HOWTO/IRC/beginners.html" target="_blank">a beginner's guide to using IRC.</a></p>
|
||||||
<iframe src="http://webchat.freenode.net?channels=friendica" width="600" height="600"></iframe>
|
<iframe src="http://webchat.freenode.net?channels=$channels" width="600" height="600"></iframe>
|
||||||
EOT;
|
EOT;
|
||||||
|
|
||||||
return $o;
|
return $o;
|
||||||
|
|
BIN
statusnet.tgz
BIN
statusnet.tgz
Binary file not shown.
|
@ -43,7 +43,7 @@ ___ Configuration ___
|
||||||
__ Global Configuration __
|
__ Global Configuration __
|
||||||
|
|
||||||
If you enabled an administrator account, please use the admin panel to cofigure
|
If you enabled an administrator account, please use the admin panel to cofigure
|
||||||
the StatusNet reley.
|
the StatusNet relay.
|
||||||
|
|
||||||
To activate this addon add statusnet to the list of active addons in your
|
To activate this addon add statusnet to the list of active addons in your
|
||||||
.htconfig.php file
|
.htconfig.php file
|
||||||
|
|
BIN
twitter.tgz
BIN
twitter.tgz
Binary file not shown.
|
@ -48,7 +48,7 @@ ___ Configuration ___
|
||||||
__ Global Configuration __
|
__ Global Configuration __
|
||||||
|
|
||||||
If you enabled an administrator account, please use the admin panel to cofigure
|
If you enabled an administrator account, please use the admin panel to cofigure
|
||||||
the Twitter reley.
|
the Twitter relay.
|
||||||
|
|
||||||
To activate this addon add @twitter@ to the list of active addons in your
|
To activate this addon add @twitter@ to the list of active addons in your
|
||||||
.htconfig.php file
|
.htconfig.php file
|
||||||
|
|
Loading…
Reference in a new issue