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_order_ids_by_state($state_mask) { $order_ids = array(); $dbh = Propel::getConnection(); $sth = $dbh->prepare("select * from OrderState o where updated=(select max(updated) from OrderState where order_id=o.order_id) and state & $state_mask"); $sth->execute(); $order_states = OrderStatePeer::populateObjects($sth); foreach ($order_states as $order_state) $order_ids[] = $order_state->getOrderId(); return $order_ids; } function get_beneficiary_orders($contact, $state_mask = null) { $q = new OrderQuery; $q->filterByBeneficiaryId($contact->getId()); if ($state_mask) $q->filterById(get_order_ids_by_state($state_mask)); return $q->orderByDate()->find(); } function get_requester_orders($contact, $state_mask = null) { $q = new OrderQuery; $q->filterByRequesterId($contact->getId()); if ($state_mask) $q->filterById(get_order_ids_by_state($state_mask)); return $q->orderByDate()->find(); } function get_contact_orders($contact, $state_mask = null) { $q = new OrderQuery; $q->filterByBeneficiaryId($contact->getId())->_or()->filterByRequesterId($contact->getId()); if ($state_mask) $q->filterById(get_order_ids_by_state($state_mask)); return $q->orderByDate()->find(); } 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 = null; 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]; } $ret = implode(": ", array($parcel_size, implode(", ", $selected))); $ret = preg_replace('/^: /', '', $ret); $ret = preg_replace('/: $/', '', $ret); return $ret; } function get_order_displayname($order) { return sprintf("%s on %s", get_order_parcel_string($order), $order->getDate()); } function get_order_state_string($order_state = null) { global $states; if (is_null($order_state)) return null; for ($i = 0; $i < count($states); $i++) { if ($order_state->getState() & (1 << $i)) { return $states[$i]; } } return "unknown"; } function get_order_state($order) { $q = new OrderStateQuery(); return $q->filterByOrderId($order->getId())->orderByUpdated('desc')->findOne(); } function get_order_summary($order) { $ret = "Order "; $order_state = get_order_state($order); if ($order_state) $ret = "" . ucfirst(get_order_state_string($order_state)) . " order "; $ret .= $order->getStrongLink($order->getId()) . ": " . get_order_displayname($order); if (check_admin(1)) $ret .= " " . $order->getDeleteLink(); /* XXX: Should pull from query. */ $q = new ContactQuery; $contact = $q->findOneById($order->getRequesterId()); if ($contact) { $ret .= " referred by " . $contact->getLink(); $area = get_contact_area($contact); if ($area) $ret .= " in " . $area->getLink(); } $q = new ContactQuery; $contact = $q->findOneById($order->getBeneficiaryId()); if ($contact) { $ret .= " for " . $contact->getLink(); $area = get_contact_area($contact); if ($area) $ret .= " in " . $area->getLink(); } if ($order->getHubId()) { $q = new HubQuery; $hub = $q->findOneById($order->getHubId()); if ($hub) $ret .= " to hub " . $hub->getLink(); $area = get_hub_area($hub); if ($area) $ret .= " in " . $area->getLink(); } return $ret; } function get_address_area($address) { $q = new AreaQuery; return $q->findOneById($address->getAreaId()); } function get_address_map_link($address) { $postcode = trim($address->getPostcode()); if ($postcode) { return " " . get_small_link("Map", "http://maps.google.co.uk/maps?q=" . urlencode($postcode)); } } 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) { if (! isset($date)) $date = date('Y-m-d', time()); datepicker($name, $date); } function validate_postcode($postcode, &$outward = null, &$inward = null) { /* Valid postcode formats (BS7666): AN NLL ABN NLL ANN NLL ABNN NLL ABND NLL ANC NLL Where N is a number; A is a letter not including Q, V, X; B is a letter not including I, J, Z; C is a letter from the set ABCDEFGHJKSTUW; D is a letter from the set ABEHMNPRVWXY; L is a letter from the set ABDEFGHJLNPQRSTUWXYZ. The postcode GIR 0AA is also valid. */ $outward = $inward = null; /* Treat blank as valid for convenience. */ $postcode = trim($postcode); if (! $postcode) return true; $A = '[ABCDEFGHIJKLMNOPRSTUWYZ]'; $B = '[ABCDEFGHKLMNOPQRSTUVWXY]'; $C = '[ABCDEFGHJKSTUW]'; $D = '[ABEHMNPRVWXY]'; $L = '[ABDEFGHJLNPQRSTUWXYZ]'; $N = '\d'; if (! preg_match("/^($A$N|$A$B$N|$A$N$N|$A$B$N$N|$A$B$N$D|$A$N$C|GIR)\s*($N$L$L)$/", $postcode, $m)) return false; if ($m[1] == "GIR" && $m[2] != "0AA") return false; list($ignored, $outward, $inward) = $m; return true; } function format_postcode($postcode, $complain = true) { if (validate_postcode($postcode, $outward, $inward)) { return "$outward $inward"; } if ($complain) { echo "

Invalid postcode!

\n"; return null; } } function get_small_link() { /* Args are , , [ ...] */ $args = func_get_args(); $html = htmlspecialchars(array_shift($args)); $url = array_shift($args); return vsprintf("$html\n", $args); } function small_link() { echo call_user_func_array("get_small_link", func_get_args()); } include_once("$lib_root/admin.php"); include_once("$lib_root/forms.php"); ?>