Adding Libravatar support
I would like to add Libravatar lookup as an optional replacement for Gravatar in ~friendica . But I have some questions how it would be done best:
#Libravatar is a #federated #avatar hosting service. There is a central service comparable to #Gravatar, but you could also run your own instance of it. Unfortunately it is not so easy to set the hosting service up on your own server, but I would like to add support to query Libravatar. There exists a PHP class to query Libravatar that I would need to use. It is MIT licensed so that should be no problem to include. It requires PHP5.3 would that be a problem?
There is a config option to enable Gravatar support right now. So I thought if it would make sense to implement Gravatar support and then also Libravatar support as plugins?
I just looked shortly into the code and it seems that there is only 1 function I would need to hook into and this function is only used in 2 places. I have thought to rename the function gravatar_img($email) in include/network.php to a more generic avatar_img($email) and placing the hook inside that function that the plugin would use then.
I would also like to add options to the Gravatar plugin then to select the image-rating and default-image. Right now friendica's Gravatar implementation allows pg-rated images hardcoded. Libravatar only allows g-rated images and also only looks these up as a fallback at Gravatar. So no pg-rated images would be possible with the Libravatar plugin anymore as a downside. And a maybe bit slower lookup to find the right hosting service trough DNS or if it needs to fall back to Gravatar. But I don't think that should be a problem and the admin could anyway switch back to Gravatar-only lookup with the Gravatar plugin.
In include/Scrape.php the function gravatar_img() is also called once, but there is no check if $use_gravatar is enabled at all. Was there a special reason for that? Would it break if no avatar is returned?
How would a migration work? Friendica core and the addons would need to be updated at the same time and then there should be an update function that checks if $use_gravatar was enabled before and then enable the Gravatar plugin? Would that work somehow automatically? What if someone forgets to update the addons at the same time?
What would be the right way to check that only one of these two plugins is loaded at any time?
Would like to hear your comments about how this should be implemented in a correct way.
Thank you very much!
Mike Macgirvin
in reply to Klaus Weidenbach • •We can always fall back on our "default person" images if no avatar plugins are enabled. So as long as after the hook call one looks to see if they've got an image and uses the fallback image if nothing was returned, you can safely turn both into plugins and not worry about upgrades. I don't think anybody is passionate about gravatar so existing sites which use it wouldn't be horribly inconvenienced if it stopped working.
Since we can only return one image, you might consider what would happen if gravatar and libravatar are both installed. Perhaps a flag in the hook array that says an image has been found. The plugins would check and only get an image if no image had yet been found.
We don't require php 5.3, so I think as a plugin it should fail to install (with a notice() message) if 5.3 or greater isn't available. Except this might be hard to implement, because we'll keep trying to install it on every web access. I think instead it should probably install but not work, and provide a log message whenever the "get_gravatar/image" function is called if 5.3 isn't there. And also put the 5.3 requirement in the plugin description.
g rated is fine - we just don't want porn avatars if we have a choice.
In Scrape.php - yes it should check if gravatar is allowed. That was an oversight.
I don't care about the hardwired options really (though rating is nice) - gravatar also provides a choice of default fall-back choices, and I chose a random kaleidoscope pattern. But our default person fallback should work there as well, and would be the right choice if you need to set a flag that an image was found or not.
Klaus Weidenbach
in reply to Klaus Weidenbach • •Could you review this and see if it fits to the greater design of friendica and tell me if I need to change something.
When this is working I will create the Libravatar plugin.
Mike Macgirvin
in reply to Klaus Weidenbach • •