diff --git a/VERSION b/VERSION index cfc730712..6ee34ec94 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.28.0 +1.28.0.1 diff --git a/app/assets/javascripts/protocols/import_export/eln_table.js b/app/assets/javascripts/protocols/import_export/eln_table.js index 9258f5ea7..40777bde0 100644 --- a/app/assets/javascripts/protocols/import_export/eln_table.js +++ b/app/assets/javascripts/protocols/import_export/eln_table.js @@ -48,14 +48,14 @@ function generateElnTable(content, tableMetadata) { for (let j = 0; j < numCols; j += 1) { let cellData = ''; - let cellClass = getMetadataCellValue(tableMetadata.cells, i - 1, j - 1); + let cellClass = tableMetadata ? getMetadataCellValue(tableMetadata.cells, i - 1, j - 1) : ''; if (i > 0 && j > 0 && tableData.data[i - 1][j - 1] !== null) { cellData = tableData.data[i - 1][j - 1]; } else if (i === 0 && j !== 0) { - cellData = tableMetadata.plateTemplate ? j.toString() : colName(j - 1); + cellData = tableMetadata && tableMetadata.plateTemplate ? j.toString() : colName(j - 1); } else if (j === 0 && i !== 0) { - cellData = tableMetadata.plateTemplate ? colName(i - 1) : i.toString(); + cellData = tableMetadata && tableMetadata.plateTemplate ? colName(i - 1) : i.toString(); } tableCells = `${tableCells}${cellData}`; diff --git a/app/assets/javascripts/repositories/repository_datatable.js b/app/assets/javascripts/repositories/repository_datatable.js index 08d230209..445f37bf1 100644 --- a/app/assets/javascripts/repositories/repository_datatable.js +++ b/app/assets/javascripts/repositories/repository_datatable.js @@ -184,7 +184,7 @@ var RepositoryDatatable = (function(global) { $('#saveRecord').attr('disabled', false); $(TABLE_WRAPPER_ID).find('tr').removeClass('blocked'); - if (TABLE.ColSizes) { + if (TABLE.ColSizes && TABLE.ColSizes.filter((s) => !!s).length > 0) { $(TABLE_WRAPPER_ID).find('.table').addClass('table--resizable-columns'); } @@ -586,7 +586,9 @@ var RepositoryDatatable = (function(global) { state.ColSizes = data; - $(TABLE_WRAPPER_ID).find('.table').addClass('table--resizable-columns'); + if (data.length > 0) { + $(TABLE_WRAPPER_ID).find('.table').addClass('table--resizable-columns'); + } updateColSizeMap(state); @@ -773,7 +775,7 @@ var RepositoryDatatable = (function(global) { if (json.state.columns[7]) json.state.columns[7].visible = archived; if (json.state.search) delete json.state.search; - if (json.state.ColSizes) { + if (json.state.ColSizes && json.state.ColSizes.length > 0) { $(TABLE_WRAPPER_ID).find('.table').addClass('table--resizable-columns'); TABLE.ColSizes = json.state.ColSizes; updateColSizeMap(json.state); diff --git a/app/controllers/access_permissions/experiments_controller.rb b/app/controllers/access_permissions/experiments_controller.rb index a2eb3286f..7b11ba4ca 100644 --- a/app/controllers/access_permissions/experiments_controller.rb +++ b/app/controllers/access_permissions/experiments_controller.rb @@ -29,9 +29,9 @@ module AccessPermissions UserAssignments::PropagateAssignmentJob.perform_later( @experiment, - @user_assignment.user, + @user_assignment.user.id, @user_assignment.user_role, - current_user + current_user.id ) log_change_activity diff --git a/app/controllers/access_permissions/projects_controller.rb b/app/controllers/access_permissions/projects_controller.rb index 90ca466d6..4d84406d2 100644 --- a/app/controllers/access_permissions/projects_controller.rb +++ b/app/controllers/access_permissions/projects_controller.rb @@ -174,9 +174,9 @@ module AccessPermissions def propagate_job(user_assignment, destroy: false) UserAssignments::PropagateAssignmentJob.perform_later( @project, - user_assignment.user, + user_assignment.user.id, user_assignment.user_role, - current_user, + current_user.id, destroy: destroy ) end diff --git a/app/controllers/api/service/projects_json_export_controller.rb b/app/controllers/api/service/projects_json_export_controller.rb index f5a421b70..f6b0e2fa1 100644 --- a/app/controllers/api/service/projects_json_export_controller.rb +++ b/app/controllers/api/service/projects_json_export_controller.rb @@ -10,7 +10,7 @@ module Api valid_url?(projects_json_export_params[:callback_url]) ProjectsJsonExportJob.perform_later(projects_json_export_params[:task_ids], projects_json_export_params[:callback_url], - current_user) + current_user.id) render json: { status: :ok }, status: :accepted end diff --git a/app/controllers/experiments_controller.rb b/app/controllers/experiments_controller.rb index 662e7f6a5..32542e5a2 100644 --- a/app/controllers/experiments_controller.rb +++ b/app/controllers/experiments_controller.rb @@ -502,7 +502,7 @@ class ExperimentsController < ApplicationController }.merge(new_my_module.get_new_position) ) new_my_module.designated_users << current_user - MyModules::CopyContentJob.perform_later(current_user, my_module.id, new_my_module.id) + MyModules::CopyContentJob.perform_later(current_user.id, my_module.id, new_my_module.id) end @experiment.workflowimg.purge end diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb index 375335c03..5388244d5 100644 --- a/app/controllers/reports_controller.rb +++ b/app/controllers/reports_controller.rb @@ -184,7 +184,7 @@ class ReportsController < ApplicationController log_activity(:generate_docx_report) ensure_report_template! - Reports::DocxJob.perform_later(@report.id, current_user, root_url) + Reports::DocxJob.perform_later(@report.id, current_user.id, root_url) render json: { message: I18n.t('projects.reports.index.generation.accepted_message') } @@ -400,7 +400,7 @@ class ReportsController < ApplicationController log_activity(:generate_pdf_report) ensure_report_template! - Reports::PdfJob.perform_later(@report.id, current_user) + Reports::PdfJob.perform_later(@report.id, current_user.id) end def ensure_report_template! diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 2977f1828..67ccc98fb 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -108,7 +108,7 @@ class RepositoriesController < ApplicationController end # offload the rest to background job - HideRepositoryRemindersJob.perform_later(@repository, current_user) + HideRepositoryRemindersJob.perform_later(@repository, current_user.id) render json: { status: :ok }, status: :accepted end @@ -349,7 +349,7 @@ class RepositoriesController < ApplicationController repositories = Repository.viewable_by_user(current_user, current_team).where(id: params[:repository_ids]) if repositories.present? && current_user.has_available_exports? current_user.increase_daily_exports_counter! - RepositoriesExportJob.perform_later(repositories.pluck(:id), current_user, current_team) + RepositoriesExportJob.perform_later(repositories.pluck(:id), current_user.id, current_team) render json: { message: t('zip_export.export_request_success') } else render json: { message: t('zip_export.export_error') }, status: :unprocessable_entity diff --git a/app/controllers/teams_controller.rb b/app/controllers/teams_controller.rb index 6a2ef32ff..18fa1b3f2 100644 --- a/app/controllers/teams_controller.rb +++ b/app/controllers/teams_controller.rb @@ -153,7 +153,7 @@ class TeamsController < ApplicationController options = { team: @team } zip = TeamZipExport.create(user: current_user) zip.generate_exportable_zip( - current_user, + current_user.id, ids, :teams, options diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb index 208456ac2..5cce5d3e6 100644 --- a/app/helpers/notifications_helper.rb +++ b/app/helpers/notifications_helper.rb @@ -1,6 +1,6 @@ module NotificationsHelper def send_email_notification(user, notification) - AppMailer.delay.notification(user, notification) + AppMailer.delay.notification(user.id, notification) end # generate assignment notification diff --git a/app/jobs/hide_repository_reminders_job.rb b/app/jobs/hide_repository_reminders_job.rb index b72a6b2e8..d50a16948 100644 --- a/app/jobs/hide_repository_reminders_job.rb +++ b/app/jobs/hide_repository_reminders_job.rb @@ -3,7 +3,8 @@ class HideRepositoryRemindersJob < ApplicationJob queue_as :high_priority - def perform(repository, user) + def perform(repository, user_id) + user = User.find(user_id) hidden_reminder_repository_cell_ids = HiddenRepositoryCellReminder.joins(repository_cell: { repository_row: :repository }) .where(user: user) diff --git a/app/jobs/my_modules/copy_content_job.rb b/app/jobs/my_modules/copy_content_job.rb index abd3ab4d4..01a7db461 100644 --- a/app/jobs/my_modules/copy_content_job.rb +++ b/app/jobs/my_modules/copy_content_job.rb @@ -2,7 +2,8 @@ module MyModules class CopyContentJob < ApplicationJob - def perform(user, source_my_module_id, target_my_module_id) + def perform(user_id, source_my_module_id, target_my_module_id) + user = User.find(user_id) target_my_module = MyModule.find(target_my_module_id) MyModule.transaction do MyModule.find(source_my_module_id).copy_content(user, target_my_module) diff --git a/app/jobs/projects_json_export_job.rb b/app/jobs/projects_json_export_job.rb index f65bdec24..4b7c95519 100644 --- a/app/jobs/projects_json_export_job.rb +++ b/app/jobs/projects_json_export_job.rb @@ -1,7 +1,8 @@ # frozen_string_literal: true class ProjectsJsonExportJob < ApplicationJob - def perform(task_ids, callback, user) + def perform(task_ids, callback, user_id) + user = User.find(user_id) projects_json_export_service = ProjectsJsonExportService.new(task_ids, callback, user) diff --git a/app/jobs/reports/docx_job.rb b/app/jobs/reports/docx_job.rb index 893845ec9..53fa27ba3 100644 --- a/app/jobs/reports/docx_job.rb +++ b/app/jobs/reports/docx_job.rb @@ -21,7 +21,7 @@ module Reports else Rails.application.routes.url_helpers.reports_path(team: report.team.id) end - user = job.arguments.second + user = User.find(job.arguments.second) notification = Notification.create( type_of: :deliver_error, title: I18n.t('projects.reports.index.generation.error_docx_notification_title'), @@ -33,8 +33,9 @@ module Reports Rails.logger.error("Couldn't generate DOCX for Report with id: #{report.id}. Error:\n #{error}") end - def perform(report_id, user, root_url) + def perform(report_id, user_id, root_url) report = Report.find(report_id) + user = User.find(user_id) file = Tempfile.new(['report', '.docx']) begin I18n.backend.date_format = user.settings[:date_format] diff --git a/app/jobs/reports/pdf_job.rb b/app/jobs/reports/pdf_job.rb index 8e5c53699..22d22b614 100644 --- a/app/jobs/reports/pdf_job.rb +++ b/app/jobs/reports/pdf_job.rb @@ -25,7 +25,7 @@ module Reports else Rails.application.routes.url_helpers.reports_path(team: report.team.id) end - user = job.arguments.second + user = User.find(job.arguments.second) notification = Notification.create( type_of: :deliver_error, title: I18n.t('projects.reports.index.generation.error_pdf_notification_title'), @@ -39,8 +39,9 @@ module Reports PREVIEW_EXTENSIONS = %w(docx pdf).freeze - def perform(report_id, user) + def perform(report_id, user_id) report = Report.find(report_id) + user = User.find(user_id) file = Tempfile.new(['report', '.pdf'], binmode: true) begin template = diff --git a/app/jobs/repositories_export_job.rb b/app/jobs/repositories_export_job.rb index 9948b55af..288506a82 100644 --- a/app/jobs/repositories_export_job.rb +++ b/app/jobs/repositories_export_job.rb @@ -3,8 +3,8 @@ class RepositoriesExportJob < ApplicationJob include StringUtility - def perform(repository_ids, user, team) - @user = user + def perform(repository_ids, user_id, team) + @user = User.find(user_id) @team = team @repositories = Repository.viewable_by_user(@user, @team).where(id: repository_ids).order(:id) zip_input_dir = FileUtils.mkdir_p(Rails.root.join("tmp/temp_zip_#{Time.now.to_i}")).first diff --git a/app/jobs/user_assignments/generate_user_assignments_job.rb b/app/jobs/user_assignments/generate_user_assignments_job.rb index 20c0934d9..db4bc6af1 100644 --- a/app/jobs/user_assignments/generate_user_assignments_job.rb +++ b/app/jobs/user_assignments/generate_user_assignments_job.rb @@ -4,8 +4,8 @@ module UserAssignments class GenerateUserAssignmentsJob < ApplicationJob queue_as :high_priority - def perform(object, assigned_by) - @assigned_by = assigned_by + def perform(object, assigned_by_id) + @assigned_by = User.find_by(id: assigned_by_id) ActiveRecord::Base.transaction do case object when Experiment diff --git a/app/jobs/user_assignments/project_group_assignment_job.rb b/app/jobs/user_assignments/project_group_assignment_job.rb index 0b12b4d7c..b507ba027 100644 --- a/app/jobs/user_assignments/project_group_assignment_job.rb +++ b/app/jobs/user_assignments/project_group_assignment_job.rb @@ -4,9 +4,9 @@ module UserAssignments class ProjectGroupAssignmentJob < ApplicationJob queue_as :high_priority - def perform(team, project, assigned_by) + def perform(team, project, assigned_by_id) @team = team - @assigned_by = assigned_by + @assigned_by = User.find_by(id: assigned_by_id) return unless project.visible? @@ -27,9 +27,9 @@ module UserAssignments # make sure all related experiments and my modules are assigned UserAssignments::PropagateAssignmentJob.perform_later( project, - user, + user.id, project.default_public_user_role || UserRole.find_predefined_viewer_role, - @assigned_by + @assigned_by&.id ) end end diff --git a/app/jobs/user_assignments/propagate_assignment_job.rb b/app/jobs/user_assignments/propagate_assignment_job.rb index 338b0f335..7babd336a 100644 --- a/app/jobs/user_assignments/propagate_assignment_job.rb +++ b/app/jobs/user_assignments/propagate_assignment_job.rb @@ -4,10 +4,10 @@ module UserAssignments class PropagateAssignmentJob < ApplicationJob queue_as :high_priority - def perform(resource, user, user_role, assigned_by, options = {}) - @user = user + def perform(resource, user_id, user_role, assigned_by_id, options = {}) + @user = User.find(user_id) @user_role = user_role - @assigned_by = assigned_by + @assigned_by = User.find_by(id: assigned_by_id) @destroy = options.fetch(:destroy, false) @remove_from_team = options.fetch(:remove_from_team, false) @resource = resource diff --git a/app/mailers/app_mailer.rb b/app/mailers/app_mailer.rb index 8877efb59..7cac7f0c3 100644 --- a/app/mailers/app_mailer.rb +++ b/app/mailers/app_mailer.rb @@ -7,8 +7,8 @@ class AppMailer < Devise::Mailer default from: ENV['MAIL_FROM'] default reply: ENV['MAIL_REPLYTO'] - def notification(user, notification, opts = {}) - @user = user + def notification(user_id, notification, opts = {}) + @user = User.find(user_id) @notification = notification subject = if notification.deliver? diff --git a/app/models/concerns/assignable.rb b/app/models/concerns/assignable.rb index e2a856c16..afcea0ae8 100644 --- a/app/models/concerns/assignable.rb +++ b/app/models/concerns/assignable.rb @@ -73,7 +73,7 @@ module Assignable user_role: role ) - UserAssignments::GenerateUserAssignmentsJob.perform_later(self, created_by) + UserAssignments::GenerateUserAssignmentsJob.perform_later(self, created_by.id) end end end diff --git a/app/models/experiment.rb b/app/models/experiment.rb index ae5573e59..81ade333b 100644 --- a/app/models/experiment.rb +++ b/app/models/experiment.rb @@ -353,7 +353,7 @@ class Experiment < ApplicationRecord # regenerate user assignments my_module.user_assignments.destroy_all - UserAssignments::GenerateUserAssignmentsJob.perform_later(my_module, current_user) + UserAssignments::GenerateUserAssignmentsJob.perform_later(my_module, current_user.id) Activities::CreateActivityService.call(activity_type: :move_task, owner: current_user, @@ -410,7 +410,7 @@ class Experiment < ApplicationRecord # regenerate user assignments m.user_assignments.destroy_all - UserAssignments::GenerateUserAssignmentsJob.new(m, current_user).perform_now + UserAssignments::GenerateUserAssignmentsJob.new(m, current_user.id).perform_now # Add activity Activities::CreateActivityService.call( diff --git a/app/models/project.rb b/app/models/project.rb index 398cd5481..00d199828 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -341,7 +341,7 @@ class Project < ApplicationRecord UserAssignments::ProjectGroupAssignmentJob.perform_later( team, self, - last_modified_by || created_by + last_modified_by&.id || created_by&.id ) end diff --git a/app/models/team_zip_export.rb b/app/models/team_zip_export.rb index 6632f3737..31e231575 100644 --- a/app/models/team_zip_export.rb +++ b/app/models/team_zip_export.rb @@ -6,8 +6,8 @@ require 'csv' class TeamZipExport < ZipExport include StringUtility - def generate_exportable_zip(user, data, type, options = {}) - @user = user + def generate_exportable_zip(user_id, data, type, options = {}) + @user = User.find(user_id) zip_input_dir = FileUtils.mkdir_p( File.join(Rails.root, "tmp/temp_zip_#{Time.now.to_i}") ).first diff --git a/app/models/zip_export.rb b/app/models/zip_export.rb index 292d8d413..a76d51c4e 100644 --- a/app/models/zip_export.rb +++ b/app/models/zip_export.rb @@ -45,7 +45,8 @@ class ZipExport < ApplicationRecord end end - def generate_exportable_zip(user, data, type, options = {}) + def generate_exportable_zip(user_id, data, type, options = {}) + user = User.find(user_id) I18n.backend.date_format = user.settings[:date_format] || Constants::DEFAULT_DATE_FORMAT zip_input_dir = FileUtils.mkdir_p(File.join(Rails.root, "tmp/temp_zip_#{Time.now.to_i}")).first tmp_zip_dir = FileUtils.mkdir_p(File.join(Rails.root, 'tmp/zip-ready')).first diff --git a/app/services/experiments/move_to_project_service.rb b/app/services/experiments/move_to_project_service.rb index 6252768d4..29556cdb9 100644 --- a/app/services/experiments/move_to_project_service.rb +++ b/app/services/experiments/move_to_project_service.rb @@ -118,7 +118,7 @@ module Experiments user_role: @project.user_assignments.find_by(user: @user).user_role ) - UserAssignments::GenerateUserAssignmentsJob.perform_later(object, @user) + UserAssignments::GenerateUserAssignmentsJob.perform_later(object, @user.id) end def clean_up_user_my_modules(my_module) diff --git a/app/services/reports/docx/draw_my_module.rb b/app/services/reports/docx/draw_my_module.rb index 7f0f5380e..8b1080d17 100644 --- a/app/services/reports/docx/draw_my_module.rb +++ b/app/services/reports/docx/draw_my_module.rb @@ -70,7 +70,7 @@ module Reports::Docx::DrawMyModule draw_step(step) end - @docx.h4 I18n.t('Results') if my_module.results.any? + @docx.h4 I18n.t('Results') if my_module.results.any? && (%w(file_results table_results text_results).any? { |k| @settings.dig('task', k) }) order_results_for_report(my_module.results, @settings.dig('task', 'result_order')).each do |result| if result.is_asset && @settings.dig('task', 'file_results') draw_result_asset(result, @settings) diff --git a/app/services/repository_zip_export.rb b/app/services/repository_zip_export.rb index c40bda2c7..9bd8b5d05 100644 --- a/app/services/repository_zip_export.rb +++ b/app/services/repository_zip_export.rb @@ -30,7 +30,7 @@ module RepositoryZipExport zip = ZipExport.create(user: current_user) zip.generate_exportable_zip( - current_user, + current_user.id, to_csv(rows, params[:header_ids], current_user, repository, nil, params[:my_module_id].present?), :repositories ) diff --git a/app/services/team_importer.rb b/app/services/team_importer.rb index 060a751dc..b42f1657e 100644 --- a/app/services/team_importer.rb +++ b/app/services/team_importer.rb @@ -188,9 +188,9 @@ class TeamImporter # handle the permissions for newly created experiment user = User.find(user_id) - UserAssignments::GenerateUserAssignmentsJob.perform_now(experiment, user) + UserAssignments::GenerateUserAssignmentsJob.perform_now(experiment, user.id) experiment.my_modules.find_each do |my_module| - UserAssignments::GenerateUserAssignmentsJob.perform_now(my_module, user) + UserAssignments::GenerateUserAssignmentsJob.perform_now(my_module, user.id) end puts "Imported experiment: #{experiment.id}" return experiment diff --git a/app/services/toolbars/repositories_service.rb b/app/services/toolbars/repositories_service.rb index fa88a79dd..ffcd1c296 100644 --- a/app/services/toolbars/repositories_service.rb +++ b/app/services/toolbars/repositories_service.rb @@ -21,7 +21,7 @@ module Toolbars return [] if @repositories.none? if @archived_state - [restore_action, delete_action] + [export_action, restore_action, delete_action] else [rename_action, duplicate_action, export_action, archive_action, share_action] end.compact diff --git a/app/services/user_assignments/create_team_user_assignments_service.rb b/app/services/user_assignments/create_team_user_assignments_service.rb index f4dfc60e9..d4630f46f 100644 --- a/app/services/user_assignments/create_team_user_assignments_service.rb +++ b/app/services/user_assignments/create_team_user_assignments_service.rb @@ -24,7 +24,7 @@ module UserAssignments UserAssignments::ProjectGroupAssignmentJob.perform_later( @team, project, - @assigned_by + @assigned_by&.id ) end end diff --git a/app/services/user_assignments/remove_team_user_assignments_service.rb b/app/services/user_assignments/remove_team_user_assignments_service.rb index ecce6874c..53baaab3f 100644 --- a/app/services/user_assignments/remove_team_user_assignments_service.rb +++ b/app/services/user_assignments/remove_team_user_assignments_service.rb @@ -10,7 +10,7 @@ module UserAssignments def call @team.projects.find_each do |project| UserAssignments::PropagateAssignmentJob - .perform_now(project, @user, nil, nil, destroy: true, remove_from_team: true) + .perform_now(project, @user.id, nil, nil, destroy: true, remove_from_team: true) end remove_repositories_assignments remove_protocols_assignments diff --git a/app/views/reports/elements/_my_module_element.html.erb b/app/views/reports/elements/_my_module_element.html.erb index bb6c1c479..4284bffac 100644 --- a/app/views/reports/elements/_my_module_element.html.erb +++ b/app/views/reports/elements/_my_module_element.html.erb @@ -66,9 +66,11 @@ <% end %> -
- <%= t('projects.reports.elements.module.results') %> -

+ <% if %w(file_results table_results text_results).any? { |k| @settings.dig('task', k) } %> +
+ <%= t('projects.reports.elements.module.results') %> +

+ <% end %> <% order_results_for_report(my_module.results, @settings.dig('task', 'result_order')).each do |result| %> <% if result.is_asset && @settings.dig('task', 'file_results') %> diff --git a/app/views/reports/elements/_my_module_result_table_element.html.erb b/app/views/reports/elements/_my_module_result_table_element.html.erb index 9d093570c..e40d27282 100644 --- a/app/views/reports/elements/_my_module_result_table_element.html.erb +++ b/app/views/reports/elements/_my_module_result_table_element.html.erb @@ -25,7 +25,7 @@
- +
diff --git a/app/views/repositories/_view_archived_btn.html.erb b/app/views/repositories/_view_archived_btn.html.erb index 3be64c929..c47897a70 100644 --- a/app/views/repositories/_view_archived_btn.html.erb +++ b/app/views/repositories/_view_archived_btn.html.erb @@ -1,5 +1,4 @@ -
+

<%= t('libraries.index.head_title') %>

diff --git a/app/views/shared/smart_annotation/_menu.html.erb b/app/views/shared/smart_annotation/_menu.html.erb index ec9d3a77b..74a1d9d5d 100644 --- a/app/views/shared/smart_annotation/_menu.html.erb +++ b/app/views/shared/smart_annotation/_menu.html.erb @@ -12,7 +12,7 @@
<% if repositories.length > 1 %> -
+
<% repositories.each do |repository| %>