categories.py 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. from misago.categories.models import Category
  2. from . import fetch_assoc, movedids
  3. def move_categories(stdout, style):
  4. query = '''
  5. SELECT *
  6. FROM
  7. misago_forum
  8. WHERE
  9. tree_id = %s AND level > 0
  10. ORDER BY
  11. lft
  12. '''
  13. root = Category.objects.root_category()
  14. for forum in fetch_assoc(query, [get_root_tree()]):
  15. if forum['type'] == 'redirect':
  16. stdout.write(style.ERROR('Skipping redirect: %s' % forum['name']))
  17. continue
  18. if forum['level'] == 1:
  19. parent = root
  20. else:
  21. new_parent_id = movedids.get('category', forum['parent_id'])
  22. parent = Category.objects.get(pk=new_parent_id)
  23. category = Category.objects.insert_node(Category(
  24. name=forum['name'],
  25. slug=forum['slug'],
  26. description=forum['description'],
  27. is_closed=forum['closed'],
  28. prune_started_after=forum['prune_start'],
  29. prune_replied_after=forum['prune_last'],
  30. ), parent, save=True)
  31. movedids.set('category', forum['id'], category.pk)
  32. # second pass: move prune_archive_id
  33. for forum in fetch_assoc(query, [get_root_tree()]):
  34. if not forum['pruned_archive_id']:
  35. continue
  36. new_category_pk = movedids.get('category', forum['id'])
  37. new_archive_pk = movedids.get('category', forum['pruned_archive_id'])
  38. Category.objects.filter(pk=new_category_pk).update(
  39. archive_pruned_in=Category.objects.get(pk=new_archive_pk)
  40. )
  41. def get_root_tree():
  42. query = 'SELECT tree_id FROM misago_forum WHERE special = %s'
  43. for root in fetch_assoc(query, ['root']):
  44. return root['tree_id']
  45. def move_labels():
  46. labels = []
  47. for label in fetch_assoc('SELECT * FROM misago_threadprefix ORDER BY slug'):
  48. labels.append(label)
  49. for label in labels:
  50. query = 'SELECT * FROM misago_threadprefix_forums WHERE threadprefix_id= %s'
  51. for parent_row in fetch_assoc(query, [label['id']]):
  52. parent_id = movedids.get('category', parent_row['forum_id'])
  53. parent = Category.objects.get(pk=parent_id)
  54. category = Category.objects.insert_node(Category(
  55. name=label['name'],
  56. slug=label['slug'],
  57. ), parent, save=True)
  58. label_id = '%s-%s' % (label['id'], parent_row['forum_id'])
  59. movedids.set('label', label_id, category.pk)