Rework Company user relationships initial work started on user permissions

This commit is contained in:
johnny@pittpc.com 2021-01-29 21:28:12 -05:00
parent f2ce7a9d8d
commit 88933e09f7
10 changed files with 287 additions and 165 deletions

View File

@ -10,102 +10,80 @@
<form action="post.php" method="post" enctype="multipart/form-data" autocomplete="off">
<div class="modal-body bg-white">
<ul class="nav nav-pills nav-justified mb-3" id="pills-tab">
<li class="nav-item">
<a class="nav-link active" id="pills-user-tab" data-toggle="pill" href="#pills-user">User</a>
</li>
<li class="nav-item">
<a class="nav-link" id="pills-assign-tab" data-toggle="pill" href="#pills-assign">Assign</a>
</li>
</ul>
<hr>
<div class="tab-content" id="pills-tabContent">
<div class="tab-pane fade show active" id="pills-user">
<div class="form-group">
<label>Name <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"></i></span>
</div>
<input type="text" class="form-control" name="name" placeholder="Full Name" required autofocus>
</div>
<div class="form-group">
<label>Name <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"></i></span>
</div>
<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>Password <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-lock"></i></span>
</div>
<input type="password" class="form-control" name="password" placeholder="Enter a Password" autocomplete="new-password" required>
</div>
</div>
<div class="form-group">
<label>Avatar</label>
<input type="file" class="form-control-file" accept="image/*;capture=camera" name="file">
</div>
<input type="text" class="form-control" name="name" placeholder="Full Name" required autofocus>
</div>
</div>
<div class="tab-pane fade" id="pills-assign">
<?php
$sql = mysqli_query($mysqli,"SELECT * FROM companies ORDER BY company_name ASC");
while($row = mysqli_fetch_array($sql)){
$company_id = $row['company_id'];
$company_name = $row['company_name'];
?>
<div class="form-check">
<input type="checkbox" class="form-check-input" name="company[]" value="<?php echo $company_id; ?>">
<label class="form-check-label"><?php echo $company_name; ?></label>
</div>
<?php
}
?>
<div class="form-group">
<label>Assign a User to a Client</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-user"></i></span>
</div>
<select class="form-control select2" name="client">
<option value="0">No Client Assignment</option>
<?php
$sql = mysqli_query($mysqli,"SELECT * FROM clients ORDER BY client_name ASC");
while($row = mysqli_fetch_array($sql)){
$client_id = $row['client_id'];
$client_name = $row['client_name'];
?>
<option value="<?php echo $client_id; ?>"><?php echo $client_name; ?></option>
<?php
}
?>
</select>
</div>
<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>Password <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-lock"></i></span>
</div>
<input type="password" class="form-control" name="password" placeholder="Enter a Password" autocomplete="new-password" 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="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 = $row['company_name'];
?>
<option value="<?php echo $company_id; ?>"><?php echo $company_name; ?></option>
<?php
}
?>
</select>
</div>
</div>
<div class="form-group">
<label>Permission <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="level" required>
<option value="">- Permission -</option>
<option value="1">Global Admininstrator</option>
<option value="2">Administrator</option>
<option value="3">Technician</option>
<option value="4">IT Contractor</option>
<option value="5">Accounting</option>
</select>
</div>
</div>
<div class="form-group">
<label>Avatar</label>
<input type="file" class="form-control-file" accept="image/*;capture=camera" name="file">
</div>
</div>

View File

@ -66,21 +66,6 @@
<div class="tab-pane fade" id="pills-address">
<div class="form-group">
<label>Country</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-flag"></i></span>
</div>
<select class="form-control select2" name="country">
<option value="">- Country -</option>
<?php foreach($countries_array as $country_name) { ?>
<option><?php echo $country_name; ?></option>
<?php } ?>
</select>
</div>
</div>
<div class="form-group">
<label>Address</label>
<div class="input-group">
@ -126,6 +111,21 @@
</div>
</div>
<div class="form-group">
<label>Country</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-flag"></i></span>
</div>
<select class="form-control select2" name="country">
<option value="">- Country -</option>
<?php foreach($countries_array as $country_name) { ?>
<option><?php echo $country_name; ?></option>
<?php } ?>
</select>
</div>
</div>
</div>
<div class="tab-pane fade" id="pills-contact">

View File

@ -1,19 +1,23 @@
<?php
//Check to see if setup is enabled
if(!isset($config_enable_setup) or $config_enable_setup == 1){
header("Location: setup.php");
}
header("Location: setup.php");
}
session_start();
if(!$_SESSION['logged']){
header("Location: logout.php");
die;
header("Location: logout.php");
die;
}
$session_user_id = $_SESSION['user_id'];
$sql = mysqli_query($mysqli,"SELECT * FROM users, companies, user_companies WHERE users.user_id = user_companies.user_id AND companies.company_id = user_companies.company_id AND users.user_id = $session_user_id");
$sql = mysqli_query($mysqli,"SELECT * FROM users, companies, permissions
WHERE permissions.permission_default_company = companies.company_id
AND users.user_id = $session_user_id"
);
$row = mysqli_fetch_array($sql);
$session_name = $row['name'];
$session_email = $row['email'];
@ -25,6 +29,9 @@
$session_company_name = $row['company_name'];
$session_token = $row['token'];
$session_permission_companies = $row['permission_companies'];
$session_permission_clients = $row['permission_clients'];
include("get_settings.php");
//Detects if using an apple device and uses apple maps instead of google
@ -40,6 +47,6 @@
//Get unAcked Alert Count for the badge on the top nav
$row = mysqli_fetch_assoc(mysqli_query($mysqli,"SELECT COUNT('alert_id') AS num FROM alerts WHERE alert_ack_date IS NULL AND company_id = $session_company_id"));
$num_alerts = $row['num'];
$num_alerts = $row['num'];
?>

34
db.sql
View File

@ -528,6 +528,25 @@ CREATE TABLE `payments` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `permissions`
--
DROP TABLE IF EXISTS `permissions`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `permissions` (
`permission_id` int(11) NOT NULL AUTO_INCREMENT,
`permission_level` tinyint(1) NOT NULL,
`permission_default_company` int(11) NOT NULL,
`permission_companies` varchar(500) NOT NULL,
`permission_clients` varchar(500) DEFAULT NULL,
`permission_actions` tinyint(1) DEFAULT NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`permission_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `products`
--
@ -831,19 +850,6 @@ CREATE TABLE `trips` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `user_companies`
--
DROP TABLE IF EXISTS `user_companies`;
/*!40101 SET @saved_cs_client = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `user_companies` (
`user_id` int(11) NOT NULL,
`company_id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
/*!40101 SET character_set_client = @saved_cs_client */;
--
-- Table structure for table `user_keys`
--
@ -921,4 +927,4 @@ CREATE TABLE `vendors` (
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
-- Dump completed on 2021-01-27 14:21:51
-- Dump completed on 2021-01-29 21:26:58

View File

@ -51,6 +51,48 @@
<input type="password" class="form-control" name="password" placeholder="Enter a password" value="<?php echo $password; ?>" autocomplete="new-password" 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="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_select = $row['company_id'];
$company_name_select = $row['company_name'];
?>
<option <?php if($company_id_select == $permission_default_company){ echo "selected"; } ?> value="<?php echo $company_id_select; ?>"><?php echo $company_name_select; ?></option>
<?php
}
?>
</select>
</div>
</div>
<div class="form-group">
<label>Permission <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="level" required>
<option value="">- Permission -</option>
<option <?php if($permission_level == 5){ echo "selected"; } ?> value="5">Global Admininstrator</option>
<option <?php if($permission_level == 4){ echo "selected"; } ?> value="4">Administrator</option>
<option <?php if($permission_level == 3){ echo "selected"; } ?> value="3">Technician</option>
<option <?php if($permission_level == 2){ echo "selected"; } ?> value="2">IT Contractor</option>
<option <?php if($permission_level == 1){ echo "selected"; } ?> value="1">Accounting</option>
</select>
</div>
</div>
<div class="form-group">
<label>Avatar</label>
<input type="file" class="form-control-file" accept="image/*;capture=camera" name="file">

View File

@ -66,21 +66,6 @@
<div class="tab-pane fade" id="pills-address<?php echo $vendor_id; ?>" role="tabpanel" aria-labelledby="pills-address-tab<?php echo $vendor_id; ?>">
<div class="form-group">
<label>Country</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-flag"></i></span>
</div>
<select class="form-control select2" name="country">
<option value="">- Country -</option>
<?php foreach($countries_array as $country_name) { ?>
<option <?php if($vendor_country == $country_name) { echo "selected"; } ?>><?php echo $country_name; ?></option>
<?php } ?>
</select>
</div>
</div>
<div class="form-group">
<label>Address</label>
<div class="input-group">
@ -126,6 +111,21 @@
</div>
</div>
<div class="form-group">
<label>Country</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-flag"></i></span>
</div>
<select class="form-control select2" name="country">
<option value="">- Country -</option>
<?php foreach($countries_array as $country_name) { ?>
<option <?php if($vendor_country == $country_name) { echo "selected"; } ?>><?php echo $country_name; ?></option>
<?php } ?>
</select>
</div>
</div>
</div>
<div class="tab-pane fade" id="pills-contact<?php echo $vendor_id; ?>">

View File

@ -16,7 +16,7 @@ use PHPMailer\PHPMailer\Exception;
if(isset($_GET['switch_company'])){
$company_id = intval($_GET['switch_company']);
$session_company_id = $company_id;
mysqli_query($mysqli,"UPDATE permissions SET permission_default_company = $company_id WHERE user_id = $session_user_id");
$_SESSION['alert_type'] = "info";
$_SESSION['alert_message'] = "Switched Companies!";
@ -30,9 +30,11 @@ if(isset($_POST['add_user'])){
$name = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['name'])));
$email = trim(strip_tags(mysqli_real_escape_string($mysqli,$_POST['email'])));
$password = md5($_POST['password']);
$company = intval($_POST['company']);
$level = intval($_POST['level']);
$client_id = intval($_POST['client']);
mysqli_query($mysqli,"INSERT INTO users SET name = '$name', email = '$email', password = '$password', created_at = NOW()");
mysqli_query($mysqli,"INSERT INTO users SET name = '$name', email = '$email', password = '$password', default_company = $company, created_at = NOW()");
$user_id = mysqli_insert_id($mysqli);
@ -46,16 +48,11 @@ if(isset($_POST['add_user'])){
$file_name = basename($path);
move_uploaded_file($_FILES['file']['tmp_name'], $path);
}
//Set Avatar
mysqli_query($mysqli,"UPDATE users SET avatar = '$path' WHERE user_id = $user_id");
if(isset($_POST['company'])){
if(is_array($_POST['company'])) {
foreach($_POST['company'] as $company_id){
mysqli_query($mysqli,"INSERT INTO user_companies SET user_id = $user_id, company_id = $company_id");
}
}
}
//Create Permissions
mysqli_query($mysqli,"INSERT INTO permissions SET permission_level = $level, permission_default_company = $company, permission_companies = $company, user_id = $user_id");
//logging
mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'User', log_action = 'Created', log_description = '$name', log_created_at = NOW()");
@ -78,12 +75,10 @@ if(isset($_POST['edit_user'])){
}else{
$password = md5($password);
}
$company = intval($_POST['company']);
$level = intval($_POST['level']);
$path = strip_tags(mysqli_real_escape_string($mysqli,$_POST['current_avatar_path']));
if(!file_exists("uploads/users/$user_id")) {
mkdir("uploads/users/$user_id");
}
if($_FILES['file']['tmp_name']!='') {
//delete old avatar file
unlink($path);
@ -96,6 +91,9 @@ if(isset($_POST['edit_user'])){
mysqli_query($mysqli,"UPDATE users SET name = '$name', email = '$email', password = '$password', avatar = '$path', updated_at = NOW() WHERE user_id = $user_id");
//Create Permissions
mysqli_query($mysqli,"UPDATE permissions SET permission_level = $level, permission_default_company = $company WHERE user_id = $user_id");
//logging
mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'User', log_action = 'Modified', log_description = '$name', log_created_at = NOW()");
@ -105,11 +103,30 @@ if(isset($_POST['edit_user'])){
}
if(isset($_POST['edit_user_companies'])){
$user_id = intval($_POST['user_id']);
$companies = $_POST['companies'];
//Turn the Array into a string with , seperation
$companies_imploded = implode(",",$companies);
mysqli_query($mysqli,"UPDATE permissions SET permission_companies = '$companies_imploded' WHERE user_id = $user_id");
//logging
mysqli_query($mysqli,"INSERT INTO logs SET log_type = 'User', log_action = 'Modified', log_description = '$name', log_created_at = NOW()");
$_SESSION['alert_message'] = "Companies <strong>$company</strong> added to user $user_id!";
header("Location: users.php");
}
if(isset($_GET['delete_user'])){
$user_id = intval($_GET['delete_user']);
mysqli_query($mysqli,"DELETE FROM users WHERE user_id = $user_id");
mysqli_query($mysqli,"DELETE FROM user_companies WHERE user_id = $user_id");
mysqli_query($mysqli,"DELETE FROM permissions WHERE user_id = $user_id");
mysqli_query($mysqli,"DELETE FROM logs WHERE user_id = $user_id");
mysqli_query($mysqli,"DELETE FROM tickets WHERE ticket_created_by = $user_id");
mysqli_query($mysqli,"DELETE FROM tickets WHERE ticket_closed_by = $user_id");

View File

@ -196,7 +196,8 @@ if(isset($_POST['add_company_settings'])){
mkdir("uploads/settings/$company_id");
mkdir("uploads/tmp/$company_id");
mysqli_query($mysqli,"INSERT INTO user_companies SET user_id = $user_id, company_id = $company_id");
//Create Permissions
mysqli_query($mysqli,"INSERT INTO permissions SET permission_level = 5, permission_default_company = $company_id, permission_companies = $company_id, user_id = $user_id");
mysqli_query($mysqli,"INSERT INTO settings SET company_id = $company_id, config_company_name = '$config_company_name', config_company_country = '$config_company_country', config_company_address = '$config_company_address', config_company_city = '$config_company_city', config_company_state = '$config_company_state', config_company_zip = '$config_company_zip', config_company_phone = '$config_company_phone', config_company_site = '$config_company_site', config_invoice_prefix = 'INV-', config_invoice_next_number = 1, config_invoice_overdue_reminders = '1,3,7', config_quote_prefix = 'QUO-', config_quote_next_number = 1, config_api_key = '$config_api_key', config_recurring_auto_send_invoice = 1, config_default_net_terms = 7, config_records_per_page = 10, config_send_invoice_reminders = 0, config_enable_cron = 0, config_ticket_next_number = 1");

50
user_companies_modal.php Normal file
View File

@ -0,0 +1,50 @@
<div class="modal" id="editUserCompaniesModal<?php echo $user_id ?>" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content bg-dark">
<div class="modal-header text-white">
<h5 class="modal-title"><i class="fa fa-fw fa-building mr-2"></i><?php echo $name; ?> Companies</h5>
<button type="button" class="close text-white" data-dismiss="modal">
<span aria-hidden="true">&times;</span>
</button>
</div>
<form action="post.php" method="post" autocomplete="off">
<input type="hidden" name="user_id" value="<?php echo $user_id; ?>">
<div class="modal-body bg-white">
<div class="alert alert-info">
Select Companies that the user will need access to
</div>
<ul class="list-group">
<?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_select = $row['company_id'];
$company_name_select = $row['company_name'];
?>
<li class="list-group-item">
<div class="form-check">
<input type="checkbox" class="form-check-input" name="companies[]" value="<?php echo $company_id_select; ?>" <?php if(in_array("$company_id_select",$permission_companies_array)){ echo "checked"; } ?> <?php if($default_company == $company_id_select){ echo "disabled"; } ?>>
<label class="form-check-label ml-2"><?php echo $company_name_select; ?> <?php if($default_company == $company_id_select){ echo "<small>(Default Company)</small>"; } ?></label>
</div>
</li>
<?php
}
?>
</ul>
</div>
<div class="modal-footer bg-white">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Cancel</button>
<button type="submit" name="edit_user_companies" class="btn btn-primary">Save</button>
</div>
</form>
</div>
</div>
</div>

View File

@ -40,8 +40,9 @@
$disp = "DESC";
}
$sql = mysqli_query($mysqli,"SELECT SQL_CALC_FOUND_ROWS * FROM users
WHERE name LIKE '%$q%' OR email LIKE '%$q%'
$sql = mysqli_query($mysqli,"SELECT SQL_CALC_FOUND_ROWS * FROM users, permissions
WHERE users.user_id = permissions.user_id
AND (name LIKE '%$q%' OR email LIKE '%$q%')
ORDER BY $sb $o LIMIT $record_from, $record_to");
$num_rows = mysqli_fetch_row(mysqli_query($mysqli,"SELECT FOUND_ROWS()"));
@ -71,7 +72,7 @@
<tr>
<th class="text-center"><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=name&o=<?php echo $disp; ?>">Name</a></th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=email&o=<?php echo $disp; ?>">Email</a></th>
<th>Type</th>
<th><a class="text-dark" href="?<?php echo $url_query_strings_sb; ?>&sb=Permission_level&o=<?php echo $disp; ?>">Access Level</a></th>
<th>Status</th>
<th>Last Login</th>
<th class="text-center">Action</th>
@ -86,7 +87,24 @@
$email = $row['email'];
$password = $row['password'];
$avatar = $row['avatar'];
$client_id = $row['client_id'];
$permission_default_company = $row['permission_default_company'];
$permission_level = $row['permission_level'];
if($permission_level == 5){
$permission_level_display = "Global Administrator";
}elseif($permission_level == 4){
$permission_level_display = "Administrator";
}elseif($permission_level == 3){
$permission_level_display = "Technician";
}elseif($permission_level == 2){
$permission_level_display = "IT Contractor";
}else{
$permission_level_display = "Accounting";
}
$permission_companies = $row['permission_companies'];
$permission_companies_array = explode(",",$permission_companies);
$permission_clients = $row['permission_clients'];
$permission_clients_array = explode(",",$permission_clients);
$permission_actions = $row['permission_actions'];
$initials = initials($name);
$sql_last_login = mysqli_query($mysqli,"SELECT * FROM logs
@ -109,14 +127,14 @@
<span class="fa fa-stack-1x text-white"><?php echo $initials; ?></span>
</span>
<br>
<?php } ?>
<?php } ?>
<div class="text-secondary"><?php echo $name; ?></div>
</a>
</td>
<td><a href="mailto:<?php echo $email; ?>"><?php echo $email; ?></a></td>
<td>Client</td>
<td>Status</td>
<td><?php echo $permission_level_display; ?></td>
<td>-</td>
<td><?php echo $log_created_at; ?> <br> <small class="text-secondary"><?php echo $log_description; ?></small></td>
<td>
<div class="dropdown dropleft text-center">
@ -125,17 +143,20 @@
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editUserModal<?php echo $user_id; ?>">Edit</a>
<a class="dropdown-item" href="#" data-toggle="modal" data-target="#editUserCompaniesModal<?php echo $user_id; ?>">Companies</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="post.php?delete_user=<?php echo $user_id; ?>">Delete</a>
</div>
</div>
<?php include("edit_user_modal.php"); ?>
<?php include("edit_user_modal.php"); ?>
<?php include("user_companies_modal.php"); ?>
</td>
</tr>
<?php
}
?>
</tbody>