Пример #1
0
def user(request, group_id=-1):
    context = array_merge(initialize_form_context(), fetch_message(request))

    groups = Group.objects.all()
    i = 0
    for group in groups:
        groups[i].count = group.user_set.filter(
            Q(is_staff=False) | Q(is_superuser=False)).count()
        i += 1

    if group_id == -1:
        users = User.objects.filter(Q(is_staff=False) | Q(is_superuser=False))
        i = 0
        for user in users:
            users[i].group = user.groups.all()
            i += 1
    else:
        group = Group.objects.get(pk=group_id)
        users = group.user_set.filter(
            Q(is_staff=False) | Q(is_superuser=False))
        i = 0
        for user in users:
            users[i].group = user.groups.all()
            i += 1
    context['data']['master'] = {'users': users, 'groups': groups}
    context['menu'] = {'lv1': 'master', 'lv2': 'master_user'}
    return render(request, 'app/user.html', context)
Пример #2
0
def hapus_kelas(request, kelas_id):
    context = array_merge(initialize_form_context(), fetch_message(request))
    context['menu'] = {'lv1': 'kelas', 'lv2': 'kelas_list'}
    # hapus = Kelas.objects.delete(pk=kelas_id)
    hapus = False
    if hapus:
        context['data']['notifikasi'] = {
            'noted': "Kelas berhasil dihapus",
            'type': 'success',
        }
    else:
        context['data']['notifikasi'] = {
            'noted': "Kelas gagal dihapus",
            'type': 'error',
        }
    latest_kelas_list = Kelas.objects.order_by('-end')[:5]
    i = 0
    for kelas in latest_kelas_list:
        latest_kelas_list[i].jumlahmember = kelas.members.count()
        latest_kelas_list[i].jumlahdokumen = kelas.dokumen.count()
        i += 1

    context['data']['kelas'] = {
        'list': latest_kelas_list,
    }
    return render(request, 'app/kelas.html', context)
Пример #3
0
def data_uji(request):
    context = array_merge(initialize_form_context(), fetch_message(request))
    datauji = Data.objects.filter(datauji=True)
    jdatauji = Data.objects.filter(datauji=True).count()
    context['menu'] = {'lv1': 'data', 'lv2': 'data_uji'}
    context['dataset'] = {'data': datauji, 'jumlah': jdatauji}
    return render(request, 'app/data.html', context)
Пример #4
0
def pengujian(request):
    context = array_merge(initialize_form_context(), fetch_message(request))
    context['menu'] = {'lv1': 'data', 'lv2': 'edit_data'}
    cek = Pengujian.objects.all().count()
    if (cek > 0):
        hasil = Pengujian.objects.all()
        context['hasil'] = {
            'pengujian': hasil,
        }
    return render(request, 'app/pengujian.html', context)
Пример #5
0
def detailkelas(request, kelas_id):
    context = array_merge(initialize_form_context(), fetch_message(request))

    # dokumen = get_object_or_404(Dokumen, pk=question_id)
    # return serve_file(request, dokumen.filenya)
    kelas = Kelas.objects.get(pk=kelas_id)
    kelas.jumlahmember = kelas.members.count()
    kelas.jumlahdokumen = kelas.dokumen.count()
    documents = kelas.dokumen.all()
    context['data']['kelas'] = {'detail': kelas, 'documents': documents}
    context['menu'] = {'lv1': 'kelas', 'lv2': 'kelas_list'}
    return render(request, 'app/detail.html', context)
Пример #6
0
def login(request):
    context = array_merge(initialize_form_context(), fetch_message(request))

    if request.method == 'POST':
        form = auth.Login(request.POST)
        context['form']['data'] = array_except(dict(form.data),
                                               ['csrfmiddlewaretoken'])
        if form.is_valid():
            user_data = authenticate(
                request,
                username=form.cleaned_data.get('email'),
                password=form.cleaned_data.get('password'))
            if user_data is not None:
                group = user_data.groups.first()
                if group is not None:
                    do_login(request, user_data)
                    from app.app.utils.sess_util import GROUP_ID
                    request.session[GROUP_ID] = group.id
                    callback = pickle.dumps({
                        'message': {
                            'notification': [{
                                'msg': 'Login Success',
                                'level': 'success'
                            }]
                        }
                    })
                    messages.add_message(
                        request, messages.INFO,
                        codecs.encode(callback, "base64").decode(), 'callback')
                    return redirect(
                        request.POST.get('next') if (
                            request.POST.get('next')
                            and request.POST.get('next') != "") else '/user')
                else:
                    context['message']['notification'] = [{
                        'msg': 'Your account is not activated yet',
                        'level': 'info'
                    }]
                    return render(request, 'app/login.html', context)
            else:
                context['message']['notification'] = [{
                    'msg': 'Account does not exists',
                    'level': 'info'
                }]
                return render(request, 'app/login.html', context)
        else:
            context['form']['errors'] = dict(form.errors)
            return render(request, 'app/login.html', context)
    else:
        if request.GET.get('next') and request.GET.get('next') != "":
            context['form']['data']['next'] = request.GET.get('next')
        return render(request, 'app/login.html', context)
Пример #7
0
def proses_pengujian(request):
    context = array_merge(initialize_form_context(), fetch_message(request))
    context['menu'] = {'lv1': 'data', 'lv2': 'edit_data'}
    jml_pengujian = 10
    gap_data = 10
    testing_apps.delay(gap_data)

    cek = Pengujian.objects.all().count()
    if (cek > 0):
        hasil = Pengujian.objects.all()
        context['hasil'] = {
            'pengujian': hasil,
        }
    return redirect('/pengujian')
Пример #8
0
def kelas(request):
    context = array_merge(initialize_form_context(), fetch_message(request))

    latest_kelas_list = Kelas.objects.order_by('-end')[:5]
    i = 0
    for kelas in latest_kelas_list:
        latest_kelas_list[i].jumlahmember = kelas.members.count()
        latest_kelas_list[i].jumlahdokumen = kelas.dokumen.count()
        i += 1

    context['data']['kelas'] = {
        'list': latest_kelas_list,
    }
    context['menu'] = {'lv1': 'kelas', 'lv2': 'kelas_list'}
    return render(request, 'app/kelas.html', context)
Пример #9
0
def kelasbaru(request):
    context = array_merge(initialize_form_context(), fetch_message(request))
    context['menu'] = {'lv1': 'kelas', 'lv2': 'kelas_newclass'}
    if request.method == 'POST':
        form = formKelas.BuatKelas(request.POST)
        context['form']['data'] = array_except(dict(form.data),
                                               ['csrfmiddlewaretoken'])
        if form.is_valid():
            name = form.cleaned_data.get('name')
            deskripsi = form.cleaned_data.get('deskripsi')
            members = form.cleaned_data.get('members')
            staffs = form.cleaned_data.get('staffs')
            startdate = form.cleaned_data.get('startdate')
            enddate = form.cleaned_data.get('enddate')

            new_kelas = Kelas(namakelas=name,
                              keterangan=deskripsi,
                              start=startdate,
                              end=enddate)
            new_kelas.save()
            for member in members:
                anggota1 = User.objects.get(pk=member)
                new_kelas.members.add(anggota1)
            for staff in staffs:
                anggota2 = User.objects.get(pk=staff)
                new_kelas.members.add(anggota2)
            context['message']['notification'] = [{
                'msg': 'Pembuatan kelas berhasil',
                'level': 'info'
            }]
            return render(request, 'app/kelasbaru.html', context)
        else:
            context['form']['errors'] = dict(form.errors)
            return render(request, 'app/kelasbaru.html', context)
    else:
        form = formKelas.BuatKelas()
        users = User.objects.filter(is_staff=False, is_superuser=False)
        staff = User.objects.filter(is_staff=True, is_superuser=False)
        context['data']['kelas'] = {
            'users': users,
            'staffs': staff,
        }
        context['form']['data'] = form

        return render(request, 'app/kelasbaru.html', context)
Пример #10
0
def edit_data(request, data_id):
    context = array_merge(initialize_form_context(), fetch_message(request))
    context['menu'] = {'lv1': 'data', 'lv2': 'edit_data'}
    if request.method == 'POST':
        form = formUploadData.EditData(request.POST, request.FILES)

        if form.is_valid():
            namafile = form.cleaned_data.get('namafile')
            datalatih = form.cleaned_data.get('datalatih')
            datauji = form.cleaned_data.get('datauji')
            is_dataset = form.cleaned_data.get('is_dataset')
            url_file = form.cleaned_data.get('url_file')

            data = get_object_or_404(Data, pk=data_id)
            data.namafile = namafile
            data.datalatih = datalatih
            data.datauji = datauji
            data.is_dataset = is_dataset
            if url_file:
                data.url_file = url_file

            data.save()

            callback = pickle.dumps({
                'message': {
                    'alert': [{
                        'msg': 'Edit Success',
                        'level': 'success'
                    }]
                },
            })
            messages.add_message(request, messages.INFO,
                                 codecs.encode(callback, "base64").decode(),
                                 'callback')
            return redirect('/data/edit_data/{}'.format(data_id))
        else:
            context['form']['errors'] = dict(form.errors)
            return render(request, 'app/edit_dataset.html', context)
    else:
        data = get_object_or_404(Data, pk=data_id)
        context['dataset'] = {'data': data, 'data_id': data_id}
        context['form']['data'] = formUploadData.EditData()
        return render(request, 'app/edit_dataset.html', context)
Пример #11
0
def data_upload(request):
    context = array_merge(initialize_form_context(), fetch_message(request))
    context['menu'] = {'lv1': 'data', 'lv2': 'data_upload'}
    if request.method == 'POST':
        form = formUploadData.UploadData(request.POST, request.FILES)

        if form.is_valid():
            namafile = form.cleaned_data.get('namafile')
            datalatih = form.cleaned_data.get('datalatih')
            datauji = form.cleaned_data.get('datauji')
            is_dataset = form.cleaned_data.get('is_dataset')
            url_file = form.cleaned_data.get('url_file')

            new_data = Data(namafile=namafile,
                            datalatih=datalatih,
                            datauji=datauji,
                            is_dataset=is_dataset,
                            url_file=url_file)
            new_data.save()

            callback = pickle.dumps({
                'message': {
                    'alert': [{
                        'msg': 'Upload Success',
                        'level': 'success'
                    }]
                },
            })
            messages.add_message(request, messages.INFO,
                                 codecs.encode(callback, "base64").decode(),
                                 'callback')
            return redirect('/data/upload')
        else:
            context['form']['errors'] = dict(form.errors)
            return render(request, 'app/upload_dataset.html', context)
    else:
        context['form']['data'] = formUploadData.UploadData()
        return render(request, 'app/upload_dataset.html', context)
Пример #12
0
def index(request):
    date_now = datetime.datetime.today()
    new_docs = Dokumen.objects.filter(pub_date__year=date_now.year,
                                      pub_date__month=date_now.month,
                                      pub_date__day=date_now.day).count()
    all_docs = Dokumen.objects.all().count()
    users = User.objects.filter(is_staff=False, is_superuser=False).count()
    kelas = Kelas.objects.all().count()
    task = Dokumen.objects.filter(~Q(state="Done"))
    jumlah_task = Dokumen.objects.filter(~Q(state="Done")).count()
    context = array_merge(initialize_form_context(), fetch_message(request))
    context['menu'] = {
        'lv1': 'Dashboard',
    }
    context['data'] = {
        'new_docs': new_docs,
        'all_docs': all_docs,
        'users': users,
        'kelas': kelas,
        'task': task,
        'jumlah_task': jumlah_task,
    }
    return render(request, 'app/index.html', context)
Пример #13
0
def admin(request, mode_admin=-1):
    context = array_merge(initialize_form_context(), fetch_message(request))

    all = User.objects.filter(is_staff=True).count()
    staff = User.objects.filter(is_staff=True, is_superuser=False).count()
    superuser = User.objects.filter(is_superuser=True).count()

    if mode_admin == -1:
        users = User.objects.filter(Q(is_staff=True) | Q(is_superuser=True))
    elif mode_admin == 1:
        users = User.objects.filter(is_staff=True, is_superuser=False)
    elif mode_admin == 2:
        users = User.objects.filter(is_superuser=True)
    else:
        users = {}

    context['data']['master'] = {
        'users': users,
        'jumlah_staff': staff,
        'jumlah_superuser': superuser,
        'jumlah_semua': all
    }
    context['menu'] = {'lv1': 'master', 'lv2': 'master_admin'}
    return render(request, 'app/admin.html', context)
Пример #14
0
def upload_dokumen(request, kelas_id):
    context = array_merge(initialize_form_context(), fetch_message(request))
    context['menu'] = {'lv1': 'kelas', 'lv2': 'kelas_list'}
    if request.method == 'POST':
        form = formUploadDokumen.UploadDokumen(request.POST, request.FILES)

        if form.is_valid():
            name = form.cleaned_data.get('name')
            filenya = form.cleaned_data.get('file_upload')
            current_user = request.user
            user = User.objects.get(pk=current_user.id)

            new_dokumen = Dokumen(user=user, nama_file=name, filenya=filenya)
            new_dokumen.save()

            kelas = Kelas.objects.get(pk=kelas_id)
            kelas.dokumen.add(new_dokumen)
            proceed_document.delay(new_dokumen.id)
            callback = pickle.dumps({
                'message': {
                    'alert': [{
                        'msg': 'Upload Success',
                        'level': 'success'
                    }]
                },
            })
            messages.add_message(request, messages.INFO,
                                 codecs.encode(callback, "base64").decode(),
                                 'callback')
            return redirect('/kelas/{}/detail'.format(kelas_id))
        else:
            context['form']['errors'] = dict(form.errors)
            return render(request, 'app/upload_dokumen.html', context)
    else:
        context['form']['data'] = formUploadDokumen.UploadDokumen()
        return render(request, 'app/upload_dokumen.html', context)
Пример #15
0
def recover(request):
    context = array_merge(initialize_form_context(), fetch_message(request))
    token = request.GET.get('token') if request.GET.get(
        'token') and request.GET.get('token') else request.POST.get('token')
    if token and token != "":
        data = ResetPassword.objects.filter(token=token)
        if data.exists():
            recover_data = data.first()
        else:
            callback = pickle.dumps({
                'message': {
                    'notification': [{
                        'msg': 'Bad Token',
                        'level': 'warning'
                    }]
                }
            })
            messages.add_message(request, messages.INFO,
                                 codecs.encode(callback, "base64").decode(),
                                 'callback')
            return redirect('/login')
    else:
        callback = pickle.dumps({
            'message': {
                'notification': [{
                    'msg': 'Token Not Provided',
                    'level': 'info'
                }]
            }
        })
        messages.add_message(request, messages.INFO,
                             codecs.encode(callback, "base64").decode(),
                             'callback')
        return redirect('/login')

    if request.method == 'POST':
        form = auth.Recover(request.POST)
        context['form']['data'] = array_except(dict(form.data),
                                               ['csrfmiddlewaretoken'])
        if form.is_valid():
            if form.cleaned_data.get('password') != form.cleaned_data.get(
                    'password_conf'):
                context['form']['errors'] = {
                    'password': '******',
                    'password_conf': 'Password Unequal'
                }
                return render(request, 'app/recover.html', context)
            else:
                account = User.objects.filter(id=recover_data.user_id).first()
                if account is not None:
                    account.password = make_password(
                        form.cleaned_data.get('password'))
                    account.save()
                    callback = pickle.dumps({
                        'message': {
                            'alert': [{
                                'msg': 'Registration Success',
                                'level': 'success'
                            }]
                        },
                        'form': {
                            'data': {
                                'email': account.email
                            }
                        }
                    })
                    recover_data.delete()
                    messages.add_message(
                        request, messages.INFO,
                        codecs.encode(callback, "base64").decode(), 'callback')
                    return redirect('/login')
                else:
                    context['message']['alert'] = [{
                        'msg': 'Account not found',
                        'level': 'danger'
                    }]
                    return render(request, 'app/login.html', context)
        else:
            context['form']['errors'] = dict(form.errors)
            return render(request, 'app/recover.html', context)
    else:
        context['form']['data']['token'] = token
        return render(request, 'app/recover.html', context)
Пример #16
0
def statistik(request):
    context = array_merge(initialize_form_context(), fetch_message(request))
    context['menu'] = {'lv1': 'server', 'lv2': 'server_statistik'}
    return render(request, 'app/statistik.html', context)
Пример #17
0
def forgot(request):
    context = array_merge(initialize_form_context(), fetch_message(request))

    if request.method == 'POST':
        form = auth.Forgot(request.POST)
        context['form']['data'] = array_except(dict(form.data),
                                               ['csrfmiddlewaretoken'])
        context['form']['data']['forgot_concern'] = True
        if form.is_valid():
            account = User.objects.filter(email=form.cleaned_data.get('email'))
            if account.exists():
                account = account.first()
                token = get_random_string(length=80)
                if ResetPassword.objects.filter(user_id=account.id).exists():
                    ResetPassword.objects.filter(user_id=account.id).update(
                        token=token)
                else:
                    ResetPassword.objects.create(token=token,
                                                 created_at=now(),
                                                 user_id=account.id)
                subject = 'Password Recover Request'
                message = """
                <doctype html>
                <html>
                    <head>
                    </head>
                    <body>
                        Here your password recover link address <a href="{base_url(request)}/recover?token={token}" target="_blank">Click</a>
                    </body>
                </html>
                """
                from_email = '*****@*****.**'
                if subject and message and from_email:
                    try:
                        send_mail(subject,
                                  message,
                                  from_email, [form.cleaned_data.get('email')],
                                  html_message=message)
                    except BadHeaderError:
                        context['message']['alert'] = [{
                            'msg': 'Server Error, Try Again',
                            'level': 'danger'
                        }]
                        return render(request, 'app/login.html', context)
                    context['message']['custom'] = {
                        'recover_success':
                        'Your recover form has been sent to your email account'
                    }
                    context['form']['data']['email'] = ''
                    return render(request, 'app/login.html', context)
                else:
                    context['message']['alert'] = [{
                        'msg': 'Server Error, Try Again',
                        'level': 'danger'
                    }]
                    return render(request, 'app/login.html', context)
            else:
                context['message']['notification'] = [{
                    'msg': 'Account does not exists',
                    'level': 'info'
                }]
                return render(request, 'app/login.html', context)
        else:
            context['form']['errors'] = dict(form.errors)
            return render(request, 'app/login.html', context)
    else:
        callback = pickle.dumps({'form': {
            'data': {
                'forgot_concern': True,
            }
        }})
        messages.add_message(request, messages.INFO,
                             codecs.encode(callback, "base64").decode(),
                             'callback')
        return redirect('/login')
Пример #18
0
def editkelas(request, kelas_id):
    context = array_merge(initialize_form_context(), fetch_message(request))
    context['menu'] = {'lv1': 'kelas', 'lv2': 'kelas_list'}
    if request.method == 'POST':
        form = formKelas.BuatKelas(request.POST)
        context['form']['data'] = array_except(dict(form.data),
                                               ['csrfmiddlewaretoken'])
        if form.is_valid():
            name = form.cleaned_data.get('name')
            deskripsi = form.cleaned_data.get('deskripsi')
            members = form.cleaned_data.get('members')
            staffs = form.cleaned_data.get('staffs')
            startdate = form.cleaned_data.get('startdate')
            enddate = form.cleaned_data.get('enddate')

            kelas = Kelas.objects.get(pk=kelas_id)
            kelas.namakelas = name
            kelas.keterangan = deskripsi
            kelas.start = startdate
            kelas.end = enddate
            # new_kelas = Kelas(namakelas=name, keterangan=deskripsi, start=startdate, end=enddate)
            kelas.save()
            for member in members:
                anggota1 = User.objects.get(pk=member)
                kelas.members.add(anggota1)
            for staff in staffs:
                anggota2 = User.objects.get(pk=staff)
                kelas.members.add(anggota2)
            context['form']['data'] = form
            context['message']['notification'] = [{
                'msg': 'Edit kelas berhasil',
                'level': 'info'
            }]
            return render(request, 'app/edit_kelas.html', context)
        else:
            context['form']['errors'] = dict(form.errors)
            context['message']['notification'] = [{
                'msg': 'Edit kelas gagal',
                'level': 'danger'
            }]
            return render(request, 'app/edit_kelas.html', context)
    else:
        form = formKelas.BuatKelas()
        users = User.objects.filter(is_staff=False, is_superuser=False)
        staff = User.objects.filter(is_staff=True, is_superuser=False)
        kls = Kelas.objects.get(pk=kelas_id)
        # members = User.objects.filter()
        # temp = []
        # for staf in staff:
        #     print(kls.namakelas)
        #     for mem in kls.members:
        #         print("tes")
        #         if staf.id in mem.id:
        #             print("ok")
        #             temp[0].status = True
        #             temp[0].staf = staf
        #             print("wah")
        #         else:
        #             print("tes")
        #             temp[1].status = False
        #             temp[1].staf = staf
        #             print("loh")
        #
        # print(temp)

        context['data']['kelas'] = {
            'kelas_id': kelas_id,
            'kls': kls,
            'users': users,
            'staffs': staff,
        }
        context['form']['data'] = form
    return render(request, 'app/edit_kelas.html', context)
Пример #19
0
def register(request):
    context = array_merge(initialize_form_context(), fetch_message(request))

    if request.method == 'POST':
        form = auth.Register(request.POST)
        context['form']['data'] = array_except(dict(form.data),
                                               ['csrfmiddlewaretoken'])
        if form.is_valid():
            if form.cleaned_data.get('password') != form.cleaned_data.get(
                    'password_conf'):
                context['form']['errors'] = {
                    'password': '******',
                    'password_conf': 'Password Unequal'
                }
                return render(request, 'app/register.html', context)
            elif len(User.objects.filter(
                    email=form.cleaned_data.get('email'))) > 0:
                context['message']['notification'] = [{
                    'msg': 'Email exists',
                    'level': 'info'
                }]
                return render(request, 'app/register.html', context)
            else:
                group = Group.objects.filter(
                    name=form.cleaned_data.get('role')).first()
                if group is not None:
                    account = User(username=form.cleaned_data.get('username'),
                                   email=form.cleaned_data.get('email'),
                                   password=make_password(
                                       form.cleaned_data.get('password')))
                    try:
                        account.save()
                        account.groups.add(group)
                    except IntegrityError:
                        context['message']['notification'] = [{
                            'msg': 'Username is already taken',
                            'level': 'info'
                        }]
                        return render(request, 'app/register.html', context)
                    callback = pickle.dumps({
                        'message': {
                            'alert': [{
                                'msg': 'Registration Success',
                                'level': 'success'
                            }]
                        },
                        'form': {
                            'data': {
                                'email': form.cleaned_data.get('email'),
                            }
                        }
                    })
                    messages.add_message(
                        request, messages.INFO,
                        codecs.encode(callback, "base64").decode(), 'callback')
                    return redirect('/login')
                else:
                    context['form']['errors'] = {'role': 'Role is invalid'}
                    return render(request, 'app/register.html', context)
        else:
            context['form']['errors'] = dict(form.errors)
            return render(request, 'app/register.html', context)
    else:
        return render(request, 'app/register.html', context)