forked from physje/funda
-
Notifications
You must be signed in to change notification settings - Fork 0
/
check_offline.php
356 lines (293 loc) · 12 KB
/
check_offline.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
<?php
include_once(__DIR__.'/include/config.php');
include_once(__DIR__ .'/include/HTML_TopBottom.php');
include_once($cfgGeneralIncludeDirectory.'class.phpPushover.php');
$db = connect_db();
$minUserLevel = 3;
$cfgProgDir = 'auth/';
include($cfgProgDir. "secure.php");
$String = $block = array();
$success = false;
if ($handle = opendir($offlineDir)) {
while (false !== ($entry = readdir($handle))) {
if ($entry != "." && $entry != "..") {
$files[] = $entry;
}
}
closedir($handle);
}
$debug = 0;
# Doorloop alle offline-bestanden
foreach($files as $file) {
# Alles initialiseren
set_time_limit (30);
$String = $Huizen = $AdressenArray = array();
$OpdrachtID = 0;
$succes = $detail = $verkocht = $overzicht = false;
$bestand = $offlineDir.$file;
$fp = fopen($bestand, 'r+');
$contents = fread($fp, filesize($bestand));
fclose($fp);
# Achterhalen wat voor een soort pagina het is
# Overzichtspagina met te koop staande huizen
# Overzichtspagina met verkochte huizen
# Detail pagina van een individueel huis
# in de HTML-code staat altijd de bezochte URL
# Die moeten wij zien te vinden
$appHeaderLink = getString('href="/language/switch/?returnUrl=', '" hreflang=', $contents, 0);
$pageURL = getString('/koop/', '', urldecode($appHeaderLink[0]), 0);
$zoekURL = '/koop/'.$pageURL[0];
$OpdrachtID = guessOpdrachtIDFromHTML($zoekURL);
$fundaID = guessFundaIDFromHTML($zoekURL);
if($OpdrachtID > 0) {
$overzicht = true;
$detail = false;
}
if($fundaID > 0) {
$detail = true;
$overzicht = false;
}
# Als in de zoekURL de tekst /verkocht/ voorkomt gaat het over een huis wat verkocht is
# De variabele $verkocht is dan waar
if(strpos($zoekURL, '/verkocht/')) {
$verkocht = true;
} else {
$verkocht = false;
}
#
# De routine als geen van beide gevonden is
#
if(!$overzicht AND !$detail) {
$String[] = "Het type pagina van <a href='$bestand'>$file</a> kan niet worden bepaald<br>";
#
# De routine als het een overzichtspagina is
#
} elseif($overzicht) {
$OpdrachtData = getOpdrachtData($OpdrachtID);
$PushMembers = getMembers4Opdracht($OpdrachtID, 'push');
$OpdrachtURL = $OpdrachtData['url'];
if($verkocht) {
toLog('info', $OpdrachtID, '0', 'Inladen pagina verkochte huizen voor '. $OpdrachtData['naam']);
} else {
toLog('info', $OpdrachtID, '0', 'Inladen pagina voor '. $OpdrachtData['naam']);
}
# Code opknippen zodat er een array met HTML-code voor een huis ontstaat
# De eerste keer voor "normale" huizen
$tempHuizen = explode('<div class="search-result-media">', $contents);
# De tweede keer voor "Blikvangers", dat zijn huizen die extra groot op funda staan
foreach($tempHuizen as $tempText) {
$nieuweHuizen = explode('<div class="search-result-main-promo">', $tempText);
$Huizen = array_merge($Huizen, $nieuweHuizen);
}
# Eerste element is rubbish
$Huizen = array_slice($Huizen, 1);
# $Huizen is nu een array met per huis de HTML-code
$NrPageHuizen = count($Huizen);
if($debug > 0) {
$block[] = "Aantal huizen in <a href='$bestand'>$file</a> : ". $NrPageHuizen ."<br>\n";
}
# Doorloop nu alle gevonden huizen op de overzichtspagina
foreach($Huizen as $HuisText) {
# Extraheer hier adres, plaats, prijs, id etc. uit
$data = extractFundaData($HuisText, $verkocht);
$AdressenArray[] = $data['adres'];
if($debug == 2) {
$tempItems = array();
foreach($data as $key => $value) {
$tempItems[] = $key .' -> '. $value;
}
$block[] = implode('<br>', $tempItems);
}
# Huis is nog niet bekend bij het script, dus moet worden toegevoegd
if(!knownHouse($data['id'])) {
$extraData = array();
# Gegevens over het huis opslaan
if(!saveHouse($data, $extraData)) {
$ErrorMessage[] = "Toevoegen van ". formatStreetAndNumber($data['id']) ." aan het script ging niet goed";
toLog('error', $OpdrachtID, $data['id'], 'Huis toevoegen aan script mislukt');
$success = false;
} else {
toLog('info', $OpdrachtID, $data['id'], 'Huis toevoegen aan script');
}
# Coordinaten van het huis toevoegen
if(!addCoordinates($data['adres'], $data['PC_c'], $data['plaats'], $data['id'])) {
$ErrorMessage[] = "Toevoegen van coordinaten aan ". formatStreetAndNumber($data['id']) ." ging niet goed";
toLog('error', $OpdrachtID, $data['id'], 'Coordinaten toevoegen mislukt');
} else {
toLog('debug', $OpdrachtID, $data['id'], "Coordinaten toegevoegd");
}
# Prijs van het huis opslaan
if(!updatePrice($data['id'], $data['prijs'])) {
$ErrorMessage[] = "Toevoegen van prijs (". $data['prijs'] .") aan ". formatStreetAndNumber($data['id']) ." ging niet goed";
toLog('error', $OpdrachtID, $data['id'], 'Prijs toevoegen mislukt');
} else {
toLog('debug', $OpdrachtID, $data['id'], "Prijs toegevoegd");
}
# Aanvinken om in een later stadium de details op te vragen
mark4Details($data['id']);
} else {
# Pagina is nog steeds beschikbaar
setOnline($data['id']);
}
# Huis is al bekend bij het script
# We moeten dus aangeven dat hij nog steeds op de markt is
if(!$verkocht) {
if(!updateAvailability($data['id'])) {
echo "<font color='red'>Updaten van <b>". formatStreetAndNumber($data['id']) ."</b> is mislukt</font> | $sql<br>\n";
$ErrorMessage[] = "Updaten van ". formatStreetAndNumber($data['id']) ." is mislukt";
toLog('error', $OpdrachtID, $data['id'], "Update van huis kon niet worden gedaan");
} else {
toLog('debug', $OpdrachtID, $data['id'], 'Huis geupdate');
}
# Huis kan gedaald zijn in prijs
# Dat moeten we dus controleren en indien nodig opslaan en melding van maken
if(newPrice($data['id'], $data['prijs']) AND !$verkocht) {
if(!updatePrice($data['id'], $data['prijs'])) {
echo "Toevoegen van de prijs van <b>". formatStreetAndNumber($data['id']) ."</b> is mislukt | $sql<br>\n";
$ErrorMessage[] = "Updaten van prijs (". $data['prijs'] .") aan ". formatStreetAndNumber($data['id']) ." ging niet goed";
toLog('error', $OpdrachtID, $data['id'], "Nieuwe prijs van ". $data['prijs'] ." kon niet worden toegevoegd");
} else {
toLog('debug', $OpdrachtID, $data['id'], "Nieuwe vraagprijs");
}
}
# Huis kan onder voorbehoud verkocht zijn
if($data['vov'] > 0) {
if(!soldHouseTentative($data['id'])) {
$sql = "UPDATE $TableHuizen SET $HuizenVerkocht = '2' WHERE $HuizenID like '". $data['id'] ."'";
mysqli_query($db, $sql);
toLog('info', $OpdrachtID, $data['id'], 'Onder voorbehoud verkocht');
}
# Het geval dat onder voorbehoud wordt teruggedraaid
} elseif(soldHouseTentative($data['id']) AND $data['verkocht'] == 0) {
$sql = "UPDATE $TableHuizen SET $HuizenVerkocht = '0' WHERE $HuizenID like '". $data['id'] ."'";
mysqli_query($db, $sql);
toLog('info', $OpdrachtID, $data['id'], 'Niet meer onder voorbehoud verkocht');
}
}
# Huis kan ook echt verkocht zijn
if($data['verkocht'] == 1) {
if(!soldHouse($data['id'])) {
$sql = "UPDATE $TableHuizen SET $HuizenVerkocht = '1' WHERE $HuizenID like '". $data['id'] ."'";
mysqli_query($db, $sql);
toLog('info', $OpdrachtID, $data['id'], 'Verkocht');
# Aanvinken om in een later stadium de details op te vragen
mark4Details($data['id']);
}
# Het geval dat verkocht wordt teruggedraaid (hypothetisch)
} elseif(soldHouse($data['id'])) {
$sql = "UPDATE $TableHuizen SET $HuizenVerkocht = '0' WHERE $HuizenID like '". $data['id'] ."'";
mysqli_query($db, $sql);
toLog('info', $OpdrachtID, $data['id'], 'Toch niet meer verkocht');
}
# Huis kan openhuis hebben
if($data['openhuis'] == 1) {
if(!hasOpenHuis($data['id'])) {
toLog('info', $OpdrachtID, $data['id'], 'Open Huis aangekondigd');
# Aanvinken om in een later stadium de details (met daarin de openhuis data) op te vragen
mark4Details($data['id']);
}
} else {
removeOpenHuis($data['id']);
}
# Kijk of dit huis al vaker gevonden is voor deze opdracht
if(newHouse($data['id'], $OpdrachtID)) {
if(!addHouse($data, $OpdrachtID)) {
$ErrorMessage[] = "Toevoegen van ". formatStreetAndNumber($data['id']) ." aan opdracht $OpdrachtID ging niet goed";
toLog('error', $OpdrachtID, $data['id'], 'Huis toekennen aan opdracht mislukt');
} else {
toLog('debug', $OpdrachtID, $data['id'], 'Huis toegekend aan opdracht');
}
$NewAddress[] = $data['adres'];
if($debug == 0 AND !$verkocht) {
sendPushoverNewHouse($data['id'], $OpdrachtID);
}
} elseif(changedPrice($data['id'], $data['prijs'], $OpdrachtID)) {
sendPushoverChangedPrice($data['id'], $OpdrachtID);
}
if(!$verkocht) {
addUpdateStreetDb($data['straat'], $data['plaats']);
}
}
$String[] = "<a href='$bestand'>Overzicht</a>". ($verkocht ? ' met verkochte huizen ' : ' ')."van <a href='$OpdrachtURL'>". $OpdrachtData['naam'] ."</a>; ". count($AdressenArray) ." huizen gevonden<br>";
$success = true;
toLog('debug', $OpdrachtID, '0', "Einde pagina (". count($AdressenArray) ." huizen)");
if($debug == 1) {
$block[] = implode("<br>", $AdressenArray)."\n";
}
#
# De routine als het een detailspagina is
#
} elseif($detail) {
$allData = extractFundaDataFromPage($contents);
$data = $allData[0];
$extraData = $allData[1];
if($fundaID != $data['id']) {
$String[] = "Klopt dit wel ?";
$success = false;
} else {
$String[] = "Details van <a href='". $ScriptURL ."admin/edit.php?id=$fundaID'>". formatStreetAndNumber($data['id']) ."</a> ingelezen<br>\n";
# Als wij een huis niet kennen klopt er iets niet
if(!knownHouse($fundaID)) {
toLog('error', '0', $fundaID, 'Huis niet bekend');
$success = false;
# Meestal zal het huis wel bekend zijn
} else {
$oldData = getFundaData($fundaID);
updateHouse($data, $extraData);
//addCoordinates($data['adres'], $data['PC_c'], $data['plaats'], $fundaID);
updatePrice($fundaID, $data['prijs'], time());
# Als hij nog niet verkocht is moeten wij dat aangeven
if($data['verkocht'] != 1) {
if($oldData['start'] > $data['start']) {
updateAvailability($fundaID, $data['start']);
} else {
updateAvailability($fundaID);
}
addUpdateStreetDb($data['straat'], $data['plaats']);
addUpdateWijkDb($data['wijk'], $data['plaats']);
# Als hij wel verkocht is moeten we de administratie daarvan even bijwerken
} else {
$temp = updateVerkochtDataFromPage($data, $extraData);
$String[] = implode("<br>\n", $temp)."<br>\n";
}
# Hij heeft open huis, data invoegen in de database
if($data['openhuis'] == 1) {
$bestaandeTijden = getNextOpenhuis($fundaID);
$tijden = $data['oh-tijden'];
if($bestaandeTijden[0] != '' AND ($tijden[0] != $bestaandeTijden[0] OR $tijden[1] != $bestaandeTijden[1])) {
deleteOpenhuis($fundaID, $bestaandeTijden[0]);
addOpenhuis($fundaID, $tijden);
toLog('info', $OpdrachtID, $data['id'], 'Open Huis gewijzigd voor '. formatStreetAndNumber($fundaID));
} elseif($bestaandeTijden[0] == '') {
addOpenhuis($fundaID, $tijden);
toLog('info', $OpdrachtID, $data['id'], 'Open Huis toegevoegd voor '. formatStreetAndNumber($fundaID));
}
}
toLog('info', '0', $fundaID, 'Offline pagina van '. formatStreetAndNumber($fundaID) .' ingeladen');
remove4Details($fundaID);
$success = true;
}
}
}
# Alleen als de import succesvol is verlopen mag de pagina verwijderd worden
if($success) {
unlink($bestand);
}
$block[] = implode("\n", $String);
}
# Laat de resultaten vam de check netjes op het scherm zien.
$tweeKolom = false;
echo $HTMLHeader;
echo "<tr>\n";
echo "<td width='50%' valign='top' align='center'>\n";
foreach($block as $key => $value) {
echo showBlock($value);
echo '<p>';
if($key > (count($block)/2 - 1) AND !$tweeKolom) {
echo "</td><td width='50%' valign='top' align='center'>\n";
$tweeKolom = true;
}
}
echo "</td>\n";
echo "</tr>\n";
echo $HTMLFooter;