aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/App
diff options
context:
space:
mode:
authorMatthew Somerville <matthew-github@dracos.co.uk>2015-10-26 16:05:24 +0000
committerMatthew Somerville <matthew@mysociety.org>2015-10-29 17:59:45 +0000
commit2a6e538e9486f35af7eb1f287e3ec858ab83f8cd (patch)
tree0369a6fb0fa06bcb206735a4d3881a16e8540b28 /perllib/FixMyStreet/App
parent783eb401e5074c908d2d80862efff4f81c73eb74 (diff)
Add generic static route handler.
This puts all static pages under /about, and lets you add new static pages by placing new HTML in your about template directory.
Diffstat (limited to 'perllib/FixMyStreet/App')
-rwxr-xr-xperllib/FixMyStreet/App/Controller/About.pm67
-rwxr-xr-xperllib/FixMyStreet/App/Controller/Static.pm51
2 files changed, 76 insertions, 42 deletions
diff --git a/perllib/FixMyStreet/App/Controller/About.pm b/perllib/FixMyStreet/App/Controller/About.pm
new file mode 100755
index 000000000..78e548c5f
--- /dev/null
+++ b/perllib/FixMyStreet/App/Controller/About.pm
@@ -0,0 +1,67 @@
+package FixMyStreet::App::Controller::About;
+use Moose;
+use namespace::autoclean;
+
+BEGIN { extends 'Catalyst::Controller'; }
+
+=head1 NAME
+
+FixMyStreet::App::Controller::About - Catalyst Controller
+
+=head1 DESCRIPTION
+
+About pages Catalyst Controller.
+
+=head1 METHODS
+
+=cut
+
+my %found;
+
+sub page : Path("/about") : Args(1) {
+ my ( $self, $c, $page ) = @_;
+ my $template = $c->forward('find_template');
+ $c->detach('/page_error_404_not_found', []) unless $template;
+ $c->stash->{template} = $template;
+}
+
+sub index : Path("/about") : Args(0) {
+ my ( $self, $c ) = @_;
+ $c->forward('page', [ 'about' ]);
+}
+
+# We have multiple possibilities to try, and we want to cache where we find it
+sub find_template : Private {
+ my ( $self, $c, $page ) = @_;
+
+ return $found{$page} if !FixMyStreet->config('STAGING_SITE') && exists $found{$page};
+
+ my $lang_code = $c->stash->{lang_code};
+ foreach my $dir_templates (@{$c->stash->{additional_template_paths}}, @{$c->view('Web')->paths}) {
+ foreach my $dir_static (static_dirs($page, $dir_templates)) {
+ foreach my $file ("$page-$lang_code.html", "$page.html") {
+ if (-e "$dir_templates/$dir_static/$file") {
+ $found{$page} = "$dir_static/$file";
+ return $found{$page};
+ }
+ }
+ }
+ }
+ # Cache that the page does not exist, so we don't look next time
+ $found{$page} = undef;
+ return $found{$page};
+}
+
+sub static_dirs {
+ my ($page, $dir_templates) = @_;
+ my @v = ("about");
+ # If legacy directories exist, check for templates there too;
+ # The FAQ page used to be in its own directory
+ push @v, "static" if -d "$dir_templates/static";
+ push @v, "faq" if -d "$dir_templates/faq" && $page =~ /faq/;
+ return @v;
+}
+
+__PACKAGE__->meta->make_immutable;
+
+1;
diff --git a/perllib/FixMyStreet/App/Controller/Static.pm b/perllib/FixMyStreet/App/Controller/Static.pm
index d91a07fea..5054809c7 100755
--- a/perllib/FixMyStreet/App/Controller/Static.pm
+++ b/perllib/FixMyStreet/App/Controller/Static.pm
@@ -10,56 +10,23 @@ FixMyStreet::App::Controller::Static - Catalyst Controller
=head1 DESCRIPTION
-Static pages Catalyst Controller. FAQ does some smarts to choose the correct
-template depending on language, will need extending at some point.
+Old static pages Catalyst Controller.
=head1 METHODS
=cut
-sub about : Global : Args(0) {
- my ( $self, $c ) = @_;
-
- my $lang_code = $c->stash->{lang_code};
- my $template = "static/about-$lang_code.html";
- $c->stash->{template} = $template;
-}
-
-sub privacy : Global : Args(0) {
+sub about_redirect : Private {
my ( $self, $c ) = @_;
+ $c->res->redirect( $c->uri_for_action('/about/page', [ $c->action->name ] ));
}
-sub faq : Global : Args(0) {
- my ( $self, $c ) = @_;
-
- # There should be a faq template for each language in a cobrand or default.
- # This is because putting the FAQ translations into the PO files is
- # overkill.
-
- # We rely on the list of languages for the site being restricted so that there
- # will be a faq template for that language/cobrand combo.
-
- my $lang_code = $c->stash->{lang_code};
- my $template = "faq/faq-$lang_code.html";
- $c->stash->{template} = $template;
-}
-
-sub fun : Global : Args(0) {
- my ( $self, $c ) = @_;
- # don't need to do anything here - should just pass through.
-}
-
-sub posters : Global : Args(0) {
- my ( $self, $c ) = @_;
-}
-
-sub iphone : Global : Args(0) {
- my ( $self, $c ) = @_;
-}
-
-sub council : Global : Args(0) {
- my ( $self, $c ) = @_;
-}
+sub faq : Global : Args(0) { $_[1]->forward('/about/page', ['faq']) }
+sub privacy : Global : Args(0) { $_[1]->detach('about_redirect') }
+sub fun : Global : Args(0) { $_[1]->detach('about_redirect') }
+sub posters : Global : Args(0) { $_[1]->detach('about_redirect') }
+sub iphone : Global : Args(0) { $_[1]->detach('about_redirect') }
+sub council : Global : Args(0) { $_[1]->detach('about_redirect') }
sub unresponsive : Global : Args(0) {
my ( $self, $c ) = @_;