Further cp updates

This commit is contained in:
Pinga 2023-12-04 19:21:40 +02:00
parent 56ff89a37c
commit ee02066073
6 changed files with 413 additions and 28 deletions

View file

@ -62,7 +62,7 @@
</a>
</div>
<div class="col-sm-6 col-lg-3">
<a class="card card-link" href="{{route('contacts')}}">
<a class="card card-link" href="{{route('listContacts')}}">
<div class="card-body">
<div class="row align-items-center">
<div class="col-auto">
@ -79,7 +79,7 @@
</a>
</div>
<div class="col-sm-6 col-lg-3">
<a class="card card-link" href="{{route('hosts')}}">
<a class="card card-link" href="{{route('listHosts')}}">
<div class="card-body">
<div class="row align-items-center">
<div class="col-auto">

View file

@ -36,6 +36,7 @@
<div class="page-body">
<div class="container-xl">
<div class="col-12">
{% include 'partials/flash.twig' %}
<div class="card">
<div class="card-body border-bottom py-3">
<div class="d-flex">

View file

@ -0,0 +1,70 @@
{% extends "layouts/app.twig" %}
{% block title %}{{ __('Update Host') }} {{ host.name }}{% endblock %}
{% block content %}
<div class="page-wrapper">
<!-- Page header -->
<div class="page-header d-print-none">
<div class="container-xl">
<div class="row g-2 align-items-center">
<div class="col">
<!-- Page pre-title -->
<div class="page-pretitle">
Overview
</div>
<h2 class="page-title">
{{ __('Update Host') }} {{ host.name }}
</h2>
</div>
</div>
</div>
</div>
<!-- Page body -->
<div class="page-body">
<div class="container-xl">
<div class="col-12">
{% include 'partials/flash.twig' %}
<div class="card">
<div class="card-body">
<form action="/host/update" method="post">
{{ csrf.field | raw }}<input type="hidden" name="hostName" value="{{ host.name }}">
<div class="form-group mt-3">
<label for="ipv4" class="form-label">{{ __('IPv4 Address') }}:</label>
<input type="text" class="form-control" id="ipv4" name="ipv4" placeholder="192.168.1.1" pattern="^(?:[0-9]{1,3}\.){3}[0-9]{1,3}$" value="{{ hostIPv4[0].addr }}">
<small class="form-text text-muted">{{ __('Please enter a valid IPv4 address.') }}</small>
</div>
<div class="form-group mt-3">
<label for="ipv6" class="form-label">{{ __('IPv6 Address') }}:</label>
<input type="text" class="form-control" id="ipv6" name="ipv6" placeholder="2001:0db8:85a3:0000:0000:8a2e:0370:7334" autocapitalize="none" value="{{ hostIPv6[0].addr }}">
<small class="form-text text-muted">{{ __('Please enter a valid IPv6 address.') }}</small>
</div>
</div>
<div class="card-footer">
<div class="row align-items-center">
<div class="col-auto">
<button type="submit" class="btn btn-primary">Update Host</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
<footer class="footer footer-transparent d-print-none">
<div class="container-xl">
<div class="col-12 col-lg-auto mt-3 mt-lg-0">
<ul class="list-inline list-inline-dots mb-0">
<li class="list-inline-item">
Copyright &copy; 2023
<a href="https://namingo.org" target="_blank" class="link-secondary">Namingo</a>.
</li>
</ul>
</div>
</div>
</div>
</footer>
</div>
{% endblock %}

View file

@ -0,0 +1,50 @@
{% extends "layouts/app.twig" %}
{% block title %}{{ __('Update Host') }} {{ host.name }}{% endblock %}
{% block content %}
<div class="page-wrapper">
<!-- Page header -->
<div class="page-header d-print-none">
<div class="container-xl">
<div class="row g-2 align-items-center">
<div class="col">
<!-- Page pre-title -->
<div class="page-pretitle">
Overview
</div>
<h2 class="page-title">
{{ __('Update Host') }} {{ host.name }}
</h2>
</div>
</div>
</div>
</div>
<!-- Page body -->
<div class="page-body">
<div class="container-xl">
<div class="col-12">
<div class="card">
<div class="card-body">
<div class="alert alert-important alert-info" role="alert">
The host you're trying to update, <strong>{{ host.name }}</strong>, is external to the registry. Consequently, it does not store any IP addresses within our system, and therefore, does not require any updates from your end. This means there are no associated IP addresses under our management that need your attention.
</div>
</div>
</div>
</div>
</div>
<footer class="footer footer-transparent d-print-none">
<div class="container-xl">
<div class="col-12 col-lg-auto mt-3 mt-lg-0">
<ul class="list-inline list-inline-dots mb-0">
<li class="list-inline-item">
Copyright &copy; 2023
<a href="https://namingo.org" target="_blank" class="link-secondary">Namingo</a>.
</li>
</ul>
</div>
</div>
</div>
</footer>
</div>
{% endblock %}

View file

@ -5,14 +5,22 @@
<script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf-autotable/3.6.0/jspdf.plugin.autotable.min.js"></script>
<script>
var table;
document.addEventListener("DOMContentLoaded", function(){
document.querySelector("#hostTable").addEventListener('click', function(e) {
if (e.target.matches('.delete-btn')) {
let id = e.target.getAttribute('data-id');
deleteRecord(id);
// Check if the clicked element has the class 'delete-btn' or the ID 'delete-btn'
if (e.target.classList.contains('delete-btn') || e.target.id === 'delete-btn') {
// Confirmation dialog
let confirmDeletion = confirm("Are you sure you want to delete this record?");
// If user does not confirm, prevent the default action
if (!confirmDeletion) {
e.preventDefault();
}
}
});
document.addEventListener("DOMContentLoaded", function(){
function hostLinkFormatter(cell){
var value = cell.getValue();
return `<a href="/host/view/${value}" style="font-weight:bold;">${value}</a>`;
@ -21,7 +29,7 @@
function actionsFormatter(cell, formatterParams, onRendered) {
return `
<a class="btn btn-primary btn-icon update-btn" href="host/update/${cell.getRow().getData().name}"><svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M7 7h-1a2 2 0 0 0 -2 2v9a2 2 0 0 0 2 2h9a2 2 0 0 0 2 -2v-1"></path><path d="M20.385 6.585a2.1 2.1 0 0 0 -2.97 -2.97l-8.415 8.385v3h3l8.385 -8.415z"></path><path d="M16 5l3 3"></path></svg></a>
<button class="btn btn-danger btn-icon delete-btn" data-id="${cell.getRow().getData().id}"><svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M4 7h16"></path><path d="M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12"></path><path d="M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3"></path><path d="M10 12l4 4m0 -4l-4 4"></path></svg></button>
<a class="btn btn-danger btn-icon delete-btn" id="delete-btn" href="host/delete/${cell.getRow().getData().name}"><svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" stroke-linecap="round" stroke-linejoin="round"><path stroke="none" d="M0 0h24v24H0z" fill="none"></path><path d="M4 7h16"></path><path d="M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2 -2l1 -12"></path><path d="M9 7v-3a1 1 0 0 1 1 -1h4a1 1 0 0 1 1 1v3"></path><path d="M10 12l4 4m0 -4l-4 4"></path></svg></a>
`;
}
@ -100,22 +108,19 @@
{title:"Name", field:"name", width:300, headerSort:false, formatter: hostLinkFormatter, responsive:0},
{title:"Creation Date", field:"crdate", width:300, minWidth:200, headerSort:false, responsive:2},
{title:"Status", field:"host_status", width:300, minWidth:200, formatter: statusFormatter, headerSort:false, download:false, responsive:2},
{title: "Actions", formatter: actionsFormatter, headerSort: false, download:false, hozAlign: "center", responsive:0, cellClick:function(e, cell){ e.stopPropagation(); }},
{title: "Actions", formatter: actionsFormatter, headerSort: false, download:false, hozAlign: "center", responsive:0},
],
placeholder:function(){
return this.getHeaderFilters().length ? "No Matching Data" : "No Data"; //set placeholder based on if there are currently any header filters
}
});
var searchInput = document.getElementById("search-input");
searchInput.addEventListener("input", function () {
updateSearchTerm(searchInput.value);
});
});
function deleteRecord(id) {
console.log("Deleting record with ID: " + id);
}
function downloadCSV() {
table.download("csv", "data.csv");
}