This is an automated email from the ASF dual-hosted git repository. clr pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/whimsy.git
The following commit(s) were added to refs/heads/master by this push: new 58e35df Family First support in secretary workbench (#120) 58e35df is described below commit 58e35df90f4387ba2de09e50e3c50eb99c69f736 Author: Craig L Russell <apache....@gmail.com> AuthorDate: Wed Aug 11 10:32:35 2021 -0700 Family First support in secretary workbench (#120) * Family First support in secretary workbench * Fix file name algorithm * Add LDAP sn and givenName fields to icla form * Fix obvious errors - spurious trailing ) - duplicate function name * Update icla.js.rb Fix calling protocol for genldapsn and genldapgivenname * Make split of public name explicit split(" ") * remove dependency on puma * Family first flag implementation for review after testing * Disable LDAP icla.js.rb form fields Co-authored-by: Sebb <s...@apache.org> --- www/secretary/iclaparser.rb | 1 + www/secretary/workbench/views/forms/icla.js.rb | 93 ++++++++++++++++++++++++-- 2 files changed, 88 insertions(+), 6 deletions(-) diff --git a/www/secretary/iclaparser.rb b/www/secretary/iclaparser.rb index b35bc94..973a6c5 100644 --- a/www/secretary/iclaparser.rb +++ b/www/secretary/iclaparser.rb @@ -116,6 +116,7 @@ module ICLAParser NAME2FIELD = { 'fullname' => :FullName, 'publicname' => :PublicName, + 'familyfirst' => :FamilyFirst, 'mailingaddress' => :MailingAddress, 'mailingaddress2' => :MailingAddress2, 'postaladdress' => :MailingAddress, diff --git a/www/secretary/workbench/views/forms/icla.js.rb b/www/secretary/workbench/views/forms/icla.js.rb index 5ddb5df..6480860 100644 --- a/www/secretary/workbench/views/forms/icla.js.rb +++ b/www/secretary/workbench/views/forms/icla.js.rb @@ -31,7 +31,8 @@ class ICLA < Vue _th 'Real Name' _td do _input name: 'realname', value: @realname, required: true, - disabled: (@filed or @pdfbusy), onChange: self.changeRealName + disabled: (@filed or @pdfbusy), + onChange: self.changeRealName, onBlur: self.changeRealName end end @@ -39,7 +40,18 @@ class ICLA < Vue _th 'Public Name' _td do _input name: 'pubname', value: @pubname, required: true, - disabled: (@filed or @pdfbusy), onFocus: lambda {@pubname ||= @realname} + disabled: (@filed or @pdfbusy), onFocus: lambda {@pubname ||= @realname}, + onChange: self.changePublicName, onBlur: self.changePublicName + end + end + + _tr do + _th 'Family First' + _td do + _input name: 'familyfirst', required: true, + type: 'checkbox', checked: @familyfirst, + disabled: (@filed or @pdfbusy), + onChange: self.changeFamilyFirst, onBlur: self.changeFamilyFirst end end @@ -69,6 +81,23 @@ class ICLA < Vue end end +# May be useful in future +# _tr do +# _th 'LDAP givenname' +# _td do +# _input name: 'ldapgivenname', value: @ldapgivenname, +# disabled: (@filed or @pdfbusy) +# end +# end + +# _tr do +# _th 'LDAP sn' +# _td do +# _input name: 'ldapsn', value: @ldapsn, +# disabled: (@filed or @pdfbusy) +# end +# end +# _tr do if @project _th do @@ -122,7 +151,11 @@ class ICLA < Vue @realname = name @pubname = parsed.PublicName || name - @filename = self.genfilename(name) + @pubnamearray = @pubname.split(" ") + @familyfirst = parsed.FamilyFirst || false + @ldapsn = self.genldapsn(@pubnamearray, @familyfirst) + @ldapgivenname = self.genldapgivenname(@pubnamearray, @familyfirst) + @filename = self.genfilename(name, @familyfirst) @email = parsed.EMail || @@headers.from @user = parsed.ApacheID || '' project = parsed.Project @@ -202,14 +235,62 @@ class ICLA < Vue end end + # when real name changes, update file name def changeRealName(event) @realname = event.target.value; - @filename = self.genfilename(event.target.value) + @filename = self.genfilename(@realname, @familyfirst) + end + + # when family first changes, update file name and LDAP default fields + def changeFamilyFirst(event) + @filename = self.genfilename(@realname, @familyfirst) + @pubnamearray = @pubname.split(' ') + @ldapsn = self.genldapsn(@pubnamearray, @familyfirst) + @ldapgivenname = self.genldapgivenname(@pubnamearray, @familyfirst) + end + + # when public name changes, update LDAP default fields + def changePublicName(event) + @pubname = event.target.value; + @pubnamearray = @pubname.split(' ') + @ldapsn = self.genldapsn(@pubnamearray, @familyfirst) + @ldapgivenname = self.genldapgivenname(@pubnamearray, @familyfirst) end # generate file name from the real name - def genfilename(realname) - return asciize(realname.strip()).downcase().gsub(/\W+/, '-') + def genfilename(realname, familyfirst) + nominalname = asciize(realname.strip()).downcase().gsub(/\W+/, '-') + if !familyfirst + return nominalname + else + # compute file name with family first; move first name to last + namearray = nominalname.split("-") + namearray.push(namearray[0]) + namearray.shift() + return namearray.join("-") + end + end + + # generate LDAP sn from public name + # simply return either the first or last name + def genldapsn(pnamearray, ffirst) + if ffirst + return pnamearray[0] + else + return pnamearray[-1] + end + end + + # generate LDAP givenName from public name + # simply return the remainder after removing either the first or last name + def genldapgivenname(pnamearray, ffirst) + if ffirst + pnamearray.shift() + return pnamearray.join(' ') + else + pnamearray.pop() + return pnamearray.join(' ') + end end # when leaving an input field, trigger change event (for Safari)