2012-04-09 00:50:48 +02:00
< ? php
/**
* Name : Gravatar Support
2018-01-20 14:57:41 +01:00
* Description : If there is no avatar image for a new user or contact this addon will look for one at Gravatar .
2012-07-14 21:11:43 +02:00
* Version : 1.1
2012-04-09 00:50:48 +02:00
* Author : Klaus Weidenbach < http :// friendica . dszdw . net / profile / klaus >
*/
2018-07-21 15:13:02 +02:00
use Friendica\App ;
2018-10-17 21:34:15 +02:00
use Friendica\BaseModule ;
2018-12-26 08:28:16 +01:00
use Friendica\Core\Hook ;
2018-10-30 00:40:18 +01:00
use Friendica\Core\Logger ;
2018-10-31 15:55:15 +01:00
use Friendica\Core\Renderer ;
2018-07-21 15:13:02 +02:00
use Friendica\Database\DBA ;
2020-01-18 22:07:06 +01:00
use Friendica\DI ;
2023-01-01 20:21:56 +01:00
use Friendica\Core\Config\Util\ConfigFileManager ;
2018-11-08 17:45:19 +01:00
use Friendica\Util\Strings ;
2017-11-07 00:55:24 +01:00
2012-04-09 00:50:48 +02:00
/**
2018-01-20 14:57:41 +01:00
* Installs the addon hook
2012-04-09 00:50:48 +02:00
*/
function gravatar_install () {
2018-12-26 08:28:16 +01:00
Hook :: register ( 'load_config' , 'addon/gravatar/gravatar.php' , 'gravatar_load_config' );
Hook :: register ( 'avatar_lookup' , 'addon/gravatar/gravatar.php' , 'gravatar_lookup' );
2012-04-09 00:50:48 +02:00
2021-10-03 19:35:20 +02:00
Logger :: notice ( " registered gravatar in avatar_lookup hook " );
2012-04-09 00:50:48 +02:00
}
2023-01-14 03:16:09 +01:00
function gravatar_load_config ( ConfigFileManager $loader )
2018-06-28 05:12:50 +02:00
{
2023-01-14 03:16:09 +01:00
DI :: app () -> getConfigCache () -> load ( $loader -> loadAddonConfig ( 'gravatar' ), \Friendica\Core\Config\ValueObject\Cache :: SOURCE_STATIC );
2018-06-28 05:12:50 +02:00
}
2012-04-09 00:50:48 +02:00
/**
* Looks up the avatar at gravatar . com and returns the URL .
*
* @ param & $b array
*/
2023-01-14 03:16:09 +01:00
function gravatar_lookup ( array & $b )
2022-06-23 07:16:22 +02:00
{
2020-01-19 21:21:12 +01:00
$default_avatar = DI :: config () -> get ( 'gravatar' , 'default_avatar' );
$rating = DI :: config () -> get ( 'gravatar' , 'rating' );
2012-04-09 00:50:48 +02:00
// setting default value if nothing configured
if ( ! $default_avatar )
2012-04-11 01:03:22 +02:00
$default_avatar = 'identicon' ; // default image will be a random pattern
2012-04-09 00:50:48 +02:00
if ( ! $rating )
$rating = 'g' ; // suitable for display on all websites with any audience type
$hash = md5 ( trim ( strtolower ( $b [ 'email' ])));
2015-05-18 16:45:41 +02:00
$url = 'https://secure.gravatar.com/avatar/' . $hash . '.jpg' ;
2012-04-09 00:50:48 +02:00
$url .= '?s=' . $b [ 'size' ] . '&r=' . $rating ;
if ( $default_avatar != " gravatar " )
$url .= '&d=' . $default_avatar ;
2018-01-15 14:15:33 +01:00
$b [ 'url' ] = $url ;
2012-04-11 01:03:22 +02:00
$b [ 'success' ] = true ;
2012-04-09 00:50:48 +02:00
}
/**
* Display admin settings for this addon
*/
2023-01-14 03:16:09 +01:00
function gravatar_addon_admin ( string & $o )
2022-06-23 07:16:22 +02:00
{
2018-10-31 15:55:15 +01:00
$t = Renderer :: getMarkupTemplate ( " admin.tpl " , " addon/gravatar/ " );
2012-04-09 00:50:48 +02:00
2020-01-19 21:21:12 +01:00
$default_avatar = DI :: config () -> get ( 'gravatar' , 'default_avatar' );
$rating = DI :: config () -> get ( 'gravatar' , 'rating' );
2012-04-09 00:50:48 +02:00
// set default values for first configuration
2022-06-23 07:16:22 +02:00
if ( ! $default_avatar ) {
2012-04-09 00:50:48 +02:00
$default_avatar = 'identicon' ; // pseudo-random geometric pattern based on email hash
2022-06-23 07:16:22 +02:00
}
if ( ! $rating ) {
2012-04-09 00:50:48 +02:00
$rating = 'g' ; // suitable for display on all websites with any audience type
2022-06-23 07:16:22 +02:00
}
2012-04-09 00:50:48 +02:00
// Available options for the select boxes
2018-01-15 14:15:33 +01:00
$default_avatars = [
2020-01-18 20:52:33 +01:00
'mm' => DI :: l10n () -> t ( 'generic profile image' ),
'identicon' => DI :: l10n () -> t ( 'random geometric pattern' ),
'monsterid' => DI :: l10n () -> t ( 'monster face' ),
'wavatar' => DI :: l10n () -> t ( 'computer generated face' ),
'retro' => DI :: l10n () -> t ( 'retro arcade style face' ),
2018-01-15 14:15:33 +01:00
];
$ratings = [
2012-04-09 00:50:48 +02:00
'g' => 'g' ,
'pg' => 'pg' ,
'r' => 'r' ,
'x' => 'x'
2018-01-15 14:15:33 +01:00
];
2012-04-09 00:50:48 +02:00
2012-07-14 21:11:43 +02:00
// Check if Libravatar is enabled and show warning
2023-01-03 20:31:41 +01:00
if ( ! empty ( DI :: config () -> get ( 'addons' , 'libravatar' ))) {
2020-01-18 20:52:33 +01:00
$o = '<h5>' . DI :: l10n () -> t ( 'Information' ) . '</h5><p>' . DI :: l10n () -> t ( 'Libravatar addon is installed, too. Please disable Libravatar addon or this Gravatar addon.<br>The Libravatar addon will fall back to Gravatar if nothing was found at Libravatar.' ) . '</p><br><br>' ;
2012-07-14 21:11:43 +02:00
}
// output Gravatar settings
2018-10-17 21:34:15 +02:00
$o .= '<input type="hidden" name="form_security_token" value="' . BaseModule :: getFormSecurityToken ( " gravatarsave " ) . '">' ;
2018-10-31 15:55:15 +01:00
$o .= Renderer :: replaceMacros ( $t , [
2020-01-18 20:52:33 +01:00
'$submit' => DI :: l10n () -> t ( 'Save Settings' ),
'$default_avatar' => [ 'avatar' , DI :: l10n () -> t ( 'Default avatar image' ), $default_avatar , DI :: l10n () -> t ( 'Select default avatar image if none was found at Gravatar. See README' ), $default_avatars ],
'$rating' => [ 'rating' , DI :: l10n () -> t ( 'Rating of images' ), $rating , DI :: l10n () -> t ( 'Select the appropriate avatar rating for your site. See README' ), $ratings ],
2018-01-15 14:15:33 +01:00
]);
2012-04-09 00:50:48 +02:00
}
/**
* Save admin settings
*/
2023-01-14 03:16:09 +01:00
function gravatar_addon_admin_post ()
2022-06-23 07:16:22 +02:00
{
2018-10-17 21:34:15 +02:00
BaseModule :: checkFormSecurityToken ( 'gravatarsave' );
2012-04-09 00:50:48 +02:00
2022-06-30 13:32:13 +02:00
DI :: config () -> set ( 'gravatar' , 'default_avatar' , trim ( $_POST [ 'avatar' ] ? ? 'identicon' ));
DI :: config () -> set ( 'gravatar' , 'rating' , $rating = trim ( $_POST [ 'rating' ] ? ? 'g' ));
2012-04-09 00:50:48 +02:00
}