diff options
author | Bernhard Posselt <Raydiation@users.noreply.github.com> | 2013-09-14 16:00:36 -0700 |
---|---|---|
committer | Bernhard Posselt <Raydiation@users.noreply.github.com> | 2013-09-14 16:00:36 -0700 |
commit | a58e176852d80dd23b9346b4f8bd676e9ca4d8ed (patch) | |
tree | 3f06e0ab511159221e915a6fdce8393b6192bfdb /settings | |
parent | a0c2c2473a975893d590e779433091a3f7d6abb2 (diff) | |
parent | 86143beb6ae264e31e806dd195a04e5ed6f9f2d1 (diff) | |
download | nextcloud-server-a58e176852d80dd23b9346b4f8bd676e9ca4d8ed.tar.gz nextcloud-server-a58e176852d80dd23b9346b4f8bd676e9ca4d8ed.zip |
Merge pull request #4506 from owncloud/oc_avatars
OC Avatars
Diffstat (limited to 'settings')
-rw-r--r-- | settings/css/settings.css | 4 | ||||
-rw-r--r-- | settings/js/personal.js | 112 | ||||
-rw-r--r-- | settings/personal.php | 6 | ||||
-rw-r--r-- | settings/templates/personal.php | 21 | ||||
-rw-r--r-- | settings/templates/users.php | 6 | ||||
-rw-r--r-- | settings/users.php | 1 |
6 files changed, 150 insertions, 0 deletions
diff --git a/settings/css/settings.css b/settings/css/settings.css index d5ffe448482..57a43180a43 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -21,6 +21,10 @@ input#openid, input#webdav { width:20em; } input#identity { width:20em; } #email { width: 17em; } +#avatar .warning { + width: 350px; +} + .msg.success{ color:#fff; background-color:#0f0; padding:3px; text-shadow:1px 1px #000; } .msg.error{ color:#fff; background-color:#f00; padding:3px; text-shadow:1px 1px #000; } diff --git a/settings/js/personal.js b/settings/js/personal.js index 77826c82de1..fab32b83b64 100644 --- a/settings/js/personal.js +++ b/settings/js/personal.js @@ -44,6 +44,78 @@ function changeDisplayName(){ } } +function updateAvatar () { + $headerdiv = $('#header .avatardiv'); + $displaydiv = $('#displayavatar .avatardiv'); + + $headerdiv.css({'background-color': ''}); + $headerdiv.avatar(OC.currentUser, 32, true); + $displaydiv.css({'background-color': ''}); + $displaydiv.avatar(OC.currentUser, 128, true); +} + +function showAvatarCropper() { + $cropper = $('#cropper'); + $cropper.prepend("<img>"); + $cropperImage = $('#cropper img'); + + $cropperImage.attr('src', OC.Router.generate('core_avatar_get_tmp')+'?requesttoken='+oc_requesttoken+'#'+Math.floor(Math.random()*1000)); + + // Looks weird, but on('load', ...) doesn't work in IE8 + $cropperImage.ready(function(){ + $('#displayavatar').hide(); + $cropper.show(); + + $cropperImage.Jcrop({ + onChange: saveCoords, + onSelect: saveCoords, + aspectRatio: 1, + boxHeight: 500, + boxWidth: 500, + setSelect: [0, 0, 300, 300] + }); + }); +} + +function sendCropData() { + cleanCropper(); + + var cropperdata = $('#cropper').data(); + var data = { + x: cropperdata.x, + y: cropperdata.y, + w: cropperdata.w, + h: cropperdata.h + }; + $.post(OC.Router.generate('core_avatar_post_cropped'), {crop: data}, avatarResponseHandler); +} + +function saveCoords(c) { + $('#cropper').data(c); +} + +function cleanCropper() { + $cropper = $('#cropper'); + $('#displayavatar').show(); + $cropper.hide(); + $('.jcrop-holder').remove(); + $('#cropper img').removeData('Jcrop').removeAttr('style').removeAttr('src'); + $('#cropper img').remove(); +} + +function avatarResponseHandler(data) { + $warning = $('#avatar .warning'); + $warning.hide(); + if (data.status === "success") { + updateAvatar(); + } else if (data.data === "notsquare") { + showAvatarCropper(); + } else { + $warning.show(); + $warning.text(data.data.message); + } +} + $(document).ready(function(){ $("#passwordbutton").click( function(){ if ($('#pass1').val() !== '' && $('#pass2').val() !== '') { @@ -128,6 +200,46 @@ $(document).ready(function(){ } }); + var uploadparms = { + done: function(e, data) { + avatarResponseHandler(data.result); + } + }; + + $('#uploadavatarbutton').click(function(){ + $('#uploadavatar').click(); + }); + + $('#uploadavatar').fileupload(uploadparms); + + $('#selectavatar').click(function(){ + OC.dialogs.filepicker( + t('settings', "Select a profile picture"), + function(path){ + $.post(OC.Router.generate('core_avatar_post'), {path: path}, avatarResponseHandler); + }, + false, + ["image/png", "image/jpeg"] + ); + }); + + $('#removeavatar').click(function(){ + $.ajax({ + type: 'DELETE', + url: OC.Router.generate('core_avatar_delete'), + success: function(msg) { + updateAvatar(); + } + }); + }); + + $('#abortcropperbutton').click(function(){ + cleanCropper(); + }); + + $('#sendcropperbutton').click(function(){ + sendCropData(); + }); } ); OC.Encryption = { diff --git a/settings/personal.php b/settings/personal.php index 112eaa3c748..670e18e20ef 100644 --- a/settings/personal.php +++ b/settings/personal.php @@ -15,6 +15,11 @@ OC_Util::addScript( 'settings', 'personal' ); OC_Util::addStyle( 'settings', 'settings' ); OC_Util::addScript( '3rdparty', 'chosen/chosen.jquery.min' ); OC_Util::addStyle( '3rdparty', 'chosen' ); +\OC_Util::addScript('files', 'jquery.fileupload'); +if (\OC_Config::getValue('enable_avatars', true) === true) { + \OC_Util::addScript('3rdparty/Jcrop', 'jquery.Jcrop.min'); + \OC_Util::addStyle('3rdparty/Jcrop', 'jquery.Jcrop.min'); +} OC_App::setActiveNavigationEntry( 'personal' ); $storageInfo=OC_Helper::getStorageInfo('/'); @@ -84,6 +89,7 @@ $tmpl->assign('passwordChangeSupported', OC_User::canUserChangePassword(OC_User: $tmpl->assign('displayNameChangeSupported', OC_User::canUserChangeDisplayName(OC_User::getUser())); $tmpl->assign('displayName', OC_User::getDisplayName()); $tmpl->assign('enableDecryptAll' , $enableDecryptAll); +$tmpl->assign('enableAvatars', \OC_Config::getValue('enable_avatars', true)); $forms=OC_App::getForms('personal'); $tmpl->assign('forms', array()); diff --git a/settings/templates/personal.php b/settings/templates/personal.php index 63e1258b958..d2ca8154f16 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -80,6 +80,27 @@ if($_['passwordChangeSupported']) { } ?> +<?php if ($_['enableAvatars']): ?> +<form id="avatar" method="post" action="<?php p(\OC_Helper::linkToRoute('core_avatar_post')); ?>"> + <fieldset class="personalblock"> + <legend><strong><?php p($l->t('Profile picture')); ?></strong></legend> + <div id="displayavatar"> + <div class="avatardiv"></div><br> + <div class="warning hidden"></div> + <div class="inlineblock button" id="uploadavatarbutton"><?php p($l->t('Upload new')); ?></div> + <input type="file" class="hidden" name="files[]" id="uploadavatar"> + <div class="inlineblock button" id="selectavatar"><?php p($l->t('Select new from Files')); ?></div> + <div class="inlineblock button" id="removeavatar"><?php p($l->t('Remove image')); ?></div><br> + <?php p($l->t('Either png or jpg. Ideally square but you will be able to crop it.')); ?> + </div> + <div id="cropper" class="hidden"> + <div class="inlineblock button" id="abortcropperbutton"><?php p($l->t('Abort')); ?></div> + <div class="inlineblock button primary" id="sendcropperbutton"><?php p($l->t('Choose as profile image')); ?></div> + </div> + </fieldset> +</form> +<?php endif; ?> + <form> <fieldset class="personalblock"> <legend><strong><?php p($l->t('Language'));?></strong></legend> diff --git a/settings/templates/users.php b/settings/templates/users.php index 22450fdf25f..747d052a7bd 100644 --- a/settings/templates/users.php +++ b/settings/templates/users.php @@ -81,6 +81,9 @@ $_['subadmingroups'] = array_flip($items); <table class="hascontrols" data-groups="<?php p(json_encode($allGroups));?>"> <thead> <tr> + <?php if ($_['enableAvatars']): ?> + <th id='headerAvatar'></th> + <?php endif; ?> <th id='headerName'><?php p($l->t('Username'))?></th> <th id="headerDisplayName"><?php p($l->t( 'Display Name' )); ?></th> <th id="headerPassword"><?php p($l->t( 'Password' )); ?></th> @@ -96,6 +99,9 @@ $_['subadmingroups'] = array_flip($items); <?php foreach($_["users"] as $user): ?> <tr data-uid="<?php p($user["name"]) ?>" data-displayName="<?php p($user["displayName"]) ?>"> + <?php if ($_['enableAvatars']): ?> + <td class="avatar"><div class="avatardiv"></div></td> + <?php endif; ?> <td class="name"><?php p($user["name"]); ?></td> <td class="displayName"><span><?php p($user["displayName"]); ?></span> <img class="svg action" src="<?php p(image_path('core', 'actions/rename.svg'))?>" diff --git a/settings/users.php b/settings/users.php index 213d1eecfda..2f1c63a0b59 100644 --- a/settings/users.php +++ b/settings/users.php @@ -81,4 +81,5 @@ $tmpl->assign( 'quota_preset', $quotaPreset); $tmpl->assign( 'default_quota', $defaultQuota); $tmpl->assign( 'defaultQuotaIsUserDefined', $defaultQuotaIsUserDefined); $tmpl->assign( 'recoveryAdminEnabled', $recoveryAdminEnabled); +$tmpl->assign('enableAvatars', \OC_Config::getValue('enable_avatars', true)); $tmpl->printPage(); |