1
0
mirror of https://github.com/netbox-community/netbox.git synced 2024-05-10 07:54:54 +00:00

Closes #11693: Enable remote data synchronization for export templates

This commit is contained in:
jeremystretch
2023-02-08 18:24:18 -05:00
parent 678a7d17df
commit ac87ce733d
18 changed files with 246 additions and 89 deletions

View File

@@ -50,10 +50,10 @@
{% endif %}
</td>
</tr>
<tr>
<th scope="row">Data Synced</th>
<td>{{ object.data_synced|placeholder }}</td>
</tr>
<tr>
<th scope="row">Data Synced</th>
<td>{{ object.data_synced|placeholder }}</td>
</tr>
</table>
</div>
</div>
@@ -86,22 +86,8 @@
{% include 'extras/inc/configcontext_format.html' %}
</div>
<div class="card-body">
{% if object.data_file and object.data_file.last_updated > object.data_synced %}
<div class="alert alert-warning" role="alert">
<i class="mdi mdi-alert"></i> Data is out of sync with upstream file (<a href="{{ object.data_file.get_absolute_url }}">{{ object.data_file }}</a>).
{% if perms.extras.sync_configcontext %}
<div class="float-end">
<form action="{% url 'extras:configcontext_sync' pk=object.pk %}" method="post">
{% csrf_token %}
<button type="submit" class="btn btn-primary btn-sm">
<i class="mdi mdi-sync" aria-hidden="true"></i> Sync
</button>
</form>
</div>
{% endif %}
</div>
{% endif %}
{% include 'extras/inc/configcontext_data.html' with data=object.data format=format %}
{% include 'inc/sync_warning.html' %}
{% include 'extras/inc/configcontext_data.html' with data=object.data format=format %}
</div>
</div>
</div>

View File

@@ -10,66 +10,92 @@
{% endblock %}
{% block content %}
<div class="row mb-3">
<div class="col col-md-5">
<div class="card">
<h5 class="card-header">
Export Template
</h5>
<div class="card-body">
<table class="table table-hover attr-table">
<tr>
<th scope="row">Name</th>
<td>{{ object.name }}</td>
</tr>
<tr>
<th scope="row">Description</th>
<td>{{ object.description|placeholder }}</td>
</tr>
<tr>
<th scope="row">MIME Type</th>
<td>{{ object.mime_type|placeholder }}</td>
</tr>
<tr>
<th scope="row">File Extension</th>
<td>{{ object.file_extension|placeholder }}</td>
</tr>
<tr>
<th scope="row">Attachment</th>
<td>{% checkmark object.as_attachment %}</td>
</tr>
</table>
</div>
</div>
<div class="card">
<h5 class="card-header">Assigned Models</h5>
<div class="card-body">
<table class="table table-hover attr-table">
{% for ct in object.content_types.all %}
<div class="row mb-3">
<div class="col col-md-5">
<div class="card">
<h5 class="card-header">Export Template</h5>
<div class="card-body">
<table class="table table-hover attr-table">
<tr>
<td>{{ ct }}</td>
<th scope="row">Name</th>
<td>{{ object.name }}</td>
</tr>
{% endfor %}
</table>
<tr>
<th scope="row">Description</th>
<td>{{ object.description|placeholder }}</td>
</tr>
<tr>
<th scope="row">MIME Type</th>
<td>{{ object.mime_type|placeholder }}</td>
</tr>
<tr>
<th scope="row">File Extension</th>
<td>{{ object.file_extension|placeholder }}</td>
</tr>
<tr>
<th scope="row">Attachment</th>
<td>{% checkmark object.as_attachment %}</td>
</tr>
<tr>
<th scope="row">Data Source</th>
<td>
{% if object.data_source %}
<a href="{{ object.data_source.get_absolute_url }}">{{ object.data_source }}</a>
{% else %}
{{ ''|placeholder }}
{% endif %}
</td>
</tr>
<tr>
<th scope="row">Data File</th>
<td>
{% if object.data_file %}
<a href="{{ object.data_file.get_absolute_url }}">{{ object.data_file }}</a>
{% elif object.data_path %}
<div class="float-end text-warning">
<i class="mdi mdi-alert" title="The data file associated with this object has been deleted."></i>
</div>
{{ object.data_path }}
{% else %}
{{ ''|placeholder }}
{% endif %}
</td>
</tr>
<tr>
<th scope="row">Data Synced</th>
<td>{{ object.data_synced|placeholder }}</td>
</tr>
</table>
</div>
</div>
</div>
{% plugin_left_page object %}
</div>
<div class="col col-md-7">
<div class="card">
<h5 class="card-header">
Template
</h5>
<div class="card-body">
<pre>{{ object.template_code }}</pre>
<div class="card">
<h5 class="card-header">Assigned Models</h5>
<div class="card-body">
<table class="table table-hover attr-table">
{% for ct in object.content_types.all %}
<tr>
<td>{{ ct }}</td>
</tr>
{% endfor %}
</table>
</div>
</div>
{% plugin_left_page object %}
</div>
<div class="col col-md-7">
<div class="card">
<h5 class="card-header">Template</h5>
<div class="card-body">
{% include 'inc/sync_warning.html' %}
<pre>{{ object.template_code }}</pre>
</div>
</div>
{% plugin_right_page object %}
</div>
{% plugin_right_page object %}
</div>
</div>
<div class="row">
<div class="row">
<div class="col col-md-12">
{% plugin_full_width_page object %}
{% plugin_full_width_page object %}
</div>
</div>
</div>
{% endblock %}

View File

@@ -0,0 +1,10 @@
{% extends 'generic/object_list.html' %}
{% block bulk_buttons %}
{% if perms.extras.sync_configcontext %}
<button type="submit" name="_sync" formaction="{% url 'extras:exporttemplate_bulk_sync' %}" class="btn btn-primary btn-sm">
<i class="mdi mdi-sync" aria-hidden="true"></i> Sync Data
</button>
{% endif %}
{{ block.super }}
{% endblock %}

View File

@@ -0,0 +1,13 @@
{% load buttons %}
{% load perms %}
{% if object.data_file and object.data_file.last_updated > object.data_synced %}
<div class="alert alert-warning" role="alert">
<i class="mdi mdi-alert"></i> Data is out of sync with upstream file (<a href="{{ object.data_file.get_absolute_url }}">{{ object.data_file }}</a>).
{% if request.user|can_sync:object %}
<div class="float-end">
{% sync_button object %}
</div>
{% endif %}
</div>
{% endif %}