|
@@ -0,0 +1,76 @@
|
|
|
+from misago.categories.models import Category
|
|
|
+
|
|
|
+from . import fetch_assoc, movedids
|
|
|
+
|
|
|
+
|
|
|
+def move_categories(stdout, style):
|
|
|
+ query = '''
|
|
|
+ SELECT *
|
|
|
+ FROM
|
|
|
+ misago_forum
|
|
|
+ WHERE
|
|
|
+ tree_id = %s AND level > 0
|
|
|
+ ORDER BY
|
|
|
+ lft
|
|
|
+ '''
|
|
|
+
|
|
|
+ root = Category.objects.root_category()
|
|
|
+ for forum in fetch_assoc(query, [get_root_tree()]):
|
|
|
+ if forum['type'] == 'redirect':
|
|
|
+ stdout.write(style.ERROR('Skipping redirect: %s' % forum['name']))
|
|
|
+ continue
|
|
|
+
|
|
|
+ if forum['level'] == 1:
|
|
|
+ parent = root
|
|
|
+ else:
|
|
|
+ new_parent_id = movedids.get('category', forum['parent_id'])
|
|
|
+ parent = Category.objects.get(pk=new_parent_id)
|
|
|
+
|
|
|
+ category = Category.objects.insert_node(Category(
|
|
|
+ name=forum['name'],
|
|
|
+ slug=forum['slug'],
|
|
|
+ description=forum['description'],
|
|
|
+ is_closed=forum['closed'],
|
|
|
+ prune_started_after=forum['prune_start'],
|
|
|
+ prune_replied_after=forum['prune_last'],
|
|
|
+ ), parent, save=True)
|
|
|
+
|
|
|
+ movedids.set('category', forum['id'], category.pk)
|
|
|
+
|
|
|
+ # second pass: move prune_archive_id
|
|
|
+ for forum in fetch_assoc(query, [get_root_tree()]):
|
|
|
+ if not forum['pruned_archive_id']:
|
|
|
+ continue
|
|
|
+
|
|
|
+ new_category_pk = movedids.get('category', forum['id'])
|
|
|
+ new_archive_pk = movedids.get('category', forum['pruned_archive_id'])
|
|
|
+
|
|
|
+ Category.objects.filter(pk=new_category_pk).update(
|
|
|
+ archive_pruned_in=Category.objects.get(pk=new_archive_pk)
|
|
|
+ )
|
|
|
+
|
|
|
+
|
|
|
+def get_root_tree():
|
|
|
+ query = 'SELECT tree_id FROM misago_forum WHERE special = %s'
|
|
|
+ for root in fetch_assoc(query, ['root']):
|
|
|
+ return root['tree_id']
|
|
|
+
|
|
|
+
|
|
|
+def move_labels():
|
|
|
+ labels = []
|
|
|
+ for label in fetch_assoc('SELECT * FROM misago_threadprefix ORDER BY slug'):
|
|
|
+ labels.append(label)
|
|
|
+
|
|
|
+ for label in labels:
|
|
|
+ query = 'SELECT * FROM misago_threadprefix_forums WHERE threadprefix_id= %s'
|
|
|
+ for parent_row in fetch_assoc(query, [label['id']]):
|
|
|
+ parent_id = movedids.get('category', parent_row['forum_id'])
|
|
|
+ parent = Category.objects.get(pk=parent_id)
|
|
|
+
|
|
|
+ category = Category.objects.insert_node(Category(
|
|
|
+ name=label['name'],
|
|
|
+ slug=label['slug'],
|
|
|
+ ), parent, save=True)
|
|
|
+
|
|
|
+ label_id = '%s-%s' % (label['id'], parent_row['forum_id'])
|
|
|
+ movedids.set('label', label_id, category.pk)
|