Added contact offers.
[readifood.git] / lib / hub.php
index 7a18d47..e5a551a 100644 (file)
@@ -1,10 +1,12 @@
 <?php
 
   if (isset($_POST['show_add_hub'])) {
+    set_last_selected("city_id", $_POST['city_id']);
     $city_id = $_POST['city_id'];
     show_new_hub_form($city_id);
   }
   else if (isset($_POST['add_hub'])) {
+    set_last_selected("area_id", $_POST['area_id']);
     $id = add_hub($displayname);
     if ($id !== false) {
       echo "<p>Added hub.</p>\n";
       echo "<p>No such hub!</p>\n";
     }
   }
-  else if ($_POST['area_id']) {
+  else if ($_POST['show_in_area']) {
+    set_last_selected("area_id", $_POST['area_id']);
     $q = new AreaQuery;
     $area = $q->findOneById($_POST['area_id']);
     header(sprintf("Location: http%s://%s/%s/in/area/%s/%d", ($_SERVER['HTTPS']) ? "s" : "", $_SERVER['HTTP_HOST'], $module, urlencode($area->getName()), $_POST['area_id']));
     exit;
   }
-  else if ($_POST['city_id']) {
+  else if ($_POST['show_in_city']) {
+    set_last_selected("city_id", $_POST['city_id']);
     $q = new CityQuery;
     $city = $q->findOneById($_POST['city_id']);
     header(sprintf("Location: http%s://%s/%s/in/city/%s/%d", ($_SERVER['HTTPS']) ? "s" : "", $_SERVER['HTTP_HOST'], $module, urlencode($city->getName()), $_POST['city_id']));
     $role = $hub->getRole();
     $role_string = get_hub_role_string($hub);
     if ($role_string) echo " $role_string";
-    if ($role & $GLOBALS['ROLE_COLLECTION']) printf(" <a class=\"small\" href=\"/donation/to/hub/%s/%d\">Donations</a>", urlencode($hub->getName()), $hub->getId());
-    if ($role & $GLOBALS['ROLE_DISTRIBUTION']) printf(" <a class=\"small\" href=\"/order/to/hub/%s/%d\">Orders</a>", urlencode($hub->getName()), $hub->getId());
+    $d = urlencode($hub->getName());
+    $i = $hub->getId();
+    if ($role & $GLOBALS['ROLE_COLLECTION']) {
+      printf(" <a class=\"small\" href=\"/donation/to/hub/%s/%d\">Donations</a>", $d, $i);
+      echo " " . get_small_link("Record", "/donation/record/to/hub/%s/%d", $d, $i);
+    }
+    if ($role & $GLOBALS['ROLE_DISTRIBUTION']) printf(" <a class=\"small\" href=\"/order/to/hub/%s/%d\">Orders</a>", $d, $i);
     if (check_admin(1)) {
       echo " " . $hub->getDeleteLink();
     }
     if ($city) echo ", " . $city->getLink(get_city_displayname($city));
   }
 
-  function show_hubs($offset, $per_page, $address_ids) {
+  function show_hubs($address_ids) {
+    list($first_page, $per_page) = pagination();
     $q = new HubQuery;
-    $hubs = $q->filterByAddressId($address_ids)->find();
+    $hubs = $q->filterByAddressId($address_ids)->orderByDisplayname()->orderById()->paginate($first_page, $per_page);
     if (count($hubs)) {
       foreach ($hubs as $hub) show_hub_summary($hub);
+      show_pagination($hubs);
     }
     else echo " none";
   }
 
-  function show_city_hubs($offset, $per_page, $city_name, $city_id = null) {
+  function show_city_hubs($city_name, $city_id = null) {
     if (isset($city_id)) $city = get_city_by_id($city_id);
     else if ($city_name) $city = get_city_by_name($city_name);
     if ($city) {
       foreach ($addresses as $address) $address_ids[] = $address->getId();
 
       echo "<p>Hubs in city " . $city->getLink(get_city_displayname($city)) . ":";
-      return show_hubs($offset, $per_page, $address_ids);
+      return show_hubs($address_ids);
     }
     else echo "<p>No such city!</p>\n";
   }
 
-  function show_area_hubs($offset, $per_page, $area_name, $area_id = null) {
+  function show_area_hubs($area_name, $area_id = null) {
     if (isset($area_id)) $area = get_area_by_id($area_id);
     else if ($area_name) $area = get_area_by_name($area_name);
     if ($area) {
       foreach ($addresses as $address) $address_ids[] = $address->getId();
 
       echo "<p>Hubs in area " . $area->getLink() . ":";
-      return show_hubs($offset, $per_page, $address_ids);
+      return show_hubs($address_ids);
     }
     else echo "<p>No such area!</p>\n";
   }
       option("area_id", $area->getId(), get_area_displayname($area));
     }
     echo "</select>\n";
-    echo "<input type=\"submit\" value=\"Show\">\n";
+    submit("show_in_area", "Show");
   }
 
   function show_hub_cities_form($city_id = null) {
       option("city_id", $city->getId(), get_city_displayname($city), $city_id);
     }
     echo "</select>\n";
-    echo "<input type=\"submit\" value=\"Show\">\n";
+    submit("show_in_city", "Show");
   }
 
   function show_hub_forms($city_id) {
     /* Postcode. */
     echo "<tr>\n";
     echo "  <td>Postcode</td>\n";
-    echo "  <td>"; input("postcode", $address->getPostcode()); echo get_address_map_link($address); echo "</td>\n";
+    $postcode = $address->getPostcode();
+    if (validate_postcode($postcode)) {
+      echo "  <td>"; input("postcode", $postcode); echo get_address_map_link($address); echo "</td>\n";
+    }
+    else {
+      echo "  <td>"; input("postcode", $address->getPostcode()); echo " (invalid)</td>\n";
+    }
     echo "</tr>\n";
 
     /* Telephone. */
 
     /* Get address. */
     $line = $_POST['address'];
-    $postcode = $_POST['postcode'];
+    $postcode = trim($_POST['postcode']);
+    if ($postcode) {
+      $postcode = format_postcode($_POST['postcode'], true);
+      if (! $postcode) return false;
+    }
     $q = new AddressQuery;
     /* XXX: Finding by area properly? */
     $address = $q->filterByAreaId($area_id)->filterByLine($line)->filterByPostcode($postcode)->findOneOrCreate();
           $area = $q->findOneById($area_id);
           $city = get_area_city($area);
           if ($city) $city_id = $city->getId();
-          show_area_hubs(0, 10, $parameters[2], $area_id);
+          show_area_hubs($parameters[2], $area_id);
         break;
 
         case "city":
           $_POST['city_id'] = $city_id;
           $q = new CityQuery;
           $city = $q->findOneById($city_id);
-          show_city_hubs(0, 10, $parameters[2], $city_id);
+          show_city_hubs($parameters[2], $city_id);
         break;
       }
     }