3 if (isset($_POST['show_add_donation'])) {
4 $area_id = $_POST['area_id'];
5 show_new_donation_form($area_id);
7 else if (isset($_POST['add_donation'])) {
10 echo "<p>Donation recorded.</p>\n";
11 $parameters = array("id", $id);
14 else if (isset($_POST['update_donation'])) {
15 list($ignored, $id, $args) = parse_parameters($parameters);
16 $q = new DonationQuery;
17 $donation = $q->findOneById($id);
19 if (update_donation($donation) !== false) {
20 echo "<p>Updated donation.</p>\n";
21 $parameters = array("id", $donation->getId());
25 echo "<p>No such contact!</p>\n";
28 else if ($_POST['area_id']) {
30 $area = $q->findOneById($_POST['area_id']);
31 /* XXX: Function to build URL because we need to set a class in links. */
32 header(sprintf("Location: http%s://%s/%s/in/area/%s/%d", ($_SERVER['HTTPS']) ? "s" : "", $_SERVER['HTTP_HOST'], $module, urlencode($area->getName()), $_POST['area_id']));
35 else if ($_POST['city_id']) {
37 $city = $q->findOneById($_POST['city_id']);
38 header(sprintf("Location: http%s://%s/%s/in/city/%s/%d", ($_SERVER['HTTPS']) ? "s" : "", $_SERVER['HTTP_HOST'], $module, urlencode($city->getName()), $_POST['city_id']));
42 function show_donations($offset, $per_page, $contact_ids = null, $hub_ids = null) {
43 $q = new DonationQuery;
44 if (isset($contact_ids)) $q->filterByContactId($contact_ids);
45 if (isset($hub_ids)) $q->filterByHubId($hub_ids);
46 $donations = $q->find();
47 if (count($donations)) {
48 foreach ($donations as $donation) {
49 echo "<br>\nDonation " . $donation->getStrongLink($donation->getId()) . ": " . get_donation_displayname($donation);
51 /* XXX: Should pull from query. */
52 $q = new ContactQuery;
53 $contact = $q->findOneById($donation->getContactId());
54 if ($contact) echo " from " . $contact->getLink();
57 $hub = $q->findOneById($donation->getHubId());
59 echo " to " . $hub->getLink();
60 $area = get_hub_area($hub);
62 echo " in " . $area->getLink();
63 $city = get_area_city($area);
64 if ($city) echo ", " . $city->getLink(get_city_displayname($city));
68 echo " " . $donation->getDeleteLink();
75 function show_city_donations($offset, $per_page, $city_name, $city_id = null) {
76 if (isset($city_id)) $city = get_city_by_id($city_id);
77 else if ($city_name) $city = get_city_by_name($city_name);
79 $hubs = get_city_hubs($city->getId());
81 foreach ($hubs as $hub) $hub_ids[] = $hub->getId();
83 echo "<p>Donations in city " . $city->getLink(get_city_displayname($city)) . ":";
84 return show_donations($offset, $per_page, null, $hub_ids);
86 else echo "<p>No such city!</p>\n";
89 function show_contact_donations($offset, $per_page, $contact_name, $contact_id = null) {
90 if (isset($contact_id)) $contact = get_contact_by_id($contact_id);
91 else if ($contact_name) $contact = get_contact_by_name($contact_name);
93 echo "<p>Donations from contact " . $contact->getLink() . ":";
94 return show_donations($offset, $per_page, $contact->getId());
96 else echo "<p>No such contact!</p>\n";
99 function show_hub_donations($offset, $per_page, $hub_name, $hub_id = null) {
100 if (isset($hub_id)) $hub = get_hub_by_id($hub_id);
101 else if ($hub_name) $hub = get_hub_by_name($hub_name);
103 echo "<p>Donations to hub " . $hub->getLink() . ":";
104 return show_donations($offset, $per_page, null, $hub->getId());
106 else echo "<p>No such hub!</p>\n";
109 function show_area_donations($offset, $per_page, $area_name, $area_id = null) {
110 if (isset($area_id)) $area = get_area_by_id($area_id);
111 else if ($area_name) $area = get_area_by_name($area_name);
113 $hubs = get_area_hubs($area->getId());
115 foreach ($hubs as $hub) $hub_ids[] = $hub->getId();
117 echo "<p>Donations in area " . $area->getLink() . ":";
118 return show_donations($offset, $per_page, null, $hub_ids);
120 else echo "<p>No such area!</p>\n";
123 function show_donation_areas_form($city_id = null) {
124 $areas = get_city_areas($city_id);
125 if (! count($areas)) {
126 echo "<p>No <a href=\"/area\">areas</a>!</p>\n";
130 echo "<form method=\"POST\" action=\"" . $_SERVER['REQUEST_URI'] . "\">\n";
131 echo "<p>Show donations in area\n";
132 echo "<select name=\"area_id\">\n";
133 foreach ($areas as $area) {
134 option("area_id", $area->getId(), get_area_displayname($area));
137 echo "<input type=\"submit\" value=\"Show\">\n";
141 function show_donation_cities_form($city_id = null) {
143 $cities = $q->orderByName()->find();
145 if (! count($cities)) {
146 echo "<p>No <a href=\"/city\">cities</a>!</p>\n";
150 echo "<form method=\"POST\" action=\"" . $_SERVER['REQUEST_URI'] . "\">\n";
151 echo "<p>Show donations in city\n";
152 echo "<select name=\"city_id\">\n";
153 foreach ($cities as $city) {
154 option("city_id", $city->getId(), get_city_displayname($city), $city_id);
157 echo "<input type=\"submit\" value=\"Show\">\n";
161 function show_donation_forms($city_id) {
162 show_donation_areas_form($city_id);
163 show_donation_cities_form($city_id);
166 function show_donation_form($donation = null, $area_id = null) {
167 if (! $donation) $donation = new Donation;
171 echo " <td>Date</td>\n";
172 echo " <td>"; show_date_form("date", $donation->getDate()); echo "</td>\n";
177 echo " <td>Donor</td>\n";
178 echo " <td><select name=\"contact_id\">\n";
179 $contacts = get_area_donors();
180 foreach ($contacts as $contact) {
181 option("contact_id", $contact->getId(), $contact->getDisplayname(), $donation->getContactId());
183 echo "</select></td>\n";
188 echo " <td>Hub</td>\n";
189 echo " <td><select name=\"hub_id\">\n";
190 $hubs = get_area_hubs();
191 foreach ($hubs as $hub) {
192 option("hub_id", $hub->getId(), $hub->getDisplayname(), $donation->getHubId());
194 echo "</select></td>\n";
199 echo " <td>Quantity (kg)</td>\n";
200 echo " <td>"; input("quantity", sprintf("%0.2f", $donation->getQuantity() / 1000)); echo "</td>\n";
204 function show_new_donation_form($area_id = null) {
205 if (! check_admin(1)) return;
207 $area = get_area_by_id($area_id);
208 if (! count($area)) {
209 echo "<p>No such <a href=\"/area\">area</a>!</p>\n";
213 echo "<form method=\"POST\" action=\"" . $_SERVER['REQUEST_URI'] . "\">\n";
214 echo "<p>Record a donation:</p>\n";
217 show_donation_form(null, $area_id);
220 echo " <td colspan=2>"; submit("add_donation", "Record"); echo "</td></tr>\n";
226 function show_add_new_donation_form() {
227 if (! check_admin(1)) return;
229 /* We intentionally hide areas with no hubs. */
230 $areas = get_city_areas_with_hubs();
231 if (! count($areas)) {
232 echo "<p>Can't record any donations until at least one <a href=\"/area\">area</a> has a <a href=\"/hub\">hub</a>!</p>\n";
236 echo "<form method=\"POST\" action=\"" . $_SERVER['REQUEST_URI'] . "\">\n";
237 echo "<p>Record a donation in <select name=\"area_id\">\n";
238 foreach ($areas as $area) {
239 option("area_id", $area->getId(), get_area_displayname($area));
242 submit("show_add_donation", "Proceed");
247 function update_donation(&$donation, $new = false) {
248 #$date = ymd_to_iso8601("date");
249 $date = $_POST['date'];
250 $contact_id = $_POST['contact_id'];
251 $hub_id = $_POST['hub_id'];
252 $quantity = $_POST['quantity'];
254 if (! $date) $date = time();
255 /* XXX: check date */
257 $contact = get_contact_by_id($contact_id);
259 echo "<p>Invalid contact!</p>\n";
263 $hub = get_hub_by_id($hub_id);
265 echo "<p>Invalid hub!</p>\n";
269 if (! is_numeric($quantity)) {
270 echo "<p>Invalid quantity!</p>\n";
274 $donation->setDate($date);
275 $donation->setContactId($contact_id);
276 $donation->setHubId($hub_id);
277 $donation->setQuantity($quantity * 1000);
282 catch (Exception $e) {
283 if ($new) echo "<p>Error recording donation.</p>\n";
284 else echo "<p>Error updating donation.</p>\n";
291 function add_donation() {
292 if (! check_admin(1, "record a donation")) return;
294 $donation = new Donation;
295 if (! update_donation($donation, true)) return false;
296 return $donation->getId();
299 function delete_donation($id = null) {
300 if (! check_admin(1, "delete a donation")) return;
302 if (isset($id)) $donation = get_donation_by_id($id);
303 if (! $donation) return false;
307 echo "<p>Deleted donation.</p>\n";
309 catch (Exception $e) {
310 echo "<p>Error deleting donation $id!</p>\n";
317 function show_donation(&$id = null) {
318 if (isset($id)) $donation = get_donation_by_id($id);
319 if (! $donation) return;
321 echo "<form method=\"POST\" action=\"" . $_SERVER['REQUEST_URI'] . "\">\n";
322 echo "<p>Donation <span class=\"strong\">" . $donation->getId() . "</span>";
323 if (check_admin(1)) {
324 echo " " . $donation->getDeleteLink();
330 show_donation_form($donation);
332 if (check_admin(1)) {
334 echo " <td colspan=2>";
335 submit("update_donation", "Update");
344 if (count($parameters)) {
345 if ($parameters[0] == "in") {
346 /* /donation/in/area/Romsey+Town/1 */
347 switch ($parameters[1]) {
349 $area_id = $parameters[3];
350 $_POST['area_id'] = $area_id;
352 $area = $q->findOneById($area_id);
353 $city = get_area_city($area);
354 if ($city) $city_id = $city->getId();
355 show_area_donations(0, 10, $parameters[2], $area_id);
359 $city_id = $parameters[3];
360 $_POST['city_id'] = $city_id;
362 $city = $q->findOneById($city_id);
363 show_city_donations(0, 10, $parameters[2], $city_id);
367 else if ($parameters[0] == "from") {
368 /* /donation/from/contact/Iain+Patterson/4 */
369 switch ($parameters[1]) {
371 $contact_id = $parameters[3];
372 $q = new ContactQuery;
373 $contact = $q->findOneById($contact_id);
374 show_contact_donations(0, 10, $parameters[2], $contact_id);
378 else if ($parameters[0] == "to") {
379 /* /donation/to/hub/Cambridge+Community+Church/1 */
380 switch ($parameters[1]) {
382 $hub_id = $parameters[3];
384 $hub = $q->findOneById($hub_id);
385 show_hub_donations(0, 10, $parameters[2], $hub_id);
390 list($ignored, $id, $args) = parse_parameters($parameters);
391 //echo "<p>$name($id) " . print_r($args, true) . "</p>\n";
395 delete_donation($id);
399 else if (isset($id)) show_donation($id);
401 /* XXX: Shown after adding. */
402 show_donation_forms($city_id);
403 show_add_new_donation_form($city_id);
406 if (count($parameters)) {
407 show_donation_forms($city_id);