]> git.mxchange.org Git - friendica-addons.git/commitdiff
Merge pull request #14 from fabrixxm/master
authorSimon <simon@kisikew.org>
Fri, 2 Mar 2012 10:38:34 +0000 (02:38 -0800)
committerSimon <simon@kisikew.org>
Fri, 2 Mar 2012 10:38:34 +0000 (02:38 -0800)
fix 'blockem'  to work with changed 'display_item' hook

39 files changed:
buildtgz
calc.tgz
communityhome.tgz
communityhome/twillingham/README [new file with mode: 0644]
communityhome/twillingham/communityhome.php [new file with mode: 0644]
facebook.tgz [changed mode: 0755->0644]
facebook/README
facebook/facebook.php
gnot.tgz [new file with mode: 0644]
gnot/gnot.css [new file with mode: 0755]
gnot/gnot.php [new file with mode: 0755]
js_upload.tgz
js_upload/js_upload.php
ljpost.tgz [new file with mode: 0644]
ljpost/ljpost.css [new file with mode: 0755]
ljpost/ljpost.php [new file with mode: 0755]
openstreetmap.tgz
openstreetmap/README [new file with mode: 0644]
openstreetmap/admin.tpl [new file with mode: 0644]
openstreetmap/openstreetmap.php
piwik.tgz
piwik/README
piwik/admin.tpl
piwik/piwik.php
qcomment.tgz [new file with mode: 0644]
qcomment/qcomment.css [new file with mode: 0755]
qcomment/qcomment.php [new file with mode: 0755]
showmore.tgz [new file with mode: 0644]
showmore/README [new file with mode: 0755]
showmore/showmore.css [new file with mode: 0755]
showmore/showmore.php [new file with mode: 0755]
statusnet.tgz
statusnet/statusnet.php
twitter.tgz
twitter/twitter.php
wppost.tgz
wppost/wppost.php
yourls.tgz
yourls/yourls.php

index 61dd5d71cd88d2b44f2b2483ca2769a4f5f88c1f..37c734f87564ffbaba04f6a0ca6f0f1afc469947 100755 (executable)
--- a/buildtgz
+++ b/buildtgz
@@ -1,4 +1,4 @@
-#!/bin/sh
+#!/bin/bash
 # Make doesn't handle subdirs very well 
 # without providing a Makefile in each one.
 # So we will just manually find any source
index f5d6870da96417394ff4a9ffac24d863e93dbc36..a849ef0e933c9dd0323634b3db5d0e64900c9b9b 100755 (executable)
Binary files a/calc.tgz and b/calc.tgz differ
index b08abd2ec236c20a20c24d7b8083cff317798e8c..33c6abc12fee0a7042e3aa38e0850d9ec3f55dd9 100755 (executable)
Binary files a/communityhome.tgz and b/communityhome.tgz differ
diff --git a/communityhome/twillingham/README b/communityhome/twillingham/README
new file mode 100644 (file)
index 0000000..bb57427
--- /dev/null
@@ -0,0 +1,7 @@
+Thomas Willingham
+
+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.
diff --git a/communityhome/twillingham/communityhome.php b/communityhome/twillingham/communityhome.php
new file mode 100644 (file)
index 0000000..102732a
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+/**
+ * Name: Community home
+ * Description: Show last community activity in homepage
+ * Version: 1.0
+ * Author: Fabio Comuni <http://kirgroup.com/profile/fabrixxm>
+ */
+
+
+require_once('mod/community.php');
+
+
+function communityhome_install() {
+       register_hook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home');
+       logger("installed communityhome");
+}
+
+function communityhome_uninstall() {
+       unregister_hook('home_content', 'addon/communityhome/communityhome.php', 'communityhome_home');
+       logger("removed communityhome");
+}
+
+function communityhome_home(&$a, &$o){
+       // custom css
+       $a->page['htmlhead'] .= '<link rel="stylesheet" type="text/css" href="'.$a->get_baseurl().'/addon/communityhome/communityhome.css" media="all" />';
+       
+       $aside = array(
+               '$tab_1' => t('Login'),
+               '$tab_2' => t('OpenID'),
+               '$noOid' => get_config('system','no_openid'),
+       );
+       
+       // login form
+       $aside['$login_title'] =  t('Login');
+       $aside['$login_form'] = login(($a->config['register_policy'] == REGISTER_CLOSED) ? false : true);
+       
+       // last 12 users
+       $aside['$lastusers_title'] = t('Latest users');
+       $aside['$lastusers_items'] = array();
+       $sql_extra = "";
+       $publish = (get_config('system','publish_all') ? '' : " AND `publish` = 1 " );
+       $order = " ORDER BY `register_date` DESC ";
+
+       $r = q("SELECT `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`
+                       FROM `profile` LEFT JOIN `user` ON `user`.`uid` = `profile`.`uid` 
+                       WHERE `is-default` = 1 $publish AND `user`.`blocked` = 0 $sql_extra $order LIMIT %d , %d ",
+               0,
+               12
+       );
+       $tpl = file_get_contents( dirname(__file__).'/directory_item.tpl');
+       if(count($r)) {
+               $photo = 'thumb';
+               foreach($r as $rr) {
+                       $profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
+                       $entry = replace_macros($tpl,array(
+                               '$id' => $rr['id'],
+                               '$profile-link' => $profile_link,
+                               '$photo' => $rr[$photo],
+                               '$alt-text' => $rr['name'],
+                       ));
+                       $aside['$lastusers_items'][] = $entry;
+               }
+       }
+       
+       // 12 most active users (by posts and contacts)
+       // this query don't work on some mysql versions
+       $r = q("SELECT `uni`.`contacts`,`uni`.`items`, `profile`.*, `profile`.`uid` AS `profile_uid`, `user`.`nickname`  FROM
+                       (SELECT COUNT(`id`) as `contacts`, `uid` FROM `contact` WHERE `self`=0 GROUP BY `uid`) AS `con`,
+                       (SELECT COUNT(`id`) as `items`, `uid` FROM `item` WHERE `item`.`changed` > DATE(NOW() - INTERVAL 1 MONTH) AND `item`.`wall` = 1 GROUP BY `uid`) AS `ite`,
+                       (
+                       SELECT `contacts`,`items`,`ite`.`uid` FROM `con` RIGHT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid` 
+                       UNION ALL 
+                       SELECT `contacts`,`items`,`con`.`uid` FROM `con` LEFT OUTER JOIN `ite` ON `con`.`uid`=`ite`.`uid`
+                       ) AS `uni`, `user`, `profile`
+                       WHERE `uni`.`uid`=`user`.`uid`
+                       AND `uni`.`uid`=`profile`.`uid` AND `profile`.`publish`=1
+                       GROUP BY `uid`
+                       ORDER BY `items` DESC,`contacts` DESC
+                       LIMIT 0,10");
+       if($r && count($r)) {
+               $aside['$activeusers_title']  = t('Most active users');
+               $aside['$activeusers_items']  = array();
+               
+               $photo = 'thumb';
+               foreach($r as $rr) {
+                       $profile_link = $a->get_baseurl() . '/profile/' . ((strlen($rr['nickname'])) ? $rr['nickname'] : $rr['profile_uid']);
+                       $entry = replace_macros($tpl,array(
+                               '$id' => $rr['id'],
+                               '$profile-link' => $profile_link,
+                               '$photo' => $rr[$photo],
+                               '$alt-text' => sprintf("%s (%s posts, %s contacts)",$rr['name'], ($rr['items']?$rr['items']:'0'), ($rr['contacts']?$rr['contacts']:'0'))
+                       ));
+                       $aside['$activeusers_items'][] = $entry;
+               }
+       }
+       
+       
+       
+       
+       $tpl = file_get_contents(dirname(__file__).'/communityhome.tpl');
+       $a->page['aside'] = replace_macros($tpl, $aside);
+       $o = '';
+       if(file_exists('home.html'))
+       
+               $o .= file_get_contents('home.html');
+       
+}
old mode 100755 (executable)
new mode 100644 (file)
index e049d2b..2cb406a
Binary files a/facebook.tgz and b/facebook.tgz differ
index ee7e489babff1b54996e489d7f4cd7e448b9d0b1..9e381e7dca9e151fefec783e31fa052895ce08ca 100755 (executable)
@@ -17,6 +17,8 @@ Installing the Friendica/Facebook connector
      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.
index f155d39728e6303e2859016ee4cff7196608eb28..6b6c7f8447ec8e3cfc4373b409c0629870f864ed 100755 (executable)
@@ -24,7 +24,8 @@
  *   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. Enable the facebook plugin by including it in .htconfig.php - e.g. 
+ * 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';
  * 3. Visit the Facebook Settings section of the "Settings->Plugin Settings" page.
  *    and click 'Install Facebook Connector'.
@@ -731,7 +732,7 @@ function facebook_post_hook(&$a,&$b) {
                                logger('facebook: postvars: ' . print_r($postvars,true));
 
                                // "test_mode" prevents anything from actually being posted.
-                               // Otherwise, let's do it. 
+                               // Otherwise, let's do it.
 
                                if(! get_config('facebook','test_mode')) {
                                        $x = post_url($url, $postvars);
@@ -953,10 +954,10 @@ function fb_consume_stream($uid,$j,$wall = false) {
 
                        if(! x($datarray,'contact-id')) {
                                logger('no contact: post ignored');
-                               continue; 
+                               continue;
                        }
 
-                       $datarray['verb'] = ACTIVITY_POST;                                              
+                       $datarray['verb'] = ACTIVITY_POST;
                        if($wall) {
                                $datarray['owner-name'] = $self[0]['name'];
                                $datarray['owner-link'] = $self[0]['url'];
diff --git a/gnot.tgz b/gnot.tgz
new file mode 100644 (file)
index 0000000..fbf7f26
Binary files /dev/null and b/gnot.tgz differ
diff --git a/gnot/gnot.css b/gnot/gnot.css
new file mode 100755 (executable)
index 0000000..ccafdaf
--- /dev/null
@@ -0,0 +1,16 @@
+
+#gnot-desc {
+       margin-bottom: 10px;
+}
+
+#gnot-label {
+       float: left;
+       width: 200px;
+       margin-bottom: 25px;
+}
+
+#gnot {
+       float: left;
+}
+
+
diff --git a/gnot/gnot.php b/gnot/gnot.php
new file mode 100755 (executable)
index 0000000..fd8fdfd
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+/**
+ * Name: Gnot
+ * Description: Thread email comment notifications on Gmail and anonymise them
+ * Version: 1.0
+ * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
+ * 
+ *
+ */
+
+
+function gnot_install() {
+
+       register_hook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings');
+       register_hook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post');
+       register_hook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail');
+
+       logger("installed gnot");
+}
+
+
+function gnot_uninstall() {
+
+       unregister_hook('plugin_settings', 'addon/gnot/gnot.php', 'gnot_settings');
+       unregister_hook('plugin_settings_post', 'addon/gnot/gnot.php', 'gnot_settings_post');
+       unregister_hook('enotify_mail', 'addon/gnot/gnot.php', 'gnot_enotify_mail');
+
+
+       logger("removed gnot");
+}
+
+
+
+/**
+ *
+ * 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 gnot_settings_post($a,$post) {
+       if(! local_user() || (! x($_POST,'gnot-submit')))
+               return;
+
+       set_pconfig(local_user(),'gnot','enable',intval($_POST['gnot']));
+       info( t('Gnot settings updated.') . EOL);
+}
+
+
+/**
+ *
+ * Called from the Plugin Setting form. 
+ * Add our own settings info to the page.
+ *
+ */
+
+
+
+function gnot_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/gnot/gnot.css' . '" media="all" />' . "\r\n";
+
+       /* Get the current state of our config variable */
+
+       $gnot = intval(get_pconfig(local_user(),'gnot','enable'));
+
+       $gnot_checked = (($gnot) ? ' checked="checked" ' : '' );
+       
+       /* Add some HTML to the existing form */
+
+       $s .= '<div class="settings-block">';
+       $s .= '<h3>' . t('Gnot Settings') . '</h3>';
+       $s .= '<div id="gnot-wrapper">';
+       $s .= '<div id="gnot-desc">' . t("Allows threading of email comment notifications on Gmail and anonymising the subject line.") . '</div>';
+       $s .= '<label id="gnot-label" for="gnot">' . t('Enable this plugin/addon?') . '</label>';
+       $s .= '<input id="gnot-input" type="checkbox" name="gnot" value="1"'.  $gnot_checked . '/>';
+       $s .= '</div><div class="clear"></div>';
+
+       /* provide a submit button */
+
+       $s .= '<div class="settings-submit-wrapper" ><input type="submit" name="gnot-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
+
+}
+
+
+function gnot_enotify_mail(&$a,&$b) {
+       if((! $b['uid']) || (! intval(get_pconfig($b['uid'], 'gnot','enable'))))
+               return;
+       if($b['type'] == NOTIFY_COMMENT)
+               $b['subject'] = sprintf( t('[Friendica:Notify] Comment to conversation #%d'), $b['parent']);
+}
+
index 1140117525937590c716211402ff9311de09dfc7..fe51b8aea9d2eed665568fdca904cbece546055c 100755 (executable)
Binary files a/js_upload.tgz and b/js_upload.tgz differ
index c529be36602de6f0821a8e443ac369288dc63f4e..3ba5f9c4dc74a850d5082565a4df5d09be979972 100755 (executable)
@@ -45,6 +45,8 @@ function js_upload_form(&$a,&$b) {
        $cancel = t('Cancel');
        $failed = t('Failed');
 
+       $maximagesize = intval(get_config('system','maximagesize'));
+
        $b['addon_text'] .= <<< EOT
        
  <div id="file-uploader-demo1">                
@@ -91,6 +93,7 @@ function createUploader() {
             '</li>',        
 
                debug: true,
+               sizeLimit: $maximagesize,
                onSubmit: function(id,filename) {
                        if (typeof acl!="undefined"){
                                uploader.setParams( {
diff --git a/ljpost.tgz b/ljpost.tgz
new file mode 100644 (file)
index 0000000..f14b33d
Binary files /dev/null and b/ljpost.tgz differ
diff --git a/ljpost/ljpost.css b/ljpost/ljpost.css
new file mode 100755 (executable)
index 0000000..e0494c5
--- /dev/null
@@ -0,0 +1,16 @@
+
+#ljpost-enable-label, #ljpost-username-label, #ljpost-password-label, #ljpost-bydefault-label {
+       float: left;
+       width: 200px;
+       margin-top: 10px;
+}
+
+#ljpost-checkbox, #ljpost-username, #ljpost-password, #ljpost-bydefault {
+       float: left;
+       margin-top: 10px;
+}
+
+#ljpost-submit {
+       margin-top: 15px;
+}
+
diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php
new file mode 100755 (executable)
index 0000000..c1b9b97
--- /dev/null
@@ -0,0 +1,222 @@
+<?php
+
+/**
+ * Name: LiveJournal Post Connector
+ * Description: Post to LiveJournal
+ * Version: 1.0
+ * Author: Tony Baldwin <http://theshi.re/profile/tony>
+ * Author: Michael Johnston
+ */
+
+function ljpost_install() {
+    register_hook('post_local',           'addon/ljpost/ljpost.php', 'ljpost_post_local');
+    register_hook('notifier_normal',      'addon/ljpost/ljpost.php', 'ljpost_send');
+    register_hook('jot_networks',         'addon/ljpost/ljpost.php', 'ljpost_jot_nets');
+    register_hook('connector_settings',      'addon/ljpost/ljpost.php', 'ljpost_settings');
+    register_hook('connector_settings_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post');
+
+}
+function ljpost_uninstall() {
+    unregister_hook('post_local',       'addon/ljpost/ljpost.php', 'ljpost_post_local');
+    unregister_hook('notifier_normal',  'addon/ljpost/ljpost.php', 'ljpost_send');
+    unregister_hook('jot_networks',     'addon/ljpost/ljpost.php', 'ljpost_jot_nets');
+    unregister_hook('connector_settings',      'addon/ljpost/ljpost.php', 'ljpost_settings');
+    unregister_hook('connector_settings_post', 'addon/ljpost/ljpost.php', 'ljpost_settings_post');
+
+}
+
+
+function ljpost_jot_nets(&$a,&$b) {
+    if(! local_user())
+        return;
+
+    $lj_post = get_pconfig(local_user(),'ljpost','post');
+    if(intval($lj_post) == 1) {
+        $lj_defpost = get_pconfig(local_user(),'ljpost','post_by_default');
+        $selected = ((intval($lj_defpost) == 1) ? ' checked="checked" ' : '');
+        $b .= '<div class="profile-jot-net"><input type="checkbox" name="ljpost_enable" ' . $selected . ' value="1" /> '
+            . t('Post to LiveJournal') . '</div>';
+    }
+}
+
+
+function ljpost_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/ljpost/ljpost.css' . '" media="all" />' . "\r\n";
+
+    /* Get the current state of our config variables */
+
+    $enabled = get_pconfig(local_user(),'ljpost','post');
+
+    $checked = (($enabled) ? ' checked="checked" ' : '');
+
+    $def_enabled = get_pconfig(local_user(),'ljpost','post_by_default');
+
+    $def_checked = (($def_enabled) ? ' checked="checked" ' : '');
+
+       $lj_username = get_pconfig(local_user(), 'ljpost', 'lj_username');
+       $lj_password = get_pconfig(local_user(), 'ljpost', 'lj_password');
+
+
+    /* Add some HTML to the existing form */
+
+    $s .= '<div class="settings-block">';
+    $s .= '<h3>' . t('LiveJournal Post Settings') . '</h3>';
+    $s .= '<div id="ljpost-enable-wrapper">';
+    $s .= '<label id="ljpost-enable-label" for="ljpost-checkbox">' . t('Enable LiveJournal Post Plugin') . '</label>';
+    $s .= '<input id="ljpost-checkbox" type="checkbox" name="ljpost" value="1" ' . $checked . '/>';
+    $s .= '</div><div class="clear"></div>';
+
+    $s .= '<div id="ljpost-username-wrapper">';
+    $s .= '<label id="ljpost-username-label" for="ljpost-username">' . t('LiveJournal username') . '</label>';
+    $s .= '<input id="ljpost-username" type="text" name="lj_username" value="' . $lj_username . '" />';
+    $s .= '</div><div class="clear"></div>';
+
+    $s .= '<div id="ljpost-password-wrapper">';
+    $s .= '<label id="ljpost-password-label" for="ljpost-password">' . t('LiveJournal password') . '</label>';
+    $s .= '<input id="ljpost-password" type="password" name="lj_password" value="' . $lj_password . '" />';
+    $s .= '</div><div class="clear"></div>';
+
+    $s .= '<div id="ljpost-bydefault-wrapper">';
+    $s .= '<label id="ljpost-bydefault-label" for="ljpost-bydefault">' . t('Post to LiveJournal by default') . '</label>';
+    $s .= '<input id="ljpost-bydefault" type="checkbox" name="lj_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="ljpost-submit" name="ljpost-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';
+
+}
+
+
+function ljpost_settings_post(&$a,&$b) {
+
+       if(x($_POST,'ljpost-submit')) {
+
+               set_pconfig(local_user(),'ljpost','post',intval($_POST['ljpost']));
+               set_pconfig(local_user(),'ljpost','post_by_default',intval($_POST['lj_bydefault']));
+               set_pconfig(local_user(),'ljpost','lj_username',trim($_POST['lj_username']));
+               set_pconfig(local_user(),'ljpost','lj_password',trim($_POST['lj_password']));
+
+       }
+
+}
+
+function ljpost_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;
+
+    $lj_post   = intval(get_pconfig(local_user(),'ljpost','post'));
+
+       $lj_enable = (($lj_post && x($_REQUEST,'ljpost_enable')) ? intval($_REQUEST['ljpost_enable']) : 0);
+
+       if($_REQUEST['api_source'] && intval(get_pconfig(local_user(),'ljpost','post_by_default')))
+               $lj_enable = 1;
+
+    if(! $lj_enable)
+       return;
+
+    if(strlen($b['postopts']))
+       $b['postopts'] .= ',';
+     $b['postopts'] .= 'ljpost';
+}
+
+
+
+
+function ljpost_send(&$a,&$b) {
+
+    if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited']))
+        return;
+
+    if(! strstr($b['postopts'],'ljpost'))
+        return;
+
+    if($b['parent'] != $b['id'])
+        return;
+
+       // LiveJournal post in the LJ user's timezone. 
+       // Hopefully the person's Friendica account
+       // will be set to the same thing.
+
+       $tz = 'UTC';
+
+       $x = q("select timezone from user where uid = %d limit 1",
+               intval($b['uid'])
+       );
+       if($x && strlen($x[0]['timezone']))
+               $tz = $x[0]['timezone'];        
+
+       $lj_username = xmlify(get_pconfig($b['uid'],'ljpost','lj_username'));
+       $lj_password = xmlify(get_pconfig($b['uid'],'ljpost','lj_password'));
+       $lj_journal = xmlify(get_pconfig($b['uid'],'ljpost','lj_journal'));
+//     if(! $lj_journal)
+//             $lj_journal = $lj_username;
+
+       $lj_blog = xmlify(get_pconfig($b['uid'],'ljpost','lj_blog'));
+       if(! strlen($lj_blog))
+               $lj_blog = xmlify('http://www.livejournal.com/interface/xmlrpc');
+
+       if($lj_username && $lj_password && $lj_blog) {
+
+               require_once('include/bbcode.php');
+               require_once('include/datetime.php');
+
+               $title = xmlify($b['title']);
+               $post = bbcode($b['body']);
+               $post = xmlify($post);
+
+               $date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s');
+               $year = intval(substr($date,0,4));
+               $mon  = intval(substr($date,5,2));
+               $day  = intval(substr($date,8,2));
+               $hour = intval(substr($date,11,2));
+               $min  = intval(substr($date,14,2));
+
+               $xml = <<< EOT
+<?xml version="1.0" encoding="utf-8"?>
+<methodCall>
+  <methodName>LJ.XMLRPC.postevent</methodName>
+  <params>
+    <param><value>
+        <struct>
+        <member><name>username</name><value><string>$lj_username</string></value></member>
+        <member><name>password</name><value><string>$lj_password</string></value></member>
+        <member><name>event</name><value><string>$post</string></value></member>
+        <member><name>subject</name><value><string>$title</string></value></member>
+        <member><name>lineendings</name><value><string>unix</string></value></member>
+        <member><name>year</name><value><int>$year</int></value></member>
+        <member><name>mon</name><value><int>$mon</int></value></member>
+        <member><name>day</name><value><int>$day</int></value></member>
+        <member><name>hour</name><value><int>$hour</int></value></member>
+        <member><name>min</name><value><int>$min</int></value></member>
+        </struct>
+    </value></param>
+  </params>
+</methodCall>
+
+EOT;
+
+               logger('ljpost: data: ' . $xml, LOGGER_DATA);
+
+               if($lj_blog !== 'test')
+                       $x = post_url($lj_blog,$xml);
+               logger('posted to livejournal: ' . ($x) ? $x : '', LOGGER_DEBUG);
+
+       }
+}
+
index 93dc874b6296c6227aacee15444b9b8f959ca357..e54b0c787525150e39ab29c1eb5c072c2ce2f4ec 100644 (file)
Binary files a/openstreetmap.tgz and b/openstreetmap.tgz differ
diff --git a/openstreetmap/README b/openstreetmap/README
new file mode 100644 (file)
index 0000000..41fc842
--- /dev/null
@@ -0,0 +1,30 @@
+ ____ OpenStreetMap Plugin ____
+by Mike Macgirvin
+   Klaus Weidenbach
+
+This addon allows you to use OpenStreetMap for displaying locations.
+
+___ Requirements ___
+
+To use this plugin you need a tile Server that provides the maps.
+OpenStreetMap data is free for everyone to use. Their tile servers are not.
+Please take a look at their "Tile Usage Policy":
+http://wiki.openstreetmap.org/wiki/Tile_usage_policy
+You can run your own tile server or choose one from their list of public
+tile servers: http://wiki.openstreetmap.org/wiki/TMS
+Support the OpenStreetMap community and share the load.
+
+___ 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.
diff --git a/openstreetmap/admin.tpl b/openstreetmap/admin.tpl
new file mode 100644 (file)
index 0000000..75db9cd
--- /dev/null
@@ -0,0 +1,3 @@
+{{ inc field_input.tpl with $field=$tmsserver }}{{ endinc }}
+{{ inc field_input.tpl with $field=$zoom }}{{ endinc }}
+<div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
index ef5d6befbd27551a500a108b267a4b4a1d047499..415e448d7d2ed7893863ddee613b88fbbb730b4e 100755 (executable)
@@ -1,45 +1,49 @@
 <?php
 /**
- * Name: Open Street Map
- * Description: Use openstreetmap.org for displaying locations.
- * Version: 1.0
+ * Name: OpenStreetMap
+ * Description: Use OpenStreetMap for displaying locations.
+ * Version: 1.1
  * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
- * 
+ * Author: Klaus Weidenbach
  *
  */
 
-
 function openstreetmap_install() {
-
        register_hook('render_location', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_location');
 
        logger("installed openstreetmap");
 }
 
-
 function openstreetmap_uninstall() {
-
        unregister_hook('render_location', 'addon/openstreetmap/openstreetmap.php', 'openstreetmap_location');
 
        logger("removed openstreetmap");
 }
 
 
-
 function openstreetmap_location($a, &$item) {
-
        if(! (strlen($item['location']) || strlen($item['coord'])))
                return; 
 
+       /*
+        * Get the configuration variables from the .htconfig file.
+        */
+       $tmsserver = get_config('openstreetmap','tmsserver');
+       if(! $tmsserver)
+               $tmsserver = 'http://openstreetmap.org';
+       $zoom = get_config('openstreetmap','zoom');
+       if(! $zoom)
+               $zoom = 17;
+
        $location = '';
        $coord = '';
 
-       $location = (($item['location']) ? '<a target="map" title="' . $item['location'] . '" href="http://www.openstreetmap.org/?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
+       $location = (($item['location']) ? '<a target="map" title="' . $item['location'] . '" href="'.$tmsserver.'?q=' . urlencode($item['location']) . '">' . $item['location'] . '</a>' : '');
 
        if($item['coord']) {
                $coords = explode(' ', $item['coord']);
                if(count($coords) > 1) {
-                       $coord = '<a target="map" title="' . $item['coord'] . '" href="http://www.openstreetmap.org/?lat=' . urlencode($coords[0]) . '&lon=' . urlencode($coords[1]) . '&zoom=18">' . $item['coord'] . '</a>' ;
+                       $coord = '<a target="map" title="' . $item['coord'] . '" href="'.$tmsserver.'?lat=' . urlencode($coords[0]) . '&lon=' . urlencode($coords[1]) . '&zoom='.$zoom.'">' . $item['coord'] . '</a>' ;
                }
        }
        if(strlen($coord)) {
@@ -52,3 +56,26 @@ function openstreetmap_location($a, &$item) {
        return;
 }
 
+
+function openstreetmap_plugin_admin (&$a, &$o) {
+       $t = file_get_contents( dirname(__file__)."/admin.tpl");
+       $tmsserver = get_config('openstreetmap','tmsserver');
+       if(! $tmsserver)
+               $tmsserver = 'http://openstreetmap.org';
+       $zoom = get_config('openstreetmap','zoom');
+       if(! $zoom)
+               $zoom = 17;
+
+       $o = replace_macros( $t, array(
+               '$submit' => t('Submit'),
+               '$tmsserver' => array('tmsserver', t('Tile Server URL'), $tmsserver, t('A list of <a href="http://wiki.openstreetmap.org/wiki/TMS" target="_blank">public tile servers</a>')),
+               '$zoom' => array('zoom', t('Default zoom'), $zoom, t('The default zoom level. (1:world, 18:highest)')),
+       ));
+}
+function openstreetmap_plugin_admin_post (&$a) {
+       $url = ((x($_POST, 'tmsserver')) ? notags(trim($_POST['tmsserver'])) : '');
+       $zoom = ((x($_POST, 'zoom')) ? intval(trim($_POST['zoom'])) : '17');
+       set_config('openstreetmap', 'tmsserver', $url);
+       set_config('openstreetmap', 'zoom', $zoom);
+       info( t('Settings updated.'). EOL);
+}
index 54752c6e19e4fde62ba42c5c8daef5d0e35e2d88..65c92244a6d4f3f3dcf323f94d30e3c5bc523613 100755 (executable)
Binary files a/piwik.tgz and b/piwik.tgz differ
index d5060d0b0e7d73171d8154fb5153e37c90cfd504..e276ccd4477bc4cd2629adb44bef507b1194712a 100755 (executable)
@@ -1,36 +1,40 @@
-____ Piwik Plugin ____
-by Tobias Diekershoff
+## Piwik Plugin ##
+
+by Tobias Diekershoff 
    tobias.diekershoff(at)gmx.net
 
 This addon allows you to embed the code necessary for the FLOSS webanalytics
-tool piwik into the Friendica pages.
+tool Piwik into the Friendica pages.
 
-Online version of this Document: http://ur1.ca/35m2x
+[Online version of this Document](http://ur1.ca/35m2x)
 
-___ Requirements ___
+### Requirements ###
 
-To use this plugin you need a "piwik":http://piwik.org installation.
+To use this plugin you need a [piwik](http://piwik.org/) installation.
 
-___ Where to find ___
+### Where to find ###
 
-In the Friendica git repository @/addon/piwik/piwik.php@ and a CSS file for
+In the Friendica git repository `/addon/piwik/piwik.php` and a CSS file for
 styling the opt-out notice.
 
-___ Configuration ___
+### Configuration ###
+
+Open the .htconfig.php file and add "piwik" to the list of activated addons.
 
-Open the .htconfig.php file and add "piwik" to the list of activated addons. 
     $a->config['system']['addon'] = "piwik, ..."
-You have to add 3 more configuration variables for the addon:
 
-$a->config['piwik']['baseurl'] = 'example.com/piwik/';
-$a->config['piwik']['sideid'] = '1';
-$a->config['piwik']['optout'] = true;
+You have to add 4 more configuration variables for the addon:
+
+    $a->config['piwik']['baseurl'] = 'example.com/piwik/';
+    $a->config['piwik']['sideid'] = '1';
+    $a->config['piwik']['optout'] = true;
+    $a->config['piwik']['async'] = false;
 
-The *baseurl* points to your piwik installation. Use the absolute path,
+The *baseurl* points to your Piwik installation. Use the absolute path,
 remember trailing slashes but ignore the protocol (http/s) part of the URL.
 Change the *sideid* parameter to whatever ID you want to use for tracking your
 Friendica installation. The *optout* parameter (true|false) defines whether or
-not a short notice about the utilization of piwik will be displayed on every
+not a short notice about the utilization of Piwik will be displayed on every
 page of your Friendica site (at the bottom of the page with some spacing to the
 other content). Part of the note is a link that allows the visitor to set an
 _opt-out_ cookie which will prevent visits from that user be tracked by piwik.
@@ -41,3 +45,5 @@ Currently the optional notice states the following:
     that your visits are logged this way you can set a cookie to prevent Piwik
     from tracking further visits of the site (opt-out).
 
+The *async* parameter (true|false) defines whether or not to use asynchronous
+tracking so pages load (or appear to load) faster.
index 0edd062104bca003f54f0f8264df8e6ec9e4c637..e57758a9daecb28c929f4fc9b396332e5d36cb27 100755 (executable)
@@ -1,4 +1,5 @@
 {{ inc field_input.tpl with $field=$baseurl }}{{ endinc }}
 {{ inc field_input.tpl with $field=$siteid }}{{ endinc }}
 {{ inc field_checkbox.tpl with $field=$optout }}{{ endinc }}
+{{ inc field_checkbox.tpl with $field=$async }}{{ endinc }}
 <div class="submit"><input type="submit" name="page_site" value="$submit" /></div>
index 5a46cdb3898e3b331458e7b2c0485687f66177eb..dbb1f45a257ea99a672d4aef7eaeff9914decfd4 100755 (executable)
@@ -2,24 +2,25 @@
 /**
  * Name: Piwik Analytics
  * Description: Piwik Analytics Plugin for Friendica
- * Version: 1.0
+ * Version: 1.1
  * Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
+ * Author: Klaus Weidenbach
  */
 
 /*   Piwik Analytics Plugin for Friendica
  *
  *   Author: Tobias Diekershoff
  *           tobias.diekershoff@gmx.net
  *
-*   License: 3-clause BSD license
+ *   License: 3-clause BSD license
  *
  *   Configuration:
- *     Add the following two lines to your .htconfig.php file:
+ *     Add the following lines to your .htconfig.php file:
  *
  *     $a->config['piwik']['baseurl'] = 'www.example.com/piwik/';
  *     $a->config['piwik']['siteid'] = '1';
  *     $a->config['piwik']['optout'] = true;  // set to false to disable
+ *     $a->config['piwik']['async'] = false;  // set to true to enable
  *
  *     Change the siteid to the ID that the Piwik tracker for your Friendica
  *     installation has. Alter the baseurl to fit your needs, don't care
 function piwik_install() {
        register_hook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics');
 
-        logger("installed piwik plugin");
+       logger("installed piwik plugin");
 }
 
 function piwik_uninstall() {
        unregister_hook('page_end', 'addon/piwik/piwik.php', 'piwik_analytics');
 
-        logger("uninstalled piwik plugin");
+       logger("uninstalled piwik plugin");
 }
 
 function piwik_analytics($a,&$b) {
@@ -56,40 +57,50 @@ function piwik_analytics($a,&$b) {
        $baseurl = get_config('piwik','baseurl');
        $siteid  = get_config('piwik','siteid');
        $optout  = get_config('piwik','optout');
+       $async   = get_config('piwik','async');
 
        /*
-        *   Add the Piwik code for the site.
+        *   Add the Piwik tracking code for the site.
+        *   If async is set to true use asynchronous tracking
         */
-       $b .= "<div id='piwik-code-block'> <!-- Piwik -->\r\n <script type=\"text/javascript\">\r\n var pkBaseURL = ((\"https:\" == document.location.protocol) ? \"https://".$baseurl."\" : \"http://".$baseurl."\");\r\n document.write(unescape(\"%3Cscript src='\" + pkBaseURL + \"piwik.js' type='text/javascript'%3E%3C/script%3E\"));\r\n </script>\r\n<script type=\"text/javascript\">\r\n try {\r\n var piwikTracker = Piwik.getTracker(pkBaseURL + \"piwik.php\", ".$siteid.");\r\n piwikTracker.trackPageView();\r\n piwikTracker.enableLinkTracking();\r\n }\r\n catch( err ) {}\r\n </script>\r\n<noscript><p><img src=\"http://".$baseurl."/piwik.php?idsite=".$siteid."\" style=\"border:0\" alt=\"\" /></p></noscript>\r\n <!-- End Piwik Tracking Tag --> </div>";
+       if ($async) {
+         $a->page['htmlhead'] .= "<!-- Piwik --> <script type=\"text/javascript\">\r\nvar _paq = _paq || [];\r\n(function(){ var u=((\"https:\" == document.location.protocol) ? \"https://".$baseurl."\" : \"http://".$baseurl."\");\r\n_paq.push(['setSiteId', ".$siteid."]);\r\n_paq.push(['setTrackerUrl', u+'piwik.php']);\r\n_paq.push(['trackPageView']);\r\n_paq.push(['enableLinkTracking']);\r\nvar d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0]; g.type='text/javascript';\r\ng.defer=true; g.async=true; g.src=u+'piwik.js';\r\ns.parentNode.insertBefore(g,s); })();\r\n </script>\r\n<!-- End Piwik Code -->\r\n";
+         $b .= "<div id='piwik-code-block'> <!-- Piwik -->\r\n<noscript><p><img src=\"http://".$baseurl."piwik.php?idsite=".$siteid."\" style=\"border:0\" alt=\"\" /></p></noscript>\r\n <!-- End Piwik Tracking Tag --> </div>";
+       } else {
+               $b .= "<div id='piwik-code-block'> <!-- Piwik -->\r\n <script type=\"text/javascript\">\r\n var pkBaseURL = ((\"https:\" == document.location.protocol) ? \"https://".$baseurl."\" : \"http://".$baseurl."\");\r\n document.write(unescape(\"%3Cscript src='\" + pkBaseURL + \"piwik.js' type='text/javascript'%3E%3C/script%3E\"));\r\n </script>\r\n<script type=\"text/javascript\">\r\n try {\r\n var piwikTracker = Piwik.getTracker(pkBaseURL + \"piwik.php\", ".$siteid.");\r\n piwikTracker.trackPageView();\r\n piwikTracker.enableLinkTracking();\r\n }\r\n catch( err ) {}\r\n </script>\r\n<noscript><p><img src=\"http://".$baseurl."piwik.php?idsite=".$siteid."\" style=\"border:0\" alt=\"\" /></p></noscript>\r\n <!-- End Piwik Tracking Tag --> </div>";
+       }
+
        /*
         *   If the optout variable is set to true then display the notice
         *   otherwise just include the above code into the page.
         */
        if ($optout) {
-            $b .= "<div id='piwik-optout-link'>";
-            $b .= t("This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool.");
-            $b .= " ";
-            $the_url =  "http://".$baseurl ."index.php?module=CoreAdminHome&action=optOut";
-            $b .= sprintf(t("If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."), $the_url);
-            $b .= "</div>";
+               $b .= "<div id='piwik-optout-link'>";
+               $b .= t("This website is tracked using the <a href='http://www.piwik.org'>Piwik</a> analytics tool.");
+               $b .= " ";
+               $the_url =  "http://".$baseurl ."index.php?module=CoreAdminHome&action=optOut";
+               $b .= sprintf(t("If you do not want that your visits are logged this way you <a href='%s'>can set a cookie to prevent Piwik from tracking further visits of the site</a> (opt-out)."), $the_url);
+               $b .= "</div>";
        }
-
 }
 function piwik_plugin_admin (&$a, &$o) {
-    $t = file_get_contents( dirname(__file__)."/admin.tpl");
-    $o = replace_macros( $t, array(
-            '$submit' => t('Submit'),
-            '$baseurl' => array('baseurl', t('Piwik Base URL'), get_config('piwik','baseurl' ), ''),
-            '$siteid' => array('siteid', t('Site ID'), get_config('piwik','siteid' ), ''),
-            '$optout' => array('optout', t('Show opt-out cookie link?'), get_config('piwik','optout' ), ''),
-        ));
+       $t = file_get_contents( dirname(__file__)."/admin.tpl");
+       $o = replace_macros( $t, array(
+               '$submit' => t('Submit'),
+               '$baseurl' => array('baseurl', t('Piwik Base URL'), get_config('piwik','baseurl' ), t('Absolute path to your Piwik installation. (without protocol (http/s), with trailing slash)')),
+               '$siteid' => array('siteid', t('Site ID'), get_config('piwik','siteid' ), ''),
+               '$optout' => array('optout', t('Show opt-out cookie link?'), get_config('piwik','optout' ), ''),
+               '$async' => array('async', t('Asynchronous tracking'), get_config('piwik','async' ), ''),
+       ));
 }
 function piwik_plugin_admin_post (&$a) {
-    $url = ((x($_POST, 'baseurl')) ? notags(trim($_POST['baseurl'])) : '');
-    $id = ((x($_POST, 'siteid')) ? trim($_POST['siteid']) : '');
-    $optout = ((x($_POST, 'optout')) ? trim($_POST['optout']) : '');
-    set_config('piwik', 'baseurl', $url);
-    set_config('piwik', 'siteid', $id);
-    set_config('piwik', 'optout', $optout);
-    info( t('Settings updated.'). EOL);
+       $url = ((x($_POST, 'baseurl')) ? notags(trim($_POST['baseurl'])) : '');
+       $id = ((x($_POST, 'siteid')) ? trim($_POST['siteid']) : '');
+       $optout = ((x($_POST, 'optout')) ? trim($_POST['optout']) : '');
+       $async = ((x($_POST, 'async')) ? trim($_POST['async']) : '');
+       set_config('piwik', 'baseurl', $url);
+       set_config('piwik', 'siteid', $id);
+       set_config('piwik', 'optout', $optout);
+       set_config('piwik', 'async', $async);
+       info( t('Settings updated.'). EOL);
 }
diff --git a/qcomment.tgz b/qcomment.tgz
new file mode 100644 (file)
index 0000000..1ab55a4
Binary files /dev/null and b/qcomment.tgz differ
diff --git a/qcomment/qcomment.css b/qcomment/qcomment.css
new file mode 100755 (executable)
index 0000000..3e5513b
--- /dev/null
@@ -0,0 +1,19 @@
+
+#qcomment-label {
+       float: left;
+       width: 300px;
+       margin-top: 10px;
+}
+
+#qcomment-words {
+       float: left;
+       margin-top: 10px;
+       width: 100px;
+       height: 150px;
+
+}
+
+#qcomment-submit {
+       margin-top: 15px;
+}
+
diff --git a/qcomment/qcomment.php b/qcomment/qcomment.php
new file mode 100755 (executable)
index 0000000..6b37257
--- /dev/null
@@ -0,0 +1,78 @@
+<?php
+
+
+/**
+ * Name: Quick Comment
+ * Description: Two click comments
+ * Version: 1.0
+ * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
+ * 
+ * Provides a set of text "snippets" which can be inserted into a comment window by clicking on them.
+ * First enable the addon in the system admin panel. 
+ * Then each person can tailor their choice of words in Settings->Plugin Settings in the Qcomment 
+ * pane. Initially no qcomments are provided, but on viewing the settings page, a default set of
+ * of words is suggested. These can be accepted (click Submit) or edited first. Each text line represents 
+ * a different qcomment. 
+ * Many themes will hide the qcomments above or immediately adjacent to the comment input box until
+ * you wish to use them. On some themes they may be visible.
+ * Wave the mouse around near the comment input box and the qcomments will show up. Click on any of 
+ * them to open the comment window fully and insert the qcomment. Then "Submit" will submit it.
+ *
+ */
+
+function qcomment_install() {
+       register_hook('plugin_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings');
+       register_hook('plugin_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post');
+
+}
+
+
+function qcomment_uninstall() {
+       unregister_hook('plugin_settings', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings');
+       unregister_hook('plugin_settings_post', 'addon/qcomment/qcomment.php', 'qcomment_addon_settings_post');
+
+}
+
+
+
+
+
+function qcomment_addon_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/qcomment/qcomment.css' . '" media="all" />' . "\r\n";
+
+       $words = get_pconfig(local_user(),'qcomment','words');
+       if($words === false)
+               $words = t(':-)') . "\n" . t(':-(') . "\n" .  t('lol');
+
+    $s .= '<div class="settings-block">';
+    $s .= '<h3>' . t('Quick Comment Settings') . '</h3>';
+    $s .= '<div id="qcomment-wrapper">';
+       $s .= '<div id="qcomment-desc">' . t("Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.") . '</div>';
+    $s .= '<label id="qcomment-label" for="qcomment-words">' . t('Enter quick comments, one per line') . ' </label>';
+    $s .= '<textarea id="qcomment-words" type="text" name="qcomment-words" >' . htmlspecialchars(unxmlify($words)) . '</textarea>';
+    $s .= '</div><div class="clear"></div>';
+
+    $s .= '<div class="settings-submit-wrapper" ><input type="submit" id="qcomment-submit" name="qcomment-submit" class="settings-submit" value="' . t('Submit') . '" /></div>';
+       $s .= '</div>';
+
+       return;
+
+}
+
+function qcomment_addon_settings_post(&$a,&$b) {
+
+       if(! local_user())
+               return;
+
+       if($_POST['qcomment-submit']) {
+               set_pconfig(local_user(),'qcomment','words',xmlify($_POST['qcomment-words']));
+               info( t('Quick Comment settings saved.') . EOL);
+       }
+}
+
diff --git a/showmore.tgz b/showmore.tgz
new file mode 100644 (file)
index 0000000..ef09585
Binary files /dev/null and b/showmore.tgz differ
diff --git a/showmore/README b/showmore/README
new file mode 100755 (executable)
index 0000000..8ee882e
--- /dev/null
@@ -0,0 +1,3 @@
+Show more
+
+Shortens messages and offers a link to show more.
diff --git a/showmore/showmore.css b/showmore/showmore.css
new file mode 100755 (executable)
index 0000000..710c1f3
--- /dev/null
@@ -0,0 +1,19 @@
+
+#showmore-label, #showmore-enable-label {
+       float: left;
+       width: 300px;
+       margin-top: 10px;
+}
+
+#showmore-words, #showmore-enable {
+       float: left;
+       margin-top: 10px;
+}
+
+#showmore-submit {
+       margin-top: 15px;
+}
+
+.showmore-desc {
+       margin-top: 10px;
+}
diff --git a/showmore/showmore.php b/showmore/showmore.php
new file mode 100755 (executable)
index 0000000..7842a58
--- /dev/null
@@ -0,0 +1,121 @@
+<?php
+/**
+ * Name: Show More
+ * Description: Collapse posts
+ * Version: 1.0
+ * Author: Michael Vogel <ike@piratenpartei.de>
+ *         based upon NSFW from Mike Macgirvin <http://macgirvin.com/profile/mike>
+ *
+ */
+
+function showmore_install() {
+       register_hook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body');
+       register_hook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings');
+       register_hook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post');
+}
+
+function showmore_uninstall() {
+       unregister_hook('prepare_body', 'addon/showmore/showmore.php', 'showmore_prepare_body');
+       unregister_hook('plugin_settings', 'addon/showmore/showmore.php', 'showmore_addon_settings');
+       unregister_hook('plugin_settings_post', 'addon/showmore/showmore.php', 'showmore_addon_settings_post');
+}
+
+function showmore_addon_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/showmore/showmore.css'.'" media="all"/>'."\r\n";
+
+       $enable_checked = (intval(get_pconfig(local_user(),'showmore','disable')) ? '' : ' checked="checked"');
+       $chars = get_pconfig(local_user(),'showmore','chars');
+       if(!$chars)
+               $chars = '1100';
+
+       $s .= '<div class="settings-block">';
+       $s .= '<h3>' . t('"Show more" Settings').'</h3>';
+       $s .= '<div id="showmore-wrapper">';
+
+       $s .= '<label id="showmore-enable-label" for="showmore-enable">'.t('Enable Show More').'</label>';
+       $s .= '<input id="showmore-enable" type="checkbox" name="showmore-enable" value="1"'.$enable_checked.' />';
+       $s .= '<div class="clear"></div>';
+       $s .= '<label id="showmore-label" for="showmore-chars">'.t('Cutting posts after how much characters').' </label>';
+       $s .= '<input id="showmore-words" type="text" name="showmore-chars" value="'.$chars.'" />';
+       $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>';
+
+       return;
+}
+
+function showmore_addon_settings_post(&$a,&$b) {
+
+       if(! local_user())
+               return;
+
+       if($_POST['showmore-submit']) {
+               set_pconfig(local_user(),'showmore','chars',trim($_POST['showmore-chars']));
+               $enable = ((x($_POST,'showmore-enable')) ? intval($_POST['showmore-enable']) : 0);
+               $disable = 1-$enable;
+               set_pconfig(local_user(),'showmore','disable', $disable);
+               info( t('Show More Settings saved.') . EOL);
+       }
+}
+
+function showmore_prepare_body(&$a,&$b) {
+
+       $words = null;
+       if(get_pconfig(local_user(),'showmore','disable'))
+               return;
+
+       $chars = (int)get_pconfig(local_user(),'showmore','chars');
+       if(!$chars)
+               $chars = 1100;
+
+       if (strlen(strip_tags(trim($b['html']))) > $chars) {
+               $found = true;
+               $shortened = trim(showmore_cutitem($b['html'], $chars))."...";
+       }
+
+       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>'.
+                               '<div id="showmore-'.$rnd.'" style="display: none;">'.$b['html'].'</div>';
+       }
+}
+
+function showmore_cutitem($text, $limit) {
+       $text = trim($text);
+
+       $text = mb_convert_encoding($text, 'HTML-ENTITIES', "UTF-8");
+
+       $text = substr($text, 0, $limit);
+
+       $pos1 = strrpos($text, "<");
+       $pos2 = strrpos($text, ">");
+       $pos3 = strrpos($text, "&");
+       $pos4 = strrpos($text, ";");
+
+       if ($pos1 > $pos3) {
+               if ($pos1 > $pos2)
+                       $text = substr($text, 0, $pos1);
+       } else {
+               if ($pos3 > $pos4)
+                       $text = substr($text, 0, $pos3);
+       }
+
+       $doc = new DOMDocument();
+       $doc->preserveWhiteSpace = false;
+
+       $doctype = '<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">';
+       @$doc->loadHTML($doctype."<html><body>".$text."</body></html>");
+
+       $text = $doc->saveHTML();
+       $text = str_replace(array("<html><body>", "</body></html>", $doctype), array("", "", ""), $text);
+
+       return($text);
+}
index 3d7c9f58518d03997a85d1620d655763e36f14d8..05d56d88222be4e8b1c0154f2493d4fcdb54534f 100755 (executable)
Binary files a/statusnet.tgz and b/statusnet.tgz differ
index f558cbec07ec5a467608988df7dfe8f2e8ea0060..8f2fbf8190965e9a95a0a2237e3985ae341d4b2d 100755 (executable)
@@ -1,7 +1,8 @@
 <?php
 /**
  * Name: StatusNet Connector
- * Version: 1.0.2
+ * Description: Relay public postings to a connected StatusNet account
+ * Version: 1.0.3
  * Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
  */
  
  *     Documentation: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/StatusNet_Plugin
  */
 
-/*   __TODO__
- *
- *   - what about multimedia content?
- *     so far we just strip HTML tags from the message
- */
-
-
 /***
  * We have to alter the TwitterOAuth class a little bit to work with any StatusNet
  * installation abroad. Basically it's only make the API path variable and be happy.
@@ -153,7 +147,6 @@ function statusnet_settings_post ($a,$post) {
        if (isset($_POST['statusnet-disconnect'])) {
             /***
              * if the statusnet-disconnect checkbox is set, clear the statusnet configuration
-             * TODO can we revoke the access tokens at Twitter and do we need to do so?
              */
             del_pconfig( local_user(), 'statusnet', 'consumerkey'  );
             del_pconfig( local_user(), 'statusnet', 'consumersecret' );
@@ -334,6 +327,9 @@ function statusnet_settings(&$a,&$s) {
                        $details = $connection->get('account/verify_credentials');
                        $s .= '<div id="statusnet-info" ><img id="statusnet-avatar" src="'.$details->profile_image_url.'" /><p id="statusnet-info-block">'. t('Currently connected to: ') .'<a href="'.$details->statusnet_profile_url.'" target="_statusnet">'.$details->screen_name.'</a><br /><em>'.$details->description.'</em></p></div>';
                        $s .= '<p>'. t('If enabled all your <strong>public</strong> postings can be posted to the associated StatusNet account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.') .'</p>';
+                        if ($a->user['hidewall']) {
+                            $s .= '<p>'. t('<strong>Note</strong>: Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to StatusNet will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.') .'</p>';
+                        }
                        $s .= '<div id="statusnet-enable-wrapper">';
                        $s .= '<label id="statusnet-enable-label" for="statusnet-checkbox">'. t('Allow posting to StatusNet') .'</label>';
                        $s .= '<input id="statusnet-checkbox" type="checkbox" name="statusnet-enable" value="1" ' . $checked . '/>';
@@ -375,6 +371,31 @@ function statusnet_post_local(&$a,&$b) {
     }
 }
 
+if (! function_exists( 'short_link' )) {
+function short_link($url) {
+    require_once('library/slinky.php');
+    $slinky = new Slinky( $url );
+    $yourls_url = get_config('yourls','url1');
+    if ($yourls_url) {
+            $yourls_username = get_config('yourls','username1');
+            $yourls_password = get_config('yourls', 'password1');
+            $yourls_ssl = get_config('yourls', 'ssl1');
+            $yourls = new Slinky_YourLS();
+            $yourls->set( 'username', $yourls_username );
+            $yourls->set( 'password', $yourls_password );
+            $yourls->set( 'ssl', $yourls_ssl );
+            $yourls->set( 'yourls-url', $yourls_url );
+            $slinky->set_cascade( array( $yourls, new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) );
+    }
+    else {
+            // setup a cascade of shortening services
+            // try to get a short link from these services
+            // in the order ur1.ca, trim, id.gd, tinyurl
+            $slinky->set_cascade( array( new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) );
+    }
+    return $slinky->short();
+} };
+
 function statusnet_post_hook(&$a,&$b) {
 
        /**
@@ -399,33 +420,49 @@ function statusnet_post_hook(&$a,&$b) {
 
                require_once('include/bbcode.php');     
                $dent = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret);
-               $max_char = $dent->get_maxlength(); // max. length for a dent
-               $msg = strip_tags(bbcode($b['body']));
+                $max_char = $dent->get_maxlength(); // max. length for a dent
+                // we will only work with up to two times the length of the dent 
+                // we 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 [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( '/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism', '$3', $tmp);
+                $tmp = preg_replace( '/\[\\/?img(\\s+.*?\]|\])/i', '', $tmp);
+                $tmp = preg_replace( '/\[\\/?video(\\s+.*?\]|\])/i', '', $tmp);
+                $tmp = preg_replace( '/\[\\/?youtube(\\s+.*?\]|\])/i', '', $tmp);
+                $tmp = preg_replace( '/\[\\/?vimeo(\\s+.*?\]|\])/i', '', $tmp);
+                $tmp = preg_replace( '/\[\\/?audio(\\s+.*?\]|\])/i', '', $tmp);
+                // 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
+                $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 
+                // apply the shortener if the link is longer then 20 characters 
+                if (( strlen($tmp)>$max_char ) && ( $max_char > 0 )) {
+                    preg_match_all ( '/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/i', $tmp, $allurls  );
+                    foreach ($allurls as $url) {
+                        foreach ($url as $u) {
+                            if (strlen($u)>20) {
+                                $sl = short_link($u);
+                                $tmp = str_replace( $u, $sl, $tmp );
+                            }
+                        }
+                    }
+                }
+                // ok, all the links we want to send out are save, now strip 
+                // away the remaining bbcode
+               $msg = strip_tags(bbcode($tmp));
                // quotes not working - let's try this
                $msg = html_entity_decode($msg);
                if (( strlen($msg) > $max_char) && $max_char > 0) {
-                       $shortlink = "";
-                       require_once('library/slinky.php');
-                       $slinky = new Slinky( $b['plink'] );
-                       $yourls_url = get_config('yourls','url1');
-                       if ($yourls_url) {
-                               $yourls_username = get_config('yourls','username1');
-                               $yourls_password = get_config('yourls', 'password1');
-                               $yourls_ssl = get_config('yourls', 'ssl1');
-                               $yourls = new Slinky_YourLS();
-                               $yourls->set( 'username', $yourls_username );
-                               $yourls->set( 'password', $yourls_password );
-                               $yourls->set( 'ssl', $yourls_ssl );
-                               $yourls->set( 'yourls-url', $yourls_url );
-                               $slinky->set_cascade( array( $yourls, new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) );
-                       }
-                       else {
-                               // setup a cascade of shortening services
-                               // try to get a short link from these services
-                               // in the order ur1.ca, trim, id.gd, tinyurl
-                               $slinky->set_cascade( array( new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) );
-                       }
-                       $shortlink = $slinky->short();
+                       $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);
index 25b54d85b8dc09f3d8e82979a86e30f7b7b40d2f..e3fbdec50cd041db5154c1a6d883b4341b6151a2 100755 (executable)
Binary files a/twitter.tgz and b/twitter.tgz differ
index ef5908396cb393cac3db1bfd88242ea73fa96aa1..fd0324635fa5c407eb65a98b08e814297b570d0e 100755 (executable)
@@ -1,7 +1,8 @@
 <?php
 /**
  * Name: Twitter Connector
- * Version: 1.0.1
+ * Description: Relay public postings to a connected StatusNet account
+ * Version: 1.0.2
  * Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
  */
 
  *     Documentation: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/Twitter_Plugin
  */
 
-/*   __TODO__
- *
- *   - what about multimedia content?
- *     so far we just strip HTML tags from the message
- */
-
 function twitter_install() {
        //  we need some hooks, for the configuration and for sending tweets
        register_hook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings'); 
@@ -188,6 +183,9 @@ function twitter_settings(&$a,&$s) {
                        $details = $connection->get('account/verify_credentials');
                        $s .= '<div id="twitter-info" ><img id="twitter-avatar" src="'.$details->profile_image_url.'" /><p id="twitter-info-block">'. t('Currently connected to: ') .'<a href="https://twitter.com/'.$details->screen_name.'" target="_twitter">'.$details->screen_name.'</a><br /><em>'.$details->description.'</em></p></div>';
                        $s .= '<p>'. t('If enabled all your <strong>public</strong> postings can be posted to the associated Twitter account. You can choose to do so by default (here) or for every posting separately in the posting options when writing the entry.') .'</p>';
+                        if ($a->user['hidewall']) {
+                            $s .= '<p>'. t('<strong>Note</strong>: Due your privacy settings (<em>Hide your profile details from unknown viewers?</em>) the link potentially included in public postings relayed to Twitter will lead the visitor to a blank page informing the visitor that the access to your profile has been restricted.') .'</p>';
+                        }
                        $s .= '<div id="twitter-enable-wrapper">';
                        $s .= '<label id="twitter-enable-label" for="twitter-checkbox">'. t('Allow posting to Twitter'). '</label>';
                        $s .= '<input id="twitter-checkbox" type="checkbox" name="twitter-enable" value="1" ' . $checked . '/>';
@@ -230,6 +228,30 @@ function twitter_post_local(&$a,&$b) {
        }
 }
 
+if (! function_exists('short_link')) {
+function short_link ($url) {
+    require_once('library/slinky.php');
+    $slinky = new Slinky( $url );
+    $yourls_url = get_config('yourls','url1');
+    if ($yourls_url) {
+            $yourls_username = get_config('yourls','username1');
+            $yourls_password = get_config('yourls', 'password1');
+            $yourls_ssl = get_config('yourls', 'ssl1');
+            $yourls = new Slinky_YourLS();
+            $yourls->set( 'username', $yourls_username );
+            $yourls->set( 'password', $yourls_password );
+            $yourls->set( 'ssl', $yourls_ssl );
+            $yourls->set( 'yourls-url', $yourls_url );
+            $slinky->set_cascade( array( $yourls, new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) );
+    }
+    else {
+            // setup a cascade of shortening services
+            // try to get a short link from these services
+            // in the order ur1.ca, trim, id.gd, tinyurl
+            $slinky->set_cascade( array( new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) );
+    }
+    return $slinky->short();
+} };
 
 function twitter_post_hook(&$a,&$b) {
 
@@ -262,33 +284,51 @@ function twitter_post_hook(&$a,&$b) {
                require_once('library/twitteroauth.php');
                require_once('include/bbcode.php');     
                $tweet = new TwitterOAuth($ckey,$csecret,$otoken,$osecret);
-               $max_char = 138; // max. length for a tweet
-               $msg = strip_tags(bbcode($b['body']));
-               if ( strlen($msg) > $max_char) {
-                       logger('Twitter: have to shorten the message to fit 140 chars', LOGGER_DEBUG);
-                       $shortlink = "";
-                       require_once('library/slinky.php');
-                       $slinky = new Slinky( $b['plink'] );
-                       $yourls_url = get_config('yourls','url1');
-                       if ($yourls_url) {
-                               $max_char = 135;
-                               $yourls_username = get_config('yourls','username1');
-                               $yourls_password = get_config('yourls', 'password1');
-                               $yourls_ssl = get_config('yourls', 'ssl1');
-                               $yourls = new Slinky_YourLS();
-                               $yourls->set( 'username', $yourls_username );
-                               $yourls->set( 'password', $yourls_password );
-                               $yourls->set( 'ssl', $yourls_ssl );
-                               $yourls->set( 'yourls-url', $yourls_url );
-                               $slinky->set_cascade( array( $yourls, new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) );
-                       }
-                       else {
-                               // setup a cascade of shortening services
-                               // try to get a short link from these services
-                               // in the order ur1.ca, trim, id.gd, tinyurl
-                               $slinky->set_cascade( array( new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) );
-                       }
-                       $shortlink = $slinky->short();
+                // in theory max char is 140 but T. uses t.co to make links 
+                // longer so we give them 10 characters extra
+               $max_char = 130; // max. length for a tweet
+                // we will only work with up to two times the length of the dent 
+                // we can later send to StatusNet. This way we can "gain" some 
+                // information during shortening of potential links but do not 
+                // shorten all the links in a 200000 character long essay.
+                $tmp = substr($b['body'], 0, 2*$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( '/\[img\=([0-9]*)x([0-9]*)\](.*?)\[\/img\]/ism', '$3', $tmp);
+                $tmp = preg_replace( '/\[\\/?img(\\s+.*?\]|\])/i', '', $tmp);
+                $tmp = preg_replace( '/\[\\/?video(\\s+.*?\]|\])/i', '', $tmp);
+                $tmp = preg_replace( '/\[\\/?youtube(\\s+.*?\]|\])/i', '', $tmp);
+                $tmp = preg_replace( '/\[\\/?vimeo(\\s+.*?\]|\])/i', '', $tmp);
+                $tmp = preg_replace( '/\[\\/?audio(\\s+.*?\]|\])/i', '', $tmp);
+                // 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
+                $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 
+                // apply the shortener if the link is longer then 20 characters 
+                if (( strlen($tmp)>$max_char ) && ( $max_char > 0 )) {
+                    preg_match_all ( '/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/i', $tmp, $allurls  );
+                    foreach ($allurls as $url) {
+                        foreach ($url as $u) {
+                            if (strlen($u)>20) {
+                                $sl = short_link($u);
+                                $tmp = str_replace( $u, $sl, $tmp );
+                            }
+                        }
+                    }
+                }
+                // ok, all the links we want to send out are save, now strip 
+                // away the remaining bbcode
+               $msg = strip_tags(bbcode($tmp));
+               // quotes not working - let's try this
+               $msg = html_entity_decode($msg);
+               if (( strlen($msg) > $max_char) && $max_char > 0) {
+                       $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);
index 3485886626673711723d5814f4ba26e42f01a8c6..12f96d3b0c569d433447d2fb11310e8ef953834f 100755 (executable)
Binary files a/wppost.tgz and b/wppost.tgz differ
index 6db0d9449fea65d51b125b18cb38b3b96125dd9a..264a342c0c0733c5934b218bb0f9646984e3257b 100755 (executable)
@@ -38,7 +38,7 @@ function wppost_jot_nets(&$a,&$b) {
     if(intval($wp_post) == 1) {
         $wp_defpost = get_pconfig(local_user(),'wppost','post_by_default');
         $selected = ((intval($wp_defpost) == 1) ? ' checked="checked" ' : '');
-        $b .= '<div class="profile-jot-net"><input type="checkbox" name="wppost_enable"' . $selected . 'value="1" /> '
+        $b .= '<div class="profile-jot-net"><input type="checkbox" name="wppost_enable" ' . $selected . ' value="1" /> '
             . t('Post to Wordpress') . '</div>';
     }
 }
@@ -161,8 +161,8 @@ function wppost_send(&$a,&$b) {
         return;
 
 
-       $wp_username = get_pconfig($b['uid'],'wppost','wp_username');
-       $wp_password = get_pconfig($b['uid'],'wppost','wp_password');
+       $wp_username = xmlify(get_pconfig($b['uid'],'wppost','wp_username'));
+       $wp_password = xmlify(get_pconfig($b['uid'],'wppost','wp_password'));
        $wp_blog = get_pconfig($b['uid'],'wppost','wp_blog');
 
        if($wp_username && $wp_password && $wp_blog) {
@@ -174,8 +174,7 @@ function wppost_send(&$a,&$b) {
                $post = xmlify($post);
 
                $xml = <<< EOT
-
-<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>
+<?xml version=\"1.0\" encoding=\"utf-8\"?>
 <methodCall>
   <methodName>blogger.newPost</methodName>
   <params>
@@ -194,7 +193,7 @@ EOT;
 
                if($wp_blog !== 'test')
                        $x = post_url($wp_blog,$xml);
-               logger('posted to wordpress: ' . ($x) ? $x : '');
+               logger('posted to wordpress: ' . (($x) ? $x : ''), LOGGER_DEBUG);
 
        }
 }
index bf723440dd5f26d8e005a5926b055750747fbc11..2385fd2095fa1b8898699d834ec3d3fba73433c9 100755 (executable)
Binary files a/yourls.tgz and b/yourls.tgz differ
index babfc2c5a8ace6b07e7a72cf65d58c42304a9661..c0d5e6ced3d4beff8a0d9467da68d080e3626b77 100755 (executable)
@@ -70,7 +70,7 @@ $yourls_ssl = get_config('yourls', 'ssl1');
 
        $s .= '<div id="yourls-ssl-wrapper">';
        $s .= '<label id="yourls-ssl-label" for="yourls-ssl">' . t('Use SSL ') . '</label>';
-       $s .= '<input id="yourls-ssl" type="checkbox" name="yourls_ssl" value="1" ' . $ssl_checked . '"/>';
+       $s .= '<input id="yourls-ssl" type="checkbox" name="yourls_ssl" value="1" ' . $ssl_checked . ' />';
        $s .= '</div><div class="clear"></div>';
 
        $s .= '<div class="settings-submit-wrapper" ><input type="submit" id="yourls-submit" name="yourls-submit" class="settings-submit" value="' . t('Submit') . '" /></div></div>';