2019-05-02 17:17:27 -05:00
# frozen_string_literal: true
2013-02-05 13:16:51 -06:00
require 'image_sizer'
module Jobs
2019-10-01 23:01:53 -05:00
class ProcessPost < :: Jobs :: Base
2013-02-05 13:16:51 -06:00
2013-02-25 10:42:20 -06:00
def execute ( args )
2014-05-06 08:41:59 -05:00
post = Post . find_by ( id : args [ :post_id ] )
2013-04-17 20:34:40 -05:00
# two levels of deletion
return unless post . present? && post . topic . present?
2013-02-05 13:16:51 -06:00
2014-12-06 23:39:15 -06:00
orig_cooked = post . cooked
recooked = nil
if args [ :cook ] . present?
2015-09-29 11:51:26 -05:00
cooking_options = args [ :cooking_options ] || { }
cooking_options [ :topic_id ] = post . topic_id
recooked = post . cook ( post . raw , cooking_options . symbolize_keys )
2018-02-05 10:46:53 -06:00
post . update_columns ( cooked : recooked , baked_at : Time . zone . now , baked_version : Post :: BAKED_VERSION )
2014-12-06 23:39:15 -06:00
end
2013-02-05 13:16:51 -06:00
cp = CookedPostProcessor . new ( post , args )
2019-01-16 20:24:32 -06:00
cp . post_process ( bypass_bump : args [ :bypass_bump ] , new_post : args [ :new_post ] )
2013-02-05 13:16:51 -06:00
# If we changed the document, save it
2014-12-06 23:39:15 -06:00
cooked = cp . html
if cooked != ( recooked || orig_cooked )
if orig_cooked . present? && cooked . blank?
2020-01-26 20:31:11 -06:00
# TODO stop/restart the worker if needed, let's gather a few here first
2014-12-06 23:43:26 -06:00
Rails . logger . warn ( " Cooked post processor in FATAL state, bypassing. You need to urgently restart sidekiq \n orig: #{ orig_cooked } \n recooked: #{ recooked } \n cooked: #{ cooked } \n post id: #{ post . id } " )
2014-12-06 23:39:15 -06:00
else
2019-04-01 03:29:00 -05:00
post . update_column ( :cooked , cp . html )
2017-01-30 02:42:05 -06:00
extract_links ( post )
2014-12-06 23:39:15 -06:00
post . publish_change_to_clients! :revised
end
2014-08-26 19:58:43 -05:00
end
2017-06-28 15:56:44 -05:00
2017-12-21 07:45:59 -06:00
if ! post . user & . staff? && ! post . user & . staged?
2017-06-28 15:56:44 -05:00
s = post . cooked
s << " #{ post . topic . title } " if post . post_number == 1
2017-10-12 14:34:22 -05:00
if ! args [ :bypass_bump ] && WordWatcher . new ( s ) . should_flag?
2019-01-03 11:03:01 -06:00
PostActionCreator . create ( Discourse . system_user , post , :inappropriate )
2017-06-28 15:56:44 -05:00
end
end
2013-02-05 13:16:51 -06:00
end
2017-01-30 02:42:05 -06:00
# onebox may have added some links, so extract them now
def extract_links ( post )
TopicLink . extract_from ( post )
QuotedPost . extract_from ( post )
end
2013-02-05 13:16:51 -06:00
end
end