Browse Source

Added image attachments to sites and devices

Jeremy Stretch 8 years ago
parent
commit
50d7fd776f

+ 2 - 0
netbox/dcim/models.py

@@ -254,6 +254,7 @@ class Site(CreatedUpdatedModel, CustomFieldModel):
     contact_email = models.EmailField(blank=True, verbose_name="Contact E-mail")
     comments = models.TextField(blank=True)
     custom_field_values = GenericRelation(CustomFieldValue, content_type_field='obj_type', object_id_field='obj_id')
+    images = GenericRelation(ImageAttachment)
 
     objects = SiteManager()
 
@@ -933,6 +934,7 @@ class Device(CreatedUpdatedModel, CustomFieldModel):
                                        blank=True, null=True, verbose_name='Primary IPv6')
     comments = models.TextField(blank=True)
     custom_field_values = GenericRelation(CustomFieldValue, content_type_field='obj_type', object_id_field='obj_id')
+    images = GenericRelation(ImageAttachment)
 
     objects = DeviceManager()
 

+ 3 - 1
netbox/dcim/urls.py

@@ -4,7 +4,7 @@ from ipam.views import ServiceEditView
 from secrets.views import secret_add
 
 from extras.views import ImageAttachmentEditView
-from .models import Rack
+from .models import Device, Rack, Site
 from . import views
 
 
@@ -24,6 +24,7 @@ urlpatterns = [
     url(r'^sites/(?P<slug>[\w-]+)/$', views.site, name='site'),
     url(r'^sites/(?P<slug>[\w-]+)/edit/$', views.SiteEditView.as_view(), name='site_edit'),
     url(r'^sites/(?P<slug>[\w-]+)/delete/$', views.SiteDeleteView.as_view(), name='site_delete'),
+    url(r'^sites/(?P<object_id>\d+)/images/add/$', ImageAttachmentEditView.as_view(), name='site_add_image', kwargs={'model': Site}),
 
     # Rack groups
     url(r'^rack-groups/$', views.RackGroupListView.as_view(), name='rackgroup_list'),
@@ -120,6 +121,7 @@ urlpatterns = [
     url(r'^devices/(?P<pk>\d+)/ip-addresses/assign/$', views.ipaddress_assign, name='ipaddress_assign'),
     url(r'^devices/(?P<pk>\d+)/add-secret/$', secret_add, name='device_addsecret'),
     url(r'^devices/(?P<device>\d+)/services/assign/$', ServiceEditView.as_view(), name='service_assign'),
+    url(r'^devices/(?P<object_id>\d+)/images/add/$', ImageAttachmentEditView.as_view(), name='device_add_image', kwargs={'model': Device}),
 
     # Console ports
     url(r'^devices/console-ports/add/$', views.DeviceBulkAddConsolePortView.as_view(), name='device_bulk_add_consoleport'),

+ 14 - 0
netbox/templates/dcim/device.html

@@ -328,6 +328,20 @@
         </div>
         <div class="panel panel-default">
             <div class="panel-heading">
+                <strong>Images</strong>
+            </div>
+            {% include 'inc/image_attachments.html' with images=device.images.all %}
+            {% if perms.extras.add_imageattachment %}
+                <div class="panel-footer text-right">
+                    <a href="{% url 'dcim:device_add_image' object_id=device.pk %}" class="btn btn-primary btn-xs">
+                        <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
+                        Attach an image
+                    </a>
+                </div>
+            {% endif %}
+        </div>
+        <div class="panel panel-default">
+            <div class="panel-heading">
                 <strong>Related Devices</strong>
             </div>
             {% if related_devices %}

+ 1 - 36
netbox/templates/dcim/rack.html

@@ -201,42 +201,7 @@
             <div class="panel-heading">
                 <strong>Images</strong>
             </div>
-            {% if rack.images.all %}
-                <table class="table table-hover panel-body">
-                    <tr>
-                        <th>Name</th>
-                        <th>Size</th>
-                        <th>Created</th>
-                        <th></th>
-                    </tr>
-                    {% for attachment in rack.images.all %}
-                        <tr>
-                            <td>
-                                <i class="fa fa-image"></i>
-                                <a href="{{ attachment.image.url }}" target="_blank">{{ attachment }}</a>
-                            </td>
-                            <td>{{ attachment.image.size|filesizeformat }}</td>
-                            <td>{{ attachment.created }}</td>
-                            <td class="text-right">
-                                {% if perms.extras.change_imageattachment %}
-                                    <a href="{% url 'extras:imageattachment_edit' pk=attachment.pk %}" class="btn btn-warning btn-xs" title="Edit image">
-                                        <i class="glyphicon glyphicon-pencil" aria-hidden="true"></i>
-                                    </a>
-                                {% endif %}
-                                {% if perms.extras.delete_imageattachment %}
-                                    <a href="{% url 'extras:imageattachment_delete' pk=attachment.pk %}" class="btn btn-danger btn-xs" title="Delete image">
-                                        <i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
-                                    </a>
-                                {% endif %}
-                            </td>
-                        </tr>
-                    {% endfor %}
-                </table>
-            {% else %}
-                <div class="panel-body">
-                    <span class="text-muted">None</span>
-                </div>
-            {% endif %}
+            {% include 'inc/image_attachments.html' with images=rack.images.all %}
             {% if perms.extras.add_imageattachment %}
                 <div class="panel-footer text-right">
                     <a href="{% url 'dcim:rack_add_image' object_id=rack.pk %}" class="btn btn-primary btn-xs">

+ 14 - 0
netbox/templates/dcim/site.html

@@ -237,6 +237,20 @@
         </div>
         <div class="panel panel-default">
             <div class="panel-heading">
+                <strong>Images</strong>
+            </div>
+            {% include 'inc/image_attachments.html' with images=site.images.all %}
+            {% if perms.extras.add_imageattachment %}
+                <div class="panel-footer text-right">
+                    <a href="{% url 'dcim:site_add_image' object_id=site.pk %}" class="btn btn-primary btn-xs">
+                        <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
+                        Attach an image
+                    </a>
+                </div>
+            {% endif %}
+        </div>
+        <div class="panel panel-default">
+            <div class="panel-heading">
                 <strong>Topology Maps</strong>
             </div>
             {% if topology_maps %}

+ 36 - 0
netbox/templates/inc/image_attachments.html

@@ -0,0 +1,36 @@
+{% if images %}
+    <table class="table table-hover panel-body">
+        <tr>
+            <th>Name</th>
+            <th>Size</th>
+            <th>Created</th>
+            <th></th>
+        </tr>
+        {% for attachment in images %}
+            <tr>
+                <td>
+                    <i class="fa fa-image"></i>
+                    <a href="{{ attachment.image.url }}" target="_blank">{{ attachment }}</a>
+                </td>
+                <td>{{ attachment.image.size|filesizeformat }}</td>
+                <td>{{ attachment.created }}</td>
+                <td class="text-right">
+                    {% if perms.extras.change_imageattachment %}
+                        <a href="{% url 'extras:imageattachment_edit' pk=attachment.pk %}" class="btn btn-warning btn-xs" title="Edit image">
+                            <i class="glyphicon glyphicon-pencil" aria-hidden="true"></i>
+                        </a>
+                    {% endif %}
+                    {% if perms.extras.delete_imageattachment %}
+                        <a href="{% url 'extras:imageattachment_delete' pk=attachment.pk %}" class="btn btn-danger btn-xs" title="Delete image">
+                            <i class="glyphicon glyphicon-trash" aria-hidden="true"></i>
+                        </a>
+                    {% endif %}
+                </td>
+            </tr>
+        {% endfor %}
+    </table>
+{% else %}
+    <div class="panel-body">
+        <span class="text-muted">None</span>
+    </div>
+{% endif %}