Merge pull request #10863 from annando/photo-type

New photo field "photo-type" as preparation for banners
This commit is contained in:
Hypolite Petovan
2021-10-11 13:52:28 -04:00
committed by GitHub
15 changed files with 109 additions and 89 deletions

View File

@@ -1933,7 +1933,7 @@ class Contact
if (!empty($cids)) {
// Delete possibly existing cached user contact avatars
Photo::delete(['uid' => $uids, 'contact-id' => $cids, 'album' => Photo::CONTACT_PHOTOS]);
Photo::delete(['uid' => $uids, 'contact-id' => $cids, 'photo-type' => Photo::CONTACT_AVATAR]);
}
}

View File

@@ -46,6 +46,12 @@ class Photo
{
const CONTACT_PHOTOS = 'Contact Photos';
const DEFAULT = 0;
const USER_AVATAR = 10;
const USER_BANNER = 11;
const CONTACT_AVATAR = 20;
const CONTACT_BANNER = 21;
/**
* Select rows from the photo table and returns them as array
*
@@ -322,7 +328,7 @@ class Photo
* @return boolean True on success
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
public static function store(Image $Image, $uid, $cid, $rid, $filename, $album, $scale, $profile = 0, $allow_cid = "", $allow_gid = "", $deny_cid = "", $deny_gid = "", $desc = "")
public static function store(Image $Image, $uid, $cid, $rid, $filename, $album, $scale, $type = self::DEFAULT, $allow_cid = "", $allow_gid = "", $deny_cid = "", $deny_gid = "", $desc = "")
{
$photo = self::selectFirst(["guid"], ["`resource-id` = ? AND `guid` != ?", $rid, ""]);
if (DBA::isResult($photo)) {
@@ -372,7 +378,8 @@ class Photo
"datasize" => strlen($Image->asString()),
"data" => $data,
"scale" => $scale,
"profile" => $profile,
"photo-type" => $type,
"profile" => $type == self::USER_AVATAR,
"allow_cid" => $allow_cid,
"allow_gid" => $allow_gid,
"deny_cid" => $deny_cid,
@@ -476,7 +483,7 @@ class Photo
$micro = "";
$photo = DBA::selectFirst(
"photo", ["resource-id"], ["uid" => $uid, "contact-id" => $cid, "scale" => 4, "album" => self::CONTACT_PHOTOS]
"photo", ["resource-id"], ["uid" => $uid, "contact-id" => $cid, "scale" => 4, "photo-type" => self::CONTACT_AVATAR]
);
if (!empty($photo['resource-id'])) {
$resource_id = $photo["resource-id"];
@@ -529,7 +536,7 @@ class Photo
Logger::info('Avatar is resized', ['uid' => $uid, 'cid' => $cid, 'size' => $filesize, 'type' => $Image->getType()]);
}
$r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 4);
$r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 4, self::CONTACT_AVATAR);
if ($r === false) {
$photo_failure = true;
@@ -537,7 +544,7 @@ class Photo
$Image->scaleDown(80);
$r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 5);
$r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 5, self::CONTACT_AVATAR);
if ($r === false) {
$photo_failure = true;
@@ -545,7 +552,7 @@ class Photo
$Image->scaleDown(48);
$r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 6);
$r = self::store($Image, $uid, $cid, $resource_id, $filename, self::CONTACT_PHOTOS, 6, self::CONTACT_AVATAR);
if ($r === false) {
$photo_failure = true;
@@ -651,20 +658,20 @@ class Photo
// At this time we just store the data in the cache
$albums = DBA::toArray(DBA::p("SELECT COUNT(DISTINCT `resource-id`) AS `total`, `album`, ANY_VALUE(`created`) AS `created`
FROM `photo`
WHERE `uid` = ? AND NOT `album` IN (?, ?) $sql_extra
WHERE `uid` = ? AND NOT `photo-type` IN (?, ?) $sql_extra
GROUP BY `album` ORDER BY `created` DESC",
$uid,
self::CONTACT_PHOTOS,
DI::l10n()->t(self::CONTACT_PHOTOS)
self::CONTACT_AVATAR,
self::CONTACT_BANNER
));
} else {
// This query doesn't do the count and is much faster
$albums = DBA::toArray(DBA::p("SELECT DISTINCT(`album`), '' AS `total`
FROM `photo` USE INDEX (`uid_album_scale_created`)
WHERE `uid` = ? AND NOT `album` IN (?, ?) $sql_extra",
WHERE `uid` = ? AND NOT `photo-type` IN (?, ?) $sql_extra",
$uid,
self::CONTACT_PHOTOS,
DI::l10n()->t(self::CONTACT_PHOTOS)
self::CONTACT_AVATAR,
self::CONTACT_BANNER
));
}
DI::cache()->set($key, $albums, Duration::DAY);
@@ -998,7 +1005,7 @@ class Photo
$smallest = 0;
$r = Photo::store($Image, $user['uid'], 0, $resource_id, $filename, $album, 0, 0, $defperm);
$r = Photo::store($Image, $user['uid'], 0, $resource_id, $filename, $album, 0, self::DEFAULT, $defperm);
if (!$r) {
Logger::notice('Photo could not be stored');
return [];
@@ -1006,7 +1013,7 @@ class Photo
if ($width > 640 || $height > 640) {
$Image->scaleDown(640);
$r = Photo::store($Image, $user['uid'], 0, $resource_id, $filename, $album, 1, 0, $defperm);
$r = Photo::store($Image, $user['uid'], 0, $resource_id, $filename, $album, 1, self::DEFAULT, $defperm);
if ($r) {
$smallest = 1;
}
@@ -1014,7 +1021,7 @@ class Photo
if ($width > 320 || $height > 320) {
$Image->scaleDown(320);
$r = Photo::store($Image, $user['uid'], 0, $resource_id, $filename, $album, 2, 0, $defperm);
$r = Photo::store($Image, $user['uid'], 0, $resource_id, $filename, $album, 2, self::DEFAULT, $defperm);
if ($r && ($smallest == 0)) {
$smallest = 2;
}

View File

@@ -1184,7 +1184,7 @@ class User
}
if (!$photo_failure) {
Photo::update(['profile' => 1], ['resource-id' => $resource_id]);
Photo::update(['profile' => true, 'photo-type' => Photo::USER_AVATAR], ['resource-id' => $resource_id]);
}
}

View File

@@ -100,7 +100,7 @@ class Crop extends BaseSettings
$base_image['filename'],
DI::l10n()->t('Profile Photos'),
4,
1
Photo::USER_AVATAR
);
if ($r === false) {
notice(DI::l10n()->t('Image size reduction [%s] failed.', '300'));
@@ -116,7 +116,7 @@ class Crop extends BaseSettings
$base_image['filename'],
DI::l10n()->t('Profile Photos'),
5,
1
Photo::USER_AVATAR
);
if ($r === false) {
notice(DI::l10n()->t('Image size reduction [%s] failed.', '80'));
@@ -132,7 +132,7 @@ class Crop extends BaseSettings
$base_image['filename'],
DI::l10n()->t('Profile Photos'),
6,
1
Photo::USER_AVATAR
);
if ($r === false) {
notice(DI::l10n()->t('Image size reduction [%s] failed.', '48'));

View File

@@ -59,7 +59,7 @@ class Expire
Logger::notice('start expiry');
$r = DBA::p("SELECT `uid`, `username` FROM `user` WHERE `expire` != 0");
$r = DBA::select('user', ['uid', 'username'], ["`expire` != ?", 0]);
while ($row = DBA::fetch($r)) {
Logger::info('Calling expiry', ['user' => $row['uid'], 'username' => $row['username']]);
Worker::add(['priority' => $a->getQueueValue('priority'), 'created' => $a->getQueueValue('created'), 'dont_fork' => true],

View File

@@ -36,7 +36,7 @@ class ExpireConversations
return;
}
DBA::p("DELETE FROM `conversation` WHERE `received` < UTC_TIMESTAMP() - INTERVAL ? DAY", $days);
DBA::e("DELETE FROM `conversation` WHERE `received` < UTC_TIMESTAMP() - INTERVAL ? DAY", $days);
}
}

View File

@@ -45,7 +45,7 @@ class RemoveUnusedAvatars
$contacts = DBA::select('contact', ['id'], $condition);
while ($contact = DBA::fetch($contacts)) {
Contact::update(['photo' => '', 'thumb' => '', 'micro' => ''], ['id' => $contact['id']]);
Photo::delete(['contact-id' => $contact['id'], 'album' => Photo::CONTACT_PHOTOS]);
Photo::delete(['contact-id' => $contact['id'], 'photo-type' => [Photo::CONTACT_AVATAR, Photo::CONTACT_BANNER]]);
if ((++$count % 1000) == 0) {
if (!Worker::isInMaintenanceWindow()) {
Logger::notice('We are outside of the maintenance window, quitting');