Update - This is an automated commit

mane
Mia Raindrops 3 months ago
parent fff87a11d8
commit 96a61ac879
Signed by: Mia Raindrops
GPG Key ID: EFBDC68435A574B7

1
.gitignore vendored

@ -2,3 +2,4 @@ includes/data
includes/tokens
includes/email.json
uploads
includes/fcm/firebase.json

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="JavaScriptLibraryMappings">
<includedPredefinedLibrary name="Node.js Core" />
</component>
</project>

@ -0,0 +1,12 @@
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "dev.equestria.delta",
"sha256_cert_fingerprints":
[
"DC:3B:75:5A:AF:55:57:C2:41:1C:35:C3:D9:DC:35:10:E3:C9:E3:F5:AC:77:C1:66:C5:C9:BA:D5:D7:68:2E:B3",
"ED:58:23:E7:8D:5F:FC:FC:7D:CB:E0:37:88:EA:58:16:42:CA:89:8E:4E:47:4D:43:33:76:4C:7D:46:0E:A0:E2"
]
}
}]

@ -78,17 +78,17 @@ if (!isset($id)):
<div style="display: grid; grid-template-columns: repeat(3, 1fr); grid-gap: 20px;">
<div>
<?php $index = 1; foreach ($data["images"] as $image): if ($index % 3 === 1): ?>
<img title="<?= l("lang_gallery_uploader") . " " . resolveUser($image["author"]) . " " . timeAgo($image["date"]) ?>" src="/uploads/<?= $image["id"] ?>.jpg" style="width: 100%; margin-top: 20px; border-radius: 10px;" data-bs-toggle="tooltip">
<a href="#" onclick="showGalleryItem(<?= $index ?>);"><img id="gallery-item-<?= $index ?>" title="<?= l("lang_gallery_uploader") . " " . resolveUser($image["author"]) . " " . timeAgo($image["date"]) ?>" src="/uploads/<?= $image["id"] ?>.jpg" style="width: 100%; margin-top: 20px; border-radius: 10px;" data-bs-toggle="tooltip"></a>
<?php endif; $index++; endforeach; ?>
</div>
<div>
<?php $index = 1; foreach ($data["images"] as $image): if ($index % 3 === 2): ?>
<img title="<?= l("lang_gallery_uploader") . " " . resolveUser($image["author"]) . " " . timeAgo($image["date"]) ?>" src="/uploads/<?= $image["id"] ?>.jpg" style="width: 100%; margin-top: 20px; border-radius: 10px;" data-bs-toggle="tooltip">
<a href="#" onclick="showGalleryItem(<?= $index ?>);"><img id="gallery-item-<?= $index ?>" title="<?= l("lang_gallery_uploader") . " " . resolveUser($image["author"]) . " " . timeAgo($image["date"]) ?>" src="/uploads/<?= $image["id"] ?>.jpg" style="width: 100%; margin-top: 20px; border-radius: 10px;" data-bs-toggle="tooltip"></a>
<?php endif; $index++; endforeach; ?>
</div>
<div>
<?php $index = 1; foreach ($data["images"] as $image): if ($index % 3 === 0): ?>
<img title="<?= l("lang_gallery_uploader") . " " . resolveUser($image["author"]) . " " . timeAgo($image["date"]) ?>" src="/uploads/<?= $image["id"] ?>.jpg" style="width: 100%; margin-top: 20px; border-radius: 10px;" data-bs-toggle="tooltip">
<a href="#" onclick="showGalleryItem(<?= $index ?>);"><img id="gallery-item-<?= $index ?>" title="<?= l("lang_gallery_uploader") . " " . resolveUser($image["author"]) . " " . timeAgo($image["date"]) ?>" src="/uploads/<?= $image["id"] ?>.jpg" style="width: 100%; margin-top: 20px; border-radius: 10px;" data-bs-toggle="tooltip"></a>
<?php endif; $index++; endforeach; ?>
</div>
</div>
@ -98,6 +98,31 @@ if (!isset($id)):
</div>
</div>
<div class="modal fade" id="gallery-view">
<div class="modal-dialog modal-xl">
<div class="modal-content">
<div class="modal-header">
<h4 class="modal-title" id="gallery-view-title">-</h4>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<div id="gallery-view-img" style="height: calc(100vh - 140px);width: calc(100% + 2rem);margin: -1rem;border-bottom-left-radius: 0.5rem;border-bottom-right-radius: 0.5rem;background-size: contain;background-position: center;background-repeat: no-repeat;"></div>
</div>
</div>
</div>
</div>
<!--suppress JSUnresolvedVariable -->
<script>
function showGalleryItem(id) {
let item = document.getElementById("gallery-item-" + id);
document.getElementById("gallery-view-title").innerText = item.getAttribute("data-bs-original-title").replace(/ +/g, " ");
document.getElementById("gallery-view-img").style.backgroundImage = 'url("' + item.src + '")';
new bootstrap.Modal(document.getElementById("gallery-view")).show();
}
</script>
<br><br>
</div>

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><path d="M0,0h24v24H0V0z" fill="none"/><path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z"/></g></svg>

After

Width:  |  Height:  |  Size: 1.0 KiB

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#084298"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 6c1.11 0 2-.9 2-2 0-.38-.1-.73-.29-1.03L12 0l-1.71 2.97c-.19.3-.29.65-.29 1.03 0 1.1.9 2 2 2zm4.6 9.99l-1.07-1.07-1.08 1.07c-1.3 1.3-3.58 1.31-4.89 0l-1.07-1.07-1.09 1.07C6.75 16.64 5.88 17 4.96 17c-.73 0-1.4-.23-1.96-.61V21c0 .55.45 1 1 1h16c.55 0 1-.45 1-1v-4.61c-.56.38-1.23.61-1.96.61-.92 0-1.79-.36-2.44-1.01zM18 9h-5V7h-2v2H6c-1.66 0-3 1.34-3 3v1.54c0 1.08.88 1.96 1.96 1.96.52 0 1.02-.2 1.38-.57l2.14-2.13 2.13 2.13c.74.74 2.03.74 2.77 0l2.14-2.13 2.13 2.13c.37.37.86.57 1.38.57 1.08 0 1.96-.88 1.96-1.96V12C21 10.34 19.66 9 18 9z"/></svg>

After

Width:  |  Height:  |  Size: 698 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 6c1.11 0 2-.9 2-2 0-.38-.1-.73-.29-1.03L12 0l-1.71 2.97c-.19.3-.29.65-.29 1.03 0 1.1.9 2 2 2zm4.6 9.99l-1.07-1.07-1.08 1.07c-1.3 1.3-3.58 1.31-4.89 0l-1.07-1.07-1.09 1.07C6.75 16.64 5.88 17 4.96 17c-.73 0-1.4-.23-1.96-.61V21c0 .55.45 1 1 1h16c.55 0 1-.45 1-1v-4.61c-.56.38-1.23.61-1.96.61-.92 0-1.79-.36-2.44-1.01zM18 9h-5V7h-2v2H6c-1.66 0-3 1.34-3 3v1.54c0 1.08.88 1.96 1.96 1.96.52 0 1.02-.2 1.38-.57l2.14-2.13 2.13 2.13c.74.74 2.03.74 2.77 0l2.14-2.13 2.13 2.13c.37.37.86.57 1.38.57 1.08 0 1.96-.88 1.96-1.96V12C21 10.34 19.66 9 18 9z"/></svg>

After

Width:  |  Height:  |  Size: 698 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-5 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z"/></svg>

After

Width:  |  Height:  |  Size: 278 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><rect fill="none" height="24" width="24"/></g><g><path d="M17,10.43V2H7v8.43c0,0.35,0.18,0.68,0.49,0.86l4.18,2.51l-0.99,2.34l-3.41,0.29l2.59,2.24L9.07,22L12,20.23L14.93,22 l-0.78-3.33l2.59-2.24l-3.41-0.29l-0.99-2.34l4.18-2.51C16.82,11.11,17,10.79,17,10.43z M13,12.23l-1,0.6l-1-0.6V3h2V12.23z"/></g></svg>

After

Width:  |  Height:  |  Size: 443 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M7 14c-1.66 0-3 1.34-3 3 0 1.31-1.16 2-2 2 .92 1.22 2.49 2 4 2 2.21 0 4-1.79 4-4 0-1.66-1.34-3-3-3zm13.71-9.37l-1.34-1.34c-.39-.39-1.02-.39-1.41 0L9 12.25 11.75 15l8.96-8.96c.39-.39.39-1.02 0-1.41z"/></svg>

After

Width:  |  Height:  |  Size: 354 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><rect fill="none" height="24" width="24"/></g><g><g><g><path d="M12,2C6.5,2,2,6.5,2,12s4.5,10,10,10s10-4.5,10-10S17.5,2,12,2z M16.2,16.2L11,13V7h1.5v5.2l4.5,2.7L16.2,16.2z"/></g></g></g></svg>

After

Width:  |  Height:  |  Size: 331 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M12.65 10C11.83 7.67 9.61 6 7 6c-3.31 0-6 2.69-6 6s2.69 6 6 6c2.61 0 4.83-1.67 5.65-4H17v4h4v-4h2v-4H12.65zM7 14c-1.1 0-2-.9-2-2s.9-2 2-2 2 .9 2 2-.9 2-2 2z"/></svg>

After

Width:  |  Height:  |  Size: 313 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M21 6h-2v9H6v2c0 .55.45 1 1 1h11l4 4V7c0-.55-.45-1-1-1zm-4 6V3c0-.55-.45-1-1-1H3c-.55 0-1 .45-1 1v14l4-4h10c.55 0 1-.45 1-1z"/></svg>

After

Width:  |  Height:  |  Size: 281 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M3 17.25V21h3.75L17.81 9.94l-3.75-3.75L3 17.25zM20.71 7.04c.39-.39.39-1.02 0-1.41l-2.34-2.34c-.39-.39-1.02-.39-1.41 0l-1.83 1.83 3.75 3.75 1.83-1.83z"/></svg>

After

Width:  |  Height:  |  Size: 306 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></svg>

After

Width:  |  Height:  |  Size: 266 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z"/></svg>

After

Width:  |  Height:  |  Size: 293 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M11 21h-1l1-7H7.5c-.58 0-.57-.32-.38-.66.19-.34.05-.08.07-.12C8.48 10.94 10.42 7.54 13 3h1l-1 7h3.5c.49 0 .56.33.47.51l-.07.15C12.96 17.55 11 21 11 21z"/></svg>

After

Width:  |  Height:  |  Size: 271 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><rect fill="none" height="24" width="24"/><path d="M23,17c0,3.31-2.69,6-6,6v-1.5c2.48,0,4.5-2.02,4.5-4.5H23z M1,7c0-3.31,2.69-6,6-6v1.5C4.52,2.5,2.5,4.52,2.5,7H1z M8.01,4.32l-4.6,4.6c-3.22,3.22-3.22,8.45,0,11.67s8.45,3.22,11.67,0l7.07-7.07c0.49-0.49,0.49-1.28,0-1.77 c-0.49-0.49-1.28-0.49-1.77,0l-4.42,4.42l-0.71-0.71l6.54-6.54c0.49-0.49,0.49-1.28,0-1.77s-1.28-0.49-1.77,0l-5.83,5.83l-0.71-0.71 l6.89-6.89c0.49-0.49,0.49-1.28,0-1.77s-1.28-0.49-1.77,0l-6.89,6.89L11.02,9.8l5.48-5.48c0.49-0.49,0.49-1.28,0-1.77 s-1.28-0.49-1.77,0l-7.62,7.62c1.22,1.57,1.11,3.84-0.33,5.28l-0.71-0.71c1.17-1.17,1.17-3.07,0-4.24l-0.35-0.35l4.07-4.07 c0.49-0.49,0.49-1.28,0-1.77C9.29,3.83,8.5,3.83,8.01,4.32z"/></svg>

After

Width:  |  Height:  |  Size: 830 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M22 16V4c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v12c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2zm-11-4l2.03 2.71L16 11l4 5H8l3-4zM2 6v14c0 1.1.9 2 2 2h14v-2H4V6H2z"/></svg>

After

Width:  |  Height:  |  Size: 301 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 6h-2.18c.11-.31.18-.65.18-1 0-1.66-1.34-3-3-3-1.05 0-1.96.54-2.5 1.35l-.5.67-.5-.68C10.96 2.54 10.05 2 9 2 7.34 2 6 3.34 6 5c0 .35.07.69.18 1H4c-1.11 0-1.99.89-1.99 2L2 19c0 1.11.89 2 2 2h16c1.11 0 2-.89 2-2V8c0-1.11-.89-2-2-2zm-5-2c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zM9 4c.55 0 1 .45 1 1s-.45 1-1 1-1-.45-1-1 .45-1 1-1zm11 15H4v-2h16v2zm0-5H4V8h5.08L7 10.83 8.62 12 11 8.76l1-1.36 1 1.36L15.38 12 17 10.83 14.92 8H20v6z"/></svg>

After

Width:  |  Height:  |  Size: 593 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M11.5 2C6.81 2 3 5.81 3 10.5S6.81 19 11.5 19h.5v3c4.86-2.34 8-7 8-11.5C20 5.81 16.19 2 11.5 2zm1 14.5h-2v-2h2v2zm0-3.5h-2c0-3.25 3-3 3-5 0-1.1-.9-2-2-2s-2 .9-2 2h-2c0-2.21 1.79-4 4-4s4 1.79 4 4c0 2.5-3 2.75-3 5z"/></svg>

After

Width:  |  Height:  |  Size: 368 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z"/></svg>

After

Width:  |  Height:  |  Size: 267 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M12 22c1.1 0 2-.9 2-2h-4c0 1.1.89 2 2 2zm6-6v-5c0-3.07-1.64-5.64-4.5-6.32V4c0-.83-.67-1.5-1.5-1.5s-1.5.67-1.5 1.5v.68C7.63 5.36 6 7.92 6 11v5l-2 2v1h16v-1l-2-2z"/></svg>

After

Width:  |  Height:  |  Size: 280 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M6 17h3l2-4V7H5v6h3zm8 0h3l2-4V7h-6v6h3z"/></svg>

After

Width:  |  Height:  |  Size: 197 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M20 19.59V8l-6-6H6c-1.1 0-1.99.9-1.99 2L4 20c0 1.1.89 2 1.99 2H18c.45 0 .85-.15 1.19-.4l-4.43-4.43c-.8.52-1.74.83-2.76.83-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5 5c0 1.02-.31 1.96-.83 2.75L20 19.59zM9 13c0 1.66 1.34 3 3 3s3-1.34 3-3-1.34-3-3-3-3 1.34-3 3z"/></svg>

After

Width:  |  Height:  |  Size: 410 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>

After

Width:  |  Height:  |  Size: 446 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M20.01 15.38c-1.23 0-2.42-.2-3.53-.56-.35-.12-.74-.03-1.01.24l-1.57 1.97c-2.83-1.35-5.48-3.9-6.89-6.83l1.95-1.66c.27-.28.35-.67.24-1.02-.37-1.11-.56-2.3-.56-3.53 0-.54-.45-.99-.99-.99H4.19C3.65 3 3 3.24 3 3.99 3 13.28 10.73 21 20.01 21c.71 0 .99-.63.99-1.18v-3.45c0-.54-.45-.99-.99-.99z"/></svg>

After

Width:  |  Height:  |  Size: 443 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M19 8H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zm-3 11H8v-5h8v5zm3-7c-.55 0-1-.45-1-1s.45-1 1-1 1 .45 1 1-.45 1-1 1zm-1-9H6v4h12V3z"/></svg>

After

Width:  |  Height:  |  Size: 302 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>

After

Width:  |  Height:  |  Size: 266 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M14.4 6L14 4H5v17h2v-7h5.6l.4 2h7V6z"/></svg>

After

Width:  |  Height:  |  Size: 193 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4z"/></svg>

After

Width:  |  Height:  |  Size: 221 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M0 0h24v24H0z" fill="none"/><path d="M18 8h-1V6c0-2.76-2.24-5-5-5S7 3.24 7 6v2H6c-1.1 0-2 .9-2 2v10c0 1.1.9 2 2 2h12c1.1 0 2-.9 2-2V10c0-1.1-.9-2-2-2zM8.9 6c0-1.71 1.39-3.1 3.1-3.1s3.1 1.39 3.1 3.1v2H8.9V6zM16 16h-3v3h-2v-3H8v-2h3v-3h2v3h3v2z"/></svg>

After

Width:  |  Height:  |  Size: 399 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M15.5 14h-.79l-.28-.27C15.41 12.59 16 11.11 16 9.5 16 5.91 13.09 3 9.5 3S3 5.91 3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>

After

Width:  |  Height:  |  Size: 391 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M17 1.01L7 1c-1.1 0-2 .9-2 2v18c0 1.1.9 2 2 2h10c1.1 0 2-.9 2-2V3c0-1.1-.9-1.99-2-1.99zM17 19H7V5h10v14z"/></svg>

After

Width:  |  Height:  |  Size: 261 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M21.41 11.58l-9-9C12.05 2.22 11.55 2 11 2H4c-1.1 0-2 .9-2 2v7c0 .55.22 1.05.59 1.42l9 9c.36.36.86.58 1.41.58.55 0 1.05-.22 1.41-.59l7-7c.37-.36.59-.86.59-1.41 0-.55-.23-1.06-.59-1.42zM5.5 7C4.67 7 4 6.33 4 5.5S4.67 4 5.5 4 7 4.67 7 5.5 6.33 7 5.5 7zm11.77 8.27L13 19.54l-4.27-4.27C8.28 14.81 8 14.19 8 13.5c0-1.38 1.12-2.5 2.5-2.5.69 0 1.32.28 1.77.74l.73.72.73-.73c.45-.45 1.08-.73 1.77-.73 1.38 0 2.5 1.12 2.5 2.5 0 .69-.28 1.32-.73 1.77z"/></svg>

After

Width:  |  Height:  |  Size: 597 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><rect fill="none" height="24" width="24"/></g><g><g><path d="M21,12.22C21,6.73,16.74,3,12,3c-4.69,0-9,3.65-9,9.28C2.4,12.62,2,13.26,2,14v2c0,1.1,0.9,2,2,2h1v-6.1 c0-3.87,3.13-7,7-7s7,3.13,7,7V19h-8v2h8c1.1,0,2-0.9,2-2v-1.22c0.59-0.31,1-0.92,1-1.64v-2.3C22,13.14,21.59,12.53,21,12.22z"/><circle cx="9" cy="13" r="1"/><circle cx="15" cy="13" r="1"/><path d="M18,11.03C17.52,8.18,15.04,6,12.05,6c-3.03,0-6.29,2.51-6.03,6.45c2.47-1.01,4.33-3.21,4.86-5.89 C12.19,9.19,14.88,11,18,11.03z"/></g></g></svg>

After

Width:  |  Height:  |  Size: 637 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><path d="M0 0h24v24H0z" fill="none"/><path d="M13 3c-4.97 0-9 4.03-9 9H1l3.89 3.89.07.14L9 12H6c0-3.87 3.13-7 7-7s7 3.13 7 7-3.13 7-7 7c-1.93 0-3.68-.79-4.94-2.06l-1.42 1.42C8.27 19.99 10.51 21 13 21c4.97 0 9-4.03 9-9s-4.03-9-9-9zm-1 5v5l4.28 2.54.72-1.21-3.5-2.08V8H12z"/></svg>

After

Width:  |  Height:  |  Size: 381 B

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" enable-background="new 0 0 24 24" height="24px" viewBox="0 0 24 24" width="24px" fill="#000000"><g><rect fill="none" height="24" width="24"/></g><g><path d="M16,9V4l1,0c0.55,0,1-0.45,1-1v0c0-0.55-0.45-1-1-1H7C6.45,2,6,2.45,6,3v0 c0,0.55,0.45,1,1,1l1,0v5c0,1.66-1.34,3-3,3h0v2h5.97v7l1,1l1-1v-7H19v-2h0C17.34,12,16,10.66,16,9z" fill-rule="evenodd"/></g></svg>

After

Width:  |  Height:  |  Size: 398 B

Before

Width:  |  Height:  |  Size: 940 B

After

Width:  |  Height:  |  Size: 940 B

Before

Width:  |  Height:  |  Size: 523 B

After

Width:  |  Height:  |  Size: 523 B

Before

Width:  |  Height:  |  Size: 523 B

After

Width:  |  Height:  |  Size: 523 B

Before

Width:  |  Height:  |  Size: 500 B

After

Width:  |  Height:  |  Size: 500 B

Before

Width:  |  Height:  |  Size: 569 B

After

Width:  |  Height:  |  Size: 569 B

Before

Width:  |  Height:  |  Size: 357 B

After

Width:  |  Height:  |  Size: 357 B

Before

Width:  |  Height:  |  Size: 284 B

After

Width:  |  Height:  |  Size: 284 B

@ -0,0 +1 @@
<svg width="24" height="24" fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M8.95 8.6a6.554 6.554 0 0 1 6.55-6.55c3.596 0 6.55 2.819 6.55 6.45a6.554 6.554 0 0 1-6.55 6.55c-.531 0-1.055-.076-1.552-.204A1.25 1.25 0 0 1 12.7 16.05h-1.75v1.75c0 .69-.56 1.25-1.25 1.25H7.95v1.25a1.75 1.75 0 0 1-1.75 1.75H3.7a1.75 1.75 0 0 1-1.75-1.75v-2.172c0-.73.29-1.429.806-1.944L8.99 9.948a.275.275 0 0 0 .07-.244A6.386 6.386 0 0 1 8.95 8.6Zm9.3-1.6a1.25 1.25 0 1 0-2.5 0 1.25 1.25 0 0 0 2.5 0Z" fill="#000000"/></svg>

After

Width:  |  Height:  |  Size: 529 B

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Before

Width:  |  Height:  |  Size: 704 B

After

Width:  |  Height:  |  Size: 704 B

Before

Width:  |  Height:  |  Size: 345 B

After

Width:  |  Height:  |  Size: 345 B

Before

Width:  |  Height:  |  Size: 377 B

After

Width:  |  Height:  |  Size: 377 B

Before

Width:  |  Height:  |  Size: 533 B

After

Width:  |  Height:  |  Size: 533 B

Before

Width:  |  Height:  |  Size: 314 B

After

Width:  |  Height:  |  Size: 314 B

@ -0,0 +1 @@
<svg width="24" height="24" fill="none" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12.835 3.162a.747.747 0 0 0 .147-.148h2.562l.035-.001a5.372 5.372 0 0 1 .545 0h.038a3.818 3.818 0 0 1 1.646.369 5.223 5.223 0 0 1 2.34 1.822 5.208 5.208 0 0 1 .804 4.348l-3.281-3.237a.75.75 0 0 0-.527-.216h-4.745a.762.762 0 0 0-.453.152l-1.884 1.428a.968.968 0 0 1-1.358-.184.952.952 0 0 1 .181-1.34l3.95-2.993ZM7.898 14.236l-.013.013-.974.968-.013.012a.906.906 0 0 1-1.261-.012.892.892 0 0 1 0-1.267l.974-.968a.906.906 0 0 1 1.275 0 .892.892 0 0 1 .012 1.254ZM7.608 15.934a.892.892 0 0 0 .013 1.254c.352.35.922.35 1.275 0l.974-.967a.892.892 0 0 0-.14-1.381.906.906 0 0 0-1.122.1l-.013.014-.974.967-.013.013ZM5.5 11.408a.892.892 0 0 1 0 1.267l-.973.968a.906.906 0 0 1-1.276 0 .892.892 0 0 1 0-1.267l.975-.968a.906.906 0 0 1 1.275 0ZM11.854 16.925a.892.892 0 0 1 0 1.267l-.974.968a.902.902 0 0 1-1.275 0 .892.892 0 0 1-.172-1.028l.001-.002a.894.894 0 0 1 .171-.237l.974-.968a.906.906 0 0 1 1.275 0Z" fill="#000000"/><path d="M5.344 4.831a6.179 6.179 0 0 1 5.112-1.749L7.979 4.96a2.452 2.452 0 0 0-.466 3.448 2.473 2.473 0 0 0 3.454.467L12.651 7.6h4.185l3.507 3.46a.52.52 0 0 0 .036.04l1.15 1.15a1.439 1.439 0 0 1-1.936 2.124l-.096-.096a.508.508 0 0 0-.06-.052l-1.093-1.092a.5.5 0 1 0-.707.707l1.15 1.15c.042.041.084.081.128.119l.044.044a1.02 1.02 0 0 1-1.441 1.441l-.17-.169a.5.5 0 0 0-.853.363.499.499 0 0 0 .147.365l.223.223a.943.943 0 1 1-1.333 1.333h-.002l-.011-.013-.21-.21a.5.5 0 1 0-.707.707l.218.219a.96.96 0 0 1-1.35 1.367l-1.431-1.36.524-.522a1.884 1.884 0 0 0 0-2.676 1.906 1.906 0 0 0-1.428-.553 1.88 1.88 0 0 0-.556-1.42 1.906 1.906 0 0 0-1.428-.552 1.881 1.881 0 0 0-.556-1.419 1.912 1.912 0 0 0-1.844-.49 1.88 1.88 0 0 0-.541-1.084 1.914 1.914 0 0 0-2.514-.158 6.096 6.096 0 0 1 1.648-5.714Z" fill="#000000"/></svg>

After

Width:  |  Height:  |  Size: 1.8 KiB

Before

Width:  |  Height:  |  Size: 706 B

After

Width:  |  Height:  |  Size: 706 B

Before

Width:  |  Height:  |  Size: 612 B

After

Width:  |  Height:  |  Size: 612 B

Before

Width:  |  Height:  |  Size: 603 B

After

Width:  |  Height:  |  Size: 603 B

@ -0,0 +1,36 @@
<?php
if (isset($_GET["__"]) && trim($_GET["__"]) !== "") {
$name = substr($_GET["__"], 1);
if (str_contains("/", $name)) die();
if (!file_exists($_SERVER['DOCUMENT_ROOT'] . "/_icons/" . $name)) die();
if (isset($_COOKIE["DeltaHandoffPalette"])) {
$palette = explode(",", $_COOKIE["DeltaHandoffPalette"]);
if (count($palette) > 0) {
if (file_exists($_SERVER['DOCUMENT_ROOT'] . "/_icons/_mdi/" . $name)) {
header("Content-Type: " . mime_content_type($_SERVER['DOCUMENT_ROOT'] . "/_icons/_mdi/" . $name));
header("Content-Length: " . filesize($_SERVER['DOCUMENT_ROOT'] . "/_icons/_mdi/" . $name));
echo(str_replace('fill="#084298"', 'fill="#' . $palette[0] . '"', str_replace('fill="#000000"', 'fill="#' . $palette[6] . '"', file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/_icons/_mdi/" . $name))));
} else {
header("Content-Type: " . mime_content_type($_SERVER['DOCUMENT_ROOT'] . "/_icons/" . $name));
header("Content-Length: " . filesize($_SERVER['DOCUMENT_ROOT'] . "/_icons/" . $name));
echo(str_replace('fill="#084298"', 'fill="#' . $palette[0] . '"', str_replace('fill="#000000"', 'fill="#' . $palette[6] . '"', file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/_icons/" . $name))));
}
} else {
header("Content-Type: " . mime_content_type($_SERVER['DOCUMENT_ROOT'] . "/_icons/" . $name));
header("Content-Length: " . filesize($_SERVER['DOCUMENT_ROOT'] . "/_icons/" . $name));
readfile($_SERVER['DOCUMENT_ROOT'] . "/_icons/" . $name);
}
} else {
header("Content-Type: " . mime_content_type($_SERVER['DOCUMENT_ROOT'] . "/_icons/" . $name));
header("Content-Length: " . filesize($_SERVER['DOCUMENT_ROOT'] . "/_icons/" . $name));
readfile($_SERVER['DOCUMENT_ROOT'] . "/_icons/" . $name);
}
}

Before

Width:  |  Height:  |  Size: 696 B

After

Width:  |  Height:  |  Size: 696 B

Before

Width:  |  Height:  |  Size: 427 B

After

Width:  |  Height:  |  Size: 427 B

Before

Width:  |  Height:  |  Size: 564 B

After

Width:  |  Height:  |  Size: 564 B

Before

Width:  |  Height:  |  Size: 734 B

After

Width:  |  Height:  |  Size: 734 B

Before

Width:  |  Height:  |  Size: 453 B

After

Width:  |  Height:  |  Size: 453 B

Before

Width:  |  Height:  |  Size: 524 B

After

Width:  |  Height:  |  Size: 524 B

Before

Width:  |  Height:  |  Size: 606 B

After

Width:  |  Height:  |  Size: 606 B

Before

Width:  |  Height:  |  Size: 369 B

After

Width:  |  Height:  |  Size: 369 B

Before

Width:  |  Height:  |  Size: 307 B

After

Width:  |  Height:  |  Size: 307 B

Before

Width:  |  Height:  |  Size: 335 B

After

Width:  |  Height:  |  Size: 335 B

Before

Width:  |  Height:  |  Size: 351 B

After

Width:  |  Height:  |  Size: 351 B

Before

Width:  |  Height:  |  Size: 283 B

After

Width:  |  Height:  |  Size: 283 B

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

Before

Width:  |  Height:  |  Size: 753 B

After

Width:  |  Height:  |  Size: 753 B

Before

Width:  |  Height:  |  Size: 532 B

After

Width:  |  Height:  |  Size: 532 B

Before

Width:  |  Height:  |  Size: 413 B

After

Width:  |  Height:  |  Size: 413 B

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

Before

Width:  |  Height:  |  Size: 400 B

After

Width:  |  Height:  |  Size: 400 B

@ -9,7 +9,7 @@ $id = array_values(array_filter(array_keys($_GET), function ($i) {
if (isset($id)) {
$id = substr($id, 1);
if (!preg_match("/[a-zA-Z0-6]/m", $id)) {
header("Location: /profile/$_USER");
if (!isset($_COOKIE["DeltaHandoffPalette"])) header("Location: /profile/$_USER"); else header("Location: /mobile_profile");
die();
}
@ -23,7 +23,7 @@ if (isset($id)) {
$title_pre = $data["nick_name"] ?? $data["first_name"] . " " . $data["last_name"];
$title = "lang_profile_title";
} else {
header("Location: /profile/$_USER");
if (!isset($_COOKIE["DeltaHandoffPalette"])) header("Location: /profile/$_USER"); else header("Location: /mobile_profile");
die();
}
@ -57,7 +57,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/navigation.php";
</span>
</h1>
<div style="margin-top: 20px; display: grid; grid-template-columns: repeat(2, 1fr); grid-column-gap: 20px;">
<div id="profile-grid" style="margin-top: 20px; display: grid; grid-template-columns: repeat(2, 1fr); grid-column-gap: 20px;">
<div class="card">
<div class="card-body">
<table>
@ -78,7 +78,7 @@ require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/navigation.php";
</div>
<div class="card">
<div class="card-body">
<div style="display: grid; grid-template-columns: 64px max-content; grid-gap: 10px;">
<div id="profile-grid-user" style="display: grid; grid-template-columns: 64px max-content; grid-gap: 10px;">
<div style="display: flex; align-items: center;">
<img src="<?= file_exists($_SERVER['DOCUMENT_ROOT'] . "/uploads/" . $id . ".jpg") ? "/uploads/" . $id . ".jpg" : "/icons/defaultuser.svg" ?>" style="width: 64px; height: 64px; border-radius: 100%;">
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

@ -0,0 +1,64 @@
<?php
$title = "lang_content_title";
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/header.php";
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/navigation.php";
global $_PROFILE;
?>
<div class="container">
<br><br>
<h1><?= l("lang_content_greeting") ?></h1>
<div class="list-group">
<?php
$list = [];
foreach (array_filter(scandir($_SERVER['DOCUMENT_ROOT'] . "/includes/data/articles"), function ($i) { return !str_starts_with($i, "."); }) as $id) {
$data = json_decode(utf8_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/articles/$id")), true);
$id = substr($id, 0, -5);
$data["_type"] = "articles";
$data["_id"] = $id;
$list[$id] = $data;
}
foreach (array_filter(scandir($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gallery"), function ($i) { return !str_starts_with($i, "."); }) as $id) {
$data = json_decode(utf8_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/gallery/$id")), true);
$id = substr($id, 0, -5);
$data["_type"] = "gallery";
$data["_id"] = $id;
$list[$id] = $data;
}
foreach (array_filter(scandir($_SERVER['DOCUMENT_ROOT'] . "/includes/data/people"), function ($i) { return !str_starts_with($i, "."); }) as $id) {
$data = json_decode(utf8_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/people/$id")), true);
$id = substr($id, 0, -5);
$data["_type"] = "people";
$data["_id"] = $id;
$list[$id] = $data;
}
uasort($list, function ($a, $b) {
return strtotime($a["title"] ?? $a["nickname"] ?? $a["first_name"] . " " . $b["last_name"]) - strtotime($a["title"] ?? $a["nickname"] ?? $a["first_name"] . " " . $b["last_name"]);
});
foreach ($list as $item): ?>
<a href="/<?= $item["_type"] ?>/<?= $item["_id"] ?>" class="list-group-item list-group-item-action">
<img src="/icons/<?= $item["_type"] ?>.svg" style="margin-right:5px;"><span style="vertical-align: middle;"><?= $item["title"] ?? $item["first_name"] . " " . $item["last_name"] ?>
</a>
<?php endforeach; ?>
</div>
<br><br><br>
</div>
<?php require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/footer.php"; ?>

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

@ -0,0 +1,121 @@
<?php
function imageCreateCorners($sourceImageFile, $radius) {
# test source image
if (file_exists($sourceImageFile)) {
$res = is_array($info = getimagesize($sourceImageFile));
}
else $res = false;
# open image
if ($res) {
$w = $info[0];
$h = $info[1];
switch ($info['mime']) {
case 'image/jpeg': $src = imagecreatefromjpeg($sourceImageFile);
break;
case 'image/gif': $src = imagecreatefromgif($sourceImageFile);
break;
case 'image/png': $src = imagecreatefrompng($sourceImageFile);
break;
default:
$res = false;
}
}
# create corners
if ($res) {
$q = 10; # change this if you want
$radius *= $q;
# find unique color
do {
$r = rand(0, 255);
$g = rand(0, 255);
$b = rand(0, 255);
}
while (imagecolorexact($src, $r, $g, $b) < 0);
$nw = $w*$q;
$nh = $h*$q;
$img = imagecreatetruecolor($nw, $nh);
$alphacolor = imagecolorallocatealpha($img, $r, $g, $b, 127);
imagealphablending($img, false);
imagesavealpha($img, true);
imagefilledrectangle($img, 0, 0, $nw, $nh, $alphacolor);
imagefill($img, 0, 0, $alphacolor);
imagecopyresampled($img, $src, 0, 0, 0, 0, $nw, $nh, $w, $h);
imagearc($img, $radius-1, $radius-1, $radius*2, $radius*2, 180, 270, $alphacolor);
imagefilltoborder($img, 0, 0, $alphacolor, $alphacolor);
imagearc($img, $nw-$radius, $radius-1, $radius*2, $radius*2, 270, 0, $alphacolor);
imagefilltoborder($img, $nw-1, 0, $alphacolor, $alphacolor);
imagearc($img, $radius-1, $nh-$radius, $radius*2, $radius*2, 90, 180, $alphacolor);
imagefilltoborder($img, 0, $nh-1, $alphacolor, $alphacolor);
imagearc($img, $nw-$radius, $nh-$radius, $radius*2, $radius*2, 0, 90, $alphacolor);
imagefilltoborder($img, $nw-1, $nh-1, $alphacolor, $alphacolor);
imagealphablending($img, true);
imagecolortransparent($img, $alphacolor);
# resize image down
$dest = imagecreatetruecolor($w, $h);
imagealphablending($dest, false);
imagesavealpha($dest, true);
imagefilledrectangle($dest, 0, 0, $w, $h, $alphacolor);
imagecopyresampled($dest, $img, 0, 0, 0, 0, $w, $h, $nw, $nh);
# output image
$res = $dest;
imagedestroy($src);
imagedestroy($img);
}
return $res;
}
$api = true;
$data = [
"loggedIn" => false
];
if (isset($_GET["token"])) {
$_COOKIE["DeltaSession"] = $_GET["token"];
}
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_USER; global $_PROFILE;
if ($data["loggedIn"] && file_exists($_SERVER['DOCUMENT_ROOT'] . "/uploads/" . $_USER . ".jpg")) {
header("Content-Type: image/png");
$id = bin2hex(random_bytes(32));
$out = [];
$out2 = [];
$size = getimagesize($_SERVER['DOCUMENT_ROOT'] . "/uploads/" . $_USER . ".jpg");
exec('convert -size 128x128 xc:none -draw "roundrectangle 0,0,128,128,128,128" /tmp/' . $id . '-mask.png', $out);
exec('convert -resize 128x128 "' . $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . $_USER . ".jpg" . '" /tmp/' . $id . '-source.png');
exec('convert /tmp/' . $id . '-source.png -matte /tmp/' . $id . '-mask.png -compose DstIn -composite /tmp/' . $id . '.png', $out2);
if ($_PROFILE["plus"]) {
exec('convert -background none -bordercolor none -resize 94x94 -border 17x17 /tmp/' . $id . '.png /tmp/' . $id . '-source.png');
if ($_PROFILE["ultra"]) {
exec('convert -background none /tmp/' . $id . '-source.png "' . $_SERVER['DOCUMENT_ROOT'] . '/circle-ultra.png" -gravity Center -composite /tmp/' . $id . '.png');
} else {
exec('convert -background none /tmp/' . $id . '-source.png "' . $_SERVER['DOCUMENT_ROOT'] . '/circle-plus.png" -gravity Center -composite /tmp/' . $id . '.png');
}
}
echo(file_get_contents('/tmp/' . $id . '.png'));
unlink('/tmp/' . $id . '.png');
unlink('/tmp/' . $id . '-mask.png');
unlink('/tmp/' . $id . '-source.png');
} else {
header("Content-Type: image/png");
die(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/defaultuser.png"));
}

@ -0,0 +1,63 @@
<?php
$GLOBALS["dump"] = [];
set_error_handler(function($errno, $errstr, $errfile, $errline) {
die(json_encode([
"error" => $errstr,
"line" => $errline,
"dump" => $GLOBALS["dump"]
]));
});
$json = file_get_contents('php://input');
file_put_contents("/tmp/handoff.json", $json);
$obj = json_decode($json, true);
header("Content-Type: application/json");
$data = [
"session" => isset($obj["session"]) && trim(explode("||||", $obj["session"])[1]) !== "" ? explode("||||", $obj["session"])[1] : null,
"token" => isset($obj["session"]) && trim(explode("||||", $obj["session"])[0]) !== "" ? explode("||||", $obj["session"])[0] : null,
];
$api = true;
$users = array_values(array_filter(scandir($_SERVER['DOCUMENT_ROOT'] . "/includes/data/profiles"), function ($i) {
return !str_starts_with($i, ".");
}));
if (isset($data["token"])) {
$_COOKIE["DeltaSession"] = $data["token"];
}
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFILE;
if (isset($_PROFILE) && isset($data["session"])) {
if (!isset($_PROFILE["devices"])) $_PROFILE["devices"] = [];
if (!in_array($data["session"], $_PROFILE["devices"])) {
foreach ($users as $user) {
$GLOBALS["dump"][] = $users;
$userData = json_decode(utf8_decode(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/profiles/" . $user)), true);
$userData["devices"] = array_values(array_filter($userData["devices"], function ($i) use ($data) {
return $i !== $data["session"];
}));
while (trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/profiles/" . $user)) === "") {}
file_put_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/data/profiles/" . $user, utf8_encode(json_encode($userData, JSON_PRETTY_PRINT)));
}
$_PROFILE["devices"][] = $data["session"];
} else {
die(json_encode([
"error" => "Not updated"
]));
}
saveProfile();
die(json_encode([
"error" => null
]));
} else {
die(json_encode([
"error" => "Not logged in or no token received"
]));
}

@ -0,0 +1,13 @@
<?php
$palette = [];
header("Content-Type: text/plain");
foreach (explode(",", $_GET["colors"] ?? "") as $color) {
$palette[] = substr(dechex((int)$color), strlen(dechex((int)$color)) - 6);
}
setcookie("DeltaHandoffPalette", implode(",", $palette), 0, "/");
header("Location: " . ($_GET["return"] ?? "/"));
die();

@ -0,0 +1,33 @@
<?php
$json = file_get_contents('php://input');
$obj = json_decode($json, true);
header("Content-Type: application/json");
$data = [
"loggedIn" => false,
"subscription" => "base",
"blocked" => false,
"session" => $_COOKIE["DeltaSession"] ?? (isset($obj["session"]) && trim($obj["session"]) !== "" ? $obj["session"] : null),
"name" => null
];
$api = true;
if (isset($data["session"])) {
$_COOKIE["DeltaSession"] = $data["session"];
}
$data["version"] = trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/version"));
require_once $_SERVER['DOCUMENT_ROOT'] . "/includes/session.php"; global $_PROFILE;
if (isset($_PROFILE)) {
if ($_PROFILE["plus"] && $_PROFILE["ultra"]) {
$data["subscription"] = "ultra";
} else if ($_PROFILE["plus"]) {
$data["subscription"] = "plus";
}
$data["name"] = $_PROFILE["nick_name"] ?? $_PROFILE["first_name"] . " " . $_PROFILE["last_name"];
}
die(json_encode($data, JSON_PRETTY_PRINT));

@ -39,6 +39,57 @@ function sendCode($email, $code) {
$mail->send();
}
function sendPlanUpdate($email, $plan) {
global $emailConfig;
$price = (float)trim(file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/plusprice"));
switch ($plan) {
case 0:
default:
$monthFee = 0;
$name = "Delta Free";
break;
case 1:
$monthFee = $price;
$name = "Delta Plus";
break;
case 2:
$monthFee = $price + 2;
$name = "Delta Ultra";
break;
}
$mail = new PHPMailer(true);
$mail->isSMTP();
$mail->Host = 'in-v3.mailjet.com';
$mail->SMTPAuth = true;
$mail->Username = $emailConfig["username"];
$mail->Password = $emailConfig["password"];
$mail->SMTPSecure = "none";
$mail->Port = 587;
$mail->setFrom('delta@auto.minteck.org', 'Delta');
$mail->addAddress($email);
$mail->addReplyTo('contact@minteck.org', 'Equestria.dev');
$mail->isHTML();
$mail->Subject = l("lang_email_plan_title");
$body = file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/includes/email.html");
$body = str_replace("%3", date('Y'), $body);
$body = str_replace("%2", l("lang_email_reasons_plan"), $body);
$body = str_replace("%1", "<p>" . l("lang_email_plan_message_0") . "</p><p>" . str_replace("%2", $monthFee, str_replace("%1", "<b>" . $name . "</b>", l("lang_email_plan_message_1"))) . "</p><p>" . l("lang_email_plan_message_2") . "</p><p>" . l("lang_email_plan_message_3") . "</p>", $body);
$mail->CharSet = 'UTF-8';
$mail->Body = $body;
$mail->AltBody = strip_tags($body);
$mail->send();
}
function sendAlerts($email, $alerts) {
global $emailConfig;

@ -0,0 +1,25 @@
let admin = require("firebase-admin");
let appAdmin = require('firebase-admin/app');
let messagingAdmin = require('firebase-admin/messaging');
let serviceAccount = require("./firebase.json");
let app = appAdmin.initializeApp({
credential: admin.credential.cert(serviceAccount),
projectId: "eqd-delta",
}, "dev.equestria.delta");
//console.log(app);
let messaging = messagingAdmin.getMessaging(app);
//console.log(messaging);
let payload = {
notification: {
title: process.argv[3],
body: process.argv[4],
icon: "ic_stat_name"
}
}
console.log(payload);
messaging.sendToDevice(process.argv[2], payload);

@ -0,0 +1 @@
../acorn/bin/acorn

@ -0,0 +1 @@
../google-gax/build/tools/compileProtos.js

@ -0,0 +1 @@
../escodegen/bin/escodegen.js

@ -0,0 +1 @@
../escodegen/bin/esgenerate.js

@ -0,0 +1 @@
../esprima/bin/esparse.js

@ -0,0 +1 @@
../esprima/bin/esvalidate.js

@ -0,0 +1 @@
../google-p12-pem/build/src/bin/gp12-pem.js

@ -0,0 +1 @@
../jsdoc/jsdoc.js

@ -0,0 +1 @@
../markdown-it/bin/markdown-it.js

@ -0,0 +1 @@
../marked/bin/marked.js

@ -0,0 +1 @@
../mime/cli.js

@ -0,0 +1 @@
../google-gax/build/tools/minify.js

@ -0,0 +1 @@
../mkdirp/bin/cmd.js

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save