From 4c7836c9f6f7ca4ab3c56071b45c1f9c51dd63eb Mon Sep 17 00:00:00 2001 From: Finn Date: Wed, 23 Aug 2017 16:50:04 +0100 Subject: [PATCH] Initial server code added for updating user account --- lib/Pear/LocalLoop.pm | 1 + lib/Pear/LocalLoop/Controller/Admin/Users.pm | 67 ++++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/lib/Pear/LocalLoop.pm b/lib/Pear/LocalLoop.pm index 4813064..c41371d 100644 --- a/lib/Pear/LocalLoop.pm +++ b/lib/Pear/LocalLoop.pm @@ -169,6 +169,7 @@ sub startup { $admin_routes->get('/users/:id')->to('admin-users#read'); $admin_routes->post('/users/:id')->to('admin-users#update'); $admin_routes->post('/users/:id/delete')->to('admin-users#delete'); + $admin_routes->post('/users/:id/edit')->to('admin-users#edit'); $admin_routes->get('/organisations')->to('admin-organisations#list'); $admin_routes->get('/organisations/add')->to('admin-organisations#add_org'); diff --git a/lib/Pear/LocalLoop/Controller/Admin/Users.pm b/lib/Pear/LocalLoop/Controller/Admin/Users.pm index 2fbdd17..296a0cf 100644 --- a/lib/Pear/LocalLoop/Controller/Admin/Users.pm +++ b/lib/Pear/LocalLoop/Controller/Admin/Users.pm @@ -27,6 +27,73 @@ sub read { } } +sub edit { + my $c = shift; + + my $id = $c->param('id'); + + if ( my $user = $c->result_set->find($id) ) { + $c->stash( user => $user ); + } else { + $c->flash( error => 'No User found' ); + $c->redirect_to( '/admin/users/' . $id ); + } + + my $validation = $c->validation; + + $validation->required('email')->not_in_resultset( 'email', $user->id ); + $validation->required('postcode')->postcode; + $validation->optional('new_password'); + + if ( defined $user->customer_id ) { + $validation->required('display_name'); + $validation->required('full_name'); + } elsif ( defined $user->organisation_id ) { + $validation->required('name'); + $validation->required('street_name'); + $validation->required('town'); + } + + if ( $validation->has_error ) { + $c->flash( error => 'The validation has failed' ); + $c->app->log->warn(Dumper $validation); + return $c->redirect_to( '/admin/users/' . $id ); + } + + if ( defined $user->customer_id ){ + + $c->schema->txn_do( sub { + $user->customer->update({ + full_name => $validation->param('full_name'), + display_name => $validation->param('display_name'), + postcode => $validation->param('postcode'), + }); + $user->update({ + email => $validation->param('email'), + ( defined $validation->param('new_password') ? ( password => $validation->param('new_password') ) : () ), + }); + }); + + } + elsif ( defined $user->organisation_id ) { + + $c->schema->txn_do( sub { + $user->organisation->update({ + name => $validation->param('name'), + street_name => $validation->param('street_name'), + town => $validation->param('town'), + postcode => $validation->param('postcode'), + }); + $user->update({ + email => $validation->param('email'), + ( defined $validation->param('new_password') ? ( password => $validation->param('new_password') ) : () ), + }); + }); + } + + $c->redirect_to( '/admin/users/' . $id ); +} + sub update { my $c = shift; $c->redirect_to( '/admin/users' );