Skip to content

Commit f99abb4

Browse files
committed
Revert "add distinct name part fields refs #5317"
This reverts commit 995110f. Change-Id: Ic00e7ced20ca9d912587e3440862ceb50e601d15 Reviewed-on: https://gerrit.instructure.com/6511 Tested-by: Hudson <hudson@instructure.com> Reviewed-by: Zach Wily <zach@instructure.com>
1 parent 9197684 commit f99abb4

10 files changed

Lines changed: 38 additions & 219 deletions

File tree

app/models/account.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ def fast_all_users(limit=nil)
298298
end
299299

300300
def paginate_users_not_in_groups(groups, page, per_page = 15)
301-
User.paginate_by_sql(["SELECT u.id, u.name, u.title, u.given_name, u.surname, u.suffix
301+
User.paginate_by_sql(["SELECT u.id, u.name
302302
FROM users u
303303
INNER JOIN user_account_associations uaa on uaa.user_id = u.id
304304
WHERE uaa.account_id = ? AND u.workflow_state != 'deleted'

app/models/course.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -467,7 +467,7 @@ def self.default_name
467467
end
468468

469469
def paginate_users_not_in_groups(groups, page, per_page = 15)
470-
User.paginate_by_sql(["SELECT u.id, u.name, u.title, u.given_name, u.surname, u.suffix
470+
User.paginate_by_sql(["SELECT u.id, u.name
471471
FROM users u
472472
INNER JOIN enrollments e ON e.user_id = u.id
473473
WHERE e.course_id = ? AND e.workflow_state NOT IN ('rejected', 'completed', 'deleted') AND e.type = 'StudentEnrollment'

app/models/user.rb

Lines changed: 21 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ class User < ActiveRecord::Base
111111

112112

113113
include StickySisFields
114-
are_sis_sticky :name, :title, :given_name, :surname, :suffix
114+
are_sis_sticky :name
115115

116116
def conversations
117117
all_conversations.visible # i.e. exclude any where the user has deleted all the messages
@@ -436,10 +436,7 @@ def participants
436436
end
437437

438438
def last_name_first
439-
_title, _given, _surname, _suffix = title, given_name, surname, suffix
440-
_title, _given, _surname, _suffix = User.name_parts(read_attribute(:name)) if !_title && !_given && !_surname && !_suffix
441-
_given = [_title, _given, _suffix].compact.join(' ')
442-
_surname ? "#{_surname}, #{_given}" : _given
439+
User.last_name_first(self.name)
443440
end
444441

445442
def last_name_first_or_unnamed
@@ -449,68 +446,28 @@ def last_name_first_or_unnamed
449446
end
450447

451448
def first_name
452-
return given_name if given_name
453-
User.name_parts(read_attribute(:name))[1] || ''
449+
(self.name || "").split(/\s/)[0]
454450
end
455451

456452
def last_name
457-
return surname if surname
458-
User.name_parts(read_attribute(:name))[2] || ''
453+
(self.name || "").split(/\s/)[1..-1].join(" ")
459454
end
460-
461-
# Feel free to add, but the "authoritative" list (http://en.wikipedia.org/wiki/Title_(name)) is quite large
462-
SUFFIXES = /^(Sn?r\.?|Senior|Jn?r\.?|Junior|II|III|IV|V|VI|Esq\.?|Esquire)$/i
463-
TITLES = /^(Mrs?\.?|Ms\.?|Miss|Dr\.?|Doctor)$/
464-
465-
def self.name_parts(name)
466-
return [nil, nil, nil, nil] unless name
467-
surname, given, suffix = name.strip.split(/\s*,\s*/, 3)
468-
469-
# Doe, John, Sr.
470-
# Otherwise change Ho, Chi, Min to Ho, Chi Min
471-
if suffix && !(suffix =~ SUFFIXES)
472-
given = "#{given} #{suffix}"
473-
suffix = nil
474-
end
475-
476-
if given
477-
# John Doe, Sr.
478-
if !suffix && given =~ SUFFIXES
479-
suffix = given
480-
given = surname
481-
surname = nil
455+
456+
def self.last_name_first(name)
457+
name_groups = []
458+
if name
459+
comma_separated = name.split(",")
460+
comma_separated.each do |clump|
461+
names = clump.split
462+
if name.match(/\s/)
463+
names = clump.split.map{|c| c.split(".").join(". ").split }.flatten
464+
end
465+
name = names.pop
466+
name += ", " + names.join(" ") if !names.empty?
467+
name_groups << name
482468
end
483-
else
484-
# John Doe
485-
given = name.strip
486-
surname = nil
487-
end
488-
489-
given_parts = given.split
490-
# John Doe Sr.
491-
if !suffix && given_parts.length > 1 && given_parts.last =~ SUFFIXES
492-
suffix = given_parts.pop
493-
end
494-
# Dr. John Doe
495-
if given_parts.length > 1 && given_parts.first =~ TITLES
496-
title = given_parts.shift
497-
end
498-
surname = given_parts.pop if !surname && given_parts.length > 1
499-
500-
[ title, given_parts.empty? ? nil : given_parts.join(' '), surname, suffix ]
501-
end
502-
503-
def name
504-
return (read_attribute(:name) || '') if !title && !given_name && !surname && !suffix
505-
[title, given_name, surname, suffix].compact.join(' ')
506-
end
507-
508-
def name=(name)
509-
# name != self.name prevents "John St. Clair" blowing away [nil, "John", "St. Clair", nil]
510-
if name != self.name
511-
self.title, self.given_name, self.surname, self.suffix = User.name_parts(name)
512-
write_attribute(:name, name)
513469
end
470+
name_groups.join ", "
514471
end
515472

516473
def self.user_lookup_cache_key(id)
@@ -525,8 +482,8 @@ def self.invalidate_cache(id)
525482

526483
def infer_defaults
527484
self.name = nil if self.name == "User"
528-
self.name = self.email || t(:default_user_name, "User") if self.name.blank?
529-
[:short_name, :title, :given_name, :surname, :suffix].each { |attr| write_attribute(attr, nil) if read_attribute(attr) == '' }
485+
self.name ||= self.email || t(:default_user_name, "User")
486+
self.short_name = nil if self.short_name == ""
530487
self.short_name ||= self.name
531488
self.sortable_name = self.last_name_first.downcase
532489
self.reminder_time_for_due_dates ||= 48.hours.to_i
@@ -1846,7 +1803,7 @@ def group_membership_visibility
18461803
end
18471804
memoize :group_membership_visibility
18481805

1849-
MESSAGEABLE_USER_COLUMNS = ['id', 'short_name', 'name', 'title', 'given_name', 'surname', 'suffix', 'avatar_image_url', 'avatar_image_source'].map{|col|"users.#{col}"}
1806+
MESSAGEABLE_USER_COLUMNS = ['id', 'short_name', 'name', 'avatar_image_url', 'avatar_image_source'].map{|col|"users.#{col}"}
18501807
MESSAGEABLE_USER_COLUMN_SQL = MESSAGEABLE_USER_COLUMNS.join(", ")
18511808
MESSAGEABLE_USER_CONTEXT_REGEX = /\A(course|section|group)_(\d+)(_([a-z]+))?\z/
18521809
def messageable_users(options = {})

app/models/wimba_conference.rb

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -118,16 +118,17 @@ def send_request(action, opts={})
118118
end
119119

120120
def touch_user(user)
121+
names = user.last_name_first.split(/, /, 2)
121122
send_request('modifyUser', {
122123
'target' => wimba_id(user.uuid),
123124
'password_type' => 'A',
124-
'first_name' => user.first_name,
125-
'last_name' => user.last_name}) ||
125+
'first_name' => names[1],
126+
'last_name' => names[0]}) ||
126127
send_request('createUser', {
127128
'target' => wimba_id(user.uuid),
128129
'password_type' => 'A',
129-
'first_name' => user.first_name,
130-
'last_name' => user.last_name})
130+
'first_name' => names[1],
131+
'last_name' => names[0]})
131132
end
132133

133134
def add_user_to_conference(user, role=:participant)

db/migrate/20111019163904_add_name_details_to_users.rb

Lines changed: 0 additions & 15 deletions
This file was deleted.

lib/basic_lti.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,9 @@ def self.generate(url, tool, user, context, link_code, return_url)
5959
hash['user_id'] = user.opaque_identifier(:asset_string)
6060
hash['roles'] = user.lti_role_types(context).join(',') # AccountAdmin, Student, Faculty or Observer
6161
if tool.include_name?
62-
hash['lis_person_name_given'] = user.first_name.present? ? user.first_name : nil
63-
hash['lis_person_name_family'] = user.last_name.present? ? user.last_name : nil
62+
last, other = user.last_name_first.split(/,/, 2)
63+
hash['lis_person_name_given'] = other
64+
hash['lis_person_name_family'] = last
6465
hash['lis_person_name_full'] = user.name
6566
end
6667
if tool.include_email?

lib/sis/user_importer.rb

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -103,16 +103,11 @@ def process_batch
103103
end
104104

105105
user = pseudo.user
106-
if ([:name, :title, :given_name, :surname, :suffix] & user.stuck_sis_fields.to_a).empty?
107-
# clears out name, title, and suffix
108-
user.name = nil
109-
user.given_name = first_name.blank? ? nil : first_name
110-
user.surname = last_name.blank? ? nil : last_name
111-
end
106+
user.name = "#{first_name} #{last_name}" unless user.stuck_sis_fields.include?(:name)
107+
112108
else
113109
user = User.new
114-
user.given_name = first_name.blank? ? nil : first_name
115-
user.surname = last_name.blank? ? nil : last_name
110+
user.name = "#{first_name} #{last_name}"
116111
end
117112

118113
if status =~ /active/i

spec/lib/basic_lti_spec.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,8 +167,8 @@
167167
@tool.include_name?.should eql(true)
168168
@tool.include_email?.should eql(false)
169169
hash = BasicLTI.generate('http://www.yahoo.com', @tool, @user, @course, '123456', 'http://www.yahoo.com')
170-
hash['lis_person_name_given'].should == 'User'
171-
hash['lis_person_name_family'].should == nil
170+
hash['lis_person_name_given'].should == nil
171+
hash['lis_person_name_family'].should == 'User'
172172
hash['lis_person_name_full'].should == @user.name
173173
hash['lis_person_contact_email_primary'].should be_nil
174174
end
@@ -179,8 +179,8 @@
179179
@tool.include_name?.should eql(true)
180180
@tool.include_email?.should eql(true)
181181
hash = BasicLTI.generate('http://www.yahoo.com', @tool, @user, @course, '123456', 'http://www.yahoo.com')
182-
hash['lis_person_name_given'].should == 'User'
183-
hash['lis_person_name_family'].should == nil
182+
hash['lis_person_name_given'].should == nil
183+
hash['lis_person_name_family'].should == 'User'
184184
hash['lis_person_name_full'].should == @user.name
185185
hash['lis_person_contact_email_primary'] = @user.email
186186
end

spec/lib/sis_csv_importer_spec.rb

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -975,18 +975,6 @@ def gen_ssha_password(password)
975975
user.name.should eql("My Awesome Name")
976976
end
977977

978-
it "should preserve first name/last name split" do
979-
process_csv_data_cleanly(
980-
"user_id,login_id,password,first_name,last_name,email,status,ssha_password",
981-
"user_1,user1,badpassword,John,St. Clair,user@example.com,active,"
982-
)
983-
user = Pseudonym.find_by_unique_id('user1').user
984-
user.first_name.should == 'John'
985-
user.last_name.should == 'St. Clair'
986-
user.name.should == 'John St. Clair'
987-
user.last_name_first.should == 'St. Clair, John'
988-
end
989-
990978
it "should set passwords and not overwrite current passwords" do
991979
process_csv_data_cleanly(
992980
"user_id,login_id,password,first_name,last_name,email,status,ssha_password",

spec/models/user_spec.rb

Lines changed: 0 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -790,112 +790,4 @@ def set_up_course_with_users
790790
course_with_student
791791
@student.section_for_course(@course).should == @course.default_section
792792
end
793-
794-
context "names" do
795-
it "should infer name parts" do
796-
User.name_parts('Cody Cutrer').should == [nil, 'Cody', 'Cutrer', nil]
797-
User.name_parts(' Cody Cutrer ').should == [nil, 'Cody', 'Cutrer', nil]
798-
User.name_parts('Cutrer, Cody').should == [nil, 'Cody', 'Cutrer', nil]
799-
User.name_parts('Cutrer, Cody Houston').should == [nil, 'Cody Houston', 'Cutrer', nil]
800-
User.name_parts('St. Clair, John').should == [nil, 'John', 'St. Clair', nil]
801-
# sorry, can't figure this out
802-
User.name_parts('John St. Clair').should == [nil, 'John St.', 'Clair', nil]
803-
User.name_parts('Jefferson Thomas Cutrer IV').should == [nil, 'Jefferson Thomas', 'Cutrer', 'IV']
804-
User.name_parts('Jefferson Thomas Cutrer, IV').should == [nil, 'Jefferson Thomas', 'Cutrer', 'IV']
805-
User.name_parts('Cutrer, Jefferson, IV').should == [nil, 'Jefferson', 'Cutrer', 'IV']
806-
User.name_parts('Cutrer, Jefferson IV').should == [nil, 'Jefferson', 'Cutrer', 'IV']
807-
User.name_parts(nil).should == [nil, nil, nil, nil]
808-
User.name_parts('Bob').should == [nil, 'Bob', nil, nil]
809-
User.name_parts('Doctor').should == [nil, 'Doctor', nil, nil]
810-
# sorry, have to choose one or the other
811-
User.name_parts('Doctor John').should == ['Doctor', 'John', nil, nil]
812-
User.name_parts('Doctor Kevorkian').should == ['Doctor', 'Kevorkian', nil, nil]
813-
User.name_parts('Ho, Chi, Min').should == [nil, 'Chi Min', 'Ho', nil]
814-
# sorry, don't understand cultures that put the surname first
815-
# (maybe pass in the user's locale when parsing?)
816-
User.name_parts('Ho Chi Min').should == [nil, 'Ho Chi', 'Min', nil]
817-
User.name_parts('Mr. Cody Cutrer').should == ['Mr.', 'Cody', 'Cutrer', nil]
818-
User.name_parts('').should == [nil, nil, nil, nil]
819-
User.name_parts('John Doe').should == [nil, 'John', 'Doe', nil]
820-
User.name_parts('Junior').should == [nil, 'Junior', nil, nil]
821-
end
822-
823-
it "should return properly formatted names" do
824-
u = User.new
825-
u.name.should == ''
826-
u.first_name.should == ''
827-
u.last_name.should == ''
828-
u.last_name_first.should == ''
829-
830-
u.given_name = 'Cody'
831-
u.name.should == 'Cody'
832-
u.first_name.should == 'Cody'
833-
u.last_name.should == ''
834-
u.last_name_first.should == 'Cody'
835-
836-
u.surname = 'Cutrer'
837-
u.name.should == 'Cody Cutrer'
838-
u.first_name.should == 'Cody'
839-
u.last_name.should == 'Cutrer'
840-
u.last_name_first.should == 'Cutrer, Cody'
841-
842-
u.title = 'Mr.'
843-
u.name.should == 'Mr. Cody Cutrer'
844-
u.first_name.should == 'Cody'
845-
u.last_name.should == 'Cutrer'
846-
u.last_name_first.should == 'Cutrer, Mr. Cody'
847-
848-
u.suffix = 'Esquire'
849-
u.name.should == 'Mr. Cody Cutrer Esquire'
850-
u.first_name.should == 'Cody'
851-
u.last_name.should == 'Cutrer'
852-
u.last_name_first.should == 'Cutrer, Mr. Cody Esquire'
853-
end
854-
855-
# name attribute is set, but others are not
856-
# name is returned raw, other fields are returned as parsed by name_parts
857-
it "should return properly formatted names (backcompat)" do
858-
u = User.new
859-
u.write_attribute(:name, '')
860-
u.name.should == ''
861-
u.first_name.should == ''
862-
u.last_name.should == ''
863-
u.last_name_first.should == ''
864-
865-
u.write_attribute(:name, 'Cody')
866-
u.name.should == 'Cody'
867-
u.first_name.should == 'Cody'
868-
u.last_name.should == ''
869-
u.last_name_first.should == 'Cody'
870-
871-
u.write_attribute(:name, 'Cody Cutrer')
872-
u.name.should == 'Cody Cutrer'
873-
u.first_name.should == 'Cody'
874-
u.last_name.should == 'Cutrer'
875-
u.last_name_first.should == 'Cutrer, Cody'
876-
877-
u.write_attribute(:name, 'Cutrer, Cody')
878-
u.name.should == 'Cutrer, Cody'
879-
u.first_name.should == 'Cody'
880-
u.last_name.should == 'Cutrer'
881-
u.last_name_first.should == 'Cutrer, Cody'
882-
883-
u.write_attribute(:name, 'Mr. Jefferson Thomas Cutrer IV')
884-
u.name.should == 'Mr. Jefferson Thomas Cutrer IV'
885-
u.first_name.should == 'Jefferson Thomas'
886-
u.last_name.should == 'Cutrer'
887-
u.last_name_first.should == 'Cutrer, Mr. Jefferson Thomas IV'
888-
end
889-
890-
it "should not blow away name details when assigning the same name via backcompat method" do
891-
u = User.new
892-
u.name = "St. Clair, John"
893-
u.name.should == "John St. Clair"
894-
u.last_name_first.should == 'St. Clair, John'
895-
u.name = "John St. Clair"
896-
u.last_name_first.should == 'St. Clair, John'
897-
# The original assignment is still preserved
898-
u.read_attribute(:name).should == 'St. Clair, John'
899-
end
900-
end
901793
end

0 commit comments

Comments
 (0)