|
|
|
<?php
|
|
|
|
/**
|
|
|
|
* @var CommunityRoom[] $rooms
|
|
|
|
*/
|
|
|
|
|
|
|
|
function room_qr_code_cached($room_id) {
|
|
|
|
global $QR_CODES;
|
|
|
|
return "$QR_CODES/$room_id.png";
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Fetch QR codes from SOGS server and encode them as base64
|
|
|
|
* @param CommunityRoom $room
|
|
|
|
*/
|
|
|
|
function base64_qr_code($room, $size = "512x512") {
|
|
|
|
$room_id = $room->get_room_identifier();
|
|
|
|
$png_cached = room_qr_code_cached($room_id);
|
|
|
|
if (file_exists($png_cached)) {
|
|
|
|
// fwrite(STDERR, "QR code found for " . $room_id . PHP_EOL);
|
|
|
|
return base64_encode(file_get_contents($png_cached));
|
|
|
|
}
|
|
|
|
// fwrite(STDERR, "QR code NOT found for " . $room_id . PHP_EOL);
|
|
|
|
log_info("Fetching QR code for $room_id.");
|
|
|
|
$png = file_get_contents($room->get_invite_url());
|
|
|
|
file_put_contents($png_cached, $png);
|
|
|
|
return base64_encode($png);
|
|
|
|
}
|
|
|
|
|
|
|
|
file_exists($QR_CODES) or mkdir($QR_CODES, 0700);
|
|
|
|
?>
|
|
|
|
|
|
|
|
<div id="modal-container">
|
|
|
|
<?php foreach ($rooms as $room): ?>
|
|
|
|
<div id="modal_<?=$room->get_room_identifier()?>" class="qr-code-modal">
|
|
|
|
<div class="qr-code-modal-content">
|
|
|
|
<span class="qr-code-modal-close" onclick='hideQRModal("<?=$room->get_room_identifier()?>")'>
|
|
|
|
×
|
|
|
|
</span>
|
|
|
|
<img
|
|
|
|
src="data:image/png;base64,<?=base64_qr_code($room)?>"
|
|
|
|
alt="Community join link encoded as QR code"
|
|
|
|
class="qr-code"
|
|
|
|
loading="lazy"
|
|
|
|
>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<?php endforeach; ?>
|
|
|
|
</div>
|