diff options
Diffstat (limited to 'perllib/FixMyStreet/DB/ResultSet/Contact.pm')
-rw-r--r-- | perllib/FixMyStreet/DB/ResultSet/Contact.pm | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/perllib/FixMyStreet/DB/ResultSet/Contact.pm b/perllib/FixMyStreet/DB/ResultSet/Contact.pm index 7b3258262..1643f9931 100644 --- a/perllib/FixMyStreet/DB/ResultSet/Contact.pm +++ b/perllib/FixMyStreet/DB/ResultSet/Contact.pm @@ -3,6 +3,7 @@ use base 'DBIx::Class::ResultSet'; use strict; use warnings; +use POSIX qw(strcoll); sub me { join('.', shift->current_source_alias, shift || q{}) } @@ -24,6 +25,28 @@ sub active { $rs->search( { $rs->me('state') => [ 'unconfirmed', 'confirmed' ] } ); } +sub translated { + my $rs = shift; + my $schema = $rs->result_source->schema; + $rs->search(undef, { + '+columns' => { 'msgstr' => 'translations.msgstr' }, + join => 'translations', + bind => [ 'category', $schema->lang, 'contact' ], + }); +} + +sub all_sorted { + my $rs = shift; + + my @contacts = $rs->translated->all; + @contacts = sort { + my $a_name = $a->get_extra_metadata('display_name') || $a->get_column('msgstr') || $a->category; + my $b_name = $b->get_extra_metadata('display_name') || $b->get_column('msgstr') || $b->category; + strcoll($a_name, $b_name) + } @contacts; + return @contacts; +} + sub summary_count { my ( $rs, $restriction ) = @_; |