+ public static function storeAvatarByImage(array $contact, Image $image): array
+ {
+ $fields = ['photo' => '', 'thumb' => '', 'micro' => ''];
+
+ if (!DI::config()->get('system', 'avatar_cache')) {
+ self::deleteCache($contact);
+ return $fields;
+ }
+
+ if (Network::isLocalLink($contact['avatar']) || empty($contact['avatar'])) {
+ self::deleteCache($contact);
+ return $fields;
+ }
+
+ $filename = self::getFilename($contact['url']);
+ $timestamp = time();
+
+ $fields['photo'] = self::storeAvatarCache($image, $filename, Proxy::PIXEL_SMALL, $timestamp);
+ $fields['thumb'] = self::storeAvatarCache($image, $filename, Proxy::PIXEL_THUMB, $timestamp);
+ $fields['micro'] = self::storeAvatarCache($image, $filename, Proxy::PIXEL_MICRO, $timestamp);
+
+ return $fields;
+ }
+
+ private static function getFilename(string $url): string
+ {
+ $guid = Item::guidFromUri($url);
+
+ return substr($guid, 0, 2) . '/' . substr($guid, 3, 2) . '/' . substr($guid, 5, 3) . '/' .
+ substr($guid, 9, 2) .'/' . substr($guid, 11, 2) . '/' . substr($guid, 13, 4). '/' . substr($guid, 18) . '-';
+ }
+
+ private static function storeAvatarCache(Image $image, string $filename, int $size, int $timestamp): string