diff options
Diffstat (limited to 'src/templates/notifier')
-rw-r--r-- | src/templates/notifier/email_ended.txt | 21 | ||||
-rw-r--r-- | src/templates/notifier/email_fulfilled.txt | 17 | ||||
-rw-r--r-- | src/templates/notifier/end_booking.html | 36 | ||||
-rw-r--r-- | src/templates/notifier/inbox.html | 129 | ||||
-rw-r--r-- | src/templates/notifier/new_booking.html | 34 | ||||
-rw-r--r-- | src/templates/notifier/notification.html | 83 |
6 files changed, 320 insertions, 0 deletions
diff --git a/src/templates/notifier/email_ended.txt b/src/templates/notifier/email_ended.txt new file mode 100644 index 0000000..7467a0e --- /dev/null +++ b/src/templates/notifier/email_ended.txt @@ -0,0 +1,21 @@ +{{user_name|default:"Developer"}}, + +The booking you requested of the OPNFV Lab as a Service has ended. + +booking information: + start: {{booking.start}} + end: {{booking.end}} + machines: + {% for host in hosts %} + - {{host}} + {% endfor %} + purpose: {{booking.purpose}} + +You may visit the following link for more information: +{{booking_url}} + +Feel free to create another booking with us! + +Thank you for contributing to the OPNFV platform! + + - The Lab-as-a-Service team diff --git a/src/templates/notifier/email_fulfilled.txt b/src/templates/notifier/email_fulfilled.txt new file mode 100644 index 0000000..65593db --- /dev/null +++ b/src/templates/notifier/email_fulfilled.txt @@ -0,0 +1,17 @@ +{{user_name|default:"Developer"}}, + +The booking you requested of the OPNFV Lab as a Service has finished deploying and is ready for you to use. + +The lab that fulfilled your booking request has sent you the following messages: + {% for email_message in messages %} + {{ email_message.title }} + {{ email_message.content }} + -------------------- + {% endfor %} + +You may visit the following link for more information: +{{booking_url}} + +Thank you for contributing to the OPNFV platform! + + - The Lab-as-a-Service team diff --git a/src/templates/notifier/end_booking.html b/src/templates/notifier/end_booking.html new file mode 100644 index 0000000..a2981c1 --- /dev/null +++ b/src/templates/notifier/end_booking.html @@ -0,0 +1,36 @@ +<html> + <body> + <div id="message_content_wrapper"> + {% if owner %} + <h3>Your booking has expired</h3> + <p>Your booking has ended and the machines have been cleaned up.</p> + <p>Thank you for working on OPNFV, and feel free to book more machines if you need them.</p> + {% else %} + <h3>A booking that you collaborated on has expired</h3> + <p>The booking owned by {{booking.owner.username}} that you worked on has ended</p> + <p>Thank you for contributing to OPNFV!</p> + {% endif %} + <p>Booking information:</p> + <ul> + <li>owner: {{booking.owner.username}}</li> + <li>id: {{booking.id}}</li> + <li>lab: {{booking.resource.template.lab.lab_user.username}}</li> + <li>resource: {{booking.resource.template.name}}</li> + <li>start: {{booking.start}}</li> + <li>end: {{booking.end}}</li> + <li>purpose: {{booking.purpose}}</li> + <li>collaborators: + <ul> + {% for user in booking.collaborators.all %} + <li>user.username</li> + {% empty %} + <li>No collaborators</li> + {% endfor %} + </ul> + </li> + </ul> + + <p>You can find more detailed information <a href=/booking/detail/{{booking.id}}/>Here</a></p> + </div> + </body> +</html> diff --git a/src/templates/notifier/inbox.html b/src/templates/notifier/inbox.html new file mode 100644 index 0000000..72207ed --- /dev/null +++ b/src/templates/notifier/inbox.html @@ -0,0 +1,129 @@ +{% extends "base.html" %} + + +{% load staticfiles %} + +{% block content %} + +<style media="screen"> + .inbox-panel { + display: grid; + grid-template-columns: 30% 5% 65%; + } + + .section-panel { + padding: 10px; + } + + .iframe-panel { + padding: 0px; + margin-top: 0px; + } + + .card-container { + border: 1px solid #cccccc; + border-bottom: 0px; + } + + .card { + height: 50px; + position: relative; + border-bottom: 1px solid #cccccc; + padding: 10px; + width: 100%; + background-color: #ffffff; + z-index: 5; + } + + .selected-card { + background-color: #f3f3f3; + } + + .card:hover { + box-shadow: 0px 0 5px 2px #cccccc; + z-index: 6; + } + + .half_width { + width: 50%; + } + + #page-wrapper { + padding: 0px; + } + + .read_notification { + background-color: #efefef; + } + + .scrollable { + overflow-y: auto; + } +</style> +<div class="container-fluid d-flex flex-grow-1 flex-column"> + <div class="row mt-3 mb-2"> + <div class="col-2 px-0"> + <div class="btn-group w-100" id="filterGroup"> + <button class="btn btn-secondary active" data-read="-1">All</button> + <button class="btn btn-secondary" data-read="0">Unread</button> + <button class="btn btn-secondary" data-read="1">Read</button> + </div> + </div> + </div> + <div class="row flex-grow-1" id="fixHeight"> + <!-- Notification list && Controls --> + <div class="mb-2 mb-lg-0 col-lg-2 px-0 mh-100"> + <div class="list-group rounded-0 rounded-left scrollable mh-100 notifications" id="unreadNotifications" data-read="0"> + {% for notification in unread_notifications %} + <a + href="#" + onclick="showmessage({{notification.id}}); setactive(this);" + class="list-group-item list-group-item-action notification"> + {{ notification }} + </a> + {% endfor %} + </div> + <div class="list-group rounded-0 rounded-left scrollable mh-100 notifications" id="readNotifications" data-read="1"> + {% for notification in read_notifications %} + <a + href="#" + onclick="showmessage({{notification.id}}); setactive(this);" + class="list-group-item list-group-item-action list-group-item-secondary notification"> + {{ notification }} + </a> + {% endfor %} + </div> + </div> + <!-- Content --> + <div class="col ml-lg-2 border mh-100 p-4"> + <iframe class="w-100 h-100" id="inbox-iframe" frameBorder="0" scrolling="yes">Please select a notification</iframe> + </div> + </div> +</div> + +<script type="text/javascript"> + function showmessage(msg_id) { + iframe = document.getElementById("inbox-iframe"); + iframe.src = "notification/" + msg_id; + } + + function setactive(obj) { + $(".notification").removeClass("active"); + $(obj).addClass("active"); + } + + $(document).ready(function(){ + // For all / unread / read + $("#filterGroup button").click(function(){ + let read = $(this).attr("data-read"); + $(this).siblings().removeClass("active"); + $(".notifications").addClass("d-none"); + $(this).addClass("active"); + if (read === "-1") { + return $(".notifications").removeClass("d-none"); + } + $(`.notifications[data-read="${read}"]`).removeClass("d-none"); + }); + }); +</script> +{% endblock %}
\ No newline at end of file diff --git a/src/templates/notifier/new_booking.html b/src/templates/notifier/new_booking.html new file mode 100644 index 0000000..d23b12e --- /dev/null +++ b/src/templates/notifier/new_booking.html @@ -0,0 +1,34 @@ +<html> + <body> + <div id="message_content_wrapper"> + {% if owner %} + <h3>You have created a new booking</h3> + <p>We have recieved your booking request and will start working on it right away.</p> + {% else %} + <h3>You have been added as a collaborator to a booking</h3> + <p>{{booking.owner.username}} has given you access to thier booking.</p> + {% endif %} + <p>Booking information:</p> + <ul> + <li>owner: {{booking.owner.username}}</li> + <li>id: {{booking.id}}</li> + <li>lab: {{booking.resource.template.lab.lab_user.username}}</li> + <li>resource: {{booking.resource.template.name}}</li> + <li>start: {{booking.start}}</li> + <li>end: {{booking.end}}</li> + <li>purpose: {{booking.purpose}}</li> + <li>collaborators: + <ul> + {% for user in booking.collaborators.all %} + <li>user.username</li> + {% empty %} + <li>No collaborators</li> + {% endfor %} + </ul> + </li> + </ul> + + <p>You can find more detailed information <a href=/booking/detail/{{booking.id}}/>Here</a></p> + </div> + </body> +</html> diff --git a/src/templates/notifier/notification.html b/src/templates/notifier/notification.html new file mode 100644 index 0000000..0eafa60 --- /dev/null +++ b/src/templates/notifier/notification.html @@ -0,0 +1,83 @@ +{% extends "layout.html" %} +{% block extrahead %} +<base target="_parent"> +{% endblock %} + +{% block basecontent %} +<script> + function send_request(post_data){ + var form = $("#notification_action_form"); + var formData = form.serialize() + '&' + post_data + '=true'; + var req = new XMLHttpRequest(); + req.open("POST", ".", false); + req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); + req.onerror = function() { alert("problem occurred while trying to cancel current workflow"); } + req.onreadystatechange = function() { if(req.readyState === 4){ + window.top.location.href += ''; + }}; + req.send(formData); + } + function delete_notification() + { + send_request("delete"); + } + function mark_unread() + { + send_request("unread"); + } +</script> + +<div> + <h3 class="msg_header">{{notification.title}} + <div class="btn_group"> + <button class="btn btn-primary inbox-btn" onclick="mark_unread()">Mark Unread</button> + <button class="btn btn-danger inbox-btn" onclick="delete_notification()">Delete</button> + </div> + </h3> +</div> + +<p class="content-divider"></p> + +{% if not notification.is_html %} +<pre> +{% endif %} + {{notification.content|safe}} +{% if not notification.is_html %} +</pre> +{% endif %} +<form id="notification_action_form" action="." method="post"> + {% csrf_token %} +</form> + +<style media="screen"> + .card-container { + border: 1px solid #ffffff; + margin-top: 11px; + } + .card { + height: 50px; + margin: 0px; + position: relative; + border-bottom: 1px solid #cccccc; + padding: 0px; + width: 100%; + background-color: #ffffff; + z-index: 5; + } + .sender { + color: #636363; + } + .content-divider { + border-bottom: 1px solid #cccccc; + padding-bottom: 15px; + clear: right; + } + .inbox-btn{ + display: inline; + margin: 3px; + } + .btn_group{ + float: right; + } +</style> +{% endblock %} |