]> git.mxchange.org Git - friendica-addons.git/commitdiff
Merge remote branch 'upstream/master'
authorMichael <icarus@dabo.de>
Wed, 11 Apr 2012 16:49:11 +0000 (18:49 +0200)
committerMichael <icarus@dabo.de>
Wed, 11 Apr 2012 16:49:11 +0000 (18:49 +0200)
24 files changed:
blogger.tgz [new file with mode: 0644]
blogger/blogger.css [new file with mode: 0755]
blogger/blogger.php [new file with mode: 0755]
facebook.tgz
facebook/facebook.php
gravatar.tgz [new file with mode: 0644]
gravatar/README.md [new file with mode: 0644]
gravatar/admin.tpl [new file with mode: 0644]
gravatar/gravatar.php [new file with mode: 0644]
impressum.tgz
openstreetmap.tgz
piwik.tgz
piwik/piwik.css
planets.tgz [new file with mode: 0644]
planets/planets.css [new file with mode: 0755]
planets/planets.php [new file with mode: 0755]
randplace.tgz
randplace/randplace.php
showmore.tgz
statusnet.tgz
testdrive.tgz [new file with mode: 0644]
testdrive/README.md [new file with mode: 0644]
testdrive/testdrive.php [new file with mode: 0644]
twitter.tgz

diff --git a/blogger.tgz b/blogger.tgz
new file mode 100644 (file)
index 0000000..f30042f
Binary files /dev/null and b/blogger.tgz differ
diff --git a/blogger/blogger.css b/blogger/blogger.css
new file mode 100755 (executable)
index 0000000..4e2294e
--- /dev/null
@@ -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 (executable)
index 0000000..5c9b439
--- /dev/null
@@ -0,0 +1,200 @@
+<?php
+
+/**
+ * Name: Blogger Post Connector
+ * Description: Post to Blogger (or anything else which uses blogger XMLRPC API)
+ * Version: 1.0
+ * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
+ */
+
+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 .= '<div class="profile-jot-net"><input type="checkbox" name="blpost_enable" ' . $selected . ' value="1" /> '
+            . t('Post to blogger') . '</div>';
+    }
+}
+
+
+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'] .= '<link rel="stylesheet"  type="text/css" href="' . $a->get_baseurl() . '/addon/blpost/blpost.css' . '" media="all" />' . "\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 .= '<div class="settings-block">';
+    $s .= '<h3>' . t('Blogger Post Settings') . '</h3>';
+    $s .= '<div id="blpost-enable-wrapper">';
+    $s .= '<label id="blpost-enable-label" for="blpost-checkbox">' . t('Enable Blogger Post Plugin') . '</label>';
+    $s .= '<input id="blpost-checkbox" type="checkbox" name="blpost" value="1" ' . $checked . '/>';
+    $s .= '</div><div class="clear"></div>';
+
+    $s .= '<div id="blpost-username-wrapper">';
+    $s .= '<label id="blpost-username-label" for="blpost-username">' . t('Blogger username') . '</label>';
+    $s .= '<input id="blpost-username" type="text" name="bl_username" value="' . $bl_username . '" />';
+    $s .= '</div><div class="clear"></div>';
+
+    $s .= '<div id="blpost-password-wrapper">';
+    $s .= '<label id="blpost-password-label" for="blpost-password">' . t('Blogger password') . '</label>';
+    $s .= '<input id="blpost-password" type="password" name="bl_password" value="' . $bl_password . '" />';
+    $s .= '</div><div class="clear"></div>';
+
+    $s .= '<div id="blpost-blog-wrapper">';
+    $s .= '<label id="blpost-blog-label" for="blpost-blog">' . t('Blogger API URL') . '</label>';
+    $s .= '<input id="blpost-blog" type="text" name="bl_blog" value="' . $bl_blog . '" />';
+    $s .= '</div><div class="clear"></div>';
+
+    $s .= '<div id="blpost-bydefault-wrapper">';
+    $s .= '<label id="blpost-bydefault-label" for="blpost-bydefault">' . t('Post to Blogger by default') . '</label>';
+    $s .= '<input id="blpost-bydefault" type="checkbox" name="bl_bydefault" value="1" ' . $def_checked . '/>';
+    $s .= '</div><div class="clear"></div>';
+
+    /* provide a submit button */
+
+    $s .= '<div class="settings-submit-wrapper" ><input type="submit" id="blpost-submit" name="blpost-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
+
+}
+
+
+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 = '<title>' . (($b['title']) ? $b['title'] : t('Post from Friendica')) . '</title>';
+               $post = $title . bbcode($b['body']);
+               $post = xmlify($post);
+
+               $xml = <<< EOT
+<?xml version=\"1.0\" encoding=\"utf-8\"?>
+<methodCall>
+  <methodName>blogger.newPost</methodName>
+  <params>
+    <param><value><string/></value></param>
+    <param><value><string/></value></param>
+    <param><value><string>$bl_username</string></value></param>
+    <param><value><string>$bl_password</string></value></param>
+    <param><value><string>$post</string></value></param>
+    <param><value><int>1</int></value></param>
+  </params>
+</methodCall>
+
+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);
+
+       }
+}
+
index c4cc196b8889a6a3ee5e80b79b4b4b9f60c1fe71..2b643e70c057f8053eb7e0dcb4798211e7ac3a6f 100644 (file)
Binary files a/facebook.tgz and b/facebook.tgz differ
index 1e961fda309140484ce3e4070defa16d02966d84..b6e40654cd41c536b8905731cde3221a78d9fbc3 100755 (executable)
@@ -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 = '<input type="hidden" name="form_security_token" value="' . get_form_security_token("fbsave") . '">';
        
        $o .= '<h4>' . t('Facebook API Key') . '</h4>';
diff --git a/gravatar.tgz b/gravatar.tgz
new file mode 100644 (file)
index 0000000..38e942f
Binary files /dev/null and b/gravatar.tgz differ
diff --git a/gravatar/README.md b/gravatar/README.md
new file mode 100644 (file)
index 0000000..ff209b0
--- /dev/null
@@ -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 (file)
index 0000000..83144e4
--- /dev/null
@@ -0,0 +1,3 @@
+{{ inc field_select.tpl with $field=$default_avatar}}{{ endinc }}
+{{ inc field_select.tpl with $field=$rating }}{{ endinc }}
+<div class="submit"><input type="submit" value="$submit" /></div>
diff --git a/gravatar/gravatar.php b/gravatar/gravatar.php
new file mode 100644 (file)
index 0000000..b9435a3
--- /dev/null
@@ -0,0 +1,104 @@
+<?php
+/**
+ * Name: Gravatar Support
+ * Description: If there is no avatar image for a new user or contact this plugin will look for one at Gravatar.
+ * Version: 1.0
+ * Author: Klaus Weidenbach <http://friendica.dszdw.net/profile/klaus>
+ */
+
+/**
+ * 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 = '<input type="hidden" name="form_security_token" value="' .get_form_security_token("gravatarsave") .'">';
+       $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);
+}
+?>
index b2f8311998421c396f0cdeb3185dce9bb8c314dd..3e4ecd75b430a1926d3547728f019b70f397febb 100755 (executable)
Binary files a/impressum.tgz and b/impressum.tgz differ
index c7265d16482ec4e51aa00e9494d9c92073741260..29fced0a2dfdc6d21e0199391b5daf2713970d6a 100644 (file)
Binary files a/openstreetmap.tgz and b/openstreetmap.tgz differ
index febb641ea4d3d441b9d25776533d74896490b082..a1fc2ecd22ca28e2fbd9e0bcaaee44c4ab9e3e37 100755 (executable)
Binary files a/piwik.tgz and b/piwik.tgz differ
index e5e95bbe4ed0520bc277dcd410c05427c76b53db..066413debf3a08288ff69b600afb2da940aab3d6 100755 (executable)
@@ -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 (file)
index 0000000..1be40b9
Binary files /dev/null and b/planets.tgz differ
diff --git a/planets/planets.css b/planets/planets.css
new file mode 100755 (executable)
index 0000000..668b65b
--- /dev/null
@@ -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 (executable)
index 0000000..1c6ed43
--- /dev/null
@@ -0,0 +1,182 @@
+<?php
+/**
+ * Name: Random Planet, Empirial Version
+ * Description: Sample Friendica plugin/addon. Set a random planet from the Emprire when posting.
+ * Version: 1.0
+ * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
+ * Author: Darth Baldwin <darthvader@death.star>
+ * 
+ * 
+ * 
+ *
+ * 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'] .= '<link rel="stylesheet"  type="text/css" href="' . $a->get_baseurl() . '/addon/planets/planets.css' . '" media="all" />' . "\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 .= '<div class="settings-block">';
+       $s .= '<h3>' . t('Planets Settings') . '</h3>';
+       $s .= '<div id="planets-enable-wrapper">';
+       $s .= '<label id="planets-enable-label" for="planets-checkbox">' . t('Enable Planets Plugin') . '</label>';
+       $s .= '<input id="planets-checkbox" type="checkbox" name="planets" value="1" ' . $checked . '/>';
+       $s .= '</div><div class="clear"></div>';
+
+       /* provide a submit button */
+
+       $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="planets-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
+
+}
index 931781d060a9feb147a03a43f7a5659fd8e874e2..7ab5f0db9d1769808dd0747f587395e7a32f6b15 100755 (executable)
Binary files a/randplace.tgz and b/randplace.tgz differ
index df713766c8902f6970d93d34dd251cec4ee82fe1..b70c02d94ea731eddbab415b22536229a8c1b7ab 100755 (executable)
@@ -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',
index 016ad5212e616299e46e532b85a10db79717d2cb..394a99fda47e56a33721ca89057046d5b685d71a 100644 (file)
Binary files a/showmore.tgz and b/showmore.tgz differ
index 4e5bf8ceced0e059652236df9afe743b57828f4c..2b41f5a47aa3324b1eb4b5021aeebb0d560a64a5 100755 (executable)
Binary files a/statusnet.tgz and b/statusnet.tgz differ
diff --git a/testdrive.tgz b/testdrive.tgz
new file mode 100644 (file)
index 0000000..7d314ea
Binary files /dev/null and b/testdrive.tgz differ
diff --git a/testdrive/README.md b/testdrive/README.md
new file mode 100644 (file)
index 0000000..3d735de
--- /dev/null
@@ -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 (file)
index 0000000..b7c021a
--- /dev/null
@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * Name: testdrive
+ * Description: Sample Friendica plugin/addon for creating a test drive Friendica site with automatic account expiration.
+ * Version: 1.0
+ * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
+ */
+
+
+
+
+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]");
+    }
+}
index 54d6f8b577cafbc3b3a2d2092bacb783c05c476c..52a05cc6600b304661107df14cdf29825de91d5c 100755 (executable)
Binary files a/twitter.tgz and b/twitter.tgz differ