diff --git a/communityhome.tgz b/communityhome.tgz index ab251425..71f1f8e3 100755 Binary files a/communityhome.tgz and b/communityhome.tgz differ diff --git a/communityhome/README.md b/communityhome/README.md index 21f2a946..3cf610ec 100755 --- a/communityhome/README.md +++ b/communityhome/README.md @@ -9,26 +9,3 @@ choosed to be in site directory), last ten public photos and last ten In main content is shown the community stream. This plugin doesn't honour your community page visibility site setting: the community stream is shown also if you have choose to not show the community page. - -If 'home.html' is found in your friendica root, its content is inserted -before community stream - -Each elements can be show or not. At the moment, there is no admin page -for settings, so this settings must be added to yout .htconfig.php - - - $a->config['communityhome']['showcommunitystream'] = true; - $a->config['communityhome']['showlastlike'] = true; - $a->config['communityhome']['showlastphotos'] = true; - $a->config['communityhome']['showactiveusers'] = true; - $a->config['communityhome']['showlastusers'] = true; - -If you don't want to show something, set it to false. - -Note: ------ - -- Default is "false". With no settings in .htconfig.php, nothing is -shown, except login form and content of 'home.html' - -- Active users query can be heavy for db, and on some system don't work diff --git a/communityhome/communityhome.css b/communityhome/communityhome.css index 45a65537..2efb6ebd 100755 --- a/communityhome/communityhome.css +++ b/communityhome/communityhome.css @@ -39,5 +39,4 @@ aside .directory-photo-img { max-width: 48px; max-height: 48px; } aside #likes { margin: 0px; padding: 0px; list-style: none; } -aside #div_id_remember { overflow: auto; width: 100%; padding-top:120px;} -#login_openid input { width: 160px; } +aside #login-extra-links { overflow: auto; width: 100%; padding-top:120px;} diff --git a/communityhome/communityhome.php b/communityhome/communityhome.php index ba2af6de..8b831888 100755 --- a/communityhome/communityhome.php +++ b/communityhome/communityhome.php @@ -2,7 +2,7 @@ /** * Name: Community home * Description: Show last community activity in homepage - * Version: 2.0 + * Version: 1.0 * Author: Fabio Comuni */ @@ -35,151 +35,145 @@ function communityhome_home(&$a, &$o){ $aside['$login_form'] = login(($a->config['register_policy'] == REGISTER_CLOSED) ? false : true); // last 12 users - if (get_config('communityhome','showlastusers')===true){ - $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 "; + $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'); - $tpl = get_markup_template( 'directory_item.tpl', 'addon/communityhome/' ); - 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' => $a->get_cached_avatar_image($rr[$photo]), - '$alt_text' => $rr['name'], - )); - $aside['$lastusers_items'][] = $entry; - } + $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'); + $tpl = get_markup_template( 'directory_item.tpl', 'addon/communityhome/' ); + 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' => $a->get_cached_avatar_image($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 - if (get_config('communityhome','showactiveusers')===true){ - $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; - } + $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; } } + // last 12 photos - if (get_config('communityhome','showlastphotos')===true){ - $aside['$photos_title'] = t('Latest photos'); - $aside['$photos_items'] = array(); - $r = q("SELECT `photo`.`id`, `photo`.`resource-id`, `photo`.`scale`, `photo`.`desc`, `user`.`nickname`, `user`.`username` FROM - (SELECT `resource-id`, MAX(`scale`) as maxscale FROM `photo` - WHERE `profile`=0 AND `contact-id`=0 AND `album` NOT IN ('Contact Photos', '%s', 'Profile Photos', '%s') - AND `allow_cid`='' AND `allow_gid`='' AND `deny_cid`='' AND `deny_gid`='' GROUP BY `resource-id`) AS `t1` - INNER JOIN `photo` ON `photo`.`resource-id`=`t1`.`resource-id` AND `photo`.`scale` = `t1`.`maxscale`, - `user` - WHERE `user`.`uid` = `photo`.`uid` - AND `user`.`blockwall`=0 - AND `user`.`hidewall` = 0 - ORDER BY `photo`.`edited` DESC - LIMIT 0, 12", - dbesc(t('Contact Photos')), - dbesc(t('Profile Photos')) - ); + $aside['$photos_title'] = t('Latest photos'); + $aside['$photos_items'] = array(); + $r = q("SELECT `photo`.`id`, `photo`.`resource-id`, `photo`.`scale`, `photo`.`desc`, `user`.`nickname`, `user`.`username` FROM + (SELECT `resource-id`, MAX(`scale`) as maxscale FROM `photo` + WHERE `profile`=0 AND `contact-id`=0 AND `album` NOT IN ('Contact Photos', '%s', 'Profile Photos', '%s') + AND `allow_cid`='' AND `allow_gid`='' AND `deny_cid`='' AND `deny_gid`='' GROUP BY `resource-id`) AS `t1` + INNER JOIN `photo` ON `photo`.`resource-id`=`t1`.`resource-id` AND `photo`.`scale` = `t1`.`maxscale`, + `user` + WHERE `user`.`uid` = `photo`.`uid` + AND `user`.`blockwall`=0 + AND `user`.`hidewall` = 0 + ORDER BY `photo`.`edited` DESC + LIMIT 0, 12", + dbesc(t('Contact Photos')), + dbesc(t('Profile Photos')) + ); - - if(count($r)) { - # $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl'); - $tpl = get_markup_template( 'directory_item.tpl', 'addon/communityhome/' ); - foreach($r as $rr) { - $photo_page = $a->get_baseurl() . '/photos/' . $rr['nickname'] . '/image/' . $rr['resource-id']; - $photo_url = $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] .'.jpg'; - - $entry = replace_macros($tpl,array( - '$id' => $rr['id'], - '$profile_link' => $photo_page, - '$photo' => $photo_url, - '$alt_text' => $rr['username']." : ".$rr['desc'], - )); + + if(count($r)) { +# $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl'); + $tpl = get_markup_template( 'directory_item.tpl', 'addon/communityhome/' ); + foreach($r as $rr) { + $photo_page = $a->get_baseurl() . '/photos/' . $rr['nickname'] . '/image/' . $rr['resource-id']; + $photo_url = $a->get_baseurl() . '/photo/' . $rr['resource-id'] . '-' . $rr['scale'] .'.jpg'; + + $entry = replace_macros($tpl,array( + '$id' => $rr['id'], + '$profile-link' => $photo_page, + '$photo' => $photo_url, + '$alt-text' => $rr['username']." : ".$rr['desc'], + )); - $aside['$photos_items'][] = $entry; - } + $aside['$photos_items'][] = $entry; } } // last 10 liked items - if (get_config('communityhome','showlastlike')===true){ - $aside['$like_title'] = t('Latest likes'); - $aside['$like_items'] = array(); - $r = q("SELECT `T1`.`created`, `T1`.`liker`, `T1`.`liker-link`, `item`.* FROM - (SELECT `parent-uri`, `created`, `author-name` AS `liker`,`author-link` AS `liker-link` - FROM `item` WHERE `verb`='http://activitystrea.ms/schema/1.0/like' GROUP BY `parent-uri` ORDER BY `created` DESC) AS T1 - INNER JOIN `item` ON `item`.`uri`=`T1`.`parent-uri` - WHERE `T1`.`liker-link` LIKE '%s%%' OR `item`.`author-link` LIKE '%s%%' - GROUP BY `uri` - ORDER BY `T1`.`created` DESC - LIMIT 0,10", - $a->get_baseurl(),$a->get_baseurl() - ); + $aside['$like_title'] = t('Latest likes'); + $aside['$like_items'] = array(); + $r = q("SELECT `T1`.`created`, `T1`.`liker`, `T1`.`liker-link`, `item`.* FROM + (SELECT `parent-uri`, `created`, `author-name` AS `liker`,`author-link` AS `liker-link` + FROM `item` WHERE `verb`='http://activitystrea.ms/schema/1.0/like' GROUP BY `parent-uri` ORDER BY `created` DESC) AS T1 + INNER JOIN `item` ON `item`.`uri`=`T1`.`parent-uri` + WHERE `T1`.`liker-link` LIKE '%s%%' OR `item`.`author-link` LIKE '%s%%' + GROUP BY `uri` + ORDER BY `T1`.`created` DESC + LIMIT 0,10", + $a->get_baseurl(),$a->get_baseurl() + ); - foreach ($r as $rr) { - $author = '' . $rr['liker'] . ''; - $objauthor = '' . $rr['author-name'] . ''; - - //var_dump($rr['verb'],$rr['object-type']); killme(); - switch($rr['verb']){ - case 'http://activitystrea.ms/schema/1.0/post': - switch ($rr['object-type']){ - case 'http://activitystrea.ms/schema/1.0/event': - $post_type = t('event'); - break; - default: - $post_type = t('status'); - } - break; - default: - if ($rr['resource-id']){ - $post_type = t('photo'); - $m=array(); preg_match("/\[url=([^]]*)\]/", $rr['body'], $m); - $rr['plink'] = $m[1]; - } else { + foreach ($r as $rr) { + $author = '' . $rr['liker'] . ''; + $objauthor = '' . $rr['author-name'] . ''; + + //var_dump($rr['verb'],$rr['object-type']); killme(); + switch($rr['verb']){ + case 'http://activitystrea.ms/schema/1.0/post': + switch ($rr['object-type']){ + case 'http://activitystrea.ms/schema/1.0/event': + $post_type = t('event'); + break; + default: $post_type = t('status'); - } - } - $plink = '' . $post_type . ''; - - $aside['$like_items'][] = sprintf( t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink); - + } + break; + default: + if ($rr['resource-id']){ + $post_type = t('photo'); + $m=array(); preg_match("/\[url=([^]]*)\]/", $rr['body'], $m); + $rr['plink'] = $m[1]; + } else { + $post_type = t('status'); + } } + $plink = '' . $post_type . ''; + + $aside['$like_items'][] = sprintf( t('%1$s likes %2$s\'s %3$s'), $author, $objauthor, $plink); + } # $tpl = file_get_contents(dirname(__file__).'/communityhome.tpl'); @@ -188,13 +182,8 @@ function communityhome_home(&$a, &$o){ $o = '

' . ((x($a->config,'sitename')) ? sprintf( t("Welcome to %s") ,$a->config['sitename']) : "" ) . '

'; - if(file_exists('home.html')) - $o = file_get_contents('home.html'); - - if (get_config('communityhome','showcommunitystream')===true){ - $oldset = get_config('system','no_community_page'); - set_config('system','no_community_page', false); - $o .= community_content($a,1); - set_config('system','no_community_page', $oldset); - } + $oldset = get_config('system','no_community_page'); + set_config('system','no_community_page', false); + $o .= community_content($a,1); + set_config('system','no_community_page', $oldset); } diff --git a/communityhome/twillingham/README b/communityhome/twillingham/README new file mode 100644 index 00000000..dbbe1419 --- /dev/null +++ b/communityhome/twillingham/README @@ -0,0 +1,3 @@ +This is a variant of the community home. Instead of displaying the community tab in the front page, we still use home.html, but we also add the latest users to the sidebar. + +Simply replace addon/communityhome/communityhome.php with this version then enable community home in your admin panel as usual. \ No newline at end of file diff --git a/communityhome/twillingham/communityhome.php b/communityhome/twillingham/communityhome.php new file mode 100644 index 00000000..102732ac --- /dev/null +++ b/communityhome/twillingham/communityhome.php @@ -0,0 +1,107 @@ + + */ + + +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'] .= ''; + + $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'); + +} diff --git a/communityhome/view/directory_item.tpl b/communityhome/view/directory_item.tpl index f32f5a4f..db1936e4 100755 --- a/communityhome/view/directory_item.tpl +++ b/communityhome/view/directory_item.tpl @@ -2,8 +2,8 @@
diff --git a/extcron.tgz b/extcron.tgz index dabe1d09..0e5b2892 100755 Binary files a/extcron.tgz and b/extcron.tgz differ diff --git a/extcron/extcron.php b/extcron/extcron.php index 3eb34cdc..e3c21209 100755 --- a/extcron/extcron.php +++ b/extcron/extcron.php @@ -5,7 +5,7 @@ * Name: external cron * Description: Use external server or service to run poller regularly * Version: 1.0 - * Author: Mike Macgirvin + * Author: Mike Macgirvin * * Notes: External service needs to make a web request to http(s)://yoursite/extcron */ diff --git a/facebook.tgz b/facebook.tgz index 2dbd4efd..6bf8f7a9 100644 Binary files a/facebook.tgz and b/facebook.tgz differ diff --git a/facebook/facebook.php b/facebook/facebook.php index 4c1c0a14..f977bef9 100644 --- a/facebook/facebook.php +++ b/facebook/facebook.php @@ -383,12 +383,10 @@ function fb_get_friends_sync_full($uid, $access_token, $persons) { if($s) { $results = json_decode($s); logger('fb_get_friends: info: ' . print_r($results,true), LOGGER_DATA); - if(count($results)) { - foreach ($results as $contact) { - if ($contact->code != 200) logger('fb_get_friends: not found: ' . print_r($contact,true), LOGGER_DEBUG); - else fb_get_friends_sync_parsecontact($uid, json_decode($contact->body)); - } - } + foreach ($results as $contact) { + if ($contact->code != 200) logger('fb_get_friends: not found: ' . print_r($contact,true), LOGGER_DEBUG); + else fb_get_friends_sync_parsecontact($uid, json_decode($contact->body)); + } } } } diff --git a/fbpost.tgz b/fbpost.tgz index 790a5732..ecf933d8 100644 Binary files a/fbpost.tgz and b/fbpost.tgz differ diff --git a/fbpost/fbpost.php b/fbpost/fbpost.php index 1486afdb..ab49c303 100644 --- a/fbpost/fbpost.php +++ b/fbpost/fbpost.php @@ -21,8 +21,7 @@ * authenticate to your site to establish identity. We will address this * in a future release. */ - -define('FACEBOOK_DEFAULT_POLL_INTERVAL', 5); // given in minutes + require_once('include/security.php'); @@ -33,7 +32,6 @@ function fbpost_install() { register_hook('connector_settings', 'addon/fbpost/fbpost.php', 'fbpost_plugin_settings'); register_hook('enotify', 'addon/fbpost/fbpost.php', 'fbpost_enotify'); register_hook('queue_predeliver', 'addon/fbpost/fbpost.php', 'fbpost_queue_hook'); - register_hook('cron', 'addon/fbpost/fbpost.php', 'fbpost_cron'); } @@ -44,7 +42,8 @@ function fbpost_uninstall() { unregister_hook('connector_settings', 'addon/fbpost/fbpost.php', 'fbpost_plugin_settings'); unregister_hook('enotify', 'addon/fbpost/fbpost.php', 'fbpost_enotify'); unregister_hook('queue_predeliver', 'addon/fbpost/fbpost.php', 'fbpost_queue_hook'); - unregister_hook('cron', 'addon/fbpost/fbpost.php', 'fbpost_cron'); + + } @@ -141,9 +140,6 @@ function fbpost_post(&$a) { $value = ((x($_POST,'post_by_default')) ? intval($_POST['post_by_default']) : 0); set_pconfig($uid,'facebook','post_by_default', $value); - $value = ((x($_POST,'mirror_posts')) ? intval($_POST['mirror_posts']) : 0); - set_pconfig($uid,'facebook','mirror_posts', $value); - $value = ((x($_POST,'suppress_view_on_friendica')) ? intval($_POST['suppress_view_on_friendica']) : 0); set_pconfig($uid,'facebook','suppress_view_on_friendica', $value); @@ -213,7 +209,7 @@ function fbpost_content(&$a) { $o .= '
'; $o .= '' . t('Install Facebook Post connector for this account.') . ''; + . $a->get_baseurl() . '/fbpost/' . $a->user['nickname'] . '&scope=publish_stream,manage_pages,photo_upload,user_groups,offline_access">' . t('Install Facebook Post connector for this account.') . ''; $o .= '
'; } @@ -225,7 +221,7 @@ function fbpost_content(&$a) { $o .= '
'; $o .= '' . t('Re-authenticate [This is necessary whenever your Facebook password is changed.]') . ''; + . $a->get_baseurl() . '/fbpost/' . $a->user['nickname'] . '&scope=publish_stream,manage_pages,photo_upload,user_groups,offline_access">' . t('Re-authenticate [This is necessary whenever your Facebook password is changed.]') . ''; $o .= '
'; $o .= '
'; @@ -238,10 +234,6 @@ function fbpost_content(&$a) { $checked = (($suppress_view_on_friendica) ? ' checked="checked" ' : ''); $o .= '' . ' ' . t('Suppress "View on friendica"') . EOL; - $mirror_posts = get_pconfig(local_user(),'facebook','mirror_posts'); - $checked = (($mirror_posts) ? ' checked="checked" ' : ''); - $o .= '' . ' ' . t('Mirror wall posts from facebook to friendica.') . EOL; - // List all pages $post_to_page = get_pconfig(local_user(),'facebook','post_to_page'); $page_access_token = get_pconfig(local_user(),'facebook','page_access_token'); @@ -394,14 +386,6 @@ function fbpost_post_hook(&$a,&$b) { if($b['deleted'] || ($b['created'] !== $b['edited'])) return; - // Don't transmit answers (have to be cleaned up in the following code) - if($b['parent'] != $b['id']) - return; - - // if post comes from facebook don't send it back - if($b['app'] == "Facebook") - return; - /** * Post to Facebook stream */ @@ -947,28 +931,28 @@ function fbpost_queue_hook(&$a,&$b) { * @return bool|string */ function fbpost_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; } logger('https://graph.facebook.com/oauth/access_token?client_id=' . $appid . '&client_secret=' . $appsecret . '&grant_type=client_credentials', LOGGER_DATA); $x = fetch_url('https://graph.facebook.com/oauth/access_token?client_id=' . $appid . '&client_secret=' . $appsecret . '&grant_type=client_credentials'); - + 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; @@ -981,214 +965,3 @@ function fbpost_get_app_access_token() { } } -function fbpost_cron($a,$b) { - $last = get_config('facebook','last_poll'); - - $poll_interval = intval(get_config('facebook','poll_interval')); - if(! $poll_interval) - $poll_interval = FACEBOOK_DEFAULT_POLL_INTERVAL; - - if($last) { - $next = $last + ($poll_interval * 60); - if($next > time()) { - logger('facebook: poll intervall not reached'); - return; - } - } - logger('facebook: cron_start'); - - $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'facebook' AND `k` = 'mirror_posts' AND `v` = '1' ORDER BY RAND() "); - if(count($r)) { - foreach($r as $rr) { - logger('facebook: fetching for user '.$rr['uid']); - fbpost_fetchwall($a, $rr['uid']); - } - } - - logger('facebook: cron_end'); - - set_config('facebook','last_poll', time()); -} - -function fbpost_fetchwall($a, $uid) { - $access_token = get_pconfig($uid,'facebook','access_token'); - $post_to_page = get_pconfig($uid,'facebook','post_to_page'); - $lastcreated = get_pconfig($uid,'facebook','last_created'); - - if ((int)$post_to_page == 0) - $post_to_page = "me"; - - $url = "https://graph.facebook.com/".$post_to_page."/feed?access_token=".$access_token; - - $first_time = ($lastcreated == ""); - - if ($lastcreated != "") - $url .= "&since=".urlencode($lastcreated); - - $feed = fetch_url($url); - $data = json_decode($feed); - $items = array_reverse($data->data); - - foreach ($items as $item) { - if ($item->created_time > $lastcreated) - $lastcreated = $item->created_time; - - if ($first_time) - continue; - - if ($item->application->id == get_config('facebook','appid')) - continue; - - if(isset($item->privacy) && ($item->privacy->value !== 'EVERYONE') && ($item->privacy->value !== '')) - continue; - - $_SESSION["authenticated"] = true; - $_SESSION["uid"] = $uid; - - $_REQUEST["type"] = "wall"; - $_REQUEST["api_source"] = true; - $_REQUEST["profile_uid"] = $uid; - $_REQUEST["source"] = "Facebook"; - - $_REQUEST["body"] = (isset($item->message) ? escape_tags($item->message) : ''); - - if(isset($item->name) and isset($item->link)) - $_REQUEST["body"] .= "\n\n[bookmark=".$item->link."]".$item->name."[/bookmark]"; - elseif (isset($item->name)) - $_REQUEST["body"] .= "\n\n[b]" . $item->name."[/b]"; - - /*if(isset($item->caption)) { - if(!isset($item->name) and isset($item->link)) - $_REQUEST["body"] .= "\n\n[bookmark=".$item->link."]".$item->caption."[/bookmark]"; - //else - // $_REQUEST["body"] .= "[i]" . $item->caption."[/i]\n"; - } - - if(!isset($item->caption) and !isset($item->name)) { - if (isset($item->link)) - $_REQUEST["body"] .= "\n[url]".$item->link."[/url]\n"; - else - $_REQUEST["body"] .= "\n"; - }*/ - - $quote = ""; - if(isset($item->description) and ($item->type != "photo")) - $quote = $item->description; - - if(isset($item->caption) and ($item->type == "photo")) - $quote = $item->caption; - - //if (isset($item->properties)) - // foreach ($item->properties as $property) - // $quote .= "\n".$property->name.": [url=".$property->href."]".$property->text."[/url]"; - - if ($quote) - $_REQUEST["body"] .= "\n[quote]".$quote."[/quote]"; - - // Only import the picture when the message is no video - // oembed display a picture of the video as well - if ($item->type != "video") { - //if (($item->type != "video") and ($item->type != "photo")) { - if(isset($item->picture) && isset($item->link)) - $_REQUEST["body"] .= "\n".'[url='.$item->link.'][img]'.fpost_cleanpicture($item->picture).'[/img][/url]'; - else { - if (isset($item->picture)) - $_REQUEST["body"] .= "\n".'[img]'.fpost_cleanpicture($item->picture).'[/img]'; - // if just a link, it may be a wall photo - check - if(isset($item->link)) - $_REQUEST["body"] .= fbpost_get_photo($uid,$item->link); - } - } - - /*if (($datarray['app'] == "Events") and isset($item->actions)) - foreach ($item->actions as $action) - if ($action->name == "View") - $_REQUEST["body"] .= " [url=".$action->link."]".$item->story."[/url]"; - */ - - if(trim($_REQUEST["body"]) == '') { - logger('facebook: empty body '.$item->id.' '.print_r($item, true)); - continue; - } - - $_REQUEST["body"] = trim($_REQUEST["body"]); - - if (isset($item->place)) { - if ($item->place->name or $item->place->location->street or - $item->place->location->city or $item->place->location->country) { - $_REQUEST["location"] = ''; - if ($item->place->name) - $_REQUEST["location"] .= $item->place->name; - if ($item->place->location->street) - $_REQUEST["location"] .= " ".$item->place->location->street; - if ($item->place->location->city) - $_REQUEST["location"] .= " ".$item->place->location->city; - if ($item->place->location->country) - $_REQUEST["location"] .= " ".$item->place->location->country; - - $_REQUEST["location"] = trim($_REQUEST["location"]); - } - if ($item->place->location->latitude and $item->place->location->longitude) - $_REQUEST["coord"] = substr($item->place->location->latitude, 0, 8) - .' '.substr($item->place->location->longitude, 0, 8); - } - - //print_r($_REQUEST); - logger('facebook: posting for user '.$uid); - - require_once('mod/item.php'); - item_post($a); - } - - set_pconfig($uid,'facebook','last_created', $lastcreated); -} - -function fbpost_get_photo($uid,$link) { - $access_token = get_pconfig($uid,'facebook','access_token'); - if(! $access_token || (! stristr($link,'facebook.com/photo.php'))) - return ""; - - $ret = preg_match('/fbid=([0-9]*)/',$link,$match); - if($ret) - $photo_id = $match[1]; - else - return ""; - - $x = fetch_url('https://graph.facebook.com/'.$photo_id.'?access_token='.$access_token); - $j = json_decode($x); - if($j->picture) - return "\n\n".'[url='.$link.'][img]'.fpost_cleanpicture($j->picture).'[/img][/url]'; - - return ""; -} - -function fpost_cleanpicture($image) { - - if (strpos($image, ".fbcdn.net/") and (substr($image, -6) == "_s.jpg")) - $image = substr($image, 0, -6)."_n.jpg"; - - $queryvar = fbpost_parse_query($image); - if ($queryvar['url'] != "") - $image = urldecode($queryvar['url']); - - return $image; -} - -function fbpost_parse_query($var) { - /** - * Use this function to parse out the query array element from - * the output of parse_url(). - */ - $var = parse_url($var, PHP_URL_QUERY); - $var = html_entity_decode($var); - $var = explode('&', $var); - $arr = array(); - - foreach($var as $val) { - $x = explode('=', $val); - $arr[$x[0]] = $x[1]; - } - - unset($val, $x, $var); - return $arr; -} diff --git a/forumdirectory.tgz b/forumdirectory.tgz index 0a84585d..249cd226 100644 Binary files a/forumdirectory.tgz and b/forumdirectory.tgz differ diff --git a/forumdirectory/forumdirectory.php b/forumdirectory/forumdirectory.php index 9837b9c1..0d7fbee8 100644 --- a/forumdirectory/forumdirectory.php +++ b/forumdirectory/forumdirectory.php @@ -168,12 +168,12 @@ function forumdirectory_content(&$a) { $entry = replace_macros($tpl,array( '$id' => $rr['id'], - '$profile_link' => $profile_link, + '$profile-link' => $profile_link, '$photo' => $a->get_cached_avatar_image($rr[$photo]), - '$alt_text' => $rr['name'], + '$alt-text' => $rr['name'], '$name' => $rr['name'], '$details' => $pdesc . $details, - '$page_type' => $page_type, + '$page-type' => $page_type, '$profile' => $profile, '$location' => template_escape($location), '$gender' => $gender, diff --git a/forumdirectory/view/forumdirectory_item.tpl b/forumdirectory/view/forumdirectory_item.tpl index e1bbffec..3b24d25f 100755 --- a/forumdirectory/view/forumdirectory_item.tpl +++ b/forumdirectory/view/forumdirectory_item.tpl @@ -2,14 +2,14 @@
$name
-
$page_type
+
$page-type
{{ if $pdesc }}
$profile.pdesc
{{ endif }}
diff --git a/forumdirectory/view/smarty3/forumdirectory_item.tpl b/forumdirectory/view/smarty3/forumdirectory_item.tpl index 66410efe..540a5aea 100644 --- a/forumdirectory/view/smarty3/forumdirectory_item.tpl +++ b/forumdirectory/view/smarty3/forumdirectory_item.tpl @@ -2,14 +2,14 @@
{{$name}}
-
{{$page_type}}
+
{{$page}}-type
{{if $pdesc}}
{{$profile.pdesc}}
{{/if}}
diff --git a/forumlist.tgz b/forumlist.tgz index 8356d443..1f303145 100644 Binary files a/forumlist.tgz and b/forumlist.tgz differ diff --git a/forumlist/forumlist.php b/forumlist/forumlist.php index 95ae9890..37752462 100644 --- a/forumlist/forumlist.php +++ b/forumlist/forumlist.php @@ -74,7 +74,7 @@ function forumlist_network_mod_init($a,$b) { if(count($contacts)) { foreach($contacts as $contact) { - $forumlist .= '"; + $forumlist .= '' . $contact['url'] . ' ' . $contact["name"]."
"; } } else { diff --git a/geonames/geonames.php b/geonames/geonames.php index 8226fc0b..19725bef 100755 --- a/geonames/geonames.php +++ b/geonames/geonames.php @@ -40,8 +40,8 @@ function geonames_install() { * */ - register_hook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_settings'); - register_hook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_settings_post'); + register_hook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_plugin_admin'); + register_hook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_plugin_admin_post'); logger("installed geonames"); } @@ -58,8 +58,8 @@ function geonames_uninstall() { */ unregister_hook('post_local', 'addon/geonames/geonames.php', 'geonames_post_hook'); - unregister_hook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_settings'); - unregister_hook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_settings_post'); + unregister_hook('plugin_settings', 'addon/geonames/geonames.php', 'geonames_plugin_admin'); + unregister_hook('plugin_settings_post', 'addon/geonames/geonames.php', 'geonames_plugin_admin_post'); logger("removed geonames"); @@ -135,7 +135,7 @@ function geonames_post_hook($a, &$item) { * */ -function geonames_settings_post($a,$post) { +function geonames_plugin_admin_post($a,$post) { if(! local_user() || (! x($_POST,'geonames-submit'))) return; set_pconfig(local_user(),'geonames','enable',intval($_POST['geonames'])); @@ -153,7 +153,7 @@ function geonames_settings_post($a,$post) { -function geonames_settings(&$a,&$s) { +function geonames_plugin_admin(&$a,&$s) { if(! local_user()) return; diff --git a/openstreetmap/openstreetmap.js b/openstreetmap/openstreetmap.js new file mode 100644 index 00000000..479e769c --- /dev/null +++ b/openstreetmap/openstreetmap.js @@ -0,0 +1,41 @@ +var toolserver = 'http://toolserver.org/~kolossos/openlayers/kml-on-ol.php'; +var startTag = ''; + +jQuery(document).ready(function($) { + + $('.wall-item-content-wrapper').each(function(index) { + var link = $(this).find('.wall-item-location .OSMMapLink'); + link.toggle(addIframe, removeIframe); + }); +}); + +function addIframe(ev) { + var coordinate = $(ev.target).attr('title'); + + var newTag = startTag + convertCoordinateString(coordinate) + endTag; + $(ev.target).parents('.wall-item-content-wrapper').append(newTag); +} + +function removeIframe(ev) { + $(ev.target).parents('.wall-item-content-wrapper').find('iframe').remove(); + +} + +function convertCoordinateString(coordinate) { + var locstring = coordinate.split(' '); + var northSouth; + var westEast; + + if (locstring[0] < 0) { + northSouth = '_S_'; + }else{ + northSouth = '_N_'; + } + if (locstring[1] < 0) { + westEast = '_W'; + }else{ + westEast = '_E'; + } + return Math.abs(locstring[0]) + northSouth + Math.abs(locstring[1]) + westEast; +} \ No newline at end of file diff --git a/openstreetmap/openstreetmap.php b/openstreetmap/openstreetmap.php index cb9abcd7..2c5975eb 100755 --- a/openstreetmap/openstreetmap.php +++ b/openstreetmap/openstreetmap.php @@ -10,24 +10,33 @@ function openstreetmap_install() { register_hook('render_location', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_location'); + register_hook('page_header', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_alterheader'); logger("installed openstreetmap"); } function openstreetmap_uninstall() { unregister_hook('render_location', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_location'); + unregister_hook('page_header', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_alterheader'); logger("removed openstreetmap"); } +function openstreetmap_alterheader($a, &$navHtml) { + $addScriptTag='' . "\r\n"; + $a->page['htmlhead'] .= $addScriptTag; +} function openstreetmap_location($a, &$item) { + + // + if(! (strlen($item['location']) || strlen($item['coord']))) - return; + return; /* * Get the configuration variables from the .htconfig file. - */ + */ $tmsserver = get_config('openstreetmap','tmsserver'); if(! $tmsserver) $tmsserver = 'http://openstreetmap.org'; @@ -38,12 +47,27 @@ function openstreetmap_location($a, &$item) { $location = ''; $coord = ''; + + if($item['location'] && !$item['coord'] && true){ //if only a location is given, find the lat-lon + $geo_account='demo'; + + $s = fetch_url('http://api.geonames.org/search?maxRows=1&fuzzy=0.8&q=' . $item['location'] . '&username=' . $geo_account); + + if($s){ + $xml = parse_xml_string($s); + + if($xml->geoname->lat && $xml->geoname->lng){ + $item['coord'] = $xml->geoname->lat . ' ' . $xml->geoname->lng; + } + } + } + $location = (($item['location']) ? '' . $item['location'] . '' : ''); if($item['coord']) { $coords = explode(' ', $item['coord']); if(count($coords) > 1) { - $coord = '' . $item['coord'] . '' ; + $coord = ' Map ' ; } } if(strlen($coord)) { @@ -67,9 +91,9 @@ function openstreetmap_plugin_admin (&$a, &$o) { $zoom = 17; $o = replace_macros( $t, array( - '$submit' => t('Submit'), - '$tmsserver' => array('tmsserver', t('Tile Server URL'), $tmsserver, t('A list of public tile servers')), - '$zoom' => array('zoom', t('Default zoom'), $zoom, t('The default zoom level. (1:world, 18:highest)')), + '$submit' => t('Submit'), + '$tmsserver' => array('tmsserver', t('Tile Server URL'), $tmsserver, t('A list of public tile servers')), + '$zoom' => array('zoom', t('Default zoom'), $zoom, t('The default zoom level. (1:world, 18:highest)')), )); } function openstreetmap_plugin_admin_post (&$a) { diff --git a/privacy_image_cache.tgz b/privacy_image_cache.tgz index 45444a68..b0690fc2 100644 Binary files a/privacy_image_cache.tgz and b/privacy_image_cache.tgz differ diff --git a/privacy_image_cache/privacy_image_cache.php b/privacy_image_cache/privacy_image_cache.php index 0e241e7e..3be42620 100644 --- a/privacy_image_cache/privacy_image_cache.php +++ b/privacy_image_cache/privacy_image_cache.php @@ -119,17 +119,7 @@ function privacy_image_cache_init() { // It shouldn't happen but it does - spaces in URL $_REQUEST['url'] = str_replace(" ", "+", $_REQUEST['url']); - // if the picture seems to be from another picture cache then take the original source - $queryvar = privacy_image_cache_parse_query($_REQUEST['url']); - if ($queryvar['url'] != "") - $_REQUEST['url'] = urldecode($queryvar['url']); - - // if fetching facebook pictures don't fetch the thumbnail but the big one - if (strpos($_REQUEST['url'], ".fbcdn.net/") and (substr($_REQUEST['url'], -6) == "_s.jpg")) - $_REQUEST['url'] = substr($_REQUEST['url'], 0, -6)."_n.jpg"; - - $redirects = 0; - $img_str = fetch_url($_REQUEST['url'],true, $redirects, 10); + $img_str = fetch_url($_REQUEST['url'],true); $tempfile = tempnam(get_config("system","temppath"), "cache"); file_put_contents($tempfile, $img_str); @@ -142,9 +132,9 @@ function privacy_image_cache_init() { $mime = "image/png"; $cachefile = ""; // Clear the cachefile so that the dummy isn't stored $valid = false; - $img = new Photo($img_str, "image/png"); + $img = new Photo($img_str); if($img->is_valid()) { - $img->scaleImage(10); + $img->scaleImage(1); $img_str = $img->imageString(); } //} else if (substr($img_str, 0, 6) == "GIF89a") { @@ -329,12 +319,14 @@ function privacy_image_cache_cron(&$a = null, &$b = null) { logger("Purging old Cache of the Privacy Image Cache", LOGGER_DEBUG); q('DELETE FROM `photo` WHERE `uid` = 0 AND `resource-id` LIKE "pic:%%" AND `created` < NOW() - INTERVAL %d SECOND', $cachetime); + set_config('pi_cache', 'last_delete', $time); clear_cache($a->get_basepath(), $a->get_basepath()."/privacy_image_cache"); - - set_config('pi_cache', 'last_delete', $time); } + + + /** * @param App $a * @param null|object $o @@ -380,22 +372,3 @@ function privacy_image_cache_plugin_admin_post(&$a = null, &$o = null){ q('DELETE FROM `photo` WHERE `uid` = 0 AND `resource-id` LIKE "pic:%%"'); } } - -function privacy_image_cache_parse_query($var) { - /** - * Use this function to parse out the query array element from - * the output of parse_url(). - */ - $var = parse_url($var, PHP_URL_QUERY); - $var = html_entity_decode($var); - $var = explode('&', $var); - $arr = array(); - - foreach($var as $val) { - $x = explode('=', $val); - $arr[$x[0]] = $x[1]; - } - - unset($val, $x, $var); - return $arr; -} diff --git a/procrunner.tgz b/procrunner.tgz deleted file mode 100644 index fec9dfa7..00000000 Binary files a/procrunner.tgz and /dev/null differ diff --git a/procrunner/procrunner.php b/procrunner/procrunner.php deleted file mode 100755 index 4c6f64b6..00000000 --- a/procrunner/procrunner.php +++ /dev/null @@ -1,53 +0,0 @@ - - * Author: Mike Macgirvin - */ - -function procrunner_install() { - - $addons = get_config('system','addon'); - if(strstr('poormancron',$addons)) { - logger('procrunner incompatible with poormancron. Not installing procrunner.'); - return; - } - - // check for command line php - $a = get_app(); - $ex = Array(); - $ex[0] = ((x($a->config,'php_path')) && (strlen($a->config['php_path'])) ? $a->config['php_path'] : 'php'); - $ex[1] = dirname(dirname(dirname(__file__)))."/testargs.php"; - $ex[2] = "test"; - $out = exec(implode(" ", $ex)); - if ($out==="test") { - logger('procrunner not required on this system. Not installing.'); - return; - } else { - register_hook('proc_run', 'addon/procrunner/procrunner.php','procrunner_procrun'); - logger("installed procrunner"); - } - -} - -function procrunner_uninstall() { - unregister_hook('proc_run', 'addon/procrunner/procrunner.php','procrunner_procrun'); - logger("removed procrunner"); -} - - - -function procrunner_procrun(&$a, &$arr) { - - $argv = $arr['args']; - $arr['run_cmd'] = false; - logger("procrunner procrun ".implode(", ",$argv)); - array_shift($argv); - $argc = count($argv); - logger("procrunner procrun require_once ".basename($argv[0])); - require_once(basename($argv[0])); - $funcname=str_replace(".php", "", basename($argv[0]))."_run"; - $funcname($argv, $argc); -} diff --git a/statusnet.tgz b/statusnet.tgz index ea19ef18..9801af55 100755 Binary files a/statusnet.tgz and b/statusnet.tgz differ diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index f3678c80..4781fcc2 100755 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -30,8 +30,6 @@ * Thank you guys for the Twitter compatible API! */ -define('STATUSNET_DEFAULT_POLL_INTERVAL', 5); // given in minutes - require_once('library/twitteroauth.php'); class StatusNetOAuth extends TwitterOAuth { @@ -106,7 +104,6 @@ function statusnet_install() { register_hook('notifier_normal', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); register_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); register_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); - register_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron'); logger("installed statusnet"); } @@ -117,7 +114,6 @@ function statusnet_uninstall() { unregister_hook('notifier_normal', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); unregister_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); unregister_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); - unregister_hook('cron', 'addon/statusnet/statusnet.php', 'statusnet_cron'); // old setting - remove only unregister_hook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); @@ -135,10 +131,13 @@ function statusnet_jot_nets(&$a,&$b) { $statusnet_defpost = get_pconfig(local_user(),'statusnet','post_by_default'); $selected = ((intval($statusnet_defpost) == 1) ? ' checked="checked" ' : ''); $b .= '
' - . t('Post to StatusNet') . '
'; + . t('Post to StatusNet') . '
'; } } + + + function statusnet_settings_post ($a,$post) { if(! local_user()) return; @@ -149,17 +148,14 @@ function statusnet_settings_post ($a,$post) { /*** * if the statusnet-disconnect checkbox is set, clear the statusnet configuration */ - del_pconfig(local_user(), 'statusnet', 'consumerkey'); - del_pconfig(local_user(), 'statusnet', 'consumersecret'); - del_pconfig(local_user(), 'statusnet', 'post'); - del_pconfig(local_user(), 'statusnet', 'post_by_default'); - del_pconfig(local_user(), 'statusnet', 'oauthtoken'); - del_pconfig(local_user(), 'statusnet', 'oauthsecret'); - del_pconfig(local_user(), 'statusnet', 'baseapi'); - del_pconfig(local_user(), 'statusnet', 'post_taglinks'); - del_pconfig(local_user(), 'statusnet', 'lastid'); - del_pconfig(local_user(), 'statusnet', 'mirror_posts'); - del_pconfig(local_user(), 'statusnet', 'intelligent_shortening'); + del_pconfig( local_user(), 'statusnet', 'consumerkey' ); + del_pconfig( local_user(), 'statusnet', 'consumersecret' ); + del_pconfig( local_user(), 'statusnet', 'post' ); + del_pconfig( local_user(), 'statusnet', 'post_by_default' ); + del_pconfig( local_user(), 'statusnet', 'oauthtoken' ); + del_pconfig( local_user(), 'statusnet', 'oauthsecret' ); + del_pconfig( local_user(), 'statusnet', 'baseapi' ); + del_pconfig( local_user(), 'statusnet', 'post_taglinks'); } else { if (isset($_POST['statusnet-preconf-apiurl'])) { /*** @@ -233,8 +229,6 @@ function statusnet_settings_post ($a,$post) { set_pconfig(local_user(),'statusnet','post',intval($_POST['statusnet-enable'])); set_pconfig(local_user(),'statusnet','post_by_default',intval($_POST['statusnet-default'])); set_pconfig(local_user(),'statusnet','post_taglinks',intval($_POST['statusnet-sendtaglinks'])); - set_pconfig(local_user(), 'statusnet', 'mirror_posts', intval($_POST['statusnet-mirror'])); - set_pconfig(local_user(), 'statusnet', 'intelligent_shortening', intval($_POST['statusnet-shortening'])); info( t('StatusNet settings updated.') . EOL); }}}} } @@ -259,12 +253,6 @@ function statusnet_settings(&$a,&$s) { $defchecked = (($defenabled) ? ' checked="checked" ' : ''); $linksenabled = get_pconfig(local_user(),'statusnet','post_taglinks'); $linkschecked = (($linksenabled) ? ' checked="checked" ' : ''); - - $mirrorenabled = get_pconfig(local_user(),'statusnet','mirror_posts'); - $mirrorchecked = (($mirrorenabled) ? ' checked="checked" ' : ''); - $shorteningenabled = get_pconfig(local_user(),'statusnet','intelligent_shortening'); - $shorteningchecked = (($shorteningenabled) ? ' checked="checked" ' : ''); - $s .= '
'; $s .= '

'. t('StatusNet Posting Settings').'

'; @@ -354,15 +342,6 @@ function statusnet_settings(&$a,&$s) { $s .= ''; $s .= ''; $s .= '
'; - - $s .= ''; - $s .= ''; - $s .= '
'; - - $s .= ''; - $s .= ''; - $s .= '
'; - $s .= ''; $s .= ''; $s .= '
'; @@ -448,24 +427,6 @@ function statusnet_shortenmsg($b, $max_char) { if ($b["title"] != "") $body = $b["title"]."\n\n".$body; - if (strpos($body, "[bookmark") !== false) { - // splitting the text in two parts: - // before and after the bookmark - $pos = strpos($body, "[bookmark"); - $body1 = substr($body, 0, $pos); - $body2 = substr($body, $pos); - - // Removing all quotes after the bookmark - // they are mostly only the content after the bookmark. - $body2 = preg_replace("/\[quote\=([^\]]*)\](.*?)\[\/quote\]/ism",'',$body2); - $body2 = preg_replace("/\[quote\](.*?)\[\/quote\]/ism",'',$body2); - $body = $body1.$body2; - } - - // Add some newlines so that the message could be cut better - $body = str_replace(array("[quote", "[bookmark", "[/bookmark]", "[/quote]"), - array("\n[quote", "\n[bookmark", "[/bookmark]\n", "[/quote]\n"), $body); - // remove the recycle signs and the names since they aren't helpful on twitter // recycle 1 $recycle = html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8'); @@ -562,31 +523,20 @@ function statusnet_post_hook(&$a,&$b) { if(! strstr($b['postopts'],'statusnet')) return; - // if posts comes from statusnet don't send it back - if($b['app'] == "StatusNet") - return; - - logger('statusnet post invoked'); - load_pconfig($b['uid'], 'statusnet'); - + $api = get_pconfig($b['uid'], 'statusnet', 'baseapi'); - $ckey = get_pconfig($b['uid'], 'statusnet', 'consumerkey'); - $csecret = get_pconfig($b['uid'], 'statusnet', 'consumersecret'); - $otoken = get_pconfig($b['uid'], 'statusnet', 'oauthtoken'); - $osecret = get_pconfig($b['uid'], 'statusnet', 'oauthsecret'); - $intelligent_shortening = get_pconfig($b['uid'], 'statusnet', 'intelligent_shortening'); - - // Global setting overrides this - if (get_config('statusnet','intelligent_shortening')) - $intelligent_shortening = get_config('statusnet','intelligent_shortening'); + $ckey = get_pconfig($b['uid'], 'statusnet', 'consumerkey' ); + $csecret = get_pconfig($b['uid'], 'statusnet', 'consumersecret' ); + $otoken = get_pconfig($b['uid'], 'statusnet', 'oauthtoken' ); + $osecret = get_pconfig($b['uid'], 'statusnet', 'oauthsecret' ); if($ckey && $csecret && $otoken && $osecret) { require_once('include/bbcode.php'); $dent = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret); $max_char = $dent->get_maxlength(); // max. length for a dent - // we will only work with up to two times the length of the dent + // 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 // information during shortening of potential links but do not // shorten all the links in a 200000 character long essay. @@ -747,113 +697,14 @@ function statusnet_plugin_admin(&$a, &$o){ 'key' => Array("key[$id]", t("Consumer Key"), "", ""), ); + $t = get_markup_template( "admin.tpl", "addon/statusnet/" ); $o = replace_macros($t, array( '$submit' => t('Submit'), + '$sites' => $sitesform, + )); + + } - -function statusnet_cron($a,$b) { - $last = get_config('statusnet','last_poll'); - - $poll_interval = intval(get_config('statusnet','poll_interval')); - if(! $poll_interval) - $poll_interval = STATUSNET_DEFAULT_POLL_INTERVAL; - - if($last) { - $next = $last + ($poll_interval * 60); - if($next > time()) { - logger('statusnet: poll intervall not reached'); - return; - } - } - logger('statusnet: cron_start'); - - $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'statusnet' AND `k` = 'mirror_posts' AND `v` = '1' ORDER BY RAND() "); - if(count($r)) { - foreach($r as $rr) { - logger('statusnet: fetching for user '.$rr['uid']); - statusnet_fetchtimeline($a, $rr['uid']); - } - } - - logger('statusnet: cron_end'); - - set_config('statusnet','last_poll', time()); -} - -function statusnet_fetchtimeline($a, $uid) { - $ckey = get_pconfig($uid, 'statusnet', 'consumerkey'); - $csecret = get_pconfig($uid, 'statusnet', 'consumersecret'); - $api = get_pconfig($uid, 'statusnet', 'baseapi'); - $otoken = get_pconfig($uid, 'statusnet', 'oauthtoken'); - $osecret = get_pconfig($uid, 'statusnet', 'oauthsecret'); - $lastid = get_pconfig($uid, 'statusnet', 'lastid'); - - $application_name = get_config('statusnet', 'application_name'); - - if ($application_name == "") - $application_name = $a->get_hostname(); - - $connection = new StatusNetOAuth($api, $ckey,$csecret,$otoken,$osecret); - - $parameters = array("exclude_replies" => true, "trim_user" => true, "contributor_details" => false, "include_rts" => false); - - $first_time = ($lastid == ""); - - if ($lastid <> "") - $parameters["since_id"] = $lastid; - - $items = $connection->get('statuses/user_timeline', $parameters); - $posts = array_reverse($items); - - foreach ($posts as $post) { - if ($post->id > $lastid) - $lastid = $post->id; - - if ($first_time) - continue; - - if (is_object($post->retweeted_status)) - continue; - - if ($post->in_reply_to_status_id != "") - continue; - - if (!strpos($post->source, $application_name)) { - $_SESSION["authenticated"] = true; - $_SESSION["uid"] = $uid; - - $_REQUEST["type"] = "wall"; - $_REQUEST["api_source"] = true; - $_REQUEST["profile_uid"] = $uid; - $_REQUEST["source"] = "StatusNet"; - - //$_REQUEST["date"] = $post->created_at; - - $_REQUEST["body"] = $post->text; - if (is_string($post->place->name)) - $_REQUEST["location"] = $post->place->name; - - if (is_string($post->place->full_name)) - $_REQUEST["location"] = $post->place->full_name; - - if (is_array($post->geo->coordinates)) - $_REQUEST["coord"] = $post->geo->coordinates[0]." ".$post->geo->coordinates[1]; - - if (is_array($post->coordinates->coordinates)) - $_REQUEST["coord"] = $post->coordinates->coordinates[1]." ".$post->coordinates->coordinates[0]; - - //print_r($_REQUEST); - if ($_REQUEST["body"] != "") { - logger('statusnet: posting for user '.$uid); - - require_once('mod/item.php'); - item_post($a); - } - } - } - set_pconfig($uid, 'statusnet', 'lastid', $lastid); -} - diff --git a/twitter.tgz b/twitter.tgz index d86175b0..0505830c 100755 Binary files a/twitter.tgz and b/twitter.tgz differ diff --git a/twitter/twitter.php b/twitter/twitter.php index 88cf3858..6cb2d9cd 100755 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -36,8 +36,6 @@ * Documentation: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin */ -define('TWITTER_DEFAULT_POLL_INTERVAL', 5); // given in minutes - function twitter_install() { // we need some hooks, for the configuration and for sending tweets register_hook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings'); @@ -45,7 +43,6 @@ function twitter_install() { register_hook('post_local', 'addon/twitter/twitter.php', 'twitter_post_local'); register_hook('notifier_normal', 'addon/twitter/twitter.php', 'twitter_post_hook'); register_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets'); - register_hook('cron', 'addon/twitter/twitter.php', 'twitter_cron'); logger("installed twitter"); } @@ -56,7 +53,6 @@ function twitter_uninstall() { unregister_hook('post_local', 'addon/twitter/twitter.php', 'twitter_post_local'); unregister_hook('notifier_normal', 'addon/twitter/twitter.php', 'twitter_post_hook'); unregister_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets'); - unregister_hook('cron', 'addon/twitter/twitter.php', 'twitter_cron'); // old setting - remove only unregister_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook'); @@ -74,8 +70,10 @@ function twitter_jot_nets(&$a,&$b) { $tw_defpost = get_pconfig(local_user(),'twitter','post_by_default'); $selected = ((intval($tw_defpost) == 1) ? ' checked="checked" ' : ''); $b .= '
' - . t('Post to Twitter') . '
'; + . t('Post to Twitter') . '
'; } + + } function twitter_settings_post ($a,$post) { @@ -89,23 +87,20 @@ function twitter_settings_post ($a,$post) { * if the twitter-disconnect checkbox is set, clear the OAuth key/secret pair * from the user configuration */ - del_pconfig(local_user(), 'twitter', 'consumerkey'); - del_pconfig(local_user(), 'twitter', 'consumersecret'); - del_pconfig(local_user(), 'twitter', 'oauthtoken'); - del_pconfig(local_user(), 'twitter', 'oauthsecret'); - del_pconfig(local_user(), 'twitter', 'post'); - del_pconfig(local_user(), 'twitter', 'post_by_default'); - del_pconfig(local_user(), 'twitter', 'post_taglinks'); - del_pconfig(local_user(), 'twitter', 'lastid'); - del_pconfig(local_user(), 'twitter', 'mirror_posts'); - del_pconfig(local_user(), 'twitter', 'intelligent_shortening'); + del_pconfig( local_user(), 'twitter', 'consumerkey' ); + del_pconfig( local_user(), 'twitter', 'consumersecret' ); + del_pconfig( local_user(), 'twitter', 'oauthtoken' ); + del_pconfig( local_user(), 'twitter', 'oauthsecret' ); + del_pconfig( local_user(), 'twitter', 'post' ); + del_pconfig( local_user(), 'twitter', 'post_by_default' ); + del_pconfig( local_user(), 'twitter', 'post_taglinks'); } else { if (isset($_POST['twitter-pin'])) { // if the user supplied us with a PIN from Twitter, let the magic of OAuth happen logger('got a Twitter PIN'); require_once('library/twitteroauth.php'); - $ckey = get_config('twitter', 'consumerkey'); - $csecret = get_config('twitter', 'consumersecret'); + $ckey = get_config('twitter', 'consumerkey' ); + $csecret = get_config('twitter', 'consumersecret' ); // the token and secret for which the PIN was generated were hidden in the settings // form as token and token2, we need a new connection to Twitter using these token // and secret to request a Access Token with the PIN @@ -124,8 +119,6 @@ function twitter_settings_post ($a,$post) { set_pconfig(local_user(),'twitter','post',intval($_POST['twitter-enable'])); set_pconfig(local_user(),'twitter','post_by_default',intval($_POST['twitter-default'])); set_pconfig(local_user(),'twitter','post_taglinks',intval($_POST['twitter-sendtaglinks'])); - set_pconfig(local_user(), 'twitter', 'mirror_posts', intval($_POST['twitter-mirror'])); - set_pconfig(local_user(), 'twitter', 'intelligent_shortening', intval($_POST['twitter-shortening'])); info( t('Twitter settings updated.') . EOL); }} } @@ -148,10 +141,6 @@ function twitter_settings(&$a,&$s) { $defchecked = (($defenabled) ? ' checked="checked" ' : ''); $linksenabled = get_pconfig(local_user(),'twitter','post_taglinks'); $linkschecked = (($linksenabled) ? ' checked="checked" ' : ''); - $mirrorenabled = get_pconfig(local_user(),'twitter','mirror_posts'); - $mirrorchecked = (($mirrorenabled) ? ' checked="checked" ' : ''); - $shorteningenabled = get_pconfig(local_user(),'twitter','intelligent_shortening'); - $shorteningchecked = (($shorteningenabled) ? ' checked="checked" ' : ''); $s .= '
'; $s .= '

'. t('Twitter Posting Settings') .'

'; @@ -209,15 +198,6 @@ function twitter_settings(&$a,&$s) { $s .= ''; $s .= ''; $s .= '
'; - - $s .= ''; - $s .= ''; - $s .= '
'; - - $s .= ''; - $s .= ''; - $s .= '
'; - $s .= ''; $s .= ''; $s .= '
'; @@ -306,24 +286,6 @@ function twitter_shortenmsg($b) { if ($b["title"] != "") $body = $b["title"]."\n\n".$body; - if (strpos($body, "[bookmark") !== false) { - // splitting the text in two parts: - // before and after the bookmark - $pos = strpos($body, "[bookmark"); - $body1 = substr($body, 0, $pos); - $body2 = substr($body, $pos); - - // Removing all quotes after the bookmark - // they are mostly only the content after the bookmark. - $body2 = preg_replace("/\[quote\=([^\]]*)\](.*?)\[\/quote\]/ism",'',$body2); - $body2 = preg_replace("/\[quote\](.*?)\[\/quote\]/ism",'',$body2); - $body = $body1.$body2; - } - - // Add some newlines so that the message could be cut better - $body = str_replace(array("[quote", "[bookmark", "[/bookmark]", "[/quote]"), - array("\n[quote", "\n[bookmark", "[/bookmark]\n", "[/quote]\n"), $body); - // remove the recycle signs and the names since they aren't helpful on twitter // recycle 1 $recycle = html_entity_decode("♲ ", ENT_QUOTES, 'UTF-8'); @@ -423,24 +385,15 @@ function twitter_post_hook(&$a,&$b) { if($b['parent'] != $b['id']) return; - // if post comes from twitter don't send it back - if($b['app'] == "Twitter") - return; - logger('twitter post invoked'); load_pconfig($b['uid'], 'twitter'); - $ckey = get_config('twitter', 'consumerkey'); - $csecret = get_config('twitter', 'consumersecret'); - $otoken = get_pconfig($b['uid'], 'twitter', 'oauthtoken'); - $osecret = get_pconfig($b['uid'], 'twitter', 'oauthsecret'); - $intelligent_shortening = get_pconfig($b['uid'], 'twitter', 'intelligent_shortening'); - - // Global setting overrides this - if (get_config('twitter','intelligent_shortening')) - $intelligent_shortening = get_config('twitter','intelligent_shortening'); + $ckey = get_config('twitter', 'consumerkey' ); + $csecret = get_config('twitter', 'consumersecret' ); + $otoken = get_pconfig($b['uid'], 'twitter', 'oauthtoken' ); + $osecret = get_pconfig($b['uid'], 'twitter', 'oauthsecret' ); if($ckey && $csecret && $otoken && $osecret) { logger('twitter: we have customer key and oauth stuff, going to send.', LOGGER_DEBUG); @@ -450,6 +403,9 @@ function twitter_post_hook(&$a,&$b) { $tweet = new TwitterOAuth($ckey,$csecret,$otoken,$osecret); // in theory max char is 140 but T. uses t.co to make links // longer so we give them 10 characters extra + + $intelligent_shortening = get_config('twitter','intelligent_shortening'); + if (!$intelligent_shortening) { $max_char = 130; // max. length for a tweet // we will only work with up to two times the length of the dent @@ -550,106 +506,15 @@ function twitter_plugin_admin_post(&$a){ function twitter_plugin_admin(&$a, &$o){ $t = get_markup_template( "admin.tpl", "addon/twitter/" ); - $o = replace_macros($t, array( + $includes = array( + '$field_input' => 'field_input.tpl', + ); + $includes = set_template_includes($a->theme['template_engine'], $includes); + + $o = replace_macros($t, $includes + array( '$submit' => t('Submit'), // name, label, value, help, [extra values] '$consumerkey' => array('consumerkey', t('Consumer key'), get_config('twitter', 'consumerkey' ), ''), '$consumersecret' => array('consumersecret', t('Consumer secret'), get_config('twitter', 'consumersecret' ), '') )); } - -function twitter_cron($a,$b) { - $last = get_config('twitter','last_poll'); - - $poll_interval = intval(get_config('twitter','poll_interval')); - if(! $poll_interval) - $poll_interval = TWITTER_DEFAULT_POLL_INTERVAL; - - if($last) { - $next = $last + ($poll_interval * 60); - if($next > time()) { - logger('twitter: poll intervall not reached'); - return; - } - } - logger('twitter: cron_start'); - - $r = q("SELECT * FROM `pconfig` WHERE `cat` = 'twitter' AND `k` = 'mirror_posts' AND `v` = '1' ORDER BY RAND() "); - if(count($r)) { - foreach($r as $rr) { - logger('twitter: fetching for user '.$rr['uid']); - twitter_fetchtimeline($a, $rr['uid']); - } - } - - logger('twitter: cron_end'); - - set_config('twitter','last_poll', time()); -} - -function twitter_fetchtimeline($a, $uid) { - $ckey = get_config('twitter', 'consumerkey'); - $csecret = get_config('twitter', 'consumersecret'); - $otoken = get_pconfig($uid, 'twitter', 'oauthtoken'); - $osecret = get_pconfig($uid, 'twitter', 'oauthsecret'); - $lastid = get_pconfig($uid, 'twitter', 'lastid'); - - $application_name = get_config('twitter', 'application_name'); - - if ($application_name == "") - $application_name = $a->get_hostname(); - - require_once('library/twitteroauth.php'); - $connection = new TwitterOAuth($ckey,$csecret,$otoken,$osecret); - - $parameters = array("exclude_replies" => true, "trim_user" => true, "contributor_details" => false, "include_rts" => false); - - $first_time = ($lastid == ""); - - if ($lastid <> "") - $parameters["since_id"] = $lastid; - - $items = $connection->get('statuses/user_timeline', $parameters); - $posts = array_reverse($items); - - foreach ($posts as $post) { - if ($post->id_str > $lastid) - $lastid = $post->id_str; - - if ($first_time) - continue; - - if (!strpos($post->source, $application_name)) { - $_SESSION["authenticated"] = true; - $_SESSION["uid"] = $uid; - - $_REQUEST["type"] = "wall"; - $_REQUEST["api_source"] = true; - $_REQUEST["profile_uid"] = $uid; - $_REQUEST["source"] = "Twitter"; - - //$_REQUEST["date"] = $post->created_at; - - $_REQUEST["body"] = $post->text; - if (is_string($post->place->name)) - $_REQUEST["location"] = $post->place->name; - - if (is_string($post->place->full_name)) - $_REQUEST["location"] = $post->place->full_name; - - if (is_array($post->geo->coordinates)) - $_REQUEST["coord"] = $post->geo->coordinates[0]." ".$post->geo->coordinates[1]; - - if (is_array($post->coordinates->coordinates)) - $_REQUEST["coord"] = $post->coordinates->coordinates[1]." ".$post->coordinates->coordinates[0]; - - //print_r($_REQUEST); - logger('twitter: posting for user '.$uid); - - require_once('mod/item.php'); - item_post($a); - - } - } - set_pconfig($uid, 'twitter', 'lastid', $lastid); -}