Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider 8b23c5ae rédigé par Arthur MICHEL's avatar Arthur MICHEL
Parcourir les fichiers

Revert "Merge branch 'revert-430da755' into 'prod'"

parent e9fcee09
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!5Revert "Merge branch 'revert-430da755' into 'prod'"
......@@ -24,6 +24,12 @@ class FAQItemAdmin(admin.ModelAdmin):
class FAQCategoryAdmin(admin.ModelAdmin):
list_display = ("name", "order")
class LicenceAdmin(admin.ModelAdmin):
list_display = ("id", "name")
class SubmissionAdmin(admin.ModelAdmin):
list_display = ("submit_date", "is_valid", "is_added", "review_date")
admin.site.register(models.Subject)
admin.site.register(models.User)
......@@ -35,3 +41,5 @@ admin.site.register(models.Review)
admin.site.register(models.SubjectsSelection, SubjectsSelectionAdmin)
admin.site.register(models.Catalog, CatalogAdmin)
admin.site.register(models.Resource, ResourceAdmin)
admin.site.register(models.Licence, LicenceAdmin)
admin.site.register(models.Submission, SubmissionAdmin)
......@@ -5,7 +5,7 @@ from django.db.models import Q
from django.core.exceptions import ValidationError
from .models import Subject, Resource
from .models import Subject, Resource, Licence
class SignupForm(UserCreationForm):
......@@ -55,3 +55,34 @@ class SelectSubjectForm(forms.ModelForm):
# trendings = Subject.objects.annotate(
# Count('subjectsselection')).order_by('-subjectsselection__count')[:10].values_list('pk', flat=True)
# self.fields["label"].queryset = Subject.objects.filter(pk__in=set([*frequents, *favorites, *trendings]))
# Formulaire d'envoi de ressource
class SubmissionForm(forms.Form):
url = forms.URLField(
label="URL de la ressource ou collection *",
required=True,
widget=forms.TextInput(
attrs={"class": "form-control"}
)
)
keywords = forms.CharField(
label="Mots-clefs (les séparer d'un point-virgule)",
required=False,
widget=forms.TextInput(
attrs={"class": "form-control"}
)
)
email = forms.EmailField(
label="Votre adresse e-mail",
required=False,
widget=forms.TextInput(
attrs={"class": "form-control"}
)
)
licence = forms.CharField(
label = 'Licence',
required=False,
widget=forms.TextInput(
attrs={"class": "form-control"}
)
)
# Generated by Django 4.1.3 on 2023-04-11 13:41
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('catalog', '0011_resource_dead_entry_point'),
]
operations = [
migrations.CreateModel(
name='Licence',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=100)),
],
),
migrations.CreateModel(
name='Submission',
fields=[
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('url', models.URLField()),
('submit_date', models.DateTimeField(auto_now_add=True)),
('is_valid', models.BooleanField(null=True)),
('is_added', models.BooleanField()),
('review_date', models.DateTimeField()),
('sender_keywords', models.TextField()),
('reviewer_keywords', models.TextField()),
('sender_email', models.EmailField(max_length=254)),
('licence', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='catalog.licence')),
('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]
# Generated by Django 4.1.3 on 2023-04-11 14:21
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('catalog', '0012_licence_submission'),
]
operations = [
migrations.AlterField(
model_name='submission',
name='licence',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='catalog.licence'),
),
migrations.AlterField(
model_name='submission',
name='review_date',
field=models.DateTimeField(blank=True, null=True),
),
migrations.AlterField(
model_name='submission',
name='reviewer_keywords',
field=models.TextField(blank=True, null=True),
),
migrations.AlterField(
model_name='submission',
name='sender_email',
field=models.EmailField(blank=True, max_length=254, null=True),
),
migrations.AlterField(
model_name='submission',
name='sender_keywords',
field=models.TextField(blank=True, null=True),
),
]
# Generated by Django 4.1.3 on 2023-04-12 11:18
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('catalog', '0013_alter_submission_licence_and_more'),
]
operations = [
migrations.AlterField(
model_name='submission',
name='is_added',
field=models.BooleanField(default=False),
),
migrations.AlterField(
model_name='submission',
name='licence',
field=models.TextField(blank=True, null=True),
),
]
# Generated by Django 4.1.3 on 2023-04-12 11:52
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('catalog', '0014_alter_submission_is_added_alter_submission_licence'),
]
operations = [
migrations.AlterField(
model_name='submission',
name='sender',
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
]
......@@ -154,3 +154,20 @@ class Review(models.Model):
category=category,
description=f"Hashtag permettant à l'utilisateur {self.reviewer.username} d'annoter les contours de la ressource « {self.resource.title} » par {self.resource.author} du catalogue {self.resource.catalog}.")
self.review_tag.save()
class Licence(models.Model):
name = models.CharField(max_length=100)
def __str__(self):
return self.name
class Submission(models.Model):
url = models.URLField()
submit_date = models.DateTimeField(auto_now_add=True)
sender = models.ForeignKey(User, on_delete=models.CASCADE, null=True, blank=True)
is_valid = models.BooleanField(null=True)
is_added = models.BooleanField(null=False, default=False)
review_date = models.DateTimeField(null=True, blank=True)
licence = models.TextField(null=True, blank=True)
sender_keywords = models.TextField(null=True, blank=True)
reviewer_keywords = models.TextField(null=True, blank=True)
sender_email = models.EmailField(null=True, blank=True)
......@@ -7,36 +7,33 @@
<!-- Grid container -->
<div class="container-fluid">
<!-- Section: Links -->
<section class="mt-1">
<section class="mt-1 mx-2">
<!-- Grid row-->
<div class="row text-center d-flex justify-content-center pt-2">
<!-- Grid column -->
<div class="col-md-2">
<div class="col">
<h6 class="text-uppercase font-weight-bold">
<a href="{% url 'index' %}" class="text-white">Accueil</a>
<a href="{% url 'about' %}" class="text-white">À propos de Florilège</a>
</h6>
</div>
<!-- Grid column -->
<!-- Grid column -->
<div class="col-md-2">
<div class="col">
<h6 class="text-uppercase font-weight-bold">
<a href="{% url 'about' %}" class="text-white">À propos de Florilège</a>
<a href="{% url 'instructions' %}" class="text-white">Comment annoter ?</a>
</h6>
</div>
<!-- Grid column -->
<!-- Grid column -->
<div class="col-md-2">
<div class="col">
<h6 class="text-uppercase font-weight-bold">
<a href="{% url 'instructions' %}" class="text-white">Comment annoter ?</a>
<a href="{% url 'submission' %}" class="text-white">Soumettre une REL</a>
</h6>
</div>
<!-- Grid column -->
<!-- Grid column -->
<div class="col-md-2">
<div class="col">
<h6 class="text-uppercase font-weight-bold">
<a href="{% url 'faq' %}" class="text-white">Foire aux questions</a>
</h6>
......@@ -44,7 +41,7 @@
<!-- Grid column -->
<!-- Grid column -->
<div class="col-md-2">
<div class="col">
<h6 class="text-uppercase font-weight-bold">
<a href="{% url 'legal' %}" class="text-white">Mentions légales</a>
</h6>
......@@ -52,7 +49,7 @@
<!-- Grid column -->
<!-- Grid column -->
<div class="col-md-2">
<div class="col">
<h6 class="text-uppercase font-weight-bold">
<a href="{% url 'contact' %}" class="text-white">Contact</a>
</h6>
......@@ -92,61 +89,61 @@
</section> -->
<!-- Section: Text -->
<div class="row align-items-center">
<div class="col border-right">
<!-- Section: Partenaire -->
<section class="text-center">
<h6 class="text-uppercase font-weight-bold align-text-top">Nos partenaires :</h6>
<div class="row align-items-center">
<div class="col">
<a href="https://chaireunescorelia.univ-nantes.fr/" target="_blank"> <img src="{% static 'catalog/assets/images/logo_chaire.jpg' %}" class="img-fluid rounded float-right" width="100" height="100" alt="Logo Chaire UNESCO RELIA"></a>
</div>
<div class="col">
<a href="https://www.x5gon.org/" target="_blank"> <img src="{% static 'catalog/assets/images/logo_x5gon_2.png' %}" class="img-fluid rounded float-right" width="100" height="100" alt="Logo X5GON"></a>
</div>
<div class="col">
<a href="https://next-isite.fr/" target="_blank"> <img src="{% static 'catalog/assets/images/logo_next.png' %}" class="img-fluid rounded float-right" width="100" height="100" alt="Logo NEXT"></a>
</div>
<div class="col">
<a href="https://chaireunescorelia.univ-nantes.fr/tag/gtnum-2/" target="_blank"> <img src="{% static 'catalog/assets/images/logo_gtnum.png' %}" class="img-fluid rounded float-right" width="100" height="100" alt="Logo Chaire GTnum"></a>
</div>
<div class="col">
<a href="https://www.gouvernement.fr/le-programme-d-investissements-d-avenir" target="_blank"> <img src="{% static 'catalog/assets/images/logo_PIA.png' %}" class="img-fluid rounded float-right" width="100" height="100" alt="Logo PIA"></a>
</div>
<div class="col">
<a href="https://anr.fr/fr/" target="_blank"> <img src="{% static 'catalog/assets/images/logo_anr.png' %}" class="img-fluid rounded float-right" width="100" height="100" alt="Logo ANR"></a>
</div>
<div class="row align-items-center mx-2">
<div class="col-md-9 col-8 border-right">
<!-- Section: Partenaire -->
<section class="text-center">
<h6 class="text-uppercase font-weight-bold align-text-top">Nos partenaires :</h6>
<div class="row align-items-center">
<div class="col-md col-4">
<a href="https://chaireunescorelia.univ-nantes.fr/" target="_blank">
<img src="{% static 'catalog/assets/images/logo_chaire.jpg' %}" class="img-fluid rounded float-right" width="100" height="100" alt="Logo Chaire UNESCO RELIA">
</a>
</div>
<div class="col-md col-4">
<a href="https://www.x5gon.org/" target="_blank">
<img src="{% static 'catalog/assets/images/logo_x5gon_2.png' %}" class="img-fluid rounded float-right" width="100" height="100" alt="Logo X5GON">
</a>
</div>
<div class="col-md col-4">
<a href="https://next-isite.fr/" target="_blank">
<img src="{% static 'catalog/assets/images/logo_next.png' %}" class="img-fluid rounded float-right" width="100" height="100" alt="Logo NEXT">
</a>
</div>
<div class="col-md col-4">
<a href="https://chaireunescorelia.univ-nantes.fr/tag/gtnum-2/" target="_blank">
<img src="{% static 'catalog/assets/images/logo_gtnum.png' %}" class="img-fluid rounded float-right" width="100" height="100" alt="Logo Chaire GTnum">
</a>
</div>
<div class="col-md col-4">
<a href="https://www.gouvernement.fr/le-programme-d-investissements-d-avenir" target="_blank">
<img src="{% static 'catalog/assets/images/logo_PIA.png' %}" class="img-fluid rounded float-right" width="100" height="100" alt="Logo anr">
</a>
</div>
<div class="col-md col-4">
<a href="https://anr.fr/fr/" target="_blank">
<img src="{% static 'catalog/assets/images/logo_anr.png' %}" class="img-fluid rounded float-right" width="100" height="100" alt="Logo ANR">
</a>
</div>
</div>
</section>
</div>
<!-- Section: Partenaire -->
<div class="col-md-3 col-4">
<!-- Section: Social -->
<section class="text-center mb-1">
<h6 class="text-uppercase font-weight-bold align-text-top">Suivez-nous :</h6>
<a href="https://twitter.com/chaire_relia" target="_blank" class="text-white me-4 fs-2">
<i class="fab fa-twitter fa-lg"></i>
</a>
<a href="https://gitlab.univ-nantes.fr/florilege-team/florilege-website" target="_blank" class="text-white me-4 fs-2">
<i class="fab fa-gitlab fa-lg"></i>
</a>
<a href="https://chaireunescorelia.univ-nantes.fr/" target="_blank" class="text-white fs-2">
<i class="fab fa-wordpress fa-lg"></i>
</a>
</section>
</div>
</section>
</div>
<!-- Section: Partenaire -->
<div class="col">
<!-- Section: Social -->
<section class="text-center mb-1">
<h6 class="text-uppercase font-weight-bold align-text-top">Suivez-nous :</h6>
<!-- <a href="" class="text-white me-4">
<i class="fab fa-facebook-f"></i>
</a> -->
<a href="https://twitter.com/chaire_relia" target="_blank" class="text-white me-4 fs-2">
<i class="fab fa-twitter fa-lg"></i>
</a>
<!-- <a href="" class="text-white me-4">
<i class="fab fa-google"></i>
</a>
<a href="" class="text-white me-4">
<i class="fab fa-instagram"></i>
</a>
<a href="" class="text-white me-4">
<i class="fab fa-linkedin"></i>
</a> -->
<a href="https://gitlab.univ-nantes.fr/florilege-team/florilege-website" target="_blank" class="text-white me-4 fs-2">
<i class="fab fa-gitlab fa-lg"></i>
</a>
<a href="https://chaireunescorelia.univ-nantes.fr/" target="_blank" class="text-white fs-2">
<i class="fab fa-wordpress fa-lg"></i>
</a>
</section>
</div>
<!-- Section: Social -->
</div>
<!-- Grid container -->
......
{% extends 'catalog/base.html' %}
{% load static %}
{% block content %}
<div class="container-sm">
<div class="bg-light bg-opacity-10 container-sm p-5 rounded my-5" style="--mdb-bg-opacity: 0.6;">
<h1 class="w-60 d-flex justify-content-center text-center p-5 "
id="welcome">
Suggestion de REL
</h1>
<p>
Vous avez trouvé ou créé une Ressource Éducative Libre ou une collection de REL ? Vous pouvez nous en informer en complétant ce formulaire.
</p>
<form action="/submission/" method="post">
{{ form.url.errors }}
{{ form.keywords.errors }}
{{ form.licence.errors }}
{{ form.email.errors }}
<div class="row">
<div class="form-group col-sm-12 col-md">
{{ form.url.label }}
{{ form.url }}
</div>
<div class="form-group col-sm-12 col-md">
{{ form.keywords.label }}
{{ form.keywords }}
</div>
</div>
{% csrf_token %}
<div class="row">
<div class="form-group col-sm-12 col-md">
{{ form.licence.label }}
{{ form.licence }}
</div>
<div class="form-group col-sm-12 col-md">
{{ form.email.label }}
{{ form.email }}
</div>
</div>
<p>* : champ obligatoire</p>
<div class="row">
<div class="col text-center">
<input class="btn btn-primary" type="submit" value="Envoyer">
</div>
</div>
</form>
</div>
</div>
{% endblock %}
\ No newline at end of file
......@@ -16,5 +16,6 @@ urlpatterns = [
path('unknown/', views.unknown, name='unknown'),
path('faq/', views.faq, name='faq'),
path('instructions/', views.instructions, name='instructions'),
path('thanks/', views.thanks, name='thanks')
path('thanks/', views.thanks, name='thanks'),
path('submission/', views.submission, name='submission')
]
......@@ -3,17 +3,18 @@ from django.contrib.auth.decorators import login_required
from django.contrib.auth import login, authenticate, get_user_model
from django.conf import settings
from django.http import JsonResponse
from django.http import HttpResponseRedirect
from django.db.models import Count, Q
from random import sample
from .models import Subject, Resource, SubjectsSelection, Review, FAQItem, Hashtag
from .models import Subject, Resource, SubjectsSelection, Review, FAQItem, Hashtag, Submission, User
import random
from catalog import forms
from .forms import SubmissionForm
@login_required
def select_subjects(request):
......@@ -88,10 +89,27 @@ def about(request):
def contact(request):
return render(request, 'catalog/contact.html')
def thanks(request):
return render(request, 'catalog/thanks.html')
def submission(request):
if request.method == "POST":
form = SubmissionForm(request.POST)
if form.is_valid():
newSubmission = Submission(
url=form.cleaned_data.get("url"),
sender_keywords = form.cleaned_data.get("keywords"),
sender_email = form.cleaned_data.get("email"),
licence = form.cleaned_data.get("licence")
)
if isinstance(request.user, User):
newSubmission.sender = request.user
newSubmission.save()
return HttpResponseRedirect("/thanks")
else:
form = SubmissionForm()
return render(request, 'catalog/submission.html', {"form": form})
def instructions(request):
return render(request, 'catalog/instructions.html',
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter