diff options
Diffstat (limited to 'perllib/FixMyStreet/DB/Result/User.pm')
-rw-r--r-- | perllib/FixMyStreet/DB/Result/User.pm | 46 |
1 files changed, 42 insertions, 4 deletions
diff --git a/perllib/FixMyStreet/DB/Result/User.pm b/perllib/FixMyStreet/DB/Result/User.pm index 7d1785c4b..cc8e050da 100644 --- a/perllib/FixMyStreet/DB/Result/User.pm +++ b/perllib/FixMyStreet/DB/Result/User.pm @@ -90,10 +90,21 @@ __PACKAGE__->has_many( { "foreign.user_id" => "self.id" }, { cascade_copy => 0, cascade_delete => 0 }, ); +__PACKAGE__->has_many( + "user_planned_reports", + "FixMyStreet::DB::Result::UserPlannedReport", + { "foreign.user_id" => "self.id" }, + { cascade_copy => 0, cascade_delete => 0 }, +); -# Created by DBIx::Class::Schema::Loader v0.07035 @ 2016-07-11 12:49:31 -# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:SG86iN6Fr4/JIq7U2zYkug +# Created by DBIx::Class::Schema::Loader v0.07035 @ 2016-07-20 15:00:41 +# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:+pEOZ8GM14D4gqkp+fr+ZA + +use Moo; +use mySociety::EmailUtil; + +__PACKAGE__->many_to_many( planned_reports => 'user_planned_reports', 'report' ); __PACKAGE__->add_columns( "password" => { @@ -104,8 +115,6 @@ __PACKAGE__->add_columns( }, ); -use mySociety::EmailUtil; - sub latest_anonymity { my $self = shift; my $p = $self->problems->search(undef, { order_by => { -desc => 'id' } } )->first; @@ -277,4 +286,33 @@ sub adopt { $other->delete; } +# Planned reports + +# Override the default auto-created function as we only want one live entry per user +around add_to_planned_reports => sub { + my ( $orig, $self ) = ( shift, shift ); + my ( $report_col ) = @_; + my $existing = $self->user_planned_reports->search_rs({ report_id => $report_col->{id}, removed => undef })->first; + return $existing if $existing; + return $self->$orig(@_); +}; + +# Override the default auto-created function as we don't want to ever delete anything +around remove_from_planned_reports => sub { + my ($orig, $self, $report) = @_; + $self->user_planned_reports + ->search_rs({ report_id => $report->id, removed => undef }) + ->update({ removed => \'current_timestamp' }); +}; + +sub active_planned_reports { + my $self = shift; + $self->planned_reports->search({ removed => undef }); +} + +sub is_planned_report { + my ($self, $problem) = @_; + return $self->active_planned_reports->find({ id => $problem->id }); +} + 1; |