The public function that does all the work.
143 {
145
146
147
148
149
150
151 $NULL_KEY = (string)'00000000-0000-0000-0000-000000000000';
152
153 $pdo; $pdo1;
154 $remote_world = "";
155 $teleport_allowed = FALSE;
156
157
158
159
160 $use_sim_db = TRUE;
161
162
163
164
165
166
167
168 $allow_outsiders = FALSE;
169
170
171
172
173
174 global $db; global $host; global $db_username; global $db_password;
175 global $db1; global $host1; global $db1_username; global $db1_password;
176 global $pdo; global $pdo1; global $remote_world; global
$readings;
177
178
179 $pdo = $this->
rdOpenDatabase($db, $host, $db_username, $db_password);
180
181
182
183 if ($use_sim_db) $pdo1 = $this->
rdOpenDatabase($db1, $host1, $db1_username, $db1_password);
184
185
186
187
188
189
191
192
193
194
195
196
198 {
199
200
201
202 if ($remote_world != "" && (!is_allowed || !$allow_outsiders))
203 {
204 die(
"FAILURE=BANNED|Teleporter Owner ".
$readings[
'owner'].
"@".
$readings[
'world'].
" is not authorised\n");
205 }
206
207
208
209
210
211
212 $position_string = substr(
$readings[
'position'], 1, -1);
213 $pos = explode(",", $position_string);
214 $position = array_slice($pos, 0, 3);
215
216
217 $rotation_string = substr(
$readings[
'rotation'], 1, -1);
218 $rot = explode(",", $rotation_string);
219 $rotation = array_slice($rot, 0, 4);
220
221
222
223
224
225
226 $sql_query = "select * from ls_os_teleport where teleport_key = :key";
227 try
228 {
229 $stmt = $pdo->prepare($sql_query);
230 $stmt->execute([
'key' =>
$readings[
'key']]);
231 $exists = $stmt->fetch(PDO::FETCH_ASSOC);
232 }
233 catch (Exception $e)
234 {
235 echo "FAILURE=IDENTIFY:".$e->getMessage()."\n";
236 }
237
238
239
240
241 if ($exists)
242 {
243
244 $data =
245 [
247 $position[0], $position[1], $position[2],
248 $rotation[0], $rotation[1], $rotation[2], $rotation[3],
252 ];
253
254
255 $sql_query = "update ls_os_teleport set ";
256 $sql_query .= "teleport_name = ?, teleport_owner_key = ?, teleport_world = ?, teleport_region = ?, ";
257 $sql_query .= "teleport_region_x = ?, teleport_region_y = ?, teleport_region_z = ?, ";
258 $sql_query .= "teleport_rotation_x = ?, teleport_rotation_y = ?, teleport_rotation_z = ?, teleport_rotation_s = ?, ";
259 $sql_query .= "teleport_offset = ?, teleport_group_key = ?, teleport_front_offset_angle = ?, ";
260 $sql_query .= "teleport_location_info = ?, teleport_version_number = ?, teleport_locality_group = ?, ";
261 $sql_query .= "teleport_heartbeat = CURRENT_TIMESTAMP()";
262 $sql_query .= "where teleport_key = ?";
263
264
265 try
266 {
267 $stmt = $pdo->prepare($sql_query);
268 $stmt->execute($data);
269 }
270 catch (Exception $e)
271 {
272 echo "FAILURE=UPDATE:".$e->getMessage()."\n";
273 }
274 }
275
276
277
278
279 else
280 {
281
282
283
284
285
286 $sql_query = "select * from ls_os_teleport where teleport_name = :name";
287 try
288 {
289 $stmt = $pdo->prepare($sql_query);
290 $stmt->execute([
'name' =>
$readings[
'name']]);
291 $same_name = $stmt->fetch(PDO::FETCH_ASSOC);
292 }
293 catch (Exception $e)
294 {
295 echo "FAILURE=NAME_MATCH: ".$readings['name'].":Failed with".$e->getMessage()."\n";
296 }
297 if ($same_name)
298 {
299 echo "FAILURE=NAME_MATCH: Existing teleporter data - ";
300 echo $row['teleport_world']."/".$row['teleport_region']."/";
301 echo "<".$row['teleport_region_x'].",".$row['teleport_region_y'].",".$row['teleport_region_z'].">\n";
302 }
303 else
304 {
305
306 $data =
307 [
309 $position[0], $position[1], $position[2],
310 $rotation[0], $rotation[1], $rotation[2], $rotation[3],
313 ];
314
315
316 $sql_query = "insert into ls_os_teleport(";
317 $sql_query .= "teleport_key, teleport_name, teleport_owner_key, teleport_world, teleport_region, ";
318 $sql_query .= "teleport_region_x, teleport_region_y, teleport_region_z, ";
319 $sql_query .= "teleport_rotation_x, teleport_rotation_y, teleport_rotation_z, teleport_rotation_s, ";
320 $sql_query .= "teleport_offset, teleport_group_key, teleport_front_offset_angle,";
321 $sql_query .= "teleport_location_info, teleport_version_number, teleport_locality_group";
322 $sql_query .= ")VALUES(";
323 $sql_query .= "?, ?, ?, ?, ?, ";
324 $sql_query .= "?, ?, ?, ";
325 $sql_query .= "?, ?, ?, ?, ";
326 $sql_query .= "?, ?, ?, ";
327 $sql_query .= "?, ?, ?";
328 $sql_query .= ")";
329
330
331 try
332 {
333 $stmt = $pdo->prepare($sql_query);
334 $stmt->execute($data);
335 }
336 catch (Exception $e)
337 {
338 echo "FAILURE=INSERT:".$e->getMessage()."\n";
339 }
340 }
341 }
342
343
344 echo "EXTRACT_LIST=START\n";
345
346
347 $this_group_flag =
$readings[
'locationinfo'] & $GROUP_FLAG;
348 $this_region_flag =
$readings[
'locationinfo'] & $REGION_FLAG;
349 $this_world_flag =
$readings[
'locationinfo'] & $WORLD_FLAG;
350 $this_metaverse_flag =
$readings[
'locationinfo'] & $METAVERSE_FLAG;
351
352 $sql_query = "";
353
354
355
356
357 $sql_query .= "select * from ls_os_teleport";
358 $sql_query .= " where teleport_key != :key";
359 $sql_query .= " and ((teleport_location_info & :group_flag = :this_group_flag and teleport_locality_group = :group) or teleport_location_info & :region_flag = :this_region_flag)";
360 $sql_query .= " and teleport_location_info & :anon_flag = 0";
361 $sql_query .= " and teleport_region = :region";
362 $sql_query .= " and teleport_world = :world";
363 $sql_query .= " and teleport_version_number != 0";
364
365 $sql_query .= " UNION ";
366
367
368 $sql_query .= "select * from ls_os_teleport ";
369 $sql_query .= " where teleport_key != :key";
370 $sql_query .= " and ((teleport_location_info & :world_flag = :this_world_flag and teleport_world = :world)";
371 $sql_query .= " and teleport_location_info & :anon_flag = 0";
372 $sql_query .= " or (teleport_location_info & :metaverse_flag = :this_metaverse_flag and teleport_world != :world))";
373 $sql_query .= " and teleport_version_number != 0";
374
375
376 $sql_query .= " order by teleport_name";
377
380 'group_flag' => $GROUP_FLAG,
381 'region_flag' => $REGION_FLAG,
382 'world_flag' => $WORLD_FLAG,
383 'metaverse_flag' => $METAVERSE_FLAG,
384 'anon_flag' => $ANONYMOUS_FLAG,
385 'this_group_flag' => $this_group_flag,
386 'this_region_flag' => $this_region_flag,
387 'this_world_flag' => $this_world_flag,
388 'this_metaverse_flag' => $this_metaverse_flag,
392 ];
393
395
396
397 sleep(1);
398 echo "EXTRACT_LIST=END\n";
399 }
400
401
403 {
404
405
406
407
408
409
410
411
412
414
415 $SqlQuery = "select * from ls_os_teleport";
416 $SqlQuery .= "where DATE_ADD(teleport_heartbeat, INTERVAL :lifetime HOUR) < CURRENT_TIMESTAMP()";
417 $SqlQuery .= " and teleport_version_number != 0 ";
418 if ($world != '###') $SqlQuery .= " and teleport_world = :world";
419 $SqlQuery .= " order by teleport_name;";
420
421 $Parameters = [
'lifetime' =>
$readings[
'lifetime'] ];
422 if ($world != '###') $Parameters['world'] = $world;
423
424 try
425 {
426 $stmt = $pdo->prepare($SqlQuery);
427 $stmt->execute($Parameters);
428 $results = $stmt->fetchAll(PDO::FETCH_DEFAULT);
429 }
430 catch (Exception $e)
431 {
432 echo "FAILURE=SCAN:".$e->getMessage()."\n";
433 }
434
435
436
437
438
439 echo "SCAN_LIST=START\n";
440 echo "//=========================== Date: ".date("Y-m-d H:i:s")."==================\n";
441
442 foreach ($results as $row)
443 {
444 $action_string = "SCANNED";
445 $teleport_name = $row['teleport_name'];
446 $teleport_version = $row['teleport_version_number'];
447
448
450 {
451 $sql_query1 = "delete from ls_os_teleport where teleport_key = :key";
452 $parameters1 = ['key' => $row['teleport_key'] ];
453 $stmt1 = $pdo->prepare($sql_query1);
454 $stmt1->execute($parameters1);
455 $results1 = $stmt1->fetchAll(PDO::FETCH_DEFAULT);
456 $action_string = "DELETED";
457 }
458 echo $row['teleport_name']."|".$action_string."|";
459 echo "hop://".$row['teleport_world']."/".$row['teleport_region']."/".$row['teleport_region_x']."/".$row['teleport_region_y']."/".$row['teleport_region_z']."\n";
460 }
461 echo "SCAN_LIST=END\n";
462 }
463 }
rdOpenDatabase($Database, $Host, $Username, $Password)
Open the Support Database for Use.
rdConfirmUser($UseSimDb, $PDO, $PDO1)
Fucntion to confirm that the object's owner is authorise to run script.