Browse Source

#600: move mentions, edits and turn upvotes to likes

Rafał Pitoń 8 years ago
parent
commit
3b47b52dbb

+ 15 - 0
misago/datamover/management/commands/movethreads.py

@@ -17,3 +17,18 @@ class Command(BaseCommand):
         threads.move_posts()
         self.stdout.write(
             self.style.SUCCESS("Moved posts in %s" % self.stop_timer()))
+
+        self.start_timer()
+        threads.move_mentions()
+        self.stdout.write(
+            self.style.SUCCESS("Moved mentions in %s" % self.stop_timer()))
+
+        self.start_timer()
+        threads.move_edits()
+        self.stdout.write(
+            self.style.SUCCESS("Moved edits histories in %s" % self.stop_timer()))
+
+        self.start_timer()
+        threads.move_likes()
+        self.stdout.write(
+            self.style.SUCCESS("Moved likes in %s" % self.stop_timer()))

+ 108 - 1
misago/datamover/threads.py

@@ -5,7 +5,7 @@ from django.utils import timezone
 
 from misago.categories.models import Category
 from misago.threads.checksums import update_post_checksum
-from misago.threads.models import Thread, Post
+from misago.threads.models import Thread, Post, PostEdit, PostLike
 
 from . import fetch_assoc, markup, movedids, localise_datetime
 
@@ -119,6 +119,113 @@ def move_posts():
         movedids.set('post', post['id'], new_post.pk)
 
 
+def move_mentions():
+    for metion in fetch_assoc('SELECT * FROM misago_post_mentions'):
+        try:
+            post_pk = movedids.get('post', metion['post_id'])
+            user_pk = movedids.get('user', metion['user_id'])
+
+            post = Post.objects.get(pk=post_pk)
+            user = UserModel.objects.get(pk=user_pk)
+
+            post.mentions.add(user)
+        except:
+            continue
+
+
+def move_edits():
+    query = 'SELECT DISTINCT post_id FROM misago_change ORDER BY post_id'
+    for edit in fetch_assoc(query):
+        post_pk = movedids.get('post', edit['post_id'])
+        post = Post.objects.select_related().get(pk=post_pk)
+
+        move_post_edits(post, edit['post_id'])
+
+
+def move_post_edits(post, old_id):
+    query = '''
+        SELECT *
+        FROM
+            misago_change
+        WHERE
+            post_id = %s AND `change` <> 0
+        ORDER BY
+            id
+    '''
+
+    changelog = []
+    for edit in fetch_assoc(query, [old_id]):
+        if edit['user_id']:
+            editor_pk = movedids.get('user', edit['user_id'])
+            editor = UserModel.objects.get(pk=editor_pk)
+        else:
+            editor = None
+
+        if changelog:
+            changelog[-1].edited_to = edit['post_content']
+
+        changelog.append(PostEdit(
+            category=post.category,
+            thread=post.thread,
+            post=post,
+            edited_on=localise_datetime(edit['date']),
+            editor=editor,
+            editor_name=edit['user_name'],
+            editor_slug=edit['user_slug'],
+            editor_ip=edit['ip'],
+            edited_from=edit['post_content'],
+            edited_to=post.original,
+        ))
+
+    if changelog:
+        PostEdit.objects.bulk_create(changelog)
+
+
+def move_likes():
+    query = '''
+        SELECT *
+        FROM
+            misago_karma
+        WHERE
+            score > 0
+        ORDER BY
+            id
+    '''
+
+    posts = []
+    for karma in fetch_assoc(query):
+        post_pk = movedids.get('post', karma['post_id'])
+        post = Post.objects.select_related().get(pk=post_pk)
+
+        if karma['user_id']:
+            liker_pk = movedids.get('user', karma['user_id'])
+            liker = UserModel.objects.get(pk=liker_pk)
+        else:
+            liker = None
+
+        PostLike.objects.create(
+            category=post.category,
+            thread=post.thread,
+            post=post,
+            liker=liker,
+            liker_name=karma['user_name'],
+            liker_slug=karma['user_slug'],
+            liker_ip=karma['ip'],
+            liked_on=localise_datetime(karma['date']),
+        )
+
+        posts.append(post_pk)
+
+    for post in Post.objects.filter(id__in=posts).iterator():
+        post.last_likes = []
+        for like in post.postlike_set.all()[:4]:
+            post.last_likes.append({
+                'id': like.liker_id,
+                'username': like.liker_name
+            })
+        post.save(update_fields=['last_likes'])
+
+
 def get_special_categories_dict():
     special_categories = {}
 

+ 4 - 4
misago/datamover/users.py

@@ -111,8 +111,8 @@ def move_blocks():
 
 
 def move_namehistory():
-    for user in fetch_assoc(
-            'SELECT DISTINCT user_id FROM misago_usernamechange ORDER BY user_id'):
+    query = 'SELECT DISTINCT user_id FROM misago_usernamechange ORDER BY user_id'
+    for user in fetch_assoc(query):
         new_id = movedids.get('user', user['user_id'])
         new_user = UserModel.objects.get(pk=new_id)
         move_users_namehistory(new_user, user['user_id'])
@@ -120,8 +120,8 @@ def move_namehistory():
 
 def move_users_namehistory(user, old_id):
     username_history = []
-    for namechange in fetch_assoc(
-            'SELECT * FROM misago_usernamechange WHERE user_id = %s  ORDER BY id', [old_id]):
+    query = 'SELECT * FROM misago_usernamechange WHERE user_id = %s ORDER BY id'
+    for namechange in fetch_assoc(query, [old_id]):
         if username_history:
             username_history[-1].new_username = namechange['old_username']