Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

京都大学所属であるかを明文化 / 学生番号を追加 #149

Merged
merged 18 commits into from
May 2, 2023
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions javascript/packs/app.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,20 @@ document.addEventListener('DOMContentLoaded', () => {
}

form.addEventListener('submit', e => {
// 保存時に選択されていない方の所属情報を削除
form.querySelectorAll<HTMLSelectElement>('form #edit-is-kyoto-university').forEach(select => {
var isKUMember = (select.value==="TRUE");
form.querySelectorAll<HTMLSelectElement>('form #edit-ku-department').forEach(selectDepartment => {
if (!isKUMember) selectDepartment.value="";
});
form.querySelectorAll<HTMLInputElement>('form div.is-ku .form-control').forEach(input => {
if (!isKUMember) input.value="";
});
form.querySelectorAll<HTMLInputElement>('form div.not-ku .form-control').forEach(input => {
if (isKUMember) input.value="";
});
});

if (!form.reportValidity()) {
e.preventDefault();
e.stopPropagation();
Expand Down Expand Up @@ -53,6 +67,26 @@ document.addEventListener('DOMContentLoaded', () => {
});
});

form.querySelectorAll<HTMLSelectElement>('form #edit-is-kyoto-university').forEach(select => {
function rewrite(){
var isKUMember = (select.value==="TRUE");
form.querySelectorAll<HTMLDivElement>('form div.is-ku').forEach(div => {
div.hidden = !isKUMember;
})
form.querySelectorAll<HTMLDivElement>('form div.not-ku').forEach(div => {
div.hidden = isKUMember;
})
form.querySelectorAll<HTMLInputElement>('form div.is-ku .form-control').forEach(input => {
input.required=isKUMember;
})
form.querySelectorAll<HTMLInputElement>('form div.not-ku .form-control').forEach(input => {
input.required=!isKUMember;
})
}
rewrite();
select.addEventListener('change', rewrite);
});

form.querySelectorAll<HTMLInputElement>('form input.form-control.password').forEach(async input => {
const { default: zxcvbn } = await import('zxcvbn');

Expand Down
3 changes: 2 additions & 1 deletion lib/user.rb
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ def edit(uid, bind_uid, bind_password, attrs, update_last_modified: true)
attrs['cn'] = "#{attrs['givenName']} #{attrs['sn']}"
attrs['x-kmc-Lodging'] = attrs['x-kmc-Lodging'] ? 'TRUE' : 'FALSE' # fixme
attrs['x-kmc-AddressIsPublic'] = attrs['x-kmc-AddressIsPublic'] ? 'TRUE' : 'FALSE' # fixme
attrs['x-kmc-IsKUMember'] = attrs['x-kmc-IsKUMember']=="TRUE" ? 'TRUE' : 'FALSE' # fixme

ssh_public_keys = attrs.delete('sshPublicKey')
ssh_public_keys&.each do |key|
Expand Down Expand Up @@ -132,7 +133,7 @@ def add(uid, attributes, bind_uid, bind_password)
x-kmc-Alias title x-kmc-Generation description
postalCode postalAddress x-kmc-Lodging
telephoneNumber x-kmc-MailForwardingAddress
x-kmc-AddressIsPublic
x-kmc-AddressIsPublic x-kmc-IsKUMember x-kmc-KUDepartment x-kmc-KUStudentNumber
]

def update_attribute(conn, dn, key, value)
Expand Down
21 changes: 21 additions & 0 deletions lib/view_helpers.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,26 @@ def input_userattr(user, attr, opt = {})
opt[:class] ||= 'form-control'
haml_tag :input, {name: attr, value: user[attr].first}.merge(opt)
end
def select_userattr(user, attr, values, showDefault, opt = {})
opt[:class] ||= 'form-select'
haml_tag :select, {name: attr}.merge(opt) do
if (showDefault) then
haml_tag :option, selected: true, hidden: true, value: "" do haml_concat "--選択してください--" end
end
if (user[attr].size==0) then
values.each{|k, v|
haml_tag :option, value: k do haml_concat v end
}
else
values.each{|k, v|
if (user[attr].first.to_sym==k) then
haml_tag :option, selected: true, value: k do haml_concat v end
else
haml_tag :option, value: k do haml_concat v end
end
}
end
end
end
end
end
25 changes: 24 additions & 1 deletion schema/kmc.schema
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,29 @@ attributeType ( kmcAttributeType:14
EQUALITY booleanMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7 )

attributeType ( kmcAttributeType:15
NAME 'x-kmc-IsKUMember'
DESC 'Whether the associated person belongs to Kyoto University'
EQUALITY booleanMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.7
SINGLE-VALUE )

attributeType ( kmcAttributeType:16
NAME 'x-kmc-KUStudentNumber'
DESC 'Kyoto University Student Number'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE )

attributeType ( kmcAttributeType:17
NAME 'x-kmc-KUDepartment'
DESC 'the department and faculty of Kyoto University to which the associated person belongs'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE )

objectClass ( kmcObjectClass:1
NAME 'x-kmc-Person'
DESC 'Additional informations for a member of KMC'
Expand All @@ -112,4 +135,4 @@ objectClass ( kmcObjectClass:1
x-kmc-UniversityDepartment $ x-kmc-UniversityStatus $
x-kmc-UniversityMatricYear $
x-kmc-MailForwardingAddress $ x-kmc-MailNotificationAddress $
x-kmc-DiscordUserID $ x-kmc-SlackUserID $ x-kmc-AddressIsPublic) )
x-kmc-DiscordUserID $ x-kmc-SlackUserID $ x-kmc-AddressIsPublic $ x-kmc-IsKUMember $ x-kmc-KUDepartment $ x-kmc-KUStudentNumber) )
7 changes: 5 additions & 2 deletions views/detail.haml
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,13 @@
%tr
%th 住所
%td #{user['postalCode'].first} #{user['postalAddress'].first}
- if user['x-kmc-UniversityDepartment'].first
- if user['x-kmc-KUDepartment'].first||user['x-kmc-UniversityDepartment'].first
%tr
%th 所属
%td #{user['x-kmc-UniversityDepartment'].first} #{user['x-kmc-UniversityStatus'].first}
-if user['x-kmc-isKUMember'].first=="TRUE"
%td 京都大学 #{user['x-kmc-KUDepartment'].first} #{user['x-kmc-UniversityStatus'].first}
-else
%td #{user['x-kmc-UniversityDepartment'].first}
- if user['description'].first
%tr
%th 備考
Expand Down
34 changes: 27 additions & 7 deletions views/edit.haml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
%p.alert.alert-danger
= error

-kuDepartments={"工学部情報学科": "工学部情報学科", "工学部電気電子工学科": "工学部電気電子工学科", "工学部物理工学科": "工学部物理工学科", "工学部地球工学科": "工学部地球工学科", "工学部建築学科": "工学部建築学科", "工学部工業化学科": "工学部工業化学科", "理学部": "理学部", "医学部医学科": "医学部医学科", "医学部人間健康科学科": "医学部人間健康科学科", "総合人間学部": "総合人間学部", "文学部": "文学部", "教育学部": "教育学部", "法学部": "法学部", "経済学部": "経済学部", "薬学部薬科学科": "薬学部薬科学科", "薬学部薬学科": "薬学部薬学科", "農学部資源生物科学科": "農学部資源生物科学科", "農学部応用生命科学科": "農学部応用生命科学科", "農学部地域環境工学科": "農学部地域環境工学科", "農学部食料・環境経済学科": "農学部食料・環境経済学科", "農学部森林科学科": "農学部 森林科学科", "農学部食品生物科学科": "農学部 食品生物科学科", "情報学研究科": "情報学研究科", "工学研究科": "工学研究科", "文学研究科": "文学研究科", "法学研究科": "法学研究科", "理学研究科": "理学研究科", "薬学研究科": "薬学研究科", "エネルギー化学研究科": "エネルギー化学研究科", "教育学研究科": "教育学研究科", "経済学研究科": "経済学研究科", "医学研究科": "医学研究科", "職員": "職員", "other": "その他" }

%form.edit-form.needs-validation{action: absolute_uri(user['uid'].first, :edit), method: :POST}
%h2 ユーザ情報編集
%div.container
Expand Down Expand Up @@ -92,18 +94,36 @@
- input_userattr user, 'x-kmc-AddressIsPublic', type: :checkbox, value: 'true', checked: user['x-kmc-AddressIsPublic'].first == 'TRUE', class: ''
郵便番号と住所を他の部員に公開
%div.row
%div.col-12.col-lg-8.mb-2
%label{for: 'edit-university-department'}
%div.col-12.col-lg-2.mb-2
%label{for: 'edit-is-kyoto-university'}
所属
%span.form-required *在学者は必須
%span.form-required *
%div
- select_userattr user, 'x-kmc-IsKUMember', {"TRUE": "京都大学", "FALSE": "その他"} , false, id: 'edit-is-kyoto-university'
%div.col-12.col-lg-4.mb-2.is-ku
%label{for: 'edit-ku-department'}
学部・学科
%span.form-required *京大所属者は必須
%div
- input_userattr user, 'x-kmc-UniversityDepartment', id: 'edit-university-department', placeholder: '工学部情報学科, 千葉電波大学理学部'
%div.col-12.col-lg-4.mb-2
- select_userattr user, 'x-kmc-KUDepartment', kuDepartments, true, id: 'edit-ku-department', required: true
%div.col-12.col-lg-4.mb-2.is-ku
%label{for: 'edit-ku-student-number'}
学生番号
%span.form-required *京大所属者は必須
%div
- input_userattr user, 'x-kmc-KUStudentNumber', id: 'edit-ku-student-number', type: :text, required: true, placeholder: 'XXXX-YY-ZZZZ', pattern: '\d+-\d+-\d+'
%div.col-12.col-lg-2.mb-2.is-ku
%label{for: 'edit-university-status'}
学年
%span.form-required *在学者は必須
%span.form-required *京大所属者は必須
%div
- input_userattr user, 'x-kmc-UniversityStatus', id: 'edit-university-status', required: true, placeholder: '1, M2, D3, 教授'
%div.col-12.col-lg-10.mb-2.not-ku{hidden: "hidden"}
%label{for: 'edit-university-department'}
所属組織・学部・学科
%span.form-required *必須
%div
- input_userattr user, 'x-kmc-UniversityStatus', id: 'edit-university-status', placeholder: '1, M2, D3, 教授'
- input_userattr user, 'x-kmc-UniversityDepartment', id: 'edit-university-department', required: true, placeholder: '千葉電波大学理学部, 社会人'
%div.row
%div.col-12.col-lg-6.mb-2
%label{for: 'edit-university-matric-year'}
Expand Down
4 changes: 3 additions & 1 deletion views/index.haml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,9 @@
%td
#{user['x-kmc-UniversityMatricYear'].first}
%td
- if !user['x-kmc-KUDepartment'].empty?
京都大学 #{user['x-kmc-KUDepartment'].first} #{user['x-kmc-UniversityStatus'].first}
- if !user['x-kmc-UniversityDepartment'].empty?
#{user['x-kmc-UniversityDepartment'].first} #{user['x-kmc-UniversityStatus'].first}
#{user['x-kmc-UniversityDepartment'].first}
%td
#{user['title'].first}