$(document).ready(function(){ var apiPrefix = getFullOrigin(true) + getAdminApiPrefix() var theWindow = $('#subAccountManager'); var accountTable = $('#subAccountsList tbody'); var theWindowForm = $('#monSectionAccountInformation'); var permissionsSection = $('#monSectionAccountPrivileges'); var permissionsMonitorSection = $('#sub_accounts_permissions'); var currentlyActiveUsersList = $('#currently-active-users'); var submitButtons = theWindow.find('.submit-form') var loadedSubAccounts = {} var clearTable = function(){ accountTable.empty() loadedSubAccounts = {} } var getSubAccounts = function(callback){ $.get(`${apiPrefix}accounts/${$user.ke}`,function(data){ clearTable() $.each(data.accounts,function(n,account){ loadedSubAccounts[account.uid] = account; drawSubAccountRow(account) }) callback() }) } var deleteSubAccount = function(email,uid){ $.confirm.create({ title: lang.deleteSubAccount, body: lang.deleteSubAccountText + '\n' + email, clickOptions: { class: 'btn-danger', title: lang.Delete, }, clickCallback: function(){ $.post(apiPrefix+'accounts/'+$user.ke+'/delete',{ uid: uid, mail: email },function(data){ var notifyTitle = lang.accountDeleted var notifyText = lang.accountDeletedText + '\n' + email var notifyColor = 'info' if(data.ok){ loadedSubAccounts[uid] = null; accountTable.find('[uid="' + uid + '"]').remove() }else{ notifyTitle = lang.accountActionFailed notifyText = lang.contactAdmin notifyColor = 'warning' } new PNotify({ title : notifyTitle, text : notifyText, type : notifyColor }) }) } }) } var addSubAccount = function(newAccount,callback){ $.post(apiPrefix+'accounts/'+$user.ke+'/register',{ data: JSON.stringify(newAccount) },function(data){ var notifyTitle var notifyText var notifyColor if(!data.ok && data.msg){ notifyTitle = lang.accountActionFailed notifyText = data.msg notifyColor = 'warning' } if(data.user){ notifyTitle = lang.accountAdded notifyText = lang.accountAddedText + '\n' + data.user.mail notifyColor = 'success' if(data.user){ var account = data.user loadedSubAccounts[account.uid] = account; drawSubAccountRow(account) theWindowForm.find('[name="uid"]').val(account.uid) setSubmitButtonState(lang['Save Changes'],'check') }else{ notifyTitle = lang.accountActionFailed notifyText = lang.contactAdmin notifyColor = 'warning' } } new PNotify({ title : notifyTitle, text : notifyText, type : notifyColor }) callback(data) }); } var editSubaccount = function(uid,form,callback){ var account = loadedSubAccounts[uid] $.post(apiPrefix+'accounts/'+$user.ke+'/edit',{ uid: uid, mail: form.mail, data: form },function(data){ console.log(data) if(data.ok){ $.each(form,function(n,v){ account[n] = v }); accountTable.find(`[uid="${uid}"] .mail`).text(form.mail) new PNotify({ title : lang['Account Edited'], text : '' + account.mail + ' has been updated.', type : 'success' }) }else{ new PNotify({ title : lang['Failed to Edit Account'], text : data.msg, type : 'error' }) } callback(data) }) } var drawSubAccountRow = function(account){ var html = `
${account.mail}
${account.uid}
${lang.Edit} ${lang.Delete}
`; accountTable.prepend(html) } var permissionTypeNames = [ { name: 'monitors', label: lang['Can View Monitor'], }, { name: 'monitor_edit', label: lang['Can Edit Monitor'], }, { name: 'video_view', label: lang['Can View Videos and Events'], }, { name: 'video_delete', label: lang['Can Delete Videos and Events'], }, ]; var drawSelectableForPermissionForm = function(){ var html = '' $.each(loadedMonitors,function(n,monitor){ html += `
` html += `
` html += `
` html += `
` }) permissionsMonitorSection.html(html) } var setPermissionSelectionsToFields = function(uid){ var account = loadedSubAccounts[uid] var details = safeJsonParse(account.details) // load values to Account Information : email, password, etc. $.each(account,function(n,v){ theWindowForm.find('[name="'+n+'"]').val(v) }) // load base privileges permissionsSection.find('[detail]').each(function(n,v){ var el = $(v) var key = el.attr('detail') var defaultValue = el.attr('data-default') el.val(details[key] || defaultValue) }) permissionsSection.find('[detail="allmonitors"]').change() // load montior specific privileges $.each(loadedMonitors,function(m,monitor){ $.each(permissionTypeNames,function(m,permission){ if((details[permission.name] || []).indexOf(monitor.mid) > -1){ permissionsSection.find(`[monitor="${monitor.mid}"] option[value="${permission.name}"]`).attr("selected", "selected") } }) }) } var openSubAccountEditor = function(uid){ var account = loadedSubAccounts[uid] drawSelectableForPermissionForm() setPermissionSelectionsToFields(uid) theWindowForm.find('[name="pass"],[name="password_again"]').val('') permissionsSection.show() } var writePermissionsFromFieldsToString = function(){ var foundSelected = {} var detailsElement = theWindowForm.find('[name="details"]') var details = JSON.parse(detailsElement.val()) details = details ? details : {sub: 1, allmonitors: "1"} // base privileges permissionsSection.find('[detail]').each(function(n,v){ var el = $(v) details[el.attr('detail')] = el.val() }) // monitor specific privileges permissionsSection.find('.permission-view select').each(function(n,v){ var el = $(v) var monitorId = el.attr('monitor') var value = el.val() $.each(value,function(n,permissionNameSelected){ if(!foundSelected[permissionNameSelected])foundSelected[permissionNameSelected] = [] foundSelected[permissionNameSelected].push(monitorId) }) }) details = Object.assign(details,foundSelected) detailsElement.val(JSON.stringify(details)) } var getCompleteForm = function(){ writePermissionsFromFieldsToString() return theWindowForm.serializeObject() } var setSubmitButtonState = function(text,icon){ submitButtons.html(` ${text}`) } function initiateSubAccountPage() { getSubAccounts(function(){ if(theWindowForm.find('[name="uid"]').val() === '')drawSelectableForPermissionForm() }) } function drawUserToActiveList(user){ var rowId = `active-user-${user.uid}-${user.cnid}` if($(`#${rowId}`).length > 0)return; var html = `
${user.mail}
${lang.Authenticated} ${formattedTime(user.logged_in_at)}
` currentlyActiveUsersList.html(html) } //add new submitButtons.click(function(){ theWindowForm.submit() }) theWindowForm.submit(function(e){ e.preventDefault(); var formValues = getCompleteForm() var uid = formValues.uid console.log(formValues) if(formValues.uid){ console.log('edit') editSubaccount(uid,formValues,function(data){ console.log(data) }) }else{ addSubAccount(formValues,function(data){ console.log(data) }) } return false; }); //sub simple lister theWindow.on('click','.delete',function(e){ var el = $(this).parents('.card') var subAccountEmail = el.find('.mail').text() var subAccountUid = el.attr('uid') deleteSubAccount(subAccountEmail,subAccountUid) }) theWindow.on('click','.permission',function(e){ var el = $(this).parents('.card') var uid = el.attr('uid') openSubAccountEditor(uid) setSubmitButtonState(lang['Save Changes'],'check') }) theWindow.on('click','.reset-form',function(e){ permissionsSection.find('[detail]').each(function(n,v){ var el = $(v) var key = el.attr('detail') var defaultValue = el.attr('data-default') el.val(defaultValue) }) drawSelectableForPermissionForm() setSubmitButtonState(lang['Add New'],'plus') theWindowForm.find('[name="pass"],[name="password_again"]').val('') }) permissionsSection.on('click','[check]',function(e){ $(this).parents('.form-group-group').find('select').val($(this).attr('check')).first().change() }) // permissionsSection.on('change','[monitor]',function(e){ // writePermissionsFromFieldsToString() // }); permissionsSection.on('change','[detail="allmonitors"]',function(e){ var value = $(this).val() var el = $('.permission-view') if(value === '1'){ el.hide(); }else{ el.show() } }) onWebSocketEvent(function(d){ switch(d.f){ case'users_online': console.log(d) // $.ccio.pm('user-row',d.users); $.each(d.user,function(n,user){ drawUserToActiveList(user) }) break; case'user_status_change': console.log(d) var user = d.user if(d.status === 1){ drawUserToActiveList(user) }else{ $(`#active-user-${user.uid}-${user.cnid}`).remove() } break; case'delete_sub_account': var user = d.user accountTable.find(`[uid="${user.uid}"]`).remove() break; } }) initiateSubAccountPage() drawSubMenuItems('subAccountManager',definitions['Sub-Account Manager']) })