Add table for new and rare species

This commit is contained in:
Alexandre
2024-11-26 10:05:22 +01:00
committed by Nachtzuster
parent 5c8d30797e
commit f93b448b7f
+133
View File
@@ -313,6 +313,139 @@ if (get_included_files()[0] === __FILE__) {
<div class="right-column">
<div class="center-column">
</div>
<?php
$statement = $db->prepare("
SELECT d_today.Com_Name, d_today.Sci_Name, d_today.Date, d_today.Time, d_today.Confidence, d_today.File_Name,
MAX(d_today.Confidence) as MaxConfidence,
(SELECT MAX(Date) FROM detections d_prev WHERE d_prev.Com_Name = d_today.Com_Name AND d_prev.Date < DATE('now', 'localtime')) as LastSeenDate,
(SELECT COUNT(*) FROM detections d_occ WHERE d_occ.Com_Name = d_today.Com_Name AND d_occ.Date = DATE('now', 'localtime') AND d_occ.Time >= d_today.Time) as OccurrenceCount
FROM detections d_today
WHERE d_today.Date = DATE('now', 'localtime')
GROUP BY d_today.Com_Name
");
ensure_db_ok($statement);
$result = $statement->execute();
$new_species = [];
$rare_species = [];
$rare_species_threshold = isset($config['RARE_SPECIES_THRESHOLD']) ? $config['RARE_SPECIES_THRESHOLD'] : 30;
while ($row = $result->fetchArray(SQLITE3_ASSOC)) {
$last_seen_date = $row['LastSeenDate'];
if ($last_seen_date === NULL) {
$new_species[] = $row;
} else {
$date1 = new DateTime($last_seen_date);
$date2 = new DateTime('now');
$interval = $date1->diff($date2);
$days_ago = $interval->days;
if ($days_ago > $rare_species_threshold) {
$row['DaysAgo'] = $days_ago;
$rare_species[] = $row;
}
}
}
if (!isset($_SESSION['images'])) {
$_SESSION['images'] = [];
}
$flickr = null;
function display_species($species_list, $title, $show_last_seen=false) {
global $config, $_SESSION, $flickr;
$species_count = count($species_list);
if ($species_count > 0): ?>
<div class="<?php echo strtolower(str_replace(' ', '_', $title)); ?>">
<h2 style="text-align:center;"><?php echo $species_count; ?> <?php echo strtolower($title); ?> detected today!</h2>
<?php if ($species_count > 5): ?>
<table><tr><td style="text-align:center;"><form action="" method="GET"><input type="hidden" name="view" value="Recordings"><button type="submit" name="date" value="<?php echo date('Y-m-d');?>">Open Today's recordings page</button></form></td></tr></table>
<?php else: ?>
<table>
<?php
$iterations = 0;
foreach($species_list as $todaytable):
$iterations++;
$comname = preg_replace('/ /', '_', $todaytable['Com_Name']);
$comname = preg_replace('/\'/', '', $comname);
$comnamegraph = str_replace("'", "\'", $todaytable['Com_Name']);
$filename = "/By_Date/".$todaytable['Date']."/".$comname."/".$todaytable['File_Name'];
$filename_formatted = $todaytable['Date']."/".$comname."/".$todaytable['File_Name'];
$sciname = preg_replace('/ /', '_', $todaytable['Sci_Name']);
$engname = get_com_en_name($todaytable['Sci_Name']);
$engname_url = str_replace("'", '', str_replace(' ', '_', $engname));
$info_url = get_info_url($todaytable['Sci_Name']);
$url = $info_url['URL'];
$url_title = $info_url['TITLE'];
$image_url = ""; // Default empty image URL
if (!empty($config["FLICKR_API_KEY"])) {
if ($flickr === null) {
$flickr = new Flickr();
}
if (isset($_SESSION["FLICKR_FILTER_EMAIL"]) && $_SESSION["FLICKR_FILTER_EMAIL"] !== $flickr->get_uid_from_db()['uid']) {
unset($_SESSION['images']);
$_SESSION["FLICKR_FILTER_EMAIL"] = $flickr->get_uid_from_db()['uid'];
}
// Check if the Flickr image has been cached in the session
$key = array_search($comname, array_column($_SESSION['images'], 0));
if ($key !== false) {
$image = $_SESSION['images'][$key];
} else {
// Retrieve the image from Flickr API and cache it
$flickr_cache = $flickr->get_image($todaytable['Sci_Name']);
array_push($_SESSION["images"], array($comname, $flickr_cache["image_url"], $flickr_cache["title"], $flickr_cache["photos_url"], $flickr_cache["author_url"], $flickr_cache["license_url"]));
$image = $_SESSION['images'][count($_SESSION['images']) - 1];
}
$image_url = $image[1] ?? ""; // Get the image URL if available
}
if ($show_last_seen && isset($todaytable['DaysAgo'])) {
$days_ago = $todaytable['DaysAgo'];
if ($days_ago > 30) {
$months_ago = floor($days_ago / 30);
$last_seen_text = "<br><i>Last: {$months_ago}mo ago</i>";
} else {
$last_seen_text = "<br><i>Last: {$days_ago}d ago</i>";
}
}
$time_occurrence_text = "<br>{$todaytable['Time']}";
if (isset($todaytable['OccurrenceCount']) && $todaytable['OccurrenceCount'] > 1) {
$time_occurrence_text .= " ({$todaytable['OccurrenceCount']}x)";
}
?>
<tr class="relative" id="<?php echo $iterations; ?>">
<td><?php if (!empty($image_url)): ?>
<img onclick='setModalText(<?php echo $iterations; ?>,"<?php echo urlencode($image[2]); ?>", "<?php echo $image[3]; ?>", "<?php echo $image[4]; ?>", "<?php echo $image[1]; ?>", "<?php echo $image[5]; ?>")' src="<?php echo $image_url; ?>" style="max-width: none; height: 50px; width: 50px; border-radius: 5px; cursor: pointer;" class="img1" title="Image from Flickr" />
<?php endif; ?></td>
<td id="recent_detection_middle_td">
<div><form action="" method="GET">
<input type="hidden" name="view" value="Species Stats">
<button class="a2" type="submit" name="species" value="<?php echo $todaytable['Com_Name']; ?>"><?php echo $todaytable['Com_Name']; ?></button>
<br><i><?php echo $todaytable['Sci_Name']; ?><br>
<a href="<?php echo $url; ?>" target="_blank"><img style="height: 1em;cursor:pointer;float:unset;display:inline" title="<?php echo $url_title; ?>" src="images/info.png" width="25"></a>
<a href="https://wikipedia.org/wiki/<?php echo $sciname; ?>" target="_blank"><img style="height: 1em;cursor:pointer;float:unset;display:inline" title="Wikipedia" src="images/wiki.png" width="25"></a>
<?php if ($show_last_seen): ?>
<img style="height: 1em;cursor:pointer;float:unset;display:inline" title="View species stats" onclick="generateMiniGraph(this, '<?php echo $comnamegraph; ?>', 160)" width="25" src="images/chart.svg">
<?php endif; ?>
<a target="_blank" href="index.php?filename=<?php echo $todaytable['File_Name']; ?>"><img style="height: 1em;cursor:pointer;float:unset;display:inline" class="copyimage-mobile" title="Open in new tab" width="16" src="images/copy.png"></a>
</i>
</form></div>
</td>
<td style="white-space: nowrap;">Confidence: <?php echo round($todaytable['Confidence'] * 100 ) . '%'; echo $last_seen_text; echo $time_occurrence_text; ?><br></td>
</tr>
<?php endforeach; ?>
</table>
<?php endif; ?>
</div>
<?php endif;
}
display_species($new_species, 'New Species');
display_species($rare_species, 'Rare Species', true);
?>
<div class="chart">
<?php
$refresh = $config['RECORDING_LENGTH'];