Tuesday, June 30, 2009

[jQuery] looking for a table of records (in this case users) with add,edit,delete options linked to Dialog boxes? read this

OK! Originally I had a problem with this script but I fixed it and it
all works perfectly. If anyone has any use for this, here you go:

this feature is using:
jscripts/jquery-1.3.2.min.js
jscripts/jquery-ui-1.7.1.custom.min.js
jscripts/jquery.validate.js
jscripts/jquery.form.js
jscripts/jquery.metadata.js
jscripts/jquery.tablesorter.min.js
jquery.tablesorter.pager.js


admin.php javascript:
function updateUserList(){
$("#admin_list_user_box > .user_box").hide();
$("#user_table_loading").fadeIn();
$.ajax({
type: "POST",
url: "user_logic.php",
data: "action=update",
complete: function(data){
$("#user_table_loading").hide();
$("#admin_list_user_box > .user_box").html(data.responseText);
$("#admin_list_user_box > .user_box").fadeIn(1000);
}
});
}

updateUserList();

$('a.add_user').click(function(e) {
e.preventDefault();
$('#add_user_dialog').dialog('open');
return false;
});

$("#add_user_dialog").dialog({
show: 'scale',
bgiframe: true,
autoOpen: false,
modal: true,
draggable: false,
width: 500,
resizable: false,
position: ['top', 50],
buttons: {
'Ok': function() {
var inputs = [];
$(':input', this).each(function() {
inputs.push(this.name + '=' + escape(this.value));
})
$.ajax({
type: "POST",
url: "user_logic.php",
data: "action=add&" + inputs.join('&'),
beforeSend: function() {
$("#admin_list_user_box > .user_box").hide();
$("#user_table_loading").fadeIn();
},
error: function() {
alert("Failed to submit");
},
success: function() {
updateUserList();
}
});
$(this).dialog('close');
},
Cancel: function() {
$(this).dialog('close');
}
}
});

$("#add_user").validate({
rules: {
user_username: {
required: true,
minlength: 4,
remote: "login_check.php"
},
user_password: {
required: true,
minlength: 5,
},
user_email: {
required: true,
email: true,
remote: "email_check.php"
}
},
messages: {
user_username: {
required: "Enter a User Name",
minlength: jQuery.format("Enter at least {0} characters"),
remote: jQuery.format("{0} is already in use")
},
user_password: {
required: "Enter a password",
minlength: jQuery.format("Enter at least {0} characters")
},
user_email: {
required: "Please Enter an Email Address",
remote: jQuery.format("{0} is already in use")
}
},
errorLabelContainer: $("ul", "#add_user .user_result"),
wrapper: 'li',
submitHandler: function() {
$("#add_user").ajaxSubmit({
clearForm: true
});
$(this).dialog('close');
}
});

admin.php html:
<div id="manage_users">
<a class="add_user">Add User</a>
<div id="admin_list_user_box" class="ui-widget ui-corner-all">
<div class="ui-widget-header">*User List</div>
<div id="add_user_dialog" title="Add User?">
<form class="cmxform" id="add_user">
<fieldset>
<div class="user_row">
<div class="user_label">User Login:</div>
<div class="user_value"><input name="user_username"
type="text"></div>
</div>
<div class="user_row">
<div class="user_label">User Password:</div>
<div class="user_value">
<input name="user_password" type="text">
</div>
</div>
<div class="user_row">
<div class="user_label">User email address:</div>
<div class="user_value">
<input name="user_email" type="text" minlength="5">
</div>
</div>
<div class="user_row">
<div class="user_label">User Type:</div>
<div class="user_value">
<select name="user_type">
<option value="user">Registered User</option>
<option value="editor">Content Editor</option>
<option value="admin">Site Administrator</option>
</select>
</div>
</div>
<div class="user_row">
<div class="user_result">
<ul>
</ul>
</div>
</div>
</fieldset>
<input class="edit_user_id" name="user_id" type="hidden"
value="" />
</form>
</div>
<div id="user_table_loading" style="text-align:center;"
class="ui-helper-clearfix"><img src="img/loading.gif"
alt="Loading..." /></div>
<div class="ui-helper-clearfix user_box">
<!-- AJAX Loaded Content -->
</div>
</div>
</div>
user_logic.php (the meat):
<?
include("your_database_connection_file");

if(isset($_POST['action']))
{
?>
<script type="text/javascript">
$(document).ready(function() {
$("#user_table").tablesorter({
headers: {
4: {sorter: false}
},
widgets: ['zebra']
})
.tablesorterPager({
container: $("#user_table1pager"),
positionFixed: false,
size: 20
})
$('table.tablesorter tbody tr td').css('border-bottom','1px #000
solid');

function updateUserList(){
$("#admin_list_user_box > .user_box").hide();
$("#user_table_loading").fadeIn();
$.ajax({
type: "POST",
url: "user_logic.php",
data: "action=update",
complete: function(data){
$("#user_table_loading").hide();
$("#admin_list_user_box > .user_box").html(data.responseText);
$("#admin_list_user_box > .user_box").fadeIn(1000);
}
});
}

$('a.delete').click(function(e) {
e.preventDefault();
var user_id;
var user_name;

user_id = $(this).parent().siblings().eq(0).attr('id')
user_name = $(this).parent().siblings().eq(1).attr('id')

$('.delete_user_id').val(user_id)
$("span.user_name_span").text("" + user_name);
$('#delete_user_confirmation').dialog('open');
return false;
});

$("#delete_user_confirmation").dialog({
show: 'scale',
bgiframe: true,
autoOpen: false,
modal: true,
draggable: false,
width: 350,
resizable: false,
position: ['top', 50],
buttons: {
'Ok': function() {
$.ajax({
type: "POST",
url: "user_logic.php",
data: "action=delete&user_id=" + $
('.delete_user_id').attr('value'),
beforeSend: function() {
$("#admin_list_user_box > .user_box").hide();
$("#user_table_loading").fadeIn();
},
success: function() {
updateUserList();
}
});
$(this).dialog('close');
},
Cancel: function() {
$(this).dialog('close');
}
}
});

$('a.edit').click(function(e) {
e.preventDefault();

var user_id;
var user_name;
var user_email;
var user_type;
var UserRow;

UserRow = $(this).attr('id')
user_id = $(this).parent().siblings().eq(0).attr('id')
user_name = $(this).parent().siblings().eq(1).attr('id')
user_email = $(this).parent().siblings().eq(2).attr('id')
user_type = $(this).parent().siblings().eq(3).attr('id')

$('form#edit_user .edit_user_id').val(user_id)
$('span.user_name_span').text('' + user_name);
$('form#edit_user .edit_user_name').val(user_name)
$('form#edit_user .edit_user_email').val(user_email)
$('form#edit_user .edit_user_user_type').val(user_type)
$('#edit_user_dialog').dialog('open');
return false;
});





$("#edit_user").validate({
rules: {
edit_user_password: {
minlength: 5,
},
edit_user_email: {
required: true,
email: true,
remote: "email_check.php"
}
},
messages: {
edit_user_password: {
minlength: jQuery.format("Enter at least {0} characters")
},
edit_user_email: {
required: "Please Enter an Email Address",
remote: jQuery.format("{0} is already in use")
}
},
errorLabelContainer: $("ul", "#edit_user .user_result"),
wrapper: 'li',
submitHandler: function() {
$("#edit_user").ajaxSubmit({
beforeSubmit: function(){
$("#edit_user").serialize();
},
success: function(){
updateUserList();
clearForm: true
}
});
$(this).dialog('close');
}

});





$("#edit_user_dialog").dialog({
show: 'scale',
bgiframe: true,
autoOpen: false,
modal: true,
draggable: false,
width: 500,
resizable: false,
position: ['top', 50],
buttons: {
'Ok': function() {
var inputs = [];
$(':input', this).each(function() {
inputs.push(this.name + '=' + escape(this.value));
})
$.ajax({
type: "POST",
url: "user_logic.php",
data: "action=edit&" + inputs.join('&'),
beforeSend: function() {
$("#admin_list_user_box > .user_box").hide();
$("#user_table_loading").fadeIn();
},
error: function() {
alert("Failed to submit");
},
success: function() {
updateUserList();
}
});
$(this).dialog('close');
},
Cancel: function() {
$(this).dialog('close');
}
}

});
});
</script>

<div id="delete_user_confirmation" title="Delete User?">
<input class="delete_user_id" name="user_id" type="hidden" value="" />
<p><span class="ui-icon ui-icon-alert" style="float:left; margin:0
7px 20px 0;"></span>The user "<span class="user_name_span"></span>"
will be permanently deleted. Are you sure?</p>
</div>
<div id="edit_user_dialog" title="Edit User?">
<form class="cmxform" id="edit_user" action="user_logic.php"
method="post">
<fieldset>
<div class="user_row">
<div class="user_label">User Login:</div>
<div class="user_value"><span class="user_name_span"></span></div>
</div>
<div class="user_row">
<div class="user_label">Update Password:</div>
<div class="user_value">
<input class="edit_user_password" name="edit_user_password"
type="text">
</div>
</div>
<div class="user_row">
<div class="user_label">Update email address:</div>
<div class="user_value">
<input class="edit_user_email" name="edit_user_email" type="text"
minlength="5">
</div>
</div>
<div class="user_row">
<div class="user_label">Update User Type:</div>
<div class="user_value">
<select name="edit_user_user_type" class="edit_user_user_type">
<option value="user">Registered User</option>
<option value="editor">Content Editor</option>
<option value="admin">Site Administrator</option>
</select>
</div>
</div>
<div class="user_row">
<div class="user_result">
<ul>
</ul>
</div>
</div>
</fieldset>
<input class="edit_user_id" name="user_id" type="hidden" value="" />
<input class="edit_user_name" name="user_name" type="hidden"
value="" />
<input name="action" type="hidden" value="edit" />
</form>
</div>
<?
switch($_POST['action']){
case "update":
$fetch = mysql_query("SELECT id,username,password,email,user_type
FROM users ORDER BY id");
?>
<table cellpadding="0" cellspacing="0" class="tablesorter"
id="user_table">
<thead>
<tr>
<th width="20%">User ID</th>
<th width="20%">User Name</th>
<th width="33%">User Email</th>
<th width="20%">User Type</th>
<th width="7%">Action</th>
</tr>
</thead>
<tbody>
<?
$row_count = 1;
while ($user = mysql_fetch_array($fetch,MYSQL_NUM)) {
$fetched_id = $user[0];
$fetched_username = $user[1];
$fetched_password = $user[2];
$fetched_email = $user[3];
$fetched_user_type = $user[4];
$result .= "<tr id='record-".$fetched_id."'>
<td id='".$fetched_id."'>".$fetched_id."</td>
<td id='".$fetched_username."'>".$fetched_username."</td>
<td id='".$fetched_email."'><a href='mailto:".$fetched_email."'>".
$fetched_email."</a></td>
<td id='".$fetched_user_type."'>".$fetched_user_type."</td>
<td align='right'><a id='".$row_count."' class='edit'
title='Edit'><img src='img/edit.png' border='0' align='left'></a><a
id='".$fetched_username."' class='delete' title='Delete'><img src='img/
delete.png' border='0' align='right'></a></td>
</tr>";
$row_count += 1;
}

echo $result;
?>
</tbody>
<tfoot>
<tr id="user_table1pager">
<td colspan="5" align="center" valign="bottom"><img src="/newsite/
css/images/first.png" class="first"/> <img src="/newsite/css/images/
prev.png" class="prev"/>
<input type="text" class="pagedisplay" size="3"
readonly="readonly"/>
<img src="/newsite/css/images/next.png" class="next"/> <img src="/
newsite/css/images/last.png" class="last"/>
<select class="pagesize">
<option value="10">10</option>
<option selected="selected" value="20">20</option>
</select></td>
</tr>
</tfoot>
</table>
<?
break;

case "add":
$username = $_POST['user_username'];
$password = md5($_POST['user_password']);
$email = $_POST['user_email'];
$user_type = $_POST['user_type'];

$query = "INSERT INTO users (username,password,email,user_type)
VALUES ('$username','$password','$email','$user_type')";
mysql_query($query) or die('MySQL error: ' . mysql_error() . '<hr/
>' . $query);

break;

case "delete":
$user_id = (int)$_POST['user_id'];
$query = "DELETE FROM users WHERE id ='$user_id'";
mysql_query($query);

break;

case "edit":
$user_id = (int)$_POST['user_id'];
$edit_user_type = $_POST['edit_user_user_type'];
$edit_user_email = $_POST['edit_user_email'];

if (!empty($_POST['edit_user_password'])) {
$edit_user_password = md5($_POST['edit_user_password']);
$update_user_password = "UPDATE users SET password =
'$edit_user_password' WHERE id ='$user_id'";
mysql_query($update_user_password);
}

$update_user_query .= "UPDATE users SET email = '$edit_user_email',
user_type = '$edit_user_type' WHERE id ='$user_id'";
mysql_query($update_user_query);

break;
}
}else{
header ("Location: index.html");
}
?>

No comments: