aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--perllib/FixMyStreet/DB/Result/Problem.pm194
-rw-r--r--perllib/FixMyStreet/DB/Result/User.pm85
2 files changed, 189 insertions, 90 deletions
diff --git a/perllib/FixMyStreet/DB/Result/Problem.pm b/perllib/FixMyStreet/DB/Result/Problem.pm
index a0ac71070..953f663ba 100644
--- a/perllib/FixMyStreet/DB/Result/Problem.pm
+++ b/perllib/FixMyStreet/DB/Result/Problem.pm
@@ -10,80 +10,134 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("problem");
__PACKAGE__->add_columns(
- "id",
- {
- data_type => "integer",
- is_auto_increment => 1,
- is_nullable => 0,
- sequence => "problem_id_seq",
- },
- "postcode",
- { data_type => "text", is_nullable => 0 },
- "council",
- { data_type => "text", is_nullable => 1 },
- "areas",
- { data_type => "text", is_nullable => 0 },
- "category",
- { data_type => "text", default_value => "Other", is_nullable => 0 },
- "title",
- { data_type => "text", is_nullable => 0 },
- "detail",
- { data_type => "text", is_nullable => 0 },
- "photo",
- { data_type => "bytea", is_nullable => 1 },
- "used_map",
- { data_type => "boolean", is_nullable => 0 },
- "name",
- { data_type => "text", is_nullable => 0 },
- "phone",
- { data_type => "text", is_nullable => 0 },
- "anonymous",
- { data_type => "boolean", is_nullable => 0 },
- "created",
- {
- data_type => "timestamp",
- default_value => \"ms_current_timestamp()",
- is_nullable => 0,
- },
- "confirmed",
- { data_type => "timestamp", is_nullable => 1 },
- "state",
- { data_type => "text", is_nullable => 0 },
- "lang",
- { data_type => "text", default_value => "en-gb", is_nullable => 0 },
- "service",
- { data_type => "text", default_value => "", is_nullable => 0 },
- "cobrand",
- { data_type => "text", default_value => "", is_nullable => 0 },
- "cobrand_data",
- { data_type => "text", default_value => "", is_nullable => 0 },
- "lastupdate",
- {
- data_type => "timestamp",
- default_value => \"ms_current_timestamp()",
- is_nullable => 0,
- },
- "whensent",
- { data_type => "timestamp", is_nullable => 1 },
- "send_questionnaire",
- { data_type => "boolean", default_value => \"true", is_nullable => 0 },
- "latitude",
- { data_type => "double precision", is_nullable => 0 },
- "longitude",
- { data_type => "double precision", is_nullable => 0 },
- "user_id",
- { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
+ "id",
+ {
+ data_type => "integer",
+ is_auto_increment => 1,
+ is_nullable => 0,
+ sequence => "problem_id_seq",
+ },
+ "postcode",
+ { data_type => "text", is_nullable => 0 },
+ "council",
+ { data_type => "text", is_nullable => 1 },
+ "areas",
+ { data_type => "text", is_nullable => 0 },
+ "category",
+ { data_type => "text", default_value => "Other", is_nullable => 0 },
+ "title",
+ { data_type => "text", is_nullable => 0 },
+ "detail",
+ { data_type => "text", is_nullable => 0 },
+ "photo",
+ { data_type => "bytea", is_nullable => 1 },
+ "used_map",
+ { data_type => "boolean", is_nullable => 0 },
+ "name",
+ { data_type => "text", is_nullable => 0 },
+ "anonymous",
+ { data_type => "boolean", is_nullable => 0 },
+ "created",
+ {
+ data_type => "timestamp",
+ default_value => \"ms_current_timestamp()",
+ is_nullable => 0,
+ },
+ "confirmed",
+ { data_type => "timestamp", is_nullable => 1 },
+ "state",
+ { data_type => "text", is_nullable => 0 },
+ "lang",
+ { data_type => "text", default_value => "en-gb", is_nullable => 0 },
+ "service",
+ { data_type => "text", default_value => "", is_nullable => 0 },
+ "cobrand",
+ { data_type => "text", default_value => "", is_nullable => 0 },
+ "cobrand_data",
+ { data_type => "text", default_value => "", is_nullable => 0 },
+ "lastupdate",
+ {
+ data_type => "timestamp",
+ default_value => \"ms_current_timestamp()",
+ is_nullable => 0,
+ },
+ "whensent",
+ { data_type => "timestamp", is_nullable => 1 },
+ "send_questionnaire",
+ { data_type => "boolean", default_value => \"true", is_nullable => 0 },
+ "latitude",
+ { data_type => "double precision", is_nullable => 0 },
+ "longitude",
+ { data_type => "double precision", is_nullable => 0 },
+ "user_id",
+ { data_type => "integer", is_foreign_key => 1, is_nullable => 0 },
);
__PACKAGE__->set_primary_key("id");
__PACKAGE__->belongs_to(
- "user",
- "FixMyStreet::DB::Result::User",
- { id => "user_id" },
- { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
+ "user",
+ "FixMyStreet::DB::Result::User",
+ { id => "user_id" },
+ { is_deferrable => 1, on_delete => "CASCADE", on_update => "CASCADE" },
);
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-03-15 17:03:37
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:jpuxH2vKnvhlYYjy6Qjbaw
-# You can replace this text with custom code or comments, and it will be preserved on regeneration
+# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-03-23 12:42:18
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:hXAYqPHjda6+DoSiQexpEg
+
+=head2 check_for_errors
+
+ $error_hashref = $problem->check_for_errors();
+
+Look at all the fields and return a hashref with all errors found, keyed on the
+field name. This is intended to be passed back to the form to display the
+errors.
+
+TODO - ideally we'd pass back error codes which would be humanised in the
+templates (eg: 'missing','email_not_valid', etc).
+
+=cut
+
+sub check_for_errors {
+ my $self = shift;
+
+ my %errors = ();
+
+ $errors{title} = _('Please enter a subject')
+ unless $self->title =~ m/\S/;
+
+ $errors{detail} = _('Please enter some details')
+ unless $self->detail =~ m/\S/;
+
+ $errors{council} = _('No council selected')
+ unless $self->council
+ && $self->council =~ m/^(?:-1|[\d,]+(?:\|[\d,]+)?)$/;
+
+ if ( $self->name !~ m/\S/ ) {
+ $errors{name} = _('Please enter your name');
+ }
+ elsif (length( $self->name ) < 5
+ || $self->name !~ m/\s/
+ || $self->name =~ m/\ba\s*n+on+((y|o)mo?u?s)?(ly)?\b/i )
+ {
+ $errors{name} = _(
+'Please enter your full name, councils need this information - if you do not wish your name to be shown on the site, untick the box'
+ );
+ }
+
+ if ( $self->category
+ && $self->category eq _('-- Pick a category --') )
+ {
+ $errors{category} = _('Please choose a category');
+ $self->category(undef);
+ }
+ elsif ($self->category
+ && $self->category eq _('-- Pick a property type --') )
+ {
+ $errors{category} = _('Please choose a property type');
+ $self->category(undef);
+ }
+
+ return \%errors;
+}
+
1;
diff --git a/perllib/FixMyStreet/DB/Result/User.pm b/perllib/FixMyStreet/DB/Result/User.pm
index a819f1bba..6f6514902 100644
--- a/perllib/FixMyStreet/DB/Result/User.pm
+++ b/perllib/FixMyStreet/DB/Result/User.pm
@@ -10,30 +10,75 @@ use base 'DBIx::Class::Core';
__PACKAGE__->table("users");
__PACKAGE__->add_columns(
- "id",
- {
- data_type => "integer",
- is_auto_increment => 1,
- is_nullable => 0,
- sequence => "users_id_seq",
- },
- "email",
- { data_type => "text", is_nullable => 0 },
- "name",
- { data_type => "text", is_nullable => 1 },
- "password",
- { data_type => "text", default_value => "", is_nullable => 0 },
+ "id",
+ {
+ data_type => "integer",
+ is_auto_increment => 1,
+ is_nullable => 0,
+ sequence => "users_id_seq",
+ },
+ "email",
+ { data_type => "text", is_nullable => 0 },
+ "name",
+ { data_type => "text", is_nullable => 1 },
+ "phone",
+ { data_type => "text", is_nullable => 1 },
+ "password",
+ { data_type => "text", default_value => "", is_nullable => 0 },
);
__PACKAGE__->set_primary_key("id");
-__PACKAGE__->add_unique_constraint( "users_email_key", ["email"] );
+__PACKAGE__->add_unique_constraint("users_email_key", ["email"]);
__PACKAGE__->has_many(
- "problems",
- "FixMyStreet::DB::Result::Problem",
- { "foreign.user_id" => "self.id" },
- { cascade_copy => 0, cascade_delete => 0 },
+ "problems",
+ "FixMyStreet::DB::Result::Problem",
+ { "foreign.user_id" => "self.id" },
+ { cascade_copy => 0, cascade_delete => 0 },
);
-# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-03-15 17:03:37
-# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:LAenO7w6lzCJyPUeosnLTw
+
+# Created by DBIx::Class::Schema::Loader v0.07010 @ 2011-03-23 12:42:18
+# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:z+QRbRAIyy2omaKVfRFTMA
+
+use mySociety::EmailUtil;
+
+=head2 check_for_errors
+
+ $error_hashref = $problem->check_for_errors();
+
+Look at all the fields and return a hashref with all errors found, keyed on the
+field name. This is intended to be passed back to the form to display the
+errors.
+
+TODO - ideally we'd pass back error codes which would be humanised in the
+templates (eg: 'missing','email_not_valid', etc).
+
+=cut
+
+sub check_for_errors {
+ my $self = shift;
+
+ my %errors = ();
+
+ if ( $self->name !~ m/\S/ ) {
+ $errors{name} = _('Please enter your name');
+ }
+ elsif (length( $self->name ) < 5
+ || $self->name !~ m/\s/
+ || $self->name =~ m/\ba\s*n+on+((y|o)mo?u?s)?(ly)?\b/i )
+ {
+ $errors{name} = _(
+'Please enter your full name, councils need this information - if you do not wish your name to be shown on the site, untick the box'
+ );
+ }
+
+ if ( $self->email !~ /\S/ ) {
+ $errors{email} = _('Please enter your email');
+ }
+ elsif ( !mySociety::EmailUtil::is_valid_email( $self->email ) ) {
+ $errors{email} = _('Please enter a valid email');
+ }
+
+ return \%errors;
+}
1;