+++ /dev/null
-<?php
-/*
- * Name: Adult Smilies
- * Description: Smily icons that could or should not be included in core
- * Version: 1.0
- * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
- *
- * This is a template for how to extend the "smily" code.
- *
- */
-
-function adult_smile_install() {
- register_hook('smilie', 'addon/adult_smile/adult_smile.php', 'adult_smile_smilies');
-}
-
-function adult_smile_uninstall() {
- unregister_hook('smilie', 'addon/adult_smile/adult_smile.php', 'adult_smile_smilies');
-}
-
-
-
-function adult_smile_smilies(&$a,&$b) {
-
- $b['texts'][] = '(o)(o)';
- $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/adult_smile/icons/tits.gif' . '" alt="' . '(o)(o)' . '" />';
-
- $b['texts'][] = '(.)(.)';
- $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/adult_smile/icons/tits.gif' . '" alt="' . '(.)(.)' . '" />';
-
- $b['texts'][] = ':bong';
- $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/adult_smile/icons/bong.gif' . '" alt="' . ':bong' . '" />';
-
-
-}
\ No newline at end of file
function blockem_display_item(&$a,&$b) {
if(strstr($b['output']['body'],'id="blockem-wrap-'))
- $b['output']['thumb'] = $a->get_baseurl() . "/images/default-profile-sm.jpg";
+ $b['output']['thumb'] = $a->get_baseurl() . "/images/person-80.jpg";
}
$aside['$login_form'] = login(($a->config['register_policy'] == REGISTER_CLOSED) ? false : true);
// last 12 users
- $aside['$lastusers_title'] = t('Last users');
+ $aside['$lastusers_title'] = t('Latest users');
$aside['$lastusers_items'] = array();
$sql_extra = "";
$publish = (get_config('system','publish_all') ? '' : " AND `publish` = 1 " );
}
// last 12 photos
- $aside['$photos_title'] = t('Last 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`
}
// last 10 liked items
- $aside['$like_title'] = t('Last likes');
+ $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`
-Thomas Willingham
+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.
-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.
+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
Installing the Friendica/Facebook connector
-1. register an API key for your site from developer.facebook.com
- a. We'd be very happy if you include "Friendica" in the application name
- to increase name recognition. The Friendica icons are also present
- in the images directory and may be uploaded as a Facebook app icon.
- Use images/friendica-16.jpg for the Icon and images/friendica-128.jpg for the Logo.
- b. The url should be your site URL with a trailing slash.
- You may use http://portal.friendika.com/privacy as the privacy policy
- URL unless your site has different requirements, and
- http://portal.friendika.com as the Terms of Service URL unless
- you have different requirements. (Friendica is a software application
- and does not require Terms of Service, though your installation of it might).
- c. Set the following values in your .htconfig.php file
- $a->config['facebook']['appid'] = 'xxxxxxxxxxx';
- $a->config['facebook']['appsecret'] = 'xxxxxxxxxxxxxxx';
- Replace with the settings Facebook gives you.
- d. Navigate to Set Web->Site URL & Domain -> Website Settings. Set Site URL
- to yoursubdomain.yourdomain.com. Set Site Domain to your yourdomain.com.
- e. Chose "Website" (the url should be your site URL with a trailing slash) in the
- "Select how your app integrates with Facebook" section.
-2. Enable the facebook plugin by including it in .htconfig.php - e.g.
- $a->config['system']['addon'] = 'plugin1,plugin2,facebook';
-3. Visit the Facebook Settings section of the "Settings->Plugin Settings" page.
- and click 'Install Facebook Connector'.
-4. This will ask you to login to Facebook and grant permission to the
- plugin to do its stuff. Allow it to do so.
-5. Optional step: If you want to use Facebook Real Time Updates (so new messages
- and new contacts are added ~1min after they are postet / added on FB), go to
- Settings -> plugins -> facebook and press the "Activate Real-Time Updates"-button.
-6. You're done. To turn it off visit the Plugin Settings page again and
- 'Remove Facebook posting'.
+1. Visit https://developers.facebook.com/apps to register an app.
+ a) Click "Create a new app"
+ b) We'd be very happy if you include "Friendica" in the application name
+ to increase name recognition.
+ c) Edit your app settings on the setup page. The Friendica icons are present
+ in the images directory and may be uploaded as a Facebook app icon. Use
+ images/friendica-16.jpg for the Icon and images/Friendica-128.jpg for the logo.
+ d) In the App Display name enter the name of your app (this should default to the
+ name you chose in part a).
+ e) Enter YourDomain.com in the App Domain field and hit return.
+ f) In "Select how your app connects with Facebook select "Website" and enter the
+ full URL to your Friendica install including HTTPS and a trailing slash.
+
+2. Enable the Facebook plugin by clicking on the icon next to it's name on the plugin
+ page of your admin panel.
+ b) return to the Facebook plugin page in your admin panel, and fill in the App-ID
+ and Application Secret settings you got from Facebook.
+ c) Click save.
+ d) Finally, return to the Facebook settings page, and activate real-time updates.
+
+ i. If you for any reason prefer to use a configuration file instead of the admin panels,
+ Activate the plugin by including it in .htconfig.php, e.g.
+
+ $a->config['system']['addon'] = 'plugin1,plugin2,facebook';
+
+ and set the following values:
+ $a->config['facebook']['appid'] = 'xxxxxxxxxxx';
+ $a->config['facebook']['appsecret'] = 'xxxxxxxxxxxxxxx';
+
+ Replace with the settings Facebook gives you.
+
+
+3. To use the Facebook plugin, visit the "connector settings" area of your settings
+ page. Click "Install Facebook Connector".
+4. This will ask you to login to Facebook and allow the plugin to do it's stuff.
+ Allow it to do so.
+5. You're done. To turn it off visit the Plugin Settings page again and
+ 'Remove Facebook posting'.
Vidoes and embeds will not be posted if there is no other content. Links
and images will be converted to a format suitable for the Facebook API and
* d. Navigate to Set Web->Site URL & Domain -> Website Settings. Set
* Site URL to yoursubdomain.yourdomain.com. Set Site Domain to your
* yourdomain.com.
- * 2. (This step is now obsolete. Enable the plugin via the Admin panel.)
- * Enable the facebook plugin by including it in .htconfig.php - e.g.
- * $a->config['system']['addon'] = 'plugin1,plugin2,facebook';
+ * 2. Visit the Facebook Settings section of the "Settings->Plugin Settings" page.
+ * and click 'Install Facebook Connector'.
* 3. Visit the Facebook Settings section of the "Settings->Plugin Settings" page.
* and click 'Install Facebook Connector'.
* 4. This will ask you to login to Facebook and grant permission to the
* authenticate to your site to establish identity. We will address this
* in a future release.
*/
+
+ /** TODO
+ * - Implement a method for the administrator to delete all configuration data the plugin has created,
+ * e.g. the app_access_token
+ */
-define('FACEBOOK_MAXPOSTLEN', 420);
+// Size of maximum post length increased
+// see http://www.facebook.com/schrep/posts/203969696349811
+// define('FACEBOOK_MAXPOSTLEN', 420);
+define('FACEBOOK_MAXPOSTLEN', 63206);
+define('FACEBOOK_SESSION_ERR_NOTIFICATION_INTERVAL', 259200); // 3 days
+define('FACEBOOK_DEFAULT_POLL_INTERVAL', 60); // given in minutes
+define('FACEBOOK_MIN_POLL_INTERVAL', 5);
function facebook_install() {
register_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets');
register_hook('connector_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings');
register_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron');
+ register_hook('enotify', 'addon/facebook/facebook.php', 'facebook_enotify');
register_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook');
-
- if (get_config('facebook', 'realtime_active') == 1) facebook_subscription_add_users(); // Restore settings, if the plugin was installed before
}
unregister_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets');
unregister_hook('connector_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings');
unregister_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron');
+ unregister_hook('enotify', 'addon/facebook/facebook.php', 'facebook_enotify');
unregister_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook');
// hook moved
unregister_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook');
unregister_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings');
-
- if (get_config('facebook', 'realtime_active') == 1) facebook_subscription_del_users();
}
$s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token);
if($s) {
$j = json_decode($s);
- logger('facebook_init: wall: ' . print_r($j,true), LOGGER_DATA);
- fb_consume_stream($uid,$j,($private_wall) ? false : true);
+ if (isset($j->data)) {
+ logger('facebook_init: wall: ' . print_r($j,true), LOGGER_DATA);
+ fb_consume_stream($uid,$j,($private_wall) ? false : true);
+ } else {
+ logger('facebook_init: wall: got no data from Facebook: ' . print_r($j,true), LOGGER_NORMAL);
+ }
}
}
$jp->link = 'http://facebook.com/profile.php?id=' . $person->id;
+ // If its a page then set the first name from the username
+ if (!$jp->first_name and $jp->username)
+ $jp->first_name = $jp->username;
+
// check if we already have a contact
$r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
info( t('Updating contacts') . EOL);
}
-
- $fb_installed = get_pconfig(local_user(),'facebook','post');
-
+ $o = '';
+
+ $fb_installed = false;
+ if (get_pconfig(local_user(),'facebook','post')) {
+ $access_token = get_pconfig(local_user(),'facebook','access_token');
+ if ($access_token) {
+ $private_wall = intval(get_pconfig($uid,'facebook','private_wall'));
+ $s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token);
+ if($s) {
+ $j = json_decode($s);
+ if (isset($j->data)) $fb_installed = true;
+ }
+ }
+ }
+
$appid = get_config('facebook','appid');
if(! $appid) {
$poll_interval = intval(get_config('facebook','poll_interval'));
if(! $poll_interval)
- $poll_interval = 3600;
+ $poll_interval = FACEBOOK_DEFAULT_POLL_INTERVAL;
if($last) {
$next = $last + $poll_interval;
if(strlen($a->config['admin_email']) && !get_config('facebook', 'realtime_err_mailsent')) {
$res = mail($a->config['admin_email'], t('Problems with Facebook Real-Time Updates'),
- "Hi!\n\nThere's a problem with the Facebook Real-Time Updates that cannob be solved automatically. Maybe an permission issue?\n\nThis e-mail will only be sent once.",
+ "Hi!\n\nThere's a problem with the Facebook Real-Time Updates that cannot be solved automatically. Maybe a permission issue?\n\nPlease try to re-activate it on " . $a->config["system"]["url"] . "/admin/plugins/facebook\n\nThis e-mail will only be sent once.",
'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
. 'Content-type: text/plain; charset=UTF-8' . "\n"
. 'Content-transfer-encoding: 8bit'
function facebook_plugin_admin(&$a, &$o){
+ $o = '<input type="hidden" name="form_security_token" value="' . get_form_security_token("fbsave") . '">';
- $activated = facebook_check_realtime_active();
- if ($activated) {
- $o = t('Real-Time Updates are activated.') . '<br><br>';
- $o .= '<input type="submit" name="real_time_deactivate" value="' . t('Deactivate Real-Time Updates') . '">';
- } else {
- $o = t('Real-Time Updates not activated.') . '<br><input type="submit" name="real_time_activate" value="' . t('Activate Real-Time Updates') . '">';
+ $o .= '<h4>' . t('Facebook API Key') . '</h4>';
+
+ $appid = get_config('facebook', 'appid' );
+ $appsecret = get_config('facebook', 'appsecret' );
+ $poll_interval = get_config('facebook', 'poll_interval' );
+ if (!$poll_interval) $poll_interval = FACEBOOK_DEFAULT_POLL_INTERVAL;
+
+ $ret1 = q("SELECT `v` FROM `config` WHERE `cat` = 'facebook' AND `k` = 'appid' LIMIT 1");
+ $ret2 = q("SELECT `v` FROM `config` WHERE `cat` = 'facebook' AND `k` = 'appsecret' LIMIT 1");
+ if ((count($ret1) > 0 && $ret1[0]['v'] != $appid) || (count($ret2) > 0 && $ret2[0]['v'] != $appsecret)) $o .= t('Error: it appears that you have specified the App-ID and -Secret in your .htconfig.php file. As long as they are specified there, they cannot be set using this form.<br><br>');
+
+ $working_connection = false;
+ if ($appid && $appsecret) {
+ $subs = facebook_subscriptions_get();
+ if ($subs === null) $o .= t('Error: the given API Key seems to be incorrect (the application access token could not be retrieved).') . '<br>';
+ elseif (is_array($subs)) {
+ $o .= t('The given API Key seems to work correctly.') . '<br>';
+ $working_connection = true;
+ } else $o .= t('The correctness of the API Key could not be detected. Somthing strange\'s going on.') . '<br>';
+ }
+
+ $o .= '<label for="fb_appid">' . t('App-ID / API-Key') . '</label><input name="appid" type="text" value="' . escape_tags($appid ? $appid : "") . '"><br style="clear: both;">';
+ $o .= '<label for="fb_appsecret">' . t('Application secret') . '</label><input name="appsecret" type="text" value="' . escape_tags($appsecret ? $appsecret : "") . '"><br style="clear: both;">';
+ $o .= '<label for="fb_poll_interval">' . sprintf(t('Polling Interval (min. %1$s minutes)'), FACEBOOK_MIN_POLL_INTERVAL) . '</label><input name="poll_interval" type="number" min="' . FACEBOOK_MIN_POLL_INTERVAL . '" value="' . $poll_interval . '"><br style="clear: both;">';
+ $o .= '<input type="submit" name="fb_save_keys" value="' . t('Save') . '">';
+
+ if ($working_connection) {
+ $o .= '<h4>' . t('Real-Time Updates') . '</h4>';
+
+ $activated = facebook_check_realtime_active();
+ if ($activated) {
+ $o .= t('Real-Time Updates are activated.') . '<br><br>';
+ $o .= '<input type="submit" name="real_time_deactivate" value="' . t('Deactivate Real-Time Updates') . '">';
+ } else {
+ $o .= t('Real-Time Updates not activated.') . '<br><input type="submit" name="real_time_activate" value="' . t('Activate Real-Time Updates') . '">';
+ }
}
}
function facebook_plugin_admin_post(&$a, &$o){
+ check_form_security_token_redirectOnErr('/admin/plugins/facebook', 'fbsave');
+
+ if (x($_REQUEST,'fb_save_keys')) {
+ set_config('facebook', 'appid', $_REQUEST['appid']);
+ set_config('facebook', 'appsecret', $_REQUEST['appsecret']);
+ $poll_interval = IntVal($_REQUEST['poll_interval']);
+ if ($poll_interval >= FACEBOOK_MIN_POLL_INTERVAL) set_config('facebook', 'poll_interval', $poll_interval);
+ del_config('facebook', 'app_access_token');
+ info(t('The new values have been saved.'));
+ }
if (x($_REQUEST,'real_time_activate')) {
facebook_subscription_add_users();
}
*/
require_once('include/group.php');
+ require_once('include/html2plain.php');
logger('Facebook post');
if($b['verb'] == ACTIVITY_DISLIKE)
$msg = trim(strip_tags(bbcode($msg)));
- $search_str = $a->get_baseurl() . '/search';
+ // Old code
+ /*$search_str = $a->get_baseurl() . '/search';
if(preg_match("/\[url=(.*?)\](.*?)\[\/url\]/is",$msg,$matches)) {
if((strpos($link,z_root()) !== false) && (! $image))
$image = $a->get_baseurl() . '/images/friendica-64.jpg';
- $msg = trim(strip_tags(bbcode($msg)));
+ $msg = trim(strip_tags(bbcode($msg)));*/
+
+ // New code
+
+ // Looking for the first image
+ $image = '';
+ if(preg_match("/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/is",$b['body'],$matches))
+ $image = $matches[3];
+
+ if ($image != '')
+ if(preg_match("/\[img\](.*?)\[\/img\]/is",$b['body'],$matches))
+ $image = $matches[1];
+
+ // Checking for a bookmark element
+ $body = $b['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 the bookmark and all quotes after the bookmark
+ // they are mostly only the content after the bookmark.
+ $body2 = preg_replace("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/ism",'',$body2);
+ $body2 = preg_replace("/\[quote\=([^\]]*)\](.*?)\[\/quote\]/ism",'',$body2);
+ $body2 = preg_replace("/\[quote\](.*?)\[\/quote\]/ism",'',$body2);
+
+ $body = $body1.$body2;
+ }
+
+ // At first convert the text to html
+ $html = bbcode($body);
+
+ // Then convert it to plain text
+ $msg = trim($b['title']." \n\n".html2plain($html, 0, true));
$msg = html_entity_decode($msg,ENT_QUOTES,'UTF-8');
- // add any attachments as text urls
+ // Removing multiple newlines
+ while (strpos($msg, "\n\n\n") !== false)
+ $msg = str_replace("\n\n\n", "\n\n", $msg);
- $arr = explode(',',$b['attach']);
+ // add any attachments as text urls
+ $arr = explode(',',$b['attach']);
- if(count($arr)) {
+ if(count($arr)) {
$msg .= "\n";
- foreach($arr as $r) {
- $matches = false;
+ foreach($arr as $r) {
+ $matches = false;
$cnt = preg_match('|\[attach\]href=\"(.*?)\" size=\"(.*?)\" type=\"(.*?)\" title=\"(.*?)\"\[\/attach\]|',$r,$matches);
if($cnt) {
- $msg .= $matches[1];
+ $msg .= "\n".$matches[1];
}
}
}
+ $link = '';
+ $linkname = '';
+ // look for bookmark-bbcode and handle it with priority
+ if(preg_match("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/is",$b['body'],$matches)) {
+ $link = $matches[1];
+ $linkname = $matches[2];
+ }
+
+ // If there is no bookmark element then take the first link
+ if ($link == '') {
+ $links = collecturls($html);
+ if (sizeof($links) > 0) {
+ reset($links);
+ $link = current($links);
+ }
+ }
+
+ // Remove trailing and leading spaces
+ $msg = trim($msg);
+
+ // Since facebook increased the maxpostlen massively this never should happen again :)
if (strlen($msg) > FACEBOOK_MAXPOSTLEN) {
$shortlink = "";
require_once('library/slinky.php');
$msg = substr($msg, 0, FACEBOOK_MAXPOSTLEN - strlen($shortlink) - 4);
$msg .= '... ' . $shortlink;
}
- if(! strlen($msg))
+
+ // Fallback - if message is empty
+ if(!strlen($msg))
+ $msg = $link;
+
+ if(!strlen($msg))
+ $msg = $image;
+
+ if(!strlen($msg))
+ $msg = $linkname;
+
+ // If there is nothing to post then exit
+ if(!strlen($msg))
return;
logger('Facebook post: msg=' . $msg, LOGGER_DATA);
if(! get_config('facebook','test_mode')) {
$x = post_url($url, $postvars);
+ logger('Facebook post returns: ' . $x, LOGGER_DEBUG);
$retj = json_decode($x);
if($retj->id) {
add_to_queue($a->contact,NETWORK_FACEBOOK,$s);
notice( t('Facebook post failed. Queued for retry.') . EOL);
}
+
+ if (isset($retj->error) && $retj->error->type == "OAuthException" && $retj->error->code == 190) {
+ logger('Facebook session has expired due to changed password.', LOGGER_DEBUG);
+
+ $last_notification = get_pconfig($b['uid'], 'facebook', 'session_expired_mailsent');
+ if (!$last_notification || $last_notification < (time() - FACEBOOK_SESSION_ERR_NOTIFICATION_INTERVAL)) {
+ require_once('include/enotify.php');
+
+ $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($b['uid']) );
+ notification(array(
+ 'uid' => $b['uid'],
+ 'type' => NOTIFY_SYSTEM,
+ 'system_type' => 'facebook_connection_invalid',
+ 'language' => $r[0]['language'],
+ 'to_name' => $r[0]['username'],
+ 'to_email' => $r[0]['email'],
+ 'source_name' => t('Administrator'),
+ 'source_link' => $a->config["system"]["url"],
+ 'source_photo' => $a->config["system"]["url"] . '/images/person-80.jpg',
+ ));
+
+ set_pconfig($b['uid'], 'facebook', 'session_expired_mailsent', time());
+ } else logger('Facebook: No notification, as the last one was sent on ' . $last_notification, LOGGER_DEBUG);
+ }
}
-
- logger('Facebook post returns: ' . $x, LOGGER_DEBUG);
}
}
}
}
}
+function facebook_enotify(&$app, &$data) {
+ if (x($data, 'params') && $data['params']['type'] == NOTIFY_SYSTEM && x($data['params'], 'system_type') && $data['params']['system_type'] == 'facebook_connection_invalid') {
+ $data['itemlink'] = '/facebook';
+ $data['epreamble'] = $data['preamble'] = t('Your Facebook connection became invalid. Please Re-authenticate.');
+ $data['subject'] = t('Facebook connection became invalid');
+ $data['body'] = sprintf( t("Hi %1\$s,\n\nThe connection between your accounts on %2\$s and Facebook became invalid. This usually happens after you change your Facebook-password. To enable the connection again, you have to %3\$sre-authenticate the Facebook-connector%4\$s."), $data['params']['to_name'], "[url=" . $app->config["system"]["url"] . "]" . $app->config["sitename"] . "[/url]", "[url=" . $app->config["system"]["url"] . "/facebook]", "[/url]");
+ }
+}
function facebook_post_local(&$a,&$b) {
}
}
+function fb_get_timeline($access_token, &$since) {
+
+ $entries->data = array();
+ $newest = 0;
+
+ $url = 'https://graph.facebook.com/me/home?access_token='.$access_token;
+
+ if ($since != 0)
+ $url .= "&since=".$since;
+
+ do {
+ $s = fetch_url($url);
+ $j = json_decode($s);
+ $oldestdate = time();
+ if (isset($j->data))
+ foreach ($j->data as $entry) {
+ $created = strtotime($entry->created_time);
+
+ if ($newest < $created)
+ $newest = $created;
+
+ if ($created >= $since)
+ $entries->data[] = $entry;
+
+ if ($created <= $oldestdate)
+ $oldestdate = $created;
+ }
+ else
+ break;
+
+ $url = $j->paging->next;
+
+ } while (($oldestdate > $since) and ($since != 0) and ($url != ''));
+
+ if ($newest > $since)
+ $since = $newest;
+
+ return($entries);
+}
+
function fb_consume_all($uid) {
require_once('include/items.php');
$s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token);
if($s) {
$j = json_decode($s);
- logger('fb_consume_stream: wall: ' . print_r($j,true), LOGGER_DATA);
- fb_consume_stream($uid,$j,($private_wall) ? false : true);
+ if (isset($j->data)) {
+ logger('fb_consume_stream: wall: ' . print_r($j,true), LOGGER_DATA);
+ fb_consume_stream($uid,$j,($private_wall) ? false : true);
+ } else {
+ logger('fb_consume_stream: wall: got no data from Facebook: ' . print_r($j,true), LOGGER_NORMAL);
+ }
}
}
- $s = fetch_url('https://graph.facebook.com/me/home?access_token=' . $access_token);
- if($s) {
- $j = json_decode($s);
+ // Get the last date
+ $lastdate = get_pconfig($uid,'facebook','lastdate');
+ // fetch all items since the last date
+ $j = fb_get_timeline($access_token, &$lastdate);
+ if (isset($j->data)) {
logger('fb_consume_stream: feed: ' . print_r($j,true), LOGGER_DATA);
fb_consume_stream($uid,$j,false);
- }
+ // Write back the last date
+ set_pconfig($uid,'facebook','lastdate', $lastdate);
+ } else
+ logger('fb_consume_stream: feed: got no data from Facebook: ' . print_r($j,true), LOGGER_NORMAL);
}
function fb_get_photo($uid,$link) {
$access_token = get_pconfig($uid,'facebook','access_token');
if(! $access_token || (! stristr($link,'facebook.com/photo.php')))
- return "\n" . '[url=' . $link . ']' . t('link') . '[/url]';
+ return "";
+ //return "\n" . '[url=' . $link . ']' . t('link') . '[/url]';
$ret = preg_match('/fbid=([0-9]*)/',$link,$match);
if($ret)
$photo_id = $match[1];
$j = json_decode($x);
if($j->picture)
return "\n\n" . '[url=' . $link . '][img]' . $j->picture . '[/img][/url]';
- else
- return "\n" . '[url=' . $link . ']' . t('link') . '[/url]';
+ //else
+ // return "\n" . '[url=' . $link . ']' . t('link') . '[/url]';
}
function fb_consume_stream($uid,$j,$wall = false) {
if($from->id == $self_id)
$datarray['contact-id'] = $self[0]['id'];
else {
+ // Looking if user is known - if not he is added
+ $access_token = get_pconfig($uid, 'facebook', 'access_token');
+ fb_get_friends_sync_new($uid, $access_token, $from);
+
$r = q("SELECT * FROM `contact` WHERE `notify` = '%s' AND `uid` = %d AND `blocked` = 0 AND `readonly` = 0 LIMIT 1",
dbesc($from->id),
intval($uid)
}
// don't store post if we don't have a contact
-
if(! x($datarray,'contact-id')) {
- logger('no contact: post ignored');
+ logger('facebook: no contact '.$from->name.' '.$from->id.'. post ignored');
continue;
}
$datarray['author-avatar'] = 'https://graph.facebook.com/' . $from->id . '/picture';
$datarray['plink'] = $datarray['author-link'] . '&v=wall&story_fbid=' . substr($entry->id,strpos($entry->id,'_') + 1);
+ logger('facebook: post '.$entry->id.' from '.$from->name);
+
$datarray['body'] = escape_tags($entry->message);
- if($entry->picture && $entry->link) {
- $datarray['body'] .= "\n\n" . '[url=' . $entry->link . '][img]' . $entry->picture . '[/img][/url]';
+ if($entry->name and $entry->link)
+ $datarray['body'] .= "\n\n[bookmark=".$entry->link."]".$entry->name."[/bookmark]";
+ elseif ($entry->name)
+ $datarray['body'] .= "\n\n[b]" . $entry->name."[/b]";
+
+ if($entry->caption) {
+ if(!$entry->name and $entry->link)
+ $datarray['body'] .= "\n\n[bookmark=".$entry->link."]".$entry->caption."[/bookmark]";
+ else
+ $datarray['body'] .= "[i]" . $entry->caption."[/i]\n";
}
- else {
- if($entry->picture)
- $datarray['body'] .= "\n\n" . '[img]' . $entry->picture . '[/img]';
- // if just a link, it may be a wall photo - check
- if($entry->link)
- $datarray['body'] .= fb_get_photo($uid,$entry->link);
+
+ if(!$entry->caption and !$entry->name) {
+ if ($entry->link)
+ $datarray['body'] .= "\n[url]".$entry->link."[/url]\n";
+ else
+ $datarray['body'] .= "\n";
}
- if($entry->name)
- $datarray['body'] .= "\n" . $entry->name;
- if($entry->caption)
- $datarray['body'] .= "\n" . $entry->caption;
+
+ $quote = "";
if($entry->description)
- $datarray['body'] .= "\n" . $entry->description;
+ $quote = $entry->description;
+
+ if ($entry->properties)
+ foreach ($entry->properties as $property)
+ $quote .= "\n".$property->name.": [url=".$property->href."]".$property->text."[/url]";
+
+ if ($quote)
+ $datarray['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 ($entry->type != "video") {
+ if($entry->picture && $entry->link) {
+ $datarray['body'] .= "\n" . '[url=' . $entry->link . '][img]'.$entry->picture.'[/img][/url]';
+ }
+ else {
+ if($entry->picture)
+ $datarray['body'] .= "\n" . '[img]' . $entry->picture . '[/img]';
+ // if just a link, it may be a wall photo - check
+ if($entry->link)
+ $datarray['body'] .= fb_get_photo($uid,$entry->link);
+ }
+ }
+
+ // Just as a test - to see if these are the missing entries
+ //if(trim($datarray['body']) == '')
+ // $datarray['body'] = $entry->story;
+
+ if(trim($datarray['body']) == '') {
+ logger('facebook: empty body '.$entry->id.' '.print_r($entry, true));
+ continue;
+ }
+
+ $datarray['body'] .= "\n";
+
+ if ($entry->icon)
+ $datarray['body'] .= "[img]".$entry->icon."[/img] ";
+
+ if ($entry->actions)
+ foreach ($entry->actions as $action)
+ if (($action->name != "Comment") and ($action->name != "Like"))
+ $datarray['body'] .= "[url=".$action->link."]".$action->name."[/url] ";
+
+ $datarray['body'] = trim($datarray['body']);
+
+ //if(($datarray['body'] != '') and ($uid == 1))
+ // $datarray['body'] .= "[noparse]".print_r($entry, true)."[/noparse]";
+
+ if ($entry->place->name)
+ $datarray['coord'] = $entry->place->name;
+ else if ($entry->place->location->street or $entry->place->location->city or $entry->place->location->Denmark) {
+ if ($entry->place->location->street)
+ $datarray['coord'] = $entry->place->location->street;
+ if ($entry->place->location->city)
+ $datarray['coord'] .= " ".$entry->place->location->city;
+ if ($entry->place->location->country)
+ $datarray['coord'] .= " ".$entry->place->location->country;
+ } else if ($entry->place->location->latitude and $entry->place->location->longitude)
+ $datarray['coord'] = substr($entry->place->location->latitude, 0, 8)
+ .' '.substr($entry->place->location->longitude, 0, 8);
+
$datarray['created'] = datetime_convert('UTC','UTC',$entry->created_time);
$datarray['edited'] = datetime_convert('UTC','UTC',$entry->updated_time);
if($entry->privacy && $entry->privacy->value !== 'EVERYONE') {
$datarray['private'] = 1;
- $datarray['allow_cid'] = '<' . $uid . '>';
- }
-
- if(trim($datarray['body']) == '') {
- logger('facebook: empty body');
- continue;
+ $datarray['allow_cid'] = '<' . $self[0]['id'] . '>';
}
$top_item = item_store($datarray);
logger('fb_get_app_access_token: appid and/or appsecret not set', LOGGER_DEBUG);
return false;
}
-
- $x = fetch_url('https://graph.facebook.com/oauth/access_token?client_id=' . $appid . '&client_secret=' . $appsecret . "&grant_type=client_credentials");
+ 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);
$url = "https://graph.facebook.com/" . get_config('facebook', 'appid' ) . "/subscriptions?access_token=" . $access_token;
facebook_delete_url($url);
- del_config('facebook', 'realtime_active');
+ if (!facebook_check_realtime_active()) del_config('facebook', 'realtime_active');
}
-function facebook_subscription_add_users() {
-
+function facebook_subscription_add_users($second_try = false) {
$a = get_app();
$access_token = fb_get_app_access_token();
del_config('facebook', 'cb_verify_token');
if ($j) {
+ $x = json_decode($j);
logger("Facebook reponse: " . $j, LOGGER_DATA);
-
- if (facebook_check_realtime_active()) set_config('facebook', 'realtime_active', 1);
+ if (isset($x->error)) {
+ logger('facebook_subscription_add_users: got an error: ' . $j);
+ if ($x->error->type == "OAuthException" && $x->error->code == 190) {
+ del_config('facebook', 'app_access_token');
+ if ($second_try === false) facebook_subscription_add_users(true);
+ }
+ } else {
+ logger('facebook_subscription_add_users: sucessful');
+ if (facebook_check_realtime_active()) set_config('facebook', 'realtime_active', 1);
+ }
};
}
curl_close($ch);
return($body);
-}}
\ No newline at end of file
+}}
Impressum Plugin for Friendica
Author: Tobias Diekershoff
+ http://diekershoff.homeunix.net/friendika/profile/tobias
tobias.diekershoff@gmx.net
-License: 3-clause BSD license (same as Friendica)
+License: 3-clause BSD license
About
This plugin adds an Impressum block to the /friendica page with informations
In the notes and postal fields you can use HTML tags for formatting.
Configuration:
- For configuration you can set the following variables in the .htconfig file
- * $a->config['impressum']['owner'] this is the Name of the Operator
- * $a->config['impressum']['ownerprofile'] this is an optional Friendica account
- where the above owner name will link to
- * $a->config['impressum']['email'] a contact email address (optional)
- will be displayed slightly obfuscated
- as name(at)example(dot)com
- * $a->config['impressum']['postal'] should contain a postal address where
- you can be reached at (optional)
- * $a->config['impressum']['notes'] additional informations that should
- be displayed in the Impressum block
+ Simply fill in the fields in the impressium settings page in the plugins area
+ of your admin panel.
+If you for any reason prefer to use a configuration file instead, you can set the
+following variables in the .htconfig file
+ * $a->config['impressum']['owner'] this is the Name of the Operator
+ * $a->config['impressum']['ownerprofile'] this is an optional Friendica account
+ where the above owner name will link to
+ * $a->config['impressum']['email'] a contact email address (optional)
+ will be displayed slightly obfuscated
+ as name(at)example(dot)com
+
+ * $a->config['impressum']['postal'] should contain a postal address where
+ you can be reached at (optional)
+ * $a->config['impressum']['notes'] additional informations that should
+ be displayed in the Impressum block
+ * $a->config['impressum']['footer_text'] Text that will be displayed at
+ the bottom of the pages.
{{ inc field_input.tpl with $field=$postal }}{{ endinc }}
{{ inc field_input.tpl with $field=$notes }}{{ endinc }}
{{ inc field_input.tpl with $field=$email }}{{ endinc }}
+{{ inc field_input.tpl with $field=$footer_text }}{{ endinc }}
<div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
--- /dev/null
+#impressum_footer {
+ padding-top: 15px;
+ font-size: 0.8em;
+}
/**
* Name: Impressum
* Description: Plugin to add contact information to the about page (/friendica)
- * Version: 1.0
- * Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
+ * Version: 1.1
+ * Author: Tobias Diekershoff <http://diekershoff.homeunix.net/friendika/profile/tobias>
* License: 3-clause BSD license
*/
function impressum_install() {
register_hook('about_hook', 'addon/impressum/impressum.php', 'impressum_show');
+ register_hook('page_end', 'addon/impressum/impressum.php', 'impressum_footer');
logger("installed impressum plugin");
}
function impressum_uninstall() {
unregister_hook('about_hook', 'addon/impressum/impressum.php', 'impressum_show');
+ unregister_hook('page_end', 'addon/impressum/impressum.php', 'impressum_footer');
logger("uninstalled impressum plugin");
}
function obfuscate_email ($s) {
$s = str_replace('.','(dot)',$s);
return $s;
}
+function impressum_footer($a, &$b) {
+ $text = get_config('impressum','footer_text');
+ if (! $text == '') {
+ $a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="'.$a->get_baseurl().'/addon/impressum/impressum.css" media="all" />';
+ $b .= '<div id="impressum_footer">'.$text.'</div>';
+ }
+}
function impressum_show($a,&$b) {
$b .= '<h3>'.t('Impressum').'</h3>';
$owner = get_config('impressum', 'owner');
$postal = ((x($_POST, 'postal')) ? (trim($_POST['postal'])) : '');
$notes = ((x($_POST, 'notes')) ? (trim($_POST['notes'])) : '');
$email = ((x($_POST, 'email')) ? notags(trim($_POST['email'])) : '');
+ $footer_text = ((x($_POST, 'footer_text')) ? (trim($_POST['footer_text'])) : '');
set_config('impressum','owner',$owner);
set_config('impressum','ownerprofile',$ownerprofile);
set_config('impressum','postal',$postal);
set_config('impressum','email',$email);
set_config('impressum','notes',$notes);
+ set_config('impressum','footer_text',$footer_text);
info( t('Settings updated.'). EOL );
}
function impressum_plugin_admin (&$a, &$o) {
$t = file_get_contents( dirname(__file__). "/admin.tpl" );
$o = replace_macros($t, array(
'$submit' => t('Submit'),
- '$owner' => array('owner', t('Site Owner'), get_config('impressum','owner'), ''),
- '$ownerprofile' => array('ownerprofile', t('Site Owners Profile'), get_config('impressum','ownerprofile'), ''),
- '$postal' => array('postal', t('Postal Address'), get_config('impressum','postal'), ''),
- '$notes' => array('notes', t('Notes'), get_config('impressum','notes'), ''),
- '$email' => array('email', t('Email Address'), get_config('impressum','email'), ''),
+ '$owner' => array('owner', t('Site Owner'), get_config('impressum','owner'), t('The page operators name.')),
+ '$ownerprofile' => array('ownerprofile', t('Site Owners Profile'), get_config('impressum','ownerprofile'), t('Profile address of the operator.')),
+ '$postal' => array('postal', t('Postal Address'), get_config('impressum','postal'), t('How to contact the operator via snail mail.')),
+ '$notes' => array('notes', t('Notes'), get_config('impressum','notes'), t('Additional notes that are displayed beneath the contact information.')),
+ '$email' => array('email', t('Email Address'), get_config('impressum','email'), t('How to contact the operator via email. (will be displayed obfuscated)')),
+ '$footer_text' => array('footer_text', t('Footer note'), get_config('impressum','footer_text'), t('Text for the footer.')),
));
}
}
function irc_app_menu($a,&$b) {
-$b['app_menu'][] = '<div class="app-title"><a href="irc">' . t('irc Chatroom') . '</a></div>';
+$b['app_menu'][] = '<div class="app-title"><a href="irc">' . t('IRC Chatroom') . '</a></div>';
}
function irc_content(&$a) {
-$baseurl = $a->get_baseurl() . '/addon/irc';
-$o = '';
+ $baseurl = $a->get_baseurl() . '/addon/irc';
+ $o = '';
+ $sitechats = get_config('irc','channels');
+ if($sitechats)
+ $chats = explode(',',$sitechats);
+ else
+ $chats = array('friendica','chat','chatback','hottub','ircbar','dateroom','teentalk');
+
+
+ $a->page['aside'] .= '<div class="widget"><h3>' . t('Popular Channels') . '</h3><ul>';
+ foreach($chats as $chat) {
+ $a->page['aside'] .= '<li><a href="' . $a->get_baseurl() . '/irc?channels=' . $chat . '" >' . '#' . $chat . '</a></li>';
+ }
+ $a->page['aside'] .= '</ul></div>';
+
+
+
+
+
+$channels = ((x($_GET,'channels')) ? $_GET['channels'] : 'friendica');
/* add the chatroom frame and some html
* by altering the "channels=friendica" part of the URL, you can add/remove channels.
*/
$o .= <<< EOT
<h2>IRC chat</h2>
-<p><a href="http://tldp.org/HOWTO/IRC/beginners.html" target="_blank">a beginner's guide to using IRC.</a></p>
-<iframe src="http://webchat.freenode.net?channels=friendica" width="600" height="600"></iframe>
+<p><a href="http://tldp.org/HOWTO/IRC/beginners.html" target="_blank">A beginner's guide to using IRC. [en]</a></p>
+<iframe src="http://webchat.freenode.net?channels=$channels" width="600" height="600"></iframe>
EOT;
return $o;
--- /dev/null
+<?php
+
+/**
+ *
+ * Name: NameThingy
+ * Description: The Ultimate Random Name Generator
+ * Version: 1.0
+ * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
+ */
+
+
+function namethingy_install() {
+ register_hook('app_menu', 'addon/namethingy/namethingy.php', 'namethingy_app_menu');
+}
+
+function namethingy_uninstall() {
+ unregister_hook('app_menu', 'addon/namethingy/namethingy.php', 'namethingy_app_menu');
+
+}
+
+function namethingy_app_menu($a,&$b) {
+ $b['app_menu'][] = '<div class="app-title"><a href="namethingy">NameThingy</a></div>';
+}
+
+
+function namethingy_module() {}
+
+function namethingy_content(&$a) {
+
+$baseurl = $a->get_baseurl() . '/addon/namethingy';
+
+$o .= <<< EOT
+<iframe src="http://namethingy.com" width="900" height="700" />
+EOT;
+
+return $o;
+}
$words = 'nsfw,';
$s .= '<div class="settings-block">';
- $s .= '<h3>' . t('"Not Safe For Work" Settings') . '</h3>';
+ $s .= '<h3>' . t('Not Safe For Work (General Purpose Content Filter) settings') . '</h3>';
$s .= '<div id="nsfw-wrapper">';
-
- $s .= '<label id="nsfw-enable-label" for="nsfw-enable">' . t('Enable NSFW filter') . ' </label>';
+ $s .= '<p>' . t ('This plugin looks in posts for the words/text you specify below, and collapses any content containing those keywords so it is not displayed at inappropriate times, such as sexual innuendo that may be improper in a work setting. It is polite and recommended to tag any content containing nudity with #NSFW. This filter can also match any other word/text you specify, and can thereby be used as a general purpose content filter.') . '</p>';
+ $s .= '<label id="nsfw-enable-label" for="nsfw-enable">' . t('Enable Content filter') . ' </label>';
$s .= '<input id="nsfw-enable" type="checkbox" name="nsfw-enable" value="1"' . $enable_checked . ' />';
$s .= '<div class="clear"></div>';
- $s .= '<label id="nsfw-label" for="nsfw-words">' . t('Comma separated words to treat as NSFW') . ' </label>';
+ $s .= '<label id="nsfw-label" for="nsfw-words">' . t('Comma separated list of keywords to hide') . ' </label>';
$s .= '<input id="nsfw-words" type="text" name="nsfw-words" value="' . $words .'" />';
$s .= '</div><div class="clear"></div>';
___ Configuration ___
+If you for any reason prefer to use a configuration file instead
+of the admin panels, please refer to the Alternative Configuration below.
+
+Activate the plugin from your admin panel.
+
+You can now add a Tile Server and default zoom level in the plugin settings
+page of your admin panel.
+
+The Time Server URL points to the tile server you want to use. Use the full URL,
+with protocol (http/s) and trailing slash. You can configure the default zoom
+level on the map in the Default Zoom box. 1 will show the whole world and 18 is the highest
+zoom level available.
+
+
+___ Alternative Configuration ___
+
Open the .htconfig.php file and add "openstreetmap" to the list of activated
addons.
+
$a->config['system']['addon'] = "openstreetmap, ..."
You have to add two configuration variables for the addon:
+
$a->config['openstreetmap']['tmsserver'] = 'http://www.openstreetmap.org/';
$a->config['openstreetmap']['zoom'] = '18';
The *tmsserver* points to the tile server you want to use. Use the full URL,
-with protocol (http/s) and trailing slash. You can configure the default zoom
-level on the map with *zoom*. 1 will show the whole world and 18 is the highest
-zoom level available.
+with protocol (http/s) and trailing slash. You can configure the default zoom
+level on the map with *zoom*. 1 will show the whole world and 18 is the highest
+zoom level available.
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * Name: Page
+ * Description: Shows lists of community pages (improved performance over 'pages')
+ * Version: 1.0
+ * Author: Mike Macgirvin <mike@macgirvin.com>
+ * based on pages plugin by
+ * Author: Michael Vogel <ike@piratenpartei.de>
+ *
+ */
+
+function page_install() {
+ register_hook('page_end', 'addon/page/page.php', 'page_page_end');
+}
+
+function page_uninstall() {
+ unregister_hook('page_end', 'addon/page/page.php', 'page_page_end');
+}
+
+
+function page_getpage($uid) {
+
+
+ $pagelist = array();
+
+ $contacts = q("SELECT `id`, `url`, `name`, `micro`FROM `contact`
+ WHERE `network`= 'dfrn' AND `forum` = 1 AND `uid` = %d",
+ intval($uid)
+ );
+
+ $page = array();
+
+ // Look if the profile is a community page
+ foreach($contacts as $contact) {
+ $page[] = array("url"=>$contact["url"], "name"=>$contact["name"], "id"=>$contact["id"], "micro"=>$contact['micro']);
+ }
+ return($page);
+}
+
+function page_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;
+
+ $page = '<div id="page-sidebar" class="widget">
+ <div class="title tool">
+ <h3>'.t("Forums").'</h3></div>
+ <div id="sidebar-page-list"><ul>';
+
+ $contacts = page_getpage($a->user['uid']);
+
+ foreach($contacts as $contact) {
+ $page .= '<li style="list-style-type: none;" class="tool"><img height="20" width="20" src="' . $contact['micro'] .'" alt="' . $contact['url'] . '" /> <a href="'.$a->get_baseurl().'/redir/'.$contact["id"].'" title="' . $contact['url'] . '" class="label" target="external-link">'.
+ $contact["name"]."</a></li>";
+ }
+ $page .= "</ul></div></div>";
+ if (sizeof($contacts) > 0)
+ $a->page['aside'] = $page . $a->page['aside'];
+}
+?>
*/
function pageheader_install() {
- register_hook('page_header', 'addon/pageheader/pageheader.php', 'pageheader_fetch');
+ register_hook('page_content_top', 'addon/pageheader/pageheader.php', 'pageheader_fetch');
register_hook('plugin_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings');
register_hook('plugin_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post');
function pageheader_uninstall() {
- unregister_hook('page_header', 'addon/pageheader/pageheader.php', 'pageheader_fetch');
+ unregister_hook('page_content_top', 'addon/pageheader/pageheader.php', 'pageheader_fetch');
unregister_hook('plugin_settings', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings');
unregister_hook('plugin_settings_post', 'addon/pageheader/pageheader.php', 'pageheader_addon_settings_post');
+ // hook moved, uninstall the old one if still there.
+ unregister_hook('page_header', 'addon/pageheader/pageheader.php', 'pageheader_fetch');
+
}
$words = get_config('pageheader','text');
if(! $words)
- $words = 'pageheader,';
+ $words = '';
$s .= '<div class="settings-block">';
$s .= '<h3>' . t('"pageheader" Settings') . '</h3>';
+++ /dev/null
-Pages
-
-Shows lists of community pages
+++ /dev/null
-<?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'];
-}
-?>
## Piwik Plugin ##
by Tobias Diekershoff
+ http://diekershoff.homeunix.net/friendika/profile/tobias
tobias.diekershoff(at)gmx.net
This addon allows you to embed the code necessary for the FLOSS webanalytics
### Configuration ###
+The easiest way to configure this addon is by activating the admin panels of
+your ~friendica server and then enter the needed details on the config page
+for the addon.
+
+If you don't want to use the admin panel, you can configure the addon through
+the .htconfig file.
+
Open the .htconfig.php file and add "piwik" to the list of activated addons.
$a->config['system']['addon'] = "piwik, ..."
* Name: Piwik Analytics
* Description: Piwik Analytics Plugin for Friendica
* Version: 1.1
- * Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
+ * Author: Tobias Diekershoff <http://diekershoff.homeunix.net/friendika/profile/tobias>
* Author: Klaus Weidenbach
*/
* associated CSS file. We just have to tell Friendica to get it
* into the page header.
*/
- $a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/piwik/piwik.css' . '" media="all" />' . "\r\n";
+ $a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="' . $a->get_baseurl() . '/addon/piwik/piwik.css' . '" media="all" />';
/*
* Get the configuration variables from the .htconfig file.
$s .= '</div><div class="clear"></div>';
$s .= '<div class="settings-submit-wrapper" ><input type="submit" id="showmore-submit" name="showmore-submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
-// $s .= '<div class="showmore-desc">' . t('Use /expression/ to provide regular expressions') . '</div></div>';
+// $s .= '<div class="showmore-desc">' . t('Use /expression/ to provide regular expressions') . '</div>';
+ $s .= '</div>';
return;
}
if($found) {
$rnd = random_string(8);
$b['html'] = '<span id="showmore-teaser-'.$rnd.'" style="display: block;">'.$shortened." ".
- '<span id="showmore-wrap-'.$rnd.'" style="white-space:nowrap;" class="fakelink" onclick="openClose(\'showmore-'.$rnd.'\'); openClose(\'showmore-teaser-'.$rnd.'\');" >'.sprintf(t('Show More')).'</span></span>'.
+ '<span id="showmore-wrap-'.$rnd.'" style="white-space:nowrap;" class="fakelink" onclick="openClose(\'showmore-'.$rnd.'\'); openClose(\'showmore-teaser-'.$rnd.'\');" >'.sprintf(t('show more')).'</span></span>'.
'<div id="showmore-'.$rnd.'" style="display: none;">'.$b['html'].'</div>';
}
}
--- /dev/null
+<?php
+/*
+ * Name: Smiley Pack
+ * Description: Pack of smileys that make master too AOLish.
+ * Version: 1.0
+ * Author: Thomas Willingham (based on Mike Macgirvin's Adult Smile template)
+ * All smileys from sites offering them as Public Domain
+ *
+ *
+ */
+
+function smiley_pack_install() {
+ register_hook('smilie', 'addon/smiley_pack/smiley_pack.php', 'smiley_pack_smilies');
+}
+
+function smiley_pack_uninstall() {
+ unregister_hook('smilie', 'addon/smiley_pack/smiley_pack.php', 'smiley_pack_smilies');
+}
+
+
+
+function smiley_pack_smilies(&$a,&$b) {
+
+#Smileys are split into various directories by the intended range of emotions. This is in case we get too big and need to modularise things. We can then cut and paste the right lines, move the right directory, and just change the name of the addon to happy_smilies or whatever.
+
+#Be careful with invocation strings. If you have a smiley called foo, and another called foobar, typing :foobar will call foo. Avoid this with clever naming, using ~ instead of :
+#when all else fails.
+
+
+
+#Animal smileys.
+
+ $b['texts'][] = ':bunnyflowers';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/bunnyflowers.gif' . '" alt="' . ':bunnyflowers' . '" />';
+
+ $b['texts'][] = ':chick';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/chick.gif' . '" alt="' . ':chick' . '" />';
+
+ $b['texts'][] = ':bumblebee';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/bee.gif' . '" alt="' . ':bee' . '" />';
+
+ $b['texts'][] = ':ladybird';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/ladybird.gif' . '" alt="' . ':ladybird' . '" />';
+
+ $b['texts'][] = ':bigspider';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/bigspider.gif' . '" alt="' . ':bigspider' . '" />';
+
+ $b['texts'][] = ':cat';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/cat.gif' . '" alt="' . ':cat' . '" />';
+
+ $b['texts'][] = ':bunny';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/bunny.gif' . '" alt="' . ':bunny' . '" />';
+
+ $b['texts'][] = ':chick';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/chick.gif' . '" alt="' . ':chick' . '" />';
+
+ $b['texts'][] = ':cow';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/cow.gif' . '" alt="' . ':cow' . '" />';
+
+ $b['texts'][] = ':crab';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/crab.gif' . '" alt="' . ':crab' . '" />';
+
+ $b['texts'][] = ':dolphin';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/dolphin.gif' . '" alt="' . ':dolphin' . '" />';
+
+ $b['texts'][] = ':dragonfly';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/dragonfly.gif' . '" alt="' . ':dragonfly' . '" />';
+
+ $b['texts'][] = ':frog';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/frog.gif' . '" alt="' . ':frog' . '" />';
+
+ $b['texts'][] = ':hamster';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/hamster.gif' . '" alt="' . ':hamster' . '" />';
+
+ $b['texts'][] = ':monkey';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/monkey.gif' . '" alt="' . ':monkey' . '" />';
+
+ $b['texts'][] = ':horse';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/horse.gif' . '" alt="' . ':horse' . '" />';
+
+ $b['texts'][] = ':parrot';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/parrot.gif' . '" alt="' . ':parrot' . '" />';
+
+ $b['texts'][] = ':tux';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/tux.gif' . '" alt="' . ':tux' . '" />';
+
+ $b['texts'][] = ':snail';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/snail.gif' . '" alt="' . ':snail' . '" />';
+
+ $b['texts'][] = ':sheep';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/sheep.gif' . '" alt="' . ':sheep' . '" />';
+
+ $b['texts'][] = ':dog';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/dog.gif' . '" alt="' . ':dog' . '" />';
+
+ $b['texts'][] = ':elephant';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/elephant.gif' . '" alt="' . ':elephant' . '" />';
+
+ $b['texts'][] = ':fish';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/fish.gif' . '" alt="' . ':fish' . '" />';
+
+ $b['texts'][] = ':giraffe';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/giraffe.gif' . '" alt="' . ':giraffe' . '" />';
+
+ $b['texts'][] = ':pig';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/animals/pig.gif' . '" alt="' . ':pig' . '" />';
+
+
+
+#Baby Smileys
+
+ $b['texts'][] = ':baby';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/babies/baby.gif' . '" alt="' . ':baby' . '" />';
+
+ $b['texts'][] = ':babycot';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/babies/babycot.gif' . '" alt="' . ':babycot' . '" />';
+
+
+ $b['texts'][] = ':pregnant';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/babies/pregnant.gif' . '" alt="' . ':pregnant' . '" />';
+
+ $b['texts'][] = ':stork';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/babies/stork.gif' . '" alt="' . ':stork' . '" />';
+
+
+#Confused Smileys
+ $b['texts'][] = ':confused';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/confused/confused.gif' . '" alt="' . ':confused' . '" />';
+
+ $b['texts'][] = ':shrug';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/confused/shrug.gif' . '" alt="' . ':shrug' . '" />';
+
+ $b['texts'][] = ':stupid';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/confused/stupid.gif' . '" alt="' . ':stupid' . '" />';
+
+ $b['texts'][] = ':dazed';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/confused/dazed.gif' . '" alt="' . ':dazed' . '" />';
+
+
+#Cool Smileys
+
+ $b['texts'][] = ':affro';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/cool/affro.gif' . '" alt="' . ':affro' . '" />';
+
+ $b['texts'][] = ':cool';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/cool/cool.gif' . '" alt="' . ':cool' . '" />';
+
+#Devil/Angel Smileys
+
+ $b['texts'][] = ':angel';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/devilangel/angel.gif' . '" alt="' . ':angel' . '" />';
+
+ $b['texts'][] = ':cherub';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/devilangel/cherub.gif' . '" alt="' . ':cherub' . '" />';
+
+ $b['texts'][] = ':devilangel';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/devilangel/blondedevil.gif' . '" alt="' . ':devilangel' . '" />';
+
+ $b['texts'][] = ':catdevil';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/devilangel/catdevil.gif' . '" alt="' . ':catdevil' . '" />';
+
+ $b['texts'][] = ':devillish';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/devilangel/devil.gif' . '" alt="' . ':devillish' . '" />';
+
+ $b['texts'][] = ':daseesaw';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/devilangel/daseesaw.gif' . '" alt="' . ':daseesaw' . '" />';
+
+ $b['texts'][] = ':turnevil';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/devilangel/turnevil.gif' . '" alt="' . ':turnevil' . '" />';
+
+ $b['texts'][] = ':saint';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/devilangel/saint.gif' . '" alt="' . ':saint' . '" />';
+
+ $b['texts'][] = ':graveside';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/devilangel/graveside.gif' . '" alt="' . ':graveside' . '" />';
+
+#Unpleasent smileys.
+
+ $b['texts'][] = ':toilet';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/disgust/toilet.gif' . '" alt="' . ':toilet' . '" />';
+
+ $b['texts'][] = ':fartinbed';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/disgust/fartinbed.gif' . '" alt="' . ':fartinbed' . '" />';
+
+ $b['texts'][] = ':vomit';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/disgust/vomit.gif' . '" alt="' . ':vomit' . '" />';
+
+ $b['texts'][] = ':fartblush';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/disgust/fartblush.gif' . '" alt="' . ':fartblush' . '" />';
+
+#Drinks
+
+ $b['texts'][] = ':tea';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/drink/tea.gif' . '" alt="' . ':tea' . '" />';
+
+ $b['texts'][] = ':drool';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/drool/drool.gif' . '" alt="' . ':drool' . '" />';
+
+#Sad smileys
+
+ $b['texts'][] = ':crying';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sad/crying.png' . '" alt="' . ':crying' . '" />';
+
+ $b['texts'][] = ':prisoner';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sad/prisoner.gif' . '" alt="' . ':prisoner' . '" />';
+
+#Smoking - only one smiley in here, maybe it needs moving elsewhere?
+
+ $b['texts'][] = ':smoking';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/smoking/smoking.gif' . '" alt="' . ':smoking' . '" />';
+
+#Sport smileys
+
+ $b['texts'][] = ':basketball';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/basketball.gif' . '" alt="' . ':basketball' . '" />';
+
+ $b['texts'][] = ':bowling';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/bowling.gif' . '" alt="' . ':bowling' . '" />';
+
+ $b['texts'][] = ':cycling';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/cycling.gif' . '" alt="' . ':cycling' . '" />';
+
+ $b['texts'][] = ':darts';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/darts.gif' . '" alt="' . ':darts' . '" />';
+
+ $b['texts'][] = ':fencing';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/fencing.gif' . '" alt="' . ':fencing' . '" />';
+
+ $b['texts'][] = ':golf';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/golf.gif' . '" alt="' . ':golf' . '" />';
+
+ $b['texts'][] = ':juggling';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/juggling.gif' . '" alt="' . ':juggling' . '" />';
+
+ $b['texts'][] = ':skipping';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/skipping.gif' . '" alt="' . ':skipping' . '" />';
+
+ $b['texts'][] = ':archery';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/archery.gif' . '" alt="' . ':archery' . '" />';
+
+ $b['texts'][] = ':football';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/football.gif' . '" alt="' . ':football' . '" />';
+
+ $b['texts'][] = ':surfing';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/surfing.gif' . '" alt="' . ':surfing' . '" />';
+
+ $b['texts'][] = ':snooker';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/snooker.gif' . '" alt="' . ':snooker' . '" />';
+
+ $b['texts'][] = ':tennis';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/tennis.gif' . '" alt="' . ':tennis' . '" />';
+
+ $b['texts'][] = ':horseriding';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/sport/horseriding.gif' . '" alt="' . ':horseriding' . '" />';
+
+#Love smileys
+
+ $b['texts'][] = ':iloveyou';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/love/iloveyou.gif' . '" alt="' . ':iloveyou' . '" />';
+
+ $b['texts'][] = ':inlove';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/love/inlove.gif' . '" alt="' . ':inlove' . '" />';
+
+ $b['texts'][] = '~love';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/love/love.gif' . '" alt="' . ':love' . '" />';
+
+ $b['texts'][] = ':lovebear';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/love/lovebear.gif' . '" alt="' . ':lovebear' . '" />';
+
+ $b['texts'][] = ':lovebed';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/love/lovebed.gif' . '" alt="' . ':lovebed' . '" />';
+
+ $b['texts'][] = ':loveheart';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/love/loveheart.gif' . '" alt="' . ':loveheart' . '" />';
+
+#Tired/Sleep smileys
+
+ $b['texts'][] = ':countsheep';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/tired/countsheep.gif' . '" alt="' . ':countsheep' . '" />';
+
+ $b['texts'][] = ':hammock';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/tired/hammock.gif' . '" alt="' . ':hammock' . '" />';
+
+ $b['texts'][] = ':pillow';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/tired/pillow.gif' . '" alt="' . ':pillow' . '" />';
+
+#Fight/Flame/Violent smileys
+
+ $b['texts'][] = ':2guns';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/2guns.gif' . '" alt="' . ':2guns' . '" />';
+
+ $b['texts'][] = ':alienfight';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/alienfight.gif' . '" alt="' . ':alienfight' . '" />';
+
+ $b['texts'][] = ':army';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/army.gif' . '" alt="' . ':army' . '" />';
+
+ $b['texts'][] = ':arrowhead';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/arrowhead.gif' . '" alt="' . ':arrowhead' . '" />';
+
+ $b['texts'][] = ':bfg';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/bfg.gif' . '" alt="' . ':bfg' . '" />';
+
+ $b['texts'][] = ':bowman';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/bowman.gif' . '" alt="' . ':bowman' . '" />';
+
+ $b['texts'][] = ':chainsaw';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/chainsaw.gif' . '" alt="' . ':chainsaw' . '" />';
+
+ $b['texts'][] = ':crossbow';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/crossbow.gif' . '" alt="' . ':crossbow' . '" />';
+
+ $b['texts'][] = ':crusader';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/crusader.gif' . '" alt="' . ':crusader' . '" />';
+
+ $b['texts'][] = ':dead';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/dead.gif' . '" alt="' . ':dead' . '" />';
+
+ $b['texts'][] = ':hammersplat';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/hammersplat.gif' . '" alt="' . ':hammersplat' . '" />';
+
+ $b['texts'][] = ':lasergun';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/lasergun.gif' . '" alt="' . ':lasergun' . '" />';
+
+ $b['texts'][] = ':machinegun';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/machinegun.gif' . '" alt="' . ':machinegun' . '" />';
+
+ $b['texts'][] = ':marine';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/marine.gif' . '" alt="' . ':marine' . '" />';
+
+ $b['texts'][] = ':sabre';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/sabre.gif' . '" alt="' . ':sabre' . '" />';
+
+ $b['texts'][] = ':tank';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/tank.gif' . '" alt="' . ':tank' . '" />';
+
+ $b['texts'][] = ':viking';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/viking.gif' . '" alt="' . ':viking' . '" />';
+
+ $b['texts'][] = ':gangs';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/gangs.gif' . '" alt="' . ':gangs' . '" />';
+
+ $b['texts'][] = ':acid';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fight/acid.gif' . '" alt="' . ':acid' . '" />';
+
+#Fantasy smileys - monsters and dragons fantasy. The other type of fantasy belongs in adult smileys
+
+ $b['texts'][] = ':alienmonster';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fantasy/alienmonster.gif' . '" alt="' . ':alienmonster' . '" />';
+
+ $b['texts'][] = ':barbarian';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fantasy/barbarian.gif' . '" alt="' . ':barbarian' . '" />';
+
+ $b['texts'][] = ':dinosaur';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fantasy/dinosaur.gif' . '" alt="' . ':dinosaur' . '" />';
+
+ $b['texts'][] = ':dragon';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fantasy/dragon.gif' . '" alt="' . ':dragon' . '" />';
+
+ $b['texts'][] = ':draco';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fantasy/dragonwhelp.gif' . '" alt="' . ':draco' . '" />';
+
+ $b['texts'][] = ':ghost';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fantasy/ghost.gif' . '" alt="' . ':ghost' . '" />';
+
+ $b['texts'][] = ':mummy';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/fantasy/mummy.gif' . '" alt="' . ':mummy' . '" />';
+
+#Food smileys
+
+ $b['texts'][] = ':apple';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/food/apple.gif' . '" alt="' . ':apple' . '" />';
+
+ $b['texts'][] = ':broccoli';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/food/broccoli.gif' . '" alt="' . ':brocolli' . '" />';
+
+ $b['texts'][] = ':cake';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/food/cake.gif' . '" alt="' . ':cake' . '" />';
+
+ $b['texts'][] = ':carrot';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/food/carrot.gif' . '" alt="' . ':carrot' . '" />';
+
+ $b['texts'][] = ':popcorn';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/food/popcorn.gif' . '" alt="' . ':popcorn' . '" />';
+
+ $b['texts'][] = ':tomato';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/food/tomato.gif' . '" alt="' . ':tomato' . '" />';
+
+ $b['texts'][] = ':banana';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/food/banana.gif' . '" alt="' . ':banana' . '" />';
+
+ $b['texts'][] = ':cooking';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/food/cooking.gif' . '" alt="' . ':cooking' . '" />';
+
+ $b['texts'][] = ':fryegg';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/food/fryegg.gif' . '" alt="' . ':fryegg' . '" />';
+
+#Happy smileys
+
+ $b['texts'][] = ':cloud9';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/happy/cloud9.gif' . '" alt="' . ':cloud9' . '" />';
+
+ $b['texts'][] = ':tearsofjoy';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/happy/tearsofjoy.gif' . '" alt="' . ':tearsofjoy' . '" />';
+
+#Repsect smileys
+
+ $b['texts'][] = ':bow';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/respect/bow.gif' . '" alt="' . ':bow' . '" />';
+
+ $b['texts'][] = ':bravo';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/respect/bravo.gif' . '" alt="' . ':bravo' . '" />';
+
+ $b['texts'][] = ':hailking';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/respect/hailking.gif' . '" alt="' . ':hailking' . '" />';
+
+ $b['texts'][] = ':number1';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/respect/number1.gif' . '" alt="' . ':number1' . '" />';
+
+#Laugh smileys
+
+ $b['texts'][] = ':hahaha';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/laugh/hahaha.gif' . '" alt="' . ':hahaha' . '" />';
+
+ $b['texts'][] = ':loltv';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/laugh/loltv.gif' . '" alt="' . ':loltv' . '" />';
+
+ $b['texts'][] = ':rofl';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/laugh/rofl.gif' . '" alt="' . ':rofl' . '" />';
+
+#Music smileys
+
+ $b['texts'][] = ':dj';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/music/dj.gif' . '" alt="' . ':dj' . '" />';
+
+ $b['texts'][] = ':drums';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/music/drums.gif' . '" alt="' . ':drums' . '" />';
+
+ $b['texts'][] = ':elvis';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/music/elvis.gif' . '" alt="' . ':elivs' . '" />';
+
+ $b['texts'][] = ':guitar';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/music/guitar.gif' . '" alt="' . ':guitar' . '" />';
+
+ $b['texts'][] = ':trumpet';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/music/trumpet.gif' . '" alt="' . ':trumpet' . '" />';
+
+ $b['texts'][] = ':violin';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/music/violin.gif' . '" alt="' . ':violin' . '" />';
+
+#Smileys that used to be in core
+
+ $b['texts'][] = ':headbang';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/oldcore/headbang.gif' . '" alt="' . ':headbang' . '" />';
+
+ $b['texts'][] = ':beard';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/oldcore/beard.png' . '" alt="' . ':beard' . '" />';
+
+ $b['texts'][] = ':whitebeard';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/oldcore/whitebeard.png' . '" alt="' . ':whitebeard' . '" />';
+
+ $b['texts'][] = ':shaka';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/oldcore/shaka.gif' . '" alt="' . ':shaka' . '" />';
+
+ $b['texts'][] = ':\\.../';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/oldcore/shaka.gif' . '" alt="' . ':\\.../' . '" />';
+
+ $b['texts'][] = ':\\ooo/';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/oldcore/shaka.gif' . '" alt="' . ':\\ooo/' . '" />';
+
+ $b['texts'][] = ':headdesk';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/oldcore/headdesk.gif' . '" alt="' . ':headdesk' . '" />';
+
+#These two are still in core, so oldcore isn't strictly right, but we don't want too many directories
+
+ $b['texts'][] = ':-d';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/oldcore/laughing.gif' . '" alt="' . ':-d' . '" />';
+
+ $b['texts'][] = ':-o';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smiley_pack/icons/oldcore/surprised.gif' . '" alt="' . ':-o' . '" />';
+
+
+
+
+}
--- /dev/null
+<?php
+/*
+ * Name: Adult Smilies
+ * Description: Smily icons that could or should not be included in core
+ * Version: 1.0
+ * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
+ *
+ * This is a template for how to extend the "smily" code.
+ *
+ */
+
+function smilies_adult_install() {
+ register_hook('smilie', 'addon/smilies_adult/smilies_adult.php', 'smilies_adult_smilies');
+}
+
+function smilies_adult_uninstall() {
+ unregister_hook('smilie', 'addon/smilies_adult/smilies_adult.php', 'smilies_adult_smilies');
+}
+
+
+
+function smilies_adult_smilies(&$a,&$b) {
+
+ $b['texts'][] = '(o)(o)';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smilies_adult/icons/tits.gif' . '" alt="' . '(o)(o)' . '" />';
+
+ $b['texts'][] = '(.)(.)';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smilies_adult/icons/tits.gif' . '" alt="' . '(.)(.)' . '" />';
+
+ $b['texts'][] = ':bong';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smilies_adult/icons/bong.gif' . '" alt="' . ':bong' . '" />';
+
+ $b['texts'][] = ':sperm';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smilies_adult/icons/sperm.gif' . '" alt="' . ':sperm' . '" />';
+
+ $b['texts'][] = ':drunk';
+ $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/smilies_adult/icons/drunk.gif' . '" alt="' . ':drunk' . '" />';
+}
\ No newline at end of file
____ StatusNet Plugin ____
by Tobias Diekershoff
+ http://diekershoff.homeunix.net/friendika/profile/tobias
tobias.diekershoff(at)gmx.net
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
__ Global Configuration __
-To activate this addon add statusnet to the list of active addons in your
-.htconfig.php file
- $a->config['system']['addon'] = "statusnet, ...".
+If you have configured an admin account, you can configure this plugin from
+the admin panel. First activate it from the plugin section of the panel.
+Afterwards you will have a separate configuration page for the plugin, where
+you can provide a set of globally available OAuth credentials for different
+StatusNet pages which will be available for all users of your server.
+
+If you don't use the admin panel, you can configure the relay using the
+.htconfig.php file of your friendica installation. To activate the relay add
+it's name to the list of activated addons.
+
+ $a->config['system']['addon'] = "statusnet, ..."
+
+If you want to provide preconfigured StatusNet instances for your user add the
+credentials for them by adding
+
+$a->config['statusnet']['sites'] = array (
+ array ('sitename' => 'identi.ca', 'apiurl' => 'https://identi.ca/api/',
+ 'consumersecret' => 'OAuth Consumer Secret here', 'consumerkey' => 'OAuth
+ Consumer Key here'),
+ array ('sitename' => 'Some other Server', 'apiurl' =>
+ 'http://status.example.com/api/', 'consumersecret' => 'OAuth
+ Consumer Secret here', 'consumerkey' => 'OAuth Consumer Key here')
+);
+
+to the config file.
+
+Regardless of providing global OAuth credentials for your users or not, they
+can always add their own OAuth-Key and -Secret thus enable the relay for any
+StatusNet instance they may have an account at.
__ User Configuration __
#statusnet-default-label {
float: left;
width: 250px;
- margin-bottom: 25px;
}
-
+#statusnet-sendtaglinks-label {
+ float: left;
+ width: 250px;
+ margin-bottom: 25px;
+}
#statusnet-disconnect {
float: left;
}
/**
* Name: StatusNet Connector
* Description: Relay public postings to a connected StatusNet account
- * Version: 1.0.3
- * Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
+ * Version: 1.0.4
+ * Author: Tobias Diekershoff <http://diekershoff.homeunix.net/friendika/profile/tobias>
*/
/* StatusNet Plugin for Friendica
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'])) {
/***
// ok, now that we have the Access Token, save them in the user config
set_pconfig(local_user(),'statusnet', 'oauthtoken', $token['oauth_token']);
set_pconfig(local_user(),'statusnet', 'oauthsecret', $token['oauth_token_secret']);
- set_pconfig(local_user(),'statusnet', 'post', 1);
+ set_pconfig(local_user(),'statusnet', 'post', 1);
+ set_pconfig(local_user(),'statusnet', 'post_taglinks', 1);
// reload the Addon Settings page, if we don't do it see Bug #42
goaway($a->get_baseurl().'/settings/connectors');
} else {
// if no PIN is supplied in the POST variables, the user has changed the setting
- // to post a tweet for every new __public__ posting to the wall
+ // to post a dent for every new __public__ posting to the wall
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_by_default',intval($_POST['statusnet-default']));
+ set_pconfig(local_user(),'statusnet','post_taglinks',intval($_POST['statusnet-sendtaglinks']));
info( t('StatusNet settings updated.') . EOL);
}}}}
}
$enabled = get_pconfig(local_user(), 'statusnet', 'post');
$checked = (($enabled) ? ' checked="checked" ' : '');
$defenabled = get_pconfig(local_user(),'statusnet','post_by_default');
- $defchecked = (($defenabled) ? ' checked="checked" ' : '');
+ $defchecked = (($defenabled) ? ' checked="checked" ' : '');
+ $linksenabled = get_pconfig(local_user(),'statusnet','post_taglinks');
+ $linkschecked = (($linksenabled) ? ' checked="checked" ' : '');
$s .= '<div class="settings-block">';
$s .= '<h3>'. t('StatusNet Posting Settings').'</h3>';
$s .= '<div class="clear"></div>';
$s .= '<label id="statusnet-default-label" for="statusnet-default">'. t('Send public postings to StatusNet by default') .'</label>';
$s .= '<input id="statusnet-default" type="checkbox" name="statusnet-default" value="1" ' . $defchecked . '/>';
+ $s .= '<div class="clear"></div>';
+ $s .= '<label id="statusnet-sendtaglinks-label" for="statusnet-sendtaglinks">'.t('Send #tag links to StatusNet').'</label>';
+ $s .= '<input id="statusnet-sendtaglinks" type="checkbox" name="statusnet-sendtaglinks" value="1" '. $linkschecked . '/>';
$s .= '</div><div class="clear"></div>';
$s .= '<div id="statusnet-disconnect-wrapper">';
// 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.
- $tmp = substr($b['body'], 0, 2*$max_char);
+ if (! $b['title']=='') {
+ $tmp = $b['title'] . ' : '. $b['body'];
+ $tmp = substr($tmp, 0, 4*$max_char);
+ } else {
+ $tmp = substr($b['body'], 0, 3*$max_char);
+ }
// if [url=bla][img]blub.png[/img][/url] get blub.png
$tmp = preg_replace( '/\[url\=(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)\]\[img\](\\w+.*?)\\[\\/img\]\\[\\/url\]/i', '$2', $tmp);
// preserve links to images, videos and audios
$tmp = preg_replace( '/\[\\/?youtube(\\s+.*?\]|\])/i', '', $tmp);
$tmp = preg_replace( '/\[\\/?vimeo(\\s+.*?\]|\])/i', '', $tmp);
$tmp = preg_replace( '/\[\\/?audio(\\s+.*?\]|\])/i', '', $tmp);
+ $linksenabled = get_pconfig($b['uid'],'statusnet','post_taglinks');
// if a #tag is linked, don't send the [url] over to SN
- // this is commented out by default as it means backlinks
- // to friendica, if you don't like this feel free to
- // uncomment the following line
-// $tmp = preg_replace( '/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', '#$2', $tmp);
+ // that is, don't send if the option is not set in the
+ // connector settings
+ if ($linksenabled=='0') {
+ $tmp = preg_replace( '/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', '#$2', $tmp);
+ }
// preserve links to webpages
$tmp = preg_replace( '/\[url\=(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)\](\w+.*?)\[\/url\]/i', '$2 $1', $tmp);
$tmp = preg_replace( '/\[bookmark\=(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)\](\w+.*?)\[\/bookmark\]/i', '$2 $1', $tmp);
$shortlink = short_link( $b['plink'] );
// the new message will be shortened such that "... $shortlink"
// will fit into the character limit
- $msg = substr($msg, 0, $max_char-strlen($shortlink)-4);
+ $msg = nl2br(substr($msg, 0, $max_char-strlen($shortlink)-4));
+ $msg = str_replace(array('<br>','<br />'),' ',$msg);
+ $e = explode(' ', $msg);
+ // remove the last word from the cut down message to
+ // avoid sending cut words to the MicroBlog
+ array_pop($e);
+ $msg = implode(' ', $e);
$msg .= '... ' . $shortlink;
}
// and now tweet it :-)
____ Twitter Plugin ____
By Tobias Diekershoff
+ http://diekershoff.homeunix.net/friendika/profile/tobias
tobias.diekershoff(at)gmx.net
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
__ Global Configuration __
+If you enabled an administrator account, please use the admin panel to configure
+the Twitter relay. If you for any reason prefer to use a configuration file instead
+of the admin panels, please refer to the Alternative Configuration below.
+
+Activate the plugin from the plugins section of your admin panel. When you have
+done so, add your consumer key and consumer secret in the settings section of the
+plugin page.
+
+When this is done your user can now configure their Twitter connection at
+"Settings -> Connector Settings" and enable the forwarding of their *public*
+messages to Twitter.
+
+__ Alternative Configuration __
+
To activate this addon add @twitter@ to the list of active addons in your
.htconfig.php file
- $a->config['system']['addon'] = "twitter, ..."
+
+$a->config['system']['addon'] = "twitter, ..."
+
Afterwards you need to add your OAuth consumer key / secret pair to it by
adding the following two lines
$a->config['twitter']['consumerkey'] = 'your consumer KEY here';
$a->config['twitter']['consumersecret'] = 'your consumer SECRET here';
-When this is done your user can now configure their Twitter connection at
-"Settings -> Plugin Settings" and enable the forwarding of their *public*
-messages to Twitter.
__ User Configuration __
the forwarding of *all public* postings to Twitter and one to clear the
personal configuration from the Twitter credentials.
+
}
#twitter-disconnect-label {
float: left;
- width: 200px;
+ width: 250px;
margin-bottom: 25px;
}
}
#twitter-enable-label {
float: left;
- width: 200px;
+ width: 250px;
margin-bottom: 5px;
}
+#twitter-default-label {
+ float: left;
+ width: 250px;
+}
+#twitter-sendtaglinks-label {
+ float: left;
+ width: 250px;
+ margin-bottom: 25px;
+}
#twitter-checkbox {
float: left;
}
#twitter-pin-label {
float: left;
- width: 200px;
+ width: 250px;
margin-bottom: 25px;
}
/**
* Name: Twitter Connector
* Description: Relay public postings to a connected Twitter account
- * Version: 1.0.2
- * Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
+ * Version: 1.0.3
+ * Author: Tobias Diekershoff <http://diekershoff.homeunix.net/friendika/profile/tobias>
*/
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
set_pconfig(local_user(),'twitter', 'oauthtoken', $token['oauth_token']);
set_pconfig(local_user(),'twitter', 'oauthsecret', $token['oauth_token_secret']);
set_pconfig(local_user(),'twitter', 'post', 1);
+ set_pconfig(local_user(),'twitter', 'post_taglinks', 1);
// reload the Addon Settings page, if we don't do it see Bug #42
goaway($a->get_baseurl().'/settings/connectors');
} else {
// to post a tweet for every new __public__ posting to the wall
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']));
info( t('Twitter settings updated.') . EOL);
}}
}
$checked = (($enabled) ? ' checked="checked" ' : '');
$defenabled = get_pconfig(local_user(),'twitter','post_by_default');
$defchecked = (($defenabled) ? ' checked="checked" ' : '');
+ $linksenabled = get_pconfig(local_user(),'twitter','post_taglinks');
+ $linkschecked = (($linksenabled) ? ' checked="checked" ' : '');
$s .= '<div class="settings-block">';
$s .= '<h3>'. t('Twitter Posting Settings') .'</h3>';
$s .= '<div class="clear"></div>';
$s .= '<label id="twitter-default-label" for="twitter-default">'. t('Send public postings to Twitter by default') .'</label>';
$s .= '<input id="twitter-default" type="checkbox" name="twitter-default" value="1" ' . $defchecked . '/>';
+ $s .= '<div class="clear"></div>';
+ $s .= '<label id="twitter-sendtaglinks-label" for="twitter-sendtaglinks">'.t('Send #tag links to Twitter').'</label>';
+ $s .= '<input id="twitter-sendtaglinks" type="checkbox" name="twitter-sendtaglinks" value="1" '. $linkschecked . '/>';
$s .= '</div><div class="clear"></div>';
$s .= '<div id="twitter-disconnect-wrapper">';
// we can later send to Twitter. This way we can "gain" some
// information during shortening of potential links but do not
// shorten all the links in a 200000 character long essay.
- $tmp = substr($b['body'], 0, 2*$max_char);
+ if (! $b['title']=='') {
+ $tmp = $b['title'] . ' : '. $b['body'];
+ $tmp = substr($tmp, 0, 4*$max_char);
+ } else {
+ $tmp = substr($b['body'], 0, 3*$max_char);
+ }
// if [url=bla][img]blub.png[/img][/url] get blub.png
$tmp = preg_replace( '/\[url\=(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)\]\[img\](\\w+.*?)\\[\\/img\]\\[\\/url\]/i', '$2', $tmp);
// preserve links to images, videos and audios
$tmp = preg_replace( '/\[\\/?youtube(\\s+.*?\]|\])/i', '', $tmp);
$tmp = preg_replace( '/\[\\/?vimeo(\\s+.*?\]|\])/i', '', $tmp);
$tmp = preg_replace( '/\[\\/?audio(\\s+.*?\]|\])/i', '', $tmp);
+ $linksenabled = get_pconfig($b['uid'],'twitter','post_taglinks');
// if a #tag is linked, don't send the [url] over to SN
- // this is commented out by default as it means backlinks
- // to friendica, if you don't like this feel free to
- // uncomment the following line
-// $tmp = preg_replace( '/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', '#$2', $tmp);
- // preserve links to webpages
+ // that is, don't send if the option is not set in the
+ // connector settings
+ if ($linksenabled=='0') {
+ $tmp = preg_replace( '/#\[url\=(\w+.*?)\](\w+.*?)\[\/url\]/i', '#$2', $tmp);
+ }
$tmp = preg_replace( '/\[url\=(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)\](\w+.*?)\[\/url\]/i', '$2 $1', $tmp);
$tmp = preg_replace( '/\[bookmark\=(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)\](\w+.*?)\[\/bookmark\]/i', '$2 $1', $tmp);
// find all http or https links in the body of the entry and
$shortlink = short_link( $b['plink'] );
// the new message will be shortened such that "... $shortlink"
// will fit into the character limit
- $msg = substr($msg, 0, $max_char-strlen($shortlink)-4);
+ $msg = nl2br(substr($msg, 0, $max_char-strlen($shortlink)-4));
+ $msg = str_replace(array('<br>','<br />'),' ',$msg);
+ $e = explode(' ', $msg);
+ // remove the last word from the cut down message to
+ // avoid sending cut words to the MicroBlog
+ array_pop($e);
+ $msg = implode(' ', $e);
$msg .= '... ' . $shortlink;
}
// and now tweet it :-)
function viewsrc_install() {
register_hook('item_photo_menu', 'addon/viewsrc/viewsrc.php', 'viewsrc_item_photo_menu');
+ register_hook('page_end', 'addon/viewsrc/viewsrc.php', 'viewsrc_page_end');
}
function viewsrc_uninstall() {
unregister_hook('item_photo_menu', 'addon/viewsrc/viewsrc.php', 'viewsrc_item_photo_menu');
+ unregister_hook('page_end', 'addon/viewsrc/viewsrc.php', 'viewsrc_page_end');
+
}
+function viewsrc_page_end(&$a, &$o){
+ $a->page['htmlhead'] .= <<< EOS
+ <script>
+ $(function(){
+ $('a[href*="/viewsrc/"]').fancybox();
+ });
+ </script>
+EOS;
+}
function viewsrc_item_photo_menu(&$a,&$b) {
- if(! local_user())
+ if((! local_user()) || (local_user() != $b['item']['uid']))
return;
$b['menu'] = array_merge( array( t('View Source') => $a->get_baseurl() . '/viewsrc/'. $b['item']['id']), $b['menu']);
function widgets_settings_post(){
-
+ if(! local_user())
+ return;
if (isset($_POST['widgets-submit'])){
del_pconfig(local_user(), 'widgets', 'key');
if($wp_username && $wp_password && $wp_blog) {
require_once('include/bbcode.php');
+ require_once('include/html2plain.php');
+
+ // If the title is empty then try to guess
+ if ($b['title'] == '') {
+ // Take the description from the bookmark
+ if(preg_match("/\[bookmark\=([^\]]*)\](.*?)\[\/bookmark\]/is",$b['body'],$matches))
+ $b['title'] = $matches[2];
+
+ // If no bookmark is found then take the first line
+ if ($b['title'] == '') {
+ $title = html2plain(bbcode($b['body']), 0, true);
+ $pos = strpos($title, "\n");
+ if (($pos == 0) or ($pos > 60))
+ $pos = 60;
+
+ $b['title'] = substr($title, 0, $pos);
+ }
+ }
$title = '<title>' . (($b['title']) ? $b['title'] : t('Post from Friendica')) . '</title>';
$post = $title . bbcode($b['body']);