|  |  |  | <?php | 
					
						
							|  |  |  | 	require_once "$PROJECT_ROOT/php/utils/utils.php"; | 
					
						
							|  |  |  | 	require_once "$PROJECT_ROOT/php/utils/servers-rooms.php"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	/** | 
					
						
							|  |  |  | 	 * @var CommunityRoom[] $rooms | 
					
						
							|  |  |  | 	 */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Once handlers are attached in JS, this check ceases to be useful. | 
					
						
							|  |  |  | 	function column_sortable($id) { | 
					
						
							|  |  |  | 		// Join URL contents are not guaranteed to have visible text. | 
					
						
							|  |  |  | 		return $id != "qr" && $id != "preview" && $id != "join_url"; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	function sort_onclick($colno) { | 
					
						
							|  |  |  | 		global $TABLE_COLUMNS; | 
					
						
							|  |  |  | 		$column = $TABLE_COLUMNS[$colno]; | 
					
						
							|  |  |  | 		if (!column_sortable($column['id'])) return ""; | 
					
						
							|  |  |  | 		$name = $column['name']; | 
					
						
							|  |  |  | 		return " title='Click to sort by $name'"; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	$TABLE_COLUMNS = [ | 
					
						
							|  |  |  | 		['id' => "identifier", 'name' => "Identifier"], | 
					
						
							|  |  |  | 		['id' => "language", 'name' => "L"], | 
					
						
							|  |  |  | 		['id' => "name", 'name' => "Name"], | 
					
						
							|  |  |  | 		['id' => "description", 'name' => "Description"], | 
					
						
							|  |  |  | 		['id' => "users", 'name' => "Users"], | 
					
						
							|  |  |  | 		['id' => "preview", 'name' => "Preview"], | 
					
						
							|  |  |  | 		['id' => "qr", 'name' => "QR"], | 
					
						
							|  |  |  | 		['id' => "server_icon", 'name' => "Server"], | 
					
						
							|  |  |  | 		['id' => "join_url", 'name' => "Join URL"], | 
					
						
							|  |  |  | 	]; | 
					
						
							|  |  |  | ?> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <table id="tbl_communities"> | 
					
						
							|  |  |  | 	<tr> | 
					
						
							|  |  |  | <?php foreach ($TABLE_COLUMNS as $colno => $column): ?> | 
					
						
							|  |  |  | 		<th<?=sort_onclick($colno)?> id="th_<?=$column['id']?>"> | 
					
						
							|  |  |  | 			<?=$column['name']?> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		</th> | 
					
						
							|  |  |  | <?php endforeach; ?> | 
					
						
							|  |  |  | 	</tr> | 
					
						
							|  |  |  | <?php foreach ($rooms as $id => $room): ?> | 
					
						
							|  |  |  | 	<?php | 
					
						
							|  |  |  | 		// TODO: Do not forget to rename this escape when merging! | 
					
						
							|  |  |  | 		$token = $room->server->get_pubkey(); | 
					
						
							|  |  |  | 		$icon_hue = hexdec($token[2] . $token[2]); | 
					
						
							|  |  |  | 		$icon_color = "hsl($icon_hue, 80%, 50%)"; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		$hostname = $room->server->get_base_url(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		// Escape external input. | 
					
						
							|  |  |  | 		// Ternaries prevent passing null-equal strings, which produce warnings. | 
					
						
							|  |  |  | 		$id = htmlspecialchars($room->get_room_identifier()); | 
					
						
							|  |  |  | 		$language = $room->language_flag ? htmlspecialchars($room->language_flag) : ""; | 
					
						
							|  |  |  | 		$name = htmlspecialchars($room->name); | 
					
						
							|  |  |  | 		$desc = $room->description ? htmlspecialchars($room->description) : ""; | 
					
						
							|  |  |  | 		$users = htmlspecialchars($room->active_users); | 
					
						
							|  |  |  | 		$preview_link = htmlspecialchars($room->get_preview_url()); | 
					
						
							|  |  |  | 		$join_link = htmlspecialchars($room->get_join_url()); | 
					
						
							|  |  |  | 		// TODO: Do not forget to rename this escape when merging! | 
					
						
							|  |  |  | 		$token = htmlspecialchars($token); | 
					
						
							|  |  |  | 		$hostname = htmlspecialchars($hostname); | 
					
						
							|  |  |  | 	?> | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	<tr id="<?=$id?>" itemscope itemtype="https://schema.org/EntryPoint" --data-identifier="<?=$id?>"> | 
					
						
							|  |  |  | 		<td class="td_identifier" itemprop="identifier"><?=$id?></td> | 
					
						
							|  |  |  | 		<td class="td_language"><?=$language?></td> | 
					
						
							|  |  |  | 		<td class="td_name" itemprop="name"><?=$name?></td> | 
					
						
							|  |  |  | 		<td class="td_description" itemprop="description"><?=$desc?></td> | 
					
						
							|  |  |  | 		<td class="td_users"><?=$users?></td> | 
					
						
							|  |  |  | 		<td class="td_preview" itemprop="url"> | 
					
						
							|  |  |  | 			<a href="<?=$preview_link?>" target="_blank" rel="noopener noreferrer nofollow"> | 
					
						
							|  |  |  | 				<?php if (str_starts_with($room->get_preview_url(), 'http://')): ?> | 
					
						
							|  |  |  | 					<span class="protocol-indicator protocol-http">HTTP</span> | 
					
						
							|  |  |  | 				<?php endif; ?> | 
					
						
							|  |  |  | 				<?php if (str_starts_with($room->get_preview_url(), 'https://')): ?> | 
					
						
							|  |  |  | 					<span class="protocol-indicator protocol-https">HTTPS</span> | 
					
						
							|  |  |  | 				<?php endif; ?> | 
					
						
							|  |  |  | 			</a> | 
					
						
							|  |  |  | 		</td> | 
					
						
							|  |  |  | 		<td class="td_qr_code"> | 
					
						
							|  |  |  | 			<img | 
					
						
							|  |  |  | 				class="qr-code-icon" | 
					
						
							|  |  |  | 				src="qrcode-solid.svg" | 
					
						
							|  |  |  | 				alt="Pictogram of a QR code" | 
					
						
							|  |  |  | 			> | 
					
						
							|  |  |  | 		</td> | 
					
						
							|  |  |  | 		<td class="td_server_icon" | 
					
						
							|  |  |  | 			data-token="<?=$token?>" | 
					
						
							|  |  |  | 			title="<?=$hostname?> (<?=$token?>)" | 
					
						
							|  |  |  | 			item="image" | 
					
						
							|  |  |  | 		> | 
					
						
							|  |  |  | 			<div class="td_server_icon-circle" style="background-color: <?=$icon_color?>"> | 
					
						
							|  |  |  | 				<span><?=strtoupper($token[0] . $token[1])?></span> | 
					
						
							|  |  |  | 			</div> | 
					
						
							|  |  |  | 		</td> | 
					
						
							|  |  |  | 		<td class="td_join_url"> | 
					
						
							|  |  |  | 			<div class="join_url_container" data-url="<?=$join_link?>"> | 
					
						
							|  |  |  | 				<a class="join_url show-from-w5" title="<?=$join_link?>" | 
					
						
							|  |  |  | 					><?=truncate($join_link, 32)?></a> | 
					
						
							|  |  |  | 				<a class="noscript" href="<?=$join_link?>" rel="external nofollow" | 
					
						
							|  |  |  | 					>Copy link</a> | 
					
						
							|  |  |  | 			</div> | 
					
						
							|  |  |  | 		</td> | 
					
						
							|  |  |  | 	</tr> | 
					
						
							|  |  |  | <?php endforeach; ?> | 
					
						
							|  |  |  | </table> |