Updated ReadMe, Updated is admin check, Added initial change user access ability, Started updating update script for new sql methods, Reformatted user init.js indentation, Reformatted indentation on user dialog.

This commit is contained in:
xevidos 2019-02-10 00:35:15 -05:00
parent a9dc1e2815
commit 3d122eb296
7 changed files with 486 additions and 462 deletions

View file

@ -27,7 +27,7 @@ Task List:
* Add ability to login with LDAP
* Add custom market
* Add in new admin interface
* Add in new admin interface ( Check admin-portal branch for progress )
- Group Management
- Permissions Management
- Plugin Management
@ -37,6 +37,7 @@ Task List:
* Add if file could not be saved 5 times close the open file
* Add multi level users. ( Projects for only certain groups, Permission levels )
* Add mobile compatibility
* Add support for more database systems and test ( MSSQL, Oracle, Postgre SQL, SQLite, etc )
* Clean up update script
* Re Add the language recognition system after recode
@ -47,6 +48,10 @@ Completed:
* Add ability to center bottom of code
* Add updating script
* Add site renaming
* Database Update
- Added Mysql Support.
- Project Updated to use PDO so future support for more database systems can be added.
- Updated to store program data ( Not project data ) in databases.
* Fix JS errors already showing
* Remove Codiad autocomplete in favor of Ace's
* Updated for PHP 7.2

View file

@ -201,15 +201,9 @@ class Common {
global $sql;
$query = "SELECT COUNT( * ) FROM users WHERE username=? AND access=?;";
$bind_variables = array( $_SESSION["user"], "admin" );
$return = $sql->query( $query, $bind_variables, formatJSEND( "error", "Error checking user acess." ), 'fetchColumn' );
if( $return > 0 ) {
return( true );
} else {
return( false );
}
$return = $sql->query( $query, $bind_variables, -1, 'fetchColumn' );
$admin = ( $return > 0 );
return $admin;
}
public static function logout() {
@ -644,7 +638,7 @@ class Common {
// Wrapper for old method names
//////////////////////////////////////////////////////////////////
function is_admin() { Common::is_admin(); }
function is_admin() { return Common::is_admin(); }
function debug($message) { Common::debug($message); }
function i18n($key, $args = array()) { echo Common::i18n($key, $args); }
function get_i18n($key, $args = array()) { return Common::get_i18n($key, $args); }

View file

@ -56,69 +56,6 @@ class updater {
/**
* Constants
*/
const DEFAULT_OPTIONS = array(
array(
"name" => "codiad.editor.autocomplete",
"value" => "false",
),
array(
"name" => "codiad.editor.fileManagerTrigger",
"value" => "false",
),
array(
"name" => "codiad.editor.fontSize",
"value" => "14px",
),
array(
"name" => "codiad.editor.highlightLine",
"value" => "true",
),
array(
"name" => "codiad.editor.indentGuides",
"value" => "true",
),
array(
"name" => "codiad.editor.overScroll",
"value" => "0.5",
),
array(
"name" => "codiad.editor.persistentModal",
"value" => "true",
),
array(
"name" => "codiad.editor.printMargin",
"value" => "true",
),
array(
"name" => "codiad.editor.printMarginColumn",
"value" => "80",
),
array(
"name" => "codiad.editor.rightSidebarTrigger",
"value" => "false",
),
array(
"name" => "codiad.editor.softTabs",
"value" => "false",
),
array(
"name" => "codiad.editor.tabSize",
"value" => "4",
),
array(
"name" => "codiad.editor.theme",
"value" => "twilight",
),
array(
"name" => "codiad.editor.wrapMode",
"value" => "false",
),
array(
"name" => "codiad.settings.autosave",
"value" => "true",
),
);
/**
* Properties
@ -253,12 +190,12 @@ class updater {
require_once('../../common.php');
require_once('../sql/class.sql.php');
require_once('../settings/class.settings.php');
$user_settings_file = DATA . "/settings.php";
$projects_file = DATA . "/projects.php";
$users_file = DATA . "/users.php";
$sql = new sql();
global $sql;
$connection = $sql->connect();
$query = "
@ -485,7 +422,7 @@ DELETE FROM user_options;
public function set_default_options() {
foreach( self::DEFAULT_OPTIONS as $id => $option ) {
foreach( Settings::DEFAULT_OPTIONS as $id => $option ) {
$this->update_option( $option["name"], $option["value"], true );
}
@ -571,25 +508,32 @@ DELETE FROM user_options;
public function update_option( $option, $value, $user_setting = null ) {
$sql = new sql();
$query = "INSERT INTO user_options ( name, username, value ) VALUES ( ?, ?, ? );";
$bind = "sss";
$bind_variables = array(
$option,
$this->username,
$value,
);
$result = sql::sql( $query, $bind, $bind_variables, formatJSEND( "error", "Error, Could not add user's settings." ) );
$result = $sql->query( $query, $bind_variables, 0, "rowCount" );
if( $result !== true ) {
if( $result == 0 ) {
$query = "UPDATE user_options SET value=? WHERE name=? AND username=?;";
$bind = "sss";
$bind_variables = array(
$value,
$option,
$this->username,
);
$result = sql::sql( $query, $bind, $bind_variables, formatJSEND( "error", "Error, Could not update user's settings." ) );
$result = $sql->query( $query, $bind_variables, 0, "rowCount" );
}
if( $result > 0 ) {
echo formatJSEND( "success", null );
} else {
echo formatJSEND( "error", "Error, Could not update option $option" );
}
}
@ -606,8 +550,10 @@ DELETE FROM user_options;
if( isset( $_GET["action"] ) && $_GET["action"] !== '' ) {
global $sql;
$updater = new updater();
$action = $_GET["action"];
$sql = new sql();
switch( $action ) {

View file

@ -10,6 +10,11 @@ require_once( "../settings/class.settings.php" );
class User {
const ACCESS = array(
"admin",
"user"
);
//////////////////////////////////////////////////////////////////
// PROPERTIES
//////////////////////////////////////////////////////////////////

View file

@ -142,3 +142,10 @@ if ($_GET['action']=='verify') {
//$User->Verify();
checkSession();
}
if ( $_GET['action'] == 'update_access' ) {
checkSession();
echo json_encode( array( $_GET["username"], $_GET["access"] ) );
}

View file

@ -1,140 +1,176 @@
<?php
/*
* 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.
*/
require_once('../../common.php');
require_once('./class.user.php');
$User = new User();
//////////////////////////////////////////////////////////////////
// Verify Session or Key
//////////////////////////////////////////////////////////////////
/*
* 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.
*/
require_once('../../common.php');
require_once('./class.user.php');
$User = new User();
//////////////////////////////////////////////////////////////////
// Verify Session or Key
//////////////////////////////////////////////////////////////////
checkSession();
checkSession();
switch($_GET['action']){
//////////////////////////////////////////////////////////////
// List Projects
//////////////////////////////////////////////////////////////
case 'list':
$projects_assigned = false;
if( ! checkAccess() ){
?>
<label><?php i18n("Restricted"); ?></label>
<pre><?php i18n("You can not edit the user list"); ?></pre>
<button onclick="codiad.modal.unload();return false;"><?php i18n("Close"); ?></button>
<?php } else { ?>
<label><?php i18n("User List"); ?></label>
<div id="user-list">
<table width="100%">
<tr>
<th width="150"><?php i18n("Username"); ?></th>
<th width="85"><?php i18n("Password"); ?></th>
<th width="70"><?php i18n("Delete"); ?></th>
</tr>
</table>
<div class="user-wrapper">
<table width="100%" style="word-wrap: break-word;word-break: break-all;">
<?php
// Get projects JSON data
$users = $User->list_users();
foreach( $users as $user => $data ) {
?>
<tr>
<td width="150"><?php echo($data['username']); ?></td>
<td width="85"><a onclick="codiad.user.password('<?php echo($data['username']); ?>');" class="icon-flashlight bigger-icon"></a></td>
<?php
if($_SESSION['user'] == $data['username']){
?>
<td width="75"><a onclick="codiad.message.error('You Cannot Delete Your Own Account');" class="icon-block bigger-icon"></a></td>
<?php
}else{
?>
<td width="70"><a onclick="codiad.user.delete('<?php echo($data['username']); ?>');" class="icon-cancel-circled bigger-icon"></a></td>
<?php
}
?>
</tr>
<?php
}
?>
</table>
</div>
</div>
<button class="btn-left" onclick="codiad.user.createNew();"><?php i18n("New Account"); ?></button>
<button class="btn-right" onclick="codiad.modal.unload();return false;"><?php i18n("Close"); ?></button>
<?php
}
break;
//////////////////////////////////////////////////////////////////////
// Create New User
//////////////////////////////////////////////////////////////////////
case 'create':
?>
<form>
<label><?php i18n("Username"); ?></label>
<input type="text" name="username" autofocus="autofocus" autocomplete="off">
<label><?php i18n("Password"); ?></label>
<input type="password" name="password1">
<label><?php i18n("Confirm Password"); ?></label>
<input type="password" name="password2">
<button class="btn-left"><?php i18n("Create Account"); ?></button>
switch($_GET['action']){
//////////////////////////////////////////////////////////////
// List Projects
//////////////////////////////////////////////////////////////
case 'list':
$projects_assigned = false;
if( ! checkAccess() ) {
?>
<label><?php i18n("Restricted"); ?></label>
<pre><?php i18n("You can not edit the user list"); ?></pre>
<button onclick="codiad.modal.unload();return false;"><?php i18n("Close"); ?></button>
<?php
} else {
$admin = is_admin();
?>
<label><?php i18n("User List"); ?></label>
<div id="user-list">
<table width="100%">
<tr>
<th width="150"><?php i18n("Username"); ?></th>
<th width="85"><?php i18n("Password"); ?></th>
<?php
if( $admin ) {
?>
<th width="70"><?php i18n("Access"); ?></th>
<?php
}
?>
<th width="70"><?php i18n("Delete"); ?></th>
</tr>
</table>
<div class="user-wrapper">
<table width="100%" style="word-wrap: break-word;word-break: break-all;">
<?php
// Get projects JSON data
$users = $User->list_users();
foreach( $users as $user => $data ) {
?>
<tr>
<td width="150"><?php echo($data['username']); ?></td>
<td width="85"><a onclick="codiad.user.password('<?php echo($data['username']); ?>');" class="icon-flashlight bigger-icon"></a></td>
<?php
if( $admin ) {
?>
<td width="75">
<select onchange="codiad.user.update_access( event, '<?php echo( $data['username'] ); ?>' )">
<?php
foreach( User::ACCESS as $role ) {
?>
<option value="<?php echo $role;?>" <?php if( $data["access"] == $role ) { echo 'selected="selected"'; }?>><?php echo i18n( $role );?></option>
<?php
}
?>
</select>
</td>
<?php
}
if( $_SESSION['user'] == $data['username'] ) {
?>
<td width="75"><a onclick="codiad.message.error('You Cannot Delete Your Own Account');" class="icon-block bigger-icon"></a></td>
<?php
} else {
?>
<td width="70"><a onclick="codiad.user.delete('<?php echo($data['username']); ?>');" class="icon-cancel-circled bigger-icon"></a></td>
<?php
}
?>
</tr>
<?php
}
?>
</table>
</div>
</div>
<button class="btn-left" onclick="codiad.user.createNew();"><?php i18n("New Account"); ?></button>
<button class="btn-right" onclick="codiad.modal.unload();return false;"><?php i18n("Close"); ?></button>
<?php
}
break;
//////////////////////////////////////////////////////////////////////
// Create New User
//////////////////////////////////////////////////////////////////////
case 'create':
?>
<form>
<label><?php i18n("Username"); ?></label>
<input type="text" name="username" autofocus="autofocus" autocomplete="off">
<label><?php i18n("Password"); ?></label>
<input type="password" name="password1">
<label><?php i18n("Confirm Password"); ?></label>
<input type="password" name="password2">
<button class="btn-left"><?php i18n("Create Account"); ?></button>
<button class="btn-right" onclick="codiad.user.list();return false;"><?php i18n("Cancel"); ?></button>
<form>
<?php
break;
//////////////////////////////////////////////////////////////////////
// Delete User
//////////////////////////////////////////////////////////////////////
case 'delete':
?>
<form>
<input type="hidden" name="username" value="<?php echo($_GET['username']); ?>">
<label><?php i18n("Confirm User Deletion"); ?></label>
<pre><?php i18n("Account:"); ?> <?php echo($_GET['username']); ?></pre>
<button class="btn-left"><?php i18n("Confirm"); ?></button>
<form>
<?php
break;
//////////////////////////////////////////////////////////////////////
// Delete User
//////////////////////////////////////////////////////////////////////
case 'delete':
?>
<form>
<input type="hidden" name="username" value="<?php echo($_GET['username']); ?>">
<label><?php i18n("Confirm User Deletion"); ?></label>
<pre><?php i18n("Account:"); ?> <?php echo($_GET['username']); ?></pre>
<button class="btn-left"><?php i18n("Confirm"); ?></button>
<button class="btn-right" onclick="codiad.user.list();return false;"><?php i18n("Cancel"); ?></button>
<div class="loading"></div>
<?php
break;
//////////////////////////////////////////////////////////////////////
// Change Password
//////////////////////////////////////////////////////////////////////
case 'password':
if($_GET['username']=='undefined'){
$username = $_SESSION['user'];
}else{
$username = $_GET['username'];
}
?>
<form>
<input type="hidden" name="username" value="<?php echo($username); ?>">
<label><?php i18n("New Password"); ?></label>
<input type="password" name="password1" autofocus="autofocus">
<label><?php i18n("Confirm Password"); ?></label>
<input type="password" name="password2">
<button class="btn-left"><?php i18n("Change %{username}%&apos;s Password", array("username" => ucfirst($username))) ?></button>
<?php
break;
//////////////////////////////////////////////////////////////////////
// Change Password
//////////////////////////////////////////////////////////////////////
case 'password':
if( $_GET['username'] == 'undefined' ) {
$username = $_SESSION['user'];
} else {
$username = $_GET['username'];
}
?>
<form>
<input type="hidden" name="username" value="<?php echo($username); ?>">
<label><?php i18n("New Password"); ?></label>
<input type="password" name="password1" autofocus="autofocus">
<label><?php i18n("Confirm Password"); ?></label>
<input type="password" name="password2">
<button class="btn-left"><?php i18n("Change %{username}%&apos;s Password", array("username" => ucfirst($username))) ?></button>
<button class="btn-right" onclick="codiad.modal.unload();return false;"><?php i18n("Cancel"); ?></button>
<?php
break;
<?php
break;
}
}
?>

View file

@ -1,251 +1,282 @@
/*
* 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() {
$.post(this.controller + '?action=authenticate', this.loginForm.serialize(), function(data) {
parsed = codiad.jsend.parse(data);
if (parsed != 'error') {
// Session set, reload
window.location.reload();
}
});
},
//////////////////////////////////////////////////////////////////
// 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(400, 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);
}
};
})(this, jQuery);
/*
* 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() {
$.post(this.controller + '?action=authenticate', this.loginForm.serialize(), function(data) {
parsed = codiad.jsend.parse(data);
if(parsed != 'error') {
// Session set, reload
window.location.reload();
}
});
},
//////////////////////////////////////////////////////////////////
// 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);