X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=statusnet%2Fstatusnet.php;h=3a5ceb8a1dd4e50f7adcf473e7f0c0d14fecfc16;hb=207ac94509c684e525904baec1038367e5cc4c14;hp=f3678c805b6b157f83a531db2a8779f81b7b93ac;hpb=830b1e3ddc71ff3cae8bba1d8bbcf6eb9526536a;p=friendica-addons.git diff --git a/statusnet/statusnet.php b/statusnet/statusnet.php index f3678c80..3a5ceb8a 100755 --- a/statusnet/statusnet.php +++ b/statusnet/statusnet.php @@ -4,24 +4,35 @@ * Description: Relay public postings to a connected StatusNet account * Version: 1.0.5 * Author: Tobias Diekershoff - */ - -/* StatusNet Plugin for Friendica + * Author: Michael Vogel * - * Author: Tobias Diekershoff - * tobias.diekershoff@gmx.net + * Copyright (c) 2011-2013 Tobias Diekershoff, Michael Vogel + * All rights reserved. * - * License:3-clause BSD license + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * * copyright notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the distribution. + * * Neither the name of the nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. * - * Configuration: - * To activate the plugin itself add it to the $a->config['system']['addon'] - * setting. After this, your user can configure their Twitter account settings - * from "Settings -> Plugin Settings". + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, + * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * - * Requirements: PHP5, curl [Slinky library] - * - * Documentation: http://diekershoff.homeunix.net/redmine/wiki/friendikaplugin/StatusNet_Plugin */ + /*** * We have to alter the TwitterOAuth class a little bit to work with any StatusNet @@ -176,6 +187,7 @@ function statusnet_settings_post ($a,$post) { set_pconfig(local_user(), 'statusnet', 'consumerkey', $asn['consumerkey'] ); set_pconfig(local_user(), 'statusnet', 'consumersecret', $asn['consumersecret'] ); set_pconfig(local_user(), 'statusnet', 'baseapi', $asn['apiurl'] ); + set_pconfig(local_user(), 'statusnet', 'application_name', $asn['applicationname'] ); } else { notice( t('Please contact your site administrator.
The provided API URL is not valid.').EOL.$asn['apiurl'].EOL ); } @@ -194,6 +206,7 @@ function statusnet_settings_post ($a,$post) { set_pconfig(local_user(), 'statusnet', 'consumerkey', $_POST['statusnet-consumerkey']); set_pconfig(local_user(), 'statusnet', 'consumersecret', $_POST['statusnet-consumersecret']); set_pconfig(local_user(), 'statusnet', 'baseapi', $apibase ); + set_pconfig(local_user(), 'statusnet', 'application_name', $_POST['statusnet-applicationname'] ); } else { // the API path is not correct, maybe missing trailing / ? $apibase = $apibase . '/'; @@ -211,7 +224,7 @@ function statusnet_settings_post ($a,$post) { goaway($a->get_baseurl().'/settings/connectors'); } else { if (isset($_POST['statusnet-pin'])) { - // if the user supplied us with a PIN from Twitter, let the magic of OAuth happen + // if the user supplied us with a PIN from StatusNet, let the magic of OAuth happen $api = get_pconfig(local_user(), 'statusnet', 'baseapi'); $ckey = get_pconfig(local_user(), 'statusnet', 'consumerkey' ); $csecret = get_pconfig(local_user(), 'statusnet', 'consumersecret' ); @@ -301,6 +314,9 @@ function statusnet_settings(&$a,&$s) { $s .= ''; $s .= '
'; $s .= '

'; + $s .= ''; + $s .= '
'; + $s .= '

'; $s .= '
'; } else { /*** @@ -493,6 +509,8 @@ function statusnet_shortenmsg($b, $max_char) { while (strpos($msg, " ") !== false) $msg = str_replace(" ", " ", $msg); + $origmsg = $msg; + // Removing URLs $msg = preg_replace('/(https?\:\/\/[a-zA-Z0-9\:\/\-\?\&\;\.\=\_\~\#\%\$\!\+\,]+)/i', "", $msg); @@ -528,6 +546,10 @@ function statusnet_shortenmsg($b, $max_char) { if (($msglink == "") and strlen($msg) > $max_char) $msglink = $b["plink"]; + // If the message is short enough then don't modify it. (if the link exists in the original message) + if ((strlen(trim($origmsg)) <= $max_char) AND (strpos($origmsg, $msglink) OR ($msglink == ""))) + return(array("msg"=>trim($origmsg), "image"=>"")); + if (strlen($msglink) > 20) $msglink = short_link($msglink); @@ -562,6 +584,9 @@ function statusnet_post_hook(&$a,&$b) { if(! strstr($b['postopts'],'statusnet')) return; + if($b['parent'] != $b['id']) + return; + // if posts comes from statusnet don't send it back if($b['app'] == "StatusNet") return; @@ -644,7 +669,7 @@ function statusnet_post_hook(&$a,&$b) { // ok, all the links we want to send out are save, now strip // away the remaining bbcode //$msg = strip_tags(bbcode($tmp, false, false)); - $msg = bbcode($tmp, false, false); + $msg = bbcode($tmp, false, false, true); $msg = str_replace(array('
','
'),"\n",$msg); $msg = strip_tags($msg); @@ -704,6 +729,7 @@ function statusnet_plugin_admin_post(&$a){ $apiurl=trim($_POST['apiurl'][$id]); $secret=trim($_POST['secret'][$id]); $key=trim($_POST['key'][$id]); + $applicationname = ((x($_POST, 'applicationname')) ? notags(trim($_POST['applicationname'][$id])):''); if ($sitename!="" && $apiurl!="" && $secret!="" && @@ -714,7 +740,8 @@ function statusnet_plugin_admin_post(&$a){ 'sitename' => $sitename, 'apiurl' => $apiurl, 'consumersecret' => $secret, - 'consumerkey' => $key + 'consumerkey' => $key, + 'applicationname' => $applicationname ); } } @@ -734,6 +761,7 @@ function statusnet_plugin_admin(&$a, &$o){ 'apiurl' => Array("apiurl[$id]", "Api url", $s['apiurl'], ""), 'secret' => Array("secret[$id]", "Secret", $s['consumersecret'], ""), 'key' => Array("key[$id]", "Key", $s['consumerkey'], ""), + 'applicationname' => Array("applicationname[$id]", "Application name", $s['applicationname'], ""), 'delete' => Array("delete[$id]", "Delete", False , "Check to delete this preset"), ); } @@ -745,6 +773,7 @@ function statusnet_plugin_admin(&$a, &$o){ 'apiurl' => Array("apiurl[$id]", t("API URL"), "", ""), 'secret' => Array("secret[$id]", t("Consumer Secret"), "", ""), 'key' => Array("key[$id]", t("Consumer Key"), "", ""), + 'applicationname' => Array("applicationname[$id]", t("Application name"), "", ""), ); $t = get_markup_template( "admin.tpl", "addon/statusnet/" ); @@ -791,8 +820,12 @@ function statusnet_fetchtimeline($a, $uid) { $osecret = get_pconfig($uid, 'statusnet', 'oauthsecret'); $lastid = get_pconfig($uid, 'statusnet', 'lastid'); - $application_name = get_config('statusnet', 'application_name'); - + // get the application name for the SN app + // 1st try personal config, then system config and fallback to the + // hostname of the node if neither one is set. + $application_name = get_pconfig( $uid, 'statusnet', 'application_name'); + if ($application_name == "") + $application_name = get_config('statusnet', 'application_name'); if ($application_name == "") $application_name = $a->get_hostname(); @@ -806,9 +839,14 @@ function statusnet_fetchtimeline($a, $uid) { $parameters["since_id"] = $lastid; $items = $connection->get('statuses/user_timeline', $parameters); + + if (!is_array($items)) + return; + $posts = array_reverse($items); - foreach ($posts as $post) { + if (count($posts)) { + foreach ($posts as $post) { if ($post->id > $lastid) $lastid = $post->id; @@ -852,7 +890,8 @@ function statusnet_fetchtimeline($a, $uid) { require_once('mod/item.php'); item_post($a); } - } + } + } } set_pconfig($uid, 'statusnet', 'lastid', $lastid); }