-
-
-
diff --git a/src/controllers/dashboard/users/useredit.js b/src/controllers/dashboard/users/useredit.js
deleted file mode 100644
index 98aa0dd40e..0000000000
--- a/src/controllers/dashboard/users/useredit.js
+++ /dev/null
@@ -1,196 +0,0 @@
-import 'jquery';
-import loading from '../../../components/loading/loading';
-import libraryMenu from '../../../scripts/libraryMenu';
-import globalize from '../../../scripts/globalize';
-import Dashboard from '../../../utils/dashboard';
-import toast from '../../../components/toast/toast';
-import { getParameterByName } from '../../../utils/url.ts';
-
-function loadDeleteFolders(page, user, mediaFolders) {
- ApiClient.getJSON(ApiClient.getUrl('Channels', {
- SupportsMediaDeletion: true
- })).then(function (channelsResult) {
- let isChecked;
- let checkedAttribute;
- let html = '';
-
- for (const folder of mediaFolders) {
- isChecked = user.Policy.EnableContentDeletion || user.Policy.EnableContentDeletionFromFolders.indexOf(folder.Id) != -1;
- checkedAttribute = isChecked ? ' checked="checked"' : '';
- html += '';
- }
-
- for (const folder of channelsResult.Items) {
- isChecked = user.Policy.EnableContentDeletion || user.Policy.EnableContentDeletionFromFolders.indexOf(folder.Id) != -1;
- checkedAttribute = isChecked ? ' checked="checked"' : '';
- html += '';
- }
-
- $('.deleteAccess', page).html(html).trigger('create');
- $('#chkEnableDeleteAllFolders', page).prop('checked', user.Policy.EnableContentDeletion);
- });
-}
-
-function loadAuthProviders(page, user, providers) {
- if (providers.length > 1) {
- page.querySelector('.fldSelectLoginProvider').classList.remove('hide');
- } else {
- page.querySelector('.fldSelectLoginProvider').classList.add('hide');
- }
-
- const currentProviderId = user.Policy.AuthenticationProviderId;
- page.querySelector('.selectLoginProvider').innerHTML = providers.map(function (provider) {
- const selected = provider.Id === currentProviderId || providers.length < 2 ? ' selected' : '';
- return '';
- });
-}
-
-function loadPasswordResetProviders(page, user, providers) {
- if (providers.length > 1) {
- page.querySelector('.fldSelectPasswordResetProvider').classList.remove('hide');
- } else {
- page.querySelector('.fldSelectPasswordResetProvider').classList.add('hide');
- }
-
- const currentProviderId = user.Policy.PasswordResetProviderId;
- page.querySelector('.selectPasswordResetProvider').innerHTML = providers.map(function (provider) {
- const selected = provider.Id === currentProviderId || providers.length < 2 ? ' selected' : '';
- return '';
- });
-}
-
-function loadUser(page, user) {
- ApiClient.getJSON(ApiClient.getUrl('Auth/Providers')).then(function (providers) {
- loadAuthProviders(page, user, providers);
- });
- ApiClient.getJSON(ApiClient.getUrl('Auth/PasswordResetProviders')).then(function (providers) {
- loadPasswordResetProviders(page, user, providers);
- });
- ApiClient.getJSON(ApiClient.getUrl('Library/MediaFolders', {
- IsHidden: false
- })).then(function (folders) {
- loadDeleteFolders(page, user, folders.Items);
- });
-
- if (user.Policy.IsDisabled) {
- $('.disabledUserBanner', page).show();
- } else {
- $('.disabledUserBanner', page).hide();
- }
-
- $('#txtUserName', page).prop('disabled', '').removeAttr('disabled');
- $('#fldConnectInfo', page).show();
- $('.lnkEditUserPreferences', page).attr('href', 'mypreferencesmenu.html?userId=' + user.Id);
- libraryMenu.setTitle(user.Name);
- page.querySelector('.username').innerHTML = user.Name;
- $('#txtUserName', page).val(user.Name);
- $('#chkIsAdmin', page).prop('checked', user.Policy.IsAdministrator);
- $('#chkDisabled', page).prop('checked', user.Policy.IsDisabled);
- $('#chkIsHidden', page).prop('checked', user.Policy.IsHidden);
- $('#chkEnableCollectionManagement', page).prop('checked', user.Policy.chkEnableCollectionManagement);
- $('#chkRemoteControlSharedDevices', page).prop('checked', user.Policy.EnableSharedDeviceControl);
- $('#chkEnableRemoteControlOtherUsers', page).prop('checked', user.Policy.EnableRemoteControlOfOtherUsers);
- $('#chkEnableDownloading', page).prop('checked', user.Policy.EnableContentDownloading);
- $('#chkManageLiveTv', page).prop('checked', user.Policy.EnableLiveTvManagement);
- $('#chkEnableLiveTvAccess', page).prop('checked', user.Policy.EnableLiveTvAccess);
- $('#chkEnableMediaPlayback', page).prop('checked', user.Policy.EnableMediaPlayback);
- $('#chkEnableAudioPlaybackTranscoding', page).prop('checked', user.Policy.EnableAudioPlaybackTranscoding);
- $('#chkEnableVideoPlaybackTranscoding', page).prop('checked', user.Policy.EnableVideoPlaybackTranscoding);
- $('#chkEnableVideoPlaybackRemuxing', page).prop('checked', user.Policy.EnablePlaybackRemuxing);
- $('#chkForceRemoteSourceTranscoding', page).prop('checked', user.Policy.ForceRemoteSourceTranscoding);
- $('#chkRemoteAccess', page).prop('checked', user.Policy.EnableRemoteAccess == null || user.Policy.EnableRemoteAccess);
- $('#txtRemoteClientBitrateLimit', page).val(user.Policy.RemoteClientBitrateLimit / 1e6 || '');
- $('#txtLoginAttemptsBeforeLockout', page).val(user.Policy.LoginAttemptsBeforeLockout || '0');
- $('#txtMaxActiveSessions', page).val(user.Policy.MaxActiveSessions || '0');
- if (ApiClient.isMinServerVersion('10.6.0')) {
- $('#selectSyncPlayAccess').val(user.Policy.SyncPlayAccess);
- }
- loading.hide();
-}
-
-function onSaveComplete() {
- Dashboard.navigate('userprofiles.html');
- loading.hide();
- toast(globalize.translate('SettingsSaved'));
-}
-
-function saveUser(user, page) {
- user.Name = $('#txtUserName', page).val();
- user.Policy.IsAdministrator = $('#chkIsAdmin', page).is(':checked');
- user.Policy.IsHidden = $('#chkIsHidden', page).is(':checked');
- user.Policy.IsDisabled = $('#chkDisabled', page).is(':checked');
- user.Policy.EnableRemoteControlOfOtherUsers = $('#chkEnableRemoteControlOtherUsers', page).is(':checked');
- user.Policy.EnableLiveTvManagement = $('#chkManageLiveTv', page).is(':checked');
- user.Policy.EnableLiveTvAccess = $('#chkEnableLiveTvAccess', page).is(':checked');
- user.Policy.EnableSharedDeviceControl = $('#chkRemoteControlSharedDevices', page).is(':checked');
- user.Policy.EnableMediaPlayback = $('#chkEnableMediaPlayback', page).is(':checked');
- user.Policy.EnableAudioPlaybackTranscoding = $('#chkEnableAudioPlaybackTranscoding', page).is(':checked');
- user.Policy.EnableVideoPlaybackTranscoding = $('#chkEnableVideoPlaybackTranscoding', page).is(':checked');
- user.Policy.EnablePlaybackRemuxing = $('#chkEnableVideoPlaybackRemuxing', page).is(':checked');
- user.Policy.EnableCollectionManagement = $('#chkEnableCollectionManagement', page).is(':checked');
- user.Policy.ForceRemoteSourceTranscoding = $('#chkForceRemoteSourceTranscoding', page).is(':checked');
- user.Policy.EnableContentDownloading = $('#chkEnableDownloading', page).is(':checked');
- user.Policy.EnableRemoteAccess = $('#chkRemoteAccess', page).is(':checked');
- user.Policy.RemoteClientBitrateLimit = parseInt(1e6 * parseFloat($('#txtRemoteClientBitrateLimit', page).val() || '0'), 10);
- user.Policy.LoginAttemptsBeforeLockout = parseInt($('#txtLoginAttemptsBeforeLockout', page).val() || '0', 10);
- user.Policy.MaxActiveSessions = parseInt($('#txtMaxActiveSessions', page).val() || '0', 10);
- user.Policy.AuthenticationProviderId = page.querySelector('.selectLoginProvider').value;
- user.Policy.PasswordResetProviderId = page.querySelector('.selectPasswordResetProvider').value;
- user.Policy.EnableContentDeletion = $('#chkEnableDeleteAllFolders', page).is(':checked');
- user.Policy.EnableContentDeletionFromFolders = user.Policy.EnableContentDeletion ? [] : $('.chkFolder', page).get().filter(function (c) {
- return c.checked;
- }).map(function (c) {
- return c.getAttribute('data-id');
- });
- if (ApiClient.isMinServerVersion('10.6.0')) {
- user.Policy.SyncPlayAccess = page.querySelector('#selectSyncPlayAccess').value;
- }
- ApiClient.updateUser(user).then(function () {
- ApiClient.updateUserPolicy(user.Id, user.Policy).then(function () {
- onSaveComplete();
- });
- });
-}
-
-function onSubmit() {
- const page = $(this).parents('.page')[0];
- loading.show();
- getUser().then(function (result) {
- saveUser(result, page);
- });
- return false;
-}
-
-function getUser() {
- const userId = getParameterByName('userId');
- return ApiClient.getUser(userId);
-}
-
-function loadData(page) {
- loading.show();
- getUser().then(function (user) {
- loadUser(page, user);
- });
-}
-
-$(document).on('pageinit', '#editUserPage', function () {
- $('.editUserProfileForm').off('submit', onSubmit).on('submit', onSubmit);
- const page = this;
- $('#chkEnableDeleteAllFolders', this).on('change', function () {
- if (this.checked) {
- $('.deleteAccess', page).hide();
- } else {
- $('.deleteAccess', page).show();
- }
- });
- ApiClient.getServerConfiguration().then(function (config) {
- if (config.EnableRemoteAccess) {
- page.querySelector('.fldRemoteAccess').classList.remove('hide');
- } else {
- page.querySelector('.fldRemoteAccess').classList.add('hide');
- }
- });
-}).on('pagebeforeshow', '#editUserPage', function () {
- loadData(this);
-});
-
diff --git a/src/controllers/dashboard/users/userlibraryaccess.html b/src/controllers/dashboard/users/userlibraryaccess.html
deleted file mode 100644
index bf6ba93408..0000000000
--- a/src/controllers/dashboard/users/userlibraryaccess.html
+++ /dev/null
@@ -1,68 +0,0 @@
-
diff --git a/src/controllers/dashboard/users/userlibraryaccess.js b/src/controllers/dashboard/users/userlibraryaccess.js
deleted file mode 100644
index e84638e8e0..0000000000
--- a/src/controllers/dashboard/users/userlibraryaccess.js
+++ /dev/null
@@ -1,184 +0,0 @@
-import 'jquery';
-import loading from '../../../components/loading/loading';
-import libraryMenu from '../../../scripts/libraryMenu';
-import globalize from '../../../scripts/globalize';
-import Dashboard from '../../../utils/dashboard';
-import toast from '../../../components/toast/toast';
-import { getParameterByName } from '../../../utils/url.ts';
-
-function triggerChange(select) {
- const evt = document.createEvent('HTMLEvents');
- evt.initEvent('change', false, true);
- select.dispatchEvent(evt);
-}
-
-function loadMediaFolders(page, user, mediaFolders) {
- let html = '';
- html += '' + globalize.translate('HeaderLibraries') + '
';
- html += '';
-
- for (let i = 0, length = mediaFolders.length; i < length; i++) {
- const folder = mediaFolders[i];
- const isChecked = user.Policy.EnableAllFolders || user.Policy.EnabledFolders.indexOf(folder.Id) != -1;
- const checkedAttribute = isChecked ? ' checked="checked"' : '';
- html += '';
- }
-
- html += '
';
- page.querySelector('.folderAccess').innerHTML = html;
- const chkEnableAllFolders = page.querySelector('#chkEnableAllFolders');
- chkEnableAllFolders.checked = user.Policy.EnableAllFolders;
- triggerChange(chkEnableAllFolders);
-}
-
-function loadChannels(page, user, channels) {
- let html = '';
- html += '' + globalize.translate('Channels') + '
';
- html += '';
-
- for (let i = 0, length = channels.length; i < length; i++) {
- const folder = channels[i];
- const isChecked = user.Policy.EnableAllChannels || user.Policy.EnabledChannels.indexOf(folder.Id) != -1;
- const checkedAttribute = isChecked ? ' checked="checked"' : '';
- html += '';
- }
-
- html += '
';
- $('.channelAccess', page).show().html(html);
-
- if (channels.length) {
- $('.channelAccessContainer', page).show();
- } else {
- $('.channelAccessContainer', page).hide();
- }
-
- const chkEnableAllChannels = page.querySelector('#chkEnableAllChannels');
- chkEnableAllChannels.checked = user.Policy.EnableAllChannels;
- triggerChange(chkEnableAllChannels);
-}
-
-function loadDevices(page, user, devices) {
- let html = '';
- html += '' + globalize.translate('HeaderDevices') + '
';
- html += '';
-
- for (let i = 0, length = devices.length; i < length; i++) {
- const device = devices[i];
- const checkedAttribute = user.Policy.EnableAllDevices || user.Policy.EnabledDevices.indexOf(device.Id) != -1 ? ' checked="checked"' : '';
- html += '';
- }
-
- html += '
';
- $('.deviceAccess', page).show().html(html);
- const chkEnableAllDevices = page.querySelector('#chkEnableAllDevices');
- chkEnableAllDevices.checked = user.Policy.EnableAllDevices;
- triggerChange(chkEnableAllDevices);
-
- if (user.Policy.IsAdministrator) {
- page.querySelector('.deviceAccessContainer').classList.add('hide');
- } else {
- page.querySelector('.deviceAccessContainer').classList.remove('hide');
- }
-}
-
-function loadUser(page, user, loggedInUser, mediaFolders, channels, devices) {
- page.querySelector('.username').innerHTML = user.Name;
- libraryMenu.setTitle(user.Name);
- loadChannels(page, user, channels);
- loadMediaFolders(page, user, mediaFolders);
- loadDevices(page, user, devices);
- loading.hide();
-}
-
-function onSaveComplete() {
- loading.hide();
- toast(globalize.translate('SettingsSaved'));
-}
-
-function saveUser(user, page) {
- user.Policy.EnableAllFolders = $('#chkEnableAllFolders', page).is(':checked');
- user.Policy.EnabledFolders = user.Policy.EnableAllFolders ? [] : $('.chkFolder', page).get().filter(function (c) {
- return c.checked;
- }).map(function (c) {
- return c.getAttribute('data-id');
- });
- user.Policy.EnableAllChannels = $('#chkEnableAllChannels', page).is(':checked');
- user.Policy.EnabledChannels = user.Policy.EnableAllChannels ? [] : $('.chkChannel', page).get().filter(function (c) {
- return c.checked;
- }).map(function (c) {
- return c.getAttribute('data-id');
- });
- user.Policy.EnableAllDevices = $('#chkEnableAllDevices', page).is(':checked');
- user.Policy.EnabledDevices = user.Policy.EnableAllDevices ? [] : $('.chkDevice', page).get().filter(function (c) {
- return c.checked;
- }).map(function (c) {
- return c.getAttribute('data-id');
- });
- user.Policy.BlockedChannels = null;
- user.Policy.BlockedMediaFolders = null;
- ApiClient.updateUserPolicy(user.Id, user.Policy).then(function () {
- onSaveComplete();
- });
-}
-
-function onSubmit() {
- const page = $(this).parents('.page');
- loading.show();
- const userId = getParameterByName('userId');
- ApiClient.getUser(userId).then(function (result) {
- saveUser(result, page);
- });
- return false;
-}
-
-$(document).on('pageinit', '#userLibraryAccessPage', function () {
- const page = this;
- $('#chkEnableAllDevices', page).on('change', function () {
- if (this.checked) {
- $('.deviceAccessListContainer', page).hide();
- } else {
- $('.deviceAccessListContainer', page).show();
- }
- });
- $('#chkEnableAllChannels', page).on('change', function () {
- if (this.checked) {
- $('.channelAccessListContainer', page).hide();
- } else {
- $('.channelAccessListContainer', page).show();
- }
- });
- page.querySelector('#chkEnableAllFolders').addEventListener('change', function () {
- if (this.checked) {
- page.querySelector('.folderAccessListContainer').classList.add('hide');
- } else {
- page.querySelector('.folderAccessListContainer').classList.remove('hide');
- }
- });
- $('.userLibraryAccessForm').off('submit', onSubmit).on('submit', onSubmit);
-}).on('pageshow', '#userLibraryAccessPage', function () {
- const page = this;
- loading.show();
- let promise1;
- const userId = getParameterByName('userId');
-
- if (userId) {
- promise1 = ApiClient.getUser(userId);
- } else {
- const deferred = $.Deferred();
- deferred.resolveWith(null, [{
- Configuration: {}
- }]);
- promise1 = deferred.promise();
- }
-
- const promise2 = Dashboard.getCurrentUser();
- const promise4 = ApiClient.getJSON(ApiClient.getUrl('Library/MediaFolders', {
- IsHidden: false
- }));
- const promise5 = ApiClient.getJSON(ApiClient.getUrl('Channels'));
- const promise6 = ApiClient.getJSON(ApiClient.getUrl('Devices'));
- Promise.all([promise1, promise2, promise4, promise5, promise6]).then(function (responses) {
- loadUser(page, responses[0], responses[1], responses[2].Items, responses[3].Items, responses[4].Items);
- });
-});
-
diff --git a/src/controllers/dashboard/users/usernew.html b/src/controllers/dashboard/users/usernew.html
deleted file mode 100644
index 5d50ede80a..0000000000
--- a/src/controllers/dashboard/users/usernew.html
+++ /dev/null
@@ -1,62 +0,0 @@
-
diff --git a/src/controllers/dashboard/users/usernew.js b/src/controllers/dashboard/users/usernew.js
deleted file mode 100644
index 9477506aca..0000000000
--- a/src/controllers/dashboard/users/usernew.js
+++ /dev/null
@@ -1,128 +0,0 @@
-import 'jquery';
-import loading from '../../../components/loading/loading';
-import globalize from '../../../scripts/globalize';
-import '../../../elements/emby-checkbox/emby-checkbox';
-import Dashboard from '../../../utils/dashboard';
-import toast from '../../../components/toast/toast';
-
-function loadMediaFolders(page, mediaFolders) {
- let html = '';
- html += '' + globalize.translate('HeaderLibraries') + '
';
- html += '';
-
- for (let i = 0; i < mediaFolders.length; i++) {
- const folder = mediaFolders[i];
- html += '';
- }
-
- html += '
';
- $('.folderAccess', page).html(html).trigger('create');
- $('#chkEnableAllFolders', page).prop('checked', false);
-}
-
-function loadChannels(page, channels) {
- let html = '';
- html += '' + globalize.translate('Channels') + '
';
- html += '';
-
- for (let i = 0; i < channels.length; i++) {
- const folder = channels[i];
- html += '';
- }
-
- html += '
';
- $('.channelAccess', page).show().html(html).trigger('create');
-
- if (channels.length) {
- $('.channelAccessContainer', page).show();
- } else {
- $('.channelAccessContainer', page).hide();
- }
-
- $('#chkEnableAllChannels', page).prop('checked', false);
-}
-
-function loadUser(page) {
- $('#txtUsername', page).val('');
- $('#txtPassword', page).val('');
- loading.show();
- const promiseFolders = ApiClient.getJSON(ApiClient.getUrl('Library/MediaFolders', {
- IsHidden: false
- }));
- const promiseChannels = ApiClient.getJSON(ApiClient.getUrl('Channels'));
- Promise.all([promiseFolders, promiseChannels]).then(function (responses) {
- loadMediaFolders(page, responses[0].Items);
- loadChannels(page, responses[1].Items);
- loading.hide();
- });
-}
-
-function saveUser(page) {
- const _user = {
- Name: $('#txtUsername', page).val(),
- Password: $('#txtPassword', page).val()
- };
- ApiClient.createUser(_user).then(function (user) {
- user.Policy.EnableAllFolders = $('#chkEnableAllFolders', page).is(':checked');
- user.Policy.EnabledFolders = [];
-
- if (!user.Policy.EnableAllFolders) {
- user.Policy.EnabledFolders = $('.chkFolder', page).get().filter(function (i) {
- return i.checked;
- }).map(function (i) {
- return i.getAttribute('data-id');
- });
- }
-
- user.Policy.EnableAllChannels = $('#chkEnableAllChannels', page).is(':checked');
- user.Policy.EnabledChannels = [];
-
- if (!user.Policy.EnableAllChannels) {
- user.Policy.EnabledChannels = $('.chkChannel', page).get().filter(function (i) {
- return i.checked;
- }).map(function (i) {
- return i.getAttribute('data-id');
- });
- }
-
- ApiClient.updateUserPolicy(user.Id, user.Policy).then(function () {
- Dashboard.navigate('useredit.html?userId=' + user.Id);
- });
- }, function () {
- toast(globalize.translate('ErrorDefault'));
- loading.hide();
- });
-}
-
-function onSubmit() {
- const page = $(this).parents('.page')[0];
- loading.show();
- saveUser(page);
- return false;
-}
-
-function loadData(page) {
- loadUser(page);
-}
-
-$(document).on('pageinit', '#newUserPage', function () {
- const page = this;
- $('#chkEnableAllChannels', page).on('change', function () {
- if (this.checked) {
- $('.channelAccessListContainer', page).hide();
- } else {
- $('.channelAccessListContainer', page).show();
- }
- });
- $('#chkEnableAllFolders', page).on('change', function () {
- if (this.checked) {
- $('.folderAccessListContainer', page).hide();
- } else {
- $('.folderAccessListContainer', page).show();
- }
- });
- $('.newUserProfileForm').off('submit', onSubmit).on('submit', onSubmit);
-}).on('pageshow', '#newUserPage', function () {
- loadData(this);
-});
-
diff --git a/src/controllers/dashboard/users/userparentalcontrol.html b/src/controllers/dashboard/users/userparentalcontrol.html
deleted file mode 100644
index 5b58047c60..0000000000
--- a/src/controllers/dashboard/users/userparentalcontrol.html
+++ /dev/null
@@ -1,60 +0,0 @@
-
diff --git a/src/controllers/dashboard/users/userparentalcontrol.js b/src/controllers/dashboard/users/userparentalcontrol.js
deleted file mode 100644
index 0b527e09ef..0000000000
--- a/src/controllers/dashboard/users/userparentalcontrol.js
+++ /dev/null
@@ -1,278 +0,0 @@
-import 'jquery';
-import datetime from '../../../scripts/datetime';
-import loading from '../../../components/loading/loading';
-import libraryMenu from '../../../scripts/libraryMenu';
-import globalize from '../../../scripts/globalize';
-import '../../../components/listview/listview.scss';
-import '../../../elements/emby-button/paper-icon-button-light';
-import toast from '../../../components/toast/toast';
-import { getParameterByName } from '../../../utils/url.ts';
-
-function populateRatings(allParentalRatings, page) {
- let html = '';
- html += "";
- let rating;
- const ratings = [];
-
- for (let i = 0, length = allParentalRatings.length; i < length; i++) {
- rating = allParentalRatings[i];
- if (ratings.length) {
- const lastRating = ratings[ratings.length - 1];
-
- if (lastRating.Value === rating.Value) {
- lastRating.Name += '/' + rating.Name;
- continue;
- }
- }
-
- ratings.push({
- Name: rating.Name,
- Value: rating.Value
- });
- }
-
- for (let i = 0, length = ratings.length; i < length; i++) {
- rating = ratings[i];
- html += "';
- }
-
- $('#selectMaxParentalRating', page).html(html);
-}
-
-function loadUnratedItems(page, user) {
- const items = [{
- name: globalize.translate('Books'),
- value: 'Book'
- }, {
- name: globalize.translate('Channels'),
- value: 'ChannelContent'
- }, {
- name: globalize.translate('LiveTV'),
- value: 'LiveTvChannel'
- }, {
- name: globalize.translate('Movies'),
- value: 'Movie'
- }, {
- name: globalize.translate('Music'),
- value: 'Music'
- }, {
- name: globalize.translate('Trailers'),
- value: 'Trailer'
- }, {
- name: globalize.translate('Shows'),
- value: 'Series'
- }];
- let html = '';
- html += '' + globalize.translate('HeaderBlockItemsWithNoRating') + '
';
- html += '';
-
- for (let i = 0, length = items.length; i < length; i++) {
- const item = items[i];
- const checkedAttribute = user.Policy.BlockUnratedItems.indexOf(item.value) != -1 ? ' checked="checked"' : '';
- html += '';
- }
-
- html += '
';
- $('.blockUnratedItems', page).html(html).trigger('create');
-}
-
-function loadUser(page, user, allParentalRatings) {
- page.querySelector('.username').innerHTML = user.Name;
- libraryMenu.setTitle(user.Name);
- loadUnratedItems(page, user);
- loadBlockedTags(page, user.Policy.BlockedTags);
- populateRatings(allParentalRatings, page);
- let ratingValue = '';
-
- if (user.Policy.MaxParentalRating) {
- for (let i = 0, length = allParentalRatings.length; i < length; i++) {
- const rating = allParentalRatings[i];
-
- if (user.Policy.MaxParentalRating >= rating.Value) {
- ratingValue = rating.Value;
- }
- }
- }
-
- $('#selectMaxParentalRating', page).val(ratingValue);
-
- if (user.Policy.IsAdministrator) {
- $('.accessScheduleSection', page).hide();
- } else {
- $('.accessScheduleSection', page).show();
- }
-
- renderAccessSchedule(page, user.Policy.AccessSchedules || []);
- loading.hide();
-}
-
-function loadBlockedTags(page, tags) {
- let html = tags.map(function (h) {
- let li = '';
- li += '
';
- li += '
';
- li += h;
- li += '
';
- li += '';
- li += '
';
- li += '
';
- return li;
- }).join('');
-
- if (html) {
- html = '' + html + '
';
- }
-
- const blockedTags = page.querySelector('.blockedTags');
- blockedTags.innerHTML = html;
-
- for (const btnDeleteTag of blockedTags.querySelectorAll('.btnDeleteTag')) {
- btnDeleteTag.addEventListener('click', function () {
- const tag = this.getAttribute('data-tag');
- const newTags = tags.filter(function (t) {
- return t != tag;
- });
- loadBlockedTags(page, newTags);
- });
- }
-}
-
-function deleteAccessSchedule(page, schedules, index) {
- schedules.splice(index, 1);
- renderAccessSchedule(page, schedules);
-}
-
-function renderAccessSchedule(page, schedules) {
- let html = '';
- let index = 0;
- html += schedules.map(function (a) {
- let itemHtml = '';
- itemHtml += '';
- itemHtml += '
';
- itemHtml += '
';
- itemHtml += globalize.translate('Option' + a.DayOfWeek);
- itemHtml += '
';
- itemHtml += '
' + getDisplayTime(a.StartHour) + ' - ' + getDisplayTime(a.EndHour) + '
';
- itemHtml += '
';
- itemHtml += '
';
- itemHtml += '
';
- index++;
- return itemHtml;
- }).join('');
- const accessScheduleList = page.querySelector('.accessScheduleList');
- accessScheduleList.innerHTML = html;
- $('.btnDelete', accessScheduleList).on('click', function () {
- deleteAccessSchedule(page, schedules, parseInt(this.getAttribute('data-index'), 10));
- });
-}
-
-function onSaveComplete() {
- loading.hide();
- toast(globalize.translate('SettingsSaved'));
-}
-
-function saveUser(user, page) {
- user.Policy.MaxParentalRating = $('#selectMaxParentalRating', page).val() || null;
- user.Policy.BlockUnratedItems = $('.chkUnratedItem', page).get().filter(function (i) {
- return i.checked;
- }).map(function (i) {
- return i.getAttribute('data-itemtype');
- });
- user.Policy.AccessSchedules = getSchedulesFromPage(page);
- user.Policy.BlockedTags = getBlockedTagsFromPage(page);
- ApiClient.updateUserPolicy(user.Id, user.Policy).then(function () {
- onSaveComplete();
- });
-}
-
-function getDisplayTime(hours) {
- let minutes = 0;
- const pct = hours % 1;
-
- if (pct) {
- minutes = parseInt(60 * pct, 10);
- }
-
- return datetime.getDisplayTime(new Date(2000, 1, 1, hours, minutes, 0, 0));
-}
-
-function showSchedulePopup(page, schedule, index) {
- schedule = schedule || {};
- import('../../../components/accessSchedule/accessSchedule').then(({ default: accessschedule }) => {
- accessschedule.show({
- schedule: schedule
- }).then(function (updatedSchedule) {
- const schedules = getSchedulesFromPage(page);
-
- if (index == -1) {
- index = schedules.length;
- }
-
- schedules[index] = updatedSchedule;
- renderAccessSchedule(page, schedules);
- });
- });
-}
-
-function getSchedulesFromPage(page) {
- return $('.liSchedule', page).map(function () {
- return {
- DayOfWeek: this.getAttribute('data-day'),
- StartHour: this.getAttribute('data-start'),
- EndHour: this.getAttribute('data-end')
- };
- }).get();
-}
-
-function getBlockedTagsFromPage(page) {
- return $('.blockedTag', page).map(function () {
- return this.getAttribute('data-tag');
- }).get();
-}
-
-function showBlockedTagPopup(page) {
- import('../../../components/prompt/prompt').then(({ default: prompt }) => {
- prompt({
- label: globalize.translate('LabelTag')
- }).then(function (value) {
- const tags = getBlockedTagsFromPage(page);
-
- if (tags.indexOf(value) == -1) {
- tags.push(value);
- loadBlockedTags(page, tags);
- }
- });
- });
-}
-
-window.UserParentalControlPage = {
- onSubmit: function () {
- const page = $(this).parents('.page');
- loading.show();
- const userId = getParameterByName('userId');
- ApiClient.getUser(userId).then(function (result) {
- saveUser(result, page);
- });
- return false;
- }
-};
-$(document).on('pageinit', '#userParentalControlPage', function () {
- const page = this;
- $('.btnAddSchedule', page).on('click', function () {
- showSchedulePopup(page, {}, -1);
- });
- $('.btnAddBlockedTag', page).on('click', function () {
- showBlockedTagPopup(page);
- });
- $('.userParentalControlForm').off('submit', UserParentalControlPage.onSubmit).on('submit', UserParentalControlPage.onSubmit);
-}).on('pageshow', '#userParentalControlPage', function () {
- const page = this;
- loading.show();
- const userId = getParameterByName('userId');
- const promise1 = ApiClient.getUser(userId);
- const promise2 = ApiClient.getParentalRatings();
- Promise.all([promise1, promise2]).then(function (responses) {
- loadUser(page, responses[0], responses[1]);
- });
-});
-
diff --git a/src/controllers/dashboard/users/userpassword.html b/src/controllers/dashboard/users/userpassword.html
deleted file mode 100644
index 897f0e7bd5..0000000000
--- a/src/controllers/dashboard/users/userpassword.html
+++ /dev/null
@@ -1,72 +0,0 @@
-
diff --git a/src/controllers/dashboard/users/userpasswordpage.js b/src/controllers/dashboard/users/userpasswordpage.js
deleted file mode 100644
index 4171c55d6e..0000000000
--- a/src/controllers/dashboard/users/userpasswordpage.js
+++ /dev/null
@@ -1,179 +0,0 @@
-import loading from '../../../components/loading/loading';
-import libraryMenu from '../../../scripts/libraryMenu';
-import globalize from '../../../scripts/globalize';
-import '../../../elements/emby-button/emby-button';
-import Dashboard from '../../../utils/dashboard';
-import toast from '../../../components/toast/toast';
-import confirm from '../../../components/confirm/confirm';
-
-function loadUser(page, params) {
- const userid = params.userId;
- ApiClient.getUser(userid).then(function (user) {
- Dashboard.getCurrentUser().then(function (loggedInUser) {
- libraryMenu.setTitle(user.Name);
- page.querySelector('.username').innerText = user.Name;
- let showPasswordSection = true;
- let showLocalAccessSection = false;
-
- if (user.ConnectLinkType == 'Guest') {
- page.querySelector('.localAccessSection').classList.add('hide');
- showPasswordSection = false;
- } else if (user.HasConfiguredPassword) {
- page.querySelector('#btnResetPassword').classList.remove('hide');
- page.querySelector('#fldCurrentPassword').classList.remove('hide');
- showLocalAccessSection = true;
- } else {
- page.querySelector('#btnResetPassword').classList.add('hide');
- page.querySelector('#fldCurrentPassword').classList.add('hide');
- }
-
- if (showPasswordSection && (loggedInUser.Policy.IsAdministrator || user.Policy.EnableUserPreferenceAccess)) {
- page.querySelector('.passwordSection').classList.remove('hide');
- } else {
- page.querySelector('.passwordSection').classList.add('hide');
- }
-
- if (showLocalAccessSection && (loggedInUser.Policy.IsAdministrator || user.Policy.EnableUserPreferenceAccess)) {
- page.querySelector('.localAccessSection').classList.remove('hide');
- } else {
- page.querySelector('.localAccessSection').classList.add('hide');
- }
-
- const txtEasyPassword = page.querySelector('#txtEasyPassword');
- txtEasyPassword.value = '';
-
- if (user.HasConfiguredEasyPassword) {
- txtEasyPassword.placeholder = '******';
- page.querySelector('#btnResetEasyPassword').classList.remove('hide');
- } else {
- txtEasyPassword.removeAttribute('placeholder');
- txtEasyPassword.placeholder = '';
- page.querySelector('#btnResetEasyPassword').classList.add('hide');
- }
-
- page.querySelector('.chkEnableLocalEasyPassword').checked = user.Configuration.EnableLocalPassword;
-
- import('../../../components/autoFocuser').then(({ default: autoFocuser }) => {
- autoFocuser.autoFocus(page);
- });
- });
- });
- page.querySelector('#txtCurrentPassword').value = '';
- page.querySelector('#txtNewPassword').value = '';
- page.querySelector('#txtNewPasswordConfirm').value = '';
-}
-
-export default function (view, params) {
- function saveEasyPassword() {
- const userId = params.userId;
- const easyPassword = view.querySelector('#txtEasyPassword').value;
-
- if (easyPassword) {
- ApiClient.updateEasyPassword(userId, easyPassword).then(function () {
- onEasyPasswordSaved(userId);
- });
- } else {
- onEasyPasswordSaved(userId);
- }
- }
-
- function onEasyPasswordSaved(userId) {
- ApiClient.getUser(userId).then(function (user) {
- user.Configuration.EnableLocalPassword = view.querySelector('.chkEnableLocalEasyPassword').checked;
- ApiClient.updateUserConfiguration(user.Id, user.Configuration).then(function () {
- loading.hide();
- toast(globalize.translate('SettingsSaved'));
-
- loadUser(view, params);
- });
- });
- }
-
- function savePassword() {
- const userId = params.userId;
- let currentPassword = view.querySelector('#txtCurrentPassword').value;
- const newPassword = view.querySelector('#txtNewPassword').value;
-
- if (view.querySelector('#fldCurrentPassword').classList.contains('hide')) {
- // Firefox does not respect autocomplete=off, so clear it if the field is supposed to be hidden (and blank)
- // This should only happen when user.HasConfiguredPassword is false, but this information is not passed on
- currentPassword = '';
- }
-
- ApiClient.updateUserPassword(userId, currentPassword, newPassword).then(function () {
- loading.hide();
- toast(globalize.translate('PasswordSaved'));
-
- loadUser(view, params);
- }, function () {
- loading.hide();
- Dashboard.alert({
- title: globalize.translate('HeaderLoginFailure'),
- message: globalize.translate('MessageInvalidUser')
- });
- });
- }
-
- function onSubmit(e) {
- const form = this;
-
- if (form.querySelector('#txtNewPassword').value != form.querySelector('#txtNewPasswordConfirm').value) {
- toast(globalize.translate('PasswordMatchError'));
- } else {
- loading.show();
- savePassword();
- }
-
- e.preventDefault();
- return false;
- }
-
- function onLocalAccessSubmit(e) {
- loading.show();
- saveEasyPassword();
- e.preventDefault();
- return false;
- }
-
- function resetPassword() {
- const msg = globalize.translate('PasswordResetConfirmation');
- confirm(msg, globalize.translate('ResetPassword')).then(function () {
- const userId = params.userId;
- loading.show();
- ApiClient.resetUserPassword(userId).then(function () {
- loading.hide();
- Dashboard.alert({
- message: globalize.translate('PasswordResetComplete'),
- title: globalize.translate('ResetPassword')
- });
- loadUser(view, params);
- });
- });
- }
-
- function resetEasyPassword() {
- const msg = globalize.translate('PinCodeResetConfirmation');
-
- confirm(msg, globalize.translate('HeaderPinCodeReset')).then(function () {
- const userId = params.userId;
- loading.show();
- ApiClient.resetEasyPassword(userId).then(function () {
- loading.hide();
- Dashboard.alert({
- message: globalize.translate('PinCodeResetComplete'),
- title: globalize.translate('HeaderPinCodeReset')
- });
- loadUser(view, params);
- });
- });
- }
-
- view.querySelector('.updatePasswordForm').addEventListener('submit', onSubmit);
- view.querySelector('.localAccessForm').addEventListener('submit', onLocalAccessSubmit);
- view.querySelector('#btnResetEasyPassword').addEventListener('click', resetEasyPassword);
- view.querySelector('#btnResetPassword').addEventListener('click', resetPassword);
- view.addEventListener('viewshow', function () {
- loadUser(view, params);
- });
-}
-
diff --git a/src/controllers/dashboard/users/userprofiles.html b/src/controllers/dashboard/users/userprofiles.html
deleted file mode 100644
index 9e2908266b..0000000000
--- a/src/controllers/dashboard/users/userprofiles.html
+++ /dev/null
@@ -1,16 +0,0 @@
-
diff --git a/src/controllers/dashboard/users/userprofilespage.js b/src/controllers/dashboard/users/userprofilespage.js
deleted file mode 100644
index 59d61a443f..0000000000
--- a/src/controllers/dashboard/users/userprofilespage.js
+++ /dev/null
@@ -1,184 +0,0 @@
-import loading from '../../../components/loading/loading';
-import dom from '../../../scripts/dom';
-import globalize from '../../../scripts/globalize';
-import { formatDistanceToNow } from 'date-fns';
-import { getLocaleWithSuffix } from '../../../utils/dateFnsLocale.ts';
-import '../../../elements/emby-button/paper-icon-button-light';
-import '../../../components/cardbuilder/card.scss';
-import '../../../elements/emby-button/emby-button';
-import '../../../components/indicators/indicators.scss';
-import '../../../styles/flexstyles.scss';
-import Dashboard, { pageIdOn } from '../../../utils/dashboard';
-import confirm from '../../../components/confirm/confirm';
-import cardBuilder from '../../../components/cardbuilder/cardBuilder';
-
-function deleteUser(page, id) {
- const msg = globalize.translate('DeleteUserConfirmation');
-
- confirm({
- title: globalize.translate('DeleteUser'),
- text: msg,
- confirmText: globalize.translate('Delete'),
- primary: 'delete'
- }).then(function () {
- loading.show();
- ApiClient.deleteUser(id).then(function () {
- loadData(page);
- });
- });
-}
-
-function showUserMenu(elem) {
- const card = dom.parentWithClass(elem, 'card');
- const page = dom.parentWithClass(card, 'page');
- const userId = card.getAttribute('data-userid');
- const menuItems = [];
- menuItems.push({
- name: globalize.translate('ButtonOpen'),
- id: 'open',
- icon: 'mode_edit'
- });
- menuItems.push({
- name: globalize.translate('ButtonLibraryAccess'),
- id: 'access',
- icon: 'lock'
- });
- menuItems.push({
- name: globalize.translate('ButtonParentalControl'),
- id: 'parentalcontrol',
- icon: 'person'
- });
- menuItems.push({
- name: globalize.translate('Delete'),
- id: 'delete',
- icon: 'delete'
- });
-
- import('../../../components/actionSheet/actionSheet').then(({ default: actionsheet }) => {
- actionsheet.show({
- items: menuItems,
- positionTo: card,
- callback: function (id) {
- switch (id) {
- case 'open':
- Dashboard.navigate('useredit.html?userId=' + userId);
- break;
-
- case 'access':
- Dashboard.navigate('userlibraryaccess.html?userId=' + userId);
- break;
-
- case 'parentalcontrol':
- Dashboard.navigate('userparentalcontrol.html?userId=' + userId);
- break;
-
- case 'delete':
- deleteUser(page, userId);
- }
- }
- });
- });
-}
-
-function getUserHtml(user) {
- let html = '';
- let cssClass = 'card squareCard scalableCard squareCard-scalable';
-
- if (user.Policy.IsDisabled) {
- cssClass += ' grayscale';
- }
-
- html += "";
- html += '
';
- html += '
';
- return html + '
';
-}
-// FIXME: It seems that, sometimes, server sends date in the future, so date-fns displays messages like 'in less than a minute'. We should fix
-// how dates are returned by the server when the session is active and show something like 'Active now', instead of past/future sentences
-function getLastSeenText(lastActivityDate) {
- const localeWithSuffix = getLocaleWithSuffix();
-
- if (lastActivityDate) {
- return globalize.translate('LastSeen', formatDistanceToNow(Date.parse(lastActivityDate), localeWithSuffix));
- }
-
- return '';
-}
-
-function getUserSectionHtml(users) {
- return users.map(function (u__q) {
- return getUserHtml(u__q);
- }).join('');
-}
-
-function renderUsers(page, users) {
- page.querySelector('.localUsers').innerHTML = getUserSectionHtml(users);
-}
-
-function loadData(page) {
- loading.show();
- ApiClient.getUsers().then(function (users) {
- renderUsers(page, users);
- loading.hide();
- });
-}
-
-pageIdOn('pageinit', 'userProfilesPage', function () {
- const page = this;
- page.querySelector('.btnAddUser').addEventListener('click', function() {
- Dashboard.navigate('usernew.html');
- });
- page.querySelector('.localUsers').addEventListener('click', function (e__e) {
- const btnUserMenu = dom.parentWithClass(e__e.target, 'btnUserMenu');
-
- if (btnUserMenu) {
- showUserMenu(btnUserMenu);
- }
- });
-});
-
-pageIdOn('pagebeforeshow', 'userProfilesPage', function () {
- loadData(this);
-});
-
diff --git a/src/controllers/user/profile/index.html b/src/controllers/user/profile/index.html
deleted file mode 100644
index 3eaa2f7299..0000000000
--- a/src/controllers/user/profile/index.html
+++ /dev/null
@@ -1,69 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/src/controllers/user/profile/index.js b/src/controllers/user/profile/index.js
deleted file mode 100644
index 07bab611c3..0000000000
--- a/src/controllers/user/profile/index.js
+++ /dev/null
@@ -1,105 +0,0 @@
-import UserPasswordPage from '../../dashboard/users/userpasswordpage';
-import loading from '../../../components/loading/loading';
-import libraryMenu from '../../../scripts/libraryMenu';
-import { appHost } from '../../../components/apphost';
-import globalize from '../../../scripts/globalize';
-import '../../../elements/emby-button/emby-button';
-import Dashboard from '../../../utils/dashboard';
-import toast from '../../../components/toast/toast';
-import confirm from '../../../components/confirm/confirm';
-import { getParameterByName } from '../../../utils/url.ts';
-
-function reloadUser(page) {
- const userId = getParameterByName('userId');
- loading.show();
- ApiClient.getUser(userId).then(function (user) {
- page.querySelector('.username').innerText = user.Name;
- libraryMenu.setTitle(user.Name);
-
- let imageUrl = 'assets/img/avatar.png';
- if (user.PrimaryImageTag) {
- imageUrl = ApiClient.getUserImageUrl(user.Id, {
- tag: user.PrimaryImageTag,
- type: 'Primary'
- });
- }
-
- const userImage = page.querySelector('#image');
- userImage.style.backgroundImage = 'url(' + imageUrl + ')';
-
- Dashboard.getCurrentUser().then(function (loggedInUser) {
- if (user.PrimaryImageTag) {
- page.querySelector('#btnAddImage').classList.add('hide');
- page.querySelector('#btnDeleteImage').classList.remove('hide');
- } else if (appHost.supports('fileinput') && (loggedInUser.Policy.IsAdministrator || user.Policy.EnableUserPreferenceAccess)) {
- page.querySelector('#btnDeleteImage').classList.add('hide');
- page.querySelector('#btnAddImage').classList.remove('hide');
- }
- });
- loading.hide();
- });
-}
-
-function onFileReaderError(evt) {
- loading.hide();
- switch (evt.target.error.code) {
- case evt.target.error.NOT_FOUND_ERR:
- toast(globalize.translate('FileNotFound'));
- break;
- case evt.target.error.ABORT_ERR:
- onFileReaderAbort();
- break;
- case evt.target.error.NOT_READABLE_ERR:
- default:
- toast(globalize.translate('FileReadError'));
- }
-}
-
-function onFileReaderAbort() {
- loading.hide();
- toast(globalize.translate('FileReadCancelled'));
-}
-
-function setFiles(page, files) {
- const userImage = page.querySelector('#image');
- const file = files[0];
-
- if (!file || !file.type.match('image.*')) {
- return false;
- }
-
- const reader = new FileReader();
- reader.onerror = onFileReaderError;
- reader.onabort = onFileReaderAbort;
- reader.onload = function (evt) {
- userImage.style.backgroundImage = 'url(' + evt.target.result + ')';
- const userId = getParameterByName('userId');
- ApiClient.uploadUserImage(userId, 'Primary', file).then(function () {
- loading.hide();
- reloadUser(page);
- });
- };
-
- reader.readAsDataURL(file);
-}
-
-export default function (view, params) {
- reloadUser(view);
- new UserPasswordPage(view, params);
- view.querySelector('#btnDeleteImage').addEventListener('click', function () {
- confirm(globalize.translate('DeleteImageConfirmation'), globalize.translate('DeleteImage')).then(function () {
- loading.show();
- const userId = getParameterByName('userId');
- ApiClient.deleteUserImage(userId, 'primary').then(function () {
- loading.hide();
- reloadUser(view);
- });
- });
- });
- view.querySelector('#btnAddImage').addEventListener('click', function () {
- view.querySelector('#uploadImage').click();
- });
- view.querySelector('#uploadImage').addEventListener('change', function (evt) {
- setFiles(view, evt.target.files);
- });
-}