diff --git a/administration/forms.py b/administration/forms.py
index 4d6da0c5e20705a6e5945754cc04eb17b81b8196..3c350d456e8a335027f923edb5c008e01af802bc 100644
--- a/administration/forms.py
+++ b/administration/forms.py
@@ -146,3 +146,15 @@ class EditAdminStatusForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(EditAdminStatusForm, self).__init__(*args, **kwargs)
+
+
+class EditKontributorStatusForm(forms.ModelForm):
+
+ is_active = forms.BooleanField(required=False)
+
+ class Meta:
+ model = User
+ fields = ["is_active"]
+
+ def __init__(self, *args, **kwargs):
+ super(EditKontributorStatusForm, self).__init__(*args, **kwargs)
diff --git a/administration/templates/edit_kontributor.html b/administration/templates/edit_kontributor.html
new file mode 100644
index 0000000000000000000000000000000000000000..47e16ef164f42dc12bc70358741ae0ca3a566c9d
--- /dev/null
+++ b/administration/templates/edit_kontributor.html
@@ -0,0 +1,27 @@
+{% extends 'administration/base_administrasi.html' %}
+{% load static %}
+
+{% block content %}
+
+{% endblock %}
\ No newline at end of file
diff --git a/administration/templates/kelola_kontributor.html b/administration/templates/kelola_kontributor.html
index 21b94fc5bc769c604ed0e78dddcc854b05f8dc8b..9fee87a117739e6a0c9b1c6f06b6976a87d7a621 100644
--- a/administration/templates/kelola_kontributor.html
+++ b/administration/templates/kelola_kontributor.html
@@ -23,6 +23,7 @@
Nama
NIK
Instansi
+ Status
Detail
@@ -31,6 +32,7 @@
Nama
NIK
Instansi
+ Status
Detail
@@ -41,8 +43,10 @@
{{ user.name }}
{{ user.nik }}
{{ user.instansi }}
+ {% if user.is_active %} Active {% else %} Inactive {% endif %}
+ Edit
Detail
Hapus
diff --git a/administration/tests.py b/administration/tests.py
index eedbf4c10ca54a788845f82f760fad8496430c14..6ba9e50b788c568dd4ce4661922f25283005647b 100644
--- a/administration/tests.py
+++ b/administration/tests.py
@@ -5,7 +5,7 @@ from django.urls import resolve
from administration import models, views
from administration.utils import id_generator
-from administration.forms import EditAdminStatusForm
+from administration.forms import EditAdminStatusForm, EditKontributorStatusForm
from app.models import Category, Materi, LaporanMateri
from authentication.models import User
from bs4 import BeautifulSoup
@@ -1577,3 +1577,85 @@ class RejectReportTest(TestCase):
response = self.client.get(self.url + '100/')
self.assertEqual(response.status_code, 404)
self.client.logout()
+
+
+class EditKontributorStatusFormTests(TestCase):
+ def test_set_active_admin(self):
+ form = EditKontributorStatusForm(data={"is_active": True})
+
+ self.assertEqual(form.is_valid(), True)
+
+ def test_set_inactive_admin(self):
+ form = EditKontributorStatusForm(data={"is_active": False})
+
+ self.assertEqual(form.is_valid(), True)
+
+class EditKontributorStatusTests(TestCase):
+
+ def setUp(self):
+ self.client = Client()
+ self.kontrib_credential = {
+ "email": "kontrib@gov.id",
+ "password": id_generator()
+ }
+ self.admin_credential = {
+ "email": "admin@gov.id",
+ "password": id_generator()
+ }
+ self.kontrib = get_user_model().objects.create_user(
+ **self.kontrib_credential, name="Kontributor", is_contributor=True)
+ self.admin = get_user_model().objects.create_user(
+ **self.admin_credential, name="Admin", is_admin=True)
+
+ self.dummy_kontributor = User(name='dummy_kontributor', is_contributor=True, email="dummy_kontributor@example.com")
+ self.dummy_kontributor.save()
+
+ self.dummy_admin = User(name='dummy_admin', is_admin=True, email="dummy_admin@example.com")
+ self.dummy_admin.save()
+
+ self.edit_url_dummy_admin = self.url_generator_edit_kontributor(self.dummy_admin.id)
+ self.edit_url_dummy_kontributor = self.url_generator_edit_kontributor(self.dummy_kontributor.id)
+
+ def url_generator_edit_kontributor(self, id):
+ return "/administration/setting/kontributor/" + str(id) + EDIT_ENDPOINT
+
+
+ def test_get_edit_kontributor_html_content(self):
+ self.client.login(**self.admin_credential)
+ response = self.client.get(self.edit_url_dummy_kontributor)
+ self.assertContains(response, self.dummy_kontributor.name)
+
+ def test_cannot_edit_set_active_admin_as_admin(self):
+ self.client.login(**self.admin_credential)
+ self.client.get(self.edit_url_dummy_admin)
+ response = self.client.post(self.edit_url_dummy_admin, {"is_active": "on"})
+ self.assertEqual(response.status_code, 403)
+
+ def test_edit_set_active_kontributor_as_admin(self):
+ self.dummy_kontributor.is_active = False
+ self.client.login(**self.admin_credential)
+ self.client.get(self.edit_url_dummy_kontributor)
+ response = self.client.post(self.edit_url_dummy_kontributor, {"is_active": "on"})
+ self.dummy_kontributor.refresh_from_db()
+
+ self.assertEqual(response.status_code, 302)
+ self.assertEqual(self.dummy_kontributor.is_active, True)
+
+
+ def test_edit_set_inactive_kontributor_as_admin(self):
+ self.dummy_kontributor.is_active = True
+ self.client.login(**self.admin_credential)
+ self.client.get(self.edit_url_dummy_kontributor)
+ response = self.client.post(self.edit_url_dummy_kontributor, {"is_active": "false"})
+ self.dummy_kontributor.refresh_from_db()
+
+ self.assertEqual(response.status_code, 302)
+ self.assertEqual(self.dummy_kontributor.is_active, False)
+
+ def test_cannot_access_edit_page_as_user(self):
+ self.client.login(**self.kontrib_credential)
+ response = self.client.get(self.edit_url_dummy_admin)
+
+ self.assertEqual(response.status_code, 403)
+
+
diff --git a/administration/urls.py b/administration/urls.py
index 22ba7a66b15ddab39b4e480104eb97d9f11fe12d..339e4d590476ead7397f0bc246060d0f690b0af2 100644
--- a/administration/urls.py
+++ b/administration/urls.py
@@ -9,6 +9,7 @@ from administration.views import VerificationView, DetailVerificationView, \
delete_verification, StatisticsView, \
StatisticApiView, EditCategoryView, \
EditAdminStatusView, delete_category, \
+ EditKontributorStatusView, \
generatedummy, KelolaMateriView, \
LaporanMateriView, LaporanMateriDetailView, \
tolak_laporan, blok_materi
@@ -35,6 +36,8 @@ urlpatterns = [
path("kelola-admin/tambah/", RegistrasiAdminView.as_view()),
path("setting/admin//edit",
EditAdminStatusView.as_view(), name="edit-admin-status"),
+ path("setting/kontributor//edit",
+ EditKontributorStatusView.as_view(), name="edit-admin-status"),
path("hapus-admin//", delete_admin),
path("hapus-kontributor//", delete_contributor),
path("kelola-materi/", KelolaMateriView.as_view()),
diff --git a/administration/views.py b/administration/views.py
index 8c96ead8fc43209b0e2db647ddb6aa483667d1f2..65519deb8353157a6cce53d405d1936f1c78dc72 100644
--- a/administration/views.py
+++ b/administration/views.py
@@ -7,7 +7,7 @@ from django.views.generic import TemplateView, View
from django.contrib import messages
from django.utils import timezone
from administration.models import VerificationReport, VerificationSetting, DeletionHistory
-from administration.forms import CategoryForm, VerificationSettingForm, RegistrasiAdminForm, PeriodForm, EditAdminStatusForm
+from administration.forms import CategoryForm, VerificationSettingForm, RegistrasiAdminForm, PeriodForm, EditAdminStatusForm, EditKontributorStatusForm
from administration.services import StatisticService, DetailVerificationService, LaporanMateriService
from app.models import Category, Materi, ViewStatistics, DownloadStatistics, Comment, Like, LaporanMateri
from authentication.models import User
@@ -417,6 +417,36 @@ class EditAdminStatusView(TemplateView):
form.save()
return HttpResponseRedirect(ADMINISTRATION_MANAGEMENT)
+
+class EditKontributorStatusView(TemplateView):
+ template_name = "edit_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(EditKontributorStatusView, self).dispatch(request, *args, **kwargs)
+
+ def get_context_data(self, **kwargs):
+ context = super(EditKontributorStatusView, self).get_context_data(**kwargs)
+ context["page_title"] = "Admin Status"
+ context["item"] = User.objects.get(id=kwargs["pk"])
+ context["form"] = EditKontributorStatusForm(instance=context["item"])
+ 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):
+ user_object = self.get_context_data(**kwargs)["item"]
+ if not user_object.is_contributor:
+ raise PermissionDenied(request)
+ form = EditKontributorStatusForm(
+ request.POST, instance=user_object)
+ form.save()
+ return HttpResponseRedirect('/administration/kelola-kontributor/')
+
+
def delete_admin(request, *args, **kwargs):
if not request.user.is_authenticated or not request.user.is_admin:
raise PermissionDenied(request)
@@ -457,7 +487,7 @@ def delete_verification(request, *args, **kwargs):
pk=kwargs["pk_verification"])
queryObject.archived = True
queryObject.description = "Telah dihapus pada " + \
- str(datetime.now().strftime("%m/%d/%Y, %H:%M:%S")) + " WIB"
+ str(timezone.now().strftime("%m/%d/%Y, %H:%M:%S")) + " WIB"
queryObject.archived_by = request.user
queryObject.save()
messages.success(request, "Point verifikasi berhasil dihapus")
@@ -473,7 +503,7 @@ def delete_category(request, *args, **kwargs):
pk=kwargs["pk_category"])
queryObject.archived = True
queryObject.description = "Telah dihapus pada " + \
- str(datetime.now().strftime("%m/%d/%Y, %H:%M:%S")) + " WIB"
+ str(timezone.now().strftime("%m/%d/%Y, %H:%M:%S")) + " WIB"
queryObject.archived_by = request.user
queryObject.save()
messages.success(request, "Kategori " +
diff --git a/register/services.py b/register/services.py
index 5786c9a6bd1abbefbeb0ca27adf666404e2e734f..603855b114790a85861dc06a4200f2c777256cd9 100644
--- a/register/services.py
+++ b/register/services.py
@@ -16,6 +16,7 @@ class RegistrationService:
new_user.password = make_password(data["password"])
new_user.is_contributor = True
+ new_user.is_active = False
new_user.save()
create_result["user"] = new_user
except ValidationError as e:
diff --git a/register/templates/index.html b/register/templates/index.html
index 97cf8e78bff9ce666a5a7aefb9b7fca817352812..59038d68afae38d6f70fe4e4d419237c5fcbe6ce 100644
--- a/register/templates/index.html
+++ b/register/templates/index.html
@@ -110,6 +110,11 @@
+
+ {% if message %}
+ {{ message }}
+
+ {% endif %}
diff --git a/register/views.py b/register/views.py
index 97c4e766c7c983141fc4ac3750fa88a43efeb28b..3d8112fef3563207ce1cdb5b294e6ff26c340acc 100644
--- a/register/views.py
+++ b/register/views.py
@@ -19,13 +19,14 @@ class index(TemplateView):
form = UserForm(request.POST)
if form.is_valid():
create_user_service = RegistrationService.create_new_contributor(data, form)
+ context = self.get_context_data(**kwargs)
+
if not create_user_service["success"]:
- context = self.get_context_data(**kwargs)
context["form"] = create_user_service["form"]
return self.render_to_response(context)
- login(request, create_user_service["user"])
- return HttpResponseRedirect("/sukses-kontributor/")
+ context["message"] = "Registrasi Berhasil. Mohon tunggu approval dari staf kami."
+ return self.render_to_response(context)
else:
context = self.get_context_data(**kwargs)
context["form"] = form