diff --git a/app/migrations/0026_submitvisitor.py b/app/migrations/0026_submitvisitor.py new file mode 100644 index 0000000000000000000000000000000000000000..b8497c75b257983dd84ea6b3cbc8b5228f6cd29d --- /dev/null +++ b/app/migrations/0026_submitvisitor.py @@ -0,0 +1,24 @@ +# Generated by Django 3.1 on 2020-10-29 13:45 + +from django.db import migrations, models +import django.utils.timezone + + +class Migration(migrations.Migration): + + dependencies = [ + ('app', '0025_review'), + ] + + operations = [ + migrations.CreateModel( + name='SubmitVisitor', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('user_id', models.CharField(max_length=50)), + ('email', models.CharField(max_length=50)), + ('msg', models.CharField(max_length=100)), + ('timestamp', models.DateTimeField(default=django.utils.timezone.now)), + ], + ), + ] diff --git a/app/models.py b/app/models.py index da7ee4c437b7774855f2ce326184011467ca351d..f50c904311702c26984f43b30fde58c3ee278f57 100644 --- a/app/models.py +++ b/app/models.py @@ -197,6 +197,12 @@ class ReqMaterial(models.Model): title = models.CharField(max_length=100) timestamp = models.DateTimeField(default=timezone.now) +class SubmitVisitor(models.Model): + user_id = models.CharField(max_length=50) + email = models.CharField(max_length=50) + msg = models.CharField(max_length=100) + timestamp = models.DateTimeField(default=timezone.now) + class ViewStatistics(models.Model): materi = models.ForeignKey(Materi, models.SET_NULL, null=True, related_name="baca") diff --git a/app/templates/app/katalog_materi.html b/app/templates/app/katalog_materi.html index fa2665103a32ea28fe8fda9be4d708815a4455b1..cda16faa7708ab42db1e5383b396fecb99f12de1 100644 --- a/app/templates/app/katalog_materi.html +++ b/app/templates/app/katalog_materi.html @@ -70,6 +70,8 @@ href="/req-materi">disini</a></p> <p class="pageTitle">Ingin diskusi lebih mendalam? Silahkan kunjungi <a href="{% url 'forum_home' %}">forum kami</a></p> + <p class="pageTitle">Terima kasih sudah berkunjung, mohon isi buku tamu terlebih dahulu <a + href="/submit-visitor">disini</a> jika kamu sudah terdaftar!</p> </div> </div> </div> diff --git a/app/templates/submit_visitor.html b/app/templates/submit_visitor.html new file mode 100644 index 0000000000000000000000000000000000000000..529b2e8b9c7f559705db59abf0d38ec9e24ddb77 --- /dev/null +++ b/app/templates/submit_visitor.html @@ -0,0 +1,146 @@ +{% extends "base.html" %} +{% load static %} +{% block title %}Digipus Home{% endblock %} +{% block header %} + +<!DOCTYPE html> +<html lang="en"> + +<head> + <title>Digipus Home</title> + <meta charset="UTF-8"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + + <link rel="stylesheet" type="text/css" href="{% static 'app/css/katalog_materi.css' %}"> + + <!-- Bootstrap core CSS --> + <link href="../../static/app/vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"> + + <!-- Custom styles for this template --> + <link href="../../static/app/css/heroic-features.css" rel="stylesheet"> + + <!--===============================================================================================--> + <link rel="icon" type="image/png" href="{% static 'images/icons/logo.ico' %}" /> + <!--===============================================================================================--> + <!--===============================================================================================--> + <link rel="stylesheet" type="text/css" href="{% static 'fonts/font-awesome-4.7.0/css/font-awesome.min.css' %}"> + <!--===============================================================================================--> + <!--===============================================================================================--> + <link rel="stylesheet" type="text/css" href="{% static 'vendor/animate/animate.css' %}"> + <!--===============================================================================================--> + <link rel="stylesheet" type="text/css" href="{% static 'vendor/css-hamburgers/hamburgers.min.css' %}"> + <!--===============================================================================================--> + <link rel="stylesheet" type="text/css" href="{% static 'vendor/animsition/css/animsition.min.css' %}"> + <!--===============================================================================================--> + <link rel="stylesheet" type="text/css" href="{% static 'vendor/select2/select2.min.css' %}"> + <!--===============================================================================================--> + <link rel="stylesheet" type="text/css" href="{% static 'vendor/daterangepicker/daterangepicker.css' %}"> + <!--===============================================================================================--> + <link rel="stylesheet" type="text/css" href="{% static 'css/styles.css' %}"> + <link rel="stylesheet" type="text/css" href="{% static 'css/util.css' %}"> + <link rel="stylesheet" type="text/css" href="{% static 'css/main.css' %}"> + <!--===============================================================================================--> + +{% endblock header %} +{% block content %} + +</head> + +<body style="background-color: #f8f8f8;"> +<!-- Page Content --> + <div class="container"> + + <header class="jumbotron my-4"> + <div class="container"> + <div class="row header"> + <div class="col"> + <h2 class="pageTitle">Hi! {{ user.name }} Selamat datang di halaman buku tamu!</h2> + <input type="hidden" id="user_id" name="user_id" value="{{ user.id}}"/> + <input type="hidden" id="email" name="email" value="{{ user.email}}"/> + {% if user %} + <p class="description">Sampaikan pesan dan kesan kamu terhadap aplikasi ini</p> + {% else %} + <p class="description">Sampaikan pesan dan kesan kamu terhadap aplikasi ini</p> + {% endif %} + <form class="searchBar" > + {% csrf_token %} + <div class="col-6 form-group"> + <input type="text" name='search' class="form-control" placeholder="Tulis di sini" id="title" value="" required> + </div> + <button id="btn_req_submit" style="width: auto;padding-left: 10px;padding-right: 10px;" class="btn btn-cari">Submit pesan ke buku tamu</button> + </form> + <p id="msg" style="display: none;margin: 5px">Buku Tamu berhasil ditambahkan</p> + </div> + </div> + </div> + </header> + + + </div> + +<!-- /.container --> +</body> + +</html> +<script src="https://kit.fontawesome.com/bc2cedd6b2.js" crossorigin="anonymous"></script> +<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> +<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script> +<script type="text/javascript"> + var csrftoken = jQuery("[name=csrfmiddlewaretoken]").val(); +</script> +<script> + function csrfSafeMethod(method) { + return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); + } +</script> +<script type="text/javascript"> +$('#btn_req_submit').click(function () { + var title = document.getElementById('title'); + var msg = document.getElementById('msg'); + var user_id = document.getElementById('user_id'); + var email = document.getElementById('email'); + + if (title.value == ''){ + return; + } + $.ajaxSetup({ + beforeSend: function (xhr, settings) { + if (!csrfSafeMethod(settings.type) && !this.crossDomain) { + xhr.setRequestHeader("X-CSRFToken", csrftoken); + } + } + }); + + $.ajax({ + type: 'POST', + url: "{% url 'submit-visitor' %}", + data: { + 'title': title.value, + 'user_id': user_id.value, + 'email': email.value, + }, + success: function(Json) { + /* clear the error message first */ + if (Json.success){ + swal("Informasi!", Json.msg, "success"); + msg.style.display = 'block'; + title.value = ""; + setTimeout(function(){ $("#msg").fadeOut("slow"); }, 3000); + }else{ + swal("Informasi!", Json.msg, "error"); + msg.style.display = 'block'; + setTimeout(function(){ $("#msg").fadeOut("slow"); }, 3000); + } + }, + error: function (xhr, status, errorThrown) { + xhr.status; + swal("Error!", xhr.responseText, "error"); + xhr.responseText; + } + }); + return false; +}); +</script> +{% endblock %} + + \ No newline at end of file diff --git a/app/urls.py b/app/urls.py index 8dc4c529ed3eb8f87da45782a019c02805717412..a8c7281cbdd6821bf7eace5f939520e099f53ad5 100644 --- a/app/urls.py +++ b/app/urls.py @@ -5,7 +5,7 @@ from app import views from app.views import (DashboardKontributorView, ProfilView, SuksesLoginAdminView, SuksesLoginKontributorView, DownloadHistoryView, SuntingProfilView, UploadMateriHTML, UploadMateriView, UploadMateriExcelView, PostsView, - ReqMateriView, KatalogPerKontributorView, MateriFavorite, PasswordChangeViews, password_success) + ReqMateriView, KatalogPerKontributorView, MateriFavorite, PasswordChangeViews, password_success, SubmitVisitorView) urlpatterns = [ @@ -40,4 +40,5 @@ urlpatterns = [ path("change-password/", PasswordChangeViews.as_view(template_name='change-password.html')), path("password_success/", views.password_success, name="password_success"), path("given-rating/", views.see_given_rating, name="see_given_rating"), + path("submit-visitor/", SubmitVisitorView.as_view(), name="submit-visitor"), ] diff --git a/app/views.py b/app/views.py index 48166f33b0a1e21fb6e1c77f0fe7b113c67b6e2a..a6c7ca187c0acdf4f0b91e705297c4264f5733c5 100644 --- a/app/views.py +++ b/app/views.py @@ -31,6 +31,7 @@ from app.models import ( Materi, ReqMaterial, Rating, RatingContributor, + SubmitVisitor ) from authentication.models import User from .services import DafterKatalogService, DetailMateriService, LikeDislikeService, MateriFieldValidationHelperService, \ @@ -721,3 +722,28 @@ def see_given_rating(request): return render(request, 'given-rating.html', context={'rating_list': rating_list, 'order_by_key': order_by_key, 'order_by': order_by}) return permission_denied(request, exception=None) + +class SubmitVisitorView(TemplateView): + template_name = "submit_visitor.html" + + def dispatch(self, request, *args, **kwargs): + if request.user.is_authenticated == False: + return HttpResponseRedirect("/login/") + return super(SubmitVisitorView, self).dispatch(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context = super(SubmitVisitorView, self).get_context_data(**kwargs) + return context + + def get(self, request, *args, **kwargs): + context = self.get_context_data(**kwargs) + return self.render_to_response(context) + + def post(self, request, *args, **kwargs): + title = request.POST.get("title", None) + email = request.POST.get("email", None) + user_id = request.POST.get("user_id", None) + if title is None: + return JsonResponse({"success": False, "msg": "Missing parameter"}) + SubmitVisitor(msg=title, user_id=user_id, email=email).save() + return JsonResponse({"success": True, "msg": "Buku tamu berhasil ditambahkan"})