0) { $name = array_shift($parameters); /* Recall that we shifted. */ if (count($parameters) > 0) { if (is_numeric($parameters[0])) { $id = array_shift($parameters); } } $args = $parameters; } return array($name, $id, $args); } function get_city_by_name($name, $postcode_area = null, $verbose = true) { $q = new CityQuery; $m = $q->filterByName(urldecode($name)); if (isset($postcode_area)) { $m->filterByPostcodeArea($postcode_area); } $cities = $m->find(); switch ($m->count()) { case 0: if ($verbose) echo "

No such city!

\n"; return null; case 1: return $cities[0]; default: if ($verbose) echo "

Can't identify city uniquely.

!\n"; return null; } } function get_city_by_id($id, $verbose = true) { $q = new CityQuery; $city = $q->findOneById($id); if (! $q->count()) { if ($verbose) echo "

No such city!

\n"; return null; } return $city; } function get_area_by_name($name, $verbose = true) { $q = new AreaQuery; $areas = $q->filterByName(urldecode($name))->find(); switch ($q->count()) { case 0: if ($verbose) echo "

No such area!

\n"; return null; case 1: return $areas[0]; default: if ($verbose) echo "

Can't identify area uniquely.

!\n"; return null; } } function get_area_by_id($id, $verbose = true) { $q = new AreaQuery; $area = $q->findOneById($id); if (! $q->count()) { if ($verbose) echo "

No such area!

\n"; return null; } return $area; } function get_area_city($area) { $q = new CityQuery; return $q->findOneById($area->getCityId()); } function get_contact_by_name($name, $verbose = true) { $q = new ContactQuery; $contact = $q->filterByDisplayname(urldecode($name))->find(); switch ($q->count()) { case 0: if ($verbose) echo "

No such contact!

\n"; return null; case 1: return $contacts[0]; default: if ($verbose) echo "

Can't identify contact uniquely.

!\n"; return null; } } function get_contact_by_id($id, $verbose = true) { $q = new ContactQuery; $contact = $q->findOneById($id); if (! $q->count()) { if ($verbose) echo "

No such contact!

\n"; return null; } return $contact; } function get_hub_by_name($name, $verbose = true) { $q = new HubQuery; $hubs = $q->filterByDisplayname(urldecode($name))->find(); switch ($q->count()) { case 0: if ($verbose) echo "

No such hub!

\n"; return null; case 1: return $hubs[0]; default: if ($verbose) echo "

Can't identify hub uniquely.

!\n"; return null; } } function get_hub_by_id($id, $verbose = true) { $q = new HubQuery; $hub = $q->findOneById($id); if (! $q->count()) { if ($verbose) echo "

No such hub!

\n"; return null; } return $hub; } function get_donation_by_id($id, $verbose = true) { $q = new DonationQuery; $donation = $q->findOneById($id); if (! $q->count()) { if ($verbose) echo "

No such donation!

\n"; return null; } return $donation; } function get_order_by_id($id, $verbose = true) { $q = new OrderQuery; $order = $q->findOneById($id); if (! $q->count()) { if ($verbose) echo "

No such order!

\n"; return null; } return $order; } function get_user_by_contact_id($id, $verbose = true) { $q = new UserQuery; $user = $q->findOneByContactId($id); if (! $q->count()) { if ($verbose) echo "

No such user!

\n"; return null; } return $user; } function get_city_displayname($city) { return $city->getName() . ", " . $city->getPostcodeArea(); } function get_area_displayname($area) { return $area->getName() . " in " . get_city_displayname(CityQuery::create()->findOneById($area->getCityId())); } function get_donation_displayname($donation) { return sprintf("%0.2fkg on %s", $donation->getQuantity() / 1000, $donation->getDate()); } function get_order_parcel_string($order) { global $parcel_sizes, $parcel_contents; $parcel_size = ""; for ($i = 0 ; $i < count($parcel_sizes); $i++) { if ($order->getParcel() & (1 << $i)) { $parcel_size = $parcel_sizes[$i]; break; } } $selected = array(); for ($i = count($parcel_sizes); $i < count($parcel_contents); $i++) { if ($order->getParcel() & (1 << $i)) $selected[] = $parcel_contents[$i]; } return implode(": ", array($parcel_size, implode(", ", $selected))); } function get_order_displayname($order) { return sprintf("%s on %s", get_order_parcel_string($order), $order->getDate()); } function get_address_area($address) { $q = new AreaQuery; return $q->findOneById($address->getAreaId()); } function get_contact_address($contact) { $q = new AddressQuery; return $q->findOneById($contact->getAddressId()); } function get_contact_area($contact) { $address = get_contact_address($contact); if (! $address) return null; return get_address_area($address); } function get_contact_city($contact) { $area = get_contact_area($contact); if (! $area) return null; return get_area_city($area); } /* Parcel strings are the same so this can work. */ function get_contact_parcel_string($contact) { return get_order_parcel_string($contact); } /* Hub and Contact are similar enough that this can work. */ function get_hub_address($hub) { return get_contact_address($hub); } /* Hub and Contact are similar enough that this can work. */ function get_hub_area($hub) { return get_contact_area($hub); } /* Hub and Contact are similar enough that this can work. */ function get_hub_city($hub) { return get_contact_city($hub); } function get_area_contacts($area_id = null, $role = null) { $q = new ContactQuery; if (isset($area_id)) $q->useAddressQuery()->filterByAreaId($area_id)->endUse(); if (isset($role)) $q->where("role & $role"); return $q->orderByDisplayname()->find(); } function get_area_requesters($area_id = null) { return get_area_contacts($area_id, $GLOBALS['ROLE_REQUESTER']); } function get_area_beneficiaries($area_id = null) { return get_area_contacts($area_id, $GLOBALS['ROLE_BENEFICIARY']); } function get_area_donors($area_id = null) { return get_area_contacts($area_id, $GLOBALS['ROLE_DONOR']); } function get_city_contacts($city_id = null, $role = null) { /* XXX */ $area_ids = array(); $areas = get_city_areas($city_id); foreach ($areas as $area) $area_ids[] = $area->getId(); return get_area_contacts($area_ids, $role); } function get_city_requesters($city_id = null) { return get_city_contacts($city_id, $GLOBALS['ROLE_REQUESTER']); } function get_city_beneficiaries($city_id = null) { return get_city_contacts($city_id, $GLOBALS['ROLE_BENEFICIARY']); } function get_city_donors($city_id = null) { return get_city_contacts($city_id, $GLOBALS['ROLE_DONOR']); } function get_city_drivers($city_id = null) { return get_city_contacts($city_id, $GLOBALS['ROLE_DRIVER']); } function get_role_string($object, $roles) { $role = $object->getRole(); $selected = array(); for ($i =0; $i < count($roles); $i++) { if ($role & (1 << $i)) $selected[] = $roles[$i]; } return implode(", ", $selected); } function get_contact_role_string($contact) { return get_role_string($contact, $GLOBALS['contact_roles']); } function get_hub_role_string($hub) { return get_role_string($hub, $GLOBALS['hub_roles']); } function show_role_form($role, $roles) { for ($i = 0; $i < count($roles); $i++) { echo " $roles[$i]\n"; } } function get_area_hubs($area_id = null) { $q = new HubQuery; if (isset($area_id)) $q->useAddressQuery()->filterByAreaId($area_id)->endUse(); return $q->orderByDisplayname()->find(); } function get_city_areas($city_id = null) { $q = new AreaQuery; $q->join("City")->orderBy("City.Name"); if (isset($city_id)) $q->filterByCityId($city_id); return $q->orderByName()->find(); } function get_city_areas_with_contacts($city_id = null, $role = null) { $q = new AreaQuery; $q->join("City")->orderBy("City.Name"); if (isset($city_id)) $q->filterByCityId($city_id); /* XXX */ if (isset($role)) $q->useAddressQuery()->join("Contact")->useContactQuery()->where("role & $role")->endUse()->endUse(); else $q->useAddressQuery()->join("Contact")->endUse(); return $q->orderByName()->distinct()->find(); } function get_city_areas_with_hubs($city_id = null) { $q = new AreaQuery; $q->join("City")->orderBy("City.Name"); if (isset($city_id)) $q->filterByCityId($city_id); $q->useAddressQuery()->join("Hub")->endUse(); return $q->orderByName()->distinct()->find(); } function get_city_hubs($city_id = null) { $q = new HubQuery; if (isset($city_id)) $q->useAddressQuery()->useAreaQuery()->filterByCityId($city_id)->endUse()->endUse(); return $q->orderByDisplayname()->find(); } function iso8601_to_ymd($iso8601) { return split("-", $iso8601); } function ymd_to_iso8601($name) { $y = $_POST[$name . "_y"]; if (! $y) return null; $m = $_POST[$name . "_m"]; if (! $m) $m = 1; $d = $_POST[$name . "_d"]; if (! $d) $d = 1; return sprintf("%04d-%02d-%02d", $y, $m, $d); } function show_date_form($name, $date = null) { $past = 60; $future = 60; echo "\n"; return; if (! isset($date)) $date = date('Y-m-d'); list($y, $m, $d) = iso8601_to_ymd($date); echo "Year: "; echo "Month: "; echo "Day: "; } include_once("$lib_root/admin.php"); include_once("$lib_root/forms.php"); ?>