From 4a08f7d710ced1c564e05471e1f873ecfb9ca161 Mon Sep 17 00:00:00 2001 From: kondou <kondou@ts.unde.re> Date: Fri, 26 Jul 2013 12:20:11 +0200 Subject: [PATCH] Add basic avatars and gravatar --- config/config.sample.php | 6 ++++ core/img/defaultavatar.png | Bin 0 -> 12444 bytes core/templates/layout.user.php | 1 + lib/avatar.php | 59 ++++++++++++++++++++++++++++++++ lib/public/avatar.php | 15 ++++++++ lib/templatelayout.php | 5 +++ settings/admin.php | 1 + settings/ajax/setavatarmode.php | 12 +++++++ settings/js/admin.js | 6 ++++ settings/personal.php | 1 + settings/routes.php | 2 ++ settings/templates/admin.php | 37 ++++++++++++++++++++ settings/templates/personal.php | 13 +++++++ 13 files changed, 158 insertions(+) create mode 100644 core/img/defaultavatar.png create mode 100644 lib/avatar.php create mode 100644 lib/public/avatar.php create mode 100644 settings/ajax/setavatarmode.php diff --git a/config/config.sample.php b/config/config.sample.php index 24ba541ac5..fb2271339b 100644 --- a/config/config.sample.php +++ b/config/config.sample.php @@ -65,6 +65,12 @@ $CONFIG = array( /* URL to the parent directory of the 3rdparty directory, as seen by the browser */ "3rdpartyurl" => "", +/* What avatars to use. + * May be "none" for none, "local" for uploaded avatars, or "gravatar" for gravatars. + * Default is "local". + */ +"avatars" => "local", + /* Default app to load on login */ "defaultapp" => "files", diff --git a/core/img/defaultavatar.png b/core/img/defaultavatar.png new file mode 100644 index 0000000000000000000000000000000000000000..e9572080bbf3fb403a8b07b11d9271546c89c78e GIT binary patch literal 12444 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 A-v9sr literal 0 HcmV?d00001 diff --git a/core/templates/layout.user.php b/core/templates/layout.user.php index 3c1114492c..038264bd06 100644 --- a/core/templates/layout.user.php +++ b/core/templates/layout.user.php @@ -47,6 +47,7 @@ <div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div> <ul id="settings" class="svg"> <span id="expand" tabindex="0" role="link"> + <?php if (isset($_['avatar'])) { print_unescaped($_['avatar']); } ?> <span id="expandDisplayName"><?php p(trim($_['user_displayname']) != '' ? $_['user_displayname'] : $_['user_uid']) ?></span> <img class="svg" src="<?php print_unescaped(image_path('', 'actions/caret.svg')); ?>" /> </span> diff --git a/lib/avatar.php b/lib/avatar.php new file mode 100644 index 0000000000..2b087c48b6 --- /dev/null +++ b/lib/avatar.php @@ -0,0 +1,59 @@ +<?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 OC_Avatar { + /** + * @brief gets the users avatar + * @param $user string username + * @param $size integer size in px of the avatar, defaults to 64 + * @return mixed link to the avatar, false if avatars are disabled + */ + public static function get ($user, $size = 64) { + $mode = OC_Config::getValue("avatar", "local"); + if ($mode === "none") { + // avatars are disabled + return false; + } elseif ($mode === "gravatar") { + $email = OC_Preferences::getValue($user, 'settings', 'email'); + if ($email !== null) { + $emailhash = md5(strtolower(trim($email))); + $url = "http://www.gravatar.com/avatar/".$emailhash."?s=".$size; + return $url; + } else { + return \OC_Avatar::getDefaultAvatar($size); + } + } elseif ($mode === "local") { + if (false) { + // + } else { + return \OC_Avatar::getDefaultAvatar($size); + } + } + } + + + /** + * @brief sets the users local avatar + * @param $user string user to set the avatar for + * @param $path string path where the avatar is + * @return true on success + */ + public static function setLocalAvatar ($user, $path) { + if (OC_Config::getValue("avatar", "local") === "local") { + // + } + } + + /** + * @brief gets the default avatar + * @return link to the default avatar + */ + public static function getDefaultAvatar ($size) { + return OC_Helper::imagePath("core", "defaultavatar.png"); + } +} diff --git a/lib/public/avatar.php b/lib/public/avatar.php new file mode 100644 index 0000000000..65356b8a71 --- /dev/null +++ b/lib/public/avatar.php @@ -0,0 +1,15 @@ +<?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. + */ + +namespace OCP; + +class Avatar { + public static function get ($user, $size = 64) { + \OC_Avatar::get($user, $size); + } +} diff --git a/lib/templatelayout.php b/lib/templatelayout.php index 0024c9d496..06cbacb692 100644 --- a/lib/templatelayout.php +++ b/lib/templatelayout.php @@ -18,6 +18,11 @@ class OC_TemplateLayout extends OC_Template { $this->assign('bodyid', 'body-user'); } + // display avatars if they are enabled + if (OC_Config::getValue('avatar') === 'gravatar' || OC_Config::getValue('avatar') === 'local') { + $this->assign('avatar', '<img src="'.OC_Avatar::get(OC_User::getUser(), 32).'">'); + } + // Update notification if(OC_Config::getValue('updatechecker', true) === true) { $data=OC_Updater::check(); diff --git a/settings/admin.php b/settings/admin.php index 869729a9e4..394d6b55d7 100755 --- a/settings/admin.php +++ b/settings/admin.php @@ -30,6 +30,7 @@ $tmpl->assign('isWebDavWorking', OC_Util::isWebDAVWorking()); $tmpl->assign('has_fileinfo', OC_Util::fileInfoLoaded()); $tmpl->assign('backgroundjobs_mode', OC_Appconfig::getValue('core', 'backgroundjobs_mode', 'ajax')); $tmpl->assign('shareAPIEnabled', OC_Appconfig::getValue('core', 'shareapi_enabled', 'yes')); +$tmpl->assign('avatar', OC_Config::getValue("avatar", "local")); // Check if connected using HTTPS if (OC_Request::serverProtocol() === 'https') { diff --git a/settings/ajax/setavatarmode.php b/settings/ajax/setavatarmode.php new file mode 100644 index 0000000000..f6f19f50cc --- /dev/null +++ b/settings/ajax/setavatarmode.php @@ -0,0 +1,12 @@ +<?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. + */ + +OC_Util::checkAdminUser(); +OCP\JSON::callCheck(); + +OC_Config::setValue('avatar', $_POST['mode']); diff --git a/settings/js/admin.js b/settings/js/admin.js index f2d6f37a51..6fa1c768ea 100644 --- a/settings/js/admin.js +++ b/settings/js/admin.js @@ -14,6 +14,12 @@ $(document).ready(function(){ } }); + $('#avatar input').change(function(){ + if ($(this).attr('checked')) { + $.post(OC.filePath('settings', 'ajax', 'setavatarmode.php'), {mode: $(this).val()}); + } + }); + $('#shareAPIEnabled').change(function() { $('.shareAPI td:not(#enable)').toggle(); }); diff --git a/settings/personal.php b/settings/personal.php index e69898f6f8..4bec21d58c 100644 --- a/settings/personal.php +++ b/settings/personal.php @@ -84,6 +84,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('avatar', OC_Config::getValue('avatar', 'local')); $forms=OC_App::getForms('personal'); $tmpl->assign('forms', array()); diff --git a/settings/routes.php b/settings/routes.php index 73ee70d1d5..9a27c3e439 100644 --- a/settings/routes.php +++ b/settings/routes.php @@ -70,3 +70,5 @@ $this->create('settings_ajax_setsecurity', '/settings/ajax/setsecurity.php') ->actionInclude('settings/ajax/setsecurity.php'); $this->create('isadmin', '/settings/js/isadmin.js') ->actionInclude('settings/js/isadmin.php'); +$this->create('settings_ajax_setavatarmode', '/settings/ajax/setavatarmode.php') + ->actionInclude('settings/ajax/setavatarmode.php'); diff --git a/settings/templates/admin.php b/settings/templates/admin.php index e54586b80d..a166aec777 100644 --- a/settings/templates/admin.php +++ b/settings/templates/admin.php @@ -116,6 +116,43 @@ if (!$_['internetconnectionworking']) { </p> </fieldset> +<fieldset class="personalblock" id="avatar"> + <legend><strong><?php p($l->t('Avatars')); ?></strong></legend> + <table class="nostyle"> + <tr> + <td> + <input type="radio" name="avatarmode" value="gravatar" + id="avatar_gravatar" <?php if ($_['avatar'] === "gravatar") { + print_unescaped('checked="checked"'); + } ?>> + <label for="avatar_gravatar">Gravatar</label><br> + <em><?php print_unescaped($l->t('Use <a href="http://gravatar.com/">gravatar</a> for avatars')); ?></em><br> + <em><?php p($l->t('This sends data to gravatar')); ?></em> + </td> + </tr> + <tr> + <td> + <input type="radio" name="avatarmode" value="local" + id="avatar_local" <?php if ($_['avatar'] === "local") { + print_unescaped('checked="checked"'); + } ?>> + <label for="avatar_local"><?php p($l->t('Local avatars')); ?></label><br> + <em><?php p($l->t('Use local avatars, which each user has to upload themselves')); ?></em> + </td> + </tr> + <tr> + <td> + <input type="radio" name="avatarmode" value="none" + id="avatar_none" <?php if ($_['avatar'] === "none") { + print_unescaped('checked="checked"'); + } ?>> + <label for="avatar_none"><?php p($l->t('No avatars')); ?></label><br> + <em><?php print_unescaped($l->t('Do not provide avatars')); ?></em> + </td> + </tr> + </table> +</fieldset> + <fieldset class="personalblock" id="shareAPI"> <legend><strong><?php p($l->t('Sharing'));?></strong></legend> <table class="shareAPI nostyle"> diff --git a/settings/templates/personal.php b/settings/templates/personal.php index bad88142da..55f626aa57 100644 --- a/settings/templates/personal.php +++ b/settings/templates/personal.php @@ -74,12 +74,25 @@ if($_['passwordChangeSupported']) { <input type="text" name="email" id="email" value="<?php p($_['email']); ?>" placeholder="<?php p($l->t('Your email address'));?>" /><span class="msg"></span><br /> <em><?php p($l->t('Fill in an email address to enable password recovery'));?></em> + <?php if($_['avatar'] === "gravatar") { + print_unescaped($l->t('<br><em>Your Email will be used for your gravatar<em>')); + } ?> </fieldset> </form> <?php } ?> +<?php if ($_['avatar'] === "local"): ?> +<form id="avatar"> + <fieldset class="personalblock"> + <legend><strong><?php p($l->t('Avatar')); ?></strong></legend> + <img src="<?php print_unescaped(\OC_Avatar::get(\OC_User::getUser())); ?>"><br> + <button><?php p($l->t('Upload a new avatar')); ?></button> + </fieldset> +</form> +<?php endif; ?> + <form> <fieldset class="personalblock"> <legend><strong><?php p($l->t('Language'));?></strong></legend> -- GitLab