case Storage\SystemResource::getName():
$this->backendInstances[$name] = new Storage\SystemResource();
break;
+ case Storage\ExternalResource::getName():
+ $this->backendInstances[$name] = new Storage\ExternalResource();
+ break;
default:
$data = [
'name' => $name,
public function isValidBackend(string $name = null, bool $onlyUserBackend = false)
{
return array_key_exists($name, $this->backends) ||
- (!$onlyUserBackend && $name === Storage\SystemResource::getName());
+ (!$onlyUserBackend && in_array($name, [Storage\SystemResource::getName(), Storage\ExternalResource::getName()]));
}
/**
use Friendica\Database\DBA;
use Friendica\Database\DBStructure;
use Friendica\DI;
+use Friendica\Model\Storage\ExternalResource;
use Friendica\Model\Storage\SystemResource;
use Friendica\Object\Image;
use Friendica\Util\DateTimeFormat;
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
--- /dev/null
+<?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;
+ }
+}
namespace Friendica\Model\Storage;
use \BadMethodCallException;
-use Friendica\DI;
/**
* System resource storage class
*/
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);
if (!in_array($folder, self::VALID_FOLDERS)) {
return "";
} else {
$url = DI::baseUrl() . Contact::DEFAULT_AVATAR_PHOTO;
}
- return MPhoto::createPhotoForSystemResource($url);
+ return MPhoto::createPhotoForExternalResource($url);
case "header":
$contact = Contact::getById($uid, ['uid', 'url', 'header']);
if (empty($contact)) {
} else {
$url = DI::baseUrl() . '/images/blank.png';
}
- return MPhoto::createPhotoForSystemResource($url);
+ return MPhoto::createPhotoForExternalResource($url);
case "profile":
case "custom":
$scale = 4;
$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;
}