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 . ", " . $_->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 )