categories.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  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(Category(
  25. name=forum['name'],
  26. slug=forum['slug'],
  27. description=forum['description'],
  28. is_closed=forum['closed'],
  29. prune_started_after=forum['prune_start'],
  30. prune_replied_after=forum['prune_last'],
  31. ), parent, save=True)
  32. movedids.set('category', forum['id'], category.pk)
  33. # second pass: move prune_archive_id
  34. for forum in fetch_assoc(query, [get_root_tree()]):
  35. if not forum['pruned_archive_id']:
  36. continue
  37. new_category_pk = movedids.get('category', forum['id'])
  38. new_archive_pk = movedids.get('category', forum['pruned_archive_id'])
  39. Category.objects.filter(pk=new_category_pk).update(
  40. archive_pruned_in=Category.objects.get(pk=new_archive_pk)
  41. )
  42. def get_root_tree():
  43. query = 'SELECT tree_id FROM misago_forum WHERE special = %s'
  44. for root in fetch_assoc(query, ['root']):
  45. return root['tree_id']
  46. def move_labels():
  47. labels = []
  48. for label in fetch_assoc('SELECT * FROM misago_threadprefix ORDER BY slug'):
  49. labels.append(label)
  50. for label in labels:
  51. query = 'SELECT * FROM misago_threadprefix_forums WHERE threadprefix_id= %s'
  52. for parent_row in fetch_assoc(query, [label['id']]):
  53. parent_id = movedids.get('category', parent_row['forum_id'])
  54. parent = Category.objects.get(pk=parent_id)
  55. category = Category.objects.insert_node(Category(
  56. name=label['name'],
  57. slug=label['slug'],
  58. ), parent, save=True)
  59. label_id = '%s-%s' % (label['id'], parent_row['forum_id'])
  60. movedids.set('label', label_id, category.pk)