categories.py 2.6 KB

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