Various Fixes/Improvements

Fixes #2
Added links to player profiles from tickets/warnings
Increased app searches in Discord to also search players if no applications are found
If the plugin needs to be able to run advanced searches, may need to update the Model API
reminder
Etzelia 2018-12-08 23:30:56 -06:00
parent a726001145
commit 489012c016
6 changed files with 59 additions and 17 deletions

View File

@ -116,9 +116,25 @@ class Discord(discord.Client):
for app in applications:
info += "\n{0} - {1} ({2})".format(app.id, app.username.replace("_", "\\_"), app.status)
if count > 10:
info += "\n**This is only 10 applications out of {0} found. Please narrow your search if possible.**".format(len(applications))
info += "\n**This is only 10 applications out of {0} found. Please narrow your search if possible.**".format(
len(applications))
else:
info = "No applications matched that search."
players = Player.objects.filter(username__icontains=search)[:10]
count = Player.objects.filter(username__icontains=search).count()
if count > 0:
if count == 1:
yield from self.discord_message(message.channel, "No applications matched, however there is a player match.")
info = self.build_info(players[0].application)
else:
info = "No applications matched, however there are player matches."
for player in players:
app = player.application
info += "\n{0} - {1} AKA {2} ({3})".format(app.id, app.username.replace("_", "\\_"), player.username.replace("_", "\\_"), app.status)
if count > 10:
info += "\n**This is only 10 players out of {0} found. Please narrow your search if possible.**".format(
len(players))
else:
info = "No applications matched that search."
yield from self.discord_message(message.channel, info)
# DEMOTE A PLAYER TO MEMBER
match = re.match("[{0}]demote (\w+)$".format(self.prefix), message.content)

View File

@ -52,7 +52,8 @@
{% endif %}
</tbody>
</table>
<br/>
<a class="btn btn-primary" href="{% url 'warning_add' %}?player={{ player.id }}">Add Warning</a>
<br/><br/>
<table class="table table-striped table-hover link-table">
<h4>IPs</h4>
<tbody>
@ -79,13 +80,5 @@
</table>
</div>
</div>
<div class="row">
<div class="col-xs-6 col-md-4">
</div>
<div class="col-xs-12 col-md-8">
</div>
</div>
</div>
{% endblock section %}

View File

@ -1,9 +1,10 @@
{% extends "minecraft_manager/dashboard.html" %}
{% load csrf_html %}
{% load reverse_player %}
{% block title %}Ticket Info{% endblock %}
{% block section %}
<div id="content">
<h2 class="sub-header">Ticket Info ({{ ticket.issuer }}) <span {% if ticket.resolved is True %}class="label label-success"{% else %}class="label label-danger"{% endif %}>{{ ticket.resolved_label }}</span></h2>
<h2 class="sub-header">Ticket Info ({% player_reverse_id ticket.player.id %}) <span {% if ticket.resolved is True %}class="label label-success"{% else %}class="label label-danger"{% endif %}>{{ ticket.resolved_label }}</span></h2>
<div class="row">
<div class="col-xs-6 col-md-4">
<p>Message: </p>

View File

@ -1,9 +1,10 @@
{% extends "minecraft_manager/dashboard.html" %}
{% load csrf_html %}
{% load reverse_player %}
{% block title %}Warning Info{% endblock %}
{% block section %}
<div id="content">
<h2 class="sub-header">Warning Info ({{ warning.player.username }})</h2>
<h2 class="sub-header">Warning Info ({% player_reverse_id warning.player.id %})</h2>
<div class="row">
<div class="col-xs-6 col-md-4">
<!-- <p>Username: {{ application.username }}</p> -->

View File

@ -0,0 +1,21 @@
from django.template import Library
from minecraft_manager.models import Player
from django.urls import reverse
from django.utils.html import mark_safe
register = Library()
@register.simple_tag(name="player_reverse_name")
def reverse_name(username):
player = Player.objects.get(username=username)
url = "{}{}".format(reverse('player'), player.id)
return mark_safe('<a href="{}">{}</a>'.format(url, player.username))
@register.simple_tag(name="player_reverse_id")
def reverse_id(player_id):
player = Player.objects.get(id=player_id)
url = "{}{}".format(reverse('player'), player.id)
return mark_safe('<a href="{}">{}</a>'.format(url, player.username))

View File

@ -12,6 +12,7 @@ from django.utils.decorators import method_decorator
from django.conf import settings
from django.views.generic import View
from django.contrib.auth.models import User
from django.forms.widgets import HiddenInput
from minecraft_manager.models import Application as AppModel, Player as PlayerModel, Ticket as TicketModel, Warning as WarningModel, IP as IPModel, Alert as AlertModel, Note as NoteModel, UserSettings as UserSettingsModel
from minecraft_manager.forms import WarningForm, NoteForm
from minecraft_manager.overview import overview_data
@ -199,11 +200,17 @@ class PlayerInfo(View):
tickets = TicketModel.objects.filter(player=player)
warnings = WarningModel.objects.filter(player=player)
form = {'ips': ips, 'tickets': tickets, 'warnings': warnings}
return render(request, 'minecraft_manager/player_info.html', {'current_app': 'player', 'player': player, 'form': form})
return render(request, 'minecraft_manager/player_info.html',
{'current_app': 'player', 'player': player, 'form': form})
def post(self, request, player_id):
player = PlayerModel.objects.get(id=player_id)
return render(request, 'minecraft_manager/player_info.html', {'current_app': 'player', 'player': player})
ips = IPModel.api.filter(player=player)
tickets = TicketModel.objects.filter(player=player)
warnings = WarningModel.objects.filter(player=player)
form = {'ips': ips, 'tickets': tickets, 'warnings': warnings}
return render(request, 'minecraft_manager/player_info.html',
{'current_app': 'player', 'player': player, 'form': form})
class Ticket(View):
@ -337,9 +344,12 @@ class WarningAdd(View):
@method_decorator(csrf_protect)
def get(self, request):
form = WarningForm().as_p()
get = request.GET
form = WarningForm()
if 'player' in get:
form.initial = {'player': get['player']}
return render(request, 'minecraft_manager/warning_add.html',
{'current_app': 'warning', 'form': form})
{'current_app': 'warning', 'form': form.as_p()})
def post(self, request):
post = request.POST