Merge branch 'master' into uat
[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($name = null) {
14     list($first_page, $per_page) = pagination();
15     echo "<p>Cities:";
16     $q = new CityQuery;
17     if (isset($name)) $q->filterByName($name);
18     $cities = $q->paginate($first_page, $per_page);
19     if (count($cities)) {
20       foreach ($cities as $city) {
21         echo "<br>\nCity: " . $city->getStrongLink(get_city_displayname($city));
22         $n = $city->getName();
23         $i = $city->getId();
24         echo " " . get_small_link("Areas", "/area/in/city/%s/%d", $n, $i);
25         echo " " . get_small_link("Contacts", "/contact/in/city/%s/%d", $n, $i);
26         echo " " . get_small_link("Donations", "/donation/in/city/%s/%d", $n, $i);
27         echo " " . get_small_link("Orders", "/order/in/city/%s/%d", $n, $i);
28         if (check_admin(1)) {
29           echo " " . $city->getDeleteLink();
30         }
31       }
32       show_pagination($cities);
33     }
34     else echo " none";
35     echo "</p>\n";
36   }
37
38   function show_new_city_form() {
39     if (! check_admin(1)) return;
40
41     form("noprint standout");
42     echo "<p>Add a new city <input name=\"city_name\">\n";
43     echo "with postcode prefix <input name=\"city_postcode_area\" size=4 maxlength=4>\n";
44     echo "<input type=\"submit\" value=\"Add\"></p>\n";
45   }
46
47   function add_city($name, $postcode) {
48     if (! check_admin(1, "add a city")) return;
49
50     if (preg_match('/^([A-Za-z]+)/', $postcode, $m)) {
51       $prefix = strtoupper($m[1]);
52     }
53     else {
54       echo "<p>Invalid postcode prefix!</p>\n";
55       return false;
56     }
57
58     $city = get_city_by_name($name, $prefix, false);
59     if ($city) {
60       echo "<p>$name already exists!</p>\n";
61       show_city($name, $city->getId());
62       return false;
63     }
64
65     $city = new City;
66     $city->setName($name);
67     $city->setPostcodeArea($prefix);
68
69     try {
70       $city->save();
71     }
72     catch (Exception $e) {
73       echo "<p>Error adding $name!</p>\n";
74       /* XXX: Why? */
75       return false;
76     }
77
78     return $city->getId();
79   }
80
81   function confirm_delete_city($name, $id = null) {
82     if (! check_admin(1, "delete a city")) return;
83
84     if (isset($id)) $city = get_city_by_id($id);
85     else $city = get_city_by_name($name);
86     if (! $city) return false;
87
88     echo "<h3>Confirm deletion</h3>\n";
89     echo "<p>You must confirm deletion of city " . $city->getName() . ": " . $city->getDeleteLink(true) . "</p>\n";
90   }
91
92   function delete_city($name, $id = null) {
93     if (! check_admin(1, "delete a city")) return;
94
95     if (isset($id)) $city = get_city_by_id($id);
96     else $city = get_city_by_name($name);
97     if (! $city) return false;
98
99     try {
100       $city->delete();
101       echo "<p>Deleted city.</p>\n";
102     }
103     catch (Exception $e) {
104       echo "<p>Error deleting $name!</p>\n";
105       /* XXX: Why? Check for addresses in use... */
106       return false;
107     }
108
109     return true;
110   }
111
112   function show_city($name, $id = null) {
113     if (isset($id)) $city = get_city_by_id($id);
114     else $city = get_city_by_name($name);
115     if (! $city) return;
116
117     echo "<p>City: <span class=\"strong\">" . get_city_displayname($city) . "</span>";
118     $n = $city->getName();
119     $i = $city->getId();
120     echo " " . get_small_link("Areas", "/area/in/city/%s/%d", $n, $i);
121     echo " " . get_small_link("Contacts", "/contact/in/city/%s/%d", $n, $i);
122     echo " " . get_small_link("Donations", "/donation/in/city/%s/%d", $n, $i);
123     echo " " . get_small_link("Orders", "/order/in/city/%s/%d", $n, $i);
124     if (check_admin(1)) {
125       echo " " . $city->getDeleteLink();
126     }
127
128     $q = new AreaQuery;
129     $areas = $q->filterByCityId($city->getId())->find();
130     if (count($areas)) {
131       foreach ($areas as $area) {
132         echo "<br>\nArea: " . $area->getLink();
133       }
134     }
135
136     echo "</p>\n";
137   }
138
139   list($name, $id, $args) = parse_parameters($parameters);
140   //echo "<p>$name($id) " . print_r($args, true) . "</p>\n";
141   if (count($args)) {
142     switch ($args[0]) {
143       case "delete":
144         confirm_delete_city($name, $id);
145       break;
146
147       case "confirmdelete":
148         delete_city($name, $id);
149       break;
150
151       default:
152         show_cities($name);
153         show_new_city_form();
154       break;
155     }
156   }
157   else if (isset($name)) show_city($name, $id);
158   else show_cities();
159
160   if (count($parameters)) echo "<p class=\"noprint standout\">Show all <a href=\"/city\">cities</a></p>\n";
161   show_new_city_form();
162
163 ?>