diff options
Diffstat (limited to 'includes/system/tree.php')
-rw-r--r-- | includes/system/tree.php | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/includes/system/tree.php b/includes/system/tree.php new file mode 100644 index 0000000..04cbf83 --- /dev/null +++ b/includes/system/tree.php @@ -0,0 +1,114 @@ +<?php global $system; global $systemCommonName; global $systemID; $title = "System tree ยท " . $systemCommonName; require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/header.php'; + +$members = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-members.json"), true); +$members = scoreOrder($members, $systemID); + +$subsystems = json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-subsystems.json"), true) ?? []; + +function getMember(string $id) { + global $systemID; + global $members; + + $member = null; + + foreach ($members as $m) { + if ($m["id"] === $id) $member = $m; + } + + return $member; +} + +function memberHasSubsystem(array $member) { + global $subsystems; + $has = false; + + foreach ($subsystems as $subsystem) { + if ($subsystem["source_type"] === "member" && $subsystem["source"] === $member["id"]) { + $has = true; + } + } + + return $has; +} + +function memberPartOfSubsystem(array $member) { + global $subsystems; + $is = false; + + foreach ($subsystems as $subsystem) { + if (in_array($member["id"], $subsystem["members"])) { + $is = true; + } + } + + return $is; +} + +function getMemberSubsystem(array $member) { + global $subsystems; + $subsystem = null; + + foreach ($subsystems as $ss) { + if ($ss["source_type"] === "member" && $ss["source"] === $member["id"]) { + $subsystem = $ss; + } + } + + return $subsystem; +} + +?> + + <br> + <div class="container" id="page-content"> + <h2>System tree for the <?= $systemCommonName ?></h2> + <a class="tree-root member-link" href="/<?= $system ?>"> + <img src="/assets/uploads/<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/" . $system . ".png") ? $system : "" ?>.png" style="width:24px;"> <span style="vertical-align: middle;"><?= $systemCommonName ?></span></a> + <?php $first = true; ?> + <?php foreach ($subsystems as $subsystem): if ($subsystem["source_type"] === "trait"): ?> + <div class="tree-l0"> + <div class="tree-l0-separator<?= $first ? " tree-first-separator" : "" ?>"> </div> + <div class="tree-inner"> + <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/-/subsystem/<?= $subsystem["source"] ?>"> + <img src="/assets/uploads/ss-<?= $subsystem["source"] ?>.png" style="width:24px;border-radius:5px;"> <span style="vertical-align: middle;"><?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-subsystem-$subsystem[source].json") ? json_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/$systemID-subsystem-$subsystem[source].json"), true)["name"] : $subsystem["source"] ?></span> + </a> + </div> + <?php $ssfirst = true; foreach ($subsystem["members"] as $ssm): $ssmember = getMember($ssm); ?> + <div class="tree-l1"> + <div class="tree-l0-separator"> </div> + <div class="tree-l1-separator<?= $ssfirst ? " tree-first-separator" : "" ?>"> </div> + <div class="tree-inner"> + <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $ssmember["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $ssmember['name'] . ".png") ? "-" . $ssmember['name'] : "" ?>.png" style="width:24px;"> <span style="vertical-align: middle;"><?= $ssmember["display_name"] ?? $ssmember["name"] ?></span> + </a> + </div> + </div> + <?php $ssfirst = false; endforeach; ?> + </div> + <?php $first = false; endif; endforeach; ?> + <?php foreach ($members as $member): if (!memberPartOfSubsystem($member)): ?> + <div class="tree-l0"> + <div class="tree-l0-separator<?= $first ? " tree-first-separator" : "" ?>"> </div> + <div class="tree-inner"> + <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $member["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $member['name'] . ".png") ? "-" . $member['name'] : "" ?>.png" style="width:24px;"> <span style="vertical-align: middle;"><?= $member["display_name"] ?? $member["name"] ?></span> + </a> + </div> + <?php if (memberHasSubsystem($member)): ?> + <?php $ssfirst = true; foreach (getMemberSubsystem($member)["members"] as $ssm): $ssmember = getMember($ssm); ?> + <div class="tree-l1"> + <div class="tree-l0-separator"> </div> + <div class="tree-l1-separator<?= $ssfirst ? " tree-first-separator" : "" ?>"> </div> + <div class="tree-inner"> + <a class="member-link" href="/<?= $systemID === "gdapd" ? "raindrops" : "cloudburst" ?>/<?= $ssmember["name"] ?>"> + <img src="/assets/uploads/pt<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/assets/uploads/pt-" . $ssmember['name'] . ".png") ? "-" . $ssmember['name'] : "" ?>.png" style="width:24px;"> <span style="vertical-align: middle;"><?= $ssmember["display_name"] ?? $ssmember["name"] ?></span> + </a> + </div> + </div> + <?php $ssfirst = false;endforeach; ?> + <?php endif; ?> + </div> + <?php $first = false; endif; endforeach; ?> + </div> + +<?php require_once $_SERVER['DOCUMENT_ROOT'] . '/includes/footer.php'; ?>
\ No newline at end of file |