nextcloud/core/avatar/controller.php

159 lines
4.2 KiB
PHP
Raw Normal View History

<?php
/**
* Copyright (c) 2013 Christopher Schäpers <christopher@schaepers.it>
* This file is licensed under the Affero General Public License version 3 or
* later.
* See the COPYING-README file.
*/
2013-09-05 00:22:56 +04:00
namespace OC\Core\Avatar;
class Controller {
public static function getAvatar($args) {
2013-09-05 02:04:31 +04:00
\OC_JSON::checkLoggedIn();
\OC_JSON::callCheck();
$user = stripslashes($args['user']);
$size = (int)$args['size'];
if ($size > 2048) {
$size = 2048;
}
// Undefined size
elseif ($size === 0) {
$size = 64;
}
$avatar = new \OC_Avatar($user);
$image = $avatar->get($size);
\OC_Response::disableCaching();
2013-09-02 01:25:50 +04:00
\OC_Response::setLastModifiedHeader(time());
if ($image instanceof \OC_Image) {
\OC_Response::setETagHeader(crc32($image->data()));
$image->show();
} else {
// Signalizes $.avatar() to display a defaultavatar
\OC_JSON::success();
}
}
public static function postAvatar($args) {
2013-09-05 02:04:31 +04:00
\OC_JSON::checkLoggedIn();
\OC_JSON::callCheck();
$user = \OC_User::getUser();
if (isset($_POST['path'])) {
$path = stripslashes($_POST['path']);
2013-08-28 18:39:00 +04:00
$view = new \OC\Files\View('/'.$user.'/files');
$newAvatar = $view->file_get_contents($path);
} elseif (!empty($_FILES)) {
$files = $_FILES['files'];
if (
$files['error'][0] === 0 &&
is_uploaded_file($files['tmp_name'][0]) &&
!\OC\Files\Filesystem::isFileBlacklisted($files['tmp_name'][0])
) {
$newAvatar = file_get_contents($files['tmp_name'][0]);
unlink($files['tmp_name'][0]);
}
} else {
$l = new \OC_L10n('core');
\OC_JSON::error(array("data" => array("message" => $l->t("No image or file provided")) ));
return;
}
try {
$avatar = new \OC_Avatar($user);
$avatar->set($newAvatar);
\OC_JSON::success();
} catch (\OC\NotSquareException $e) {
$image = new \OC_Image($newAvatar);
2013-08-28 18:39:00 +04:00
if ($image->valid()) {
\OC_Cache::set('tmpavatar', $image->data(), 7200);
\OC_JSON::error(array("data" => "notsquare"));
} else {
$l = new \OC_L10n('core');
$mimeType = $image->mimeType();
if ($mimeType !== 'image/jpeg' && $mimeType !== 'image/png') {
\OC_JSON::error(array("data" => array("message" => $l->t("Unknown filetype")) ));
}
2013-09-04 23:22:36 +04:00
if (!$image->valid()) {
\OC_JSON::error(array("data" => array("message" => $l->t("Invalid image")) ));
}
}
} catch (\Exception $e) {
\OC_JSON::error(array("data" => array("message" => $e->getMessage()) ));
}
}
public static function deleteAvatar($args) {
2013-09-05 02:04:31 +04:00
\OC_JSON::checkLoggedIn();
\OC_JSON::callCheck();
2013-09-05 00:22:56 +04:00
$user = \OC_User::getUser();
try {
$avatar = new \OC_Avatar($user);
$avatar->remove();
\OC_JSON::success();
} catch (\Exception $e) {
\OC_JSON::error(array("data" => array("message" => $e->getMessage()) ));
}
}
public static function getTmpAvatar($args) {
2013-09-05 02:04:31 +04:00
\OC_JSON::checkLoggedIn();
\OC_JSON::callCheck();
$tmpavatar = \OC_Cache::get('tmpavatar');
if (is_null($tmpavatar)) {
$l = new \OC_L10n('core');
\OC_JSON::error(array("data" => array("message" => $l->t("No temporary profile picture available, try again")) ));
2013-08-28 18:39:00 +04:00
return;
}
$image = new \OC_Image($tmpavatar);
\OC_Response::disableCaching();
2013-09-02 01:25:50 +04:00
\OC_Response::setLastModifiedHeader(time());
2013-09-02 01:07:38 +04:00
\OC_Response::setETagHeader(crc32($image->data()));
2013-08-28 18:39:00 +04:00
$image->show();
}
public static function postCroppedAvatar($args) {
2013-09-05 02:04:31 +04:00
\OC_JSON::checkLoggedIn();
\OC_JSON::callCheck();
2013-09-05 00:22:56 +04:00
$user = \OC_User::getUser();
if (isset($_POST['crop'])) {
$crop = $_POST['crop'];
} else {
$l = new \OC_L10n('core');
\OC_JSON::error(array("data" => array("message" => $l->t("No crop data provided")) ));
return;
}
2013-08-28 18:39:00 +04:00
$tmpavatar = \OC_Cache::get('tmpavatar');
if (is_null($tmpavatar)) {
$l = new \OC_L10n('core');
\OC_JSON::error(array("data" => array("message" => $l->t("No temporary profile picture available, try again")) ));
2013-08-28 18:39:00 +04:00
return;
}
$image = new \OC_Image($tmpavatar);
2013-08-28 18:39:00 +04:00
$image->crop($crop['x'], $crop['y'], $crop['w'], $crop['h']);
try {
$avatar = new \OC_Avatar($user);
2013-09-14 16:15:52 +04:00
$avatar->set($image->data());
2013-08-28 18:39:00 +04:00
// Clean up
\OC_Cache::remove('tmpavatar');
2013-08-28 18:39:00 +04:00
\OC_JSON::success();
2013-08-30 15:16:13 +04:00
} catch (\Exception $e) {
\OC_JSON::error(array("data" => array("message" => $e->getMessage()) ));
}
}
}