2020-04-17 20:59:35 +05:30
|
|
|
import datetime
|
|
|
|
|
|
|
|
|
|
from django.shortcuts import render
|
2020-06-24 12:28:19 +05:30
|
|
|
from django.db.models import Subquery, Count
|
2021-12-20 22:46:55 +05:30
|
|
|
from django.http import HttpResponseRedirect
|
2022-11-28 22:50:52 +05:30
|
|
|
from django.views.decorators.cache import cache_page
|
2020-04-17 20:59:35 +05:30
|
|
|
|
2020-04-23 23:45:36 +05:30
|
|
|
from port.models import Port
|
2020-04-17 20:59:35 +05:30
|
|
|
from stats.models import Submission, PortInstallation
|
2020-04-23 23:45:36 +05:30
|
|
|
from port.filters import PortFilterByMultiple
|
2021-12-20 22:46:55 +05:30
|
|
|
from utilities import old_search_redirect
|
2020-04-17 20:59:35 +05:30
|
|
|
|
2022-11-28 23:03:46 +05:30
|
|
|
@cache_page(60 * 10)
|
2020-04-17 20:59:35 +05:30
|
|
|
def index(request):
|
2021-12-20 22:46:55 +05:30
|
|
|
# Support for old "?search=<QUERY>&search_by=<name,description>" links
|
|
|
|
|
# Check if search query is present
|
|
|
|
|
if request.GET.get('search'):
|
|
|
|
|
return HttpResponseRedirect(old_search_redirect(request))
|
|
|
|
|
|
2020-06-24 12:28:19 +05:30
|
|
|
ports_count = Port.objects.filter(active=True).count()
|
2020-04-17 20:59:35 +05:30
|
|
|
submissions_unique = Submission.objects.filter(timestamp__gte=datetime.datetime.now(tz=datetime.timezone.utc) - datetime.timedelta(days=30)).order_by('user', '-timestamp').distinct('user')
|
|
|
|
|
top_ports = PortInstallation.objects.filter(submission_id__in=Subquery(submissions_unique.values('id')), requested=True).exclude(port__icontains='mpstats').values('port').annotate(num=Count('port')).order_by('-num')[:10]
|
2020-06-26 00:21:42 +05:30
|
|
|
recently_added = Port.objects.all().order_by('-created_at').only('name')[:10]
|
2020-04-17 20:59:35 +05:30
|
|
|
|
|
|
|
|
return render(request, 'index.html', {
|
2020-06-24 12:28:19 +05:30
|
|
|
'top_ports': top_ports,
|
2020-06-26 00:21:42 +05:30
|
|
|
'recently_added': recently_added,
|
2020-06-24 12:28:19 +05:30
|
|
|
'ports_count': ports_count
|
2020-04-17 20:59:35 +05:30
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# Respond to ajax-call triggered by the search box
|
|
|
|
|
def search(request):
|
|
|
|
|
query = request.GET.get('search_text', '')
|
|
|
|
|
search_by = request.GET.get('search_by', '')
|
|
|
|
|
ports = PortFilterByMultiple(request.GET, queryset=Port.get_active.all()).qs[:50]
|
|
|
|
|
|
|
|
|
|
return render(request, 'filtered_table.html', {
|
|
|
|
|
'ports': ports,
|
|
|
|
|
'query': query,
|
|
|
|
|
'search_by': search_by
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def about_page(request):
|
|
|
|
|
return render(request, 'about.html')
|