Class: Principal

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
app/models/principal.rb

Overview

Redmine - project management software Copyright (C) 2006-2017 Jean-Philippe Lang

This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

Since:

  • 0.9.0

Direct Known Subclasses

Group, User

Constant Summary collapse

STATUS_ANONYMOUS =

Account statuses

0
STATUS_ACTIVE =
1
STATUS_REGISTERED =
2
STATUS_LOCKED =
3

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.detect_by_keyword(principals, keyword) ⇒ Object

Returns the principal that matches the keyword among principals

Since:

  • 3.2.0



169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# File 'app/models/principal.rb', line 169

def self.detect_by_keyword(principals, keyword)
  keyword = keyword.to_s
  return nil if keyword.blank?

  principal = nil
  principal ||= principals.detect {|a| keyword.casecmp(a..to_s) == 0}
  principal ||= principals.detect {|a| keyword.casecmp(a.mail.to_s) == 0}

  if principal.nil? && keyword.match(/ /)
    firstname, lastname = *(keyword.split) # "First Last Throwaway"
    principal ||= principals.detect {|a|
                               a.is_a?(User) &&
                                 firstname.casecmp(a.firstname.to_s) == 0 &&
                                 lastname.casecmp(a.lastname.to_s) == 0
                             }
  end
  if principal.nil?
    principal ||= principals.detect {|a| keyword.casecmp(a.name) == 0}
  end
  principal
end

.fields_for_order_statement(table = nil) ⇒ Object

Returns an array of fields names than can be used to make an order statement for principals. Users are sorted before Groups. Examples:

Since:

  • 2.3.0



162
163
164
165
166
# File 'app/models/principal.rb', line 162

def self.fields_for_order_statement(table=nil)
  table ||= table_name
  columns = ['type DESC'] + (User.name_formatter[:order] - ['id']) + ['lastname', 'id']
  columns.uniq.map {|field| "#{table}.#{field}"}
end

Instance Method Details

#<=>(principal) ⇒ Object



148
149
150
151
152
153
154
155
156
157
# File 'app/models/principal.rb', line 148

def <=>(principal)
  if principal.nil?
    -1
  elsif self.class.name == principal.class.name
    self.to_s.casecmp(principal.to_s)
  else
    # groups after users
    principal.class.name <=> self.class.name
  end
end

#mailObject

Since:

  • 3.0.0



130
131
132
# File 'app/models/principal.rb', line 130

def mail
  nil
end

#mail=(*args) ⇒ Object

Since:

  • 3.0.0



126
127
128
# File 'app/models/principal.rb', line 126

def mail=(*args)
  nil
end

#member_of?(project) ⇒ Boolean

Returns true if the principal is a member of project

Returns:

  • (Boolean)

Since:

  • 3.0.0



139
140
141
# File 'app/models/principal.rb', line 139

def member_of?(project)
  project.is_a?(Project) && project_ids.include?(project.id)
end

#name(formatter = nil) ⇒ Object

Since:

  • 1.0.2



122
123
124
# File 'app/models/principal.rb', line 122

def name(formatter = nil)
  to_s
end

#nullify_projects_default_assigned_toObject

Since:

  • 3.4.0



191
192
193
# File 'app/models/principal.rb', line 191

def nullify_projects_default_assigned_to
  Project.where(default_assigned_to: self).update_all(default_assigned_to_id: nil)
end

#project_idsObject

Returns an array of the project ids that the principal is a member of

Since:

  • 3.4.0



144
145
146
# File 'app/models/principal.rb', line 144

def project_ids
  @project_ids ||= super.freeze
end

#reload(*args) ⇒ Object

Since:

  • 3.4.0



117
118
119
120
# File 'app/models/principal.rb', line 117

def reload(*args)
  @project_ids = nil
  super
end

#visible?(user = User.current) ⇒ Boolean

Returns:

  • (Boolean)

Since:

  • 3.0.0



134
135
136
# File 'app/models/principal.rb', line 134

def visible?(user=User.current)
  Principal.visible(user).find_by(:id => id) == self
end