Beispiel #1
0
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')
Beispiel #2
0
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')
Beispiel #3
0
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")
Beispiel #4
0
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")
Beispiel #5
0
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])
Beispiel #6
0
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")
Beispiel #7
0
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])
Beispiel #8
0
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
Beispiel #9
0
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