/** * @AjaxCallable=TRUE * @AjaxMethod=POST * @AjaxAsync=TRUE */ public function loadData() { $this->load->library('geo/*'); $this->load->model('POIModel'); $this->load->model('LabelModel'); // Helper functions function addFlag(&$res, $flag) { in_array($flag, $res['flags']) ? null : ($res['flags'][] = $flag); } function hasFlag($res, $flag) { return in_array($flag, $res); } function addLabels(&$res, $labels) { $res['labels'] = array_merge($res['labels'], $labels); } // Required params $vBoundsWKT = filter_input(INPUT_POST, 'vBounds', FILTER_SANITIZE_STRING); $zoom = filter_input(INPUT_POST, 'zoom', FILTER_VALIDATE_INT); // Optional params, need to normalise if not present $types = filter_input(INPUT_POST, 'types', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY); $poiId = filter_input(INPUT_POST, 'poiId', FILTER_VALIDATE_INT); $poiIds = filter_input(INPUT_POST, 'poiIds', FILTER_VALIDATE_INT, FILTER_REQUIRE_ARRAY); $flags = filter_input(INPUT_POST, 'flags', FILTER_SANITIZE_STRING, FILTER_REQUIRE_ARRAY); $vBounds = ViewBounds::fromWKT($vBoundsWKT); // Normalise parameters if ($types === NULL) { $types = []; } if ($poiId === NULL) { $poiId = 0; } if ($poiIds === NULL) { $poiIds = []; } if ($flags === NULL) { $flags = []; } // Prepare result object $res = ['labels' => [], 'flags' => []]; if ($poiId !== 0 && !hasFlag($flags, 'excludePoiLabel')) { $poi = POIModel::load($poiId); $res['labels'][] = LabelModel::loadDynamic($poiId); $res['poi'] = []; addFlag($res, 'doLabelling'); // Load poi info if (hasFlag($flags, 'poiInfo')) { $res['poi']['info'] = $poi->toObject(); } // Load poi card if (hasFlag($flags, 'poiCard')) { $res['poi']['card'] = "<div>Card</div>"; addFlag($res, 'showCard'); } // Pan to poi and fit border or adjust zoom accordingly if (hasFlag($flags, 'panToPoi')) { $border = $poi->border(); if ($border === NULL) { $vBounds->setCenter($poi->latLng()); $vBounds->changeZoom(14 - $zoom); $zoom = 14; } else { $borderBounds = ViewBounds::fromPolygon($border); $vBounds->fitBounds($borderBounds, $zoom); } addFlag($res, 'panToCenter'); } } if (count($poiIds) > 0) { // Load labels by poiIds addLabels($res, LabelModel::loadDynamicByIds($poiIds)); if (hasFlag($flags, 'zoomToPois')) { // Load pois for their positions and borders $pois = POIModel::loadByIds($poiIds); // Expand pois if ($poiId !== 0) { $poi = POIModel::load($poiId); $pois = array_merge($pois, [$poi]); } // Initialise bounds and extend by all pois $bounds = new ViewBounds($pois[0]->latLng(), $pois[0]->latLng()); for ($i = 1; $i < count($pois); $i++) { if ($pois[$i]->border() === NULL) { $bounds->extendByLatLng($pois[$i]->latLng()); } else { $borderBounds = ViewBounds::fromPolygon($pois[$i]->border()); $bounds->extendByBounds($borderBounds); } } $vBounds->fitBounds($bounds, $zoom); $bounds->buffer(30, 30, $zoom); $vBounds->fitBounds($bounds, $zoom); } addFlag($res, 'panToCenter'); addFlag($res, 'doLabelling'); } if (count($types) > 0) { $bounds = $vBounds->toBounds(); if (in_array('zoomToTypes', $flags)) { $guard = 18; // while (!LabelModel::typesWithinBounds($bounds, $types, $poiId) && --$guard > 0) { while (!LabelModel::oneOfTypesWithinBounds($bounds, $types, $poiId) && --$guard > 0) { $vBounds->zoomOut(); $bounds = $vBounds->toBounds(); $zoom--; addFlag($res, 'panToCenter'); } } addLabels($res, LabelModel::loadDynamicByBounds($bounds, $types, $poiId)); addFlag($res, 'doLabelling'); } if ($poiId !== 0 || $types !== NULL && count($types) > 0) { $bounds = $vBounds->toBounds(); $exceptIds = array_merge($poiIds, [$poiId]); addLabels($res, LabelModel::loadStaticDynamicByBounds($bounds, $zoom, $exceptIds, $types)); } else { $bounds = $vBounds->toBounds(); addLabels($res, LabelModel::loadStaticByBounds($bounds, $zoom)); } if (hasFlag($flags, 'newPois')) { // Parameter '1' TO BE changed to logged-in user's id $bounds = $vBounds->toBounds(); $res['new'] = LabelModel::loadNew($bounds, 1); } $res['center'] = $vBounds->getCenter()->toWKT(); $res['zoom'] = $zoom; return $res; }
$duration = (int) $_POST['stopgps'] - (int) $_POST['startgps']; $flagdatadir = getenv('SEGMENT_DATA_DIR'); $filename = $_POST['site'] . "-" . "SCIMON_DQ_" . $name . "-" . $_POST['startgps'] . "-" . $duration . ".xml"; if (eregi('/', $filename)) { die("Error: attempt to insert a slash into DQ filename: request denied"); } $filename = $flagdatadir . "/" . $filename; // construct username $split_username = explode("@", $_POST[user]); $username = $split_username[0] . "@ligo.org"; $pid = getmypid(); $node = gethostbyaddr(getenv('REMOTE_ADDR')); $brief_desc = htmlspecialchars($_POST[comment]); $process = " <Table Name='process:table'>\n" . " <Column Name='process:program' Type='lstring'/>\n" . " <Column Name='process:version' Type='lstring'/>\n" . " <Column Name='process:cvs_repository' Type='lstring'/>\n" . " <Column Name='process:comment' Type='lstring'/>\n" . " <Column Name='process:node' Type='lstring'/>\n" . " <Column Name='process:username' Type='lstring'/>\n" . " <Column Name='process:unix_procid' Type='int_4s'/>\n" . " <Column Name='process:start_time' Type='int_4s'/>\n" . " <Column Name='process:end_time' Type='int_4s'/>\n" . " <Column Name='process:process_id' Type='ilwd:char'/>\n" . " <Column Name='process:ifos' Type='lstring'/>\n" . " <Stream Name='process:table' Type='Local' Delimiter=','>\n" . ' "submitflag.php"' . ',' . ' "1.0"' . ',' . ' "/lalsuite/glue/php/submitflag.php"' . ',' . '"' . $brief_desc . '"' . ',' . '"' . $node . '"' . ',' . '"' . $_POST[user] . '"' . ',' . " {$pid}" . ',' . " {$_POST['startgps']}" . ',' . " {$_POST['stopgps']}" . ',' . ' "process:process_id:0"' . ',' . ' "' . $_POST[site] . '"' . "\n" . ' </Stream>' . "\n" . ' </Table>' . "\n"; $segment_definer = " <Table Name='segment_definer:table'>\n" . " <Column Name='segment_definer:process_id' Type='ilwd:char'/>\n" . " <Column Name='segment_definer:segment_def_id' Type='ilwd:char'/>\n" . " <Column Name='segment_definer:ifos' Type='lstring'/>\n" . " <Column Name='segment_definer:name' Type='lstring'/>\n" . " <Column Name='segment_definer:version' Type='int_4s'/>\n" . " <Column Name='segment_definer:comment' Type='lstring'/>\n" . " <Stream Name='segment_definer:table' Type='Local' Delimiter=','>\n" . ' "process:process_id:0"' . ',' . ' "segment_definer:segment_def_id:0"' . ',' . ' "' . $_POST[site] . '"' . ',' . '"' . $name . '"' . "," . " 1" . "," . '"' . $seg_def_comment . '"' . " </Stream>\n" . " </Table>\n"; $segment = " <Table Name='segment:table'>\n" . " <Column Name='segment:segment_id' Type='ilwd:char'/>\n" . " <Column Name='segment:start_time' Type='int_4s'/>\n" . " <Column Name='segment:end_time' Type='int_4s'/>\n" . " <Column Name='segment:segment_def_id' Type='ilwd:char'/>\n" . " <Column Name='segment:process_id' Type='ilwd:char'/>\n" . " <Stream Name='segment:table' Type='Local' Delimiter=','>\n" . ' "segment:segment_id:0"' . ',' . " {$_POST['startgps']}" . "," . " {$_POST['stopgps']}" . "," . ' "segment_definer:segment_def_id:0"' . ',' . ' "process:process_id:0"' . "\n" . " </Stream>\n" . " </Table>\n"; $url_string = htmlspecialchars($_POST[url]); $segment_summary = " <Table Name='segment_summary:table'>\n" . " <Column Name='segment_summary:start_time' Type='int_4s'/>\n" . " <Column Name='segment_summary:end_time' Type='int_4s'/>\n" . " <Column Name='segment_summary:comment' Type='lstring'/>\n" . " <Column Name='segment_summary:segment_def_id' Type='ilwd:char'/>\n" . " <Column Name='segment_summary:process_id' Type='ilwd:char'/>\n" . " <Column Name='segment_summary:segment_sum_id' Type='ilwd:char'/>\n" . " <Stream Name='segment_summary:table' Type='Local' Delimiter=','>\n" . " {$_POST['startgps']}" . "," . " {$_POST['stopgps']}" . "," . '"' . $url_string . '"' . ',' . ' "segment_definer:segment_def_id:0"' . ',' . ' "process:process_id:0"' . ',' . ' "segment_summary:segment_sum_id:0"' . "\n" . " </Stream>\n" . " </Table>\n"; $flagData = $process . $segment_definer . $segment . $segment_summary; addFlag($filename, $flagData); ?> <p> <center><input type="button" value="Enter Another Flag" onclick="history.go(-2)"></center> </p> <?php require './scripts/footer.php'; ?> </body> </head>