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 pagination() { $first_page = 1; $per_page = $GLOBALS['default_page_size']; parse_str($_SERVER['QUERY_STRING'], $params); if (array_key_exists('page', $params)) if (is_numeric($params['page'])) $first_page = $params['page']; if (array_key_exists('size', $params)) if (is_numeric($params['size'])) $per_page = $params['size']; return array($first_page, $per_page); } function page_link($alt, $n, $cur, $max, $size) { $links = array(); if ($n < 1 || $n == $cur || $n > $max) return $alt; $params = array('page' => $n); if ($size != $GLOBALS['default_page_size']) $params['size'] = $size; $url = http_build_query($params); return "$alt "; } function show_pagination($pager, $n = 5) { if (! $pager->haveToPaginate()) return; list($first_page, $per_page) = pagination(); $pages = ceil($pager->getNbResults() / $per_page); /* Highlight the fact we skipped some pages. */ $linked_pages = $pager->getLinks($n); $first_link = $linked_pages[0]; $last_link = end($linked_pages); $links = array(); $links[] = page_link('First', 1, $first_page, $pages, $per_page); $links[] = page_link('Previous', $first_page - 1, $first_page, $pages, $per_page); if ($first_link > 1) $links[] = page_link('...', $first_page, $pages, $per_page); foreach ($linked_pages as $link) $links[] = page_link($link, $link, $first_page, $pages, $per_page); if ($last_link < $pages) $links[] = page_link('...', $first_page, $pages, $per_page); $links[] = page_link('Next', $first_page + 1, $first_page, $pages, $per_page); $links[] = page_link('Last', $pages, $first_page, $pages, $per_page); echo "
Page: "; echo implode(' / ', $links); echo "
\n"; } 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) { # mrt=loc specifies a location search. $map = "maps.google.co.uk/maps?q=" . urlencode($postcode) . "&mrt=loc"; $url = "http://$map"; # output=embed allows display in an iframe. # iwloc=near hides the popup window for the embedded view. $embed = $GLOBALS['http'] . "://$map&output=embed&iwloc=near"; $html = " "; $html .= get_small_link_with_id("map", "Map", $url); $html .= ""; return $html; } } 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 " \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_with_id() { /* Args are