diff --git a/blogger.tgz b/blogger.tgz new file mode 100644 index 00000000..f30042f9 Binary files /dev/null and b/blogger.tgz differ diff --git a/blogger/blogger.css b/blogger/blogger.css new file mode 100755 index 00000000..4e2294e5 --- /dev/null +++ b/blogger/blogger.css @@ -0,0 +1,16 @@ + +#blogger-enable-label, #blogger-username-label, #blogger-password-label, #blogger-bydefault-label { + float: left; + width: 200px; + margin-top: 10px; +} + +#blogger-checkbox, #blogger-username, #blogger-password, #blogger-bydefault { + float: left; + margin-top: 10px; +} + +#blogger-submit { + margin-top: 15px; +} + diff --git a/blogger/blogger.php b/blogger/blogger.php new file mode 100755 index 00000000..5c9b4399 --- /dev/null +++ b/blogger/blogger.php @@ -0,0 +1,200 @@ + + */ + +function blpost_install() { + register_hook('post_local', 'addon/blpost/blpost.php', 'blpost_post_local'); + register_hook('notifier_normal', 'addon/blpost/blpost.php', 'blpost_send'); + register_hook('jot_networks', 'addon/blpost/blpost.php', 'blpost_jot_nets'); + register_hook('connector_settings', 'addon/blpost/blpost.php', 'blpost_settings'); + register_hook('connector_settings_post', 'addon/blpost/blpost.php', 'blpost_settings_post'); + +} +function blpost_uninstall() { + unregister_hook('post_local', 'addon/blpost/blpost.php', 'blpost_post_local'); + unregister_hook('notifier_normal', 'addon/blpost/blpost.php', 'blpost_send'); + unregister_hook('jot_networks', 'addon/blpost/blpost.php', 'blpost_jot_nets'); + unregister_hook('connector_settings', 'addon/blpost/blpost.php', 'blpost_settings'); + unregister_hook('connector_settings_post', 'addon/blpost/blpost.php', 'blpost_settings_post'); + + // obsolete - remove + unregister_hook('post_local_end', 'addon/blpost/blpost.php', 'blpost_send'); + unregister_hook('plugin_settings', 'addon/blpost/blpost.php', 'blpost_settings'); + unregister_hook('plugin_settings_post', 'addon/blpost/blpost.php', 'blpost_settings_post'); + +} + + +function blpost_jot_nets(&$a,&$b) { + if(! local_user()) + return; + + $bl_post = get_pconfig(local_user(),'blpost','post'); + if(intval($bl_post) == 1) { + $bl_defpost = get_pconfig(local_user(),'blpost','post_by_default'); + $selected = ((intval($bl_defpost) == 1) ? ' checked="checked" ' : ''); + $b .= '
' + . t('Post to blogger') . '
'; + } +} + + +function blpost_settings(&$a,&$s) { + + if(! local_user()) + return; + + /* Add our stylesheet to the page so we can make our settings look nice */ + + $a->page['htmlhead'] .= '' . "\r\n"; + + /* Get the current state of our config variables */ + + $enabled = get_pconfig(local_user(),'blpost','post'); + + $checked = (($enabled) ? ' checked="checked" ' : ''); + + $def_enabled = get_pconfig(local_user(),'blpost','post_by_default'); + + $def_checked = (($def_enabled) ? ' checked="checked" ' : ''); + + $bl_username = get_pconfig(local_user(), 'blpost', 'bl_username'); + $bl_password = get_pconfig(local_user(), 'blpost', 'bl_password'); + $bl_blog = get_pconfig(local_user(), 'blpost', 'bl_blog'); + + + /* Add some HTML to the existing form */ + + $s .= '
'; + $s .= '

' . t('Blogger Post Settings') . '

'; + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + /* provide a submit button */ + + $s .= '
'; + +} + + +function blpost_settings_post(&$a,&$b) { + + if(x($_POST,'blpost-submit')) { + + set_pconfig(local_user(),'blpost','post',intval($_POST['blpost'])); + set_pconfig(local_user(),'blpost','post_by_default',intval($_POST['bl_bydefault'])); + set_pconfig(local_user(),'blpost','bl_username',trim($_POST['bl_username'])); + set_pconfig(local_user(),'blpost','bl_password',trim($_POST['bl_password'])); + set_pconfig(local_user(),'blpost','bl_blog',trim($_POST['bl_blog'])); + + } + +} + +function blpost_post_local(&$a,&$b) { + + // This can probably be changed to allow editing by pointing to a different API endpoint + + if($b['edit']) + return; + + if((! local_user()) || (local_user() != $b['uid'])) + return; + + if($b['private'] || $b['parent']) + return; + + $bl_post = intval(get_pconfig(local_user(),'blpost','post')); + + $bl_enable = (($bl_post && x($_REQUEST,'blpost_enable')) ? intval($_REQUEST['blpost_enable']) : 0); + + if($_REQUEST['api_source'] && intval(get_pconfig(local_user(),'blpost','post_by_default'))) + $bl_enable = 1; + + if(! $bl_enable) + return; + + if(strlen($b['postopts'])) + $b['postopts'] .= ','; + $b['postopts'] .= 'blpost'; +} + + + + +function blpost_send(&$a,&$b) { + + if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) + return; + + if(! strstr($b['postopts'],'blpost')) + return; + + if($b['parent'] != $b['id']) + return; + + + $bl_username = xmlify(get_pconfig($b['uid'],'blpost','bl_username')); + $bl_password = xmlify(get_pconfig($b['uid'],'blpost','bl_password')); + $bl_blog = get_pconfig($b['uid'],'blpost','bl_blog'); + + if($bl_username && $bl_password && $bl_blog) { + + require_once('include/bbcode.php'); + + $title = '' . (($b['title']) ? $b['title'] : t('Post from Friendica')) . ''; + $post = $title . bbcode($b['body']); + $post = xmlify($post); + + $xml = <<< EOT + + + blogger.newPost + + + + $bl_username + $bl_password + $post + 1 + + + +EOT; + + logger('blpost: data: ' . $xml, LOGGER_DATA); + + if($bl_blog !== 'test') + $x = post_url($bl_blog,$xml); + logger('posted to blogger: ' . (($x) ? $x : ''), LOGGER_DEBUG); + + } +} + diff --git a/facebook.tgz b/facebook.tgz index c4cc196b..2b643e70 100644 Binary files a/facebook.tgz and b/facebook.tgz differ diff --git a/facebook/facebook.php b/facebook/facebook.php index 1e961fda..b6e40654 100755 --- a/facebook/facebook.php +++ b/facebook/facebook.php @@ -59,6 +59,7 @@ define('FACEBOOK_SESSION_ERR_NOTIFICATION_INTERVAL', 259200); // 3 days define('FACEBOOK_DEFAULT_POLL_INTERVAL', 60); // given in minutes define('FACEBOOK_MIN_POLL_INTERVAL', 5); +require_once('include/security.php'); function facebook_install() { register_hook('post_local', 'addon/facebook/facebook.php', 'facebook_post_local'); @@ -648,6 +649,8 @@ function facebook_plugin_settings(&$a,&$b) { function facebook_plugin_admin(&$a, &$o){ + + $o = ''; $o .= '

' . t('Facebook API Key') . '

'; diff --git a/gravatar.tgz b/gravatar.tgz new file mode 100644 index 00000000..38e942f8 Binary files /dev/null and b/gravatar.tgz differ diff --git a/gravatar/README.md b/gravatar/README.md new file mode 100644 index 00000000..ff209b0e --- /dev/null +++ b/gravatar/README.md @@ -0,0 +1,42 @@ +# Gravatar Plugin +by [Klaus Weidenbach](http://friendica.dszdw.net/profile/klaus) + +This addon allows you to look up an avatar image for new users and contacts at [Gravatar](http://www.gravatar.com). This will be used if there have not been found any other avatar images yet for example through OpenID. + +Gravatar is a popular, but centralized and proprietary service where people can store an avatar image for their email-addresses. It is widely used on many pages, for example to display an avatar for comment functions, profile pages, etc. + +* * * + +# Configuration +## Default Avatar Image +If no avatar was found for an email Gravatar can create some pseudo-random generated avatars based on an email hash. You can choose between these presets: + +* __Gravatar__: default static Gravatar logo +* __MM__: (mystery-man) a static image +* __Identicon__: a generated geometric pattern based on email hash +* __Monsterid__: a generated 'monster' with different colors, faces, etc. based on email hash +* __Wavatar__: faces with different features and backgrounds based on email hash +* __Retro__: 8-bit arcade-styled pixelated faces based on email hash + +See examples at [Gravatar][1]. +## Avatar Rating +Gravatar lets users self-rate their images to be used at appropriate audiences. Choose which are appropriate for your friendica site: + +* __g__: suitable for display on all wesites with any audience type +* __pg__: may contain rude gestures, provocatively dressed individuals, the lesser swear words, or mild violence +* __r__: may contain such things as harsh profanity, intense violence, nudity, or hard drug use +* __x__: may contain hardcore sexual imagery or extremely disurbing violence + +See more information at [Gravatar][1]. + +## Alternative Configuration +Open the .htconfig.php file and add "gravatar" to the list of activated addons: + + $a->config['system']['addon'] = "..., gravatar"; + +You can add two configuration variables for the addon: + + $a->config['gravatar']['default_avatar'] = "identicon"; + $a->config['gravatar']['rating'] = "g"; + +[1]: http://www.gravatar.com/site/implement/images/ "See documentation at Gravatar for more information" diff --git a/gravatar/admin.tpl b/gravatar/admin.tpl new file mode 100644 index 00000000..83144e43 --- /dev/null +++ b/gravatar/admin.tpl @@ -0,0 +1,3 @@ +{{ inc field_select.tpl with $field=$default_avatar}}{{ endinc }} +{{ inc field_select.tpl with $field=$rating }}{{ endinc }} +
diff --git a/gravatar/gravatar.php b/gravatar/gravatar.php new file mode 100644 index 00000000..b9435a31 --- /dev/null +++ b/gravatar/gravatar.php @@ -0,0 +1,104 @@ + + */ + +/** + * Installs the plugin hook + */ +function gravatar_install() { + register_hook('avatar_lookup', 'addon/gravatar/gravatar.php', 'gravatar_lookup'); + + logger("installed gravatar"); +} + +/** + * Removes the plugin hook + */ +function gravatar_uninstall() { + unregister_hook('avatar_lookup', 'addon/gravatar/gravatar.php', 'gravatar_lookup'); + + logger("uninstalled gravatar"); +} + +/** + * Looks up the avatar at gravatar.com and returns the URL. + * + * @param $a array + * @param &$b array + */ +function gravatar_lookup($a, &$b) { + $default_avatar = get_config('gravatar', 'default_img'); + $rating = get_config('gravatar', 'rating'); + + // setting default value if nothing configured + if(! $default_avatar) + $default_avatar = 'identicon'; // default image will be a random pattern + if(! $rating) + $rating = 'g'; // suitable for display on all websites with any audience type + + $hash = md5(trim(strtolower($b['email']))); + + $url = 'http://www.gravatar.com/avatar/' .$hash .'.jpg'; + $url .= '?s=' .$b['size'] .'&r=' .$rating; + if ($default_avatar != "gravatar") + $url .= '&d=' .$default_avatar; + + $b['url'] = $url; + $b['success'] = true; +} + +/** + * Display admin settings for this addon + */ +function gravatar_plugin_admin (&$a, &$o) { + $t = file_get_contents( dirname(__file__)."/admin.tpl"); + + $default_avatar = get_config('gravatar', 'default_img'); + $rating = get_config('gravatar', 'rating'); + + // set default values for first configuration + if(! $default_avatar) + $default_avatar = 'identicon'; // pseudo-random geometric pattern based on email hash + if(! $rating) + $rating = 'g'; // suitable for display on all websites with any audience type + + // Available options for the select boxes + $default_avatars = array( + 'mm' => t('generic profile image'), + 'identicon' => t('random geometric pattern'), + 'monsterid' => t('monster face'), + 'wavatar' => t('computer generated face'), + 'retro' => t('retro arcade style face'), + ); + $ratings = array( + 'g' => 'g', + 'pg' => 'pg', + 'r' => 'r', + 'x' => 'x' + ); + + $o = ''; + $o .= replace_macros( $t, array( + '$submit' => t('Submit'), + '$default_avatar' => array('avatar', t('Default avatar image'), $default_avatar, t('Select default avatar image if none was found at Gravatar. See README'), $default_avatars), + '$rating' => array('rating', t('Rating of images'), $rating, t('Select the appropriate avatar rating for your site. See README'), $ratings), + )); +} + +/** + * Save admin settings + */ +function gravatar_plugin_admin_post (&$a) { + check_form_security_token('gravatarsave'); + + $default_avatar = ((x($_POST, 'avatar')) ? notags(trim($_POST['avatar'])) : 'identicon'); + $rating = ((x($_POST, 'rating')) ? notags(trim($_POST['rating'])) : 'g'); + set_config('gravatar', 'default_img', $default_avatar); + set_config('gravatar', 'rating', $rating); + info( t('Gravatar settings updated.') .EOL); +} +?> diff --git a/impressum.tgz b/impressum.tgz index b2f83119..3e4ecd75 100755 Binary files a/impressum.tgz and b/impressum.tgz differ diff --git a/openstreetmap.tgz b/openstreetmap.tgz index c7265d16..29fced0a 100644 Binary files a/openstreetmap.tgz and b/openstreetmap.tgz differ diff --git a/piwik.tgz b/piwik.tgz index febb641e..a1fc2ecd 100755 Binary files a/piwik.tgz and b/piwik.tgz differ diff --git a/piwik/piwik.css b/piwik/piwik.css index e5e95bbe..066413de 100755 --- a/piwik/piwik.css +++ b/piwik/piwik.css @@ -1,9 +1,9 @@ #piwik-optout-link { - padding: 100px 50px; + padding: 50px 0 0 0; text-align: justify; font-size: 0.85em; - margin-top:10px; - clear: both; + margin-top:10px; + clear: both; } #piwik-code-block { display: none; diff --git a/planets.tgz b/planets.tgz new file mode 100644 index 00000000..1be40b9d Binary files /dev/null and b/planets.tgz differ diff --git a/planets/planets.css b/planets/planets.css new file mode 100755 index 00000000..668b65bc --- /dev/null +++ b/planets/planets.css @@ -0,0 +1,14 @@ + + + +#planets-enable-label { + float: left; + width: 200px; + margin-bottom: 25px; +} + +#planets-checkbox { + float: left; +} + + diff --git a/planets/planets.php b/planets/planets.php new file mode 100755 index 00000000..1c6ed43b --- /dev/null +++ b/planets/planets.php @@ -0,0 +1,182 @@ + + * Author: Darth Baldwin + * + * + * + * + * Addons are registered with the system in the + * .htconfig.php file. + * + * $a->config['system']['addon'] = 'plugin1,plugin2,etc.'; + * + * When registration is detected, the system calls the plugin + * name_install() function, located in 'addon/name/name.php', + * where 'name' is the name of the addon. + * If the addon is removed from the configuration list, the + * system will call the name_uninstall() function. + * + */ + + +function planets_install() { + + /** + * + * Our demo plugin will attach in three places. + * The first is just prior to storing a local post. + * + */ + + register_hook('post_local', 'addon/planets/planets.php', 'planets_post_hook'); + + /** + * + * Then we'll attach into the plugin settings page, and also the + * settings post hook so that we can create and update + * user preferences. + * + */ + + register_hook('plugin_settings', 'addon/planets/planets.php', 'planets_settings'); + register_hook('plugin_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); + + logger("installed planets"); +} + + +function planets_uninstall() { + + /** + * + * uninstall unregisters any hooks created with register_hook + * during install. It may also delete configuration settings + * and any other cleanup. + * + */ + + unregister_hook('post_local', 'addon/planets/planets.php', 'planets_post_hook'); + unregister_hook('plugin_settings', 'addon/planets/planets.php', 'planets_settings'); + unregister_hook('plugin_settings_post', 'addon/planets/planets.php', 'planets_settings_post'); + + + logger("removed planets"); +} + + + +function planets_post_hook($a, &$item) { + + /** + * + * An item was posted on the local system. + * We are going to look for specific items: + * - A status post by a profile owner + * - The profile owner must have allowed our plugin + * + */ + + logger('planets invoked'); + + if(! local_user()) /* non-zero if this is a logged in user of this system */ + return; + + if(local_user() != $item['uid']) /* Does this person own the post? */ + return; + + if($item['parent']) /* If the item has a parent, this is a comment or something else, not a status post. */ + return; + + /* Retrieve our personal config setting */ + + $active = get_pconfig(local_user(), 'planets', 'enable'); + + if(! $active) + return; + + /** + * + * OK, we're allowed to do our stuff. + * Here's what we are going to do: + * load the list of timezone names, and use that to generate a list of world planets. + * Then we'll pick one of those at random and put it in the "location" field for the post. + * + */ + + $planets = array('Alderaan','Tatooine','Dagoba','Polis Massa','Coruscant','Hoth','Endor','Kamino','Rattatak','Mustafar','Iego','Geonosis','Felucia','Dantooine','Ansion','Artaru','Bespin','Boz Pity','Cato Neimoidia','Christophsis','Kashyyk','Kessel','Malastare','Mygeeto','Nar Shaddaa','Ord Mantell','Saleucami','Subterrel','Death Star','Teth','Tund','Utapau','Yavin'); +# $zones = timezone_identifiers_list(); +# foreach($zones as $zone) { +# if((strpos($zone,'/')) && (! stristr($zone,'US/')) && (! stristr($zone,'Etc/'))) +# $planets[] = str_replace('_', ' ',substr($zone,strpos($zone,'/') + 1)); +# } +# +# if(! count($planets)) +# return; + $planet = array_rand($planets,1); + $item['location'] = $planets[$planet]; + + return; +} + + + + +/** + * + * Callback from the settings post function. + * $post contains the $_POST array. + * We will make sure we've got a valid user account + * and if so set our configuration setting for this person. + * + */ + +function planets_settings_post($a,$post) { + if(! local_user()) + return; + if($_POST['planets-submit']) + set_pconfig(local_user(),'planets','enable',intval($_POST['planets'])); +} + + +/** + * + * Called from the Plugin Setting form. + * Add our own settings info to the page. + * + */ + + + +function planets_settings(&$a,&$s) { + + if(! local_user()) + return; + + /* Add our stylesheet to the page so we can make our settings look nice */ + + $a->page['htmlhead'] .= '' . "\r\n"; + + /* Get the current state of our config variable */ + + $enabled = get_pconfig(local_user(),'planets','enable'); + + $checked = (($enabled) ? ' checked="checked" ' : ''); + + /* Add some HTML to the existing form */ + + $s .= '
'; + $s .= '

' . t('Planets Settings') . '

'; + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + /* provide a submit button */ + + $s .= '
'; + +} diff --git a/randplace.tgz b/randplace.tgz index 931781d0..7ab5f0db 100755 Binary files a/randplace.tgz and b/randplace.tgz differ diff --git a/randplace/randplace.php b/randplace/randplace.php index df713766..b70c02d9 100755 --- a/randplace/randplace.php +++ b/randplace/randplace.php @@ -8,10 +8,8 @@ * * * - * Addons are registered with the system in the - * .htconfig.php file. - * - * $a->config['system']['addon'] = 'plugin1,plugin2,etc.'; + * Addons are registered with the system through the admin + * panel. * * When registration is detected, the system calls the plugin * name_install() function, located in 'addon/name/name.php', diff --git a/showmore.tgz b/showmore.tgz index 016ad521..394a99fd 100644 Binary files a/showmore.tgz and b/showmore.tgz differ diff --git a/statusnet.tgz b/statusnet.tgz index 4e5bf8ce..2b41f5a4 100755 Binary files a/statusnet.tgz and b/statusnet.tgz differ diff --git a/testdrive.tgz b/testdrive.tgz new file mode 100644 index 00000000..7d314ea2 Binary files /dev/null and b/testdrive.tgz differ diff --git a/testdrive/README.md b/testdrive/README.md new file mode 100644 index 00000000..3d735dea --- /dev/null +++ b/testdrive/README.md @@ -0,0 +1,23 @@ +TestDrive +========= + + +Testdrive is a Friendica plugin which implements automatic account expiration so that a site may be used as a public +test bed. + +When an account is created on the site, it is given a hard expiration date of + + +$a->config['testdrive']['expiredays'] = 30; + +Set this in your .htconfig.php file to allow a 30 day test drive period. By default no expiration period is defined +in case the plugin is activated accidentally. + + +There is no opportunity to extend an expired account using this plugin. Expiration is final. Other plugins may be created +which charge for service and extend the expiration as long as a balance is maintained. This plugin is purely for creating +a limited use test site. + +An email warning will be sent out approximately five days before the expiration occurs. Once it occurs logins and many +system functions are disabled. Five days later the account is removed completely. + \ No newline at end of file diff --git a/testdrive/testdrive.php b/testdrive/testdrive.php new file mode 100644 index 00000000..b7c021a1 --- /dev/null +++ b/testdrive/testdrive.php @@ -0,0 +1,89 @@ + + */ + + + + +function testdrive_install() { + + register_hook('register_account', 'addon/testdrive/testdrive.php', 'testdrive_register_account'); + register_hook('cron', 'addon/testdrive/testdrive.php', 'testdrive_cron'); +} + + +function testdrive_uninstall() { + + unregister_hook('register_account', 'addon/testdrive/testdrive.php', 'testdrive_register_account'); + unregister_hook('cron', 'addon/testdrive/testdrive.php', 'testdrive_cron'); + +} + +function testdrive_register_account($a,$b) { + + $uid = $b; + + $days = get_config('testdrive','expiredays'); + if(! $days) + return; + + $r = q("UPDATE user set account_expires_on = '%s' where uid = %d limit 1", + dbesc(datetime_convert('UTC','UTC','now +' . $days . ' days')), + intval($uid) + ); + +}; + + +function testdrive_cron($a,$b) { + require_once('include/enotify.php'); + + $r = q("select * from user where account_expires_on < UTC_TIMESTAMP() + INTERVAL 5 DAY and + expire_notification_sent = '0000-00-00 00:00:00' "); + + if(count($r)) { + foreach($r as $rr) { + notification(array( + 'uid' => $rr['uid'], + 'type' => NOTIFY_SYSTEM, + 'system_type' => 'testdrive_expire', + 'language' => $rr['language'], + 'to_name' => $rr['username'], + 'to_email' => $rr['email'], + 'source_name' => t('Administrator'), + 'source_link' => $a->get_baseurl(), + 'source_photo' => $a->get_baseurl() . '/images/person-80.jpg', + )); + + q("update user set expire_notification_sent = '%s' where uid = %d limit 1", + dbesc(datetime_convert()), + intval($rr['uid']) + ); + + } + } + + $r = q("select * from user where account_expired = 1 and account_expires_on < UTC_TIMESTAMP() - INTERVAL 5 DAY "); + if(count($r)) { + require_once('include/Contact.php'); + foreach($r as $rr) + user_remove($rr['uid']); + + } + +} + +function testdrive_enotify(&$a, &$b) { + if (x($b, 'params') && $b['params']['type'] == NOTIFY_SYSTEM + && x($b['params'], 'system_type') && $b['params']['system_type'] === 'testdrive_expire') { + $b['itemlink'] = $a->get_baseurl(); + $b['epreamble'] = $b['preamble'] = sprintf( t('Your account on %s will expire in a few days.'), get_config('system','sitename')); + $b['subject'] = t('Your Friendica test account is about to expire.'); + $b['body'] = sprintf( t("Hi %1\$s,\n\nYour test account on %2\$s will expire in less than five days. We hope you enjoyed this test drive and use this opportunity to find a permanent Friendica website for your integrated social communications. A list of public sites is available at http://dir.friendica.com/siteinfo - and for more information on setting up your own Friendica server please see the Friendica project website at http://friendica.com."), $b['params']['to_name'], "[url=" . $app->config["system"]["url"] . "]" . $app->config["sitename"] . "[/url]"); + } +} diff --git a/twitter.tgz b/twitter.tgz index 54d6f8b5..52a05cc6 100755 Binary files a/twitter.tgz and b/twitter.tgz differ