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