getAuthInfo()->getPerms('global')->check(Perm::G_EMOTES_MANAGE)) Template::throwError(403); $emotes = $msz->getEmotes(); $emoteId = (string)filter_input(INPUT_GET, 'e', FILTER_SANITIZE_NUMBER_INT); if(empty($emoteId)) $isNew = true; else try { $isNew = false; $emoteInfo = $emotes->getEmote($emoteId); $emoteStrings = $emotes->getEmoteStrings($emoteInfo); } catch(RuntimeException $ex) { Template::throwError(404); } // 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'))); 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; } } 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; if($order !== null || $minRank !== null || $url !== null) $emotes->updateEmote($emoteInfo, $order, $minRank, $url); } $sCurrent = XArray::select($emoteStrings, fn($stringInfo) => $stringInfo->getString()); $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; } $msz->createAuditLog( $isNew ? 'EMOTICON_CREATE' : 'EMOTICON_EDIT', [$emoteInfo->getId()] ); Tools::redirect($msz->getURLs()->format('manage-general-emoticon', ['emote' => $emoteInfo->getId()])); return; } Template::render('manage.general.emoticon', [ 'emote_new' => $isNew, 'emote_info' => $emoteInfo ?? null, 'emote_strings' => $emoteStrings ?? [], ]);