]> git.mxchange.org Git - friendica-addons.git/commitdiff
Merge remote branch 'upstream/master'
authorTony Baldwin <tony@baldwinsoftware.com>
Sat, 17 Mar 2012 21:16:57 +0000 (17:16 -0400)
committerTony Baldwin <tony@baldwinsoftware.com>
Sat, 17 Mar 2012 21:16:57 +0000 (17:16 -0400)
61 files changed:
adult_smile.tgz [new file with mode: 0644]
adult_smile/adult_smile.php [new file with mode: 0644]
adult_smile/icons/bong.gif [new file with mode: 0644]
adult_smile/icons/tits.gif [new file with mode: 0644]
blackout.tgz
blockem.tgz
blockem/blockem.php
buglink.tgz
calc.tgz
communityhome.tgz
communityhome/twillingham/README [new file with mode: 0644]
communityhome/twillingham/communityhome.php [new file with mode: 0644]
convert.tgz
dwpost.tar.gz [deleted file]
dwpost.tgz [new file with mode: 0644]
dwpost/dwpost.php
editplain.tgz
extcron.tgz
facebook.tgz
facebook/README
facebook/facebook.php
geonames.tgz
gnot.tgz
impressum.tgz
irc.tar.gz [deleted file]
irc.tgz [new file with mode: 0644]
js_upload.tgz
ldapauth.tgz
ljpost.tar.gz [deleted file]
ljpost.tgz [new file with mode: 0644]
ljpost/ljpost.css [changed mode: 0644->0755]
ljpost/ljpost.php [changed mode: 0644->0755]
membersince.tgz
mibbit.tar.gz [deleted file]
mibbit/mibbit.php [deleted file]
nsfw.tgz
numfriends.tgz
openstreetmap.tgz
pageheader.tgz
pages.tgz [new file with mode: 0644]
pages/README [new file with mode: 0755]
pages/pages.php [new file with mode: 0755]
piwik.tgz
poormancron.tgz
posterous.tgz
qcomment.tgz
qcomment/qcomment.php
randplace.tgz
showmore.tgz
sniper.tgz
statusnet.tgz
tictac.tgz
tumblr.tgz
twitter.tgz
twitter/twitter.php
uhremotestorage.tgz
viewsrc.tgz
widgets.tgz
wppost.tgz
wppost/wppost.php
yourls.tgz

diff --git a/adult_smile.tgz b/adult_smile.tgz
new file mode 100644 (file)
index 0000000..67e2a31
Binary files /dev/null and b/adult_smile.tgz differ
diff --git a/adult_smile/adult_smile.php b/adult_smile/adult_smile.php
new file mode 100644 (file)
index 0000000..4657414
--- /dev/null
@@ -0,0 +1,34 @@
+<?php
+/*
+ * Name: Adult Smilies
+ * Description: Smily icons that could or should not be included in core
+ * Version: 1.0
+ * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
+ * 
+ * This is a template for how to extend the "smily" code.
+ * 
+ */
+
+function adult_smile_install() {
+       register_hook('smilie', 'addon/adult_smile/adult_smile.php', 'adult_smile_smilies');
+}
+
+function adult_smile_uninstall() {
+       unregister_hook('smilie', 'addon/adult_smile/adult_smile.php', 'adult_smile_smilies');
+}
+
+
+function adult_smile_smilies(&$a,&$b) {
+
+       $b['texts'][] = '(o)(o)';
+       $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/adult_smile/icons/tits.gif' . '" alt="' . '(o)(o)' . '" />';
+
+       $b['texts'][] = '(.)(.)';
+       $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/adult_smile/icons/tits.gif' . '" alt="' . '(.)(.)' . '" />';
+
+       $b['texts'][] = ':bong';
+       $b['icons'][] = '<img src="' . $a->get_baseurl() . '/addon/adult_smile/icons/bong.gif' . '" alt="' . ':bong' . '" />';
+
+
+}
\ No newline at end of file
diff --git a/adult_smile/icons/bong.gif b/adult_smile/icons/bong.gif
new file mode 100644 (file)
index 0000000..4b67122
Binary files /dev/null and b/adult_smile/icons/bong.gif differ
diff --git a/adult_smile/icons/tits.gif b/adult_smile/icons/tits.gif
new file mode 100644 (file)
index 0000000..4c1658c
Binary files /dev/null and b/adult_smile/icons/tits.gif differ
index 2c0f6cf7e094e78dc6ac34d7b571038bbf4104a1..ef87ed74bd9f55b564194a60aa3c4fd934ffe86c 100644 (file)
Binary files a/blackout.tgz and b/blackout.tgz differ
index 129a00652b979469e08b86f9fdb187bcb24c817a..dd092204f380e65b5cf18babf0de1edc53fb9ebf 100755 (executable)
Binary files a/blockem.tgz and b/blockem.tgz differ
index 43f34554e24071cc92a492c2121a4b8d244f8632..9134bd0b654fea63fdfaeba3bd3fc01a4d4c4a08 100755 (executable)
@@ -101,15 +101,15 @@ function blockem_prepare_body(&$a,&$b) {
                }
        }
        if($found) {
-               $rnd = random_string(8);        
+               $rnd = random_string(8);
                $b['html'] = '<div id="blockem-wrap-' . $rnd . '" class="fakelink" onclick=openClose(\'blockem-' . $rnd . '\'); >' . sprintf( t('Blocked %s - Click to open/close'),$word ) . '</div><div id="blockem-' . $rnd . '" style="display: none; " >' . $b['html'] . '</div>';  
        }
 }
 
 
 function blockem_display_item(&$a,&$b) {
-       if(strstr($b['output'],'id="blockem-wrap-'))
-               $b['output'] = preg_replace('/\<img(.*?)src=\"(.*?)\" class=\"wall\-item\-photo(.*?)\>/','<img$1src="' . $a->get_baseurl() . "/images/default-profile-sm.jpg" . '" class="wall-item-photo$3>',$b['output']);
+       if(strstr($b['output']['body'],'id="blockem-wrap-'))
+               $b['output']['thumb'] = $a->get_baseurl() . "/images/default-profile-sm.jpg";
 }
 
 
@@ -193,4 +193,4 @@ function blockem_init(&$a) {
        set_pconfig(local_user(),'blockem','words',$words);
        info( t('blockem settings updated') . EOL );
        killme();
-}
\ No newline at end of file
+}
index fce2e54ca55e5b1d4a881ae243508c71c4397390..171a17e9c5c715619f7d220380f1dfdaca566ab9 100755 (executable)
Binary files a/buglink.tgz and b/buglink.tgz differ
index a849ef0e933c9dd0323634b3db5d0e64900c9b9b..002917c4640e3ccb29ca9627d312c7a972705456 100755 (executable)
Binary files a/calc.tgz and b/calc.tgz differ
index b08abd2ec236c20a20c24d7b8083cff317798e8c..b08f2e5680d9013231e95abe67bc2758c18ecca7 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');
+       
+}
index c522abe1d7f6f3dcc88f78911adc6c55941b621f..56e0080c36b9c959832c7d441e7fa1117f42edba 100755 (executable)
Binary files a/convert.tgz and b/convert.tgz differ
diff --git a/dwpost.tar.gz b/dwpost.tar.gz
deleted file mode 100644 (file)
index d22d966..0000000
Binary files a/dwpost.tar.gz and /dev/null differ
diff --git a/dwpost.tgz b/dwpost.tgz
new file mode 100644 (file)
index 0000000..ecbb519
Binary files /dev/null and b/dwpost.tgz differ
index bb4557269a6f458a644466d8f6ae83565d7fc114..85e808c0d7b6d9f3956f7bedfcb63b37148af709 100644 (file)
@@ -6,6 +6,7 @@
  * Version: 1.0
  * Author: Tony Baldwin <https://free-haven.org/profile/tony>
  * Author: Michael Johnston
+ * Author: Cat Gray <https://free-haven.org/profile/catness>
  */
 
 function dwpost_install() {
@@ -173,6 +174,7 @@ function dwpost_send(&$a,&$b) {
                $title = $b['title'];
                $post = bbcode($b['body']);
                $post = xmlify($post);
+               $tags = dwpost_get_tags($b['tag']);
 
                $date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s');
                $year = intval(substr($date,0,4));
@@ -200,7 +202,7 @@ function dwpost_send(&$a,&$b) {
 <member><name>props</name>
 <value><struct>
 <member><name>useragent</name><value><string>Friendica</string></value></member>
-<member><name>taglist</name><value><string>friendica</string></value></member>
+<member><name>taglist</name><value><string>$tags</string></value></member>
 </struct></value></member>
 </struct></value>
 </param></params>
@@ -217,3 +219,9 @@ EOT;
        }
 }
 
+function dwpost_get_tags($post)
+{
+       preg_match_all("/\]([^\[#]+)\[/",$post,$matches);
+       $tags = implode(', ',$matches[1]);
+       return $tags;
+}
index c99c7f63bab8821fe0d1df4cdbd74d75e14f5d25..be81317741b2c89ac0b583107be2ba43940c7aa2 100644 (file)
Binary files a/editplain.tgz and b/editplain.tgz differ
index 30c0f7e39511c30f496e0eec60bcf54fc2e132b5..0e5b28929a2942f5105b87922f563f5184f6fdeb 100755 (executable)
Binary files a/extcron.tgz and b/extcron.tgz differ
index 2cb406a1a615a0be427fd1ec02c4f3d5490c8492..783425cedb897604f662a7b1261b797dc0e28e49 100644 (file)
Binary files a/facebook.tgz and b/facebook.tgz differ
index 9e381e7dca9e151fefec783e31fa052895ce08ca..9687558e70bd9a0d1b8aefd167e4aea1a8f64402 100755 (executable)
@@ -25,7 +25,10 @@ Installing the Friendica/Facebook connector
    and click 'Install Facebook Connector'.
 4. This will ask you to login to Facebook and grant permission to the 
    plugin to do its stuff. Allow it to do so. 
-5. You're done. To turn it off visit the Plugin Settings page again and
+5. Optional step: If you want to use Facebook Real Time Updates (so new messages
+   and new contacts are added ~1min after they are postet / added on FB), go to
+   Settings -> plugins -> facebook and press the "Activate Real-Time Updates"-button.
+6. You're done. To turn it off visit the Plugin Settings page again and
    'Remove Facebook posting'.
 
 Vidoes and embeds will not be posted if there is no other content. Links 
index 6b6c7f8447ec8e3cfc4373b409c0629870f864ed..4524a4865b18773b868257bcb073081347b4ec7f 100755 (executable)
@@ -1,8 +1,9 @@
 <?php
 /**
  * Name: Facebook Connector
- * Version: 1.0
+ * Version: 1.1
  * Author: Mike Macgirvin <http://macgirvin.com/profile/mike>
+ *         Tobias Hößl <https://github.com/CatoTH/>
  */
 
 /**
  *    and click 'Install Facebook Connector'.
  * 4. This will ask you to login to Facebook and grant permission to the 
  *    plugin to do its stuff. Allow it to do so. 
- * 5. You're done. To turn it off visit the Plugin Settings page again and
+ * 5. Optional step: If you want to use Facebook Real Time Updates (so new messages
+ *    and new contacts are added ~1min after they are postet / added on FB), go to
+ *    Settings -> plugins -> facebook and press the "Activate Real-Time Updates"-button.
+ * 6. You're done. To turn it off visit the Plugin Settings page again and
  *    'Remove Facebook posting'.
  *
  * Vidoes and embeds will not be posted if there is no other content. Links 
@@ -53,6 +57,8 @@ function facebook_install() {
        register_hook('connector_settings',  'addon/facebook/facebook.php', 'facebook_plugin_settings');
        register_hook('cron',             'addon/facebook/facebook.php', 'facebook_cron');
        register_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook');
+       
+       if (get_config('facebook', 'realtime_active') == 1) facebook_subscription_add_users(); // Restore settings, if the plugin was installed before
 }
 
 
@@ -67,6 +73,8 @@ function facebook_uninstall() {
        // hook moved
        unregister_hook('post_local_end',  'addon/facebook/facebook.php', 'facebook_post_hook');
        unregister_hook('plugin_settings',  'addon/facebook/facebook.php', 'facebook_plugin_settings');
+       
+       if (get_config('facebook', 'realtime_active') == 1) facebook_subscription_del_users();
 }
 
 
@@ -76,10 +84,93 @@ function facebook_module() {}
 
 
 
-/* If a->argv[1] is a nickname, this is a callback from Facebook oauth requests. */
+// If a->argv[1] is a nickname, this is a callback from Facebook oauth requests.
+// If $_REQUEST["realtime_cb"] is set, this is a callback from the Real-Time Updates API
 
 function facebook_init(&$a) {
+       
+       if (x($_REQUEST, "realtime_cb") && x($_REQUEST, "realtime_cb")) {
+               logger("facebook_init: Facebook Real-Time callback called", LOGGER_DEBUG);
+               
+               if (x($_REQUEST, "hub_verify_token")) {
+                       // this is the verification callback while registering for real time updates
+                       
+                       $verify_token = get_config('facebook', 'cb_verify_token');
+                       if ($verify_token != $_REQUEST["hub_verify_token"]) {
+                               logger('facebook_init: Wrong Facebook Callback Verifier - expected ' . $verify_token . ', got ' . $_REQUEST["hub_verify_token"]);
+                               return;
+                       }
+                       
+                       if (x($_REQUEST, "hub_challenge")) {
+                               logger('facebook_init: Answering Challenge: ' . $_REQUEST["hub_challenge"], LOGGER_DATA);
+                               echo $_REQUEST["hub_challenge"];
+                               die();
+                       }
+               }
+               
+               require_once('include/items.php');
+               
+               // this is a status update
+               $content = file_get_contents("php://input");
+               if (is_numeric($content)) $content = file_get_contents("php://input");
+               $js = json_decode($content);
+               logger(print_r($js, true), LOGGER_DATA);
+               
+               if (!isset($js->object) || $js->object != "user" || !isset($js->entry)) {
+                       logger('facebook_init: Could not parse Real-Time Update data', LOGGER_DEBUG);
+                       return;
+               }
+               
+               $affected_users = array("feed" => array(), "friends" => array());
+               
+               foreach ($js->entry as $entry) {
+                       $fbuser = $entry->uid;
+                       foreach ($entry->changed_fields as $field) {
+                               if (!isset($affected_users[$field])) {
+                                       logger('facebook_init: Unknown field "' . $field . '"');
+                                       continue;
+                               }
+                               if (in_array($fbuser, $affected_users[$field])) continue;
+                               
+                               $r = q("SELECT `uid` FROM `pconfig` WHERE `cat` = 'facebook' AND `k` = 'self_id' AND `v` = '%s' LIMIT 1", dbesc($fbuser));
+                               if(! count($r))
+                                       continue;
+                               $uid = $r[0]['uid'];
+                               
+                               $access_token = get_pconfig($uid,'facebook','access_token');
+                               if(! $access_token)
+                                       return;
+                               
+                               switch ($field) {
+                                       case "feed":
+                                               logger('facebook_init: FB-User ' . $fbuser . ' / feed', LOGGER_DEBUG);
+                                               
+                                               if(! get_pconfig($uid,'facebook','no_wall')) {
+                                                       $private_wall = intval(get_pconfig($uid,'facebook','private_wall'));
+                                                       $s = fetch_url('https://graph.facebook.com/me/feed?access_token=' . $access_token);
+                                                       if($s) {
+                                                               $j = json_decode($s);
+                                                               logger('facebook_init: wall: ' . print_r($j,true), LOGGER_DATA);
+                                                               fb_consume_stream($uid,$j,($private_wall) ? false : true);
+                                                       }
+                                               }
+                                               
+                                       break;
+                                       case "friends":
+                                               logger('facebook_init: FB-User ' . $fbuser . ' / friends', LOGGER_DEBUG);
+                                               
+                                               fb_get_friends($uid, false);
+                                               set_pconfig($uid,'facebook','friend_check',time());
+                                       break;
+                                       default:
+                                               logger('facebook_init: Unknown callback field for ' . $fbuser, LOGGER_NORMAL);
+                               }
+                               $affected_users[$field][] = $fbuser;
+                       }
+               }
+       }
 
+       
        if($a->argc != 2)
                return;
        $nick = $a->argv[1];
@@ -91,8 +182,8 @@ function facebook_init(&$a) {
                return;
 
        $uid           = $r[0]['uid'];
-       $auth_code     = (($_GET['code']) ? $_GET['code'] : '');
-       $error         = (($_GET['error_description']) ? $_GET['error_description'] : '');
+       $auth_code     = (x($_GET, 'code') ? $_GET['code'] : '');
+       $error         = (x($_GET, 'error_description') ? $_GET['error_description'] : '');
 
 
        if($error)
@@ -119,7 +210,7 @@ function facebook_init(&$a) {
                        if(get_pconfig($uid,'facebook','no_linking') === false)
                                set_pconfig($uid,'facebook','no_linking',1);
                        fb_get_self($uid);
-                       fb_get_friends($uid);
+                       fb_get_friends($uid, true);
                        fb_consume_all($uid);
 
                }
@@ -140,116 +231,46 @@ function fb_get_self($uid) {
        }
 }
 
-
-
-function fb_get_friends($uid) {
-
-       $r = q("SELECT `uid` FROM `user` WHERE `uid` = %d AND `account_expired` = 0 LIMIT 1",
-               intval($uid)
+function fb_get_friends_sync_new($uid, $access_token, $person) {
+       $link = 'http://facebook.com/profile.php?id=' . $person->id;
+       
+       $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
+               intval($uid),
+               dbesc($link)
        );
-       if(! count($r))
-               return;
-
-       $access_token = get_pconfig($uid,'facebook','access_token');
-
-       $no_linking = get_pconfig($uid,'facebook','no_linking');
-       if($no_linking)
-               return;
+       
+       if (count($r) == 0) {
+               logger('fb_get_friends: new contact found: ' . $link, LOGGER_DEBUG);
+               
+               fb_get_friends_sync_full($uid, $access_token, $person);
+       }
+}
 
-       if(! $access_token)
-               return;
-       $s = fetch_url('https://graph.facebook.com/me/friends?access_token=' . $access_token);
+function fb_get_friends_sync_full($uid, $access_token, $person) {
+       $s = fetch_url('https://graph.facebook.com/' . $person->id . '?access_token=' . $access_token);
        if($s) {
-               logger('facebook: fb_get_friends: ' . $s, LOGGER_DATA);
-               $j = json_decode($s);
-               logger('facebook: fb_get_friends: json: ' . print_r($j,true), LOGGER_DATA);
-               if(! $j->data)
-                       return;
-               foreach($j->data as $person) {
-                       $s = fetch_url('https://graph.facebook.com/' . $person->id . '?access_token=' . $access_token);
-                       if($s) {
-                               $jp = json_decode($s);
-                               logger('fb_get_friends: info: ' . print_r($jp,true), LOGGER_DATA);
-
-                               // always use numeric link for consistency
-
-                               $jp->link = 'http://facebook.com/profile.php?id=' . $person->id;
+               $jp = json_decode($s);
+               logger('fb_get_friends: info: ' . print_r($jp,true), LOGGER_DATA);
 
-                               // check if we already have a contact
-
-                               $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
-                                       intval($uid),
-                                       dbesc($jp->link)
-                               );                      
+               // always use numeric link for consistency
 
-                               if(count($r)) {
-
-                                       // check that we have all the photos, this has been known to fail on occasion
-
-                                       if((! $r[0]['photo']) || (! $r[0]['thumb']) || (! $r[0]['micro'])) {  
-                                               require_once("Photo.php");
-
-                                               $photos = import_profile_photo('https://graph.facebook.com/' . $jp->id . '/picture', $uid, $r[0]['id']);
-
-                                               $r = q("UPDATE `contact` SET `photo` = '%s', 
-                                                       `thumb` = '%s',
-                                                       `micro` = '%s', 
-                                                       `name-date` = '%s', 
-                                                       `uri-date` = '%s', 
-                                                       `avatar-date` = '%s'
-                                                       WHERE `id` = %d LIMIT 1
-                                               ",
-                                                       dbesc($photos[0]),
-                                                       dbesc($photos[1]),
-                                                       dbesc($photos[2]),
-                                                       dbesc(datetime_convert()),
-                                                       dbesc(datetime_convert()),
-                                                       dbesc(datetime_convert()),
-                                                       intval($r[0]['id'])
-                                               );                      
-                                       }       
-                                       continue;
-                               }
-                               else {
+               $jp->link = 'http://facebook.com/profile.php?id=' . $person->id;
 
-                                       // create contact record 
-                                       $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `addr`, `alias`, `notify`, `poll`, 
-                                               `name`, `nick`, `photo`, `network`, `rel`, `priority`,
-                                               `writable`, `blocked`, `readonly`, `pending` )
-                                               VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
-                                               intval($uid),
-                                               dbesc(datetime_convert()),
-                                               dbesc($jp->link),
-                                               dbesc(normalise_link($jp->link)),
-                                               dbesc(''),
-                                               dbesc(''),
-                                               dbesc($jp->id),
-                                               dbesc('facebook ' . $jp->id),
-                                               dbesc($jp->name),
-                                               dbesc(($jp->nickname) ? $jp->nickname : strtolower($jp->first_name)),
-                                               dbesc('https://graph.facebook.com/' . $jp->id . '/picture'),
-                                               dbesc(NETWORK_FACEBOOK),
-                                               intval(CONTACT_IS_FRIEND),
-                                               intval(1),
-                                               intval(1)
-                                       );
-                               }
+               // check if we already have a contact
 
-                               $r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1",
-                                       dbesc($jp->link),
-                                       intval($uid)
-                               );
+               $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `url` = '%s' LIMIT 1",
+                       intval($uid),
+                       dbesc($jp->link)
+               );                      
 
-                               if(! count($r)) {
-                                       continue;
-                               }
+               if(count($r)) {
 
-                               $contact = $r[0];
-                               $contact_id  = $r[0]['id'];
+                       // check that we have all the photos, this has been known to fail on occasion
 
+                       if((! $r[0]['photo']) || (! $r[0]['thumb']) || (! $r[0]['micro'])) {  
                                require_once("Photo.php");
 
-                               $photos = import_profile_photo($r[0]['photo'],$uid,$contact_id);
+                               $photos = import_profile_photo('https://graph.facebook.com/' . $jp->id . '/picture', $uid, $r[0]['id']);
 
                                $r = q("UPDATE `contact` SET `photo` = '%s', 
                                        `thumb` = '%s',
@@ -265,11 +286,102 @@ function fb_get_friends($uid) {
                                        dbesc(datetime_convert()),
                                        dbesc(datetime_convert()),
                                        dbesc(datetime_convert()),
-                                       intval($contact_id)
+                                       intval($r[0]['id'])
                                );                      
+                       }       
+                       return;
+               }
+               else {
 
-                       }
+                       // create contact record 
+                       $r = q("INSERT INTO `contact` ( `uid`, `created`, `url`, `nurl`, `addr`, `alias`, `notify`, `poll`, 
+                               `name`, `nick`, `photo`, `network`, `rel`, `priority`,
+                               `writable`, `blocked`, `readonly`, `pending` )
+                               VALUES ( %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, %d, 0, 0, 0 ) ",
+                               intval($uid),
+                               dbesc(datetime_convert()),
+                               dbesc($jp->link),
+                               dbesc(normalise_link($jp->link)),
+                               dbesc(''),
+                               dbesc(''),
+                               dbesc($jp->id),
+                               dbesc('facebook ' . $jp->id),
+                               dbesc($jp->name),
+                               dbesc(($jp->nickname) ? $jp->nickname : strtolower($jp->first_name)),
+                               dbesc('https://graph.facebook.com/' . $jp->id . '/picture'),
+                               dbesc(NETWORK_FACEBOOK),
+                               intval(CONTACT_IS_FRIEND),
+                               intval(1),
+                               intval(1)
+                       );
                }
+
+               $r = q("SELECT * FROM `contact` WHERE `url` = '%s' AND `uid` = %d LIMIT 1",
+                       dbesc($jp->link),
+                       intval($uid)
+               );
+
+               if(! count($r)) {
+                       return;
+               }
+
+               $contact = $r[0];
+               $contact_id  = $r[0]['id'];
+
+               require_once("Photo.php");
+
+               $photos = import_profile_photo($r[0]['photo'],$uid,$contact_id);
+
+               $r = q("UPDATE `contact` SET `photo` = '%s', 
+                       `thumb` = '%s',
+                       `micro` = '%s', 
+                       `name-date` = '%s', 
+                       `uri-date` = '%s', 
+                       `avatar-date` = '%s'
+                       WHERE `id` = %d LIMIT 1
+               ",
+                       dbesc($photos[0]),
+                       dbesc($photos[1]),
+                       dbesc($photos[2]),
+                       dbesc(datetime_convert()),
+                       dbesc(datetime_convert()),
+                       dbesc(datetime_convert()),
+                       intval($contact_id)
+               );                      
+
+       }
+}
+
+// if $fullsync is true, only new contacts are searched for
+
+function fb_get_friends($uid, $fullsync = true) {
+
+       $r = q("SELECT `uid` FROM `user` WHERE `uid` = %d AND `account_expired` = 0 LIMIT 1",
+               intval($uid)
+       );
+       if(! count($r))
+               return;
+
+       $access_token = get_pconfig($uid,'facebook','access_token');
+
+       $no_linking = get_pconfig($uid,'facebook','no_linking');
+       if($no_linking)
+               return;
+
+       if(! $access_token)
+               return;
+       $s = fetch_url('https://graph.facebook.com/me/friends?access_token=' . $access_token);
+       if($s) {
+               logger('facebook: fb_get_friends: ' . $s, LOGGER_DATA);
+               $j = json_decode($s);
+               logger('facebook: fb_get_friends: json: ' . print_r($j,true), LOGGER_DATA);
+               if(! $j->data)
+                       return;
+               foreach($j->data as $person)
+                       if ($fullsync)
+                               fb_get_friends_sync_full($uid, $access_token, $person);
+                       else
+                               fb_get_friends_sync_new($uid, $access_token, $person);
        }
 }
 
@@ -314,7 +426,7 @@ function facebook_post(&$a) {
                elseif(intval($no_linking) && intval($linkvalue)) {
                        // FB linkage is now allowed - import stuff.
                        fb_get_self($uid);
-                       fb_get_friends($uid);
+                       fb_get_friends($uid, true);
                        fb_consume_all($uid);
                }
 
@@ -339,7 +451,7 @@ function facebook_content(&$a) {
        }
 
        if($a->argc > 1 && $a->argv[1] === 'friends') {
-               fb_get_friends(local_user());
+               fb_get_friends(local_user(), true);
                info( t('Updating contacts') . EOL);
        }
 
@@ -457,13 +569,40 @@ function facebook_cron($a,$b) {
                        if($last_friend_check) 
                                $next_friend_check = $last_friend_check + 86400;
                        if($next_friend_check <= time()) {
-                               fb_get_friends($rr['uid']);
+                               fb_get_friends($rr['uid'], true);
                                set_pconfig($rr['uid'],'facebook','friend_check',time());
                        }
                        fb_consume_all($rr['uid']);
                }
-       }       
-
+       }
+       
+       if (get_config('facebook', 'realtime_active') == 1) {
+               if (!facebook_check_realtime_active()) {
+                       
+                       logger('facebook_cron: Facebook is not sending Real-Time Updates any more, although it is supposed to. Trying to fix it...', LOGGER_NORMAL);
+                       facebook_subscription_add_users();
+                       
+                       if (facebook_check_realtime_active()) 
+                               logger('facebook_cron: Successful', LOGGER_NORMAL);
+                       else {
+                               logger('facebook_cron: Failed', LOGGER_NORMAL);
+                               
+                               if(strlen($a->config['admin_email']) && !get_config('facebook', 'realtime_err_mailsent')) {
+                                       $res = mail($a->config['admin_email'], t('Problems with Facebook Real-Time Updates'), 
+                                               "Hi!\n\nThere's a problem with the Facebook Real-Time Updates that cannob be solved automatically. Maybe an permission issue?\n\nThis e-mail will only be sent once.",
+                                               'From: ' . t('Administrator') . '@' . $_SERVER['SERVER_NAME'] . "\n"
+                                               . 'Content-type: text/plain; charset=UTF-8' . "\n"
+                                               . 'Content-transfer-encoding: 8bit'
+                                       );
+                                       
+                                       set_config('facebook', 'realtime_err_mailsent', 1);
+                               }
+                       }
+               } else { // !facebook_check_realtime_active()
+                       del_config('facebook', 'realtime_err_mailsent');
+               }
+       }
+       
        set_config('facebook','last_poll', time());
 
 }
@@ -479,6 +618,27 @@ function facebook_plugin_settings(&$a,&$b) {
 
 }
 
+
+function facebook_plugin_admin(&$a, &$o){
+       
+       $activated = facebook_check_realtime_active();
+       if ($activated) {
+               $o = t('Real-Time Updates are activated.') . '<br><br>';
+               $o .= '<input type="submit" name="real_time_deactivate" value="' . t('Deactivate Real-Time Updates') . '">';
+       } else {
+               $o = t('Real-Time Updates not activated.') . '<br><input type="submit" name="real_time_activate" value="' . t('Activate Real-Time Updates') . '">';
+       }
+}
+
+function facebook_plugin_admin_post(&$a, &$o){
+       if (x($_REQUEST,'real_time_activate')) {
+               facebook_subscription_add_users();
+       }
+       if (x($_REQUEST,'real_time_deactivate')) {
+               facebook_subscription_del_users();
+       }
+}
+
 function facebook_jot_nets(&$a,&$b) {
        if(! local_user())
                return;
@@ -891,7 +1051,7 @@ function fb_consume_stream($uid,$j,$wall = false) {
        $a = get_app();
 
 
-       $user = q("SELECT `nickname`, `blockwall` FROM `user` WHERE `uid` = %d AND `account_expired` = 0 LIMIT 1",
+       $user = q("SELECT * FROM `user` WHERE `uid` = %d AND `account_expired` = 0 LIMIT 1",
                intval($uid)
        );
        if(! count($user))
@@ -1016,12 +1176,17 @@ function fb_consume_stream($uid,$j,$wall = false) {
                                $datarray['private'] = 1;
                                $datarray['allow_cid'] = '<' . $uid . '>';
                        }
-                       
+
+                       if(trim($datarray['body']) == '') {
+                               logger('facebook: empty body');
+                               continue;
+                       }
+
                        $top_item = item_store($datarray);
                        $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1",
                                intval($top_item),
                                intval($uid)
-                       );                      
+                       );
                        if(count($r)) {
                                $orig_post = $r[0];
                                logger('fb: new top level item posted');
@@ -1148,8 +1313,234 @@ function fb_consume_stream($uid,$j,$wall = false) {
                                $cmntdata['author-avatar'] = 'https://graph.facebook.com/' . $cmnt->from->id . '/picture';
                                $cmntdata['body'] = $cmnt->message;
                                $item = item_store($cmntdata);                  
+                               
+                               $myconv = q("SELECT `author-link`, `author-avatar`, `parent` FROM `item` WHERE `parent-uri` = '%s' AND `uid` = %d AND `parent` != 0 ",
+                                       dbesc($orig_post['uri']),
+                                       intval($uid)
+                               );
+
+                               if(count($myconv)) {
+                                       $importer_url = $a->get_baseurl() . '/profile/' . $user[0]['nickname'];
+
+                                       foreach($myconv as $conv) {
+
+                                               // now if we find a match, it means we're in this conversation
+       
+                                               if(! link_compare($conv['author-link'],$importer_url))
+                                                       continue;
+
+                                               require_once('include/enotify.php');
+                                                               
+                                               $conv_parent = $conv['parent'];
+
+                                               notification(array(
+                                                       'type'         => NOTIFY_COMMENT,
+                                                       'notify_flags' => $user[0]['notify-flags'],
+                                                       'language'     => $user[0]['language'],
+                                                       'to_name'      => $user[0]['username'],
+                                                       'to_email'     => $user[0]['email'],
+                                                       'uid'          => $user[0]['uid'],
+                                                       'item'         => $cmntdata,
+                                                       'link'             => $a->get_baseurl() . '/display/' . $importer['nickname'] . '/' . $item,
+                                                       'source_name'  => $cmntdata['author-name'],
+                                                       'source_link'  => $cmntdata['author-link'],
+                                                       'source_photo' => $cmntdata['author-avatar'],
+                                                       'verb'         => ACTIVITY_POST,
+                                                       'otype'        => 'item',
+                                                       'parent'       => $conv_parent,
+                                               ));
+
+                                               // only send one notification
+                                               break;
+                                       }
+                               }
                        }
                }
        }
 }
 
+
+function fb_get_app_access_token() {
+       
+       $acc_token = get_config('facebook','app_access_token');
+       
+       if ($acc_token !== false) return $acc_token;
+       
+       $appid = get_config('facebook','appid');
+       $appsecret = get_config('facebook', 'appsecret');
+       
+       if ($appid === false || $appsecret === false) {
+               logger('fb_get_app_access_token: appid and/or appsecret not set', LOGGER_DEBUG);
+               return false;
+       }
+       
+       $x = fetch_url('https://graph.facebook.com/oauth/access_token?client_id=' . $appid . '&client_secret=' . $appsecret . "&grant_type=client_credentials");
+       
+       if(strpos($x,'access_token=') !== false) {
+               logger('fb_get_app_access_token: returned access token: ' . $x, LOGGER_DATA);
+       
+               $token = str_replace('access_token=', '', $x);
+               if(strpos($token,'&') !== false)
+                       $token = substr($token,0,strpos($token,'&'));
+               
+               if ($token == "") {
+                       logger('fb_get_app_access_token: empty token: ' . $x, LOGGER_DEBUG);
+                       return false;
+               }
+               set_config('facebook','app_access_token',$token);
+               return $token;
+       } else {
+               logger('fb_get_app_access_token: response did not contain an access_token: ' . $x, LOGGER_DATA);
+               return false;
+       }
+}
+
+function facebook_subscription_del_users() {
+       $a = get_app();
+       $access_token = fb_get_app_access_token();
+       
+       $url = "https://graph.facebook.com/" . get_config('facebook', 'appid'  ) . "/subscriptions?access_token=" . $access_token;
+       facebook_delete_url($url);
+       
+       del_config('facebook', 'realtime_active');
+}
+
+function facebook_subscription_add_users() {
+       
+       $a = get_app();
+       $access_token = fb_get_app_access_token();
+       
+       $url = "https://graph.facebook.com/" . get_config('facebook', 'appid'  ) . "/subscriptions?access_token=" . $access_token;
+       
+       list($usec, $sec) = explode(" ", microtime());
+       $verify_token = sha1($usec . $sec . rand(0, 999999999));
+       set_config('facebook', 'cb_verify_token', $verify_token);
+       
+       $cb = $a->get_baseurl() . '/facebook/?realtime_cb=1';
+       
+       $j = post_url($url,array(
+               "object" => "user",
+               "fields" => "feed,friends",
+               "callback_url" => $cb,
+               "verify_token" => $verify_token,
+       ));
+       del_config('facebook', 'cb_verify_token');
+       
+       if ($j) {
+               logger("Facebook reponse: " . $j, LOGGER_DATA);
+               
+               if (facebook_check_realtime_active()) set_config('facebook', 'realtime_active', 1);
+       };
+}
+
+function facebook_subscriptions_get() {
+       
+       $access_token = fb_get_app_access_token();
+       if (!$access_token) return null;
+       
+       $url = "https://graph.facebook.com/" . get_config('facebook', 'appid'  ) . "/subscriptions?access_token=" . $access_token;
+       $j = fetch_url($url);
+       $ret = null;
+       if ($j) {
+               $x = json_decode($j);
+               if (isset($x->data)) $ret = $x->data;
+       }
+       return $ret;
+}
+
+
+function facebook_check_realtime_active() {
+       $ret = facebook_subscriptions_get();
+       if (is_null($ret)) return false;
+       if (is_array($ret)) foreach ($ret as $re) if (is_object($re) && $re->object == "user") return true;
+       return false;
+}
+
+
+
+
+// DELETE-request to $url
+
+if(! function_exists('facebook_delete_url')) {
+function facebook_delete_url($url,$headers = null, &$redirects = 0, $timeout = 0) {
+       $a = get_app();
+       $ch = curl_init($url);
+       if(($redirects > 8) || (! $ch)) 
+               return false;
+
+       curl_setopt($ch, CURLOPT_HEADER, true);
+       curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
+       curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
+       curl_setopt($ch, CURLOPT_USERAGENT, "Friendica");
+
+       if(intval($timeout)) {
+               curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
+       }
+       else {
+               $curl_time = intval(get_config('system','curl_timeout'));
+               curl_setopt($ch, CURLOPT_TIMEOUT, (($curl_time !== false) ? $curl_time : 60));
+       }
+
+       if(defined('LIGHTTPD')) {
+               if(!is_array($headers)) {
+                       $headers = array('Expect:');
+               } else {
+                       if(!in_array('Expect:', $headers)) {
+                               array_push($headers, 'Expect:');
+                       }
+               }
+       }
+       if($headers)
+               curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+
+       $check_cert = get_config('system','verifyssl');
+       curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, (($check_cert) ? true : false));
+       $prx = get_config('system','proxy');
+       if(strlen($prx)) {
+               curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, 1);
+               curl_setopt($ch, CURLOPT_PROXY, $prx);
+               $prxusr = get_config('system','proxyuser');
+               if(strlen($prxusr))
+                       curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxusr);
+       }
+
+       $a->set_curl_code(0);
+
+       // don't let curl abort the entire application
+       // if it throws any errors.
+
+       $s = @curl_exec($ch);
+
+       $base = $s;
+       $curl_info = curl_getinfo($ch);
+       $http_code = $curl_info['http_code'];
+
+       $header = '';
+
+       // Pull out multiple headers, e.g. proxy and continuation headers
+       // allow for HTTP/2.x without fixing code
+
+       while(preg_match('/^HTTP\/[1-2].+? [1-5][0-9][0-9]/',$base)) {
+               $chunk = substr($base,0,strpos($base,"\r\n\r\n")+4);
+               $header .= $chunk;
+               $base = substr($base,strlen($chunk));
+       }
+
+       if($http_code == 301 || $http_code == 302 || $http_code == 303) {
+        $matches = array();
+        preg_match('/(Location:|URI:)(.*?)\n/', $header, $matches);
+        $url = trim(array_pop($matches));
+        $url_parsed = @parse_url($url);
+        if (isset($url_parsed)) {
+            $redirects++;
+            return delete_url($url,$headers,$redirects,$timeout);
+        }
+    }
+       $a->set_curl_code($http_code);
+       $body = substr($s,strlen($header));
+
+       $a->set_curl_headers($header);
+
+       curl_close($ch);
+       return($body);
+}}
\ No newline at end of file
index 9467ebaa4b01b8949e2ad39b12711787be443431..952a7602f722dc1026904e5dc6598edbedf37a2a 100644 (file)
Binary files a/geonames.tgz and b/geonames.tgz differ
index fbf7f26721022228eadac4aecc59b449694cc4a9..8d9fcd3c6ac9370c78468f5500015340c0f76b9f 100644 (file)
Binary files a/gnot.tgz and b/gnot.tgz differ
index a8ea7ee023fc58a1988c700dbb5a8bfb87ecf33c..4f8ab29f49b0e304417e235d773008aa8b473d29 100755 (executable)
Binary files a/impressum.tgz and b/impressum.tgz differ
diff --git a/irc.tar.gz b/irc.tar.gz
deleted file mode 100644 (file)
index 82c3baa..0000000
Binary files a/irc.tar.gz and /dev/null differ
diff --git a/irc.tgz b/irc.tgz
new file mode 100644 (file)
index 0000000..999c8d2
Binary files /dev/null and b/irc.tgz differ
index fe51b8aea9d2eed665568fdca904cbece546055c..7b684103edd5afa5b341018970abf6b66be1757f 100755 (executable)
Binary files a/js_upload.tgz and b/js_upload.tgz differ
index 28bbed6245f5154c01f5ca8148d75d33d07b56dc..c308e7ea2d95d46612556d586f1dd3a562db5d7a 100755 (executable)
Binary files a/ldapauth.tgz and b/ldapauth.tgz differ
diff --git a/ljpost.tar.gz b/ljpost.tar.gz
deleted file mode 100644 (file)
index b3f354f..0000000
Binary files a/ljpost.tar.gz and /dev/null differ
diff --git a/ljpost.tgz b/ljpost.tgz
new file mode 100644 (file)
index 0000000..21ec191
Binary files /dev/null and b/ljpost.tgz differ
old mode 100644 (file)
new mode 100755 (executable)
index 8edab3d..2087d3f
@@ -1,5 +1,21 @@
 
 #ljpost-enable-label, #ljpost-username-label, #ljpost-password-label, #ljpost-bydefault-label {
+<<<<<<< HEAD
+       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;
+}
+
+=======
 float: left;
 width: 200px;
 margin-top: 10px;
@@ -12,4 +28,5 @@ margin-top: 10px;
 
 #ljpost-submit {
 margin-top: 15px;
-}
\ No newline at end of file
+}
+>>>>>>> 99d9fddb6af9e872266666038447771e42ce13b4
old mode 100644 (file)
new mode 100755 (executable)
index 14bac69..ddcd289
@@ -6,6 +6,7 @@
  * Version: 1.0
  * Author: Tony Baldwin <https://free-haven.org/profile/tony>
  * Author: Michael Johnston
+ * Author: Cat Gray <https://free-haven.org/profile/catness>
  */
 
 function ljpost_install() {
@@ -161,18 +162,25 @@ function ljpost_send(&$a,&$b) {
        if($x && strlen($x[0]['timezone']))
                $tz = $x[0]['timezone'];        
 
-       $lj_username = get_pconfig($b['uid'],'ljpost','lj_username');
-       $lj_password = get_pconfig($b['uid'],'ljpost','lj_password');
-       $lj_blog = 'http://www.livejournal.com/interface/xmlrpc';
+       $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 = $b['title'];
+               $title = xmlify($b['title']);
                $post = bbcode($b['body']);
                $post = xmlify($post);
+               $tags = ljpost_get_tags($b['tag']);
 
                $date = datetime_convert('UTC',$tz,$b['created'],'Y-m-d H:i:s');
                $year = intval(substr($date,0,4));
@@ -183,28 +191,40 @@ function ljpost_send(&$a,&$b) {
 
                $xml = <<< EOT
 <?xml version="1.0" encoding="utf-8"?>
-<methodCall><methodName>LJ.XMLRPC.postevent</methodName>
-<params><param>
-<value><struct>
-<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>
-<member><name>usejournal</name><value><string>$lj_username</string></value></member>
-<member><name>event</name><value><string>$post</string></value></member>
-<member><name>username</name><value><string>$lj_username</string></value></member>
-<member><name>password</name><value><string>$lj_password</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>ver</name><value><int>1</int></value></member>
-<member><name>props</name>
-<value><struct>
-<member><name>useragent</name><value><string>Friendica</string></value></member>
-<member><name>taglist</name><value><string>friendica</string></value></member>
-</struct></value></member>
-</struct></value>
-</param></params>
+<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>
+               <member><name>usejournal</name><value><string>$lj_username</string></value></member>
+               <member>
+                       <name>props</name>
+                       <value>
+                               <struct>
+                                       <member>
+                                               <name>useragent</name>
+                                               <value><string>Friendica</string></value>
+                                       </member>
+                                       <member>
+                                               <name>taglist</name>
+                                               <value><string>$tags</string></value>
+                                       </member>
+                               </struct>
+                       </value>
+               </member>
+        </struct>
+    </value></param>
+  </params>
 </methodCall>
 
 EOT;
@@ -218,3 +238,9 @@ EOT;
        }
 }
 
+function ljpost_get_tags($post)
+{
+       preg_match_all("/\]([^\[#]+)\[/",$post,$matches);
+       $tags = implode(', ',$matches[1]);
+       return $tags;
+}
index f1310f4a3060de0d686c7c8bfa73e29556cf540d..85acb560bf08ee9e7e134a7cc375d3d32cf52d8d 100755 (executable)
Binary files a/membersince.tgz and b/membersince.tgz differ
diff --git a/mibbit.tar.gz b/mibbit.tar.gz
deleted file mode 100644 (file)
index 6b0a386..0000000
Binary files a/mibbit.tar.gz and /dev/null differ
diff --git a/mibbit/mibbit.php b/mibbit/mibbit.php
deleted file mode 100755 (executable)
index 90f322c..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-<?php
-/**
- * Name: Mibbit Chat Plugin
- * Description: add a mibbit/irc chatroom
- * Version: 1.0
- * Author: tony baldwin <http://tonybaldwin.me>
- */
-
-
-function mibbit_install() {
-       register_hook('app_menu', 'addon/mibbit/mibbit.php', 'mibbit_app_menu');
-}
-
-function mibbit_uninstall() {
-       unregister_hook('app_menu', 'addon/mibbit/mibbit.php', 'mibbit_app_menu');
-
-}
-
-function mibbit_app_menu($a,&$b) {
-       $b['app_menu'][] = '<div class="app-title"><a href="mibbit">' . t('Mibbit IRC Chatroom') . '</a></div>'; 
-}
-
-
-function mibbit_module() {
-       return;
-}
-
-
-
-
-
-function mibbit_content(&$a) {
-
-       $baseurl = $a->get_baseurl() . '/addon/mibbit';
-       $o = '';
-
-// this stuff is supposed to go in the page header
-
-$a->page['htmlhead'] .= 'session_start();  
- $nick   = empty($_SESSION[\'user_name\']) ? \'Wdg\' : $_SESSION[\'user_name\'];
- $server = \"irc.mibbit.net\"; // default: 
- $room   = \"friendica\"; // w/o # or %23 !
- $uri = \"https://widget.mibbit.com/\" .
- \"?nick=$nick_%3F%3F\" . // each %3F(=?) will be replaced by a random digit 
- \"&customprompt=Welcome%20to%20$server/$room\" .
- \"&customloading=maybe%20you%20need%20to%20close%20other%20Mibbit%20windows%20first...\" .
- \"&settings=c76462e5055bace06e32d325963b39f2\"; // etc.
- if (!empty($room))    {$uri .= \'&channel=%23\' . $room;}  
- if (!empty($server )) {$uri .= \'&server=\'     . $server;}'
- // add the chatroom frame and some html
-    $o .= '<h2>chat</h2>';
-    $o .= '<center>';
-    $o .= '<iframe  src=\"<?PHP echo $uri; ?>\" frameborder=\"0\">
- [Your user agent does not support frames or is currently configured
- not to display frames. However, you may want to open the
- <A href=\"<?PHP echo $uri; ?>\" target=\"_blank\"> chat in a new browser window ...</A>]';
-    $o .= '</iframe>';
-    $o .= '<br>(no spaces, interpunctuation or leading ciphers in your /nick name)';
-    $o .= '<h4>type /help to learn about special commands</h4>';
-    $o .= '</center><hr>'
-    
-}
index 8a1e3a3ca1e55134adbce3d0840ae29d6b182d3d..b7caadbd4a6f614c3e12d380785068951c2e6372 100755 (executable)
Binary files a/nsfw.tgz and b/nsfw.tgz differ
index df472580315dc3d582f1a0c4fb5a7182f093a437..61196a542f11269f5e188c7b6579948c307ac3b1 100644 (file)
Binary files a/numfriends.tgz and b/numfriends.tgz differ
index e54b0c787525150e39ab29c1eb5c072c2ce2f4ec..64a55d813223801f2f8fb5ea543eabd205853029 100644 (file)
Binary files a/openstreetmap.tgz and b/openstreetmap.tgz differ
index 2dfa6785e6c2253a85e4c2bb502a8e981fa5fd4b..876d37e400b36711ff92d02129d9aebdc5983817 100755 (executable)
Binary files a/pageheader.tgz and b/pageheader.tgz differ
diff --git a/pages.tgz b/pages.tgz
new file mode 100644 (file)
index 0000000..7be170a
Binary files /dev/null and b/pages.tgz differ
diff --git a/pages/README b/pages/README
new file mode 100755 (executable)
index 0000000..6ec314b
--- /dev/null
@@ -0,0 +1,3 @@
+Pages
+
+Shows lists of community pages
diff --git a/pages/pages.php b/pages/pages.php
new file mode 100755 (executable)
index 0000000..bc56d2e
--- /dev/null
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Name: Pages
+ * Description: Shows lists of community pages
+ * Version: 1.0
+ * Author: Michael Vogel <ike@piratenpartei.de>
+ *
+ */
+
+function pages_install() {
+       register_hook('page_end', 'addon/pages/pages.php', 'pages_page_end');
+}
+
+function pages_uninstall() {
+       unregister_hook('page_end', 'addon/pages/pages.php', 'pages_page_end');
+}
+
+function pages_iscommunity($url, &$pagelist) {
+       // check every week for the status - should be enough
+       if ($pagelist[$url]["checked"]<time()-86400*7) {
+               // When too old or not found fetch the status from the profile
+               $ch = curl_init();
+
+               $url = str_replace("/profile/","/hcard/", $url);
+
+               curl_setopt($ch, CURLOPT_URL, $url);
+               curl_setopt($ch, CURLOPT_HEADER, 0);
+               curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+               curl_setopt($ch, CURLOPT_TIMEOUT, 2);
+               $page = curl_exec($ch);
+               curl_close($ch);
+
+               $iscommunity = (strpos($page, '<meta name="friendika.community" content="true" />') != 0);
+
+               $pagelist[$url] = array("community" => $iscommunity, "checked" => time());
+       } else // Fetch from cache
+               $iscommunity = $pagelist[$url]["community"];
+       return($iscommunity);
+}
+
+function pages_getpages($uid) {
+
+       // Fetch cached pagelist from configuration
+       $pagelist = get_pconfig($uid,'pages','pagelist');
+
+       if (sizeof($pagelist) == 0)
+               $pagelist = array();
+
+       $contacts = q("SELECT `id`, `url`, `Name` FROM `contact`
+                       WHERE `network`= 'dfrn' AND `uid` = %d",
+                       intval($uid));
+
+       $pages = array();
+
+       // Look if the profile is a community page
+       foreach($contacts as $contact) {
+               if (pages_iscommunity($contact["url"], $pagelist))
+                       $pages[] = array("url"=>$contact["url"], "Name"=>$contact["Name"], "id"=>$contact["id"]);
+       }
+
+       // Write back cached pagelist
+       set_pconfig($uid,'pages','pagelist', $pagelist);
+       return($pages);
+}
+
+function pages_page_end($a,&$b) {
+       // Only move on if if it's the "network" module and there is a logged on user
+       if (($a->module != "network") OR ($a->user['uid'] == 0))
+               return;
+
+       $pages = '<div id="pages-sidebar" class="widget">
+                       <div class="title tool">
+                       <h3>'.t("Community").'</h3></div>
+                       <div id="sidebar-pages-list"><ul>';
+
+       $contacts = pages_getpages($a->user['uid']);
+
+       foreach($contacts as $contact) {
+               $pages .= '<li class="tool"><a href="'.$a->get_baseurl().'/redir/'.$contact["id"].'" class="label" target="external-link">'.
+                               $contact["Name"]."</a></li>";
+       }
+       $pages .= "</ul></div></div>";
+       if (sizeof($contacts) > 0)
+               $a->page['aside'] = $pages.$a->page['aside'];
+}
+?>
index 65c92244a6d4f3f3dcf323f94d30e3c5bc523613..febb641ea4d3d441b9d25776533d74896490b082 100755 (executable)
Binary files a/piwik.tgz and b/piwik.tgz differ
index 24a862f40599b8290146607068636b2a9695ddab..cdf40ee10446f5fc65c2eec75dddb7ca61f2b8ba 100755 (executable)
Binary files a/poormancron.tgz and b/poormancron.tgz differ
index 3dcc536d6b0550b4012f495d8fa73e5f2ca96ec1..886435132b2414a41fad54fcda6f9e9d39a3480a 100755 (executable)
Binary files a/posterous.tgz and b/posterous.tgz differ
index 76dffda1c46b5eac43e558fa50e9ffa378a801e4..dfb423b4b157dfb81848e49918077a58a31c24bd 100644 (file)
Binary files a/qcomment.tgz and b/qcomment.tgz differ
index 45e6332ef3603f5a0da6b74fe3da26608d9a5175..6b37257995412748a71daf5548a6dafdef912b6c 100755 (executable)
@@ -53,6 +53,7 @@ function qcomment_addon_settings(&$a,&$s) {
     $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>';
index 98b28a9dc2b10fc991cd80437d707bd1119242dd..931781d060a9feb147a03a43f7a5659fd8e874e2 100755 (executable)
Binary files a/randplace.tgz and b/randplace.tgz differ
index ef095853da395fcca0a0aee3f56d0a3bd6f08124..6c2203a15b96292b5190a255f3d90ff05a3a895d 100644 (file)
Binary files a/showmore.tgz and b/showmore.tgz differ
index 369fcf6da7e636d955364aa283050a6f0defaf81..fa75b3e40f426248d299f2e9e3b2b23090eb5ed6 100755 (executable)
Binary files a/sniper.tgz and b/sniper.tgz differ
index 05d56d88222be4e8b1c0154f2493d4fcdb54534f..1984cdbafe7128fd844cf41f6125616525afb20d 100755 (executable)
Binary files a/statusnet.tgz and b/statusnet.tgz differ
index d92e8e952100c2f4387770f5d93b3381c72efff8..22b058e626e85698209e1224a4f7b9de59b4dfb0 100755 (executable)
Binary files a/tictac.tgz and b/tictac.tgz differ
index a0c2e61939042385fd3d854f5692c0b465588da5..b97ba171a8ba9fa089655ced91d6d51fbfb6da80 100755 (executable)
Binary files a/tumblr.tgz and b/tumblr.tgz differ
index e3fbdec50cd041db5154c1a6d883b4341b6151a2..18416d1f638db3eeebfe9077aa1b999d01bcfad8 100755 (executable)
Binary files a/twitter.tgz and b/twitter.tgz differ
index fd0324635fa5c407eb65a98b08e814297b570d0e..4f4d72808bc3c4aae3aab149138a407493bd825e 100755 (executable)
@@ -1,7 +1,7 @@
 <?php
 /**
  * Name: Twitter Connector
- * Description: Relay public postings to a connected StatusNet account
+ * Description: Relay public postings to a connected Twitter account
  * Version: 1.0.2
  * Author: Tobias Diekershoff <https://diekershoff.homeunix.net/friendika/profile/tobias>
  */
@@ -288,7 +288,7 @@ function twitter_post_hook(&$a,&$b) {
                 // 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 
+                // we can later send to Twitter. This way we can "gain" some 
                 // information during shortening of potential links but do not 
                 // shorten all the links in a 200000 character long essay.
                 $tmp = substr($b['body'], 0, 2*$max_char);
index 055fa76e50543f66100a49fc239f6d0e0304924d..4aa58096d8ce8de26c9e0fa783fb64922bdb1ea2 100755 (executable)
Binary files a/uhremotestorage.tgz and b/uhremotestorage.tgz differ
index 2aa7d0fe110696d747247fdf2669d8c10680e095..4717ab05bf134e9d2d32822543342315101a8dbe 100644 (file)
Binary files a/viewsrc.tgz and b/viewsrc.tgz differ
index 416f08cb1256501c714f94fd4d78f994854231bb..c1d96048590adb215747e7cb8e85518b125f8528 100755 (executable)
Binary files a/widgets.tgz and b/widgets.tgz differ
index 6dad5c117973a78a07fc7ea29a3b82d21bed43aa..221943355a96060e6f4205754d05e37a9ec5c826 100755 (executable)
Binary files a/wppost.tgz and b/wppost.tgz differ
index 5c1482e7864c46f07e69db795ae1d703eddd4b88..264a342c0c0733c5934b218bb0f9646984e3257b 100755 (executable)
@@ -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 2385fd2095fa1b8898699d834ec3d3fba73433c9..d0d2523f8c2f4a6836303de68fcaa98c33674470 100755 (executable)
Binary files a/yourls.tgz and b/yourls.tgz differ