--- /dev/null
+# Generated by Django 3.2.25 on 2025-06-19 17:12
+
+from django.conf import settings
+from django.db import migrations, models
+import django.db.models.deletion
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ('teleforma', '0030_auto_20250428_1124'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='MediaRead',
+ fields=[
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('duration', models.DurationField(verbose_name='duration')),
+ ('media', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='read', to='teleforma.media', verbose_name='media')),
+ ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='read', to=settings.AUTH_USER_MODEL, verbose_name='user')),
+ ],
+ ),
+ ]
--- /dev/null
+# Generated by Django 3.2.25 on 2025-06-19 17:37
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ('teleforma', '0031_mediaread'),
+ ]
+
+ operations = [
+ migrations.AlterField(
+ model_name='mediaread',
+ name='duration',
+ field=models.DurationField(blank=True, null=True, verbose_name='duration'),
+ ),
+ ]
'iejs': [iej.name for iej in self.iejs.all()],
}
return data
+
+
+class MediaRead(models.Model):
+ "Store media read and time by user"
+
+ media = models.ForeignKey('Media', related_name='read', verbose_name=_('media'),
+ blank=True, null=True, on_delete=models.SET_NULL)
+ user = models.ForeignKey(User, related_name='read', verbose_name=_('user'),
+ blank=True, null=True, on_delete=models.SET_NULL)
+ duration = models.DurationField(_("duration"), blank=True, null=True)
from ..models.appointment import Appointment, AppointmentPeriod
from ..models.chat import ChatMessage
from ..models.core import (Conference, ConferencePublication, Course, CourseType, Department,
- Document, DocumentType, Media, MediaTranscoded,
+ Document, DocumentType, Media, MediaRead, MediaTranscoded,
Organization, Period, Professor, WebClassGroup,
StreamingServer, LiveStream,
get_user_role)
reverse("teleforma-media-detail",
kwargs={"period_id": period_id, "pk": media.id}))
if get_access(media, courses) and referer == media_detail_url:
+ media_read, c = MediaRead.objects.get_or_create(media=media, user=request.user)
return serve_media(media.file,
content_type=media.mime_type,
streaming=streaming,