مرحبًا أيها المجتمع. لقد قضيتُ أسبوعين في تعلّم وإعادة كتابة سكريبت استيراد لموقعي على نظام Livestreet CMS. لقد أكملتُ كتابة السكريبت بالفعل، ولم يتبقَّ سوى تنظيفه وتقديم طلب دمج (pull request).
لقد قمتُ باستيراد جميع المستخدمين أيضًا، باستثناء أولئك الذين يستخدمون المصادقة عبر الخدمات الخارجية. السؤال هو: كيف يمكن استيراد المستخدمين من الموقع المانح إلى Discourse والذين يستخدمون المصادقة عبر فيسبوك أو جوجل؟ أودُ إيجاد الحلّ الأكثر أناقة. المشكلة أيضًا أن بعض مستخدمي فيسبوك لا يملكون عناوين بريد إلكتروني.
بونص! استيراد الإعجابات مع معامل date_added.
لقد وجدتُ طريقة أخرى لاستيراد الإعجابات مع التاريخ، حيث أن الطريقة القديمة في السكريبتات الأخرى لا تعمل.
likes = mysql_query(<<-SQL
SELECT target_id
, user_voter_id
, vote_date
, target_type
FROM #{TABLE_PREFIX}vote
WHERE vote_direction = 1
ORDER BY vote_date
SQL
).to_a
likes.each do |l|
next unless user_id = user_id_from_imported_user_id(l["user_voter_id"])
next unless post_id = post_id_from_imported_post_id("post-#{l["target_id"]}")
next unless user = User.find_by(id: user_id)
next unless post = Post.find_by(id: post_id)
PostActionCreator.create(user, post, PostActionType.types[2], created_at: Time.at(l["vote_date"])); #PostActionType.types[2] is like
end