Class: Principal

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

Overview

Redmine - project management software Copyright (C) 2006-2016 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



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
# File 'app/models/principal.rb', line 153

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



146
147
148
149
150
# File 'app/models/principal.rb', line 146

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



132
133
134
135
136
137
138
139
140
141
# File 'app/models/principal.rb', line 132

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



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

def mail
  nil
end

#mail=(*args) ⇒ Object

Since:

  • 3.0.0



115
116
117
# File 'app/models/principal.rb', line 115

def mail=(*args)
  nil
end

#member_of?(project) ⇒ Boolean

Return true if the principal is a member of project

Returns:

  • (Boolean)

Since:

  • 3.0.0



128
129
130
# File 'app/models/principal.rb', line 128

def member_of?(project)
  projects.to_a.include?(project)
end

#name(formatter = nil) ⇒ Object

Since:

  • 1.0.2



111
112
113
# File 'app/models/principal.rb', line 111

def name(formatter = nil)
  to_s
end

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

Returns:

  • (Boolean)

Since:

  • 3.0.0



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

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