/* * Copyright (c) Codiad & Kent Safranski (codiad.com), distributed * as-is and without warranty under the MIT License. See * [root]/license.txt for more. This information must remain intact. */ (function(global, $) { var codiad = global.codiad; $(function() { codiad.user.init(); }); codiad.user = { loginForm: $('#login'), controller: 'components/user/controller.php', dialog: 'components/user/dialog.php', ////////////////////////////////////////////////////////////////// // Initilization ////////////////////////////////////////////////////////////////// init: async function() { var _this = this; this.loginForm.on('submit', function(e) { e.preventDefault(); _this.authenticate(); }); // Get Theme if(codiad.settings !== undefined) { var theme = await codiad.settings.get_option('codiad.theme'); } else { var theme = 'default'; } $("#theme option").each(function() { if($(this).val() == theme) { $(this).attr("selected", "selected"); } }); // Get Language if(codiad.settings !== undefined) { var language = await codiad.settings.get_option('codiad.language'); } else { var language = 'en'; } $("#language option").each(function() { if($(this).val() == language) { $(this).attr("selected", "selected"); } }); // More Selector $('.show-language-selector').click(function() { $(this).hide(); $('.language-selector').animate({ height: 'toggle' }, "fast"); }); }, ////////////////////////////////////////////////////////////////// // Authenticate User ////////////////////////////////////////////////////////////////// authenticate: function() { console.log( this.loginForm.serialize() ); $.ajax({ type: "POST", url: this.controller + '?action=authenticate', data: this.loginForm.serialize(), success: function( data ) { let parsed = codiad.jsend.parse( data ); if( parsed != 'error' ) { // Session set, reload window.location.reload(); } }, error: function( XMLHttpRequest, textStatus, errorThrown ) { console.log( XMLHttpRequest, textStatus, errorThrown ); } }); }, ////////////////////////////////////////////////////////////////// // Logout ////////////////////////////////////////////////////////////////// logout: function() { var forcelogout = true; if($('#list-active-files li.changed').length > 0) { forcelogout = confirm(i18n('You have unsaved files.')); } if(forcelogout) { $('#list-active-files li.changed').each(function() { $(this).removeClass('changed') }); amplify.publish('user.logout', {}); codiad.settings.save(); $.get(this.controller + '?action=logout', function() { window.location.reload(); }); } }, ////////////////////////////////////////////////////////////////// // Open the user manager dialog ////////////////////////////////////////////////////////////////// list: function() { $('#modal-content form') .die('submit'); // Prevent form bubbling codiad.modal.load(600, this.dialog + '?action=list'); }, ////////////////////////////////////////////////////////////////// // Create User ////////////////////////////////////////////////////////////////// createNew: function() { var _this = this; codiad.modal.load(400, this.dialog + '?action=create'); $('#modal-content form') .live('submit', function(e) { e.preventDefault(); var pass = true; var username = $('#modal-content form input[name="username"]') .val(); var password1 = $('#modal-content form input[name="password1"]') .val(); var password2 = $('#modal-content form input[name="password2"]') .val(); // Check matching passwords if(password1 != password2) { codiad.message.error(i18n('Passwords Do Not Match')); pass = false; } // Check no spaces in username if(!/^[a-z0-9]+$/i.test(username) || username.length === 0) { codiad.message.error(i18n('Username Must Be Alphanumeric String')); pass = false; } if(pass) { $.post(_this.controller + '?action=create', { 'username': username, 'password': password1 }, function(data) { var createResponse = codiad.jsend.parse(data); if(createResponse != 'error') { codiad.message.success(i18n('User Account Created')) _this.list(); } }); } }); }, ////////////////////////////////////////////////////////////////// // Delete User ////////////////////////////////////////////////////////////////// delete: function(username) { var _this = this; codiad.modal.load(400, this.dialog + '?action=delete&username=' + username); $('#modal-content form') .live('submit', function(e) { e.preventDefault(); var username = $('#modal-content form input[name="username"]') .val(); codiad.modal.show_loading(); $.get(_this.controller + '?action=delete&username=' + username, function(data) { var deleteResponse = codiad.jsend.parse(data); if(deleteResponse != 'error') { codiad.message.success(i18n('Account Deleted')) _this.list(); } }); }); }, ////////////////////////////////////////////////////////////////// // Set Project Access ////////////////////////////////////////////////////////////////// projects: function(username) { codiad.modal.load(400, this.dialog + '?action=projects&username=' + username); var _this = this; $('#modal-content form') .live('submit', function(e) { e.preventDefault(); var username = $('#modal-content form input[name="username"]') .val(); var accessLevel = $('#modal-content form select[name="access_level"]') .val(); var projects = new Array(); $('input:checkbox[name="project"]:checked').each(function() { projects.push($(this).val()); }); if(accessLevel == 0) { projects = 0; } // Check and make sure if access level not full that at least on project is selected if(accessLevel == 1 && !projects) { codiad.message.error(i18n('At Least One Project Must Be Selected')); } else { $.post(_this.controller + '?action=project_access&username=' + username, { projects: projects }, function(data) { var projectsResponse = codiad.jsend.parse(data); if(projectsResponse != 'error') { codiad.message.success(i18n('Account Modified')); } }); } }); }, ////////////////////////////////////////////////////////////////// // Change Password ////////////////////////////////////////////////////////////////// password: function(username) { var _this = this; codiad.modal.load(400, this.dialog + '?action=password&username=' + username); $('#modal-content form') .live('submit', function(e) { e.preventDefault(); var username = $('#modal-content form input[name="username"]') .val(); var password1 = $('#modal-content form input[name="password1"]') .val(); var password2 = $('#modal-content form input[name="password2"]') .val(); if(password1 != password2) { codiad.message.error(i18n('Passwords Do Not Match')); } else { $.post(_this.controller + '?action=password', { 'username': username, 'password': password1 }, function(data) { var passwordResponse = codiad.jsend.parse(data); if(passwordResponse != 'error') { codiad.message.success(i18n('Password Changed')); codiad.modal.unload(); } }); } }); }, ////////////////////////////////////////////////////////////////// // Change Current Project ////////////////////////////////////////////////////////////////// project: function(project) { $.get(this.controller + '?action=project&project=' + project); }, update_access: function( e, username=null ) { let access = ""; if( ( typeof e ) == "string" ) { access = e; } else { access = e.target.value; } $.get( this.controller + `?action=update_access&username=${username}&access=${access}`, function( data ) { let response = codiad.jsend.parse( data ); if( response != 'error' ) { codiad.message.success( i18n( 'Access Updated' ) ); } }); }, }; })(this, jQuery);