From: fabrixxm Date: Wed, 19 Oct 2011 09:53:00 +0000 (-0700) Subject: Merge pull request #5 from fabrixxm/master X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=97cdca14c46fdda12fa56dd16566f7b08745cfb9;hp=a3eb7268aeafbc12e081f94c41c4e08b6e3b7ccc;p=friendica-addons.git Merge pull request #5 from fabrixxm/master use iframe in widget plugin --- diff --git a/calc/calc.php b/calc/calc.php index 8c079dc7..a299d45e 100644 --- a/calc/calc.php +++ b/calc/calc.php @@ -17,7 +17,7 @@ function calc_uninstall() { } function calc_app_menu($a,&$b) { - $b['app_menu'] .= '
Calculator
'; + $b['app_menu'][] = '
Calculator
'; } diff --git a/convert/convert.php b/convert/convert.php index 7a4c90a5..75131650 100644 --- a/convert/convert.php +++ b/convert/convert.php @@ -15,7 +15,7 @@ function convert_uninstall() { } function convert_app_menu($a,&$b) { - $b['app_menu'] .= '
Units Conversion
'; + $b['app_menu'][] = '
Units Conversion
'; } diff --git a/facebook.tgz b/facebook.tgz index 05c7c735..6acb8c5c 100644 Binary files a/facebook.tgz and b/facebook.tgz differ diff --git a/facebook/facebook.php b/facebook/facebook.php index 7ffdaffa..22cefc03 100644 --- a/facebook/facebook.php +++ b/facebook/facebook.php @@ -48,20 +48,26 @@ define('FACEBOOK_MAXPOSTLEN', 420); function facebook_install() { - register_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook'); + register_hook('post_local', 'addon/facebook/facebook.php', 'facebook_post_local'); + register_hook('notifier_normal', 'addon/facebook/facebook.php', 'facebook_post_hook'); register_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets'); - register_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); + 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'); } function facebook_uninstall() { - unregister_hook('post_local_end', 'addon/facebook/facebook.php', 'facebook_post_hook'); + unregister_hook('post_local', 'addon/facebook/facebook.php', 'facebook_post_local'); + unregister_hook('notifier_normal', 'addon/facebook/facebook.php', 'facebook_post_hook'); unregister_hook('jot_networks', 'addon/facebook/facebook.php', 'facebook_jot_nets'); - unregister_hook('plugin_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); + unregister_hook('connector_settings', 'addon/facebook/facebook.php', 'facebook_plugin_settings'); unregister_hook('cron', 'addon/facebook/facebook.php', 'facebook_cron'); unregister_hook('queue_predeliver', 'addon/facebook/facebook.php', 'fb_queue_hook'); + + // 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'); } @@ -428,6 +434,16 @@ function facebook_cron($a,$b) { foreach($r as $rr) { if(get_pconfig($rr['uid'],'facebook','no_linking')) continue; + $ab = intval(get_config('system','account_abandon_days')); + if($ab > 0) { + $z = q("SELECT `uid` FROM `user` WHERE `uid` = %d AND `login_date` > UTC_TIMESTAMP() - INTERVAL %d DAY LIMIT 1", + intval($rr['uid']), + intval($ab) + ); + if(! count($z)) + continue; + } + // check for new friends once a day $last_friend_check = get_pconfig($rr['uid'],'facebook','friend_check'); if($last_friend_check) @@ -471,6 +487,10 @@ function facebook_jot_nets(&$a,&$b) { function facebook_post_hook(&$a,&$b) { + + if($b['deleted'] || ($b['created'] !== $b['edited'])) + return; + /** * Post to Facebook stream */ @@ -482,18 +502,16 @@ function facebook_post_hook(&$a,&$b) { $reply = false; $likes = false; - if((local_user()) && (local_user() == $b['uid'])) { + $toplevel = (($b['id'] == $b['parent']) ? true : false); - // Facebook is not considered a private network - if($b['prvnets'] && $b['private']) - return; + if(strstr($b['postopts'],'facebook')) { - $linking = ((get_pconfig(local_user(),'facebook','no_linking')) ? 0 : 1); + $linking = ((get_pconfig($b['uid'],'facebook','no_linking')) ? 0 : 1); - if(($b['parent']) && ($linking)) { + if((! $toplevel) && ($linking)) { $r = q("SELECT * FROM `item` WHERE `id` = %d AND `uid` = %d LIMIT 1", intval($b['parent']), - intval(local_user()) + intval($b['uid']) ); if(count($r) && substr($r[0]['uri'],0,4) === 'fb::') $reply = substr($r[0]['uri'],4); @@ -561,24 +579,14 @@ function facebook_post_hook(&$a,&$b) { logger('facebook: have appid+secret'); - $fb_post = intval(get_pconfig(local_user(),'facebook','post')); - $fb_enable = (($fb_post && x($_POST,'facebook_enable')) ? intval($_POST['facebook_enable']) : 0); - $fb_token = get_pconfig(local_user(),'facebook','access_token'); - - // if API is used, default to the chosen settings - if($_POST['api_source'] && intval(get_pconfig(local_user(),'facebook','post_by_default'))) - $fb_enable = 1; - - + $fb_token = get_pconfig($b['uid'],'facebook','access_token'); - logger('facebook: $fb_post: ' . $fb_post . ' $fb_enable: ' . $fb_enable . ' $fb_token: ' . $fb_token,LOGGER_DEBUG); - // post to facebook if it's a public post and we've ticked the 'post to Facebook' box, // or it's a private message with facebook participants // or it's a reply or likes action to an existing facebook post - if($fb_post && $fb_token && ($fb_enable || $b['private'] || $reply)) { + if($fb_token && ($toplevel || $b['private'] || $reply)) { logger('facebook: able to post'); require_once('library/facebook.php'); require_once('include/bbcode.php'); @@ -731,6 +739,32 @@ function facebook_post_hook(&$a,&$b) { } +function facebook_post_local(&$a,&$b) { + + // Figure out if Facebook posting is enabled for this post and file it in 'postopts' + // where we will discover it during background delivery. + + // This can only be triggered by a local user posting to their own wall. + + if((local_user()) && (local_user() == $b['uid'])) { + + $fb_post = intval(get_pconfig(local_user(),'facebook','post')); + $fb_enable = (($fb_post && x($_POST,'facebook_enable')) ? intval($_POST['facebook_enable']) : 0); + + // if API is used, default to the chosen settings + if($_POST['api_source'] && intval(get_pconfig(local_user(),'facebook','post_by_default'))) + $fb_enable = 1; + + if(! $fb_enable) + return; + + if(strlen($b['postopts'])) + $b['postopts'] .= ','; + $b['postopts'] .= 'facebook'; + } +} + + function fb_queue_hook(&$a,&$b) { $qi = q("SELECT * FROM `queue` WHERE `network` = '%s'", diff --git a/js_upload.tgz b/js_upload.tgz index bfbbab6e..96afb12e 100644 Binary files a/js_upload.tgz and b/js_upload.tgz differ diff --git a/js_upload/js_upload.php b/js_upload/js_upload.php index 1996b850..c529be36 100644 --- a/js_upload/js_upload.php +++ b/js_upload/js_upload.php @@ -96,6 +96,7 @@ function createUploader() { uploader.setParams( { newalbum : document.getElementById('photos-upload-newalbum').value, album : document.getElementById('photos-upload-album-select').value, + not_visible : document.getElementById('photos-upload-noshare').checked, group_allow : acl.allow_gid.join(','), contact_allow : acl.allow_cid.join(','), group_deny : acl.deny_gid.join(','), @@ -105,6 +106,7 @@ function createUploader() { uploader.setParams( { newalbum : document.getElementById('photos-upload-newalbum').value, album : document.getElementById('photos-upload-album-select').value, + not_visible : document.getElementById('photos-upload-noshare').checked, group_allow : getSelected(document.getElementById('group_allow')).join(','), contact_allow : getSelected(document.getElementById('contact_allow')).join(','), group_deny : getSelected(document.getElementById('group_deny')).join(','), diff --git a/membersince.tgz b/membersince.tgz new file mode 100644 index 00000000..fb44b008 Binary files /dev/null and b/membersince.tgz differ diff --git a/membersince/membersince.php b/membersince/membersince.php new file mode 100644 index 00000000..25d1207c --- /dev/null +++ b/membersince/membersince.php @@ -0,0 +1,17 @@ + + * + */ + +require_once('include/datetime.php'); + +function membersince_install(){ register_hook('profile_advanced','addon/membersince/membersince.php','membersince_display'); } + +function membersince_uninstall(){ unregister_hook('profile_advanced','addon/membersince/membersince.php','membersince_display'); } + +function membersince_display(&$a,&$b) { $b = str_replace('' . "\n" . '
',sprintf( t(' - Member since: %s') . EOL, datetime_convert('UTC',date_default_timezone_get(),$a->profile['register_date'])) . '' . "\n" . '
',$b); } \ No newline at end of file diff --git a/nsfw.tgz b/nsfw.tgz new file mode 100644 index 00000000..e7c959e8 Binary files /dev/null and b/nsfw.tgz differ diff --git a/nsfw/README b/nsfw/README new file mode 100644 index 00000000..cf2dc262 --- /dev/null +++ b/nsfw/README @@ -0,0 +1,8 @@ +NSFW + +"Not safe for work" + +Scans the message content for the string 'nsfw' +(case insensitive) and if found replaces the content +with a "click to open/close" link, default is closed. + diff --git a/nsfw/nsfw.css b/nsfw/nsfw.css new file mode 100644 index 00000000..548b63ae --- /dev/null +++ b/nsfw/nsfw.css @@ -0,0 +1,16 @@ + +#nsfw-label { + float: left; + width: 300px; + margin-top: 10px; +} + +#nsfw-words { + float: left; + margin-top: 10px; +} + +#nsfw-submit { + margin-top: 15px; +} + diff --git a/nsfw/nsfw.php b/nsfw/nsfw.php new file mode 100644 index 00000000..dba9f1e8 --- /dev/null +++ b/nsfw/nsfw.php @@ -0,0 +1,100 @@ + + * + */ + +function nsfw_install() { + register_hook('prepare_body', 'addon/nsfw/nsfw.php', 'nsfw_prepare_body'); + register_hook('plugin_settings', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings'); + register_hook('plugin_settings_post', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings_post'); + +} + + +function nsfw_uninstall() { + unregister_hook('prepare_body', 'addon/nsfw/nsfw.php', 'nsfw_prepare_body'); + unregister_hook('plugin_settings', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings'); + unregister_hook('plugin_settings_post', 'addon/nsfw/nsfw.php', 'nsfw_addon_settings_post'); + +} + + + + + +function nsfw_addon_settings(&$a,&$s) { + + + if(! local_user()) + return; + + /* Add our stylesheet to the page so we can make our settings look nice */ + + $a->page['htmlhead'] .= '' . "\r\n"; + + + $words = get_pconfig(local_user(),'nsfw','words'); + if(! $words) + $words = 'nsfw,'; + + $s .= '
'; + $s .= '

' . t('"Not Safe For Work" Settings') . '

'; + $s .= '
'; + $s .= ''; + $s .= ''; + $s .= '
'; + + $s .= '
'; + + return; + +} + +function nsfw_addon_settings_post(&$a,&$b) { + + if(! local_user()) + return; + + if($_POST['nsfw-submit']) { + set_pconfig(local_user(),'nsfw','words',trim($_POST['nsfw-words'])); + info( t('NSFW Settings saved.') . EOL); + } +} + +function nsfw_prepare_body(&$a,&$b) { + + $words = null; + if(local_user()) { + $words = get_pconfig(local_user(),'nsfw','words'); + } + if($words) { + $arr = explode(',',$words); + } + else { + $arr = array('nsfw'); + } + + $found = false; + if(count($arr)) { + foreach($arr as $word) { + if(! strlen(trim($word))) { + continue; + } + + if(stristr($b,$word)) { + $found = true; + break; + } + } + } + if($found) { + $rnd = random_string(8); + $b = ''; + } +} diff --git a/sniper/sniper.php b/sniper/sniper.php index 8d31e9cd..cdb5c502 100644 --- a/sniper/sniper.php +++ b/sniper/sniper.php @@ -16,7 +16,7 @@ function sniper_uninstall() { } function sniper_app_menu($a,&$b) { - $b['app_menu'] .= '
Hot Shot Sniper
'; + $b['app_menu'][] = '
Hot Shot Sniper
'; } diff --git a/statusnet.tgz b/statusnet.tgz index d6bd821f..21c3fec5 100644 Binary files a/statusnet.tgz and b/statusnet.tgz differ diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index 25b52108..51caba10 100644 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -106,19 +106,27 @@ class StatusNetOAuth extends TwitterOAuth { function statusnet_install() { // we need some hooks, for the configuration and for sending tweets - register_hook('plugin_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); - register_hook('plugin_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); - register_hook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); + register_hook('connector_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); + register_hook('connector_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); + register_hook('notifier_normal', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); + register_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); register_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); logger("installed statusnet"); } function statusnet_uninstall() { + unregister_hook('connector_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); + unregister_hook('connector_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); + unregister_hook('notifier_normal', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); + unregister_hook('post_local', 'addon/statusnet/statusnet.php', 'statusnet_post_local'); + unregister_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); + + // old setting - remove only + unregister_hook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); unregister_hook('plugin_settings', 'addon/statusnet/statusnet.php', 'statusnet_settings'); unregister_hook('plugin_settings_post', 'addon/statusnet/statusnet.php', 'statusnet_settings_post'); - unregister_hook('post_local_end', 'addon/statusnet/statusnet.php', 'statusnet_post_hook'); - unregister_hook('jot_networks', 'addon/statusnet/statusnet.php', 'statusnet_jot_nets'); + } function statusnet_jot_nets(&$a,&$b) { @@ -347,72 +355,77 @@ function statusnet_settings(&$a,&$s) { } +function statusnet_post_local(&$a,&$b) { + if($b['edit']) + return; + + if((local_user()) && (local_user() == $b['uid']) && (! $b['private'])) { + + $statusnet_post = get_pconfig(local_user(),'statusnet','post'); + $statusnet_enable = (($statusnet_post && x($_POST,'statusnet_enable')) ? intval($_POST['statusnet_enable']) : 0); + + // if API is used, default to the chosen settings + if($_POST['api_source'] && intval(get_pconfig(local_user(),'statusnet','post_by_default'))) + $statusnet_enable = 1; + + if(! $statusnet_enable) + return; + + if(strlen($b['postopts'])) + $b['postopts'] .= ','; + $b['postopts'] .= 'statusnet'; + } +} + function statusnet_post_hook(&$a,&$b) { /** * Post to statusnet */ - logger('StatusNet post invoked'); + if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) + return; - if((local_user()) && (local_user() == $b['uid']) && (! $b['private'])) { + if(! strstr($b['postopts'],'statusnet')) + return; - // mike 2-9-11 there was a restriction to only allow this for top level posts - // now relaxed so should allow one's own comments to be forwarded through the connector as well. + logger('StatusNet post invoked'); - // Status.Net is not considered a private network - if($b['prvnets']) - return; - load_pconfig(local_user(), 'statusnet'); + load_pconfig($b['uid'], 'statusnet'); - $api = get_pconfig(local_user(), 'statusnet', 'baseapi'); - $ckey = get_pconfig(local_user(), 'statusnet', 'consumerkey' ); - $csecret = get_pconfig(local_user(), 'statusnet', 'consumersecret' ); - $otoken = get_pconfig(local_user(), 'statusnet', 'oauthtoken' ); - $osecret = get_pconfig(local_user(), 'statusnet', 'oauthsecret' ); - - if($ckey && $csecret && $otoken && $osecret) { - - $statusnet_post = get_pconfig(local_user(),'statusnet','post'); - $statusnet_enable = (($statusnet_post && x($_POST,'statusnet_enable')) ? intval($_POST['statusnet_enable']) : 0); - // if API is used, default to the chosen settings - if($_POST['api_source'] && intval(get_pconfig(local_user(),'statusnet','post_by_default'))) - $statusnet_enable = 1; - - if($statusnet_enable && $statusnet_post) { - require_once('include/bbcode.php'); - $dent = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret); - $max_char = $dent->get_maxlength(); // max. length for a dent - $msg = strip_tags(bbcode($b['body'])); - // quotes not working - let's try this - $msg = html_entity_decode($msg); - if ( strlen($msg) > $max_char) { - $shortlink = ""; - require_once('library/slinky.php'); - // post url = base url + /display/ + owner + post id - // we construct this from the Owner link and replace - // profile by display - this will cause an error when - // /profile/ is in the owner url twice but I don't - // think this will be very common... - $posturl = str_replace('/profile/','/display/',$b['owner-link']).'/'.$b['id']; - $slinky = new Slinky( $posturl ); - // setup a cascade of shortening services - // try to get a short link from these services - // in the order ur1.ca, trim, id.gd, tinyurl - $slinky->set_cascade( array( new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) ); - $shortlink = $slinky->short(); - // the new message will be shortened such that "... $shortlink" - // will fit into the character limit - $msg = substr($msg, 0, $max_char-strlen($shortlink)-4); - $msg .= '... ' . $shortlink; - } - // and now tweet it :-) - if(strlen($msg)) - $dent->post('statuses/update', array('status' => $msg)); - } + $api = get_pconfig($b['uid'], 'statusnet', 'baseapi'); + $ckey = get_pconfig($b['uid'], 'statusnet', 'consumerkey' ); + $csecret = get_pconfig($b['uid'], 'statusnet', 'consumersecret' ); + $otoken = get_pconfig($b['uid'], 'statusnet', 'oauthtoken' ); + $osecret = get_pconfig($b['uid'], 'statusnet', 'oauthsecret' ); + + if($ckey && $csecret && $otoken && $osecret) { + + require_once('include/bbcode.php'); + $dent = new StatusNetOAuth($api,$ckey,$csecret,$otoken,$osecret); + $max_char = $dent->get_maxlength(); // max. length for a dent + $msg = strip_tags(bbcode($b['body'])); + // quotes not working - let's try this + $msg = html_entity_decode($msg); + if ( strlen($msg) > $max_char) { + $shortlink = ""; + require_once('library/slinky.php'); + $slinky = new Slinky( $b['plink'] ); + // setup a cascade of shortening services + // try to get a short link from these services + // in the order ur1.ca, trim, id.gd, tinyurl + $slinky->set_cascade( array( new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) ); + $shortlink = $slinky->short(); + // the new message will be shortened such that "... $shortlink" + // will fit into the character limit + $msg = substr($msg, 0, $max_char-strlen($shortlink)-4); + $msg .= '... ' . $shortlink; } - } + // and now tweet it :-) + if(strlen($msg)) + $dent->post('statuses/update', array('status' => $msg)); + } } function statusnet_plugin_admin_post(&$a){ diff --git a/tictac/tictac.php b/tictac/tictac.php index d6cec08a..1dd1ccb0 100644 --- a/tictac/tictac.php +++ b/tictac/tictac.php @@ -17,7 +17,7 @@ function tictac_uninstall() { } function tictac_app_menu($a,&$b) { - $b['app_menu'] .= '
' . t('Three Dimensional Tic-Tac-Toe') . '
'; + $b['app_menu'][] = '
' . t('Three Dimensional Tic-Tac-Toe') . '
'; } diff --git a/twitter.tgz b/twitter.tgz index b01692ad..5c1fb361 100644 Binary files a/twitter.tgz and b/twitter.tgz differ diff --git a/twitter/twitter.php b/twitter/twitter.php index 51b55fd0..cf2c7ea1 100644 --- a/twitter/twitter.php +++ b/twitter/twitter.php @@ -43,19 +43,27 @@ function twitter_install() { // we need some hooks, for the configuration and for sending tweets - register_hook('plugin_settings', 'addon/twitter/twitter.php', 'twitter_settings'); - register_hook('plugin_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); - register_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook'); + register_hook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings'); + register_hook('connector_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); + register_hook('post_local', 'addon/twitter/twitter.php', 'twitter_post_local'); + register_hook('notifier_normal', 'addon/twitter/twitter.php', 'twitter_post_hook'); register_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets'); logger("installed twitter"); } function twitter_uninstall() { + unregister_hook('connector_settings', 'addon/twitter/twitter.php', 'twitter_settings'); + unregister_hook('connector_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); + unregister_hook('post_local', 'addon/twitter/twitter.php', 'twitter_post_local'); + unregister_hook('notifier_normal', 'addon/twitter/twitter.php', 'twitter_post_hook'); + unregister_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets'); + + // old setting - remove only + unregister_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook'); unregister_hook('plugin_settings', 'addon/twitter/twitter.php', 'twitter_settings'); unregister_hook('plugin_settings_post', 'addon/twitter/twitter.php', 'twitter_settings_post'); - unregister_hook('post_local_end', 'addon/twitter/twitter.php', 'twitter_post_hook'); - unregister_hook('jot_networks', 'addon/twitter/twitter.php', 'twitter_jot_nets'); + } function twitter_jot_nets(&$a,&$b) { @@ -198,71 +206,82 @@ function twitter_settings(&$a,&$s) { } +function twitter_post_local(&$a,&$b) { + + if($b['edit']) + return; + + if((local_user()) && (local_user() == $b['uid']) && (! $b['private']) && (! $b['parent']) ) { + + $twitter_post = intval(get_pconfig(local_user(),'twitter','post')); + $twitter_enable = (($twitter_post && x($_POST,'twitter_enable')) ? intval($_POST['twitter_enable']) : 0); + + // if API is used, default to the chosen settings + if($_POST['api_source'] && intval(get_pconfig(local_user(),'twitter','post_by_default'))) + $twitter_enable = 1; + + if(! $twitter_enable) + return; + + if(strlen($b['postopts'])) + $b['postopts'] .= ','; + $b['postopts'] .= 'twitter'; + } +} + + function twitter_post_hook(&$a,&$b) { /** * Post to Twitter */ - logger('twitter post invoked'); + if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) + return; - if((local_user()) && (local_user() == $b['uid']) && (! $b['private']) && (! $b['parent']) ) { + if(! strstr($b['postopts'],'twitter')) + return; - // Twitter is not considered a private network - if($b['prvnets']) - return; + if($b['parent'] != $b['id']) + return; + logger('twitter post invoked'); - load_pconfig(local_user(), 'twitter'); - $ckey = get_config('twitter', 'consumerkey' ); - $csecret = get_config('twitter', 'consumersecret' ); - $otoken = get_pconfig(local_user(), 'twitter', 'oauthtoken' ); - $osecret = get_pconfig(local_user(), 'twitter', 'oauthsecret' ); - - if($ckey && $csecret && $otoken && $osecret) { - - $twitter_post = intval(get_pconfig(local_user(),'twitter','post')); - $twitter_enable = (($twitter_post && x($_POST,'twitter_enable')) ? intval($_POST['twitter_enable']) : 0); - - // if API is used, default to the chosen settings - if($_POST['api_source'] && intval(get_pconfig(local_user(),'twitter','post_by_default'))) - $twitter_enable = 1; - - if($twitter_post && $twitter_enable) { - logger('Posting to Twitter', LOGGER_DEBUG); - require_once('library/twitteroauth.php'); - require_once('include/bbcode.php'); - $tweet = new TwitterOAuth($ckey,$csecret,$otoken,$osecret); - $max_char = 140; // max. length for a tweet - $msg = strip_tags(bbcode($b['body'])); - if ( strlen($msg) > $max_char) { - $shortlink = ""; - require_once('library/slinky.php'); - // post url = base url + /display/ + owner + post id - // we construct this from the Owner link and replace - // profile by display - this will cause an error when - // /profile/ is in the owner url twice but I don't - // think this will be very common... - $posturl = str_replace('/profile/','/display/',$b['owner-link']).'/'.$b['id']; - $slinky = new Slinky( $posturl ); - // setup a cascade of shortening services - // try to get a short link from these services - // in the order ur1.ca, trim, id.gd, tinyurl - $slinky->set_cascade( array( new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) ); - $shortlink = $slinky->short(); - // the new message will be shortened such that "... $shortlink" - // will fit into the character limit - $msg = substr($msg, 0, $max_char-strlen($shortlink)-4); - $msg .= '... ' . $shortlink; - } - // and now tweet it :-) - if(strlen($msg)) { - $result = $tweet->post('statuses/update', array('status' => $msg)); - logger('twitter_post returns: ' . $result); - } - - } + load_pconfig($b['uid'], 'twitter'); + + $ckey = get_config('twitter', 'consumerkey' ); + $csecret = get_config('twitter', 'consumersecret' ); + $otoken = get_pconfig($b['uid'], 'twitter', 'oauthtoken' ); + $osecret = get_pconfig($b['uid'], 'twitter', 'oauthsecret' ); + + if($ckey && $csecret && $otoken && $osecret) { + logger('twitter: we have customer key and oauth stuff, going to send.', LOGGER_DEBUG); + + require_once('library/twitteroauth.php'); + require_once('include/bbcode.php'); + $tweet = new TwitterOAuth($ckey,$csecret,$otoken,$osecret); + $max_char = 138; // max. length for a tweet + $msg = strip_tags(bbcode($b['body'])); + if ( strlen($msg) > $max_char) { + logger('Twitter: have to shorten the message to fit 140 chars', LOGGER_DEBUG); + $shortlink = ""; + require_once('library/slinky.php'); + $slinky = new Slinky( $b['plink'] ); + // setup a cascade of shortening services + // try to get a short link from these services + // in the order ur1.ca, trim, id.gd, tinyurl + $slinky->set_cascade( array( new Slinky_UR1ca(), new Slinky_Trim(), new Slinky_IsGd(), new Slinky_TinyURL() ) ); + $shortlink = $slinky->short(); + // the new message will be shortened such that "... $shortlink" + // will fit into the character limit + $msg = substr($msg, 0, $max_char-strlen($shortlink)-4); + $msg .= '... ' . $shortlink; + } + // and now tweet it :-) + if(strlen($msg)) { + $result = $tweet->post('statuses/update', array('status' => $msg)); + logger('twitter_post send', LOGGER_DEBUG); } } } diff --git a/wppost.tgz b/wppost.tgz index 091f1a59..fd0d262b 100644 Binary files a/wppost.tgz and b/wppost.tgz differ diff --git a/wppost/wppost.php b/wppost/wppost.php index 9aac6c38..b987778a 100644 --- a/wppost/wppost.php +++ b/wppost/wppost.php @@ -7,17 +7,25 @@ */ function wppost_install() { - register_hook('post_local_end', 'addon/wppost/wppost.php', 'wppost_send'); - register_hook('jot_networks', 'addon/wppost/wppost.php', 'wppost_jot_nets'); - register_hook('plugin_settings', 'addon/wppost/wppost.php', 'wppost_settings'); - register_hook('plugin_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); + register_hook('post_local', 'addon/wppost/wppost.php', 'wppost_post_local'); + register_hook('notifier_normal', 'addon/wppost/wppost.php', 'wppost_send'); + register_hook('jot_networks', 'addon/wppost/wppost.php', 'wppost_jot_nets'); + register_hook('connector_settings', 'addon/wppost/wppost.php', 'wppost_settings'); + register_hook('connector_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); } function wppost_uninstall() { - unregister_hook('post_local_end', 'addon/wppost/wppost.php', 'wppost_send'); + unregister_hook('post_local', 'addon/wppost/wppost.php', 'wppost_post_local'); + unregister_hook('notifier_normal', 'addon/wppost/wppost.php', 'wppost_send'); unregister_hook('jot_networks', 'addon/wppost/wppost.php', 'wppost_jot_nets'); + unregister_hook('connector_settings', 'addon/wppost/wppost.php', 'wppost_settings'); + unregister_hook('connector_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); + + // obsolete - remove + unregister_hook('post_local_end', 'addon/wppost/wppost.php', 'wppost_send'); unregister_hook('plugin_settings', 'addon/wppost/wppost.php', 'wppost_settings'); unregister_hook('plugin_settings_post', 'addon/wppost/wppost.php', 'wppost_settings_post'); + } @@ -109,23 +117,19 @@ function wppost_settings_post(&$a,&$b) { } +function wppost_post_local(&$a,&$b) { + // This can probably be changed to allow editing by pointing to a different API endpoint - -function wppost_send(&$a,&$b) { - - if((! local_user()) || (local_user() != $b['uid'])) + if($b['edit']) return; - if($b['prvnets'] && $b['private']) + if((! local_user()) || (local_user() != $b['uid'])) return; - if($b['parent']) + if($b['private'] || $b['parent']) return; - $wp_username = get_pconfig(local_user(),'wppost','wp_username'); - $wp_password = get_pconfig(local_user(),'wppost','wp_password'); - $wp_blog = get_pconfig(local_user(),'wppost','wp_blog'); $wp_post = intval(get_pconfig(local_user(),'wppost','post')); $wp_enable = (($wp_post && x($_POST,'wppost_enable')) ? intval($_POST['wppost_enable']) : 0); @@ -133,7 +137,34 @@ function wppost_send(&$a,&$b) { if($_POST['api_source'] && intval(get_pconfig(local_user(),'wppost','post_by_default'))) $wp_enable = 1; - if($wp_username && $wp_password && $wp_blog && $wp_post && $wp_enable) { + if(! $wp_enable) + return; + + if(strlen($b['postopts'])) + $b['postopts'] .= ','; + $b['postopts'] .= 'wppost'; +} + + + + +function wppost_send(&$a,&$b) { + + if($b['deleted'] || $b['private'] || ($b['created'] !== $b['edited'])) + return; + + if(! strstr($b['postopts'],'wppost')) + return; + + if($b['parent'] != $b['id']) + return; + + + $wp_username = get_pconfig($b['uid'],'wppost','wp_username'); + $wp_password = get_pconfig($b['uid'],'wppost','wp_password'); + $wp_blog = get_pconfig($b['uid'],'wppost','wp_blog'); + + if($wp_username && $wp_password && $wp_blog) { require_once('include/bbcode.php');