2021-05-21 10:11:11 +02:00
< ? php
/*
* Name : nitter
* Description : Replaces links to twitter . com to a nitter server in all displays of postings on a node .
2021-10-01 17:08:38 +02:00
* Version : 2.0
2021-05-21 10:11:11 +02:00
* Author : Tobias Diekershoff < tobias @ social . diekershoff . de >
*
* Copyright ( c ) 2020 Tobias Diekershoff
*
* Permission is hereby granted , free of charge , to any person obtaining a copy of this software and
* associated documentation files ( the " Software " ), to deal in the Software without restriction , including
* without limitation the rights to use , copy , modify , merge , publish , distribute , sublicense , and / or sell
* copies of the Software , and to permit persons to whom the Software is furnished to do so , subject to
* the following conditions :
*
* The above copyright notice and this permission notice shall be included in all copies or substantial
* portions of the Software .
*
* THE SOFTWARE IS PROVIDED " AS IS " , WITHOUT WARRANTY OF ANY KIND , EXPRESS OR IMPLIED , INCLUDING BUT
* NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY , FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT .
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM , DAMAGES OR OTHER LIABILITY ,
* WHETHER IN AN ACTION OF CONTRACT , TORT OR OTHERWISE , ARISING FROM , OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE .
*/
use Friendica\App ;
2021-11-07 15:01:30 +01:00
use Friendica\Core\Hook ;
2021-05-21 10:11:11 +02:00
use Friendica\Core\Renderer ;
use Friendica\DI ;
2021-05-21 14:06:47 +02:00
function nitter_install ()
{
2021-11-07 15:01:30 +01:00
Hook :: register ( 'prepare_body_final' , 'addon/nitter/nitter.php' , 'nitter_render' );
2021-05-21 10:11:11 +02:00
}
/* Handle the send data from the admin settings
*/
function nitter_addon_admin_post ( App $a )
{
2021-08-19 06:57:46 +02:00
$nitterserver = rtrim ( trim ( $_POST [ 'nitterserver' ]), '/' );
2021-05-21 14:06:47 +02:00
DI :: config () -> set ( 'nitter' , 'server' , $nitterserver );
2021-05-21 10:11:11 +02:00
}
/* Hook into the admin settings to let the admin choose a
* nitter server to use for the replacement .
*/
function nitter_addon_admin ( App $a , & $o )
{
2021-05-21 14:06:47 +02:00
$nitterserver = DI :: config () -> get ( 'nitter' , 'server' );
$t = Renderer :: getMarkupTemplate ( 'admin.tpl' , 'addon/nitter/' );
$o = Renderer :: replaceMacros ( $t , [
'$settingdescription' => DI :: l10n () -> t ( 'Which nitter server shall be used for the replacements in the post bodies? Use the URL with servername and protocol. See %s for a list of available public Nitter servers.' , 'https://github.com/zedeus/nitter/wiki/Instances' ),
'$nitterserver' => [ 'nitterserver' , DI :: l10n () -> t ( 'Nitter server' ), $nitterserver , 'http://example.com' ],
'$submit' => DI :: l10n () -> t ( 'Save Settings' ),
]);
2021-05-21 10:11:11 +02:00
}
/*
* replace " twitter.com " with " nitter.net "
*/
2022-06-23 07:16:22 +02:00
function nitter_render ( App $a , & $o )
2021-05-21 14:06:47 +02:00
{
// this needs to be a system setting
2021-08-18 19:04:51 +02:00
$replaced = false ;
2021-05-21 14:06:47 +02:00
$nitter = DI :: config () -> get ( 'nitter' , 'server' , 'https://nitter.net' );
2021-08-18 19:04:51 +02:00
if ( strstr ( $o [ 'html' ], 'https://mobile.twitter.com' )) {
$o [ 'html' ] = str_replace ( 'https://mobile.twitter.com' , $nitter , $o [ 'html' ]);
2021-09-09 14:23:43 +02:00
$replaced = true ;
2021-08-18 19:04:51 +02:00
}
2021-05-21 14:06:47 +02:00
if ( strstr ( $o [ 'html' ], 'https://twitter.com' )) {
$o [ 'html' ] = str_replace ( 'https://twitter.com' , $nitter , $o [ 'html' ]);
2021-09-09 14:23:43 +02:00
$replaced = true ;
2021-08-18 19:04:51 +02:00
}
2021-09-09 14:20:58 +02:00
if ( $replaced ) {
2021-10-01 15:53:09 +02:00
$o [ 'html' ] .= '<hr><p>' . DI :: l10n () -> t ( 'In an attempt to protect your privacy, links to Twitter in this posting were replaced by links to the Nitter instance at %s' , $nitter ) . '</p>' ;
2021-05-21 14:06:47 +02:00
}
2021-05-21 10:11:11 +02:00
}