Portal - allow adding contacts

This commit is contained in:
wrongecho 2024-09-05 17:26:28 +01:00
parent 91fb4b663a
commit 54c8d6d74a
4 changed files with 162 additions and 45 deletions

96
portal/contact_add.php Normal file
View File

@ -0,0 +1,96 @@
<?php
/*
* Client Portal
* Contact management for PTC / technical contacts
*/
header("Content-Security-Policy: default-src 'self' fonts.googleapis.com fonts.gstatic.com");
require_once "inc_portal.php";
if ($session_contact_primary == 0 && !$session_contact_is_technical_contact) {
header("Location: portal_post.php?logout");
exit();
}
?>
<ol class="breadcrumb d-print-none">
<li class="breadcrumb-item">
<a href="index.php">Home</a>
</li>
<li class="breadcrumb-item">
<a href="contacts.php">Contacts</a>
</li>
<li class="breadcrumb-item active">Add Contact</li>
</ol>
<div class="col-md-6">
<form action="portal_post.php" method="post">
<!-- Prevent undefined checkbox errors on submit -->
<input type="hidden" name="contact_billing" value="0">
<input type="hidden" name="contact_technical" value="0">
<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="contact_name" placeholder="Name" required maxlength="200">
</div>
</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="contact_email" placeholder="Email" required maxlength="200">
</div>
</div>
<label>Roles:</label>
<div class="form-row">
<div class="col-md-4">
<div class="form-group">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="contactBillingCheckbox" name="contact_billing" value="1">
<label class="custom-control-label" for="contactBillingCheckbox">Billing</label>
</div>
</div>
</div>
<div class="col-md-4">
<div class="form-group">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="contactTechnicalCheckbox" name="contact_technical" value="1">
<label class="custom-control-label" for="contactTechnicalCheckbox">Technical</label>
</div>
</div>
</div>
</div>
<div class="form-group">
<label>Portal authentication</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-user-circle"></i></span>
</div>
<select class="form-control select2 authMethod" name="contact_auth_method">
<option value="">- No portal access -</option>
<option value="local">Local (Email and password)</option>
<?php if (!empty($config_azure_client_id)) { ?>
<option value="azure">Azure (Microsoft 365)</option>
<?php } ?>
</select>
</div>
</div>
<button class="btn btn-primary" name="add_contact">Add</button>
</form>
</div>
<?php
require_once "portal_footer.php";

View File

@ -63,7 +63,7 @@ if ($row) {
<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="contact_name" value="<?php echo nullable_htmlentities($contact_name) ?>" required>
<input type="text" class="form-control" name="contact_name" value="<?php echo nullable_htmlentities($contact_name) ?>" required maxlength="200">
</div>
</div>
@ -73,7 +73,7 @@ if ($row) {
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-fw fa-envelope"></i></span>
</div>
<input type="text" class="form-control" name="contact_email" value="<?php echo nullable_htmlentities($contact_email) ?>" required>
<input type="email" class="form-control" name="contact_email" value="<?php echo nullable_htmlentities($contact_email) ?>" required maxlength="200">
</div>
</div>

View File

@ -16,57 +16,63 @@ if ($session_contact_primary == 0 && !$session_contact_is_technical_contact) {
$contacts_sql = mysqli_query($mysqli, "SELECT contact_id, contact_name, contact_email, contact_primary, contact_technical, contact_billing FROM contacts WHERE contact_client_id = $session_client_id AND contacts.contact_archived_at IS NULL ORDER BY contact_created_at");
?>
<h3>Contacts</h3>
<div class="row">
<div class="row">
<h3>Contacts</h3>
<div class="col offset-7">
<a href="contact_add.php" class="btn btn-primary" role="button"><i class="fas fa-plus mr-2"></i>New Contact</a>
</div>
</div>
<div class="col-md-10">
<div class="row">
<table class="table tabled-bordered border border-dark">
<thead class="thead-dark">
<tr>
<th>Name</th>
<th>Email</th>
<th>Roles</th>
</tr>
</thead>
<tbody>
<?php
while ($row = mysqli_fetch_array($contacts_sql)) {
$contact_id = intval($row['contact_id']);
$contact_name = nullable_htmlentities($row['contact_name']);
$contact_email = nullable_htmlentities($row['contact_email']);
$contact_primary = intval($row['contact_primary']);
$contact_technical = intval($row['contact_technical']);
$contact_billing = intval($row['contact_billing']);
$contact_roles_display = '-';
if ($contact_primary) {
$contact_roles_display = 'Primary contact';
} else if ($contact_technical && $contact_billing) {
$contact_roles_display = 'Technical & Billing';
} else if ($contact_technical) {
$contact_roles_display = 'Technical';
} else if ($contact_billing) {
$contact_roles_display = 'Billing';
}
?>
<div class="col-md-10">
<table class="table tabled-bordered border border-dark">
<thead class="thead-dark">
<tr>
<td><a href="contact_edit.php?id=<?php echo $contact_id?>"><?php echo $contact_name ?></a></td>
<td><?php echo $contact_email; ?></td>
<td><?php echo $contact_roles_display ?></td>
<th>Name</th>
<th>Email</th>
<th>Roles</th>
</tr>
</thead>
<tbody>
<?php } ?>
<?php
while ($row = mysqli_fetch_array($contacts_sql)) {
$contact_id = intval($row['contact_id']);
$contact_name = nullable_htmlentities($row['contact_name']);
$contact_email = nullable_htmlentities($row['contact_email']);
$contact_primary = intval($row['contact_primary']);
$contact_technical = intval($row['contact_technical']);
$contact_billing = intval($row['contact_billing']);
</tbody>
</table>
$contact_roles_display = '-';
if ($contact_primary) {
$contact_roles_display = 'Primary contact';
} else if ($contact_technical && $contact_billing) {
$contact_roles_display = 'Technical & Billing';
} else if ($contact_technical) {
$contact_roles_display = 'Technical';
} else if ($contact_billing) {
$contact_roles_display = 'Billing';
}
?>
<tr>
<td><a href="contact_edit.php?id=<?php echo $contact_id?>"><?php echo $contact_name ?></a></td>
<td><?php echo $contact_email; ?></td>
<td><?php echo $contact_roles_display ?></td>
</tr>
<?php } ?>
</tbody>
</table>
</div>
</div>
</div>
<?php
require_once "portal_footer.php";

View File

@ -303,5 +303,20 @@ if (isset($_POST['edit_contact'])) {
$_SESSION['alert_message'] = "Contact updated";
header('Location: contacts.php');
}
if (isset($_POST['add_contact'])) {
$contact_name = sanitizeInput($_POST['contact_name']);
$contact_email = sanitizeInput($_POST['contact_email']);
$contact_technical = intval($_POST['contact_technical']);
$contact_billing = intval($_POST['contact_billing']);
$contact_auth_method = sanitizeInput($_POST['contact_auth_method']);
mysqli_query($mysqli, "INSERT INTO contacts SET contact_name = '$contact_name', contact_email = '$contact_email', contact_billing = $contact_billing, contact_technical = $contact_technical, contact_auth_method = '$contact_auth_method', contact_client_id = $session_client_id");
// Logging
mysqli_query($mysqli, "INSERT INTO logs SET log_type = 'Contact', log_action = 'Create', log_description = 'Client $session_contact_name created contact $contact_name', log_ip = '$session_ip', log_user_agent = '$session_user_agent', log_client_id = $session_client_id");
$_SESSION['alert_message'] = "Contact created";
header('Location: contacts.php');
}