class User < ActiveRecord::Base rolify # Include default devise modules. Others available are: # :token_authenticatable, :confirmable, # :lockable, :timeoutable and :omniauthable devise :invitable, :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable, :confirmable, :omniauthable, :omniauth_providers => [:shibboleth] #associations between tables belongs_to :user_type belongs_to :user_status has_many :answers has_many :user_org_roles has_many :project_groups, :dependent => :destroy has_many :organisations , through: :user_org_roles has_many :user_role_types, through: :user_org_roles has_many :projects, through: :project_groups do def filter(query) return self unless query.present? t = self.arel_table q = "%#{query}%" conditions = t[:title].matches(q) columns = %i( grant_number identifier description principal_investigator data_contact ) columns.each {|col| conditions = conditions.or(t[col].matches(q)) } self.where(conditions) end end has_and_belongs_to_many :roles, :join_table => :users_roles has_many :plan_sections accepts_nested_attributes_for :roles #attr_accessible :role_ids #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, :organisation_id, :skip_invitation, :other_organisation, :accept_terms, :role_ids, :dmponline3 # FIXME: The duplication in the block is to set defaults. It might be better if # they could be set in Settings::PlanList itself, if possible. has_settings :plan_list, class_name: 'Settings::PlanList' do |s| s.key :plan_list, defaults: { columns: Settings::PlanList::DEFAULT_COLUMNS } end def name(use_email = true) if ((firstname.nil? && surname.nil?) || (firstname.strip == "" && surname.strip == "")) && use_email then return email else name = "#{firstname} #{surname}" return name.strip end end def organisation_id=(new_organisation_id) if !self.user_org_roles.pluck(:organisation_id).include?(new_organisation_id.to_i) then if self.user_org_roles.count != 1 then new_user_org_role = UserOrgRole.new new_user_org_role.organisation_id = new_organisation_id new_user_org_role.user_role_type = UserRoleType.find_by_name("user"); self.user_org_roles << new_user_org_role else user_org_role = self.user_org_roles.first user_org_role.organisation_id = new_organisation_id user_org_role.save org_admin_role = roles.find_by_name("org_admin") unless org_admin_role.nil? then roles.delete(org_admin_role) end end end end def organisation_id if self.organisations.count > 0 then return self.organisations.first.id else return nil end end def organisation if self.organisations.count > 0 then return self.organisations.first else return nil end end def current_organisation if self.organisations.count > 0 then return self.organisations.last else return nil end end def organisation=(new_organisation) organisation_id = organisation.id end def is_admin? admin = roles.find_by_name("admin") return !admin.nil? end def is_org_admin? org_admin = roles.find_by_name("org_admin") return !org_admin.nil? end def org_type org_type = organisation.organisation_type.name return org_type end end