Nantes Université

Skip to content
Extraits de code Groupes Projets
Valider 76fc9c26 rédigé par Victor CONNES's avatar Victor CONNES
Parcourir les fichiers

last fixes for 1rt relathon

parent c1cbe255
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
from django import forms
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import get_user_model
from django.db.models import Count, Q
from django.db.models import Q
from django.core.exceptions import ValidationError
......@@ -24,8 +24,8 @@ class SelectSubjectForm(forms.ModelForm):
criterion_pk = Q(subject__pk__in=value)
criterion_done = Q(review__is_done=True)
criterion_ban = Q(review__is_ban=True)
criterion_reviewer= Q(review__reviewer=self.user)
remaining_ressources = Resource.objects.filter(criterion_pk)
criterion_reviewer = Q(review__reviewer=self.user)
remaining_ressources = Resource.available_resources().filter(criterion_pk)
if remaining_ressources.count() == 0:
raise ValidationError('Il n\'y a pas de ressources contenant ces sujets.\nVeuillez en sélectionner de nouveaux.',
code='invalid')
......@@ -38,13 +38,14 @@ class SelectSubjectForm(forms.ModelForm):
def __init__(self, *args, user, **kwargs):
super().__init__(*args, **kwargs)
self.user=user
self.user = user
self.fields["label"] = forms.ModelMultipleChoiceField(queryset=Subject.objects.none(),
label="",
validators=[self.no_remaining_ressources_validator])
if "label" in self.data:
self.fields["label"].queryset = Subject.objects.all()
# filter subject with at least one linked ressource with available entry_point
self.fields["label"].queryset = Subject.available_subjects()
# else:
# self.user = user
# frequents = Subject.objects.annotate(
......
......@@ -2,6 +2,7 @@ from django.db import models
from django.conf import settings
from django.contrib.auth.models import AbstractUser
from django.core.validators import RegexValidator
from django.db.models import Count, Q
from string import punctuation
......@@ -27,6 +28,10 @@ class Subject(models.Model):
"""String for representing the Model object (in Admin site etc.)"""
return self.label
@staticmethod
def available_subjects():
return Subject.objects.annotate(available_resource_count=Count(Q(resources__dead_entry_point=False))).filter(available_resource_count__gt=0)
class Resource(models.Model):
description = models.TextField()
......@@ -45,6 +50,10 @@ class Resource(models.Model):
def get_subjects(self):
"\n; ".join([s["label"] for s in self.subject.values()])
@staticmethod
def available_resources():
return Resource.objects.filter(dead_entry_point=False)
class User(AbstractUser):
USERNAME_FIELD = 'username'
......@@ -64,7 +73,7 @@ class User(AbstractUser):
accept_notifs = models.BooleanField(default=False)
def is_expert(self):
return User.objects.filter(pk=self.pk, review__is_done=True).count() > 2
return User.objects.filter(pk=self.pk, review__is_done=True).count() > 0
class SubjectsSelection(models.Model):
......
......@@ -40,7 +40,6 @@
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.12.9/dist/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.0.0/dist/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script>
<body class="g-0 d-flex flex-column min-vh-100" style="
background-size: cover;
background-repeat: no-repeat;
......@@ -79,8 +78,24 @@
$("#review-content-" + i).hide()
$("#review-annotate-" + i).show()
};
function close_popover(){
console.log($(this))
$(this).closest('div.popover').popover('hide');
};
var popover_targets = $("[data-toggle=popover]")
if (popover_targets.length!=0) { popover_targets.popover() };
if (popover_targets.length!=0) {
popover_targets.popover({
template: '<div class="popover" role="tooltip">\
<div class="arrow"></div>\
<button class="close position-absolute top-0 end-0 px-3 pt-1"\
type="button" aria-hidden="true"\
onclick="$(this).closest(\'div.popover\').popover(\'hide\');"\
>&times;</button>\
<h3 class="popover-header"></h3>\
<div class="popover-body"></div>\
</div>'
})
};
</script>
</body>
</html>
......@@ -11,11 +11,11 @@
<div class="bg-light bg-opacity-10 container-sm p-5 rounded mb-5" style="--mdb-bg-opacity: 0.6;">
<p>
« Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit.
Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna.
Aliquam convallis sollicitudin purus. Praesent aliquam, enim at fermentum mollis, ligula massa adipiscing nisl, ac euismod nibh nisl eu lectus. Fusce vulputate sem at sapien. Vivamus leo. Aliquam euismod libero eu enim. Nulla nec felis sed leo placerat imperdiet. Aenean suscipit nulla in justo. Suspendisse cursus rutrum augue. Nulla tincidunt tincidunt mi. Curabitur iaculis, lorem vel rhoncus faucibus, felis magna fermentum augue, et ultricies lacus lorem varius purus. Curabitur eu amet. »
</p>
Cette partie du site est encore en dévellopement, néanmoins nous restons à votre dispositon par e-mail à l'adresse suivante:
</p>
<p class='text-center mb-0 pb-0'>
<a href="mailto:chaireunesco@ls2n.fr?subject=[Florilege]&cc=victor.connes@univ-nantes.fr">chaireunesco@ls2n.fr</a>
</p>
</div>
</div>
......
......@@ -12,9 +12,9 @@
{% if hc.grouper.name != 'Ressource' %}
<p>
<spam class="font-weight-bold">{{ hc.grouper.name|lowercase }} : <i class="mx-1 fas fa-question-circle text-info"
data-container="body" data-toggle="popover"
data-container="body"
data-toggle="popover"
data-trigger="click"
tabindex="0"
data-title="Annoter la {{ hc.grouper.name }}"
data-html="true"
data-content="<strong>A quoi ça sert ? </strong>
......
......@@ -37,7 +37,7 @@
processResults: function (data) {
return {
results: $.map(data, function (item) {
return {id: item.id, text: item.label};
return {id: item.id, text: item.label+" ("+item.available_resource_count+" ressources disponibles)"};
})
};
}
......
......@@ -14,7 +14,7 @@
<img class="" src="{% static 'catalog/assets/images/logo_florilege.png' %}" height="250" alt="Logo Florilège">
<p>
<h6 class="align-text-top">
Pour continuer à nous suivre et rester au courant des actualités du projet, suivez-nous sur nos réseaux sociaux :
Pour continuer à nous suivre et rester au courant des actualités du projet, nous vous donnons rendez-vous sur Twitter, Gitlab et le blog de la Chaire :
</h6>
<br>
<a href="https://twitter.com/chaire_relia" target="_blank" class="text-blue me-4">
......
......@@ -3,7 +3,8 @@
<a type="button" class="btn btn-outline-primary btn-clipboard bg-white {% if w100 %}w-100{% endif %} text-lowercase mb-1"
{% if copy %}onclick="copy('{{ hashtag }}')"{% endif %}
{% if popover %}
data-container="body" data-toggle="popover"
data-container="body"
data-toggle="popover"
data-trigger="hover click"
tabindex="0"
data-html="true"
......
......@@ -5,7 +5,7 @@ from django.conf import settings
from django.http import JsonResponse
from django.db.models import Count
from django.db.models import Count, Q
from random import sample
......@@ -30,8 +30,9 @@ def select_subjects(request):
form = forms.SelectSubjectForm(user=request.user)
if is_ajax(request):
term = request.GET.get('term')
subjects = Subject.objects.filter(label__icontains=term).annotate(
Count('resources')).order_by('-resources__count').all()
subjects = Subject.available_subjects().filter(label__icontains=term
).order_by('-available_resource_count').all()
# print(list(subjects.values()))
response = JsonResponse(list(subjects.values()), safe=False)
return response
elif request.method == 'POST':
......@@ -87,11 +88,14 @@ def about(request):
def contact(request):
return render(request, 'catalog/contact.html')
def thanks(request):
return render(request, 'catalog/thanks.html')
def instructions(request):
return render(request, 'catalog/instructions.html', context={"is_expert": request.user.is_authenticated and request.user.is_expert()})
return render(request, 'catalog/instructions.html',
context={"is_expert": request.user.is_authenticated and request.user.is_expert()})
# def detail(request, subject_id):
# subject = get_object_or_404(Subject, pk=subject_id)
......@@ -113,13 +117,12 @@ def signup(request):
def get_review_list(subjects, user):
resources_id = list(Resource.objects.filter(subject__in=subjects,
is_dead_entry_point=False
resources_id = list(Resource.available_resources().filter(subject__in=subjects
).values_list('id', flat=True))
print("Resources id:", resources_id)
# print("Resources id:", resources_id)
refresh = len(resources_id) > 5
resource_ids = sample(resources_id , k=min(len(resources_id), 5))
print("Resources:", resources_id)
# print("Resources:", resources_id)
reviews = []
review_ids = []
for r in resource_ids:
......@@ -136,7 +139,7 @@ def annotation(request):
print("POST", request.POST)
subjects = Subject.objects.filter(id__in=request.session["subject_ids"])
hashtags = Hashtag.objects.all().order_by('category')
print(hashtags)
# print(hashtags)
if request.method == 'GET':
reviews, review_ids = get_review_list(subjects, request.user)
request.session['review_ids'] = review_ids
......@@ -170,6 +173,7 @@ def annotation(request):
'reviews': reviews,
'hashtags': hashtags})
def faq(request):
faqData = FAQItem.objects.values('category__name', 'question', 'answer', 'order').order_by('category__order')
return render(request, 'catalog/faq.html', {'faqData': faqData})
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter