mirror of
https://git.friendi.ca/friendica/friendica-addons.git
synced 2024-12-22 10:30:15 +00:00
Merge remote branch 'upstream/master'
This commit is contained in:
commit
f75d96e5bc
61 changed files with 844 additions and 225 deletions
BIN
adult_smile.tgz
Normal file
BIN
adult_smile.tgz
Normal file
Binary file not shown.
34
adult_smile/adult_smile.php
Normal file
34
adult_smile/adult_smile.php
Normal file
|
@ -0,0 +1,34 @@
|
|||
<?php
|
||||
/*
|
||||
* Name: Adult Smilies
|
||||
* Description: Smily icons that could or should not be included in core
|
||||
* Version: 1.0
|
||||
* Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
|
||||
*
|
||||
* This is a template for how to extend the "smily" code.
|
||||
*
|
||||
*/
|
||||
|
||||
function adult_smile_install() {
|
||||
register_hook('smilie', 'addon/adult_smile/adult_smile.php', 'adult_smile_smilies');
|
||||
}
|
||||
|
||||
function adult_smile_uninstall() {
|
||||
unregister_hook('smilie', 'addon/adult_smile/adult_smile.php', 'adult_smile_smilies');
|
||||
}
|
||||
|
||||
|
||||
|
||||
function adult_smile_smilies(&$a,&$b) {
|
||||
|
||||
$b['texts'][] = '(o)(o)';
|
||||
$b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/adult_smile/icons/tits.gif' . '" alt="' . '(o)(o)' . '" />';
|
||||
|
||||
$b['texts'][] = '(.)(.)';
|
||||
$b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/adult_smile/icons/tits.gif' . '" alt="' . '(.)(.)' . '" />';
|
||||
|
||||
$b['texts'][] = ':bong';
|
||||
$b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/adult_smile/icons/bong.gif' . '" alt="' . ':bong' . '" />';
|
||||
|
||||
|
||||
}
|
BIN
adult_smile/icons/bong.gif
Normal file
BIN
adult_smile/icons/bong.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
BIN
adult_smile/icons/tits.gif
Normal file
BIN
adult_smile/icons/tits.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 696 B |
BIN
blackout.tgz
BIN
blackout.tgz
Binary file not shown.
BIN
blockem.tgz
BIN
blockem.tgz
Binary file not shown.
|
@ -101,15 +101,15 @@ function blockem_prepare_body(&$a,&$b) {
|
|||
}
|
||||
}
|
||||
if($found) {
|
||||
$rnd = random_string(8);
|
||||
$rnd = random_string(8);
|
||||
$b['html'] = '<div id="blockem-wrap-' . $rnd . '" class="fakelink" onclick=openClose(\'blockem-' . $rnd . '\'); >' . sprintf( t('Blocked %s - Click to open/close'),$word ) . '</div><div id="blockem-' . $rnd . '" style="display: none; " >' . $b['html'] . '</div>';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
function blockem_display_item(&$a,&$b) {
|
||||
if(strstr($b['output'],'id="blockem-wrap-'))
|
||||
$b['output'] = preg_replace('/\<img(.*?)src=\"(.*?)\" class=\"wall\-item\-photo(.*?)\>/','<img$1src="' . $a->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();
|
||||
}
|
||||
}
|
||||
|
|
BIN
buglink.tgz
BIN
buglink.tgz
Binary file not shown.
BIN
calc.tgz
BIN
calc.tgz
Binary file not shown.
Binary file not shown.
7
communityhome/twillingham/README
Normal file
7
communityhome/twillingham/README
Normal file
|
@ -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.
|
107
communityhome/twillingham/communityhome.php
Normal file
107
communityhome/twillingham/communityhome.php
Normal file
|
@ -0,0 +1,107 @@
|
|||
<?php
|
||||
/**
|
||||
* Name: Community home
|
||||
* Description: Show last community activity in homepage
|
||||
* Version: 1.0
|
||||
* Author: Fabio Comuni <http://kirgroup.com/profile/fabrixxm>
|
||||
*/
|
||||
|
||||
|
||||
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'] .= '<link rel="stylesheet" type="text/css" href="'.$a->get_baseurl().'/addon/communityhome/communityhome.css" media="all" />';
|
||||
|
||||
$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');
|
||||
|
||||
}
|
BIN
convert.tgz
BIN
convert.tgz
Binary file not shown.
BIN
dwpost.tar.gz
BIN
dwpost.tar.gz
Binary file not shown.
BIN
dwpost.tgz
Normal file
BIN
dwpost.tgz
Normal file
Binary file not shown.
|
@ -6,6 +6,7 @@
|
|||
* Version: 1.0
|
||||
* Author: Tony Baldwin <https://free-haven.org/profile/tony>
|
||||
* Author: Michael Johnston
|
||||
* Author: Cat Gray <https://free-haven.org/profile/catness>
|
||||
*/
|
||||
|
||||
function dwpost_install() {
|
||||
|
@ -173,6 +174,7 @@ function dwpost_send(&$a,&$b) {
|
|||
$title = $b['title'];
|
||||
$post = bbcode($b['body']);
|
||||
$post = xmlify($post);
|
||||
$tags = dwpost_get_tags($b['tag']);
|
||||
|
||||
$date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s');
|
||||
$year = intval(substr($date,0,4));
|
||||
|
@ -200,7 +202,7 @@ function dwpost_send(&$a,&$b) {
|
|||
<member><name>props</name>
|
||||
<value><struct>
|
||||
<member><name>useragent</name><value><string>Friendica</string></value></member>
|
||||
<member><name>taglist</name><value><string>friendica</string></value></member>
|
||||
<member><name>taglist</name><value><string>$tags</string></value></member>
|
||||
</struct></value></member>
|
||||
</struct></value>
|
||||
</param></params>
|
||||
|
@ -217,3 +219,9 @@ EOT;
|
|||
}
|
||||
}
|
||||
|
||||
function dwpost_get_tags($post)
|
||||
{
|
||||
preg_match_all("/\]([^\[#]+)\[/",$post,$matches);
|
||||
$tags = implode(', ',$matches[1]);
|
||||
return $tags;
|
||||
}
|
||||
|
|
BIN
editplain.tgz
BIN
editplain.tgz
Binary file not shown.
BIN
extcron.tgz
BIN
extcron.tgz
Binary file not shown.
BIN
facebook.tgz
BIN
facebook.tgz
Binary file not shown.
|
@ -25,7 +25,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
|
||||
|
|
|
@ -1,8 +1,9 @@
|
|||
<?php
|
||||
/**
|
||||
* Name: Facebook Connector
|
||||
* Version: 1.0
|
||||
* Version: 1.1
|
||||
* Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
|
||||
* Tobias Hößl <https://github.com/CatoTH/>
|
||||
*/
|
||||
|
||||
/**
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
@ -76,10 +84,93 @@ 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());
|
||||
|
||||
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;
|
||||
|
||||
$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);
|
||||
|
||||
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 "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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if($a->argc != 2)
|
||||
return;
|
||||
$nick = $a->argv[1];
|
||||
|
@ -91,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)
|
||||
|
@ -119,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);
|
||||
|
||||
}
|
||||
|
@ -140,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'])
|
||||
);
|
||||
}
|
||||
return;
|
||||
}
|
||||
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)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$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)
|
||||
|
@ -165,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);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -314,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);
|
||||
}
|
||||
|
||||
|
@ -339,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);
|
||||
}
|
||||
|
||||
|
@ -457,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());
|
||||
|
||||
}
|
||||
|
@ -479,6 +618,27 @@ function facebook_plugin_settings(&$a,&$b) {
|
|||
|
||||
}
|
||||
|
||||
|
||||
function facebook_plugin_admin(&$a, &$o){
|
||||
|
||||
$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){
|
||||
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;
|
||||
|
@ -891,7 +1051,7 @@ function fb_consume_stream($uid,$j,$wall = false) {
|
|||
$a = get_app();
|
||||
|
||||
|
||||
$user = q("SELECT `nickname`, `blockwall` FROM `user` WHERE `uid` = %d AND `account_expired` = 0 LIMIT 1",
|
||||
$user = q("SELECT * FROM `user` WHERE `uid` = %d AND `account_expired` = 0 LIMIT 1",
|
||||
intval($uid)
|
||||
);
|
||||
if(! count($user))
|
||||
|
@ -1016,12 +1176,17 @@ function fb_consume_stream($uid,$j,$wall = false) {
|
|||
$datarray['private'] = 1;
|
||||
$datarray['allow_cid'] = '<' . $uid . '>';
|
||||
}
|
||||
|
||||
|
||||
if(trim($datarray['body']) == '') {
|
||||
logger('facebook: empty body');
|
||||
continue;
|
||||
}
|
||||
|
||||
$top_item = item_store($datarray);
|
||||
$r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||
intval($top_item),
|
||||
intval($uid)
|
||||
);
|
||||
);
|
||||
if(count($r)) {
|
||||
$orig_post = $r[0];
|
||||
logger('fb: new top level item posted');
|
||||
|
@ -1148,8 +1313,234 @@ function fb_consume_stream($uid,$j,$wall = false) {
|
|||
$cmntdata['author-avatar'] = 'https://graph.facebook.com/' . $cmnt->from->id . '/picture';
|
||||
$cmntdata['body'] = $cmnt->message;
|
||||
$item = item_store($cmntdata);
|
||||
|
||||
$myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 ",
|
||||
dbesc($orig_post['uri']),
|
||||
intval($uid)
|
||||
);
|
||||
|
||||
if(count($myconv)) {
|
||||
$importer_url = $a->get_baseurl() . '/profile/' . $user[0]['nickname'];
|
||||
|
||||
foreach($myconv as $conv) {
|
||||
|
||||
// now if we find a match, it means we're in this conversation
|
||||
|
||||
if(! link_compare($conv['author-link'],$importer_url))
|
||||
continue;
|
||||
|
||||
require_once('include/enotify.php');
|
||||
|
||||
$conv_parent = $conv['parent'];
|
||||
|
||||
notification(array(
|
||||
'type' => NOTIFY_COMMENT,
|
||||
'notify_flags' => $user[0]['notify-flags'],
|
||||
'language' => $user[0]['language'],
|
||||
'to_name' => $user[0]['username'],
|
||||
'to_email' => $user[0]['email'],
|
||||
'uid' => $user[0]['uid'],
|
||||
'item' => $cmntdata,
|
||||
'link' => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $item,
|
||||
'source_name' => $cmntdata['author-name'],
|
||||
'source_link' => $cmntdata['author-link'],
|
||||
'source_photo' => $cmntdata['author-avatar'],
|
||||
'verb' => ACTIVITY_POST,
|
||||
'otype' => 'item',
|
||||
'parent' => $conv_parent,
|
||||
));
|
||||
|
||||
// only send one notification
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
facebook_delete_url($url);
|
||||
|
||||
del_config('facebook', 'realtime_active');
|
||||
}
|
||||
|
||||
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",
|
||||
"callback_url" => $cb,
|
||||
"verify_token" => $verify_token,
|
||||
));
|
||||
del_config('facebook', 'cb_verify_token');
|
||||
|
||||
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);
|
||||
$ret = null;
|
||||
if ($j) {
|
||||
$x = json_decode($j);
|
||||
if (isset($x->data)) $ret = $x->data;
|
||||
}
|
||||
return $ret;
|
||||
}
|
||||
|
||||
|
||||
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('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))
|
||||
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);
|
||||
}}
|
BIN
geonames.tgz
BIN
geonames.tgz
Binary file not shown.
BIN
gnot.tgz
BIN
gnot.tgz
Binary file not shown.
BIN
impressum.tgz
BIN
impressum.tgz
Binary file not shown.
BIN
irc.tar.gz
BIN
irc.tar.gz
Binary file not shown.
BIN
irc.tgz
Normal file
BIN
irc.tgz
Normal file
Binary file not shown.
BIN
js_upload.tgz
BIN
js_upload.tgz
Binary file not shown.
BIN
ldapauth.tgz
BIN
ldapauth.tgz
Binary file not shown.
BIN
ljpost.tar.gz
BIN
ljpost.tar.gz
Binary file not shown.
BIN
ljpost.tgz
Normal file
BIN
ljpost.tgz
Normal file
Binary file not shown.
19
ljpost/ljpost.css
Normal file → Executable file
19
ljpost/ljpost.css
Normal file → Executable file
|
@ -1,5 +1,21 @@
|
|||
|
||||
#ljpost-enable-label, #ljpost-username-label, #ljpost-password-label, #ljpost-bydefault-label {
|
||||
<<<<<<< HEAD
|
||||
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;
|
||||
}
|
||||
|
||||
=======
|
||||
float: left;
|
||||
width: 200px;
|
||||
margin-top: 10px;
|
||||
|
@ -12,4 +28,5 @@ margin-top: 10px;
|
|||
|
||||
#ljpost-submit {
|
||||
margin-top: 15px;
|
||||
}
|
||||
}
|
||||
>>>>>>> 99d9fddb6af9e872266666038447771e42ce13b4
|
||||
|
|
78
ljpost/ljpost.php
Normal file → Executable file
78
ljpost/ljpost.php
Normal file → Executable file
|
@ -6,6 +6,7 @@
|
|||
* Version: 1.0
|
||||
* Author: Tony Baldwin <https://free-haven.org/profile/tony>
|
||||
* Author: Michael Johnston
|
||||
* Author: Cat Gray <https://free-haven.org/profile/catness>
|
||||
*/
|
||||
|
||||
function ljpost_install() {
|
||||
|
@ -161,18 +162,25 @@ function ljpost_send(&$a,&$b) {
|
|||
if($x && strlen($x[0]['timezone']))
|
||||
$tz = $x[0]['timezone'];
|
||||
|
||||
$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';
|
||||
$lj_username = xmlify(get_pconfig($b['uid'],'ljpost','lj_username'));
|
||||
$lj_password = xmlify(get_pconfig($b['uid'],'ljpost','lj_password'));
|
||||
$lj_journal = xmlify(get_pconfig($b['uid'],'ljpost','lj_journal'));
|
||||
// if(! $lj_journal)
|
||||
// $lj_journal = $lj_username;
|
||||
|
||||
$lj_blog = xmlify(get_pconfig($b['uid'],'ljpost','lj_blog'));
|
||||
if(! strlen($lj_blog))
|
||||
$lj_blog = xmlify('http://www.livejournal.com/interface/xmlrpc');
|
||||
|
||||
if($lj_username && $lj_password && $lj_blog) {
|
||||
|
||||
require_once('include/bbcode.php');
|
||||
require_once('include/datetime.php');
|
||||
|
||||
$title = $b['title'];
|
||||
$title = xmlify($b['title']);
|
||||
$post = bbcode($b['body']);
|
||||
$post = xmlify($post);
|
||||
$tags = ljpost_get_tags($b['tag']);
|
||||
|
||||
$date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s');
|
||||
$year = intval(substr($date,0,4));
|
||||
|
@ -183,28 +191,40 @@ function ljpost_send(&$a,&$b) {
|
|||
|
||||
$xml = <<< EOT
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<methodCall><methodName>LJ.XMLRPC.postevent</methodName>
|
||||
<params><param>
|
||||
<value><struct>
|
||||
<member><name>year</name><value><int>$year</int></value></member>
|
||||
<member><name>mon</name><value><int>$mon</int></value></member>
|
||||
<member><name>day</name><value><int>$day</int></value></member>
|
||||
<member><name>hour</name><value><int>$hour</int></value></member>
|
||||
<member><name>min</name><value><int>$min</int></value></member>
|
||||
<member><name>usejournal</name><value><string>$lj_username</string></value></member>
|
||||
<member><name>event</name><value><string>$post</string></value></member>
|
||||
<member><name>username</name><value><string>$lj_username</string></value></member>
|
||||
<member><name>password</name><value><string>$lj_password</string></value></member>
|
||||
<member><name>subject</name><value><string>$title</string></value></member>
|
||||
<member><name>lineendings</name><value><string>unix</string></value></member>
|
||||
<member><name>ver</name><value><int>1</int></value></member>
|
||||
<member><name>props</name>
|
||||
<value><struct>
|
||||
<member><name>useragent</name><value><string>Friendica</string></value></member>
|
||||
<member><name>taglist</name><value><string>friendica</string></value></member>
|
||||
</struct></value></member>
|
||||
</struct></value>
|
||||
</param></params>
|
||||
<methodCall>
|
||||
<methodName>LJ.XMLRPC.postevent</methodName>
|
||||
<params>
|
||||
<param><value>
|
||||
<struct>
|
||||
<member><name>username</name><value><string>$lj_username</string></value></member>
|
||||
<member><name>password</name><value><string>$lj_password</string></value></member>
|
||||
<member><name>event</name><value><string>$post</string></value></member>
|
||||
<member><name>subject</name><value><string>$title</string></value></member>
|
||||
<member><name>lineendings</name><value><string>unix</string></value></member>
|
||||
<member><name>year</name><value><int>$year</int></value></member>
|
||||
<member><name>mon</name><value><int>$mon</int></value></member>
|
||||
<member><name>day</name><value><int>$day</int></value></member>
|
||||
<member><name>hour</name><value><int>$hour</int></value></member>
|
||||
<member><name>min</name><value><int>$min</int></value></member>
|
||||
<member><name>usejournal</name><value><string>$lj_username</string></value></member>
|
||||
<member>
|
||||
<name>props</name>
|
||||
<value>
|
||||
<struct>
|
||||
<member>
|
||||
<name>useragent</name>
|
||||
<value><string>Friendica</string></value>
|
||||
</member>
|
||||
<member>
|
||||
<name>taglist</name>
|
||||
<value><string>$tags</string></value>
|
||||
</member>
|
||||
</struct>
|
||||
</value>
|
||||
</member>
|
||||
</struct>
|
||||
</value></param>
|
||||
</params>
|
||||
</methodCall>
|
||||
|
||||
EOT;
|
||||
|
@ -218,3 +238,9 @@ EOT;
|
|||
}
|
||||
}
|
||||
|
||||
function ljpost_get_tags($post)
|
||||
{
|
||||
preg_match_all("/\]([^\[#]+)\[/",$post,$matches);
|
||||
$tags = implode(', ',$matches[1]);
|
||||
return $tags;
|
||||
}
|
||||
|
|
BIN
membersince.tgz
BIN
membersince.tgz
Binary file not shown.
BIN
mibbit.tar.gz
BIN
mibbit.tar.gz
Binary file not shown.
|
@ -1,65 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Name: Mibbit Chat Plugin
|
||||
* Description: add a mibbit/irc chatroom
|
||||
* Version: 1.0
|
||||
* Author: tony baldwin <http://tonybaldwin.me>
|
||||
*/
|
||||
|
||||
|
||||
function mibbit_install() {
|
||||
register_hook('app_menu', 'addon/mibbit/mibbit.php', 'mibbit_app_menu');
|
||||
}
|
||||
|
||||
function mibbit_uninstall() {
|
||||
unregister_hook('app_menu', 'addon/mibbit/mibbit.php', 'mibbit_app_menu');
|
||||
|
||||
}
|
||||
|
||||
function mibbit_app_menu($a,&$b) {
|
||||
$b['app_menu'][] = '<div class="app-title"><a href="mibbit">' . t('Mibbit IRC Chatroom') . '</a></div>';
|
||||
}
|
||||
|
||||
|
||||
function mibbit_module() {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function mibbit_content(&$a) {
|
||||
|
||||
$baseurl = $a->get_baseurl() . '/addon/mibbit';
|
||||
$o = '';
|
||||
|
||||
// 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
|
||||
|
||||
$o .= '<h2>chat</h2>';
|
||||
$o .= '<center>';
|
||||
$o .= '<iframe src=\"<?PHP echo $uri; ?>\" frameborder=\"0\">
|
||||
[Your user agent does not support frames or is currently configured
|
||||
not to display frames. However, you may want to open the
|
||||
<A href=\"<?PHP echo $uri; ?>\" target=\"_blank\"> chat in a new browser window ...</A>]';
|
||||
$o .= '</iframe>';
|
||||
$o .= '<br>(no spaces, interpunctuation or leading ciphers in your /nick name)';
|
||||
$o .= '<h4>type /help to learn about special commands</h4>';
|
||||
$o .= '</center><hr>'
|
||||
|
||||
}
|
BIN
nsfw.tgz
BIN
nsfw.tgz
Binary file not shown.
BIN
numfriends.tgz
BIN
numfriends.tgz
Binary file not shown.
Binary file not shown.
BIN
pageheader.tgz
BIN
pageheader.tgz
Binary file not shown.
BIN
pages.tgz
Normal file
BIN
pages.tgz
Normal file
Binary file not shown.
3
pages/README
Executable file
3
pages/README
Executable file
|
@ -0,0 +1,3 @@
|
|||
Pages
|
||||
|
||||
Shows lists of community pages
|
88
pages/pages.php
Executable file
88
pages/pages.php
Executable file
|
@ -0,0 +1,88 @@
|
|||
<?php
|
||||
/**
|
||||
* Name: Pages
|
||||
* Description: Shows lists of community pages
|
||||
* Version: 1.0
|
||||
* Author: Michael Vogel <ike@piratenpartei.de>
|
||||
*
|
||||
*/
|
||||
|
||||
function pages_install() {
|
||||
register_hook('page_end', 'addon/pages/pages.php', 'pages_page_end');
|
||||
}
|
||||
|
||||
function pages_uninstall() {
|
||||
unregister_hook('page_end', 'addon/pages/pages.php', 'pages_page_end');
|
||||
}
|
||||
|
||||
function pages_iscommunity($url, &$pagelist) {
|
||||
// check every week for the status - should be enough
|
||||
if ($pagelist[$url]["checked"]<time()-86400*7) {
|
||||
// When too old or not found fetch the status from the profile
|
||||
$ch = curl_init();
|
||||
|
||||
$url = str_replace("/profile/","/hcard/", $url);
|
||||
|
||||
curl_setopt($ch, CURLOPT_URL, $url);
|
||||
curl_setopt($ch, CURLOPT_HEADER, 0);
|
||||
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
|
||||
curl_setopt($ch, CURLOPT_TIMEOUT, 2);
|
||||
|
||||
$page = curl_exec($ch);
|
||||
|
||||
curl_close($ch);
|
||||
|
||||
$iscommunity = (strpos($page, '<meta name="friendika.community" content="true" />') != 0);
|
||||
|
||||
$pagelist[$url] = array("community" => $iscommunity, "checked" => time());
|
||||
} else // Fetch from cache
|
||||
$iscommunity = $pagelist[$url]["community"];
|
||||
return($iscommunity);
|
||||
}
|
||||
|
||||
function pages_getpages($uid) {
|
||||
|
||||
// Fetch cached pagelist from configuration
|
||||
$pagelist = get_pconfig($uid,'pages','pagelist');
|
||||
|
||||
if (sizeof($pagelist) == 0)
|
||||
$pagelist = array();
|
||||
|
||||
$contacts = q("SELECT `id`, `url`, `Name` FROM `contact`
|
||||
WHERE `network`= 'dfrn' AND `uid` = %d",
|
||||
intval($uid));
|
||||
|
||||
$pages = array();
|
||||
|
||||
// Look if the profile is a community page
|
||||
foreach($contacts as $contact) {
|
||||
if (pages_iscommunity($contact["url"], $pagelist))
|
||||
$pages[] = array("url"=>$contact["url"], "Name"=>$contact["Name"], "id"=>$contact["id"]);
|
||||
}
|
||||
|
||||
// Write back cached pagelist
|
||||
set_pconfig($uid,'pages','pagelist', $pagelist);
|
||||
return($pages);
|
||||
}
|
||||
|
||||
function pages_page_end($a,&$b) {
|
||||
// Only move on if if it's the "network" module and there is a logged on user
|
||||
if (($a->module != "network") OR ($a->user['uid'] == 0))
|
||||
return;
|
||||
|
||||
$pages = '<div id="pages-sidebar" class="widget">
|
||||
<div class="title tool">
|
||||
<h3>'.t("Community").'</h3></div>
|
||||
<div id="sidebar-pages-list"><ul>';
|
||||
|
||||
$contacts = pages_getpages($a->user['uid']);
|
||||
|
||||
foreach($contacts as $contact) {
|
||||
$pages .= '<li class="tool"><a href="'.$a->get_baseurl().'/redir/'.$contact["id"].'" class="label" target="external-link">'.
|
||||
$contact["Name"]."</a></li>";
|
||||
}
|
||||
$pages .= "</ul></div></div>";
|
||||
if (sizeof($contacts) > 0)
|
||||
$a->page['aside'] = $pages.$a->page['aside'];
|
||||
}
|
||||
?>
|
BIN
piwik.tgz
BIN
piwik.tgz
Binary file not shown.
BIN
poormancron.tgz
BIN
poormancron.tgz
Binary file not shown.
BIN
posterous.tgz
BIN
posterous.tgz
Binary file not shown.
BIN
qcomment.tgz
BIN
qcomment.tgz
Binary file not shown.
|
@ -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>';
|
||||
|
|
BIN
randplace.tgz
BIN
randplace.tgz
Binary file not shown.
BIN
showmore.tgz
BIN
showmore.tgz
Binary file not shown.
BIN
sniper.tgz
BIN
sniper.tgz
Binary file not shown.
BIN
statusnet.tgz
BIN
statusnet.tgz
Binary file not shown.
BIN
tictac.tgz
BIN
tictac.tgz
Binary file not shown.
BIN
tumblr.tgz
BIN
tumblr.tgz
Binary file not shown.
BIN
twitter.tgz
BIN
twitter.tgz
Binary file not shown.
|
@ -1,7 +1,7 @@
|
|||
<?php
|
||||
/**
|
||||
* Name: Twitter Connector
|
||||
* Description: Relay public postings to a connected StatusNet account
|
||||
* Description: Relay public postings to a connected Twitter account
|
||||
* Version: 1.0.2
|
||||
* Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
|
||||
*/
|
||||
|
@ -288,7 +288,7 @@ function twitter_post_hook(&$a,&$b) {
|
|||
// longer so we give them 10 characters extra
|
||||
$max_char = 130; // max. length for a tweet
|
||||
// we will only work with up to two times the length of the dent
|
||||
// we can later send to StatusNet. This way we can "gain" some
|
||||
// we can later send to Twitter. This way we can "gain" some
|
||||
// information during shortening of potential links but do not
|
||||
// shorten all the links in a 200000 character long essay.
|
||||
$tmp = substr($b['body'], 0, 2*$max_char);
|
||||
|
|
Binary file not shown.
BIN
viewsrc.tgz
BIN
viewsrc.tgz
Binary file not shown.
BIN
widgets.tgz
BIN
widgets.tgz
Binary file not shown.
BIN
wppost.tgz
BIN
wppost.tgz
Binary file not shown.
|
@ -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) {
|
||||
|
@ -174,8 +174,7 @@ function wppost_send(&$a,&$b) {
|
|||
$post = xmlify($post);
|
||||
|
||||
$xml = <<< EOT
|
||||
|
||||
<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>
|
||||
<?xml version=\"1.0\" encoding=\"utf-8\"?>
|
||||
<methodCall>
|
||||
<methodName>blogger.newPost</methodName>
|
||||
<params>
|
||||
|
@ -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);
|
||||
|
||||
}
|
||||
}
|
||||
|
|
BIN
yourls.tgz
BIN
yourls.tgz
Binary file not shown.
Loading…
Reference in a new issue