Typo.
[readifood.git] / lib / city.php
1 <?php
2
3   /* XXX: Show links to other objects.  Don't show cities by default. */
4
5   if ($_POST['city_name']) {
6     $id = add_city($_POST['city_name'], $_POST['city_postcode_area']);
7     if ($id !== false) {
8       echo "<p>Added city.</p>\n";
9       $parameters = array($_POST['city_name'], $id);
10     }
11   }
12
13   function show_cities($offset, $per_page, $name = null) {
14     echo "<p>Cities:";
15     $q = new CityQuery;
16     if (isset($name)) $q->filterByName($name);
17     $p = $q->paginate($offset, $per_page);
18     if (count($p)) {
19       foreach ($p as $city) {
20         echo "<br>\nCity: " . $city->getStrongLink(get_city_displayname($city));
21         printf(" <a class=\"small\" href=\"/area/in/%s/%d\">Areas</a>", urlencode($city->getName()), $city->getID());
22         printf(" <a class=\"small\" href=\"/contact/in/city/%s/%d\">Contacts</a>", urlencode($city->getName()), $city->getId());
23         printf(" <a class=\"small\" href=\"/donation/in/city/%s/%d\">Donations</a>", urlencode($city->getName()), $city->getId());
24         printf(" <a class=\"small\" href=\"/order/in/city/%s/%d\">Orders</a>", urlencode($city->getName()), $city->getId());
25         if (check_admin(1)) {
26           echo " " . $city->getDeleteLink();
27         }
28       }
29     }
30     else echo " none";
31     echo "</p>\n";
32   }
33
34   function show_new_city_form() {
35     if (! check_admin(1)) return;
36
37     echo "<form method=\"POST\" action=\"" . $_SERVER['REQUEST_URI'] . "\">\n";
38     echo "<p>Add a new city <input name=\"city_name\">\n";
39     echo "with postcode prefix <input name=\"city_postcode_area\" size=4 maxlength=4>\n";
40     echo "<input type=\"submit\" value=\"Add\"></p>\n";
41   }
42
43   function add_city($name, $postcode) {
44     if (! check_admin(1, "add a city")) return;
45
46     if (preg_match('/^([A-Za-z]+)/', $postcode, $m)) {
47       $prefix = strtoupper($m[1]);
48     }
49     else {
50       echo "<p>Invalid postcode prefix!</p>\n";
51       return false;
52     }
53
54     $city = get_city_by_name($name, $prefix, false);
55     if ($city) {
56       echo "<p>$name already exists!</p>\n";
57       show_city($name, $city->getId());
58       return false;
59     }
60
61     $city = new City;
62     $city->setName($name);
63     $city->setPostcodeArea($prefix);
64
65     try {
66       $city->save();
67     }
68     catch (Exception $e) {
69       echo "<p>Error adding $name!</p>\n";
70       /* XXX: Why? */
71       return false;
72     }
73
74     return $city->getId();
75   }
76
77   function delete_city($name, $id = null) {
78     if (! check_admin(1, "delete a city")) return;
79
80     if (isset($id)) $city = get_city_by_id($id);
81     else $city = get_city_by_name($name);
82     if (! $city) return false;
83
84     try {
85       $city->delete();
86       echo "<p>Deleted city.</p>\n";
87     }
88     catch (Exception $e) {
89       echo "<p>Error deleting $name!</p>\n";
90       /* XXX: Why? Check for addresses in use... */
91       return false;
92     }
93
94     return true;
95   }
96
97   function show_city($name, $id = null) {
98     if (isset($id)) $city = get_city_by_id($id);
99     else $city = get_city_by_name($name);
100     if (! $city) return;
101
102     echo "<p>City: <span class=\"strong\">" . get_city_displayname($city) . "</span>";
103     printf(" <a class=\"small\" href=\"/area/in/city/%s/%d\">Areas</a>", urlencode($city->getName), $city->getID());
104     printf(" <a class=\"small\" href=\"/contact/in/city/%s/%d\">Contacts</a>", urlencode($city->getName()), $city->getId());
105     printf(" <a class=\"small\" href=\"/donation/in/city/%s/%d\">Donations</a>", urlencode($city->getName()), $city->getId());
106     printf(" <a class=\"small\" href=\"/order/in/city/%s/%d\">Orders</a>", urlencode($city->getName()), $city->getId());
107     if (check_admin(1)) {
108       echo " " . $city->getDeleteLink();
109     }
110
111     $q = new AreaQuery;
112     $areas = $q->filterByCityId($city->getId())->find();
113     if (count($areas)) {
114       foreach ($areas as $area) {
115         echo "<br>\nArea: " . $area->getLink();
116       }
117     }
118
119     echo "</p>\n";
120   }
121
122   list($name, $id, $args) = parse_parameters($parameters);
123   //echo "<p>$name($id) " . print_r($args, true) . "</p>\n";
124   if (count($args)) {
125     switch ($args[0]) {
126       case "delete":
127         delete_city($name, $id);
128       break;
129
130       default:
131         show_cities(0, 10, $name);
132         show_new_city_form();
133       break;
134     }
135   }
136   else if (isset($name)) show_city($name, $id);
137   else {
138     show_cities(0, 10);
139     show_new_city_form();
140   }
141
142   # XXX: Format URL in branch case...
143   if (count($parameters))
144   echo "<p>Show all <a href=\"/city\">cities</a></p>\n";
145 ?>