%# What the hell, go ahead and put all your eggs in one basket.
<%INIT>
if (!$DoSearch) {
    return [] unless keys %ARGS > 1 and !$ARGS{cname};
    ($Email, $GroupId, $FindDisabledUsers, $IdMin, $IdMax, $Limit, $Name, $Limit) =
        @{ $session{'CurrentEditUserSearch'} || [] } or return [];
}
else {
    $session{'CurrentEditUserSearch'} =
        [ $Email, $GroupId, $FindDisabledUsers, $IdMin, $IdMax, $Limit, $Name, $Limit ];
}

my $List = RT::Users->new($session{'CurrentUser'});
$List->{'find_disabled_rows'} = 1 if $FindDisabledUsers;
$List->Limit( FIELD => 'ExternalAuthId', OPERATOR => '!=', VALUE => '0');
if ($Limit) {
    $List->Limit( FIELD => 'EmailAddress', OPERATOR => 'LIKE', VALUE => $Email )
	if length $Email;
    $List->Limit( FIELD => 'Name', OPERATOR => 'LIKE', VALUE => $Name )
	if length $Name;
    if ($GroupId) {
	my $Group = RT::Group->new($session{'CurrentUser'});
	$Group->Load($GroupId) || Abort(loc('Could not load group' . $GroupId));
	$List->MemberOfGroup( $Group->PrincipalId );
    }
    if ($IdMin and $IdMax) {
	$List->Limit( FIELD => 'Gecos', OPERATOR => '>=', VALUE => $IdMin, ENTRYAGGREGATOR => 'AND' );
	$List->Limit( FIELD => 'Gecos', OPERATOR => '<=', VALUE => $IdMax, ENTRYAGGREGATOR => 'AND' );
    }
    elsif ($IdMin or $IdMax) {
	my $Id = $IdMin || $IdMax;
	$List->Limit( FIELD => 'Gecos', OPERATOR => '=', VALUE => $Id );
    }
}

$List->OrderBy( FIELD => 'Gecos' );

return $List;
</%INIT>
<%ARGS>
$DoSearch => undef
$Email => undef
$GroupId => undef
$FindDisabledUsers => 0
$IdMin => undef
$IdMax => undef
$Limit => undef
$Name => undef
</%ARGS>
