mirror of
https://github.com/itflow-org/itflow
synced 2026-02-28 02:44:53 +00:00
Added Important Functionality to Contacts, Cleaned up UI elements in the contacts and users modals. Added partial User and contact Invite functionality.
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
<div class="modal-dialog">
|
<div class="modal-dialog">
|
||||||
<div class="modal-content bg-dark">
|
<div class="modal-content bg-dark">
|
||||||
<div class="modal-header">
|
<div class="modal-header">
|
||||||
<h5 class="modal-title"><i class="far fa-fw fa-address-card"></i> New Contact</h5>
|
<h5 class="modal-title"><i class="fas fa-user-plus"></i> New Contact</h5>
|
||||||
<button type="button" class="close text-white" data-dismiss="modal">
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
<span>×</span>
|
<span>×</span>
|
||||||
</button>
|
</button>
|
||||||
@@ -33,17 +33,22 @@
|
|||||||
<div class="tab-pane fade show active" id="pills-details">
|
<div class="tab-pane fade show active" id="pills-details">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Name <strong class="text-danger">*</strong></label>
|
<label>Name <strong class="text-danger">*</strong> / <span class="text-secondary">Primary Contact</span></label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<span class="input-group-text"><i class="fa fa-fw fa-user"></i></span>
|
<span class="input-group-text"><i class="fa fa-fw fa-user"></i></span>
|
||||||
</div>
|
</div>
|
||||||
<input type="text" class="form-control" name="name" placeholder="Full Name" required autofocus>
|
<input type="text" class="form-control" name="name" placeholder="Full Name" required autofocus>
|
||||||
|
<div class="input-group-append">
|
||||||
|
<div class="input-group-text">
|
||||||
|
<input type="checkbox" name="primary_contact" value="1" <?php if($primary_contact == 0){ echo "checked"; } ?>>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Title / Primary Contact</label>
|
<label>Title / <span class="text-secondary">Important Contact</span></label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<span class="input-group-text"><i class="fa fa-fw fa-id-badge"></i></span>
|
<span class="input-group-text"><i class="fa fa-fw fa-id-badge"></i></span>
|
||||||
@@ -51,7 +56,7 @@
|
|||||||
<input type="text" class="form-control" name="title" placeholder="Title">
|
<input type="text" class="form-control" name="title" placeholder="Title">
|
||||||
<div class="input-group-append">
|
<div class="input-group-append">
|
||||||
<div class="input-group-text">
|
<div class="input-group-text">
|
||||||
<input type="checkbox" name="primary_contact" value="1" <?php if($primary_contact == 0){ echo "checked"; } ?>>
|
<input type="checkbox" name="contact_important" value="1">
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -169,8 +174,8 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer bg-white">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
|
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button>
|
||||||
<button type="submit" name="add_contact" class="btn btn-primary">Save</button>
|
<button type="submit" name="add_contact" class="btn btn-primary"><strong><i class="fas fa-check"></i> Create</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -35,17 +35,22 @@
|
|||||||
<div class="tab-pane fade show active" id="pills-details<?php echo $contact_id; ?>">
|
<div class="tab-pane fade show active" id="pills-details<?php echo $contact_id; ?>">
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Name <strong class="text-danger">*</strong></label>
|
<label>Name <strong class="text-danger">*</strong> / <span class="text-secondary">Primary Contact</span></label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<span class="input-group-text"><i class="fa fa-fw fa-user"></i></span>
|
<span class="input-group-text"><i class="fa fa-fw fa-user"></i></span>
|
||||||
</div>
|
</div>
|
||||||
<input type="text" class="form-control" name="name" placeholder="Full Name" value="<?php echo $contact_name; ?>" required>
|
<input type="text" class="form-control" name="name" placeholder="Full Name" value="<?php echo $contact_name; ?>" required>
|
||||||
|
<div class="input-group-append">
|
||||||
|
<div class="input-group-text">
|
||||||
|
<input type="checkbox" name="primary_contact" value="1" <?php if($contact_id == $primary_contact){ echo "checked"; } ?>>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Title / Primary Contact</label>
|
<label>Title / <span class="text-secondary">Important Contact</span></label>
|
||||||
<div class="input-group">
|
<div class="input-group">
|
||||||
<div class="input-group-prepend">
|
<div class="input-group-prepend">
|
||||||
<span class="input-group-text"><i class="fa fa-fw fa-id-badge"></i></span>
|
<span class="input-group-text"><i class="fa fa-fw fa-id-badge"></i></span>
|
||||||
@@ -53,7 +58,7 @@
|
|||||||
<input type="text" class="form-control" name="title" placeholder="Title" value="<?php echo $contact_title; ?>">
|
<input type="text" class="form-control" name="title" placeholder="Title" value="<?php echo $contact_title; ?>">
|
||||||
<div class="input-group-append">
|
<div class="input-group-append">
|
||||||
<div class="input-group-text">
|
<div class="input-group-text">
|
||||||
<input type="checkbox" name="primary_contact" value="1" <?php if($contact_id == $primary_contact){ echo "checked"; } ?>>
|
<input type="checkbox" name="contact_important" value="1" <?php if($contact_important == 1){ echo "checked"; } ?>>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -198,8 +203,8 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div class="modal-footer bg-white">
|
<div class="modal-footer bg-white">
|
||||||
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
|
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button>
|
||||||
<button type="submit" name="edit_contact" class="btn btn-primary">Save</button>
|
<button type="submit" name="edit_contact" class="btn btn-primary"><i class="fas fa-check"></i> Save</button>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
51
client_contact_invite_modal.php
Normal file
51
client_contact_invite_modal.php
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
<div class="modal" id="contactInviteModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content bg-dark">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title"><i class="fas fa-fw fa-user-plus"></i> Invite Contact</h5>
|
||||||
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<form action="post.php" method="post" enctype="multipart/form-data" autocomplete="off">
|
||||||
|
<input type="hidden" name="client_id" value="<?php echo $client_id; ?>">
|
||||||
|
|
||||||
|
<div class="modal-body bg-white">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Email</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-envelope"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="email" class="form-control" name="email" placeholder="Email Address">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Welcome Letter</label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fas fa-fw fa-envelope-open-text"></i></span>
|
||||||
|
</div>
|
||||||
|
<select class="form-control select2" name="welcome_letter">
|
||||||
|
<option value="">- Select One -</option>
|
||||||
|
<option value="">Standard</option>
|
||||||
|
<option value="">Big Wig</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="modal-footer bg-white">
|
||||||
|
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button>
|
||||||
|
<button type="submit" name="invite_contact" class="btn btn-primary"><strong><i class="fas fa-paper-plane"></i> Send Invite</strong></button>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</form>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
@@ -38,7 +38,15 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli,"SELECT FOUND_ROWS()"));
|
|||||||
<div class="card-header py-2">
|
<div class="card-header py-2">
|
||||||
<h3 class="card-title mt-2"><i class="fa fa-fw fa-users"></i> Contacts</h3>
|
<h3 class="card-title mt-2"><i class="fa fa-fw fa-users"></i> Contacts</h3>
|
||||||
<div class="card-tools">
|
<div class="card-tools">
|
||||||
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addContactModal"><i class="fas fa-fw fa-plus"></i> New Contact</button>
|
<div class="btn-group">
|
||||||
|
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addContactModal">
|
||||||
|
<i class="fas fa-fw fa-plus"></i> New Contact
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
|
||||||
|
<div class="dropdown-menu">
|
||||||
|
<a class="dropdown-item text-dark" href="#" data-toggle="modal" data-target="#contactInviteModal"><i class="fas fa-paper-plane mr-2"></i>Invite Contact</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
@@ -118,6 +126,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli,"SELECT FOUND_ROWS()"));
|
|||||||
$contact_photo = htmlentities($row['contact_photo']);
|
$contact_photo = htmlentities($row['contact_photo']);
|
||||||
$contact_initials = initials($contact_name);
|
$contact_initials = initials($contact_name);
|
||||||
$contact_notes = htmlentities($row['contact_notes']);
|
$contact_notes = htmlentities($row['contact_notes']);
|
||||||
|
$contact_important = intval($row['contact_important']);
|
||||||
$contact_created_at = $row['contact_created_at'];
|
$contact_created_at = $row['contact_created_at'];
|
||||||
if($contact_id == $primary_contact){
|
if($contact_id == $primary_contact){
|
||||||
$primary_contact_display = "<small class='text-success'>Primary Contact</small>";
|
$primary_contact_display = "<small class='text-success'>Primary Contact</small>";
|
||||||
@@ -215,6 +224,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli,"SELECT FOUND_ROWS()"));
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
include("client_contact_add_modal.php");
|
include("client_contact_add_modal.php");
|
||||||
|
include("client_contact_invite_modal.php");
|
||||||
include("client_contact_import_modal.php");
|
include("client_contact_import_modal.php");
|
||||||
|
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -157,7 +157,7 @@ $num_rows = mysqli_fetch_row(mysqli_query($mysqli,"SELECT FOUND_ROWS()"));
|
|||||||
}
|
}
|
||||||
|
|
||||||
function generatePassword(){
|
function generatePassword(){
|
||||||
document.getElementById("password").value = "<?php echo keygen() ?>"
|
document.getElementById("password").value = "<?php echo bin2hex(random_bytes(8)); ?>"
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
|||||||
6
post.php
6
post.php
@@ -3807,6 +3807,7 @@ if(isset($_POST['add_contact'])){
|
|||||||
$email = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['email'])));
|
$email = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['email'])));
|
||||||
$primary_contact = intval($_POST['primary_contact']);
|
$primary_contact = intval($_POST['primary_contact']);
|
||||||
$notes = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['notes'])));
|
$notes = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['notes'])));
|
||||||
|
$contact_important = intval($_POST['contact_important']);
|
||||||
$location_id = intval($_POST['location']);
|
$location_id = intval($_POST['location']);
|
||||||
$auth_method = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['auth_method'])));
|
$auth_method = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['auth_method'])));
|
||||||
$password = password_hash(bin2hex(random_bytes(16)), PASSWORD_DEFAULT);
|
$password = password_hash(bin2hex(random_bytes(16)), PASSWORD_DEFAULT);
|
||||||
@@ -3816,7 +3817,7 @@ if(isset($_POST['add_contact'])){
|
|||||||
mkdir("uploads/clients/$session_company_id/$client_id");
|
mkdir("uploads/clients/$session_company_id/$client_id");
|
||||||
}
|
}
|
||||||
|
|
||||||
mysqli_query($mysqli,"INSERT INTO contacts SET contact_name = '$name', contact_title = '$title', contact_phone = '$phone', contact_extension = '$extension', contact_mobile = '$mobile', contact_email = '$email', contact_notes = '$notes', contact_auth_method = '$auth_method', contact_password_hash = '$password', contact_department = '$department', contact_location_id = $location_id, contact_client_id = $client_id, company_id = $session_company_id");
|
mysqli_query($mysqli,"INSERT INTO contacts SET contact_name = '$name', contact_title = '$title', contact_phone = '$phone', contact_extension = '$extension', contact_mobile = '$mobile', contact_email = '$email', contact_notes = '$notes', contact_important = $contact_important, contact_auth_method = '$auth_method', contact_password_hash = '$password', contact_department = '$department', contact_location_id = $location_id, contact_client_id = $client_id, company_id = $session_company_id");
|
||||||
|
|
||||||
$contact_id = mysqli_insert_id($mysqli);
|
$contact_id = mysqli_insert_id($mysqli);
|
||||||
|
|
||||||
@@ -3891,6 +3892,7 @@ if(isset($_POST['edit_contact'])){
|
|||||||
$email = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['email'])));
|
$email = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['email'])));
|
||||||
$primary_contact = intval($_POST['primary_contact']);
|
$primary_contact = intval($_POST['primary_contact']);
|
||||||
$notes = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['notes'])));
|
$notes = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['notes'])));
|
||||||
|
$contact_important = intval($_POST['contact_important']);
|
||||||
$location_id = intval($_POST['location']);
|
$location_id = intval($_POST['location']);
|
||||||
$auth_method = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['auth_method'])));
|
$auth_method = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['auth_method'])));
|
||||||
|
|
||||||
@@ -3900,7 +3902,7 @@ if(isset($_POST['edit_contact'])){
|
|||||||
mkdir("uploads/clients/$session_company_id/$client_id");
|
mkdir("uploads/clients/$session_company_id/$client_id");
|
||||||
}
|
}
|
||||||
|
|
||||||
mysqli_query($mysqli,"UPDATE contacts SET contact_name = '$name', contact_title = '$title', contact_phone = '$phone', contact_extension = '$extension', contact_mobile = '$mobile', contact_email = '$email', contact_notes = '$notes', contact_auth_method = '$auth_method', contact_department = '$department', contact_location_id = $location_id WHERE contact_id = $contact_id AND company_id = $session_company_id");
|
mysqli_query($mysqli,"UPDATE contacts SET contact_name = '$name', contact_title = '$title', contact_phone = '$phone', contact_extension = '$extension', contact_mobile = '$mobile', contact_email = '$email', contact_notes = '$notes', contact_important = $contact_important, contact_auth_method = '$auth_method', contact_department = '$department', contact_location_id = $location_id WHERE contact_id = $contact_id AND company_id = $session_company_id");
|
||||||
|
|
||||||
// Update Primary contact in clients if primary contact is checked
|
// Update Primary contact in clients if primary contact is checked
|
||||||
if($primary_contact > 0){
|
if($primary_contact > 0){
|
||||||
|
|||||||
71
user_invite_modal.php
Normal file
71
user_invite_modal.php
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
<div class="modal" id="userInviteModal" tabindex="-1">
|
||||||
|
<div class="modal-dialog">
|
||||||
|
<div class="modal-content bg-dark">
|
||||||
|
<div class="modal-header">
|
||||||
|
<h5 class="modal-title"><i class="fa fa-user-plus"></i> Invite User</h5>
|
||||||
|
<button type="button" class="close text-white" data-dismiss="modal">
|
||||||
|
<span>×</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<form action="post.php" method="post" enctype="multipart/form-data" autocomplete="off">
|
||||||
|
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token'] ?>">
|
||||||
|
<div class="modal-body bg-white">
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Email <strong class="text-danger">*</strong></label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-envelope"></i></span>
|
||||||
|
</div>
|
||||||
|
<input type="email" class="form-control" name="email" placeholder="Email Address" required>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Company <strong class="text-danger">*</strong></label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-building"></i></span>
|
||||||
|
</div>
|
||||||
|
<select class="form-control select2" name="default_company" required>
|
||||||
|
<option value="">- Company -</option>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
$sql_companies_select = mysqli_query($mysqli,"SELECT * FROM companies ORDER BY company_name ASC");
|
||||||
|
while($row = mysqli_fetch_array($sql_companies_select)){
|
||||||
|
$company_id = $row['company_id'];
|
||||||
|
$company_name = htmlentities($row['company_name']);
|
||||||
|
?>
|
||||||
|
<option value="<?php echo $company_id; ?>"><?php echo $company_name; ?></option>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="form-group">
|
||||||
|
<label>Role <strong class="text-danger">*</strong></label>
|
||||||
|
<div class="input-group">
|
||||||
|
<div class="input-group-prepend">
|
||||||
|
<span class="input-group-text"><i class="fa fa-fw fa-user-shield"></i></span>
|
||||||
|
</div>
|
||||||
|
<select class="form-control select2" name="role" required>
|
||||||
|
<option value="">- Role -</option>
|
||||||
|
<option value="3">Administrator</option>
|
||||||
|
<option value="2">Technician</option>
|
||||||
|
<option value="1">Accountant</option>
|
||||||
|
</select>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="modal-footer bg-white">
|
||||||
|
<button type="button" class="btn btn-outline-secondary" data-dismiss="modal">Cancel</button>
|
||||||
|
<button type="submit" name="invite_user" class="btn btn-primary"><strong><i class="fas fa-paper-plane"></i> Send Invite</strong></button>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
11
users.php
11
users.php
@@ -23,7 +23,15 @@
|
|||||||
<div class="card-header py-2">
|
<div class="card-header py-2">
|
||||||
<h3 class="card-title mt-2"><i class="fa fa-fw fa-users"></i> Users</h3>
|
<h3 class="card-title mt-2"><i class="fa fa-fw fa-users"></i> Users</h3>
|
||||||
<div class="card-tools">
|
<div class="card-tools">
|
||||||
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addUserModal"><i class="fas fa-fw fa-plus"></i> New User</button>
|
<div class="btn-group">
|
||||||
|
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addUserModal">
|
||||||
|
<i class="fas fa-fw fa-plus"></i> New User
|
||||||
|
</button>
|
||||||
|
<button type="button" class="btn btn-primary dropdown-toggle dropdown-toggle-split" data-toggle="dropdown"></button>
|
||||||
|
<div class="dropdown-menu">
|
||||||
|
<a class="dropdown-item text-dark" href="#" data-toggle="modal" data-target="#userInviteModal"><i class="fas fa-paper-plane mr-2"></i>Invite User</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="card-body">
|
<div class="card-body">
|
||||||
@@ -151,6 +159,7 @@
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
include("user_add_modal.php");
|
include("user_add_modal.php");
|
||||||
|
include("user_invite_modal.php");
|
||||||
|
|
||||||
include("footer.php");
|
include("footer.php");
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user