From bf09c24e1588ff986ef208d773bc9cddc7002342 Mon Sep 17 00:00:00 2001
From: tony baldwin <tony@baldwinsoftware.com>
Date: Tue, 10 Apr 2012 08:44:31 -0400
Subject: [PATCH] added Random Planets, Empirial Version Also, "blogger", but
 that is still in progress and untested.

---
 blogger/blogger.css |  16 ++++
 blogger/blogger.php | 200 ++++++++++++++++++++++++++++++++++++++++++++
 planets.tar.gz      | Bin 0 -> 10240 bytes
 planets/planets.css |  14 ++++
 planets/planets.php | 181 +++++++++++++++++++++++++++++++++++++++
 5 files changed, 411 insertions(+)
 create mode 100755 blogger/blogger.css
 create mode 100755 blogger/blogger.php
 create mode 100644 planets.tar.gz
 create mode 100755 planets/planets.css
 create mode 100755 planets/planets.php

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 @@
+<?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);
+
+	}
+}
+
diff --git a/planets.tar.gz b/planets.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..30f81dece54bf60586b90d7cc3038cbe47c44d0b
GIT binary patch
literal 10240
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
AzyJUM

literal 0
HcmV?d00001

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..62ba675b
--- /dev/null
+++ b/planets/planets.php
@@ -0,0 +1,181 @@
+<?php
+/**
+ * Name: Random place
+ * Description: Sample Friendica plugin/addon. Set a random place when posting.
+ * Version: 1.0
+ * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
+ * 
+ * 
+ * 
+ *
+ * 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>';
+
+}