aboutsummaryrefslogtreecommitdiffstats
path: root/perllib/FixMyStreet/App/Controller
diff options
context:
space:
mode:
Diffstat (limited to 'perllib/FixMyStreet/App/Controller')
-rw-r--r--perllib/FixMyStreet/App/Controller/Auth.pm5
-rw-r--r--perllib/FixMyStreet/App/Controller/Contact.pm5
-rwxr-xr-xperllib/FixMyStreet/App/Controller/Develop.pm122
-rwxr-xr-xperllib/FixMyStreet/App/Controller/Questionnaire.pm7
-rw-r--r--perllib/FixMyStreet/App/Controller/Report/New.pm109
-rw-r--r--perllib/FixMyStreet/App/Controller/Tokens.pm26
6 files changed, 176 insertions, 98 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Auth.pm b/perllib/FixMyStreet/App/Controller/Auth.pm
index 41674e377..9f948e0f9 100644
--- a/perllib/FixMyStreet/App/Controller/Auth.pm
+++ b/perllib/FixMyStreet/App/Controller/Auth.pm
@@ -54,11 +54,6 @@ sub general : Path : Args(0) {
}
-sub general_test : Path('_test_') : Args(0) {
- my ( $self, $c ) = @_;
- $c->stash->{template} = 'auth/token.html';
-}
-
sub authenticate : Private {
my ($self, $c, $type, $username, $password) = @_;
return 1 if $type eq 'email' && $c->authenticate({ email => $username, email_verified => 1, password => $password });
diff --git a/perllib/FixMyStreet/App/Controller/Contact.pm b/perllib/FixMyStreet/App/Controller/Contact.pm
index 3a37d9fa9..aabeb650e 100644
--- a/perllib/FixMyStreet/App/Controller/Contact.pm
+++ b/perllib/FixMyStreet/App/Controller/Contact.pm
@@ -42,11 +42,6 @@ Handle contact us form submission
sub submit : Path('submit') : Args(0) {
my ( $self, $c ) = @_;
- if (my $testing = $c->get_param('_test_')) {
- $c->stash->{success} = $c->get_param('success');
- return;
- }
-
$c->res->redirect( '/contact' ) and return unless $c->req->method eq 'POST';
return
diff --git a/perllib/FixMyStreet/App/Controller/Develop.pm b/perllib/FixMyStreet/App/Controller/Develop.pm
index 0bc52883f..b73bbaf86 100755
--- a/perllib/FixMyStreet/App/Controller/Develop.pm
+++ b/perllib/FixMyStreet/App/Controller/Develop.pm
@@ -26,10 +26,21 @@ Makes sure this controller is only available when run in development.
sub auto : Private {
my ($self, $c) = @_;
- $c->detach( '/page_error_404_not_found' ) unless $c->config->{STAGING_SITE};
+ $c->detach( '/page_error_404_not_found' ) unless $c->user_exists && $c->user->is_superuser;
return 1;
}
+=item index
+
+Shows a list of links to preview HTML emails.
+
+=cut
+
+sub index : Path('/_dev') : Args(0) {
+ my ( $self, $c ) = @_;
+ $c->stash->{problem} = $c->model('DB::Problem')->first;
+}
+
=item email_list
Shows a list of links to preview HTML emails.
@@ -130,6 +141,115 @@ sub email_previewer : Path('/_dev/email') : Args(1) {
$c->response->body($html);
}
+=item problem_confirm_previewer
+
+Displays the confirmation page for a given problem.
+
+=back
+
+=cut
+
+sub problem_confirm_previewer : Path('/_dev/confirm_problem') : Args(1) {
+ my ( $self, $c, $id ) = @_;
+
+ $c->log->info('Previewing confirmation page for problem ' . $id);
+
+ my $problem = $c->model('DB::Problem')->find( { id => $id } )
+ || $c->detach( '/page_error_404_not_found', [ _('Unknown problem ID') ] );
+ $c->stash->{report} = $problem;
+
+ $c->log->info('Problem ' . $id . ' found: ' . $problem->title);
+ $c->stash->{template} = 'tokens/confirm_problem.html';
+}
+
+=item update_confirm_previewer
+
+Displays the confirmation page for an update on the given problem.
+
+=back
+
+=cut
+
+sub update_confirm_previewer : Path('/_dev/confirm_update') : Args(1) {
+ my ( $self, $c, $id ) = @_;
+
+ my $problem = $c->model('DB::Problem')->find( { id => $id } )
+ || $c->detach( '/page_error_404_not_found', [ _('Unknown problem ID') ] );
+ $c->stash->{problem} = $problem;
+
+ $c->stash->{template} = 'tokens/confirm_update.html';
+}
+
+=item alert_confirm_previewer
+
+Displays the confirmation page for an alert, with the supplied
+confirmation type (ie: subscribed, or unsubscribed).
+
+=back
+
+=cut
+
+sub alert_confirm_previewer : Path('/_dev/confirm_alert') : Args(1) {
+ my ( $self, $c, $confirm_type ) = @_;
+ $c->stash->{confirm_type} = $confirm_type;
+ $c->stash->{template} = 'tokens/confirm_alert.html';
+}
+
+=item contact_submit_previewer
+
+Displays the contact submission page, with success based on the
+truthyness of the supplied argument.
+
+=back
+
+=cut
+
+sub contact_submit_previewer : Path('/_dev/contact_submit') : Args(1) {
+ my ( $self, $c, $success ) = @_;
+ $c->stash->{success} = $success;
+ $c->stash->{template} = 'contact/submit.html';
+}
+
+=item questionnaire_completed_previewer
+
+Displays the questionnaire completed page, with content based on
+the supplied ?new_state and ?been_fixed query params.
+
+=back
+
+=cut
+
+sub questionnaire_completed_previewer : Path('/_dev/questionnaire_completed') : Args(0) {
+ my ( $self, $c ) = @_;
+ $c->stash->{been_fixed} = $c->get_param('been_fixed');
+ $c->stash->{new_state} = $c->get_param('new_state');
+ $c->stash->{template} = 'questionnaire/completed.html';
+}
+
+=item questionnaire_creator_fixed_previewer
+
+Displays the page a user sees after they mark their own report as fixed.
+
+=back
+
+=cut
+
+sub questionnaire_creator_fixed_previewer : Path('/_dev/questionnaire_creator_fixed') : Args(0) {
+ my ( $self, $c ) = @_;
+ $c->stash->{template} = 'questionnaire/creator_fixed.html';
+}
+
+sub auth_preview : Path('/_dev/auth') : Args(0) {
+ my ( $self, $c ) = @_;
+ $c->stash->{template} = 'auth/token.html';
+}
+
+sub report_new_preview : Path('/_dev/report_new') : Args(0) {
+ my ( $self, $c ) = @_;
+ $c->stash->{template} = 'email_sent.html';
+ $c->stash->{email_type} = $c->get_param('email_type');
+}
+
__PACKAGE__->meta->make_immutable;
1;
diff --git a/perllib/FixMyStreet/App/Controller/Questionnaire.pm b/perllib/FixMyStreet/App/Controller/Questionnaire.pm
index 696529660..d2b0bf3f4 100755
--- a/perllib/FixMyStreet/App/Controller/Questionnaire.pm
+++ b/perllib/FixMyStreet/App/Controller/Questionnaire.pm
@@ -65,15 +65,8 @@ sub submit : Path('submit') {
my ( $self, $c ) = @_;
if (my $token = $c->get_param('token')) {
- if ($token eq '_test_') {
- $c->stash->{been_fixed} = $c->get_param('been_fixed');
- $c->stash->{new_state} = $c->get_param('new_state');
- $c->stash->{template} = 'questionnaire/completed.html';
- return;
- }
$c->forward('submit_standard');
} elsif (my $p = $c->get_param('problem')) {
- $c->detach('creator_fixed') if $p eq '_test_';
$c->forward('submit_creator_fixed');
} else {
$c->detach( '/page_error_404_not_found' );
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm
index a1038e909..dfaf43ffb 100644
--- a/perllib/FixMyStreet/App/Controller/Report/New.pm
+++ b/perllib/FixMyStreet/App/Controller/Report/New.pm
@@ -118,12 +118,6 @@ sub report_new : Path : Args(0) {
$c->forward('redirect_or_confirm_creation');
}
-sub report_new_test : Path('_test_') : Args(0) {
- my ( $self, $c ) = @_;
- $c->stash->{template} = 'email_sent.html';
- $c->stash->{email_type} = $c->get_param('email_type');
-}
-
# This is for the new phonegap versions of the app. It looks a lot like
# report_new but there's a few workflow differences as we only ever want
# to sent JSON back here
@@ -188,10 +182,8 @@ sub report_form_ajax : Path('ajax') : Args(0) {
# work out the location for this report and do some checks
if ( ! $c->forward('determine_location') ) {
- my $body = encode_json({ error => $c->stash->{location_error} });
- $c->res->content_type('application/json; charset=utf-8');
- $c->res->body($body);
- return;
+ $c->stash->{json_response} = { error => $c->stash->{location_error} };
+ $c->detach('send_json_response');
}
$c->forward('setup_categories_and_bodies');
@@ -220,22 +212,27 @@ sub report_form_ajax : Path('ajax') : Args(0) {
$contribute_as->{body} = $ca_body if $ca_body;
}
- my $body = encode_json(
- {
- bodies => \@list_of_names,
- councils_text => $councils_text,
- councils_text_private => $councils_text_private,
- category => $category,
- extra_name_info => $extra_name_info,
- titles_list => $extra_titles_list,
- %$contribute_as ? (contribute_as => $contribute_as) : (),
- $top_message ? (top_message => $top_message) : (),
- unresponsive => $c->stash->{unresponsive}->{ALL} || '',
- }
- );
+ my %by_category;
+ foreach my $contact (@{$c->stash->{category_options}}) {
+ next if ref $contact eq 'HASH'; # Ignore the 'Pick a category' line
+ my $cat = $c->stash->{category} = $contact->category;
+ my $body = $c->forward('by_category_ajax_data', [ 'all', $cat ]);
+ $by_category{$cat} = $body;
+ }
- $c->res->content_type('application/json; charset=utf-8');
- $c->res->body($body);
+ $c->stash->{json_response} = {
+ bodies => \@list_of_names,
+ councils_text => $councils_text,
+ councils_text_private => $councils_text_private,
+ category => $category,
+ extra_name_info => $extra_name_info,
+ titles_list => $extra_titles_list,
+ %$contribute_as ? (contribute_as => $contribute_as) : (),
+ $top_message ? (top_message => $top_message) : (),
+ unresponsive => $c->stash->{unresponsive}->{ALL} || '',
+ by_category => \%by_category,
+ };
+ $c->detach('send_json_response');
}
sub category_extras_ajax : Path('category_extras') : Args(0) {
@@ -243,29 +240,24 @@ sub category_extras_ajax : Path('category_extras') : Args(0) {
$c->forward('initialize_report');
if ( ! $c->forward('determine_location') ) {
- my $body = encode_json({ error => _("Sorry, we could not find that location.") });
- $c->res->content_type('application/json; charset=utf-8');
- $c->res->body($body);
- return 1;
+ $c->stash->{json_response} = { error => _("Sorry, we could not find that location.") };
+ $c->detach('send_json_response');
}
$c->forward('setup_categories_and_bodies');
$c->forward('setup_report_extra_fields');
- $c->forward('check_for_category');
+ $c->forward('check_for_category');
my $category = $c->stash->{category} || "";
$category = '' if $category eq _('-- Pick a category --');
- my $bodies = $c->forward('contacts_to_bodies', [ $category ]);
+ $c->stash->{json_response} = $c->forward('by_category_ajax_data', [ 'one', $category ]);
+ $c->forward('send_json_response');
+}
- my $list_of_names = [ map { $_->name } ($category ? @$bodies : values %{$c->stash->{bodies_to_list}}) ];
- my $vars = {
- $category ? (list_of_names => $list_of_names) : (),
- };
+sub by_category_ajax_data : Private {
+ my ($self, $c, $type, $category) = @_;
- my $category_extra = '';
- my $category_extra_json = [];
my $generate;
- my $unresponsive = '';
if ( $c->stash->{category_extras}->{$category} && @{ $c->stash->{category_extras}->{$category} } >= 1 ) {
$c->stash->{category_extras} = { $category => $c->stash->{category_extras}->{$category} };
$generate = 1;
@@ -276,27 +268,36 @@ sub category_extras_ajax : Path('category_extras') : Args(0) {
if ($c->stash->{report_extra_fields}) {
$generate = 1;
}
+
+ my $bodies = $c->forward('contacts_to_bodies', [ $category ]);
+ my $list_of_names = [ map { $_->name } ($category ? @$bodies : values %{$c->stash->{bodies_to_list}}) ];
+ my $vars = {
+ $category ? (list_of_names => $list_of_names) : (),
+ };
+
+ my $body = {
+ bodies => $list_of_names,
+ };
+
if ($generate) {
- $category_extra = $c->render_fragment('report/new/category_extras.html', $vars);
- $category_extra_json = $c->forward('generate_category_extra_json');
- }
+ $body->{category_extra} = $c->render_fragment('report/new/category_extras.html', $vars);
+ $body->{category_extra_json} = $c->forward('generate_category_extra_json');
- my $councils_text = $c->render_fragment( 'report/new/councils_text.html', $vars);
- my $councils_text_private = $c->render_fragment( 'report/new/councils_text_private.html');
+ }
- $unresponsive = $c->stash->{unresponsive}->{$category} || $c->stash->{unresponsive}->{ALL} || '';
+ my $unresponsive = $c->stash->{unresponsive}->{$category};
+ $unresponsive ||= $c->stash->{unresponsive}->{ALL} || '' if $type eq 'one';
- my $body = encode_json({
- category_extra => $category_extra,
- councils_text => $councils_text,
- councils_text_private => $councils_text_private,
- category_extra_json => $category_extra_json,
- unresponsive => $unresponsive,
- bodies => $list_of_names,
- });
+ # unresponsive must return empty string if okay, as that's what mobile app checks
+ if ($type eq 'one' || ($type eq 'all' && $unresponsive)) {
+ $body->{unresponsive} = $unresponsive;
+ if ($type eq 'all' && $unresponsive) {
+ $body->{councils_text} = $c->render_fragment( 'report/new/councils_text.html', $vars);
+ $body->{councils_text_private} = $c->render_fragment( 'report/new/councils_text_private.html');
+ }
+ }
- $c->res->content_type('application/json; charset=utf-8');
- $c->res->body($body);
+ return $body;
}
=head2 report_import
diff --git a/perllib/FixMyStreet/App/Controller/Tokens.pm b/perllib/FixMyStreet/App/Controller/Tokens.pm
index bb6140e0a..659d763de 100644
--- a/perllib/FixMyStreet/App/Controller/Tokens.pm
+++ b/perllib/FixMyStreet/App/Controller/Tokens.pm
@@ -28,17 +28,6 @@ problem but are not logged in.
sub confirm_problem : Path('/P') {
my ( $self, $c, $token_code ) = @_;
- if ($token_code eq '_test_') {
- $c->stash->{report} = {
- id => 123,
- title => 'Title of Report',
- bodies_str => '1',
- url => '/report/123',
- service => $c->get_param('service'),
- };
- return;
- }
-
my $auth_token =
$c->forward( 'load_auth_token', [ $token_code, 'problem' ] );
@@ -88,11 +77,6 @@ alert but are not logged in.
sub confirm_alert : Path('/A') {
my ( $self, $c, $token_code ) = @_;
- if ($token_code eq '_test_') {
- $c->stash->{confirm_type} = $c->get_param('confirm_type');
- return;
- }
-
my $auth_token = $c->forward( 'load_auth_token', [ $token_code, 'alert' ] );
# Load the alert
@@ -134,16 +118,6 @@ update but are not logged in.
sub confirm_update : Path('/C') {
my ( $self, $c, $token_code ) = @_;
- if ($token_code eq '_test_') {
- $c->stash->{problem} = {
- id => 123,
- title => 'Title of Report',
- bodies_str => '1',
- url => '/report/123',
- };
- return;
- }
-
my $auth_token =
$c->forward( 'load_auth_token', [ $token_code, 'comment' ] );