feature/visibility #32

Merged
s470631 merged 3 commits from feature/visibility into master 2022-04-09 13:04:09 +02:00
12 changed files with 112 additions and 11 deletions

View File

@ -16,5 +16,5 @@ class CategoryModelViewSet(viewsets.ModelViewSet):
def category(request, category_name): def category(request, category_name):
context = {} context = {}
context['name'] = category_name context['name'] = category_name
context['tests'] = Test.objects.filter(category=category_name) context['tests'] = Test.objects.filter(category=category_name, visible=True)
return render(request, 'category.html', context) return render(request, 'category.html', context)

View File

@ -9,7 +9,8 @@ def home(request):
context = {} context = {}
# TODO replace # TODO replace
#context['tests'] = Test.objects.filter(owner=request.user) #context['tests'] = Test.objects.filter(owner=request.user)
context['tests'] = Test.objects.all #context['tests'] = Test.objects.all
context['tests'] = Test.objects.filter(visible=True)
return render(request, 'home.html', context) return render(request, 'home.html', context)

View File

@ -11,6 +11,13 @@
<input id="name" type="text" name="name" value="Nowy test"> <input id="name" type="text" name="name" value="Nowy test">
<br> <br>
<br> <br>
<label for="visible">Widzialność: </label>
<select name="visible" id="visible">
<option value="public">Publiczny</option>
<option value="private">Prywatny</option>
</select>
<br>
<br>
<label for="category">Kategoria: </label> <label for="category">Kategoria: </label>
<select name="category" id="category"> <select name="category" id="category">
<option value="JezykPolski">Język Polski</option> <option value="JezykPolski">Język Polski</option>
@ -35,7 +42,7 @@
<br> <br>
<br> <br>
<button class="defaultButton"> <button class="defaultButton">
<a href='' onclick="this.href='questions?passing='+document.getElementById('passing').value + '&name=' +document.getElementById('name').value + '&category='+document.getElementById('category').value+'&number_of_questions='+document.getElementById('questions').value">Dodaj pytania</a> <a href='' onclick="this.href='questions?passing='+document.getElementById('passing').value + '&name=' +document.getElementById('name').value + '&category='+document.getElementById('category').value+'&number_of_questions='+document.getElementById('questions').value+'&visible='+document.getElementById('visible').value">Dodaj pytania</a>
</button> </button>
</form> </form>
</div> </div>

View File

@ -88,6 +88,15 @@
<a href='' onclick="this.href='editName?name='+document.getElementById('name').value">Zmien nazwe</a> <a href='' onclick="this.href='editName?name='+document.getElementById('name').value">Zmien nazwe</a>
</button> </button>
</div> </div>
<label for="actual_visible">Aktualna widzialność: {% if test.visible %}Publiczny{% else %}Prywatny{% endif %}</label><br>
<label for="visible">Widzialność: </label>
<select name="visible" id="visible">
<option value="public">Publiczny</option>
<option value="private">Prywatny</option>
</select>
<button class="defaultButton">
<a href='' onclick="this.href='editVisible?visible='+document.getElementById('visible').value">Zmien widzialność testu</a>
</button>
</div> </div>
<form method="post" novalidate> <form method="post" novalidate>
{% for question in test.questions.all %} {% for question in test.questions.all %}

View File

@ -20,7 +20,8 @@ class TestManager(Manager):
name=kwargs.get("name"), name=kwargs.get("name"),
passing_score=kwargs.get("passing_score"), passing_score=kwargs.get("passing_score"),
category=category, category=category,
created_by=kwargs.get("user") created_by=kwargs.get("user"),
visible=kwargs.get("visible")
) )
for question in questions: for question in questions:
question_instance = Question.objects.create( question_instance = Question.objects.create(

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.9 on 2022-03-30 19:38
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('trials', '0011_auto_20220123_1633'),
]
operations = [
migrations.AddField(
model_name='test',
name='unvisible',
field=models.BooleanField(default=False),
),
]

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.9 on 2022-03-30 20:42
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('trials', '0012_test_unvisible'),
]
operations = [
migrations.RenameField(
model_name='test',
old_name='unvisible',
new_name='invisible',
),
]

View File

@ -0,0 +1,22 @@
# Generated by Django 3.2.9 on 2022-04-09 10:24
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('trials', '0013_rename_unvisible_test_invisible'),
]
operations = [
migrations.RemoveField(
model_name='test',
name='invisible',
),
migrations.AddField(
model_name='test',
name='visible',
field=models.BooleanField(default=True),
),
]

View File

@ -14,6 +14,7 @@ class Test(models.Model):
# related_name="tests" # related_name="tests"
# ) # )
category = models.CharField(max_length=100) category = models.CharField(max_length=100)
visible = models.BooleanField(default=True)
created_by = models.ForeignKey( created_by = models.ForeignKey(
"users.User", "users.User",
null=True, null=True,

View File

@ -17,6 +17,7 @@ class TestSerializer(serializers.ModelSerializer):
"name", "name",
"passing_score", "passing_score",
"questions", "questions",
"visible",
"category", "category",
) )

View File

@ -18,6 +18,7 @@ urlpatterns = [
path('<int:test_id>/remove-question', RemoveQuestionFromExistingTest.as_view()), path('<int:test_id>/remove-question', RemoveQuestionFromExistingTest.as_view()),
path('question/<int:question_id>/edit', EditQuestionTemplateView.as_view()), path('question/<int:question_id>/edit', EditQuestionTemplateView.as_view()),
path('<int:test_id>/editName', editName, name="editName"), path('<int:test_id>/editName', editName, name="editName"),
path('<int:test_id>/editVisible', editName, name="editVisible"),
path('<int:test_id>/remove', deleteTest, name="deleteTest"), path('<int:test_id>/remove', deleteTest, name="deleteTest"),
# path('delete', deleteTest, name="deleteTest"), # path('delete', deleteTest, name="deleteTest"),
path('add/test', addTest, name="newTest"), path('add/test', addTest, name="newTest"),

View File

@ -24,9 +24,17 @@ def addTest(request):
return render(request, 'createTest.html') return render(request, 'createTest.html')
def is_visible(visible):
if visible =="public":
return True
else:
return False
def addQuestions(request, **kwargs): def addQuestions(request, **kwargs):
if request.POST: if request.POST:
name = request.GET.get("name") name = request.GET.get("name")
visible = is_visible(request.GET.get("visible"))
passing = request.GET.get("passing") passing = request.GET.get("passing")
category = request.GET.get("category") category = request.GET.get("category")
number_of_questions = request.GET.get("number_of_questions") number_of_questions = request.GET.get("number_of_questions")
@ -69,7 +77,8 @@ def addQuestions(request, **kwargs):
answer4 answer4
] ]
}) })
Test.objects.create(name=name, passing_score=passing, category=category, questions=questions, user=user) Test.objects.create(name=name, passing_score=passing, category=category, questions=questions, user=user,
visible=visible)
return redirect('home') return redirect('home')
return render(request, 'addQuestions.html') return render(request, 'addQuestions.html')
@ -113,7 +122,8 @@ class AddQuestionToExistingTest(TemplateView):
] ]
}) })
description = dict(request.POST)["desc"][0] description = dict(request.POST)["desc"][0]
Question.objects.addQuestionToExistingTest(name=description, answers=answers, test=Test.objects.get(id=kwargs["test_id"])) Question.objects.addQuestionToExistingTest(name=description, answers=answers,
test=Test.objects.get(id=kwargs["test_id"]))
return redirect(f'/tests/{kwargs["test_id"]}/edit') return redirect(f'/tests/{kwargs["test_id"]}/edit')
@ -134,7 +144,6 @@ class RemoveQuestionFromExistingTest(TemplateView):
return redirect(f'/tests/{kwargs["test_id"]}/edit') return redirect(f'/tests/{kwargs["test_id"]}/edit')
def myTests(request): def myTests(request):
context = {} context = {}
user = request.user.id user = request.user.id
@ -174,7 +183,6 @@ def editTest(request):
class EditTestTemplateView(TemplateView): class EditTestTemplateView(TemplateView):
template_name = settings.BASE_DIR + f"/templates/editTest.html" template_name = settings.BASE_DIR + f"/templates/editTest.html"
def get_queryset(self): def get_queryset(self):
@ -247,7 +255,19 @@ def deleteTest(request, test_id):
Test.objects.filter(id=test_id).delete() Test.objects.filter(id=test_id).delete()
return redirect('myTests') return redirect('myTests')
def editName(request, test_id): def editName(request, test_id):
new_visible = request.GET["visible"]
if new_visible == "public":
new_visible = True
else:
new_visible = False
test = Test.objects.get(id=test_id)
test.visible = new_visible
test.save()
return redirect(f'/tests/{test_id}/edit')
def editVisible(request, test_id):
new_name = request.GET["name"] new_name = request.GET["name"]
test = Test.objects.get(id=test_id) test = Test.objects.get(id=test_id)
test.name = new_name test.name = new_name
@ -310,12 +330,12 @@ class TestTemplateView(TemplateView):
"points": score, "points": score,
"max": max, "max": max,
"passing": test.passing_score, "passing": test.passing_score,
"percentage": int(score/max * 100) "percentage": int(score / max * 100)
} }
SolvedTest.objects.create( SolvedTest.objects.create(
score=score, score=score,
max=max, max=max,
percentage=int(score/max * 100), percentage=int(score / max * 100),
user=request.user, user=request.user,
test=test test=test
) )
@ -323,6 +343,7 @@ class TestTemplateView(TemplateView):
template = get_template(template_name) template = get_template(template_name)
return HttpResponse(template.render(context)) return HttpResponse(template.render(context))
def testView(request): def testView(request):
permission_classes = [] permission_classes = []
template_name = settings.BASE_DIR + f"/templates/generic_test.html" template_name = settings.BASE_DIR + f"/templates/generic_test.html"
@ -367,6 +388,7 @@ class TestValidateAPIView(views.APIView):
"points": score "points": score
}) })
class TestResultView(TemplateView): class TestResultView(TemplateView):
permission_classes = [] permission_classes = []
template_name = settings.BASE_DIR + f"/templates/result.html" template_name = settings.BASE_DIR + f"/templates/result.html"