From d4158a33ee283742f884316cc78bccf589611600 Mon Sep 17 00:00:00 2001
From: "Ing. Jan KRCMAR" <honza801@civ.zcu.cz>
Date: Fri, 15 Sep 2017 12:40:37 +0200
Subject: [PATCH] instance owner view: add owner button, delete owner button

---
 .../templates/add_instance_owner_block.html   | 36 +++++++++++++++++++
 instances/templates/instance.html             | 29 ++++++++++++---
 instances/views.py                            | 29 +++++++++++++++
 3 files changed, 90 insertions(+), 4 deletions(-)
 create mode 100644 instances/templates/add_instance_owner_block.html

diff --git a/instances/templates/add_instance_owner_block.html b/instances/templates/add_instance_owner_block.html
new file mode 100644
index 0000000..b7e6df9
--- /dev/null
+++ b/instances/templates/add_instance_owner_block.html
@@ -0,0 +1,36 @@
+{% load i18n %}
+{% if request.user.is_superuser %}
+    <a href="#addInstanceOwner" type="button" class="btn btn-success pull-right" data-toggle="modal">
+        <span class="glyphicon glyphicon-plus" aria-hidden="true"></span>
+    </a>
+
+    <!-- Modal pool -->
+    <div class="modal fade" id="addInstanceOwner" tabindex="-1" role="dialog" aria-labelledby="addInstanceOwnerLabel" aria-hidden="true">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
+                    <h4 class="modal-title">{% trans "Add Instance Owner" %}</h4>
+                </div>
+                <div class="modal-body">
+                    <form class="form-horizontal" method="post" action="" role="form">{% csrf_token %}
+                        <div class="form-group">
+                            <label class="col-sm-4 control-label">{% trans "User" %}</label>
+                            <div class="col-sm-6">
+                                <select class="form-control" name="user_id">
+                                    {% for user in users %}
+                                        <option value="{{ user.id }}">{{ user.username }}</option>
+                                    {% endfor %}
+                                </select>
+                            </div>
+                        </div>
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default" data-dismiss="modal">{% trans "Close" %}</button>
+                    <button type="submit" class="btn btn-primary" name="add_owner">{% trans "Add" %}</button>
+                </div>
+                    </form>
+            </div> <!-- /.modal-content -->
+        </div> <!-- /.modal-dialog -->
+    </div> <!-- /.modal -->
+{% endif %}
diff --git a/instances/templates/instance.html b/instances/templates/instance.html
index 7a8140f..8e26148 100644
--- a/instances/templates/instance.html
+++ b/instances/templates/instance.html
@@ -995,10 +995,31 @@
                                                     <div class="clearfix"></div>
                                                 </div>
                                                 <div role="tabpanel" class="tab-pane tab-pane-bordered" id="users">
-                                                    <p style="font-weight:bold;">{% trans "Instance owners" %}</p>
-                                                    {% for userinstance in userinstances %}
-                                                    <p><a href="{% url 'account' userinstance.user.id %}">{{ userinstance.user }}</a></p>
-                                                    {%  endfor %}
+                                                    <div>
+                                                    <p style="font-weight:bold;">
+                                                        {% trans "Instance owners" %}
+                                                        {% include 'add_instance_owner_block.html' %}
+                                                    </p>
+                                                    </div>
+                                                    <div class="table-responsive">
+                                                        <table class="table table-striped sortable-theme-bootstrap" data-sortable>
+                                                            <tbody class="searchable">
+                                                            {% for userinstance in userinstances %}
+                                                                <tr>
+                                                                    <td><a href="{% url 'account' userinstance.user.id %}">{{ userinstance.user }}</a></td>
+                                                                    <td style="width:30px;">
+                                                                        <form action="" method="post" style="height:10px" role="form">{% csrf_token %}
+                                                                            <input type="hidden" name="userinstance" value="{{ userinstance.pk }}">
+                                                                            <button type="submit" class="btn btn-sm btn-default" name="del_owner" title="{% trans "Delete" %}">
+                                                                                <i class="fa fa-trash"></i>
+                                                                            </button>
+                                                                        </form>
+                                                                    </td>
+                                                                </tr>
+                                                            {% endfor %}
+                                                            </tbody>
+                                                        </table>
+                                                    </div>
                                                     <div class="clearfix"></div>
                                                 </div>
                                             {% endif %}
diff --git a/instances/views.py b/instances/views.py
index d6d5c61..14b4eae 100644
--- a/instances/views.py
+++ b/instances/views.py
@@ -14,6 +14,7 @@ from django.utils.translation import ugettext_lazy as _
 from django.contrib.auth.decorators import login_required
 from computes.models import Compute
 from instances.models import Instance
+from django.contrib.auth.models import User
 from accounts.models import UserInstance, UserSSHKey
 from vrtManager.hostdetails import wvmHostDetails
 from vrtManager.instance import wvmInstance, wvmInstances
@@ -182,6 +183,7 @@ def instance(request, compute_id, vname):
     compute = get_object_or_404(Compute, pk=compute_id)
     computes = Compute.objects.all()
     computes_count = len(computes)
+    users = User.objects.all().order_by('username')
     publickeys = UserSSHKey.objects.filter(user_id=request.user.id)
     keymaps = QEMU_KEYMAPS
     console_types = QEMU_CONSOLE_TYPES
@@ -663,6 +665,33 @@ def instance(request, compute_id, vname):
                     addlogmsg(request.user.username, instance.name, msg)
                     return HttpResponseRedirect(request.get_full_path() + '#options')
 
+                if 'add_owner' in request.POST:
+                    user_id = int(request.POST.get('user_id', ''))
+                    
+                    if settings.ALLOW_INSTANCE_MULTIPLE_OWNER:
+                        check_inst = UserInstance.objects.filter(instance=instance, user_id=user_id)
+                    else:
+                        check_inst = UserInstance.objects.filter(instance=instance)
+                    
+                    if check_inst:
+                        msg = _("Owner already added")
+                        error_messages.append(msg)
+                    else:
+                        add_user_inst = UserInstance(instance=instance, user_id=user_id)
+                        add_user_inst.save()
+                        msg = _("Added owner %d" % user_id)
+                        addlogmsg(request.user.username, instance.name, msg)
+                        return HttpResponseRedirect(request.get_full_path() + '#users')
+
+                if 'del_owner' in request.POST:
+                    userinstance_id = int(request.POST.get('userinstance', ''))
+                    userinstance = UserInstance.objects.get(pk=userinstance_id)
+                    userinstance.delete()
+                    msg = _("Deleted owner %d" % userinstance_id)
+                    addlogmsg(request.user.username, instance.name, msg)
+                    return HttpResponseRedirect(request.get_full_path() + '#users')
+
+
             if request.user.is_superuser or request.user.userattributes.can_clone_instances:
                 if 'clone' in request.POST:
                     clone_data = {}