2021-05-21 04:11:11 -04:00
< ? php
/*
* Name : nitter
* Description : Replaces links to twitter . com to a nitter server in all displays of postings on a node .
* Version : 1.1
* 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 ;
use Friendica\Core\Addon ;
use Friendica\Core\Renderer ;
use Friendica\DI ;
2021-05-21 08:06:47 -04:00
function nitter_install ()
{
Addon :: registerHook ( 'prepare_body' , 'addon/nitter/nitter.php' , 'nitter_render' );
2021-05-21 04:11:11 -04:00
}
/* Handle the send data from the admin settings
*/
function nitter_addon_admin_post ( App $a )
{
2021-08-19 00:57:46 -04:00
$nitterserver = rtrim ( trim ( $_POST [ 'nitterserver' ]), '/' );
2021-05-21 08:06:47 -04:00
DI :: config () -> set ( 'nitter' , 'server' , $nitterserver );
2021-05-21 04:11:11 -04: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 08:06:47 -04: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 04:11:11 -04:00
}
/*
* replace " twitter.com " with " nitter.net "
*/
2021-05-21 08:06:47 -04:00
function nitter_render ( & $a , & $o )
{
// this needs to be a system setting
2021-08-18 13:04:51 -04:00
$replaced = false ;
2021-05-21 08:06:47 -04:00
$nitter = DI :: config () -> get ( 'nitter' , 'server' , 'https://nitter.net' );
2021-08-18 13:04:51 -04:00
if ( strstr ( $o [ 'html' ], 'https://mobile.twitter.com' )) {
$o [ 'html' ] = str_replace ( 'https://mobile.twitter.com' , $nitter , $o [ 'html' ]);
$replace = true ;
}
2021-05-21 08:06:47 -04:00
if ( strstr ( $o [ 'html' ], 'https://twitter.com' )) {
$o [ 'html' ] = str_replace ( 'https://twitter.com' , $nitter , $o [ 'html' ]);
2021-08-18 13:04:51 -04:00
$replace = true ;
}
2021-09-09 08:20:58 -04:00
if ( $replaced ) {
2021-05-21 08:06:47 -04:00
$o [ 'html' ] .= '<hr><p>' . DI :: l10n () -> t ( 'Links to Twitter in this posting were replaced by links to the Nitter instance at %s' , $nitter ) . '</p>' ;
}
2021-05-21 04:11:11 -04:00
}