Gantry

 view release on metacpan or  search on metacpan

lib/Gantry/Control/C/Groups.pm  view on Meta::CPAN

    $param{description} =~ s/\n/<BR>/g;
    $param{name}        =~ s/\s+/\_/g;
                                       
    # Make update
    $row->set( %param );
    $row->update;
    $row->dbi_commit;
        
} # end do_edit

#-------------------------------------------------
# $self->do_members( $id )
#-------------------------------------------------
sub do_members {
    my ( $self, $id ) = ( shift, shift );
    
    # stash template and title
    $self->stash->view->title( 'Add/Remove Members' );
    $self->stash->view->template( 'form_ajax.tt' );
        
    my $ajax = HTML::Prototype->new;    
        
    my @users = Gantry::Control::Model::auth_users->retrieve_all( 
        order_by => 'last_name');
        
    my %groups;
    foreach ( Gantry::Control::Model::auth_group_members->search( 
        group_id => $id ) ) {
        
        $groups{$_->user_id} = 1;
    }
    
    my @fields;
    foreach ( @users ) {
        my $name    = ( $_->last_name . ",&nbsp;" . $_->first_name );
        my $user_id = $_->user_id;
        
        # set callback
        my $callback = $ajax->observe_field( "user_id_$user_id", { 
            url => ( $self->location . '/ajax_edit' ) ,
            with => (
                "'cmd=member\&val='+value+'\&user_id=$user_id"
                . "\&group_id=$id'" 
            ),
            update => "view", 
        } );
        
        push( @fields, {
            id      => "user_id_$user_id",
            name    => "user_id_$user_id",
            label   => $name,
            type    => 'checkbox',
            default_value => 1,
            checked => $groups{$user_id}, 
            callback => $callback,
        });
    }

    my $form =  {
        ajax_java_script => $ajax->define_javascript_functions,
        legend  => "Add/Remove Members",
        back    => $$self{location},
        fields  => \@fields
    };      
            
    # stash form        
    $self->stash->view->form( $form );
        
} # end do_members

#-------------------------------------------------
# $self->do_ajax_edit( )
#-------------------------------------------------
sub do_ajax_edit {
    my( $self ) = ( shift );
    
    $self->template_disable( 1 );       # turn off frame for ajax
        
    my %param = $self->get_param_hash;
    
    # check for errors
    my @errors;
    push( @errors, "missing user_id" )  if ! defined $param{user_id};
    push( @errors, "missing group_id" ) if ! defined $param{group_id};
    return( "Ajax Error:<Br />", join( "<br />", @errors ) ) if @errors;
    
    # form returns 'undefined' fom unchecked boxes, make them 0
    $param{val} = 0 if $param{val} eq 'undefined';
    
    # update send_to preference 
    if ( $param{cmd} eq "member" ) {
        
        # Add member
        if ( $param{val} ) {
            my $new_member = 
                Gantry::Control::Model::auth_group_members->find_or_create(
                    {   user_id => $param{user_id}, 
                        group_id => $param{group_id} 
                    });
                    
            $new_member->dbi_commit;
            
            return( "Status: Added " . $new_member->user_id->first_name );
        }
        # Remove member
        else {
                        
            my @rem_member = 
                Gantry::Control::Model::auth_group_members->search(
                    user_id  => $param{user_id},
                    group_id => $param{group_id} 
                );

            foreach ( @rem_member ) {
                $_->delete;
            }

            Gantry::Control::Model::auth_group_members->dbi_commit;
            
            return( 
                "Status: Removed " . 
                Gantry::Control::Model::auth_users->retrieve( 
                    user_id => $param{user_id} 
                )->first_name 
            );
        }

    }
        
    return ( 'Invalid Ajax Action' ); 

} # end: do_ajax_edit

#-------------------------------------------------
# _form( $row ? )
#-------------------------------------------------
sub _form {
    my ( $self, $data ) = @_;       
    
    my $row = $data->{row};
    
    my $form =  {
        legend => $self->path_info =~ /edit/i ? 'Edit' : 'Add',
        row    => $row,
        fields => [
            {   name    => 'name',
                label   => 'Group Name',
                type    => 'text',
                is      => 'varchar',
            },
            {   name    => 'ident',
                label   => 'Ident',
                type    => 'text',
                is      => 'varchar',
                optional => 1,
            },
            {   name    => 'description',
                label   => 'Description',
                type    => 'textarea',
                rows    => 7,
                cols    => 40,
                is      => 'varchar',
            },
        ]
    };      
            
    return( $form );

} # END form

sub site_links {
    my $self = shift;
    
    return( [
        { link => ($self->app_rootp . '/users'), label => 'Users' },
        { link => ($self->app_rootp . '/groups'), label => 'Groups' },
        { link => ($self->app_rootp . '/pages'), label => 'Pages' },
    ] );       
}

# EOF
1;

__END__

=head1 NAME 

Gantry::Control::C::Groups - Group management for the Gantry library

=head1 SYNOPSIS

  use Gantry::Control::C::Groups;

=head1 DESCRIPTION

This module handles all of the group manipulation for the authorization
and authentication handlers. It's pretty mundane by itself.

=head1 APACHE

Sample Apache configuration.

  <Location /admin/groups >



( run in 2.299 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )