API: Improved avatar handling
This commit is contained in:
parent
a02426c08c
commit
96809b3fdd
5 changed files with 67 additions and 35 deletions
|
@ -1614,7 +1614,7 @@ class Contact
|
||||||
*
|
*
|
||||||
* @param array $contact contact array
|
* @param array $contact contact array
|
||||||
* @param string $size Size of the avatar picture
|
* @param string $size Size of the avatar picture
|
||||||
* @return void
|
* @return string avatar URL
|
||||||
*/
|
*/
|
||||||
public static function getDefaultAvatar(array $contact, string $size)
|
public static function getDefaultAvatar(array $contact, string $size)
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
namespace Friendica\Model\Storage;
|
namespace Friendica\Model\Storage;
|
||||||
|
|
||||||
use \BadMethodCallException;
|
use \BadMethodCallException;
|
||||||
|
use Friendica\DI;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* System resource storage class
|
* System resource storage class
|
||||||
|
@ -41,6 +42,16 @@ class SystemResource implements IStorage
|
||||||
*/
|
*/
|
||||||
public function get(string $filename)
|
public function get(string $filename)
|
||||||
{
|
{
|
||||||
|
$parts = parse_url($filename);
|
||||||
|
if (!empty($parts['scheme']) && !empty($parts['host'])) {
|
||||||
|
$curlResult = DI::httpRequest()->get($filename);
|
||||||
|
if ($curlResult->isSuccess()) {
|
||||||
|
return $curlResult->getBody();
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$folder = dirname($filename);
|
$folder = dirname($filename);
|
||||||
if (!in_array($folder, self::VALID_FOLDERS)) {
|
if (!in_array($folder, self::VALID_FOLDERS)) {
|
||||||
return "";
|
return "";
|
||||||
|
|
|
@ -44,11 +44,6 @@ class Photo extends BaseModule
|
||||||
public static function rawContent(array $parameters = [])
|
public static function rawContent(array $parameters = [])
|
||||||
{
|
{
|
||||||
$totalstamp = microtime(true);
|
$totalstamp = microtime(true);
|
||||||
$a = DI::app();
|
|
||||||
// @TODO: Replace with parameter from router
|
|
||||||
if ($a->argc <= 1 || $a->argc > 4) {
|
|
||||||
throw new \Friendica\Network\HTTPException\BadRequestException();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) {
|
if (isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])) {
|
||||||
header("HTTP/1.1 304 Not Modified");
|
header("HTTP/1.1 304 Not Modified");
|
||||||
|
@ -69,20 +64,16 @@ class Photo extends BaseModule
|
||||||
$customsize = 0;
|
$customsize = 0;
|
||||||
$photo = false;
|
$photo = false;
|
||||||
$scale = null;
|
$scale = null;
|
||||||
// @TODO: Replace with parameter from router
|
|
||||||
$stamp = microtime(true);
|
$stamp = microtime(true);
|
||||||
switch($a->argc) {
|
if (!empty($parameters['customsize'])) {
|
||||||
case 4:
|
$customsize = intval($parameters['customsize']);
|
||||||
$customsize = intval($a->argv[2]);
|
$uid = MPhoto::stripExtension($parameters['name']);
|
||||||
$uid = MPhoto::stripExtension($a->argv[3]);
|
$photo = self::getAvatar($uid, $parameters['type']);
|
||||||
$photo = self::getAvatar($uid, $a->argv[1]);
|
} elseif (!empty($parameters['type'])) {
|
||||||
break;
|
$uid = MPhoto::stripExtension($parameters['name']);
|
||||||
case 3:
|
$photo = self::getAvatar($uid, $parameters['type']);
|
||||||
$uid = MPhoto::stripExtension($a->argv[2]);
|
} elseif (!empty($parameters['name'])) {
|
||||||
$photo = self::getAvatar($uid, $a->argv[1]);
|
$photoid = MPhoto::stripExtension($parameters['name']);
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
$photoid = MPhoto::stripExtension($a->argv[1]);
|
|
||||||
$scale = 0;
|
$scale = 0;
|
||||||
if (substr($photoid, -2, 1) == "-") {
|
if (substr($photoid, -2, 1) == "-") {
|
||||||
$scale = intval(substr($photoid, -1, 1));
|
$scale = intval(substr($photoid, -1, 1));
|
||||||
|
@ -92,7 +83,8 @@ class Photo extends BaseModule
|
||||||
if ($photo === false) {
|
if ($photo === false) {
|
||||||
throw new \Friendica\Network\HTTPException\NotFoundException(DI::l10n()->t('The Photo with id %s is not available.', $photoid));
|
throw new \Friendica\Network\HTTPException\NotFoundException(DI::l10n()->t('The Photo with id %s is not available.', $photoid));
|
||||||
}
|
}
|
||||||
break;
|
} else {
|
||||||
|
throw new \Friendica\Network\HTTPException\BadRequestException();
|
||||||
}
|
}
|
||||||
$fetch = microtime(true) - $stamp;
|
$fetch = microtime(true) - $stamp;
|
||||||
|
|
||||||
|
@ -160,6 +152,36 @@ class Photo extends BaseModule
|
||||||
private static function getAvatar($uid, $type="avatar")
|
private static function getAvatar($uid, $type="avatar")
|
||||||
{
|
{
|
||||||
switch($type) {
|
switch($type) {
|
||||||
|
case "contact":
|
||||||
|
$contact = Contact::getById($uid, ['uid', 'url', 'avatar', 'photo']);
|
||||||
|
if (empty($contact)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
If (($contact['uid'] != 0) && empty($contact['photo']) && empty($contact['avatar'])) {
|
||||||
|
$contact = Contact::getByURL($contact['url'], false, ['avatar', 'photo']);
|
||||||
|
}
|
||||||
|
if (!empty($contact['photo'])) {
|
||||||
|
$url = $contact['photo'];
|
||||||
|
} elseif (!empty($contact['avatar'])) {
|
||||||
|
$url = $contact['avatar'];
|
||||||
|
} else {
|
||||||
|
$url = DI::baseUrl() . Contact::DEFAULT_AVATAR_PHOTO;
|
||||||
|
}
|
||||||
|
return MPhoto::createPhotoForSystemResource($url);
|
||||||
|
case "header":
|
||||||
|
$contact = Contact::getById($uid, ['uid', 'url', 'header']);
|
||||||
|
if (empty($contact)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
If (($contact['uid'] != 0) && empty($contact['header'])) {
|
||||||
|
$contact = Contact::getByURL($contact['url'], false, ['header']);
|
||||||
|
}
|
||||||
|
if (!empty($contact['header'])) {
|
||||||
|
$url = $contact['header'];
|
||||||
|
} else {
|
||||||
|
$url = DI::baseUrl() . '/images/blank.png';
|
||||||
|
}
|
||||||
|
return MPhoto::createPhotoForSystemResource($url);
|
||||||
case "profile":
|
case "profile":
|
||||||
case "custom":
|
case "custom":
|
||||||
$scale = 4;
|
$scale = 4;
|
||||||
|
|
|
@ -29,7 +29,6 @@ use Friendica\Database\DBA;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
use Friendica\Model\Contact;
|
use Friendica\Model\Contact;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
use Friendica\Util\Proxy;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class Account
|
* Class Account
|
||||||
|
@ -114,9 +113,9 @@ class Account extends BaseDataTransferObject
|
||||||
|
|
||||||
$this->note = BBCode::convert($publicContact['about'], false);
|
$this->note = BBCode::convert($publicContact['about'], false);
|
||||||
$this->url = $publicContact['url'];
|
$this->url = $publicContact['url'];
|
||||||
$this->avatar = ($userContact['photo'] ?? $publicContact['photo']) ?: Proxy::proxifyUrl($userContact['avatar'] ?? $publicContact['avatar']);
|
$this->avatar = (($userContact['photo'] ?? '') ?: $publicContact['photo']) ?: DI::baseUrl() . '/photo/contact/'. (($userContact['id'] ?? 0) ?: $publicContact['id']);
|
||||||
$this->avatar_static = $this->avatar;
|
$this->avatar_static = $this->avatar;
|
||||||
$this->header = Proxy::proxifyUrl($userContact['header'] ?? $publicContact['header'] ?? '') ?: DI::baseUrl() . '/images/blank.png';
|
$this->header = DI::baseUrl() . '/photo/header/'. (($userContact['id'] ?? 0) ?: $publicContact['id']);
|
||||||
$this->header_static = $this->header;
|
$this->header_static = $this->header;
|
||||||
$this->followers_count = $apcontact['followers_count'] ?? 0;
|
$this->followers_count = $apcontact['followers_count'] ?? 0;
|
||||||
$this->following_count = $apcontact['following_count'] ?? 0;
|
$this->following_count = $apcontact['following_count'] ?? 0;
|
||||||
|
|
|
@ -365,7 +365,7 @@ return [
|
||||||
'/photo' => [
|
'/photo' => [
|
||||||
'/{name}' => [Module\Photo::class, [R::GET]],
|
'/{name}' => [Module\Photo::class, [R::GET]],
|
||||||
'/{type}/{name}' => [Module\Photo::class, [R::GET]],
|
'/{type}/{name}' => [Module\Photo::class, [R::GET]],
|
||||||
'/{type}/{customize}/{name}' => [Module\Photo::class, [R::GET]],
|
'/{type}/{customsize}/{name}' => [Module\Photo::class, [R::GET]],
|
||||||
],
|
],
|
||||||
|
|
||||||
'/pretheme' => [Module\ThemeDetails::class, [R::GET]],
|
'/pretheme' => [Module\ThemeDetails::class, [R::GET]],
|
||||||
|
|
Loading…
Reference in a new issue