make the fetching of the default profile photo hookable, and document the hook

This commit is contained in:
redmatrix 2016-09-27 18:11:04 -07:00
parent 3bf0a27e45
commit eff2e6c795
3 changed files with 52 additions and 17 deletions

View File

@ -60,19 +60,32 @@ class Photo extends \Zotlabs\Web\Controller {
$uid = $person; $uid = $person;
$r = q("SELECT * FROM photo WHERE imgscale = %d AND uid = %d AND photo_usage = %d LIMIT 1", $d = [ 'imgscale' => $resolution, 'channel_id' => $uid, 'default' => $default, 'data' => '', 'mimetype' => '' ];
intval($resolution), call_hooks('get_profile_photo',$d);
intval($uid),
intval(PHOTO_PROFILE) $resolution = $d['resolution'];
); $uid = $d['channel_id'];
if($r) { $default = $d['default'];
$data = dbunescbin($r[0]['content']); $data = $d['data'];
$mimetype = $r[0]['mimetype']; $mimetype = $d['mimetype'];
if(! $data) {
$r = q("SELECT * FROM photo WHERE imgscale = %d AND uid = %d AND photo_usage = %d LIMIT 1",
intval($resolution),
intval($uid),
intval(PHOTO_PROFILE)
);
if($r) {
$data = dbunescbin($r[0]['content']);
$mimetype = $r[0]['mimetype'];
}
if(intval($r[0]['os_storage']))
$data = file_get_contents($data);
} }
if(intval($r[0]['os_storage'])) if(! $data) {
$data = file_get_contents($data);
if(! isset($data)) {
$data = file_get_contents($default); $data = file_get_contents($default);
}
if(! $mimetype) {
$mimetype = 'image/png'; $mimetype = 'image/png';
} }
} }
@ -88,6 +101,7 @@ class Photo extends \Zotlabs\Web\Controller {
Project link: https://github.com/Retina-Images/Retina-Images Project link: https://github.com/Retina-Images/Retina-Images
License link: http://creativecommons.org/licenses/by/3.0/ License link: http://creativecommons.org/licenses/by/3.0/
*/ */
$cookie_value = false; $cookie_value = false;
if (isset($_COOKIE['devicePixelRatio'])) { if (isset($_COOKIE['devicePixelRatio'])) {
$cookie_value = intval($_COOKIE['devicePixelRatio']); $cookie_value = intval($_COOKIE['devicePixelRatio']);
@ -114,15 +128,15 @@ class Photo extends \Zotlabs\Web\Controller {
} }
// If using resolution 1, make sure it exists before proceeding: // If using resolution 1, make sure it exists before proceeding:
if ($resolution == 1) if($resolution == 1) {
{
$r = q("SELECT uid FROM photo WHERE resource_id = '%s' AND imgscale = %d LIMIT 1", $r = q("SELECT uid FROM photo WHERE resource_id = '%s' AND imgscale = %d LIMIT 1",
dbesc($photo), dbesc($photo),
intval($resolution) intval($resolution)
); );
if (!($r)) if(! $r) {
$resolution = 2; $resolution = 2;
} }
}
$r = q("SELECT uid FROM photo WHERE resource_id = '%s' AND imgscale = %d LIMIT 1", $r = q("SELECT uid FROM photo WHERE resource_id = '%s' AND imgscale = %d LIMIT 1",
dbesc($photo), dbesc($photo),

View File

@ -0,0 +1,18 @@
[h2]get_profile_photo[/h2]
Called when fetching the content of the default profile photo for a local channel in mod_photo.
Hook arguments:
'imgscale' => integer resolution requested (4, 5, or 6)
'channel_id' => channel_id of requested profile photo
'default' => filename of default profile photo of this imgscale
'data' => empty string
'mimetype' => empty string
If 'data' is set, this data will be used instead of the data obtained from the database search for the profile photo.
If 'mimetype' is set, this mimetype will be used instead of the mimetype obtained from the database or the default profile photo mimetype.

View File

@ -236,6 +236,9 @@ Hooks allow plugins/addons to "hook into" the code at many points and alter the
[zrl=[baseurl]/help/hook/get_features]get_features[/zrl] [zrl=[baseurl]/help/hook/get_features]get_features[/zrl]
Called when get_features() is called Called when get_features() is called
[zrl=[baseurl]/help/hook/get_profile_photo]get_profile_photo[/zrl]
Called when local profile photo content is fetched in mod_photo
[zrl=[baseurl]/help/hook/get_role_perms]get_role_perms[/zrl] [zrl=[baseurl]/help/hook/get_role_perms]get_role_perms[/zrl]
Called when get_role_perms() is called to obtain permissions for named permission roles Called when get_role_perms() is called to obtain permissions for named permission roles