diff options
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')) |