views.py 4.68 KB
from django.shortcuts import render
from django.views import generic
from django.core.urlresolvers import reverse_lazy
from django.contrib import messages
from django.utils.translation import ugettext_lazy as _
from django.shortcuts import get_object_or_404,redirect
from django.contrib.auth.mixins import LoginRequiredMixin
from rolepermissions.mixins import HasRoleMixin
from core.mixins import NotificationMixin
from django.urls import reverse
from django.core.files.base import ContentFile


from .image_crawler import *
from courses.models import Topic
from .models import Link
from .forms import *


# Create your views here.
class CreateLink(LoginRequiredMixin, HasRoleMixin, NotificationMixin, generic.CreateView):
    allowed_roles = ['professor', 'system_admin']
    template_name = 'links/create_link.html'
    form_class = CreateLinkForm
    success_url = reverse_lazy('course:manage')
    context_object_name = 'form'
    def form_invalid(self,form):
        context = super(CreateLink, self).form_invalid(form)
        context.status_code = 400

        return context

    def form_valid(self, form):
        self.object = form.save(commit = False)
        topic = get_object_or_404(Topic, slug = self.kwargs.get('slug'))
        self.object.topic = topic
        self.object.save()
        self.link = Link.objects.get(slug = self.object.slug)
        self.formato,self.baixado = get_images(self.link.link_url,self.link.slug)
        self.caminho = 'links/static/images/%s'%(self.link.slug)+'%s'%(self.formato)

        super(CreateLink, self).createNotification(message="created a Link at "+ self.object.topic.name, actor=self.request.user,
            resource_name=self.object.name, resource_link= reverse('course:view_topic', args=[self.object.topic.slug]),
            users=self.object.topic.subject.students.all())
        self.setImage()
        return self.get_success_url()
    def setImage(self):
        if self.baixado:
            with open(self.caminho,'rb') as f:
                data = f.read()
            nome = '%s'%(self.link.slug)+"%s"%(self.formato)
            self.link.image.save(nome,ContentFile(data))
        else:
            with open('links/static/images/default.jpg','rb') as f:
                data = f.read()
            self.link.image.save('default.jpg',ContentFile(data))
    def get_context_data(self,**kwargs):
        context = {}
        context['links'] = Link.objects.all()
        context['form'] = CreateLinkForm
        topic = get_object_or_404(Topic, slug = self.kwargs.get('slug'))
        context["topic"] = topic
        return context
    def get_success_url(self):
        self.success_url = redirect('course:links:render_link', id = self.object.id)
        return self.success_url
def deleteLink(request,linkname):
    link = get_object_or_404(Link,name = linkname)
    link.delete()
    template_name = 'links/delete_link.html'
    messages.success(request,_("Link deleted Successfully!"))

    return redirect('course:manage')

def render_link(request, id):
	template_name = 'links/render_link.html'
	context = {
		'link': get_object_or_404(Link, id = id)
	}
	return render(request, template_name, context)

#Referencia no delete link para adicionar quando resolver o problema do context {% url 'course:delete' link.name  %}
class UpdateLink(LoginRequiredMixin, HasRoleMixin, generic.UpdateView):
    allowed_roles = ['professor', 'system_admin']
    template_name = 'links/update_link.html'
    form_class = UpdateLinkForm
    success_url = reverse_lazy('course:links:render_link')
    def form_valid(self, form):
        form.save()
        messages.success(self.request, _('Link updated successfully!'))

        return super(UpdateLink, self).form_valid(form)

    def get_object(self, queryset=None):
        self.object = get_object_or_404(Link, slug = self.kwargs.get('slug'))
        print(self.object.link_description)
        return self.object
    def get_success_url(self):
        self.success_url = redirect('course:links:render_link', id = self.object.id)
        return self.success_url
class ViewLink(LoginRequiredMixin,HasRoleMixin,generic.DetailView):
    allowed_roles = ['professor', 'system_admin']
    template_name = 'links/view_link.html'
    success_url = reverse_lazy('course:links:render_link')
    context_object_name = 'link'
    def get_context_data(self,**kwargs):
        context = {}
        link = Link.objects.get(slug = self.kwargs.get('slug'))
        context['link'] = link
        return context
    def get_success_url(self):
        self.success_url = redirect('course:links:render_link', id = self.object.id)
        return self.success_url
    def get_queryset(self):
        self.queryset = Link.objects.filter(slug = self.kwargs.get('slug'))
        return self.queryset