diff options
author | kondou <kondou@ts.unde.re> | 2013-08-26 16:46:55 +0200 |
---|---|---|
committer | kondou <kondou@ts.unde.re> | 2013-08-26 16:46:55 +0200 |
commit | 31736a1df36745467ad176ee1ffe442b87546012 (patch) | |
tree | 5d65ed5f890abc9c1e275dd382d037f3f52031d4 /core | |
parent | 9a8908b643c69451118ab76ca36e5fa0e704bd0a (diff) | |
download | nextcloud-server-31736a1df36745467ad176ee1ffe442b87546012.tar.gz nextcloud-server-31736a1df36745467ad176ee1ffe442b87546012.zip |
Have a controller instead ofo avatar.php and fix some cropper-design
Diffstat (limited to 'core')
-rw-r--r-- | core/avatar/controller.php | 88 | ||||
-rw-r--r-- | core/routes.php | 20 |
2 files changed, 108 insertions, 0 deletions
diff --git a/core/avatar/controller.php b/core/avatar/controller.php new file mode 100644 index 00000000000..cd51810e0e0 --- /dev/null +++ b/core/avatar/controller.php @@ -0,0 +1,88 @@ +<?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. + */ + +class CoreAvatarController { + public static function getAvatar($args) { + if (!\OC_User::isLoggedIn()) { + header("HTTP/1.0 403 Forbidden"); + \OC_Template::printErrorPage("Permission denied"); + return; + } + + $user = stripslashes($args['user']); + $size = (int)$args['size']; + if ($size > 2048) { + $size = 2048; + } + // Undefined size + elseif ($size === 0) { + $size = 64; + } + + $image = \OC_Avatar::get($user, $size); + + if ($image instanceof \OC_Image) { + $image->show(); + } elseif ($image === false) { + \OC_JSON::success(array('user' => $user, 'size' => $size)); + } + } + + public static function postAvatar($args) { + $user = \OC_User::getUser(); + + if (isset($_POST['path'])) { + $path = stripslashes($_POST['path']); + $avatar = OC::$SERVERROOT.'/data/'.$user.'/files'.$path; + } + + if (!empty($_FILES)) { + $files = $_FILES['files']; + if ($files['error'][0] === 0) { + $avatar = file_get_contents($files['tmp_name'][0]); + unlink($files['tmp_name'][0]); + } + } + + try { + \OC_Avatar::set($user, $avatar); + \OC_JSON::success(); + } catch (\OC\NotSquareException $e) { + // TODO move unfitting avatar to /datadir/$user/tmpavatar{png.jpg} here + \OC_JSON::error(array("data" => array("message" => "notsquare") )); + } catch (\Exception $e) { + \OC_JSON::error(array("data" => array("message" => $e->getMessage()) )); + } + } + + public static function deleteAvatar($args) { + $user = OC_User::getUser(); + + try { + \OC_Avatar::remove($user); + \OC_JSON::success(); + } catch (\Exception $e) { + \OC_JSON::error(array("data" => array ("message" => $e->getMessage()) )); + } + } + + public static function getTmpAvatar($args) { + // TODO deliver /datadir/$user/tmpavatar.{png|jpg} here, filename may include a timestamp + // TODO make a cronjob that cleans up the tmpavatar after it's older than 2 hours, should be run every hour + $user = OC_User::getUser(); + } + + public static function postCroppedAvatar($args) { + $user = OC_User::getUser(); + $crop = json_decode($_POST['crop'], true); + $image = new \OC_Image($avatar); + $image->crop($x, $y, $w, $h); + $avatar = $image->data(); + $cropped = true; + } +} diff --git a/core/routes.php b/core/routes.php index dd8222d4378..150dbab9c10 100644 --- a/core/routes.php +++ b/core/routes.php @@ -57,6 +57,26 @@ $this->create('core_lostpassword_reset_password', '/lostpassword/reset/{token}/{ ->post() ->action('OC_Core_LostPassword_Controller', 'resetPassword'); +// Avatar routes +OC::$CLASSPATH['CoreAvatarController'] = 'core/avatar/controller.php'; +$this->create('core_avatar_get', '/avatar/{user}/{size}') + ->defaults(array('user' => '', 'size' => 64)) + ->get() + ->action('CoreAvatarController', 'getAvatar'); +$this->create('core_avatar_post', '/avatar/') + ->post() + ->action('CoreAvatarController', 'postAvatar'); +$this->create('core_avatar_delete', '/avatar/') + ->delete() + ->action('CoreAvatarController', 'deleteAvatar'); +$this->create('core_avatar_get_tmp', '/avatar/tmp/{size}') + ->defaults(array('size' => 64)) + ->get() + ->action('CoreAvatarController', 'getTmpAvatar'); +$this->create('core_avatar_post_cropped', '/avatar/cropped') + ->post() + ->action('CoreAvatarController', 'postCroppedAvatar'); + // Not specifically routed $this->create('app_css', '/apps/{app}/{file}') ->requirements(array('file' => '.*.css')) |