Added hub.
\n"; $parameters = array($displayname, $id); } } else if (isset($_POST['update_hub'])) { list($name, $id, $args) = parse_parameters($parameters); $q = new HubQuery; $hub = $q->findOneById($id); if ($hub) { $area = get_hub_area($hub); if ($area) $area_id = $area->getId(); if (update_hub($hub, $area_id) !== false) { echo "Updated hub.
\n"; $parameters = array($hub->getDisplayname(), $hub->getId()); } } else { echo "No such hub!
\n"; } } 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['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'])); exit; } function show_hub_summary(&$hub, $editing = false) { if ($editing) echo "Hub: " . htmlspecialchars($hub->getName()) . "";
else echo "
\nHub " . $hub->getStrongLink();
$role = $hub->getRole();
$role_string = get_hub_role_string($hub);
if ($role_string) echo " $role_string";
$d = urlencode($hub->getName());
$i = $hub->getId();
if ($role & $GLOBALS['ROLE_COLLECTION']) {
printf(" Donations", $d, $i);
echo " " . get_small_link("Record", "/donation/record/to/hub/%s/%d", $d, $i);
}
if ($role & $GLOBALS['ROLE_DISTRIBUTION']) printf(" Orders", $d, $i);
if (check_admin(1)) {
echo " " . $hub->getDeleteLink();
}
$area = get_hub_area($hub);
if ($area) echo " in " . $area->getLink();
$city = get_hub_city($hub);
if ($city) echo ", " . $city->getLink(get_city_displayname($city));
}
function show_hubs($address_ids) {
list($first_page, $per_page) = pagination();
$q = new HubQuery;
$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($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) {
$q = new AreaQuery;
$areas = $q->filterByCityId($city->getId())->find();
$area_ids = array();
foreach ($areas as $area) $area_ids[] = $area->getId();
$q = new AddressQuery;
$addresses = $q->filterByAreaId($area_ids)->find();
$address_ids = array();
foreach ($addresses as $address) $address_ids[] = $address->getId();
echo "
Hubs in city " . $city->getLink(get_city_displayname($city)) . ":"; return show_hubs($address_ids); } else echo "
No such city!
\n"; } 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) { $q = new AddressQuery; $addresses = $q->filterByAreaId($area->getId())->find(); $address_ids = array(); foreach ($addresses as $address) $address_ids[] = $address->getId(); echo "Hubs in area " . $area->getLink() . ":"; return show_hubs($address_ids); } else echo "
No such area!
\n"; } function show_hub_areas_form($city_id = null) { $areas = get_city_areas($city_id); if (! count($areas)) { echo "No areas!
\n"; return; } $candidates = array(); foreach ($areas as $area) { if (! count(get_area_hubs($area->getId()))) continue; $candidates[] = $area; } if (! count($candidates)) return; echo "Show hubs in area\n"; echo "\n"; submit("show_in_area", "Show"); } function show_hub_cities_form($city_id = null) { $q = new CityQuery; $cities = $q->orderByName()->find(); if (! count($cities)) { echo "
No cities!
\n"; return; } $candidates = array(); foreach ($cities as $city) { if (! count(get_city_hubs($city->getId()))) continue; $candidates[] = $city; } if (! count($candidates)) return; echo "Show hubs in city\n"; echo "\n"; submit("show_in_city", "Show"); } function show_hub_forms($city_id) { form("noprint standout"); show_hub_areas_form($city_id); show_hub_cities_form($city_id); end_form(); } function show_hub_role_form($role) { return show_role_form($role, $GLOBALS['hub_roles']); } function show_hub_form($hub = null, $area_id = null) { if (! $hub) $hub = new Hub; /* Role. */ echo "
No areas!
\n"; return; } form("noprint"); echo "Add a new hub:
\n"; echo ""; submit("add_hub", "Add"); echo " |
No cities!
\n"; return; } form("noprint standout"); echo "Add a new hub in "; submit("show_add_hub", "Proceed"); echo "
\n"; end_form(); } function update_hub(&$hub, $area_id, $new = false) { global $hub_roles; $role = 0; for ($i = 0; $i < count($hub_roles); $i++) { if ($_POST['role_' . $i] == "on") $role |= (1 << $i); } $displayname = $_POST['displayname']; if (! $displayname) { echo "Must have a name!
\n"; return false; } /* Get address. */ $line = $_POST['address']; $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(); if ($address->isNew()) { /* Changing address. */ //if (! $new) /* XXX: Check for other hubs at the old address. Make this a new address if there are others, but provide a link to update other hubs. */ try { $address->save(); } catch (Exception $e) { echo "Error adding $line.
\n"; return false; } } $telephone1 = $_POST['telephone1']; $telephone2 = $_POST['telephone2']; $email = $_POST['email']; $hub->setRole($role); $hub->setDisplayname($displayname); $hub->setTelephone1($telephone1); $hub->setTelephone2($telephone2); $hub->setEmail($email); $hub->setAddressId($address->getId()); try { $hub->save(); } catch (Exception $e) { if ($new) echo "Error adding $displayname.
\n"; else echo "Error updating $displayname.
\n"; return false; } return true; } function add_hub(&$name) { if (! check_admin(1, "add a hub")) return; $area_id = $_POST['area_id']; if (! is_numeric($area_id)) { echo "Invalid area!
\n"; return false; } $area = get_area_by_id($area_id); if (! $area) { echo "No such area!
\n"; return false; } $hub = new Hub; if (! update_hub($hub, $area_id, true)) return false; return $hub->getId(); } function confirm_delete_hub($name, $id = null) { if (! check_admin(1, "delete a hub")) return; if (isset($id)) $hub = get_hub_by_id($id); else $hub = get_hub_by_name($name); if (! $hub) return false; echo "You must confirm deletion of hub " . $hub->getDisplayname() . ": " . $hub->getDeleteLink(true) . "
\n"; } function delete_hub($name, $id = null, &$city_id = null) { if (! check_admin(1, "delete a hub")) return; if (isset($id)) $hub = get_hub_by_id($id); else $hub = get_hub_by_name($name); if (! $hub) return false; ///* Remember city ID for dropdown. */ //$city_id = $area->getCityId(); try { $hub->delete(); echo "Deleted hub.
\n"; } catch (Exception $e) { echo "Error deleting $name!
\n"; return false; } return true; } function show_hub($name, &$id = null) { if (isset($id)) $hub = get_hub_by_id($id); else $hub = get_hub_by_name($name); if (! $hub) return; form(); show_hub_summary($hub, true); echo ": "; echo "\n"; echo ""; submit("update_hub", "Update"); echo " | \n"; echo "
$name($id) " . print_r($args, true) . "
\n"; if (count($args)) { switch ($args[0]) { case "delete": confirm_delete_hub($name, $id); break; case "confirmdelete": delete_hub($name, $id); break; } } else if (isset($name)) show_hub($name, $id); show_hub_forms($city_id); show_add_new_hub_form($city_id); ?>