From 2c5b39fb53b77a26f0082eacf2fd11ec8db3d96a Mon Sep 17 00:00:00 2001 From: Oliver Eglseder Date: Mon, 26 Mar 2018 17:31:15 +0200 Subject: [PATCH] [FEATURE] Add API endpoint to return the user's image --- Classes/Server.php | 1 + Classes/UserRepository.php | 52 ++++++++++++++++++++++++++++++++++++++ ext_emconf.php | 2 +- 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/Classes/Server.php b/Classes/Server.php index 26c8b89..82f7b6d 100644 --- a/Classes/Server.php +++ b/Classes/Server.php @@ -37,6 +37,7 @@ class Server 'user/state' => [UserRepository::class, 'getUserState'], 'user/auth' => [SecurityService::class, 'authUser'], 'user/get' => [UserRepository::class, 'getUser'], + 'user/image' => [UserRepository::class, 'getUserImage'], 'encryption/getKey' => [SecurityService::class, 'createEncryptionKey'], ]; diff --git a/Classes/UserRepository.php b/Classes/UserRepository.php index a357b11..3f12fa0 100644 --- a/Classes/UserRepository.php +++ b/Classes/UserRepository.php @@ -1,9 +1,29 @@ , in2code GmbH + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * 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 General Public License for more details. + */ + use TYPO3\CMS\Backend\Utility\BackendUtility; use TYPO3\CMS\Core\Database\DatabaseConnection; +use TYPO3\CMS\Core\Resource\Exception\FileDoesNotExistException; +use TYPO3\CMS\Core\Resource\File; +use TYPO3\CMS\Core\Resource\ResourceFactory; +/** + * Class UserRepository + */ class UserRepository { /** @@ -72,4 +92,36 @@ public function getUser($user) $where = 'username = ' . $this->connection->fullQuoteStr($user, 'be_users'); return $this->connection->exec_SELECTgetSingleRow(implode(',', $this->fields), 'be_users', $where); } + + /** + * @param string $user + * + * @return null|array + */ + public function getUserImage($user) + { + $sql = ' + SELECT sys_file.* FROM sys_file + RIGHT JOIN sys_file_reference ON sys_file.uid = sys_file_reference.uid_local + RIGHT JOIN be_users ON sys_file_reference.uid_foreign = be_users.uid + WHERE be_users.username = ' . $this->connection->fullQuoteStr($user, 'be_users') . ' + AND sys_file_reference.deleted = 0 + AND sys_file_reference.tablenames = "be_users" + AND sys_file_reference.fieldname = "avatar"'; + + $file = $this->connection->admin_query($sql)->fetch_assoc(); + if (!empty($file['uid'])) { + try { + $resource = ResourceFactory::getInstance()->getFileObject($file['uid'], $file); + if ($resource instanceof File && $resource->exists()) { + return [ + 'identifier' => $resource->getName(), + 'b64content' => base64_encode($resource->getContents()), + ]; + } + } catch (FileDoesNotExistException $e) { + } + } + return null; + } } diff --git a/ext_emconf.php b/ext_emconf.php index a220080..5a745f6 100644 --- a/ext_emconf.php +++ b/ext_emconf.php @@ -10,7 +10,7 @@ 'author' => 'Oliver Eglseder', 'author_email' => 'php@vxvr.de', 'author_company' => 'in2code GmbH', - 'version' => '1.0.1', + 'version' => '1.1.0', 'constraints' => [ 'depends' => [ 'typo3' => '7.6.0-8.7.99',