Add ability to delete unpublished layers

If we get bogus or duplicate entries we'll want the ability to delete
them easily before publishing (without needing to have access to the
admin interface), so add this ability. Being able to delete a published
layer might be a bit dangerous and is less likely to be needed so that
is disallowed for now.

Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
This commit is contained in:
Paul Eggleton 2013-02-27 19:23:16 +00:00
parent 26ab9dbb28
commit 9a3bfac320
4 changed files with 17 additions and 2 deletions

1
TODO
View File

@ -19,7 +19,6 @@ Later:
* Style/extend about page? * Style/extend about page?
* Style recipe info page? * Style recipe info page?
* Style machine list on detail * Style machine list on detail
* Provide a delete function for unpublished layers?
* Show count of layers to be reviewed next to review button * Show count of layers to be reviewed next to review button
* Something to help with compatibility (although maybe this should just be handled using the existing versioned layer dependencies in layer.conf) * Something to help with compatibility (although maybe this should just be handled using the existing versioned layer dependencies in layer.conf)
* Query backend service? i.e. special URL to query information for external apps/scripts * Query backend service? i.e. special URL to query information for external apps/scripts

View File

@ -38,6 +38,7 @@
{% endif %} {% endif %}
{% endif %} {% endif %}
{% if layeritem.status = "N" and perms.layeritem.publish_layer %} {% if layeritem.status = "N" and perms.layeritem.publish_layer %}
<a href="{% url delete_layer layeritem.name %}" class="btn btn-warning">Delete layer</a>
<a href="{% url publish layeritem.name %}" class="btn btn-primary">Publish layer</a> <a href="{% url publish layeritem.name %}" class="btn btn-primary">Publish layer</a>
{% endif %} {% endif %}
</span> </span>

View File

@ -7,7 +7,7 @@
from django.conf.urls.defaults import * from django.conf.urls.defaults import *
from django.views.generic import DetailView, ListView from django.views.generic import DetailView, ListView
from layerindex.models import LayerItem, Recipe from layerindex.models import LayerItem, Recipe
from layerindex.views import LayerListView, RecipeSearchView, MachineSearchView, PlainTextListView, LayerDetailView, edit_layer_view, edit_layernote_view, delete_layernote_view from layerindex.views import LayerListView, RecipeSearchView, MachineSearchView, PlainTextListView, LayerDetailView, edit_layer_view, delete_layer_view, edit_layernote_view, delete_layernote_view
urlpatterns = patterns('', urlpatterns = patterns('',
url(r'^$', url(r'^$',
@ -41,6 +41,8 @@ urlpatterns = patterns('',
edit_layernote_view, {'template_name': 'layerindex/editlayernote.html'}, name="edit_layernote"), edit_layernote_view, {'template_name': 'layerindex/editlayernote.html'}, name="edit_layernote"),
url(r'^layer/(?P<slug>[-\w]+)/deletenote/(?P<pk>[-\w]+)/$', url(r'^layer/(?P<slug>[-\w]+)/deletenote/(?P<pk>[-\w]+)/$',
delete_layernote_view, {'template_name': 'layerindex/deleteconfirm.html'}, name="delete_layernote"), delete_layernote_view, {'template_name': 'layerindex/deleteconfirm.html'}, name="delete_layernote"),
url(r'^layer/(?P<slug>[-\w]+)/delete/$',
delete_layer_view, {'template_name': 'layerindex/deleteconfirm.html'}, name="delete_layer"),
url(r'^recipe/(?P<pk>[-\w]+)/$', url(r'^recipe/(?P<pk>[-\w]+)/$',
DetailView.as_view( DetailView.as_view(
model=Recipe, model=Recipe,

View File

@ -62,6 +62,19 @@ def delete_layernote_view(request, template_name, slug, pk):
'return_url': layeritem.get_absolute_url() 'return_url': layeritem.get_absolute_url()
}) })
def delete_layer_view(request, template_name, slug):
layeritem = get_object_or_404(LayerItem, name=slug)
if not (request.user.is_authenticated() and request.user.has_perm('layerindex.publish_layer') and layeritem.status == 'N'):
raise PermissionDenied
if request.method == 'POST':
layeritem.delete()
return HttpResponseRedirect(reverse('layer_list'))
else:
return render(request, template_name, {
'object': layeritem,
'object_type': layeritem._meta.verbose_name,
'return_url': layeritem.get_absolute_url()
})
def edit_layer_view(request, template_name, slug=None): def edit_layer_view(request, template_name, slug=None):
useredit = False useredit = False