diff --git a/administration/forms.py b/administration/forms.py index 95eebe40b4fa1cb24a444a176dfee3e3d91f15e4..e00e85722ec07fec1517c4e4da6e898e35e46163 100644 --- a/administration/forms.py +++ b/administration/forms.py @@ -1,7 +1,10 @@ +from django import forms + from django.forms import ModelForm from administration.models import VerificationSetting from app.models import Category +from authentication.models import User class CategoryForm(ModelForm): @@ -24,3 +27,36 @@ class VerificationSettingForm(ModelForm): super(VerificationSettingForm, self).__init__(*args, **kwargs) for field_name, field in self.fields.items(): field.widget.attrs["class"] = "widget-control" + +class RegistrasiAdminForm(forms.ModelForm): + + password = forms.CharField(widget=forms.PasswordInput) + password2 = forms.CharField(widget=forms.PasswordInput) + class Meta: + model = User + fields = ["name", "instansi", "nik", "alamat", "email", "nomor_telpon"] + + def __init__(self, *args, **kwargs): + super(RegistrasiAdminForm, self).__init__(*args, **kwargs) + for field_name, field in self.fields.items(): + field.widget.attrs["class"] = "form-control" + if field_name == "password1" or field_name == "password2": + field.widget.attrs["type"] = "password" + + self.fields["name"].required = True + self.fields["password"].required = True + self.fields["password2"].required = True + + def clean_password(self): + password = self.data.get("password") + password2 = self.data.get("password2") + if password != password2: + raise forms.ValidationError("Password tidak sama") + return password + + def clean_email(self): + email = self.cleaned_data.get("email") + if not User.objects.filter(email=email).exists(): + return email + raise forms.ValidationError( + "Email sudah digunakan untuk mendaftar akun.") diff --git a/administration/templates/detail.html b/administration/templates/detail.html index 4e08cdac04bfeac6281a62f156c638e54ea0225c..d49be2d870bbbdd06dfe6db1804b195c4b1227b9 100644 --- a/administration/templates/detail.html +++ b/administration/templates/detail.html @@ -51,12 +51,7 @@ </li> <li class="nav-item"> - <a class="nav-link" href="/administration/daftar-kontributor/"> - <span>Daftar Kontributor</span></a> - </li> - - <li class="nav-item"> - <a class="nav-link" href="index.html"> + <a class="nav-link" href="#"> <span>Statistik Materi</span></a> </li> @@ -73,6 +68,22 @@ <span>Pengaturan Kategori</span></a> </li> + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-kontributor/"> + <span>Kelola Kontributor</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-admin/"> + <span>Kelola Admin</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + </ul> <!-- End of Sidebar --> diff --git a/administration/templates/detail_admin.html b/administration/templates/detail_admin.html new file mode 100644 index 0000000000000000000000000000000000000000..249d63a1d79d9effbd2638688cb3fbb44284d141 --- /dev/null +++ b/administration/templates/detail_admin.html @@ -0,0 +1,244 @@ +{% 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>Dasbor - Kelola Admin</title> + + <!-- Custom fonts for this template --> + <link rel="icon" type="image/png" href="{% static 'images/icons/logo.ico' %}" /> + <link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet"> + + <!-- Custom styles for this template --> + <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="/administration/"> + <span>Verifikasi Materi</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="#"> + <span>Statistik Materi</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + <li class="nav-item"> + <a class="nav-link" href="/administration/setting/verification/"> + <span>Pengaturan Verifikasi</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/administration/setting/category/"> + <span>Pengaturan Kategori</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-kontributor/"> + <span>Kelola Kontributor</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-admin/"> + <span>Kelola Admin</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + </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="/dashboard/"> + <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> + {% if not user.default_profile_picture %} + <img class="img-profile rounded-circle" src="https://i.ibb.co/9wgPzyZ/default-image.png" alt="User profile picture"> + {% else %} + <img class="img-profile rounded-circle" src="{{ user.profile_picture.url }}" alt="User profile picture"> + {% endif %} + </a> + </li> + + </ul> + + </nav> + <!-- End of Topbar --> + + <!-- Begin Page Content --> + <div class="container-fluid"> + <div class="profile-content white-text"> + <div> + {% if not user.default_profile_picture %} + <img class="img-profile rounded-circle" src="https://i.ibb.co/9wgPzyZ/default-image.png" alt="Photo" class="img-thumbnail"></img> + {% else %} + <img class="img-profile rounded-circle" src="{{ user.profile_picture.url }}" alt="Photo" class="img-thumbnail"></img> + {% endif %} + <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> + <a class="btn btn-primary btn-admin" href="/administration/kelola-admin/">Kembali ke Kelola Admin</a> + </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/administration/templates/detail_kontri_admin.html b/administration/templates/detail_kontri_admin.html index 065155eb4ccbdbe0d7657a5a6c179045c3ba103c..750f2a46e38a171d6548789161be52c129e97ce2 100644 --- a/administration/templates/detail_kontri_admin.html +++ b/administration/templates/detail_kontri_admin.html @@ -11,7 +11,7 @@ <meta name="description" content=""> <meta name="author" content=""> - <title>Profil Kontributor</title> + <title>Dasbor - Kelola Kontributor</title> <!-- Custom fonts for this template --> <link rel="icon" type="image/png" href="{% static 'images/icons/logo.ico' %}" /> @@ -51,17 +51,12 @@ </li> <li class="nav-item"> - <a class="nav-link" href="/administration/daftar-kontributor/"> - <span>Daftar Kontributor</span></a> - </li> - - <li class="nav-item"> - <a class="nav-link" href="index.html"> + <a class="nav-link" href="#"> <span>Statistik Materi</span></a> </li> <!-- Divider --> - <hr class="sidebar-divider"> + <hr class="sidebar-divider my-0"> <li class="nav-item"> <a class="nav-link" href="/administration/setting/verification/"> @@ -73,6 +68,22 @@ <span>Pengaturan Kategori</span></a> </li> + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-kontributor/"> + <span>Kelola Kontributor</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-admin/"> + <span>Kelola Admin</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + </ul> <!-- End of Sidebar --> @@ -137,7 +148,11 @@ <div class="container-fluid"> <div class="profile-content white-text"> <div> - <img src="{{ user.profile_picture.url }}" alt="Photo" class="img-thumbnail"></img> + {% if not user.default_profile_picture %} + <img class="img-profile rounded-circle" src="https://i.ibb.co/9wgPzyZ/default-image.png" alt="Photo" class="img-thumbnail"></img> + {% else %} + <img class="img-profile rounded-circle" src="{{ user.profile_picture.url }}" alt="Photo" class="img-thumbnail"></img> + {% endif %} <div class="profile-margin"></div> <h2>{{ user.name }}</h2> <h4>{{ user.email }}</h4> @@ -168,7 +183,7 @@ <td><a href="https://instagram.com">{{ user.instagram }}</a></td> </tr> </table> - <a class="btn btn-primary btn-admin" href="/administration/daftar-kontributor/">Kembali ke Daftar Kontributor</a> + <a class="btn btn-primary btn-admin" href="/administration/kelola-kontributor/">Kembali ke Kelola Kontributor</a> </div> </div> diff --git a/administration/templates/kelola_admin.html b/administration/templates/kelola_admin.html new file mode 100644 index 0000000000000000000000000000000000000000..0c6467442a8d88e6a72549f608f093fb5b031d88 --- /dev/null +++ b/administration/templates/kelola_admin.html @@ -0,0 +1,279 @@ +{% 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>Dasbor - Kelola 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="/administration/"> + <span>Verifikasi Materi</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="#"> + <span>Statistik Materi</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + <li class="nav-item"> + <a class="nav-link" href="/administration/setting/verification/"> + <span>Pengaturan Verifikasi</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/administration/setting/category/"> + <span>Pengaturan Kategori</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-kontributor/"> + <span>Kelola Kontributor</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-admin/"> + <span>Kelola Admin</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + </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="/dashboard/"> + <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> + {% if not user.default_profile_picture %} + <img class="img-profile rounded-circle" src="https://i.ibb.co/9wgPzyZ/default-image.png" alt="User profile picture"> + {% else %} + <img class="img-profile rounded-circle" src="{{ user.profile_picture.url }}" alt="User profile picture"> + {% endif %} + </a> + </li> + + </ul> + + </nav> + <!-- End of Topbar --> + + <!-- Begin Page Content --> + <div class="container-fluid"> + + <!-- Page Heading --> + <h1 class="h3 mb-2 text-gray-800">Kelola Admin</h1> + <p class="mb-4">Tekan tombol detail untuk informasi lebih lanjut tentang admin</p> + + <!-- DataTales Example --> + <div class="card shadow mb-4"> + <div class="card-header py-3"> + <div class="d-flex"> + <div class="mr-auto p-2"> + <h6 class="m-0 font-weight-bold text-primary">Tabel Daftar Admin</h6> + </div> + <div class="p-2"> + <a href="/administration/kelola-admin/tambah/" class="accept-button button-decoration button-header">Buat Akun Baru</a> + </div> + </div> + </div> + <div class="card-body"> + <div class="table-responsive"> + <table class="table table-bordered" id="dataTable" width="100%" cellspacing="0"> + <thead> + <tr> + <th>Nama</th> + <th>NIK</th> + <th>Instansi</th> + <th>Pilihan</th> + </tr> + </thead> + <tfoot> + <tr> + <th>Nama</th> + <th>NIK</th> + <th>Instansi</th> + <th>Pilihan</th> + </tr> + </tr> + </tfoot> + <tbody> + {% for current in users_list %} + <tr> + <td>{{ current.name }}</td> + <td>{{ current.nik }}</td> + <td>{{ current.instansi }}</td> + <td class="verif-buttons"> + <span> + <a href="/administration/profil-admin/{{ current.id }}/" class="accept-button button-decoration">Detail</a> + <button type="button" class="reject-button button-decoration" data-toggle="modal" data-target="#confirmModal{{ current.id }}">Hapus</button> + <div class="modal fade" id="confirmModal{{ current.id }}" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> + <div class="modal-dialog" role="document"> + <div class="modal-content"> + <div class="modal-header"> + <h5 class="modal-title" id="exampleModalLabel">Konfirmasi Penghapusan Akun</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + <div class="modal-body"> + <p>Sila konfirmasi penghapusan akun dengan tekan tombol hapus di bawah</p> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button> + <a href="/administration/hapus-admin/{{current.id}}/" type="button" class="btn btn-danger">Hapus</a> + </div> + </div> + </div> + </div> + </span> + </td> + </tr> + {% endfor %} + </tbody> + </table> + </div> + </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/administration/templates/daftar_kontributor.html b/administration/templates/kelola_kontributor.html similarity index 77% rename from administration/templates/daftar_kontributor.html rename to administration/templates/kelola_kontributor.html index 89a26e772b1818e9647b60b97dcd7e870d0d83d5..8918f76ca24571a14fe9ebbe2289e57ed8744012 100644 --- a/administration/templates/daftar_kontributor.html +++ b/administration/templates/kelola_kontributor.html @@ -11,7 +11,7 @@ <meta name="description" content=""> <meta name="author" content=""> - <title>Dasbor Kontributor</title> + <title>Dasbor - Kelola Kontributor</title> <!-- Custom fonts for this template --> <link href="https://fonts.googleapis.com/css2?family=Poppins&display=swap" rel="stylesheet"> @@ -50,18 +50,13 @@ <span>Verifikasi Materi</span></a> </li> - <li class="nav-item"> - <a class="nav-link" href="/administration/daftar-kontributor/"> - <span>Daftar Kontributor</span></a> - </li> - <li class="nav-item"> <a class="nav-link" href="#"> <span>Statistik Materi</span></a> </li> <!-- Divider --> - <hr class="sidebar-divider"> + <hr class="sidebar-divider my-0"> <li class="nav-item"> <a class="nav-link" href="/administration/setting/verification/"> @@ -73,6 +68,22 @@ <span>Pengaturan Kategori</span></a> </li> + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-kontributor/"> + <span>Kelola Kontributor</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-admin/"> + <span>Kelola Admin</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + </ul> <!-- End of Sidebar --> @@ -137,7 +148,7 @@ <div class="container-fluid"> <!-- Page Heading --> - <h1 class="h3 mb-2 text-gray-800">Daftar Kontributor</h1> + <h1 class="h3 mb-2 text-gray-800">Kelola Kontributor</h1> <p class="mb-4">Tekan tombol detail untuk informasi lebih lanjut tentang kontributor</p> <!-- DataTales Example --> @@ -172,9 +183,29 @@ <td>{{ user.nik }}</td> <td>{{ user.instansi }}</td> <td class="verif-buttons"> - <a href="/administration/profil/{{ user.id }}/" class="accept-button" - style="background-color:#4e73df">Detail - </a> + <span> + <a href="/administration/profil/{{ current.id }}/" class="accept-button button-decoration">Detail</a> + <button type="button" class="reject-button button-decoration" data-toggle="modal" data-target="#confirmModal{{ current.id }}">Hapus</button> + <div class="modal fade" id="confirmModal{{ current.id }}" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true"> + <div class="modal-dialog" role="document"> + <div class="modal-content"> + <div class="modal-header"> + <h5 class="modal-title" id="exampleModalLabel">Konfirmasi Penghapusan Akun</h5> + <button type="button" class="close" data-dismiss="modal" aria-label="Close"> + <span aria-hidden="true">×</span> + </button> + </div> + <div class="modal-body"> + <p>Sila konfirmasi penghapusan akun dengan tekan tombol hapus di bawah</p> + </div> + <div class="modal-footer"> + <button type="button" class="btn btn-secondary" data-dismiss="modal">Batal</button> + <a href="/administration/hapus-kontributor/{{current.id}}/" type="button" class="btn btn-danger">Hapus</a> + </div> + </div> + </div> + </div> + </span> </td> </tr> {% endfor %} diff --git a/administration/templates/registrasi_admin.html b/administration/templates/registrasi_admin.html new file mode 100644 index 0000000000000000000000000000000000000000..d4b1011cb70f5b9c1a8df0ebc4afdfb5fc857500 --- /dev/null +++ b/administration/templates/registrasi_admin.html @@ -0,0 +1,285 @@ +{% 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>Dasbor - Kelola 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="/administration/"> + <span>Verifikasi Materi</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="#"> + <span>Statistik Materi</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + <li class="nav-item"> + <a class="nav-link" href="/administration/setting/verification/"> + <span>Pengaturan Verifikasi</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/administration/setting/category/"> + <span>Pengaturan Kategori</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-kontributor/"> + <span>Kelola Kontributor</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-admin/"> + <span>Kelola Admin</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + </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="/dashboard/"> + <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> + {% if not user.default_profile_picture %} + <img class="img-profile rounded-circle" src="https://i.ibb.co/9wgPzyZ/default-image.png" alt="User profile picture"> + {% else %} + <img class="img-profile rounded-circle" src="{{ user.profile_picture.url }}" alt="User profile picture"> + {% endif %} + </a> + </li> + + </ul> + + </nav> + <!-- End of Topbar --> + + <!-- Begin Page Content --> + <div class="container-fluid"> + + <!-- Page Heading --> + <h1 class="h3 mb-2 text-gray-800">Registrasi Admin</h1> + <div class="form-margin"></div> + <div class="container admin-page"> + <div class="col-20"> + <form id="add_form" method="POST" novalidate enctype="multipart/form-data"> + {% csrf_token %} + <div class="col-md-6 admin-page"> + <div class="fieldWrapper"> + {{ form.name.errors }} + <label for="{{ form.subject.id_for_label }}">Nama:</label> + {{ form.name }} + </div> + </div> + <div class="col-md-6 admin-page"> + <div class="fieldWrapper"> + {{ form.instansi.errors }} + <label for="{{ form.subject.id_for_label }}">Instansi:</label> + {{ form.instansi }} + </div> + </div> + <div class="col-md-6 admin-page"> + <div class="fieldWrapper"> + {{ form.nik.errors }} + <label for="{{ form.subject.id_for_label }}">NIK:</label> + {{ form.nik }} + </div> + </div> + <div class="col-md-6 admin-page"> + <div class="fieldWrapper"> + {{ form.alamat.errors }} + <label for="{{ form.subject.id_for_label }}">Alamat:</label> + {{ form.alamat }} + </div> + </div> + <div class="col-md-6 admin-page"> + <div class="fieldWrapper"> + {{ form.email.errors }} + <label for="{{ form.subject.id_for_label }}">Email:</label> + {{ form.email }} + </div> + </div> + <div class="col-md-6 admin-page"> + <div class="fieldWrapper"> + {{ form.nomor_telpon.errors }} + <label for="{{ form.subject.id_for_label }}">Nomor Telepon:</label> + {{ form.nomor_telpon }} + </div> + </div> + <div class="col-md-6 admin-page"> + <div class="fieldWrapper"> + {{ form.password.errors }} + <label for="{{ form.subject.id_for_label }}">Kata Sandi:</label> + {{ form.password }} + </div> + </div> + <div class="col-md-6 admin-page"> + <div class="fieldWrapper"> + {{ form.password2.errors }} + <label for="{{ form.subject.id_for_label }}">Ulang Kata Sandi:</label> + {{ form.password2 }} + </div> + </div> + + <div class="form-margin"></div> + <div class="col-md-6 admin-page"> + <div class="d-flex flex-row"> + <div class="p-2"> + <button type="submit" class="btn btn-success btn-edit" style="background-color: #615CFD; border-color: #615CFD;">Simpan</button> + </div> + <div class="p-2"> + <a href="/administrasi/kelola-admin" class="btn btn-secondary">Kembali Ke Kelola Admin</a> + </div> + </div> + <div class="fieldWrapper"> + + </div> + </div> + </form> + </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/administration/templates/setting_verifikasi.html b/administration/templates/setting_verifikasi.html index 5ad45e3eff60d4731ac0665f3bec26fa7cdc0725..9add64f11f77106e2648ea259305aae1b894895e 100644 --- a/administration/templates/setting_verifikasi.html +++ b/administration/templates/setting_verifikasi.html @@ -51,17 +51,12 @@ </li> <li class="nav-item"> - <a class="nav-link" href="index.html"> - <span>Daftar Kontributor</span></a> - </li> - - <li class="nav-item"> - <a class="nav-link" href="index.html"> + <a class="nav-link" href="#"> <span>Statistik Materi</span></a> </li> <!-- Divider --> - <hr class="sidebar-divider"> + <hr class="sidebar-divider my-0"> <li class="nav-item"> <a class="nav-link" href="/administration/setting/verification/"> @@ -73,6 +68,22 @@ <span>Pengaturan Kategori</span></a> </li> + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-kontributor/"> + <span>Kelola Kontributor</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-admin/"> + <span>Kelola Admin</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + </ul> <!-- End of Sidebar --> diff --git a/administration/templates/settings.html b/administration/templates/settings.html index 2e057c2f4b998a247dcff76e4fbd589bdf499ada..8fc294bf2a0a21848c4a18b431fe9380d855d03f 100644 --- a/administration/templates/settings.html +++ b/administration/templates/settings.html @@ -51,17 +51,12 @@ </li> <li class="nav-item"> - <a class="nav-link" href="/administration/daftar-kontributor/"> - <span>Daftar Kontributor</span></a> - </li> - - <li class="nav-item"> - <a class="nav-link" href="index.html"> + <a class="nav-link" href="#"> <span>Statistik Materi</span></a> </li> <!-- Divider --> - <hr class="sidebar-divider"> + <hr class="sidebar-divider my-0"> <li class="nav-item"> <a class="nav-link" href="/administration/setting/verification/"> @@ -72,6 +67,22 @@ <a class="nav-link" href="/administration/setting/category/"> <span>Pengaturan Kategori</span></a> </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-kontributor/"> + <span>Kelola Kontributor</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-admin/"> + <span>Kelola Admin</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> </ul> <!-- End of Sidebar --> diff --git a/administration/templates/verif.html b/administration/templates/verif.html index 9f3b3252a33f11ddbe06429aee96a255ac35d258..ebb2ccc81b4547d21e91b40ef4ce330aedbbd341 100644 --- a/administration/templates/verif.html +++ b/administration/templates/verif.html @@ -51,17 +51,12 @@ </li> <li class="nav-item"> - <a class="nav-link" href="/administration/daftar-kontributor/"> - <span>Daftar Kontributor</span></a> - </li> - - <li class="nav-item"> - <a class="nav-link" href="index.html"> + <a class="nav-link" href="#"> <span>Statistik Materi</span></a> </li> <!-- Divider --> - <hr class="sidebar-divider"> + <hr class="sidebar-divider my-0"> <li class="nav-item"> <a class="nav-link" href="/administration/setting/verification/"> @@ -73,6 +68,22 @@ <span>Pengaturan Kategori</span></a> </li> + <!-- Divider --> + <hr class="sidebar-divider my-0"> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-kontributor/"> + <span>Kelola Kontributor</span></a> + </li> + + <li class="nav-item"> + <a class="nav-link" href="/administration/kelola-admin/"> + <span>Kelola Admin</span></a> + </li> + + <!-- Divider --> + <hr class="sidebar-divider my-0"> + </ul> <!-- End of Sidebar --> diff --git a/administration/tests.py b/administration/tests.py index 459213d929b315aeb7b5d21ebf59955a3b91ce50..c13d1bcf6542b7aa866d0aebde5d71e5e34dea6c 100644 --- a/administration/tests.py +++ b/administration/tests.py @@ -497,10 +497,10 @@ class SettingCategoriTest(TestCase): self.client.logout() -class ContributorListTest(TestCase): +class KelolaKontributorTest(TestCase): def setUp(self): self.client = Client() - self.url = '/administration/daftar-kontributor/' + self.url = '/administration/kelola-kontributor/' self.admin_credential = { "email": "admin@gov.id", "password": id_generator() @@ -555,17 +555,85 @@ class ContributorListTest(TestCase): self.client.login(**self.admin_credential) found = resolve(self.url) self.assertEqual(found.func.__name__, - views.ContributorListView.__name__) + views.KelolaKontributorView.__name__) def test_contributor_list_title(self): # Login self.client.login(**self.admin_credential) response = self.client.get(self.url) - self.assertContains(response, 'Dasbor Kontributor') + self.assertContains(response, 'Dasbor - Kelola Kontributor') self.assertNotContains(response, 'Fake Title') +class KelolaAdminTest(TestCase): + def setUp(self): + self.client = Client() + self.url = '/administration/kelola-admin/' + self.admin_credential = { + "email": "admin@gov.id", + "password": id_generator() + } + self.contributor_credential = { + "email": "kontributor@gov.id", + "password": id_generator() + } + self.admin = get_user_model().objects.create_user( + **self.admin_credential, name="Admin", is_admin=True) + self.contributor = get_user_model().objects.create_user( + **self.contributor_credential, name="Kontributor", is_contributor=True + ) + self.cover = SimpleUploadedFile( + "cover.jpg", + b"Test file" + ) + self.content = SimpleUploadedFile( + "content.txt", + b"Test file" + ) + Materi(title="Materi 1", author="Agas", uploader=self.contributor, + publisher="Kelas SC", descriptions="Deskripsi Materi 1", + status="PENDING", cover=self.cover, content=self.content).save() + self.materi1 = Materi.objects.first() + + def test_admin_list_access(self): + # Login + self.client.login(**self.admin_credential) + # Test + response = self.client.get(self.url) + self.assertEqual(response.status_code, 200) + # Logout + self.client.logout() + + def test_admin_list_contributor_access(self): + # Login + self.client.login(**self.contributor_credential) + # Test + response = self.client.get(self.url) + self.assertEqual(response.status_code, 403) + # Logout + self.client.logout() + + def test_admin_list_anonymous_access(self): + # Test + response = self.client.get(self.url) + self.assertEqual(response.status_code, 403) + + def test_admin_list_using_correct_template(self): + # Login + self.client.login(**self.admin_credential) + found = resolve(self.url) + self.assertEqual(found.func.__name__, + views.KelolaAdminView.__name__) + + def test_admin_list_title(self): + # Login + self.client.login(**self.admin_credential) + response = self.client.get(self.url) + + self.assertContains(response, 'Dasbor - Kelola Admin') + + self.assertNotContains(response, 'Fake Title') class ProfileContributorAdminTest(TestCase): def setUp(self): @@ -608,3 +676,123 @@ class ProfileContributorAdminTest(TestCase): found = resolve(self.url) self.assertEqual(found.func.__name__, views.ProfileContributorAdminView.__name__) + +class ProfileAdminAdministrationTest(TestCase): + def setUp(self): + self.client = Client() + self.url = '/administration/profil-admin/1/' + self.admin_credential = { + "email": "admin@gov.id", + "password": id_generator() + } + self.contributor_credential = { + "email": "kontributor@gov.id", + "password": id_generator() + } + self.admin = get_user_model().objects.create_user( + **self.admin_credential, name="Admin", is_admin=True) + self.contributor = get_user_model().objects.create_user( + **self.contributor_credential, name="Kontributor", is_contributor=True + ) + self.cover = SimpleUploadedFile( + "cover.jpg", + b"Test file" + ) + self.content = SimpleUploadedFile( + "content.txt", + b"Test file" + ) + Materi(title="Materi 1", author="Agas", uploader=self.contributor, + publisher="Kelas SC", descriptions="Deskripsi Materi 1", + status="PENDING", cover=self.cover, content=self.content).save() + self.materi1 = Materi.objects.first() + + + def test_profile_admin_administration_contributor_access(self): + # Login + self.client.login(**self.contributor_credential) + # Test + response = self.client.get(self.url) + self.assertEqual(response.status_code, 403) + # Logout + self.client.logout() + + def test_profile_admin_administration_anonymous_access(self): + # Test + response = self.client.get(self.url) + self.assertEqual(response.status_code, 403) + + def test_profile_admin_administration_using_correct_template(self): + # Login + self.client.login(**self.admin_credential) + found = resolve(self.url) + self.assertEqual(found.func.__name__, + views.ProfileAdminAdministrationView.__name__) + +class RegistrasiAdminTest(TestCase): + def setUp(self): + self.client = Client() + self.url = '/administration/kelola-admin/tambah/' + self.admin_credential = { + "email": "admin@gov.id", + "password": id_generator() + } + self.contributor_credential = { + "email": "kontributor@gov.id", + "password": id_generator() + } + self.admin = get_user_model().objects.create_user( + **self.admin_credential, name="Admin", is_admin=True) + self.contributor = get_user_model().objects.create_user( + **self.contributor_credential, name="Kontributor", is_contributor=True + ) + self.cover = SimpleUploadedFile( + "cover.jpg", + b"Test file" + ) + self.content = SimpleUploadedFile( + "content.txt", + b"Test file" + ) + Materi(title="Materi 1", author="Agas", uploader=self.contributor, + publisher="Kelas SC", descriptions="Deskripsi Materi 1", + status="PENDING", cover=self.cover, content=self.content).save() + self.materi1 = Materi.objects.first() + + def test_registrasi_admin_admin_access(self): + # Login + self.client.login(**self.admin_credential) + # Test + response = self.client.get(self.url) + self.assertEqual(response.status_code, 200) + # Logout + self.client.logout() + + def test_registrasi_admin_admin_contributor_access(self): + # Login + self.client.login(**self.contributor_credential) + # Test + response = self.client.get(self.url) + self.assertEqual(response.status_code, 403) + # Logout + self.client.logout() + + def test_registrasi_admin_admin_anonymous_access(self): + # Test + response = self.client.get(self.url) + self.assertEqual(response.status_code, 403) + + def test_registrasi_admin_using_correct_template(self): + # Login + self.client.login(**self.admin_credential) + found = resolve(self.url) + self.assertEqual(found.func.__name__, views.RegistrasiAdminView.__name__) + + def test_registrasi_admin_title(self): + # Login + self.client.login(**self.admin_credential) + response = self.client.get(self.url) + + self.assertContains(response, 'Dasbor - Kelola Admin') + + self.assertNotContains(response, 'Fake Title') \ No newline at end of file diff --git a/administration/urls.py b/administration/urls.py index e5bf2e32c045a9e0b181ab55fd4e59dcb7631549..97e8d0c073d1d17b4df750c9ac9393b0935dc5a7 100644 --- a/administration/urls.py +++ b/administration/urls.py @@ -1,6 +1,6 @@ from django.urls import path -from administration.views import VerificationView, DetailVerificationView, VerificationSettingView, CategorySettingView, ContributorListView, ProfileContributorAdminView +from administration.views import VerificationView, DetailVerificationView, VerificationSettingView, CategorySettingView, KelolaKontributorView, ProfileContributorAdminView, ProfileAdminAdministrationView, KelolaAdminView, RegistrasiAdminView, delete_admin, delete_contributor app_name = "administration" @@ -9,6 +9,12 @@ urlpatterns = [ path("detail-verif/<int:pk>/", DetailVerificationView.as_view()), path("setting/verification/", VerificationSettingView.as_view()), path("setting/category/", CategorySettingView.as_view()), - path("daftar-kontributor/", ContributorListView.as_view()), + path("kelola-kontributor/", KelolaKontributorView.as_view()), path("profil/<int:pk>/", ProfileContributorAdminView.as_view()), + path("profil-admin/<int:pk>/", ProfileAdminAdministrationView.as_view()), + path("kelola-admin/", KelolaAdminView.as_view()), + path("kelola-admin/tambah/", RegistrasiAdminView.as_view()), + path("hapus-admin/<int:pk>/", delete_admin), + path("hapus-kontributor/<int:pk>/", delete_contributor), + ] diff --git a/administration/views.py b/administration/views.py index f840e676f774f4214b53fb9c4d65a997e7654e88..a85f2ccab9b754fd4b775692a9a40d107e05dc6c 100644 --- a/administration/views.py +++ b/administration/views.py @@ -1,4 +1,5 @@ from django.core.exceptions import PermissionDenied +from django.contrib.auth.hashers import make_password from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404, render from django.views.generic import TemplateView @@ -6,7 +7,7 @@ from django.views.generic import TemplateView from app.models import Category, Materi from authentication.models import User -from administration.forms import CategoryForm, VerificationSettingForm +from administration.forms import CategoryForm, VerificationSettingForm, RegistrasiAdminForm from administration.models import VerificationReport, VerificationSetting @@ -155,17 +156,17 @@ class CategorySettingView(TemplateView): return self.render_to_response(context) -class ContributorListView(TemplateView): - template_name = "daftar_kontributor.html" +class KelolaKontributorView(TemplateView): + template_name = "kelola_kontributor.html" def dispatch(self, request, *args, **kwargs): if not request.user.is_authenticated or not request.user.is_admin: raise PermissionDenied(request) - return super(ContributorListView, self).dispatch(request, *args, **kwargs) + return super(KelolaKontributorView, self).dispatch(request, *args, **kwargs) def get_context_data(self, **kwargs): - context = super(ContributorListView, self).get_context_data(**kwargs) + context = super(KelolaKontributorView, self).get_context_data(**kwargs) context["users"] = User.objects.filter(is_contributor=True) return context @@ -173,6 +174,23 @@ class ContributorListView(TemplateView): context = self.get_context_data(**kwargs) return self.render_to_response(context) +class KelolaAdminView(TemplateView): + template_name = "kelola_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(KelolaAdminView, self).dispatch(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context = super(KelolaAdminView, self).get_context_data(**kwargs) + context['users_list'] = User.objects.filter(is_admin=True) + return context + + def get(self, request, *args, **kwargs): + context = self.get_context_data(**kwargs) + return self.render_to_response(context) class ProfileContributorAdminView(TemplateView): template_name = "detail_kontri_admin.html" @@ -190,3 +208,59 @@ class ProfileContributorAdminView(TemplateView): context = self.get_context_data(**kwargs) context["user"] = get_object_or_404(User, pk=kwargs["pk"]) return self.render_to_response(context=context) + +class ProfileAdminAdministrationView(TemplateView): + template_name = "detail_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(ProfileAdminAdministrationView, self).dispatch(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + return super().get_context_data(**kwargs) + + def get(self, request, *args, **kwargs): + context = self.get_context_data(**kwargs) + context["user"] = get_object_or_404(User, pk=kwargs["pk"]) + return self.render_to_response(context=context) + +class RegistrasiAdminView(TemplateView): + template_name = "registrasi_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(RegistrasiAdminView, self).dispatch(request, *args, **kwargs) + + def get_context_data(self, **kwargs): + context = super(RegistrasiAdminView, self).get_context_data(**kwargs) + context["form"] = RegistrasiAdminForm + return context + + def get(self, request, *args, **kwargs): + context = self.get_context_data(**kwargs) + return self.render_to_response(context=context) + + def post(self, request, *args, **kwargs): + data = request.POST.copy() + form = RegistrasiAdminForm(request.POST) + if form.is_valid(): + new_user = form.save(commit=False) + new_user.password = make_password(data["password"]) + new_user.is_admin = True + new_user.save() + return HttpResponseRedirect("/administration/kelola-admin/") + else: + context = self.get_context_data(**kwargs) + context["form"] = form + return self.render_to_response(context) + +def delete_admin(request, *args, **kwargs): + User.objects.filter(pk=kwargs["pk"]).delete() + return HttpResponseRedirect("/administration/kelola-admin/") + +def delete_contributor(request, *args, **kwargs): + User.objects.filter(pk=kwargs["pk"]).delete() + return HttpResponseRedirect("/administration/kelola-kontributor/") \ No newline at end of file diff --git a/app/templates/app/detail_materi.html b/app/templates/app/detail_materi.html index bb91484a398d10bdba812107fbc9e633c46514b2..eda741b1767a78582547ca9706575183989fcf8d 100644 --- a/app/templates/app/detail_materi.html +++ b/app/templates/app/detail_materi.html @@ -43,7 +43,11 @@ <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> + {% if not user.default_profile_picture %} + <img class="img-profile rounded-circle" src="https://i.ibb.co/9wgPzyZ/default-image.png" alt="User profile picture"> + {% else %} <img class="img-profile rounded-circle" src="{{ user.profile_picture.url }}" alt="User profile picture"> + {% endif %} </a> </li> {% endif %} diff --git a/app/templates/dashboard.html b/app/templates/dashboard.html index 2dca78f032b17ca1af6382051e932351ab321e01..fbb28fe25de112629a78338c7f5a61c313d419cd 100644 --- a/app/templates/dashboard.html +++ b/app/templates/dashboard.html @@ -155,7 +155,7 @@ <tr> <td>{{materi.title}}</td> <td>{{materi.author}}</td> - <td>{{materi.status}}</td> + <td>{{materi.get_status_display}}</td> <td class="verif-buttons"> <a href="/materi/{{materi.id}}/" class="accept-button" style="background-color:#4e73df">Detail diff --git a/authentication/templates/login_admin.html b/authentication/templates/login_admin.html index b5bce529229dab01f053404646575ace9b3cebc6..ca2cad7d4f40dea55792e3d7eac14320972b4b61 100644 --- a/authentication/templates/login_admin.html +++ b/authentication/templates/login_admin.html @@ -75,6 +75,16 @@ <br> </br> + <div class="flex-sb-m w-full p-t-3 p-b-32"> + + <div> + <a href="/registrasi/admin/" class="txt1"> + Belum mendaftar? klik di sini + </a> + </div> + + </div> + <div class="container-login100-form-btn"> <button class="login100-form-btn" type="submit"> Login diff --git a/register/templates/index_admin.html b/register/templates/index_admin.html index 8d913419e1f256e7688859f081ec2263d9faad87..0e9e3a8891ac7fc58ceaf6c972c03ccaf862c8f9 100644 --- a/register/templates/index_admin.html +++ b/register/templates/index_admin.html @@ -116,23 +116,5 @@ </div> </div> </main> - <!--===============================================================================================--> - <script src="../static/vendor/jquery/jquery-3.2.1.min.js"></script> - <!--===============================================================================================--> - <script src="../static/vendor/animsition/js/animsition.min.js"></script> - <!--===============================================================================================--> - <script src="../static/vendor/bootstrap/js/popper.js"></script> - <script - src="../static/../static/../static/../static/../static/../static/vendor/bootstrap/js/bootstrap.min.js"></script> - <!--===============================================================================================--> - <script src="../static/../static/../static/../static/../static/vendor/select2/select2.min.js"></script> - <!--===============================================================================================--> - <script src="../static/../static/../static/../static/vendor/daterangepicker/moment.min.js"></script> - <script src="../static/../static/../static/vendor/daterangepicker/daterangepicker.js"></script> - <!--===============================================================================================--> - <script src="../static/../static/vendor/countdowntime/countdowntime.js"></script> - <!--===============================================================================================--> - <script src="../static/js/login.js"></script> - <script src="../static/js/navbar.js"></script> </body> </html> \ No newline at end of file diff --git a/staticfiles/css/button.css b/staticfiles/css/button.css index ebe34538763a0ffc10be7a48c945bf977b9b491e..d59f67d5128e07398745b7fccb68e8734f83b525 100755 --- a/staticfiles/css/button.css +++ b/staticfiles/css/button.css @@ -3,7 +3,7 @@ } .accept-button { - background-color: #28a745; + background-color: #4e73df; border-radius: .25rem; border: none; box-shadow: 2px; @@ -19,6 +19,7 @@ box-shadow: 2px; color: white; margin-left: 5px; + padding: 0 5px; } .materi-data { @@ -96,4 +97,18 @@ .img-profile { width: 10vw; height: 10vw; +} + +.button-decoration:hover, +.button-decoration:active { + text-decoration: none; + color: white; +} + +.button-header { + font-weight: bold; +} + +.admin-page { + padding-left: 0; } \ No newline at end of file