scinote-web/app/helpers/global_activities_helper.rb

142 lines
4.6 KiB
Ruby
Raw Normal View History

# frozen_string_literal: true
module GlobalActivitiesHelper
include ActionView::Helpers::AssetTagHelper
include ActionView::Helpers::UrlHelper
include InputSanitizeHelper
2021-03-09 18:02:52 +08:00
def generate_activity_content(activity, no_links: false, no_custom_links: false)
parameters = {}
activity.message_items.each do |key, value|
parameters[key] =
if value.is_a? String
value
elsif value['type'] == 'Time' # use saved date for printing
2021-02-18 20:55:03 +08:00
I18n.l(Time.zone.at(value['value']), format: :full)
else
no_links ? generate_name(value) : generate_link(value, activity)
end
if key == 'comment' && parameters[key].strip.present?
2023-06-08 14:33:37 +08:00
parameters[key] = '<i class="sn-icon sn-icon-comments"></i>' + parameters[key]
end
end
2021-02-25 14:43:04 +08:00
2021-03-09 18:02:52 +08:00
if no_custom_links
I18n.t("global_activities.content.#{activity.type_of}_html", **parameters.symbolize_keys)
2021-02-25 14:43:04 +08:00
else
custom_auto_link(
I18n.t("global_activities.content.#{activity.type_of}_html", **parameters.symbolize_keys),
2021-02-25 14:43:04 +08:00
team: activity.team
)
end
rescue StandardError => e
Rails.logger.error(e.message)
Rails.logger.error(e.backtrace.join("\n"))
I18n.t('global_activities.index.content_generation_error', activity_id: activity.id)
end
def generate_link(message_item, activity)
obj = if message_item['id']
message_item['type'].constantize.find_by(id: message_item['id'])
else
message_item['type'].constantize.new
end
return message_item['value'] unless obj
current_value = generate_name(message_item)
team = activity.team
path = ''
case obj
when User
return "[@#{obj.full_name}~#{obj.id.base62_encode}]"
when Tag
# Not link for now
return current_value
when Team
path = projects_path(team: obj.id)
when Repository
2020-04-23 22:02:36 +08:00
path = repository_path(obj, team: obj.team.id)
when RepositoryRow
return current_value unless obj.repository
2020-04-23 22:02:36 +08:00
path = repository_path(obj.repository, team: obj.repository.team.id)
when RepositoryColumn
return current_value unless obj.repository
2020-04-23 22:02:36 +08:00
path = repository_path(obj.repository, team: obj.repository.team.id)
when Project
2023-12-07 03:53:11 +08:00
path = obj.archived? ? projects_path : experiments_path(project_id: obj)
when Experiment
return current_value unless obj.navigable?
2023-12-07 03:53:11 +08:00
path = if obj.archived?
experiments_path(project_id: obj.project, view_mode: :archived)
else
my_modules_experiment_path(obj)
end
when MyModule
return current_value unless obj.navigable?
path = if obj.archived?
my_modules_experiment_path(obj.experiment, view_mode: :archived)
else
2020-04-23 20:05:34 +08:00
protocols_my_module_path(obj)
end
when Protocol
2023-02-21 22:25:01 +08:00
if obj.my_module.nil?
path = protocols_path(team: obj.team.id)
elsif obj.my_module.navigable?
path = protocols_my_module_path(obj.my_module)
else
return current_value
end
when Result
return current_value unless obj.navigable?
path = obj.archived? ? archive_my_module_path(obj.my_module) : my_module_results_path(obj.my_module)
when Step
2019-04-02 16:36:11 +08:00
return current_value
2019-04-01 14:55:09 +08:00
when Report
preview_type = activity.type_of == 'generate_docx_report' ? :docx : :pdf
path = reports_path(team: obj.team.id, preview_report_id: obj.id, preview_type: preview_type)
when ProjectFolder
path = if obj.new_record?
projects_path(team: activity.team.id)
else
project_folder_path(obj, team: obj.team.id)
end
when StorageLocation
path = if obj.new_record?
storage_locations_path(team: activity.team.id)
else
storage_location_path(obj, team: activity.team.id)
end
else
return current_value
end
route_to_other_team(path, team, current_value)
end
def generate_name(message_item)
obj = if message_item['id']
message_item['type'].constantize.find_by(id: message_item['id'])
else
message_item['type'].constantize.new
end
return I18n.t('projects.index.breadcrumbs_root') if obj.is_a?(ProjectFolder) && obj.new_record?
return I18n.t('storage_locations.index.breadcrumbs_root') if obj.is_a?(StorageLocation) && obj.new_record?
return message_item['value'] unless obj
value = obj.public_send(message_item['value_for'] || 'name')
value = I18n.t('global_activities.index.no_name') if value.blank?
2019-04-02 16:36:11 +08:00
value
end
end