From e55c66b3d014fded606de6bc1a0032fd1d296048 Mon Sep 17 00:00:00 2001 From: Jure Grabnar Date: Tue, 16 Aug 2016 08:47:04 +0200 Subject: [PATCH] Add query for moveable projects --- app/models/experiment.rb | 42 ++++++++++++++++++++++ app/views/experiments/_move_modal.html.erb | 3 +- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/app/models/experiment.rb b/app/models/experiment.rb index 779a39f3a..662059d18 100644 --- a/app/models/experiment.rb +++ b/app/models/experiment.rb @@ -340,6 +340,48 @@ class Experiment < ActiveRecord::Base clone end + def move_to_project(project) + self.project = project + + my_modules.each do |m| + new_tags = [] + m.tags.each do |t| + new_tags << t.deep_clone_to_project(project) + end + m.my_module_tags.destroy_all + + project.tags << new_tags + m.tags << new_tags + end + + save + end + + # Get projects where user is either owner or user in the same organization + # as this experiment + def projects_with_role_above_user(current_user) + organization = project.organization + projects = organization.projects.where(archived: false) + + current_user.user_projects + .where(project: projects) + .where('role < 2') + .map(&:project) + end + + # Projects to which this experiment can be moved (inside the same + # organization and not archived), all users assigned on experiment.project has + # to be assigned on such project + def moveable_projects(current_user) + projects = projects_with_role_above_user(current_user) + + projects = projects.each_with_object([]) do |p, arr| + arr << p if (project.users - p.users).empty? + arr + end + projects - [project] + end + private # Archive all modules. Receives an array of module integer IDs. diff --git a/app/views/experiments/_move_modal.html.erb b/app/views/experiments/_move_modal.html.erb index 6a79a3b5c..d5f4f58a0 100644 --- a/app/views/experiments/_move_modal.html.erb +++ b/app/views/experiments/_move_modal.html.erb @@ -13,8 +13,7 @@