aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/App/Controller/Alert.pm15
-rw-r--r--perllib/FixMyStreet/DB/Result/Alert.pm75
-rw-r--r--perllib/FixMyStreet/DB/Result/User.pm51
-rw-r--r--t/app/controller/alert_new.t29
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, } );