New class for external resources
This commit is contained in:
parent
96809b3fdd
commit
9276f6823b
|
@ -126,6 +126,9 @@ class StorageManager
|
||||||
case Storage\SystemResource::getName():
|
case Storage\SystemResource::getName():
|
||||||
$this->backendInstances[$name] = new Storage\SystemResource();
|
$this->backendInstances[$name] = new Storage\SystemResource();
|
||||||
break;
|
break;
|
||||||
|
case Storage\ExternalResource::getName():
|
||||||
|
$this->backendInstances[$name] = new Storage\ExternalResource();
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
$data = [
|
$data = [
|
||||||
'name' => $name,
|
'name' => $name,
|
||||||
|
@ -158,7 +161,7 @@ class StorageManager
|
||||||
public function isValidBackend(string $name = null, bool $onlyUserBackend = false)
|
public function isValidBackend(string $name = null, bool $onlyUserBackend = false)
|
||||||
{
|
{
|
||||||
return array_key_exists($name, $this->backends) ||
|
return array_key_exists($name, $this->backends) ||
|
||||||
(!$onlyUserBackend && $name === Storage\SystemResource::getName());
|
(!$onlyUserBackend && in_array($name, [Storage\SystemResource::getName(), Storage\ExternalResource::getName()]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -27,6 +27,7 @@ use Friendica\Core\System;
|
||||||
use Friendica\Database\DBA;
|
use Friendica\Database\DBA;
|
||||||
use Friendica\Database\DBStructure;
|
use Friendica\Database\DBStructure;
|
||||||
use Friendica\DI;
|
use Friendica\DI;
|
||||||
|
use Friendica\Model\Storage\ExternalResource;
|
||||||
use Friendica\Model\Storage\SystemResource;
|
use Friendica\Model\Storage\SystemResource;
|
||||||
use Friendica\Object\Image;
|
use Friendica\Object\Image;
|
||||||
use Friendica\Util\DateTimeFormat;
|
use Friendica\Util\DateTimeFormat;
|
||||||
|
@ -263,6 +264,28 @@ class Photo
|
||||||
return $photo;
|
return $photo;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct a photo array for an external resource image
|
||||||
|
*
|
||||||
|
* @param string $url Image URL
|
||||||
|
* @param string $mimetype Image mime type. Defaults to "image/jpeg"
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
* @throws \Exception
|
||||||
|
*/
|
||||||
|
public static function createPhotoForExternalResource($url, $mimetype = "image/jpeg")
|
||||||
|
{
|
||||||
|
$fields = self::getFields();
|
||||||
|
$values = array_fill(0, count($fields), "");
|
||||||
|
|
||||||
|
$photo = array_combine($fields, $values);
|
||||||
|
$photo['backend-class'] = ExternalResource::NAME;
|
||||||
|
$photo['backend-ref'] = $url;
|
||||||
|
$photo['type'] = $mimetype;
|
||||||
|
$photo['cacheable'] = false;
|
||||||
|
|
||||||
|
return $photo;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* store photo metadata in db and binary in default backend
|
* store photo metadata in db and binary in default backend
|
||||||
|
|
99
src/Model/Storage/ExternalResource.php
Normal file
99
src/Model/Storage/ExternalResource.php
Normal file
|
@ -0,0 +1,99 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* @copyright Copyright (C) 2010-2021, the Friendica project
|
||||||
|
*
|
||||||
|
* @license GNU AGPL version 3 or any later version
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace Friendica\Model\Storage;
|
||||||
|
|
||||||
|
use \BadMethodCallException;
|
||||||
|
use Friendica\DI;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* External resource storage class
|
||||||
|
*
|
||||||
|
* This class is used to load external resources, like images.
|
||||||
|
* Is not intended to be selectable by admins as default storage class.
|
||||||
|
*/
|
||||||
|
class ExternalResource implements IStorage
|
||||||
|
{
|
||||||
|
const NAME = 'ExternalResource';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function get(string $filename)
|
||||||
|
{
|
||||||
|
$parts = parse_url($filename);
|
||||||
|
if (empty($parts['scheme']) || empty($parts['host'])) {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
$curlResult = DI::httpRequest()->get($filename);
|
||||||
|
if ($curlResult->isSuccess()) {
|
||||||
|
return $curlResult->getBody();
|
||||||
|
} else {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function put(string $data, string $filename = '')
|
||||||
|
{
|
||||||
|
throw new BadMethodCallException();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function delete(string $filename)
|
||||||
|
{
|
||||||
|
throw new BadMethodCallException();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function getOptions()
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function saveOptions(array $data)
|
||||||
|
{
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function __toString()
|
||||||
|
{
|
||||||
|
return self::NAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public static function getName()
|
||||||
|
{
|
||||||
|
return self::NAME;
|
||||||
|
}
|
||||||
|
}
|
|
@ -22,7 +22,6 @@
|
||||||
namespace Friendica\Model\Storage;
|
namespace Friendica\Model\Storage;
|
||||||
|
|
||||||
use \BadMethodCallException;
|
use \BadMethodCallException;
|
||||||
use Friendica\DI;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* System resource storage class
|
* System resource storage class
|
||||||
|
@ -42,16 +41,6 @@ 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 "";
|
||||||
|
|
|
@ -167,7 +167,7 @@ class Photo extends BaseModule
|
||||||
} else {
|
} else {
|
||||||
$url = DI::baseUrl() . Contact::DEFAULT_AVATAR_PHOTO;
|
$url = DI::baseUrl() . Contact::DEFAULT_AVATAR_PHOTO;
|
||||||
}
|
}
|
||||||
return MPhoto::createPhotoForSystemResource($url);
|
return MPhoto::createPhotoForExternalResource($url);
|
||||||
case "header":
|
case "header":
|
||||||
$contact = Contact::getById($uid, ['uid', 'url', 'header']);
|
$contact = Contact::getById($uid, ['uid', 'url', 'header']);
|
||||||
if (empty($contact)) {
|
if (empty($contact)) {
|
||||||
|
@ -181,7 +181,7 @@ class Photo extends BaseModule
|
||||||
} else {
|
} else {
|
||||||
$url = DI::baseUrl() . '/images/blank.png';
|
$url = DI::baseUrl() . '/images/blank.png';
|
||||||
}
|
}
|
||||||
return MPhoto::createPhotoForSystemResource($url);
|
return MPhoto::createPhotoForExternalResource($url);
|
||||||
case "profile":
|
case "profile":
|
||||||
case "custom":
|
case "custom":
|
||||||
$scale = 4;
|
$scale = 4;
|
||||||
|
@ -211,7 +211,12 @@ class Photo extends BaseModule
|
||||||
$default = Contact::getDefaultAvatar($contact, Proxy::SIZE_THUMB);
|
$default = Contact::getDefaultAvatar($contact, Proxy::SIZE_THUMB);
|
||||||
}
|
}
|
||||||
|
|
||||||
$photo = MPhoto::createPhotoForSystemResource($default);
|
$parts = parse_url($default);
|
||||||
|
if (!empty($parts['scheme']) || !empty($parts['host'])) {
|
||||||
|
$photo = MPhoto::createPhotoForExternalResource($default);
|
||||||
|
} else {
|
||||||
|
$photo = MPhoto::createPhotoForSystemResource($default);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return $photo;
|
return $photo;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue