You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by se...@apache.org on 2018/07/31 14:04:40 UTC

[whimsy] branch master updated: Use ASF::Person.ldap_name instead of local logic

This is an automated email from the ASF dual-hosted git repository.

sebb 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 aaf6d99  Use ASF::Person.ldap_name instead of local logic
aaf6d99 is described below

commit aaf6d997103426d851c7941b5e1d2573d243ad9a
Author: Sebb <se...@apache.org>
AuthorDate: Tue Jul 31 15:04:39 2018 +0100

    Use ASF::Person.ldap_name instead of local logic
---
 www/secretary/ldap-names.cgi | 67 +++++++++++++++++++++-----------------------
 1 file changed, 32 insertions(+), 35 deletions(-)

diff --git a/www/secretary/ldap-names.cgi b/www/secretary/ldap-names.cgi
index 4e8575f..ce15604 100755
--- a/www/secretary/ldap-names.cgi
+++ b/www/secretary/ldap-names.cgi
@@ -4,7 +4,7 @@
 
 Check LDAP names: cn, sn, givenName
 
-Both givenName and sn should match part of cn
+givenName and sn should match the output from ASF::Person.ldap_name 
 
 =end
 
@@ -65,16 +65,19 @@ _html do
   _h1 'LDAP people name checks'
 
   _p do
-    _ 'LDAP sn and givenName must match part of cn'
+    _ 'LDAP sn and givenName must match the result of ASF::Person.ldap_name'
     _br
     _ 'The table below show the differences, if any.'
     _br
+    _ 'If the cn does not match the public name, the cell is light grey'
+    _br
     _ 'The Modify? columns show suggested fixes. If the name is non-italic then the suggestion is likely correct; italicised suggestions may be wrong/unnecessary.'
     _br
     _ 'The suggested name is considered correct if:'
     _ul do
-      _li 'The existing field value matches the uid or the cn'
+      _li 'The existing field value matches the uid (never initialised) or the cn (single name)'
       _li 'The existing field is missing'
+      _li 'AND there are no parts of the cn unused'
     end
   end
 
@@ -108,50 +111,37 @@ _html do
       _th 'Modify?'
       _th 'sn'
       _th 'Modify?'
+      _th 'Unused'
     end
 
     people.sort_by(&:name).each do |p|
       next if p.banned?
+      next if p.name == 'apldaptest'
+
       given = p.givenName rescue '---' # some entries have not set this up
 
-      # Match the name as a word-bounded string (but allow for trailing . which is not a word char)
-      givenOK = (p.cn.match(/\b#{Regexp.quote(given)}(\s|$)/) != nil)
+      parse = ASF::Person.ldap_name(p.cn)
+      new_given = parse['givenName']
+      new_sn = parse['sn']
+      unused = parse['unused']
+
+      givenOK = (new_given == given)
       badGiven += 1 unless givenOK
 
-      # surnames don't tend to end with .
-      snOK =    (p.cn.match(/\b#{Regexp.quote(p.sn)}\b/) != nil)
+      snOK =    (new_sn == p.sn)
       badSN += 1 unless snOK
 
       if givenOK and snOK # all checks OK
         matches += 1
         next
       end
-      next if givenOK and skipSN
+      next if givenOK and skipSN #and unused.size == 0
 
-      new_given = '???'
-      new_sn = '???'
-      names = p.cn.sub(/, (Jr\.|Ph\.D.)$/,'').split(' ')
-      names.pop if %w(II III IV Jr Jr.).include? names[-1] # drop numbers
-      if names.size == 2
-        new_given = names[0]
-        new_sn = names[1]
-      elsif names.size == 4
-        if names[1..2] == %w(de la) or names[1..2] == %w(van der)
-          new_given = names.shift
-          new_sn = names.join(' ')
-        end
-      elsif names.size == 3
-        if %w(van Van de del Del le Le).include? names[1]
-          new_given = names.shift
-          new_sn = names.join(' ')
-        elsif names[1] =~ /^[A-Z]\.$/ or names[1] =~ /^[A-NP-Z]$/ # James A. Taylor or Jon B Goode (not Jack O Connor)
-          new_given = names.shift
-          new_sn = names.pop
-        end
-      end
       icla = ASF::ICLA.find_by_id(p.uid)
       claRef = icla.claRef if icla
       claRef ||= 'unknown'
+      legal_name = icla.legal_name rescue '?'
+      public_name = icla.name rescue '?'
       _tr do
         _td do
           _a p.uid, href: '/roster/committer/' + p.uid
@@ -164,9 +154,15 @@ _html do
             _ claRef
           end
         end
-        _td (icla.legal_name rescue '?')
-        _td (icla.name rescue '?')
-        _td p.cn
+        _td legal_name
+        _td public_name
+        if p.cn == public_name
+          _td p.cn
+        else
+          _td bgcolor: 'lightgrey' do
+            _ p.cn
+          end
+        end
         _td do
           if givenOK
             _ given
@@ -178,7 +174,7 @@ _html do
           if givenOK
             _ ''
           else
-              if given == p.uid or given == '---' or given == p.cn
+              if unused.size == 0 and (given == p.uid or given == '---' or given == p.cn)
                 _ new_given # likely to be correct
               else
                 _em new_given # less likely
@@ -196,13 +192,14 @@ _html do
           if snOK
             _ ''
           else
-            if p.sn == p.uid or p.sn == p.cn
+            if unused.size == 0 and (p.sn == p.uid or p.sn == p.cn)
               _ new_sn
             else
               _em new_sn
             end
           end
         end
+        _td unused.join(' ')
       end
     end
   end
@@ -256,7 +253,7 @@ _html do
     document.querySelector('input[type=submit]').addEventListener(:click) do
       updates = {}
       # Must agree with number of columns in the main table above
-      columnNames = %w(uid icla_file legal_name public_name cn givenName newGiven sn newSN)
+      columnNames = %w(uid icla_file legal_name public_name cn givenName newGiven sn newSN unused)
   
       Array(document.querySelectorAll('td.modified')).each do |td|
         id = td.parentNode.firstElementChild.textContent.strip()