2016-02-12 23:52:43 +08:00
|
|
|
class Activity < ActiveRecord::Base
|
2016-10-03 17:37:29 +08:00
|
|
|
after_create :generate_notification
|
|
|
|
|
2016-02-12 23:52:43 +08:00
|
|
|
enum type_of: [
|
|
|
|
:create_project,
|
|
|
|
:rename_project,
|
|
|
|
:change_project_visibility,
|
|
|
|
:archive_project,
|
|
|
|
:restore_project,
|
|
|
|
:assign_user_to_project,
|
|
|
|
:change_user_role_on_project,
|
|
|
|
:unassign_user_from_project,
|
|
|
|
:create_module,
|
|
|
|
:clone_module,
|
|
|
|
:archive_module,
|
|
|
|
:restore_module,
|
|
|
|
:change_module_description,
|
|
|
|
:assign_user_to_module,
|
|
|
|
:unassign_user_from_module,
|
|
|
|
:create_step,
|
|
|
|
:destroy_step,
|
|
|
|
:add_comment_to_step,
|
|
|
|
:complete_step,
|
|
|
|
:uncomplete_step,
|
|
|
|
:check_step_checklist_item,
|
|
|
|
:uncheck_step_checklist_item,
|
|
|
|
:edit_step,
|
|
|
|
:add_result,
|
|
|
|
:add_comment_to_result,
|
|
|
|
:archive_result,
|
2016-08-11 22:57:29 +08:00
|
|
|
:edit_result,
|
2016-11-02 16:18:06 +08:00
|
|
|
:create_experiment,
|
|
|
|
:edit_experiment,
|
|
|
|
:archive_experiment,
|
2016-08-16 14:49:24 +08:00
|
|
|
:clone_experiment,
|
2016-08-25 19:33:42 +08:00
|
|
|
:move_experiment,
|
|
|
|
:add_comment_to_project,
|
|
|
|
:edit_project_comment,
|
|
|
|
:delete_project_comment,
|
|
|
|
:add_comment_to_module,
|
|
|
|
:edit_module_comment,
|
|
|
|
:delete_module_comment,
|
|
|
|
:edit_step_comment,
|
|
|
|
:delete_step_comment,
|
|
|
|
:edit_result_comment,
|
2016-09-06 22:16:39 +08:00
|
|
|
:delete_result_comment,
|
2016-09-29 21:30:55 +08:00
|
|
|
:destroy_result,
|
|
|
|
:start_edit_wopi_file,
|
2017-01-03 23:35:25 +08:00
|
|
|
:unlock_wopi_file,
|
2016-11-02 16:18:06 +08:00
|
|
|
:load_protocol_from_file,
|
|
|
|
:load_protocol_from_repository,
|
|
|
|
:revert_protocol,
|
|
|
|
:create_report,
|
|
|
|
:delete_report,
|
|
|
|
:edit_report,
|
|
|
|
:assign_sample,
|
2017-02-10 21:27:20 +08:00
|
|
|
:unassign_sample,
|
|
|
|
:complete_task,
|
|
|
|
:uncomplete_task
|
2016-02-12 23:52:43 +08:00
|
|
|
]
|
|
|
|
|
|
|
|
validates :type_of, presence: true
|
|
|
|
validates :project, :user, presence: true
|
|
|
|
|
|
|
|
belongs_to :project, inverse_of: :activities
|
|
|
|
belongs_to :my_module, inverse_of: :activities
|
|
|
|
belongs_to :user, inverse_of: :activities
|
2016-10-03 17:37:29 +08:00
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def generate_notification
|
2016-11-02 20:32:15 +08:00
|
|
|
if %w(assign_user_to_project
|
|
|
|
assign_user_to_module unassign_user_from_module).include? type_of
|
2016-10-03 17:37:29 +08:00
|
|
|
notification_type = :assignment
|
|
|
|
else
|
|
|
|
notification_type = :recent_changes
|
|
|
|
end
|
|
|
|
|
2016-10-05 15:40:44 +08:00
|
|
|
project_m = "<a href='#{Rails
|
|
|
|
.application
|
|
|
|
.routes
|
|
|
|
.url_helpers
|
|
|
|
.project_path(project)}'>
|
|
|
|
#{project.name}</a>"
|
2017-04-13 23:58:12 +08:00
|
|
|
experiment_m = "| #{I18n.t('search.index.experiment')}
|
2017-04-14 00:08:06 +08:00
|
|
|
<a href='#{Rails
|
|
|
|
.application
|
|
|
|
.routes
|
|
|
|
.url_helpers
|
|
|
|
.canvas_experiment_path(my_module.experiment)}'>
|
|
|
|
#{my_module.experiment.name}</a>" if my_module.experiment
|
2016-10-05 15:40:44 +08:00
|
|
|
task_m = "| #{I18n.t('search.index.module')}
|
|
|
|
<a href='#{Rails
|
|
|
|
.application
|
|
|
|
.routes
|
|
|
|
.url_helpers
|
|
|
|
.protocols_my_module_path(my_module)}'>
|
|
|
|
#{my_module.name}</a>" if my_module
|
|
|
|
|
2016-10-03 17:37:29 +08:00
|
|
|
notification = Notification.create(
|
|
|
|
type_of: notification_type,
|
|
|
|
title:
|
|
|
|
ActionController::Base.helpers.sanitize(message, tags: %w(strong a)),
|
|
|
|
message:
|
|
|
|
ActionController::Base
|
|
|
|
.helpers.sanitize(
|
2017-04-13 23:58:12 +08:00
|
|
|
"#{I18n.t('search.index.project')}
|
|
|
|
#{project_m} #{experiment_m} #{task_m}",
|
2016-10-05 15:40:44 +08:00
|
|
|
tags: %w(strong a)
|
2016-10-03 17:37:29 +08:00
|
|
|
),
|
|
|
|
generator_user_id: user.id
|
|
|
|
)
|
|
|
|
|
|
|
|
project.users.each do |project_user|
|
2016-10-05 15:46:18 +08:00
|
|
|
next if project_user == user
|
2016-10-04 21:52:48 +08:00
|
|
|
next if !project_user.assignments_notification &&
|
|
|
|
notification.type_of == 'assignment'
|
|
|
|
next if !project_user.recent_notification &&
|
|
|
|
notification.type_of == 'recent_changes'
|
2016-10-03 17:37:29 +08:00
|
|
|
UserNotification.create(notification: notification, user: project_user)
|
|
|
|
end
|
|
|
|
end
|
2016-02-12 23:52:43 +08:00
|
|
|
end
|