Fakultas Ilmu Komputer UI

views.py 5.44 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
101
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
102
103
104


def dashboard(request):
105
    return render(request, "dashboard.html")
igor lestin sianipar's avatar
igor lestin sianipar committed
106
107
108


def profile(request):
109
    return render(request, "profile.html")
igor lestin sianipar's avatar
igor lestin sianipar committed
110
111
112


def unggah(request):
113
    return render(request, "unggah.html")
igor lestin sianipar's avatar
igor lestin sianipar committed
114
115
116


def file_text(request):
117
    return render(request, "file_text.html")
igor lestin sianipar's avatar
igor lestin sianipar committed
118
119
120


def file_video(request):
121
    return render(request, "file_video.html")
igor lestin sianipar's avatar
igor lestin sianipar committed
122
123
124
125
126
127
128
129
130
131
132
133
134


class UploadMateriView(TemplateView):
    template_name = "file_text.html"
    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)
135
        form = UploadMateriForm(request.POST, request.FILES)
igor lestin sianipar's avatar
igor lestin sianipar committed
136
137
138
139
        if form.is_valid():
            materi = form.save(commit=False)
            materi.uploader = request.user
            materi.save()
140
            return HttpResponseRedirect("/unggah/")
igor lestin sianipar's avatar
igor lestin sianipar committed
141
142
        else:
            context = self.get_context_data(**kwargs)
143
            context["form"] = form
igor lestin sianipar's avatar
igor lestin sianipar committed
144
145
146
147
148
149
            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)
150
        context["form"] = UploadMateriForm
igor lestin sianipar's avatar
igor lestin sianipar committed
151
        return self.render_to_response(context)
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167


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))