re-work what interest.pl does
authorTony Cook <tony@develop-help.com>
Fri, 12 Dec 2014 00:07:35 +0000 (11:07 +1100)
committerTony Cook <tony@develop-help.com>
Fri, 12 Dec 2014 00:07:35 +0000 (11:07 +1100)
site/cgi-bin/modules/BSE/UI/Interest.pm
site/data/db/bse_msg_base.data
site/data/db/bse_msg_defaults.data
site/templates/admin/interestemail.tmpl
site/templates/interest/askagain_base.tmpl
site/templates/interest/confirm_base.tmpl
site/templates/shopitem.tmpl

index 19bef65..58e7a14 100644 (file)
@@ -2,42 +2,92 @@ package BSE::UI::Interest;
 use strict;
 use base 'BSE::UI::Dispatch';
 use BSE::ComposeMail;
+use BSE::TB::Products;
+use BSE::Util::Tags qw(tag_object);
 
-our $VERSION = "1.000";
+our $VERSION = "1.001";
 
 my %actions =
   (
+   default => 1,
+   form => 1,
    interest => 1,
   );
 
 sub actions { \%actions };
 
-sub default_action { "interest" }
+sub default_action { "default" }
+
+sub req_default {
+  my ($self, $req) = @_;
+
+  my $email = $req->cgi->param('email');
+  if ($email =~ /\S/) {
+    return $self->req_interest($req);
+  }
+  else {
+    return $self->req_form($req);
+  }
+}
+
+sub req_form {
+  my ($self, $req, $errors) = @_;
+
+  $errors ||= {};
+  $req->message($errors);
+
+  my $cgi = $req->cgi;
+  my $product_id = $cgi->param('product_id');
+  defined($product_id)
+    or return $self->error($req, { error => "msg:bse/interest/noproductid" });
+  my $product = BSE::TB::Products->getByPkey($product_id)
+    or return $self->error($req, { error => [ "msg:bse/interest/badproductid", $product_id ] });
+
+  my $email = $cgi->param('email');
+  unless (defined $email && $email =~ /\S/) {
+    if ($req->siteuser) {
+      $email = $req->siteuser->email;
+    }
+    else {
+      $email = '';
+    }
+  }
+
+  $req->set_variable(product => $product);
+  $req->set_variable(email => $email);
+  $req->set_variable(errors => $errors);
+  my %acts =
+    (
+     $req->dyn_user_tags,
+     email => $email,
+    );
+
+  return $req->response('interest/askagain', \%acts);
+}
 
 sub req_interest {
   my ($self, $req) = @_;
 
   my $cfg = $req->cfg;;
-
   my $cgi = $req->cgi;
+
+  my $product_id = $cgi->param('product_id');
+  defined($product_id)
+    or return $self->error($req, { error => "msg:bse/interest/noproductid" });
+  my $product = BSE::TB::Products->getByPkey($product_id)
+    or return $self->error($req, { error => [ "msg:bse/interest/badproductid", $product_id ] });
+
+  my %errors;
   my $useremail = $cgi->param('email');
-  unless ($useremail) {
-    my $user = $req->siteuser;
-    if ($user) {
-      $useremail = $user->{email};
-    }
+  if (!defined $useremail || $useremail !~ /\S/) {
+    $errors{email} = "msg:bse/interest/noemail";
   }
-  unless ($useremail) {
-    my $msg = $req->catmsg("msg:bse/interest/noemail", [],
-                         "Please enter an email address, register or logon");
-    return $self->error($req, $msg, "interest/askagain");
+  elsif ($useremail !~ /.\@./) {
+    $errors{email} = "msg:bse/interest/bademail";
   }
 
-  if ($useremail !~ /.\@./) {
-    my $msg = $req->catmsg("msg:bse/interest/bademail", [],
-                         "Please enter a valid email address.");
-    return $self->error($req, $msg, "interest/askagain");
-  }
+  %errors
+    and return $self->req_form($req, \%errors);
 
   # in theory we have an email address at this point
   my $mailer = BSE::ComposeMail->new(cfg => $cfg);
@@ -48,11 +98,6 @@ sub req_interest {
     print STDERR "No email configured for interest notify, set [interest].notify\n";
     return;
   }
-#
-  my $product = $cgi->param('product');
-  defined($product) or $product = '';
-  my $product_id = $cgi->param('product_id');
-  defined($product_id) or $product_id = '';
 
   $req->set_variable(email => $useremail);
   $req->set_variable(product => $product);
@@ -62,19 +107,29 @@ sub req_interest {
   %acts =
     (
      $req->dyn_user_tags(),
-     product => sub { $product },
-     product_id => sub { $product_id },
-     email => sub { $useremail },
+     product => [ \&tag_object, $product ],
+     product_id => $product_id,
+     email => $useremail,
     );
 
   my $subject = "User registered interest";
-  $subject .= " in product '$product'" if $product;
+  $subject .= " in product '" . $product->title . "'";
 
-  unless ($mailer->send(template => 'admin/interestemail',
-                       acts => \%acts,
-                       to=>$email,
-                       from=>$email,
-                       subject=>$subject)) {
+  my %vars =
+    (
+     product => $product,
+     email => $email,
+     siteuser => $req->siteuser,
+    );
+  unless ($mailer->send
+         (
+          template => 'admin/interestemail',
+          acts => \%acts,
+          to=>$email,
+          from=>$email,
+          subject=>$subject,
+          vars => \%vars
+         )) {
     return $self->error($req, "While sending email: ".$mailer->errstr);
   }
 
index 4f05804..f324c25 100644 (file)
@@ -1,5 +1,5 @@
 --
-# VERSION=1.008
+# VERSION=1.009
 id: bse/
 description: BSE messages
 
@@ -14,6 +14,12 @@ description: displayed when no email address has been entered and the siteuser i
 id: bse/interest/bademail
 description: displayed when the supplied email address is invalid
 
+id: bse/interest/noproductid
+description: displayed when no product id is supplied
+
+id: bse/interest/badproductid
+description: displayed when a product cannot be found for the supplied product id
+
 id: bse/user/
 description: <<TEXT
 Messages displayed by user.pl (member user registration, logon, etc)
index 8cd4bc4..a077cca 100644 (file)
@@ -1,5 +1,5 @@
 ---
-# VERSION=1.007
+# VERSION=1.009
 # defaults for the following
 language_code: en
 priority: 0
@@ -10,6 +10,12 @@ message: Please enter an email address, or please logon.
 id: bse/interest/bademail
 message: Email address invalid.
 
+id: bse/interest/noproductid
+message: No product id supplied
+
+id: bse/interest/badproductid
+message: Unknown product id '%1:s'
+
 id: bse/user/needlogon
 message: Please enter your username
 
index 8860c11..8c88569 100644 (file)
@@ -1,7 +1,7 @@
 
-A user registered interest in product '<:product:>'
+A user registered interest in product '<:= product.title |raw:>'
 
-Email: <:email:>
+Email: <:= email |raw:>
 
 Your friendly BSE shop
-<:cfg site name:>
\ No newline at end of file
+<:= cfg.entry("site", "name") |raw:>
\ No newline at end of file
index f58c090..ca56362 100644 (file)
@@ -1,21 +1,23 @@
 <:wrap base.tmpl:>
-<form method="POST" action="/cgi-bin/interest.pl">
-<:ifCgi product:><input type=hidden name=product value="<:cgi product |h:>"><:or:><:eif:>
-<:ifCgi product_id:><input type=hidden name=product_id value="<:cgi product_id |h:>"><:or:><:eif:>
+<form method="post" action="/cgi-bin/interest.pl">
+<input type="hidden" name="product_id" value="<:= product.id :>">
 <div align=center>
     <table width="350">
+<:.if request.message :>
       <tr> 
-      <th colspan="2" align="center"> 
-        <p><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><b><:msg:></b></font></p>
+      <th colspan="3" align="center"> 
+        <p><font face="Verdana, Arial, Helvetica, sans-serif" size="3"><b><:= request.message :></b></font></p>
       </th>
     </tr>
+<:.end if:>
     <tr>
       <td><font face="Verdana, Arial, Helvetica, sans-serif" size="2">Email:</font></td>
-      <td><input type=text name=email value=<:cgi email |h:>></td>
+      <td><input type="text" name="email" value="<:= email :>"></td>
+      <td>[:.call "error_img", "field":"email" :]</td>
     </tr>
     <tr> 
-        <td colspan="2" align="right"> 
-          <input type=submit value="Register Interest">
+        <td colspan="3" align="right"> 
+          <input type="submit" name="a_interest" value="Register Interest">
       </td>
     </tr>
   </table>
index d481005..cc34882 100644 (file)
@@ -8,9 +8,9 @@
     </tr>
     <tr> 
       <td colspan="2"> 
-        <p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">The shop owner has been notified of your interest<:ifProduct:> in product '<:product |h:>'<:or:><:eif:>.</font></p>
+        <p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">The shop owner has been notified of your interest in product '<:= product.title :>'.</font></p>
            <p><font face="Verdana, Arial, Helvetica, sans-serif" size="2">When the 
-          product becomes available you will be contacted through <b><:email |h:></b>.</font></p>
+          product becomes available you will be contacted through <b><:= email :></b>.</font></p>
       </td>
     </tr>
   </table>
index 1329951..1ce7c87 100644 (file)
@@ -93,7 +93,7 @@
           <td>
             <form name="notifyme" method="post" action="/cgi-bin/interest.pl">
               <font face="Arial, Helvetica, sans-serif" size="4"><b>Coming soon!</b></font> 
-              <input type="hidden" name="product" value="<:product title:>">
+              <input type="hidden" name="product_id" value="<:product id:>">
               <p><font face="Verdana, Arial, Helvetica, sans-serif" size="-2">Yes, 
                 I want this product, notify me when it becomes available</font></p>
               <table border="0" cellspacing="0" cellpadding="0">