Added the ability to delete geometries for registered users
This commit is contained in:
parent
504773e01e
commit
f4231c9c28
|
@ -167,12 +167,16 @@
|
||||||
{{geometry.get_depth}}
|
{{geometry.get_depth}}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h2><i class="icon-download-alt"></i> Downloads</h2>
|
<h2><i class="icon-download-alt"></i> Downloads</h2>
|
||||||
<a class="pure-button button-green" href="{{geometry.file.url}}"><i class="icon-download"></i> Download Model</a><br/>
|
<a class="pure-button button-green" href="{{geometry.file.url}}"><i class="icon-download"></i> Download Model</a><br/>
|
||||||
{% if geometry.sourcefile %}
|
{% if geometry.sourcefile %}
|
||||||
<a class="pure-button button-lightblue" href="{{geometry.sourcefile.url}}"><i class="icon-edit-sign"></i> Download Source</a>
|
<a class="pure-button button-lightblue" href="{{geometry.sourcefile.url}}"><i class="icon-edit-sign"></i> Download Source</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
{% if user.is_authenticated and user.id = geometry.user.id %}
|
||||||
|
<h2><i class="icon-trash"></i> Delete</h2>
|
||||||
|
<a class="pure-button button-red" href="{% url 'geometry_delete' id=geometry.id %}"><i class="icon-remove-circle"></i> Delete model</a><br/>
|
||||||
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -0,0 +1,60 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block title %} New paste {% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block headeraddons %}
|
||||||
|
<script src="{{STATIC_URL}}js/jquery-1.10.2.min.js"></script>
|
||||||
|
<script type="text/javascript">
|
||||||
|
$(document).ready(function() {
|
||||||
|
$("input[type='file']").each(function () {
|
||||||
|
$(this).hide();
|
||||||
|
$(this).after(' <a href="#" class="browsebutton pure-button button-lightblue">Browse</a>');
|
||||||
|
$(this).after('<input type="text" readonly/>');
|
||||||
|
|
||||||
|
$(this).change(function() {
|
||||||
|
$(this).next().val($(this).val());
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
$(".browsebutton").click(function() {
|
||||||
|
$(this).prev().prev().click();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="content">
|
||||||
|
<div id="prompt">
|
||||||
|
<!-- if IE without GCF, prompt goes here -->
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h1>New paste</h1>
|
||||||
|
<div class="pure-g-r">
|
||||||
|
<div class="pure-u-2-3">
|
||||||
|
<div class="textcontainer">
|
||||||
|
<form action="" method="post">
|
||||||
|
{% csrf_token %}
|
||||||
|
Are you sure you want to delete <b>{{ object.name }}</b>?<br/>
|
||||||
|
The deletion can never be undone so be carefull now !</br>
|
||||||
|
<br/>
|
||||||
|
<button type="submit" class="pure-button button-red">
|
||||||
|
<i class="icon-remove-circle"></i>
|
||||||
|
Delete
|
||||||
|
</button>
|
||||||
|
<a class="pure-button button-green" href="{% url 'geometry_details' id=object.id %}">
|
||||||
|
Abort
|
||||||
|
</a>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pure-u-1-3">
|
||||||
|
{% include 'pastebin/latest_geometries.html' %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endblock %}
|
|
@ -1,7 +1,8 @@
|
||||||
from django.conf.urls import patterns, include, url
|
from django.conf.urls import patterns, include, url
|
||||||
|
|
||||||
from views import GeometryView, GeometryCreate
|
from views import GeometryView, GeometryCreate, GeometryDelete
|
||||||
|
|
||||||
urlpatterns = patterns('',
|
urlpatterns = patterns('',
|
||||||
url(r'^new/$', GeometryCreate.as_view(), name='geometry_create'),
|
url(r'^new/$', GeometryCreate.as_view(), name='geometry_create'),
|
||||||
|
url(r'^g/delete/(?P<id>\d+)/$', GeometryDelete.as_view(), name='geometry_delete'),
|
||||||
url(r'^g/(?P<id>\d+)/$', GeometryView.as_view(), name='geometry_details'))
|
url(r'^g/(?P<id>\d+)/$', GeometryView.as_view(), name='geometry_details'))
|
|
@ -1,7 +1,9 @@
|
||||||
from django.views.generic.edit import CreateView
|
from django.views.generic.edit import CreateView, DeleteView
|
||||||
from django.views.generic.detail import DetailView
|
from django.views.generic.detail import DetailView
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from django.views.generic.base import ContextMixin
|
from django.views.generic.base import ContextMixin
|
||||||
|
from django.core.exceptions import PermissionDenied
|
||||||
|
|
||||||
|
|
||||||
from forms import GeometryForm, AnonymousGeometryForm
|
from forms import GeometryForm, AnonymousGeometryForm
|
||||||
from models import Geometry
|
from models import Geometry
|
||||||
|
@ -41,4 +43,23 @@ class GeometryCreate(CreateView, LastesGeometriesMixin):
|
||||||
self.object.user = self.request.user
|
self.object.user = self.request.user
|
||||||
self.object.save()
|
self.object.save()
|
||||||
|
|
||||||
return res
|
return res
|
||||||
|
|
||||||
|
class GeometryDelete(DeleteView, LastesGeometriesMixin):
|
||||||
|
model = Geometry
|
||||||
|
pk_url_kwarg = 'id'
|
||||||
|
template_name = 'pastebin/geometry_delete.html'
|
||||||
|
success_url ='/'
|
||||||
|
|
||||||
|
def check_user(self, request):
|
||||||
|
obj = self.get_object()
|
||||||
|
if obj.user and obj.user.id != request.user.id:
|
||||||
|
raise PermissionDenied
|
||||||
|
|
||||||
|
def get(self, request, *args, **kwargs):
|
||||||
|
self.check_user(request)
|
||||||
|
return super(GeometryDelete,self).get(self, request, *args, **kwargs)
|
||||||
|
|
||||||
|
def delete(self, request, *args, **kwargs):
|
||||||
|
self.check_user(request)
|
||||||
|
return super(GeometryDelete,self).delete(self, request, *args, **kwargs)
|
|
@ -29,7 +29,7 @@
|
||||||
border-color: #eeeeee;
|
border-color: #eeeeee;
|
||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
background-color: #eee;
|
background-color: #eee;
|
||||||
height: 60%; }
|
min-height: 60%; }
|
||||||
#fileinfos .pure-button {
|
#fileinfos .pure-button {
|
||||||
margin: 2px; }
|
margin: 2px; }
|
||||||
|
|
||||||
|
@ -63,6 +63,10 @@
|
||||||
background-color: #1CB841;
|
background-color: #1CB841;
|
||||||
color: #ffffff; }
|
color: #ffffff; }
|
||||||
|
|
||||||
|
.button-red {
|
||||||
|
background-color: #ca3c3c;
|
||||||
|
color: #ffffff; }
|
||||||
|
|
||||||
.button-lightblue {
|
.button-lightblue {
|
||||||
background-color: #42B8DD;
|
background-color: #42B8DD;
|
||||||
color: #ffffff; }
|
color: #ffffff; }
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
@include gridcontainer;
|
@include gridcontainer;
|
||||||
@include roundconers(#eee,6px);
|
@include roundconers(#eee,6px);
|
||||||
background-color: #eee;
|
background-color: #eee;
|
||||||
height: 60%;
|
min-height: 60%;
|
||||||
|
|
||||||
.pure-button {
|
.pure-button {
|
||||||
margin: 2px;
|
margin: 2px;
|
||||||
|
@ -94,6 +94,11 @@
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.button-red {
|
||||||
|
background-color: #ca3c3c;
|
||||||
|
color: #ffffff;
|
||||||
|
}
|
||||||
|
|
||||||
.button-lightblue {
|
.button-lightblue {
|
||||||
background-color: #42B8DD;
|
background-color: #42B8DD;
|
||||||
color: #ffffff;
|
color: #ffffff;
|
||||||
|
|
Loading…
Reference in New Issue