Skip to content

Commit

Permalink
* Add the ability to delete organizations, projects and documents.
Browse files Browse the repository at this point in the history
* Use the .active() method on all applicable places.
  • Loading branch information
bgroff committed Nov 8, 2018
1 parent 2162e66 commit ec3775f
Show file tree
Hide file tree
Showing 30 changed files with 565 additions and 196 deletions.
12 changes: 6 additions & 6 deletions django_kala/auth/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,8 +63,8 @@ def set_active(self, active):

def get_organizations_with_create(self):
if self.is_superuser:
return organizations.models.Organization.objects.all()
return organizations.models.Organization.objects.filter(
return organizations.models.Organization.objects.active()
return organizations.models.Organization.objects.active().filter(
id__in=organizations.models.OrganizationPermission.objects.filter(
user=self
).values_list('organization__id', flat=True))
Expand All @@ -79,7 +79,7 @@ def get_organizations(self, permission=None):
if permission:
kwargs['permission__codename__in'] = permission

return organizations.models.Organization.objects.filter(
return organizations.models.Organization.objects.active().filter(
id__in=set().union(*[
list(organizations.models.OrganizationPermission.objects.filter(**kwargs).values_list('organization__id', flat=True)),
list(projects.models.ProjectPermission.objects.filter(**kwargs).values_list('project__organization__id',flat=True).values_list('id',flat=True)),
Expand All @@ -91,7 +91,7 @@ def get_projects(self):
if self.is_superuser:
return projects.models.Project.objects.active()
else:
return projects.models.Project.objects.filter(
return projects.models.Project.objects.active().filter(
id__in=set().union(*[
list(projects.models.ProjectPermission.objects.filter(user=self).values_list('project__id', flat=True)),
list(projects.models.Project.objects.filter(organization__id__in=organizations.models.OrganizationPermission.objects.filter(user=self).values_list('organization__id', flat=True)).values_list('id', flat=True)),
Expand All @@ -101,9 +101,9 @@ def get_projects(self):

def get_documents(self):
if self.is_superuser:
return documents.models.Document.objects.all()
return documents.models.Document.objects.active()
else:
return documents.models.Document.objects.filter(
return documents.models.Document.objects.active().filter(
id__in=set().union(*[
list(documents.models.DocumentPermission.objects.filter(user=self).values_list('document__id', flat=True)),
list(documents.models.Document.objects.filter(project__id__in=projects.models.ProjectPermission.objects.filter(user=self).values_list('project__id', flat=True)).values_list('id', flat=True)),
Expand Down
2 changes: 1 addition & 1 deletion django_kala/auth/views/users.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ def get_context_data(self, **kwargs):
organization = Organization.objects.get(name=organization)
organization_users = self.request.user.get_users()
if organization_users:
users = users.filter(pk__in=organization_users.values_list('pk'))
users = users.active().filter(pk__in=organization_users.values_list('pk'))
else:
users = []
except Exception as e:
Expand Down
9 changes: 8 additions & 1 deletion django_kala/django_kala/platforms/aws/documents.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,12 @@ def upload_export(self, export_path):
def archive_document(self, document):
raise NotImplementedError()

def retrieve_document(self, document):
def restore_document(self, document):
raise NotImplementedError()

def delete_document(self, document):
s3 = boto3.resource('s3')
s3.Object(
settings.S3_STORAGE_BUCKET,
'media/documents/{0}'.format(document.uuid)
).delete()
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
/*******************************
Message
*******************************/
@charset "utf-8";

.ui.message {
position: relative;
Expand Down
4 changes: 3 additions & 1 deletion django_kala/django_kala/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,9 @@ def get_context_data(self, **kwargs):
return {
'organizations': self.request.user.get_organizations(),
'documents': Document.objects.active().filter(
pk__in=DocumentVersion.objects.filter(user=get_user(self.request)).values('document__pk'))[:10],
pk__in=DocumentVersion.objects.filter(
user=get_user(self.request)
).values_list('document__id', flat=True))[:10],
}


Expand Down
2 changes: 1 addition & 1 deletion django_kala/organizations/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ def get_projects(self, user):
if user.is_superuser:
return Project.objects.active().filter(organization=self)
else:
return Project.objects.filter(id__in=user.get_projects().values_list('id', flat=True), organization=self)
return Project.objects.active().filter(id__in=user.get_projects().values_list('id', flat=True), organization=self)

def __str__(self):
return self.name
Expand Down
Empty file.
26 changes: 26 additions & 0 deletions django_kala/organizations/tasks/delete_organization.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
from celery.task import Task
from django.contrib.auth import get_user_model

from organizations.models import Organization
from projects.tasks.delete_project import DeleteProjectTask

User = get_user_model()


class DeleteOrganizationTask(Task):

def run(self, *args, **kwargs):
self.organization = Organization.objects.get(pk=args[0])
user = User.objects.get(pk=args[1])
if not self.organization.can_manage(user):
# TODO: Log this
return
for project in self.organization.project_set.all():
DeleteProjectTask().apply_async([project.pk, user.pk])

def on_success(self, retval, task_id, args, kwargs):
self.organization.delete()

def on_failure(self, exc, task_id, args, kwargs, einfo):
# TODO: Log this
return
28 changes: 28 additions & 0 deletions django_kala/organizations/templates/includes/header.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
{% load i18n kala_tags %}

{% with active=request.path|header %}
<div class="repo ribbon">
<div class="ui container">
<div class="ui big breadcrumb">
<a class="section">{{ organization }}</a>
</div>
</div>
</div>

<div class="ui tabular menu">
<div class="ui container">
{% if organization|can_invite:request.user %}
<a class="item" {% if active == 'main' %}active{% endif %}" href="{% url 'organizations:invite_user' organization.pk %}">
<i class="person icon"></i>
{% trans 'Invite User' %}
</a>
{% endif %}
{% if organization|can_manage:request.user %}
<a class="item {% if active == 'settings' %}active{% endif %}" href="{% url 'organizations:details' organization.pk %}">
<i class="gear icon"></i>
{% trans 'Settings' %}
</a>
{% endif %}
</div>
</div>
{% endwith %}
24 changes: 24 additions & 0 deletions django_kala/organizations/templates/includes/sidebar.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
{% load i18n %}

<div class="four wide column">
<div class="ui vertical menu">
<div class="item">
<div class="header">{% trans 'Organization' %}</div>
<div class="menu">
<a class="item {% if request.resolver_match.url_name == 'details' %}active{% endif %}"
href="{% url 'organizations:details' organization.pk %}">{% trans 'Details' %}</a>
<a class="item {% if request.resolver_match.url_name == 'archive' %}active{% endif %}"
href="{# {% url 'organizations:archive' organization.pk %}#}">{% trans 'Archive' %}</a>
<a class="item {% if request.resolver_match.url_name == 'delete' %}active{% endif %}"
href="{% url 'organizations:delete' organization.pk %}">{% trans 'Delete' %}</a>
</div>
</div>
<div class="item">
<div class="header">{% trans 'People' %}</div>
<div class="menu">
<a class="item {% if request.resolver_match.url_name == 'manage_access' %}active{% endif %}"
href="{% url 'organizations:manage_access' organization.pk %}">{% trans 'Manage access' %}</a>
</div>
</div>
</div>
</div>
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,7 @@
{% load i18n static kala_tags %}

{% block content %}
<div class="repo ribbon">
<div class="ui container">
<div class="ui big breadcrumb">
<a class="section">{{ organization }}</a>
</div>
</div>
</div>

<div class="ui tabular menu">
<div class="ui container">
<a class="active item" href="{% url 'organizations:invite_user' organization.pk %}">
<i class="person icon"></i>
{% trans 'Invite User' %}
</a>
<a class="item" href="{% url 'organizations:details' organization.pk %}">
<i class="gear icon"></i>
{% trans 'Settings' %}
</a>
</div>
</div>

{% include 'includes/header.html' %}

<div class="ui container">
<div class="repo ribbon">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,103 +2,105 @@
{% load i18n static kala_tags %}

{% block content %}
<div class="repo ribbon">
<div class="ui container">
<div class="ui big breadcrumb">
<h2 class="active section">{% trans 'New Organization' %}</h2>
</div>
</div>
<div class="ui divider">
</div>
</div>

<div class="ui one column grid container">
<div class="ui container">
<div class="twelve wide column">
<form class="ui form {% if form.errors %}error{% endif %}" method="post">
{% csrf_token %}
<div class="field">
<label>{{ form.name.label }}</label>
{{ form.name }}
{% if form.name.errors %}
<div class="ui error message">
{{ form.name.errors }}
<div class="repo ribbon">
<div class="ui container">
<div class="ui big breadcrumb">
<h2 class="active section">{% trans 'New Organization' %}</h2>
</div>
{% endif %}
</div>
<div class="field">
<label>{{ form.address.label }}</label>
{{ form.address }}
{% if form.address.errors %}
<div class="ui error message">
{{ form.address.errors }}
</div>
{% endif %}
<div class="ui divider">
</div>
<div class="field">
<label>{{ form.address1.label }}</label>
{{ form.address1 }}
{% if form.address1.errors %}
<div class="ui error message">
{{ form.address1.errors }}
</div>

<div class="twelve wide column">
<form class="ui form {% if form.errors %}error{% endif %}" method="post">
{% csrf_token %}
<div class="field">
<label>{{ form.name.label }}</label>
{{ form.name }}
{% if form.name.errors %}
<div class="ui error message">
{{ form.name.errors }}
</div>
{% endif %}
</div>
{% endif %}
</div>
<div class="field">
<label>{{ form.city.label }}</label>
{{ form.city }}
{% if form.city.errors %}
<div class="ui error message">
{{ form.city.errors }}
<div class="field">
<label>{{ form.address.label }}</label>
{{ form.address }}
{% if form.address.errors %}
<div class="ui error message">
{{ form.address.errors }}
</div>
{% endif %}
</div>
{% endif %}
</div>
<div class="field">
<label>{{ form.state.label }}</label>
{{ form.state }}
{% if form.state.errors %}
<div class="ui error message">
{{ form.state.errors }}
<div class="field">
<label>{{ form.address1.label }}</label>
{{ form.address1 }}
{% if form.address1.errors %}
<div class="ui error message">
{{ form.address1.errors }}
</div>
{% endif %}
</div>
{% endif %}
</div>
<div class="field">
<label>{{ form.zip.label }}</label>
{{ form.zip }}
{% if form.zip.errors %}
<div class="ui error message">
{{ form.zip.errors }}
<div class="field">
<label>{{ form.city.label }}</label>
{{ form.city }}
{% if form.city.errors %}
<div class="ui error message">
{{ form.city.errors }}
</div>
{% endif %}
</div>
{% endif %}
</div>
<div class="field">
<label>{{ form.country.label }}</label>
{{ form.country }}
{% if form.country.errors %}
<div class="ui error message">
{{ form.country.errors }}
<div class="field">
<label>{{ form.state.label }}</label>
{{ form.state }}
{% if form.state.errors %}
<div class="ui error message">
{{ form.state.errors }}
</div>
{% endif %}
</div>
{% endif %}
</div>
<div class="field">
<label>{{ form.phone.label }}</label>
{{ form.phone }}
{% if form.phone.errors %}
<div class="ui error message">
{{ form.phone.errors }}
<div class="field">
<label>{{ form.zip.label }}</label>
{{ form.zip }}
{% if form.zip.errors %}
<div class="ui error message">
{{ form.zip.errors }}
</div>
{% endif %}
</div>
{% endif %}
</div>
<div class="field">
<label>{{ form.website.label }}</label>
{{ form.website }}
{% if form.phone.errors %}
<div class="ui error message">
{{ form.website.errors }}
<div class="field">
<label>{{ form.country.label }}</label>
{{ form.country }}
{% if form.country.errors %}
<div class="ui error message">
{{ form.country.errors }}
</div>
{% endif %}
</div>
{% endif %}
</div>
<button class="ui button primary" type="submit">{% trans 'Create ogranization' %}</button>
</form>
<div class="field">
<label>{{ form.phone.label }}</label>
{{ form.phone }}
{% if form.phone.errors %}
<div class="ui error message">
{{ form.phone.errors }}
</div>
{% endif %}
</div>
<div class="field">
<label>{{ form.website.label }}</label>
{{ form.website }}
{% if form.phone.errors %}
<div class="ui error message">
{{ form.website.errors }}
</div>
{% endif %}
</div>
<button class="ui button primary" type="submit">{% trans 'Create ogranization' %}</button>
</form>
</div>
</div>
</div>
{% endblock %}
Expand Down

0 comments on commit ec3775f

Please sign in to comment.