Merge remote branch 'upstream/master'

This commit is contained in:
Michael 2012-03-02 10:32:57 +01:00
commit 7097dd6aa7
13 changed files with 472 additions and 5 deletions

Binary file not shown.

View 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.

View 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
gnot.tgz Normal file

Binary file not shown.

16
gnot/gnot.css Executable file
View file

@ -0,0 +1,16 @@
#gnot-desc {
margin-bottom: 10px;
}
#gnot-label {
float: left;
width: 200px;
margin-bottom: 25px;
}
#gnot {
float: left;
}

99
gnot/gnot.php Executable file
View file

@ -0,0 +1,99 @@
<?php
/**
* Name: Gnot
* Description: Thread email comment notifications on Gmail and anonymise them
* Version: 1.0
* Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
*
*
*/
function gnot_install() {
register_hook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings');
register_hook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post');
register_hook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail');
logger("installed gnot");
}
function gnot_uninstall() {
unregister_hook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings');
unregister_hook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post');
unregister_hook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail');
logger("removed gnot");
}
/**
*
* Callback from the settings post function.
* $post contains the $_POST array.
* We will make sure we've got a valid user account
* and if so set our configuration setting for this person.
*
*/
function gnot_settings_post($a,$post) {
if(! local_user() || (! x($_POST,'gnot-submit')))
return;
set_pconfig(local_user(),'gnot','enable',intval($_POST['gnot']));
info( t('Gnot settings updated.') . EOL);
}
/**
*
* Called from the Plugin Setting form.
* Add our own settings info to the page.
*
*/
function gnot_settings(&$a,&$s) {
if(! local_user())
return;
/* Add our stylesheet to the page so we can make our settings look nice */
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/gnot/gnot.css' . '" media="all" />' . "\r\n";
/* Get the current state of our config variable */
$gnot = intval(get_pconfig(local_user(),'gnot','enable'));
$gnot_checked = (($gnot) ? ' checked="checked" ' : '' );
/* Add some HTML to the existing form */
$s .= '<div class="settings-block">';
$s .= '<h3>' . t('Gnot Settings') . '</h3>';
$s .= '<div id="gnot-wrapper">';
$s .= '<div id="gnot-desc">' . t("Allows threading of email comment notifications on Gmail and anonymising the subject line.") . '</div>';
$s .= '<label id="gnot-label" for="gnot">' . t('Enable this plugin/addon?') . '</label>';
$s .= '<input id="gnot-input" type="checkbox" name="gnot" value="1"'. $gnot_checked . '/>';
$s .= '</div><div class="clear"></div>';
/* provide a submit button */
$s .= '<div class="settings-submit-wrapper" ><input type="submit" name="gnot-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
}
function gnot_enotify_mail(&$a,&$b) {
if((! $b['uid']) || (! intval(get_pconfig($b['uid'], 'gnot','enable'))))
return;
if($b['type'] == NOTIFY_COMMENT)
$b['subject'] = sprintf( t('[Friendica:Notify] Comment to conversation #%d'), $b['parent']);
}

BIN
ljpost.tgz Normal file

Binary file not shown.

16
ljpost/ljpost.css Executable file
View file

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

222
ljpost/ljpost.php Executable file
View file

@ -0,0 +1,222 @@
<?php
/**
* Name: LiveJournal Post Connector
* Description: Post to LiveJournal
* Version: 1.0
* Author: Tony Baldwin <http://theshi.re/profile/tony>
* Author: Michael Johnston
*/
function ljpost_install() {
register_hook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local');
register_hook('notifier_normal', 'addon/ljpost/ljpost.php', 'ljpost_send');
register_hook('jot_networks', 'addon/ljpost/ljpost.php', 'ljpost_jot_nets');
register_hook('connector_settings', 'addon/ljpost/ljpost.php', 'ljpost_settings');
register_hook('connector_settings_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post');
}
function ljpost_uninstall() {
unregister_hook('post_local', 'addon/ljpost/ljpost.php', 'ljpost_post_local');
unregister_hook('notifier_normal', 'addon/ljpost/ljpost.php', 'ljpost_send');
unregister_hook('jot_networks', 'addon/ljpost/ljpost.php', 'ljpost_jot_nets');
unregister_hook('connector_settings', 'addon/ljpost/ljpost.php', 'ljpost_settings');
unregister_hook('connector_settings_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post');
}
function ljpost_jot_nets(&$a,&$b) {
if(! local_user())
return;
$lj_post = get_pconfig(local_user(),'ljpost','post');
if(intval($lj_post) == 1) {
$lj_defpost = get_pconfig(local_user(),'ljpost','post_by_default');
$selected = ((intval($lj_defpost) == 1) ? ' checked="checked" ' : '');
$b .= '<div class="profile-jot-net"><input type="checkbox" name="ljpost_enable" ' . $selected . ' value="1" /> '
. t('Post to LiveJournal') . '</div>';
}
}
function ljpost_settings(&$a,&$s) {
if(! local_user())
return;
/* Add our stylesheet to the page so we can make our settings look nice */
$a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/ljpost/ljpost.css' . '" media="all" />' . "\r\n";
/* Get the current state of our config variables */
$enabled = get_pconfig(local_user(),'ljpost','post');
$checked = (($enabled) ? ' checked="checked" ' : '');
$def_enabled = get_pconfig(local_user(),'ljpost','post_by_default');
$def_checked = (($def_enabled) ? ' checked="checked" ' : '');
$lj_username = get_pconfig(local_user(), 'ljpost', 'lj_username');
$lj_password = get_pconfig(local_user(), 'ljpost', 'lj_password');
/* Add some HTML to the existing form */
$s .= '<div class="settings-block">';
$s .= '<h3>' . t('LiveJournal Post Settings') . '</h3>';
$s .= '<div id="ljpost-enable-wrapper">';
$s .= '<label id="ljpost-enable-label" for="ljpost-checkbox">' . t('Enable LiveJournal Post Plugin') . '</label>';
$s .= '<input id="ljpost-checkbox" type="checkbox" name="ljpost" value="1" ' . $checked . '/>';
$s .= '</div><div class="clear"></div>';
$s .= '<div id="ljpost-username-wrapper">';
$s .= '<label id="ljpost-username-label" for="ljpost-username">' . t('LiveJournal username') . '</label>';
$s .= '<input id="ljpost-username" type="text" name="lj_username" value="' . $lj_username . '" />';
$s .= '</div><div class="clear"></div>';
$s .= '<div id="ljpost-password-wrapper">';
$s .= '<label id="ljpost-password-label" for="ljpost-password">' . t('LiveJournal password') . '</label>';
$s .= '<input id="ljpost-password" type="password" name="lj_password" value="' . $lj_password . '" />';
$s .= '</div><div class="clear"></div>';
$s .= '<div id="ljpost-bydefault-wrapper">';
$s .= '<label id="ljpost-bydefault-label" for="ljpost-bydefault">' . t('Post to LiveJournal by default') . '</label>';
$s .= '<input id="ljpost-bydefault" type="checkbox" name="lj_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="ljpost-submit" name="ljpost-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
}
function ljpost_settings_post(&$a,&$b) {
if(x($_POST,'ljpost-submit')) {
set_pconfig(local_user(),'ljpost','post',intval($_POST['ljpost']));
set_pconfig(local_user(),'ljpost','post_by_default',intval($_POST['lj_bydefault']));
set_pconfig(local_user(),'ljpost','lj_username',trim($_POST['lj_username']));
set_pconfig(local_user(),'ljpost','lj_password',trim($_POST['lj_password']));
}
}
function ljpost_post_local(&$a,&$b) {
// This can probably be changed to allow editing by pointing to a different API endpoint
if($b['edit'])
return;
if((! local_user()) || (local_user() != $b['uid']))
return;
if($b['private'] || $b['parent'])
return;
$lj_post = intval(get_pconfig(local_user(),'ljpost','post'));
$lj_enable = (($lj_post && x($_REQUEST,'ljpost_enable')) ? intval($_REQUEST['ljpost_enable']) : 0);
if($_REQUEST['api_source'] && intval(get_pconfig(local_user(),'ljpost','post_by_default')))
$lj_enable = 1;
if(! $lj_enable)
return;
if(strlen($b['postopts']))
$b['postopts'] .= ',';
$b['postopts'] .= 'ljpost';
}
function ljpost_send(&$a,&$b) {
if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited']))
return;
if(! strstr($b['postopts'],'ljpost'))
return;
if($b['parent'] != $b['id'])
return;
// LiveJournal 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'];
$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 = xmlify($b['title']);
$post = bbcode($b['body']);
$post = xmlify($post);
$date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s');
$year = intval(substr($date,0,4));
$mon = intval(substr($date,5,2));
$day = intval(substr($date,8,2));
$hour = intval(substr($date,11,2));
$min = intval(substr($date,14,2));
$xml = <<< EOT
<?xml version="1.0" encoding="utf-8"?>
<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>
</struct>
</value></param>
</params>
</methodCall>
EOT;
logger('ljpost: data: ' . $xml, LOGGER_DATA);
if($lj_blog !== 'test')
$x = post_url($lj_blog,$xml);
logger('posted to livejournal: ' . ($x) ? $x : '', LOGGER_DEBUG);
}
}

Binary file not shown.

View file

@ -53,6 +53,7 @@ function qcomment_addon_settings(&$a,&$s) {
$s .= '<div class="settings-block">'; $s .= '<div class="settings-block">';
$s .= '<h3>' . t('Quick Comment Settings') . '</h3>'; $s .= '<h3>' . t('Quick Comment Settings') . '</h3>';
$s .= '<div id="qcomment-wrapper">'; $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 .= '<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 .= '<textarea id="qcomment-words" type="text" name="qcomment-words" >' . htmlspecialchars(unxmlify($words)) . '</textarea>';
$s .= '</div><div class="clear"></div>'; $s .= '</div><div class="clear"></div>';

Binary file not shown.

View file

@ -161,8 +161,8 @@ function wppost_send(&$a,&$b) {
return; return;
$wp_username = get_pconfig($b['uid'],'wppost','wp_username'); $wp_username = xmlify(get_pconfig($b['uid'],'wppost','wp_username'));
$wp_password = get_pconfig($b['uid'],'wppost','wp_password'); $wp_password = xmlify(get_pconfig($b['uid'],'wppost','wp_password'));
$wp_blog = get_pconfig($b['uid'],'wppost','wp_blog'); $wp_blog = get_pconfig($b['uid'],'wppost','wp_blog');
if($wp_username && $wp_password && $wp_blog) { if($wp_username && $wp_password && $wp_blog) {
@ -174,8 +174,7 @@ function wppost_send(&$a,&$b) {
$post = xmlify($post); $post = xmlify($post);
$xml = <<< EOT $xml = <<< EOT
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>
<methodCall> <methodCall>
<methodName>blogger.newPost</methodName> <methodName>blogger.newPost</methodName>
<params> <params>
@ -194,7 +193,7 @@ EOT;
if($wp_blog !== 'test') if($wp_blog !== 'test')
$x = post_url($wp_blog,$xml); $x = post_url($wp_blog,$xml);
logger('posted to wordpress: ' . ($x) ? $x : ''); logger('posted to wordpress: ' . (($x) ? $x : ''), LOGGER_DEBUG);
} }
} }