def award_points(request, answer_id, queryset=Answer.objects.all()): """ do transfer point from question's author to answerer """ answer = get_object_or_404(queryset, id=answer_id) if request.user == answer.author: raise Http404(_(u'You can not award yourself!')) elif answer.question.author != request.user: raise Http404(_(u'This is not your question!')) elif answer.question.bounty_points: points = answer.question.bounty_points reason=ugettext(u'Award points to answer: %(answer)s') % {'answer': answer } try: UnitPack.consume(request.user, quantity=points, reason=reason) except ValueError, msg: url = construct_main_site_url(reverse('prepaid-index', urlconf=settings.MUACCOUNTS_MAIN_URLCONF)) if request.is_ajax(): data = simplejson.dumps({'not_enough_credits': '1', 'available_credits': UnitPack.get_user_credits(request.user), 'required_credits': points, 'awarded': '0'}) return HttpResponse(data, mimetype="application/json") else: return HttpResponseRedirect(url) else: UnitPack.credit(answer.author, quantity=points, reason=reason) PointAward(answer=answer, points=points).save() if request.is_ajax(): data = simplejson.dumps({'not_enough_credits': '0', 'awarded': '1'}) return HttpResponse(data, mimetype="application/json") else: return redirect(answer)
def ask(request, form_class=MuAskForm, template_name='ask.html'): if request.method == "POST": form = form_class(request.POST) if request.muaccount.is_bounty: form.fields['bounty_points'].max_value = UnitPack.get_user_credits(request.user) if form.is_valid(): question = form.save(request) return redirect(question) else: form = form_class() if request.muaccount.is_bounty: form.fields['bounty_points'].max_value = UnitPack.get_user_credits(request.user) tags = _get_tags_cache_json(queryset=Tag.objects.filter(deleted=False, questions__muaccount=request.muaccount)) return render_to_response(template_name, { 'form': form, 'tags': tags, }, context_instance=RequestContext(request))
def activity_site_advertise(request, object_id): obj = get_object_or_404(Activity, pk=object_id, user=request.user, published=True).derived if request.method == 'POST' and not obj.date_site_advertised: # Publish to site's twitter profile # obj.site_advertise() site_twitter = get_site_twitter_info(obj) cost = site_twitter['cost'] need = cost - UnitPack.get_user_credits(request.user) if need <= 0: msg = 'Posted to %s\'s twitter profile' % site_twitter['user'] global_tweet(obj.message) if cost > 0: UnitPack.consume(request.user, cost, reason=msg) request.user.message_set.create(message=msg) obj.date_site_advertised = datetime.datetime.now() obj.save() else: request.user.message_set.create(message='Sorry, you need %s more points' % need) return HttpResponseRedirect(obj.get_manage_url())
def task_create(request): form_class = AddTaskForm if request.method == 'POST': form = form_class(request.POST, request.FILES) if form.is_valid(): budget = form.cleaned_data['budget'] if budget > UnitPack.get_user_credits(request.user): form.errors['budget'] = ['Your budget cannot be higher than your current points'] else: task = form.save(commit=False) task.user = request.user task.budget = budget task.save() task.tags = form.cleaned_data['tags'] if form.cleaned_data['attachment']: task.attach(form.cleaned_data['attachment']) if task.budget > 0: UnitPack.consume(request.user, budget, reason=BUDGET_REASON % {'task':task.name}) return redirect('tasks-task_setup', task.id) else: form = form_class(initial=_get_and_delete_form_data(request)) return {'form':form}
def show_user_credits(user): return UnitPack.get_user_credits(user)
def task_do(request, object_id): task = get_object_or_404(Task, pk=object_id, published=True) if task.is_expired(): return _activity_expired(request, task) # Create or retrieve achievement achievement = None remaining = task.get_chances_remaining(request.user) try: achievement = Achievement.objects.get(user=request.user, task=task, complete=False) if achievement.is_expired: # Reset achievement time as long as there is room on the waiting list if remaining > 0: achievement.date_started = datetime.datetime.now() else: request.user.message_set.create(message='Sorry, your time to complete this task has run out.') return redirect('tasks-task_detail', task.id) except Achievement.DoesNotExist: if remaining > 0: a = Achievement() a.task = task a.user = request.user a.save() achievement = a if not achievement: request.user.message_set.create(message='Sorry, you can\'t do that.') if request.method == 'POST': try: questions = task.questions.all() modified = [] errors = [] for form_id, question in zip(range(1, questions.count()+1), questions): typ = question.type data = question.data error = None if typ == 'poll': choices = map(int, request.POST.getlist('choice%s' % form_id)) for choice in choices: data['answers'][choice]['count'] += 1 elif typ == 'text': answer = request.POST['answer%s' % form_id].strip() if len(answer): data['answers'].append(answer) else: error = 'You must answer the question!' else: error = 'Invalid Task' """ elif typ == TaskType.QUIZ: choice = int(request.POST['choice']) if choice != data['answer']: error = 'Sorry, you answered incorrectly.' elif typ == TaskType.POST: request.twitter.set_status(data['message']) """ if error: errors.append(error) question.error = error else: question.data = data modified.append(question) if errors: # FIXME: Delete achievement and form if theres an error?? # Maybe it should reload the form with info filled in somehow #achievement.delete() #return redirect('tasks-task_detail', task.id) return {'task':task, 'questions':modified} else: # No errors, yay! for m in modified: m.save() task.budget -= task.points task.save() achievement.complete = True achievement.save() if task.points > 0: UnitPack.credit(request.user, task.points, reason=COMPLETED_REASON % {'task':task.name}) request.user.message_set.create(message='You earned %s points. How exciting!' % task.points) else: request.user.message_set.create(message='You didn\'t earn any points. But at least you had fun!') return redirect('tasks-task_detail', task.id) except KeyError, e: request.user.message_set.create(message='Error: Please complete all required fields')
def delete(self): if self.budget > 0: UnitPack.credit(self.user, self.budget) super(Task, self).delete()