fix: rewards fixes

fix enabled/disabled button
sort rewards from oldest to newest
This commit is contained in:
Barış Soner Uşaklı
2023-10-16 19:02:42 -04:00
parent d45f506f92
commit 347a43f4fe
6 changed files with 27 additions and 12 deletions

View File

@@ -0,0 +1,10 @@
{
"awarded-x-reputation": "You have been awarded <strong>%1</strong> reputation",
"awarded-group-membership": "You have been added to the group <strong>%1</strong>",
"essentials/user.reputation-conditional-value": "<span class=\"text-xs\">(Reputation %1 %2)</span>",
"essentials/user.postcount-conditional-value": "<span class=\"text-xs\">(Post Count %1 %2)</span>",
"essentials/user.lastonline-conditional-value": "<span class=\"text-xs\">(Last Online %1 %2)</span>",
"essentials/user.joindate-conditional-value": "<span class=\"text-xs\">(Join Date %1 %2)</span>",
"essentials/user.daysregistered-conditional-value": "<span class=\"text-xs\">(Days Registered %1 %2)</span>"
}

View File

@@ -41,8 +41,8 @@ define('admin/extend/rewards', ['alerts'], function (alerts) {
}) })
.on('click', '.toggle', function () { .on('click', '.toggle', function () {
const btn = $(this); const btn = $(this);
const disabled = btn.hasClass('btn-success'); btn.parent().find('.toggle').removeClass('hidden');
btn.toggleClass('btn-warning').toggleClass('btn-success').translateHtml('[[admin/extend/rewards:' + (disabled ? 'disable' : 'enable') + ']]'); btn.addClass('hidden');
// send disable api call // send disable api call
return false; return false;
}); });
@@ -92,16 +92,16 @@ define('admin/extend/rewards', ['alerts'], function (alerts) {
} }
inputs.forEach(function (input) { inputs.forEach(function (input) {
html += '<label for="' + input.name + '">' + input.label + '<br />'; html += `<label class="form-label text-nowrap" for="${input.name}">${input.label}<br />`;
switch (input.type) { switch (input.type) {
case 'select': case 'select':
html += '<select class="form-select form-select-sm" name="' + input.name + '">'; html += `<select class="form-select form-select-sm" name="${input.name}" >`;
input.values.forEach(function (value) { input.values.forEach(function (value) {
html += '<option value="' + value.value + '">' + value.name + '</option>'; html += `<option value="${value.value}">${value.name}</option>`;
}); });
break; break;
case 'text': case 'text':
html += '<input type="text" class="form-control form-control-sm" name="' + input.name + '" />'; html += `<input type="text" class="form-control form-control-sm" name="${input.name}" />`;
break; break;
} }
html += '</label>'; html += '</label>';
@@ -162,7 +162,7 @@ define('admin/extend/rewards', ['alerts'], function (alerts) {
}); });
data.id = $(this).attr('data-id'); data.id = $(this).attr('data-id');
data.disabled = $(this).find('.toggle').hasClass('btn-success'); data.disabled = $(this).find('.toggle.disable').hasClass('hidden');
activeRewards.push(data); activeRewards.push(data);
}); });

View File

@@ -99,7 +99,7 @@ Notifications.getMultiple = async function (nids) {
} }
notification.user = usersData[index]; notification.user = usersData[index];
if (notification.user) { if (notification.user && notification.from) {
notification.image = notification.user.picture || null; notification.image = notification.user.picture || null;
if (notification.user.username === '[[global:guest]]') { if (notification.user.username === '[[global:guest]]') {
notification.bodyShort = notification.bodyShort.replace(/([\s\S]*?),[\s\S]*?,([\s\S]*?)/, '$1, [[global:guest]], $2'); notification.bodyShort = notification.bodyShort.replace(/([\s\S]*?),[\s\S]*?,([\s\S]*?)/, '$1, [[global:guest]], $2');

View File

@@ -67,13 +67,14 @@ async function getActiveRewards() {
db.getObject(`rewards:id:${id}:rewards`), db.getObject(`rewards:id:${id}:rewards`),
]); ]);
if (main) { if (main) {
main.disabled = main.disabled === 'true'; main.disabled = main.disabled === 'true' || main.disabled === true;
main.rewards = rewards; main.rewards = rewards;
} }
return main; return main;
} }
const rewardsList = await db.getSetMembers('rewards:list'); const rewardsList = await db.getSetMembers('rewards:list');
rewardsList.sort((a, b) => a - b);
const rewardData = await Promise.all(rewardsList.map(id => load(id))); const rewardData = await Promise.all(rewardsList.map(id => load(id)));
return rewardData.filter(Boolean); return rewardData.filter(Boolean);
} }

View File

@@ -72,7 +72,11 @@ async function giveRewards(uid, rewards) {
const rewardData = await getRewardsByRewardData(rewards); const rewardData = await getRewardsByRewardData(rewards);
for (let i = 0; i < rewards.length; i++) { for (let i = 0; i < rewards.length; i++) {
/* eslint-disable no-await-in-loop */ /* eslint-disable no-await-in-loop */
await plugins.hooks.fire(`action:rewards.award:${rewards[i].rid}`, { uid: uid, reward: rewardData[i] }); await plugins.hooks.fire(`action:rewards.award:${rewards[i].rid}`, {
uid: uid,
rewardData: rewards[i],
reward: rewardData[i],
});
await db.sortedSetIncrBy(`uid:${uid}:rewards`, 1, rewards[i].id); await db.sortedSetIncrBy(`uid:${uid}:rewards`, 1, rewards[i].id);
} }
} }

View File

@@ -35,7 +35,7 @@
{{{ end }}} {{{ end }}}
</select> </select>
<input class="form-control form-control-sm" type="text" name="value" value="{active.value}" style="max-width: 64px;"/> <input class="form-control form-control-sm" type="text" name="value" value="{active.value}" style="max-width: 128px;"/>
</div> </div>
</div> </div>
<div class="card card-body m-0 then-block border-primary border border-2"> <div class="card card-body m-0 then-block border-primary border border-2">
@@ -47,7 +47,7 @@
</select> </select>
</div> </div>
</form> </form>
<form class="rewards"> <form class="rewards flex-1">
<div class="inputs card card-body m-0 h-100 reward-block border-success border border-2"><div class="d-flex h-100 align-items-center">[[admin/extend/rewards:select-reward]]</div></div> <div class="inputs card card-body m-0 h-100 reward-block border-success border border-2"><div class="d-flex h-100 align-items-center">[[admin/extend/rewards:select-reward]]</div></div>
</form> </form>
</div> </div>