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)

Reply via email to