def create_group(request): tmp = check_admin(request) if tmp != True: return tmp message = '' form = CreateGroupForm() if request.method == 'POST': form = CreateGroupForm(request.POST) if form.is_valid(): pattern = compile('^[a-zA-Z0-9]+$') if not pattern.match(form.cleaned_data['shortname']): return HttpResponse("Niewłaściwa nazwa skrótu konkursu.") try: collision = Group.objects.get(shortname=form.cleaned_data['shortname']) return HttpResponse("Nie można utworzyć dwóch konkursów o takim samym skrócie") except Group.DoesNotExist: group = Group(name=form.cleaned_data['name'], shortname=form.cleaned_data['shortname'], pub_date=timezone.now()) group.open = (form.cleaned_data['name']=="True") group.save() request.session['group'] = group.shortname return HttpResponseRedirect('/problems/list/' + group.shortname) else: form = CreateGroupForm() message = "chyba coś się stało źle" context = {'form': form, 'message': message} return render(request, 'problems/create_group.html', context)
def delete_group(request, shortname): tmp = check_admin(request) if tmp != True: return tmp try: group = Group.objects.get(shortname=shortname) except Group.DoesNotExist: return HttpResponse("Nie istnieje taki konkurs") if shortname == "MAIN": return HttpResponse("Nie można usunąć głównego konkursu") if request.method == "POST": form = DeletionForm(request.POST) if form.is_valid(): if form.cleaned_data["name"] == group.name: group.delete() request.session["group"] = "MAIN" return HttpResponseRedirect("/problems/groups/") else: return HttpResponse("Błąd potwierdzenia") else: return HttpResponse("Błąd potwierdzenia") else: form = DeletionForm() return render(request, "problems/delete_group.html", {"group": group, "form": form})
def delete_problem(request, problem_id): tmp = check_admin(request) if tmp != True: return tmp try: problem = Problem.objects.get(id=problem_id) except TestProgram.DoesNotExist: return HttpResponse("Nie istnieje taki problem") if request.method == 'POST': form = DeletionForm(request.POST) if form.is_valid(): if form.cleaned_data['name'] == problem.name: shortname = problem.group.shortname problem.delete() return HttpResponseRedirect('/problems/list/'+shortname) else: return HttpResponse("Błąd potwierdzenia") else: return HttpResponse("Błąd potwierdzenia") else: form = DeletionForm() return render(request, 'problems/delete_problem.html', {'problem': problem, 'form': form})
def delete_group(request, shortname): tmp = check_admin(request) if tmp != True: return tmp try: group = Group.objects.get(shortname=shortname) except Group.DoesNotExist: return HttpResponse("Nie istnieje taki konkurs") if shortname == 'MAIN': return HttpResponse("Nie można usunąć głównego konkursu") if request.method == 'POST': form = DeletionForm(request.POST) if form.is_valid(): if form.cleaned_data['name'] == group.name: group.delete() request.session['group'] = 'MAIN' return HttpResponseRedirect('/problems/groups/') else: return HttpResponse("Błąd potwierdzenia") else: return HttpResponse("Błąd potwierdzenia") else: form = DeletionForm() return render(request, 'problems/delete_group.html', {'group': group, 'form': form})
def create(request): tmp = check_admin(request) if tmp != True: return tmp shortname = "MAIN" if request.session["group"] != "": shortname = request.session["group"] try: group = Group.objects.get(shortname=shortname) except Group.DoesNotExist: return HttpResponseRedirect("/problems/groups/") message = "" form = CreateForm() if request.method == "POST": form = CreateForm(request.POST, request.FILES) if form.is_valid(): try: last = Problem.objects.latest("id") except Problem.DoesNotExist: last = None next_id = 1 if last is not None: next_id = last.id + 1 my_file = request.FILES["pdf_file"] if my_file.content_type != "application/pdf": return HttpResponse("Niedozwolony format pliku. Tylko PDF.") if my_file.size > 20971520: # 20 MB return HttpResponse("Maksymalny rozmiar to 20MB.") filename = settings.MY_DIR + "/static/pdf/problem" + str(next_id) + ".pdf" with open(filename, "wb+") as destination: for chunk in my_file.chunks(): destination.write(chunk) prob = Problem( group=group, name=form.cleaned_data["name"], user=request.user, pub_date=timezone.now(), pdf_file_link=filename, ) prob.save() group.problems = len(Problem.objects.filter(group=group)) group.save() return HttpResponseRedirect("/problems/list/" + group.shortname) else: form = CreateForm() message = "chyba coś się stało źle" context = {"form": form, "message": message, "group": group} return render(request, "problems/create.html", context)
def create(request): tmp = check_admin(request) if tmp != True: return tmp shortname = "MAIN" if request.session['group'] != "": shortname = request.session['group'] try: group = Group.objects.get(shortname=shortname) except Group.DoesNotExist: return HttpResponseRedirect('/problems/groups/') message = '' form = CreateForm() if request.method == 'POST': form = CreateForm(request.POST, request.FILES) if form.is_valid(): try: last = Problem.objects.latest('id') except Problem.DoesNotExist: last = None next_id = 1 if last is not None: next_id = last.id + 1 my_file = request.FILES['pdf_file'] if my_file.content_type != 'application/pdf': return HttpResponse("Niedozwolony format pliku. Tylko PDF.") if my_file.size > 20971520: # 20 MB return HttpResponse("Maksymalny rozmiar to 20MB.") if not path.exists(settings.MY_PATH+'/static/pdf'): makedirs(settings.MY_PATH+'/static/pdf') filename = '/static/pdf/problem' + str(next_id) + '.pdf' with open(settings.MY_PATH+filename, 'wb+') as destination: for chunk in my_file.chunks(): destination.write(chunk) prob = Problem(group=group, name=form.cleaned_data['name'], user=request.user, pub_date=timezone.now(), pdf_file_link=filename) prob.save() group.problems = len(Problem.objects.filter(group=group)) group.save() return HttpResponseRedirect('/problems/list/'+group.shortname) else: form = CreateForm() message = "chyba coś się stało źle" context = {'form': form, 'message': message, 'group': group} return render(request, 'problems/create.html', context)
def delete_test(request, test_id): tmp = check_admin(request) if tmp != True: return tmp try: test_program = TestProgram.objects.get(id=test_id) problem = test_program.problem test_program.delete() return HttpResponseRedirect('/problems/%s' % problem.id) except TestProgram.DoesNotExist: return HttpResponse("Nie istnieje taki problem")
def send_privileges(request, shortname): tmp = check_admin(request) if tmp != True: return tmp try: group = Group.objects.get(shortname=shortname) except Group.DoesNotExist: return HttpResponse("Nie istnieje taki konkurs") form = SendPrivilegesForm() message = "" if request.method == "POST": form = SendPrivilegesForm(request.POST) if form.is_valid(): emails = form.cleaned_data["emails"].lower() list_emails = emails.splitlines() for email in list_emails: print(email + "###") try: validate_email(email) except ValidationError as e: message += "pomijam: " + email + " <br />" else: try: privilege = Privilege.objects.get(group=group, sent=email) message += "pomijam: " + email + " (już ma zaproszenie ) <br />" except Privilege.DoesNotExist: privilege = Privilege(group=group, hash=uuid4().hex, sent=email) privilege.save() send_mail( "TikTok. " + group.name + ". Kod dostepu", "Twoj kod dostepu to: " + privilege.hash, "*****@*****.**", [email], ) message += "wyslano" else: return HttpResponse("Błąd") context = {"message": message, "group": group, "form": form} return render(request, "problems/send_privileges.html", context)
def delete_privilege(request, shortname, hash): tmp = check_admin(request) if tmp != True: return tmp try: group = Group.objects.get(shortname=shortname) except Group.DoesNotExist: return HttpResponse("Nie istnieje taki konkurs") try: privilege = Privilege.objects.get(group=group, hash=hash) privilege.delete() except Privilege.DoesNotExist: return HttpResponse("Nie istieje taki przywilej") return HttpResponseRedirect('/problems/privileges/%s/' % group.shortname)
def privileges(request, shortname): tmp = check_admin(request) if tmp != True: return tmp try: group = Group.objects.get(shortname=shortname) except Group.DoesNotExist: return HttpResponse("Nie istnieje taki konkurs") message = '' privileges_list = Privilege.objects.filter(group=group) if request.method == 'POST': privilege = Privilege(group = group, hash = uuid4().hex) message="przywilej to: " + privilege.hash privilege.save() context = {'message': message, 'group': group, 'privileges_list': privileges_list} return render(request, 'problems/privileges.html', context)
def edit_test(request, test_id): tmp = check_admin(request) if tmp != True: return tmp try: test_program = TestProgram.objects.get(id=test_id) except TestProgram.DoesNotExist: return HttpResponse("Nie istnieje taki test") form = TestProgramForm({'code': test_program.code, 'time': test_program.time}) if request.method == 'POST': form = TestProgramForm(request.POST) if form.is_valid(): test_program.code = form.cleaned_data['code'] test_program.time = form.cleaned_data['time'] test_program.save() return HttpResponseRedirect('/problems/%s' % test_program.problem.id) return render(request, 'problems/edit_test.html', {'test': test_program, 'form': form})
def edit_test(request, test_id): tmp = check_admin(request) if tmp != True: return tmp try: test_program = TestProgram.objects.get(id=test_id) except TestProgram.DoesNotExist: return HttpResponse("Nie istnieje taki test") form = TestProgramForm({"code": test_program.code, "time": test_program.time}) if request.method == "POST": form = TestProgramForm(request.POST) if form.is_valid(): test_program.code = form.cleaned_data["code"] test_program.time = form.cleaned_data["time"] test_program.save() return HttpResponseRedirect("/problems/%s" % test_program.problem.id) return render(request, "problems/edit_test.html", {"test": test_program, "form": form})
def add_test(request, problem_id): tmp = check_admin(request) if tmp != True: return tmp try: problem = Problem.objects.get(id=problem_id) except TestProgram.DoesNotExist: return HttpResponse("Nie istnieje taki problem") form = TestProgramForm() if request.method == 'POST': form = TestProgramForm(request.POST) if form.is_valid(): t = TestProgram(problem=problem, code=form.cleaned_data['code'], time=form.cleaned_data['time']) t.save() return HttpResponseRedirect('/problems/%s' % problem_id) else: form = TestProgramForm() return render(request, 'problems/add_test.html', {'problem': problem, 'form': form})
def add_test(request, problem_id): tmp = check_admin(request) if tmp != True: return tmp try: problem = Problem.objects.get(id=problem_id) except TestProgram.DoesNotExist: return HttpResponse("Nie istnieje taki problem") form = TestProgramForm() if request.method == "POST": form = TestProgramForm(request.POST) if form.is_valid(): t = TestProgram(problem=problem, code=form.cleaned_data["code"], time=form.cleaned_data["time"]) t.save() return HttpResponseRedirect("/problems/%s" % problem_id) else: form = TestProgramForm() return render(request, "problems/add_test.html", {"problem": problem, "form": form})
def edit_pdf(request, problem_id): tmp = check_admin(request) if tmp != True: return tmp try: problem = Problem.objects.get(id=problem_id) except TestProgram.DoesNotExist: return HttpResponse("Nie istnieje taki problem") message = '' form = EditPDFForm() if request.method == 'POST': form = EditPDFForm(request.POST, request.FILES) if form.is_valid(): my_file = request.FILES['pdf_file'] if my_file.content_type != 'application/pdf': return HttpResponse("Niedozwolony format pliku. Tylko PDF.") if my_file.size > 20971520: # 20 MB return HttpResponse("Maksymalny rozmiar to 20MB.") if not path.exists(settings.MY_PATH+'/static/pdf'): makedirs(settings.MY_PATH+'/static/pdf') filename = '/static/pdf/problem' + str(problem.id) + '.pdf' with open(settings.MY_PATH+filename, 'wb+') as destination: for chunk in my_file.chunks(): destination.write(chunk) problem.pdf_file_link = filename problem.save() return HttpResponseRedirect('/problems/%s' % problem.id) else: form = EditPDFForm() message = "chyba coś się stało źle" context = {'form': form, 'message': message, 'problem': problem} return render(request, 'problems/edit_pdf.html', context)
def edit_group(request, shortname): try: group = Group.objects.get(shortname=shortname) except Group.DoesNotExist: return HttpResponse("Nie istnieje taki konkurs") tmp = check_admin(request) if tmp != True: return tmp message = "" form = CreateGroupForm({"name": group.name, "shortname": group.shortname, "open": group.open}) if request.method == "POST": form = CreateGroupForm(request.POST) if form.is_valid(): pattern = compile("^[a-zA-Z0-9]+$") if not pattern.match(form.cleaned_data["shortname"]): return HttpResponse("Niewłaściwa nazwa skrótu konkursu.") group.name = form.cleaned_data["name"] if group.shortname == "MAIN" and ( form.cleaned_data["shortname"] != group.shortname or (form.cleaned_data["name"] == "True") != group.open ): return HttpResponse("Nie można zmienić skrótu konkursu MAIN lub jego dostępności") group.shortname = form.cleaned_data["shortname"] group.open = form.cleaned_data["name"] == "True" group.save() request.session["group"] = group.shortname return HttpResponseRedirect("/problems/list/" + group.shortname) else: form = CreateGroupForm() message = "chyba coś się stało źle" context = {"form": form, "message": message, "group": group} return render(request, "problems/edit_group.html", context)
def edit_pdf(request, problem_id): tmp = check_admin(request) if tmp != True: return tmp try: problem = Problem.objects.get(id=problem_id) except TestProgram.DoesNotExist: return HttpResponse("Nie istnieje taki problem") message = "" form = EditPDFForm() if request.method == "POST": form = EditPDFForm(request.POST, request.FILES) if form.is_valid(): my_file = request.FILES["pdf_file"] if my_file.content_type != "application/pdf": return HttpResponse("Niedozwolony format pliku. Tylko PDF.") if my_file.size > 20971520: # 20 MB return HttpResponse("Maksymalny rozmiar to 20MB.") filename = settings.MY_DIR + "static/pdf/problem" + str(next_id) + ".pdf" with open(filename, "wb+") as destination: for chunk in my_file.chunks(): destination.write(chunk) problem.pdf_file_link = filename problem.save() return HttpResponseRedirect("/problems/%s" % problem.id) else: form = EditPDFForm() message = "chyba coś się stało źle" context = {"form": form, "message": message, "problem": problem} return render(request, "problems/edit_pdf.html", context)
def edit_name(request, problem_id): tmp = check_admin(request) if tmp != True: return tmp try: problem = Problem.objects.get(id=problem_id) except TestProgram.DoesNotExist: return HttpResponse("Nie istnieje taki problem") message = '' form = EditNameForm({'name': problem.name}) if request.method == 'POST': form = EditNameForm(request.POST) if form.is_valid(): problem.name = form.cleaned_data['name'] problem.save() return HttpResponseRedirect('/problems/%s' % problem.id) else: form = EditNameForm() message = "chyba coś się stało źle" context = {'form': form, 'message': message, 'problem': problem} return render(request, 'problems/edit_name.html', context)
def edit_name(request, problem_id): tmp = check_admin(request) if tmp != True: return tmp try: problem = Problem.objects.get(id=problem_id) except TestProgram.DoesNotExist: return HttpResponse("Nie istnieje taki problem") message = "" form = EditNameForm({"name": problem.name}) if request.method == "POST": form = EditNameForm(request.POST) if form.is_valid(): problem.name = form.cleaned_data["name"] problem.save() return HttpResponseRedirect("/problems/%s" % problem.id) else: form = EditNameForm() message = "chyba coś się stało źle" context = {"form": form, "message": message, "problem": problem} return render(request, "problems/edit_name.html", context)
def edit_group(request, shortname): try: group = Group.objects.get(shortname=shortname) except Group.DoesNotExist: return HttpResponse("Nie istnieje taki konkurs") tmp = check_admin(request) if tmp != True: return tmp message = '' form = CreateGroupForm({'name': group.name, 'shortname': group.shortname, 'open':group.open}) if request.method == 'POST': form = CreateGroupForm(request.POST) if form.is_valid(): pattern = compile('^[a-zA-Z0-9]+$') if not pattern.match(form.cleaned_data['shortname']): return HttpResponse("Niewłaściwa nazwa skrótu konkursu.") group.name = form.cleaned_data['name'] if group.shortname == 'MAIN' and (form.cleaned_data['shortname'] != group.shortname or (form.cleaned_data['name']=="True") != group.open): return HttpResponse("Nie można zmienić skrótu konkursu MAIN lub jego dostępności") group.shortname = form.cleaned_data['shortname'] group.open = (form.cleaned_data['name']=="True") group.save() request.session['group'] = group.shortname return HttpResponseRedirect('/problems/list/' + group.shortname) else: form = CreateGroupForm() message = "chyba coś się stało źle" context = {'form': form, 'message': message, 'group': group} return render(request, 'problems/edit_group.html', context)