def add_platform(request): if not request.user.is_authenticated() or not request.user.is_active: return HttpResponse(simplejson.dumps({'FAIL': True}), mimetype='application/json') if request.method == 'POST': ctype = request.POST[u'ctype'] object_pk = request.POST[u'object_pk'] pd = PlatformDimension.objects.get(pk=ctype) pl, is_new = Platform.objects.get_or_create(user=request.user, dimension=pd) #hehe planck_length = len(pl.planks) if planck_length < pd.num_planks and object_pk not in pl.planks: pl.planks.append(object_pk) pl.save() update_agent.send(sender=pl, type="user", params=[request.user.pk]) results = {'FAIL': False, 'complete_perc': str(int((planck_length + 1) / float(pd.num_planks) * 100)) + '%'} else: results = {'FAIL': True} else: results = {'FAIL': True} if 'application/json' in request.META.get('HTTP_ACCEPT', ''): return HttpResponse(simplejson.dumps(results), mimetype='application/json')
def remove_platform(request): if not request.user.is_authenticated() or not request.user.is_active: return HttpResponse(simplejson.dumps({'FAIL': True}), mimetype='application/json') if request.method == 'POST': ctype = request.POST[u'ctype'] object_pk = request.POST[u'object_pk'] pd = PlatformDimension.objects.get(pk=ctype) pl, is_new = Platform.objects.get_or_create(user=request.user, dimension=pd) pl.planks.remove(object_pk) pl.save() update_agent.send(sender=pl, type="user", params=[request.user.pk]) results = { 'FAIL': False, 'complete_perc': str(int(len(pl.planks) / float(pd.num_planks) * 100)) + '%' } else: results = {'FAIL': True} if 'application/json' in request.META.get('HTTP_ACCEPT', ''): return HttpResponse(simplejson.dumps(results), mimetype='application/json')
def confirm(request, key): if request.user.is_authenticated(): return redirect("/") user_profile = get_object_or_404(EmailVerification, activation_key=key) if user_profile.key_expires < datetime.datetime.today(): return redirect("/p/expired") user_account = user_profile.user user_account.is_active = True user_account.save() update_agent.send(sender=user_account, type="user", params=[user_account.pk]) return redirect("/p/confirm")
def confirm(request, key): if request.user.is_authenticated(): return redirect("/") user_profile = get_object_or_404(EmailVerification, activation_key=key) if user_profile.key_expires < datetime.datetime.today(): return redirect("/p/expired") user_account = user_profile.user user_account.is_active = True user_account.save() update_agent.send(sender=user_account, type="user", params=[user_account.pk]) return redirect("/p/confirm")
def vote(request, pk, vote, votemodel, vote_type_str, register): consensus = Consensus.objects.get(object_pk=pk) cnt = ContentType.objects.get_for_model(User) user_cons, is_new = Consensus.objects.get_or_create(content_type=cnt, object_pk=consensus.content_object.user.pk, parent_pk=consensus.content_object.user.pk, vote_type=cnt) if is_new: user_cons.intiate_vote_distributions() user_cons.spectrum.get_list() if vote == -99: st = votemodel.objects.get(user=request.user, object_pk=pk) # register reputation for voting if register: user_cons.register_vote(st, 'delete', old_vote=st.vote) aso_rep_delete.send(sender=request.user, event_score=1, user=consensus.content_object.user, initiator=request.user, dimension=ReputationDimension.objects.get('Vote'), related_object=st, is_vote=True) consensus.register_vote(st, 'delete', old_vote=st.vote) update_agent.send(sender=user_cons, type="vote", params=[vote_type_str, st.pk]) st.delete() else: try: #TODO: there is an error happening here! old = votemodel.objects.get(user=request.user, object_pk=pk) if old.vote != vote: old_vote_pos = old.vote old.vote = vote old.save() if register: user_cons.register_vote(old, 'change', old_vote=old_vote_pos) vote_created_callback(sender=request.session.session_key, parent=consensus, vote_type=vote) consensus.register_vote(old, 'change', old_vote=old_vote_pos) except: st, is_new = votemodel.objects.get_or_create(user=request.user, parent=consensus, vote=vote, object_pk=pk, parent_pk=consensus.parent_pk) st.save() check_badges(consensus.content_object.user, votemodel, pk) # register reputation for voting vote_created_callback(sender=request.session.session_key, parent=consensus, vote_type=vote) if register: aso_rep_event.send(sender=request.user, event_score=1, user=consensus.content_object.user, initiator=request.user, dimension=ReputationDimension.objects.get('Vote'), related_object=st, is_vote=True) user_cons.register_vote(st, 'register') consensus.register_vote(st, 'register') update_agent.send(sender=user_cons, type="vote", params=[vote_type_str, st.pk])
def remove_platform(request): if not request.user.is_authenticated() or not request.user.is_active: return HttpResponse(simplejson.dumps({"FAIL": True}), mimetype="application/json") if request.method == "POST": ctype = request.POST[u"ctype"] object_pk = request.POST[u"object_pk"] pd = PlatformDimension.objects.get(pk=ctype) pl, is_new = Platform.objects.get_or_create(user=request.user, dimension=pd) pl.planks.remove(object_pk) pl.save() update_agent.send(sender=pl, type="user", params=[request.user.pk]) results = {"FAIL": False, "complete_perc": str(int(len(pl.planks) / float(pd.num_planks) * 100)) + "%"} else: results = {"FAIL": True} if "application/json" in request.META.get("HTTP_ACCEPT", ""): return HttpResponse(simplejson.dumps(results), mimetype="application/json")
def vote(request, pk, vote, votemodel, vote_type_str, register): consensus = Consensus.objects.get(object_pk=pk) cnt = ContentType.objects.get_for_model(User) user_cons, is_new = Consensus.objects.get_or_create( content_type=cnt, object_pk=consensus.content_object.user.pk, parent_pk=consensus.content_object.user.pk, vote_type=cnt) if is_new: user_cons.intiate_vote_distributions() user_cons.spectrum.get_list() if vote == -99: st = votemodel.objects.get(user=request.user, object_pk=pk) # register reputation for voting if register: user_cons.register_vote(st, 'delete', old_vote=st.vote) aso_rep_delete.send( sender=request.user, event_score=1, user=consensus.content_object.user, initiator=request.user, dimension=ReputationDimension.objects.get('Vote'), related_object=st, is_vote=True) consensus.register_vote(st, 'delete', old_vote=st.vote) update_agent.send(sender=user_cons, type="vote", params=[vote_type_str, st.pk]) st.delete() else: try: #TODO: there is an error happening here! old = votemodel.objects.get(user=request.user, object_pk=pk) if old.vote != vote: old_vote_pos = old.vote old.vote = vote old.save() if register: user_cons.register_vote(old, 'change', old_vote=old_vote_pos) vote_created_callback(sender=request.session.session_key, parent=consensus, vote_type=vote) consensus.register_vote(old, 'change', old_vote=old_vote_pos) except: st, is_new = votemodel.objects.get_or_create( user=request.user, parent=consensus, vote=vote, object_pk=pk, parent_pk=consensus.parent_pk) st.save() check_badges(consensus.content_object.user, votemodel, pk) # register reputation for voting vote_created_callback(sender=request.session.session_key, parent=consensus, vote_type=vote) if register: aso_rep_event.send( sender=request.user, event_score=1, user=consensus.content_object.user, initiator=request.user, dimension=ReputationDimension.objects.get('Vote'), related_object=st, is_vote=True) user_cons.register_vote(st, 'register') consensus.register_vote(st, 'register') update_agent.send(sender=user_cons, type="vote", params=[vote_type_str, st.pk])
def pp_blob_form(context, nodelist, *args, **kwargs): '''form_id = forms.CharField(widget=forms.HiddenInput(), initial="pp-issue-form") This block tag can create or process forms either to create or to modify issues. Usage is as follows: {% pp_blob_form POST=request.POST path=request.path parent=request.object %} Do stuff with {{ pp-issue.form }}. {% endpp_blob_form %} This form has become a little overloaded. ''' context.push() namespace = get_namespace(context) POST = kwargs.get('POST', None) parent = kwargs.get('parent', None) user = kwargs.get('user', None) dimension = kwargs.get('dimension', None) obj = kwargs.get('object', None) edit = kwargs.get('edit', None) #subcontext imparted to form namespace['timezones'] = pytz.common_timezones #for editting objects if edit and obj is not None: blob_form, model, verbose_name = get_form(dimension) blob_form = BlobEditForm if POST: #save editted form form = blob_form(POST, auto_id='id_for_%s_' + str(obj.pk), prefix=user.username) #get info for diff old_text = obj.description if form.is_valid(): #blob = form.save(commit=False) obj.description = form.cleaned_data['description'] obj.summary = form.cleaned_data['summary'] #blob.description = urlize(blob.description, trim_url_limit=30, nofollow=True) obj.save() new_text = form.cleaned_data['description'] #create edit ctype = ContentType.objects.get_for_model(obj) #compute diff using diff_match_patch from google create_edit.apply_async(args=[obj.pk, user.pk, ctype.pk, new_text, old_text]) namespace['form_complete'] = True namespace['path'] = obj namespace['form'] = form else: namespace['errors'] = form.errors namespace['form'] = form else: form = blob_form(initial={'summary': obj.summary, 'description': obj.description}, prefix=user.username, auto_id='id_for_%s_' + str(obj.pk)) namespace['form'] = form elif dimension is not None: if isinstance(parent, unicode): parent = None elif parent is not None: if ContentType.objects.get_for_model(parent) == ContentType.objects.get_for_model(User): parent = None blob_form, model, verbose_name = get_form(dimension) fd = ForumDimension.objects.get(key=dimension) #get appropriate form if POST and user is not None: comboform = ComboFormFactory(TopicForm(POST), blob_form(POST)).ComboForm() namespace['form'] = comboform for form in comboform._forms: if form.is_valid(): #if this is a TopicForm, we must extract the parent if 'group' in form.cleaned_data: try: parent = Topic.objects.get(summary=form.cleaned_data['group']) cnt = MyGroup.objects.filter(topic=parent, user=user) if cnt == 0: namespace['grouperrors'] = 'You are not a member of that Group.' output = nodelist.render(context) context.pop() return output except: namespace['grouperrors'] = 'This Group does not exist.' output = nodelist.render(context) context.pop() return output else: #blob form if parent is not None: parent.children += 1 parent.save() blob = form.save(commit=False) blob.forumdimension = fd blob.user = user blob.description = form.cleaned_data['blobdescription'] #blob.description = urlize(blob.description, trim_url_limit=30, nofollow=True) blob.parent_pk = parent.pk blob.parent_type = ContentType.objects.get_for_model(parent) ctype = ContentType.objects.get_for_model(Topic) if blob.parent_type != ctype: parent.parent.solutions += 1 parent.parent.save() #####relevant to VOTING and TIME now = datetime.datetime.now() now = now.replace(tzinfo=pytz.utc) blob.save() contype = ContentType.objects.get_for_model(blob.__class__) #CONSENSUS RELATED DENORMALIZATION # All ForumBlobs have consensus objects attached try: parent_cons = Consensus.objects.get(object_pk=parent.pk) if parent_cons.child_vote_type != None: cvt = parent_cons.child_vote_type else: cvt = ContentType.objects.get_for_model(UpDownVote) except: cvt = ContentType.objects.get_for_model(UpDownVote) cons, is_new = Consensus.objects.get_or_create(content_type=contype, object_pk=blob.pk, vote_type=cvt, parent_pk=blob.parent_pk) if is_new: cons.intiate_vote_distributions() #deprecated but lets holdon to phases for now cons.phasename = "temp" cons.save() aso_rep_event.send(sender=user, event_score=1, user=user, initiator=user, dimension=ReputationDimension.objects.get(name=blob.get_verbose_name()), related_object=cons) update_agent.send(sender=blob, type="content", params=[ContentType.objects.get_for_model(blob.__class__).app_label, verbose_name.lower(), blob.pk]) #check badges for this model on creation check_badges(user, model, user) #update the dimensiontracker, used for sorting by content type #deferred.defer(defer_dimensiontracker_update, parent, dimension) #if is_new: #if this is a new issue/consensus, send signal for reputation #relationship_event.send(sender=issue,obj=issue,parent=issue.topic) namespace['path'] = blob namespace['form_complete'] = True #provide context with extension path #raise HttpRedirectException(HttpResponseRedirect(path)) else: namespace['errors'] = form.errors output = nodelist.render(context) context.pop() return output else: blob_form, model, verbose_name = get_form(dimension) if parent is not None: form = ComboFormFactory(TopicForm(auto_id='id_for_%s_' + str(parent.pk), initial={'group': str(parent.summary)}), blob_form()).ComboForm() else: form = ComboFormFactory(TopicForm(), blob_form()).ComboForm() namespace['form'] = form namespace['POST'] = POST, parent #try to set ids for side effects try: namespace['object'] = cons namespace['object_pk'] = blob.pk ctype = ContentType.objects.get_for_model(blob) namespace['content_type'] = ctype.pk except: pass if parent is not None: if isinstance(parent, Topic): namespace['parent_summary'] = parent.summary if isinstance(parent, ForumBlob): namespace['parent_summary'] = parent.summary elif isinstance(parent, User): namespace['parent_summary'] = parent.username output = nodelist.render(context) context.pop() return output
def pp_blob_form(context, nodelist, *args, **kwargs): '''form_id = forms.CharField(widget=forms.HiddenInput(), initial="pp-issue-form") This block tag can create or process forms either to create or to modify issues. Usage is as follows: {% pp_blob_form POST=request.POST path=request.path parent=request.object %} Do stuff with {{ pp-issue.form }}. {% endpp_blob_form %} This form has become a little overloaded. ''' context.push() namespace = get_namespace(context) POST = kwargs.get('POST', None) parent = kwargs.get('parent', None) user = kwargs.get('user', None) dimension = kwargs.get('dimension', None) obj = kwargs.get('object', None) sub = kwargs.get('sub', None) edit = kwargs.get('edit', None) #subcontext imparted to form namespace['timezones'] = pytz.common_timezones if parent == 'submit': parent = None #for editting objects if edit and obj is not None: blob_form, model, verbose_name = get_form(dimension) blob_form = BlobEditForm if POST: #save editted form form = blob_form(POST, instance=obj, prefix=user.username) #get info for diff old_text = obj.description blob = form.save(commit=False) cleaned_data = form.clean() for k, v in cleaned_data.items(): setattr(blob, k, v) #blob.description = urlize(blob.description, trim_url_limit=30, nofollow=True) blob.save() new_text = blob.description #create edit ctype = ContentType.objects.get_for_model(blob) #compute diff using diff_match_patch from google create_edit.apply_async(args=[blob.pk, user.pk, ctype.pk, new_text, old_text]) content_type = ContentType.objects.get_for_model(obj.__class__) namespace['form_complete'] = True namespace['path'] = obj namespace['form'] = form else: form = blob_form(instance=obj) try: if obj.link is not None: form = blob_form(instance=obj, initial={'link': str(obj.link)}, prefix=user.username) except: pass namespace['form'] = form elif dimension is not None: if parent is not None: if ContentType.objects.get_for_model(parent) == ContentType.objects.get_for_model(User): parent = None blob_form, model, verbose_name = get_form(dimension) fd = ForumDimension.objects.get(key=dimension) #get appropriate form if POST and user is not None: comboform = ComboFormFactory(TopicForm(POST), blob_form(POST)).ComboForm() namespace['form'] = comboform for form in comboform._forms: if form.is_valid(): #if this is a TopicForm, we must extract the parent if 'group' in form.cleaned_data: try: parent = Topic.objects.get(summary=form.cleaned_data['group']) cnt = MyGroup.objects.filter(topic=parent, user=user) if cnt == 0: namespace['grouperrors'] = 'You are not a member of that Group.' output = nodelist.render(context) context.pop() return output except: namespace['grouperrors'] = 'This Group does not exist.' output = nodelist.render(context) context.pop() return output else: #blob form if parent is not None: parent.children += 1 parent.save() blob = form.save(commit=False) blob.forumdimension = fd blob.user = user blob.description = form.cleaned_data['blobdescription'] #blob.description = urlize(blob.description, trim_url_limit=30, nofollow=True) blob.parent_pk = parent.pk blob.parent_type = ContentType.objects.get_for_model(parent) ctype = ContentType.objects.get_for_model(Topic) if blob.parent_type != ctype: parent.parent.solutions += 1 parent.parent.save() #####relevant to VOTING and TIME now = datetime.datetime.now() now = now.replace(tzinfo=pytz.utc) blob.save() contype = ContentType.objects.get_for_model(blob.__class__) #CONSENSUS RELATED DENORMALIZATION # All ForumBlobs have consensus objects attached try: parent_cons = Consensus.objects.get(object_pk=parent.pk) if parent_cons.child_vote_type != None: cvt = parent_cons.child_vote_type else: cvt = ContentType.objects.get_for_model(UpDownVote) except: cvt = ContentType.objects.get_for_model(UpDownVote) cons, is_new = Consensus.objects.get_or_create(content_type=contype, object_pk=blob.pk, vote_type=cvt, parent_pk=blob.parent_pk) if is_new: cons.intiate_vote_distributions() #deprecated but lets holdon to phases for now cons.phasename = "temp" cons.save() aso_rep_event.send(sender=user, event_score=1, user=user, initiator=user, dimension=ReputationDimension.objects.get(name=blob.get_verbose_name()), related_object=cons) update_agent.send(sender=blob, type="content", params=[ContentType.objects.get_for_model(blob.__class__).app_label, verbose_name.lower(), blob.pk]) #check badges for this model on creation check_badges(user, model, user) #update the dimensiontracker, used for sorting by content type #deferred.defer(defer_dimensiontracker_update, parent, dimension) #if is_new: #if this is a new issue/consensus, send signal for reputation #relationship_event.send(sender=issue,obj=issue,parent=issue.topic) namespace['path'] = blob namespace['form_complete'] = True #provide context with extension path #raise HttpRedirectException(HttpResponseRedirect(path)) else: namespace['errors'] = form.errors output = nodelist.render(context) context.pop() return output else: blob_form, model, verbose_name = get_form(dimension) form = ComboFormFactory(TopicForm(), blob_form()).ComboForm() namespace['form'] = form namespace['POST'] = POST, parent #try to set ids for side effects try: namespace['object'] = cons namespace['object_pk'] = blob.pk ctype = ContentType.objects.get_for_model(blob) namespace['content_type'] = ctype.pk except: pass if parent is not None: if isinstance(parent, Topic): namespace['parent_summary'] = parent.summary if isinstance(parent, ForumBlob): namespace['parent_summary'] = parent.summary elif isinstance(parent, User): namespace['parent_summary'] = parent.username output = nodelist.render(context) context.pop() return output