Skip to content
36 changes: 18 additions & 18 deletions app/controllers/phases_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -7,12 +7,12 @@ class PhasesController < ApplicationController
# GET /plans/:plan_id/phases/:id/edit
def edit

@plan = Plan.eager_load2(params[:plan_id])
@plan = Plan.load_for_phase(params[:plan_id], params[:id])
# authorization done on plan so found in plan_policy
authorize @plan

phase_id = params[:id].to_i
@phase = @plan.template.phases.select {|p| p.id == phase_id}.first
@phase = @plan.template.phases.first
@readonly = !@plan.editable_by?(current_user.id)

# Now we need to get all the themed guidance for the plan.
Expand Down Expand Up @@ -46,35 +46,35 @@ def edit
end
end

# create hash from question id to theme to guidance array
# so when we arerendering a question we can grab the guidance out of this
#
# question_guidance = {
# question.id => {
# theme => [ {text: "......", org: "....."} ]
# }
# }
questions = []
# Appends all the questions for a given phase into questions Array.
@phase.sections.each do |section|
section.questions.each do |question|
questions.push(question)
end
end
@question_guidance = {}
@plan.questions.each do |question|
# Puts in question_guidance (key/value) entries where key is the question id and value is a hash.
# Each question id hash has (key/value) entries where key is a theme and value is an Array of {text, org} objects
# Example hash
# question_guidance = { question.id =>
# { theme => [ {text: "......", org: "....."} ] }
# }
questions.each do |question|
qg = {}
question.themes.each do |t|
title = t.title
qg[title] = theme_guidance[title] if theme_guidance.has_key?(title)
end
if !@question_guidance.has_key?(question.id)
@question_guidance[question.id] = Array.new
end
@question_guidance[question.id] = qg
end

if !user_signed_in? then
respond_to do |format|
format.html { redirect_to edit_user_registration_path }
end
end

end
end

end

# GET /plans/PLANID/phases/PHASEID/status.json
def status
Expand Down
11 changes: 6 additions & 5 deletions app/controllers/roles_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -8,21 +8,22 @@ def create
authorize @role
access_level = params[:role][:access_level].to_i
set_access_level(access_level)
message = ''
if params[:user].present?
if @role.plan.owner.present? && @role.plan.owner.email == params[:user]
flash[:notice] = _('Cannot share plan with %{email} since that email matches with the owner of the plan.') % {email: params[:user]}
else
if Role.find_by(plan: @role.plan, user: User.find_by(email: params[:user])) # role already exists
user = User.where_case_insensitive('email',params[:user]).first
if Role.find_by(plan: @role.plan, user: user) # role already exists
flash[:notice] = _('Plan is already shared with %{email}.') % {email: params[:user]}
else
message = _('Plan shared with %{email}.') % {email: params[:user]}
user = User.find_by(email: params[:user])
else
if user.nil?
registered = false
User.invite!(email: params[:user])
message = _('Invitation to %{email} issued successfully.') % {email: params[:user]}
message = _('Invitation to %{email} issued successfully. \n') % {email: params[:user]}
user = User.find_by(email: params[:user])
end
message += _('Plan shared with %{email}.') % {email: user.email}
@role.user = user
if @role.save
if registered then UserMailer.sharing_notification(@role, current_user).deliver_now end
Expand Down
11 changes: 5 additions & 6 deletions app/models/plan.rb
Original file line number Diff line number Diff line change
Expand Up @@ -990,16 +990,15 @@ def self.eager_load(id)
]).find(id)
end

def self.eager_load2(id)
def self.load_for_phase(id, phase_id)
Plan.includes(
[{template: [
[template: [
{phases: {sections: {questions: [{answers: :notes}, :annotations, :question_format, :themes]}}},
{customizations: :org},
:org
]},
{plans_guidance_groups: {guidance_group: {guidances: :themes}}},
{questions: :themes}
]).find(id)
],
plans_guidance_groups: {guidance_group: {guidances: :themes}}
]).where(id: id, phases: { id: phase_id }).first
end


Expand Down
16 changes: 8 additions & 8 deletions app/models/settings/template.rb
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
module Settings
class Template < RailsSettings::SettingObject

#attr_accessible :var, :target, :target_id, :target_type

VALID_FONT_FACES = [
'Arial, Helvetica, Sans-Serif',
'"Times New Roman", Times, Serif'
'"Times New Roman", Times, Serif',
'Arial, Helvetica, Sans-Serif'
]

VALID_FONT_SIZE_RANGE = (8..14)
Expand All @@ -17,13 +17,13 @@ class Template < RailsSettings::SettingObject
DEFAULT_SETTINGS = {
formatting: {
margin: { # in millimeters
top: 20,
bottom: 20,
left: 20,
right: 20
top: 10,
bottom: 10,
left: 10,
right: 10
},
font_face: VALID_FONT_FACES.first,
font_size: 12 # pt
font_size: 10 # pt
},
max_pages: 3,
fields: {
Expand Down
45 changes: 26 additions & 19 deletions app/models/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable, :confirmable,
# :lockable, :timeoutable and :omniauthable
devise :invitable, :database_authenticatable, :registerable, :recoverable,
:rememberable, :trackable, :validatable, :omniauthable,
devise :invitable, :database_authenticatable, :registerable, :recoverable,
:rememberable, :trackable, :validatable, :omniauthable,
:omniauth_providers => [:shibboleth, :orcid]

##
Expand All @@ -26,27 +26,27 @@ def filter(query)
q = "%#{query}%"
conditions = t[:title].matches(q)
columns = %i(
grant_number identifier description principal_investigator data_contact
grant_number identifier description principal_investigator data_contact
)
columns = ['grant_number', 'identifier', 'description', 'principal_investigator', 'data_contact']
columns.each {|col| conditions = conditions.or(t[col].matches(q)) }
self.where(conditions)
end
end

has_many :user_identifiers
has_many :identifier_schemes, through: :user_identifiers

##
# Possibly needed for active_admin
# -relies on protected_attributes gem as syntax depricated in rails 4.2
#accepts_nested_attributes_for :roles
#attr_accessible :password_confirmation, :encrypted_password, :remember_me,
# :id, :email, :firstname, :last_login,:login_count, :orcid_id,
# :password, :shibboleth_id, :user_status_id, :surname,
# :user_type_id, :org_id, :skip_invitation, :other_organisation,
#attr_accessible :password_confirmation, :encrypted_password, :remember_me,
# :id, :email, :firstname, :last_login,:login_count, :orcid_id,
# :password, :shibboleth_id, :user_status_id, :surname,
# :user_type_id, :org_id, :skip_invitation, :other_organisation,
# :accept_terms, :role_ids, :dmponline3, :api_token,
# :organisation, :language, :language_id, :org, :perms,
# :organisation, :language, :language_id, :org, :perms,
# :confirmed_at, :org_id

validates :email, email: true, allow_nil: true, uniqueness: {message: _("must be unique")}
Expand All @@ -62,13 +62,13 @@ def filter(query)
# What do they do? do they do it efficiently, and do we need them?

# Determines the locale set for the user or the organisation he/she belongs
# @return String or nil
# @return String or nil
def get_locale
if !self.language.nil?
return self.language.abbreviation
elsif !self.org.nil?
return self.org.get_locale
else
else
return nil
end
end
Expand Down Expand Up @@ -126,7 +126,7 @@ def org_id=(new_org_id)
def organisation=(new_org)
org_id = new_org.id unless new_org.nil?
end

##
# checks if the user is a super admin
# if the user has any privelege which requires them to see the super admin page
Expand All @@ -144,7 +144,7 @@ def can_super_admin?
#
# @return [Boolean] true if the user is an organisation admin
def can_org_admin?
return self.can_grant_permissions? || self.can_modify_guidance? ||
return self.can_grant_permissions? || self.can_modify_guidance? ||
self.can_modify_templates? || self.can_modify_org_details?
end

Expand Down Expand Up @@ -223,7 +223,7 @@ def org_type
return org_type
end
=end

##
# removes the api_token from the user
# modifies the user model
Expand Down Expand Up @@ -254,11 +254,11 @@ def keep_or_generate_token!
# --------------------------------------------------------------
def self.from_omniauth(auth)
scheme = IdentifierScheme.find_by(name: auth.provider.downcase)

if scheme.nil?
throw Exception.new('Unknown OAuth provider: ' + auth.provider)
else
joins(:user_identifiers).where('user_identifiers.identifier': auth.uid,
joins(:user_identifiers).where('user_identifiers.identifier': auth.uid,
'user_identifiers.identifier_scheme_id': scheme.id).first
end
end
Expand All @@ -269,7 +269,14 @@ def self.from_omniauth(auth)
def deliver_invitation(options = {})
super(options.merge(subject: _('A Data Management Plan in %{application_name} has been shared with you') % {application_name: Rails.configuration.branding[:application][:name]}))
end

##
# Case insensitive search over User model
# @param field [string] The name of the field being queried
# @param val [string] The string to search for, case insensitive
# @return [ActiveRecord::Relation] The result of the search
def self.where_case_insensitive(field, val)
User.where("lower(#{field}) = ?", val.downcase)
end

# TODO: Remove this, its never called.
# this generates a reset password link for a given user
Expand All @@ -278,12 +285,12 @@ def deliver_invitation(options = {})
=begin
def reset_password_link
raw, enc = Devise.token_generator.generate(self.class, :reset_password_token)
self.reset_password_token = enc
self.reset_password_token = enc
self.reset_password_sent_at = Time.now.utc
save(validate: false)

edit_user_password_path + '?reset_password_token=' + raw
end
=end

end
12 changes: 12 additions & 0 deletions db/migrate/20170702012742_ensure_indexes_in_place.rb
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
class EnsureIndexesInPlace < ActiveRecord::Migration
def change
#users_perms
remove_foreign_key :users_perms, :perms
remove_foreign_key :users_perms, :users
remove_index :users_perms, name: 'index_users_perms_on_user_id_and_perm_id'
add_index :users_perms, :user_id
add_foreign_key :users_perms, :perms
add_foreign_key :users_perms, :users
#user_identifiers
add_index :user_identifiers, :user_id
#roles
Expand All @@ -27,14 +31,22 @@ def change
#annotations
add_index :annotations, :question_id
#question_themes
remove_foreign_key :questions_themes, :questions
remove_foreign_key :questions_themes, :themes
remove_index :questions_themes, name: 'question_theme_index'
remove_index :questions_themes, name: 'theme_question_index'
add_index :questions_themes, :question_id
add_foreign_key :questions_themes, :questions
add_foreign_key :questions_themes, :themes
#question_options
add_index :question_options, :question_id
#answers_question_options
remove_foreign_key :answers_question_options, :answers
remove_foreign_key :answers_question_options, :question_options
remove_index :answers_question_options, name: 'answer_question_option_index'
remove_index :answers_question_options, name: 'question_option_answer_index'
add_index :answers_question_options, :answer_id
add_foreign_key :answers_question_options, :answers
add_foreign_key :answers_question_options, :question_options
end
end
Loading