Merge branch 'timerboard-perms' into 'v4.x'

Add Dashboard Widget View Perms

See merge request allianceauth/allianceauth!1602
This commit is contained in:
Ariel Rin 2024-03-10 09:36:51 +00:00
commit 5e4d1b9cfd
4 changed files with 57 additions and 28 deletions

View File

@ -7,7 +7,7 @@
<h4 class="card-title text-center">{% translate "Upcoming Fleets" %}</h4>
<div class="card-body">
<div style="height: 300px; overflow-y:auto;">
<div>
<table class="table">
<thead>
<tr>

View File

@ -14,9 +14,11 @@ from .models import OpTimer, OpTimerType
logger = logging.getLogger(__name__)
OPS_VIEW_PERMISSION = 'auth.optimer_view'
OPS_MANAGE_PERMISSION = 'auth.optimer_management'
@login_required
@permission_required('auth.optimer_view')
@permission_required(OPS_VIEW_PERMISSION)
def optimer_view(request):
"""
View for the optimer management page
@ -39,7 +41,7 @@ def optimer_view(request):
@login_required
@permission_required('auth.optimer_management')
@permission_required(OPS_MANAGE_PERMISSION)
def add_optimer_view(request):
"""
View for the add optimer page
@ -98,7 +100,7 @@ def add_optimer_view(request):
@login_required
@permission_required('auth.optimer_management')
@permission_required(OPS_MANAGE_PERMISSION)
def remove_optimer(request, optimer_id):
"""
Remove optimer
@ -121,7 +123,7 @@ def remove_optimer(request, optimer_id):
@login_required
@permission_required('auth.optimer_management')
@permission_required(OPS_MANAGE_PERMISSION)
def edit_optimer(request, optimer_id):
"""
Edit optimer
@ -192,14 +194,22 @@ def dashboard_ops(request):
:return:
:rtype:
"""
if request.user.has_perm(OPS_VIEW_PERMISSION):
base_query = OpTimer.objects.select_related('eve_character', 'type')
timers = base_query.filter(
start__gte=timezone.now()
)[:5]
base_query = OpTimer.objects.select_related('eve_character', 'type')
timers = base_query.filter(start__gte=timezone.now())[:5]
if timers.count():
context = {
'timers': timers,
}
return render_to_string('optimer/dashboard.ops.html', context=context, request=request)
if timers.count():
context = {
'timers': timers,
}
return render_to_string(
'optimer/dashboard.ops.html',
context=context,
request=request
)
else:
return ""
else:
return ""

View File

@ -6,7 +6,7 @@
<div class="card-body">
<h4 class="card-title text-center">{% translate "Upcoming Timers" %}</h4>
<div class="card-body">
<div style="height: 300px; overflow-y:auto;">
<div>
<table class="table">
<thead>
<tr>

View File

@ -20,6 +20,9 @@ from allianceauth.timerboard.models import Timer
logger = logging.getLogger(__name__)
TIMER_VIEW_PERMISSION = 'auth.timer_view'
TIMER_MANAGE_PERMISSION = 'auth.timer_management'
class BaseTimerView(LoginRequiredMixin, PermissionRequiredMixin, View):
pass
@ -27,7 +30,7 @@ class BaseTimerView(LoginRequiredMixin, PermissionRequiredMixin, View):
class TimerView(BaseTimerView):
template_name = 'timerboard/view.html'
permission_required = 'auth.timer_view'
permission_required = TIMER_VIEW_PERMISSION
def get(self, request):
logger.debug(f"timer_view called by user {request.user}")
@ -48,7 +51,7 @@ class TimerView(BaseTimerView):
class TimerManagementView(BaseTimerView):
permission_required = 'auth.timer_management'
permission_required = TIMER_MANAGE_PERMISSION
index_redirect = 'timerboard:view'
success_url = reverse_lazy(index_redirect)
model = Timer
@ -74,8 +77,13 @@ class AddTimerView(TimerManagementView, AddUpdateMixin, CreateView):
def form_valid(self, form):
result = super().form_valid(form)
timer = self.object
logger.info(f"Created new timer in {timer.system} at {timer.eve_time} by user {self.request.user}")
messages.success(self.request, _('Added new timer in %(system)s at %(time)s.') % {"system": timer.system, "time": timer.eve_time})
logger.info(
f"Created new timer in {timer.system} at {timer.eve_time} by user {self.request.user}"
)
messages.success(
self.request,
_('Added new timer in %(system)s at %(time)s.') % {"system": timer.system, "time": timer.eve_time}
)
return result
@ -93,18 +101,29 @@ class RemoveTimerView(TimerManagementView, DeleteView):
def dashboard_timers(request):
try:
corp = request.user.profile.main_character.corporation
except (EveCorporationInfo.DoesNotExist, AttributeError):
return ""
if request.user.has_perm(TIMER_VIEW_PERMISSION):
try:
corp = request.user.profile.main_character.corporation
except (EveCorporationInfo.DoesNotExist, AttributeError):
return ""
timers = Timer.objects.select_related('eve_character').filter((Q(eve_corp__isnull=True) | Q(eve_corp=corp)) ,eve_time__gte=timezone.now())[:5]
timers = Timer.objects.select_related(
'eve_character'
).filter(
(Q(corp_timer=True) & Q(eve_corp=corp)) | Q(corp_timer=False),
eve_time__gte=timezone.now()
)[:5]
if timers.count():
context = {
'timers': timers,
}
if timers.count():
context = {
'timers': timers,
}
return render_to_string(template_name='timerboard/dashboard.timers.html', context=context, request=request)
return render_to_string(
template_name='timerboard/dashboard.timers.html',
context=context, request=request
)
else:
return ""
else:
return ""