source: subversion/applications/mobile/healthwhere/edit_hours.php @ 34887

Last change on this file since 34887 was 21241, checked in by avantman42, 9 years ago

Removed source column in OS-created postcode DB. No need for it, and should make DB file smaller
Now using OS postcode data (OS OpenData? Code-Point® Open)
Re-licensed (GPL v2) because PHPCoord is licensed under GPL v2

File size: 7.1 KB
Line 
1<?php
2/*
3Healthwhere, a web service to find local pharmacies and hospitals
4Copyright (C) 2009-2010 Russell Phillips (russ@phillipsuk.org)
5
6This program is free software; you can redistribute it and/or modify
7it under the terms of the GNU General Public License as published by
8the Free Software Foundation; either version 2 of the License, or
9(at your option) any later version.
10
11This program is distributed in the hope that it will be useful,
12but WITHOUT ANY WARRANTY; without even the implied warranty of
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14GNU General Public License for more details.
15
16You should have received a copy of the GNU General Public License along
17with this program; if not, write to the Free Software Foundation, Inc.,
1851 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
19*/
20
21require_once ("inc_head.php");
22require_once ("inc_edit.php");
23
24$id = (int) $_GET ["id"];
25$dist = (float) $_GET ["dist"];
26
27/* Parameters:
28 * $open_hours: string from opening_hours tag
29 * $daynum: number of the day to be checked
30 * $hours: array of times. This will be modified */
31function OpenTimes ($open_hours, $daynum, &$hours) {
32        //Set default
33        $hours ['amStart'] = "";
34        $hours ['amEnd'] = "";
35        $hours ['pmStart'] = "";
36        $hours ['pmEnd'] = "";
37        //Set up array of days as numbers - easier to compare as numbers
38        $weekdays = array ("mo"=>1, "tu"=>2, "we"=>3, "th"=>4, "fr"=>5, "sa"=>6, "su"=>7);
39
40        //Ensure $open_hours is lower case - makes life simpler
41        $open_hours = strtolower ($open_hours);
42        //split by semi-colons: each one is a set of days & times
43        $days = explode (";", trim ($open_hours));
44        //Check each set of days/times
45        foreach ($days as $day) {
46                $daytimes = explode (" ", trim ($day));
47                //Turn $daytimes [0] into start & end days
48                $dayrange = explode ("-", $daytimes [0]);
49                $minday = $weekdays [$dayrange [0]];
50                if (count ($dayrange) == 1)
51                        //Single day, so maxday is same as minday
52                        $maxday = $weekdays [$dayrange [0]];
53                else
54                        //Two days
55                        $maxday = $weekdays [$dayrange [1]];
56                //Determine if today is in the range
57                if ($daynum >= $minday && $daynum <= $maxday) {
58                        //Today is in the day range - check the time
59                        $times = explode (",", $daytimes [1]);
60                        //Day off - specific case. Return from function immediately
61                        if ($times [0] == "off") {
62                                $hours ['amStart'] = "";
63                                $hours ['amEnd'] = "";
64                                $hours ['pmStart'] = "";
65                                $hours ['pmEnd'] = "";
66                                return;
67                        }
68                        if ($daynum == $minday && $daynum == $maxday) {
69                                $am = explode ("-", $times [0]);
70                                $hours ['amStart'] = $am [0];
71                                $hours ['amEnd'] = $am [1];
72                                $pm = explode ("-", $times [1]);
73                                $hours ['pmStart'] = $pm [0];
74                                $hours ['pmEnd'] = $pm [1];
75                                // This is a specific day, so return immediately
76                                return;
77                        }
78                        else {
79                                $am = explode ("-", $times [0]);
80                                $hours ['amStart'] = $am [0];
81                                $hours ['amEnd'] = $am [1];
82                                $pm = explode ("-", $times [1]);
83                                $hours ['pmStart'] = $pm [0];
84                                $hours ['pmEnd'] = $pm [1];
85                        }
86                }
87        }
88        return;
89}
90
91// Get data from OSM
92$sXML = file_get_contents ("http://www.openstreetmap.org/api/0.6/node/$id");
93$xml = new SimpleXMLElement($sXML);
94
95$days = array ("Mo", "Tu", "We", "Th", "Fr", "Sa", "Su");
96//Calculate opening_hours value based on submitted data. This isn't perfect,
97//but should at least generate a valid string
98$am = array ();
99$hours = "";
100if (isset ($_POST ["btnSubmit"])) {
101        if (isset ($_POST ["chk247"]))
102                $hours = "24/7";
103        else {
104                //Put each day into an array element
105                for ($iCount = 0; $iCount <= 6; $iCount++) {
106                        $am [$iCount] = $_POST ["txt{$days [$iCount]}AmStart"] . "-" . $_POST ["txt{$days [$iCount]}AmEnd"];
107                        if ($_POST ["txt{$days [$iCount]}PmStart"] != "")
108                                $am [$iCount] .= "," . $_POST ["txt{$days [$iCount]}PmStart"] . "-" . $_POST ["txt{$days [$iCount]}PmEnd"];
109                }
110                if (($am [0] == $am [4]) && ($am [0] != "-")) {
111                        //Mon & Fri are the same. Set up a range
112                        $hours = "Mo-Fr {$am [0]}; ";
113                        //Add exceptions
114                        for ($iCount = 0; $iCount <= 3; $iCount++)
115                                if ($am [0] != $am [$iCount])
116                                        $hours .= "; {$days [$iCount]} {$am [$iCount]}; ";
117                }
118                else {
119                        //Mon & Fri are not the same. Set up individual days
120                        for ($iCount = 0; $iCount <= 4; $iCount++)
121                                if ($am [$iCount] != "-")
122                                        $hours .= $days [$iCount] . " {$am [$iCount]}; ";
123                }
124                //Add Saturday & Sunday
125                if ($am [5] != "-")
126                        $hours .= "{$days [5]} {$am [5]}; ";
127                if ($am [6] != "-")
128                        $hours .= "{$days [6]} {$am [6]};";
129        }
130}
131
132if ($hours != "" && isset ($_POST ["btnSubmit"])) {
133        $bUpdated = False;
134        foreach ($xml->node[0]->tag as $tag) {
135                if ($tag ['k'] == "opening_hours") {
136                        $open_hours = (string) $tag ['v'];
137                        if (($open_hours != $hours) && ($hours != "")) {
138                                $tag ['v'] = $hours;
139                                $open_hours = $hours;
140                                //Update OSM
141                                $iCS = osm_create_changeset ();
142                                osm_update_node ($id, $xml->asXML (), $iCS);
143                                //Changeset is not closed, in case further edits are made.
144                                //It will be closed automatically at the server
145                                //osm_close_changeset ($iCS);
146                                header("Location: " . BASE_URL . "/detail.php?id=$id&amp;dist=$dist&amp;edit=yes&amp;waynode=$waynode");
147                                $bUpdated = True;
148                        }
149                }
150        }
151        if ($bUpdated == False) {
152                // opening_hours tag does not exist - create new one
153                $tag = $xml->node [0]->addChild("tag");
154                $tag->addAttribute ("k", "opening_hours");
155                $tag->addAttribute ("v", $hours);
156                //Update OSM
157                if (isset ($_COOKIE ['csID']))
158                        $iCS = $_COOKIE ['csID'];
159                else
160                        $iCS = osm_create_changeset ();
161                osm_update_node ($id, $xml->asXML (), $iCS);
162                //Changeset is not closed, in case further edits are made.
163                //It will be closed automatically at the server
164                //osm_close_changeset ($iCS);
165                header("Location: " . BASE_URL . "/detail.php?id=$id&amp;dist=$dist&amp;edit=yes&amp;waynode=$waynode");
166        }
167}
168require_once ("inc_head_html.php");
169?>
170
171<form action = "edit_hours.php?id=<?=$id?>&amp;name=<?php echo urlencode ($display_name); ?>&amp;dist=<?=$dist?>&amp;waynode=<?=$waynode?>" method = "post">
172<p>
173<table>
174<tr><th colspan = "2" align = "center"><?php echo htmlentities (stripslashes ($_GET ['name'])); ?></th></tr>
175<tr><th colspan = "2" align = "center">Opening Hours</th></tr>
176<tr><td colspan = "2" align = "center">
177<?php
178if ($open_hours == "24/7")
179        $check = "checked";
180else
181        $check = "";
182?>
183<input type = "checkbox" <?=$check?> class = "default" name = "chk247"> Open 24/7
184</td></tr>
185</table>
186
187<p>
188<i>Use 24 hour clock for times (eg 09:00, 18:00)</i>
189</p>
190
191<table>
192<?php
193for ($iCount = 0; $iCount <= 6; $iCount++) {
194        echo "<tr><td>{$days [$iCount]}</td><td>";
195        unset ($hours);
196        OpenTimes ($open_hours, $iCount + 1, $hours);
197        echo "<input name = 'txt{$days [$iCount]}AmStart' value = '" .
198                "{$hours ["amStart"]}'> to ";
199        echo "<input name = 'txt{$days [$iCount]}AmEnd' value = '" .
200                "{$hours ["amEnd"]}'><br>";
201        echo "<input name = 'txt{$days [$iCount]}PmStart' value = '" .
202                "{$hours ["pmStart"]}'> to ";
203        echo "<input name = 'txt{$days [$iCount]}PmEnd' value = '" .
204                "{$hours ["pmEnd"]}'><br>";
205}
206?>
207
208<tr><td align = "center" colspan = "2"><input type = "reset" value = "Reset">&nbsp;
209&nbsp;<input type = "submit" value = "Submit" name = "btnSubmit"></td></tr>
210<tr><td align = "center" colspan = "2">
211<a href = "detail.php?id=<?=$id?>&amp;dist=<?=$dist?>&amp;waynode=<?=$waynode?>">Cancel</a>
212</td></tr>
213</table>
214</form>
215</p>
216
217<?php
218require ("inc_foot.php");
219?>
Note: See TracBrowser for help on using the repository browser.