Merge branch 'master', remote-tracking branch 'remotes/upstream/master'

* remotes/upstream/master:
  minor
  replaces missing semi-colon...
  minor alteration
  another attempt having difficulties perhaps resolved?
  corrections, minor alterations
  minor alterations, mostly to ijpost
  added Cat's tag stuff to ijpost
  minor adjustment to ijpost.php
  cleaned up where "lj" was included in dwpost.css changed my profile url to the current, free-haven profile, in all plugins to which I have contributed added insanejournal.com plugin, ijpost other minor cleanup of details, where a plugin was copied and modified but incorrect details were left.
  facebook comment notifications
  Pages: Some minor improvements (I guess) :)
  Removed the test file
  Pages: Added pages.tgz
  Pages: New plugin that displays a list of community pages on the sidebar.
  added a link in the IRC page to the tldp.org Beginner's Guide to IRC.
  Facebook: Don't import empty messages

* master:
pull/43/head
Simon L'nu 2012-03-18 12:00:57 -04:00
commit ce21d9375a
13 changed files with 392 additions and 12 deletions

Binary file not shown.

View File

@ -1,15 +1,15 @@
#ljpost-enable-label, #ljpost-username-label, #ljpost-password-label, #ljpost-bydefault-label {
#dwpost-enable-label, #dwpost-username-label, #dwpost-password-label, #dwpost-bydefault-label {
float: left;
width: 200px;
margin-top: 10px;
}
#ljpost-checkbox, #ljpost-username, #ljpost-password, #ljpost-bydefault {
#dwpost-checkbox, #dwpost-username, #dwpost-password, #dwpost-bydefault {
float: left;
margin-top: 10px;
}
#ljpost-submit {
#dwpost-submit {
margin-top: 15px;
}
}

View File

@ -4,7 +4,7 @@
* Name: Dreamwidth Post Connector
* Description: Post to dreamwidth
* Version: 1.0
* Author: Tony Baldwin <http://tonybaldwin.me/friendica/profile/tony>
* Author: Tony Baldwin <https://free-haven.org/profile/tony>
* Author: Michael Johnston
* Author: Cat Gray <https://free-haven.org/profile/catness>
*/
@ -213,7 +213,7 @@ EOT;
logger('dwpost: data: ' . $xml, LOGGER_DATA);
if($dw_blog !== 'test')
$x = post_url($dw_blog,$xml);
$x = post_url($dw_blog,$xml,array("Content-Type: text/xml"));
logger('posted to dreamwidth: ' . ($x) ? $x : '', LOGGER_DEBUG);
}

Binary file not shown.

View File

@ -1051,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))
@ -1176,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');
@ -1308,6 +1313,47 @@ 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;
}
}
}
}
}

BIN
ijpost.tar.gz Normal file

Binary file not shown.

15
ijpost/ijpost.css Normal file
View File

@ -0,0 +1,15 @@
#ijpost-enable-label, #ijpost-username-label, #ijpost-password-label, #ijpost-bydefault-label {
float: left;
width: 200px;
margin-top: 10px;
}
#ijpost-checkbox, #ijpost-username, #ijpost-password, #ijpost-bydefault {
float: left;
margin-top: 10px;
}
#ijpost-submit {
margin-top: 15px;
}

227
ijpost/ijpost.php Normal file
View File

@ -0,0 +1,227 @@
<?php
/**
* Name: Insanejournal Post Connector
* Description: Post to Insanejournal
* 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 ijpost_install() {
register_hook('post_local', 'addon/ijpost/ijpost.php', 'ijpost_post_local');
register_hook('notifier_normal', 'addon/ijpost/ijpost.php', 'ijpost_send');
register_hook('jot_networks', 'addon/ijpost/ijpost.php', 'ijpost_jot_nets');
register_hook('connector_settings', 'addon/ijpost/ijpost.php', 'ijpost_settings');
register_hook('connector_settings_post', 'addon/ijpost/ijpost.php', 'ijpost_settings_post');
}
function ijpost_uninstall() {
unregister_hook('post_local', 'addon/ijpost/ijpost.php', 'ijpost_post_local');
unregister_hook('notifier_normal', 'addon/ijpost/ijpost.php', 'ijpost_send');
unregister_hook('jot_networks', 'addon/ijpost/ijpost.php', 'ijpost_jot_nets');
unregister_hook('connector_settings', 'addon/ijpost/ijpost.php', 'ijpost_settings');
unregister_hook('connector_settings_post', 'addon/ijpost/ijpost.php', 'ijpost_settings_post');
}
function ijpost_jot_nets(&$a,&$b) {
if(! local_user())
return;
$ij_post = get_pconfig(local_user(),'ijpost','post');
if(intval($ij_post) == 1) {
$ij_defpost = get_pconfig(local_user(),'ijpost','post_by_default');
$selected = ((intval($ij_defpost) == 1) ? ' checked="checked" ' : '');
$b .= '<div class="profile-jot-net"><input type="checkbox" name="ijpost_enable" ' . $selected . ' value="1" /> '
. t('Post to Insanejournal') . '</div>';
}
}
function ijpost_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/ijpost/ijpost.css' . '" media="all" />' . "\r\n";
/* Get the current state of our config variables */
$enabled = get_pconfig(local_user(),'ijpost','post');
$checked = (($enabled) ? ' checked="checked" ' : '');
$def_enabled = get_pconfig(local_user(),'ijpost','post_by_default');
$def_checked = (($def_enabled) ? ' checked="checked" ' : '');
$ij_username = get_pconfig(local_user(), 'ijpost', 'ij_username');
$ij_password = get_pconfig(local_user(), 'ijpost', 'ij_password');
/* Add some HTML to the existing form */
$s .= '<div class="settings-block">';
$s .= '<h3>' . t('InsaneJournal Post Settings') . '</h3>';
$s .= '<div id="ijpost-enable-wrapper">';
$s .= '<label id="ijpost-enable-label" for="ijpost-checkbox">' . t('Enable InsaneJournal Post Plugin') . '</label>';
$s .= '<input id="ijpost-checkbox" type="checkbox" name="ijpost" value="1" ' . $checked . '/>';
$s .= '</div><div class="clear"></div>';
$s .= '<div id="ijpost-username-wrapper">';
$s .= '<label id="ijpost-username-label" for="ijpost-username">' . t('InsaneJournal username') . '</label>';
$s .= '<input id="ijpost-username" type="text" name="ij_username" value="' . $ij_username . '" />';
$s .= '</div><div class="clear"></div>';
$s .= '<div id="ijpost-password-wrapper">';
$s .= '<label id="ijpost-password-label" for="ijpost-password">' . t('InsaneJournal password') . '</label>';
$s .= '<input id="ijpost-password" type="password" name="ij_password" value="' . $ij_password . '" />';
$s .= '</div><div class="clear"></div>';
$s .= '<div id="ijpost-bydefault-wrapper">';
$s .= '<label id="ijpost-bydefault-label" for="ijpost-bydefault">' . t('Post to InsaneJournal by default') . '</label>';
$s .= '<input id="ijpost-bydefault" type="checkbox" name="ij_bydefault" value="1" ' . $def_checked . '/>';
$s .= '</div><div class="clear"></div>';
/* provide a submit button */
$s .= '<div class="settings-submit-wrapper" ><input type="submit" id="ijpost-submit" name="ijpost-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
}
function ijpost_settings_post(&$a,&$b) {
if(x($_POST,'ijpost-submit')) {
set_pconfig(local_user(),'ijpost','post',intval($_POST['ijpost']));
set_pconfig(local_user(),'ijpost','post_by_default',intval($_POST['ij_bydefault']));
set_pconfig(local_user(),'ijpost','ij_username',trim($_POST['ij_username']));
set_pconfig(local_user(),'ijpost','ij_password',trim($_POST['ij_password']));
}
}
function ijpost_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;
$ij_post = intval(get_pconfig(local_user(),'ijpost','post'));
$ij_enable = (($ij_post && x($_REQUEST,'ijpost_enable')) ? intval($_REQUEST['ijpost_enable']) : 0);
if($_REQUEST['api_source'] && intval(get_pconfig(local_user(),'ijpost','post_by_default')))
$ij_enable = 1;
if(! $ij_enable)
return;
if(strlen($b['postopts']))
$b['postopts'] .= ',';
$b['postopts'] .= 'ijpost';
}
function ijpost_send(&$a,&$b) {
if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited']))
return;
if(! strstr($b['postopts'],'ijpost'))
return;
if($b['parent'] != $b['id'])
return;
// insanejournal 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'];
$ij_username = get_pconfig($b['uid'],'ijpost','ij_username');
$ij_password = get_pconfig($b['uid'],'ijpost','ij_password');
$ij_blog = 'http://www.insanejournal.com/interface/xmlrpc';
if($ij_username && $ij_password && $ij_blog) {
require_once('include/bbcode.php');
require_once('include/datetime.php');
$title = $b['title'];
$post = bbcode($b['body']);
$post = xmlify($post);
$tags = ijpost_get_tags($b['tag']);
$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
<?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>event</name><value><string>$post</string></value></member>
<member><name>username</name><value><string>$ij_username</string></value></member>
<member><name>password</name><value><string>$ij_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>$tags</string></value></member>
</struct></value></member>
</struct></value>
</param></params>
</methodCall>
EOT;
logger('ijpost: data: ' . $xml, LOGGER_DATA);
if($ij_blog !== 'test')
$x = post_url($ij_blog,$xml,array("Content-Type: text/xml"));
logger('posted to insanejournal: ' . ($x) ? $x : '', LOGGER_DEBUG);
}
}
function ijpost_get_tags($post)
{
preg_match_all("/\]([^\[#]+)\[/",$post,$matches);
$tags = implode(', ',$matches[1]);
return $tags;
}

View File

@ -3,7 +3,7 @@
* Name: IRC Chat Plugin
* Description: add an Internet Relay Chat chatroom
* Version: 1.0
* Author: tony baldwin <http://tonybaldwin.me>
* Author: tony baldwin <https://free-haven.org/profile/tony>
*/
@ -35,6 +35,7 @@ $o = '';
// add the chatroom frame and some html
$o .= <<< EOT
<h2>IRC chat</h2>
<p><a href="http://tldp.org/HOWTO/IRC/beginners.html" target="_blank">a beginner's guid to using IRC.</a></p>
<iframe src="http://webchat.freenode.net?channels=friendica" width="600" height="600"></iframe>
EOT;

View File

@ -4,7 +4,7 @@
* Name: LiveJournal Post Connector
* Description: Post to LiveJournal
* Version: 1.0
* Author: Tony Baldwin <http://tonybaldwin.me/friendica/profile/tony>
* Author: Tony Baldwin <https://free-haven.org/profile/tony>
* Author: Michael Johnston
* Author: Cat Gray <https://free-haven.org/profile/catness>
*/
@ -232,7 +232,7 @@ EOT;
logger('ljpost: data: ' . $xml, LOGGER_DATA);
if($lj_blog !== 'test')
$x = post_url($lj_blog,$xml);
$x = post_url($lj_blog,$xml,array("Content-Type: text/xml"));
logger('posted to livejournal: ' . ($x) ? $x : '', LOGGER_DEBUG);
}

BIN
pages.tgz Normal file

Binary file not shown.

3
pages/README Executable file
View File

@ -0,0 +1,3 @@
Pages
Shows lists of community pages

88
pages/pages.php Executable file
View 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'];
}
?>