`admin/manage` translations, misc

- Translate Manage templates and JS
- Change `translator.translate -> .html` into `.translateHtml` where fitting
- Translate `admin/partials/download_plugin_item`
v1.18.x
Peter Jaszkowiak 8 years ago committed by Julian Lam
parent 94eb74646c
commit 038c45f4b6

@ -0,0 +1,19 @@
{
"daily": "Daily flags",
"by-user": "Flags by user",
"by-user-search": "Search flagged posts by username",
"category": "Category",
"sort-by": "Sort By",
"sort-by.most-flags": "Most Flags",
"sort-by.most-recent": "Most Recent",
"search": "Search",
"dismiss-all": "Dismiss All",
"none-flagged": "No flagged posts!",
"posted-in": "Posted in %1",
"read-more": "Read More",
"flagged-x-times": "This post has been flagged %1 time(s):",
"dismiss": "Dismiss this Flag",
"delete-post": "Delete the Post",
"alerts.confirm-delete-post": "Do you really want to delete this post?"
}

@ -0,0 +1,34 @@
{
"name": "Group Name",
"description": "Group Description",
"system": "System Group",
"edit": "Edit",
"search-placeholder": "Search",
"create": "Create Group",
"description-placeholder": "A short description about your group",
"create-button": "Create",
"alerts.create-failure": "<strong>Uh-Oh</strong><p>There was a problem creating your group. Please try again later!</p>",
"alerts.confirm-delete": "Are you sure you wish to delete this group?",
"edit.name": "Name",
"edit.description": "Description",
"edit.user-title": "Title of Members",
"edit.icon": "Group Icon",
"edit.label-color": "Group Label Color",
"edit.show-badge": "Show Badge",
"edit.private-details": "If enabled, joining of groups requires approval from a group owner.",
"edit.private-override": "Warning: Private groups is disabled at system level, which overrides this option.",
"edit.disable-requests": "Disable join requests",
"edit.hidden": "Hidden",
"edit.hidden-details": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually",
"edit.add-user": "Add User to Group",
"edit.add-user-search": "Search Users",
"edit.members": "Member List",
"control-panel": "Groups Control Panel",
"revert": "Revert",
"edit.no-users-found": "No Users Found",
"edit.confirm-remove-user": "Are you sure you want to remove this user?",
"edit.save-success": "Changes saved!"
}

@ -0,0 +1,15 @@
{
"lead": "Configure your IP blacklist here.",
"description": "Occasionally, a user account ban is not enough of a deterrant. Other times, restricting access to the forum to a specific IP or a range of IPs is the best way to protect a forum. In these scenarios, you can add troublesome IP addresses or entire CIDR blocks to this blacklist, and they will be prevented from logging in to or registering a new account.",
"active-rules": "Active Rules",
"validate": "Validate Blacklist",
"apply": "Apply Blacklist",
"hints": "Syntax Hints",
"hint-1": "Define a single IP addresses per line. You can add IP blocks as long as they follow the CIDR format (e.g. <code>192.168.100.0/22</code>).",
"hint-2": "You can add in comments by starting lines with the <code>#</code> symbol.",
"validate.x-valid": "<strong>%1</strong> out of <strong>%2</strong> rule(s) valid.",
"validate.x-invalid": "The following <strong>%1</strong> rules are invalid:",
"alerts.applied-success": "Blacklist Applied"
}

@ -0,0 +1,20 @@
{
"queue": "Queue",
"description": "There are no users in the registration queue. <br> To enable this feature, go to <a href=\"%1\">Settings &rarr; User &rarr; User Registration</a> and set <strong>Registration Type</strong> to \"Admin Approval\".",
"list.name": "Name",
"list.email": "Email",
"list.ip": "IP",
"list.time": "Time",
"list.username-spam": "Frequency: %1 Appears: %2 Confidence: %3",
"list.email-spam": "Frequency: %1 Appears: %2",
"list.ip-spam": "Frequency: %1 Appears: %2",
"invitations": "Invitations",
"invitations.description": "Below is a complete list of invitations sent. Use ctrl-f to search through the list by email or username. <br><br>The username will be displayed to the right of the emails for users who have redeemed their invitations.",
"invitations.inviter-username": "Inviter Username",
"invitations.invitee-email": "Invitee Email",
"invitations.invitee-username": "Invitee Username (if registered)",
"invitations.confirm-delete": "Are you sure you wish to delete this invitation?"
}

@ -0,0 +1,18 @@
{
"none": "Your forum does not have any topics with tags yet.",
"bg-color": "Background Colour",
"text-color": "Text Colour",
"create-modify": "Create & Modify Tags",
"description": "Select tags via clicking and/or dragging, use shift to select multiple.",
"create": "Create Tag",
"modify": "Modify Tags",
"delete": "Delete Selected Tags",
"search": "Search for tags...",
"settings": "Click <a href=\"%1\">here</a> to visit the tag settings page.",
"name": "Tag Name",
"alerts.editing-multiple": "Editing multiple tags",
"alerts.editing-x": "Editing \"%1\" tag",
"alerts.confirm-delete": "Do you want to delete the selected tags?",
"alerts.update-success": "Tag Updated!"
}

@ -0,0 +1,91 @@
{
"users": "Users",
"edit": "Edit",
"make-admin": "Make Admin",
"remove-admin": "Remove Admin",
"validate-email": "Validate Email",
"send-validation-email": "Send Validation Email",
"password-reset-email": "Send Password Reset Email",
"ban": "Ban User(s)",
"temp-ban": "Ban User(s) Temporarily",
"unban": "Unban User(s)",
"reset-lockout": "Reset Lockout",
"reset-flags": "Reset Flags",
"delete": "Delete User(s)",
"purge": "Delete User(s) and Content",
"download-csv": "Download CSV",
"invite": "Invite",
"new": "New User",
"pills.latest": "Latest Users",
"pills.unvalidated": "Not Validated",
"pills.no-posts": "No Posts",
"pills.top-posters": "Top Posters",
"pills.top-rep": "Most Reputation",
"pills.inactive": "Inactive",
"pills.flagged": "Most Flagged",
"pills.banned": "Banned",
"pills.search": "User Search",
"search.username": "By User Name",
"search.username-placeholder": "Enter a username to search",
"search.email": "By Email",
"search.email-placeholder": "Enter a email to search",
"search.ip": "By IP Address",
"search.ip-placeholder": "Enter an IP Address to search",
"search.not-found": "User not found!",
"inactive.3-months": "3 months",
"inactive.6-months": "6 months",
"inactive.12-months": "12 months",
"users.uid": "uid",
"users.username": "username",
"users.email": "email",
"users.postcount": "postcount",
"users.reputation": "reputation",
"users.flags": "flags",
"users.joined": "joined",
"users.last-online": "last online",
"users.banned": "banned",
"create.username": "User Name",
"create.email": "Email",
"create.email-placeholder": "Email of this user",
"create.password": "Password",
"create.password-confirm": "Confirm Password",
"temp-ban.length": "Ban Length",
"temp-ban.reason": "Reason <span class=\"text-muted\">(Optional)</span>",
"temp-ban.hours": "Hours",
"temp-ban.days": "Days",
"temp-ban.explanation": "Enter the length of time for the ban. Note that a time of 0 will be a considered a permanent ban.",
"alerts.confirm-ban": "Do you really want to ban this user <strong>permanently</strong>?",
"alerts.confirm-ban-multi": "Do you really want to ban these users <strong>permanently</strong>?",
"alerts.ban-success": "User(s) banned!",
"alerts.button-ban-x": "Ban %1 user(s)",
"alerts.unban-success": "User(s) unbanned!",
"alerts.lockout-reset-success": "Lockout(s) reset!",
"alerts.flag-reset-success": "Flags(s) reset!",
"alerts.no-remove-yourself-admin": "You can't remove yourself as Administrator!",
"alerts.make-admin-success": "User(s) are now administrators.",
"alerts.confirm-remove-admin": "Do you really want to remove admins?",
"alerts.remove-admin-success": "User(s) are no longer administrators.",
"alerts.confirm-validate-email": "Do you want to validate email(s) of these user(s)?",
"alerts.validate-email-success": "Emails validated",
"alerts.password-reset-confirm": "Do you want to send password reset email(s) to these user(s)?",
"alerts.confirm-delete": "<b>Warning!</b><br/>Do you really want to delete user(s)?<br/> This action is not reversable! Only the user account will be deleted, their posts and topics will remain.",
"alerts.delete-success": "User(s) Deleted!",
"alerts.confirm-purge": "<b>Warning!</b><br/>Do you really want to delete user(s) and their content?<br/> This action is not reversable! All user data and content will be erased!",
"alerts.create": "Create User",
"alerts.button-create": "Create",
"alerts.button-cancel": "Cancel",
"alerts.error-passwords-different": "Passwords must match!",
"alerts.error-x": "<strong>Error</strong><p>%1</p>",
"alerts.create-success": "User created!",
"alerts.prompt-email": "Email: ",
"alerts.email-sent-to": "An invitation email has been sent to %1",
"alerts.x-users-found": "%1 user(s) found! Search took %2 ms."
}

@ -71,9 +71,7 @@ define('admin/appearance/themes', ['translator'], function (translator) {
var instListEl = $('#installed_themes');
if (!themes.length) {
translator.translate('[[admin/appearance/themes:no-themes]]', function (text) {
instListEl.append($('<li/ >').addClass('no-themes').html(text));
});
instListEl.append($('<li/ >').addClass('no-themes').translateHtml('[[admin/appearance/themes:no-themes]]'));
return;
} else {
templates.parse('admin/partials/theme_list', {

@ -43,9 +43,7 @@ define('admin/extend/rewards', ['translator'], function (translator) {
var btn = $(this),
disabled = btn.hasClass('btn-success'),
id = $(this).parents('[data-id]').attr('data-id');
translator.translate('[[admin/extend/rewards:' + disabled ? 'disable' : 'enable' + ']]', function (text) {
btn.toggleClass('btn-warning').toggleClass('btn-success').html(text);
});
btn.toggleClass('btn-warning').toggleClass('btn-success').translateHtml('[[admin/extend/rewards:' + disabled ? 'disable' : 'enable' + ']]');
// send disable api call
return false;
});

@ -116,9 +116,7 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator'], function (s
updatePresenceGraph(data.users);
updateTopicsGraph(data.topics);
translator.translate(html, function (html) {
$('#active-users').html(html);
});
$('#active-users').translateHtml(html);
};
var graphs = {

@ -137,9 +137,10 @@ define('admin/general/navigation', ['translator', 'iconSelect', 'jqueryui'], fun
function toggle() {
var btn = $(this),
disabled = btn.hasClass('btn-success');
btn.toggleClass('btn-warning').toggleClass('btn-success').html(!disabled ? 'Enable' : 'Disable');
btn.parents('li').find('[name="enabled"]').val(!disabled ? '' : 'on');
translator.translate(disabled ? '[[admin/general/navigation:btn.disable]]' : '[[admin/general/navigation:btn.enable]]', function (html) {
btn.toggleClass('btn-warning').toggleClass('btn-success').html(html);
btn.parents('li').find('[name="enabled"]').val(disabled ? 'on' : '');
});
return false;
}

@ -4,8 +4,9 @@
define('admin/manage/flags', [
'autocomplete',
'Chart',
'components'
], function (autocomplete, Chart, components) {
'components',
'translator'
], function (autocomplete, Chart, components, translator) {
var Flags = {};
@ -56,7 +57,7 @@ define('admin/manage/flags', [
function handleDelete() {
$('.flags').on('click', '.delete', function () {
var btn = $(this);
bootbox.confirm('Do you really want to delete this post?', function (confirm) {
bootbox.confirm('[[admin/manage/flags:alerts.confirm-delete-post]]', function (confirm) {
if (!confirm) {
return;
}
@ -76,7 +77,9 @@ define('admin/manage/flags', [
btn.parents('[data-pid]').fadeOut(function () {
$(this).remove();
if (!$('.flags [data-pid]').length) {
$('.post-container').text('No flagged posts!');
translator.translate('[[admin/manage/flags:none-flagged]]', function (text) {
$('.post-container').text(text);
});
}
});
}
@ -130,7 +133,8 @@ define('admin/manage/flags', [
}
function updateFlagDetails(source) {
// As the flag details are returned in the API, update the form controls to show the correct data
// As the flag details are returned in the API,
// update the form controls to show the correct data
// Create reference hash for use in this method
source = source.reduce(function (memo, cur) {
@ -140,7 +144,7 @@ define('admin/manage/flags', [
components.get('posts/flag').each(function (idx, el) {
var pid = el.getAttribute('data-pid');
var el = $(el);
el = $(el);
if (source[pid]) {
for(var prop in source[pid]) {

@ -69,7 +69,7 @@ define('admin/manage/group', [
groupDetailsSearchResults.append(foundUser);
}
} else {
groupDetailsSearchResults.html('<li>No Users Found</li>');
groupDetailsSearchResults.translateHtml('<li>[[admin/manage/groups:edit.no-users-found]]</li>');
}
});
}, 200);
@ -126,7 +126,7 @@ define('admin/manage/group', [
break;
case 'kick':
bootbox.confirm('Are you sure you want to remove this user?', function (confirm) {
bootbox.confirm('[[admin/manage/groups:edit.confirm-remove-user]]', function (confirm) {
if (!confirm) {
return;
}
@ -178,7 +178,7 @@ define('admin/manage/group', [
// If the group name changed, change url
if (groupName === newName) {
app.alertSuccess('Changes saved!');
app.alertSuccess('[[admin/manage/groups:edit.save-success]]');
} else {
ajaxify.go('admin/manage/groups/' + encodeURIComponent(newName), undefined, true);
}

@ -1,10 +1,7 @@
"use strict";
/*global define, templates, socket, ajaxify, app, admin, bootbox, utils, config */
define('admin/manage/groups', [
'translator',
'components'
], function (translator, components) {
define('admin/manage/groups', ['translator'], function (translator) {
var Groups = {};
var intervalId = 0;
@ -40,12 +37,9 @@ define('admin/manage/groups', [
socket.emit('admin.groups.create', submitObj, function (err) {
if (err) {
if (err.hasOwnProperty('message') && utils.hasLanguageKey(err.message)) {
translator.translate(err.message, config.defaultLang, function (translated) {
createModalError.html(translated).removeClass('hide');
});
} else {
createModalError.html('<strong>Uh-Oh</strong><p>There was a problem creating your group. Please try again later!</p>').removeClass('hide');
err = '[[admin/manage/groups:alerts.create-failure]]';
}
createModalError.translateHtml(err).removeClass('hide');
} else {
createModalError.addClass('hide');
createGroupName.val('');
@ -64,7 +58,7 @@ define('admin/manage/groups', [
switch (action) {
case 'delete':
bootbox.confirm('Are you sure you wish to delete this group?', function (confirm) {
bootbox.confirm('[[admin/manage/groups:alerts.confirm-delete]]', function (confirm) {
if (confirm) {
socket.emit('groups.delete', {
groupName: groupName

@ -20,7 +20,7 @@ define('admin/manage/ip-blacklist', ['translator'], function (translator) {
app.alert({
type: 'success',
alert_id: 'blacklist-saved',
title: 'Blacklist Applied',
title: '[[admin/manage/ip-blacklist:alerts.applied]]',
});
});
});
@ -34,9 +34,7 @@ define('admin/manage/ip-blacklist', ['translator'], function (translator) {
}
templates.parse('admin/partials/blacklist-validate', data, function (html) {
translator.translate(html, function (html) {
bootbox.alert(html);
});
bootbox.alert(html);
});
});
});

@ -39,7 +39,7 @@ define('admin/manage/registration', function () {
parent.remove();
};
if (action === 'delete') {
bootbox.confirm('Are you sure you wish to delete this invitation?', function (confirm) {
bootbox.confirm('[[admin/manage/registration:invitations.confirm-delete]]', function (confirm) {
if (confirm) {
socket.emit(method, {email: email, invitedBy: invitedBy}, function (err) {
if (err) {

@ -86,7 +86,7 @@ define('admin/manage/tags', [
}
var firstTag = $(tagsToModify[0]),
title = tagsToModify.length > 1 ? 'Editing multiple tags' : 'Editing ' + firstTag.find('.tag-item').text() + ' tag';
title = tagsToModify.length > 1 ? '[[admin/manage/tags:alerts.editing-multiple]]' : '[[admin/manage/tags:alerts.editing-x, ' + firstTag.find('.tag-item').text() + ']]';
var modal = bootbox.dialog({
title: title,
@ -125,7 +125,7 @@ define('admin/manage/tags', [
return;
}
bootbox.confirm('Do you want to delete the selected tags?', function (confirm) {
bootbox.confirm('[[admin/manage/tags:alerts.confirm-delete]]', function (confirm) {
if (!confirm) {
return;
}
@ -164,7 +164,7 @@ define('admin/manage/tags', [
return app.alertError(err.message);
}
app.alertSuccess('Tag Updated!');
app.alertSuccess('[[admin/manage/tags:alerts.update-success]]');
});
}

@ -68,9 +68,9 @@ define('admin/manage/users', ['translator'], function (translator) {
return false; // specifically to keep the menu open
}
bootbox.confirm('Do you really want to ban ' + (uids.length > 1 ? 'these users' : 'this user') + ' <strong>permanently</strong>?', function (confirm) {
bootbox.confirm((uids.length > 1 ? '[[admin/manage/users:alerts.confirm-ban-multi]]' : '[[admin/manage/users:alerts.confirm-ban]]'), function (confirm) {
if (confirm) {
socket.emit('user.banUsers', { uids: uids, reason: '' }, done('User(s) banned!', '.ban', true));
socket.emit('user.banUsers', { uids: uids, reason: '' }, done('[[admin/manage/users:alerts.ban-success]]', '.ban', true));
}
});
});
@ -94,14 +94,14 @@ define('admin/manage/users', ['translator'], function (translator) {
className: 'btn-link'
},
submit: {
label: 'Ban ' + uids.length + (uids.length > 1 ? ' users' : ' user'),
label: '[[admin/manage/users:alerts.button-ban-x, ' + uids.length + ']]',
callback: function () {
var formData = $('.ban-modal form').serializeArray().reduce(function (data, cur) {
data[cur.name] = cur.value;
return data;
}, {});
var until = formData.length ? (Date.now() + formData.length * 1000 * 60 * 60 * (parseInt(formData.unit, 10) ? 24 : 1)) : 0;
socket.emit('user.banUsers', { uids: uids, until: until, reason: formData.reason }, done('User(s) banned!', '.ban', true));
socket.emit('user.banUsers', { uids: uids, until: until, reason: formData.reason }, done('[[admin/manage/users:alerts.ban-success]]', '.ban', true));
}
}
}
@ -116,7 +116,7 @@ define('admin/manage/users', ['translator'], function (translator) {
return false; // specifically to keep the menu open
}
socket.emit('user.unbanUsers', uids, done('User(s) unbanned!', '.ban', false));
socket.emit('user.unbanUsers', uids, done('[[admin/manage/users:alerts.unban-success]]', '.ban', false));
});
$('.reset-lockout').on('click', function () {
@ -125,7 +125,7 @@ define('admin/manage/users', ['translator'], function (translator) {
return;
}
socket.emit('admin.user.resetLockouts', uids, done('Lockout(s) reset!'));
socket.emit('admin.user.resetLockouts', uids, done('[[admin/manage/users:alerts.lockout-reset-success]]'));
});
$('.reset-flags').on('click', function () {
@ -134,7 +134,7 @@ define('admin/manage/users', ['translator'], function (translator) {
return;
}
socket.emit('admin.user.resetFlags', uids, done('Flags(s) reset!'));
socket.emit('admin.user.resetFlags', uids, done('[[admin/manage/users:alerts.flag-reset-success]]'));
});
$('.admin-user').on('click', function () {
@ -144,9 +144,9 @@ define('admin/manage/users', ['translator'], function (translator) {
}
if (uids.indexOf(app.user.uid.toString()) !== -1) {
app.alertError('You can\'t remove yourself as Administrator!');
app.alertError('[[admin/manage/users:alerts.no-remove-yourself-admin]]');
} else {
socket.emit('admin.user.makeAdmins', uids, done('User(s) are now administrators.', '.administrator', true));
socket.emit('admin.user.makeAdmins', uids, done('[[admin/manage/users:alerts.make-admin-success]]', '.administrator', true));
}
});
@ -157,11 +157,11 @@ define('admin/manage/users', ['translator'], function (translator) {
}
if (uids.indexOf(app.user.uid.toString()) !== -1) {
app.alertError('You can\'t remove yourself as Administrator!');
app.alertError('[[admin/manage/users:alerts.no-remove-yourself-admin]]');
} else {
bootbox.confirm('Do you really want to remove admins?', function (confirm) {
bootbox.confirm('[[admin/manage/users:alerts.confirm-remove-admin]]', function (confirm) {
if (confirm) {
socket.emit('admin.user.removeAdmins', uids, done('User(s) are no longer administrators.', '.administrator', false));
socket.emit('admin.user.removeAdmins', uids, done('[[admin/manage/users:alerts.remove-admin-success]]', '.administrator', false));
}
});
}
@ -173,7 +173,7 @@ define('admin/manage/users', ['translator'], function (translator) {
return;
}
bootbox.confirm('Do you want to validate email(s) of these user(s)?', function (confirm) {
bootbox.confirm('[[admin/manage/users:alerts.confirm-validate-email]]', function (confirm) {
if (!confirm) {
return;
}
@ -181,7 +181,7 @@ define('admin/manage/users', ['translator'], function (translator) {
if (err) {
return app.alertError(err.message);
}
app.alertSuccess('Emails validated');
app.alertSuccess('[[admin/manage/users:alerts.validate-email-success]]');
update('.notvalidated', false);
update('.validated', true);
unselectAll();
@ -208,9 +208,9 @@ define('admin/manage/users', ['translator'], function (translator) {
return;
}
bootbox.confirm('Do you want to send password reset email(s) to these user(s)?', function (confirm) {
bootbox.confirm('[[admin/manage/users:alerts.password-reset-confirm]]', function (confirm) {
if (confirm) {
socket.emit('admin.user.sendPasswordResetEmail', uids, done('Emails sent'));
socket.emit('admin.user.sendPasswordResetEmail', uids, done('[[notifications:email-confirm-sent]]'));
}
});
});
@ -221,14 +221,14 @@ define('admin/manage/users', ['translator'], function (translator) {
return;
}
bootbox.confirm('<b>Warning!</b><br/>Do you really want to delete user(s)?<br/> This action is not reversable, only the user account will be deleted, their posts and topics will not be deleled!', function (confirm) {
bootbox.confirm('[[admin/manage/users:alerts.confirm-delete]]', function (confirm) {
if (confirm) {
socket.emit('admin.user.deleteUsers', uids, function (err) {
if (err) {
return app.alertError(err.message);
}
app.alertSuccess('User(s) Deleted!');
app.alertSuccess('[[admin/manage/users:alerts.delete-success]]');
removeSelected();
unselectAll();
});
@ -241,14 +241,14 @@ define('admin/manage/users', ['translator'], function (translator) {
if (!uids.length) {
return;
}
bootbox.confirm('<b>Warning!</b><br/>Do you really want to delete user(s) and their content?<br/> This action is not reversable, all user data and content will be erased!', function (confirm) {
bootbox.confirm('[[admin/manage/users:alerts.confirm-purge]]', function (confirm) {
if (confirm) {
socket.emit('admin.user.deleteUsersAndContent', uids, function (err) {
if (err) {
return app.alertError(err.message);
}
app.alertSuccess('User(s) Deleted!');
app.alertSuccess('[[admin/manage/users:alerts.delete-success]]');
removeSelected();
unselectAll();
});
@ -259,26 +259,24 @@ define('admin/manage/users', ['translator'], function (translator) {
function handleUserCreate() {
$('#createUser').on('click', function () {
templates.parse('admin/partials/create_user_modal', {}, function (html) {
translator.translate(html, function (html) {
bootbox.dialog({
message: html,
title: 'Create User',
onEscape: true,
buttons: {
cancel: {
label: 'Cancel',
className: 'btn-link'
},
create: {
label: 'Create',
className: 'btn-primary',
callback: function () {
createUser.call(this);
return false;
}
bootbox.dialog({
message: html,
title: '[[admin/manage/users:alerts.create]]',
onEscape: true,
buttons: {
cancel: {
label: '[[admin/manage/users:alerts.button-cancel]]',
className: 'btn-link'
},
create: {
label: '[[admin/manage/users:alerts.button-create]]',
className: 'btn-primary',
callback: function () {
createUser.call(this);
return false;
}
}
});
}
});
});
});
@ -294,7 +292,7 @@ define('admin/manage/users', ['translator'], function (translator) {
var errorEl = $('#create-modal-error');
if (password !== passwordAgain) {
return errorEl.html('<strong>Error</strong><p>Passwords must match!</p>').removeClass('hide');
return errorEl.translateHtml('[[admin/manage/users:alerts.error-x, [[admin/manage/users:alerts.error-passwords-different]]]]').removeClass('hide');
}
var user = {
@ -305,14 +303,14 @@ define('admin/manage/users', ['translator'], function (translator) {
socket.emit('admin.user.createUser', user, function (err) {
if(err) {
return errorEl.translateHtml('<strong>Error</strong><p>' + err.message + '</p>').removeClass('hide');
return errorEl.translateHtml('[[admin/manage/users:alerts.error-x, ' + err.message + ']]').removeClass('hide');
}
modal.modal('hide');
modal.on('hidden.bs.modal', function () {
ajaxify.refresh();
});
app.alertSuccess('User created!');
app.alertSuccess('[[admin/manage/users:alerts.create-success]]');
});
}
@ -344,12 +342,12 @@ define('admin/manage/users', ['translator'], function (translator) {
$('.fa-spinner').addClass('hidden');
if (data && data.users.length === 0) {
$('#user-notfound-notify').html('User not found!')
$('#user-notfound-notify').translateHtml('[[admin/manage/users:search.not-found]]')
.removeClass('hide')
.addClass('label-danger')
.removeClass('label-success');
} else {
$('#user-notfound-notify').html(data.users.length + ' user' + (data.users.length > 1 ? 's' : '') + ' found! Search took ' + data.timing + ' ms.')
$('#user-notfound-notify').translateHtml(translator.compile('admin/manage/users:alerts.x-users-found', data.users.length, data.timing))
.removeClass('hide')
.addClass('label-success')
.removeClass('label-danger');
@ -368,7 +366,7 @@ define('admin/manage/users', ['translator'], function (translator) {
function handleInvite() {
$('[component="user/invite"]').on('click', function () {
bootbox.prompt('Email: ', function (email) {
bootbox.prompt('[[admin/manage/users:alerts.prompt-email]]', function (email) {
if (!email) {
return;
}
@ -377,7 +375,7 @@ define('admin/manage/users', ['translator'], function (translator) {
if (err) {
return app.alertError(err.message);
}
app.alertSuccess('An invitation email has been sent to ' + email);
app.alertSuccess('[[admin/manage/users:alerts.email-sent-to, ' + email + ']]');
});
});
});

@ -10,7 +10,7 @@
</p>
</div>
<div class="panel-footer"><small>Daily flags</small></div>
<div class="panel-footer"><small>[[admin/manage/flags:daily]]</small></div>
</div>
</div>
@ -18,8 +18,8 @@
<div class="form-group">
<div>
<div>
<label>Flags by user</label>
<input type="text" class="form-control" id="byUsername" placeholder="Search flagged posts by username" name="byUsername" value="{byUsername}">
<label>[[admin/manage/flags:by-user]]</label>
<input type="text" class="form-control" id="byUsername" placeholder="[[admin/manage/flags:by-user-search]]" name="byUsername" value="{byUsername}">
</div>
</div>
</div>
@ -27,7 +27,7 @@
<div class="form-group">
<div>
<div>
<label>Category</label>
<label>[[admin/manage/flags:category]]</label>
<select class="form-control" id="category-selector" name="cid">
<option value="">[[unread:all_categories]]</option>
<!-- BEGIN categories -->
@ -39,18 +39,18 @@
</div>
<div class="form-group">
<label>Sort By</label>
<label>[[admin/manage/flags:sort-by]]</label>
<div>
<div>
<select id="flag-sort-by" class="form-control" name="sortBy">
<option value="count" <!-- IF sortByCount -->selected<!-- ENDIF sortByCount -->>Most Flags</option>
<option value="time" <!-- IF sortByTime -->selected<!-- ENDIF sortByTime -->>Most Recent</option>
<option value="count" <!-- IF sortByCount -->selected<!-- ENDIF sortByCount -->>[[admin/manage/flags:sort-by.most-flags]]</option>
<option value="time" <!-- IF sortByTime -->selected<!-- ENDIF sortByTime -->>[[admin/manage/flags:sort-by.most-recent]]</option>
</select>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">Search</button>
<button type="submit" class="btn btn-primary">[[admin/manage/flags:search]]</button>
<button class="btn btn-primary" id="dismissAll">Dismiss All</button>
</form>
@ -61,7 +61,7 @@
<div component="posts/flags" class="panel-group post-container" id="accordion" role="tablist" aria-multiselectable="true" data-next="{next}">
<!-- IF !posts.length -->
<div class="alert alert-success">
No flagged posts!
[[admin/manage/flags:none-flagged]]
</div>
<!-- ENDIF !posts.length -->
@ -106,14 +106,16 @@
</div>
<small>
<span class="pull-right">
Posted in <a href="{config.relative_path}/category/{posts.category.slug}" target="_blank"><i class="fa {posts.category.icon}"></i> {posts.category.name}</a>, <span class="timeago" title="{posts.timestampISO}"></span> &bull;
<a href="{config.relative_path}/post/{posts.pid}" target="_blank">Read More</a>
[[posted-in, <a href="{config.relative_path}/category/{posts.category.slug}" target="_blank"><i class="fa {posts.category.icon}"></i> {posts.category.name}</a>]],
<span class="timeago" title="{posts.timestampISO}"></span> &bull;
<a href="{config.relative_path}/post/{posts.pid}" target="_blank">[[admin/manage/flags:read-more]]</a>
</span>
</small>
</div>
</div>
<div class="col-sm-4">
<i class="fa fa-flag"></i> This post has been flagged {posts.flags} time(s):
<i class="fa fa-flag"></i>
[[admin/manage/flags:flagged-x-times, {posts.flags}]]
<blockquote class="flag-reporters">
<ul>
<!-- BEGIN posts.flagReasons -->
@ -131,8 +133,12 @@
</ul>
</blockquote>
<div class="btn-group">
<button class="btn btn-sm btn-success dismiss">Dismiss this Flag</button>
<button class="btn btn-sm btn-danger delete">Delete the Post</button>
<button class="btn btn-sm btn-success dismiss">
[[admin/manage/flags:dismiss]]
</button>
<button class="btn btn-sm btn-danger delete">
[[admin/manage/flags:delete-post]]
</button>
</div>
</div>
</div>
@ -141,7 +147,9 @@
<div class="col-sm-6">
<form role="form">
<div class="form-group">
<label for="{posts.pid}-assignee">[[topic:flag_manage_assignee]]</label>
<label for="{posts.pid}-assignee">
[[topic:flag_manage_assignee]]
</label>
<select class="form-control" id="{posts.pid}-assignee" name="assignee">
<!-- BEGIN assignees -->
<option value="{assignees.uid}">{assignees.username}</option>
@ -149,25 +157,41 @@
</select>
</div>
<div class="form-group">
<label for="{posts.pid}-state">[[topic:flag_manage_state]]</label>
<label for="{posts.pid}-state">
[[topic:flag_manage_state]]
</label>
<select class="form-control" id="{posts.pid}-state" name="state">
<option value="open">[[topic:flag_manage_state_open]]</option>
<option value="wip">[[topic:flag_manage_state_wip]]</option>
<option value="resolved">[[topic:flag_manage_state_resolved]]</option>
<option value="rejected">[[topic:flag_manage_state_rejected]]</option>
<option value="open">
[[topic:flag_manage_state_open]]
</option>
<option value="wip">
[[topic:flag_manage_state_wip]]
</option>
<option value="resolved">
[[topic:flag_manage_state_resolved]]
</option>
<option value="rejected">
[[topic:flag_manage_state_rejected]]
</option>
</select>
</div>
<div class="form-group">
<label for="{posts.pid}-notes">[[topic:flag_manage_notes]]</label>
<label for="{posts.pid}-notes">
[[topic:flag_manage_notes]]
</label>
<textarea class="form-control" id="{posts.pid}-notes" name="notes"></textarea>
</div>
<button type="button" component="posts/flag/update" class="btn btn-sm btn-primary btn-block">[[topic:flag_manage_update]]</button>
<button type="button" component="posts/flag/update" class="btn btn-sm btn-primary btn-block">
[[topic:flag_manage_update]]
</button>
</form>
</div>
<div class="col-sm-6">
<h5>[[topic:flag_manage_history]]</h5>
<!-- IF !posts.flagData.history.length -->
<div class="alert alert-info">[[topic:flag_manage_no_history]]</div>
<div class="alert alert-info">
[[topic:flag_manage_no_history]]
</div>
<!-- ELSE -->
<ul class="list-group" component="posts/flag/history">
<!-- BEGIN posts.flagData.history -->

@ -3,27 +3,27 @@
<div class="col-md-9">
<div class="group-settings-form">
<fieldset>
<label for="change-group-name">Name</label>
<label for="change-group-name">[[admin/manage/groups:edit.name]]</label>
<input type="text" class="form-control" id="change-group-name" placeholder="Group Name" value="{group.displayName}" <!-- IF group.system -->readonly<!-- ENDIF group.system -->/><br />
</fieldset>
<fieldset>
<label for="change-group-desc">Description</label>
<label for="change-group-desc">[[admin/manage/groups:edit.description]]</label>
<input type="text" class="form-control" id="change-group-desc" placeholder="A short description about your group" value="{group.description}" maxlength="255" /><br />
</fieldset>
<fieldset>
<label for="change-group-user-title">Title of Members</label>
<label for="change-group-user-title">[[admin/manage/groups:edit.user-title]]</label>
<input type="text" class="form-control" id="change-group-user-title" placeholder="The title of users if they are a member of this group" value="{group.userTitle}" maxlength="40" /><br />
</fieldset>
<fieldset>
<label for="change-group-icon">Group Icon</label><br/>
<label for="change-group-icon">[[admin/manage/groups:edit.icon]]</label><br/>
<i id="group-icon" class="fa fa-2x <!-- IF group.icon -->{group.icon}<!-- ELSE -->fa-shield<!-- ENDIF group.icon -->" value="{group.icon}"></i><br />
</fieldset>
<fieldset>
<label for="change-group-label-color">Group Label Color</label>
<label for="change-group-label-color">[[admin/manage/groups:edit.label-color]]</label>
<span id="group-label-preview" class="label label-default" style="background:<!-- IF group.labelColor -->{group.labelColor}<!-- ELSE -->#000000<!-- ENDIF group.labelColor -->;">{group.userTitle}</span>
<input id="change-group-label-color" placeholder="#0059b2" data-name="bgColor" value="{group.labelColor}" class="form-control" /><br />
</fieldset>
@ -31,7 +31,7 @@
<fieldset>
<div class="checkbox">
<label>
<input id="group-userTitleEnabled" name="userTitleEnabled" type="checkbox"<!-- IF group.userTitleEnabled --> checked<!-- ENDIF group.userTitleEnabled -->> <strong>Show Badge</strong>
<input id="group-userTitleEnabled" name="userTitleEnabled" type="checkbox"<!-- IF group.userTitleEnabled --> checked<!-- ENDIF group.userTitleEnabled -->> <strong>[[admin/manage/groups:edit.show-badge]]</strong>
</label>
</div>
</fieldset>
@ -39,13 +39,14 @@
<fieldset>
<div class="checkbox">
<label>
<input id="group-private" name="private" type="checkbox"<!-- IF group.private --> checked<!-- ENDIF group.private -->> <strong>[[groups:details.private]]</strong>
<input id="group-private" name="private" type="checkbox"<!-- IF group.private --> checked<!-- ENDIF group.private -->>
<strong>[[groups:details.private]]</strong>
<p class="help-block">
If enabled, joining of groups requires approval from a group owner.
[[admin/manage/groups:edit.private-details]]
</p>
<!-- IF !allowPrivateGroups -->
<p class="help-block">
Warning: Private groups is disabled at system level, which overrides this option.
[[admin/manage/groups:edit.private-override]]
</p>
<!-- ENDIF !allowPrivateGroups -->
</label>
@ -55,7 +56,8 @@
<fieldset>
<div class="checkbox">
<label>
<input id="group-disableJoinRequests" name="disableJoinRequests" type="checkbox"<!-- IF group.disableJoinRequests --> checked<!-- ENDIF group.disableJoinRequests -->> <strong>Disable join requests</strong>
<input id="group-disableJoinRequests" name="disableJoinRequests" type="checkbox"<!-- IF group.disableJoinRequests --> checked<!-- ENDIF group.disableJoinRequests -->>
<strong>[[admin/manage/groups:edit.disable-requests]]</strong>
</label>
</div>
</fieldset>
@ -63,17 +65,18 @@
<fieldset>
<div class="checkbox">
<label>
<input id="group-hidden" name="hidden" type="checkbox"<!-- IF group.hidden --> checked<!-- ENDIF group.hidden -->> <strong>Hidden</strong>
<input id="group-hidden" name="hidden" type="checkbox"<!-- IF group.hidden --> checked<!-- ENDIF group.hidden -->>
<strong>[[admin/manage/groups:edit.hidden]]</strong>
<p class="help-block">
If enabled, this group will not be found in the groups listing, and users will have to be invited manually
[[admin/manage/groups:edit.hidden-details]]
</p>
</label>
</div>
</fieldset>
<fieldset>
<label for="add-member">Add User to Group</label>
<input type="text" class="form-control" id="group-details-search" placeholder="Search Users" />
<label for="add-member">[[admin/manage/groups:edit.add-user]]</label>
<input type="text" class="form-control" id="group-details-search" placeholder="[[admin/manage/groups:edit.add-user-search]]" />
<ul class="members user-list" id="group-details-search-results"></ul>
</fieldset>
@ -81,7 +84,7 @@
<fieldset>
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title"><i class="fa fa-users"></i> Member List</h3>
<h3 class="panel-title"><i class="fa fa-users"></i> [[admin/manage/groups:edit.members]]</h3>
</div>
<div class="panel-body">
<!-- IMPORT partials/groups/memberlist.tpl -->
@ -95,14 +98,16 @@
<div class="col-md-3 options acp-sidebar">
<div class="panel panel-default">
<div class="panel-heading">Groups Control Panel</div>
<div class="panel-heading">[[admin/manage/groups:control-panel]]</div>
<div class="panel-body">
<div class="btn-group btn-group-justified">
<div class="btn-group">
<button class="btn btn-primary save">Save</button>
<button class="btn btn-primary save">[[global:save]]</button>
</div>
<div class="btn-group">
<button class="btn btn-default revert">Revert</button>
<button class="btn btn-default revert">
[[admin/manage/groups:revert]]
</button>
</div>
</div>
</div>

@ -4,20 +4,22 @@
<div class="panel-body">
<table class="table table-striped groups-list">
<tr>
<th>Group Name</th>
<th>Group Description</th>
<th>[[admin/manage/groups:name]]</th>
<th>[[admin/manage/groups:description]]</th>
</tr>
<!-- BEGIN groups -->
<tr data-groupname="{groups.displayName}">
<td>
{groups.displayName}
<!-- IF groups.system -->
<span class="badge">System Group</span>
<span class="badge">[[admin/manage/groups:system]]</span>
<!-- ENDIF groups.system -->
</td>
<td>
<div class="btn-group pull-right">
<a href="{config.relative_path}/admin/manage/groups/{groups.nameEncoded}" class="btn btn-default btn-xs"><i class="fa fa-edit"></i> Edit</a>
<a href="{config.relative_path}/admin/manage/groups/{groups.nameEncoded}" class="btn btn-default btn-xs">
<i class="fa fa-edit"></i> [[admin/manage/groups:edit]]
</a>
<!-- IF !groups.system -->
<button class="btn btn-danger btn-xs" data-action="delete"><i class="fa fa-times"></i></button>
<!-- ENDIF !groups.system -->
@ -36,7 +38,7 @@
<div class="panel panel-default">
<div class="panel-body">
<div>
<input id="group-search" type="text" class="form-control" placeholder="Search" />
<input id="group-search" type="text" class="form-control" placeholder="[[admin/manage/groups:search-placeholder]]" />
</div>
</div>
</div>
@ -47,24 +49,28 @@
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">Create Group</h4>
<h4 class="modal-title">[[admin/manage/groups:create]]</h4>
</div>
<div class="modal-body">
<div class="alert alert-danger hide" id="create-modal-error"></div>
<form>
<div class="form-group">
<label for="group-name">Group Name</label>
<input type="text" class="form-control" id="create-group-name" placeholder="Group Name" />
<label for="group-name">[[admin/manage/groups:name]]</label>
<input type="text" class="form-control" id="create-group-name" placeholder="[[admin/manage/groups:name]]" />
</div>
<div class="form-group">
<label for="group-name">Description</label>
<input type="text" class="form-control" id="create-group-desc" placeholder="A short description about your group" />
<label for="group-name">[[admin/manage/groups:name]]</label>
<input type="text" class="form-control" id="create-group-desc" placeholder="[[admin/manage/groups:description-placeholder]]" />
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" id="create-modal-go">Create</button>
<button type="button" class="btn btn-default" data-dismiss="modal">
[[global:close]]
</button>
<button type="button" class="btn btn-primary" id="create-modal-go">
[[admin/manage/groups:create-button]]
</button>
</div>
</div>
</div>

@ -1,12 +1,10 @@
<div class="flags">
<div class="col-lg-12">
<p class="lead">
Configure your IP blacklist here.
[[admin/manage/ip-blacklist:lead]]
</p>
<p>
Occasionally, a user account ban is not enough of a deterrant. Other times, restricting access to the forum to a specific IP or a range of IPs
is the best way to protect a forum. In these scenarios, you can add troublesome IP addresses or entire CIDR blocks to this blacklist, and
they will be prevented from logging in to or registering a new account.
[[admin/manage/ip-blacklist:description]]
</p>
<div class="row">
@ -15,21 +13,24 @@
</div>
<div class="col-sm-6">
<div class="panel panel-default">
<div class="panel-heading">Active Rules</div>
<div class="panel-heading">[[admin/manage/ip-blacklist:active-rules]]</div>
<div class="panel-body">
<button type="button" class="btn btn-warning" data-action="test"><i class="fa fa-bomb"></i> Validate Blacklist</button>
<button type="button" class="btn btn-primary" data-action="apply"><i class="fa fa-save"></i> Apply Blacklist</button>
<button type="button" class="btn btn-warning" data-action="test">
<i class="fa fa-bomb"></i> [[admin/manage/ip-blacklist:validate]]
</button>
<button type="button" class="btn btn-primary" data-action="apply">
<i class="fa fa-save"></i> [[admin/manage/ip-blacklist:apply]]
</button>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">Syntax Hints</div>
<div class="panel-heading">[[admin/manage/ip-blacklist:hints]]</div>
<div class="panel-body">
<p>
Define a single IP addresses per line. You can add IP blocks as long as they follow the CIDR format (e.g.
<code>192.168.100.0/22</code>).
[[admin/manage/ip-blacklist:hint-1]]
</p>
<p>
You can add in comments by starting lines with the <code>#</code> symbol.
[[admin/manage/ip-blacklist:hint-2]]
</p>
</div>
</div>

@ -1,21 +1,19 @@
<div class="registration panel panel-primary">
<div class="panel-heading">
Queue
[[admin/manage/registration:queue]]
</div>
<!-- IF !users.length -->
<p class="panel-body">
There are no users in the registration queue. <br>
To enable this feature, go to <a href="{config.relative_path}/admin/settings/user">Settings &rarr; User &rarr; User Registration</a> and set
<strong>Registration Type</strong> to "Admin Approval".
[[admin/manage/registration:description, {config.relative_path}/admin/settings/user]]
</p>
<!-- ENDIF !users.length -->
<div class="table-responsive">
<table class="table table-striped users-list">
<tr>
<th>Name</th>
<th>Email</th>
<th class="hidden-xs">IP</th>
<th class="hidden-xs">Time</th>
<th>[[admin/manage/registration:list.name]]</th>
<th>[[admin/manage/registration:list.email]]</th>
<th class="hidden-xs">[[admin/manage/registration:list.ip]]</th>
<th class="hidden-xs">[[admin/manage/registration:list.time]]</th>
<!-- BEGIN customHeaders -->
<th class="hidden-xs">{customHeaders.label}</th>
<!-- END customHeaders -->
@ -25,7 +23,7 @@
<tr data-username="{users.username}">
<td>
<!-- IF users.usernameSpam -->
<i class="fa fa-times-circle text-danger" title="Frequency: {users.spamData.username.frequency} Appears: {users.spamData.username.appears} Confidence: {users.spamData.username.confidence}"></i>
<i class="fa fa-times-circle text-danger" title="[[admin/manage/registration:list.username-spam, {users.spamData.username.frequency}, {users.spamData.username.appears}, {users.spamData.username.confidence}]]"></i>
<!-- ELSE -->
<i class="fa fa-check text-success"></i>
<!-- ENDIF users.usernameSpam -->
@ -33,7 +31,7 @@
</td>
<td>
<!-- IF users.emailSpam -->
<i class="fa fa-times-circle text-danger" title="Frequency: {users.spamData.email.frequency} Appears: {users.spamData.email.appears}"></i>
<i class="fa fa-times-circle text-danger" title="[[admin/manage/registration:list.email-spam, {users.spamData.email.frequency}, {users.spamData.email.appears}]]"></i>
<!-- ELSE -->
<i class="fa fa-check text-success"></i>
<!-- ENDIF users.emailSpam -->
@ -41,7 +39,7 @@
</td>
<td class="hidden-xs">
<!-- IF users.ipSpam -->
<i class="fa fa-times-circle text-danger" title="Frequency: {users.spamData.ip.frequency} Appears: {users.spamData.ip.appears}"></i>
<i class="fa fa-times-circle text-danger" title="[[admin/manage/registration:list.ip-spam, {users.spamData.ip.frequency}, {users.spamData.ip.appears}]]"></i>
<!-- ELSE -->
<i class="fa fa-check text-success"></i>
<!-- ENDIF users.ipSpam -->
@ -80,19 +78,17 @@
<div class="invitations panel panel-success">
<div class="panel-heading">
Invitations
[[admin/manage/registration:invitations]]
</div>
<p class="panel-body">
Below is a complete list of invitations sent. Use ctrl-f to search through the list by email or username.
<br><br>
The username will be displayed to the right of the emails for users who have redeemed their invitations.
[[admin/manage/registration:invitations.description]]
</p>
<div class="table-responsive">
<table class="table table-striped invites-list">
<tr>
<th>Inviter Username</th>
<th>Invitee Email</th>
<th>Invitee Username (if registered)</th>
<th>[[admin/manage/registration:invitations.inviter-username]]</th>
<th>[[admin/manage/registration:invitations.invitee-email]]</th>
<th>[[admin/manage/registration:invitations.invitee-username]]</th>
</tr>
<!-- BEGIN invites -->
<!-- BEGIN invites.invitations -->

@ -4,22 +4,28 @@
<div class="panel panel-default tag-management">
<div class="panel-body">
<!-- IF !tags.length -->
Your forum does not have any topics with tags yet.
[[admin/manage/tags:none]]
<!-- ENDIF !tags.length -->
<div class="tag-list">
<!-- BEGIN tags -->
<div class="tag-row" data-tag="{tags.value}">
<div data-value="{tags.value}">
<span class="tag-item" data-tag="{tags.value}" style="<!-- IF tags.color -->color: {tags.color};<!-- ENDIF tags.color --><!-- IF tags.bgColor -->background-color: {tags.bgColor};<!-- ENDIF tags.bgColor -->">{tags.value}</span><span class="tag-topic-count"><a href="{config.relative_path}/tags/{tags.value}" target="_blank">{tags.score}</a></span>
<span class="tag-item" data-tag="{tags.value}" style="
<!-- IF tags.color -->color: {tags.color};<!-- ENDIF tags.color -->
<!-- IF tags.bgColor -->background-color: {tags.bgColor};<!-- ENDIF tags.bgColor -->
">{tags.value}</span>
<span class="tag-topic-count">
<a href="{config.relative_path}/tags/{tags.value}" target="_blank">{tags.score}</a>
</span>
</div>
<div class="tag-modal hidden">
<div class="form-group">
<label for="bgColor">Background Colour</label>
<label for="bgColor">[[admin/manage/tags:bg-color]]</label>
<input id="bgColor" placeholder="#ffffff" data-name="bgColor" value="{tags.bgColor}" class="form-control category_bgColor" />
</div>
<div class="form-group">
<label for="color">Text Colour</label>
<label for="color">[[admin/manage/tags:text-color]]</label>
<input id="color" placeholder="#a2a2a2" data-name="color" value="{tags.color}" class="form-control category_color" />
</div>
</div>
@ -32,19 +38,19 @@
<div class="col-lg-3 acp-sidebar">
<div class="panel panel-default">
<div class="panel-heading">Create & Modify Tags</div>
<div class="panel-heading">[[admin/manage/tags:create-modify]]</div>
<div class="panel-body">
<p>Select tags via clicking and/or dragging, use shift to select multiple.</p>
<button class="btn btn-primary btn-block" id="create">Create Tag</button>
<button class="btn btn-primary btn-block" id="modify">Modify Tags</button>
<button class="btn btn-warning btn-block" id="deleteSelected">Delete Tags</button>
<p>[[admin/manage/tags:description]]</p>
<button class="btn btn-primary btn-block" id="create">[[admin/manage/tags:create]]</button>
<button class="btn btn-primary btn-block" id="modify">[[admin/manage/tags:modify]]</button>
<button class="btn btn-warning btn-block" id="deleteSelected">[[admin/manage/tags:delete]]</button>
</div>
</div>
<div class="panel panel-default">
<div class="panel-body">
<input class="form-control" type="text" id="tag-search" placeholder="Search for tags..."/><br/>
Click <a href="{config.relative_path}/admin/settings/tags">here</a> to visit the tag settings page.
<input class="form-control" type="text" id="tag-search" placeholder="[[admin/manage/tags:search]]"/><br/>
[[admin/manage/tags:settings, {config.relative_path}/admin/settings/tags]]
</div>
</div>
</div>
@ -54,18 +60,18 @@
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">Create Tag</h4>
<h4 class="modal-title">[[admin/manage/tags:create]]</h4>
</div>
<div class="modal-body">
<form>
<div class="form-group">
<label for="create-tag-name">Tag Name</label>
<input type="text" class="form-control" id="create-tag-name" placeholder="Tag Name" />
<label for="create-tag-name">[[admin/manage/tags:name]]</label>
<input type="text" class="form-control" id="create-tag-name" placeholder="[[admin/manage/tags:name]]" />
</div>
</form>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="create-modal-go">Create</button>
<button type="button" class="btn btn-primary" id="create-modal-go">[[admin/manage/tags:create]]</button>
</div>
</div>
</div>

@ -1,89 +1,89 @@
<div class="row manage-users">
<div class="col-lg-12">
<div class="panel panel-default">
<div class="panel-heading"><i class="fa fa-user"></i> Users</div>
<div class="panel-heading"><i class="fa fa-user"></i> [[admin/manage/users:users]]</div>
<div class="panel-body">
<div class="clearfix">
<div class="btn-group pull-right">
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown" type="button">Edit <span class="caret"></span></button>
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown" type="button">[[admin/manage/users:edit]] <span class="caret"></span></button>
<ul class="dropdown-menu">
<li><a href="#" class="admin-user"><i class="fa fa-fw fa-shield"></i> Make Admin</a></li>
<li><a href="#" class="remove-admin-user"><i class="fa fa-fw fa-ban"></i> Remove Admin</a></li>
<li><a href="#" class="admin-user"><i class="fa fa-fw fa-shield"></i> [[admin/manage/users:make-admin]]</a></li>
<li><a href="#" class="remove-admin-user"><i class="fa fa-fw fa-ban"></i> [[admin/manage/users:remove-admin]]</a></li>
<li class="divider"></li>
<li><a href="#" class="validate-email"><i class="fa fa-fw fa-check"></i> Validate Email</a></li>
<li><a href="#" class="send-validation-email"><i class="fa fa-fw fa-mail-forward"></i> Send Validation Email</a></li>
<li><a href="#" class="password-reset-email"><i class="fa fa-fw fa-key"></i> Send Password Reset Email</a></li>
<li><a href="#" class="validate-email"><i class="fa fa-fw fa-check"></i> [[admin/manage/users:validate-email]]</a></li>
<li><a href="#" class="send-validation-email"><i class="fa fa-fw fa-mail-forward"></i> [[admin/manage/users:send-validation-email]]</a></li>
<li><a href="#" class="password-reset-email"><i class="fa fa-fw fa-key"></i> [[admin/manage/users:password-reset-email]]</a></li>
<li class="divider"></li>
<li><a href="#" class="ban-user"><i class="fa fa-fw fa-gavel"></i> Ban User(s)</a></li>
<li><a href="#" class="ban-user-temporary"><i class="fa fa-fw fa-clock-o"></i> Ban User(s) Temporarily</a></li>
<li><a href="#" class="unban-user"><i class="fa fa-fw fa-comment-o"></i> Unban User(s)</a></li>
<li><a href="#" class="reset-lockout"><i class="fa fa-fw fa-unlock"></i> Reset Lockout</a></li>
<li><a href="#" class="reset-flags"><i class="fa fa-fw fa-flag"></i> Reset Flags</a></li>
<li><a href="#" class="ban-user"><i class="fa fa-fw fa-gavel"></i> [[admin/manage/users:ban]]</a></li>
<li><a href="#" class="ban-user-temporary"><i class="fa fa-fw fa-clock-o"></i>[[admin/manage/users:temp-ban]]</a></li>
<li><a href="#" class="unban-user"><i class="fa fa-fw fa-comment-o"></i> [[admin/manage/users:unban]]</a></li>
<li><a href="#" class="reset-lockout"><i class="fa fa-fw fa-unlock"></i> [[admin/manage/users:reset-lockout]]</a></li>
<li><a href="#" class="reset-flags"><i class="fa fa-fw fa-flag"></i> [[admin/manage/users:reset-flags]]</a></li>
<li class="divider"></li>
<li><a href="#" class="delete-user"><i class="fa fa-fw fa-trash-o"></i> Delete User(s)</a></li>
<li><a href="#" class="delete-user-and-content"><i class="fa fa-fw fa-trash-o"></i> Delete User(s) and Content</a></li>
<li><a href="#" class="delete-user"><i class="fa fa-fw fa-trash-o"></i> [[admin/manage/users:delete]]</a></li>
<li><a href="#" class="delete-user-and-content"><i class="fa fa-fw fa-trash-o"></i> [[admin/manage/users:purge]]</a></li>
</ul>
</div>
<a target="_blank" href="{config.relative_path}/api/admin/users/csv" class="btn btn-primary pull-right">Download CSV</a>
<a target="_blank" href="{config.relative_path}/api/admin/users/csv" class="btn btn-primary pull-right">[[admin/manage/users:download-csv]]</a>
<!-- IF inviteOnly -->
<!-- IF loggedIn -->
<button component="user/invite" class="btn btn-success form-control"><i class="fa fa-users"></i> Invite</button>
<button component="user/invite" class="btn btn-success form-control"><i class="fa fa-users"></i> [[admin/manage/users:invite]]</button>
<!-- ENDIF loggedIn -->
<!-- ENDIF inviteOnly -->
<button id="createUser" class="btn btn-primary pull-right">New User</button>
<button id="createUser" class="btn btn-primary pull-right">[[admin/manage/users:new]]</button>
</div>
<ul class="nav nav-pills">
<li><a href='{config.relative_path}/admin/manage/users/latest'>Latest Users</a></li>
<li><a href='{config.relative_path}/admin/manage/users/not-validated'>Not validated</a></li>
<li><a href='{config.relative_path}/admin/manage/users/no-posts'>No Posts</a></li>
<li><a href='{config.relative_path}/admin/manage/users/top-posters'>Top Posters</a></li>
<li><a href='{config.relative_path}/admin/manage/users/most-reputation'>Most Reputation</a></li>
<li><a href='{config.relative_path}/admin/manage/users/inactive'>Inactive</a></li>
<li><a href='{config.relative_path}/admin/manage/users/flagged'>Most Flags</a></li>
<li><a href='{config.relative_path}/admin/manage/users/banned'>Banned</a></li>
<li><a href='{config.relative_path}/admin/manage/users/search'>User Search</a></li>
<li><a href='{config.relative_path}/admin/manage/users/latest'>[[admin/manage/users:pills.latest]]</a></li>
<li><a href='{config.relative_path}/admin/manage/users/not-validated'>[[admin/manage/users:pills.unvalidated]]</a></li>
<li><a href='{config.relative_path}/admin/manage/users/no-posts'>[[admin/manage/users:pills.no-posts]]</a></li>
<li><a href='{config.relative_path}/admin/manage/users/top-posters'>[[admin/manage/users:pills.top-posters]]</a></li>
<li><a href='{config.relative_path}/admin/manage/users/most-reputation'>[[admin/manage/users:pills.top-rep]]</a></li>
<li><a href='{config.relative_path}/admin/manage/users/inactive'>[[admin/manage/users:pills.inactive]]</a></li>
<li><a href='{config.relative_path}/admin/manage/users/flagged'>[[admin/manage/users:pills.flagged]]</a></li>
<li><a href='{config.relative_path}/admin/manage/users/banned'>[[admin/manage/users:pills.banned]]</a></li>
<li><a href='{config.relative_path}/admin/manage/users/search'>[[admin/manage/users:pills.search]]</a></li>
</ul>
<br />
<div class="search {search_display}">
<label>By User Name</label>
<input class="form-control" id="search-user-name" data-search-type="username" type="text" placeholder="Enter a username to search"/><br />
<label>[[admin/manage/users:search.username]]</label>
<input class="form-control" id="search-user-name" data-search-type="username" type="text" placeholder="[[admin/manage/users:search.username-placeholder]]"/><br />
<label>By Email </label>
<input class="form-control" id="search-user-email" data-search-type="email" type="text" placeholder="Enter a email to search"/><br />
<label>[[admin/manage/users:search.email]]</label>
<input class="form-control" id="search-user-email" data-search-type="email" type="text" placeholder="[[admin/manage/users:search.email-placeholder]]"/><br />
<label>By IP Address </label>
<input class="form-control" id="search-user-ip" data-search-type="ip" type="text" placeholder="Enter an IP Address to search"/><br />
<label>[[admin/manage/users:search.ip]]</label>
<input class="form-control" id="search-user-ip" data-search-type="ip" type="text" placeholder="[[admin/manage/users:search.ip-placeholder]]"/><br />
<i class="fa fa-spinner fa-spin hidden"></i>
<span id="user-notfound-notify" class="label label-danger hide">User not found!</span><br/>
<span id="user-notfound-notify" class="label label-danger hide">[[admin/manage/users:search.not-found]]</span><br/>
</div>
<!-- IF inactive -->
<a href="{config.relative_path}/admin/manage/users/inactive?months=3" class="btn btn-default">3 months</a>
<a href="{config.relative_path}/admin/manage/users/inactive?months=6" class="btn btn-default">6 months</a>
<a href="{config.relative_path}/admin/manage/users/inactive?months=12" class="btn btn-default">12 months</a>
<a href="{config.relative_path}/admin/manage/users/inactive?months=3" class="btn btn-default">[[admin/manage/users:inactive.3-months]]</a>
<a href="{config.relative_path}/admin/manage/users/inactive?months=6" class="btn btn-default">[[admin/manage/users:inactive.6-months]]</a>
<a href="{config.relative_path}/admin/manage/users/inactive?months=12" class="btn btn-default">[[admin/manage/users:inactive.12-months]]</a>
<!-- ENDIF inactive -->
<div class="table-responsive">
<table class="table table-striped users-table">
<tr>
<th><input component="user/select/all" type="checkbox"/></th>
<th>uid</th>
<th>username</th>
<th>email</th>
<th class="text-right">postcount</th>
<th class="text-right">reputation</th>
<th class="text-right">flags</th>
<th>joined</th>
<th>last online</th>
<th>banned</th>
<th>[[admin/manage/users:users.uid]]</th>
<th>[[admin/manage/users:users.username]]</th>
<th>[[admin/manage/users:users.email]]</th>
<th class="text-right">[[admin/manage/users:users.postcount]]</th>
<th class="text-right">[[admin/manage/users:users.reputation]]</th>
<th class="text-right">[[admin/manage/users:users.flags]]</th>
<th>[[admin/manage/users:users.joined]]</th>
<th>[[admin/manage/users:users.last-online]]</th>
<th>[[admin/manage/users:users.banned]]</th>
</tr>
<!-- BEGIN users -->
<tr class="user-row">

@ -1,10 +1,10 @@
<p class="lead">
<strong>{valid.length}</strong> out of <strong>{numRules}</strong> rule(s) valid.
[[admin/manage/ip-blacklist:validate.x-valid, {valid.length}, {numRules}]]
</p>
<!-- IF invalid.length -->
<p>
The following <strong>{invalid.length}</strong> rules are invalid:
[[admin/manage/ip-blacklist:validate.x-invalid, {invalid.length}]]
</p>
<ul>
<!-- BEGIN invalid -->

@ -1,21 +1,21 @@
<div class="alert alert-danger hide" id="create-modal-error"></div>
<form>
<div class="form-group">
<label for="group-name">User Name</label>
<input type="text" class="form-control" id="create-user-name" placeholder="User Name" />
<label for="group-name">[[admin/manage/users:create.username]]</label>
<input type="text" class="form-control" id="create-user-name" placeholder="[[admin/manage/users:create.username]]" />
</div>
<div class="form-group">
<label for="group-name">Email</label>
<input type="text" class="form-control" id="create-user-email" placeholder="Email of this user" />
<label for="group-name">[[admin/manage/users:create.email]]</label>
<input type="text" class="form-control" id="create-user-email" placeholder="[[admin/manage/users:create.email-placeholder]]" />
</div>
<div class="form-group">
<label for="group-name">Password</label>
<input type="password" class="form-control" id="create-user-password" placeholder="Password" />
<label for="group-name">[[admin/manage/users:create.password]]</label>
<input type="password" class="form-control" id="create-user-password" placeholder="[[admin/manage/users:create.password]]" />
</div>
<div class="form-group">
<label for="group-name">Password Confirm</label>
<input type="password" class="form-control" id="create-user-password-again" placeholder="Password" />
<label for="group-name">[[admin/manage/users:create.password-confirm]]</label>
<input type="password" class="form-control" id="create-user-password-again" placeholder="[[admin/manage/users:create.password]]" />
</div>
</form>

@ -1,7 +1,7 @@
<li id="{download.id}" data-plugin-id="{download.id}" class="clearfix">
<div class="pull-right">
<button data-action="toggleActive" class="btn btn-success hidden"><i class="fa fa-power-off"></i> Activate</button>
<button data-action="toggleInstall" data-installed="0" class="btn btn-success"><i class="fa fa-download"></i> Install</button>
<button data-action="toggleActive" class="btn btn-success hidden"><i class="fa fa-power-off"></i> [[admin/extend/plugins:plugin-item.activate]]</button>
<button data-action="toggleInstall" data-installed="0" class="btn btn-success"><i class="fa fa-download"></i> [[admin/extend/plugins:plugin-item.install]]</button>
</div>
<h2><strong>{download.name}</strong></h2>
@ -10,9 +10,9 @@
<p>{download.description}</p>
<!-- ENDIF download.description -->
<small>Latest <strong class="latestVersion">{download.latest}</strong></small>
<small>[[admin/extend/plugins:plugin-item.latest]] <strong class="latestVersion">{download.latest}</strong></small>
<!-- IF download.url -->
<p>For more information: <a target="_blank" href="{download.url}">{download.url}</a></p>
<p>[[admin/extend/plugins:plugin-item.more-info]] <a target="_blank" href="{download.url}">{download.url}</a></p>
<!-- ENDIF download.url -->
</li>

@ -2,13 +2,13 @@
<div class="row">
<div class="col-xs-4">
<div class="form-group">
<label for="length">Ban Length</label>
<label for="length">[[admin/manage/users:temp-ban.length]]</label>
<input class="form-control" id="length" name="length" type="number" min="0" value="1" />
</div>
</div>
<div class="col-xs-8">
<div class="form-group">
<label for="reason">Reason <span class="text-muted">(Optional)</span></label>
<label for="reason">[[admin/manage/users:temp-ban.reason]]</label>
<input type="text" class="form-control" id="reason" name="reason" />
</div>
</div>
@ -16,16 +16,16 @@
<div class="row">
<div class="col-sm-4 text-center">
<div class="form-group units">
<label>Hours</label>
<label>[[admin/manage/users:temp-ban.hours]]</label>
<input type="radio" name="unit" value="0" checked />
&nbsp;&nbsp;
<label>Days</label>
<label>[[admin/manage/users:temp-ban.days]]</label>
<input type="radio" name="unit" value="1" />
</div>
</div>
<div class="col-sm-8">
<p class="help-block">
Enter the length of time for the ban. Note that a time of 0 will be a considered a permanent ban.
[[admin/manage/users:temp-ban.explanation]]
</p>
</div>
</div>

Loading…
Cancel
Save