2022-09-13 13:14:49 +00:00
|
|
|
<?php
|
|
|
|
namespace Misuzu;
|
|
|
|
|
2023-07-12 21:52:55 +00:00
|
|
|
use RuntimeException;
|
2022-09-13 13:14:49 +00:00
|
|
|
|
2023-08-02 22:12:47 +00:00
|
|
|
if(!$msz->isLoggedIn() || !perms_check_user(MSZ_PERMS_GENERAL, $msz->getActiveUser()->getId(), MSZ_PERM_GENERAL_MANAGE_EMOTES)) {
|
2022-09-13 13:14:49 +00:00
|
|
|
echo render_error(403);
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
2023-07-12 21:52:55 +00:00
|
|
|
$emotes = $msz->getEmotes();
|
|
|
|
$emoteId = (string)filter_input(INPUT_GET, 'e', FILTER_SANITIZE_NUMBER_INT);
|
|
|
|
$loadEmoteInfo = fn() => $emotes->getEmoteById($emoteId, true);
|
2022-09-13 13:14:49 +00:00
|
|
|
|
2023-07-12 21:52:55 +00:00
|
|
|
if(empty($emoteId))
|
|
|
|
$isNew = true;
|
|
|
|
else
|
|
|
|
try {
|
|
|
|
$isNew = false;
|
|
|
|
$emoteInfo = $loadEmoteInfo();
|
|
|
|
} catch(RuntimeException $ex) {
|
|
|
|
echo render_error(404);
|
|
|
|
return;
|
|
|
|
}
|
2022-09-13 13:14:49 +00:00
|
|
|
|
2023-07-12 21:52:55 +00:00
|
|
|
// make errors not echos lol
|
|
|
|
while($_SERVER['REQUEST_METHOD'] === 'POST' && CSRF::validateRequest()) {
|
|
|
|
$order = (int)filter_input(INPUT_POST, 'em_order', FILTER_SANITIZE_NUMBER_INT);
|
|
|
|
$minRank = (int)filter_input(INPUT_POST, 'em_minrank', FILTER_SANITIZE_NUMBER_INT);
|
|
|
|
$url = trim((string)filter_input(INPUT_POST, 'em_url'));
|
|
|
|
$strings = explode(' ', trim((string)filter_input(INPUT_POST, 'em_strings')));
|
2022-09-13 13:14:49 +00:00
|
|
|
|
2023-07-12 21:52:55 +00:00
|
|
|
if($isNew || $url !== $emoteInfo->getUrl()) {
|
|
|
|
$checkUrl = $emotes->checkEmoteUrl($url);
|
|
|
|
if($checkUrl !== '') {
|
|
|
|
echo match($checkUrl) {
|
|
|
|
'empty' => 'URL may not be empty.',
|
|
|
|
'spaces' => 'URL may not end or start with spaces.',
|
|
|
|
'used' => 'This URL already belongs to another emoticon.',
|
|
|
|
default => 'URL cannot be accepted: ' . $checkUrl,
|
|
|
|
};
|
|
|
|
break;
|
2022-09-13 13:14:49 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2023-07-12 21:52:55 +00:00
|
|
|
if($order == 0)
|
|
|
|
$order = null;
|
|
|
|
|
|
|
|
if($isNew) {
|
|
|
|
$emoteInfo = $emotes->createEmote($url, $minRank, $order);
|
|
|
|
} else {
|
|
|
|
if($order === $emoteInfo->getOrder())
|
|
|
|
$order = null;
|
|
|
|
if($minRank === $emoteInfo->getMinRank())
|
|
|
|
$minRank = null;
|
|
|
|
if($url === $emoteInfo->getUrl())
|
|
|
|
$url = null;
|
2022-09-13 13:14:49 +00:00
|
|
|
|
2023-07-15 02:05:49 +00:00
|
|
|
if($order !== null || $minRank !== null || $url !== null)
|
2023-07-12 21:52:55 +00:00
|
|
|
$emotes->updateEmote($emoteInfo, $order, $minRank, $url);
|
2022-09-13 13:14:49 +00:00
|
|
|
}
|
|
|
|
|
2023-07-12 21:52:55 +00:00
|
|
|
$sCurrent = $emoteInfo->getStringsRaw();
|
|
|
|
$sApply = $strings;
|
|
|
|
$sRemove = [];
|
|
|
|
|
|
|
|
foreach($sCurrent as $string)
|
|
|
|
if(!in_array($string, $sApply)) {
|
|
|
|
$sRemove[] = $string;
|
|
|
|
$emotes->removeEmoteString($string);
|
|
|
|
}
|
|
|
|
|
|
|
|
$sCurrent = array_diff($sCurrent, $sRemove);
|
|
|
|
|
|
|
|
foreach($sApply as $string)
|
|
|
|
if(!in_array($string, $sCurrent)) {
|
|
|
|
$checkString = $emotes->checkEmoteString($string);
|
|
|
|
if($checkString === '') {
|
|
|
|
$emotes->addEmoteString($emoteInfo, $string);
|
|
|
|
} else {
|
|
|
|
echo match($checkString) {
|
|
|
|
'empty' => 'String may not be empty.',
|
|
|
|
'spaces' => 'String may not end or start with spaces.',
|
|
|
|
'case' => 'String must be lowercase.',
|
|
|
|
'format' => 'String must follow proper formatting.',
|
|
|
|
'used' => 'This string has already been used for another emoticon.',
|
|
|
|
default => 'String cannot be accepted: ' . $checkString,
|
|
|
|
};
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
$sCurrent[] = $string;
|
|
|
|
}
|
|
|
|
|
2023-07-17 17:43:17 +00:00
|
|
|
$msz->createAuditLog(
|
|
|
|
$isNew ? 'EMOTICON_CREATE' : 'EMOTICON_EDIT',
|
2023-07-15 02:05:49 +00:00
|
|
|
[$emoteInfo->getId()]
|
|
|
|
);
|
|
|
|
|
|
|
|
if($isNew) {
|
|
|
|
url_redirect('manage-general-emoticon', ['emote' => $emoteInfo->getId()]);
|
|
|
|
return;
|
|
|
|
} else $emoteInfo = $loadEmoteInfo();
|
2023-07-12 21:52:55 +00:00
|
|
|
break;
|
2022-09-13 13:14:49 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
Template::render('manage.general.emoticon', [
|
2023-07-12 21:52:55 +00:00
|
|
|
'emote_new' => $isNew,
|
|
|
|
'emote_info' => $emoteInfo ?? null,
|
2022-09-13 13:14:49 +00:00
|
|
|
]);
|