|
|
@@ -1,3 +1,115 @@
|
|
|
-from django.shortcuts import render
|
|
|
+from django.shortcuts import render, get_object_or_404
|
|
|
+from django.http import HttpResponseRedirect
|
|
|
+from django.urls import reverse
|
|
|
+from django.views import generic
|
|
|
+from django.contrib.auth.decorators import login_required, permission_required
|
|
|
+from django.forms import modelformset_factory, inlineformset_factory
|
|
|
|
|
|
-# Create your views here.
|
|
|
+from website.settings import APPLICATION_NAME
|
|
|
+from .models import Network, Host
|
|
|
+from .forms import NetworkForm, HostForm
|
|
|
+
|
|
|
+def default_keywords(additional_keywords=None):
|
|
|
+ default_keywords = 'RotBot, robot, bot, irc, irc bot, irc robot, '
|
|
|
+ if additional_keywords:
|
|
|
+ additional_keywords = ', '.join(map(str, additional_keywords))
|
|
|
+ return (default_keywords + additional_keywords)
|
|
|
+ return (default_keywords)
|
|
|
+
|
|
|
+
|
|
|
+class IndexView(generic.ListView):
|
|
|
+ template_name = 'rotbot/networks.html'
|
|
|
+ context_object_name = 'network_list'
|
|
|
+
|
|
|
+ extra_context = {
|
|
|
+ 'title': 'RotBot',
|
|
|
+ 'icon': 'robot',
|
|
|
+ 'description': 'Index of RotBot, the IRC robot.',
|
|
|
+ 'keywords': default_keywords() + 'index',
|
|
|
+ }
|
|
|
+
|
|
|
+ def get_queryset(self):
|
|
|
+ #return Question.objects.order_by('-pub_date')[:5]
|
|
|
+ return Network.objects
|
|
|
+
|
|
|
+
|
|
|
+def network(request, network_slug):
|
|
|
+ network = get_object_or_404(Network, slug=network_slug)
|
|
|
+ context = {
|
|
|
+ 'parent_title': 'Networks',
|
|
|
+ 'parent_url': 'rotbot:networks',
|
|
|
+ 'parent_icon': 'robot',
|
|
|
+ 'title': network.name,
|
|
|
+ 'icon': 'sitemap',
|
|
|
+ 'description': 'Details of ' + network.name,
|
|
|
+ 'keywords': default_keywords() + 'network.name, display, details',
|
|
|
+ 'network': network,
|
|
|
+ }
|
|
|
+ return render(request, 'rotbot/network.html', context)
|
|
|
+
|
|
|
+
|
|
|
+@login_required
|
|
|
+@permission_required('rotbot.change_network', raise_exception=True)
|
|
|
+def edit_network(request, network_slug):
|
|
|
+ network = get_object_or_404(Network, slug=network_slug)
|
|
|
+ title = network.name
|
|
|
+ HostFormSet = inlineformset_factory(Network, Host, form=HostForm)
|
|
|
+ if request.method == 'POST':
|
|
|
+ form = NetworkForm(request.POST, instance=network)
|
|
|
+ formset = HostFormSet(request.POST, instance=network)
|
|
|
+ if form.is_valid() and formset.is_valid():
|
|
|
+ form.save()
|
|
|
+ formset.save()
|
|
|
+ return HttpResponseRedirect(reverse('rotbot:network', args=(network.slug,)))
|
|
|
+ else:
|
|
|
+ form = NetworkForm(instance=network)
|
|
|
+ formset = HostFormSet(instance=network)
|
|
|
+ context = {
|
|
|
+ 'parent_title': 'Networks',
|
|
|
+ 'parent_url': 'rotbot:networks',
|
|
|
+ 'parent_icon': 'robot',
|
|
|
+ 'title': title,
|
|
|
+ 'icon': 'sitemap',
|
|
|
+ 'description': 'Edit ' + title,
|
|
|
+ 'keywords': default_keywords((title, 'edit')),
|
|
|
+ 'network_slug': network_slug,
|
|
|
+ 'form': form,
|
|
|
+ 'hostformset': formset,
|
|
|
+ }
|
|
|
+ return render(request, 'rotbot/edit_network.html', context)
|
|
|
+
|
|
|
+@login_required
|
|
|
+@permission_required('rotbot.add_network', raise_exception=True)
|
|
|
+def add_network(request):
|
|
|
+ HostFormSet = inlineformset_factory(Network, Host, form=HostForm)
|
|
|
+ if request.method == 'POST':
|
|
|
+ form = NetworkForm(request.POST)
|
|
|
+ if form.is_valid():
|
|
|
+ network = form.save()
|
|
|
+ formset = HostFormSet(request.POST, instance=network)
|
|
|
+ if formset.is_valid():
|
|
|
+ formset.save()
|
|
|
+ return HttpResponseRedirect(reverse('rotbot:network', args=(form.cleaned_data['slug'],)))
|
|
|
+ else: # Not a POST request.
|
|
|
+ form = NetworkForm()
|
|
|
+ formset = HostFormSet(queryset=Host.objects.none())
|
|
|
+ context = {
|
|
|
+ 'parent_title': 'Networks',
|
|
|
+ 'parent_url': 'rotbot:networks',
|
|
|
+ 'parent_icon': 'robot',
|
|
|
+ 'title': 'Add network',
|
|
|
+ 'icon': 'sitemap',
|
|
|
+ 'description': 'Add new irc network to ' + APPLICATION_NAME,
|
|
|
+ 'keywords': default_keywords() + 'add, add network',
|
|
|
+ 'form': form,
|
|
|
+ 'hostformset': formset,
|
|
|
+ }
|
|
|
+ return render(request, 'rotbot/add_network.html', context)
|
|
|
+
|
|
|
+
|
|
|
+@login_required
|
|
|
+@permission_required('rotbot.change_network', raise_exception=True)
|
|
|
+def delete_network(request, network_slug):
|
|
|
+ network = get_object_or_404(Network, slug=network_slug)
|
|
|
+ network.delete()
|
|
|
+ return HttpResponseRedirect(reverse('rotbot:networks'))
|