blob: 647261e3288b7495449f640417d421d6fee5cb7c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
# Copyright (c) 2009 UK Citizens Online Democracy. All rights reserved.
# Email: evdb@mysociety.org. WWW: http://www.mysociety.org
package FixMyStreet::Cobrand;
use strict;
use warnings;
use FixMyStreet;
use Carp;
use Module::Pluggable
sub_name => '_cobrands',
search_path => ['FixMyStreet::Cobrand'],
require => 1;
my @ALL_COBRAND_CLASSES = __PACKAGE__->_cobrands;
=head2 get_allowed_cobrands
Return an array reference of allowed cobrand monikers and hostname substrings.
=cut
sub get_allowed_cobrands {
my $class = shift;
my @allowed_cobrands = map {
ref $_ ? { moniker => keys %$_, host => values %$_ }
: { moniker => $_, host => $_ }
} @{ $class->_get_allowed_cobrands };
return \@allowed_cobrands;
}
=head2 _get_allowed_cobrands
Simply returns the config variable (so this function can be overridden in test suite).
=cut
sub _get_allowed_cobrands {
return FixMyStreet->config('ALLOWED_COBRANDS');
}
=head2 available_cobrand_classes
@available_cobrand_classes =
FixMyStreet::Cobrand->available_cobrand_classes();
Return an array of all the classes that were found and that have monikers
that match the values from get_allowed_cobrands, in the order of
get_allowed_cobrands.
=cut
sub available_cobrand_classes {
my $class = shift;
my %all = map { $_->moniker => $_ } @ALL_COBRAND_CLASSES;
my @avail;
foreach (@{ $class->get_allowed_cobrands }) {
next unless $all{$_->{moniker}};
$_->{class} = $all{$_->{moniker}};
push @avail, $_;
}
return @avail;
}
=head2 get_class_for_host
$cobrand_class = FixMyStreet::Cobrand->get_class_for_host( $host );
Given a host determine which cobrand we should be using.
=cut
sub get_class_for_host {
my $class = shift;
my $host = shift;
foreach my $avail ( $class->available_cobrand_classes ) {
return $avail->{class} if $host =~ /$avail->{host}/;
}
# if none match then use the default
return 'FixMyStreet::Cobrand::Default';
}
=head2 get_class_for_moniker
$cobrand_class = FixMyStreet::Cobrand->get_class_for_moniker( $moniker );
Given a moniker determine which cobrand we should be using.
=cut
sub get_class_for_moniker {
my $class = shift;
my $moniker = shift;
foreach my $avail ( $class->available_cobrand_classes ) {
return $avail->{class} if $moniker eq $avail->{moniker};
}
# Special case for old blank cobrand entries in fixmystreet.com.
return 'FixMyStreet::Cobrand::FixMyStreet' if $moniker eq '';
# if none match then use the default
return 'FixMyStreet::Cobrand::Default';
}
1;
|