def add_image_for_neurosynth(request): temp_collection_name = "%s's temporary collection" % request.user.username #this is a hack we need to make sure this collection can be only #owned by the same user try: temp_collection = Collection.objects.get(name=temp_collection_name) except Collection.DoesNotExist: priv_token = generate_url_token() temp_collection = Collection(name=temp_collection_name, owner=request.user, private=False, private_token=priv_token) temp_collection.save() image = StatisticMap(collection=temp_collection) if request.method == "POST": form = SimplifiedStatisticMapForm(request.POST, request.FILES, instance=image, user=request.user) if form.is_valid(): image = form.save() return HttpResponseRedirect( "http://neurosynth.org/decode/?neurovault=%s-%s" % (temp_collection.private_token, image.id)) else: form = SimplifiedStatisticMapForm(user=request.user, instance=image) context = {"form": form} return render(request, "statmaps/add_image_for_neurosynth.html.haml", context)
def add_image_for_neurosynth(request): temp_collection_name = "%s's temporary collection" % request.user.username #this is a hack we need to make sure this collection can be only #owned by the same user try: temp_collection = Collection.objects.get(name=temp_collection_name) except Collection.DoesNotExist: priv_token = generate_url_token() temp_collection = Collection(name=temp_collection_name, owner=request.user, private=False, private_token=priv_token) temp_collection.save() image = StatisticMap(collection=temp_collection) if request.method == "POST": form = SimplifiedStatisticMapForm(request.POST, request.FILES, instance=image, user=request.user) if form.is_valid(): image = form.save() return HttpResponseRedirect("http://neurosynth.org/decode/?neurovault=%s-%s" % ( temp_collection.private_token,image.id)) else: form = SimplifiedStatisticMapForm(user=request.user, instance=image) contrasts = get_contrast_lookup() context = {"form": form,"contrasts":json.dumps(contrasts)} return render(request, "statmaps/add_image_for_neurosynth.html", context)
def edit_collection(request, cid=None): page_header = "Add new collection" if cid: collection = get_collection(cid, request) is_owner = True if collection.owner == request.user else False page_header = 'Edit collection' if not owner_or_contrib(request, collection): return HttpResponseForbidden() else: is_owner = True collection = Collection(owner=request.user) if request.method == "POST": if is_owner: form = OwnerCollectionForm(request.POST, request.FILES, instance=collection) else: form = CollectionForm(request.POST, request.FILES, instance=collection) if form.is_valid(): previous_contribs = set() if form.instance.pk is not None: previous_contribs = set(form.instance.contributors.all()) collection = form.save(commit=False) if collection.private and collection.private_token is None: collection.private_token = generate_url_token() collection.save() if is_owner: form.save_m2m() # save contributors current_contribs = set(collection.contributors.all()) new_contribs = list( current_contribs.difference(previous_contribs)) context = { 'owner': collection.owner.username, 'collection': collection.name, 'url': get_server_url(request) + collection.get_absolute_url(), } subj = '%s has added you to a NeuroVault collection' % context[ 'owner'] send_email_notification('new_contributor', subj, new_contribs, context) return HttpResponseRedirect(collection.get_absolute_url()) else: if is_owner: form = OwnerCollectionForm(instance=collection) else: form = CollectionForm(instance=collection) context = {"form": form, "page_header": page_header, "is_owner": is_owner} return render(request, "statmaps/edit_collection.html.haml", context)
def test_fetch_my_collections(self): self.client.force_authenticate(user=self.user) # Create a private collection private_collection = Collection( owner=self.user, name='Private Collection', private=True, private_token=generate_url_token() ) private_collection.save() response = self.client.get('/api/my_collections/', follow=True) self.assertEqual(len(response.data['results']), 2) collection_map = dict((x['id'], x) for x in response.data['results']) self.assertEqual(collection_map[self.coll.id]['id'], self.coll.id) self.assertEqual(collection_map[self.coll.id]['private'], False) self.assertEqual( collection_map[private_collection.id]['private'], True ) # Create and share a new collection with our user sharer_user = User.objects.create_user('Sharer') sharer_user.save() shared_collection = Collection( owner=sharer_user, name='Shared Test Collection' ) shared_collection.save() shared_collection.contributors.add(self.user) # Re-fetch the data response = self.client.get('/api/my_collections/', follow=True) user_collections_ids = sorted([ self.coll.id, shared_collection.id, private_collection.id ]) result_collection_ids = sorted( x['id'] for x in response.data['results'] ) self.assertEqual( len(response.data['results']), len(user_collections_ids) ) self.assertListEqual(user_collections_ids, result_collection_ids)
def edit_collection(request, cid=None): page_header = "Add new collection" if cid: collection = get_collection(cid,request) is_owner = collection.owner == request.user page_header = 'Edit collection' if not owner_or_contrib(request,collection): return HttpResponseForbidden() else: is_owner = True collection = Collection(owner=request.user) if request.method == "POST": if is_owner: form = OwnerCollectionForm(request.POST, request.FILES, instance=collection) else: form = CollectionForm(request.POST, request.FILES, instance=collection) if form.is_valid(): previous_contribs = set() if form.instance.pk is not None: previous_contribs = set(form.instance.contributors.all()) collection = form.save(commit=False) if collection.private and collection.private_token is None: collection.private_token = generate_url_token() collection.save() if is_owner: form.save_m2m() # save contributors current_contribs = set(collection.contributors.all()) new_contribs = list(current_contribs.difference(previous_contribs)) context = { 'owner': collection.owner.username, 'collection': collection.name, 'url': get_server_url(request) + collection.get_absolute_url(), } subj = '%s has added you to a NeuroVault collection' % context['owner'] send_email_notification('new_contributor', subj, new_contribs, context) return HttpResponseRedirect(collection.get_absolute_url()) else: if is_owner: form = OwnerCollectionForm(instance=collection) else: form = CollectionForm(instance=collection) context = {"form": form, "page_header": page_header, "is_owner": is_owner} return render(request, "statmaps/edit_collection.html.haml", context)