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'))
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'))
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())
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, })
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'))
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]))
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, })
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())
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())
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())
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]))
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())
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'))
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'))
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'))
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, })
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, })