def reply(request, question_id): """Post a new answer to a question.""" question = get_object_or_404(Question, pk=question_id, is_spam=False) answer_preview = None if not question.allows_new_answer(request.user): raise PermissionDenied form = AnswerForm(request.POST, **{"user": request.user, "question": question}) # NOJS: delete images if "delete_images" in request.POST: for image_id in request.POST.getlist("delete_image"): ImageAttachment.objects.get(pk=image_id).delete() return question_details(request, question_id=question_id, form=form) # NOJS: upload image if "upload_image" in request.POST: upload_imageattachment(request, request.user) return question_details(request, question_id=question_id, form=form) if form.is_valid() and not request.limited: answer = Answer( question=question, creator=request.user, content=form.cleaned_data["content"], ) if "preview" in request.POST: answer_preview = answer else: if form.cleaned_data.get("is_spam"): _add_to_moderation_queue(request, answer) else: answer.save() ans_ct = ContentType.objects.get_for_model(answer) # Move over to the answer all of the images I added to the # reply form user_ct = ContentType.objects.get_for_model(request.user) up_images = ImageAttachment.objects.filter(creator=request.user, content_type=user_ct) up_images.update(content_type=ans_ct, object_id=answer.id) # Handle needsinfo tag if "needsinfo" in request.POST: question.set_needs_info() elif "clear_needsinfo" in request.POST: question.unset_needs_info() if Setting.get_for_user(request.user, "questions_watch_after_reply"): QuestionReplyEvent.notify(request.user, question) return HttpResponseRedirect(answer.get_absolute_url()) return question_details( request, question_id=question_id, form=form, answer_preview=answer_preview )
def answer_preview_async(request): """Create an HTML fragment preview of the posted wiki syntax.""" answer = Answer(creator=request.user, content=request.POST.get("content", "")) template = "questions/includes/answer_preview.html" return render(request, template, {"answer_preview": answer})
def answer(**kwargs): defaults = dict(created=datetime.now(), content='') defaults.update(kwargs) if 'question' not in kwargs and 'question_id' not in kwargs: defaults['question'] = question(save=True) if 'creator' not in kwargs and 'creator_id' not in kwargs: defaults['creator'] = user(save=True) return Answer(**defaults)
def users(request): """Returns list of user karma information. GET paramaters: * daterange - 7d, 1m, 3m, 6m or 1y (default: 1y) * sort - field to sort on (default: points). Order is always descending. * page - starts at 1 (default: 1) * pagesize - (default: 100) Returns list of objects with the following fields: userid, username, points, <action_types> """ form = UserAPIForm(request.GET) if not form.is_valid(): return {'success': False, 'errors': form.errors} daterange = form.cleaned_data.get('daterange') or '1y' sort = form.cleaned_data.get('sort') or 'points' page = form.cleaned_data.get('page') or 1 pagesize = form.cleaned_data.get('pagesize') or 100 mgr = KarmaManager() users = mgr.top_users(daterange, type=sort, count=pagesize, offset=(page - 1) * pagesize) or [] now = datetime.now() action_types = KarmaManager.action_types.keys() schema = ['id', 'username', 'lastactivity', 'points'] + action_types user_list = [] for u in users: user = [u.id, u.username] last_activity = Answer.last_activity_for(u) user.append((now - last_activity).days if last_activity else None) user.append(mgr.count(daterange, u, type='points')) for t in action_types: user.append(mgr.count(daterange, u, type=t)) user_list.append(user) return { 'success': True, 'results': user_list, 'schema': schema}
def users(request): """Returns list of user karma information. GET paramaters: * daterange - 7d, 1m, 3m, 6m or 1y (default: 1y) * sort - field to sort on (default: points). Order is always descending. * page - starts at 1 (default: 1) * pagesize - (default: 100) Returns list of objects with the following fields: userid, username, points, <action_types> """ form = UserAPIForm(request.GET) if not form.is_valid(): return {'success': False, 'errors': form.errors} daterange = form.cleaned_data.get('daterange') or '1y' sort = form.cleaned_data.get('sort') or 'points' page = form.cleaned_data.get('page') or 1 pagesize = form.cleaned_data.get('pagesize') or 100 mgr = KarmaManager() users = mgr.top_users( daterange, type=sort, count=pagesize, offset=(page - 1) * pagesize) or [] now = datetime.now() action_types = KarmaManager.action_types.keys() schema = ['id', 'username', 'lastactivity', 'points'] + action_types user_list = [] for u in users: user = [u.id, u.username] last_activity = Answer.last_activity_for(u) user.append((now - last_activity).days if last_activity else None) user.append(mgr.count(daterange, u, type='points')) for t in action_types: user.append(mgr.count(daterange, u, type=t)) user_list.append(user) return {'success': True, 'results': user_list, 'schema': schema}