summaryrefslogtreecommitdiffstats
path: root/settings
diff options
context:
space:
mode:
authorRoeland Jago Douma <rullzer@users.noreply.github.com>2018-02-28 12:33:30 +0100
committerGitHub <noreply@github.com>2018-02-28 12:33:30 +0100
commit926419e15c5ba4e9163016fa4a66a864b0ea2ca2 (patch)
tree6d8ef08039dd6a52ad87f487cdf06572f6d33c8f /settings
parent533e8351adfd5cc443c853fbb884246e8ae36b04 (diff)
parent35144a72adf79152c7a3420cc9c671728e8ec31c (diff)
downloadnextcloud-server-926419e15c5ba4e9163016fa4a66a864b0ea2ca2.tar.gz
nextcloud-server-926419e15c5ba4e9163016fa4a66a864b0ea2ca2.zip
Merge pull request #7600 from nextcloud/new-user-button-to-sidebar
New user button to sidebar
Diffstat (limited to 'settings')
-rw-r--r--settings/css/settings.scss55
-rw-r--r--settings/js/users/users.js52
-rw-r--r--settings/templates/users/main.php17
-rw-r--r--settings/templates/users/part.createuser.php26
-rw-r--r--settings/templates/users/part.userlist.php227
5 files changed, 200 insertions, 177 deletions
diff --git a/settings/css/settings.scss b/settings/css/settings.scss
index 451b9e733f2..18bc4efa783 100644
--- a/settings/css/settings.scss
+++ b/settings/css/settings.scss
@@ -137,7 +137,7 @@ input {
}
.personal-settings-setting-box input {
- &[type="text"], &[type="email"], &[type="tel"], &[type="url"] {
+ &[type='text'], &[type='email'], &[type='tel'], &[type='url'] {
width: 100%;
}
}
@@ -183,7 +183,7 @@ input {
}
}
> form span {
- &[class^="icon-checkmark"], &[class^="icon-error"] {
+ &[class^='icon-checkmark'], &[class^='icon-error'] {
position: relative;
right: 8px;
top: -28px;
@@ -491,9 +491,12 @@ table.grid {
}
}
-td {
+td, th {
&.name {
padding-left: .8em;
+ width: 10em;
+ min-width: 10em;
+ max-width: 10em;
}
&.password {
padding-left: .8em;
@@ -504,8 +507,12 @@ td {
&.displayName > img {
visibility: hidden;
}
- &.password, &.displayName {
+ &.password,
+ &.displayName,
+ &.mailAddress {
width: 12em;
+ min-width: 12em;
+ max-width: 12em;
cursor: pointer;
}
&.mailAddress {
@@ -524,14 +531,14 @@ span.usersLastLoginTooltip {
/* dropdowns will be relative to this element */
#userlist {
position: relative;
- .mailAddress, .storageLocation, .userBackend, .lastLogin {
+ .storageLocation, .userBackend, .lastLogin {
display: none;
}
th.name {
color: #000;
}
tr {
- height: 51px;
+ height: 50px;
}
.mailAddress .loading-small {
width: 16px;
@@ -543,16 +550,17 @@ span.usersLastLoginTooltip {
.groupsListContainer.hidden {
display: none;
}
+ thead th,
+ thead tr {
+ z-index: 100;
+ background-color: $color-main-background;
+ position: sticky;
+ // positional attribute is required for position to take affect.
+ top: 0;
+ }
}
-/* because of accessibility the name cell is <th> - therefore we enforce the black color */
-/* use same height as in files app */
#newuser {
- /* positioning fixes */
- padding-left: 3px;
- .groups {
- display: inline;
- }
.groupsListContainer.hidden {
display: none;
}
@@ -561,6 +569,24 @@ span.usersLastLoginTooltip {
position: relative;
top: -1px;
}
+ input {
+ &:not([type='submit']),
+ &:not([type='reset']) {
+ width: 100%;
+ }
+ }
+ .userActions input {
+ width: 44px;
+ height: 44px;
+ &.icon-close {
+ border: none;
+ background-color: initial;
+ opacity: .5;
+ }
+ &:hover {
+ opacity: 1;
+ }
+ }
}
tr:hover > td {
@@ -575,7 +601,6 @@ tr:hover > td {
}
td.userActions {
- width: 44px;
.toggleUserActions {
width: 44px;
height: 44px;
@@ -834,7 +859,7 @@ span.version {
margin-bottom: 18px;
}
-/* capitalize "Other" category */
+/* capitalize 'Other' category */
#app-category-925 {
text-transform: capitalize;
diff --git a/settings/js/users/users.js b/settings/js/users/users.js
index 0b94401941b..d00423a99f3 100644
--- a/settings/js/users/users.js
+++ b/settings/js/users/users.js
@@ -2,6 +2,7 @@
* Copyright (c) 2014, Arthur Schiwon <blizzz@owncloud.com>
* Copyright (c) 2014, Raghu Nayyar <beingminimal@gmail.com>
* Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com>
+ * Copyright (c) 2017, John Molakvoæ <skjnldsv@protonmail.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
@@ -31,6 +32,17 @@ var UserList = {
// initially the list might already contain user entries (not fully ajaxified yet)
// initialize these entries
this.$el.find('.quota-user').singleSelect().on('change', this.onQuotaSelect);
+ $('#new-user-button').on('click', function(event) {
+ event.preventDefault();
+ $('#newuserHeader').slideToggle(OC.menuSpeed);
+ $('#newusername').focus();
+ });
+ $('#newreset').on('click', function(event) {
+ $('#newuserHeader').slideToggle(OC.menuSpeed);
+ });
+ $('.has-tooltip').tooltip({
+ placement: 'bottom'
+ });
},
/**
@@ -508,7 +520,7 @@ var UserList = {
checked: checked,
oncheck: addUserToGroup,
onuncheck: removeUserFromGroup,
- minWidth: 100
+ minWidth: 150
});
},
@@ -542,7 +554,7 @@ var UserList = {
checked: checked,
oncheck: checkHandler,
onuncheck: checkHandler,
- minWidth: 100
+ minWidth: 150
});
},
@@ -1134,24 +1146,6 @@ $(document).ready(function () {
}
});
- if ($('#CheckboxEmailAddress').is(':checked')) {
- $("#userlist .mailAddress").show();
- }
- // Option to display/hide the "Mail Address" column
- $('#CheckboxEmailAddress').click(function () {
- if ($('#CheckboxEmailAddress').is(':checked')) {
- $("#userlist .mailAddress").show();
- if (OC.isUserAdmin()) {
- OCP.AppConfig.setValue('core', 'umgmt_show_email', 'true');
- }
- } else {
- $("#userlist .mailAddress").hide();
- if (OC.isUserAdmin()) {
- OCP.AppConfig.setValue('core', 'umgmt_show_email', 'false');
- }
- }
- });
-
if ($('#CheckboxUserBackend').is(':checked')) {
$("#userlist .userBackend").show();
}
@@ -1170,24 +1164,6 @@ $(document).ready(function () {
}
});
- if ($('#CheckboxMailOnUserCreate').is(':checked')) {
- $("#newemail").show();
- }
- // Option to display/hide the "E-Mail" input field
- $('#CheckboxMailOnUserCreate').click(function () {
- if ($('#CheckboxMailOnUserCreate').is(':checked')) {
- $("#newemail").show();
- if (OC.isUserAdmin()) {
- OCP.AppConfig.setValue('core', 'umgmt_send_email', 'true');
- }
- } else {
- $("#newemail").hide();
- if (OC.isUserAdmin()) {
- OCP.AppConfig.setValue('core', 'umgmt_send_email', 'false');
- }
- }
- });
-
// calculate initial limit of users to load
var initialUserCountLimit = UserList.initialUsersToLoad,
containerHeight = $('#app-content').height();
diff --git a/settings/templates/users/main.php b/settings/templates/users/main.php
index 3688f2296cd..3fc80fca0b9 100644
--- a/settings/templates/users/main.php
+++ b/settings/templates/users/main.php
@@ -1,6 +1,7 @@
<?php
/**
* Copyright (c) 2011, Robin Appelman <icewind1991@gmail.com>
+ * Copyright (c) 2017, John Molakvoæ <skjnldsv@protonmail.com>
* This file is licensed under the Affero General Public License version 3 or later.
* See the COPYING-README file.
*/
@@ -35,6 +36,7 @@ translation('settings');
?>
<div id="app-navigation">
+ <?php print_unescaped($this->inc('users/part.createuser')); ?>
<?php print_unescaped($this->inc('users/part.grouplist')); ?>
<div id="app-settings">
<div id="app-settings-header">
@@ -65,20 +67,6 @@ translation('settings');
<?php p($l->t('Show last login')) ?>
</label>
</p>
- <p>
- <input type="checkbox" name="EmailAddress" value="EmailAddress" id="CheckboxEmailAddress"
- class="checkbox" <?php if ($_['show_email'] === 'true') print_unescaped('checked="checked"'); ?> />
- <label for="CheckboxEmailAddress">
- <?php p($l->t('Show email address')) ?>
- </label>
- </p>
- <p>
- <input type="checkbox" name="MailOnUserCreate" value="MailOnUserCreate" id="CheckboxMailOnUserCreate"
- class="checkbox" <?php if ($_['send_email'] === 'true') print_unescaped('checked="checked"'); ?> />
- <label for="CheckboxMailOnUserCreate">
- <?php p($l->t('Send email to new user')) ?>
- </label>
- </p>
<p class="info-text">
<?php p($l->t('When the password of a new user is left empty, an activation email with a link to set the password is sent.')) ?>
</p>
@@ -88,6 +76,5 @@ translation('settings');
</div>
<div id="app-content">
- <?php print_unescaped($this->inc('users/part.createuser')); ?>
<?php print_unescaped($this->inc('users/part.userlist', $userlistParams)); ?>
</div>
diff --git a/settings/templates/users/part.createuser.php b/settings/templates/users/part.createuser.php
index 6a388fc0d88..57fe8e8b63f 100644
--- a/settings/templates/users/part.createuser.php
+++ b/settings/templates/users/part.createuser.php
@@ -1,25 +1,3 @@
-<div id="controls">
- <form id="newuser" autocomplete="off">
- <input id="newusername" type="text"
- placeholder="<?php p($l->t('Username'))?>"
- autocomplete="off" autocapitalize="none" autocorrect="off" />
- <input
- type="password" id="newuserpassword"
- placeholder="<?php p($l->t('Password'))?>"
- autocomplete="off" autocapitalize="none" autocorrect="off" />
- <input id="newemail" type="email" style="display:none"
- placeholder="<?php p($l->t('E-Mail'))?>"
- autocomplete="off" autocapitalize="none" autocorrect="off" />
- <div class="groups"><div class="groupsListContainer multiselect button" data-placeholder="<?php p($l->t('Groups'))?>"><span class="title groupsList"></span><span class="icon-triangle-s"></span></div></div>
- <input type="submit" class="button" value="<?php p($l->t('Create'))?>" />
- </form>
- <?php if((bool)$_['recoveryAdminEnabled']): ?>
- <div class="recoveryPassword">
- <input id="recoveryPassword"
- type="password"
- placeholder="<?php p($l->t('Admin Recovery Password'))?>"
- title="<?php p($l->t('Enter the recovery password in order to recover the users files during password change'))?>"
- alt="<?php p($l->t('Enter the recovery password in order to recover the users files during password change'))?>"/>
- </div>
- <?php endif; ?>
+<div class="app-navigation-new">
+ <button type="button" id="new-user-button" class="icon-add"><?php p($l->t('Add user'))?></button>
</div>
diff --git a/settings/templates/users/part.userlist.php b/settings/templates/users/part.userlist.php
index 2506dba7fc3..9e6866b196d 100644
--- a/settings/templates/users/part.userlist.php
+++ b/settings/templates/users/part.userlist.php
@@ -1,90 +1,147 @@
-<table id="userlist" class="grid" data-groups="<?php p($_['allGroups']);?>">
- <thead>
- <tr>
- <th id="headerAvatar" scope="col"></th>
- <th id="headerName" scope="col"><?php p($l->t('Username'))?></th>
- <th id="headerDisplayName" scope="col"><?php p($l->t( 'Full name' )); ?></th>
- <th id="headerPassword" scope="col"><?php p($l->t( 'Password' )); ?></th>
- <th class="mailAddress" scope="col"><?php p($l->t( 'Email' )); ?></th>
- <th id="headerGroups" scope="col"><?php p($l->t( 'Groups' )); ?></th>
- <?php if(is_array($_['subadmins']) || $_['subadmins']): ?>
- <th id="headerSubAdmins" scope="col"><?php p($l->t('Group admin for')); ?></th>
- <?php endif;?>
- <th id="headerQuota" scope="col"><?php p($l->t('Quota')); ?></th>
- <th class="storageLocation" scope="col"><?php p($l->t('Storage location')); ?></th>
- <th class="userBackend" scope="col"><?php p($l->t('User backend')); ?></th>
- <th class="lastLogin" scope="col"><?php p($l->t('Last login')); ?></th>
- <th class="userActions"></th>
- </tr>
- </thead>
- <tbody>
- <!-- the following <tr> is used as a template for the JS part -->
- <tr style="display:none">
- <td class="avatar"><div class="avatardiv"></div></td>
- <th class="name" scope="row"></th>
- <td class="displayName"><span></span> <img class="action"
- src="<?php p(image_path('core', 'actions/rename.svg'))?>"
- alt="<?php p($l->t("change full name"))?>" title="<?php p($l->t("change full name"))?>"/>
- </td>
- <td class="password"><span>●●●●●●●</span> <img class="action"
- src="<?php print_unescaped(image_path('core', 'actions/rename.svg'))?>"
- alt="<?php p($l->t("set new password"))?>" title="<?php p($l->t("set new password"))?>"/>
- </td>
- <td class="mailAddress"><span></span><div class="loading-small hidden"></div> <img class="action"
- src="<?php p(image_path('core', 'actions/rename.svg'))?>"
- alt="<?php p($l->t('change email address'))?>" title="<?php p($l->t('change email address'))?>"/>
- </td>
- <td class="groups"><div class="groupsListContainer multiselect button"
- ><span class="title groupsList"></span><span class="icon-triangle-s"></span></div>
- </td>
- <?php if(is_array($_['subadmins']) || $_['subadmins']): ?>
- <td class="subadmins"><div class="groupsListContainer multiselect button"
- ><span class="title groupsList"></span><span class="icon-triangle-s"></span></div>
- </td>
- <?php endif;?>
- <td class="quota">
- <select class="quota-user" data-inputtitle="<?php p($l->t('Please enter storage quota (ex: "512 MB" or "12 GB")')) ?>">
- <option value='default'>
- <?php p($l->t('Default'));?>
- </option>
- <option value='none'>
- <?php p($l->t('Unlimited'));?>
- </option>
- <?php foreach($_['quota_preset'] as $preset):?>
- <option value='<?php p($preset);?>'>
- <?php p($preset);?>
+<form class="newUserMenu" id="newuser" autocomplete="off">
+ <table id="userlist" class="grid" data-groups="<?php p($_['allGroups']);?>">
+ <thead>
+ <tr>
+ <th id="headerAvatar" scope="col"></th>
+ <th id="headerName" scope="col"><?php p($l->t('Username'))?></th>
+ <th id="headerDisplayName" scope="col"><?php p($l->t( 'Full name' )); ?></th>
+ <th id="headerPassword" scope="col"><?php p($l->t( 'Password' )); ?></th>
+ <th class="mailAddress" scope="col"><?php p($l->t( 'Email' )); ?></th>
+ <th id="headerGroups" scope="col"><?php p($l->t( 'Groups' )); ?></th>
+ <?php if(is_array($_['subadmins']) || $_['subadmins']): ?>
+ <th id="headerSubAdmins" scope="col"><?php p($l->t('Group admin for')); ?></th>
+ <?php endif;?>
+ <?php if((bool)$_['recoveryAdminEnabled']): ?>
+ <th id="recoveryPassword" scope="col"><?php p($l->t('Recovery password')); ?></th>
+ <?php endif; ?>
+ <th id="headerQuota" scope="col"><?php p($l->t('Quota')); ?></th>
+ <th class="storageLocation" scope="col"><?php p($l->t('Storage location')); ?></th>
+ <th class="userBackend" scope="col"><?php p($l->t('User backend')); ?></th>
+ <th class="lastLogin" scope="col"><?php p($l->t('Last login')); ?></th>
+ <th class="userActions"></th>
+ </tr>
+ <tr id="newuserHeader" style="display:none">
+ <td class="icon-add"></td>
+ <td class="name">
+ <input id="newusername" type="text" required
+ placeholder="<?php p($l->t('Username'))?>" name="username"
+ autocomplete="off" autocapitalize="none" autocorrect="off" />
+ </td>
+ <td class="displayName">
+ <input id="newdisplayname" type="text"
+ placeholder="<?php p($l->t('Full name'))?>" name="displayname"
+ autocomplete="off" autocapitalize="none" autocorrect="off" />
+ </td>
+ <td class="password">
+ <input id="newuserpassword" type="password" required
+ placeholder="<?php p($l->t('Password'))?>" name="password"
+ autocomplete="new-password" autocapitalize="none" autocorrect="off" />
+ </td>
+ <td class="mailAddress">
+ <input id="newemail" type="email"
+ placeholder="<?php p($l->t('E-Mail'))?>" name="email"
+ autocomplete="off" autocapitalize="none" autocorrect="off" />
+ </td>
+ <td class="groups">
+ <div class="groupsListContainer multiselect button" data-placeholder="<?php p($l->t('Groups'))?>">
+ <span class="title groupsList"></span>
+ <span class="icon-triangle-s"></span>
+ </div>
+ </td>
+ <?php if(is_array($_['subadmins']) || $_['subadmins']): ?>
+ <td></td>
+ <?php endif;?>
+ <?php if((bool)$_['recoveryAdminEnabled']): ?>
+ <td class="recoveryPassword">
+ <input id="recoveryPassword"
+ type="password"
+ placeholder="<?php p($l->t('Admin Recovery Password'))?>"
+ title="<?php p($l->t('Enter the recovery password in order to recover the users files during password change'))?>"
+ alt="<?php p($l->t('Enter the recovery password in order to recover the users files during password change'))?>"/>
+ </td>
+ <?php endif; ?>
+ <td class="quota"></td>
+ <td class="storageLocation" scope="col"></td>
+ <td class="userBackend" scope="col"></td>
+ <td class="lastLogin" scope="col"></td>
+ <td class="userActions">
+ <input type="submit" id="newsubmit" class="button primary icon-checkmark-white has-tooltip" value="" title="<?php p($l->t('Add user'))?>" />
+ <input type="reset" id="newreset" class="button icon-close has-tooltip" value="" title="<?php p($l->t('Cancel'))?>" />
+ </td>
+ </tr>
+ </thead>
+ <tbody>
+ <!-- the following <tr> is used as a template for the JS part -->
+ <tr style="display:none">
+ <td class="avatar"><div class="avatardiv"></div></td>
+ <td class="name" scope="row"></td>
+ <td class="displayName"><span></span> <img class="action"
+ src="<?php p(image_path('core', 'actions/rename.svg'))?>"
+ alt="<?php p($l->t('change full name'))?>" title="<?php p($l->t('change full name'))?>"/>
+ </td>
+ <td class="password"><span>●●●●●●●</span> <img class="action"
+ src="<?php print_unescaped(image_path('core', 'actions/rename.svg'))?>"
+ alt="<?php p($l->t('set new password'))?>" title="<?php p($l->t('set new password'))?>"/>
+ </td>
+ <td class="mailAddress"><span></span><div class="loading-small hidden"></div> <img class="action"
+ src="<?php p(image_path('core', 'actions/rename.svg'))?>"
+ alt="<?php p($l->t('change email address'))?>" title="<?php p($l->t('change email address'))?>"/>
+ </td>
+ <td class="groups"><div class="groupsListContainer multiselect button"
+ ><span class="title groupsList"></span><span class="icon-triangle-s"></span></div>
+ </td>
+ <?php if(is_array($_['subadmins']) || $_['subadmins']): ?>
+ <td class="subadmins"><div class="groupsListContainer multiselect button"
+ ><span class="title groupsList"></span><span class="icon-triangle-s"></span></div>
+ </td>
+ <?php endif;?>
+ <?php if((bool)$_['recoveryAdminEnabled']): ?>
+ <td></td>
+ <?php endif; ?>
+ <td class="quota">
+ <select class="quota-user" data-inputtitle="<?php p($l->t('Please enter storage quota (ex: "512 MB" or "12 GB")')) ?>">
+ <option value='default'>
+ <?php p($l->t('Default'));?>
+ </option>
+ <option value='none'>
+ <?php p($l->t('Unlimited'));?>
+ </option>
+ <?php foreach($_['quota_preset'] as $preset):?>
+ <option value='<?php p($preset);?>'>
+ <?php p($preset);?>
+ </option>
+ <?php endforeach;?>
+ <option value='other' data-new>
+ <?php p($l->t('Other'));?> ...
</option>
- <?php endforeach;?>
- <option value='other' data-new>
- <?php p($l->t('Other'));?> ...
- </option>
- </select>
- <progress class="quota-user-progress" value="" max="100"></progress>
- </td>
- <td class="storageLocation"></td>
- <td class="userBackend"></td>
- <td class="lastLogin"></td>
- <td class="userActions">
- <div class="toggleUserActions">
- <a class="action"><span class="icon-more"></span></a>
- <div class="popovermenu">
- <ul class="userActionsMenu">
- <li>
- <a href="#" class="menuitem action-togglestate permanent" data-action="togglestate"></a>
- </li>
- <li>
- <a href="#" class="menuitem action-remove permanent" data-action="remove">
- <span class="icon icon-delete"></span>
- <span><?php p($l->t('Delete')); ?></span>
- </a>
- </li>
- </ul>
+ </select>
+ <progress class="quota-user-progress" value="" max="100"></progress>
+ </td>
+ <td class="storageLocation"></td>
+ <td class="userBackend"></td>
+ <td class="lastLogin"></td>
+ <td class="userActions">
+ <div class="toggleUserActions">
+ <a class="action"><span class="icon-more"></span></a>
+ <div class="popovermenu">
+ <ul class="userActionsMenu">
+ <li>
+ <a href="#" class="menuitem action-togglestate permanent" data-action="togglestate"></a>
+ </li>
+ <li>
+ <a href="#" class="menuitem action-remove permanent" data-action="remove">
+ <span class="icon icon-delete"></span>
+ <span><?php p($l->t('Delete')); ?></span>
+ </a>
+ </li>
+ </ul>
+ </div>
</div>
- </div>
- </td>
- </tr>
- </tbody>
-</table>
+ </td>
+ </tr>
+ </tbody>
+ </table>
+</form>
<div class="emptycontent" style="display:none">
<div class="icon-search"></div>