OpenSlides/openslides/core/migrations/0002_misc_features.py
2019-01-08 21:51:52 +01:00

285 lines
9.6 KiB
Python

# -*- coding: utf-8 -*-
# Generated by Django 1.10.4 on 2016-12-11 21:13
from __future__ import unicode_literals
import django.db.models.deletion
from django.conf import settings
from django.db import migrations, models
import openslides.utils.models
def move_custom_slides_to_topics(apps, schema_editor):
"""
Move all custom slides to new topic model.
"""
# We get the model from the versioned app registry;
# if we directly import it, it will be the wrong version.
ContentType = apps.get_model("contenttypes", "ContentType")
CustomSlide = apps.get_model("core", "CustomSlide")
Item = apps.get_model("agenda", "Item")
Topic = apps.get_model("topics", "Topic")
# Copy data.
content_type_custom_slide = ContentType.objects.get_for_model(CustomSlide)
content_type_topic = ContentType.objects.get_for_model(Topic)
for custom_slide in CustomSlide.objects.all():
# This line does not create a new Item because this migration model has
# no method 'get_agenda_title()'. See agenda/signals.py.
topic = Topic.objects.create(title=custom_slide.title, text=custom_slide.text)
topic.attachments.add(*custom_slide.attachments.all())
item = Item.objects.get(
object_id=custom_slide.pk, content_type=content_type_custom_slide
)
item.object_id = topic.pk
item.content_type = content_type_topic
item.save(skip_autoupdate=True)
# Delete old data.
CustomSlide.objects.all().delete()
content_type_custom_slide.delete()
def name_default_projector(apps, schema_editor):
"""
Set the name of the default projector to 'Defaultprojector'
"""
Projector = apps.get_model("core", "Projector")
Projector.objects.filter(pk=1).update(name="Default projector")
def remove_old_countdowns_messages(apps, schema_editor):
"""
Remove old countdowns and messages created by 2.0 from projector elements which are unusable in 2.1.
"""
Projector = apps.get_model("core", "Projector")
projector = Projector.objects.get(pk=1)
projector_config = projector.config
for key, value in list(projector.config.items()):
if value.get("name") in ("core/countdown", "core/message"):
del projector_config[key]
projector.config = projector_config
projector.save(skip_autoupdate=True)
def add_projection_defaults(apps, schema_editor):
"""
Adds projectiondefaults for messages and countdowns.
"""
Projector = apps.get_model("core", "Projector")
ProjectionDefault = apps.get_model("core", "ProjectionDefault")
# The default projector (pk=1) is always available.
default_projector = Projector.objects.get(pk=1)
projectiondefaults = []
projectiondefaults.append(
ProjectionDefault(
name="agenda_all_items", display_name="Agenda", projector=default_projector
)
)
projectiondefaults.append(
ProjectionDefault(
name="topics", display_name="Topics", projector=default_projector
)
)
projectiondefaults.append(
ProjectionDefault(
name="agenda_list_of_speakers",
display_name="List of speakers",
projector=default_projector,
)
)
projectiondefaults.append(
ProjectionDefault(
name="agenda_current_list_of_speakers",
display_name="Current list of speakers",
projector=default_projector,
)
)
projectiondefaults.append(
ProjectionDefault(
name="motions", display_name="Motions", projector=default_projector
)
)
projectiondefaults.append(
ProjectionDefault(
name="motionBlocks",
display_name="Motion blocks",
projector=default_projector,
)
)
projectiondefaults.append(
ProjectionDefault(
name="assignments", display_name="Elections", projector=default_projector
)
)
projectiondefaults.append(
ProjectionDefault(
name="users", display_name="Participants", projector=default_projector
)
)
projectiondefaults.append(
ProjectionDefault(
name="mediafiles", display_name="Files", projector=default_projector
)
)
projectiondefaults.append(
ProjectionDefault(
name="messages", display_name="Messages", projector=default_projector
)
)
projectiondefaults.append(
ProjectionDefault(
name="countdowns", display_name="Countdowns", projector=default_projector
)
)
# Create all new projectiondefaults
ProjectionDefault.objects.bulk_create(projectiondefaults)
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("sessions", "0001_initial"),
("contenttypes", "0002_remove_content_type_name"),
("core", "0001_initial"),
(
"agenda",
"0001_initial",
), # ('agenda', '0002_item_duration') is not required but would be also ok.
("topics", "0001_initial"),
]
operations = [
migrations.CreateModel(
name="Countdown",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("description", models.CharField(blank=True, max_length=256)),
("running", models.BooleanField(default=False)),
("default_time", models.PositiveIntegerField(default=60)),
("countdown_time", models.FloatField(default=60)),
],
options={"default_permissions": ()},
bases=(openslides.utils.models.RESTModelMixin, models.Model),
),
migrations.CreateModel(
name="ProjectionDefault",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("name", models.CharField(max_length=256)),
("display_name", models.CharField(max_length=256)),
],
options={"default_permissions": ()},
bases=(openslides.utils.models.RESTModelMixin, models.Model),
),
migrations.CreateModel(
name="ProjectorMessage",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
("message", models.TextField(blank=True)),
],
options={"default_permissions": ()},
bases=(openslides.utils.models.RESTModelMixin, models.Model),
),
migrations.CreateModel(
name="Session",
fields=[
(
"session_ptr",
models.OneToOneField(
auto_created=True,
on_delete=django.db.models.deletion.CASCADE,
parent_link=True,
primary_key=True,
serialize=False,
to="sessions.Session",
),
),
(
"user",
models.ForeignKey(
null=True,
on_delete=django.db.models.deletion.CASCADE,
to=settings.AUTH_USER_MODEL,
),
),
],
options={"default_permissions": ()},
bases=("sessions.session",),
),
migrations.RunPython(move_custom_slides_to_topics),
migrations.RemoveField(model_name="customslide", name="attachments"),
migrations.DeleteModel(name="CustomSlide"),
migrations.AlterModelOptions(
name="chatmessage",
options={
"default_permissions": (),
"permissions": (
("can_use_chat", "Can use the chat"),
("can_manage_chat", "Can manage the chat"),
),
},
),
migrations.AddField(
model_name="projector",
name="blank",
field=models.BooleanField(default=False),
),
migrations.AddField(
model_name="projector",
name="height",
field=models.PositiveIntegerField(default=915),
),
migrations.AddField(
model_name="projector",
name="name",
field=models.CharField(blank=True, max_length=255, unique=True),
),
migrations.AddField(
model_name="projector",
name="width",
field=models.PositiveIntegerField(default=1220),
),
migrations.AddField(
model_name="projectiondefault",
name="projector",
field=models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="projectiondefaults",
to="core.Projector",
),
),
migrations.RunPython(name_default_projector),
migrations.RunPython(remove_old_countdowns_messages),
migrations.RunPython(add_projection_defaults),
]