diff --git a/adult_smile.tgz b/adult_smile.tgz new file mode 100644 index 000000000..67e2a31ef 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 index 000000000..465741431 --- /dev/null +++ b/adult_smile/adult_smile.php @@ -0,0 +1,34 @@ + + * + * 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'][] = '' . '(o)(o)' . ''; + + $b['texts'][] = '(.)(.)'; + $b['icons'][] = '' . '(.)(.)' . ''; + + $b['texts'][] = ':bong'; + $b['icons'][] = '' . ':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 index 000000000..4b6712267 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 index 000000000..4c1658c50 Binary files /dev/null and b/adult_smile/icons/tits.gif differ diff --git a/blackout.tgz b/blackout.tgz index 2c0f6cf7e..ef87ed74b 100644 Binary files a/blackout.tgz and b/blackout.tgz differ diff --git a/blockem.tgz b/blockem.tgz index 129a00652..dd092204f 100755 Binary files a/blockem.tgz and b/blockem.tgz differ diff --git a/blockem/blockem.php b/blockem/blockem.php index 43f34554e..9134bd0b6 100755 --- a/blockem/blockem.php +++ b/blockem/blockem.php @@ -101,15 +101,15 @@ function blockem_prepare_body(&$a,&$b) { } } if($found) { - $rnd = random_string(8); + $rnd = random_string(8); $b['html'] = ''; } } function blockem_display_item(&$a,&$b) { - if(strstr($b['output'],'id="blockem-wrap-')) - $b['output'] = preg_replace('/\/','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 +} diff --git a/buglink.tgz b/buglink.tgz index fce2e54ca..171a17e9c 100755 Binary files a/buglink.tgz and b/buglink.tgz differ diff --git a/calc.tgz b/calc.tgz index a849ef0e9..002917c46 100755 Binary files a/calc.tgz and b/calc.tgz differ diff --git a/communityhome.tgz b/communityhome.tgz index b08abd2ec..b08f2e568 100755 Binary files a/communityhome.tgz and b/communityhome.tgz differ diff --git a/communityhome/twillingham/README b/communityhome/twillingham/README new file mode 100644 index 000000000..bb5742785 --- /dev/null +++ b/communityhome/twillingham/README @@ -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 index 000000000..102732acd --- /dev/null +++ b/communityhome/twillingham/communityhome.php @@ -0,0 +1,107 @@ + + */ + + +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'] .= ''; + + $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'); + +} diff --git a/convert.tgz b/convert.tgz index c522abe1d..56e0080c3 100755 Binary files a/convert.tgz and b/convert.tgz differ diff --git a/dwpost.tar.gz b/dwpost.tar.gz deleted file mode 100644 index d22d966e8..000000000 Binary files a/dwpost.tar.gz and /dev/null differ diff --git a/dwpost.tgz b/dwpost.tgz new file mode 100644 index 000000000..ecbb5198f Binary files /dev/null and b/dwpost.tgz differ diff --git a/dwpost/dwpost.php b/dwpost/dwpost.php index bb4557269..85e808c0d 100644 --- a/dwpost/dwpost.php +++ b/dwpost/dwpost.php @@ -6,6 +6,7 @@ * Version: 1.0 * Author: Tony Baldwin * Author: Michael Johnston + * Author: Cat Gray */ 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) { props useragentFriendica -taglistfriendica +taglist$tags @@ -217,3 +219,9 @@ EOT; } } +function dwpost_get_tags($post) +{ + preg_match_all("/\]([^\[#]+)\[/",$post,$matches); + $tags = implode(', ',$matches[1]); + return $tags; +} diff --git a/editplain.tgz b/editplain.tgz index c99c7f63b..be8131774 100644 Binary files a/editplain.tgz and b/editplain.tgz differ diff --git a/extcron.tgz b/extcron.tgz index 30c0f7e39..0e5b28929 100755 Binary files a/extcron.tgz and b/extcron.tgz differ diff --git a/facebook.tgz b/facebook.tgz index 2cb406a1a..783425ced 100644 Binary files a/facebook.tgz and b/facebook.tgz differ diff --git a/facebook/README b/facebook/README index 9e381e7dc..9687558e7 100755 --- a/facebook/README +++ b/facebook/README @@ -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 diff --git a/facebook/facebook.php b/facebook/facebook.php index 6b6c7f844..4524a4865 100755 --- a/facebook/facebook.php +++ b/facebook/facebook.php @@ -1,8 +1,9 @@ + * Tobias Hößl */ /** @@ -31,7 +32,10 @@ * 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,9 +231,130 @@ function fb_get_self($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) == 0) { + logger('fb_get_friends: new contact found: ' . $link, LOGGER_DEBUG); + + fb_get_friends_sync_full($uid, $access_token, $person); + } +} +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) { + $jp = json_decode($s); + logger('fb_get_friends: info: ' . print_r($jp,true), LOGGER_DATA); -function fb_get_friends($uid) { + // always use numeric link for consistency + + $jp->link = 'http://facebook.com/profile.php?id=' . $person->id; + + // 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) + ); + + 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']) + ); + } + 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) @@ -165,111 +377,11 @@ function fb_get_friends($uid) { 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; - - // 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) - ); - - 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 { - - // 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)) { - continue; - } - - $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) - ); - - } - } + 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.') . '

'; + $o .= ''; + } else { + $o = t('Real-Time Updates not activated.') . '
'; + } +} + +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 diff --git a/geonames.tgz b/geonames.tgz index 9467ebaa4..952a7602f 100644 Binary files a/geonames.tgz and b/geonames.tgz differ diff --git a/gnot.tgz b/gnot.tgz index fbf7f2672..8d9fcd3c6 100644 Binary files a/gnot.tgz and b/gnot.tgz differ diff --git a/impressum.tgz b/impressum.tgz index a8ea7ee02..4f8ab29f4 100755 Binary files a/impressum.tgz and b/impressum.tgz differ diff --git a/irc.tar.gz b/irc.tar.gz deleted file mode 100644 index 82c3baab8..000000000 Binary files a/irc.tar.gz and /dev/null differ diff --git a/irc.tgz b/irc.tgz new file mode 100644 index 000000000..999c8d212 Binary files /dev/null and b/irc.tgz differ diff --git a/js_upload.tgz b/js_upload.tgz index fe51b8aea..7b684103e 100755 Binary files a/js_upload.tgz and b/js_upload.tgz differ diff --git a/ldapauth.tgz b/ldapauth.tgz index 28bbed624..c308e7ea2 100755 Binary files a/ldapauth.tgz and b/ldapauth.tgz differ diff --git a/ljpost.tar.gz b/ljpost.tar.gz deleted file mode 100644 index b3f354fc3..000000000 Binary files a/ljpost.tar.gz and /dev/null differ diff --git a/ljpost.tgz b/ljpost.tgz new file mode 100644 index 000000000..21ec1915e Binary files /dev/null and b/ljpost.tgz differ diff --git a/ljpost/ljpost.css b/ljpost/ljpost.css old mode 100644 new mode 100755 index 8edab3d99..2087d3f05 --- a/ljpost/ljpost.css +++ b/ljpost/ljpost.css @@ -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 diff --git a/ljpost/ljpost.php b/ljpost/ljpost.php old mode 100644 new mode 100755 index 14bac69e3..ddcd28907 --- a/ljpost/ljpost.php +++ b/ljpost/ljpost.php @@ -6,6 +6,7 @@ * Version: 1.0 * Author: Tony Baldwin * Author: Michael Johnston + * Author: Cat Gray */ 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 -LJ.XMLRPC.postevent - - -year$year -mon$mon -day$day -hour$hour -min$min -usejournal$lj_username -event$post -username$lj_username -password$lj_password -subject$title -lineendingsunix -ver1 -props - -useragentFriendica -taglistfriendica - - - + + LJ.XMLRPC.postevent + + + + username$lj_username + password$lj_password + event$post + subject$title + lineendingsunix + year$year + mon$mon + day$day + hour$hour + min$min + usejournal$lj_username + + props + + + + useragent + Friendica + + + taglist + $tags + + + + + + + EOT; @@ -218,3 +238,9 @@ EOT; } } +function ljpost_get_tags($post) +{ + preg_match_all("/\]([^\[#]+)\[/",$post,$matches); + $tags = implode(', ',$matches[1]); + return $tags; +} diff --git a/membersince.tgz b/membersince.tgz index f1310f4a3..85acb560b 100755 Binary files a/membersince.tgz and b/membersince.tgz differ diff --git a/mibbit.tar.gz b/mibbit.tar.gz deleted file mode 100644 index 6b0a386b4..000000000 Binary files a/mibbit.tar.gz and /dev/null differ diff --git a/mibbit/mibbit.php b/mibbit/mibbit.php deleted file mode 100755 index 90f322c39..000000000 --- a/mibbit/mibbit.php +++ /dev/null @@ -1,65 +0,0 @@ - - */ - - -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'][] = ''; -} - - -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 .= '

chat

'; - $o .= '
'; - $o .= ''; - $o .= '
(no spaces, interpunctuation or leading ciphers in your /nick name)'; - $o .= '

type /help to learn about special commands

'; - $o .= '

' - -} diff --git a/nsfw.tgz b/nsfw.tgz index 8a1e3a3ca..b7caadbd4 100755 Binary files a/nsfw.tgz and b/nsfw.tgz differ diff --git a/numfriends.tgz b/numfriends.tgz index df4725803..61196a542 100644 Binary files a/numfriends.tgz and b/numfriends.tgz differ diff --git a/openstreetmap.tgz b/openstreetmap.tgz index e54b0c787..64a55d813 100644 Binary files a/openstreetmap.tgz and b/openstreetmap.tgz differ diff --git a/pageheader.tgz b/pageheader.tgz index 2dfa6785e..876d37e40 100755 Binary files a/pageheader.tgz and b/pageheader.tgz differ diff --git a/pages.tgz b/pages.tgz new file mode 100644 index 000000000..7be170afa Binary files /dev/null and b/pages.tgz differ diff --git a/pages/README b/pages/README new file mode 100755 index 000000000..6ec314b70 --- /dev/null +++ b/pages/README @@ -0,0 +1,3 @@ +Pages + +Shows lists of community pages diff --git a/pages/pages.php b/pages/pages.php new file mode 100755 index 000000000..bc56d2e4e --- /dev/null +++ b/pages/pages.php @@ -0,0 +1,88 @@ + + * + */ + +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"]') != 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 = '
+
+

'.t("Community").'

+
"; + if (sizeof($contacts) > 0) + $a->page['aside'] = $pages.$a->page['aside']; +} +?> diff --git a/piwik.tgz b/piwik.tgz index 65c92244a..febb641ea 100755 Binary files a/piwik.tgz and b/piwik.tgz differ diff --git a/poormancron.tgz b/poormancron.tgz index 24a862f40..cdf40ee10 100755 Binary files a/poormancron.tgz and b/poormancron.tgz differ diff --git a/posterous.tgz b/posterous.tgz index 3dcc536d6..886435132 100755 Binary files a/posterous.tgz and b/posterous.tgz differ diff --git a/qcomment.tgz b/qcomment.tgz index 76dffda1c..dfb423b4b 100644 Binary files a/qcomment.tgz and b/qcomment.tgz differ diff --git a/qcomment/qcomment.php b/qcomment/qcomment.php index 45e6332ef..6b3725799 100755 --- a/qcomment/qcomment.php +++ b/qcomment/qcomment.php @@ -53,6 +53,7 @@ function qcomment_addon_settings(&$a,&$s) { $s .= '
'; $s .= '

' . t('Quick Comment Settings') . '

'; $s .= '
'; + $s .= '
' . t("Quick comments are found near comment boxes, sometimes hidden. Click them to provide simple replies.") . '
'; $s .= ''; $s .= ''; $s .= '
'; diff --git a/randplace.tgz b/randplace.tgz index 98b28a9dc..931781d06 100755 Binary files a/randplace.tgz and b/randplace.tgz differ diff --git a/showmore.tgz b/showmore.tgz index ef095853d..6c2203a15 100644 Binary files a/showmore.tgz and b/showmore.tgz differ diff --git a/sniper.tgz b/sniper.tgz index 369fcf6da..fa75b3e40 100755 Binary files a/sniper.tgz and b/sniper.tgz differ diff --git a/statusnet.tgz b/statusnet.tgz index 05d56d882..1984cdbaf 100755 Binary files a/statusnet.tgz and b/statusnet.tgz differ diff --git a/tictac.tgz b/tictac.tgz index d92e8e952..22b058e62 100755 Binary files a/tictac.tgz and b/tictac.tgz differ diff --git a/tumblr.tgz b/tumblr.tgz index a0c2e6193..b97ba171a 100755 Binary files a/tumblr.tgz and b/tumblr.tgz differ diff --git a/twitter.tgz b/twitter.tgz index e3fbdec50..18416d1f6 100755 Binary files a/twitter.tgz and b/twitter.tgz differ diff --git a/twitter/twitter.php b/twitter/twitter.php index fd0324635..4f4d72808 100755 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -1,7 +1,7 @@ */ @@ -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); diff --git a/uhremotestorage.tgz b/uhremotestorage.tgz index 055fa76e5..4aa58096d 100755 Binary files a/uhremotestorage.tgz and b/uhremotestorage.tgz differ diff --git a/viewsrc.tgz b/viewsrc.tgz index 2aa7d0fe1..4717ab05b 100644 Binary files a/viewsrc.tgz and b/viewsrc.tgz differ diff --git a/widgets.tgz b/widgets.tgz index 416f08cb1..c1d960485 100755 Binary files a/widgets.tgz and b/widgets.tgz differ diff --git a/wppost.tgz b/wppost.tgz index 6dad5c117..221943355 100755 Binary files a/wppost.tgz and b/wppost.tgz differ diff --git a/wppost/wppost.php b/wppost/wppost.php index 5c1482e78..264a342c0 100755 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -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 - - + blogger.newPost @@ -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); } } diff --git a/yourls.tgz b/yourls.tgz index 2385fd209..d0d2523f8 100755 Binary files a/yourls.tgz and b/yourls.tgz differ