Added eval; site now shows clean dataset missing message instead of server error...
[sgn.git] / lib / SGN / Controller / AJAX / GenotypingProject.pm
blob6ad2109408517e82391fa2ad1ab697ae2887b95f
1 package SGN::Controller::AJAX::GenotypingProject;
3 use Moose;
4 use JSON;
5 use Data::Dumper;
6 use CXGN::Login;
7 use List::MoreUtils qw /any /;
9 use CXGN::Genotype::StoreGenotypingProject;
11 BEGIN { extends 'Catalyst::Controller::REST' }
13 __PACKAGE__->config(
14 default => 'application/json',
15 stash_key => 'rest',
16 map => { 'application/json' => 'JSON', 'text/html' => 'JSON' },
20 sub add_genotyping_project : Path('/ajax/breeders/add_genotyping_project') : ActionClass('REST') {}
22 sub add_genotyping_project_POST :Args(0){
23 my ($self, $c) = @_;
25 my $dbh = $c->dbc->dbh;
26 my $project_name = $c->req->param('project_name');
27 my $project_breeding_program = $c->req->param('project_breeding_program');
28 my $project_facility = $c->req->param('project_facility');
29 my $project_year = $c->req->param('project_year');
30 my $project_description = $c->req->param('project_description');
31 my $project_location = $c->req->param('project_location');
32 my $data_type = $c->req->param('data_type');
34 if (!$c->user()){
35 print STDERR "User not logged in... not adding a genotyping project.\n";
36 $c->stash->{rest} = {error => "You need to be logged in to add a genotyping project."};
37 return;
40 if (!any { $_ eq "curator" || $_ eq "submitter" } ($c->user()->roles)){
41 print STDERR "User does not have sufficient privileges.\n";
42 $c->stash->{rest} = {error => "you have insufficient privileges to add a genotyping project." };
43 return;
45 my $user_id = $c->user()->get_object()->get_sp_person_id();
46 my $schema = $c->dbic_schema('Bio::Chado::Schema', 'sgn_chado', $user_id);
48 my $error;
49 eval{
50 my $add_genotyping_project = CXGN::Genotype::StoreGenotypingProject->new({
51 chado_schema => $schema,
52 dbh => $dbh,
53 project_name => $project_name,
54 breeding_program_id => $project_breeding_program,
55 project_facility => $project_facility,
56 data_type => $data_type,
57 year => $project_year,
58 project_description => $project_description,
59 nd_geolocation_id => $project_location,
60 owner_id => $user_id
61 });
62 my $store_return = $add_genotyping_project->store_genotyping_project();
63 if ($store_return->{error}){
64 $error = $store_return->{error};
68 if ($@) {
69 $c->stash->{rest} = {error => $@};
70 return;
73 if ($error){
74 $c->stash->{rest} = {error => $error};
75 } else {
76 $c->stash->{rest} = {success => 1};