Fakultas Ilmu Komputer UI

views.py 5.62 KB
Newer Older
1
2
3
4
import mimetypes
import os

from django.conf import settings
5
from django.core import serializers
6
from django.core.exceptions import PermissionDenied
7
from django.db.models import Q
8
9
10
11
12
13
from django.http import (Http404, HttpResponse, HttpResponseRedirect,
                         JsonResponse)
from django.shortcuts import get_object_or_404, redirect, render
from django.template import loader
from django.views.generic import TemplateView

igor lestin sianipar's avatar
igor lestin sianipar committed
14
from .forms import UploadMateriForm
15
from .models import Category, Materi
igor lestin sianipar's avatar
igor lestin sianipar committed
16

17
18
19
20
21
22
23
24
25

class DaftarKatalog(TemplateView):
    template_name = "app/katalog_materi.html"

    def get_context_data(self, **kwargs):
        return super().get_context_data(**kwargs)

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
26
        context["kategori_list"] = Category.objects.all()
27
        context["materi_list"] = Materi.objects.all()
28
29

        getSearch = request.GET.get("search")
30
        if getSearch:
31
32
33
34
35
36
37
38
39
40
41
            list = (
                Materi.objects.all()
                .filter(
                    Q(title__icontains=getSearch)
                    | Q(descriptions__icontains=getSearch)
                    | Q(author__icontains=getSearch)
                    | Q(uploader__icontains=getSearch)
                    | Q(publisher__icontains=getSearch)
                )
                .distinct
            )
42
            context["materi_list"] = list
Saul Andre's avatar
Saul Andre committed
43

44
45
46
        getKategori = request.GET.get("kategori")
        if getKategori:
            pkGet = request.GET.get("kategori")
47
48
            kategori = Category.objects.get(pk=pkGet)
            list = Materi.objects.filter(categories=kategori.pk)
49
            context["materi_list"] = list
50

51
        getSort = request.GET.get("sort")
52
        if getSort:
53
            list = Materi.objects.all()
54
55
56
57
58
59
60
            if getSort == "judul":
                context["materi_list"] = list.order_by("title")
            elif getSort == "penulis":
                context["materi_list"] = list.order_by("author")
            elif getSort == "pengunggah":
                context["materi_list"] = list.order_by("uploader")

61
        return self.render_to_response(context=context)
igor lestin sianipar's avatar
igor lestin sianipar committed
62

63

Saul Andre's avatar
Saul Andre committed
64
65
66
67
68
69
70
71
class DetailMateri(TemplateView):
    template_name = "app/detail_materi.html"

    def get_context_data(self, **kwargs):
        return super().get_context_data(**kwargs)

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
72
        context["materi_data"] = get_object_or_404(Materi, pk=kwargs["pk"])
Saul Andre's avatar
Saul Andre committed
73
        return self.render_to_response(context=context)
74
75


76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
def download_materi(request, pk):
    materi = get_object_or_404(Materi, pk=pk)
    path = materi.content.path
    file_path = os.path.join(settings.MEDIA_ROOT, path)
    if os.path.exists(file_path):
        mimetype = mimetypes.guess_type(file_path)
        with open(file_path, "rb") as fh:
            response = HttpResponse(fh.read(), content_type=mimetype[0])
            response["Content-Disposition"] = "attachment; filename=" + os.path.basename(file_path)
            return response
    else:
        raise Http404("File tidak dapat ditemukan.")

def view_materi(request, pk):
    materi = get_object_or_404(Materi, pk=pk)
    path = materi.content.path
    file_path = os.path.join(settings.MEDIA_ROOT, path)
    if os.path.exists(file_path):
        mimetype = mimetypes.guess_type(file_path)
        with open(file_path, "rb") as fh:
            response = HttpResponse(fh.read(), content_type=mimetype[0])
            response["Content-Disposition"] = "inline; filename=" + os.path.basename(file_path)
            return response
    else:
        raise Http404("File tidak dapat ditemukan.")
igor lestin sianipar's avatar
igor lestin sianipar committed
101
102

class UploadMateriView(TemplateView):
103
    template_name = "unggah.html"
igor lestin sianipar's avatar
igor lestin sianipar committed
104
105
106
107
108
109
110
111
112
    context = {}

    def get_context_data(self, **kwargs):
        context = super(UploadMateriView, self).get_context_data(**kwargs)
        return context

    def post(self, request, *args, **kwargs):
        if request.user.is_authenticated == False:
            raise PermissionDenied(request)
113
        form = UploadMateriForm(request.POST, request.FILES)
igor lestin sianipar's avatar
igor lestin sianipar committed
114
115
116
117
        if form.is_valid():
            materi = form.save(commit=False)
            materi.uploader = request.user
            materi.save()
118
            return HttpResponseRedirect("/unggah/")
igor lestin sianipar's avatar
igor lestin sianipar committed
119
120
        else:
            context = self.get_context_data(**kwargs)
121
            context["form"] = form
igor lestin sianipar's avatar
igor lestin sianipar committed
122
123
124
125
126
127
            return self.render_to_response(context)

    def get(self, request, *args, **kwargs):
        if request.user.is_authenticated == False:
            raise PermissionDenied(request)
        context = self.get_context_data(**kwargs)
128
        context["form"] = UploadMateriForm
igor lestin sianipar's avatar
igor lestin sianipar committed
129
        return self.render_to_response(context)
130
131


132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
class UploadMateriHTML(TemplateView):
    template_name = "unggah.html"
    context = {}
    def get_template_names(self):
        if self.request.path == "/unggah/":
            template_name = "unggah.html"
        return template_name


class DashboardKontributor(TemplateView):
    template_name = "dashboard.html"
    context = {}
    def dashboard(self):
        if self.request.path == "/dashboard/":
            template_name = "dashboard.html"
        else:
            template_name = "dashboard.html"
        return template_name


152
153
154
155
156
157
158
159
160
161
162
163
164
165
def pages(request):
    context = {}
    # All resource paths end in .html.
    # Pick out the html file name from the url. And load that template.
    try:

        load_template = request.path.split("/")[-1]
        template = loader.get_template(load_template)
        return HttpResponse(template.render(context, request))

    except:

        template = loader.get_template("error-404.html")
        return HttpResponse(template.render(context, request))