%# It is the business of the future to be dangerous.
%# 		-- Hawkwind
<& /Edit/Elements/PopHeader, Title => loc('Edit Subgroups') &>
  
    | 
         
          | <&|/l&>Current Groups:&> |  | <&|/l&>Create Subgroup:&> |   
          | <& /Edit/Elements/ListButtons &> |  |  | 
<& /Edit/Elements/PopFooter &>
<%INIT>
my $List = $session{MemberList};
my $OffList = $session{MemberOffList};
my $Object = RT::Group->new($session{'CurrentUser'});
$Object->Load($Group);
if (!$Continuation) {
    my %seen;
    my $Members = $Object->MembersObj || $RT::Nothing;
    $Members->LimitToGroups;
    $List = [ map { $_->MemberObj->Object } @{$Members->ItemsArrayRef} ] || [];
    $seen{$_->Id}++ for @$List;
    $OffList = [];
    my $Groups = RT::Groups->new($session{'CurrentUser'});
    $Groups->LimitToUserDefinedGroups();
    while (my $Group = $Groups->Next) {
	next if $Group->Description;
	next if $seen{$Group->Id};
	next if $Group->Id eq $Object->Id;
	next if $Group->HasMemberRecursively($Object->PrincipalObj);
	push @$OffList, $Group;
    }
}
elsif ($Action eq 'Add') {
    @$OffList = grep {
	my $id = $_->Id;
	my $ok = (grep { $_ == $id } @Off);
	push @$List, $_ if $ok;
	!$ok;
    } @$OffList;
}
elsif ($Action eq 'AddAll') {
    push @$List, @$OffList;
    @$OffList = ();
}
elsif ($Action eq 'Delete') {
    @$List = grep {
	my $id = $_->Id;
	my $ok = (grep { $_ == $id } @On);
	push @$OffList, $_ if $ok;
	!$ok;
    } @$List;
}
elsif ($Action eq 'DeleteAll') {
    push @$OffList, @$List;
    @$List = ();
}
elsif ($Action eq 'Commit') {
    $Member ||= 0;
    foreach my $item (@$OffList) {
	$Object->DeleteMember( $item->PrincipalId );
    }
    foreach my $item (@$List) {
	$Object->AddMember( $item->PrincipalId );
    }
    $m->print("");
    $m->abort;
}
@$OffList = ( map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [ $_ => $_->Name ] } @$OffList );
@$List = ( map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [ $_ => $_->Name ] } grep { $_->Name } @$List );
$session{MemberList} = $List;
$session{MemberOffList} = $OffList;
%INIT>
<%ARGS>
$SubJob => ''
$Show => ''
$Queue => 0
$Group => 0
$Member => ''
$Action => ''
$Begin => 0
$ReadOnly => 0
$Continuation => 0
$Fixed => 0
@On => ()
@Off => ()
%ARGS>