Example #1
0
def topic_delete(request, topic_pk):
    topic = get_object_or_404(Topic, pk=topic_pk)

    # if request.method == 'POST':

    if request.user.has_perm('skills.delete_topic', topic):
        topic.delete()
        if request.is_ajax():
            d = {'message': 'Topic was deleted'}
            return HttpResponse(json.dumps(d),
                                content_type='application/json',
                                status=201)
        else:
            messages.success(request, 'Topic was successfully deleted')
            return HttpResponseRedirect(reverse('trainer_dashboard'))
    else:
        # User doesn't have permission
        if request.is_ajax():
            return HttpResponse(json.dumps(form.errors),
                                content_type='application/json',
                                status=404)
        else:
            messages.error(request,
                           'You don\'t have permission to delete this topic')
            return HttpResponseRedirect(reverse('trainer_dashboard'))
Example #2
0
def like(request):
    if request.method == 'POST':  # If the form has been submitted...
        like = Like.objects.filter(object_id=request.POST['object_id'],
                                   content_type=request.POST['content_type'],
                                   author__pk=request.user.pk)
        print(len(like))
        if like.exists():
            like.delete()
            if request.is_ajax():
                d = {'success': 'SUCCESS!!!!11'}
                return HttpResponse(json.dumps(d), content_type='application/json', status=201)
            else:
                messages.info(request, 'You no longer like this %s' % like.content_type)
                return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
        else:
            like = Like(author=request.user)
            form = LikeForm(request.POST, instance=like)
            if form.is_valid():
                like = form.save(commit=False)
                like.author = request.user
                like.save()
                if request.is_ajax():
                    d = {'success': 'SUCCESS!!!!11'}
                    return HttpResponse(json.dumps(d), content_type='application/json', status=201)
                else:
                    messages.success(request, 'Like absorbed')
                    return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
            else:
                messages.error(request, 'Form invalid %s' % form.errors)
                return HttpResponse(json.dumps(form.errors), content_type='application/json', status=404)
    else:
        messages.error(request, 'Did not like')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Example #3
0
def skill_delete(request, skill_id):
    skill = get_object_or_404(Skill, pk=skill_id)
    if  request.user.has_perm('skills.delete_skill', skill):
        skill.delete()
        messages.success(request, 'The skill was deleted')
        return HttpResponseRedirect(reverse('skills:skills_overview'))
    else:
        messages.error(request, 'You do not have permission to delete this skill')
        return HttpResponseRedirect(skill.get_absolute_url())
Example #4
0
def trainingbit_edit(request, slug=None):

    trainingbit = None
    selected_topic_pks = []

    if slug is not None:
        trainingbit = get_object_or_404(TrainingBit, slug=slug)
        selected_topic_pks = [t.pk for t in trainingbit.topic_set.all()]

    form = TrainingBitForm(instance=trainingbit)

    # If something has been uploaded
    if request.method == 'POST':

        form = TrainingBitForm(request.POST,
                               request.FILES,
                               instance=trainingbit)
        if form.is_valid():

            new_trainingbit = form.save(commit=False)
            try:
                if new_trainingbit.image == '' and trainingbit is not None and trainingbit.image != '':
                    new_trainingbit.image = trainingbit.image
            except NameError:
                pass

            try:
                hasattr(new_trainingbit, 'author')
            except User.DoesNotExist:
                new_trainingbit.author = request.user

            new_trainingbit.save()
            trainingbit = new_trainingbit
            trainingbit_id = trainingbit.id

            selected_topic_pks = request.POST.getlist('topic-pks[]')
            selected_topic_pks = [int(s) for s in selected_topic_pks]
            topics = Topic.objects.filter(pk__in=selected_topic_pks)
            trainingbit.topic_set.clear()
            trainingbit.topic_set.add(*topics)

            return HttpResponseRedirect(
                reverse('skills:trainingbit_edit', args=[trainingbit.slug]))
        else:
            messages.error(request,
                           'Could not save training bit %s' % form.errors)

    # By default show training bit form
    return render(
        request, 'skills/trainingbit_edit.html', {
            'trainingbit': trainingbit,
            'topics': Topic.objects.all(),
            'selected_topic_pks': selected_topic_pks,
            'labels': TrainingBit.LABELS,
            'form': form,
        })
Example #5
0
def skill_delete(request, skill_id):
    skill = get_object_or_404(Skill, pk=skill_id)
    if request.user.has_perm('skills.delete_skill', skill):
        skill.delete()
        messages.success(request, 'The skill was deleted')
        return HttpResponseRedirect(reverse('skills:skills_overview'))
    else:
        messages.error(request,
                       'You do not have permission to delete this skill')
        return HttpResponseRedirect(skill.get_absolute_url())
Example #6
0
def user_delete(request, user_id):
    user = User.objects.get(id__exact=user_id)

    if user == request.user:
        user.delete()
        messages.success(request, 'Successfully deleted your user.')
    else:
        messages.error(request,
                       'You do not have permissions to delete this user.')

    return HttpResponseRedirect(reverse('front_page'))
Example #7
0
def user_delete(request, user_id):
    user = User.objects.get(id__exact=user_id)

    if user == request.user:
        user.delete()
        messages.success(request, 'Successfully deleted your user.')
    else:
        messages.error(request, 'You do not have permissions to delete this user.')



    return HttpResponseRedirect(reverse('front_page'))
Example #8
0
def user_upgrade_to_trainer(request, user_id):
    user = User.objects.get(id__exact=user_id)

    if request.user.is_admin:
        g = Group.objects.get(name='Trainers')
        g.user_set.add(user)

        messages.success(request, 'Successfully upgraded %s to be a trainer.' % user.username)
    else:
        messages.error(request, 'You do not have permissions to upgrade this user.')

    return HttpResponseRedirect(reverse('profile', args=[user_id]))
Example #9
0
def trainingbit_edit(request, slug=None):

    trainingbit = None
    selected_topic_pks = []


    if slug is not None:
        trainingbit = get_object_or_404(TrainingBit, slug=slug)
        selected_topic_pks = [t.pk for t in trainingbit.topic_set.all()]

    form = TrainingBitForm(instance=trainingbit)

    # If something has been uploaded
    if request.method == 'POST':

        form = TrainingBitForm(request.POST, request.FILES, instance=trainingbit)
        if form.is_valid():

            new_trainingbit = form.save(commit=False)
            try:
                if new_trainingbit.image == '' and trainingbit is not None and trainingbit.image != '':
                    new_trainingbit.image = trainingbit.image
            except NameError:
                pass

            try:
                hasattr(new_trainingbit, 'author')
            except User.DoesNotExist:
                new_trainingbit.author = request.user

            new_trainingbit.save()
            trainingbit = new_trainingbit
            trainingbit_id = trainingbit.id

            selected_topic_pks = request.POST.getlist('topic-pks[]')
            selected_topic_pks = [int(s) for s in selected_topic_pks]
            topics = Topic.objects.filter(pk__in=selected_topic_pks)
            trainingbit.topic_set.clear()
            trainingbit.topic_set.add(*topics)

            return HttpResponseRedirect(reverse('skills:trainingbit_edit', args=[trainingbit.slug]))
        else:
            messages.error(request, 'Could not save training bit %s' % form.errors)

    # By default show training bit form
    return render(request, 'skills/trainingbit_edit.html', {
        'trainingbit': trainingbit,
        'topics': Topic.objects.all(),
        'selected_topic_pks': selected_topic_pks,
        'labels': TrainingBit.LABELS,
        'form': form,
    })
Example #10
0
def skill_recommend(request, skill_id):
    skill = get_object_or_404(Skill, pk=skill_id)
    if request.user.has_perm('skills.recommend_skill', skill):
        if skill.is_recommended:
            skill.is_recommended = False
            messages.info(request, 'The skill is no longer recommended')
        else:
            skill.is_recommended = True
            messages.success(request, 'Successfully recommended skill')
        skill.save()
        return HttpResponseRedirect(skill.get_absolute_url())
    else:
        messages.error(request, 'You do not have permission to recommend this skill')
        return HttpResponseRedirect(skill.get_absolute_url())
Example #11
0
def trainingbit_recommend(request, trainingbit_id):
    trainingbit = get_object_or_404(TrainingBit, pk=trainingbit_id)
    if request.user.has_perm('skills.recommend_trainingbit', trainingbit):
        if trainingbit.is_recommended:
            trainingbit.is_recommended = False
            messages.info(request, 'The training bit is no longer recommended')
        else:
            trainingbit.is_recommended = True
            messages.success(request, 'Successfully recommended training bit')
        trainingbit.save()
        return HttpResponseRedirect(trainingbit.get_absolute_url())
    else:
        messages.error(request, 'You do not have permission to recommend this training bit')
        return HttpResponseRedirect(trainingbit.get_absolute_url())
Example #12
0
def skill_publicize(request, skill_id):
    skill = get_object_or_404(Skill, pk=skill_id)
    if request.user.has_perm('skills.skill_publicize', skill):
        if skill.is_draft:
            skill.is_draft = False
            messages.info(request, 'The skill is now public')
        else:
            skill.is_draft = True
            messages.success(request, 'Reverted skill to draft status')
        skill.save()
    else:
        messages.error(request, 'You do not have permission to make this skill public')

    return HttpResponseRedirect(skill.get_absolute_url())
Example #13
0
def skill_publicize(request, skill_id):
    skill = get_object_or_404(Skill, pk=skill_id)
    if request.user.has_perm('skills.skill_publicize', skill):
        if skill.is_draft:
            skill.is_draft = False
            messages.info(request, 'The skill is now public')
        else:
            skill.is_draft = True
            messages.success(request, 'Reverted skill to draft status')
        skill.save()
    else:
        messages.error(request,
                       'You do not have permission to make this skill public')

    return HttpResponseRedirect(skill.get_absolute_url())
Example #14
0
def skill_recommend(request, skill_id):
    skill = get_object_or_404(Skill, pk=skill_id)
    if request.user.has_perm('skills.recommend_skill', skill):
        if skill.is_recommended:
            skill.is_recommended = False
            messages.info(request, 'The skill is no longer recommended')
        else:
            skill.is_recommended = True
            messages.success(request, 'Successfully recommended skill')
        skill.save()
        return HttpResponseRedirect(skill.get_absolute_url())
    else:
        messages.error(request,
                       'You do not have permission to recommend this skill')
        return HttpResponseRedirect(skill.get_absolute_url())
Example #15
0
def user_upgrade_to_trainer(request, user_id):
    user = User.objects.get(id__exact=user_id)

    if request.user.is_admin:
        g = Group.objects.get(name='Trainers')
        g.user_set.add(user)

        messages.success(
            request,
            'Successfully upgraded %s to be a trainer.' % user.username)
    else:
        messages.error(request,
                       'You do not have permissions to upgrade this user.')

    return HttpResponseRedirect(reverse('profile', args=[user_id]))
Example #16
0
def trainingbit_recommend(request, trainingbit_id):
    trainingbit = get_object_or_404(TrainingBit, pk=trainingbit_id)
    if request.user.has_perm('skills.recommend_trainingbit', trainingbit):
        if trainingbit.is_recommended:
            trainingbit.is_recommended = False
            messages.info(request, 'The training bit is no longer recommended')
        else:
            trainingbit.is_recommended = True
            messages.success(request, 'Successfully recommended training bit')
        trainingbit.save()
        return HttpResponseRedirect(trainingbit.get_absolute_url())
    else:
        messages.error(
            request,
            'You do not have permission to recommend this training bit')
        return HttpResponseRedirect(trainingbit.get_absolute_url())
Example #17
0
def comment_post(request):
    if request.method == 'POST':  # If the form has been submitted...
        form = CommentForm(request.POST)
        if form.is_valid():
            # Save
            comment = form.save(commit=False)
            comment.author = request.user
            project = comment.project
            if 'parent_pk' in request.POST:
                comment.parent = Comment.objects.get(
                    pk__exact=request.POST['parent_pk'])
            # comment.project = project
            comment.save()
            if request.is_ajax():
                comment_html = render_to_string(
                    'skills/partials/comment_entry.html', {
                        'comment': comment,
                    })
                # return rendered:
                # * comment
                d = {
                    'comment_html': comment_html,
                }
                # The 201 HTTP status code is from my reading of the standard
                # the # correct response to a POST which successfully created a
                # new object.
                # See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.2
                return HttpResponse(json.dumps(d),
                                    content_type='application/json',
                                    status=201)
            else:
                messages.success(request, 'Comment was successfully saved')
        else:
            messages.error(request,
                           'Comment could not be saved: %s' % form.errors)

        try:
            return HttpResponseRedirect(project.get_absolute_url())
        except UnboundLocalError:
            return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

    return HttpResponseRedirect(reverse('front_page'))
Example #18
0
def topic_delete(request, topic_pk):
    topic = get_object_or_404(Topic, pk=topic_pk)

    # if request.method == 'POST':

    if request.user.has_perm('skills.delete_topic', topic):
        topic.delete()
        if request.is_ajax():
            d = {'message': 'Topic was deleted'}
            return HttpResponse(json.dumps(d), content_type='application/json', status=201)
        else:
            messages.success(request, 'Topic was successfully deleted')
            return HttpResponseRedirect(reverse('trainer_dashboard'))
    else:
        # User doesn't have permission
        if request.is_ajax():
            return HttpResponse(json.dumps(form.errors), content_type='application/json', status=404)
        else:
            messages.error(request, 'You don\'t have permission to delete this topic')
            return HttpResponseRedirect(reverse('trainer_dashboard'))
Example #19
0
def like(request):
    if request.method == 'POST':  # If the form has been submitted...
        like = Like.objects.filter(object_id=request.POST['object_id'],
                                   content_type=request.POST['content_type'],
                                   author__pk=request.user.pk)
        if like.exists():
            like.delete()
            if request.is_ajax():
                d = {'success': 'SUCCESS!!!!11'}
                return HttpResponse(json.dumps(d),
                                    content_type='application/json',
                                    status=201)
            else:
                messages.info(request,
                              'You no longer like this %s' % like.content_type)
                return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
        else:
            like = Like(author=request.user)
            form = LikeForm(request.POST, instance=like)
            if form.is_valid():
                like = form.save(commit=False)
                like.author = request.user
                like.save()
                if request.is_ajax():
                    d = {'success': 'SUCCESS!!!!11'}
                    return HttpResponse(json.dumps(d),
                                        content_type='application/json',
                                        status=201)
                else:
                    messages.success(request, 'Like absorbed')
                    return HttpResponseRedirect(
                        request.META.get('HTTP_REFERER'))
            else:
                messages.error(request, 'Form invalid %s' % form.errors)
                return HttpResponse(json.dumps(form.errors),
                                    content_type='application/json',
                                    status=404)
    else:
        messages.error(request, 'Did not like')
        return HttpResponseRedirect(request.META.get('HTTP_REFERER'))
Example #20
0
def comment_post(request):
    if request.method == 'POST': # If the form has been submitted...
        form = CommentForm(request.POST)
        if form.is_valid():
            # Save
            comment = form.save(commit=False)
            comment.author = request.user
            project = comment.project
            print(request.POST)
            if 'parent_pk' in request.POST:
                comment.parent = Comment.objects.get(pk__exact=request.POST['parent_pk'])
            # comment.project = project
            comment.save()
            if request.is_ajax():
                comment_html = render_to_string('skills/partials/comment_entry.html', {
                    'comment': comment,
                })
                # return rendered:
                # * comment
                d = {
                    'comment_html': comment_html,
                }
                # The 201 HTTP status code is from my reading of the standard
                # the # correct response to a POST which successfully created a
                # new object.
                # See: http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2.2
                return HttpResponse(json.dumps(d), content_type='application/json', status=201)
            else:
                messages.success(request, 'Comment was successfully saved')
        else:
            messages.error(request, 'Comment could not be saved: %s' % form.errors)

        try:
            return HttpResponseRedirect(project.get_absolute_url())
        except UnboundLocalError:
            return HttpResponseRedirect(request.META.get('HTTP_REFERER'))

    return HttpResponseRedirect(reverse('front_page'))
Example #21
0
def skill_edit(request, slug=None):

    skill = None
    selected_topic_pks = []
    form = SkillForm()

    if slug is not None:
        skill = get_object_or_404(Skill, slug=slug)
        selected_topic_pks = [t.pk for t in skill.topic_set.all()]
        form = SkillForm(instance=skill)


    # If something has been uploaded
    if request.method == 'POST':
        form = SkillForm(request.POST, request.FILES, instance=skill)
        if form.is_valid():
            skill = form.save(commit=False)
            try:
                hasattr(skill, 'author')
            except User.DoesNotExist:
                skill.author = request.user
            skill.save()

            # Add trainingbits (ORDER IS IMPORTANT HERE)
            selected_trainingbit_pos_pk = request.POST.getlist('trainingbit-pos-pk[]')
            pos_pk = [v.split(',') for v in selected_trainingbit_pos_pk]
            pos = [int(p[0].strip()) for p in pos_pk]
            pks = [int(p[1].strip()) for p in pos_pk]
            tb_dict = TrainingBit.objects.in_bulk(pks)

            # - Sort trainingbit primary keys by position
            sorted_pos_pk_list = sorted(zip(pos,pks))

            # - Make an ordered list of trainingbits
            tbs = []
            for pos, pk in sorted_pos_pk_list:
                tbs.append(tb_dict[pk])

            # - Set the training bits to only the ones chosen on the page
            skill.trainingbits.clear()
            skill.trainingbits.add(*tbs)

            # Add topics
            selected_topic_pks = request.POST.getlist('topic-pks[]')
            selected_topic_pks = [int(s) for s in selected_topic_pks]
            print(selected_topic_pks)
            topics = Topic.objects.filter(pk__in=selected_topic_pks)
            print(topics)
            skill.topic_set.clear()
            skill.topic_set.add(*topics)

            messages.success(request, 'Successfully saved skill')

            return HttpResponseRedirect(reverse('skills:skill_edit', args=[skill.slug]))
        else:
            messages.error(request, 'Could not save skill %s ' % form.errors)

    if skill is None:
        trainingbits_chosen    = []
        trainingbits_available = TrainingBit.objects.filter(is_draft=False)
    else:
        trainingbits_chosen    = skill.trainingbits.all() #.extra(order_by=['sort_value'])
        trainingbits_available = TrainingBit.objects.filter(is_draft=False).exclude(id__in=trainingbits_chosen.values('id')).extra(order_by=['name'])

    try:
        training_bit_ids = list(map(lambda t: t.id, skill.trainingbits.all()))
    except AttributeError:
        training_bit_ids = []

    # suggested_trainingbits = trainingbits.exclude(id__in=request.user.trainingbits_completed.all())

    return render(request, 'skills/skill_edit.html', {
        'skill': skill,
        'trainingbits_chosen': trainingbits_chosen,
        'trainingbits_available': trainingbits_available,
        'topics': Topic.objects.all(),
        'selected_topic_pks': selected_topic_pks,
        'form': form,
    })
Example #22
0
def skill_edit(request, slug=None):

    skill = None
    selected_topic_pks = []
    form = SkillForm()

    if slug is not None:
        skill = get_object_or_404(Skill, slug=slug)
        selected_topic_pks = [t.pk for t in skill.topic_set.all()]
        form = SkillForm(instance=skill)

    # If something has been uploaded
    if request.method == 'POST':
        form = SkillForm(request.POST, request.FILES, instance=skill)
        if form.is_valid():
            skill = form.save(commit=False)
            try:
                hasattr(skill, 'author')
            except User.DoesNotExist:
                skill.author = request.user
            skill.save()

            # Add trainingbits (ORDER IS IMPORTANT HERE)
            selected_trainingbit_pos_pk = request.POST.getlist(
                'trainingbit-pos-pk[]')
            pos_pk = [v.split(',') for v in selected_trainingbit_pos_pk]
            pos = [int(p[0].strip()) for p in pos_pk]
            pks = [int(p[1].strip()) for p in pos_pk]
            tb_dict = TrainingBit.objects.in_bulk(pks)

            # - Sort trainingbit primary keys by position
            sorted_pos_pk_list = sorted(zip(pos, pks))

            # - Make an ordered list of trainingbits
            tbs = []
            for pos, pk in sorted_pos_pk_list:
                tbs.append(tb_dict[pk])

            # - Set the training bits to only the ones chosen on the page
            skill.trainingbits.clear()
            skill.trainingbits.add(*tbs)

            # Add topics
            selected_topic_pks = request.POST.getlist('topic-pks[]')
            selected_topic_pks = [int(s) for s in selected_topic_pks]
            topics = Topic.objects.filter(pk__in=selected_topic_pks)
            skill.topic_set.clear()
            skill.topic_set.add(*topics)

            messages.success(request, 'Successfully saved skill')

            return HttpResponseRedirect(
                reverse('skills:skill_edit', args=[skill.slug]))
        else:
            messages.error(request, 'Could not save skill %s ' % form.errors)

    if skill is None:
        trainingbits_chosen = []
        trainingbits_available = TrainingBit.objects.filter(is_draft=False)
    else:
        trainingbits_chosen = skill.trainingbits.all(
        )  #.extra(order_by=['sort_value'])
        trainingbits_available = TrainingBit.objects.filter(
            is_draft=False).exclude(
                id__in=trainingbits_chosen.values('id')).extra(
                    order_by=['name'])

    try:
        training_bit_ids = list(map(lambda t: t.id, skill.trainingbits.all()))
    except AttributeError:
        training_bit_ids = []

    # suggested_trainingbits = trainingbits.exclude(id__in=request.user.trainingbits_completed.all())

    return render(
        request, 'skills/skill_edit.html', {
            'skill': skill,
            'trainingbits_chosen': trainingbits_chosen,
            'trainingbits_available': trainingbits_available,
            'topics': Topic.objects.all(),
            'selected_topic_pks': selected_topic_pks,
            'form': form,
        })