يبدو أن عملية ترحيل كلمات المرور لم تنجح بالنسبة لي.
ضبطت passwords: true في ملف shared/standalone/import/settings.yml قبل الاستيراد من نسخة احتياطية لـ phpBB 3.0. لدي هذا الإعداد في ملف containers/app.yml:
ثم شغّلت الأمر ./launcher rebuild app بعد الاستيراد. يبدو أن الاستيراد قد اكتمل بنجاح، إلا أنني لا أستطيع تسجيل الدخول بكلمة المرور من phpBB. لم ألاحظ أي رسائل خطأ ذات صلة أثناء الاستيراد، وكلمة المرور تتكون من 20 حرفًا، لذا يجب أن تتجاوز حد الطول الأدنى.
ما الذي يجب أن أبحث عنه لاستكشاف المشكلة؟
معلومة إضافية: أرى إدخالات import_pass في جدول user_custom_fields في قاعدة البيانات تطابق تجزئات كلمات المرور الموجودة في قاعدة بيانات phpBB، لذا يبدو أن هذا الجزء قد نجح؟
تعديل: آه، لقد فهمت ما حدث. لقد نسيت تمامًا أننا انتقلنا إلى مصادقة LDAP لـ phpBB… كلمات المرور التي استوردتها كانت على ما يرام، لكنها ببساطة عمرها 15 عامًا! لذا الآن أحتاج إلى إعداد شيء ما لاستخراج تجزئات كلمات المرور من LDAP بدلاً من ذلك…
في البداية، اعتقدت أن المشكلة سببها أن إصدار phpBB 3.0.12 قديم جدًا، لذا قمت بترقية phpBB إلى الإصدار 3.0.14، ونظفت مجلدي Discourse والتحميلات، وحاولت الاستيراد مرة أخرى. لكن دون جدوى.
ثم قمت بترقية إصدار phpBB إلى 3.2.0 (بعد تشغيل أداة الدعم الخاصة بهم لتنظيف قاعدة البيانات من الإضافات) على خادم تجريبي، وما زلت لم أجد حلاً.
قبل الغوص في استكشاف قاعدة البيانات الخاصة بي، أردت التأكد من أن السكربت يعمل للجميع.
لا أعتقد أنني ارتكبت خطأً في ملف الإعدادات، لكن ربما نظرة جديدة عليه قد تساعد.
# هذا ملف إعدادات مثال لاستيراد phpBB3.
database:
type: MySQL # حاليًا يتم دعم MySQL فقط
host: localhost
port: 3306
username: root
password:
schema: phpbb
table_prefix: phpbb_ # غيّر هذا إذا كان المنتدى الخاص بك يستخدم بادئة مختلفة. عادةً تبدأ جميع أسماء الجداول بـ phpbb_
batch_size: 1000 # لا تغير هذا إلا إذا كنت تعرف ما تفعله. القيمة الافتراضية (1000) يجب أن تعمل بشكل جيد.
import:
# اضبط هذا إذا كنت تستورد منتديات phpBB متعددة إلى منتدى Discourse واحد.
#
# على سبيل المثال، عند استيراد مواقع متعددة، ضع بادئة 'first' أمام جميع المعرفات المستوردة
# لتجنب التعارضات. يجب أن تحتوي عمليات الاستيراد اللاحقة على 'site_name' مختلف.
#
# site_name: first
#
site_name:
# إنشاء فئات جديدة
#
# على سبيل المثال، لإنشاء فئة رئيسية وفئة فرعية.
#
# new_categories:
# - forum_id: foo
# name: فئة Foo
# - forum_id: bar
# name: فئة Bar
# parent_id: foo
#
new_categories: []
# تعيينات الفئات
#
# على سبيل المثال، سيتم استيراد المواضيع من فئة phpBB 1 و 2
# في الفئة الجديدة "فئة Foo"، وسيتم استيراد المواضيع من فئة phpBB 3
# في الفئة الفرعية "فئة Bar"، وسيتم دمج المواضيع من فئة phpBB
# 4 في الفئة 5، وسيتم تخطي الفئة 6.
#
# category_mappings:
# 1: foo
# 2: foo
# 3: bar
# 4: 5
# 6: SKIP
#
category_mappings: {}
# تعيينات الوسوم
#
# على سبيل المثال، سيتم وضع وسم 'first-category' على المواضيع المستوردة من فئة phpBB 1، وهكذا.
#
# tag_mappings:
# 1:
# - first-category
# 2:
# - second-category
# 3:
# - third-category
#
tag_mappings:
# تعيين الرتب إلى مستويات الثقة
#
# رتب مستويات رتب phpBB 3.x إلى مستويات الثقة
# سيكون للمستخدمين الذين رتبتهم 3000 على الأقل مستوى ثقة TL3، وهكذا.
#
# rank_mapping:
# trust_level_1: 200
# trust_level_2: 1000
# trust_level_3: 3000
#
rank_mapping:
# تحذير: لا تفعل هذا الخيار إلا إذا كنت تعرف ما تفعله.
# من المحتمل أن يكسر تحويل BBCode إلى Markdown ويبطئ عملية الاستيراد.
use_bbcode_to_md: false
# هذا هو المسار إلى المجلد الجذري لتثبيت phpBB الحالي (أو نسخة منه).
# يتوقع المستورد العثور على مجلدي /files و /images داخل المجلد الأساسي.
# يجب عليك تغيير هذا إلى شيء مثل /var/www/phpbb إذا لم تكن تستخدم المستورد القائم على Docker.
# هذا مطلوب فقط إذا كنت تريد استيراد الصور الرمزية أو المرفقات أو الرموز التعبيرية المخصصة.
phpbb_base_dir: /shared/import/data
site_prefix:
# هذا مطلوب لإعادة كتابة الروابط الداخلية في المنشورات
original: ***.com # بدون http(s)://
new: https://****.org # مع http:// أو https://
# فعل هذا إذا كنت تريد إعادة توجيه روابط المنتدى القديمة إلى المواقع الجديدة.
permalinks:
categories: true # يعيد توجيه /viewforum.php?f=1 إلى /c/category-name
topics: true # يعيد توجيه /viewtopic.php?f=6&t=43 إلى /t/topic-name/81
posts: false # يعيد توجيه /viewtopic.php?p=2455#p2455 إلى /t/topic-name/81/4
# أضف بادئة لكل نوع من الروابط، مثل 'forum' لإعادة توجيه /forum/viewtopic.php?f=6&t=43 إلى /t/topic-name/81
# اتركه فارغًا إذا لم يكن المنتدى الخاص بك مثبتًا في مجلد فرعي.
prefix:
avatars:
uploaded: true # استيراد الصور الرمزية المرفوعة
gallery: false # استيراد الصور الرمزية المحددة مسبقًا التي يقدمها phpBB
remote: false # تحذير: هذا قد يبطئ عملية الاستيراد بشكل كبير. سيحاول تنزيل الصور الرمزية البعيدة.
# عندما تكون القيمة صحيحة: يتم استيراد المستخدمين المجهولين كمستخدمين معلقين. لا يمكنهم تسجيل الدخول وليس لديهم عنوان بريد إلكتروني.
# عندما تكون القيمة خاطئة: سيتم استخدام المستخدم النظام لجميع المستخدمين المجهولين.
anonymous_users: true
# فعل هذا إذا كنت تريد استيراد تجزئات كلمات المرور لاستخدام إضافة "migratepassword".
# هذا سيمكن المستخدمين من تسجيل الدخول بكلمة المرور الحالية.
# الإضافة متوفرة على: https://github.com/discoursehosting/discourse-migratepassword
passwords: false
# بشكل افتراضي، يتم استيراد كل ما يلي. يمكنك تعطيلها بتعيينها إلى false.
bookmarks: true
attachments: true
private_messages: false
polls: false
# عندما تكون القيمة صحيحة: سيكون لكل مستخدم مستورد اسم المستخدم الأصلي من phpBB كاسم له
# عندما تكون القيمة خاطئة: سيكون اسم كل مستخدم مستورد فارغًا ما لم يتم تغيير اسم المستخدم أثناء الاستيراد
username_as_name: false
# تعيين الرموز التعبيرية إلى الرموز التعبيرية المستخدمة في phpBB. معظم الرموز التعبيرية الافتراضية لها تعيين بالفعل، ولكن يمكنك تجاوز
# التعيينات هنا إذا لم تعجبك بعض منها.
# صيغة التعيين هي: emoji_name: 'smiley_in_phpbb'
# أو تعيين عدة رموز تعبيرية إلى رمز تعبيري واحد: emoji_name: ['smiley1', 'smiley2']
emojis:
# هنا مثالان على التعيين...
smiley: [':D', ':-D', ':grin:']
heart: ':love:'
أفترض أن هذا ينطبق على phpBB أيضًا، حيث أحاول استيراد نسخ احتياطية تتراوح بين الإصدار 3.2.x و3.3.3، لكن عدد المنشورات الأصلية المفقودة يصل إلى الآلاف. حتى مع إجراء عمليات متعددة واستعادة نسخ احتياطية متتالية من إصدارات مختلفة. ولتبسيط عملية التصحيح، يمكن للنص أن يُخرِج رابطًا لرقم تعريف الرسالة في المنتدى القديم لأغراض المراجعة (… viewtopic.php?p=57912)
في الواقع، بما أننا في هذا الموضوع، لماذا لا نسجل جميع صفوف الاستيراد الفاشلة مع رسائل الخطأ الخاصة بها في ملف تصدير لمشاركته لأغراض التحليل… مجرد فكرة…
على الأقل في حالة واحدة، يوجد موضوع viewtopic.php?f=3&t=1472، لكن المنشور الأول viewtopic.php?p=145185 قد تم حذفه أو إزالته، وأصبح الآن المنشور الأول للموضوع هو viewtopic.php?p=145186 وهو “ردّ”.
ربما من الأفضل للتوضيح أن نحدد بوضوح ما إذا كان الموضوع الأصلي غير موجود فعليًا في ملف التصدير، أم أنه لم يتم استيراده إلى عملية إعادة البناء بعد.
كانت نسخة قديمة جدًا من phpBB مع بعض الإضافات. قمت بتنظيف بسيط ونجحت في الترقية من phpBB 3.0.12 إلى أحدث إصدار 3.1 أو 3.2، وقمت باختبار استيراد لكل إصدار، لكنه لم ينجح. قد تكون المشكلة في قاعدة البيانات. لذلك، إذا تمكّنت من إتمام استيراد كامل بنجاح في المرة القادمة، فسيكون من المفيد جدًا سماع ذلك منك. إذا كانت المشكلة في قاعدة بيانات phpBB، فسأقوم بالبحث بعمق بمساعدة بعض الزملاء، أما إذا كانت المشكلة في السكربت، فيمكنني الانتظار. شكرًا لك على رسالتك!
لا أتذكر آخر مرة قمت فيها باستيراد phpBB3، وأعتقد (لكن لا يمكنني التأكد) أن السبب هو أن السكربت يعمل بشكل ممتاز.
وبما أنها تُحمّل إلى Discourse، فالمشكلة على الأرجح تتعلق بكيفية الإشارة إليها في منشورات phpBB. هل تظهر أي أخطاء عند تشغيله؟ قد تكون هذه الأخطاء مؤشرات. أو ربما غيّرت الإضافات طريقة ظهورها في المنشورات و/أو في قاعدة البيانات. ستحتاج على الأرجح إلى بعض البحث.
كان لدي بعض “الملفات المفقودة” و"وقت المنشور غير صحيح"، وقد واجهت هذه المشكلات خلال عمليات الاستيراد السابقة، لذا لا أعتقد أنها مشكلة كبيرة. كما ظهرت لدي العديد من رسائل “المنشور الأصلي غير موجود” في التشغيل الأول، ولكن تم ذكر ذلك سابقًا في هذا الموضوع، وإعادة تشغيل السكربت مرة أخرى تحل هذه المشكلة.
بخلاف ذلك، عمل السكربت بشكل جيد جدًا دون أي مشاكل كبيرة.
كان هناك إضافة (يبدو أنها كانت في الغالب ملف htaccess، لم أقم بتشغيل هذا المنتدى) لترتيب الملفات في مجلدات فرعية (حسب الأشهر والسنوات)، لكنني قمت بتنظيمها في نفس المجلد، وعملت الترقيات بنجاح على نسخة نظيفة من phpBB. جميع الملفات المستوردة كانت تعمل بشكل صحيح على phpBB 3.1 و3.2.
سأبحث بعمق أكبر في قاعدة البيانات، فقد يكون لدي ملف SQL من استيراد قديم. سأقوم بمقارنة جداول المرفقات والمنشورات على خادم الاختبار الخاص بي. ربما تكون هناك شيء فاتني.
مرحبًا، لقد قمت للتو باستيراد حوالي 35 ألف منشور؛ خلال عملية الاستيراد، لاحظت ظهور رسالة “Parent post XXXXXX doesn’t exist. Skipping” بشكل متكرر، وعندما انتهت العملية، وجدت في منتدى Discourse جميع “المواضيع” (أعتقد ذلك)، لكنها خالية تمامًا من الردود. عمليًا، تم استيراد الموضوع فقط، وليس المنشورات (باستثناء المنشور الأول الذي يحتوي على نص الموضوع نفسه).
كما لم يتم استيراد الصور الرمزية (Avatars)، رغم أنني وضعتها في المسار الصحيح ضمن مجلد “import”.
كان المنتدى الأصلي يعمل على phpBB2، وقد تم استيراده بانتظام وظهور جميع منشوراته في phpBB3، لكنني قمت بحذف العديد من الرسائل القديمة سابقًا؛ ومع ذلك، يبدو أن كل شيء على ما يرام في phpBB3.
هل لديك أي اقتراحات؟ هل يوجد سكريبت استيراد يمكنني التحقق منه؟
لقد قرأت الموضوع عدة مرات وأجريت بعض عمليات الترحيل، ولكن في كل مرة كنت مرتبكًا بشأن هذه الإضافة وواجهت أخطاء مماثلة. أنا في عملية الترحيل الثالثة وهذا جعلني مجنونًا. أعتقد أن طريقة عمل هذه الإضافة يمكن أن تربك المستخدمين الذين يقومون بعمليات الترحيل.
يجب تحديد مكان ما بأن الإضافة يجب تفعيلها على Discourse بعد عملية الترحيل. إذا كان هذا مكتوبًا بالفعل في مكان ما، فقد أكون قد فاتني ذلك وربما يجب التأكيد على هذه المعلومات.
لاحظ كيف أن بداية التعبير النمطي لا تفترض وجود حرف “:” بعده:
<!-- s
ولكنها تفترض وجوده في نهاية التعبير النمطي:
<!-- s?:
(أيضًا أتساءل لماذا يوجد “?” يطابق 0 أو 1 من الحرف “s” في نهاية التعبير النمطي، حيث لا يوجد في بداية التعبير النمطي)
لقد قمت بإزالة هذا “:” من التعبير النمطي وبدت مشكلتا الرموز التعبيرية الخاصتان بي محلولتين تمامًا.
في منتدى phpbb الخاص بي، بدأت العديد من الرموز التعبيرية بالفعل بـ “:” مثل “:mrgreen:” أو “:evil:”، ولكن بعضها لم يبدأ بذلك، مثل 8-) أو ;)
أدى التعبير النمطي القديم إلى التقاطات خاطئة للرموز التعبيرية. على سبيل المثال، تم التقاط رموز تعبيرية متعددة بجانب بعضها البعض كرمز تعبيري واحد.
أنا لا أقوم بإصلاح الكود مباشرة في مستودع Discourse لأنني لست معتادًا على استخدام git، وأيضًا لست متأكدًا مما إذا كان سيؤثر على الاستيرادات من إصدارات phpBB الأخرى. لا أريد أن أفسد أي شيء.
على أي حال، إذا واجه الأشخاص نفس المشكلات التي واجهتها، فإليك الحل.
تم إصلاح مشكلة أخرى يمكن أن تساعد الأشخاص في حالتي أثناء ترحيل phpBB 3.0.7.
لسبب ما، كانت محتويات منشورات منتديات phpBB الخاصة بي تحتوي أحيانًا على مسافات متعددة تتبع المحتوى في بداية الأسطر. أشك في أن بعض المستخدمين “يحبون” الضغط على مفتاح المسافة بشكل محموم دون الانتباه عند كتابة رسالتهم، ولم يكن لذلك أهمية لأن الصفحة “المعروضة” تجاهلت هذه المسافات المتعددة:
محتوى نص phpBB الخام:
Salut tous :)
Alors voilà, le combi n'a pas roulé beaucoup ces derniers temps cause CT pas OK :evil: mais il a fait ces 2000 kms sans broncher ;)
Maintenant le CT est OK . Merci L'Atelier Du Raz 8-')
Je dois donc changer le joint-spi au bout de 40 000 kms en 10 ans :roll:
C'est un silicone et j'ai vu qu'il y avait des "doubles lèvres " !?
What's About ?
Je trouve ça un peu limte :evil:
Merci tous, fred
def clean_bbcodes(text)
# Many phpbb bbcode tags have a hash attached to them. Examples:
# [url=https://google.com:1qh1i7ky]click here[/url:1qh1i7ky]
# [quote="cybereality":b0wtlzex]Some text.[/quote:b0wtlzex]
text.gsub!(/:(?:\\w{8})\\]/, ']')
في قاعدة البيانات الخاصة بي، تتراوح أطوال هذه التجزئات بين 5 و 8 أحرف، لكن التعبير العادي يزيل فقط التجزئات التي يبلغ طولها 8 أحرف بالضبط. لذلك، احتفظ استيرادي بالتجزئات الأقصر بدلاً من إزالتها.
لقد أصلحت هذا عن طريق تغيير التعبير العادي إلى:
text.gsub!(/:(?:\\w{5,8})\\]/, ']')
أضفت مشكلة بسيطة أخرى، لا تزال في نفس الملف. يتوقع التعبير العادي الذي يزيل علامات BBCode [color] قيمة سداسية عشرية مسبوقة بـ # إلزامي. ولكن [color] يقبل أيضًا سلاسل مثل “red” و “blue” وما إلى ذلك، كقيم. لذلك قمت بتعديل التعبير العادي الأصلي:
# remove color tags
text.gsub!(/\\[\\/?color(=#[a-z0-9]*)?\\]/i, "")
عن طريق إضافة ? بعد # لجعل # اختياريًا.
الكود الثابت:
# remove color tags
text.gsub!(/\\[\\/?color(=#?[a-z0-9]*)?\\]/i, "")
لا أعرف ما إذا كانت مشاكلي شائعة في عمليات استيراد phpBB، أو ما إذا كانت خاصة جدًا بحالتي. إذا كانت الحالة الأخيرة، آمل ألا تكون تفسيراتي هنا غير مرحب بها أو زائدة عن الحاجة. فقط أخبرني إذا كان الأمر كذلك حتى لا يكون الأمر محرجًا.
تعديل: هل من الممكن جعل جميع المواضيع الموجودة تُضبط على أنها “مقروءة” لكل مستخدم موجود بعد الترحيل؟
الهدف هو منع المستخدمين الحاليين من الانتقال إلى الرسالة الأولى في هذه المواضيع التي قرأوها بالفعل قبل الترحيل، عند النقر على المواضيع الموجودة (والقديمة أحيانًا) بعد الترحيل.
من الناحية المثالية، سيفتح المستخدمون الحاليون عند النقر على المواضيع الموجودة، ليس الرسالة الأولى، بل الأخيرة (منذ نهاية الترحيل، بالطبع).
إنها مشكلة صغيرة تتعلق بجودة الحياة (وستختفي بشكل طبيعي بعد بضعة أسابيع مع استخدام المستخدمين للمنتدى وقراءة المواضيع)، ولكن تم سؤالي عن هذا الاقتراح.
شكراً لمشاركة هذه الإصلاحات!
لقد اضطررت إلى إجراء تعديلات مماثلة على التعبيرات النمطية (regexes) لعمليات الترحيل السابقة، لذا ستكون هذه مفيدة لعمليات استيراد phpbb المستقبلية.