allow updating emoji name

master
Aevann 2023-10-17 20:04:38 +03:00
parent b24c25d30c
commit 29bbe8ced0
3 changed files with 73 additions and 17 deletions

View File

@ -7559,3 +7559,16 @@ ul {
display: none !important;
}
}
.section-title {
display: flex;
align-items: center;
justify-content: center;
text-transform: uppercase;
opacity: 0.6;
}
.section-title hr {
flex: 1;
margin-left: 0.5rem;
}

View File

@ -452,10 +452,13 @@ def update_emojis(v):
@limiter.limit(DEFAULT_RATELIMIT, deduct_when=lambda response: response.status_code < 400, key_func=get_ID)
@admin_level_required(PERMS['UPDATE_ASSETS'])
def update_emoji(v):
file = request.files["image"]
name = request.values.get('name', '').lower().strip()
tags = request.values.get('tags', '').lower().strip()
file = request.files["image"]
kind = request.values.get('kind', '').strip()
new_name = request.values.get('new_name', '').strip()
tags = request.values.get('tags', '').lower().strip()
nsfw = request.values.get('nsfw', '').strip()
existing = g.db.get(Emoji, name)
if not existing:
@ -487,18 +490,32 @@ def update_emoji(v):
purge_files_in_cloudflare_cache([f"{SITE_FULL_IMAGES}/e/{name}.webp", f"{SITE_FULL_IMAGES}/asset_submissions/emojis/original/{name}.{format}"])
updated = True
if kind and existing.kind != kind:
if kind not in EMOJI_KINDS:
abort(400, "Invalid kind!")
existing.kind = kind
updated = True
if tags and existing.tags != tags and tags != "none":
if new_name and existing.name != new_name:
if not emoji_name_regex.fullmatch(new_name):
abort(400, "Invalid new name!")
old_path = f"files/assets/images/emojis/{existing.name}.webp"
new_path = f"files/assets/images/emojis/{new_name}.webp"
copyfile(old_path, new_path)
existing.name = new_name
updated = True
if tags and existing.tags != tags:
if not tags_regex.fullmatch(tags):
abort(400, "Invalid tags!")
existing.tags += f" {tags}"
updated = True
if kind and existing.kind != kind and kind != "none":
if kind not in EMOJI_KINDS:
abort(400, "Invalid kind!")
existing.kind = kind
updated = True
if nsfw:
nsfw = (nsfw == 'NSFW')
if existing.nsfw != nsfw:
existing.nsfw = nsfw
updated = True
if not updated:
abort(400, "You need to actually update something!")

View File

@ -10,37 +10,63 @@
<form action="{{request.path}}" method="post" enctype="multipart/form-data" data-nonce="{{g.nonce}}" data-onsubmit="sendFormXHR(this)">
<input hidden name="formkey" value="{{v|formkey}}">
<label class="mt-3" for="name">{{type}} Name (Required)</label>
<input autocomplete="off" type="text" id="name" class="form-control" name="name" maxlength="30" placeholder="Required" {% if name %}value="{{name}}"{% endif %} required>
<div class="section-title mt-3">
<hr>
<h5>Name of {{type}} you wanna alter</h5>
<hr>
</div>
<input autocomplete="off" type="text" id="name" class="form-control" name="name" maxlength="30" required>
<div class="section-title mt-4">
<hr>
<h5>Change at least one of these values</h5>
<hr>
</div>
<div id="image-upload-block">
<div><label class="mt-3">New Image {% if type == "Emoji" %}(Optional){% else %}(Required){% endif %}</label></div>
<div><label>New Image</label></div>
<img loading="lazy" id="image-preview" class="d-none" style="max-width:50%;border:5px white solid">
<label class="btn btn-secondary m-0" for="file-upload">
<div>Select Image</div>
<div>Select Image<br>(optional)</div>
<input autocomplete="off" id="file-upload" accept="image/*" type="file" name="image" {% if g.is_tor %}disabled{% endif %} hidden>
</label>
</div>
{% if type == "Emoji" %}
<label class="mt-3" for="kind">New Kind (Optional)</label>
<label class="mt-3" for="kind">New Kind</label>
<div class="input-group">
<select autocomplete="off" id='kind' class="form-control" name="kind">
{% if not kind %}
<option hidden disabled selected value>-- select an option --</option>
<option hidden disabled selected value>-- select an option -- (optional)</option>
{% endif %}
{% for entry in EMOJI_KINDS %}
<option value="{{entry}}" {% if entry == kind %}selected{% endif %}>
<option value="{{entry}}">
{{entry}}
</option>
{% endfor %}
</select>
</div>
<label class="mt-3" for="tags">Additional Tags (Optional)</label>
<input autocomplete="off" type="text" id="name" class="form-control" name="tags" maxlength="200" placeholder="Enter additional tags" {% if tags %}value="{{tags}}"{% endif %}>
<label class="mt-3" for="new_name">New Name</label>
<input autocomplete="off" type="text" id="new_name" class="form-control" name="new_name" maxlength="30" placeholder="Optional">
<label class="mt-3" for="tags">Additional Tags</label>
<input autocomplete="off" type="text" id="name" class="form-control" name="tags" maxlength="200" placeholder="Optional">
<label class="mt-3" for="nsfw">New NSFW Value</label>
<div class="input-group">
<select autocomplete="off" id='nsfw' class="form-control" name="nsfw">
<option hidden disabled selected value>-- select an option -- (optional)</option>
<option value="NSFW">
NSFW
</option>
<option value="not_NSFW">
Not NSFW
</option>
</select>
</div>
{% endif %}
<div class="footer mt-4">