uwsgi
pymemcache==3.4.4
Mezzanine==5.0.0
-
quizstep = multipart and '4' or '2bis'
for quiz in quizs:
if quiz:
- quiz_weight = 3
+ quiz_weight = quiz.weight or 3
startdate = seminar.date_added
enddate = seminar.expiry_date
quiz_validations = QuizValidation.objects.filter(user=user, quiz=quiz, validated=True, date_validated__range=[startdate, enddate])
--- /dev/null
+# Generated by Django 3.2.3 on 2022-10-04 17:37
+
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('quiz', '__first__'),
+ ('teleforma', '0011_merge_20220831_1143'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='seminarpart',
+ name='title',
+ field=models.CharField(blank=True, max_length=80, null=True, verbose_name='Titre de la séquence'),
+ ),
+ migrations.AlterField(
+ model_name='answer',
+ name='date_submitted',
+ field=models.DateTimeField(null=True, verbose_name='date submitted'),
+ ),
+ migrations.AlterField(
+ model_name='seminarpart',
+ name='quiz',
+ field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, related_name='seminarpart', to='quiz.quiz', verbose_name='quiz'),
+ ),
+ ]
--- /dev/null
+# Generated by Django 3.2.3 on 2022-10-05 15:55
+
+from django.db import migrations
+import tinymce.models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('teleforma', '0012_auto_20220919_1428'),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='seminarpart',
+ name='index',
+ field=tinymce.models.HTMLField(blank=True, null=True, verbose_name='Plan détaillé'),
+ ),
+ ]
class SeminarPart(models.Model):
seminar = models.ForeignKey(Seminar, related_name='parts', verbose_name=_('seminar'), on_delete=models.CASCADE)
+
+ title = models.CharField("Titre de la séquence", max_length=80, blank=True, null=True)
docs_1 = models.ManyToManyField(Document, related_name="seminarpart_docs1",
verbose_name=_('documents 1'),
blank=True)
# blank=True)
quiz = models.ForeignKey(Quiz, related_name="seminarpart",
verbose_name=_('quiz'),
+ blank=True, null=True,
on_delete=models.PROTECT)
+ index = tinymce.models.HTMLField("Plan détaillé",
+ help_text="",
+ null=True,
+ blank=True)
+
def is_validated(self, user):
.multipart-tabs li {
display: inline-block;
}
-
+.multipart-tabs li {
+ font-size: 0.9em;
+}
.multipart-tabs .disabled {
color: grey;
pointer-events: none;
padding: 6px 12px;
animation: fadeEffect 1s;
}
+.tab-content h2 {
+ font-size: 1.1em;
+}
@keyframes fadeEffect {
from {
function openTab(tab) {
- $(".tab-content").each(function() {
+ $(".tab-content, .index-multipart").each(function() {
$(this).hide();
})
$(".tab-link").each(function() {
})
$("a[href="+tab+"]").addClass('active');
$(tab).show().addClass("active");
+ $(tab + "-index").show();
+
}
<div class="multipart">
<ul class="multipart-tabs">
{% for part in parts %}
- <li><a href="#part-{{ part.index }}" class="tab-link {% if part.validated %}validated{% endif %} {% if not part.accessible %}disabled{% endif %}">Séquence {{ part.index }} > </a></li>
+ <li><a href="#part-{{ part.index }}" class="tab-link {% if part.validated %}validated{% endif %} {% if not part.accessible %}disabled{% endif %}">{% if part.object.title %}{{ part.object.title }}{% else %}Séquence {{ part.index }}{% endif %} > </a></li>
{% endfor %}
<li><a href="#part-last" class="tab-link {% if not seminar_progress == 100 %}disabled{% endif %}">Attestation</a></li>
</ul>
{% for part in parts %}
<div class="tab-content" id="part-{{ part.index }}">
- <h2>Séquence {{ part.index }}</h2>
+ <h2>{% if part.object.title %}{{ part.object.title }}{% else %}Séquence {{ part.index }}{% endif %}</h2>
{% with part.object.docs_1 as docs %}
<div class="course_content">
{% block index %}
-{% if seminar.index %}
+{% if seminar.index or seminar.is_multipart %}
<div class="module">
<h3><img src="{{STATIC_URL}}teleforma/images/module_playlist.png" alt="status" style="vertical-align:middle" />
{% trans "Plan" %}</h3>
<div id="index">
- {{ seminar.index|safe }}
+ {% if seminar.is_multipart %}
+ {% for part in parts %}
+ <div id="part-{{part.index}}-index" class="index-multipart">
+ {{ part.object.index|safe }}
+ </div>
+ {% endfor %}
+ {% elif seminar.index %}
+ {{ seminar.index|safe }}
+ {% endif %}
</div>
-</div>
{% endif %}
{% endblock index %}
\ No newline at end of file