Files
intranet/web/intranet_repo/projects/developerpanel/developer.php
T

119 lines
6.9 KiB
PHP

<?php /* Name: developer.php
Beschreibung: Entwickler-Anwendungen */
// Initialisierung
require_once $_SERVER['DOCUMENT_ROOT'].'/intranet_repo/general_files/initialise.php';
require_once __DIR__.'/util/developer_helpers.php';
// Zugriff nur für Entwickler
if (!isset($groups["Entwickler"]) || $groups["Entwickler"] != 1) {
header("Location: {$g_httpHomePath}");
exit();
}
$feedError = '';
try {
$feedItems = developer_feed_items();
} catch (RuntimeException) {
$feedItems = [];
$feedError = 'Der Git-RSS-Feed ist momentan nicht erreichbar.';
}
$feedGroups = developer_feed_groups($feedItems);
?>
<!DOCTYPE html>
<html lang="de" dir="ltr">
<head>
<?php require_once $_SERVER['DOCUMENT_ROOT'].'/intranet_repo/projects/_central/php/html_head.php'; ?>
<link rel="stylesheet" href="/intranet_repo/projects/_central/layouts/developerpanel.css">
</head>
<body class="theme-green">
<?php require_once $_SERVER['DOCUMENT_ROOT'].'/intranet_repo/projects/_central/php/header.php'; ?>
<div class="header_title ht_dev" id="header_title">
<span class="header_title_text">Entwickler</span>
</div>
<div class="mainpage" id="mainpage">
<div class="mainpage_container">
<button type="button" class="button_mainpage unselectable bg_green" onclick="window.open('https://git.pelpino.de/NAK-Reinickendorf/intranet', '_blank', 'noopener,noreferrer');">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="32" height="32" aria-hidden="true" focusable="false"><path d="M23.546 10.93 13.067.452a1.55 1.55 0 0 0-2.188 0L8.708 2.627l2.76 2.76a1.838 1.838 0 0 1 2.327 2.341l2.658 2.66a1.837 1.837 0 1 1-1.102 1.033L12.87 8.94v6.526a1.837 1.837 0 1 1-1.512-.053V8.828a1.838 1.838 0 0 1-.999-2.409L7.636 3.697.45 10.881a1.55 1.55 0 0 0 0 2.188l10.48 10.48a1.55 1.55 0 0 0 2.186 0l10.43-10.43a1.55 1.55 0 0 0 0-2.188Z"/></svg>
<div class="text">Quellcode (Git)</div>
</button>
<button type="button" class="button_mainpage unselectable bg_green" onclick="window.open('https://pgadmin.pelpino.de/', '_blank', 'noopener,noreferrer');">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="32" height="32" aria-hidden="true" focusable="false"><path d="M12 2C7.03 2 3 3.79 3 6v12c0 2.21 4.03 4 9 4s9-1.79 9-4V6c0-2.21-4.03-4-9-4Zm0 2c4.42 0 7 .99 7 2s-2.58 2-7 2-7-.99-7-2 2.58-2 7-2Zm0 16c-4.42 0-7-.99-7-2v-2.13C6.63 16.57 9.14 17 12 17s5.37-.43 7-1.13V18c0 1.01-2.58 2-7 2Zm0-5c-4.42 0-7-.99-7-2v-2.13C6.63 11.57 9.14 12 12 12s5.37-.43 7-1.13V13c0 1.01-2.58 2-7 2Z"/></svg>
<div class="text">Datenbank (Postgres)</div>
</button>
<button type="button" class="button_mainpage unselectable bg_green" onclick="window.open('https://git.pelpino.de/NAK-Reinickendorf/intranet/projects/2', '_blank', 'noopener,noreferrer');">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="32" height="32" aria-hidden="true" focusable="false"><path d="M3 3h5v18H3V3Zm6.5 0h5v11h-5V3ZM16 3h5v7h-5V3Zm0 8.5h5V21h-5v-9.5ZM9.5 15.5h5V21h-5v-5.5Z"/></svg>
<div class="text">Projekt-Board</div>
</button>
<button type="button" class="button_mainpage unselectable bg_green" onclick="window.open('https://git.pelpino.de/NAK-Reinickendorf/intranet/wiki', '_blank', 'noopener,noreferrer');">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" width="32" height="32" aria-hidden="true" focusable="false"><path d="M4 3a3 3 0 0 0-3 3v13.5A1.5 1.5 0 0 0 2.5 21H11V5.5A2.5 2.5 0 0 0 8.5 3H4Zm16 0h-4.5A2.5 2.5 0 0 0 13 5.5V21h8.5a1.5 1.5 0 0 0 1.5-1.5V6a3 3 0 0 0-3-3Z"/></svg>
<div class="text">Wiki</div>
</button>
<section class="content_panel developer-feed" aria-labelledby="developer-feed-title">
<div class="developer-feed_header">
<svg viewBox="0 0 16 16" aria-hidden="true"><path d="M2.002 2.725a.75.75 0 0 1 .797-.699C8.79 2.42 13.58 7.21 13.974 13.201a.75.75 0 0 1-1.497.098 10.5 10.5 0 0 0-9.776-9.776.747.747 0 0 1-.7-.798ZM2.84 7.05h-.002a7 7 0 0 1 6.113 6.111.75.75 0 0 1-1.49.178 5.5 5.5 0 0 0-4.8-4.8.75.75 0 0 1 .179-1.489M2 13a1 1 0 1 1 2 0 1 1 0 0 1-2 0"/></svg>
<h2 id="developer-feed-title">Git-Aktivität</h2>
</div>
<?php if ($feedItems === []): ?>
<p class="developer-feed_empty"><?= $feedError ?: 'Noch keine Git-Aktivität vorhanden.' ?></p>
<?php else: ?>
<div id="developer-feed-list">
<?php $itemIndex = 0; ?>
<?php foreach ($feedGroups as $group => $items): ?>
<section class="developer-feed_group"<?= $itemIndex >= DEVELOPER_FEED_LIMIT ? ' hidden' : '' ?>>
<h3><?= htmlspecialchars($group, ENT_QUOTES, 'UTF-8') ?></h3>
<ul>
<?php foreach ($items as $item): ?>
<li<?= $itemIndex++ >= DEVELOPER_FEED_LIMIT ? ' hidden' : '' ?>>
<a href="<?= htmlspecialchars($item['url'], ENT_QUOTES, 'UTF-8') ?>" target="_blank" rel="noopener noreferrer">
<span class="developer-feed_icon" aria-hidden="true"><svg viewBox="0 0 24 24"><path d="<?= developer_feed_icon($item['title']) ?>"/></svg></span>
<span class="developer-feed_message">
<strong><?= htmlspecialchars($item['title'], ENT_QUOTES, 'UTF-8') ?></strong>
<?php if ($item['description'] !== ''): ?>
<span class="developer-feed_description"><?= htmlspecialchars($item['description'], ENT_QUOTES, 'UTF-8') ?></span>
<?php endif; ?>
<span class="developer-feed_meta">
<span><?= htmlspecialchars($item['author'], ENT_QUOTES, 'UTF-8') ?></span>
<?php if ($item['timestamp'] > 0): ?><span>·</span><time datetime="<?= date('c', $item['timestamp']) ?>"><?= date('d.m.Y · H:i', $item['timestamp']) ?></time><?php endif; ?>
</span>
</span>
</a>
</li>
<?php endforeach; ?>
</ul>
</section>
<?php endforeach; ?>
</div>
<?php if (count($feedItems) > DEVELOPER_FEED_LIMIT): ?>
<button class="developer-feed_more" type="button" id="developer-feed-more" aria-expanded="false" aria-controls="developer-feed-list">Mehr anzeigen</button>
<?php endif; ?>
<?php endif; ?>
</section>
</div>
</div>
<?php require_once $_SERVER['DOCUMENT_ROOT'].'/intranet_repo/projects/_central/php/footer.php'; ?>
<?php if (count($feedItems) > DEVELOPER_FEED_LIMIT): ?>
<script>
document.getElementById('developer-feed-more').addEventListener('click', function () {
const expanded = this.getAttribute('aria-expanded') === 'true';
const list = document.getElementById('developer-feed-list');
list.querySelectorAll('li').forEach((item, index) => item.hidden = expanded && index >= <?= DEVELOPER_FEED_LIMIT ?>);
list.querySelectorAll('.developer-feed_group').forEach(group => group.hidden = !group.querySelector('li:not([hidden])'));
this.setAttribute('aria-expanded', String(!expanded));
this.textContent = expanded ? 'Mehr anzeigen' : 'Weniger anzeigen';
});
</script>
<?php endif; ?>
</body>
</html>