diff --git a/app/assets/javascripts/navigation.js b/app/assets/javascripts/navigation.js
index 8c7e77092..ee335fdce 100644
--- a/app/assets/javascripts/navigation.js
+++ b/app/assets/javascripts/navigation.js
@@ -80,8 +80,23 @@
}
+ function initGlobalSwitchForm() {
+ var teamSwitch = $('#team-switch');
+ teamSwitch
+ .find('.dropdown-menu a')
+ .on('click', function(){
+ $('#user_current_organization_id')
+ .val($(this).attr('data-id'));
+
+ teamSwitch
+ .find('form')
+ .submit();
+ });
+ }
+
// init
loadDropdownNotifications();
loadUnseenNotificationsNumber();
toggleNotificationBellPosition();
+ initGlobalSwitchForm();
})();
diff --git a/app/assets/stylesheets/themes/scinote.scss b/app/assets/stylesheets/themes/scinote.scss
index f80f78903..fd4050810 100644
--- a/app/assets/stylesheets/themes/scinote.scss
+++ b/app/assets/stylesheets/themes/scinote.scss
@@ -554,6 +554,35 @@ a[data-toggle="tooltip"] {
}
}
+// Global team switch
+#team-switch {
+ word-wrap: break-word;
+
+ i {
+ margin-right: 5px;
+ }
+
+ li {
+ display: block;
+ text-align: left;
+ word-wrap: break-word;
+
+ &:hover {
+ background-color: $color-concrete;
+ }
+
+ a {
+ color: $color-emperor;
+ display: block;
+ line-height: 1.6em;
+ padding: 3px 20px;
+ text-align: left;
+ text-decoration: none;
+ word-wrap: break-word;
+ }
+ }
+}
+
/** Settings */
.nav-settings {
margin-top: 15px;
diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb
index 0a5765e62..7a9d21871 100644
--- a/app/controllers/application_controller.rb
+++ b/app/controllers/application_controller.rb
@@ -6,9 +6,10 @@ class ApplicationController < ActionController::Base
# For APIs, you may want to use :null_session instead.
protect_from_forgery with: :exception
before_action :authenticate_user!
+ helper_method :current_organization
before_action :generate_intro_tutorial, if: :is_current_page_root?
around_action :set_time_zone, if: :current_user
- layout "main"
+ layout 'main'
def forbidden
render_403
@@ -19,7 +20,12 @@ class ApplicationController < ActionController::Base
end
def is_current_page_root?
- controller_name == "projects" && action_name == "index"
+ controller_name == 'projects' && action_name == 'index'
+ end
+
+ # Sets current organization for all controllers
+ def current_organization
+ Organization.find_by_id(current_user.current_organization_id)
end
protected
diff --git a/app/controllers/experiments_controller.rb b/app/controllers/experiments_controller.rb
index 99adbcf15..f181505da 100644
--- a/app/controllers/experiments_controller.rb
+++ b/app/controllers/experiments_controller.rb
@@ -1,5 +1,7 @@
class ExperimentsController < ApplicationController
include PermissionHelper
+ include OrganizationsHelper
+
before_action :set_experiment,
except: [:new, :create]
before_action :set_project,
@@ -55,6 +57,7 @@ class ExperimentsController < ApplicationController
def canvas
@project = @experiment.project
+ current_organization_switch(@project.organization)
end
def edit
diff --git a/app/controllers/my_modules_controller.rb b/app/controllers/my_modules_controller.rb
index 17c2fec7d..0fdd0b23d 100644
--- a/app/controllers/my_modules_controller.rb
+++ b/app/controllers/my_modules_controller.rb
@@ -1,5 +1,6 @@
class MyModulesController < ApplicationController
include SampleActions
+ include OrganizationsHelper
before_action :load_vars, only: [
:show, :edit, :update, :destroy,
@@ -232,10 +233,14 @@ class MyModulesController < ApplicationController
def protocols
@protocol = @my_module.protocol
+ current_organization_switch(@protocol.organization)
end
def results
-
+ current_organization_switch(@my_module
+ .experiment
+ .project
+ .organization)
end
def samples
@@ -245,6 +250,10 @@ class MyModulesController < ApplicationController
def archive
@archived_results = @my_module.archived_results
+ current_organization_switch(@my_module
+ .experiment
+ .project
+ .organization)
end
# Submit actions
diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb
index a9b04b088..bbd6ab229 100644
--- a/app/controllers/projects_controller.rb
+++ b/app/controllers/projects_controller.rb
@@ -1,6 +1,7 @@
class ProjectsController < ApplicationController
include SampleActions
include RenamingUtil
+ include OrganizationsHelper
before_action :load_vars, only: [:show, :edit, :update,
:notifications, :reports,
@@ -23,10 +24,16 @@ class ProjectsController < ApplicationController
DELETE_SAMPLES = I18n.t("samples.delete_samples")
def index
- @current_organization_id = params[:organization].to_i
+ if params[:organization]
+ current_organization_switch(Organization
+ .find_by_id(params[:organization]))
+ end
+
+ @current_organization_id = current_organization.id
@current_sort = params[:sort].to_s
- @projects_by_orgs = current_user.projects_by_orgs(
- @current_organization_id, @current_sort, @filter_by_archived)
+ @projects_by_orgs = current_user.projects_by_orgs(@current_organization_id,
+ @current_sort,
+ @filter_by_archived)
@organizations = current_user.organizations
# New project for create new project modal
@@ -40,14 +47,14 @@ class ProjectsController < ApplicationController
def new
@project = Project.new
- @organizations = current_user.organizations
end
def create
@project = Project.new(project_params)
- @project.created_by = current_user
+ @project.created_by = current_user
@project.last_modified_by = current_user
- if @project.save
+ if current_organization.id == project_params[:organization_id].to_i &&
+ @project.save
# Create user-project association
up = UserProject.new(
role: :owner,
@@ -237,6 +244,7 @@ class ProjectsController < ApplicationController
def show
# This is the "info" view
+ current_organization_switch(@project.organization)
end
def notifications
@@ -261,6 +269,7 @@ class ProjectsController < ApplicationController
end
def experiment_archive
+ current_organization_switch(@project.organization)
end
def samples_index
diff --git a/app/controllers/protocols_controller.rb b/app/controllers/protocols_controller.rb
index 29705c8ba..93cccf17c 100644
--- a/app/controllers/protocols_controller.rb
+++ b/app/controllers/protocols_controller.rb
@@ -741,9 +741,7 @@ class ProtocolsController < ApplicationController
end
def load_organization_and_type
- @organizations = current_user.organizations.order(name: :asc)
- @current_organization = @organizations.select{ |org| org.id == params[:organization].to_i }.first
- @current_organization ||= @organizations.first
+ @current_organization = current_organization
# :public, :private or :archive
@type = (params[:type] || "public").to_sym
end
diff --git a/app/controllers/reports_controller.rb b/app/controllers/reports_controller.rb
index 17ed7145c..cdfaf700f 100644
--- a/app/controllers/reports_controller.rb
+++ b/app/controllers/reports_controller.rb
@@ -1,4 +1,5 @@
class ReportsController < ApplicationController
+ include OrganizationsHelper
# Ignore CSRF protection just for PDF generation (because it's
# used via target='_blank')
protect_from_forgery with: :exception, :except => :generate
@@ -99,9 +100,10 @@ class ReportsController < ApplicationController
def edit
# cleans all the deleted report
+ current_organization_switch(@report.project.organization)
@report.cleanup_report
load_markdown
- render "reports/new.html.erb"
+ render 'reports/new.html.erb'
end
# Updating existing report from the _save modal of the new page
diff --git a/app/controllers/sample_my_modules_controller.rb b/app/controllers/sample_my_modules_controller.rb
index 75568256c..f42b120ee 100644
--- a/app/controllers/sample_my_modules_controller.rb
+++ b/app/controllers/sample_my_modules_controller.rb
@@ -1,10 +1,15 @@
class SampleMyModulesController < ApplicationController
+ include OrganizationsHelper
before_action :load_vars
def index
@number_of_samples = @my_module.number_of_samples
@samples = @my_module.first_n_samples
+ current_organization_switch(@my_module
+ .experiment
+ .project
+ .organization)
respond_to do |format|
format.json {
render :json => {
diff --git a/app/controllers/samples_controller.rb b/app/controllers/samples_controller.rb
index d90f99042..086d55c2e 100644
--- a/app/controllers/samples_controller.rb
+++ b/app/controllers/samples_controller.rb
@@ -279,7 +279,7 @@ class SamplesController < ApplicationController
def load_vars
@sample = Sample.find_by_id(params[:id])
- @organization = @sample.organization
+ @organization = current_organization
unless @sample
render_404
diff --git a/app/controllers/users/registrations_controller.rb b/app/controllers/users/registrations_controller.rb
index e5ec05674..950ecfd44 100644
--- a/app/controllers/users/registrations_controller.rb
+++ b/app/controllers/users/registrations_controller.rb
@@ -158,6 +158,10 @@ class Users::RegistrationsController < Devise::RegistrationsController
organization: @org,
role: :admin
)
+
+ # set current organization to new user
+ resource.current_organization_id = @org.id
+ resource.save
end
end
diff --git a/app/controllers/users/settings_controller.rb b/app/controllers/users/settings_controller.rb
index 57032dbc0..2d301d3d9 100644
--- a/app/controllers/users/settings_controller.rb
+++ b/app/controllers/users/settings_controller.rb
@@ -10,7 +10,8 @@ class Users::SettingsController < ApplicationController
:organization_users_datatable,
:tutorial,
:reset_tutorial,
- :notifications_settings
+ :notifications_settings,
+ :user_current_organization
]
before_action :check_organization_permission, only: [
@@ -445,7 +446,8 @@ class Users::SettingsController < ApplicationController
end
def reset_tutorial
- if @user.update(tutorial_status: 0) && params[:org][:id]
+ if @user.update(tutorial_status: 0) && params[:org][:id].present?
+ @user.update(current_organization_id: params[:org][:id])
cookies.delete :tutorial_data
cookies.delete :current_tutorial_step
cookies[:repeat_tutorial_org_id] = {
@@ -491,6 +493,19 @@ class Users::SettingsController < ApplicationController
end
end
+ def user_current_organization
+ @user.current_organization_id = params[:user][:current_organization_id]
+ @changed_org = Organization.find_by_id(@user.current_organization_id)
+ if params[:user][:current_organization_id].present? && @user.save
+ flash[:success] = t('users.settings.changed_org_flash',
+ team: @changed_org.name)
+ redirect_to root_path
+ else
+ flash[:alert] = t('users.settings.changed_org_error_flash')
+ redirect_to :back
+ end
+ end
+
private
def load_user
diff --git a/app/helpers/organizations_helper.rb b/app/helpers/organizations_helper.rb
index 24cc9a80e..2ffeaf09d 100644
--- a/app/helpers/organizations_helper.rb
+++ b/app/helpers/organizations_helper.rb
@@ -1,2 +1,18 @@
module OrganizationsHelper
+ # resets the current organization if needed
+ def current_organization_switch(org)
+ if org != current_organization
+ current_user.current_organization_id = org.id
+ current_user.save
+ end
+ end
+
+ def truncate_organization_name(name, len = Constants::NAME_TRUNCATION_LENGTH)
+ if name.length > len
+ "
#{truncate(name, length: len)}
+ #{name}
".html_safe
+ else
+ name
+ end
+ end
end
diff --git a/app/helpers/search_helper.rb b/app/helpers/search_helper.rb
index 3bb3591be..ee40a4c92 100644
--- a/app/helpers/search_helper.rb
+++ b/app/helpers/search_helper.rb
@@ -6,4 +6,15 @@ module SearchHelper
end
experiments.uniq
end
+
+ def route_to_other_org(path, search_org, text)
+ if search_org != current_organization
+ link_to text,
+ path,
+ data: { confirm: t('users.settings.changed_org_in_search',
+ team: search_org.name) }
+ else
+ link_to text, path
+ end
+ end
end
diff --git a/app/utilities/users_generator.rb b/app/utilities/users_generator.rb
index d3d8d02da..5c3c0ba3c 100644
--- a/app/utilities/users_generator.rb
+++ b/app/utilities/users_generator.rb
@@ -56,6 +56,10 @@ module UsersGenerator
end
end
+ # Assign user organization as user current organization
+ nu.current_organization_id = nu.organizations.first.id
+ nu.save!
+
nu.reload
return nu
end
@@ -85,4 +89,4 @@ module UsersGenerator
full_name.split(" ").collect{ |n| n.capitalize[0] }.join[0..3]
end
-end
\ No newline at end of file
+end
diff --git a/app/views/projects/_new.html.erb b/app/views/projects/_new.html.erb
index 3ed45746c..1f476b610 100644
--- a/app/views/projects/_new.html.erb
+++ b/app/views/projects/_new.html.erb
@@ -1,15 +1,7 @@
<%= form.text_field :name, label: t("projects.index.modal_new_project.name"), autofocus: true, placeholder: t("projects.index.modal_new_project.name_placeholder") %>
-
-
-
-
-
-
- <%= form.label t("projects.index.modal_new_project.organization") %>
- <%= collection_select(:project, :organization_id, @organizations, :id, :name, {}, { :class => "form-control"} ) %>
-
+ <%= hidden_field :project, :organization_id, value: current_organization.id %>
diff --git a/app/views/projects/index.html.erb b/app/views/projects/index.html.erb
index cf0129a2c..e376decd4 100644
--- a/app/views/projects/index.html.erb
+++ b/app/views/projects/index.html.erb
@@ -77,27 +77,6 @@
<% end %>
-
-
-
-
-
-
+<% else %>
+
<% end %>
-<% if @projects_by_orgs.length > 0 %>
- <% @projects_by_orgs.each do |org, projects| %>
- <%= render partial: "projects/index/org_projects", locals: {org: org, projects: projects} %>
- <% end %>
+<% if current_organization.projects.length > 0 %>
+ <%= render partial: "projects/index/org_projects",
+ locals: { org: current_organization,
+ projects: current_organization.projects } %>
+
<% end %>
<%= javascript_include_tag "projects/index", "data-turbolinks-track" => true %>
diff --git a/app/views/projects/index/_org_projects.html.erb b/app/views/projects/index/_org_projects.html.erb
index e5ddb0496..7aab961a9 100644
--- a/app/views/projects/index/_org_projects.html.erb
+++ b/app/views/projects/index/_org_projects.html.erb
@@ -1,5 +1,3 @@
-
-
<% projects.each_index do |i| project = projects[i] %>
diff --git a/app/views/protocols/_breadcrumbs.html.erb b/app/views/protocols/_breadcrumbs.html.erb
index 99bff0afb..9891d4adc 100644
--- a/app/views/protocols/_breadcrumbs.html.erb
+++ b/app/views/protocols/_breadcrumbs.html.erb
@@ -1,20 +1,7 @@
<% if action_name == "index" %>
- <%= t("protocols.nav.breadcrumbs.manager") %>
- -
- <%= current_organization.name %>
-
-
+ - <%= current_organization.name %>
<% else %>
- <%= link_to t("protocols.nav.breadcrumbs.manager"), protocols_path(organization: current_organization, type: type) %>
- <%= current_organization.name %>
@@ -24,4 +11,4 @@
<%= t("protocols.nav.breadcrumbs.edit") %>
<% end %>
-
\ No newline at end of file
+
diff --git a/app/views/protocols/index.html.erb b/app/views/protocols/index.html.erb
index bbcbe57ab..ba14ede53 100644
--- a/app/views/protocols/index.html.erb
+++ b/app/views/protocols/index.html.erb
@@ -1,6 +1,6 @@
<% provide(:head_title, t("protocols.index.head_title")) %>
-<% if @organizations.count > 0 %>
+<% if current_organization %>
<%= render partial: "protocols/breadcrumbs.html.erb", locals: { organizations: @organizations, current_organization: @current_organization, type: @type } %>
diff --git a/app/views/search/results/partials/_asset_text.html.erb b/app/views/search/results/partials/_asset_text.html.erb
index 907e0d592..897e0f8bc 100644
--- a/app/views/search/results/partials/_asset_text.html.erb
+++ b/app/views/search/results/partials/_asset_text.html.erb
@@ -11,4 +11,4 @@
<% else %>
<%= text %>
-<% end %>
\ No newline at end of file
+<% end %>
diff --git a/app/views/search/results/partials/_experiment_text.html.erb b/app/views/search/results/partials/_experiment_text.html.erb
index 287ab39f5..51604d486 100644
--- a/app/views/search/results/partials/_experiment_text.html.erb
+++ b/app/views/search/results/partials/_experiment_text.html.erb
@@ -4,17 +4,15 @@
<% if experiment.archived? %>
<%=t "search.index.archived" %>
<% if can_view_experiment(experiment) and can_restore_experiment(experiment.project) %>
-
- <%= text %>
-
+ <%= route_to_other_org root_path, experiment.project.organization, text %>
<% else %>
<%= text %>
<% end %>
<% else %>
<% if can_view_experiment(experiment) %>
-
- <%= text %>
-
+ <%= route_to_other_org canvas_experiment_path(experiment),
+ experiment.project.organization,
+ text %>
<% else %>
<%= text %>
<% end %>
diff --git a/app/views/search/results/partials/_my_module_text.html.erb b/app/views/search/results/partials/_my_module_text.html.erb
index 335eabe1f..a654fb320 100644
--- a/app/views/search/results/partials/_my_module_text.html.erb
+++ b/app/views/search/results/partials/_my_module_text.html.erb
@@ -5,9 +5,9 @@
<% if my_module.archived? %>
<%=t "search.index.archived" %>
<% if can_view_experiment_archive(my_module.experiment) and can_restore_module(my_module) %>
-
- <%= text %>
-
+ <%= route_to_other_org module_archive_experiment_url(my_module.experiment),
+ my_module.experiment.project.organization,
+ text %>
<% else %>
<%= text %>
<% end %>
@@ -15,21 +15,21 @@
<% if can_view_module(my_module) %>
<% case link_to_page %>
<% when :samples %>
-
- <%= text %>
-
+ <%= route_to_other_org samples_my_module_path(my_module),
+ my_module.experiment.project.organization,
+ text %>
<% when :protocols %>
-
- <%= text %>
-
+ <%= route_to_other_org protocols_my_module_path(my_module),
+ my_module.experiment.project.organization,
+ text %>
<% when :canvas %>
-
- <%= text %>
-
+ <%= route_to_other_org canvas_experiment_path(my_module.experiment),
+ my_module.experiment.project.organization,
+ text %>
<% when :results %>
-
- <%= text %>
-
+ <%= route_to_other_org results_my_module_path(my_module),
+ my_module.experiment.project.organization,
+ text %>
<% else %>
<%= text %>
<% end %>
diff --git a/app/views/search/results/partials/_organization_text.html.erb b/app/views/search/results/partials/_organization_text.html.erb
index 9669942e9..06a98df4b 100644
--- a/app/views/search/results/partials/_organization_text.html.erb
+++ b/app/views/search/results/partials/_organization_text.html.erb
@@ -1,7 +1,7 @@
<% if can_view_projects(organization) %>
-
- <%= organization.name %>
-
+ <%= route_to_other_org projects_path(organization: organization.id),
+ organization,
+ organization.name %>
<% else %>
<%= organization.name %>
-<% end %>
\ No newline at end of file
+<% end %>
diff --git a/app/views/search/results/partials/_project_text.html.erb b/app/views/search/results/partials/_project_text.html.erb
index d4ab21de6..3956b71b2 100644
--- a/app/views/search/results/partials/_project_text.html.erb
+++ b/app/views/search/results/partials/_project_text.html.erb
@@ -5,24 +5,24 @@
<% if project.archived? %>
<%=t "search.index.archived" %>
<% if can_view_projects(project.organization) and can_restore_project(project) %>
-
- <%= text %>
-
+ <%= route_to_other_org projects_archive_path(organization: project.organization),
+ project.organization,
+ text %>
<% else %>
<%= text %>
<% end %>
<% else %>
<% if can_view_project(project) %>
<% if link_to_page == :show %>
-
- <%= text %>
-
+ <%= route_to_other_org project_path(project),
+ project.organization,
+ text %>
<% else %>
-
- <%= text %>
-
+ <%= route_to_other_org root_path,
+ nil,
+ text %>
<% end %>
<% else %>
<%= text %>
<% end %>
-<% end %>
\ No newline at end of file
+<% end %>
diff --git a/app/views/search/results/partials/_protocol_text.html.erb b/app/views/search/results/partials/_protocol_text.html.erb
index 35007c800..137f7a62d 100644
--- a/app/views/search/results/partials/_protocol_text.html.erb
+++ b/app/views/search/results/partials/_protocol_text.html.erb
@@ -7,9 +7,9 @@
<% if can_view_steps_in_protocol(protocol) %>
-
- <%= text %>
-
+ <%= route_to_other_org protocols_my_module_path(protocol.my_module),
+ protocol.organization,
+ text %>
<% else %>
<%= text %>
<% end %>
@@ -31,9 +31,9 @@
<% end %>
<% if can_edit_protocol(protocol) %>
-
- <%= text %>
-
+ <%= route_to_other_org edit_protocol_path(protocol),
+ protocol.organization,
+ text %>
<% else %>
<%= text %>
<% end %>
diff --git a/app/views/search/results/partials/_report_text.html.erb b/app/views/search/results/partials/_report_text.html.erb
index 2b7b81dec..0686c885a 100644
--- a/app/views/search/results/partials/_report_text.html.erb
+++ b/app/views/search/results/partials/_report_text.html.erb
@@ -2,9 +2,9 @@
<% text = query.present? ? highlight(report.name, query.strip.split(/\s+/)) : report.name %>
<% if can_view_reports(report.project) %>
-
- <%= text %>
-
+ <%= route_to_other_org edit_project_report_path(report.project, report),
+ report.project.organization,
+ text %>
<% else %>
<%= text %>
-<% end %>
\ No newline at end of file
+<% end %>
diff --git a/app/views/search/results/partials/_result_text.html.erb b/app/views/search/results/partials/_result_text.html.erb
index 08719ea16..69a439459 100644
--- a/app/views/search/results/partials/_result_text.html.erb
+++ b/app/views/search/results/partials/_result_text.html.erb
@@ -6,13 +6,14 @@
<%=t "search.index.archived" %>
<% if can_view_module_archive(result.my_module) %>
<% if target == :comment %>
- <%= link_to archive_my_module_path(result.my_module, ctarget: "result-panel-#{result.id}") do %>
- <%= text %>
- <% end %>
+ <%= route_to_other_org archive_my_module_path(result.my_module, ctarget: "result-panel-#{result.id}"),
+ result.my_module.experiment.project.organization,
+ text %>
+
<% else %>
-
- <%= text %>
-
+ <%= route_to_other_org archive_my_module_path(result.my_module),
+ result.my_module.experiment.project.organization,
+ text %>
<% end %>
<% else %>
<%= text %>
@@ -20,13 +21,13 @@
<% else %>
<% if can_view_results_in_module(result.my_module) %>
<% if target == :comment %>
- <%= link_to results_my_module_path(result.my_module, ctarget: "result-panel-#{result.id}") do %>
- <%= text %>
- <% end %>
+ <%= route_to_other_org results_my_module_path(result.my_module, ctarget: "result-panel-#{result.id}"),
+ result.my_module.experiment.project.organization,
+ text %>
<% else %>
-
- <%= text %>
-
+ <%= route_to_other_org results_my_module_path(result.my_module),
+ result.my_module.experiment.project.organization,
+ text %>
<% end %>
<% else %>
<%= text %>
diff --git a/app/views/search/results/partials/_step_text.html.erb b/app/views/search/results/partials/_step_text.html.erb
index 871a79afa..cd486f9d6 100644
--- a/app/views/search/results/partials/_step_text.html.erb
+++ b/app/views/search/results/partials/_step_text.html.erb
@@ -5,18 +5,18 @@
<% if can_view_steps_in_protocol(step.protocol) %>
<% if step.protocol.in_module? %>
<% if target == :comment %>
- <%= link_to protocols_my_module_path(step.protocol.my_module, ctarget: "step-panel-#{step.id}") do %>
- <%= text %>
- <% end %>
+ <%= route_to_other_org protocols_my_module_path(step.protocol.my_module, ctarget: "step-panel-#{step.id}"),
+ step.protocol.organization,
+ text %>
<% else %>
-
- <%= text %>
-
+ <%= route_to_other_org protocols_my_module_path(step.protocol.my_module),
+ step.protocol.organization,
+ text %>
<% end %>
<% elsif can_edit_protocol(step.protocol) %>
-
- <%= text %>
-
+ <%= route_to_other_org edit_protocol_path(step.protocol),
+ step.protocol.organization,
+ text %>
<% else %>
<%= text %>
<% end %>
diff --git a/app/views/shared/_navigation.html.erb b/app/views/shared/_navigation.html.erb
index c5b2cf583..811acf058 100644
--- a/app/views/shared/_navigation.html.erb
+++ b/app/views/shared/_navigation.html.erb
@@ -100,6 +100,34 @@
+
+ <% if current_user.organizations.length > 1 %>
+
+
+ <%= fa_icon 'users' %>
+
+ <%= truncate_organization_name(current_organization.name) %>
+
+
+
+
+
+ <% end %>
+
diff --git a/config/locales/en.yml b/config/locales/en.yml
index 518790b3f..9e614fae1 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -1118,6 +1118,9 @@ en:
team_name_label: "Team name"
team_name_help: "Team name is required in order to create your own team."
settings:
+ changed_org_flash: "You are working on %{team} now!"
+ changed_org_error_flash: "Something went wrong! Try again later."
+ changed_org_in_search: "The searched item is not in your current team. You will be redirected to %{team} team!"
navigation:
preferences: "My preferences"
organizations: "My teams"
diff --git a/config/routes.rb b/config/routes.rb
index dabeaaef2..d1aca0457 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -19,6 +19,9 @@ Rails.application.routes.draw do
to: 'users/settings#notifications_settings',
as: 'notifications_settings',
defaults: { format: 'json' }
+ post 'users/settings/user_current_organization',
+ to: 'users/settings#user_current_organization',
+ as: 'user_current_organization'
get "users/settings/organizations", to: "users/settings#organizations", as: "organizations"
get "users/settings/organizations/new", to: "users/settings#new_organization", as: "new_organization"
post "users/settings/organizations/new", to: "users/settings#create_organization", as: "create_organization"
diff --git a/db/migrate/20161011074804_add_current_organization_to_user.rb b/db/migrate/20161011074804_add_current_organization_to_user.rb
new file mode 100644
index 000000000..0b97fbb6a
--- /dev/null
+++ b/db/migrate/20161011074804_add_current_organization_to_user.rb
@@ -0,0 +1,14 @@
+class AddCurrentOrganizationToUser < ActiveRecord::Migration
+ def up
+ add_column :users, :current_organization_id, :integer
+ add_foreign_key :users, :organizations, column: :current_organization_id
+
+ User.find_each do |user|
+ user.update(current_organization_id: user.organizations.first.id)
+ end
+ end
+
+ def down
+ remove_column :users, :current_organization_id
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index 4b05fc448..9d3c132b9 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -664,6 +664,7 @@ ActiveRecord::Schema.define(version: 20161012112900) do
t.boolean "recent_notification", default: true
t.boolean "assignments_notification_email", default: false
t.boolean "recent_notification_email", default: false
+ t.integer "current_organization_id"
t.boolean "system_message_notification_email", default: false
end
@@ -795,4 +796,5 @@ ActiveRecord::Schema.define(version: 20161012112900) do
add_foreign_key "user_projects", "projects"
add_foreign_key "user_projects", "users"
add_foreign_key "user_projects", "users", column: "assigned_by_id"
+ add_foreign_key "users", "organizations", column: "current_organization_id"
end
diff --git a/db/seeds.rb b/db/seeds.rb
index eb0fa3c24..5a494d351 100644
--- a/db/seeds.rb
+++ b/db/seeds.rb
@@ -1,10 +1,10 @@
include UsersGenerator
# Create admin user
-admin_password = "inHisHouseAtRlyehDeadCthulhuWaitsDreaming"
+admin_password = 'inHisHouseAtRlyehDeadCthulhuWaitsDreaming'
create_user(
- "Admin",
- "admin@scinote.net",
+ 'Admin',
+ 'admin@scinote.net',
admin_password,
true,
Constants::DEFAULT_PRIVATE_ORG_NAME,