diff --git a/apps/bootstrap/__init__.py b/apps/bootstrap/__init__.py index 07c8a915e2..2b0080d630 100644 --- a/apps/bootstrap/__init__.py +++ b/apps/bootstrap/__init__.py @@ -3,9 +3,10 @@ from __future__ import absolute_import from project_setup.api import register_setup from navigation.api import register_links#, register_sidebar_template -from .links import database_bootstrap, bootstrap_execute +from .links import database_bootstrap, bootstrap_execute, erase_database_link from .api import BootstrapSimple, BootstrapPermit register_setup(database_bootstrap) +register_setup(erase_database_link) register_links(BootstrapSimple, [bootstrap_execute]) register_links(BootstrapPermit, [bootstrap_execute]) diff --git a/apps/bootstrap/api.py b/apps/bootstrap/api.py index af86042dc3..001f2e7f6f 100644 --- a/apps/bootstrap/api.py +++ b/apps/bootstrap/api.py @@ -2,14 +2,48 @@ from __future__ import absolute_import from django.utils.translation import ugettext_lazy as _ from django.utils.translation import ugettext +from django.contrib.auth.models import User, Group from metadata.models import MetadataType, MetadataSet from document_indexing.models import Index, IndexTemplateNode -from documents.models import DocumentType, DocumentTypeFilename +from documents.models import DocumentType, DocumentTypeFilename, Document +from permissions.models import Role +from metadata.api import save_metadata_list +#from sources.models import WebForm, StagingFolder bootstrap_options = {} +def nuke_database(): + for obj in Document.objects.all(): + obj.delete() + + for obj in MetadataType.objects.all(): + obj.delete() + + for obj in MetadataSet.objects.all(): + obj.delete() + + for obj in Index.objects.all(): + obj.delete() + + for obj in DocumentType.objects.all(): + obj.delete() + + #for obj in WebForm.objects.all(): + # obj.delete() + + #for obj in StagingFolder.objects.all(): + # obj.delete() + + for obj in Group.objects.all(): + obj.delete() + + for obj in User.objects.all(): + if not obj.is_superuser and not obj.is_staff: + obj.delete() + + class BootstrapBase(object): name = None label = '' diff --git a/apps/bootstrap/links.py b/apps/bootstrap/links.py index e2af43dbaa..cbb8f6b238 100644 --- a/apps/bootstrap/links.py +++ b/apps/bootstrap/links.py @@ -7,3 +7,4 @@ def is_superuser(context): database_bootstrap = {'text': _(u'bootstrap database'), 'view': 'bootstrap_type_list', 'icon': 'database_lightning.png', 'condition': is_superuser}#, 'children_view_regex': [r'statistics']} bootstrap_execute = {'text': _(u'execute'), 'view': 'bootstrap_execute', 'args': 'object.name', 'sprite': 'database_lightning.png', 'condition': is_superuser}#, 'children_view_regex': [r'statistics']} +erase_database_link = {'text': _(u'erase database'), 'view': 'erase_database_view', 'icon': 'radioactivity.png', 'condition': is_superuser}#, 'children_view_regex': [r'statistics']} diff --git a/apps/bootstrap/models.py b/apps/bootstrap/models.py index 1f13d1559f..137941ffae 100644 --- a/apps/bootstrap/models.py +++ b/apps/bootstrap/models.py @@ -1,12 +1 @@ -from __future__ import absolute_import - -#import logging - -#from django.db import models -#from django.utils.translation import ugettext_lazy as _ - -#logger = logging.getLogger(__name__) - - -#class CompanyType(models.Model): -# name = +from django.db import models diff --git a/apps/bootstrap/static/images/icons/radioactivity.png b/apps/bootstrap/static/images/icons/radioactivity.png new file mode 100755 index 0000000000..ad5d5348ff Binary files /dev/null and b/apps/bootstrap/static/images/icons/radioactivity.png differ diff --git a/apps/bootstrap/urls.py b/apps/bootstrap/urls.py index a9c29813a2..fe6da57712 100644 --- a/apps/bootstrap/urls.py +++ b/apps/bootstrap/urls.py @@ -3,4 +3,5 @@ from django.conf.urls.defaults import patterns, url urlpatterns = patterns('bootstrap.views', url(r'^type/list/$', 'bootstrap_type_list', (), 'bootstrap_type_list'), url(r'^(?P\w+)/execute/$', 'bootstrap_execute', (), 'bootstrap_execute'), + url(r'^nuke/$', 'erase_database_view', (), 'erase_database_view'), ) diff --git a/apps/bootstrap/views.py b/apps/bootstrap/views.py index 3be20b1dc1..cc1bfef44e 100644 --- a/apps/bootstrap/views.py +++ b/apps/bootstrap/views.py @@ -7,7 +7,7 @@ from django.template import RequestContext from django.contrib import messages from django.core.urlresolvers import reverse -from .api import bootstrap_options +from .api import bootstrap_options, nuke_database def bootstrap_type_list(request): @@ -49,7 +49,7 @@ def bootstrap_execute(request, bootstrap_name): 'delete_view': False, 'previous': previous, 'next': next, - #'form_icon': u'basket_remove.png', + 'form_icon': u'database_lightning.png', 'object': bootstrap, } @@ -57,3 +57,35 @@ def bootstrap_execute(request, bootstrap_name): return render_to_response('generic_confirm.html', context, context_instance=RequestContext(request)) + + +def erase_database_view(request): + # TODO: check for permission + + post_action_redirect = None + + previous = request.POST.get('previous', request.GET.get('previous', request.META.get('HTTP_REFERER', '/'))) + next = request.POST.get('next', request.GET.get('next', post_action_redirect if post_action_redirect else request.META.get('HTTP_REFERER', '/'))) + + if request.method == 'POST': + try: + nuke_database() + except Exception, exc: + messages.error(request, _(u'Error erasing database; %s') % exc) + else: + messages.success(request, _(u'Database erased successfully.')) + return HttpResponseRedirect(next) + + context = { + #'object_name': _(u'bootstrap setup'), + 'delete_view': False, + 'previous': previous, + 'next': next, + 'form_icon': u'radioactivity.png', + #'object': bootstrap, + } + + context['title'] = _(u'Are you sure you wish to erase the entire database and document storage?') + + return render_to_response('generic_confirm.html', context, + context_instance=RequestContext(request))