diff options
Diffstat (limited to 'perllib/Cobrand.pm')
-rw-r--r-- | perllib/Cobrand.pm | 246 |
1 files changed, 0 insertions, 246 deletions
diff --git a/perllib/Cobrand.pm b/perllib/Cobrand.pm deleted file mode 100644 index 7d4382583..000000000 --- a/perllib/Cobrand.pm +++ /dev/null @@ -1,246 +0,0 @@ -#!/usr/bin/perl -w -# -# Cobrand.pm: -# Cobranding for FixMyStreet. -# -# -# Copyright (c) 2009 UK Citizens Online Democracy. All rights reserved. -# Email: louise@mysociety.org. WWW: http://www.mysociety.org -# -# $Id: Cobrand.pm,v 1.58 2010-01-06 12:33:25 louise Exp $ - -package Cobrand; -use strict; -use Carp; - -=item get_allowed_cobrands - -Return an array reference of allowed cobrand subdomains - -=cut -sub get_allowed_cobrands { - my $allowed_cobrand_string = mySociety::Config::get('ALLOWED_COBRANDS'); - my @allowed_cobrands = split(/\|/, $allowed_cobrand_string); - return \@allowed_cobrands; -} - -# Cobrand calling functions -my %fns = ( - # Return a site restriction clause and a site key if the cobrand uses a subset of the FixMyStreet - # data. Parameter is any extra data the cobrand needs. Returns an empty string and site key 0 - # if the cobrand uses all the data. - 'site_restriction' => { default => '["", 0]' }, - # Return a contact restriction clause if the cobrand uses a subset of the FixMyStreet contact data. - 'contact_restriction' => { default => "''" }, - # Return the base url to use in links in emails for the cobranded version of the site, parameter is extra data. - 'base_url_for_emails' => { default => 'base_url($cobrand)' }, - # Base URL for the admin interface. - 'admin_base_url' => { default => '0' }, - # URL for writetothem; parameter is COBRAND_DATA. - 'writetothem_url' => { default => '0' }, - # Return the base url for the cobranded version of the site - 'base_url' => { default => "mySociety::Config::get('BASE_URL')" }, - # Return the text that prompts the user to enter their postcode/place name. Parameter is QUERY - 'enter_postcode_text' => { default => '""' }, - # Set the language and domain of the site based on the cobrand and host - 'set_lang_and_domain' => { default => '\&default_set_lang_and_domain' }, - # Return HTML for a list of alert options for the cobrand, given QUERY and OPTIONS. - 'alert_list_options' => { default => '0' }, - # Return N recent photos. If EASTING, NORTHING and DISTANCE are supplied, the photos must be attached to problems - # within DISTANCE of the point defined by EASTING and NORTHING. - 'recent_photos' => { default => '\&Problems::recent_photos' }, - # Return recent problems on the site. - 'recent' => { default => '\&Problems::recent' }, - # Given a QUERY, return a block of html for showing front stats for the site - 'front_stats' => { default => '\&Problems::front_stats' }, - # Given a STRING ($_[1]) representing a location and a QUERY, return a string that - # includes any disambiguating information available - 'disambiguate_location' => { default => '"$_[1]&gl=uk"' }, - # Parameter is EPOCHTIME - 'prettify_epoch' => { default => '0' }, - # Parameters are FORM_NAME, QUERY. Return HTML for any extra needed elements for FORM_NAME - 'form_elements' => { default => "''" }, - # Parameter is UPDATE_DATA, a reference to a hash of non-cobranded update data. Return cobrand extra data for the update - 'cobrand_data_for_generic_update' => { default => "''" }, - # Parameter is PROBLEM_DATA, a reference to a hash of non-cobranded problem data. Return cobrand extra data for the problem - 'cobrand_data_for_generic_problem' => { default => "''" }, - # Parameter is QUERY. Return a string of extra data to be stored with a problem - 'extra_problem_data' => { default => "''" }, - # Parameter is QUERY. Return a string of extra data to be stored with an update - 'extra_update_data' => { default => "''" }, - # Parameter is QUERY. Return a string of extra data to be stored with an alert - 'extra_alert_data' => { default => "''" }, - # Given a QUERY, extract any extra data required by the cobrand - 'extra_data' => { default => "''" }, - # Returns any extra text to be displayed with a PROBLEM. - 'extra_problem_meta_text' => { default => "''" }, - # Returns any extra text to be displayed with an UPDATE. - 'extra_update_meta_text' => { default => "''" }, - # Given a URL ($_[1]), QUERY, EXTRA_DATA, return a URL with any extra params needed appended to it. - 'url' => { default => '$_[1]' }, - # Return any params to be added to responses - 'header_params' => { default => '{}' }, - # Parameter is QUERY. Return some js to set the root path from which AJAX - # queries should be made. - 'root_path_js' => { default => "'var root_path = \"\";'" }, - # Return the title to be used in page heads. - 'site_title' => { default => "''" }, - # Return the maximum number of items to be given in the list of reports on the map - 'on_map_list_limit' => { default => 'undef' }, - # Return a boolean indicating whether the cobrand allows photo uploads - 'allow_photo_upload' => { default => '1' }, - # Return a boolean indicating whether the cobrand allows the display of crosssell adverts - 'allow_crosssell_adverts' => { default => '1' }, - # Return a boolean indicating whether the cobrand allows photo display - 'allow_photo_display' => { default => '1' }, - # Return a boolean indication whether users should see links next to updates allowing them - # to report them as offensive. - 'allow_update_reporting' => { default => '0' }, - # Parameters are LOCATION, QUERY. Return a boolean indicating whether the - # string LOCATION passes the cobrands checks. - 'geocoded_string_check' => { default => '1' }, - # Paramters are COUNCILS, QUERY, CONTEXT. Return a boolean indicating whether - # COUNCILS pass any extra checks. CONTEXT is where we are on the site. - 'council_check' => { default => "[1, '']" }, - # Return an XSL to be used in rendering feeds - 'feed_xsl' => { default => "'/xsl.xsl'" }, - # Return a boolean indicating whether the cobrand displays a report of all councils - 'all_councils_report' => { default => '1' }, - # Return a boolean indicating whether people should be asked whether this - # is the first time they've reported a problem. - 'ask_ever_reported' => { default => '1' }, - # List of names of pages to display on the admin interface - 'admin_pages' => { default => '0' }, - # Show the problem creation graph in the admin interface - 'admin_show_creation_graph' => { default => '1' }, - # The MaPit types this site handles - 'area_types' => { default => '[qw(DIS LBO MTD UTA CTY COI)]' }, - 'area_min_generation' => { default => '10' }, - # Some cobrands that use a Tilma map have a smaller mid-point to make pin centred - 'tilma_mid_point' => { default => '""' }, -); - -foreach (keys %fns) { - die "Default must be specified for $_" unless $fns{$_}{default} ne ''; - eval <<EOF; -sub $_ { - my (\$cobrand, \@args) = \@_; - return call(\$cobrand, '$_', $fns{$_}{default}, \@args); -} -EOF -} - -# This is the main Cobrand calling function that sees if the Cobrand handles -# the function and responds appropriately. -sub call { - my ($cobrand, $fn, $default, @args) = @_; - return call_default($default, @args) unless $cobrand; - my $handle = cobrand_handle($cobrand); - return call_default($default, @args) unless $handle && $handle->can($fn); - return $handle->$fn(@args); -} - -# If we're not in a Cobrand, or the Cobrand module doesn't offer a function, -# this function works out how to return the default response -sub call_default { - my ($default, @args) = @_; - return $default unless ref $default; - return @$default if ref $default eq 'ARRAY'; # Arrays passed back as values - return $default if ref $default eq 'HASH'; # Hashes passed back as reference - return $default->(@args) if ref $default eq 'CODE'; # Functions are called. - die "Default of $default treatment unknown"; -} - -=item cobrand_handle Q - -Given a query that has the name of a site set, return a handle to the Util module for that -site, if one exists, or zero if not. - -=cut -sub cobrand_handle { - my $cobrand = shift; - - our %handles; - - # Once we have a handle defined, return it. - return $handles{$cobrand} if defined $handles{$cobrand}; - - my $cobrand_class = ucfirst($cobrand); - my $class = "Cobrands::" . $cobrand_class . "::Util"; - eval "use $class"; - - eval{ $handles{$cobrand} = $class->new }; - $handles{$cobrand} = 0 if $@; - return $handles{$cobrand}; -} - -# Cobrand functions to fetch config variables -%fns = ( - # Return the contact name for the cobranded version of the site - # (to be used in emails). - 'contact_name' => 'CONTACT_NAME', - # Return the contact email for the cobranded version of the site - 'contact_email' => 'CONTACT_EMAIL', -); - -foreach (keys %fns) { - eval <<EOF; -sub $_ { - my \$cobrand = shift; - return get_cobrand_conf(\$cobrand, '$fns{$_}'); -} -EOF -} - -=item get_cobrand_conf COBRAND KEY - -Get the value for KEY from the config file for COBRAND - -=cut -sub get_cobrand_conf { - my ($cobrand, $key) = @_; - my $value; - if ($cobrand){ - (my $dir = __FILE__) =~ s{/[^/]*?$}{}; - if (-e "$dir/../conf/cobrands/$cobrand/general"){ - mySociety::Config::set_file("$dir/../conf/cobrands/$cobrand/general"); - $cobrand = uc($cobrand); - $value = mySociety::Config::get($key . "_" . $cobrand, undef); - mySociety::Config::set_file("$dir/../conf/general"); - } - } - if (!defined($value)){ - $value = mySociety::Config::get($key); - } - return $value; -} - -=item email_host COBRAND - -Return the virtual host that sends email for this cobrand - -=cut - -sub email_host { - my ($cobrand) = @_; - my $email_vhost = mySociety::Config::get('EMAIL_VHOST'); - if ($cobrand) { - $email_vhost = mySociety::Config::get('EMAIL_VHOST_'. uc($cobrand), $email_vhost); - } - if ($email_vhost && 'http://' . $email_vhost eq mySociety::Config::get('BASE_URL')) { - return 1; - } else { - return 0; - } -} - -# Default things to do for the set_lang_and_domain call -sub default_set_lang_and_domain { - my ($lang, $unicode) = @_; - mySociety::Locale::negotiate_language('en-gb,English,en_GB|nb,Norwegian,nb_NO', $lang); # XXX Testing - mySociety::Locale::gettext_domain('FixMyStreet', $unicode); - mySociety::Locale::change(); -} - -1; - |