#!/usr/bin/env ruby

=begin

LDAP people should be committers (unless login is disabled)

=end

$LOAD_PATH.unshift '/srv/whimsy/lib'

require 'whimsy/asf'
require 'whimsy/asf/mlist'
require 'wunderbar'

_html do
  _style %{
    table {border-collapse: collapse}
    table, th, td {border: 1px solid black}
    td {padding: 3px 6px}
    tr:hover td {background-color: #FF8}
    th {background-color: #a0ddf0}
  }

  _h1 'LDAP membership checks'

  old = ASF::Group['committers'].memberids
  people = ASF::Person.preload(%w(uid createTimestamp asf-banned asf-altEmail mail loginShell))

  _h2 'people who are not committers (excluding nologin)'
  
  non_committers = people.reject { |p| p.nologin? or old.include? p.name or p.name == 'apldaptest'}
  if non_committers.length > 0
    _table do
      _tr do
        _th 'UID'
        _th 'asf-banned?'
        _th 'nologin?'
        _th 'Date'
        _th 'ICLA'
        _th 'Subscriptions'
        _th 'Moderates'
      end
      non_committers.sort_by(&:name).each do |p|
        icla = ASF::ICLA.find_by_id(p.name)
        _tr do
          _td do
            _a p.name, href: '/roster/committer/' + p.name
          end
          _td p.asf_banned?
          _td p.nologin?
          _td p.createDate
          if icla
            if icla.claRef
              _td do
                _a icla.claRef, href: ASF::SVN.svnpath!('iclas', icla.claRef)
              end
            else
              _td icla.form
            end
          else
            _td 'No ICLA entry found'
          end
          all_mail = p.all_mail
          _td do
            # keep only the list names
            _ ASF::MLIST.subscriptions(all_mail)[:subscriptions].map{|x| x[0]}
          end
          _td do
            _ ASF::MLIST.moderates(all_mail)[:moderates]
          end
        end
      end
    end
  else
    _p 'All LDAP people entries are committers'
  end

end