diff options
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Alert.pm | 15 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/Result/Alert.pm | 75 | ||||
-rw-r--r-- | perllib/FixMyStreet/DB/Result/User.pm | 51 | ||||
-rw-r--r-- | t/app/controller/alert_new.t | 29 |
4 files changed, 106 insertions, 64 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Alert.pm b/perllib/FixMyStreet/App/Controller/Alert.pm index 742aa6c1d..595f6d252 100644 --- a/perllib/FixMyStreet/App/Controller/Alert.pm +++ b/perllib/FixMyStreet/App/Controller/Alert.pm @@ -243,8 +243,11 @@ sub subscribe_email : Private { # return alert_front_page($q, @errors); } - my $alert; my $email = $c->req->param('rznvy'); + $c->stash->{email} = $email; + $c->forward( 'process_user' ); + + my $alert; # my $cobrand = Page::get_cobrand($q); # my $cobrand_data = Cobrand::extra_alert_data($cobrand, $q); @@ -286,7 +289,7 @@ sub subscribe_email : Private { } my $options = { - email => $email, + user => $c->stash->{alert_user}, alert_type => $type }; @@ -440,6 +443,14 @@ sub council_options : Private { } } +sub process_user : Private { + my ( $self, $c ) = @_; + + my $email = $c->stash->{email}; + my $alert_user = $c->model('DB::User')->find_or_new( { email => $email } ); + $c->stash->{alert_user} = $alert_user; +} + sub choose : Private { my ( $self, $c ) = @_; $c->stash->{template} = 'alert/choose.html'; diff --git a/perllib/FixMyStreet/DB/Result/Alert.pm b/perllib/FixMyStreet/DB/Result/Alert.pm index 9b71e16a8..2d5867050 100644 --- a/perllib/FixMyStreet/DB/Result/Alert.pm +++ b/perllib/FixMyStreet/DB/Result/Alert.pm @@ -11,42 +11,49 @@ use base 'DBIx::Class::Core'; __PACKAGE__->load_components("FilterColumn"); __PACKAGE__->table("alert"); __PACKAGE__->add_columns( - "id", - { - data_type => "integer", - is_auto_increment => 1, - is_nullable => 0, - sequence => "alert_id_seq", - }, - "alert_type", - { data_type => "text", is_foreign_key => 1, is_nullable => 0 }, - "parameter", - { data_type => "text", is_nullable => 1 }, - "parameter2", - { data_type => "text", is_nullable => 1 }, - "email", - { data_type => "text", is_nullable => 0 }, - "confirmed", - { data_type => "integer", default_value => 0, is_nullable => 0 }, - "lang", - { data_type => "text", default_value => "en-gb", is_nullable => 0 }, - "cobrand", - { data_type => "text", default_value => "", is_nullable => 0 }, - "cobrand_data", - { data_type => "text", default_value => "", is_nullable => 0 }, - "whensubscribed", - { - data_type => "timestamp", - default_value => \"ms_current_timestamp()", - is_nullable => 0, - }, - "whendisabled", - { data_type => "timestamp", is_nullable => 1 }, + "id", + { + data_type => "integer", + is_auto_increment => 1, + is_nullable => 0, + sequence => "alert_id_seq", + }, + "alert_type", + { data_type => "text", is_foreign_key => 1, is_nullable => 0 }, + "parameter", + { data_type => "text", is_nullable => 1 }, + "parameter2", + { data_type => "text", is_nullable => 1 }, + "confirmed", + { data_type => "integer", default_value => 0, is_nullable => 0 }, + "lang", + { data_type => "text", default_value => "en-gb", is_nullable => 0 }, + "cobrand", + { data_type => "text", default_value => "", is_nullable => 0 }, + "cobrand_data", + { data_type => "text", default_value => "", is_nullable => 0 }, + "whensubscribed", + { + data_type => "timestamp", + default_value => \"ms_current_timestamp()", + is_nullable => 0, + }, + "whendisabled", + { data_type => "timestamp", is_nullable => 1 }, + "user_id", + { data_type => "integer", is_foreign_key => 1, is_nullable => 0 }, ); __PACKAGE__->set_primary_key("id"); +__PACKAGE__->belongs_to( + "user", + "FixMyStreet::DB::Result::User", + { id => "user_id" }, + { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" }, +); + -# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-05-10 12:36:15 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:tfT1PBeEOwcLsQaX+HXSKA +# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-05-11 14:21:33 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:6MMiFASvNi/pG74uxcspuQ # You can replace this text with custom code or comments, and it will be preserved on regeneration @@ -65,7 +72,7 @@ sub is_from_abuser { my $self = shift; # get the domain - my $email = $self->email; + my $email = $self->user->email; my ($domain) = $email =~ m{ @ (.*) \z }x; # search for an entry in the abuse table diff --git a/perllib/FixMyStreet/DB/Result/User.pm b/perllib/FixMyStreet/DB/Result/User.pm index 32361ca48..7bb2bfcff 100644 --- a/perllib/FixMyStreet/DB/Result/User.pm +++ b/perllib/FixMyStreet/DB/Result/User.pm @@ -11,33 +11,40 @@ use base 'DBIx::Class::Core'; __PACKAGE__->load_components("FilterColumn"); __PACKAGE__->table("users"); __PACKAGE__->add_columns( - "id", - { - data_type => "integer", - is_auto_increment => 1, - is_nullable => 0, - sequence => "users_id_seq", - }, - "email", - { data_type => "text", is_nullable => 0 }, - "name", - { data_type => "text", is_nullable => 1 }, - "phone", - { data_type => "text", is_nullable => 1 }, - "password", - { data_type => "text", default_value => "", is_nullable => 0 }, + "id", + { + data_type => "integer", + is_auto_increment => 1, + is_nullable => 0, + sequence => "users_id_seq", + }, + "email", + { data_type => "text", is_nullable => 0 }, + "name", + { data_type => "text", is_nullable => 1 }, + "phone", + { data_type => "text", is_nullable => 1 }, + "password", + { data_type => "text", default_value => "", is_nullable => 0 }, ); __PACKAGE__->set_primary_key("id"); -__PACKAGE__->add_unique_constraint( "users_email_key", ["email"] ); +__PACKAGE__->add_unique_constraint("users_email_key", ["email"]); +__PACKAGE__->has_many( + "alerts", + "FixMyStreet::DB::Result::Alert", + { "foreign.user_id" => "self.id" }, + { cascade_copy => 0, cascade_delete => 0 }, +); __PACKAGE__->has_many( - "problems", - "FixMyStreet::DB::Result::Problem", - { "foreign.user_id" => "self.id" }, - { cascade_copy => 0, cascade_delete => 0 }, + "problems", + "FixMyStreet::DB::Result::Problem", + { "foreign.user_id" => "self.id" }, + { cascade_copy => 0, cascade_delete => 0 }, ); -# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-03-24 17:36:08 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:36KVfhjrygEEmpmWm/vZBg + +# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-05-11 14:21:33 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Qaw6SZ5my5MnH7B5sB9NDw use mySociety::EmailUtil; diff --git a/t/app/controller/alert_new.t b/t/app/controller/alert_new.t index 94a4229ff..0b4cacfdc 100644 --- a/t/app/controller/alert_new.t +++ b/t/app/controller/alert_new.t @@ -53,21 +53,38 @@ foreach my $test ( my $type = $test->{type} . '_problems'; - # we don't want an alert - my $alert = FixMyStreet::App->model('DB::Alert')->find( + my $user = FixMyStreet::App->model('DB::User')->find( { - email => $test->{email}, - alert_type => $type + email => $test->{email} } ); + + # we don't want an alert + my $alert; + if ( $user ) { + $alert = FixMyStreet::App->model('DB::Alert')->find( + { + user => $user, + alert_type => $type + } + ); + } $alert->delete() if $alert; $mech->get_ok( $test->{uri} ); $mech->content_contains( $test->{content} ); + $user = FixMyStreet::App->model('DB::User')->find( + { + email => $test->{email} + } + ); + + ok $user, 'user for report'; + $alert = FixMyStreet::App->model('DB::Alert')->find( { - email => $test->{email}, + user => $user, alert_type => $type, parameter => $test->{param1}, parameter2 => $test->{param2}, @@ -117,7 +134,7 @@ foreach my $test ( ok $token->data->{id} == $existing_id, 'subscribed to exsiting alert'; $mech->get_ok("/A/$url_token"); - $mech->content_contains('subscribed'); + $mech->content_contains('successfully confirmed'); $alert = FixMyStreet::App->model('DB::Alert')->find( { id => $existing_id, } ); |