64 lines
1.5 KiB
Python
64 lines
1.5 KiB
Python
# pylint: disable=invalid-name
|
|
|
|
from django.db import migrations
|
|
|
|
from ._migrations import legacy_migration_factory
|
|
|
|
UP = None
|
|
|
|
DOWN = None
|
|
|
|
|
|
def promote_admin_to_superadmin(cursor):
|
|
# Ensure there are no superadmins already
|
|
super_admin_count = cursor.execute(
|
|
"""
|
|
SELECT COUNT(id)
|
|
FROM cc_subjs
|
|
WHERE type = 'S'
|
|
AND login != 'sourcefabric_admin';
|
|
"""
|
|
).fetchone()
|
|
if super_admin_count != 0:
|
|
return
|
|
|
|
# Promote the "admin" user to superadmin
|
|
cursor.execute(
|
|
"""
|
|
UPDATE cc_subjs SET type = 'S'
|
|
WHERE login = 'admin';
|
|
"""
|
|
)
|
|
if cursor.rowcount == 0:
|
|
# Otherwise promote the administrator with the lowest ID
|
|
cursor.execute(
|
|
"""
|
|
UPDATE cc_subjs SET type = 'S'
|
|
WHERE id = (
|
|
SELECT id
|
|
FROM cc_subjs
|
|
WHERE type = 'A'
|
|
ORDER BY id
|
|
LIMIT 1
|
|
);
|
|
"""
|
|
)
|
|
if cursor.rowcount == 0:
|
|
raise RuntimeError("Failed to find any users of type 'admin' ('A')")
|
|
|
|
# Ignoring the sourcefabric_admin user
|
|
|
|
|
|
class Migration(migrations.Migration):
|
|
dependencies = [
|
|
("legacy", "0004_2_5_3"),
|
|
]
|
|
operations = [
|
|
migrations.RunPython(
|
|
code=legacy_migration_factory(
|
|
target="2.5.4",
|
|
before=promote_admin_to_superadmin,
|
|
)
|
|
)
|
|
]
|