Fakultas Ilmu Komputer UI

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

from django.conf import settings
5
from django.contrib import messages
6
from django.contrib.auth.models import AnonymousUser
7
from django.core.exceptions import PermissionDenied, ValidationError
8
from django.core.paginator import Paginator
Mika dabelza abi's avatar
Mika dabelza abi committed
9
from django.db.models import Q, Count
10
11
from django.http import (Http404, HttpResponse, HttpResponseRedirect,
                         JsonResponse)
12
from django.shortcuts import get_object_or_404
13
from django.template import loader
14
15
from django.views.generic import TemplateView

16
from administration.models import VerificationReport
17
from app.forms import SuntingProfilForm, UploadMateriForm
18
from app.models import Category, Comment, Materi, Like, ViewStatistics, DownloadStatistics, ReqMaterial, Rating
19
from app.utils.fileManagementUtil import get_random_filename, remove_image_exifdata
20
from authentication.models import User
21
import django
22

23
24

class DaftarKatalog(TemplateView):
igor lestin sianipar's avatar
igor lestin sianipar committed
25
    paginate_by = 2
26
27
28
29
30
31
32
    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)
33
        context["kategori_list"] = Category.objects.all()
34

Mika dabelza abi's avatar
Mika dabelza abi committed
35
        lstMateri = Materi.objects.filter(status="APPROVE").order_by("date_modified")
Mika dabelza abi's avatar
Mika dabelza abi committed
36
37
        url = ""

38
        getSearch = request.GET.get('search')
39
        if getSearch:
Mika dabelza abi's avatar
Mika dabelza abi committed
40
            url = url + "&search={0}".format(getSearch)
Mika dabelza abi's avatar
Mika dabelza abi committed
41
            lstMateri = lstMateri.filter(
42
                Q(title__icontains=getSearch) |
43
                Q(author__icontains=getSearch) |
44
45
                Q(uploader__name__icontains=getSearch) |
                Q(descriptions__icontains=getSearch) |
46
                Q(publisher__icontains=getSearch)
47
            ).distinct()
Saul Andre's avatar
Saul Andre committed
48

49
50
        getKategori = request.GET.get("kategori")
        if getKategori:
Mika dabelza abi's avatar
Mika dabelza abi committed
51
52
            url = url + "&kategori={0}".format(getKategori)
            kategori = Category.objects.get(pk=getKategori)
Mika dabelza abi's avatar
Mika dabelza abi committed
53
            lstMateri = lstMateri.filter(categories=kategori.pk)
54

55
        getSort = request.GET.get("sort")
56
        if getSort:
Mika dabelza abi's avatar
Mika dabelza abi committed
57
            url = url + "&sort={0}".format(getSort)
58
            if(getSort == "judul"):
Mika dabelza abi's avatar
Mika dabelza abi committed
59
                lstMateri = lstMateri.order_by('title')
60
            elif(getSort == "penulis"):
Mika dabelza abi's avatar
Mika dabelza abi committed
61
                lstMateri = lstMateri.order_by('author')
62
            elif(getSort == "pengunggah"):
Mika dabelza abi's avatar
Mika dabelza abi committed
63
                lstMateri = lstMateri.order_by('uploader')
Mika dabelza abi's avatar
Mika dabelza abi committed
64
            elif(getSort == "terbaru"):
Mika dabelza abi's avatar
Mika dabelza abi committed
65
                lstMateri = lstMateri.order_by('-date_created')
Mika dabelza abi's avatar
Mika dabelza abi committed
66
            elif(getSort == "terlama"):
67
                lstMateri = lstMateri.order_by('date_created')
Mika dabelza abi's avatar
Mika dabelza abi committed
68
            elif(getSort == "terpopuler"):
Mika dabelza abi's avatar
Mika dabelza abi committed
69
                lstMateri = lstMateri.annotate(count=Count('like__id')).order_by('-count')
70

Mika dabelza abi's avatar
Mika dabelza abi committed
71
        context["materi_list"] = lstMateri
Mika dabelza abi's avatar
Mika dabelza abi committed
72
73
74
75
76
77
        paginator = Paginator(context["materi_list"], 15)
        page_number = request.GET.get('page')
        page_obj = paginator.get_page(page_number)
        context["materi_list"] = page_obj

        context["url"] = url
78
79
        return self.render_to_response(context=context)

80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
class KatalogPerKontributorView(TemplateView):
    template_name = "app/katalog_kontri.html"
    
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        contributor = get_object_or_404(User, email=kwargs["email"])
        context["contributor"] = contributor
        return context

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
         
        materi_list = Materi.objects.filter(status="APPROVE", uploader=context["contributor"]).order_by("date_modified")
                    
        paginator = Paginator(materi_list, 15)
        page_number = request.GET.get('page')
        materi_list_by_page = paginator.get_page(page_number)
        context["materi_list"] = materi_list_by_page

        return self.render_to_response(context=context)
100

101
102
103
104
class DetailMateri(TemplateView):
    template_name = "app/detail_materi.html"

    def get_context_data(self, **kwargs):
105
106
107
108
109
110
        context = super(DetailMateri, self).get_context_data(**kwargs)
        if not self.request.session or not self.request.session.session_key:
            self.request.session.save()
        materi = get_object_or_404(Materi, pk=kwargs["pk"])
        context["session_id"] = self.request.session.session_key
        context["materi_data"] = materi
111
        context["report"] = VerificationReport.objects.filter(materi=materi)
112
113
        context["has_liked"] = Like.objects.filter(
            materi=materi, session_id=self.request.session.session_key).exists()
114
115
116
117
118
119
120
        publishedDate = ''
        if(materi.published_date == None):
            publishedDate = 'n.d'
        else :
            publishedDate = materi.published_date
        citationAPA = materi.author+' . ('  + publishedDate +') . ' + materi.title +' . '+materi.publisher
        context["citationAPA"] = citationAPA
121
122
123
124
125
126
127
        context['materi_rating_score'] = 0

        if self.request.user.is_authenticated:
            materi_rating = Rating.objects.filter(materi=materi, user=self.request.user).first()
            if materi_rating is not None:
                context['materi_rating_score'] = materi_rating.score

128
        return context
129
130
131

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
132
133
        query_set_for_comment = Comment.objects.filter(
            materi=context["materi_data"])
134
        context["comment_data"] = query_set_for_comment
135
136
        return self.render_to_response(context=context)

137
138
    def get_user_name(self, request):
        user_name = ""
139
140
141
        if isinstance(request.user, AnonymousUser):
            user_name = "Anonim"
        elif request.user.is_admin:
142
143
144
145
146
            user_name = "Admin"
        elif request.user.is_contributor:
            user_name = request.user.name
        return user_name

147
    def post(self, request, *args, **kwargs):
148
        commentText = request.POST.get("comment", None)
149
        if commentText == None or commentText == "":
150
151
            context = self.get_context_data(*args, **kwargs)
            context["error_message"] = "Anda belum menuliskan komentar"
152
            context["materi_data"] = get_object_or_404(Materi, pk=kwargs["pk"])
153
154
            query_set_for_comment = Comment.objects.filter(
                materi=context["materi_data"])
155
            context["comment_data"] = query_set_for_comment
156
            return self.render_to_response(context=context)
157

158
        materi = get_object_or_404(Materi, pk=kwargs["pk"])
159
160
161
        user_obj = request.user if request.user.is_authenticated else None
        comment = Comment.objects.create(comment=commentText,
                                         username=self.get_user_name(request), materi=materi, user=user_obj)
162
163
164
        comment.save()
        return HttpResponseRedirect(request.path)

165

166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
def toggle_like(request):
    if request.method == 'POST':
        materi_id = request.POST.get('materi_id', None)
        session_id = request.POST.get('session_id', None)
        if materi_id is None or session_id is None:
            return JsonResponse({"success": False, "msg": "Missing parameter"})
        materi = get_object_or_404(Materi, pk=materi_id)
        has_liked = Like.objects.filter(
            materi=materi, session_id=session_id).exists()
        if has_liked:
            like = get_object_or_404(
                Like, materi=materi, session_id=session_id)
            like.delete()
            return JsonResponse({"success": True, "liked": True})
        else:
            Like(materi=materi, session_id=session_id).save()
            return JsonResponse({"success": True, "liked": False})
    else:
        return JsonResponse({"success": False, "msg": "Unsuported method"})


187
188
189
190
191
192
def delete_comment(request, pk_materi, pk_comment):
    comment = get_object_or_404(Comment, pk=pk_comment)
    url = '/materi/' + str(pk_materi) + "/"
    comment.delete()
    return HttpResponseRedirect(url)

193

194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
def add_rating_materi(request):
    if request.method == 'POST' and request.user.is_authenticated:

        materi_id = request.POST.get('materi_id', None)
        rating_score = request.POST.get('rating_score', None)

        if materi_id is None or rating_score is None:
            return JsonResponse({"success": False, "msg": "Missing param"}, status=422)
        try:
            rating_score = int(rating_score)
        except ValueError:
            return JsonResponse({"success": False, "msg": "rating_score must be an integer"}, status=422)

        try:
            materi_id = int(materi_id)
        except ValueError:
            return JsonResponse({"success": False, "msg": "materi_id must be an integer"}, status=422)

        if rating_score not in range(1, 6):
            return JsonResponse({"success": False, "msg": "Rating must be an integer from 1 to 5"}, status=422)

        materi = Materi.objects.filter(pk=materi_id).first()

        if materi is None:
            return JsonResponse({"success": False, "msg": "Materi does not exist"}, status=422)

        if Rating.objects.filter(materi=materi, user=request.user).first() is not None:
            return JsonResponse({"success": False, "msg": "Rating already exist"}, status=409)

        Rating(materi=materi, user=request.user, score=rating_score).save()
        return JsonResponse({"success": True, "msg": "Rating successfully created", "rating_score": rating_score},
                            status=201)
    return JsonResponse({"success": False, "msg": "Forbidden"}, status=403)


229
230
231
232
233
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):
234
235
236
237
238
239
240
241
242
243
        try:
            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)
                DownloadStatistics(materi=materi).save()
                return response
        except Exception as e:
            raise Http404("File tidak dapat ditemukan.")
244
245
246
    else:
        raise Http404("File tidak dapat ditemukan.")

igor lestin sianipar's avatar
igor lestin sianipar committed
247

248
249
250
251
252
253
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)
254
255
256
257
258
259
260
261
262
        try:
            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)
                ViewStatistics(materi=materi).save()
                return response
        except Exception as e:
            raise Http404("File tidak dapat ditemukan.")
263
264
    else:
        raise Http404("File tidak dapat ditemukan.")
igor lestin sianipar's avatar
igor lestin sianipar committed
265

igor lestin sianipar's avatar
igor lestin sianipar committed
266

igor lestin sianipar's avatar
igor lestin sianipar committed
267
class UploadMateriView(TemplateView):
268
    template_name = "unggah.html"
igor lestin sianipar's avatar
igor lestin sianipar committed
269
270
271
272
273
274
    context = {}

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

Saul Andre's avatar
Saul Andre committed
275
    def post(self, request, *args, **kwargs):
igor lestin sianipar's avatar
igor lestin sianipar committed
276
277
        if request.user.is_authenticated == False:
            raise PermissionDenied(request)
278
        form = UploadMateriForm(request.POST, request.FILES)
igor lestin sianipar's avatar
igor lestin sianipar committed
279
280
281
        if form.is_valid():
            materi = form.save(commit=False)
            materi.uploader = request.user
282
283
284
285
286
287
            konten = form.cleaned_data['content']
            try:
                self.validate_file_extension(konten)
            except ValidationError:
                messages.error(request, "Materi gagal diunggah, format file tidak sesuai")
                return HttpResponseRedirect("/unggah/")
igor lestin sianipar's avatar
igor lestin sianipar committed
288
            materi.save()
289
290
291
            kateg = form.cleaned_data['categories']
            for i in kateg:
                materi.categories.add(i)
igor lestin sianipar's avatar
igor lestin sianipar committed
292
293
            messages.success(
                request, "Materi berhasil diunggah, periksa riwayat unggah anda")
294
            return HttpResponseRedirect("/unggah/")
Saul Andre's avatar
Saul Andre committed
295
        else:
igor lestin sianipar's avatar
igor lestin sianipar committed
296
            context = self.get_context_data(**kwargs)
297
            context["form"] = form
298
            messages.error(request, "Terjadi kesalahan pada pengisian data")
igor lestin sianipar's avatar
igor lestin sianipar committed
299
300
301
302
303
304
            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)
305
        context["form"] = UploadMateriForm
igor lestin sianipar's avatar
igor lestin sianipar committed
306
        return self.render_to_response(context)
307

308
309
310
311
312
    def validate_file_extension(self, value):
        ext = os.path.splitext(value.name)[1]  # [0] returns path+filename
        valid_extensions = ['.pdf', '.doc', '.docx', '.jpg', '.png', '.xlsx', '.xls', '.mp4', '.mp3']
        if not ext.lower() in valid_extensions:
            raise ValidationError('Unsupported file extension.')
313

Samuel Dimas's avatar
Samuel Dimas committed
314

315
316
317
class UploadMateriHTML(TemplateView):
    template_name = "unggah.html"
    context = {}
igor lestin sianipar's avatar
igor lestin sianipar committed
318

319
320
321
322
323
324
    def get_template_names(self):
        if self.request.path == "/unggah/":
            template_name = "unggah.html"
        return template_name


325
class DashboardKontributorView(TemplateView):
326
    template_name = "dashboard.html"
327
328
329
330
331
332
333

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_contributor:
            raise PermissionDenied(request)
        return super(DashboardKontributorView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
334
335
        context = super(DashboardKontributorView,
                        self).get_context_data(**kwargs)
336
337
338
339
        return context

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
340
341
342
        current_user = self.request.user
        materi_list = current_user.materi_set.all()
        context["materi_list"] = materi_list
343
        return self.render_to_response(context)
344

345

346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
class ProfilAdminView(TemplateView):
    template_name = "profil-admin.html"

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_admin:
            raise PermissionDenied(request)
        return super(ProfilAdminView, self).dispatch(request, *args, **kwargs)

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

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        current_user = self.request.user
        context["user"] = current_user
        return self.render_to_response(context)
363

364

365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
class ProfilKontributorView(TemplateView):
    template_name = "profil.html"

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_authenticated or not request.user.is_contributor:
            raise PermissionDenied(request)
        return super(ProfilKontributorView, self).dispatch(request, *args, **kwargs)

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

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        current_user = self.request.user
        context["user"] = current_user
        return self.render_to_response(context)

383

384
385
386
387
class SuntingProfilView(TemplateView):
    template_name = "sunting.html"

    def dispatch(self, request, *args, **kwargs):
388
        if not request.user.is_authenticated or not request.user.is_contributor:
389
390
391
392
393
394
395
396
397
398
399
400
401
            raise PermissionDenied(request)
        return super(SuntingProfilView, self).dispatch(request, *args, **kwargs)

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

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)

        current_user = self.request.user
        context["user"] = current_user

Samuel Dimas Partogi's avatar
Samuel Dimas Partogi committed
402
        context["form"] = SuntingProfilForm(instance=current_user)
403
404
405
406
407
408
        return self.render_to_response(context)

    def post(self, request, *args, **kwargs):
        if request.user.is_authenticated == False:
            raise PermissionDenied(request)

Samuel Dimas Partogi's avatar
Samuel Dimas Partogi committed
409
        current_user = self.request.user
410

411
412
        form = SuntingProfilForm(
            request.POST, request.FILES, instance=current_user)
413
        if form.is_valid():
414
            current_user.default_profile_picture = True
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429

            # Removing exifdata from profile picture on upload
            if request.FILES:
                f_name = request.FILES['profile_picture'].name
                f_name = get_random_filename(f_name)
                f_path = settings.MEDIA_ROOT + "/" + f_name
                request.FILES['profile_picture'].name = f_name

                form = SuntingProfilForm(
            request.POST, request.FILES, instance=current_user)
                form.save()

                remove_image_exifdata(f_path)
            else: 
                form.save()
430
431
432
433
434
            return HttpResponseRedirect("/profil/")
        else:
            context = self.get_context_data(**kwargs)
            context["form"] = form
            return self.render_to_response(context)
435

igor lestin sianipar's avatar
igor lestin sianipar committed
436

437
438
439
440
441
442
443
444
445
class SuntingProfilAdminView(TemplateView):
    template_name = "sunting_admin.html"

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_admin:
            raise PermissionDenied(request)
        return super(SuntingProfilAdminView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
igor lestin sianipar's avatar
igor lestin sianipar committed
446
447
        context = super(SuntingProfilAdminView,
                        self).get_context_data(**kwargs)
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
        return context

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)

        current_user = self.request.user
        context["user"] = current_user

        context["form"] = SuntingProfilForm(instance=current_user)
        return self.render_to_response(context)

    def post(self, request, *args, **kwargs):
        if request.user.is_authenticated == False:
            raise PermissionDenied(request)

        current_user = self.request.user
464

465
466
467
468
        form = SuntingProfilForm(
            request.POST, request.FILES, instance=current_user)
        if form.is_valid():
            current_user.default_profile_picture = True
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483

            # Removing exifdata from profile picture on upload
            if request.FILES:
                f_name = request.FILES['profile_picture'].name
                f_name = get_random_filename(f_name)
                f_path = settings.MEDIA_ROOT + "/" + f_name
                request.FILES['profile_picture'].name = f_name

                form = SuntingProfilForm(
            request.POST, request.FILES, instance=current_user)
                form.save()

                remove_image_exifdata(f_path)
            else: 
                form.save()
484
485
486
            return HttpResponseRedirect("/profil-admin/")
        else:
            context = self.get_context_data(**kwargs)
487
488
            context["form"] = form
            return self.render_to_response(context)
489

490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
class ReqMateriView(TemplateView):
    template_name = "req_materi.html"

    def dispatch(self, request, *args, **kwargs):
        if request.user.is_authenticated == False:
            return HttpResponseRedirect("/login/")
        return super(ReqMateriView, self).dispatch(request, *args, **kwargs)

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

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context)

    def post(self, request, *args, **kwargs):
        title = request.POST.get('title', None)
        if title is None:
            return JsonResponse({"success": False, "msg": "Missing parameter"})
        ReqMaterial(title=title).save()
        return JsonResponse({"success": True, "msg": "Permintaan materi berhasil dikirimkan"})

514

515
516
517
518
519
520
521
class SuksesLoginKontributorView(TemplateView):
    template_name = "sukses_kontri.html"

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_contributor:
            raise PermissionDenied(request)
        return super(SuksesLoginKontributorView, self).dispatch(request, *args, **kwargs)
522

523
    def get_context_data(self, **kwargs):
524
525
        context = super(SuksesLoginKontributorView,
                        self).get_context_data(**kwargs)
526
527
528
529
530
531
532
533
534
535
        return context

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)

        current_user = self.request.user
        context["user"] = current_user

        return self.render_to_response(context)

536

537
538
539
540
541
542
543
class SuksesLoginAdminView(TemplateView):
    template_name = "sukses_admin.html"

    def dispatch(self, request, *args, **kwargs):
        if not request.user.is_admin:
            raise PermissionDenied(request)
        return super(SuksesLoginAdminView, self).dispatch(request, *args, **kwargs)
544

545
546
547
548
549
550
551
552
553
554
555
556
    def get_context_data(self, **kwargs):
        context = super(SuksesLoginAdminView, self).get_context_data(**kwargs)
        return context

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)

        current_user = self.request.user
        context["user"] = current_user

        return self.render_to_response(context)

igor lestin sianipar's avatar
igor lestin sianipar committed
557

558
559
560
class PostsView(TemplateView):

    template_name = "user_uploaded_posts.html"
561
562

    def dispatch(self, request, *args, **kwargs):
563
        if not request.user.is_authenticated:
564
            raise PermissionDenied(request)
565
        return super(PostsView, self).dispatch(request, *args, **kwargs)
566
567

    def get(self, request, *args, **kwargs):
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
        context = super().get_context_data(**kwargs)
        user = self.request.user

        posts = Materi.objects.filter(uploader=user).order_by("-date_created")
        posts_data = { post.id: { "data": post, "comments": [] } for post in posts }

        comments = Comment.objects \
            .filter(materi__id__in=posts_data.keys()) \
            .order_by("-timestamp")

        for comment in comments:
            posts_data[comment.materi.id]["comments"].append(comment)

        context["user"] = user
        context["posts"] = posts_data

584
        return self.render_to_response(context=context)
585

586

587
588
589
class RevisiMateriView(TemplateView):
    template_name = "revisi.html"

590
    def dispatch(self, request, *args, **kwargs):
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
        if not request.user.is_contributor:
            raise PermissionDenied(request)
        return super(RevisiMateriView, self).dispatch(request, *args, **kwargs)

    def get_context_data(self, **kwargs):
        context = super(RevisiMateriView, self).get_context_data(**kwargs)
        current_materi = get_object_or_404(Materi, pk=kwargs["pk"])
        context["materi"] = current_materi
        context["revisi_form"] = UploadMateriForm(instance=current_materi)
        return context

    def get(self, request, *args, **kwargs):
        context = self.get_context_data(**kwargs)
        return self.render_to_response(context)

    def post(self,request, *args, **kwargs):
        if request.user.is_authenticated == False:
            raise PermissionDenied(request)

        current_materi = get_object_or_404(Materi, pk=kwargs["pk"])
        form = UploadMateriForm(
            request.POST, request.FILES, instance=current_materi)
        if form.is_valid():
            materi = form.save(commit=False)
            materi.uploader = request.user
            materi.status = "REVISION"
            materi.save()
            kateg = form.cleaned_data['categories']
            for i in kateg:
                materi.categories.add(i)
            materi.save()
            return HttpResponseRedirect("/dashboard/")
        else:
            context = self.get_context_data(**kwargs)
            context["form_revisi"] = form
            return self.render_to_response(context)

Samuel Dimas's avatar
Samuel Dimas committed
628
629
630
631
632
633
def pages(request):
    context = {}
    # All resource paths end in .html.
    # Pick out the html file name from the url. And load that template.
    try:

634
        load_template = request.path.split("/")[-1]
Samuel Dimas's avatar
Samuel Dimas committed
635
636
637
        template = loader.get_template(load_template)
        return HttpResponse(template.render(context, request))

638
    except Exception as e:
Samuel Dimas's avatar
Samuel Dimas committed
639

640
        template = loader.get_template("error-404.html")
Samuel Dimas's avatar
Samuel Dimas committed
641
        return HttpResponse(template.render(context, request))