أقوم بإصلاح مشكلة في إضافة الفعاليات حيث لا يتم حفظ بيانات الفعاليات في حقل post_custom_field إذا كانت الفئة مضبوطة على طلب الموافقة للمواضيع.
لقد راجعت إضافة stops، ويبدو أن الحقول المخصصة تُضبط هناك على :approved_post.
هذا مقتطف من إضافة polls:
NewPostManager.add_handler(1) do |manager|
post = Post.new(raw: manager.args[:raw])
if !DiscoursePoll::PollsValidator.new(post).validate_polls
result = NewPostResult.new(:poll, false)
post.errors.full_messages.each do |message|
result.errors[:base] << message
end
result
else
manager.args["is_poll"] = true
nil
end
end
on(:approved_post) do |queued_post, created_post|
if queued_post.payload["is_poll"]
created_post.validate_polls(true)
end
end
في محاولتي، بيانات الحقول المخصصة متاحة في NewPostManager، لكن مثيل ReviewableQueuedPost في استدعاء :approved_post (والذي من المفترض نظريًا أن يحتوي على الحقل المخصص في حمولته) لا يحتوي عليها.
لقد جربت:
NewPostManager.add_handler do |manager|
if manager.args['event'] && NewPostManager.post_needs_approval?(manager) # هذا الشرط صحيح
manager.args['is_event'] = true
end
ثم:
on(:approved_post) do |reviewable, post|
p reviewable.payload['is_event'] # البيانات غير متاحة هنا
end
هذا مثير للاهتمام، لأنني لا أتوقع أن تعمل الاستطلاعات هنا أيضًا. الحجج الممررة إلى المدير لا تُوضع تلقائيًا في حمولة العنصر القابل للمراجعة.
أشتبه في وجود خلل هنا يتعلق بالاستطلاعات والمنشورات المعلقة. أعتقد أن دالة validate_polls لا تُستدعى أبدًا بعد الموافقة. @Roman، هل يمكنك التحقق من ذلك؟
@Roman، هل تعتقد أن هذه الميزة تحتاج إلى نقلها إلى الإصدارات الأقدم؟
أعتقد أنه يجب أن يكون ذلك، حتى يتمكن الأشخاص في فروع الاختبارات الناجحة وفروع الإصدار من الاستفادة منها أيضًا. أعتقد أن بعض الإضافات، إن لم يكن معظمها، التي تستخدم post_custom_fields تحتاج إلى التعامل مع هذه الحالة الحدية.