Example #1
0
def edit_dataset(request, item_id, slug=None):
    dataset = get_object_or_404(DataSet, pk=item_id)
    user = request.user
    
    # Make sure the current user is the creator of the dataset.
    if user != dataset.creator:
        return HttpResponseRedirect(reverse('epic.datasets.views.view_dataset',
                                            kwargs={'item_id': dataset.id, 'slug':slug,}))
    
    if request.method != "POST":
        current_tags = Tagging.objects.get_edit_string(item=dataset, user=user)
        initial_dataset_data = {
            'name': dataset.name,
            'description': dataset.description,
            'tags': current_tags,
        }
        
        form = EditDataSetForm(initial=initial_dataset_data)
        initial_location_data = []
        geolocs = GeoLoc.objects.filter(datasets=dataset.id)
        for geoloc in geolocs:
            initial_location_data.append({'add_location':geoloc,})
        add_formset = GeoLocationFormSet(prefix='add', initial=initial_location_data)
        remove_formset = RemoveGeoLocationFormSet(prefix='remove')
    else:
        form = EditDataSetForm(request.POST)
        add_formset = GeoLocationFormSet(request.POST, prefix='add')
        remove_formset = RemoveGeoLocationFormSet(request.POST, prefix='remove')
            
        if form.is_valid():
            dataset.name = form.cleaned_data['name']
            dataset.description = form.cleaned_data['description']
            dataset.slug = slugify(dataset.name)
            dataset.save()

            tag_names = form.cleaned_data["tags"]
            Tagging.objects.update_tags(tag_names=tag_names, item=dataset, user=user)
            
            for geoloc in _get_geolocs_from_formset(add_formset, 'add_location'):
                dataset.geolocations.add(geoloc)
            
            for geoloc in _get_geolocs_from_formset(remove_formset, 'remove_location'):
                dataset.geolocations.remove(geoloc)
            
            return HttpResponseRedirect(reverse('epic.datasets.views.view_dataset',
                                                kwargs={ "item_id": dataset.id, 'slug':slug, }))
            
    return render_to_response('datasets/edit_dataset.html', 
                              {'dataset': dataset, 'form': form, 'add_formset': add_formset,'remove_formset':remove_formset,},
                              context_instance=RequestContext(request))
Example #2
0
File: views.py Project: cns-iu/nwb
def edit_dataset(request, item_id, slug=None):
    dataset = get_object_or_404(DataSet, pk=item_id)
    user = request.user
    
    # Make sure the current user is the creator of the dataset.
    if user != dataset.creator:
        return HttpResponseRedirect(reverse(
            'epic.datasets.views.view_dataset', kwargs={'item_id': dataset.id, 'slug':slug,}))
    
    if request.method != "POST":
        current_tags = Tagging.objects.get_edit_string(item=dataset, user=user)
        
        initial_dataset_data = {
            'name': dataset.name,
            'description': dataset.description,
            'tags': current_tags,
        }
        
        initial_dataset_data['category'] = dataset.categories.values_list('id', flat=True)
        
        form = EditDataSetForm(initial=initial_dataset_data)
        initial_location_data = []
        geolocs = GeoLoc.objects.filter(datasets=dataset.id)
        
        for geoloc in geolocs:
            initial_location_data.append({'add_location':geoloc,})
        
        geoloc_add_formset = GeoLocationFormSet(
            prefix='add', initial=initial_location_data)
        geoloc_remove_formset = RemoveGeoLocationFormSet(prefix='remove')
        
        initial_author_data = []
        
        for author in dataset.authors.all():
            initial_author_data.append({'author': author.author})
        
        author_formset = AuthorFormSet(initial=initial_author_data, prefix='author')
            
        initial_ref_data = []
        
        for ref in dataset.references.all():
            initial_ref_data.append({'reference': ref.reference})
        
        ref_formset = AcademicReferenceFormSet(initial=initial_ref_data, prefix='reference')
    else:
        form = EditDataSetForm(request.POST)
        geoloc_add_formset = GeoLocationFormSet(request.POST, prefix='add')
        geoloc_remove_formset = RemoveGeoLocationFormSet(request.POST, prefix='remove')
        author_formset = AuthorFormSet(request.POST, prefix='author')
        ref_formset = AcademicReferenceFormSet(request.POST, prefix='reference')
            
        if form.is_valid() and author_formset.is_valid() and ref_formset.is_valid():     
            dataset.name = form.cleaned_data['name']
            dataset.description = form.cleaned_data['description']
            dataset.categories = form.cleaned_data['category']
            dataset.save()
            
            tag_names = form.cleaned_data["tags"]
            Tagging.objects.update_tags(tag_names=tag_names, item=dataset, user=user)
            
            for geoloc in _get_geolocs_from_formset(geoloc_add_formset, 'add_location'):
                dataset.geolocations.add(geoloc)
            
            for geoloc in _get_geolocs_from_formset(geoloc_remove_formset, 'remove_location'):
                dataset.geolocations.remove(geoloc)
            
            dataset.references.all().delete()
            
            for ref_form in ref_formset.forms:
                if ref_form.is_valid():
                    if ref_form.cleaned_data:
                        reference = ref_form.cleaned_data['reference'] 
                        AcademicReference.objects.create(item=dataset, reference=reference)
            
            for author in dataset.authors.all():
                author.items.remove(dataset)
            
            for author_form in author_formset.forms:
                if author_form.is_valid():
                    if author_form.cleaned_data:
                        author_name = author_form.cleaned_data['author']
                        author, created = Author.objects.get_or_create(author=author_name)
                        author.items.add(dataset)
            
            # If the user has set the flag to delete their datasets,
            # delete them.
            # TODO: these files need to be removed from the file system too!!

            delete_files = False
            
            try:
                # This implies that the checkbox was checked.
                request.POST['delete_dataset_files']
                delete_files = True
            except MultiValueDictKeyError:
                pass
            
            if delete_files:
                delete_dataset_files_url = get_item_url(
                    dataset, 'epic.datasets.views.delete_dataset_files')
                
                return HttpResponseRedirect(delete_dataset_files_url)
            else:
                view_dataset_url = get_item_url(dataset, 'epic.datasets.views.view_dataset')
                
                return HttpResponseRedirect(view_dataset_url)
            
    return render_to_response(
        'datasets/edit_dataset.html',
        {
            'dataset': dataset,
            'form': form,
            'geoloc_add_formset': geoloc_add_formset,
            'geoloc_remove_formset': geoloc_remove_formset,
            'files': dataset.files.all(),
            'author_formset': author_formset,
            'ref_formset': ref_formset
        },
        context_instance=RequestContext(request))
Example #3
0
def edit_dataset(request, item_id, slug=None):
    dataset = get_object_or_404(DataSet, pk=item_id)
    user = request.user
    
    # Make sure the current user is the creator of the dataset.
    if user != dataset.creator:
        return HttpResponseRedirect(reverse('epic.datasets.views.view_dataset',
                                            kwargs={'item_id': dataset.id, 'slug':slug,}))
    
    if request.method != "POST":
        current_tags = Tagging.objects.get_edit_string(item=dataset, user=user)
        initial_dataset_data = {
            'name': dataset.name,
            'description': dataset.description,
            'tags': current_tags,
        }
        
        form = EditDataSetForm(initial=initial_dataset_data)
        initial_location_data = []
        geolocs = GeoLoc.objects.filter(datasets=dataset.id)
        
        for geoloc in geolocs:
            initial_location_data.append({'add_location':geoloc,})
        
        add_formset = GeoLocationFormSet(prefix='add', initial=initial_location_data)
        remove_formset = RemoveGeoLocationFormSet(prefix='remove')
    else:
        form = EditDataSetForm(request.POST)
        add_formset = GeoLocationFormSet(request.POST, prefix='add')
        remove_formset = RemoveGeoLocationFormSet(request.POST, prefix='remove')
            
        if form.is_valid():
            dataset.name = form.cleaned_data['name']
            dataset.description = form.cleaned_data['description']
            dataset.slug = slugify(dataset.name)
            dataset.save()

            tag_names = form.cleaned_data["tags"]
            Tagging.objects.update_tags(tag_names=tag_names, item=dataset, user=user)
            
            for geoloc in _get_geolocs_from_formset(add_formset, 'add_location'):
                dataset.geolocations.add(geoloc)
            
            for geoloc in _get_geolocs_from_formset(remove_formset, 'remove_location'):
                dataset.geolocations.remove(geoloc)
            
            # If the user has set the flag to delete their datasets, delete them
            # TODO: these files need to be removed from the file system too!!

            delete_files = False
            try:
                # This implies that the checkbox was checked.
                request.POST['delete_dataset_files']
                delete_files = True
            except MultiValueDictKeyError:
                pass
            
            if delete_files:
                return HttpResponseRedirect(reverse('epic.datasets.views.delete_dataset_files',
                                                    kwargs={ "item_id": dataset.id, 'slug':slug, }))
            else:
                return HttpResponseRedirect(reverse('epic.datasets.views.view_dataset',
                                                    kwargs={ "item_id": dataset.id, 'slug':slug, }))
            
    return render_to_response('datasets/edit_dataset.html', 
                              {'dataset': dataset, 
                               'form': form, 
                               'add_formset': add_formset, 
                               'remove_formset':remove_formset,
                               'files':dataset.files.all()},
                              context_instance=RequestContext(request))
Example #4
0
def edit_dataset(request, item_id, slug=None):
	dataset = get_object_or_404(DataSet, pk=item_id)
	user = request.user
	
	# Make sure the current user is the creator of the dataset.
	if user != dataset.creator:
		return HttpResponseRedirect(reverse("epic.datasets.views.view_dataset",
			kwargs={ "item_id": dataset.id, "slug":slug, }))
	
	if request.method != "POST":
		current_tags = dataset.tags.get_edit_string(user=request.user)
		initial_data_dictionary = {
			"name": dataset.name,
			"description": dataset.description,
			"tags": current_tags,
		}
		
		form = EditDataSetForm(initial=initial_data_dictionary)
		initial_location_data = []
		geolocs = GeoLoc.objects.filter(datasets=dataset.id)
		for geoloc in geolocs:
			initial_location_data.append({'add_location':geoloc,})
		add_formset = GeoLocationFormSet(prefix='add', initial=initial_location_data)
		remove_formset = RemoveGeoLocationFormSet(prefix='remove')
	else:
		form = EditDataSetForm(request.POST)
		add_formset = GeoLocationFormSet(request.POST, prefix='add')
		remove_formset = RemoveGeoLocationFormSet(request.POST, prefix='remove')
			
		if form.is_valid():
			dataset.name = form.cleaned_data["name"]
			dataset.description = form.cleaned_data["description"]
			dataset.slug = slugify(dataset.name)
			dataset.save()
			
			tags = form.cleaned_data["tags"]
			dataset.tags.update_tags(tags, user=user)
			
			# add all the locations from the add_formset if the add_formset is valid
			if not add_formset.is_valid():
				print 'The add formset for the geolocations for the edit dataset page was not valid'
			else:
				# Get all of the geolocations
				for add_form in add_formset.forms:
					try:
						location = add_form.cleaned_data['add_location']
						import re
						# This pattern will match on [[-#.#, -#.#], '*', *
						location_pattern = re.compile(r"""^\[\[(?P<lat>-?\d+\.\d+), (?P<lng>-?\d+\.\d+)\], '(?P<name>.+?)',(?:.*)""")
						location_match = location_pattern.match(location)
						location_dict = location_match.groupdict()
						lat = location_dict['lat']
						lng = location_dict['lng']
						canonical_name = unicode(location_dict['name'])
						# If the location already exists, use it otherwise create a new one
						try:
							geoloc = GeoLoc.objects.get(longitude=lng, latitude=lat, canonical_name=canonical_name)
						except:
							geoloc = GeoLoc(longitude=lng, latitude=lat, canonical_name=canonical_name)
							geoloc.save()
						
						# Add the found/created location to the dataset
						dataset.geolocations.add(geoloc)
					except:
						print 'There was a problem in adding the location from the hidden field to the database'
			
			# Remove all the locations from the remove_formset if the remove_formset is valid.  it is important that
			# this step happens after the add because if the user edited a page and added a location then removed it 
			# before saving there is both an add and a remove for that location in the same page.
			if not remove_formset.is_valid():
				print 'The remove formset for the geolocations for the edit dataset page was not valid'
			else:
				for remove_form in remove_formset.forms:
					try:
						location = remove_form.cleaned_data['remove_location']
						import re
						# This pattern will match on [[-#.#, -#.#], '*', *
						location_pattern = re.compile(r"""^\[\[(?P<lat>-?\d+\.\d+), (?P<lng>-?\d+\.\d+)\], '(?P<name>.+?)',(?:.*)""")
						location_match = location_pattern.match(location)
						location_dict = location_match.groupdict()
						lat = location_dict['lat']
						lng = location_dict['lng']
						canonical_name = unicode(location_dict['name'])
						try:
							geoloc = GeoLoc.objects.get(longitude=lng,latitude=lat, canonical_name=canonical_name)
						except:
							print "The geolocation to be removed does not appear to have been attached to this dataset"
						
						# Remove the geoloc from the dataset.  Note that the geoloc will still be in the database incase other things were attached.
						dataset.geolocations.remove(geoloc)
					except:
						print 'There was a problem in removing the location from the dataset'
			
			return HttpResponseRedirect(reverse("epic.datasets.views.view_dataset",
				kwargs={ "item_id": dataset.id, 'slug':slug, }))
			
	return render_to_response("datasets/edit_dataset.html", 
							  {
							  	'dataset': dataset,
								'user': user,
								'form': form,
								'add_formset': add_formset,
								'remove_formset':remove_formset,
							  })
Example #5
0
File: views.py Project: cns-iu/nwb
def edit_dataset(request, item_id, slug=None):
    dataset = get_object_or_404(DataSet, pk=item_id)
    user = request.user

    # Make sure the current user is the creator of the dataset.
    if user != dataset.creator:
        return HttpResponseRedirect(
            reverse("epic.datasets.views.view_dataset", kwargs={"item_id": dataset.id, "slug": slug})
        )

    if request.method != "POST":
        current_tags = Tagging.objects.get_edit_string(item=dataset, user=user)

        initial_dataset_data = {"name": dataset.name, "description": dataset.description, "tags": current_tags}

        if dataset.category is not None:
            initial_dataset_data["category"] = dataset.category.id

        form = EditDataSetForm(initial=initial_dataset_data)
        initial_location_data = []
        geolocs = GeoLoc.objects.filter(datasets=dataset.id)

        for geoloc in geolocs:
            initial_location_data.append({"add_location": geoloc})

        geoloc_add_formset = GeoLocationFormSet(prefix="add", initial=initial_location_data)
        geoloc_remove_formset = RemoveGeoLocationFormSet(prefix="remove")

        initial_author_data = []

        for author in dataset.authors.all():
            initial_author_data.append({"author": author.author})

        author_formset = AuthorFormSet(initial=initial_author_data, prefix="author")

        initial_ref_data = []

        for ref in dataset.references.all():
            initial_ref_data.append({"reference": ref.reference})

        ref_formset = AcademicReferenceFormSet(initial=initial_ref_data, prefix="reference")
    else:
        form = EditDataSetForm(request.POST)
        geoloc_add_formset = GeoLocationFormSet(request.POST, prefix="add")
        geoloc_remove_formset = RemoveGeoLocationFormSet(request.POST, prefix="remove")
        author_formset = AuthorFormSet(request.POST, prefix="author")
        ref_formset = AcademicReferenceFormSet(request.POST, prefix="reference")

        if form.is_valid() and author_formset.is_valid() and ref_formset.is_valid():
            dataset.name = form.cleaned_data["name"]
            dataset.description = form.cleaned_data["description"]
            dataset.category = form.cleaned_data["category"]
            dataset.save()

            tag_names = form.cleaned_data["tags"]
            Tagging.objects.update_tags(tag_names=tag_names, item=dataset, user=user)

            for geoloc in _get_geolocs_from_formset(geoloc_add_formset, "add_location"):
                dataset.geolocations.add(geoloc)

            for geoloc in _get_geolocs_from_formset(geoloc_remove_formset, "remove_location"):
                dataset.geolocations.remove(geoloc)

            dataset.references.all().delete()

            for ref_form in ref_formset.forms:
                if ref_form.is_valid():
                    if ref_form.cleaned_data:
                        reference = ref_form.cleaned_data["reference"]
                        AcademicReference.objects.create(item=dataset, reference=reference)

            for author in dataset.authors.all():
                author.items.remove(dataset)

            for author_form in author_formset.forms:
                if author_form.is_valid():
                    if author_form.cleaned_data:
                        author_name = author_form.cleaned_data["author"]
                        author, created = Author.objects.get_or_create(author=author_name)
                        author.items.add(dataset)

            # If the user has set the flag to delete their datasets,
            # delete them.
            # TODO: these files need to be removed from the file system too!!

            delete_files = False

            try:
                # This implies that the checkbox was checked.
                request.POST["delete_dataset_files"]
                delete_files = True
            except MultiValueDictKeyError:
                pass

            if delete_files:
                delete_dataset_files_url = get_item_url(dataset, "epic.datasets.views.delete_dataset_files")

                return HttpResponseRedirect(delete_dataset_files_url)
            else:
                view_dataset_url = get_item_url(dataset, "epic.datasets.views.view_dataset")

                return HttpResponseRedirect(view_dataset_url)

    return render_to_response(
        "datasets/edit_dataset.html",
        {
            "dataset": dataset,
            "form": form,
            "geoloc_add_formset": geoloc_add_formset,
            "geoloc_remove_formset": geoloc_remove_formset,
            "files": dataset.files.all(),
            "author_formset": author_formset,
            "ref_formset": ref_formset,
        },
        context_instance=RequestContext(request),
    )