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:
This commit is contained in:
commit
ce21d9375a
13 changed files with 392 additions and 12 deletions
BIN
adult_smile.tgz
BIN
adult_smile.tgz
Binary file not shown.
|
@ -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;
|
float: left;
|
||||||
width: 200px;
|
width: 200px;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ljpost-checkbox, #ljpost-username, #ljpost-password, #ljpost-bydefault {
|
#dwpost-checkbox, #dwpost-username, #dwpost-password, #dwpost-bydefault {
|
||||||
float: left;
|
float: left;
|
||||||
margin-top: 10px;
|
margin-top: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ljpost-submit {
|
#dwpost-submit {
|
||||||
margin-top: 15px;
|
margin-top: 15px;
|
||||||
}
|
}
|
|
@ -4,7 +4,7 @@
|
||||||
* Name: Dreamwidth Post Connector
|
* Name: Dreamwidth Post Connector
|
||||||
* Description: Post to dreamwidth
|
* Description: Post to dreamwidth
|
||||||
* Version: 1.0
|
* 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: Michael Johnston
|
||||||
* Author: Cat Gray <https://free-haven.org/profile/catness>
|
* Author: Cat Gray <https://free-haven.org/profile/catness>
|
||||||
*/
|
*/
|
||||||
|
@ -213,7 +213,7 @@ EOT;
|
||||||
logger('dwpost: data: ' . $xml, LOGGER_DATA);
|
logger('dwpost: data: ' . $xml, LOGGER_DATA);
|
||||||
|
|
||||||
if($dw_blog !== 'test')
|
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);
|
logger('posted to dreamwidth: ' . ($x) ? $x : '', LOGGER_DEBUG);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
BIN
facebook.tgz
BIN
facebook.tgz
Binary file not shown.
|
@ -1051,7 +1051,7 @@ function fb_consume_stream($uid,$j,$wall = false) {
|
||||||
$a = get_app();
|
$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)
|
intval($uid)
|
||||||
);
|
);
|
||||||
if(! count($user))
|
if(! count($user))
|
||||||
|
@ -1177,6 +1177,11 @@ function fb_consume_stream($uid,$j,$wall = false) {
|
||||||
$datarray['allow_cid'] = '<' . $uid . '>';
|
$datarray['allow_cid'] = '<' . $uid . '>';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(trim($datarray['body']) == '') {
|
||||||
|
logger('facebook: empty body');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
$top_item = item_store($datarray);
|
$top_item = item_store($datarray);
|
||||||
$r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
$r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
|
||||||
intval($top_item),
|
intval($top_item),
|
||||||
|
@ -1308,6 +1313,47 @@ function fb_consume_stream($uid,$j,$wall = false) {
|
||||||
$cmntdata['author-avatar'] = 'https://graph.facebook.com/' . $cmnt->from->id . '/picture';
|
$cmntdata['author-avatar'] = 'https://graph.facebook.com/' . $cmnt->from->id . '/picture';
|
||||||
$cmntdata['body'] = $cmnt->message;
|
$cmntdata['body'] = $cmnt->message;
|
||||||
$item = item_store($cmntdata);
|
$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
BIN
ijpost.tar.gz
Normal file
Binary file not shown.
15
ijpost/ijpost.css
Normal file
15
ijpost/ijpost.css
Normal 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
227
ijpost/ijpost.php
Normal 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;
|
||||||
|
}
|
|
@ -3,7 +3,7 @@
|
||||||
* Name: IRC Chat Plugin
|
* Name: IRC Chat Plugin
|
||||||
* Description: add an Internet Relay Chat chatroom
|
* Description: add an Internet Relay Chat chatroom
|
||||||
* Version: 1.0
|
* 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
|
// add the chatroom frame and some html
|
||||||
$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 guid 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=friendica" width="600" height="600"></iframe>
|
||||||
EOT;
|
EOT;
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
* Name: LiveJournal Post Connector
|
* Name: LiveJournal Post Connector
|
||||||
* Description: Post to LiveJournal
|
* Description: Post to LiveJournal
|
||||||
* Version: 1.0
|
* 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: Michael Johnston
|
||||||
* Author: Cat Gray <https://free-haven.org/profile/catness>
|
* Author: Cat Gray <https://free-haven.org/profile/catness>
|
||||||
*/
|
*/
|
||||||
|
@ -232,7 +232,7 @@ EOT;
|
||||||
logger('ljpost: data: ' . $xml, LOGGER_DATA);
|
logger('ljpost: data: ' . $xml, LOGGER_DATA);
|
||||||
|
|
||||||
if($lj_blog !== 'test')
|
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);
|
logger('posted to livejournal: ' . ($x) ? $x : '', LOGGER_DEBUG);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
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'];
|
||||||
|
}
|
||||||
|
?>
|
Loading…
Reference in a new issue