diff --git a/.coveragerc b/.coveragerc index 7433c3ad1..c01027666 100644 --- a/.coveragerc +++ b/.coveragerc @@ -1,13 +1,9 @@ [run] -source = . +source = rdmo [report] omit = - rdmo/wsgi.py - rdmo/settings/* - apps/core/management/commands/* - env/* - */migrations/* + rdmo/core/management/commands/* exclude_lines = raise Exception except ImportError: diff --git a/.gitignore b/.gitignore index 49ec037d2..91d016d2b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,11 @@ -rdmo/settings/local.py +testing/config/settings/local.py -components_root static_root -media_root +components_root docs/_build* +__pycache__ *.pyc *~ *.swp @@ -15,10 +15,9 @@ env env2 env3 -*.sqlite3 - .coverage htmlcov -themes -theme +build +dist +*.egg-info diff --git a/.travis.yml b/.travis.yml index f4e2f0fba..cc37619f7 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,27 +1,35 @@ language: python -cache: - directories: - - $HOME/virtualenv +cache: pip + services: - postgresql - mysql + python: - 2.7 - 3.4 +- 3.5 +- 3.6 + env: - DB=postgres - DB=mysql - DB=sqlite3 + before_install: - sudo apt-get install pandoc + install: -- pip install -r requirements/base.txt -- pip install -r requirements/postgres.txt -- pip install -r requirements/mysql.txt -- pip install -r requirements/testing.txt +- pip install -e . +- pip install mysqlclient +- pip install psycopg2 +- pip install coveralls + before_script: -- sh -c "cp testing/settings/$DB.py rdmo/settings/local.py; fi" +- sh -c "cp testing/config/settings/$DB.py testing/config/settings/local.py; fi" + script: -- coverage run manage.py test +- coverage run testing/runtests.py + after_success: - coveralls diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 000000000..2f825479c --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1,5 @@ +graft rdmo +prune config + +global-exclude __pycache__ +global-exclude *.py[co] diff --git a/README.md b/README.md deleted file mode 100644 index 75f544d1a..000000000 --- a/README.md +++ /dev/null @@ -1,21 +0,0 @@ -RDMO - Research Data Management Organiser -========================================= - -[![Build Status](https://travis-ci.org/rdmorganiser/rdmo.svg?branch=master)](https://travis-ci.org/rdmorganiser/rdmo) -[![Coverage Status](https://coveralls.io/repos/rdmorganiser/rdmo/badge.svg?branch=master&service=github)](https://coveralls.io/github/rdmorganiser/rdmo?branch=master) -[![Documentation status](https://readthedocs.org/projects/rdmo/badge/?version=latest)](http://rdmo.readthedocs.io/en/latest/?badge=latest) - -RDMO is a tool to support the systematic planning, organisation and implementation of the data management throughout the course of a research project. RDMO is funded by the Deutsche Forschungsgemeinschaft (DFG). - -
-
Home Page
-
https://rdmorganiser.github.io
-
Source code
-
https://github.com/rdmorganiser/rdmo
-
Documentation
-
http://rdmo.readthedocs.io
-
Demo
-
https://rdmo.aip.de
-
- -Warning: This software is currently in an early stage of development and not production ready. diff --git a/README.rst b/README.rst new file mode 100644 index 000000000..f4f76459b --- /dev/null +++ b/README.rst @@ -0,0 +1,44 @@ +RDMO - Research Data Management Organiser +========================================= + +.. image:: https://travis-ci.org/rdmorganiser/rdmo.svg?branch=master + :alt: Build Status + :target: https://travis-ci.org/rdmorganiser/rdmo + +.. image:: https://coveralls.io/repos/rdmorganiser/rdmo/badge.svg?branch=master&service=github + :alt: Coverage Status + :target: https://coveralls.io/github/rdmorganiser/rdmo?branch=master + +.. image:: https://img.shields.io/pypi/v/rdmo.svg?style=flat + :alt: Latest Version + :target: https://pypi.python.org/pypi/rdmo/ + +.. image:: https://readthedocs.org/projects/rdmo/badge/?version=latest + :alt: Documentation status + :target: http://rdmo.readthedocs.io/en/latest/?badge=latest + +.. image:: http://img.shields.io/badge/license-APACHE-blue.svg?style=flat + :alt: License + :target: https://github.com/rdmorganiser/rdmo/blob/master/LICENSE + +RDMO is a tool to support the systematic planning, organisation and implementation of the data management throughout the course of a research project. RDMO is funded by the Deutsche Forschungsgemeinschaft (DFG). + +Home Page + https://rdmorganiser.github.io + +Source code + https://github.com/rdmorganiser/rdmo + +Documentation + http://rdmo.readthedocs.io + +Mailing list + https://www.listserv.dfn.de/sympa/subscribe/rdmo + +Slack + https://rdmo.slack.com + +Demo + https://rdmo.aip.de + +Warning: This software is currently under development and not production ready. diff --git a/apps/accounts/__init__.py b/apps/accounts/__init__.py deleted file mode 100644 index 6e06525b9..000000000 --- a/apps/accounts/__init__.py +++ /dev/null @@ -1 +0,0 @@ -default_app_config = 'apps.accounts.app_config.AccountsConfig' diff --git a/apps/conditions/__init__.py b/apps/conditions/__init__.py deleted file mode 100644 index e7a64215d..000000000 --- a/apps/conditions/__init__.py +++ /dev/null @@ -1 +0,0 @@ -default_app_config = 'apps.conditions.app_config.ConditionsConfig' diff --git a/apps/domain/__init__.py b/apps/domain/__init__.py deleted file mode 100644 index d68550164..000000000 --- a/apps/domain/__init__.py +++ /dev/null @@ -1 +0,0 @@ -default_app_config = 'apps.domain.app_config.DomainConfig' diff --git a/apps/options/__init__.py b/apps/options/__init__.py deleted file mode 100644 index 48f8b231a..000000000 --- a/apps/options/__init__.py +++ /dev/null @@ -1 +0,0 @@ -default_app_config = 'apps.options.app_config.OptionsConfig' diff --git a/apps/options/tests.py b/apps/options/tests.py deleted file mode 100644 index a9f6122f4..000000000 --- a/apps/options/tests.py +++ /dev/null @@ -1,130 +0,0 @@ -from django.test import TestCase - -from test_generator.views import TestListViewMixin -from test_generator.viewsets import TestModelViewsetMixin, TestListViewsetMixin, TestRetrieveViewsetMixin - -from apps.core.testing.mixins import TestExportViewMixin, TestImportViewMixin -from apps.accounts.utils import set_group_permissions - -from apps.conditions.models import Condition - -from .models import OptionSet, Option - - -class OptionsTestCase(TestCase): - - fixtures = ( - 'users.json', - 'groups.json', - 'accounts.json', - 'conditions.json', - 'domain.json', - 'options.json', - ) - - languages = ( - 'en', - ) - - users = ( - ('editor', 'editor'), - ('reviewer', 'reviewer'), - ('user', 'user'), - ('api', 'api'), - ('anonymous', None), - ) - - status_map = { - 'list_view': { - 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302 - }, - 'export_view': { - 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302 - }, - 'list_viewset': { - 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 403 - }, - 'retrieve_viewset': { - 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 403 - }, - 'create_viewset': { - 'editor': 201, 'reviewer': 403, 'api': 403, 'user': 403, 'anonymous': 403 - }, - 'update_viewset': { - 'editor': 200, 'reviewer': 403, 'api': 403, 'user': 403, 'anonymous': 403 - }, - 'delete_viewset': { - 'editor': 204, 'reviewer': 403, 'api': 403, 'user': 403, 'anonymous': 403 - } - } - - @classmethod - def setUpTestData(cls): - set_group_permissions() - - -class OptionsTests(TestListViewMixin, OptionsTestCase): - - url_names = { - 'list_view': 'options' - } - - -class OptionSetTests(TestModelViewsetMixin, OptionsTestCase): - - instances = OptionSet.objects.all() - url_names = { - 'viewset': 'internal-options:optionset' - } - - def prepare_create_instance(self, instance): - instance.key += '_new' - return instance - - -class OptionTests(TestModelViewsetMixin, OptionsTestCase): - - instances = Option.objects.all() - url_names = { - 'viewset': 'internal-options:option' - } - - def prepare_create_instance(self, instance): - instance.key += '_new' - return instance - - -class ConditionTests(TestListViewsetMixin, TestRetrieveViewsetMixin, OptionsTestCase): - - instances = Condition.objects.all() - url_names = { - 'viewset': 'internal-options:condition' - } - - -class OptionsExportTests(TestExportViewMixin, OptionsTestCase): - - url_names = { - 'export_view': 'options_export' - } - - -class OptionsImportTests(TestImportViewMixin, TestCase): - - import_file = 'testing/xml/options.xml' - - -class OptionSetAPITests(TestListViewsetMixin, TestRetrieveViewsetMixin, OptionsTestCase): - - instances = OptionSet.objects.all() - url_names = { - 'viewset': 'api-v1-options:optionset' - } - - -class OptionAPITests(TestListViewsetMixin, TestRetrieveViewsetMixin, OptionsTestCase): - - instances = Option.objects.all() - url_names = { - 'viewset': 'api-v1-options:option' - } diff --git a/apps/projects/__init__.py b/apps/projects/__init__.py deleted file mode 100644 index db9141a74..000000000 --- a/apps/projects/__init__.py +++ /dev/null @@ -1 +0,0 @@ -default_app_config = 'apps.projects.app_config.ProjectsConfig' diff --git a/apps/projects/tests.py b/apps/projects/tests.py deleted file mode 100644 index fb1565af7..000000000 --- a/apps/projects/tests.py +++ /dev/null @@ -1,251 +0,0 @@ -from django.test import TestCase -from django.utils import translation -from django.core.urlresolvers import reverse - -from test_generator.core import TestModelStringMixin -from test_generator.views import TestUpdateViewMixin, TestDeleteViewMixin, TestModelViewMixin -from test_generator.viewsets import TestModelViewsetMixin, TestReadOnlyModelViewsetMixin - -from apps.accounts.utils import set_group_permissions -from apps.questions.models import Catalog, QuestionEntity - -from .models import Project, Membership, Value - - -class ProjectsTestCase(TestCase): - - fixtures = ( - 'users.json', - 'groups.json', - 'accounts.json', - 'conditions.json', - 'domain.json', - 'options.json', - 'questions.json', - 'tasks.json', - 'views.json', - 'projects.json', - ) - - languages = ( - 'en', - ) - - users = ( - ('owner', 'owner'), - ('manager', 'manager'), - ('author', 'author'), - ('guest', 'guest'), - ('user', 'user'), - ('anonymous', None), - ) - - @classmethod - def setUpTestData(cls): - set_group_permissions() - - -class ProjectTests(TestModelViewMixin, TestReadOnlyModelViewsetMixin, TestModelStringMixin, ProjectsTestCase): - instances = Project.objects.filter(pk=1) - url_names = { - 'list_view': 'projects', - 'retrieve_view': 'project', - 'create_view': 'project_create', - 'update_view': 'project_update', - 'delete_view': 'project_delete', - 'export_view': 'project_export_xml', - 'viewset': 'internal-projects:project' - } - status_map = { - 'list_view': { - 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 302, - }, - 'retrieve_view': { - 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 403, 'anonymous': 302 - }, - 'create_view_get': { - 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 302 - }, - 'create_view_post': { - 'owner': 302, 'manager': 302, 'author': 302, 'guest': 302, 'user': 302, 'anonymous': 302 - }, - 'update_view_get': { - 'owner': 200, 'manager': 200, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302 - }, - 'update_view_post': { - 'owner': 302, 'manager': 302, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302 - }, - 'delete_view_get': { - 'owner': 200, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302 - }, - 'delete_view_post': { - 'owner': 302, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302 - }, - 'export_view': { - 'owner': 200, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302 - }, - 'list_viewset': { - 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 403 - }, - 'retrieve_viewset': { - 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 404, 'anonymous': 403 - } - } - - def _test_export(self, username, password): - translation.activate(self.lang) - - if password: - self.client.login(username=username, password=password) - - for instance in self.instances: - url = reverse(self.url_names['export_view'], kwargs={'pk': instance.pk}) - response = self.client.get(url) - - try: - self.assertEqual(response.status_code, self.status_map['export_view'][username]) - except AssertionError: - print( - ('test', 'test_export'), - ('username', username), - ('url', url), - ('format', format), - ('status_code', response.status_code), - ('content', response.content) - ) - raise - - self.client.logout() - - -class MembershipTests(TestUpdateViewMixin, TestDeleteViewMixin, TestModelStringMixin, ProjectsTestCase): - - project_id = 1 - instances = Membership.objects.filter(project__pk=project_id) - url_names = { - 'create_view': 'membership_create', - 'update_view': 'membership_update', - 'delete_view': 'membership_delete' - } - status_map = { - 'create_view_get': { - 'owner': 200, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302 - }, - 'create_view_post': { - 'owner': 302, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302 - }, - 'update_view_get': { - 'owner': 200, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302 - }, - 'update_view_post': { - 'owner': 302, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302 - }, - 'delete_view_get': { - 'owner': 200, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302 - }, - 'delete_view_post': { - 'owner': 302, 'manager': 403, 'author': 403, 'guest': 403, 'user': 403, 'anonymous': 302 - } - } - - def _test_create_view_post(self, username, password): - translation.activate(self.lang) - - if password: - self.client.login(username=username, password=password) - - for role in ['owner', 'manager', 'author', 'guest']: - url = reverse(self.url_names['create_view'], args=[self.project_id]) - data = { - 'username_or_email': 'user', - 'role': role - } - response = self.client.post(url, data) - - try: - self.assertEqual(response.status_code, self.status_map['create_view_post'][username]) - try: - Membership.objects.get(user__username='user', role=role).delete() - except Membership.DoesNotExist: - pass - except AssertionError: - print( - ('test', 'test_create_view_post'), - ('username', username), - ('url', url), - ('data', data), - ('status_code', response.status_code), - ('content', response.content) - ) - raise - - self.client.logout() - - def get_update_url_args(self, instance): - return [self.project_id, instance.pk] - - def get_delete_url_args(self, instance): - return [self.project_id, instance.pk] - - -class ValueTests(TestModelViewsetMixin, ProjectsTestCase): - - project_id = 1 - instances = Value.objects.filter(project__pk=project_id) - url_names = { - 'viewset': 'internal-projects:value' - } - status_map = { - 'list_viewset': {'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 403, 'anonymous': 403}, - 'retrieve_viewset': {'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 403, 'anonymous': 403}, - 'create_viewset': {'owner': 201, 'manager': 201, 'author': 201, 'guest': 403, 'user': 403, 'anonymous': 403}, - 'update_viewset': {'owner': 200, 'manager': 200, 'author': 200, 'guest': 403, 'user': 403, 'anonymous': 403}, - 'delete_viewset': {'owner': 204, 'manager': 204, 'author': 204, 'guest': 403, 'user': 403, 'anonymous': 403} - } - - def get_list_viewset_query_params(self): - return {'project': self.project_id} - - def get_retrieve_viewset_query_params(self, instance): - return {'project': self.project_id} - - def get_create_viewset_query_params(self): - return {'project': self.project_id, 'foo': 'bar'} - - def get_update_viewset_query_params(self, instance): - return {'project': self.project_id} - - def get_delete_viewset_query_params(self, instance): - return {'project': self.project_id} - - -class QuestionEntityTests(TestReadOnlyModelViewsetMixin, ProjectsTestCase): - - instances = QuestionEntity.objects.filter(question__parent=None) - url_names = { - 'viewset': 'internal-projects:entity' - } - status_map = { - 'list_viewset': { - 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 403 - }, - 'retrieve_viewset': { - 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 403 - } - } - - -class CatalogTests(TestReadOnlyModelViewsetMixin, ProjectsTestCase): - - instances = Catalog.objects.all() - url_names = { - 'viewset': 'internal-projects:catalog' - } - status_map = { - 'list_viewset': { - 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 403 - }, - 'retrieve_viewset': { - 'owner': 200, 'manager': 200, 'author': 200, 'guest': 200, 'user': 200, 'anonymous': 403 - } - } diff --git a/apps/questions/__init__.py b/apps/questions/__init__.py deleted file mode 100644 index 3fde3709c..000000000 --- a/apps/questions/__init__.py +++ /dev/null @@ -1 +0,0 @@ -default_app_config = 'apps.questions.app_config.QuestionsConfig' diff --git a/apps/questions/tests.py b/apps/questions/tests.py deleted file mode 100644 index b49f536cb..000000000 --- a/apps/questions/tests.py +++ /dev/null @@ -1,222 +0,0 @@ -from django.core.urlresolvers import reverse -from django.test import TestCase - -from test_generator.views import TestListViewMixin -from test_generator.viewsets import TestModelViewsetMixin, TestListViewsetMixin, TestRetrieveViewsetMixin - -from apps.core.testing.mixins import TestImportViewMixin -from apps.accounts.utils import set_group_permissions - -from .models import Catalog, Section, Subsection, QuestionEntity, Question - - -class QuestionsTestCase(TestCase): - - fixtures = ( - 'users.json', - 'groups.json', - 'accounts.json', - 'conditions.json', - 'domain.json', - 'options.json', - 'questions.json', - ) - - languages = ( - 'en', - ) - - users = ( - ('editor', 'editor'), - ('reviewer', 'reviewer'), - ('user', 'user'), - ('api', 'api'), - ('anonymous', None), - ) - - status_map = { - 'list_view': { - 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302 - }, - 'export_view': { - 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 302 - }, - 'list_viewset': { - 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 403 - }, - 'retrieve_viewset': { - 'editor': 200, 'reviewer': 200, 'api': 200, 'user': 403, 'anonymous': 403 - }, - 'create_viewset': { - 'editor': 201, 'reviewer': 403, 'api': 403, 'user': 403, 'anonymous': 403 - }, - 'update_viewset': { - 'editor': 200, 'reviewer': 403, 'api': 403, 'user': 403, 'anonymous': 403 - }, - 'delete_viewset': { - 'editor': 204, 'reviewer': 403, 'api': 403, 'user': 403, 'anonymous': 403 - } - } - - @classmethod - def setUpTestData(cls): - set_group_permissions() - - -class QuestionsTests(TestListViewMixin, QuestionsTestCase): - - url_names = { - 'list_view': 'catalogs' - } - - -class CatalogTests(TestModelViewsetMixin, QuestionsTestCase): - - instances = Catalog.objects.all() - url_names = { - 'viewset': 'internal-questions:catalog' - } - - def prepare_create_instance(self, instance): - instance.key += '_new' - return instance - - -class SectionTests(TestModelViewsetMixin, QuestionsTestCase): - - instances = Section.objects.all() - url_names = { - 'viewset': 'internal-questions:section' - } - - def prepare_create_instance(self, instance): - instance.key += '_new' - return instance - - -class SubsectionTests(TestModelViewsetMixin, QuestionsTestCase): - - instances = Subsection.objects.all() - url_names = { - 'viewset': 'internal-questions:subsection' - } - - def prepare_create_instance(self, instance): - instance.key += '_new' - return instance - - -class QuestionSetTests(TestModelViewsetMixin, QuestionsTestCase): - - instances = QuestionEntity.objects.filter(question=None) - url_names = { - 'viewset': 'internal-questions:questionset' - } - - def prepare_create_instance(self, instance): - instance.key += '_new' - return instance - - -class QuestionTests(TestModelViewsetMixin, QuestionsTestCase): - - instances = Question.objects.all() - url_names = { - 'viewset': 'internal-questions:question' - } - - def prepare_create_instance(self, instance): - instance.key += '_new' - return instance - - -class WidgetTypeTests(TestListViewsetMixin, QuestionsTestCase): - - url_names = { - 'viewset': 'internal-questions:widgettype' - } - status_map = { - 'list_viewset': {'editor': 200, 'reviewer': 200, 'api': 200, 'user': 200, 'anonymous': 403} - } - - -class CatalogExportTests(QuestionsTestCase): - - instances = Catalog.objects.all() - url_names = { - 'export_view': 'questions_catalog_export' - } - export_formats = ('xml', 'html', 'rtf') - - def _test_export_detail(self, username, password): - - if password: - self.client.login(username=username, password=password) - - for instance in self.instances: - for format in self.export_formats: - url = reverse(self.url_names['export_view'], kwargs={ - 'pk': instance.pk, - 'format': format - }) - response = self.client.get(url) - - try: - self.assertEqual(response.status_code, self.status_map['export_view'][username]) - except AssertionError: - print( - ('test', 'test_export'), - ('username', username), - ('url', url), - ('format', format), - ('status_code', response.status_code), - ('content', response.content) - ) - raise - - self.client.logout() - - -class CatalogImportTests(TestImportViewMixin, TestCase): - - import_file = 'testing/xml/catalog.xml' - - -class CatalogAPITests(TestListViewsetMixin, TestRetrieveViewsetMixin, QuestionsTestCase): - - instances = Catalog.objects.all() - url_names = { - 'viewset': 'api-v1-questions:catalog' - } - - -class SectionAPITests(TestListViewsetMixin, TestRetrieveViewsetMixin, QuestionsTestCase): - - instances = Section.objects.all() - url_names = { - 'viewset': 'api-v1-questions:section' - } - - -class SubsectionAPITests(TestListViewsetMixin, TestRetrieveViewsetMixin, QuestionsTestCase): - - instances = Subsection.objects.all() - url_names = { - 'viewset': 'api-v1-questions:subsection' - } - - -class QuestionSetAPITests(TestListViewsetMixin, TestRetrieveViewsetMixin, QuestionsTestCase): - - instances = QuestionEntity.objects.filter(question=None) - url_names = { - 'viewset': 'api-v1-questions:questionset' - } - - -class QuestionAPITests(TestListViewsetMixin, TestRetrieveViewsetMixin, QuestionsTestCase): - - instances = Question.objects.all() - url_names = { - 'viewset': 'api-v1-questions:question' - } diff --git a/apps/tasks/__init__.py b/apps/tasks/__init__.py deleted file mode 100644 index 00803b70b..000000000 --- a/apps/tasks/__init__.py +++ /dev/null @@ -1 +0,0 @@ -default_app_config = 'apps.tasks.app_config.TasksConfig' diff --git a/apps/views/__init__.py b/apps/views/__init__.py deleted file mode 100644 index 0bb989e90..000000000 --- a/apps/views/__init__.py +++ /dev/null @@ -1 +0,0 @@ -default_app_config = 'apps.views.app_config.ViewsConfig' diff --git a/docs/Makefile b/docs/Makefile index b961efb43..dd7a1d10b 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -12,9 +12,12 @@ BUILDDIR = _build help: @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) -.PHONY: help Makefile +live: + sphinx-autobuild -b html $(SPHINXOPTS) $(SOURCEDIR) $(BUILDDIR)/html + +.PHONY: help livehtml livehtml Makefile # Catch-all target: route all unknown targets to Sphinx using the new # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). %: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) \ No newline at end of file + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/administration/index.rst b/docs/administration/index.rst index f97436434..6fa32b368 100644 --- a/docs/administration/index.rst +++ b/docs/administration/index.rst @@ -8,8 +8,8 @@ The admin interface is avalable under the link *Admin* in the navigation bar. It That being said, the admin interface is needed, especially after installation, to set the title and URL of the :doc:`site `, to configure :doc:`users and groups `, to configure the connection to :doc:`OAUTH providers `, and to create :doc:`tokens ` to be used with the API. .. toctree:: + :caption: Index :maxdepth: 2 - :caption: Subpages site users diff --git a/docs/configuration/authentication/allauth.rst b/docs/configuration/authentication/allauth.rst index eed425578..8593d555b 100644 --- a/docs/configuration/authentication/allauth.rst +++ b/docs/configuration/authentication/allauth.rst @@ -10,6 +10,8 @@ To enable regular accounts in RDMO add: .. code:: python + from rdmo.core.settings import INSTALLED_APPS, AUTHENTICATION_BACKENDS + ACCOUNT = True ACCOUNT_SIGNUP = True @@ -20,21 +22,27 @@ To enable regular accounts in RDMO add: AUTHENTICATION_BACKENDS.append('allauth.account.auth_backends.AuthenticationBackend') -to your ``rdmo/settings/local.py``. The setting ``ACCOUNT = True`` enables the general django-allauth features in RDMO, while ``ACCOUNT_SIGNUP = True`` enables new users to register with your RDMO instance. The last lines enable django-allauth to be used by RDMO. +to your ``config/settings/local.py``. The setting ``ACCOUNT = True`` enables the general django-allauth features in RDMO, while ``ACCOUNT_SIGNUP = True`` enables new users to register with your RDMO instance. The last lines enable django-allauth to be used by RDMO. -The behavior of ``django-allauth`` can be further configured by the settings documented in the `django-allauth documentation `_. RDMO sets a few default which can be found in ``rdmo/settings/base.py``. +The behavior of ``django-allauth`` can be further configured by the settings documented in the `django-allauth documentation `_. RDMO sets a few default which can be found in ``config/settings/base.py``. Social accounts ``````````````` -In order to use 3rd party accounts (facebook, github, etc.) with RDMO `additinally` add: +In order to use 3rd party accounts (facebook, github, etc.) with RDMO add: .. code:: python + from rdmo.core.settings import INSTALLED_APPS, AUTHENTICATION_BACKENDS + + ACCOUNT = True + ACCOUNT_SIGNUP = True SOCIALACCOUNT = True INSTALLED_APPS += [ + 'allauth', + 'allauth.account', 'allauth.socialaccount' 'allauth.socialaccount.providers.facebook', 'allauth.socialaccount.providers.github', @@ -44,6 +52,8 @@ In order to use 3rd party accounts (facebook, github, etc.) with RDMO `additinal ... ] -to your ``rdmo/settings/local.py``. The setting ``SOCIALACCOUNT = True`` is used by RDMO to show certain parts of the user interface connected to 3rd party accounts, while as before, the lines after ``INSTALLED_APPS`` enable the feature to be used by RDMO. Each provider has a seperate app you need to add to ``INSTALLED_APPS``. A list of all providers supported by django-allauth can be found `here `_. + AUTHENTICATION_BACKENDS.append('allauth.account.auth_backends.AuthenticationBackend') + +to your ``config/settings/local.py``. The setting ``SOCIALACCOUNT = True`` is used by RDMO to show certain parts of the user interface connected to 3rd party accounts, while as before, the lines after ``INSTALLED_APPS`` enable the feature to be used by RDMO. Each provider has a seperate app you need to add to ``INSTALLED_APPS``. A list of all providers supported by django-allauth can be found `here `_. Once the installation is complete, the credentials of your OAUTH provider need to be entered in the admin interface. This is covered in the :doc:`administration chapter ` of this documentation. diff --git a/docs/configuration/authentication/index.rst b/docs/configuration/authentication/index.rst index e1c154430..360c3cbf9 100644 --- a/docs/configuration/authentication/index.rst +++ b/docs/configuration/authentication/index.rst @@ -12,8 +12,7 @@ RDMO has three main modes for Authentication: If none of the modes is enabled, only a very basic login will be available and users need to be created using the Django Admin Interface. .. toctree:: - :caption: Subpages - :maxdepth: 2 + :hidden: allauth ldap diff --git a/docs/configuration/authentication/ldap.rst b/docs/configuration/authentication/ldap.rst index 0718e1f8a..9ad49c487 100644 --- a/docs/configuration/authentication/ldap.rst +++ b/docs/configuration/authentication/ldap.rst @@ -34,14 +34,15 @@ on the machine running the LDAP servere and type in: and end with a blank line followed by ``ctrl-d``. -Then, in your ``rdmo/settings/local.py`` add or uncomment: +Then, in your ``config/settings/local.py`` add or uncomment: .. code:: python - PROFILE_UPDATE = False - import ldap from django_auth_ldap.config import LDAPSearch + from rdmo.core.settings import AUTHENTICATION_BACKENDS + + PROFILE_UPDATE = False AUTH_LDAP_SERVER_URI = "ldap://ldap.example.com" AUTH_LDAP_BIND_DN = "cn=rdmo,dc=ldap,dc=example,dc=com" diff --git a/docs/configuration/authentication/shibboleth.rst b/docs/configuration/authentication/shibboleth.rst index a377c2917..150cbddb0 100644 --- a/docs/configuration/authentication/shibboleth.rst +++ b/docs/configuration/authentication/shibboleth.rst @@ -24,7 +24,7 @@ Configure your Shibboleth service provider using the files in ``/etc/shibboleth/ * a first name (usually ``givenName``) * a last name (usually ``sn``) -In our test environent this is accomplished by editing '/etc/shibboleth/shibboleth2.xml': +In our test environent this is accomplished by editing ``/etc/shibboleth/shibboleth2.xml``: .. code:: xml @@ -64,14 +64,17 @@ In your Apache2 virtual host configuration, add: -In your ``rdmo/settings/local.py`` add or uncomment: +In your ``config/settings/local.py`` add or uncomment: .. code:: python + from rdmo.core.settings import INSTALLED_APPS, AUTHENTICATION_BACKENDS, MIDDLEWARE_CLASSES + SHIBBOLETH = True PROFILE_UPDATE = False INSTALLED_APPS += ['shibboleth'] + AUTHENTICATION_BACKENDS.append('shibboleth.backends.ShibbolethRemoteUserBackend') MIDDLEWARE_CLASSES.insert( MIDDLEWARE_CLASSES.index('django.contrib.auth.middleware.AuthenticationMiddleware') + 1, diff --git a/docs/configuration/cache.rst b/docs/configuration/cache.rst index 5ebcff0cf..7f6e3e15a 100644 --- a/docs/configuration/cache.rst +++ b/docs/configuration/cache.rst @@ -7,14 +7,19 @@ RDMO uses a cache for some of it's pages. In the development setup, this is done pip install -r requirements/memcached.txt -and add the following to your ``rdmo/settings/local.py``: +and add the following to your ``config/settings/local.py``: .. code:: python CACHES = { - 'default': { + { 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', 'LOCATION': '127.0.0.1:11211', - 'KEY_PREFIX': 'rdmo' + 'KEY_PREFIX': 'rdmo_default' + }, + 'api': { + 'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache', + 'LOCATION': '127.0.0.1:11211', + 'KEY_PREFIX': 'rdmo_api' } } diff --git a/docs/configuration/databases.rst b/docs/configuration/databases.rst index a6f119386..c173f8324 100644 --- a/docs/configuration/databases.rst +++ b/docs/configuration/databases.rst @@ -24,7 +24,7 @@ To use PostgreSQL as your database backend install ``psycopg2`` in your virtual pip install -r requirements/postgres.txt -Then, add the following to your ``rdmo/settings/local.py``: +Then, add the following to your ``config/settings/local.py``: .. code:: python @@ -73,7 +73,7 @@ To use MySQL as your database backend install ``mysqlclient`` in your virtual en pip install -r requirements/mysql.txt -Then, add the following to your ``rdmo/settings/local.py``: +Then, add the following to your ``config/settings/local.py``: .. code:: python @@ -91,7 +91,7 @@ Then, add the following to your ``rdmo/settings/local.py``: } } -to your ``rdmo/settings/local.py``. Here, ``Name`` is the name of the database, ``USER`` the MySQL user, ``PASSWORD`` her password, ``HOST`` the database host, and ``PORT`` the port MySQL is listening on. If you don't use ``/tmp/mysql.sock``, you can use ``unix_socket`` to specify its path. The user and the database can be created using: +to your ``config/settings/local.py``. Here, ``Name`` is the name of the database, ``USER`` the MySQL user, ``PASSWORD`` her password, ``HOST`` the database host, and ``PORT`` the port MySQL is listening on. If you don't use ``/tmp/mysql.sock``, you can use ``unix_socket`` to specify its path. The user and the database can be created using: .. code-block:: mysql @@ -104,7 +104,7 @@ on the MySQL-shell. SQLite `````` -SQLite ist the default option in RDMO and configured in ``rdmo/settings/base.py``. We recommend it only for a development/testing setup. It can be configured in ``rdmo/settings/local.py`` by adding: +SQLite ist the default option in RDMO and configured in ``config/settings/base.py``. We recommend it only for a development/testing setup. It can be configured in ``config/settings/local.py`` by adding: .. code:: python diff --git a/docs/configuration/email.rst b/docs/configuration/email.rst index 29342dab2..3bc66b4d2 100644 --- a/docs/configuration/email.rst +++ b/docs/configuration/email.rst @@ -1,7 +1,7 @@ E-Mail ------ -RDMO needs to send E-Mails to its users. The connection to the SMPT server is configured several settings in your ``rdmo/settings/local.py``: +RDMO needs to send E-Mails to its users. The connection to the SMPT server is configured several settings in your ``config/settings/local.py``: .. code:: python @@ -28,4 +28,4 @@ For a development/testing setup a simple e-mail backend, which only displays the EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend' EMAIL_FROM = 'info@example.com' -This is also the default backend, if no email settings are added to ``rdmo/settings/local.py``. +This is also the default backend, if no email settings are added to ``config/settings/local.py``. diff --git a/docs/configuration/export-formats.rst b/docs/configuration/export-formats.rst new file mode 100644 index 000000000..7dd6c3740 --- /dev/null +++ b/docs/configuration/export-formats.rst @@ -0,0 +1,19 @@ +Export formats +-------------- + +RDMO supports exports to certain formats using the excellent `pandoc `_ converter. The list of formats to select can be customized by changinng the ``EXPORT_FORMATS`` setting in your ``config/settings/local.py``. + +.. code:: python + + EXPORT_FORMATS = ( + ('pdf', _('PDF')), + ('rtf', _('Rich Text Format')), + ('odt', _('Open Office')), + ('docx', _('Microsoft Office')), + ('html', _('HTML')), + ('markdown', _('Markdown')), + ('mediawiki', _('mediawiki')), + ('tex', _('LaTeX')) + ) + +The different formats supported by pando can be found `on the pandoc homepage `_. diff --git a/docs/configuration/general.rst b/docs/configuration/general.rst index a6c70806d..e2af9c6ff 100644 --- a/docs/configuration/general.rst +++ b/docs/configuration/general.rst @@ -1,7 +1,7 @@ General settings ---------------- -A few general setting should be included in your ``rdmo/settings/local.py``. The first, and probably most important one is if you run RDMO in `debug mode `_ or not: +A few general setting should be included in your ``config/settings/local.py``. The first, and probably most important one is if you run RDMO in `debug mode `_ or not: .. code:: python @@ -15,11 +15,13 @@ Django needs a `secret key `_, which you need to specify: .. code:: python - ALLOWED_HOSTS = ['rdmo.example.com'] + ALLOWED_HOSTS = ['localhost', 'rdmo.example.com'] If you want to run RDMO under an alias like http://example.com/rdmo you need to set the base URL: diff --git a/docs/configuration/index.rst b/docs/configuration/index.rst index 8bf7b8473..0858e0966 100644 --- a/docs/configuration/index.rst +++ b/docs/configuration/index.rst @@ -3,16 +3,17 @@ Configuration The RDMO application uses the `Django settings `_ module for it's configuration. To seperate the base configuration and your local adjustments and secret information (e.g. database connections), RDMO splits the settings into two files: -* ``rdmo/settings/base.py``, which is part of the git repository and maintained by the RDMO development team. -* ``rdmo/settings/local.py``, which is ignored by git and should be edited by you. +* ``config/settings/base.py``, which is part of the git repository and maintained by the RDMO development team. +* ``config/settings/local.py``, which is ignored by git and should be edited by you. -As part of the installation ``rdmo/settings/local.py`` should be creted from the template ``rdmo/settings/sample.local.py``. +As part of the installation ``config/settings/local.py`` should be creted from the template ``config/settings/sample.local.py``. -While technically the local settings file ``rdmo/settings/local.py`` can be used to override all of the settings in ``rdmo/settings/sample.local.py``, it should be used to customize the settings already available in ``rdmo/settings/sample.local.py``. +While technically the local settings file ``config/settings/local.py`` can be used to override all of the settings in ``config/settings/sample.local.py``, it should be used to customize the settings already available in ``config/settings/sample.local.py``. This comprises :doc:`general settings `, :doc:`database connections `, how to send :doc:`emails `, the different :doc:`authentication methods `, the usage of :doc:`themes `, and :doc:`caches `. .. toctree:: + :caption: Index :maxdepth: 2 general @@ -20,4 +21,6 @@ This comprises :doc:`general settings `, :doc:`database connections `_. For a suitable logging of RDMO you can add the following to your ``config/settings/local.py``: + +.. code:: python + + import os + from . import BASE_DIR + + LOGGING_DIR = '/var/log/rdmo/' + LOGGING = { + 'version': 1, + 'disable_existing_loggers': True, + 'filters': { + 'require_debug_false': { + '()': 'django.utils.log.RequireDebugFalse' + }, + 'require_debug_true': { + '()': 'django.utils.log.RequireDebugTrue' + } + }, + 'formatters': { + 'default': { + 'format': '[%(asctime)s] %(levelname)s: %(message)s' + }, + 'name': { + 'format': '[%(asctime)s] %(levelname)s %(name)s: %(message)s' + }, + 'console': { + 'format': '[%(asctime)s] %(message)s' + } + }, + 'handlers': { + 'mail_admins': { + 'level': 'ERROR', + 'filters': ['require_debug_false'], + 'class': 'django.utils.log.AdminEmailHandler' + }, + 'error_log': { + 'level': 'ERROR', + 'class':'logging.FileHandler', + 'filename': os.path.join(LOGGING_DIR, 'error.log'), + 'formatter': 'default' + }, + 'rdmo_log': { + 'level': 'DEBUG', + 'class':'logging.FileHandler', + 'filename': os.path.join(LOGGING_DIR, 'rdmo.log'), + 'formatter': 'name' + }, + 'console': { + 'level': 'DEBUG', + 'filters': ['require_debug_true'], + 'class': 'logging.StreamHandler', + 'formatter': 'console' + } + }, + 'loggers': { + 'django': { + 'handlers': ['console'], + 'level': 'INFO', + }, + 'django.request': { + 'handlers': ['mail_admins', 'error_log'], + 'level': 'ERROR', + 'propagate': True + }, + 'rdmo': { + 'handlers': ['rdmo_log'], + 'level': 'DEBUG', + 'propagate': False + } + } + } + +This produces two logs: + +* ``/var/log/rdmo/error.log`` will contain exception messages from application errors (status code: 500). The messages is the same that ist shown when ``DEBUG = True``, which should not be the case in a production environment. In addition to the log entry, an email is send to all admins specified in the ``ADMINS`` setting. +* ``/var/log/rdmo/rdmo.log`` will contain additional logging information from the RDMO code. diff --git a/docs/configuration/themes.rst b/docs/configuration/themes.rst index b7f711a51..04e828584 100644 --- a/docs/configuration/themes.rst +++ b/docs/configuration/themes.rst @@ -1,7 +1,7 @@ Themes ------ -RDMO allows for a high level of customization by modifiing the Django *templates* as well as the static assets (CSS file, images, etc.). This can be done without forking the repository and modify the code directly. To this purpose create a directory ``theme`` in your ``rdmo`` directory and create a ``static`` and a ``templates`` directory inside: +RDMO allows for a high level of customization by modifiing the Django *templates* as well as the static assets (CSS file, images, etc.). Django which RDMO is base on offers a powerful method for this. Inside your ``rdmo-app`` directory you can create a ``theme`` folder with a ``static`` and a ``templates`` directory inside: .. code:: python @@ -15,19 +15,19 @@ Then add: THEME_DIR = os.path.join(BASE_DIR, 'theme') -to your ``rdmo/settings/local.py``. +to your ``config/settings/local.py``. -Templates and static files in the ``theme`` directory override files from RDMO as long as they have the same relative path, e.g. the file ``theme/templates/core/base_navigation.html`` overrides ``apps/core/templates/core/base_navigation.html``. +Templates and static files in the ``theme`` directory override files from RDMO as long as they have the same relative path, e.g. the file ``theme/templates/core/base_navigation.html`` overrides ``rdmo/core/templates/core/base_navigation.html``. Some files you might want to override are: SASS variables - ``apps/core/static/core/css/variables.scss`` can be copied to ``theme/static/css/variables.scss`` and be used to customize colors. + ``rdmo/core/static/core/css/variables.scss`` can be copied to ``theme/static/css/variables.scss`` and be used to customize colors. Navigation bar - ``apps/core/templates/core/base_navigation.html`` can be copied to ``theme/templates/core/base_navigation.html`` and be used to customize the navbar. + ``rdmo/core/templates/core/base_navigation.html`` can be copied to ``theme/templates/core/base_navigation.html`` and be used to customize the navbar. Home page text - ``apps/core/templates/core/home_text_en.html`` and ``apps/core/templates/core/home_text_de.html`` can be copied to ``theme/templates/core/home_text_en.html`` and ``theme/templates/core/home_text_de.html`` and be used to customize text on the home page. + ``rdmo/core/templates/core/home_text_en.html`` and ``rdmo/core/templates/core/home_text_de.html`` can be copied to ``theme/templates/core/home_text_en.html`` and ``theme/templates/core/home_text_de.html`` and be used to customize text on the home page. -Note that updates to the RDMO repository (e.g. a ``git pull``) might render your theme incompatible to the RDMO code and cause errors. In this case the files in ``theme`` need to be adjusted to match their RDMO counterparts in functionality. +Note that updates to the RDMO package might render your theme incompatible to the RDMO code and cause errors. In this case the files in ``theme`` need to be adjusted to match their RDMO counterparts in functionality. diff --git a/docs/deployment/development.rst b/docs/deployment/development.rst index 1ad907a54..58c58db2c 100644 --- a/docs/deployment/development.rst +++ b/docs/deployment/development.rst @@ -15,6 +15,6 @@ If you want the development server to be accessible from other machines you need python manage.py runserver 0.0.0.0:8000 -where ``8000`` is the port and can be changed according to your needs. Please do not use this setup for more than testing, it is not secure. +where ``8000`` is the port and can be changed according to your needs. Please do not use this setup for more than testing and development, it is not secure. More information about the development server can be found in the `Django documentation `_. diff --git a/docs/deployment/index.rst b/docs/deployment/index.rst index 867a9c82c..0114d89a8 100644 --- a/docs/deployment/index.rst +++ b/docs/deployment/index.rst @@ -13,8 +13,8 @@ As already mentioned, RDMO can be run in two different setups: In both cases, the static assets have to be :doc:`collected ` and changes to the code need to be followed by :doc:`re-deploying ` RDMO. .. toctree:: - :caption: Subpages - :maxdepth: 3 + :caption: Index + :maxdepth: 2 development apache diff --git a/docs/development/documentation.rst b/docs/development/documentation.rst new file mode 100644 index 000000000..835e923af --- /dev/null +++ b/docs/development/documentation.rst @@ -0,0 +1,17 @@ +Documentation +============= + +In order to build the documetation, additional dependencies must be installed: + +.. code:: bash + + pip install sphinx sphinx-autobuild sphinx_rtd_theme + + +Then run + +.. code:: bash + + sphinx-autobuild docs docs/_build/html + +from the ``rdmo`` directory to live-edit the documentation. diff --git a/docs/development/index.rst b/docs/development/index.rst index e70417c35..bd86568a3 100644 --- a/docs/development/index.rst +++ b/docs/development/index.rst @@ -2,8 +2,10 @@ Development =========== .. toctree:: - :maxdepth: 3 + :caption: Index + :maxdepth: 2 testing i18n figures + documentation diff --git a/docs/index.rst b/docs/index.rst index 24cdd594d..bc7697ac0 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -18,23 +18,16 @@ Documentation Demo https://rdmo.aip.de -Warning: This software is currently in an early stage of development and not production ready. +Warning: This software is currently under development and not production ready. .. toctree:: - :maxdepth: 3 :caption: Documentation + :maxdepth: 2 installation/index deployment/index configuration/index administration/index management/index + upgrade/index development/index - - -Indices and tables ------------------- - -* :ref:`genindex` -* :ref:`modindex` -* :ref:`search` diff --git a/docs/installation/clone.rst b/docs/installation/clone.rst index 832240f53..50327535d 100644 --- a/docs/installation/clone.rst +++ b/docs/installation/clone.rst @@ -1,16 +1,16 @@ -Obtaining the code ------------------- +Obtaining the app directory +--------------------------- -RDMO is hosted on github.com. Once you have ``git`` installed, clone the current master branch using: +The next step is to create the ``rdmo-app`` directory by clone the corresponding repository: .. code:: bash - git clone https://github.com/rdmorganiser/rdmo + git clone https://github.com/rdmorganiser/rdmo-app -We use `Semantic Versioning `_ for RDMO and you can find a list of all our releases on https://github.com/rdmorganiser/rdmo/releases. To checkout a particular release, change to the cloned directory and run: +Note that this is not the main ``rdmo``, repository, only the configuration files. Inside this directory, you will find: -.. code:: bash - - git checkout tags/VERSION +* a ``config`` directory, containing the main settings of your RDMO installation, +* a ``requirements`` directory, containing shortcuts to install the diffrent mandatory and optional dependencies, and +* a ``manage.py`` script, which is the main way to interact with your RDMO installation on the command line. Most of the following steps will use this script. -where VERSION stands for the particular version, e.g. ``v0.4.0``. +The ``rdmo-app`` directory corresponds to a `project `_ in Django terms. diff --git a/docs/installation/front-end.rst b/docs/installation/front-end.rst deleted file mode 100644 index 7367c7939..000000000 --- a/docs/installation/front-end.rst +++ /dev/null @@ -1,47 +0,0 @@ -Install front-end components ----------------------------- - -Finally, install the front-end components (JavaScript and CSS libraries). This can be done in two ways: just downloading the files or using bower. - -Download files -~~~~~~~~~~~~~~ - -The front-end components can be downloaded using ``wget`` from a different repository. After download, they need to be extracted into a directory ``components_root/bower_components``: - -.. code:: bash - - wget -qO- https://github.com/rdmorganiser/rdmo-components/archive/master.tar.gz | tar xvz - mv rdmo-components-master components_root - - -Bower -~~~~~ - -The usage of bower is more convenient but requires the installation of node.js: - -.. code-block:: bash - - # on debian/Ubuntu - sudo apt-get install nodejs nodejs-legacy npm - sudo npm -g install bower - - # on CentOS - sudo yum install nodejs - sudo npm install -g bower - - # on macOS - brew install node - npm -g install bower - -On Windows, you need to: - -* download and install node.js from https://nodejs.org/en/download -* after the installation of node.js, install bower using ``npm -g install bower`` in ``cmd.exe``. - -Then, the front-side components can be installed (and updated) using: - -.. code:: bash - - python manage.py bower install - -in your virtual environment. diff --git a/docs/installation/index.rst b/docs/installation/index.rst index 091903e20..be62fea07 100644 --- a/docs/installation/index.rst +++ b/docs/installation/index.rst @@ -1,17 +1,25 @@ Installation ============ -We suggest running RDMO on a recent linux distribution. We tested CentOS7, debian 8 (Jessie), and Ubuntu 14.04 and 16.04. For development or testing purposes on macOS and Windows is possible. RDMO is mainly written in Python and should work with a Python 2 (version > 2.7) as well as Python 3 (version > 3.4). +We suggest running RDMO on a recent linux distribution. We tested CentOS7, debian 8 (Jessie), and Ubuntu 14.04 and 16.04. For development or testing purposes an installation on macOS and Windows is possible. The code is mainly written in Python and should work with a Python higher than 3.4. RDMO works also on Python 2.7. -Ouside of production, RDMO can be installed using your regular user account. In production, a dedicated user account should be used. We suggest to create a user called ``rdmo`` with the group ``rdmo`` and the home directory ``/srv/rdmo``. We will use this user throughout the whole documantation. +An installation of RDMO contains of three parts: -Do not use the ``root`` user to run RDMO. It is a bad idea anyway and several steps of the installation will not work. ``sudo`` is used in the installation when needing root-privileges to install packages. +1) A directory which holds all the settings and customisations, custom to your installation of RDMO. We will call this directory ``rdmo-app``, but you can use any name you see fit. +2) The actual RDMO package, which centrally maintained by the RDMO team, and is installed as a dependency in a virtual environement. +3) A database to store the content generated by the users of your RDMO installation. Currently, we support Postgres, MySQL, and SQLite. + +This chapter shows how these components are set up. Optional components can be installed afterwards and are covered under :doc:`Configuration `. + +For testing and development, you can run RDMO using your regular user account. On a production system, a dedicated user account should be used. We suggest to create a user called ``rdmo`` with the group ``rdmo`` and the home directory ``/srv/rdmo``. We will use this user throughout this documantation. + +Do not use the ``root`` user to run RDMO! It is a bad idea anyway and several steps of the installation will not work. ``sudo`` is used in the installation when needing root-privileges to install packages. .. toctree:: - :maxdepth: 3 + :caption: Index + :maxdepth: 2 prerequisites clone - dependencies + packages setup - front-end diff --git a/docs/installation/dependencies.rst b/docs/installation/packages.rst similarity index 52% rename from docs/installation/dependencies.rst rename to docs/installation/packages.rst index bd1d73b72..817b0370b 100644 --- a/docs/installation/dependencies.rst +++ b/docs/installation/packages.rst @@ -1,21 +1,34 @@ -Install Python dependencies ---------------------------- +Install python packages +----------------------- -After you have cloned the RDMO repository into the ``rdmo`` directory, change to this directory, create a `virtualenv `_ and install the required dependencies (this is done as your user or the created ``rdmo`` user, not as ``root``): +After you have obtained the ``rdmo-app``, you need to install the ``rdmo`` package and the other python dependencies. + +Change to the ``rdmo-app`` directory and create a `virtualenv `_ (this is done as your user or the created ``rdmo`` user, not as ``root``): .. code:: bash - cd rdmo - virtualenv env # for python 2.7 + cd rdmo-app + python -m venv env # for python 3.4 + virtualenv env # for python 2.7 source env/bin/activate # on Linux or macOS call env\Scripts\activate.bat # on Windows +After the virtual environment is activated, the ``rdmo`` package can be installed using ``pip``: + +.. code:: bash + pip install -r requirements/base.txt - python -c "import pypandoc; pypandoc.download_pandoc()" # on Windows + +On windows, pandoc needs to be installed in an additional step: + +.. code:: bash + + # only on Windows + python -c "import pypandoc; pypandoc.download_pandoc()" The virtual environment encapsulates your RDMO installation from the rest of the system. This makes it possible to run several applications with different python dependencies on one machine and to install the dependencies without root permissions. -**Important:** The virtual enviroment needs to be activated, using ``source env/bin/activate`` or ``call env\Scripts\activate.bat``, everytime e new terminal is used. +**Important:** The virtual enviroment needs to be activated, using ``source env/bin/activate`` or ``call env\Scripts\activate.bat``, everytime a new terminal is used. diff --git a/docs/installation/prerequisites.rst b/docs/installation/prerequisites.rst index a3201a715..214d6a1fd 100644 --- a/docs/installation/prerequisites.rst +++ b/docs/installation/prerequisites.rst @@ -11,8 +11,8 @@ We recommend to install the prerequisites using the packaging system of your dis .. code:: bash sudo apt-get install build-essential libxml2-dev libxslt-dev zlib1g-dev - sudo apt-get install python2.7-dev # for python 2 sudo apt-get install python3.5-dev # for python 3 + sudo apt-get install python2.7-dev # for python 2 sudo apt-get install python-pip python-virtualenv sudo apt-get install git sudo apt-get install pandoc @@ -31,7 +31,8 @@ on RHEL/CentOS use: sudo yum install pandoc # optional, for pdf output - sudo yum install texlive texlive-xetex texlive-mathspec texlive-euenc texlive-xetex-def texlive-xltxtra + sudo yum install texlive texlive-xetex texlive-mathspec texlive-euenc \ + texlive-xetex-def texlive-xltxtra On RHEL/CentOS ``selinux`` is enabled by default. This can result in unexpected errors, depending on where you store the RDMO source code on the system. While the prefereble way is to configure it correctly (which is beyond the scope of this documentation), you can also set ``selinux`` to ``permissive`` or ``disabled`` in ``/etc/selinux/config`` (and reboot afterwards). @@ -43,8 +44,8 @@ We recommend to install the prerequisites using `brew `_: .. code:: bash - brew install python # for python 2 brew install python3 # for python 3 + brew install python # for python 2 brew install git brew install pandoc diff --git a/docs/installation/setup.rst b/docs/installation/setup.rst index c22db5d51..e5dc0f406 100644 --- a/docs/installation/setup.rst +++ b/docs/installation/setup.rst @@ -1,23 +1,22 @@ Setup the application --------------------- -To set up the application, create a new file ``rdmo/settings/local.py`` in your cloned ``rdmo`` directory. For the example user with the home ``/srv/rdmo``, this would now be ``/srv/rdmo/rdmo/rdmo/settings/local.py``. +To set up the application, create a new file ``config/settings/local.py`` in your cloned ``rdmo-app`` directory. For the example user with the home ``/srv/rdmo``, this would now be ``/srv/rdmo/rdmo-app/config/settings/local.py``. -You can use ``rdmo/settings/sample.local.py`` as template, i.e.: +You can use ``config/settings/sample.local.py`` as template, i.e.: .. code:: bash - cp rdmo/settings/sample.local.py rdmo/settings/local.py # on Linux or macOS - copy rdmo\settings\sample.local.py rdmo\settings\local.py # on Windows + cp config/settings/sample.local.py config/settings/local.py # on Linux or macOS + copy config\settings\sample.local.py config\settings\local.py # on Windows -Configure your database connection using the ``DATABASES`` variable in this file. Database configuration is covered :doc:`later in the documentation `. If no ``DATABASE`` setting is given ``sqlite3`` will be used as database backend. - -In addition set ``DEBUG = True`` for the development setup. +Most of the settings of your RDMO instance are specified in this file. The different settings are explained in detail :doc:`later in the documentation `. For a minimal configuration, you need to set ``DEBUG = True`` to see verbose error messages and serve static files, and ``SECRET_KEY`` to a long random string, which you will keep secret. Your database connection is configured using the ``DATABASES`` variable. Database configuration is covered :doc:`later in the documentation `. If no ``DATABASE``. If no ``DATABASE`` setting is given ``sqlite3`` will be used as database backend. Then, initialize the database of the application, using: .. code:: bash - python manage.py migrate # initializes the database - python manage.py create-groups # creates groups with different permissions - python manage.py createsuperuser # creates the admin user + python manage.py migrate # initializes the database + python manage.py create-groups # creates groups with different permissions + python manage.py createsuperuser # creates the admin user + python manage.py download_vendor_files # dowloads front-end files from the CDN diff --git a/docs/management/index.rst b/docs/management/index.rst index 30f55b5a2..6cbe6e4af 100644 --- a/docs/management/index.rst +++ b/docs/management/index.rst @@ -35,8 +35,8 @@ The different elements of the RDMO datamodel have various parameters, which cont The key is used as an internal identifier and determines, together with the URI Prefix, the URI of the element. This URI is used as a global identifier for the export/import functionality. .. toctree:: + :caption: Index :maxdepth: 2 - :caption: Subpages questions domain diff --git a/docs/management/questions.rst b/docs/management/questions.rst index c2b241cea..162fc60c0 100644 --- a/docs/management/questions.rst +++ b/docs/management/questions.rst @@ -68,7 +68,7 @@ Title (de) Subsection -""""""""" +"""""""""" Section The section this subsection belongs to. Changing the section will move the subsection into another section. diff --git a/docs/upgrade/index.rst b/docs/upgrade/index.rst new file mode 100644 index 000000000..d33f346ce --- /dev/null +++ b/docs/upgrade/index.rst @@ -0,0 +1,65 @@ +Upgrade +======= + +The ``rdmo`` package can be conveniently upgraded using the ``pip`` command. However, before you perform any changes to your installation, please backup the important components to a save location. + +A PostgreSQL or MySQL database can be database can be dumped into a file using: + +.. code:: bash + + pg_dump [DBNAME] > rdmo.sql # PostgreSQL + mysqldump -uroot -p [DBNAME] > rdmo.sql + +Your ``rdmo-app`` directory (including any sqlite3 database) can be copied using the usual commands. Note that your virtual environment will not work after being moved to a different path. + +In order to upgrade your RDMO installation go to your ``rdmo-app`` directory, activate your virtual environment, and upgrade the ``rdmo`` package using ``pip``: + +.. code:: bash + + pip install --upgrade rdmo + +In order to install a specific version (e.g. 0.9.0) of RDMO use: + +.. code:: bash + + pip install --upgrade rdmo==0.9.0 + +After the upgrade a database migration might be necessary: + +.. code:: bash + + python manage.py migrate + +Please check the release notes if this, or other, steps are necessary. + + +Upgrade to version 0.9.0 +------------------------ + +With version 0.9.0 we introduced the split into the ``rdmo-app`` and the centrally maintained ``rdmo`` package. Therefore a few additional steps are needed to upgrade any earlier version to 0.9.0 or beyond: + +1) In any case perform a backup of your ``rdmo`` directory and your database as described above. + +2) Perform the steps :doc:`/installation/clone` and :doc:`/installation/packages` as if you would install a new instance of RDMO. + +3) Copy your old configuration from ``/path/to/old/rdmo/rdmo/settings/local.py`` to ``/path/to/new/rdmo-app/config/settings/local.py``. The new ``config`` directory replaces the old ``rdmo`` directory. + +4) If you already have a ``theme`` directory, copy it into the new ``rdmo-app`` folder. + +5) Run a database migration (Unless you skipped several versions, the output should be ``No migrations to apply.``): + + .. code:: bash + + python manage.py migrate + +6) Download the front-end files from the CDN. We don't use bower and npm anymore. + + .. code:: bash + + python manage.py download_vendor_files + +7) Update the path to the ``wsgi.py`` script in your Apache or nginx configuration. It is now under ``/path/to/new/rdmo-app/config/wsgi.py``. + +8) Redeploy RDMO as described under :doc:`/deployment/redeploy`. + +If you have trouble with the upgrade process, don't hesitate to contact the RDMO team for support. diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po deleted file mode 100644 index c9137f6e7..000000000 --- a/locale/de/LC_MESSAGES/django.po +++ /dev/null @@ -1,2938 +0,0 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# -msgid "" -msgstr "" -"Project-Id-Version: DMPwerkzeug\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2017-04-05 16:44+0200\n" -"PO-Revision-Date: 2017-04-05 16:44+0100\n" -"Last-Translator: Jochen Klar \n" -"Language-Team: DMPwerkzeug \n" -"Language: de\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.6.10\n" - -#: apps/accounts/app_config.py:7 -msgid "Accounts" -msgstr "Benutzerkonten" - -#: apps/accounts/forms.py:23 -msgid "First name" -msgstr "Vorname" - -#: apps/accounts/forms.py:24 -msgid "Last name" -msgstr "Nachname" - -#: apps/accounts/models.py:25 apps/accounts/models.py:26 -msgid "Enter a help text to be displayed next to the input element" -msgstr "" -"Geben Sie einen Hilfetext, der neben dem Eingabefeld angezeigt wird, ein" - -#: apps/accounts/models.py:33 -msgid "Additional field" -msgstr "Zusätzliches Feld" - -#: apps/accounts/models.py:34 -msgid "Additional fields" -msgstr "Zusätzliche Felder" - -#: apps/accounts/models.py:58 -msgid "Additional field value" -msgstr "Wert für zusätzliches Feld" - -#: apps/accounts/models.py:59 -msgid "Additional field values" -msgstr "Werte für zusätzliches Felder" - -#: apps/accounts/templates/account/email.html:6 -msgid "E-mail Addresses" -msgstr "E-mail Adressen" - -#: apps/accounts/templates/account/email.html:10 -msgid "The following e-mail addresses are associated with your account:" -msgstr "Die folgenden E-Mail Adressen sind mit Ihrem Benutzerkonto verknüpft:" - -#: apps/accounts/templates/account/email.html:26 -msgid "Primary" -msgstr "Primär" - -#: apps/accounts/templates/account/email.html:30 -msgid "Verified" -msgstr "Bestätigt" - -#: apps/accounts/templates/account/email.html:32 -msgid "Unverified" -msgstr "Unbestätigt" - -#: apps/accounts/templates/account/email.html:40 -msgid "Make Primary" -msgstr "Zur primären Adresse machen" - -#: apps/accounts/templates/account/email.html:41 -msgid "Re-send Verification" -msgstr "Bestätigungsmail nochmal senden" - -#: apps/accounts/templates/account/email.html:42 -#: apps/domain/templates/domain/domain_modal_form_ranges.html:45 -#: apps/domain/templates/domain/domain_modal_form_verbosenames.html:53 -#: apps/tasks/templates/tasks/tasks_modal_form_timeframes.html:63 -msgid "Remove" -msgstr "Entfernen" - -#: apps/accounts/templates/account/email.html:51 -msgid "Warning:" -msgstr "Warnung:" - -#: apps/accounts/templates/account/email.html:51 -msgid "" -"You currently do not have any e-mail address set up. You should really add " -"an e-mail address so you can receive notifications, reset your password, etc." -msgstr "" -"Sie haben zur Zeit keine E-Mail Adresse angegeben. Sie sollten dies " -"unbedingt tun, um Benachrichtigungen zu erhalten oder Ihr Password " -"zurücksetzen zu lassen." - -#: apps/accounts/templates/account/email.html:56 -msgid "Add E-mail Address" -msgstr "E-Mail Adresse hinzufügen" - -#: apps/accounts/templates/account/email.html:63 -msgid "Add E-mail" -msgstr "E-Mail hinzufügen" - -#: apps/accounts/templates/account/email.html:71 -msgid "Do you really want to remove the selected e-mail address?" -msgstr "Wollen sie wirklich die ausgewählte E-Mail Adresse entfernen?" - -#: apps/accounts/templates/account/email/password_reset_key_message.txt:1 -msgid "Dear" -msgstr "Liebe(r)" - -#: apps/accounts/templates/account/email/password_reset_key_message.txt:3 -#, python-format -msgid "" -"You are receiving this e-mail because you requested that your password on " -"%(site_domain)s will be reset. It can be safely ignored if you did not " -"request a password reset. Click the link below to reset your password." -msgstr "" -"Wir haben Ihnen dies E-Mail geschickt, weil sie Ihr Password auf " -"%(site_domain)s zurücksetzen möchten. Falls Sie das nicht getan haben, " -"können Sie diese E-Mail einfach ignorieren. Bitte klicken sie auf den unten " -"stehenden Link um Ihr Password zurückzusetzen." - -#: apps/accounts/templates/account/email/password_reset_key_message.txt:11 -#, python-format -msgid "In case you forgot, your username is '%(username)s'." -msgstr "" -"Falls Sie Ihren Benutzernamen vergessen haben, er lautet \"%(username)s\"." - -#: apps/accounts/templates/account/email/password_reset_key_message.txt:15 -msgid "Sincerely" -msgstr "Mit freundlichen Grüßen" - -#: apps/accounts/templates/account/email/password_reset_key_subject.txt:1 -#: apps/accounts/templates/account/password_reset.html:6 -msgid "Password reset" -msgstr "Passwort zurücksetzen" - -#: apps/accounts/templates/account/email_confirm.html:7 -msgid "Confirm E-mail Address" -msgstr "E-Mail bestätigen" - -#: apps/accounts/templates/account/email_confirm.html:14 -#, python-format -msgid "" -"Please confirm that %(email)s is an e-mail " -"address for user %(user_display)s." -msgstr "" -"Bitte bestätigen sie, dass %(email)s eine " -"gültige E-Mail Adresse für den Benutzer %(user_display)s " -"ist." - -#: apps/accounts/templates/account/email_confirm.html:21 -msgid "Confirm" -msgstr "Bestätigen" - -#: apps/accounts/templates/account/email_confirm.html:29 -#, python-format -msgid "" -"This e-mail confirmation link expired or is invalid. Please issue a new e-mail confirmation request." -msgstr "" -"Dieser Bestätigungs-Link ist abgelaufen oder ungültig. Bitte fordern sie eine neue Betätigungs-E-Mail an." - -#: apps/accounts/templates/account/login.html:6 -#: apps/accounts/templates/account/login_form.html:20 -#: apps/accounts/templates/account/password_reset_from_key_done.html:14 -#: apps/core/templates/core/base_navigation.html:131 -#: apps/core/templates/core/home.html:60 -#: themes/bwFDM-info/templates/core/home.html:27 -msgid "Login" -msgstr "Anmelden" - -#: apps/accounts/templates/account/login_form.html:6 -msgid "Login with Shibboleth" -msgstr "Mit Shibboleth einloggen" - -#: apps/accounts/templates/account/login_form_account.html:8 -#, python-format -msgid "" -"If you have not created an account yet, then please sign up first." -msgstr "" -"Falls Sie noch kein Benutzerkonto haben, registrieren Sie sich bitte zunächst." - -#: apps/accounts/templates/account/login_form_account.html:15 -#, python-format -msgid "" -"If you forgot your password and want to reset it, click here." -msgstr "" -"Falls Sie Ihr Passwort vergessen haben und es zurücksetzen wollen, klicken " -"Sie bitte hier." - -#: apps/accounts/templates/account/login_form_socialaccount.html:9 -msgid "" -"Alternatively, you can login using one of the following third party accounts:" -msgstr "Sie können sich auch mit einem der folgenden Accounts anmelden:" - -#: apps/accounts/templates/account/logout.html:6 -#: apps/accounts/templates/account/logout.html:19 -#: apps/accounts/templates/account/logout_form.html:6 -#: apps/core/templates/core/base_navigation.html:120 -msgid "Logout" -msgstr "Abmelden" - -#: apps/accounts/templates/account/logout.html:9 -msgid "Are you sure you want to sign out?" -msgstr "Sind sie sicher, dass Sie sich abmelden wollen?" - -#: apps/accounts/templates/account/password_change.html:6 -#: apps/accounts/templates/account/password_change.html:17 -#: apps/core/templates/core/base_navigation_account.html:7 -msgid "Change password" -msgstr "Passwort ändern" - -#: apps/accounts/templates/account/password_change.html:9 -msgid "" -"Please enter your old password, and then enter your new password twice so we " -"can verify you typed it in correctly." -msgstr "" -"Bitte geben Sie das alte Passwort und das gewünschte neue Passwort an. Das " -"neue Passwort muss aus Sicherheitsgründen wiederholt werden." - -#: apps/accounts/templates/account/password_reset.html:13 -msgid "" -"Forgotten your password? Enter your e-mail address below, and we'll send you " -"an e-mail allowing you to reset it." -msgstr "" -"Haben Sie Ihr Passwort vergessen? Bitte geben Sie die E-Mail-Adresse an, mit " -"der Sie bei uns registriert sind, und wir senden Ihnen eine E-Mail mit " -"Instruktionen, wie sie Ihr Password neu setzen können." - -#: apps/accounts/templates/account/password_reset.html:21 -msgid "Reset my password" -msgstr "Passwort neu setzen" - -#: apps/accounts/templates/account/password_reset_done.html:6 -msgid "Password reset sent" -msgstr "Email gesendet" - -#: apps/accounts/templates/account/password_reset_done.html:13 -msgid "" -"We have sent you an e-mail. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"Wir haben Ihnen eine E-Mail geschickt. Bitte kontaktieren Sie uns, falls Sie " -"die E-Mail nicht in den nächsten Minuten erhalten sollten." - -#: apps/accounts/templates/account/password_reset_done.html:19 -msgid "" -"If you don't receive an e-mail, please make sure you've entered the address " -"you registered with, and check your spam folder." -msgstr "" -"Sollten Sie keine E-Mail erhalten haben, vergewissern Sie sich, dass Sie die " -"E-Mail angegeben haben, mit der Sie bei uns registriert sind und sehen Sie " -"ggf. in Ihrem Spam-Ordner nach." - -#: apps/accounts/templates/account/password_reset_from_key.html:8 -msgid "Bad token" -msgstr "Ungültiges Token" - -#: apps/accounts/templates/account/password_reset_from_key.html:12 -#, python-format -msgid "" -"The password reset link was invalid, possibly because it has already been " -"used. Please request a new password reset." -msgstr "" -"Der Password-Link was ungültig. Wahrscheinlich wurde er bereits verwendet. " -"Bitte fordern Sie einen neuen Link an." - -#: apps/accounts/templates/account/password_reset_from_key.html:18 -msgid "Enter new password" -msgstr "Passwort eingeben" - -#: apps/accounts/templates/account/password_reset_from_key.html:27 -msgid "Change my password" -msgstr "Passwort ändern" - -#: apps/accounts/templates/account/password_reset_from_key.html:33 -msgid "Your password is now changed." -msgstr "Ihr Password wurde geändert." - -#: apps/accounts/templates/account/password_reset_from_key_done.html:7 -msgid "Password reset complete" -msgstr "Passwort neu gesetzt" - -#: apps/accounts/templates/account/password_reset_from_key_done.html:10 -msgid "Your password has been set. You may go ahead and log in now." -msgstr "Ihr Passwort wurde geändert. Sie können sich jetzt einloggen." - -#: apps/accounts/templates/account/password_set.html:6 -msgid "Set new password" -msgstr "Neues Password setzen" - -#: apps/accounts/templates/account/password_set.html:9 -msgid "" -"Please enter your new password twice so we can verify you typed it in " -"correctly." -msgstr "" -"Bitte geben sie Ihr neues Passwort doppelt ein damit wir sichergehen können, " -"dass Sie sich nicht vertippt haben." - -#: apps/accounts/templates/account/password_set.html:17 -msgid "Set password" -msgstr "Passwort neu setzen" - -#: apps/accounts/templates/account/signup.html:6 -#: apps/accounts/templates/socialaccount/signup.html:6 -msgid "Create a new account" -msgstr "Neues Benutzerkonto erstellen" - -#: apps/accounts/templates/account/signup.html:9 -#, python-format -msgid "" -"Already have an account? Then please sign in." -msgstr "" -"Falls Sie schon eine Benutzerkonto haben können Sie sich hier anmelden." - -#: apps/accounts/templates/account/signup.html:23 -#: apps/accounts/templates/socialaccount/signup.html:22 -msgid "Create account" -msgstr "Benutzerkonto erstellen" - -#: apps/accounts/templates/account/signup_closed.html:6 -msgid "Sign up closed" -msgstr "Anmeldung geschlossen" - -#: apps/accounts/templates/account/signup_closed.html:9 -msgid "We are sorry, but the sign up is currently closed." -msgstr "Es tut uns Leid, aber die Anmeldung ist zur Zeit leider geschlossen." - -#: apps/accounts/templates/account/verification_sent.html:7 -#: apps/accounts/templates/account/verified_email_required.html:6 -msgid "Verify your e-mail address" -msgstr "Betätigen Sie Ihre E-Mail Adresse" - -#: apps/accounts/templates/account/verification_sent.html:11 -msgid "" -"We have sent an e-mail to you for verification. Follow the link provided to " -"finalize the signup process. Please contact us if you do not receive it " -"within a few minutes." -msgstr "" -"Wir haben Ihnen eine E-Mail zur Bestätigung geschickt. Folgen sie dem Link " -"in der E-Mail um die Registrierung abzuschließen. Bitte kontaktieren Sie " -"uns, falls Sie die E-Mail nicht in den nächsten Minuten erhalten sollten." - -#: apps/accounts/templates/account/verified_email_required.html:11 -msgid "" -"This part of the site requires us to verify that you are who you claim to " -"be. For this purpose, we require that you verify ownership of your e-mail " -"address. " -msgstr "" -"Für diesen Bereich muss Ihre E-Mail Adresse bestätigt sein. Bitte bestätigen " -"Sie die Ihre E-Mail Adresse." - -#: apps/accounts/templates/account/verified_email_required.html:15 -msgid "" -"We have sent an e-mail to you for verification. Please click on the link " -"inside this e-mail. Please contact us if you do not receive it within a few " -"minutes." -msgstr "" -"Zur Bestätigung Ihrer E-Mail Adresse haben wir Ihnen eine E-Mail geschickt. " -"Bitte folgen sie den Anweisungen in dieser E-Mail. Bitte kontaktieren Sie " -"uns, falls Sie die E-Mail nicht in den nächsten Minuten erhalten sollten." - -#: apps/accounts/templates/account/verified_email_required.html:19 -#, python-format -msgid "" -"Note: you can still change your e-" -"mail address." -msgstr "" -"Hinweis: Sie können immer noch Ihre E-Mail Adresse ändern." - -#: apps/accounts/templates/profile/profile_update_closed.html:6 -msgid "Profile update" -msgstr "Profil bearbeiten" - -#: apps/accounts/templates/profile/profile_update_closed.html:9 -msgid "We are sorry, but you cannot update your profile here." -msgstr "Es tut uns Leid, aber sie können Ihr Profil hier nicht bearbeiten." - -#: apps/accounts/templates/profile/profile_update_form.html:6 -#: apps/accounts/templates/profile/profile_update_form.html:24 -#: apps/core/templates/core/base_navigation.html:98 -msgid "Update profile" -msgstr "Profil bearbeiten" - -#: apps/accounts/templates/profile/profile_update_form.html:12 -#, python-format -msgid "" -"Please enter your updated account information. You can change your password " -"using the password form and update your e-" -"mail using the e-mail form." -msgstr "" -"Bitte aktualisieren Sie die in Ihrem Benutzerkonto gespeicherten " -"Informationen. Sie könne Ihr Password hier " -"ändern und ihre E-Mail Adressen hier verwalten." - -#: apps/accounts/templates/profile/profile_update_form.html:25 -#: apps/core/templates/core/bootstrap_delete_form.html:8 -#: apps/core/templates/core/bootstrap_form.html:10 -msgid "Cancel" -msgstr "Abbrechen" - -#: apps/accounts/templates/socialaccount/authentication_error.html:9 -msgid "Social Network Login Failure" -msgstr "Fehler bei der Anmeldung zum externen Konto" - -#: apps/accounts/templates/socialaccount/authentication_error.html:12 -msgid "" -"An error occurred while attempting to login via your social network account." -msgstr "" -"Während des Anmeldeprozesses zu dem externen Konto ist ein Fehler " -"aufgetreten." - -#: apps/accounts/templates/socialaccount/connections.html:6 -#: apps/core/templates/core/base_navigation_socialaccount.html:4 -msgid "Account connections" -msgstr "Verknüpfungen mit externen Konten" - -#: apps/accounts/templates/socialaccount/connections.html:8 -msgid "Current connections" -msgstr "Derzeitige Verbindungen zu externen Konten" - -#: apps/accounts/templates/socialaccount/connections.html:13 -msgid "" -"You can sign in to your account using any of the following third party " -"accounts:" -msgstr "Sie können sich mit den folgenden externen Konten anmelden:" - -#: apps/accounts/templates/socialaccount/connections.html:39 -msgid "Remove selected account" -msgstr "Ausgewähltes Konto entfernen" - -#: apps/accounts/templates/socialaccount/connections.html:53 -msgid "" -"You currently have no social network accounts connected to this account." -msgstr "" -"Zur Zeit haben Sie keine externen Konten mit Ihrem Benutzerkonto verbunden." - -#: apps/accounts/templates/socialaccount/connections.html:58 -msgid "Add an additional account" -msgstr "Externes Konto hinzufügen" - -#: apps/accounts/templates/socialaccount/login_cancelled.html:9 -msgid "Login Cancelled" -msgstr "Anmeldung abgebrochen" - -#: apps/accounts/templates/socialaccount/login_cancelled.html:14 -#, python-format -msgid "" -"You decided to cancel logging in to our site using one of your existing " -"accounts. If this was a mistake, please proceed to sign in." -msgstr "" -"Sie haben sich entschieden, die Anmeldung mit einem externen Konto " -"abzubrechen. Falls dies versehentlich geschehen ist, könne Sie hier fortsetzen." - -#: apps/accounts/templates/socialaccount/signup.html:9 -#, python-format -msgid "" -"You are about to use your %(provider_name)s account to " -"login to %(site_name)s. As a final step, please complete the following form:" -msgstr "" -"Sie sind dabei sich mit ihrem %(provider_name)s Konto auf " -"%(site_name)s anzumelden. Es sind noch zusätzliche Angaben von Ihnen nötig:" - -#: apps/accounts/templatetags/accounts_tags.py:19 -#: apps/projects/templates/projects/projects.html:31 -msgid "Name" -msgstr "Name" - -#: apps/conditions/app_config.py:7 apps/conditions/models.py:80 -#: apps/conditions/templates/conditions/conditions.html:68 -#: apps/conditions/templates/conditions/conditions_export.html:6 -#: apps/conditions/views.py:57 -#: apps/core/templates/core/base_navigation.html:44 apps/domain/models.py:61 -#: apps/domain/templates/domain/domain_export.html:95 -#: apps/domain/templates/domain/domain_modal_form_conditions.html:11 -#: apps/domain/templates/domain/domain_modal_form_conditions.html:19 -#: apps/options/models.py:44 -#: apps/options/templates/options/options_export.html:39 -#: apps/options/templates/options/options_modal_form_conditions.html:11 -#: apps/options/templates/options/options_modal_form_conditions.html:19 -#: apps/tasks/models.py:69 apps/tasks/templates/tasks/tasks_export.html:35 -#: apps/tasks/templates/tasks/tasks_modal_form_conditions.html:11 -#: apps/tasks/templates/tasks/tasks_modal_form_conditions.html:19 -msgid "Conditions" -msgstr "Bedingungen" - -#: apps/conditions/models.py:38 apps/domain/models.py:21 -#: apps/options/models.py:19 apps/options/models.py:77 -#: apps/questions/models.py:27 apps/questions/models.py:90 -#: apps/questions/models.py:170 apps/questions/models.py:251 -#: apps/tasks/models.py:31 apps/views/models.py:22 -msgid "URI" -msgstr "URI" - -#: apps/conditions/models.py:39 apps/options/models.py:20 -msgid "The Uniform Resource Identifier of this option set (auto-generated)." -msgstr "" -"Der Uniform Resource Identifier dieses Optionssets (automatisch erstellt)." - -#: apps/conditions/models.py:43 apps/domain/models.py:26 -#: apps/options/models.py:24 apps/options/models.py:82 -#: apps/questions/models.py:32 apps/questions/models.py:95 -#: apps/questions/models.py:175 apps/questions/models.py:256 -#: apps/tasks/models.py:36 apps/views/models.py:27 -msgid "URI Prefix" -msgstr "URI Prefix" - -#: apps/conditions/models.py:44 -msgid "The prefix for the URI of this condition." -msgstr "Das Präfix für die URI dieser Bedingung." - -#: apps/conditions/models.py:48 -#: apps/conditions/templates/conditions/conditions_export.html:13 -#: apps/domain/models.py:31 apps/options/models.py:29 -#: apps/options/models.py:87 -#: apps/options/templates/options/options_export.html:13 -#: apps/questions/models.py:37 apps/questions/models.py:100 -#: apps/questions/models.py:180 apps/questions/models.py:261 -#: apps/tasks/models.py:41 apps/tasks/templates/tasks/tasks_export.html:13 -#: apps/views/models.py:32 apps/views/templates/views/views_export.html:13 -msgid "Key" -msgstr "Schlüssel" - -#: apps/conditions/models.py:49 -msgid "The internal identifier of this condition." -msgstr "Der interne Bezeichner dieser Bedingung." - -#: apps/conditions/models.py:53 -#: apps/conditions/templates/conditions/conditions_export.html:19 -#: apps/domain/models.py:36 apps/domain/templates/domain/domain_export.html:21 -#: apps/options/models.py:34 apps/options/models.py:97 -#: apps/options/templates/options/options_export.html:19 -#: apps/questions/models.py:42 apps/questions/models.py:110 -#: apps/questions/models.py:190 apps/questions/models.py:271 -#: apps/questions/templates/questions/catalog_tree.html:8 -#: apps/questions/templates/questions/catalog_tree.html:20 -#: apps/questions/templates/questions/catalog_tree.html:32 -#: apps/questions/templates/questions/catalog_tree.html:54 -#: apps/questions/templates/questions/catalog_tree.html:113 -#: apps/questions/templates/questions/catalog_tree.html:171 -#: apps/tasks/models.py:46 apps/tasks/templates/tasks/tasks_export.html:19 -#: apps/views/models.py:37 apps/views/templates/views/views_export.html:19 -msgid "Comment" -msgstr "Kommentar" - -#: apps/conditions/models.py:54 -msgid "Additional internal information about this condition." -msgstr "Zusätzliche interne Informationen über diese Bedingung." - -#: apps/conditions/models.py:58 -#: apps/conditions/templates/conditions/conditions_export.html:25 -msgid "Source" -msgstr "Quelle" - -#: apps/conditions/models.py:59 -msgid "The Attribute this condition is evaluating." -msgstr "Das Attribut das diese Bedingung auswertet." - -#: apps/conditions/models.py:63 -#: apps/conditions/templates/conditions/conditions_export.html:29 -msgid "Relation" -msgstr "Verknüpfung" - -#: apps/conditions/models.py:64 -msgid "The Relation this condition is using." -msgstr "Die von dieser Bedingung verwendete Verknüpfung." - -#: apps/conditions/models.py:68 -msgid "Target (Text)" -msgstr "Ziel (Text)" - -#: apps/conditions/models.py:69 -msgid "" -"If using a regular attibute, the text value this condition is checking " -"against." -msgstr "" -"Falls ein normales Attribut verwendet wird: Der Text gegen den diese " -"Bedingung ausgewertet wird." - -#: apps/conditions/models.py:73 -msgid "Target (Option)" -msgstr "Ziel (Option)" - -#: apps/conditions/models.py:74 -msgid "" -"If using an options attribute, the option this condition is checking against." -msgstr "" -"Falls ein Optionen-Attribut verwendet wird, die Option gegen die diese " -"Bedingung ausgewertet wird." - -#: apps/conditions/models.py:79 -#: apps/conditions/templates/conditions/conditions.html:84 -#: apps/conditions/templates/conditions/conditions_export.html:10 -#: apps/conditions/templates/conditions/conditions_modal_form_conditions.html:11 -msgid "Condition" -msgstr "Bedingung" - -#: apps/conditions/templates/conditions/conditions.html:23 -#: apps/domain/templates/domain/domain.html:23 -#: apps/options/templates/options/options.html:23 -#: apps/questions/templates/questions/catalogs_sidebar.html:9 -#: apps/tasks/templates/tasks/tasks.html:23 -#: apps/views/templates/views/views.html:29 -msgid "Filter" -msgstr "Filter" - -#: apps/conditions/templates/conditions/conditions.html:34 -#: apps/core/templates/core/base_navigation.html:39 apps/domain/models.py:149 -#: apps/domain/templates/domain/domain.html:34 -#: apps/domain/templates/domain/domain_export.html:48 -#: apps/domain/templates/domain/domain_modal_form_optionsets.html:11 -#: apps/options/app_config.py:7 apps/options/models.py:129 -#: apps/options/templates/options/options.html:34 -#: apps/options/templates/options/options.html:73 -#: apps/options/templates/options/options_export.html:25 -#: apps/options/views.py:54 -#: apps/projects/templates/projects/project_answers.html:28 -#: apps/projects/templates/projects/project_detail.html:8 -#: apps/projects/templates/projects/project_view.html:28 -#: apps/projects/templates/projects/projects.html:14 -#: apps/questions/templates/questions/catalog_tree.html:81 -#: apps/questions/templates/questions/catalog_tree.html:141 -#: apps/questions/templates/questions/catalogs_sidebar.html:20 -#: apps/tasks/templates/tasks/tasks.html:34 -#: apps/views/templates/views/views.html:40 -msgid "Options" -msgstr "Optionen" - -#: apps/conditions/templates/conditions/conditions.html:39 -msgid "Create new condition" -msgstr "Neue Bedingung erstellen" - -#: apps/conditions/templates/conditions/conditions.html:44 -#: apps/domain/templates/domain/domain.html:49 -#: apps/options/templates/options/options.html:49 -#: apps/projects/templates/projects/project_answers.html:36 -#: apps/projects/templates/projects/project_view.html:36 -#: apps/questions/templates/questions/catalogs_sidebar.html:63 -#: apps/tasks/templates/tasks/tasks.html:44 -#: apps/views/templates/views/views.html:50 -msgid "Export" -msgstr "Export" - -#: apps/conditions/templates/conditions/conditions.html:59 -#: apps/domain/templates/domain/domain.html:72 -#: apps/options/templates/options/options.html:64 -#: apps/questions/templates/questions/catalogs_sidebar.html:78 -#: apps/tasks/templates/tasks/tasks.html:59 -#: apps/views/templates/views/views.html:65 -msgid "XML" -msgstr "XML" - -#: apps/conditions/templates/conditions/conditions.html:76 -msgid "Update condition" -msgstr "Bedingung bearbeiten" - -#: apps/conditions/templates/conditions/conditions.html:80 -#: apps/conditions/templates/conditions/conditions_modal_delete_conditions.html:11 -msgid "Delete condition" -msgstr "Bedingung entfernen" - -#: apps/conditions/templates/conditions/conditions_export.html:34 -msgid "Target" -msgstr "Ziel" - -#: apps/conditions/templates/conditions/conditions_modal_delete_conditions.html:17 -#, python-format -msgid "" -"You are about to permanently delete the condition %(object)s." -msgstr "" -"Sie sind dabei die Bedingung %(object)s permanent zu entfernen." - -#: apps/conditions/templates/conditions/conditions_modal_delete_conditions.html:23 -#: apps/domain/templates/domain/domain_modal_delete_attributes.html:23 -#: apps/domain/templates/domain/domain_modal_delete_entities.html:44 -#: apps/options/templates/options/options_modal_delete_options.html:23 -#: apps/options/templates/options/options_modal_delete_optionsets.html:36 -#: apps/projects/templates/projects/project_confirm_delete.html:14 -#: apps/projects/templates/projects/project_questions_modal_delete_valuesets.html:35 -#: apps/projects/templates/projects/snapshot_rollback.html:14 -#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:60 -#: apps/questions/templates/questions/catalogs_modal_delete_questions.html:22 -#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:36 -#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:53 -#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:47 -#: apps/tasks/templates/tasks/tasks_modal_delete_tasks.html:23 -#: apps/views/templates/views/views_modal_delete_views.html:23 -msgid "This action cannot be undone!" -msgstr "Diese Aktion kann nicht rückgängig gemacht werden!" - -#: apps/conditions/templates/conditions/conditions_modal_delete_conditions.html:29 -#: apps/conditions/templates/conditions/conditions_modal_form_conditions.html:92 -#: apps/domain/templates/domain/domain_modal_delete_attributes.html:29 -#: apps/domain/templates/domain/domain_modal_delete_entities.html:50 -#: apps/domain/templates/domain/domain_modal_form_attributes.html:89 -#: apps/domain/templates/domain/domain_modal_form_conditions.html:30 -#: apps/domain/templates/domain/domain_modal_form_entities.html:67 -#: apps/domain/templates/domain/domain_modal_form_optionsets.html:30 -#: apps/domain/templates/domain/domain_modal_form_ranges.html:48 -#: apps/domain/templates/domain/domain_modal_form_verbosenames.html:56 -#: apps/options/templates/options/options_modal_delete_options.html:29 -#: apps/options/templates/options/options_modal_delete_optionsets.html:42 -#: apps/options/templates/options/options_modal_form_conditions.html:30 -#: apps/options/templates/options/options_modal_form_options.html:99 -#: apps/options/templates/options/options_modal_form_optionsets.html:56 -#: apps/projects/templates/projects/project_questions_modal_delete_valuesets.html:41 -#: apps/projects/templates/projects/project_questions_modal_form_valuesets.html:28 -#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:66 -#: apps/questions/templates/questions/catalogs_modal_delete_questions.html:28 -#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:42 -#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:59 -#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:53 -#: apps/questions/templates/questions/catalogs_modal_form_catalogs.html:76 -#: apps/questions/templates/questions/catalogs_modal_form_questions.html:147 -#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:102 -#: apps/questions/templates/questions/catalogs_modal_form_sections.html:90 -#: apps/questions/templates/questions/catalogs_modal_form_subsections.html:90 -#: apps/tasks/templates/tasks/tasks_modal_delete_tasks.html:29 -#: apps/tasks/templates/tasks/tasks_modal_form_conditions.html:30 -#: apps/tasks/templates/tasks/tasks_modal_form_tasks.html:88 -#: apps/tasks/templates/tasks/tasks_modal_form_timeframes.html:66 -#: apps/views/templates/views/views_modal_delete_views.html:29 -#: apps/views/templates/views/views_modal_form_templates.html:29 -#: apps/views/templates/views/views_modal_form_views.html:88 -msgid "Close" -msgstr "Schließen" - -#: apps/conditions/templates/conditions/conditions_modal_delete_conditions.html:33 -#: apps/domain/templates/domain/domain_modal_delete_attributes.html:33 -#: apps/domain/templates/domain/domain_modal_delete_entities.html:54 -#: apps/options/templates/options/options_modal_delete_options.html:33 -#: apps/options/templates/options/options_modal_delete_optionsets.html:46 -#: apps/projects/templates/projects/project_questions_modal_delete_valuesets.html:45 -#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:70 -#: apps/questions/templates/questions/catalogs_modal_delete_questions.html:32 -#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:46 -#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:63 -#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:57 -#: apps/tasks/templates/tasks/tasks_modal_delete_tasks.html:33 -#: apps/views/templates/views/views_modal_delete_views.html:33 -msgid "Delete" -msgstr "Entfernen" - -#: apps/conditions/templates/conditions/conditions_modal_form_conditions.html:96 -#: apps/domain/templates/domain/domain_modal_form_attributes.html:93 -#: apps/domain/templates/domain/domain_modal_form_conditions.html:34 -#: apps/domain/templates/domain/domain_modal_form_entities.html:71 -#: apps/domain/templates/domain/domain_modal_form_optionsets.html:34 -#: apps/domain/templates/domain/domain_modal_form_ranges.html:52 -#: apps/domain/templates/domain/domain_modal_form_verbosenames.html:60 -#: apps/options/templates/options/options_modal_form_conditions.html:34 -#: apps/options/templates/options/options_modal_form_options.html:103 -#: apps/options/templates/options/options_modal_form_optionsets.html:60 -#: apps/projects/templates/projects/project_questions.html:73 -#: apps/projects/templates/projects/project_questions_modal_form_valuesets.html:32 -#: apps/questions/templates/questions/catalogs_modal_form_catalogs.html:80 -#: apps/questions/templates/questions/catalogs_modal_form_questions.html:152 -#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:107 -#: apps/questions/templates/questions/catalogs_modal_form_sections.html:94 -#: apps/questions/templates/questions/catalogs_modal_form_subsections.html:94 -#: apps/tasks/templates/tasks/tasks_modal_form_conditions.html:34 -#: apps/tasks/templates/tasks/tasks_modal_form_tasks.html:92 -#: apps/tasks/templates/tasks/tasks_modal_form_timeframes.html:70 -#: apps/views/templates/views/views_modal_form_templates.html:33 -#: apps/views/templates/views/views_modal_form_views.html:92 -msgid "Save" -msgstr "Speichern" - -#: apps/core/models.py:13 -msgid "created" -msgstr "erstellt" - -#: apps/core/models.py:14 -msgid "updated" -msgstr "zuletzt geändert" - -#: apps/core/templates/core/404.html:6 -msgid "Not found" -msgstr "Seite nicht gefunden" - -#: apps/core/templates/core/404.html:8 -msgid "The requested URL was not found on this server." -msgstr "Die gewünschte URL konnte nicht gefunden werden." - -#: apps/core/templates/core/base_footer.html:6 -msgid "Project RDMO" -msgstr "Projekt RDMO" - -#: apps/core/templates/core/base_footer.html:8 -msgid "" -"The project aims to develop a tool to support the planning of the research " -"data management. In addition, the tool will create a textual data management " -"plan." -msgstr "" -"Ziel des Projekts ist es, ein Werkzeug zur Verfügung zu stellen, das die " -"strukturierte Planung des Forschungsdatenmanagements unterstützt und " -"zusätzlich die textuelle Ausgabe eines Datenmanagementplans ermöglicht." - -#: apps/core/templates/core/base_footer.html:11 -msgid "The project is funded by the German Research Foundation." -msgstr "Das Projekt wird von der Deutschen Forschungsgemeinschaft gefördert." - -#: apps/core/templates/core/base_footer.html:15 -msgid "Contact" -msgstr "Kontakt" - -#: apps/core/templates/core/base_footer.html:22 -msgid "Open Source" -msgstr "Open Source" - -#: apps/core/templates/core/base_footer.html:24 -msgid "RDMO is published on:" -msgstr "RDMO ist veröffentlicht auf:" - -#: apps/core/templates/core/base_navigation.html:29 -msgid "Management" -msgstr "Management" - -#: apps/core/templates/core/base_navigation.html:34 -#: apps/domain/app_config.py:7 apps/domain/templates/domain/domain.html:81 -#: apps/domain/templates/domain/domain_export.html:6 apps/domain/views.py:81 -#: apps/domain/views.py:83 -msgid "Domain" -msgstr "Domäne" - -#: apps/core/templates/core/base_navigation.html:49 -#: apps/questions/app_config.py:7 apps/questions/models.py:401 -#: apps/questions/templates/questions/catalog_tree.html:60 -#: apps/questions/templates/questions/catalogs.html:31 -msgid "Questions" -msgstr "Fragen" - -#: apps/core/templates/core/base_navigation.html:54 -#: apps/projects/templates/projects/project_detail_tasks.html:3 -#: apps/tasks/app_config.py:7 apps/tasks/models.py:76 -#: apps/tasks/templates/tasks/tasks.html:68 -#: apps/tasks/templates/tasks/tasks_export.html:6 apps/tasks/views.py:56 -msgid "Tasks" -msgstr "Aufgaben" - -#: apps/core/templates/core/base_navigation.html:59 -#: apps/projects/templates/projects/project_detail_views.html:3 -#: apps/views/app_config.py:7 apps/views/models.py:69 -#: apps/views/templates/views/views.html:74 -#: apps/views/templates/views/views_export.html:6 apps/views/views.py:45 -msgid "Views" -msgstr "Ansichten" - -#: apps/core/templates/core/base_navigation.html:67 -msgid "Admin" -msgstr "Admin" - -#: apps/core/templates/core/base_navigation.html:84 -msgid "Language" -msgstr "Sprache" - -#: apps/core/templates/core/base_navigation_account.html:4 -msgid "Update email" -msgstr "E-Mail bearbeiten" - -#: apps/core/templates/core/home.html:42 -msgid "" -"A tool to support the planning, implementation, and organisation of research " -"data management." -msgstr "" -"Ein Werkzeug zur Planung, Umsetzung und der Verwaltung des " -"Forschungsdatenmanagements." - -#: apps/core/utils.py:111 -msgid "This format is not supported." -msgstr "Dieses Format wird nicht unterstützt." - -#: apps/core/validators.py:24 -msgid "This field may not be blank." -msgstr "Dieses Feld darf nicht leer sein." - -#: apps/core/validators.py:40 -#, python-format -msgid "%(model)s with this key already exists." -msgstr "%(model)s mit diesem Schlüssel existiert bereits." - -#: apps/core/validators.py:81 -#, python-format -msgid "" -"%(model)s with the path \"%(path)s\" already exists. Please adjust the the " -"Key." -msgstr "" -"%(model)s mit dem Pfad \"%(path)s\" existiert bereits. Bitte passen Sie den " -"Schlüssel an." - -#: apps/domain/models.py:22 -msgid "" -"The Uniform Resource Identifier of this attribute/entity set (auto-" -"generated)." -msgstr "" -"Der Uniform Resource Identifier dieses Attributs/dieser Entität (automatisch " -"erstellt)." - -#: apps/domain/models.py:27 -msgid "The prefix for the URI of this attribute/entity." -msgstr "Das Präfix für die URI dieses Attributs/dieser Entität." - -#: apps/domain/models.py:32 -msgid "The internal identifier of this attribute/entity." -msgstr "Das interne Bezeichner für dieses Attributs/diese Entität." - -#: apps/domain/models.py:37 -msgid "Additional information about this attribute/entity." -msgstr "Zusätzliche Informationen über dieses Attribut/diese Entität." - -#: apps/domain/models.py:41 -msgid "Parent entity" -msgstr "Übergeordnete Entität" - -#: apps/domain/models.py:42 -msgid "Parent entity in the domain model." -msgstr "Übergeordnete Entität im Domänenmodell." - -#: apps/domain/models.py:46 -msgid "Parent collection" -msgstr "Übergeordnete Sammlung" - -#: apps/domain/models.py:47 -msgid "Next collection entity upwards in the domain model (auto-generated)." -msgstr "" -"Nächste Sammlungs-Entität aufwärts im Domänenmodell (automatisch generiert)" - -#: apps/domain/models.py:51 -msgid "is collection" -msgstr "Ist eine Sammlung" - -#: apps/domain/models.py:52 -msgid "Designates whether this attribute/entity is a collection." -msgstr "Legt fest, ob dieses Objekt eine Sammlung ist." - -#: apps/domain/models.py:56 -msgid "is attribute" -msgstr "ist ein Attribut" - -#: apps/domain/models.py:57 -msgid "" -"Designates whether this attribute/entity is an attribute (auto-generated)." -msgstr "Legt fest, ob dieses Objekt ein Attribut ist." - -#: apps/domain/models.py:62 -msgid "List of conditions evaluated for this attribute/entity." -msgstr "" -"Liste der Bedingungen die für dieses Attribut/ diese Entität ausgewertet " -"werden." - -#: apps/domain/models.py:66 apps/domain/templates/domain/domain_export.html:15 -#: apps/options/models.py:92 apps/questions/models.py:266 -msgid "Path" -msgstr "Pfad" - -#: apps/domain/models.py:67 -msgid "The path part of the URI of this attribute/entity (auto-generated)." -msgstr "" -"Der Pfad-Teil der URI für dieses Attribut/diese Entität (automatisch " -"erstellt)." - -#: apps/domain/models.py:72 apps/domain/models.py:194 -#: apps/questions/models.py:276 -msgid "Attribute entity" -msgstr "Attribut-Entitäten" - -#: apps/domain/models.py:73 -msgid "Attribute entities" -msgstr "Attribut-Entität" - -#: apps/domain/models.py:143 apps/projects/models.py:202 -#: apps/questions/templates/questions/catalog_tree.html:67 -#: apps/questions/templates/questions/catalog_tree.html:127 -#: apps/tasks/templates/tasks/tasks_export.html:29 -msgid "Text" -msgstr "Text" - -#: apps/domain/models.py:144 -msgid "URL" -msgstr "URL" - -#: apps/domain/models.py:145 -msgid "Integer" -msgstr "Ganzzahl" - -#: apps/domain/models.py:146 -msgid "Float" -msgstr "Kommazahl" - -#: apps/domain/models.py:147 -msgid "Boolean" -msgstr "Boolsche Variable" - -#: apps/domain/models.py:148 -msgid "Datetime" -msgstr "Datum und Zeit" - -#: apps/domain/models.py:154 -#: apps/domain/templates/domain/domain_export.html:34 -msgid "Value type" -msgstr "Wert-Typ" - -#: apps/domain/models.py:155 -msgid "Type of value for this attribute." -msgstr "Art von Wert für dieses Attribut." - -#: apps/domain/models.py:159 -#: apps/domain/templates/domain/domain_export.html:40 -msgid "Unit" -msgstr "Einheit" - -#: apps/domain/models.py:160 -msgid "Unit for this attribute." -msgstr "Maßeinheit dieses Attributes." - -#: apps/domain/models.py:164 -#: apps/domain/templates/domain/domain_modal_form_optionsets.html:19 -#: apps/options/models.py:51 -#: apps/options/templates/options/options_export.html:6 -msgid "Option sets" -msgstr "Optionensets" - -#: apps/domain/models.py:165 -msgid "Option sets for this attribute." -msgstr "Optionenset für dieses Attribut." - -#: apps/domain/models.py:169 apps/domain/models.py:240 -#: apps/domain/templates/domain/domain.html:97 -#: apps/domain/templates/domain/domain_export.html:11 -#: apps/domain/templates/domain/domain_modal_form_attributes.html:11 -#: apps/domain/views.py:73 apps/projects/models.py:187 -#: apps/questions/templates/questions/catalogs_modal_form_questions.html:83 -msgid "Attribute" -msgstr "Attribut" - -#: apps/domain/models.py:170 -msgid "Attributes" -msgstr "Attribute" - -#: apps/domain/models.py:195 -msgid "Attribute/entity this verbose name belongs to." -msgstr "Attribut/Entität zu dem dieser Anzeigenname gehört." - -#: apps/domain/models.py:199 -msgid "Name (en)" -msgstr "Name (en)" - -#: apps/domain/models.py:200 -msgid "English name displayed for this attribute/entity (e.g. project)." -msgstr "Englischer Name der für dieses Attribut/diese Entität angezeigt wird." - -#: apps/domain/models.py:204 -msgid "Name (de)" -msgstr "Name (de)" - -#: apps/domain/models.py:205 -msgid "German name displayed for this attribute/entity (e.g. Projekt)." -msgstr "Deutscher Name der für dieses Attribut/diese Entität angezeigt wird." - -#: apps/domain/models.py:209 -msgid "Plural name (en)" -msgstr "Name (Plural, en)" - -#: apps/domain/models.py:210 -msgid "" -"English plural name displayed for this attribute/entity (e.g. projects)." -msgstr "" -"Englischer Name (Plural) der für dieses Attribut/diese Entität angezeigt " -"wird." - -#: apps/domain/models.py:214 -msgid "Plural name (de)" -msgstr "Name (Plural, de)" - -#: apps/domain/models.py:215 -msgid "German plural name displayed for this attribute/entity (e.g. Projekte)." -msgstr "" -"Deutscher Name (Plural) der für dieses Attribut/diese Entität angezeigt wird." - -#: apps/domain/models.py:219 -#: apps/domain/templates/domain/domain_export.html:82 -#: apps/domain/templates/domain/domain_export.html:86 -#: apps/domain/templates/domain/domain_modal_form_verbosenames.html:11 -msgid "Verbose name" -msgstr "Anzeigename" - -#: apps/domain/models.py:220 -msgid "Verbose names" -msgstr "Anzeigename" - -#: apps/domain/models.py:241 -msgid "Attribute this verbose name belongs to." -msgstr "Attribute zu dem dieser Anzeigenname gehört." - -#: apps/domain/models.py:244 -#: apps/domain/templates/domain/domain_export.html:70 -#: apps/questions/templates/questions/catalog_tree.html:103 -#: apps/questions/templates/questions/catalog_tree.html:161 -msgid "Minimum" -msgstr "Minimum" - -#: apps/domain/models.py:245 -msgid "Minimal value for this attribute." -msgstr "Minimaler Wert für dieses Attribut." - -#: apps/domain/models.py:248 -#: apps/domain/templates/domain/domain_export.html:71 -#: apps/questions/templates/questions/catalog_tree.html:104 -#: apps/questions/templates/questions/catalog_tree.html:162 -msgid "Maximum" -msgstr "Maximum" - -#: apps/domain/models.py:249 -msgid "Maximum value for this attribute." -msgstr "Maximaler Wert für dieses Attribut." - -#: apps/domain/models.py:252 -#: apps/domain/templates/domain/domain_export.html:72 -#: apps/questions/templates/questions/catalog_tree.html:105 -#: apps/questions/templates/questions/catalog_tree.html:163 -msgid "Step" -msgstr "Schrittgröße" - -#: apps/domain/models.py:253 -msgid "Step in which this attribute can be incremented/decremented." -msgstr "Schritte in denen dieses Attribut erhöht oder verringert werden kann." - -#: apps/domain/models.py:258 -#: apps/domain/templates/domain/domain_export.html:66 -#: apps/domain/templates/domain/domain_modal_form_ranges.html:11 -#: apps/questions/templates/questions/catalog_tree.html:99 -#: apps/questions/templates/questions/catalog_tree.html:157 -msgid "Range" -msgstr "Bereich" - -#: apps/domain/models.py:259 -msgid "Ranges" -msgstr "Bereiche" - -#: apps/domain/templates/domain/domain.html:39 -msgid "Create new entity" -msgstr "Neue Entität erstellen" - -#: apps/domain/templates/domain/domain.html:44 -msgid "Create new attribute" -msgstr "Neues Attribut erstellen" - -#: apps/domain/templates/domain/domain.html:64 -msgid "CSV" -msgstr "CSV" - -#: apps/domain/templates/domain/domain.html:96 -#: apps/domain/templates/domain/domain_export.html:11 -#: apps/domain/templates/domain/domain_modal_form_entities.html:11 -#: apps/domain/views.py:73 -#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:70 -msgid "Entity" -msgstr "Entität" - -#: apps/domain/templates/domain/domain_export.html:27 -msgid "Collection" -msgstr "Sammlung" - -#: apps/domain/templates/domain/domain_export.html:28 -#: apps/projects/models.py:247 -msgid "yes" -msgstr "Ja" - -#: apps/domain/templates/domain/domain_export.html:28 -#: apps/projects/models.py:249 -msgid "no" -msgstr "Nein" - -#: apps/domain/templates/domain/domain_export.html:87 -msgid "Verbose name plural" -msgstr "Anzeigename, plural" - -#: apps/domain/templates/domain/domain_modal_delete_attributes.html:11 -#: apps/domain/templates/domain/domain_modal_delete_entities.html:15 -#: apps/domain/templates/domain/domain_options.html:75 -msgid "Delete attribute" -msgstr "Attribut entfernen" - -#: apps/domain/templates/domain/domain_modal_delete_attributes.html:17 -#, python-format -msgid "" -"You are about to permanently delete the attribute %(object)s." -msgstr "" -"Sie sind dabei das Attribut %(object)s permanent zu entfernen." - -#: apps/domain/templates/domain/domain_modal_delete_entities.html:12 -#: apps/domain/templates/domain/domain_options.html:41 -msgid "Delete entity" -msgstr "Entität entfernen" - -#: apps/domain/templates/domain/domain_modal_delete_entities.html:22 -#, python-format -msgid "You are about to permanently delete the entity %(object)s." -msgstr "" -"Sie sind dabei die Entität %(object)s permanent zu entfernen." - -#: apps/domain/templates/domain/domain_modal_delete_entities.html:28 -msgid "This will also delete the following attributes:" -msgstr "Es werden auch die folgenden Attribute entfernt:" - -#: apps/domain/templates/domain/domain_modal_form_attributes.html:22 -msgid "The prefix for the URI of this attribute." -msgstr "Das Präfix für die URI dieses Attributs." - -#: apps/domain/templates/domain/domain_modal_form_attributes.html:31 -msgid "The internal identifier of this attribute." -msgstr "Der interne Bezeichner diese Attributs." - -#: apps/domain/templates/domain/domain_modal_form_attributes.html:40 -msgid "Additional internal information about this attribute." -msgstr "Zusätzliche interne Informationen über dieses Attribut." - -#: apps/domain/templates/domain/domain_modal_form_attributes.html:81 -msgid "" -"Designates whether this attribute can have several values (for checkboxes or " -"multiple answers)." -msgstr "" -"Legt fest, ob dieses Objekt mehrere Werte haben kann (für Ankreuzkästchen " -"oder mehrere Antworten)." - -#: apps/domain/templates/domain/domain_modal_form_conditions.html:24 -#: apps/domain/templates/domain/domain_modal_form_optionsets.html:24 -#: apps/options/templates/options/options_modal_form_conditions.html:24 -#: apps/tasks/templates/tasks/tasks_modal_form_conditions.html:24 -msgid "Hold down Control, or Command on a Mac, to select more than one." -msgstr "" -"Halten Sie die Strg-Taste (⌘ für Mac) während des Klickens gedrückt, um " -"mehrere Einträge auszuwählen." - -#: apps/domain/templates/domain/domain_modal_form_entities.html:22 -msgid "The prefix for the URI of this entity." -msgstr "Das Präfix für die URI die dieser Entität." - -#: apps/domain/templates/domain/domain_modal_form_entities.html:31 -msgid "The internal identifier of this entity." -msgstr "Der interne Bezeichner für diese Entität." - -#: apps/domain/templates/domain/domain_modal_form_entities.html:40 -msgid "Additional internal information about this entity." -msgstr "Zusätzliche interne Informationen über diese Entität." - -#: apps/domain/templates/domain/domain_modal_form_entities.html:59 -msgid "Designates whether this entity can have several sets of values." -msgstr "Legt fest, ob dieses Objekt mehrere Sets von Werten haben kann." - -#: apps/domain/templates/domain/domain_options.html:8 -msgid "Add attribute or entity" -msgstr "Attribut oder Entität hinzufügen" - -#: apps/domain/templates/domain/domain_options.html:14 -msgid "Add attribute" -msgstr "Attribut hinzufügen" - -#: apps/domain/templates/domain/domain_options.html:19 -msgid "Add entity" -msgstr "Entität hinzufügen" - -#: apps/domain/templates/domain/domain_options.html:26 -msgid "Update entity" -msgstr "Entität bearbeiten" - -#: apps/domain/templates/domain/domain_options.html:31 -#: apps/domain/templates/domain/domain_options.html:65 -msgid "Update verbose name" -msgstr "Anzeigename bearbeiten" - -#: apps/domain/templates/domain/domain_options.html:36 -#: apps/domain/templates/domain/domain_options.html:70 -#: apps/options/templates/options/options.html:89 -#: apps/tasks/templates/tasks/tasks.html:81 -msgid "Update conditions" -msgstr "Bedingung bearbeiten" - -#: apps/domain/templates/domain/domain_options.html:50 -msgid "Update attribute" -msgstr "Attribut bearbeiten" - -#: apps/domain/templates/domain/domain_options.html:55 -msgid "Update range" -msgstr "Bereich bearbeiten" - -#: apps/domain/templates/domain/domain_options.html:60 -msgid "Update options" -msgstr "Optionen bearbeiten" - -#: apps/domain/views.py:74 -msgid "collection" -msgstr "Sammlung" - -#: apps/options/models.py:25 -msgid "The prefix for the URI of this option set." -msgstr "Das Präfix für die URI dieses Optionenset." - -#: apps/options/models.py:30 -msgid "The internal identifier of this option set." -msgstr "Der interne Bezeichner für dieses Optionenset." - -#: apps/options/models.py:35 -msgid "Additional internal information about this option set." -msgstr "Zusätzliche interne Informationen über dieses Optionenset." - -#: apps/options/models.py:39 apps/options/models.py:107 -#: apps/questions/models.py:47 apps/questions/models.py:120 -#: apps/questions/models.py:200 apps/questions/models.py:286 -msgid "Order" -msgstr "Reihenfolge" - -#: apps/options/models.py:40 -msgid "The position of this option set in lists." -msgstr "Die Position von diesem Optionenset in Listen." - -#: apps/options/models.py:45 -msgid "The list of conditions evaluated for this option set." -msgstr "" -"Die Liste der Bedingungen die für dieses Optionenset ausgewertet werden." - -#: apps/options/models.py:50 apps/options/models.py:102 -#: apps/options/templates/options/options.html:97 -#: apps/options/templates/options/options_export.html:10 -#: apps/options/templates/options/options_modal_form_optionsets.html:11 -msgid "Option set" -msgstr "Optionenset" - -#: apps/options/models.py:78 -msgid "The Uniform Resource Identifier of this option (auto-generated)." -msgstr "Der Uniform Resource Identifier dieser Option (automatisch erstellt)." - -#: apps/options/models.py:83 -msgid "The prefix for the URI of this option." -msgstr "Das Präfix für die URI dieser Option." - -#: apps/options/models.py:88 -msgid "The internal identifier of this option." -msgstr "Der interne Bezeichner für diese Option." - -#: apps/options/models.py:93 -msgid "The path part of the URI for this option (auto-generated)." -msgstr "Der Pfad-Teil der URI für diese Option (automatisch erstellt)." - -#: apps/options/models.py:98 -msgid "Additional internal information about this option." -msgstr "Zusätzliche interne Informationen über diese Option." - -#: apps/options/models.py:103 -msgid "The option set this option belongs to." -msgstr "Das Optionenset zu dem diese Option gehört." - -#: apps/options/models.py:108 apps/questions/models.py:121 -#: apps/questions/models.py:201 -msgid "Position in lists." -msgstr "Position in Listen." - -#: apps/options/models.py:112 apps/questions/models.py:386 -#: apps/tasks/models.py:60 -msgid "Text (en)" -msgstr "Text (en)" - -#: apps/options/models.py:113 -msgid "The English text displayed for this option." -msgstr "Der englische Text für diese Option." - -#: apps/options/models.py:117 apps/questions/models.py:390 -#: apps/tasks/models.py:64 -msgid "Text (de)" -msgstr "Text (de)" - -#: apps/options/models.py:118 -msgid "The German text displayed for this option." -msgstr "Der deutsche Text für diese Option." - -#: apps/options/models.py:122 -msgid "Additional input" -msgstr "Zusätzliche Eingabe" - -#: apps/options/models.py:123 -msgid "Designates whether an additional input is possible for this option." -msgstr "Legt fest, ob eine zusätzliche Eingabe für diese Option möglich ist." - -#: apps/options/models.py:128 apps/options/templates/options/options.html:113 -#: apps/options/templates/options/options_modal_delete_optionsets.html:30 -#: apps/options/templates/options/options_modal_form_options.html:11 -#: apps/projects/models.py:207 -msgid "Option" -msgstr "Option" - -#: apps/options/templates/options/options.html:39 -msgid "Create new option set" -msgstr "Neues Optionenset erstellen" - -#: apps/options/templates/options/options.html:44 -msgid "Create new option" -msgstr "Neue Option erstellen" - -#: apps/options/templates/options/options.html:81 -msgid "Add option" -msgstr "Option hinzufügen" - -#: apps/options/templates/options/options.html:85 -msgid "Update option set" -msgstr "Optionenset bearbeiten" - -#: apps/options/templates/options/options.html:93 -#: apps/options/templates/options/options_modal_delete_optionsets.html:11 -msgid "Delete option set" -msgstr "Optionenset entfernen" - -#: apps/options/templates/options/options.html:105 -msgid "Update option" -msgstr "Option bearbeiten" - -#: apps/options/templates/options/options.html:109 -#: apps/options/templates/options/options_modal_delete_options.html:11 -msgid "Delete option" -msgstr "Option entfernen" - -#: apps/options/templates/options/options_modal_delete_options.html:17 -#, python-format -msgid "You are about to permanently delete the option %(object)s." -msgstr "" -"Sie sind dabei die Option %(object)s permanent zu entfernen." - -#: apps/options/templates/options/options_modal_delete_optionsets.html:17 -#, python-format -msgid "" -"You are about to permanently delete the option set %(object)s." -msgstr "" -"Sie sind dabei das Optionenset %(object)s permanent zu " -"entfernen." - -#: apps/options/templates/options/options_modal_delete_optionsets.html:23 -#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:24 -#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:23 -#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:23 -#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:23 -msgid "Important! This will also delete the following items:" -msgstr "" -"Important! Es werden auch die folgenden Objekte entfernt:" - -#: apps/projects/app_config.py:7 apps/projects/models.py:46 -msgid "Projects" -msgstr "Projekte" - -#: apps/projects/forms.py:58 -msgid "Username or email" -msgstr "Benutzername oder E-Mail" - -#: apps/projects/forms.py:59 apps/projects/models.py:24 -#: apps/projects/models.py:92 -#: apps/projects/templates/projects/project_detail_memberships.html:12 -msgid "User" -msgstr "Benutzer" - -#: apps/projects/forms.py:60 -msgid "The username or email for the user of this membership." -msgstr "Der Benutzername oder die Email für diese Mitgliedschaft." - -#: apps/projects/forms.py:69 -msgid "Please enter a valid username or email." -msgstr "Bitte geben Sie einen gültigen Benutzernamen oder Email ein." - -#: apps/projects/forms.py:72 -msgid "The user is already a member of the project." -msgstr "Der Benutzer ist bereits ein Mitglied dieses Projektes." - -#: apps/projects/models.py:25 -msgid "The list of users for this project." -msgstr "Die Liste der Benutzer für dieses Projekt." - -#: apps/projects/models.py:29 apps/projects/models.py:123 -#: apps/projects/templates/projects/project_questions_modal_form_valuesets.html:19 -#: apps/tasks/templates/tasks/tasks_export.html:25 -#: apps/views/templates/views/views_export.html:25 -msgid "Title" -msgstr "Titel" - -#: apps/projects/models.py:30 -msgid "The title for this project." -msgstr "Der Titel für dieses Projekt." - -#: apps/projects/models.py:34 apps/projects/models.py:128 -#: apps/projects/templates/projects/project_detail.html:78 -#: apps/projects/templates/projects/project_detail_snapshots.html:14 -#: apps/projects/templates/projects/project_detail_tasks.html:10 -#: apps/projects/templates/projects/project_detail_views.html:10 -msgid "Description" -msgstr "Beschreibung" - -#: apps/projects/models.py:35 -msgid "A description for this project (optional)." -msgstr "Ein Beschreibung für dieses Projekt (optional)." - -#: apps/projects/models.py:39 apps/questions/models.py:63 -#: apps/questions/models.py:115 -#: apps/questions/templates/questions/catalog_tree.html:3 -#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:11 -#: apps/questions/templates/questions/catalogs_modal_form_catalogs.html:11 -#: apps/questions/templates/questions/catalogs_sidebar.html:3 -msgid "Catalog" -msgstr "Katalog" - -#: apps/projects/models.py:40 -msgid "The catalog which will be used for this project." -msgstr "Der Fragenkatalog der für dieses Projekt verwendet wird." - -#: apps/projects/models.py:45 apps/projects/models.py:87 -#: apps/projects/models.py:118 apps/projects/models.py:177 -msgid "Project" -msgstr "Projekt" - -#: apps/projects/models.py:79 -msgid "Owner" -msgstr "Besitzer" - -#: apps/projects/models.py:80 -msgid "Manager" -msgstr "Manager" - -#: apps/projects/models.py:81 -msgid "Author" -msgstr "Autor" - -#: apps/projects/models.py:82 -msgid "Guest" -msgstr "Gast" - -#: apps/projects/models.py:88 -msgid "The project for this membership." -msgstr "Das Projekt zu dem diese Mitgliedschaft gehört." - -#: apps/projects/models.py:93 -msgid "The user for this membership." -msgstr "Der Benutzer für diese Mitgliedschaft." - -#: apps/projects/models.py:97 -#: apps/projects/templates/projects/project_detail_memberships.html:14 -#: apps/projects/templates/projects/projects.html:32 -msgid "Role" -msgstr "Rolle" - -#: apps/projects/models.py:98 -msgid "The role for this membership." -msgstr "Die Rolle für diese Mitgliedschaft." - -#: apps/projects/models.py:103 -msgid "Membership" -msgstr "Mitgliedschaft" - -#: apps/projects/models.py:104 -msgid "Memberships" -msgstr "Mitgliedschaften" - -#: apps/projects/models.py:119 -msgid "The project this snapshot belongs to." -msgstr "Das Projekt zu dem dieser Snapshot gehört." - -#: apps/projects/models.py:124 -msgid "The title for this snapshot." -msgstr "Der Titel für diesen Snapshot." - -#: apps/projects/models.py:129 -msgid "A description for this snapshot (optional)." -msgstr "Ein Beschreibung für diesen Snapshot (optional)." - -#: apps/projects/models.py:134 apps/projects/models.py:182 -#: apps/projects/templates/projects/project_detail_snapshots.html:13 -msgid "Snapshot" -msgstr "Snapshot" - -#: apps/projects/models.py:135 -#: apps/projects/templates/projects/project_answers.html:9 -#: apps/projects/templates/projects/project_detail_snapshots.html:7 -#: apps/projects/templates/projects/project_view.html:9 -msgid "Snapshots" -msgstr "Snapshots" - -#: apps/projects/models.py:178 -msgid "The project this value belongs to." -msgstr "Das Projekt zu dem dieser Wert gehört." - -#: apps/projects/models.py:183 -msgid "The snapshot this value belongs to." -msgstr "Der Snapshot zu dem dieser Wert gehört." - -#: apps/projects/models.py:188 -msgid "The attribute this value belongs to." -msgstr "Das Attribut zu dem dieser Wert gehört." - -#: apps/projects/models.py:192 -msgid "Set index" -msgstr "Set-Index" - -#: apps/projects/models.py:193 -msgid "" -"The position of this value in an entity collection (i.e. in the question set)" -msgstr "" -"Die Position von diesem Wert in einer Entität (einem Fragenset) in Listen." - -#: apps/projects/models.py:197 -msgid "Collection index" -msgstr "Sammlungs-Index" - -#: apps/projects/models.py:198 -msgid "The position of this value in an attribute collection." -msgstr "Die Position von diesem Wert in einem Sammlungs-Attribut." - -#: apps/projects/models.py:203 -msgid "The string stored for this value." -msgstr "Die Zeichenkette die für diesen Wert gespeichert wird." - -#: apps/projects/models.py:208 -msgid "The option stored for this value." -msgstr "Die Option die für diesen Wert gespeichert wird." - -#: apps/projects/models.py:212 -msgid "Value" -msgstr "Wert" - -#: apps/projects/models.py:213 -msgid "Values" -msgstr "Werte" - -#: apps/projects/models.py:224 -msgid "current" -msgstr "aktuell" - -#: apps/projects/serializers.py:118 -msgid "item" -msgstr "Eintrag" - -#: apps/projects/serializers.py:119 -msgid "items" -msgstr "Einträge" - -#: apps/projects/serializers.py:151 -msgid "set" -msgstr "Set" - -#: apps/projects/serializers.py:152 -msgid "sets" -msgstr "Sets" - -#: apps/projects/templates/projects/membership_confirm_delete.html:8 -#: apps/projects/templates/projects/membership_confirm_delete.html:17 -#: apps/projects/templates/projects/project_detail_memberships.html:36 -msgid "Delete membership" -msgstr "Mitgliedschaft entfernen" - -#: apps/projects/templates/projects/membership_confirm_delete.html:12 -#, python-format -msgid "" -"You are about to remove the user %(user)s from the project " -"%(title)s." -msgstr "" -"Sie sind dabei den User %(user)s aud dem Projekt " -"%(title)s zu entfernen." - -#: apps/projects/templates/projects/membership_form.html:9 -#: apps/projects/templates/projects/membership_form.html:11 -#: apps/projects/templates/projects/project_detail_memberships.html:31 -msgid "Update membership" -msgstr "Mitgliedschaft bearbeiten" - -#: apps/projects/templates/projects/membership_form.html:15 -msgid "Add member to project" -msgstr "Mitglied zu Projekt hinzufügen" - -#: apps/projects/templates/projects/membership_form.html:17 -#: apps/projects/templates/projects/project_detail.html:52 -msgid "Add member" -msgstr "Mitglied hinzufügen" - -#: apps/projects/templates/projects/project_answers.html:14 -#: apps/projects/templates/projects/project_view.html:14 -msgid "Current" -msgstr "Aktuell" - -#: apps/projects/templates/projects/project_answers.html:32 -#: apps/projects/templates/projects/project_questions_done.html:13 -#: apps/projects/templates/projects/project_questions_sidebar.html:34 -#: apps/projects/templates/projects/project_view.html:32 -msgid "Back to project overview" -msgstr "Zurück zum Projekt" - -#: apps/projects/templates/projects/project_answers.html:58 -#: apps/projects/templates/projects/project_answers_export.html:6 -#, python-format -msgid "Answers for %(title)s" -msgstr "Antworten für %(title)s" - -#: apps/projects/templates/projects/project_answers.html:61 -msgid "" -"In the following, we have summarized the information about the project as " -"given by you and your collaborators." -msgstr "" -"Im Folgenden haben wir die von Ihnen eingegebenen Informationen über das " -"Projekt noch einmal zusammengefasst." - -#: apps/projects/templates/projects/project_confirm_delete.html:7 -#: apps/projects/templates/projects/project_confirm_delete.html:17 -#: apps/projects/templates/projects/project_detail.html:21 -msgid "Delete project" -msgstr "Projekt entfernen" - -#: apps/projects/templates/projects/project_confirm_delete.html:10 -#, python-format -msgid "" -"You are about to permanently delete the project %(object)s." -msgstr "" -"Sie sind dabei das Projekt %(object)s permanent zu entfernen." - -#: apps/projects/templates/projects/project_detail.html:16 -msgid "Update project information" -msgstr "Projektinformationen bearbeiten" - -#: apps/projects/templates/projects/project_detail.html:29 -msgid "Answer questions" -msgstr "Fragen beantworten" - -#: apps/projects/templates/projects/project_detail.html:35 -#: apps/projects/templates/projects/project_detail_snapshots.html:32 -#: apps/projects/templates/projects/project_questions_done.html:9 -msgid "View answers" -msgstr "Antworten anzeigen" - -#: apps/projects/templates/projects/project_detail.html:43 -#: apps/projects/templates/projects/snapshot_form.html:17 -msgid "Create snapshot" -msgstr "Snapshot erstellen" - -#: apps/projects/templates/projects/project_detail.html:61 -msgid "Export project as XML" -msgstr "Projekt als XML exportieren" - -#: apps/projects/templates/projects/project_detail.html:68 -msgid "Back to projects overview" -msgstr "Zurück zu den Projekten" - -#: apps/projects/templates/projects/project_detail.html:86 -msgid "No description available." -msgstr "Keine Beschreibung vorhanden." - -#: apps/projects/templates/projects/project_detail_memberships.html:8 -msgid "Members" -msgstr "Mitglieder" - -#: apps/projects/templates/projects/project_detail_memberships.html:13 -msgid "E-Mail" -msgstr "E-Mail" - -#: apps/projects/templates/projects/project_detail_snapshots.html:15 -#: apps/projects/templates/projects/projects.html:33 -msgid "Created" -msgstr "Erstellt" - -#: apps/projects/templates/projects/project_detail_snapshots.html:36 -#: apps/projects/templates/projects/snapshot_form.html:9 -#: apps/projects/templates/projects/snapshot_form.html:11 -msgid "Update snapshot" -msgstr "Snapshot bearbeiten" - -#: apps/projects/templates/projects/project_detail_snapshots.html:41 -#: apps/projects/templates/projects/snapshot_rollback.html:7 -msgid "Rollback to snapshot" -msgstr "Auf Snapshot zurücksetzen" - -#: apps/projects/templates/projects/project_detail_snapshots.html:52 -msgid "No snapshots found." -msgstr "Keine Snapshots gefunden." - -#: apps/projects/templates/projects/project_detail_tasks.html:9 -#: apps/tasks/models.py:75 apps/tasks/models.py:110 -#: apps/tasks/templates/tasks/tasks.html:93 -#: apps/tasks/templates/tasks/tasks_export.html:10 -#: apps/tasks/templates/tasks/tasks_modal_form_tasks.html:11 -#: apps/tasks/templates/tasks/tasks_modal_form_timeframes.html:11 -msgid "Task" -msgstr "Aufgabe" - -#: apps/projects/templates/projects/project_detail_tasks.html:11 -#: apps/tasks/models.py:136 -msgid "Time frame" -msgstr "Zeitraum" - -#: apps/projects/templates/projects/project_detail_tasks.html:34 -msgid "No active tasks found." -msgstr "Keine aktiven Aufgaben gefunden." - -#: apps/projects/templates/projects/project_detail_views.html:9 -#: apps/views/models.py:68 apps/views/templates/views/views.html:96 -#: apps/views/templates/views/views_export.html:10 -#: apps/views/templates/views/views_modal_form_views.html:11 -msgid "View" -msgstr "Ansicht" - -#: apps/projects/templates/projects/project_detail_views.html:22 -msgid "Display view" -msgstr "Ansicht anzeigen" - -#: apps/projects/templates/projects/project_detail_views.html:32 -msgid "No views found." -msgstr "Keine Ansichten gefunden." - -#: apps/projects/templates/projects/project_form.html:9 -#: apps/projects/templates/projects/project_form.html:11 -msgid "Update project" -msgstr "Projekt bearbeiten" - -#: apps/projects/templates/projects/project_form.html:15 -#: apps/projects/templates/projects/projects.html:18 -msgid "Create new project" -msgstr "Neues Projekt erstellen" - -#: apps/projects/templates/projects/project_form.html:17 -msgid "Create project" -msgstr "Neues Projekt erstellen" - -#: apps/projects/templates/projects/project_questions.html:44 -msgid "Questionnaire for project {$ service.project.title $}" -msgstr "Fragebogen für Projekt {$ service.project.title $}" - -#: apps/projects/templates/projects/project_questions.html:76 -msgid "Save and proceed" -msgstr "Sichern und fortfahren" - -#: apps/projects/templates/projects/project_questions.html:82 -msgid "Back" -msgstr "Zurück" - -#: apps/projects/templates/projects/project_questions.html:85 -msgid "Skip" -msgstr "Überspringen" - -#: apps/projects/templates/projects/project_questions_add_field_button.html:6 -#: apps/projects/templates/projects/project_questions_questionset_head.html:15 -#: apps/projects/templates/projects/project_questions_questionset_head.html:36 -#, python-format -msgid "Add %(name)s" -msgstr "%(name)s hinzufügen" - -#: apps/projects/templates/projects/project_questions_add_field_help.html:4 -#, python-format -msgid "" -"Please enter the %(name_plural)s line by line. You can add %(name_plural)s " -"using the green button and remove them using the red cross (×)." -msgstr "" -"Bitte nutzen Sie für die %(name_plural)s jeweils eine eigene Zeile. Sie " -"können weitere %(name_plural)s mit dem grünen Knopf hinzufügen und mit dem " -"roten Kreuz (×) entfernen." - -#: apps/projects/templates/projects/project_questions_done.html:5 -msgid "Thank you for filling out the questionnaire." -msgstr "Vielen Dank für das Beantworten der Fragen." - -#: apps/projects/templates/projects/project_questions_form_group_select.html:16 -#: apps/projects/templates/projects/project_questions_form_group_select.html:41 -msgid "Please select" -msgstr "Bitte auswählen" - -#: apps/projects/templates/projects/project_questions_form_group_yesno.html:18 -#: apps/projects/templates/projects/project_questions_form_group_yesno.html:50 -msgid "Yes" -msgstr "Ja" - -#: apps/projects/templates/projects/project_questions_form_group_yesno.html:24 -#: apps/projects/templates/projects/project_questions_form_group_yesno.html:56 -msgid "No" -msgstr "Nein" - -#: apps/projects/templates/projects/project_questions_modal_delete_valuesets.html:17 -#, python-format -msgid "" -"You are about to permanently delete the %(name)s %(object)s." -msgstr "" -"Sie sind dabei den %(name)s %(object)s permanent zu " -"entfernen." - -#: apps/projects/templates/projects/project_questions_modal_delete_valuesets.html:23 -#, python-format -msgid "You are about to permanently delete this %(name)s." -msgstr "Sie sind dabei diesen %(name)s permanent zu entfernen." - -#: apps/projects/templates/projects/project_questions_modal_delete_valuesets.html:29 -#, python-format -msgid "" -"This includes all given answers for this %(name)s on all pages, not just " -"this one." -msgstr "" -"Dies umfasst alle gegebenen Antworten für dieses %(name)s auf allen Seiten, " -"nicht nur dieser." - -#: apps/projects/templates/projects/project_questions_modal_form_valuesets.html:20 -#, python-format -msgid "Please give the %(name)s a meaningful name." -msgstr "Bitte geben Sie dem %(name)s einen aus­sa­ge­kräf­tigen Namen." - -#: apps/projects/templates/projects/project_questions_questionset_head.html:7 -#, python-format -msgid "" -"Please fill in the form for each %(name)s. The different %(name_plural)s " -"will be referred to in following questions. You can add a new %(name)s using " -"the green button. Once created, you can edit or delete %(name_plural)s using " -"the buttons in the top right corner." -msgstr "" -"Bitte füllen Sie das Formular für jeden %(name)s aus. Die verschiedenen " -"%(name_plural)s werden eventuell in späteren Fragen wieder verwendet. Sie " -"können einen neuen %(name)s mit dem grünen Knopf hinzufügen. Bereits " -"angelegte %(name_plural)s können mit den Knöpfen oben rechts bearbeitet oder " -"wieder entfernt werden." - -#: apps/projects/templates/projects/project_questions_questionset_head.html:43 -#, python-format -msgid "Update %(name)s" -msgstr "%(name)s bearbeiten" - -#: apps/projects/templates/projects/project_questions_questionset_head.html:48 -#: apps/projects/templates/projects/project_questions_remove_field.html:4 -#, python-format -msgid "Remove %(name)s" -msgstr "%(name)s entfernen" - -#: apps/projects/templates/projects/project_questions_sidebar.html:4 -msgid "Progress" -msgstr "Fortschritt" - -#: apps/projects/templates/projects/project_questions_sidebar.html:13 -msgid "Navigation" -msgstr "Navigation" - -#: apps/projects/templates/projects/project_questions_sidebar.html:16 -msgid "Please note that using the navigation will discard any usaved input." -msgstr "" -"Bitte beachten sie das durch die Benutzung der Navigation ungesicherte " -"Eingaben verworfen werden." - -#: apps/projects/templates/projects/project_questions_sidebar.html:22 -msgid "skip to previous page" -msgstr "Zur vorherigen Frage springen" - -#: apps/projects/templates/projects/project_questions_sidebar.html:27 -msgid "skip to next page" -msgstr "Zur nächsten Frage springen" - -#: apps/projects/templates/projects/project_questions_sidebar.html:38 -msgid "Overview" -msgstr "Übersicht" - -#: apps/projects/templates/projects/project_view.html:61 -msgid "Error" -msgstr "Fehler" - -#: apps/projects/templates/projects/project_view.html:64 -msgid "There has been a problem creating the view. Please contact support." -msgstr "" -"Beim Erstellen der Ansicht ist ein Fehler aufgetreten. Bitte kontaktieren " -"Sie den Support." - -#: apps/projects/templates/projects/projects.html:8 -msgid "My Data" -msgstr "Meine Daten" - -#: apps/projects/templates/projects/projects.html:12 -msgid "My Groups" -msgstr "Meine Gruppen" - -#: apps/projects/templates/projects/projects.html:26 -msgid "My Projects" -msgstr "Meine Projekte" - -#: apps/projects/templates/projects/snapshot_form.html:15 -msgid "Create new snapshot" -msgstr "Neuen Snapshot erstellen" - -#: apps/projects/templates/projects/snapshot_rollback.html:10 -#, python-format -msgid "" -"You are about to reset all values to the snapshot %(title)s. All newer values will be deleted." -msgstr "" -"Sie sind dabei alle Werte auf den Snapshot %(title)s " -"zurückzusetzen. Alle neueren Werte werden entfernt." - -#: apps/projects/templates/projects/snapshot_rollback.html:17 -msgid "Rollback" -msgstr "Zurücksetzen" - -#: apps/projects/views.py:351 apps/projects/views.py:373 -msgid "This field is required." -msgstr "Dieses Feld wird benötigt." - -#: apps/questions/models.py:28 -msgid "The Uniform Resource Identifier of this catalog (auto-generated)." -msgstr "" -"Der Uniform Resource Identifier dieses Katalogs (automatisch erstellt)." - -#: apps/questions/models.py:33 -msgid "The prefix for the URI of this catalog." -msgstr "Das Präfix für die URI dieses Katalogs." - -#: apps/questions/models.py:38 -msgid "The internal identifier of this catalog." -msgstr "Der interne Bezeichner für diesen Katalog." - -#: apps/questions/models.py:43 -msgid "Additional internal information about this catalog." -msgstr "Zusätzliche interne Informationen über diesen Katalog." - -#: apps/questions/models.py:48 -msgid "The position of this catalog in lists." -msgstr "Die Position von diesem Katalog in Listen." - -#: apps/questions/models.py:52 apps/questions/models.py:125 -#: apps/questions/models.py:205 apps/tasks/models.py:51 -#: apps/views/models.py:47 -msgid "Title (en)" -msgstr "Titel (en)" - -#: apps/questions/models.py:53 -msgid "The English title for this catalog." -msgstr "Der englische Titel für diesen Katalog." - -#: apps/questions/models.py:57 apps/questions/models.py:130 -#: apps/questions/models.py:210 apps/tasks/models.py:56 -#: apps/views/models.py:52 -msgid "Title (de)" -msgstr "Titel (de)" - -#: apps/questions/models.py:58 -msgid "The German title for this catalog." -msgstr "Der deutsche Titel für diesen Katalog." - -#: apps/questions/models.py:64 -msgid "Catalogs" -msgstr "Kataloge" - -#: apps/questions/models.py:91 -msgid "The Uniform Resource Identifier of this section (auto-generated)." -msgstr "" -"Der Uniform Resource Identifier diese Abschnitts (automatisch erstellt)." - -#: apps/questions/models.py:96 -msgid "The prefix for the URI of this section." -msgstr "Das Präfix für die URI die dieses Abschnitts." - -#: apps/questions/models.py:101 -msgid "The internal identifier of this section." -msgstr "Der interne Bezeichner für diesen Abschnitt." - -#: apps/questions/models.py:105 apps/questions/models.py:185 -msgid "Label" -msgstr "Label" - -#: apps/questions/models.py:106 -msgid "The path part of the URI of this section (auto-generated)." -msgstr "Der Pfad-Teil der URI für diesen Abschnitt (automatisch erstellt)." - -#: apps/questions/models.py:111 -msgid "Additional internal information about this section." -msgstr "Zusätzliche interne Informationen über diesen Abschnitt." - -#: apps/questions/models.py:116 -msgid "The catalog this section belongs to." -msgstr "Der Katalog zu dem dieser Abschnitt gehört." - -#: apps/questions/models.py:126 -msgid "The English title for this section." -msgstr "Der englische Titel für diesen Abschnitt." - -#: apps/questions/models.py:131 -msgid "The German title for this section." -msgstr "Der deutsche Titel für diesen Unterabschnitt." - -#: apps/questions/models.py:136 apps/questions/models.py:195 -#: apps/questions/templates/questions/catalog_tree.html:15 -#: apps/questions/templates/questions/catalogs.html:42 -#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:31 -#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:11 -#: apps/questions/templates/questions/catalogs_modal_form_sections.html:11 -msgid "Section" -msgstr "Abschnitt" - -#: apps/questions/models.py:137 -msgid "Sections" -msgstr "Unterabschnitt" - -#: apps/questions/models.py:171 -msgid "The Uniform Resource Identifier of this subsection (auto-generated)." -msgstr "" -"Der Uniform Resource Identifier dieses Unterabschnitts (automatisch " -"erstellt)." - -#: apps/questions/models.py:176 -msgid "The prefix for the URI of this subsection." -msgstr "Das Präfix für die URI dieses Unterabschnitts." - -#: apps/questions/models.py:181 -msgid "The internal identifier of this subsection." -msgstr "Der interne Bezeichner für diesen Unterabschnitt." - -#: apps/questions/models.py:186 -msgid "The path part of the URI of this subsection (auto-generated)." -msgstr "" -"Der Pfad-Teil der URI für diesen Unterabschnitt (automatisch erstellt)." - -#: apps/questions/models.py:191 -msgid "Additional internal information about this subsection." -msgstr "Zusätzliche interne Informationen über diesen Unterabschnitt." - -#: apps/questions/models.py:196 -msgid "The section this subsection belongs to." -msgstr "Der Abschnitt zu dem dieser Unterabschnitt gehört." - -#: apps/questions/models.py:206 -msgid "The English title for this subsection." -msgstr "Der englische Titel für diesen Unterabschnitt." - -#: apps/questions/models.py:211 -msgid "The German title for this subsection." -msgstr "Der deutsche Titel für diesen Unterabschnitt." - -#: apps/questions/models.py:216 apps/questions/models.py:281 -#: apps/questions/templates/questions/catalog_tree.html:27 -#: apps/questions/templates/questions/catalogs.html:55 -#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:35 -#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:30 -#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:11 -#: apps/questions/templates/questions/catalogs_modal_form_subsections.html:11 -msgid "Subsection" -msgstr "Unterabschnitt" - -#: apps/questions/models.py:217 -msgid "Subsections" -msgstr "Unterabschnitte" - -#: apps/questions/models.py:252 -msgid "" -"The Uniform Resource Identifier of this question/questionset (auto-" -"generated)." -msgstr "" -"Der Uniform Resource Identifier dieser Frage/dieses Fragensets (automatisch " -"erstellt)." - -#: apps/questions/models.py:257 -msgid "The prefix for the URI of this question/questionset." -msgstr "Das Präfix für die URI dieser Frage/dieses Fragensets." - -#: apps/questions/models.py:262 -msgid "The internal identifier of this question/questionset." -msgstr "Der interne Bezeichner für diese Frage/dieses Fragenset." - -#: apps/questions/models.py:267 -msgid "The path part of the URI of this question/questionset (auto-generated)." -msgstr "" -"Der Pfad-Teil der URI für diese Frage/Fragenset (automatisch erstellt)." - -#: apps/questions/models.py:272 -msgid "Additional internal information about this question/questionset." -msgstr "Zusätzliche interne Informationen über diese Frage/dieses Fragenset." - -#: apps/questions/models.py:277 -msgid "The attribute/entity this question/questionset belongs to." -msgstr "Das Attribut/die Entität zu dem diese Frage/dieses Fragenset gehört." - -#: apps/questions/models.py:282 -msgid "The subsection this question/questionset belongs to." -msgstr "Der Unterabschnitt zu dem diese Frage/dieses Fragenset gehört." - -#: apps/questions/models.py:287 -msgid "The position of this question/questionset in lists." -msgstr "Die Position von dieser Frage/diesem Fragenset in Listen." - -#: apps/questions/models.py:291 apps/views/models.py:57 -msgid "Help (en)" -msgstr "Hilfe (en)" - -#: apps/questions/models.py:292 -msgid "The English help text for this question/questionset." -msgstr "Der englische Hilfetext für diese Frage/dieses Fragenset." - -#: apps/questions/models.py:296 apps/views/models.py:62 -msgid "Help (de)" -msgstr "Hilfe (de)" - -#: apps/questions/models.py:297 -msgid "The German help text for this question/questionset." -msgstr "Der deutsche Hilfetext für diese Frage/dieses Fragenset." - -#: apps/questions/models.py:302 -msgid "Question entity" -msgstr "Fragenobjekt" - -#: apps/questions/models.py:303 -msgid "Question entities" -msgstr "Fragenobjekte" - -#: apps/questions/models.py:382 -msgid "Parent" -msgstr "Übergeordnete Entität" - -#: apps/questions/models.py:383 -msgid "The question set this question belongs to." -msgstr "Das Fragenset zu dem diese Frage gehört." - -#: apps/questions/models.py:387 -msgid "The English text for this question." -msgstr "Der englische Text für diese Frage." - -#: apps/questions/models.py:391 -msgid "The German text for this question." -msgstr "Der deutsche Text für diese Frage." - -#: apps/questions/models.py:395 -msgid "Widget type" -msgstr "Widget-Typ" - -#: apps/questions/models.py:396 -msgid "Type of widget for this question." -msgstr "Art von Widget für diese Frage." - -#: apps/questions/models.py:400 -#: apps/questions/templates/questions/catalog_tree.html:124 -#: apps/questions/templates/questions/catalogs.html:86 -#: apps/questions/templates/questions/catalogs.html:105 -#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:43 -#: apps/questions/templates/questions/catalogs_modal_delete_questions.html:11 -#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:30 -#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:38 -#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:34 -#: apps/questions/templates/questions/catalogs_modal_form_questions.html:11 -msgid "Question" -msgstr "Frage" - -#: apps/questions/serializers.py:202 apps/questions/serializers.py:244 -msgid "No attribute selected." -msgstr "Kein Attribut ausgewählt." - -#: apps/questions/serializers.py:232 -msgid "No entity selected." -msgstr "Keine Entität ausgewählt." - -#: apps/questions/serializers.py:238 -msgid "Entity and questions attributes mismatch." -msgstr "Entität und Attribute der Fragen passen nicht." - -#: apps/questions/templates/questions/catalog_tree.html:41 -#: apps/questions/templates/questions/catalogs.html:72 -#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:40 -#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:11 -#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:35 -#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:31 -#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:11 -msgid "Question set" -msgstr "Fragenset" - -#: apps/questions/templates/questions/catalog_tree.html:46 -#: apps/questions/templates/questions/catalog_tree.html:73 -#: apps/questions/templates/questions/catalog_tree.html:133 -msgid "Help" -msgstr "Hilfe" - -#: apps/questions/templates/questions/catalogs_modal_delete_catalogs.html:17 -#, python-format -msgid "" -"You are about to permanently delete the catalog " -"%(object)s." -msgstr "" -"Sie sind dabei den Katalog %(object)s " -"permanent zu entfernen." - -#: apps/questions/templates/questions/catalogs_modal_delete_questions.html:17 -#, python-format -msgid "" -"You are about to permanently delete the question %(object)s." -msgstr "" -"Sie sind dabei die Frage %(object)s " -"permanent zu entfernen." - -#: apps/questions/templates/questions/catalogs_modal_delete_questionsets.html:17 -#, python-format -msgid "" -"You are about to permanently delete the question set %(object)s." -msgstr "" -"Sie sind dabei das Fragenset %(object)s " -"permanent zu entfernen." - -#: apps/questions/templates/questions/catalogs_modal_delete_sections.html:17 -#, python-format -msgid "" -"You are about to permanently delete the section " -"%(object)s." -msgstr "" -"Sie sind dabei den Abschnitt %(object)s " -"permanent zu entfernen." - -#: apps/questions/templates/questions/catalogs_modal_delete_subsections.html:17 -#, python-format -msgid "" -"You are about to permanently delete the subsection %(object)s." -msgstr "" -"Sie sind dabei den Unterabschnitt %(object)s permanent zu entfernen." - -#: apps/questions/templates/questions/catalogs_modal_form_questions.html:22 -msgid "The prefix for the URI of this question." -msgstr "Das Präfix für die URI dieser Frage." - -#: apps/questions/templates/questions/catalogs_modal_form_questions.html:31 -msgid "The internal identifier of this question." -msgstr "Der interne Bezeichner für diese Frage." - -#: apps/questions/templates/questions/catalogs_modal_form_questions.html:40 -msgid "Additional internal information about this question." -msgstr "Zusätzliche interne Informationen über diesen Abschnitt." - -#: apps/questions/templates/questions/catalogs_modal_form_questions.html:50 -msgid "The subsection this question belongs to." -msgstr "Der Unterabschnitt für diese Frage." - -#: apps/questions/templates/questions/catalogs_modal_form_questions.html:73 -msgid "The position of this question in lists." -msgstr "Die Position dieser Frage in Listen." - -#: apps/questions/templates/questions/catalogs_modal_form_questions.html:84 -msgid "The attribute this question belongs to." -msgstr "Das Attribut zu dem diese Frage gehört." - -#: apps/questions/templates/questions/catalogs_modal_form_questions.html:129 -msgid "The English help text for this question." -msgstr "Der englische Hilfetext für diese Frage." - -#: apps/questions/templates/questions/catalogs_modal_form_questions.html:138 -msgid "The German help text for this question." -msgstr "Der deutsche Hilfetext für diese Frage." - -#: apps/questions/templates/questions/catalogs_modal_form_questions.html:151 -#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:106 -msgid "Copy" -msgstr "Kopieren" - -#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:22 -msgid "The prefix for the URI of this questionset." -msgstr "Das Präfix für die URI dieses Fragensets." - -#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:31 -msgid "The internal identifier of this questionset." -msgstr "Der interne Bezeichner für dieses Fragenset." - -#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:40 -msgid "Additional internal information about this questionset." -msgstr "Zusätzliche interne Informationen über diese Fragenset." - -#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:50 -msgid "The subsection this questionset belongs to." -msgstr "Der Unterabschnitt für dieses Fragenset." - -#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:62 -msgid "The position of this questionset in lists." -msgstr "Die Position von diesem Fragenset in Listen." - -#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:71 -msgid "The entity this questionset belongs to." -msgstr "Das Entität zu dem dieses Fragenset gehört." - -#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:84 -msgid "The English help text for this questionset." -msgstr "Der englische Hilfetext für dieses Fragenset." - -#: apps/questions/templates/questions/catalogs_modal_form_questionsets.html:93 -msgid "The German help text for this questionset." -msgstr "Der deutsche Hilfetext für dieses Fragenset." - -#: apps/questions/templates/questions/catalogs_options_questions.html:4 -msgid "Update question" -msgstr "Frage bearbeiten" - -#: apps/questions/templates/questions/catalogs_options_questions.html:9 -msgid "Copy question" -msgstr "Frage kopieren" - -#: apps/questions/templates/questions/catalogs_options_questions.html:14 -msgid "Delete question" -msgstr "Frage entfernen" - -#: apps/questions/templates/questions/catalogs_options_questionsets.html:4 -#: apps/questions/templates/questions/catalogs_options_subsections.html:12 -msgid "Add question" -msgstr "Frage hinzufügen" - -#: apps/questions/templates/questions/catalogs_options_questionsets.html:9 -msgid "Update question set" -msgstr "Fragenset bearbeiten" - -#: apps/questions/templates/questions/catalogs_options_questionsets.html:14 -msgid "Copy question set" -msgstr "Fragenset kopieren" - -#: apps/questions/templates/questions/catalogs_options_questionsets.html:19 -msgid "Delete question set" -msgstr "Fragenset entfernen" - -#: apps/questions/templates/questions/catalogs_options_sections.html:4 -msgid "Add subsection" -msgstr "Unterabschnitt hinzufügen" - -#: apps/questions/templates/questions/catalogs_options_sections.html:9 -msgid "Update section" -msgstr "Abschnitt bearbeiten" - -#: apps/questions/templates/questions/catalogs_options_sections.html:14 -msgid "Delete section" -msgstr "Abschnitt entfernen" - -#: apps/questions/templates/questions/catalogs_options_subsections.html:6 -msgid "Show options" -msgstr "Optionen anzeigen" - -#: apps/questions/templates/questions/catalogs_options_subsections.html:17 -msgid "Add question set" -msgstr "Fragenset hinzufügen" - -#: apps/questions/templates/questions/catalogs_options_subsections.html:24 -msgid "Update subsection" -msgstr "Unterabschnitt bearbeiten" - -#: apps/questions/templates/questions/catalogs_options_subsections.html:29 -msgid "Delete subsection" -msgstr "Unterabschnitt entfernen" - -#: apps/questions/templates/questions/catalogs_sidebar.html:25 -msgid "Update catalog details" -msgstr "Katalogeigenschaften bearbeiten" - -#: apps/questions/templates/questions/catalogs_sidebar.html:30 -msgid "Delete catalog" -msgstr "Katalog entfernen" - -#: apps/questions/templates/questions/catalogs_sidebar.html:38 -msgid "Create new catalog" -msgstr "Neuen Katalog erstellen" - -#: apps/questions/templates/questions/catalogs_sidebar.html:43 -msgid "Create new section" -msgstr "Neuen Abschnitt erstellen" - -#: apps/questions/templates/questions/catalogs_sidebar.html:48 -msgid "Create new subsection" -msgstr "Neuen Unterabschnitt erstellen" - -#: apps/questions/templates/questions/catalogs_sidebar.html:53 -msgid "Create new questionset" -msgstr "Neues Fragenset erstellen" - -#: apps/questions/templates/questions/catalogs_sidebar.html:58 -msgid "Create new question" -msgstr "Neue Frage erstellen" - -#: apps/tasks/models.py:32 -msgid "The Uniform Resource Identifier of this task (auto-generated)." -msgstr "Der Uniform Resource Identifier dieser Aufgabe (automatisch erstellt)." - -#: apps/tasks/models.py:37 -msgid "The prefix for the URI of this task." -msgstr "Das Präfix für die URI dieser Aufgabe." - -#: apps/tasks/models.py:42 -msgid "The internal identifier of this task." -msgstr "Der interne Bezeichner für diese Aufgabe." - -#: apps/tasks/models.py:47 -msgid "Additional internal information about this task." -msgstr "Zusätzliche interne Informationen über diese Aufgabe." - -#: apps/tasks/models.py:52 -msgid "The English title for this task." -msgstr "Der englische Titel für diese Aufgabe." - -#: apps/tasks/models.py:57 -msgid "The German title for this task." -msgstr "Der deutsche Titel für diese Aufgabe." - -#: apps/tasks/models.py:61 -msgid "The English text for this task." -msgstr "Der englische Text für diese Aufgabe." - -#: apps/tasks/models.py:65 -msgid "The German text for this task." -msgstr "Der deutsche Text für diese Aufgabe." - -#: apps/tasks/models.py:70 -msgid "The list of conditions evaluated for this task." -msgstr "Die Liste der Bedingungen die für diese Aufgabe ausgewertet werden." - -#: apps/tasks/models.py:111 -msgid "The task this time frame belongs to." -msgstr "Die Aufgabe zu der dieser Zeitraum gehört." - -#: apps/tasks/models.py:115 apps/tasks/templates/tasks/tasks_export.html:55 -msgid "Start date attribute" -msgstr "Anfangsdatums-Attribut" - -#: apps/tasks/models.py:116 -msgid "The Attribute that is setting the start date for this task." -msgstr "Das Attribut das des Anfangsdatum für die Aufgabe festlegt." - -#: apps/tasks/models.py:120 apps/tasks/templates/tasks/tasks_export.html:56 -msgid "End date attribute" -msgstr "Enddatums-Attribute" - -#: apps/tasks/models.py:121 -msgid "" -"The Attribute that is setting the end date for this task (optional, if no " -"end date attribute is given, the start date attribute sets also the end " -"date)." -msgstr "" -"Das Attribut das des Enddatum für die Aufgabe festlegt (Optional, wenn kein " -"Enddatums-Attribut angegeben wird, bestimmt das Anfangsdatums-Attribut auch " -"das Enddatum)." - -#: apps/tasks/models.py:125 apps/tasks/templates/tasks/tasks_export.html:57 -msgid "Days before" -msgstr "Tage davor" - -#: apps/tasks/models.py:126 -msgid "Additional days before the start date." -msgstr "Zusätzliche Tage vor dem Anfangsdatum." - -#: apps/tasks/models.py:130 apps/tasks/templates/tasks/tasks_export.html:58 -msgid "Days after" -msgstr "Tage danach" - -#: apps/tasks/models.py:131 -msgid "Additional days after the end date." -msgstr "Zusätzliche Tage nach dem Enddatum." - -#: apps/tasks/models.py:137 -msgid "Time frames" -msgstr "Zeiträume" - -#: apps/tasks/templates/tasks/tasks.html:39 -msgid "Create new task" -msgstr "Neue Aufgabe erstellen" - -#: apps/tasks/templates/tasks/tasks.html:77 -msgid "Update task" -msgstr "Aufgabe bearbeiten" - -#: apps/tasks/templates/tasks/tasks.html:85 -msgid "Update time frame" -msgstr "Zeitrahmen bearbeiten." - -#: apps/tasks/templates/tasks/tasks.html:89 -#: apps/tasks/templates/tasks/tasks_modal_delete_tasks.html:11 -msgid "Delete task" -msgstr "Aufgabe entfernen" - -#: apps/tasks/templates/tasks/tasks_export.html:51 -msgid "Timeframe" -msgstr "Zeitraum" - -#: apps/tasks/templates/tasks/tasks_modal_delete_tasks.html:17 -msgid "" -"You are about to permanently delete the task {$ service.values.title " -"$}." -msgstr "" -"Sie sind dabei die Aufgabe %(object)s permanent zu entfernen." - -#: apps/views/models.py:23 -msgid "The Uniform Resource Identifier of this view (auto-generated)." -msgstr "Der Uniform Resource Identifier dieser Ansicht (automatisch erstellt)." - -#: apps/views/models.py:28 -msgid "The prefix for the URI of this view." -msgstr "Das Präfix für die URI dieser Ansicht." - -#: apps/views/models.py:33 -msgid "The internal identifier of this view." -msgstr "Der interne Bezeichner für diese Ansicht." - -#: apps/views/models.py:38 -msgid "Additional internal information about this view." -msgstr "Zusätzliche interne Informationen über diese Ansicht." - -#: apps/views/models.py:42 apps/views/templates/views/views_export.html:33 -#: apps/views/templates/views/views_modal_form_templates.html:11 -msgid "Template" -msgstr "Vorlage" - -#: apps/views/models.py:43 -msgid "The template for this view, written in Django template language." -msgstr "" -"Das Template für diese Ansicht, in der Django-Template-Language verfasst." - -#: apps/views/models.py:48 -msgid "The English title for this view." -msgstr "Der englische Titel für diese Ansicht." - -#: apps/views/models.py:53 -msgid "The German title for this view." -msgstr "Der deutsche Titel für diesen Ansicht." - -#: apps/views/models.py:58 -msgid "The English help text for this view." -msgstr "Der englische Hilfetext für diese Ansicht." - -#: apps/views/models.py:63 -msgid "The German help text for this view." -msgstr "Der deutsche Hilfetext für diese Ansicht." - -#: apps/views/templates/views/views.html:45 -msgid "Create new view" -msgstr "Neue Ansicht erstellen" - -#: apps/views/templates/views/views.html:83 -msgid "Update view" -msgstr "Ansicht bearbeiten" - -#: apps/views/templates/views/views.html:87 -msgid "Edit template" -msgstr "Template bearbeiten" - -#: apps/views/templates/views/views.html:91 -#: apps/views/templates/views/views_modal_delete_views.html:11 -msgid "Delete view" -msgstr "Ansicht entfernen" - -#: apps/views/templates/views/views_export.html:29 -msgid "Help text" -msgstr "Hilfetext" - -#: apps/views/templates/views/views_modal_delete_views.html:17 -msgid "" -"You are about to permanently delete the view {$ service.values.title " -"$}." -msgstr "" -"Sie sind dabei die Ansicht %(object)s permanent zu entfernen." - -#: apps/views/templates/views/views_modal_form_templates.html:37 -msgid "Save and close" -msgstr "Sichern und schließen" - -#: rdmo/settings/base.py:123 -msgid "German" -msgstr "Deutsch" - -#: rdmo/settings/base.py:124 -msgid "English" -msgstr "Englisch" - -#: rdmo/settings/base.py:201 -msgid "PDF" -msgstr "PDF" - -#: rdmo/settings/base.py:202 -msgid "Rich Text Format" -msgstr "Rich Text Format" - -#: rdmo/settings/base.py:203 -msgid "Open Office" -msgstr "Open Office" - -#: rdmo/settings/base.py:204 -msgid "Microsoft Office" -msgstr "Microsoft Office" - -#: rdmo/settings/base.py:205 -msgid "HTML" -msgstr "HTML" - -#: rdmo/settings/base.py:206 -msgid "Markdown" -msgstr "Markdown" - -#: rdmo/settings/base.py:207 -msgid "mediawiki" -msgstr "mediawiki" - -#: rdmo/settings/base.py:208 -msgid "LaTeX" -msgstr "LaTeX" - -#, fuzzy -#~| msgid "Optionsets " -#~ msgid "Optionsets" -#~ msgstr "Optionensets" - -#~ msgid "Optionset" -#~ msgstr "Optionenset" - -#~ msgid "Tasks " -#~ msgstr "Aufgaben" - -#~ msgid "Task " -#~ msgstr "Aufgabe" - -#~ msgid "Views " -#~ msgstr "Ansichten" - -#~ msgid "Domain " -#~ msgstr "Domäne" - -#~ msgid "Condition " -#~ msgstr "Bedingung" - -#~ msgid "Conditions " -#~ msgstr "Bedingungen" - -#~ msgid "" -#~ "You are about to permanently delete the attribute set %(object)s." -#~ msgstr "" -#~ "Sie sind dabei die Entität %(object)s permanent zu entfernen." - -#~ msgid "" -#~ "The internal identifier of this condition. The URI will be generated from " -#~ "this key." -#~ msgstr "" -#~ "Der interne Identifikator für diese Bedingung. Die URI wird hieraus " -#~ "generiert." - -#~ msgid "Prefix" -#~ msgstr "Präfix" - -#~ msgid "Source Attribute" -#~ msgstr "Quell-Attribut" - -#~ msgid "Target text" -#~ msgstr "Ziel Text" - -#~ msgid "Target option" -#~ msgstr "Ziel Option" - -#~ msgid "" -#~ "The internal identifier of this attribute/entity. The URI will be " -#~ "generated from this key." -#~ msgstr "" -#~ "Der interne Identifikator für dieses Attribute/diese Entität. Die URI " -#~ "wird hieraus generiert." - -#~ msgid "Type" -#~ msgstr "Typ" - -#~ msgid "" -#~ "You are about to permanently delete the attribute {$ service.values." -#~ "title $}." -#~ msgstr "" -#~ "Sie sind dabei das Attribut {$ service.values.title $} " -#~ "permanent zu entfernen." - -#~ msgid "" -#~ "You are about to permanently delete the attribute set {$ service." -#~ "values.title $}." -#~ msgstr "" -#~ "Sie sind dabei die Entität {$ service.values.title $} " -#~ "permanent zu entfernen." - -#~ msgid "Parent Entity" -#~ msgstr "Übergeordnete Entität" - -#~ msgid "is a Collection" -#~ msgstr "ist eine Sammlung" - -#~ msgid "English name" -#~ msgstr "Englischer Name" - -#~ msgid "English name (plural)" -#~ msgstr "Englischer Name (Plural)" - -#~ msgid "German name" -#~ msgstr "Deutscher Name" - -#~ msgid "German name (plural)" -#~ msgstr "Deutscher Name (Plural)" - -#~ msgid "" -#~ "The internal identifier of this option set. The URI will be generated " -#~ "from this key." -#~ msgstr "" -#~ "Der interne Identifikator für dieses Optionenset. Die URI wird hieraus " -#~ "generiert." - -#~ msgid "Options " -#~ msgstr "Optionen" - -#~ msgid "Title (English)" -#~ msgstr "Titel (Englisch)" - -#~ msgid "Title (German)" -#~ msgstr "Titel (Deutsch)" - -#~ msgid "" -#~ "The internal identifier of this catalog. The URI will be generated from " -#~ "this key." -#~ msgstr "" -#~ "Der interne Identifikator für diesen Katalog. Die URI wird hieraus " -#~ "generiert." - -#~ msgid "" -#~ "The internal identifier of this section. The URI will be generated from " -#~ "this key." -#~ msgstr "" -#~ "Der interne Identifikator für diesen Abschnitt. Die URI wird hieraus " -#~ "generiert." - -#~ msgid "" -#~ "The internal identifier of this subsection. The URI will be generated " -#~ "from this key." -#~ msgstr "" -#~ "Der interne Identifikator für diesen Unterabschnitt. Die URI wird hieraus " -#~ "generiert." - -#~ msgid "The position of this subsection in lists." -#~ msgstr "Die Position von diesem Unterabschnitt in Listen." - -#~ msgid "" -#~ "The internal identifier of this question/questionset. The URI will be " -#~ "generated from this key." -#~ msgstr "" -#~ "Der interne Identifikator für diese Frage/dieses Fragenset. Die URI wird " -#~ "hieraus generiert." - -#~ msgid "" -#~ "You are about to permanently delete the catalog {$ service." -#~ "catalog.title $}." -#~ msgstr "" -#~ "Sie sind dabei den Katalog %(object)s permanent zu entfernen." - -#~ msgid "" -#~ "You are about to permanently delete the question {$ service." -#~ "values.text $}." -#~ msgstr "" -#~ "Sie sind dabei die Frage %(object)s permanent zu entfernen." - -#~ msgid "" -#~ "You are about to permanently delete the question set {$ service." -#~ "values.title $}." -#~ msgstr "" -#~ "Sie sind dabei das Fragenset %(object)s permanent zu " -#~ "entfernen." - -#~ msgid "" -#~ "You are about to permanently delete the section {$ service.values." -#~ "title $}." -#~ msgstr "" -#~ "Sie sind dabei den Abschnitt %(object)s permanent zu " -#~ "entfernen." - -#~ msgid "" -#~ "You are about to permanently delete the subsection {$ service." -#~ "values.title $}." -#~ msgstr "" -#~ "Sie sind dabei den Unterabschnitt %(object)s permanent zu " -#~ "entfernen." - -#~ msgid "Question text (English)" -#~ msgstr "Fragentext (Englisch)" - -#~ msgid "Question text (German)" -#~ msgstr "Fragentext (Deutsch)" - -#~ msgid "Help text (English)" -#~ msgstr "Hilfetext (Englisch)" - -#~ msgid "Description text (English)" -#~ msgstr "Beschreibungstext (Englisch)" - -#~ msgid "Description text (German)" -#~ msgstr "Beschreibungstext (Deutsch)" - -#~ msgid "Additional days before" -#~ msgstr "Zusätzliche Tage vorher" - -#~ msgid "Additional days after" -#~ msgstr "Zusätzliche Tage danach" - -#~ msgid "" -#~ "The internal identifier of this view. The URI will be generated from this " -#~ "key." -#~ msgstr "" -#~ "Der interne Identifikator für diese Ansicht. Die URI wird hieraus " -#~ "generiert." - -#~ msgid "Days before start date." -#~ msgstr "Tage vor dem Start-Datum" - -#~ msgid "Profile update not possible" -#~ msgstr "Profil bearbeiten nicht möglich" - -#~ msgid "Deadline" -#~ msgstr "Termin" - -#~ msgid "The attribute this task is refering to." -#~ msgstr "Das Attribut auf das diese Aufgabe verweist." - -#~ msgid "Time period" -#~ msgstr "Zeitraum" - -#~ msgid "The the time period after this task becomes active." -#~ msgstr "Die Zweitspanne nach der diese Aufgabe aktiv wird." - -#~ msgid "" -#~ "RDMO is published on github.com." -#~ msgstr "" -#~ "RDMO ist auf github.com " -#~ "veröffentlicht." - -#~ msgid "Email" -#~ msgstr "E-Mail" - -#~ msgid "Save input" -#~ msgstr "Eingabe speichern" - -#~ msgid "Delete attribute set" -#~ msgstr "Attribut-Set entfernen" diff --git a/manage.py b/manage.py deleted file mode 100755 index 36f1459e9..000000000 --- a/manage.py +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env python -import os -import sys - -if __name__ == "__main__": - os.environ.setdefault("DJANGO_SETTINGS_MODULE", "rdmo.settings") - - from django.core.management import execute_from_command_line - - execute_from_command_line(sys.argv) diff --git a/rdmo/__init__.py b/rdmo/__init__.py index e69de29bb..8dfb4252f 100644 --- a/rdmo/__init__.py +++ b/rdmo/__init__.py @@ -0,0 +1,8 @@ +__title__ = 'rdmo' +__version__ = '0.9.0' +__author__ = 'Jochen Klar' +__email__ = 'jklar@aip.de' +__license__ = 'Apache-2.0' +__copyright__ = 'Copyright 2015-2017 Leibniz Institute for Astrophysics Potsdam (AIP)' + +VERSION = __version__ diff --git a/rdmo/accounts/__init__.py b/rdmo/accounts/__init__.py new file mode 100644 index 000000000..ded192917 --- /dev/null +++ b/rdmo/accounts/__init__.py @@ -0,0 +1 @@ +default_app_config = 'rdmo.accounts.app_config.AccountsConfig' diff --git a/apps/accounts/adapter.py b/rdmo/accounts/adapter.py similarity index 100% rename from apps/accounts/adapter.py rename to rdmo/accounts/adapter.py diff --git a/apps/accounts/admin.py b/rdmo/accounts/admin.py similarity index 100% rename from apps/accounts/admin.py rename to rdmo/accounts/admin.py diff --git a/apps/accounts/app_config.py b/rdmo/accounts/app_config.py similarity index 85% rename from apps/accounts/app_config.py rename to rdmo/accounts/app_config.py index 02704c503..40e2233ca 100644 --- a/apps/accounts/app_config.py +++ b/rdmo/accounts/app_config.py @@ -3,5 +3,5 @@ class AccountsConfig(AppConfig): - name = 'apps.accounts' + name = 'rdmo.accounts' verbose_name = _('Accounts') diff --git a/apps/accounts/forms.py b/rdmo/accounts/forms.py similarity index 100% rename from apps/accounts/forms.py rename to rdmo/accounts/forms.py diff --git a/apps/accounts/migrations/0001_initial.py b/rdmo/accounts/migrations/0001_initial.py similarity index 100% rename from apps/accounts/migrations/0001_initial.py rename to rdmo/accounts/migrations/0001_initial.py diff --git a/apps/accounts/migrations/0002_detail_key_type_field_length_increased.py b/rdmo/accounts/migrations/0002_detail_key_type_field_length_increased.py similarity index 100% rename from apps/accounts/migrations/0002_detail_key_type_field_length_increased.py rename to rdmo/accounts/migrations/0002_detail_key_type_field_length_increased.py diff --git a/apps/accounts/migrations/0003_hint_renamed_to_help_text.py b/rdmo/accounts/migrations/0003_hint_renamed_to_help_text.py similarity index 100% rename from apps/accounts/migrations/0003_hint_renamed_to_help_text.py rename to rdmo/accounts/migrations/0003_hint_renamed_to_help_text.py diff --git a/apps/accounts/migrations/0004_permission_added.py b/rdmo/accounts/migrations/0004_permission_added.py similarity index 100% rename from apps/accounts/migrations/0004_permission_added.py rename to rdmo/accounts/migrations/0004_permission_added.py diff --git a/apps/accounts/migrations/0005_field_type.py b/rdmo/accounts/migrations/0005_field_type.py similarity index 100% rename from apps/accounts/migrations/0005_field_type.py rename to rdmo/accounts/migrations/0005_field_type.py diff --git a/apps/accounts/migrations/0006_permissions_removed.py b/rdmo/accounts/migrations/0006_permissions_removed.py similarity index 100% rename from apps/accounts/migrations/0006_permissions_removed.py rename to rdmo/accounts/migrations/0006_permissions_removed.py diff --git a/apps/accounts/migrations/0007_additional_fields.py b/rdmo/accounts/migrations/0007_additional_fields.py similarity index 94% rename from apps/accounts/migrations/0007_additional_fields.py rename to rdmo/accounts/migrations/0007_additional_fields.py index 8faf7bf2e..e87eb0d06 100644 --- a/apps/accounts/migrations/0007_additional_fields.py +++ b/rdmo/accounts/migrations/0007_additional_fields.py @@ -2,7 +2,11 @@ # Generated by Django 1.9 on 2016-11-14 12:13 from __future__ import unicode_literals -import apps.core.models +try: + import rdmo.core.models +except ImportError: + import rdmo.core.models + from django.conf import settings from django.db import migrations, models import django.db.models.deletion @@ -33,7 +37,7 @@ class Migration(migrations.Migration): 'verbose_name': 'Additional field', 'verbose_name_plural': 'Additional fields', }, - bases=(models.Model, apps.core.models.TranslationMixin), + bases=(models.Model, rdmo.core.models.TranslationMixin), ), migrations.CreateModel( name='AdditionalFieldValue', diff --git a/apps/accounts/migrations/0008_related_name.py b/rdmo/accounts/migrations/0008_related_name.py similarity index 100% rename from apps/accounts/migrations/0008_related_name.py rename to rdmo/accounts/migrations/0008_related_name.py diff --git a/apps/accounts/migrations/0009_proxyuser.py b/rdmo/accounts/migrations/0009_proxyuser.py similarity index 100% rename from apps/accounts/migrations/0009_proxyuser.py rename to rdmo/accounts/migrations/0009_proxyuser.py diff --git a/apps/__init__.py b/rdmo/accounts/migrations/__init__.py similarity index 100% rename from apps/__init__.py rename to rdmo/accounts/migrations/__init__.py diff --git a/apps/accounts/models.py b/rdmo/accounts/models.py similarity index 97% rename from apps/accounts/models.py rename to rdmo/accounts/models.py index ebc5e5212..e7a0e26ad 100644 --- a/apps/accounts/models.py +++ b/rdmo/accounts/models.py @@ -5,7 +5,7 @@ from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ -from apps.core.models import TranslationMixin +from rdmo.core.models import TranslationMixin class ProxyUser(User): diff --git a/apps/accounts/migrations/__init__.py b/rdmo/accounts/serializers/__init__.py similarity index 100% rename from apps/accounts/migrations/__init__.py rename to rdmo/accounts/serializers/__init__.py diff --git a/apps/accounts/serializers/api.py b/rdmo/accounts/serializers/api.py similarity index 100% rename from apps/accounts/serializers/api.py rename to rdmo/accounts/serializers/api.py diff --git a/apps/accounts/settings.py b/rdmo/accounts/settings.py similarity index 100% rename from apps/accounts/settings.py rename to rdmo/accounts/settings.py diff --git a/apps/accounts/templates/account/email.html b/rdmo/accounts/templates/account/email.html similarity index 100% rename from apps/accounts/templates/account/email.html rename to rdmo/accounts/templates/account/email.html diff --git a/apps/accounts/templates/account/email/password_reset_key_message.txt b/rdmo/accounts/templates/account/email/password_reset_key_message.txt similarity index 100% rename from apps/accounts/templates/account/email/password_reset_key_message.txt rename to rdmo/accounts/templates/account/email/password_reset_key_message.txt diff --git a/apps/accounts/templates/account/email/password_reset_key_subject.txt b/rdmo/accounts/templates/account/email/password_reset_key_subject.txt similarity index 100% rename from apps/accounts/templates/account/email/password_reset_key_subject.txt rename to rdmo/accounts/templates/account/email/password_reset_key_subject.txt diff --git a/apps/accounts/templates/account/email_confirm.html b/rdmo/accounts/templates/account/email_confirm.html similarity index 100% rename from apps/accounts/templates/account/email_confirm.html rename to rdmo/accounts/templates/account/email_confirm.html diff --git a/apps/accounts/templates/account/login.html b/rdmo/accounts/templates/account/login.html similarity index 100% rename from apps/accounts/templates/account/login.html rename to rdmo/accounts/templates/account/login.html diff --git a/apps/accounts/templates/account/login_form.html b/rdmo/accounts/templates/account/login_form.html similarity index 100% rename from apps/accounts/templates/account/login_form.html rename to rdmo/accounts/templates/account/login_form.html diff --git a/apps/accounts/templates/account/login_form_account.html b/rdmo/accounts/templates/account/login_form_account.html similarity index 100% rename from apps/accounts/templates/account/login_form_account.html rename to rdmo/accounts/templates/account/login_form_account.html diff --git a/apps/accounts/templates/account/login_form_socialaccount.html b/rdmo/accounts/templates/account/login_form_socialaccount.html similarity index 100% rename from apps/accounts/templates/account/login_form_socialaccount.html rename to rdmo/accounts/templates/account/login_form_socialaccount.html diff --git a/apps/accounts/templates/account/logout.html b/rdmo/accounts/templates/account/logout.html similarity index 100% rename from apps/accounts/templates/account/logout.html rename to rdmo/accounts/templates/account/logout.html diff --git a/apps/accounts/templates/account/logout_form.html b/rdmo/accounts/templates/account/logout_form.html similarity index 100% rename from apps/accounts/templates/account/logout_form.html rename to rdmo/accounts/templates/account/logout_form.html diff --git a/apps/accounts/templates/account/password_change.html b/rdmo/accounts/templates/account/password_change.html similarity index 100% rename from apps/accounts/templates/account/password_change.html rename to rdmo/accounts/templates/account/password_change.html diff --git a/apps/accounts/templates/account/password_reset.html b/rdmo/accounts/templates/account/password_reset.html similarity index 100% rename from apps/accounts/templates/account/password_reset.html rename to rdmo/accounts/templates/account/password_reset.html diff --git a/apps/accounts/templates/account/password_reset_done.html b/rdmo/accounts/templates/account/password_reset_done.html similarity index 100% rename from apps/accounts/templates/account/password_reset_done.html rename to rdmo/accounts/templates/account/password_reset_done.html diff --git a/apps/accounts/templates/account/password_reset_from_key.html b/rdmo/accounts/templates/account/password_reset_from_key.html similarity index 100% rename from apps/accounts/templates/account/password_reset_from_key.html rename to rdmo/accounts/templates/account/password_reset_from_key.html diff --git a/apps/accounts/templates/account/password_reset_from_key_done.html b/rdmo/accounts/templates/account/password_reset_from_key_done.html similarity index 100% rename from apps/accounts/templates/account/password_reset_from_key_done.html rename to rdmo/accounts/templates/account/password_reset_from_key_done.html diff --git a/apps/accounts/templates/account/password_set.html b/rdmo/accounts/templates/account/password_set.html similarity index 100% rename from apps/accounts/templates/account/password_set.html rename to rdmo/accounts/templates/account/password_set.html diff --git a/apps/accounts/templates/account/signup.html b/rdmo/accounts/templates/account/signup.html similarity index 100% rename from apps/accounts/templates/account/signup.html rename to rdmo/accounts/templates/account/signup.html diff --git a/apps/accounts/templates/account/signup_closed.html b/rdmo/accounts/templates/account/signup_closed.html similarity index 100% rename from apps/accounts/templates/account/signup_closed.html rename to rdmo/accounts/templates/account/signup_closed.html diff --git a/apps/accounts/templates/account/verification_sent.html b/rdmo/accounts/templates/account/verification_sent.html similarity index 100% rename from apps/accounts/templates/account/verification_sent.html rename to rdmo/accounts/templates/account/verification_sent.html diff --git a/apps/accounts/templates/account/verified_email_required.html b/rdmo/accounts/templates/account/verified_email_required.html similarity index 100% rename from apps/accounts/templates/account/verified_email_required.html rename to rdmo/accounts/templates/account/verified_email_required.html diff --git a/apps/accounts/templates/profile/profile_update_closed.html b/rdmo/accounts/templates/profile/profile_update_closed.html similarity index 100% rename from apps/accounts/templates/profile/profile_update_closed.html rename to rdmo/accounts/templates/profile/profile_update_closed.html diff --git a/apps/accounts/templates/profile/profile_update_form.html b/rdmo/accounts/templates/profile/profile_update_form.html similarity index 100% rename from apps/accounts/templates/profile/profile_update_form.html rename to rdmo/accounts/templates/profile/profile_update_form.html diff --git a/apps/accounts/templates/socialaccount/authentication_error.html b/rdmo/accounts/templates/socialaccount/authentication_error.html similarity index 100% rename from apps/accounts/templates/socialaccount/authentication_error.html rename to rdmo/accounts/templates/socialaccount/authentication_error.html diff --git a/apps/accounts/templates/socialaccount/connections.html b/rdmo/accounts/templates/socialaccount/connections.html similarity index 100% rename from apps/accounts/templates/socialaccount/connections.html rename to rdmo/accounts/templates/socialaccount/connections.html diff --git a/apps/accounts/templates/socialaccount/login_cancelled.html b/rdmo/accounts/templates/socialaccount/login_cancelled.html similarity index 100% rename from apps/accounts/templates/socialaccount/login_cancelled.html rename to rdmo/accounts/templates/socialaccount/login_cancelled.html diff --git a/apps/accounts/templates/socialaccount/signup.html b/rdmo/accounts/templates/socialaccount/signup.html similarity index 100% rename from apps/accounts/templates/socialaccount/signup.html rename to rdmo/accounts/templates/socialaccount/signup.html diff --git a/apps/accounts/templates/socialaccount/snippets/provider_list.html b/rdmo/accounts/templates/socialaccount/snippets/provider_list.html similarity index 100% rename from apps/accounts/templates/socialaccount/snippets/provider_list.html rename to rdmo/accounts/templates/socialaccount/snippets/provider_list.html diff --git a/apps/accounts/serializers/__init__.py b/rdmo/accounts/templatetags/__init__.py similarity index 100% rename from apps/accounts/serializers/__init__.py rename to rdmo/accounts/templatetags/__init__.py diff --git a/apps/accounts/templatetags/accounts_tags.py b/rdmo/accounts/templatetags/accounts_tags.py similarity index 100% rename from apps/accounts/templatetags/accounts_tags.py rename to rdmo/accounts/templatetags/accounts_tags.py diff --git a/apps/accounts/templatetags/__init__.py b/rdmo/accounts/tests/__init__.py similarity index 100% rename from apps/accounts/templatetags/__init__.py rename to rdmo/accounts/tests/__init__.py diff --git a/apps/accounts/tests.py b/rdmo/accounts/tests/test_views.py similarity index 90% rename from apps/accounts/tests.py rename to rdmo/accounts/tests/test_views.py index 57ca030c9..4b94e549b 100644 --- a/apps/accounts/tests.py +++ b/rdmo/accounts/tests/test_views.py @@ -8,14 +8,11 @@ from django.core import mail from test_generator.core import TestModelStringMixin -from test_generator.viewsets import TestListViewsetMixin, TestRetrieveViewsetMixin -from apps.accounts.utils import set_group_permissions +from rdmo.accounts.utils import set_group_permissions -class AccountsTestCase(TestCase): - - lang = 'en' +class AccountsViewTestCase(TestCase): fixtures = ( 'users.json', @@ -35,7 +32,7 @@ def setUp(self): set_group_permissions() -class ProfileTests(TestModelStringMixin, AccountsTestCase): +class ProfileTests(TestModelStringMixin, AccountsViewTestCase): instances = User.objects.all() @@ -165,14 +162,14 @@ def test_post_profile_update_next2(self): self.assertEqual(response.status_code, 200) -class AdditionalFieldTests(TestModelStringMixin, AccountsTestCase): +class AdditionalFieldTests(TestModelStringMixin, AccountsViewTestCase): def setUp(self): translation.activate('en') self.instances = User.objects.all() -class PasswordTests(AccountsTestCase): +class PasswordTests(AccountsViewTestCase): def setUp(self): translation.activate('en') @@ -243,19 +240,3 @@ def test_password_reset_post_valid(self): # get the password_reset page response = self.client.get(urls[0]) self.assertEqual(response.status_code, 200) - - -class UserAPITests(TestListViewsetMixin, TestRetrieveViewsetMixin, AccountsTestCase): - - instances = User.objects.all() - url_names = { - 'viewset': 'api-v1-accounts:user' - } - status_map = { - 'list_viewset': { - 'editor': 403, 'reviewer': 403, 'api': 200, 'user': 403, 'anonymous': 403 - }, - 'retrieve_viewset': { - 'editor': 403, 'reviewer': 403, 'api': 200, 'user': 403, 'anonymous': 403 - }, - } diff --git a/rdmo/accounts/tests/test_viewsets.py b/rdmo/accounts/tests/test_viewsets.py new file mode 100644 index 000000000..841db17ee --- /dev/null +++ b/rdmo/accounts/tests/test_viewsets.py @@ -0,0 +1,44 @@ +from django.contrib.auth.models import User +from django.test import TestCase + +from test_generator.viewsets import TestReadOnlyModelViewsetMixin + +from rdmo.accounts.utils import set_group_permissions + + +class AccountsViewsetTestCase(TestCase): + + lang = 'en' + + fixtures = ( + 'users.json', + 'groups.json', + 'accounts.json' + ) + + users = ( + ('editor', 'editor'), + ('reviewer', 'reviewer'), + ('user', 'user'), + ('api', 'api'), + ('anonymous', None), + ) + + def setUp(self): + set_group_permissions() + + +class UserAPITests(TestReadOnlyModelViewsetMixin, AccountsViewsetTestCase): + + instances = User.objects.all() + url_names = { + 'viewset': 'api-v1-accounts:user' + } + status_map = { + 'list_viewset': { + 'editor': 403, 'reviewer': 403, 'api': 200, 'user': 403, 'anonymous': 403 + }, + 'detail_viewset': { + 'editor': 403, 'reviewer': 403, 'api': 200, 'user': 403, 'anonymous': 403 + }, + } diff --git a/apps/accounts/urls.py b/rdmo/accounts/urls.py similarity index 100% rename from apps/accounts/urls.py rename to rdmo/accounts/urls.py diff --git a/apps/accounts/utils.py b/rdmo/accounts/utils.py similarity index 100% rename from apps/accounts/utils.py rename to rdmo/accounts/utils.py diff --git a/apps/accounts/views.py b/rdmo/accounts/views.py similarity index 93% rename from apps/accounts/views.py rename to rdmo/accounts/views.py index c75a679d2..397a48f0c 100644 --- a/apps/accounts/views.py +++ b/rdmo/accounts/views.py @@ -2,7 +2,7 @@ from django.shortcuts import render from django.contrib.auth.decorators import login_required from django.http import HttpResponseRedirect -from apps.core.utils import get_referer_path_info, get_next +from rdmo.core.utils import get_referer_path_info, get_next from .forms import ProfileForm diff --git a/apps/accounts/viewsets.py b/rdmo/accounts/viewsets.py similarity index 92% rename from apps/accounts/viewsets.py rename to rdmo/accounts/viewsets.py index 22a583c96..fc87912c1 100644 --- a/apps/accounts/viewsets.py +++ b/rdmo/accounts/viewsets.py @@ -4,7 +4,7 @@ from rest_framework.filters import DjangoFilterBackend from rest_framework.authentication import SessionAuthentication, TokenAuthentication -from apps.core.permissions import HasModelPermission +from rdmo.core.permissions import HasModelPermission from .serializers.api import ( UserSerializer as UserApiSerializer, diff --git a/rdmo/conditions/__init__.py b/rdmo/conditions/__init__.py new file mode 100644 index 000000000..5a1e57750 --- /dev/null +++ b/rdmo/conditions/__init__.py @@ -0,0 +1 @@ +default_app_config = 'rdmo.conditions.app_config.ConditionsConfig' diff --git a/apps/conditions/admin.py b/rdmo/conditions/admin.py similarity index 100% rename from apps/conditions/admin.py rename to rdmo/conditions/admin.py diff --git a/apps/conditions/app_config.py b/rdmo/conditions/app_config.py similarity index 84% rename from apps/conditions/app_config.py rename to rdmo/conditions/app_config.py index 26084152c..b03842b3a 100644 --- a/apps/conditions/app_config.py +++ b/rdmo/conditions/app_config.py @@ -3,5 +3,5 @@ class ConditionsConfig(AppConfig): - name = 'apps.conditions' + name = 'rdmo.conditions' verbose_name = _('Conditions') diff --git a/apps/conditions/migrations/0001_initial.py b/rdmo/conditions/migrations/0001_initial.py similarity index 100% rename from apps/conditions/migrations/0001_initial.py rename to rdmo/conditions/migrations/0001_initial.py diff --git a/apps/conditions/migrations/0002_many_to_many_for_conditions.py b/rdmo/conditions/migrations/0002_many_to_many_for_conditions.py similarity index 100% rename from apps/conditions/migrations/0002_many_to_many_for_conditions.py rename to rdmo/conditions/migrations/0002_many_to_many_for_conditions.py diff --git a/apps/conditions/migrations/0003_meta.py b/rdmo/conditions/migrations/0003_meta.py similarity index 100% rename from apps/conditions/migrations/0003_meta.py rename to rdmo/conditions/migrations/0003_meta.py diff --git a/apps/conditions/migrations/0004_condition_title.py b/rdmo/conditions/migrations/0004_condition_title.py similarity index 100% rename from apps/conditions/migrations/0004_condition_title.py rename to rdmo/conditions/migrations/0004_condition_title.py diff --git a/apps/conditions/migrations/0005_empty_relation.py b/rdmo/conditions/migrations/0005_empty_relation.py similarity index 100% rename from apps/conditions/migrations/0005_empty_relation.py rename to rdmo/conditions/migrations/0005_empty_relation.py diff --git a/apps/conditions/migrations/0006_db_constraint_false.py b/rdmo/conditions/migrations/0006_db_constraint_false.py similarity index 100% rename from apps/conditions/migrations/0006_db_constraint_false.py rename to rdmo/conditions/migrations/0006_db_constraint_false.py diff --git a/apps/conditions/migrations/0007_ordering.py b/rdmo/conditions/migrations/0007_ordering.py similarity index 100% rename from apps/conditions/migrations/0007_ordering.py rename to rdmo/conditions/migrations/0007_ordering.py diff --git a/apps/conditions/migrations/0008_validator.py b/rdmo/conditions/migrations/0008_validator.py similarity index 100% rename from apps/conditions/migrations/0008_validator.py rename to rdmo/conditions/migrations/0008_validator.py diff --git a/apps/conditions/migrations/0009_options.py b/rdmo/conditions/migrations/0009_options.py similarity index 100% rename from apps/conditions/migrations/0009_options.py rename to rdmo/conditions/migrations/0009_options.py diff --git a/apps/conditions/migrations/0010_refactoring.py b/rdmo/conditions/migrations/0010_refactoring.py similarity index 100% rename from apps/conditions/migrations/0010_refactoring.py rename to rdmo/conditions/migrations/0010_refactoring.py diff --git a/apps/conditions/migrations/0011_refactoring.py b/rdmo/conditions/migrations/0011_refactoring.py similarity index 100% rename from apps/conditions/migrations/0011_refactoring.py rename to rdmo/conditions/migrations/0011_refactoring.py diff --git a/apps/conditions/migrations/0012_permissions.py b/rdmo/conditions/migrations/0012_permissions.py similarity index 100% rename from apps/conditions/migrations/0012_permissions.py rename to rdmo/conditions/migrations/0012_permissions.py diff --git a/apps/conditions/migrations/0013_meta.py b/rdmo/conditions/migrations/0013_meta.py similarity index 100% rename from apps/conditions/migrations/0013_meta.py rename to rdmo/conditions/migrations/0013_meta.py diff --git a/apps/conditions/migrations/__init__.py b/rdmo/conditions/migrations/__init__.py similarity index 100% rename from apps/conditions/migrations/__init__.py rename to rdmo/conditions/migrations/__init__.py diff --git a/apps/conditions/models.py b/rdmo/conditions/models.py similarity index 99% rename from apps/conditions/models.py rename to rdmo/conditions/models.py index 84134307f..43490a14f 100644 --- a/apps/conditions/models.py +++ b/rdmo/conditions/models.py @@ -4,7 +4,7 @@ from django.utils.encoding import python_2_unicode_compatible from django.utils.translation import ugettext_lazy as _ -from apps.core.utils import get_uri_prefix +from rdmo.core.utils import get_uri_prefix from .validators import ConditionUniqueKeyValidator diff --git a/apps/conditions/renderers.py b/rdmo/conditions/renderers.py similarity index 95% rename from apps/conditions/renderers.py rename to rdmo/conditions/renderers.py index 3374af8fe..f22a3ff55 100644 --- a/apps/conditions/renderers.py +++ b/rdmo/conditions/renderers.py @@ -1,4 +1,4 @@ -from apps.core.renderers import BaseXMLRenderer +from rdmo.core.renderers import BaseXMLRenderer class XMLRenderer(BaseXMLRenderer): diff --git a/apps/conditions/serializers/__init__.py b/rdmo/conditions/serializers/__init__.py similarity index 95% rename from apps/conditions/serializers/__init__.py rename to rdmo/conditions/serializers/__init__.py index 2995f2052..c94cd2966 100644 --- a/apps/conditions/serializers/__init__.py +++ b/rdmo/conditions/serializers/__init__.py @@ -1,7 +1,7 @@ from rest_framework import serializers -from apps.domain.models import Attribute -from apps.options.models import OptionSet, Option +from rdmo.domain.models import Attribute +from rdmo.options.models import OptionSet, Option from ..models import Condition from ..validators import ConditionUniqueKeyValidator diff --git a/apps/conditions/serializers/api.py b/rdmo/conditions/serializers/api.py similarity index 100% rename from apps/conditions/serializers/api.py rename to rdmo/conditions/serializers/api.py diff --git a/apps/conditions/serializers/export.py b/rdmo/conditions/serializers/export.py similarity index 100% rename from apps/conditions/serializers/export.py rename to rdmo/conditions/serializers/export.py diff --git a/apps/conditions/static/conditions/css/conditions.scss b/rdmo/conditions/static/conditions/css/conditions.scss similarity index 100% rename from apps/conditions/static/conditions/css/conditions.scss rename to rdmo/conditions/static/conditions/css/conditions.scss diff --git a/apps/conditions/static/conditions/js/conditions.js b/rdmo/conditions/static/conditions/js/conditions.js similarity index 100% rename from apps/conditions/static/conditions/js/conditions.js rename to rdmo/conditions/static/conditions/js/conditions.js diff --git a/apps/conditions/templates/conditions/conditions.html b/rdmo/conditions/templates/conditions/conditions.html similarity index 92% rename from apps/conditions/templates/conditions/conditions.html rename to rdmo/conditions/templates/conditions/conditions.html index 0075ddb04..5ac97d97e 100644 --- a/apps/conditions/templates/conditions/conditions.html +++ b/rdmo/conditions/templates/conditions/conditions.html @@ -2,18 +2,21 @@ {% load staticfiles %} {% load compress %} {% load i18n %} +{% load core_tags %} {% block head %} + {% vendor 'angular' %} + {% compress css %} {% endcompress %} - - + {% compress js %} + {% endcompress %} {% endblock %} {% block bodyattr %} ng-app="conditions" ng-controller="ConditionsController" {% endblock %} @@ -44,7 +47,7 @@

{% trans 'Options' %}

{% trans 'Export' %}