From 24e0d8df545749d1be0fb2c652e4886ca1b2b8d0 Mon Sep 17 00:00:00 2001 From: Mika dabelza abi <mika.dabelza@ui.ac.id> Date: Thu, 14 May 2020 13:09:36 +0700 Subject: [PATCH] Revert "Merge branch 'Coldfix-Katalog-Filter' into 'staging'" This reverts merge request !44 --- app/templates/profil-admin.html | 207 ++++++++++++++++++++++++++++++++ app/tests.py | 40 +++++- app/urls.py | 4 +- app/views.py | 20 +++ 4 files changed, 269 insertions(+), 2 deletions(-) create mode 100644 app/templates/profil-admin.html diff --git a/app/templates/profil-admin.html b/app/templates/profil-admin.html new file mode 100644 index 0000000..c5b0eeb --- /dev/null +++ b/app/templates/profil-admin.html @@ -0,0 +1,207 @@ +{% load static %} + +<!DOCTYPE html> +<html lang="en"> + +<head> + + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> + <meta name="description" content=""> + <meta name="author" content=""> + + <title>Profil Admin</title> + + <!-- Custom fonts for this template --> + <link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet"> + + <!-- Custom styles for this template --> + <link rel="icon" type="image/png" href="{% static 'images/icons/logo.ico' %}" /> + <link href="{% static 'css/sb-admin-2.min.css' %}" rel="stylesheet"> + <link rel="stylesheet" href="{% static 'css/button.css' %}"> + + <!-- Custom styles for this page --> + <link href="{% static 'vendor/datatables/dataTables.bootstrap4.min.css' %}" rel="stylesheet"> + +</head> + +<body id="page-top" style="font-family: 'Poppins', sans-serif;"> + + <!-- Page Wrapper --> + <div id="wrapper"> + + <!-- Sidebar --> + <ul class="navbar-nav bg-gradient-primary sidebar sidebar-dark accordion" id="accordionSidebar"> + + <!-- Sidebar - Brand --> + <a class="sidebar-brand d-flex align-items-center justify-content-center" href="{% url 'daftar_katalog' %}"> + <div class="sidebar-brand-icon rotate-n-15"> + </div> + <div class="sidebar-brand-text mx-3">Digipus</div> + </a> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + <!-- Nav Item - Dashboard --> + <li class="nav-item"> + <a class="nav-link" href="/profil-admin/"> + <span>Halaman Profil</span></a> + </li> + + <!-- + <li class="nav-item"> + <a class="nav-link" href="/sunting/"> + <span>Sunting Profil</span></a> + </li> + --> + + </ul> + <!-- End of Sidebar --> + + <!-- Content Wrapper --> + <div id="content-wrapper" class="d-flex flex-column"> + + <!-- Main Content --> + <div id="content"> + + <!-- Topbar --> + <nav class="navbar navbar-expand navbar-light bg-white topbar mb-4 static-top shadow"> + + <!-- Sidebar Toggle (Topbar) --> + <button id="sidebarToggleTop" class="btn btn-link d-md-none rounded-circle mr-3"> + <i class="fa fa-bars"></i> + </button> + + <div class="sidebar-brand-text mx-3">Diskominfo Kota Depok</div> + + <!-- Topbar Navbar --> + <ul class="navbar-nav ml-auto"> + + <li class="nav-item"> + <a class="nav-link" href="/administration/"> + <span class="mr-2 d-none d-lg-inline text-gray-600 small">Administrasi</span> + </a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/profil-admin/"> + <span class="mr-2 d-none d-lg-inline text-gray-600 small">Profil</span> + </a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/logout/"> + <span class="mr-2 d-none d-lg-inline text-gray-600 small">Logout</span> + </a> + </li> + + <div class="topbar-divider d-none d-sm-block"></div> + + <!-- Nav Item - User Information --> + <li class="nav-item dropdown no-arrow"> + <a class="nav-link dropdown-toggle" href="#" id="userDropdown" role="button" data-toggle="dropdown" + aria-haspopup="true" aria-expanded="false"> + <span class="mr-2 d-none d-lg-inline text-gray-600 small">{{ user.name }}</span> + <img class="img-profile rounded-circle" src="{{ user.profile_picture.url }}"> + </a> + </li> + + </ul> + + </nav> + <!-- End of Topbar --> + + <!-- Begin Page Content --> + <div class="container-fluid"> + <div class="profile-content white-text"> + <div> + <img src="{{ user.profile_picture.url }}" alt="Photo" class="img-thumbnail"></img> + <div class="profile-margin"></div> + <h2>{{ user.name }}</h2> + <h4>{{ user.email }}</h4> + <h4>{{ user.biography }}</h4> + <div class="profile-margin"></div> + <table> + <tr> + <td class="profile-data">Instansi</td> + <td>{{ user.instansi }}</td> + </tr> + + <td class="profile-data">LinkedIn</td> + <td><a href="https://linkedin.com">{{ user.linkedin }}</a></td> + </tr> + + <tr> + <td class="profile-data">Facebook</td> + <td><a href="https://facebook.com">{{ user.facebook }}</a></td> + </tr> + + <tr> + <td class="profile-data">Twitter</td> + <td><a href="https://twitter.com">{{ user.twitter }}</a></td> + </tr> + + <tr> + <td class="profile-data">Instagram</td> + <td><a href="https://instagram.com">{{ user.instagram }}</a></td> + </tr> + </table> + </div> + </div> + </div> + <!-- /.container-fluid --> + + </div> + <!-- End of Main Content --> + + <!-- Footer --> + <footer class="sticky-footer bg-white"> + <div class="container my-auto"> + <div class="copyright text-center my-auto"> + <span>Copyright © Diskominfo Kota Depok 2020</span> + </div> + </div> + </footer> + <!-- End of Footer --> + + </div> + <!-- End of Content Wrapper --> + + </div> + <!-- End of Page Wrapper --> + + <!-- Scroll to Top Button--> + <a class="scroll-to-top rounded" href="#page-top"> + <i class="fas fa-angle-up"></i> + </a> + + <!-- Bootstrap core JavaScript--> + <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" + integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" + crossorigin="anonymous"></script> + <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" + integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" + crossorigin="anonymous"></script> + <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" + integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" + crossorigin="anonymous"></script> + + <!-- Core plugin JavaScript--> + <script src="https://code.jquery.com/jquery-3.5.0.min.js" + integrity="sha256-xNzN2a4ltkB44Mc/Jz3pT4iU1cmeR0FkXs4pru/JxaQ=" crossorigin="anonymous"></script> + + <!-- Custom scripts for all pages--> + <script src="{% static 'js/sb-admin-2.min.js' %}"></script> + + <!-- Page level plugins --> + <script src="{% static 'vendor/datatables/jquery.dataTables.min.js' %}"></script> + <script src="{% static 'vendor/datatables/dataTables.bootstrap4.min.js' %}"></script> + + <!-- Page level custom scripts --> + <script src="{% static 'js/demo/datatables-demo.js' %}"></script> + +</body> + +</html> \ No newline at end of file diff --git a/app/tests.py b/app/tests.py index 40d0683..94c882f 100644 --- a/app/tests.py +++ b/app/tests.py @@ -14,7 +14,8 @@ from authentication.models import User from .models import Category, Comment, Materi from .views import (DaftarKatalog, DashboardKontributorView, DetailMateri, ProfilKontributorView, SuksesLoginAdminView, - SuksesLoginKontributorView, SuntingProfilView) + SuksesLoginKontributorView, SuntingProfilView, + ProfilAdminView) class DaftarKatalogTest(TestCase): @@ -299,6 +300,43 @@ class DashboardKontributorViewTest(TestCase): response = self.client.get(self.url) self.assertEqual(response.status_code, 403) +class ProfilAdminTest(TestCase): + def setUp(self): + self.client = Client() + self.kontributor = User.objects.create_contributor(email="kontributor@gov.id", + password="kontributor") + self.admin = User.objects.create_admin(email="admin@gov.id", + password="admin") + self.url = "/profil-admin/" + self.view = ProfilAdminView + self.template_name = "profil-admin.html" + + def test_profil_Admin_view(self): + found = resolve(self.url) + self.assertEqual(found.func.__name__, self.view.as_view().__name__) + + def test_profil_admin_template(self): + # Login + self.client.login(email="admin@gov.id", + password="admin") + # Test + response = self.client.get(self.url) + self.assertTemplateUsed(response, self.template_name) + # Logout + self.client.logout() + + def test_profil_admin_url(self): + # Login + response = self.client.get(self.url) + self.assertNotEqual(response.status_code, 200) + + self.client.login(email="admin@gov.id", + password="admin") + # Test + response = self.client.get(self.url) + self.assertEqual(response.status_code, 200) + # Logout + self.client.logout() class ProfilKontributorTest(TestCase): def setUp(self): diff --git a/app/urls.py b/app/urls.py index 446f8e7..d2ff9c8 100644 --- a/app/urls.py +++ b/app/urls.py @@ -3,7 +3,8 @@ from django.urls import path, re_path from app import views from app.views import (DashboardKontributorView, ProfilKontributorView, SuksesLoginAdminView, SuksesLoginKontributorView, - SuntingProfilView, UploadMateriHTML, UploadMateriView) + SuntingProfilView, UploadMateriHTML, UploadMateriView, + ProfilAdminView) urlpatterns = [ path("", views.DaftarKatalog.as_view(), name="daftar_katalog"), @@ -20,4 +21,5 @@ urlpatterns = [ name="sukses-kontributor"), path("sukses-admin/", SuksesLoginAdminView.as_view(), name="sukses-admin"), re_path(r"^.*\.html", views.pages, name="pages"), + path("profil-admin/", ProfilAdminView.as_view(), name="profil-admin"), ] diff --git a/app/views.py b/app/views.py index 5fc7c1d..461e17c 100644 --- a/app/views.py +++ b/app/views.py @@ -162,6 +162,9 @@ class UploadMateriView(TemplateView): materi = form.save(commit=False) materi.uploader = request.user materi.save() + kateg = form.cleaned_data['categories'] + for i in kateg: + materi.categories.add(i) return HttpResponseRedirect("/unggah/") else: context = self.get_context_data(**kwargs) @@ -206,6 +209,23 @@ class DashboardKontributorView(TemplateView): context["materi_list"] = materi_list return self.render_to_response(context) +class ProfilAdminView(TemplateView): + template_name = "profil-admin.html" + + def dispatch(self, request, *args, **kwargs): + if not request.user.is_authenticated or not request.user.is_admin: + raise PermissionDenied(request) + return super(ProfilAdminView, self).dispatch(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context = super(ProfilAdminView, self).get_context_data(**kwargs) + return context + + def get(self, request, *args, **kwargs): + context = self.get_context_data(**kwargs) + current_user = self.request.user + context["user"] = current_user + return self.render_to_response(context) class ProfilKontributorView(TemplateView): template_name = "profil.html" -- GitLab