Added contact offers.
[readifood.git] / lib / contact.php
index e9c7f4b..13456c8 100644 (file)
   }
 
   function show_contact_form($contact = null, $new = false) {
-    global $contact_roles, $parcel_sizes, $parcel_contents;
+    global $contact_roles, $parcel_sizes, $parcel_contents, $offers;
 
     if (! $contact) $contact = new Contact;
     else if ($contact->getRole() & ($GLOBALS['ROLE_BENEFICIARY'] | $GLOBALS['ROLE_REQUESTER'])) {
     echo "  <td>Notes</td>\n";
     echo "  <td>"; textarea("notes", $contact->getNotes()); echo "</td>\n";
     echo "</tr>\n";
+
+    /* Offers. */
+    $available_offers = get_available_offers($contact);
+    if (count($available_offers)) {
+      echo "<tr>\n";
+      echo "  <td colspan=2><strong>Offers</strong></td>\n";
+      echo "</tr>\n";
+
+      $offer_states = Array();
+      foreach ($available_offers as $offer) {
+        $offer_id = $offer->getId();
+        $state = get_offer_state($contact, $offer);
+        $state_id = is_null($state) ? $GLOBALS['OFFER_ELIGIBLE'] : $state->getState();
+        $offer_states[$offer_id] = $state_id;
+        echo "<tr>\n";
+        echo "  <td>" . $offer->getDescription() . "</td>\n";
+        echo "  <td><select name=\"offer$offer_id\">\n";
+        for ($i = 0; $i < count($offers); $i++) {
+          option("offer$offer_id", 1 << $i, $offers[$i], $state_id == 1 << $i);
+        }
+        echo "</select></td>\n";
+        echo "</tr>\n";
+      }
+      hidden("offer_states", urlencode(json_encode($offer_states)));
+    }
+    else {
+      echo "<tr>\n";
+      echo "  <td colspan=2><strong>No available offers</strong></td>\n";
+      echo "</tr>\n";
+      hidden("offer_states", "{}");
+    }
   }
 
   function show_new_contact_form($city_id = null) {
       return false;
     }
 
+    if ($_POST['offer_states']) {
+      try {
+        $offer_states = json_decode(urldecode($_POST['offer_states']));
+      }
+      catch (Exception $e) {
+        echo "<p>Error getting offer states JSON.</p>\n";
+        return false;
+      }
+
+      $now = time();
+      foreach ($offer_states as $offer_id => $state_id) {
+        $new_state_id = strval($_POST["offer$offer_id"]);
+        if ($new_state_id == "") continue;
+        if ($new_state_id == strval($state_id)) continue;
+
+        $offer_state = new OfferState;
+        $offer_state->setUpdated($now);
+        $offer_state->setOfferId($offer_id);
+        $offer_state->setUserId($GLOBALS['user_id']);
+        $offer_state->setContactId($contact->getId());
+        $offer_state->setState($new_state_id);
+
+        try {
+          $offer_state->save();
+        }
+        catch (Exception $e) {
+          echo "<p>Error updating offer.</p>\n";
+          echo "<p>" . $e->getMessage() . "</p>\n";
+          return false;
+        }
+      }
+    }
+
     return true;
   }