def update_content_ajax(request): site_response = AjaxServiceResponse(success=False, message="whoops", message_description='No go. Try again later.') if (request.user.has_perm('UPDATE_ALL_CONTENT')): try: if request.method == 'POST': content_id = (request.POST.get('content-id', None)) commentary = sanitizeDescriptionHtml(request.POST.get('commentary', None)) if (commentary): commentary_user_id = request.user.reckoner_id else: commentary_user_id = None title = purgeHtml(request.POST.get('title', None)) body = request.POST.get('body', None) summary = request.POST.get('summary', None) tag_csv = purgeHtml(request.POST.get('tags', None)) media_id = (request.POST.get('media-id', None)) media_url = (request.POST.get('url', None)) media_type = (request.POST.get('media-type', None)) name = (request.POST.get('name', None)) url = (request.POST.get('url', None)) duration = (request.POST.get('duration', None)) if ((commentary and len(commentary) > 3000) or (title and len(title) > 300) or (body and len(body) > 50000) or (tag_csv and len(tag_csv) > 200) or (summary and len(summary) > 4000)): site_response = AjaxServiceResponse(success=False, message="too_long", message_description="Saved field is too long.") elif (url is not None) and not verifyUrl(url): site_response = AjaxServiceResponse(success=False, message="bad_media_url", message_description="Specified Media URL is invalid.") elif ((name is not None and name == "") or (duration is not None and duration == "")): site_response = AjaxServiceResponse(success=False, message="missing_required_field", message_description="Missing Required Field.") elif (content_id): if (media_id and url): media_items = [Media(id = media_id, media_type=media_type, name=name, url=url, file_type=getUrlMimeType(url), duration=duration, size=getUrlDownloadSize(url))] else: media_items = None contentUpdate = Content(id=content_id, commentary=commentary, commentary_user_id=commentary_user_id, media_items=media_items, summary=summary, title=title, body=body, tag_csv=tag_csv) service_response = client_update_content(contentUpdate, request.user.session_id) if (service_response.success): site_response = AjaxServiceResponse(success=True, message="success", message_description="Updated!") except Exception: logger.error("Exception when updating content:") logger.error(traceback.print_exc(8)) return HttpResponse(site_response.getXMLString())
def reckoning_approval_page(request): if request.user.has_perm('APPROVAL'): try: reckoningQueueFormPrefix = "reckqueue" approveReckoningFormPrefix = "reckapp" errors={} if request.method == 'POST': if 'getreck' in request.POST: pendingReckonings = client_get_reckoning_approval_queue(request.user.session_id) reckoningQueueForm = ReckoningQueueForm(request.POST, prefix=reckoningQueueFormPrefix, reckonings=pendingReckonings.reckonings) if (reckoningQueueForm.is_valid()): reckoningId = reckoningQueueForm.cleaned_data.get('pendingselect') request.session["admin_approve_reckoning"] = reckoningId else: for attr, value in reckoningQueueForm.errors.iteritems(): errors[attr] = value elif ('save' in request.POST) or ('approve' in request.POST): approveReckoningForm = ApproveReckoningForm(request.POST, prefix=approveReckoningFormPrefix) if (approveReckoningForm.is_valid()): if (approveReckoningForm.cleaned_data['edit_commentary']): commentary = sanitizeDescriptionHtml(approveReckoningForm.cleaned_data['commentary'].strip()) commentary_user_id = request.user.reckoner_id else: commentary = settings.RECKONING_UPDATE_DELETE_SENTINEL commentary_user_id = settings.RECKONING_UPDATE_DELETE_SENTINEL if (approveReckoningForm.cleaned_data['description']): description = sanitizeDescriptionHtml(approveReckoningForm.cleaned_data['description']) else: description = settings.RECKONING_UPDATE_DELETE_SENTINEL answers = [Answer(index=0), Answer(index=1)] for key, attr in approveReckoningForm.cleaned_data.iteritems(): if (key.startswith("answer")): index = key.split('_')[1] answers[int(index)-1].text = purgeHtml(attr) elif (key.startswith("subtitle")): index = key.split('_')[1] answers[int(index)-1].subtitle = purgeHtml(attr) media = [] if (request.POST.get('attached-files', None)): urls = request.POST.get('attached-files', None).split(";") for url in urls: media.append(parseReckoningImageFromUploadUrl(url)) savedReckoning=Reckoning(id=request.session["admin_approve_reckoning"], question=purgeHtml(approveReckoningForm.cleaned_data['question']), description=description, answers=answers, interval=approveReckoningForm.cleaned_data['interval'], highlighted=approveReckoningForm.cleaned_data['highlighted'], commentary=commentary, commentary_user_id=commentary_user_id, tag_csv=purgeHtml(approveReckoningForm.cleaned_data['tags']), media_items=media) response = client_update_reckoning(savedReckoning, request.user.session_id) if (not response.success): logger.error("Error when updating a Reckoning: " + response.message) messages.error(request, "Failed to save reckoning " + request.session["admin_approve_reckoning"]) else: messages.info(request, "Saved reckoning " + request.session["admin_approve_reckoning"] + "!") if ('approve' in request.POST): response = client_approve_reckoning(request.session["admin_approve_reckoning"], request.user.session_id) if (not response.success): logger.error("Error when approving a Reckoning: " + response.message) messages.error(request, "Failed to approve reckoning " + request.session["admin_approve_reckoning"]) else: messages.info(request, "Approved reckoning " + request.session["admin_approve_reckoning"] + "!") request.session["admin_approve_reckoning"] = None else: for attr, value in approveReckoningForm.errors.iteritems(): errors[attr] = value elif 'reject' in request.POST: response = client_reject_reckoning(request.session["admin_approve_reckoning"], request.user.session_id) if (not response.success): logger.error("Error when rejecting a Reckoning: " + response.message) messages.error(request, "Failed to approve reckoning " + request.session["admin_approve_reckoning"]) else: messages.info(request, "Rejected reckoning " + request.session["admin_approve_reckoning"] + "!") request.session["admin_approve_reckoning"] = None pendingReckonings = client_get_reckoning_approval_queue(request.user.session_id) reckoningQueueForm = ReckoningQueueForm(prefix=reckoningQueueFormPrefix, reckonings=pendingReckonings.reckonings) currentReckoning = None approveReckoningForm = None postingUser = None reckoningId = request.session.get('admin_approve_reckoning', None) if (reckoningId): reckoningResponse = client_get_reckoning(reckoningId, request.user.session_id, True) if (reckoningResponse.status.success and len(reckoningResponse.reckonings) > 0): currentReckoning=reckoningResponse.reckonings[0] postingUser = reckonerauthbackend.get_user(request.user.session_id, currentReckoning.submitter_id) approveReckoningForm = ApproveReckoningForm(prefix=approveReckoningFormPrefix,reckoning=currentReckoning) else: request.session['admin_approve_reckoning'] = None c = RequestContext(request, {'reckoningQueueForm': reckoningQueueForm, 'approveReckoningForm' : approveReckoningForm, 'currentReckoning' : currentReckoning, 'postingUser' : postingUser, 'errors' : errors}) return render_to_response('approve_reckonings.html', c) except Exception: logger.error("Exception when rending reckoning approval screen:") logger.error(traceback.print_exc(8)) raise Exception else: return HttpResponseRedirect('/')