From 67b7bcd7cc8e8ac33eebdd7a797575678a206ea7 Mon Sep 17 00:00:00 2001
From: Gustavo Lima da Silva
Date: Mon, 23 Jan 2023 17:09:49 -0300
Subject: [PATCH] feat: Updates for MOOC TIM Tec
---
accounts/forms.py | 2 +
core/forms.py | 3 +
core/views.py | 41 +++-
.../static/less/default/pages/courses.less | 2 +-
themes/default/templates/_contact_form.html | 9 +
themes/default/templates/_login_modal.html | 2 +-
.../templates/account/login_modal.html | 4 +-
themes/default/templates/account/signup.html | 196 +++++++++++++++++-
themes/default/templates/footer.html | 3 +
timtec/urls.py | 3 +-
10 files changed, 245 insertions(+), 20 deletions(-)
diff --git a/accounts/forms.py b/accounts/forms.py
index a338adfee..b369d0efe 100644
--- a/accounts/forms.py
+++ b/accounts/forms.py
@@ -5,6 +5,7 @@
from django.conf import settings
from timtec.settings import ACCOUNT_REQUIRED_FIELDS as fields
from accounts.models import UserSocialAccount
+from hcaptcha2.fields import hCaptchaField
User = get_user_model()
@@ -77,6 +78,7 @@ class SignupForm(AcceptTermsForm):
city = forms.CharField(max_length=50, label=_('City'), widget=forms.Select, required=False)
how_you_know = forms.CharField(max_length=50, label=_('How do you know the platform?'), required=False)
how_you_know_complement = forms.CharField(max_length=50, label=_('Complement for "How do you know the platform?"'), required=False)
+ hcaptcha = hCaptchaField()
def __init__(self, *args, **kwargs):
super(SignupForm, self).__init__(*args, **kwargs)
diff --git a/core/forms.py b/core/forms.py
index baae0a953..5dff3c659 100644
--- a/core/forms.py
+++ b/core/forms.py
@@ -5,6 +5,8 @@
from django.contrib.auth import get_user_model
from django.conf import settings
+from hcaptcha2.fields import hCaptchaField
+
from .models import Class
import logging
@@ -17,6 +19,7 @@ class ContactForm(forms.Form):
name = forms.CharField(label=_('Name'), max_length=128)
email = forms.EmailField(label=_('Email'))
message = forms.CharField(label=_('Message'), max_length=255)
+ hcaptcha = hCaptchaField()
def send_email(self):
subject = self.cleaned_data.get('subject')
diff --git a/core/views.py b/core/views.py
index 4d4fc8cc8..85d1dc014 100644
--- a/core/views.py
+++ b/core/views.py
@@ -23,6 +23,9 @@
from rest_framework.permissions import IsAuthenticatedOrReadOnly
from braces.views import LoginRequiredMixin
from notes.models import Note
+from django.http import HttpResponse
+import pychrome
+import base64
from .serializers import (CourseSerializer, CourseProfessorSerializer,
CourseThumbSerializer, LessonSerializer,
@@ -43,7 +46,7 @@
from .forms import (ContactForm, RemoveStudentForm)
-from .permissions import IsProfessorCoordinatorOrAdminPermissionOrReadOnly, IsAdminOrReadOnly, MessageAnswerPermission
+from .permissions import IsProfessorCoordinatorOrAdminPermissionOrReadOnly, IsAdminOrReadOnly, MessageAnswerPermission, IsAdmin
class HomeView(ListView):
@@ -412,17 +415,34 @@ def render_to_response(self, context, **response_kwargs):
width, height = CERTIFICATE_SIZE
url = self.request.build_absolute_uri().split('download')[0] + 'print/'
+
png_path = os.path.join(MEDIA_ROOT, certificate.link_hash + '.png')
pdf_filename = certificate.link_hash + today + '.pdf'
pdf_path = os.path.join(MEDIA_ROOT, pdf_filename)
-
- driver = webdriver.PhantomJS(executable_path=PHANTOMJS_PATH)
- driver.set_window_size(width, height)
- driver.get(url)
- driver.save_screenshot(filename=png_path)
-
- driver.service.process.send_signal(SIGTERM)
- driver.quit()
+
+ # FIXME: remover esse hardcode do localhost e porta daqui
+ browser = pychrome.Browser(url="http://127.0.0.1:9222")
+ tab = browser.new_tab()
+
+ def request_will_be_sent(**kwargs):
+ print("loading: %s" % kwargs.get('request').get('url'))
+
+ tab.Network.requestWillBeSent = request_will_be_sent
+
+ tab.start()
+ tab.Network.enable()
+ tab.Page.navigate(url=url, _timeout=5)
+ tab.wait(2)
+
+
+ try:
+ data = tab.Page.captureScreenshot()
+ with open(png_path, 'wb') as fd:
+ fd.write(base64.b64decode(data['data']))
+ finally:
+ tab.stop()
+ browser.close_tab(tab)
+
Image.open(png_path).convert("RGB").save(pdf_path, format='PDF', quality=100, dpi=(300, 300))
response = HttpResponse(content_type='application/pdf')
@@ -639,7 +659,8 @@ def list(self, request, *args, **kwargs):
serializer = self.get_serializer(queryset, many=True)
return Response(serializer.data)
-
+
+ permission_classes = (IsAdmin,)
def post(self, request, **kwargs):
course = self.get_object()
serializer = CourseSerializer(course, request.data)
diff --git a/themes/default/static/less/default/pages/courses.less b/themes/default/static/less/default/pages/courses.less
index 32007a6ce..9363a71c3 100644
--- a/themes/default/static/less/default/pages/courses.less
+++ b/themes/default/static/less/default/pages/courses.less
@@ -20,7 +20,7 @@
color: #000;
}
.info{
- height: 85px;
+ height: 40px;
padding: 0.5em;
h3{
color: #555;
diff --git a/themes/default/templates/_contact_form.html b/themes/default/templates/_contact_form.html
index d97d023a3..38969478f 100644
--- a/themes/default/templates/_contact_form.html
+++ b/themes/default/templates/_contact_form.html
@@ -41,3 +41,12 @@
+
+{{ contact_form.hcaptcha }}
+
+
+
+{% for message in form.captcha.errors %}
+ {{ message }}
+{% endfor %}
+
diff --git a/themes/default/templates/_login_modal.html b/themes/default/templates/_login_modal.html
index acdcca980..3b8546fd2 100644
--- a/themes/default/templates/_login_modal.html
+++ b/themes/default/templates/_login_modal.html
@@ -54,4 +54,4 @@
-
\ No newline at end of file
+
diff --git a/themes/default/templates/account/login_modal.html b/themes/default/templates/account/login_modal.html
index ab5efac57..7c3ba0513 100644
--- a/themes/default/templates/account/login_modal.html
+++ b/themes/default/templates/account/login_modal.html
@@ -1,6 +1,6 @@
{% load i18n %}
-
+
@@ -103,7 +103,7 @@
{% trans 'Sign Up
-
+
diff --git a/themes/default/templates/account/signup.html b/themes/default/templates/account/signup.html
index 8c7a0cf37..e9633b41e 100644
--- a/themes/default/templates/account/signup.html
+++ b/themes/default/templates/account/signup.html
@@ -1,6 +1,65 @@
-{% extends 'account/base.html' %}
+{% extends 'default:account/signup-2.html' %}
{% load i18n %}
+{% block js %}
+
+{% endblock %}
+
{% block account_content %}
@@ -15,6 +74,74 @@
{% endif %}
+ {% with errors=form.how_you_know.errors %}
+
+ {% endwith %}
+
+ {% with errors=form.how_you_know_complement.errors %}
+
+ {% endwith %}
+
+ {% with errors=form.first_name.errors %}
+
+ {% endwith %}
+
+ {% with errors=form.last_name.errors %}
+
+ {% endwith %}
+
+ {% with errors=form.state.errors %}
+
+ {% endwith %}
+
+ {% with errors=form.city.errors %}
+
+ {% endwith %}
+
{% with errors=form.username.errors %}
@@ -47,7 +174,9 @@
{% endwith %}
- {% block extrafields %}{% endblock %}
+ {{form.hcaptcha}}
+ {{form.hcaptcha.errors}}
+
{% if terms_required %}
{% with errors=form.accept_terms.errors %}
@@ -94,11 +223,69 @@
{% endwith %}
- {% block extrafields_mobile %}{% endblock %}
{% if terms_required %}
{% with errors=form.accept_terms.errors %}