summaryrefslogtreecommitdiffstats
path: root/lib/private/Avatar.php
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@owncloud.com>2016-04-29 08:00:31 +0200
committerRoeland Jago Douma <rullzer@owncloud.com>2016-04-29 08:00:31 +0200
commitd312051b3d9554519155c6c4f98b51f404a468e1 (patch)
treed2de005558e004aaf86496c8bae82c041a78f0b1 /lib/private/Avatar.php
parent1f63e8df61dbee0ee4acbdf485b1132312b88ce5 (diff)
downloadnextcloud-server-d312051b3d9554519155c6c4f98b51f404a468e1.tar.gz
nextcloud-server-d312051b3d9554519155c6c4f98b51f404a468e1.zip
Moved some files in \OC to PSR-4
* \OC\ActivityManager * \OC\AllConfig * \OC\AppConfig * \OC\AppHelper * \OC\Avatar * \OC\AvatarManager * \OC\CapabilitiesManager * \OC\Config * \OC\ContactsManager * \OC\DatabaseException * \OC\DatabaseSetupException
Diffstat (limited to 'lib/private/Avatar.php')
-rw-r--r--lib/private/Avatar.php198
1 files changed, 198 insertions, 0 deletions
diff --git a/lib/private/Avatar.php b/lib/private/Avatar.php
new file mode 100644
index 00000000000..3f8038360a4
--- /dev/null
+++ b/lib/private/Avatar.php
@@ -0,0 +1,198 @@
+<?php
+/**
+ * @author Arthur Schiwon <blizzz@owncloud.com>
+ * @author Christopher Schäpers <kondou@ts.unde.re>
+ * @author Lukas Reschke <lukas@owncloud.com>
+ * @author Morris Jobke <hey@morrisjobke.de>
+ * @author Robin Appelman <icewind@owncloud.com>
+ * @author Roeland Jago Douma <rullzer@owncloud.com>
+ * @author Thomas Müller <thomas.mueller@tmit.eu>
+ *
+ * @copyright Copyright (c) 2016, ownCloud, Inc.
+ * @license AGPL-3.0
+ *
+ * This code is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License, version 3,
+ * as published by the Free Software Foundation.
+ *
+ * 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, version 3,
+ * along with this program. If not, see <http://www.gnu.org/licenses/>
+ *
+ */
+
+namespace OC;
+
+use OC\User\User;
+use OCP\Files\Folder;
+use OCP\Files\File;
+use OCP\Files\NotFoundException;
+use OCP\Files\NotPermittedException;
+use OCP\IAvatar;
+use OCP\IImage;
+use OCP\IL10N;
+use OC_Image;
+use OCP\ILogger;
+
+/**
+ * This class gets and sets users avatars.
+ */
+
+class Avatar implements IAvatar {
+ /** @var Folder */
+ private $folder;
+ /** @var IL10N */
+ private $l;
+ /** @var User */
+ private $user;
+ /** @var ILogger */
+ private $logger;
+
+ /**
+ * constructor
+ *
+ * @param Folder $folder The folder where the avatars are
+ * @param IL10N $l
+ * @param User $user
+ * @param ILogger $logger
+ */
+ public function __construct (Folder $folder, IL10N $l, $user, ILogger $logger) {
+ $this->folder = $folder;
+ $this->l = $l;
+ $this->user = $user;
+ $this->logger = $logger;
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function get ($size = 64) {
+ try {
+ $file = $this->getFile($size);
+ } catch (NotFoundException $e) {
+ return false;
+ }
+
+ $avatar = new OC_Image();
+ $avatar->loadFromData($file->getContent());
+ return $avatar;
+ }
+
+ /**
+ * Check if an avatar exists for the user
+ *
+ * @return bool
+ */
+ public function exists() {
+ return $this->folder->nodeExists('avatar.jpg') || $this->folder->nodeExists('avatar.png');
+ }
+
+ /**
+ * sets the users avatar
+ * @param IImage|resource|string $data An image object, imagedata or path to set a new avatar
+ * @throws \Exception if the provided file is not a jpg or png image
+ * @throws \Exception if the provided image is not valid
+ * @throws NotSquareException if the image is not square
+ * @return void
+ */
+ public function set ($data) {
+
+ if($data instanceOf IImage) {
+ $img = $data;
+ $data = $img->data();
+ } else {
+ $img = new OC_Image($data);
+ }
+ $type = substr($img->mimeType(), -3);
+ if ($type === 'peg') {
+ $type = 'jpg';
+ }
+ if ($type !== 'jpg' && $type !== 'png') {
+ throw new \Exception($this->l->t("Unknown filetype"));
+ }
+
+ if (!$img->valid()) {
+ throw new \Exception($this->l->t("Invalid image"));
+ }
+
+ if (!($img->height() === $img->width())) {
+ throw new NotSquareException();
+ }
+
+ $this->remove();
+ $this->folder->newFile('avatar.'.$type)->putContent($data);
+ $this->user->triggerChange('avatar');
+ }
+
+ /**
+ * remove the users avatar
+ * @return void
+ */
+ public function remove () {
+ $regex = '/^avatar\.([0-9]+\.)?(jpg|png)$/';
+ $avatars = $this->folder->getDirectoryListing();
+
+ foreach ($avatars as $avatar) {
+ if (preg_match($regex, $avatar->getName())) {
+ $avatar->delete();
+ }
+ }
+ $this->user->triggerChange('avatar');
+ }
+
+ /**
+ * @inheritdoc
+ */
+ public function getFile($size) {
+ $ext = $this->getExtension();
+
+ if ($size === -1) {
+ $path = 'avatar.' . $ext;
+ } else {
+ $path = 'avatar.' . $size . '.' . $ext;
+ }
+
+ try {
+ $file = $this->folder->get($path);
+ } catch (NotFoundException $e) {
+ if ($size <= 0) {
+ throw new NotFoundException;
+ }
+
+ $avatar = new OC_Image();
+ /** @var File $file */
+ $file = $this->folder->get('avatar.' . $ext);
+ $avatar->loadFromData($file->getContent());
+ if ($size !== -1) {
+ $avatar->resize($size);
+ }
+ try {
+ $file = $this->folder->newFile($path);
+ $file->putContent($avatar->data());
+ } catch (NotPermittedException $e) {
+ $this->logger->error('Failed to save avatar for ' . $this->user->getUID());
+ }
+ }
+
+ return $file;
+ }
+
+ /**
+ * Get the extension of the avatar. If there is no avatar throw Exception
+ *
+ * @return string
+ * @throws NotFoundException
+ */
+ private function getExtension() {
+ if ($this->folder->nodeExists('avatar.jpg')) {
+ return 'jpg';
+ } elseif ($this->folder->nodeExists('avatar.png')) {
+ return 'png';
+ }
+ throw new NotFoundException;
+ }
+}