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__ |