File Coverage

blib/lib/Gantry/Control/C/Groups.pm
Criterion Covered Total %
statement 30 116 25.8
branch 0 14 0.0
condition 0 2 0.0
subroutine 10 22 45.4
pod 8 8 100.0
total 48 162 29.6


line stmt bran cond sub pod time code
1             package Gantry::Control::C::Groups;
2 1     1   162123 use strict;
  1         3  
  1         49  
3              
4 1     1   745 use Gantry qw/-TemplateEngine=TT/;
  1         4  
  1         9  
5              
6 1     1   6 use Data::FormValidator;
  1         2  
  1         41  
7 1     1   6 use HTML::Prototype;
  1         1  
  1         18  
8              
9 1     1   879 use Gantry::Utils::Validate;
  1         5  
  1         41  
10 1     1   670 use Gantry::Control::Model::auth_users;
  1         5  
  1         59  
11 1     1   761 use Gantry::Control::Model::auth_groups;
  1         3  
  1         58  
12 1     1   945 use Gantry::Control::Model::auth_group_members;
  1         4  
  1         63  
13              
14 1     1   670 use Gantry::Utils::CRUDHelp qw( form_profile );
  1         3  
  1         72  
15 1     1   842 use Gantry::Plugins::CRUD;
  1         5  
  1         2202  
16              
17             my $AUTH_USERS = 'Gantry::Control::Model::auth_users';
18             my $AUTH_GROUPS = 'Gantry::Control::Model::auth_groups';
19             my $AUTH_GROUP_MEMBERS = 'Gantry::Control::Model::auth_group_members';
20              
21             my $crud = Gantry::Plugins::CRUD->new(
22             add_action => \&_add,
23             edit_action => \&_edit,
24             delete_action => \&_delete,
25             form => \&_form,
26             redirect => \&redirect_to_main,
27             template => 'form.tt',
28             text_descr => 'Group',
29             use_clean_dates => 1,
30             );
31              
32             ############################################################
33             # Variables #
34             ############################################################
35             our @ISA = ( 'Gantry' ); # Inherit the handler.
36              
37              
38             ############################################################
39             # Functions #
40             ############################################################
41              
42             #-------------------------------------------------
43             # $self->do_main( $order )
44             #-------------------------------------------------
45             sub do_main {
46 0     0 1   my ( $self, $order ) = @_;
47            
48 0   0       $order ||= 1;
49              
50 0           my $order_map = {
51             1 => 'name',
52             2 => 'ident',
53             };
54            
55             # stash template and title
56 0           $self->stash->view->template( 'results.tt' );
57 0           $self->stash->view->title( 'Groups' );
58            
59 0           my $location = $self->location;
60            
61 0           my $retval = {
62             headings => [
63             'Group Name',
64             'Ident',
65             'Description' ],
66             header_options => [ {
67             text => 'Add', link => ( "$location/add" ),
68             } ],
69             };
70              
71 0           my @rows = Gantry::Control::Model::auth_groups->retrieve_all(
72             { 'order_by' => $order }
73             );
74            
75 0           foreach my $row ( @rows ) {
76 0           my $id = $row->id;
77 0           push( @{$$retval{rows}}, {
  0            
78             data => [
79             $row->name,
80             $row->ident,
81             $row->description,
82             ],
83             options => [
84             { text => 'Members', link => "$location/members/$id" },
85             { text => 'Edit', link => "$location/edit/$id" },
86             { text => 'Delete', link => "$location/delete/$id" },
87             ]
88             });
89             }
90            
91             # stash view data
92 0           $self->stash->view->data( $retval );
93              
94             } # end: do_main
95              
96             sub redirect_to_main {
97 0     0 1   my ( $self, $data ) = @_;
98            
99 0           return $self->location;
100            
101             }
102              
103             #-------------------------------------------------
104             # $self->do_add( $r )
105             #-------------------------------------------------
106             sub do_add {
107 0     0 1   my ( $self ) = ( shift );
108            
109 0           $crud->add( $self );
110              
111             } # end do_add
112              
113             sub _add {
114 0     0     my( $self, $params, $data ) = @_;
115            
116 0           my %param = %{ $params };
  0            
117            
118             # Clean up the variables some.
119 0           $param{description} =~ s/\r//g;
120 0           $param{description} =~ s/\n/
/g;
121 0           $param{name} =~ s/\s+/\_/g;
122            
123 0           my $new_row = $AUTH_GROUPS->create( \%param );
124 0           $new_row->dbi_commit;
125            
126             } # end do_add
127              
128             #-------------------------------------------------
129             # $self->do_delete( $id, $yes )
130             #-------------------------------------------------
131             sub do_delete {
132 0     0 1   my ( $self, $id, $yes ) = @_;
133            
134             # Load row values
135 0           my $row = $AUTH_GROUPS->retrieve( $id );
136 0           $crud->delete( $self, $yes, { row => $row } );
137            
138             } # end do_delete
139              
140             #-------------------------------------------------
141             # $self->delete_page( $data )
142             #-------------------------------------------------
143             sub _delete {
144 0     0     my( $self, $data ) = @_;
145            
146 0           my $row = $data->{row};
147            
148 0           $row->delete;
149 0           $AUTH_GROUPS->dbi_commit();
150              
151             } # end delete_page
152              
153             #-------------------------------------------------
154             # $self->do_edit( $id )
155             #-------------------------------------------------
156             sub do_edit {
157 0     0 1   my ( $self, $id ) = @_;
158              
159             # Load row values
160 0           my $row = $AUTH_GROUPS->retrieve( $id );
161              
162 0           $crud->edit( $self, { row => $row } );
163            
164             } # end do_edit
165              
166             #-------------------------------------------------
167             # $self->_edit( $param, $data )
168             #-------------------------------------------------
169             sub _edit {
170 0     0     my( $self, $params, $data ) = @_;
171            
172 0           my %param = %{ $params };
  0            
173            
174 0           my $row = $data->{row};
175            
176             # Clean up the variables some.
177 0           $param{description} =~ s/\r//g;
178 0           $param{description} =~ s/\n/
/g;
179 0           $param{name} =~ s/\s+/\_/g;
180            
181             # Make update
182 0           $row->set( %param );
183 0           $row->update;
184 0           $row->dbi_commit;
185            
186             } # end do_edit
187              
188             #-------------------------------------------------
189             # $self->do_members( $id )
190             #-------------------------------------------------
191             sub do_members {
192 0     0 1   my ( $self, $id ) = ( shift, shift );
193            
194             # stash template and title
195 0           $self->stash->view->title( 'Add/Remove Members' );
196 0           $self->stash->view->template( 'form_ajax.tt' );
197            
198 0           my $ajax = HTML::Prototype->new;
199            
200 0           my @users = Gantry::Control::Model::auth_users->retrieve_all(
201             order_by => 'last_name');
202            
203 0           my %groups;
204 0           foreach ( Gantry::Control::Model::auth_group_members->search(
205             group_id => $id ) ) {
206            
207 0           $groups{$_->user_id} = 1;
208             }
209            
210 0           my @fields;
211 0           foreach ( @users ) {
212 0           my $name = ( $_->last_name . ", " . $_->first_name );
213 0           my $user_id = $_->user_id;
214            
215             # set callback
216 0           my $callback = $ajax->observe_field( "user_id_$user_id", {
217             url => ( $self->location . '/ajax_edit' ) ,
218             with => (
219             "'cmd=member\&val='+value+'\&user_id=$user_id"
220             . "\&group_id=$id'"
221             ),
222             update => "view",
223             } );
224            
225 0           push( @fields, {
226             id => "user_id_$user_id",
227             name => "user_id_$user_id",
228             label => $name,
229             type => 'checkbox',
230             default_value => 1,
231             checked => $groups{$user_id},
232             callback => $callback,
233             });
234             }
235              
236 0           my $form = {
237             ajax_java_script => $ajax->define_javascript_functions,
238             legend => "Add/Remove Members",
239             back => $$self{location},
240             fields => \@fields
241             };
242            
243             # stash form
244 0           $self->stash->view->form( $form );
245            
246             } # end do_members
247              
248             #-------------------------------------------------
249             # $self->do_ajax_edit( )
250             #-------------------------------------------------
251             sub do_ajax_edit {
252 0     0 1   my( $self ) = ( shift );
253            
254 0           $self->template_disable( 1 ); # turn off frame for ajax
255            
256 0           my %param = $self->get_param_hash;
257            
258             # check for errors
259 0           my @errors;
260 0 0         push( @errors, "missing user_id" ) if ! defined $param{user_id};
261 0 0         push( @errors, "missing group_id" ) if ! defined $param{group_id};
262 0 0         return( "Ajax Error:
", join( "
", @errors ) ) if @errors;
263            
264             # form returns 'undefined' fom unchecked boxes, make them 0
265 0 0         $param{val} = 0 if $param{val} eq 'undefined';
266            
267             # update send_to preference
268 0 0         if ( $param{cmd} eq "member" ) {
269            
270             # Add member
271 0 0         if ( $param{val} ) {
272 0           my $new_member =
273             Gantry::Control::Model::auth_group_members->find_or_create(
274             { user_id => $param{user_id},
275             group_id => $param{group_id}
276             });
277            
278 0           $new_member->dbi_commit;
279            
280 0           return( "Status: Added " . $new_member->user_id->first_name );
281             }
282             # Remove member
283             else {
284            
285 0           my @rem_member =
286             Gantry::Control::Model::auth_group_members->search(
287             user_id => $param{user_id},
288             group_id => $param{group_id}
289             );
290              
291 0           foreach ( @rem_member ) {
292 0           $_->delete;
293             }
294              
295 0           Gantry::Control::Model::auth_group_members->dbi_commit;
296            
297             return(
298 0           "Status: Removed " .
299             Gantry::Control::Model::auth_users->retrieve(
300             user_id => $param{user_id}
301             )->first_name
302             );
303             }
304              
305             }
306            
307 0           return ( 'Invalid Ajax Action' );
308              
309             } # end: do_ajax_edit
310              
311             #-------------------------------------------------
312             # _form( $row ? )
313             #-------------------------------------------------
314             sub _form {
315 0     0     my ( $self, $data ) = @_;
316            
317 0           my $row = $data->{row};
318            
319 0 0         my $form = {
320             legend => $self->path_info =~ /edit/i ? 'Edit' : 'Add',
321             row => $row,
322             fields => [
323             { name => 'name',
324             label => 'Group Name',
325             type => 'text',
326             is => 'varchar',
327             },
328             { name => 'ident',
329             label => 'Ident',
330             type => 'text',
331             is => 'varchar',
332             optional => 1,
333             },
334             { name => 'description',
335             label => 'Description',
336             type => 'textarea',
337             rows => 7,
338             cols => 40,
339             is => 'varchar',
340             },
341             ]
342             };
343            
344 0           return( $form );
345              
346             } # END form
347              
348             sub site_links {
349 0     0 1   my $self = shift;
350            
351             return( [
352 0           { link => ($self->app_rootp . '/users'), label => 'Users' },
353             { link => ($self->app_rootp . '/groups'), label => 'Groups' },
354             { link => ($self->app_rootp . '/pages'), label => 'Pages' },
355             ] );
356             }
357              
358             # EOF
359             1;
360              
361             __END__