[-\\w]+)/dismiss',
- permission_classes=[IsAuthenticated])
- def dismiss(self, request, url_name=None):
- site = Site.objects.get_current()
- overlays = settings.OVERLAYS.get(url_name)[:]
- if not overlays:
- raise NotFound()
-
- try:
- overlay = Overlay.objects.get(user=request.user, site=site, url_name=url_name)
- overlay.current = ''
- overlay.save()
- except Overlay.DoesNotExist:
- overlay = Overlay.objects.create(user=request.user, site=site, url_name=url_name, current='')
-
- return Response({'overlay': overlay.current})
diff --git a/rdmo/projects/assets/js/project/components/areas/Dashboard.js b/rdmo/projects/assets/js/project/components/areas/Dashboard.js
index 48577001c2..35ee866304 100644
--- a/rdmo/projects/assets/js/project/components/areas/Dashboard.js
+++ b/rdmo/projects/assets/js/project/components/areas/Dashboard.js
@@ -1,6 +1,6 @@
import React, { useState } from 'react'
-import Tooltip from 'rdmo/core/assets/js/_bs53/components/Tooltip'
+import Tooltip from 'rdmo/core/assets/js/components/Tooltip'
import { TileGrid } from '../helper'
diff --git a/rdmo/projects/assets/js/project/components/areas/information/ProjectDeleteModal.js b/rdmo/projects/assets/js/project/components/areas/information/ProjectDeleteModal.js
index f564302783..2869444cd1 100644
--- a/rdmo/projects/assets/js/project/components/areas/information/ProjectDeleteModal.js
+++ b/rdmo/projects/assets/js/project/components/areas/information/ProjectDeleteModal.js
@@ -2,8 +2,8 @@ import React from 'react'
import PropTypes from 'prop-types'
import { useDispatch } from 'react-redux'
-import Modal from 'rdmo/core/assets/js/_bs53/components/Modal'
import Html from 'rdmo/core/assets/js/components/Html'
+import Modal from 'rdmo/core/assets/js/components/Modal'
import { deleteProject } from '../../../actions/projectActions'
diff --git a/rdmo/projects/assets/js/project/components/areas/information/ProjectForm.js b/rdmo/projects/assets/js/project/components/areas/information/ProjectForm.js
index 70591e86b2..97c7835ed5 100644
--- a/rdmo/projects/assets/js/project/components/areas/information/ProjectForm.js
+++ b/rdmo/projects/assets/js/project/components/areas/information/ProjectForm.js
@@ -4,12 +4,11 @@ import { useDispatch, useSelector } from 'react-redux'
import AsyncSelect from 'react-select/async'
import { useDebouncedCallback } from 'use-debounce'
-import { Tooltip } from 'rdmo/core/assets/js/_bs53/components'
-
import Input from 'rdmo/core/assets/js/components/forms/Input'
import Select from 'rdmo/core/assets/js/components/forms/Select'
import Textarea from 'rdmo/core/assets/js/components/forms/Textarea'
import Html from 'rdmo/core/assets/js/components/Html'
+import Tooltip from 'rdmo/core/assets/js/components/Tooltip'
import { copyProject, createProject } from '../../../../projects/actions/projectsActions'
import { updateProject } from '../../../actions/projectActions'
diff --git a/rdmo/projects/assets/js/project/components/areas/memberships/MembershipDeleteModal.js b/rdmo/projects/assets/js/project/components/areas/memberships/MembershipDeleteModal.js
index 6ef5d24ba3..3ec975e08f 100644
--- a/rdmo/projects/assets/js/project/components/areas/memberships/MembershipDeleteModal.js
+++ b/rdmo/projects/assets/js/project/components/areas/memberships/MembershipDeleteModal.js
@@ -2,8 +2,8 @@ import React from 'react'
import PropTypes from 'prop-types'
import { useDispatch, useSelector } from 'react-redux'
-import Modal from 'rdmo/core/assets/js/_bs53/components/Modal'
import Html from 'rdmo/core/assets/js/components/Html'
+import Modal from 'rdmo/core/assets/js/components/Modal'
import { deleteProjectInvite, deleteProjectMember, leaveProject } from '../../../actions/projectActions'
import { useFieldErrors } from '../../../hooks/useFieldErrors'
diff --git a/rdmo/projects/assets/js/project/components/areas/memberships/MembershipInviteModal.js b/rdmo/projects/assets/js/project/components/areas/memberships/MembershipInviteModal.js
index 4018953974..762b52efd5 100644
--- a/rdmo/projects/assets/js/project/components/areas/memberships/MembershipInviteModal.js
+++ b/rdmo/projects/assets/js/project/components/areas/memberships/MembershipInviteModal.js
@@ -3,9 +3,9 @@ import PropTypes from 'prop-types'
import { useDispatch, useSelector } from 'react-redux'
import { isEmpty } from 'lodash'
-import { Modal, Tooltip } from 'rdmo/core/assets/js/_bs53/components'
-
import Html from 'rdmo/core/assets/js/components/Html'
+import Modal from 'rdmo/core/assets/js/components/Modal'
+import Tooltip from 'rdmo/core/assets/js/components/Tooltip'
import { clearProjectErrors, createProjectMember, sendProjectInvite } from '../../../actions/projectActions'
import { useFieldErrors } from '../../../hooks/useFieldErrors'
diff --git a/rdmo/projects/assets/js/project/components/areas/snapshots/SnapshotDeleteModal.js b/rdmo/projects/assets/js/project/components/areas/snapshots/SnapshotDeleteModal.js
index 9bc6823855..3f2696a7c0 100644
--- a/rdmo/projects/assets/js/project/components/areas/snapshots/SnapshotDeleteModal.js
+++ b/rdmo/projects/assets/js/project/components/areas/snapshots/SnapshotDeleteModal.js
@@ -2,8 +2,8 @@ import React from 'react'
import PropTypes from 'prop-types'
import { useDispatch } from 'react-redux'
-import Modal from 'rdmo/core/assets/js/_bs53/components/Modal'
import Html from 'rdmo/core/assets/js/components/Html'
+import Modal from 'rdmo/core/assets/js/components/Modal'
import { deleteSnapshot } from '../../../actions/projectActions'
import { useFieldErrors } from '../../../hooks/useFieldErrors'
diff --git a/rdmo/projects/assets/js/project/components/areas/snapshots/SnapshotModal.js b/rdmo/projects/assets/js/project/components/areas/snapshots/SnapshotModal.js
index df9fdf7826..02870fd43b 100644
--- a/rdmo/projects/assets/js/project/components/areas/snapshots/SnapshotModal.js
+++ b/rdmo/projects/assets/js/project/components/areas/snapshots/SnapshotModal.js
@@ -2,10 +2,10 @@ import React, { useEffect, useState } from 'react'
import PropTypes from 'prop-types'
import { useDispatch, useSelector } from 'react-redux'
-import { Modal } from 'rdmo/core/assets/js/_bs53/components'
import { Input, Textarea } from 'rdmo/core/assets/js/components/forms'
import Html from 'rdmo/core/assets/js/components/Html'
+import Modal from 'rdmo/core/assets/js/components/Modal'
import { clearProjectErrors, createSnapshot, updateSnapshot } from '../../../actions/projectActions'
import { useFieldErrors } from '../../../hooks/useFieldErrors'
diff --git a/rdmo/projects/assets/js/project/components/areas/snapshots/SnapshotRollbackModal.js b/rdmo/projects/assets/js/project/components/areas/snapshots/SnapshotRollbackModal.js
index 276f1f39c0..3f3c3cee9e 100644
--- a/rdmo/projects/assets/js/project/components/areas/snapshots/SnapshotRollbackModal.js
+++ b/rdmo/projects/assets/js/project/components/areas/snapshots/SnapshotRollbackModal.js
@@ -2,8 +2,8 @@ import React from 'react'
import PropTypes from 'prop-types'
import { useDispatch } from 'react-redux'
-import Modal from 'rdmo/core/assets/js/_bs53/components/Modal'
import Html from 'rdmo/core/assets/js/components/Html'
+import Modal from 'rdmo/core/assets/js/components/Modal'
import { rollbackSnapshot } from '../../../actions/projectActions'
import { useFieldErrors } from '../../../hooks/useFieldErrors'
diff --git a/rdmo/projects/assets/js/projects/components/Main.js b/rdmo/projects/assets/js/projects/components/Main.js
index 5cd320b23c..cb69cf792c 100644
--- a/rdmo/projects/assets/js/projects/components/Main.js
+++ b/rdmo/projects/assets/js/projects/components/Main.js
@@ -2,13 +2,14 @@ import React, { useState } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import { get, isEmpty } from 'lodash'
-import { Modal } from 'rdmo/core/assets/js/_bs53/components'
import * as configActions from 'rdmo/core/assets/js/actions/configActions'
import { Link, SearchField } from 'rdmo/core/assets/js/components'
import { useFormattedDateTime, useModal, useScrollToTop } from 'rdmo/core/assets/js/hooks'
import { language } from 'rdmo/core/assets/js/utils'
import { baseUrl } from 'rdmo/core/assets/js/utils/meta'
+import Modal from 'rdmo/core/assets/js/components/Modal'
+
import * as projectsActions from '../actions/projectsActions'
import { HEADER_FORMATTERS, SORTABLE_COLUMNS } from '../utils'
diff --git a/rdmo/projects/forms.py b/rdmo/projects/forms.py
deleted file mode 100644
index 0fa78f22c1..0000000000
--- a/rdmo/projects/forms.py
+++ /dev/null
@@ -1,480 +0,0 @@
-from django import forms
-from django.conf import settings
-from django.contrib.auth import get_user_model
-from django.contrib.sites.models import Site
-from django.core.exceptions import ValidationError
-from django.core.validators import EmailValidator
-from django.db.models import Q
-from django.utils.safestring import mark_safe
-from django.utils.translation import gettext_lazy as _
-
-from rdmo.core.constants import VALUE_TYPE_FILE
-from rdmo.core.plugins import get_plugin
-from rdmo.core.utils import markdown2html
-
-from .constants import ROLE_CHOICES
-from .models import Integration, IntegrationOption, Invite, Membership, Project, Snapshot, Visibility
-from .validators import ProjectParentValidator
-
-
-class CatalogChoiceField(forms.ModelChoiceField):
-
- _unavailable_icon = ' ()'
-
- def label_from_instance(self, obj):
- rendered_title = markdown2html(obj.title)
- rendered_help = markdown2html(obj.help)
-
- if obj.available is False:
- return mark_safe(f'{rendered_title}{self._unavailable_icon}
'
- f'
{rendered_help}
')
-
- return mark_safe(f'{rendered_title}
{rendered_help}
')
-
-
-class TasksMultipleChoiceField(forms.ModelMultipleChoiceField):
-
- def label_from_instance(self, obj):
- rendered_title = markdown2html(obj.title)
- rendered_text = markdown2html(obj.text)
-
- return mark_safe(f'{rendered_title}{rendered_text}')
-
-
-class ViewsMultipleChoiceField(forms.ModelMultipleChoiceField):
-
- def label_from_instance(self, obj):
- rendered_title = markdown2html(obj.title)
- rendered_help = markdown2html(obj.help)
-
- return mark_safe(f'{rendered_title}{rendered_help}')
-
-
-class ProjectForm(forms.ModelForm):
-
- use_required_attribute = False
-
- def __init__(self, *args, **kwargs):
- self.copy = kwargs.pop('copy', False)
-
- catalogs = kwargs.pop('catalogs')
- projects = kwargs.pop('projects')
- super().__init__(*args, **kwargs)
- self.fields['title'].widget.attrs.update({
- 'autofocus': True
- })
- self.fields['catalog'].queryset = catalogs
- self.fields['catalog'].empty_label = None
- self.fields['catalog'].initial = catalogs.first()
-
- if settings.NESTED_PROJECTS:
- self.fields['parent'].queryset = projects
-
- def clean(self):
- if not self.copy:
- ProjectParentValidator(self.instance)(self.cleaned_data)
- super().clean()
-
- class Meta:
- model = Project
-
- fields = ['title', 'description', 'catalog']
- if settings.NESTED_PROJECTS:
- fields += ['parent']
-
- field_classes = {
- 'catalog': CatalogChoiceField
- }
- widgets = {
- 'catalog': forms.RadioSelect()
- }
-
-
-class ProjectUpdateInformationForm(forms.ModelForm):
-
- use_required_attribute = False
-
- class Meta:
- model = Project
- fields = ('title', 'description')
-
-
-class ProjectUpdateVisibilityForm(forms.ModelForm):
-
- use_required_attribute = False
-
- def __init__(self, *args, **kwargs):
- self.project = kwargs.pop('instance')
- self.user = kwargs.pop('user')
- self.site = kwargs.pop('site')
-
- try:
- instance = self.project.visibility
- except Visibility.DoesNotExist:
- instance = None
-
- super().__init__(*args, instance=instance, **kwargs)
-
- # remove the sites or group sets if they are not needed, doing this in Meta would break tests
- if not (settings.MULTISITE and self.user.has_perm('projects.change_visibility')):
- self.fields.pop('sites')
- if not settings.GROUPS:
- self.fields.pop('groups')
-
- class Meta:
- model = Visibility
- fields = ('sites', 'groups')
-
- def save(self, *args, **kwargs):
- if 'cancel' in self.data:
- pass
- elif 'delete' in self.data:
- if settings.MULTISITE and not self.user.has_perm('projects.delete_visibility'):
- current_site = Site.objects.get(id=self.site.id)
- self.instance.remove_site(current_site)
- else:
- self.instance.delete()
- else:
- visibility, _created = Visibility.objects.update_or_create(project=self.project)
-
- if settings.MULTISITE:
- if self.user.has_perm('projects.change_visibility'):
- visibility.sites.set(self.cleaned_data.get('sites'))
- else:
- visibility.sites.add(self.site)
-
- if settings.GROUPS:
- visibility.groups.set(self.cleaned_data.get('groups'))
-
- return self.project
-
-
-class ProjectUpdateCatalogForm(forms.ModelForm):
-
- use_required_attribute = False
-
- def __init__(self, *args, **kwargs):
- catalogs = kwargs.pop('catalogs')
- super().__init__(*args, **kwargs)
- self.fields['catalog'].queryset = catalogs
- self.fields['catalog'].empty_label = None
-
- class Meta:
- model = Project
- fields = ('catalog', )
- field_classes = {
- 'catalog': CatalogChoiceField
- }
- widgets = {
- 'catalog': forms.RadioSelect()
- }
-
- def save(self, *args, **kwargs):
- # if the catalog is the same, do nothing
- if self.instance.catalog.id == self.cleaned_data.get('catalog'):
- return self.instance
- return super().save(*args, **kwargs)
-
-
-class ProjectUpdateTasksForm(forms.ModelForm):
-
- use_required_attribute = False
-
- def __init__(self, *args, **kwargs):
- if settings.PROJECT_TASKS_SYNC:
- raise ValidationError(_("Editing tasks is disabled."))
-
- tasks = kwargs.pop('tasks')
- super().__init__(*args, **kwargs)
- self.fields['tasks'].queryset = tasks
-
- class Meta:
- model = Project
- fields = ('tasks', )
- field_classes = {
- 'tasks': TasksMultipleChoiceField
- }
- widgets = {
- 'tasks': forms.CheckboxSelectMultiple()
- }
-
- def save(self, *args, **kwargs):
- if settings.PROJECT_TASKS_SYNC:
- raise ValidationError(_("Editing tasks is disabled."))
- super().save(*args, **kwargs)
-
-
-class ProjectUpdateViewsForm(forms.ModelForm):
-
- use_required_attribute = False
-
- def __init__(self, *args, **kwargs):
- if settings.PROJECT_VIEWS_SYNC:
- raise ValidationError(_("Editing views is disabled."))
-
- views = kwargs.pop('views')
- super().__init__(*args, **kwargs)
- self.fields['views'].queryset = views
-
- class Meta:
- model = Project
- fields = ('views', )
- field_classes = {
- 'views': ViewsMultipleChoiceField
- }
- widgets = {
- 'views': forms.CheckboxSelectMultiple()
- }
-
- def save(self, *args, **kwargs):
- if settings.PROJECT_VIEWS_SYNC:
- raise ValidationError(_("Editing views is disabled."))
- super().save(*args, **kwargs)
-
-
-class ProjectUpdateParentForm(forms.ModelForm):
-
- use_required_attribute = False
-
- def __init__(self, *args, **kwargs):
- projects = kwargs.pop('projects')
- super().__init__(*args, **kwargs)
- self.fields['parent'].queryset = projects
-
- def clean(self):
- ProjectParentValidator(self.instance)(self.cleaned_data)
- super().clean()
-
- class Meta:
- model = Project
- fields = ('parent', )
-
-
-class SnapshotCreateForm(forms.ModelForm):
-
- use_required_attribute = False
-
- class Meta:
- model = Snapshot
- fields = ('title', 'description')
-
- def __init__(self, *args, **kwargs):
- self.project = kwargs.pop('project')
- super().__init__(*args, **kwargs)
-
- def save(self, *args, **kwargs):
- self.instance.project = self.project
- return super().save(*args, **kwargs)
-
-
-class MembershipCreateForm(forms.Form):
-
- use_required_attribute = False
-
- username_or_email = forms.CharField(widget=forms.TextInput(attrs={'placeholder': _('Username or e-mail')}),
- label=_('User'),
- help_text=_('The username or e-mail of the new user.'))
- role = forms.CharField(widget=forms.RadioSelect(choices=ROLE_CHOICES),
- initial='author', label=_('Role'))
-
- def __init__(self, *args, **kwargs):
- self.project = kwargs.pop('project')
- self.is_site_manager = kwargs.pop('is_site_manager')
- super().__init__(*args, **kwargs)
-
- if self.is_site_manager:
- self.fields['silent'] = forms.BooleanField(
- required=False,
- label=_('Add member silently'),
- help_text=_('As site manager or admin, you can directly add users without notifying them via e-mail, '
- 'when you check the following checkbox.')
- )
-
- def clean_username_or_email(self):
- username_or_email = self.cleaned_data['username_or_email']
- usermodel = get_user_model()
-
- # check if it is a registered user
- try:
- self.cleaned_data['user'] = usermodel.objects.get(Q(username=username_or_email) |
- Q(email__iexact=username_or_email))
- self.cleaned_data['email'] = self.cleaned_data['user'].email
-
- if self.cleaned_data['user'] in self.project.user.all():
- raise ValidationError(_('The user is already a member of the project.'))
-
- except (usermodel.DoesNotExist, usermodel.MultipleObjectsReturned) as e:
- if settings.PROJECT_SEND_INVITE:
- # check if it is a valid email address, this will raise the correct ValidationError
- EmailValidator()(username_or_email)
-
- self.cleaned_data['user'] = None
- self.cleaned_data['email'] = username_or_email
- else:
- self.cleaned_data['user'] = None
- self.cleaned_data['email'] = None
- raise ValidationError(_('A user with this username or e-mail was not found. '
- 'Only registered users can be invited.')) from e
-
- def clean(self):
- if self.cleaned_data.get('silent') is True and self.cleaned_data.get('user') is None:
- raise ValidationError(_('Only existing users can be added silently.'))
-
- def save(self):
- if self.is_site_manager and self.cleaned_data.get('silent') is True:
- Membership.objects.create(
- project=self.project,
- user=self.cleaned_data.get('user'),
- role=self.cleaned_data.get('role')
- )
- else:
- invite, _created = Invite.objects.get_or_create(
- project=self.project,
- user=self.cleaned_data.get('user'),
- email=self.cleaned_data.get('email')
- )
- invite.role = self.cleaned_data.get('role')
- invite.make_token()
- invite.save()
-
- return invite
-
-
-class IntegrationForm(forms.ModelForm):
-
- class Meta:
- model = Integration
- fields = ()
-
- def __init__(self, *args, **kwargs):
- self.project = kwargs.pop('project')
- self.provider_key = kwargs.pop('provider_key', None)
- super().__init__(*args, **kwargs)
-
- # get the provider
- if self.provider_key:
- self.provider = get_plugin('PROJECT_ISSUE_PROVIDERS', self.provider_key)
- else:
- self.provider = self.instance.provider
-
- # add fields for the integration options
- for field in self.provider.fields:
- # new integration instance is going to be created
- if self.instance.pk is None:
- initial = None
- # existing integration is going to be updated
- else:
- try:
- initial = IntegrationOption.objects.get(integration=self.instance, key=field.get('key')).value
- except IntegrationOption.DoesNotExist:
- initial = None
-
- if field.get('placeholder'):
- attrs = {'placeholder': field.get('placeholder')}
-
- self.fields[field.get('key')] = forms.CharField(widget=forms.TextInput(attrs=attrs),
- initial=initial, required=field.get('required', True),
- help_text=field.get('help'))
-
- def save(self):
- # the the project and the provider_key
- self.instance.project = self.project
- if self.provider_key:
- self.instance.provider_key = self.provider_key
-
- # call the form's save method
- super().save()
-
- # save the integration options
- self.instance.save_options(self.cleaned_data)
-
-
-class IssueSendForm(forms.Form):
-
- class AttachmentViewsField(forms.ModelMultipleChoiceField):
- def label_from_instance(self, obj):
- return _('Attach %s') % obj.title
-
- class AttachmentFilesField(forms.ModelMultipleChoiceField):
- def label_from_instance(self, obj):
- return _('Attach %s') % obj.file_name
-
- class AttachmentSnapshotField(forms.ModelChoiceField):
- def label_from_instance(self, obj):
- return obj.title
-
- subject = forms.CharField(label=_('Subject'), max_length=128)
- message = forms.CharField(label=_('Message'), widget=forms.Textarea)
-
- def __init__(self, *args, **kwargs):
- self.project = kwargs.pop('project')
- super().__init__(*args, **kwargs)
-
- self.fields['attachments_answers'] = forms.MultipleChoiceField(
- label=_('Answers'), widget=forms.CheckboxSelectMultiple, required=False,
- choices=[('project_answers', _('Attach the output of "View answers".'))]
- )
- self.fields['attachments_views'] = self.AttachmentViewsField(
- label=_('Views'), widget=forms.CheckboxSelectMultiple, required=False,
- queryset=self.project.views.all(), to_field_name='id'
- )
- self.fields['attachments_files'] = self.AttachmentFilesField(
- label=_('Files'), widget=forms.CheckboxSelectMultiple, required=False,
- queryset=self.project.values.filter(snapshot=None)
- .filter(value_type=VALUE_TYPE_FILE)
- .order_by('file'),
- to_field_name='id'
- )
- self.fields['attachments_snapshot'] = self.AttachmentSnapshotField(
- label=_('Snapshot'), widget=forms.RadioSelect, required=False,
- queryset=self.project.snapshots.all(), empty_label=_('Current')
- )
- self.fields['attachments_format'] = forms.ChoiceField(
- label=_('Format'), widget=forms.RadioSelect, required=False,
- choices=settings.EXPORT_FORMATS
- )
-
- def clean(self):
- cleaned_data = super().clean()
-
- if cleaned_data.get('attachments_answers') or cleaned_data.get('attachments_views'):
- if not cleaned_data.get('attachments_format'):
- self.add_error('attachments_format', _('This field is required.'))
-
-
-class IssueMailForm(forms.Form):
-
- if settings.EMAIL_RECIPIENTS_CHOICES:
- recipients = forms.MultipleChoiceField(label=_('Recipients'), widget=forms.CheckboxSelectMultiple,
- required=not settings.EMAIL_RECIPIENTS_INPUT,
- choices=settings.EMAIL_RECIPIENTS_CHOICES)
-
- if settings.EMAIL_RECIPIENTS_INPUT:
- recipients_input = forms.CharField(label=_('Recipients'), widget=forms.Textarea(attrs={
- 'placeholder': _('Enter recipients line by line')
- }), required=not settings.EMAIL_RECIPIENTS_CHOICES)
-
- def clean(self):
- cleaned_data = super().clean()
-
- if settings.EMAIL_RECIPIENTS_INPUT and \
- cleaned_data.get('recipients') == [] and \
- cleaned_data.get('recipients_input') == []:
- self.add_error('recipients_input', _('This field is required.'))
-
- def clean_recipients_input(self):
- email_validator = EmailValidator()
- cleaned_data = []
-
- for line in self.cleaned_data['recipients_input'].splitlines():
- email = line.strip()
- email_validator(email)
- cleaned_data.append(email)
-
- return cleaned_data
-
-
-class UploadFileForm(forms.Form):
- uploaded_file = forms.FileField(
- label='Select a file',
- )
diff --git a/rdmo/projects/imports.py b/rdmo/projects/imports.py
index bfb40937cc..7e04f2c218 100644
--- a/rdmo/projects/imports.py
+++ b/rdmo/projects/imports.py
@@ -265,10 +265,10 @@ def submit(self):
response = requests.get(form.cleaned_data['url'])
self.request.session['import_file_name'] = handle_fetched_file(response.content)
- if self.current_project:
- return redirect('project_update_import', self.current_project.id)
- else:
- return redirect('project_create_import')
+ # if self.current_project:
+ # return redirect('project_update_import', self.current_project.id)
+ # else:
+ # return redirect('project_create_import')
return render(self.request, 'projects/project_import_form.html', {
'source_title': 'URL',
diff --git a/rdmo/projects/mixins.py b/rdmo/projects/mixins.py
deleted file mode 100644
index 1ce167ca0a..0000000000
--- a/rdmo/projects/mixins.py
+++ /dev/null
@@ -1,241 +0,0 @@
-from collections import defaultdict
-from pathlib import Path
-
-from django.contrib.sites.shortcuts import get_current_site
-from django.core.exceptions import ValidationError
-from django.http import Http404, HttpResponseRedirect
-from django.shortcuts import get_object_or_404, redirect, render
-from django.utils.translation import gettext_lazy as _
-
-from rdmo.core.imports import handle_uploaded_file
-from rdmo.core.plugins import get_plugin, get_plugins
-from rdmo.questions.models import Question
-
-from .models import Membership, Project
-from .utils import save_import_snapshot_values, save_import_tasks, save_import_values, save_import_views
-
-
-class ProjectImportMixin:
-
- def get_current_values(self, current_project):
- queryset = current_project.values.filter(snapshot=None).select_related('attribute', 'option')
-
- current_values = defaultdict(lambda: defaultdict(lambda: defaultdict(lambda: defaultdict(list))))
- for value in queryset:
- current_values[value.attribute.uri][value.set_prefix][value.set_index][value.collection_index] = value
- return current_values
-
- def get_questions(self, catalog):
- queryset = Question.objects.filter_by_catalog(catalog) \
- .select_related('attribute') \
- .order_by('attribute__uri')
-
- questions = {}
- for question in queryset:
- if question.attribute and question.attribute.uri not in questions:
- questions[question.attribute.uri] = question
- return questions
-
- def update_values(self, current_project, catalog, values, snapshots=None):
- snapshots = snapshots or []
- questions = self.get_questions(catalog)
- current_values = self.get_current_values(current_project) if current_project else {}
-
- for value in values:
- if value.attribute:
- value.pk = None
- value.question = questions.get(value.attribute.uri)
- value.current = current_values.get(value.attribute.uri, {}) \
- .get(value.set_prefix, {}) \
- .get(value.set_index, {}) \
- .get(value.collection_index)
-
- for snapshot in snapshots:
- snapshot.pk = None
-
- for value in snapshot.snapshot_values:
- if value.attribute:
- value.pk = None
- value.question = questions.get(value.attribute.uri)
- value.current = current_values.get(value.attribute.uri, {}) \
- .get(value.set_prefix, {}) \
- .get(value.set_index, {}) \
- .get(value.collection_index)
-
- def get_import_plugin(self, key, current_project=None):
- import_plugin = get_plugin('PROJECT_IMPORTS', key)
- if import_plugin is None:
- raise Http404
-
- import_plugin.request = self.request
- import_plugin.current_project = current_project
-
- return import_plugin
-
- def upload_file(self):
- try:
- uploaded_file = self.request.FILES['uploaded_file']
- except KeyError:
- return render(self.request, 'core/error.html', {
- 'title': _('Import error'),
- 'errors': [_('There has been an error with your import.')]
- }, status=400)
- else:
- self.request.session['import_file_name'] = handle_uploaded_file(uploaded_file)
- self.request.session['import_source_title'] = uploaded_file.name
-
- # redirect to the import form
- return redirect(self.request.path)
-
- def import_form(self):
- current_project = self.object
-
- import_file_name = self.request.session.get('import_file_name')
- import_source_title = self.request.session.get('import_source_title')
- if import_file_name is None or not Path(import_file_name).is_file():
- return render(self.request, 'core/error.html', {
- 'title': _('Import error'),
- 'errors': [_('There has been an error with your import. No uploaded or retrieved file could be found.')]
- }, status=400)
-
- for import_key, import_plugin in get_plugins('PROJECT_IMPORTS').items():
- import_plugin.current_project = current_project
- import_plugin.file_name = import_file_name
- import_plugin.source_title = import_source_title
- import_plugin.request = self.request
-
- if import_plugin.check():
- try:
- import_plugin.process()
- except ValidationError as e:
- return render(self.request, 'core/error.html', {
- 'title': _('Import error'),
- 'errors': e
- }, status=400)
-
- # store information in session for ProjectCreateImportView
- self.request.session['import_key'] = import_key
-
- # attach questions and current values
- self.update_values(current_project, import_plugin.catalog,
- import_plugin.values, import_plugin.snapshots)
-
- return render(self.request, 'projects/project_import.html', {
- 'method': 'import_file',
- 'current_project': current_project,
- 'source_title': import_plugin.source_title,
- 'source_project': import_plugin.project,
- 'values': import_plugin.values,
- 'snapshots': import_plugin.snapshots if not current_project else None,
- 'tasks': import_plugin.tasks,
- 'views': import_plugin.views
- })
-
- return render(self.request, 'core/error.html', {
- 'title': _('Import error'),
- 'errors': [_('Files of this type cannot be imported.')]
- }, status=400)
-
- def import_file(self):
- current_project = self.object
-
- if 'cancel' in self.request.POST:
- if current_project:
- return HttpResponseRedirect(current_project.get_absolute_url())
- else:
- return HttpResponseRedirect(self.success_url)
-
- try:
- import_tmpfile_name = self.request.session.pop('import_file_name')
- import_key = self.request.session.pop('import_key')
- except KeyError:
- return render(self.request, 'core/error.html', {
- 'title': _('Import error'),
- 'errors': [_('There has been an error with your import.')]
- }, status=400)
-
- checked = [key for key, value in self.request.POST.items() if 'on' in value]
-
- if import_tmpfile_name and import_key:
- import_plugin = self.get_import_plugin(import_key, current_project)
- import_plugin.file_name = import_tmpfile_name
-
- if import_plugin.check():
- try:
- import_plugin.process()
- except ValidationError as e:
- return render(self.request, 'core/error.html', {
- 'title': _('Import error'),
- 'errors': e
- }, status=400)
-
- # attach questions and current values
- self.update_values(current_project, import_plugin.catalog,
- import_plugin.values, import_plugin.snapshots)
-
- if current_project:
- save_import_values(self.object, import_plugin.values, checked)
- save_import_tasks(self.object, import_plugin.tasks)
- save_import_views(self.object, import_plugin.views)
-
- return HttpResponseRedirect(current_project.get_absolute_url())
-
- else:
- # add current site and save project
- import_plugin.project.site = get_current_site(self.request)
- import_plugin.project.save()
-
- # add user to project
- membership = Membership(project=import_plugin.project, user=self.request.user, role='owner')
- membership.save()
-
- for value in import_plugin.values:
- value.current = None
-
- save_import_values(import_plugin.project, import_plugin.values, checked)
- save_import_snapshot_values(import_plugin.project, import_plugin.snapshots, checked)
- save_import_tasks(import_plugin.project, import_plugin.tasks)
- save_import_views(import_plugin.project, import_plugin.views)
-
- return HttpResponseRedirect(import_plugin.project.get_absolute_url())
-
- return render(self.request, 'core/error.html', {
- 'title': _('Import error'),
- 'errors': [_('There has been an error with your import.')]
- }, status=400)
-
- def import_project(self):
- current_project = self.object
-
- if 'cancel' in self.request.POST:
- if current_project:
- return HttpResponseRedirect(current_project.get_absolute_url())
- else:
- return HttpResponseRedirect(self.success_url)
-
- # get the original project
- project = get_object_or_404(Project.objects.all(), id=self.request.POST.get('source'))
-
- # check if the user has the permission to access the original project
- if not self.request.user.has_perm('projects.view_project_object', project):
- self.handle_no_permission()
-
- values = project.values.filter(snapshot=None) \
- .select_related('attribute', 'option')
-
- # attach questions and current values
- self.update_values(current_project, current_project.catalog, values)
-
- checked = [key for key, value in self.request.POST.items() if 'on' in value]
- if checked:
- save_import_values(current_project, values, checked)
- return HttpResponseRedirect(current_project.get_absolute_url())
-
- else:
- return render(self.request, 'projects/project_import.html', {
- 'method': 'import_project',
- 'source': project.id,
- 'source_title': project.title,
- 'current_project': current_project,
- 'values': values,
- })
diff --git a/rdmo/projects/static/projects/css/project.scss b/rdmo/projects/static/projects/css/project.scss
deleted file mode 100644
index 1fda0c6b55..0000000000
--- a/rdmo/projects/static/projects/css/project.scss
+++ /dev/null
@@ -1,24 +0,0 @@
-@import 'core/css/variables';
-
-.project-header {
- .table > tbody > tr:first-child > td {
- border-top: none;
- }
-}
-
-.table {
- margin-bottom: 0;
-}
-
-.project-update {
- .fa {
- float: right;
- margin-right: 8px;
- }
-}
-
-.table {
- .fa-sign-out {
- width: 11px;
- }
-}
diff --git a/rdmo/projects/templates/projects/issue_send_message.txt b/rdmo/projects/templates/projects/integration/issue_send_message.txt
similarity index 100%
rename from rdmo/projects/templates/projects/issue_send_message.txt
rename to rdmo/projects/templates/projects/integration/issue_send_message.txt
diff --git a/rdmo/projects/templates/projects/issue_send_subject.txt b/rdmo/projects/templates/projects/integration/issue_send_subject.txt
similarity index 100%
rename from rdmo/projects/templates/projects/issue_send_subject.txt
rename to rdmo/projects/templates/projects/integration/issue_send_subject.txt
diff --git a/rdmo/projects/templates/projects/integration_confirm_delete.html b/rdmo/projects/templates/projects/integration_confirm_delete.html
deleted file mode 100644
index b72de559d7..0000000000
--- a/rdmo/projects/templates/projects/integration_confirm_delete.html
+++ /dev/null
@@ -1,19 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block page %}
-
- {% trans "Delete integration" %}
-
-
- {% blocktrans with label=object.provider.label %}You are about to permanently delete the {{ label }}.{% endblocktrans %}
-
-
-
- {% trans 'This action cannot be undone!' %}
-
-
- {% bootstrap_delete_form submit=_('Delete integration') %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/integration_form.html b/rdmo/projects/templates/projects/integration_form.html
deleted file mode 100644
index ebfc4992b8..0000000000
--- a/rdmo/projects/templates/projects/integration_form.html
+++ /dev/null
@@ -1,25 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block page %}
-
-{% if object %}
-
- {% trans 'Update integration' %}
-
- {{ provider.description }}
-
- {% bootstrap_form submit=_('Update integration') %}
-
-{% else %}
-
- {% trans 'Add integration to project' %}
-
- {{ provider.description }}
-
- {% bootstrap_form submit=_('Add integration') %}
-
-{% endif %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/invite_confirm_delete.html b/rdmo/projects/templates/projects/invite_confirm_delete.html
deleted file mode 100644
index 3314159a36..0000000000
--- a/rdmo/projects/templates/projects/invite_confirm_delete.html
+++ /dev/null
@@ -1,27 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-{% load accounts_tags %}
-
-{% block page %}
-
- {% trans 'Delete invite' %}
-
-
- {% if object.user %}
- {% full_name object.user as user %}
- {% blocktrans with object.project.title as title trimmed %}
- You are about to remove the invite of {{ user }} from the project {{ title }}.
- {% endblocktrans %}
- {% else %}
- {% with object.email as user %}
- {% blocktrans with object.project.title as title trimmed %}
- You are about to remove the invite of {{ user }} from the project {{ title }}.
- {% endblocktrans %}
- {% endwith %}
- {% endif %}
-
-
- {% bootstrap_delete_form submit=_('Delete invite') %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/issue_detail.html b/rdmo/projects/templates/projects/issue_detail.html
deleted file mode 100644
index 92abba4c88..0000000000
--- a/rdmo/projects/templates/projects/issue_detail.html
+++ /dev/null
@@ -1,99 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block head %}
-
-{% endblock %}
-
-{% block page %}
-
-{% trans 'Task' %}
-
-{{ issue.task.title }}
-
-
- {{ issue.task.text|markdown }}
-
-
-{% if issue.dates %}
-
-{% trans 'Dates' %}
-
-{% for dates in issue.dates %}
- {% if dates|length > 1 %}
- {{ dates.0 | date:"DATE_FORMAT" }}
- {{ dates.1 | date:"DATE_FORMAT" }}
- {% else %}
- {{ dates.0 | date:"DATE_FORMAT" }}
- {% endif %}
-{% endfor %}
-
-{% endif %}
-
-{% trans 'Questions' %}
-
-
- {% trans 'This task is active, because of the answers to the following questions:' %}
-
-
-
-
-{% if issue.resources.all %}
-
-{% trans 'External resources for this task' %}
-
-
-
-{% endif %}
-
-{% endblock %}
-
-{% block sidebar %}
-
- {% trans 'Status' %}
-
-
- {{ issue.get_status_display }}
-
-
- {% trans 'Options' %}
-
-
-
-{% endblock %}
-
diff --git a/rdmo/projects/templates/projects/issue_form.html b/rdmo/projects/templates/projects/issue_form.html
deleted file mode 100644
index 4c05ce2afc..0000000000
--- a/rdmo/projects/templates/projects/issue_form.html
+++ /dev/null
@@ -1,11 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block page %}
-
-{% trans 'Update task' %}
-
-{% bootstrap_form submit=_('Update task') %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/issue_send.html b/rdmo/projects/templates/projects/issue_send.html
deleted file mode 100644
index e43ad2f2aa..0000000000
--- a/rdmo/projects/templates/projects/issue_send.html
+++ /dev/null
@@ -1,58 +0,0 @@
-{% extends 'core/base.html' %}
-{% load i18n %}
-{% load static %}
-{% load compress %}
-{% load core_tags %}
-
-{% block head %}
- {% compress css %}
-
- {% endcompress %}
- {% compress js %}
-
- {% endcompress %}
-
-{% endblock %}
-
-{% block content %}
-
-
-
-
-{% render_lang_template 'projects/overlays/issue_send_issue_message' %}
-{% render_lang_template 'projects/overlays/issue_send_issue_attachments' %}
-{% render_lang_template 'projects/overlays/issue_send_support_info' %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/issue_send_email.html b/rdmo/projects/templates/projects/issue_send_email.html
deleted file mode 100644
index c3ec3c62d9..0000000000
--- a/rdmo/projects/templates/projects/issue_send_email.html
+++ /dev/null
@@ -1,32 +0,0 @@
-{% load i18n %}
-{% load widget_tweaks %}
-
-{% trans 'Send by mail' %}
-
-{% if mail_form.recipients %}
- {% include 'core/bootstrap_form_field.html' with field=mail_form.recipients %}
-{% endif %}
-
-{% if mail_form.recipients_input %}
- {% with field=mail_form.recipients_input %}
-
- {% endwith %}
-{% endif %}
-
-
-
-
diff --git a/rdmo/projects/templates/projects/issue_send_integrations.html b/rdmo/projects/templates/projects/issue_send_integrations.html
deleted file mode 100644
index a47812bd65..0000000000
--- a/rdmo/projects/templates/projects/issue_send_integrations.html
+++ /dev/null
@@ -1,38 +0,0 @@
-{% load i18n %}
-
-{% trans 'Send via integration' %}
-
-
-
- | {% trans 'Provider' %} |
- {% trans 'Description' %} |
- {% trans 'Options' %} |
- |
-
-
- {% for integration in integrations %}
- {% if integration.provider %}
-
- | {{ integration.provider.label }} |
- {{ integration.provider.description }} |
-
- {% for option in integration.options.all %}
- {% if not option.secret %}
- {{ option.title }}: {{ option.value }}
- {% endif %}
- {% endfor %}
-
- {% if integration.resources.exists %}
- {% trans 'This task has already been send using this integration.' %}
- {% endif %}
- |
-
-
- |
-
- {% endif %}
- {% endfor %}
-
-
diff --git a/rdmo/projects/templates/projects/issue_send_sidebar.html b/rdmo/projects/templates/projects/issue_send_sidebar.html
deleted file mode 100644
index 92034c99a1..0000000000
--- a/rdmo/projects/templates/projects/issue_send_sidebar.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{% load i18n %}
-
-{% trans 'Attachments' %}
-
-{% include 'core/bootstrap_form_field.html' with field=form.attachments_answers %}
-{% include 'core/bootstrap_form_field.html' with field=form.attachments_views %}
-{% include 'core/bootstrap_form_field.html' with field=form.attachments_files %}
-{% include 'core/bootstrap_form_field.html' with field=form.attachments_snapshot %}
-{% include 'core/bootstrap_form_field.html' with field=form.attachments_format %}
diff --git a/rdmo/projects/templates/projects/membership_confirm_delete.html b/rdmo/projects/templates/projects/membership_confirm_delete.html
deleted file mode 100644
index 0d037c9d77..0000000000
--- a/rdmo/projects/templates/projects/membership_confirm_delete.html
+++ /dev/null
@@ -1,19 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-{% load accounts_tags %}
-
-{% block page %}
-
- {% trans "Delete membership" %}
-
-
- {% full_name object.user as user %}
- {% blocktrans with object.project.title as title trimmed %}
- You are about to remove the user {{ user }} from the project {{ title }}.
- {% endblocktrans %}
-
-
- {% bootstrap_delete_form submit=_('Delete membership') %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/membership_form.html b/rdmo/projects/templates/projects/membership_form.html
deleted file mode 100644
index 5dfb6f12bd..0000000000
--- a/rdmo/projects/templates/projects/membership_form.html
+++ /dev/null
@@ -1,39 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block page %}
-
-{% if object %}
-
- {% trans 'Update membership' %}
-
- {% bootstrap_form submit=_('Update membership') %}
-
-{% else %}
-
- {% trans 'Invite member to project' %}
-
-
- {% blocktrans trimmed %}
- You can invite a new member to this project and assign one of the following roles:
- Guest (who can only read),
- Author (who can answer questions),
- Manager (who can additionally create snapshots, export the project, import values, and update the project settings)
- or Owner (like you).
- {% endblocktrans %}
-
-
-
- {% trans 'Users can be invited by their username (if they already have an account here), or by their e-mail address.' %}
-
-
-
- {% trans 'Users will receive an e-mail with a link to join the project with the assigned role.' %}
-
-
- {% bootstrap_form submit=_('Invite member') %}
-
-{% endif %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/old/project_detail.html b/rdmo/projects/templates/projects/old/project_detail.html
deleted file mode 100644
index 759291d5b0..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail.html
+++ /dev/null
@@ -1,51 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load static %}
-{% load compress %}
-{% load core_tags %}
-
-{% block head %}
- {% compress css %}
-
-
- {% endcompress %}
- {% compress js %}
-
- {% endcompress %}
-
-{% endblock %}
-
-{% block sidebar %}
-
- {% include 'projects/old/project_detail_sidebar.html' %}
-
-{% endblock %}
-
-{% block page %}
-
- {% include 'projects/old/project_detail_header.html' %}
- {% include 'projects/old/project_detail_issues.html' %}
- {% include 'projects/old/project_detail_views.html' %}
- {% include 'projects/old/project_detail_memberships.html' %}
- {% include 'projects/old/project_detail_invites.html' %}
- {% include 'projects/old/project_detail_snapshots.html' %}
- {% include 'projects/old/project_detail_integrations.html' %}
-
-
-
- {% render_lang_template 'projects/overlays/project_project_questions' %}
- {% render_lang_template 'projects/overlays/project_project_catalog' %}
- {% render_lang_template 'projects/overlays/project_project_issues' %}
- {% render_lang_template 'projects/overlays/project_project_views' %}
- {% render_lang_template 'projects/overlays/project_project_memberships' %}
- {% render_lang_template 'projects/overlays/project_project_snapshots' %}
- {% render_lang_template 'projects/overlays/project_export_project' %}
- {% render_lang_template 'projects/overlays/project_import_project' %}
- {% render_lang_template 'projects/overlays/project_support_info' %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/old/project_detail_header.html b/rdmo/projects/templates/projects/old/project_detail_header.html
deleted file mode 100644
index ca4c10e779..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_header.html
+++ /dev/null
@@ -1,53 +0,0 @@
-{% load i18n %}
-{% load rules %}
-{% load mptt_tags %}
-{% load accounts_tags %}
-
-{% has_perm 'projects.change_project_object' request.user project as can_change_project %}
-{% has_perm 'projects.change_visibility_object' request.user project as can_change_visibility %}
-
-
diff --git a/rdmo/projects/templates/projects/old/project_detail_header_catalog.html b/rdmo/projects/templates/projects/old/project_detail_header_catalog.html
deleted file mode 100644
index 2aa01f1f3c..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_header_catalog.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% load i18n %}
-{% load core_tags %}
-
-{% if can_change_project %}
-
-
-
-
-
-{% endif %}
-
-
- {{ project.catalog.title|markdown }}
-
-
- {{ project.catalog.help|markdown }}
-
diff --git a/rdmo/projects/templates/projects/old/project_detail_header_description.html b/rdmo/projects/templates/projects/old/project_detail_header_description.html
deleted file mode 100644
index 6b6ac86fbf..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_header_description.html
+++ /dev/null
@@ -1,14 +0,0 @@
-{% load i18n %}
-
-{% if can_change_project %}
-
-
-
-
-
-{% endif %}
-{% if project.description %}
-{{ project.description }}
-{% else %}
-{% trans 'No description available.' %}
-{% endif %}
diff --git a/rdmo/projects/templates/projects/old/project_detail_header_hierarchy.html b/rdmo/projects/templates/projects/old/project_detail_header_hierarchy.html
deleted file mode 100644
index eb3b2b50e7..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_header_hierarchy.html
+++ /dev/null
@@ -1,32 +0,0 @@
-{% load i18n %}
-{% load rules %}
-{% load projects_tags %}
-
-{% if can_change_project %}
-
-
-
-
-
-{% endif %}
-
-
diff --git a/rdmo/projects/templates/projects/old/project_detail_integrations.html b/rdmo/projects/templates/projects/old/project_detail_integrations.html
deleted file mode 100644
index 4f2d69bcce..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_integrations.html
+++ /dev/null
@@ -1,65 +0,0 @@
-{% load i18n %}
-{% load rules %}
-{% load accounts_tags %}
-
-{% has_perm 'projects.add_integration_object' request.user project as can_add_integration %}
-{% has_perm 'projects.change_integration_object' request.user project as can_change_integration %}
-{% has_perm 'projects.delete_integration_object' request.user project as can_delete_integration %}
-
-{% if integrations %}
-
- {% trans 'Integrations' %}
-
- {% include 'projects/old/project_detail_integrations_help.html' %}
-
-
-
- | {% trans 'Provider' %} |
- {% trans 'Description' %} |
- {% trans 'Options' %} |
- |
-
-
- {% for integration in integrations %}
- {% if integration.provider %}
-
- |
- {{ integration.provider.label }}
- |
-
- {{ integration.provider.description }}
- |
-
- {% for option in integration.options.all %}
- {% if not option.secret %}
- {{ option.title }}: {{ option.value }}
- {% endif %}
- {% endfor %}
-
- {% if integration.project != project %}
- ({% trans 'from' %} {{ integration.project.title }})
- {% endif %}
- |
-
- {% if integration.project == project %}
-
- {% if can_change_integration %}
-
-
- {% endif %}
- {% if can_delete_integration %}
-
-
- {% endif %}
-
- {% endif %}
- |
-
- {% endif %}
- {% endfor %}
-
-
-
-{% endif %}
diff --git a/rdmo/projects/templates/projects/old/project_detail_integrations_help.html b/rdmo/projects/templates/projects/old/project_detail_integrations_help.html
deleted file mode 100644
index c3f0683023..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_integrations_help.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{% load i18n %}
-
-
- {% blocktrans trimmed %}
- Integrations can be used to send tasks to various external tools. Please follow the descriptions of the integrations to use them.
- {% endblocktrans %}
-
diff --git a/rdmo/projects/templates/projects/old/project_detail_invites.html b/rdmo/projects/templates/projects/old/project_detail_invites.html
deleted file mode 100644
index 23ed384600..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_invites.html
+++ /dev/null
@@ -1,44 +0,0 @@
-{% load i18n %}
-{% load rules %}
-{% load accounts_tags %}
-
-{% has_perm 'projects.view_invite_object' request.user project as can_view_invite %}
-{% has_perm 'projects.delete_invite_object' request.user project as can_delete_invite %}
-
-{% if can_view_invite and invites %}
-
- {% trans 'Invites' %}
-
-
-
- | {% trans 'User' %} |
- {% trans 'E-Mail' %} |
- {% trans 'Role' %} |
- |
-
-
- {% for invite in invites %}
-
- |
- {% if invite.user %}
- {% full_name invite.user %}
- {% endif %}
- |
-
- {{ invite.email }}
- |
-
- {{ invite.get_role_display }}
- |
-
- {% if can_delete_invite %}
-
-
- {% endif %}
- |
- {% endfor %}
-
-
-
-{% endif %}
diff --git a/rdmo/projects/templates/projects/old/project_detail_issues.html b/rdmo/projects/templates/projects/old/project_detail_issues.html
deleted file mode 100644
index 65f7c94665..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_issues.html
+++ /dev/null
@@ -1,92 +0,0 @@
-{% load i18n %}
-{% load rules %}
-{% load core_tags %}
-
-{% has_perm 'projects.change_project_object' request.user project as can_change_project %}
-
-{% if settings.PROJECT_ISSUES and tasks_available %}
-
-
-
-
{% trans 'Tasks' %}
-
- {% include 'projects/old/project_detail_issues_help.html' %}
-
- {% if issues %}
-
-
-
- | {% trans 'Task' %} |
- {% trans 'Description' %} |
- {% trans 'Time frame' %} |
- {% trans 'Status' %} |
-
- {% if can_change_project and not settings.PROJECT_TASKS_SYNC %}
-
-
-
- {% endif %}
- |
-
-
- {% for issue in issues %}
-
- |
-
- {{ issue.task.title|markdown }}
-
- |
- {{ issue.task.text|markdown }} |
-
- {% for dates in issue.dates %}
- {% if dates|length > 1 %}
- {{ dates.0 | date:"DATE_FORMAT" }} - {{ dates.1 | date:"DATE_FORMAT" }}
- {% else %}
- {{ dates.0 | date:"DATE_FORMAT" }}
- {% endif %}
- {% endfor %}
- |
- {{ issue.get_status_display }} |
-
-
-
-
-
- {% if settings.PROJECT_SEND_ISSUE %}
-
-
- {% endif %}
- |
-
- {% endfor %}
-
-
-
- {% else %}
-
- {% if can_change_project and not settings.PROJECT_TASKS_SYNC %}
-
-
-
-
-
- {% endif %}
-
- {% if project.tasks.exists %}
-
- {% trans 'No active tasks found.' %}
-
- {% else %}
-
- {% trans 'No tasks are configured for this project.' %}
-
- {% endif %}
-
- {% endif %}
-
-
-
-{% endif %}
diff --git a/rdmo/projects/templates/projects/old/project_detail_issues_help.html b/rdmo/projects/templates/projects/old/project_detail_issues_help.html
deleted file mode 100644
index 284fd3b100..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_issues_help.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{% load i18n %}
-
-
- {% blocktrans trimmed %}
- Tasks are generated automatically from the answers given in the project. On the page of each task you can see which of your answers lead to the activation of the task.
- {% endblocktrans %}
-
diff --git a/rdmo/projects/templates/projects/old/project_detail_memberships.html b/rdmo/projects/templates/projects/old/project_detail_memberships.html
deleted file mode 100644
index 05edbc5a7d..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_memberships.html
+++ /dev/null
@@ -1,75 +0,0 @@
-{% load i18n %}
-{% load rules %}
-{% load static %}
-{% load accounts_tags %}
-
-{% has_perm 'projects.add_membership_object' request.user project as can_add_membership %}
-{% has_perm 'projects.change_membership_object' request.user project as can_change_membership %}
-{% has_perm 'projects.delete_membership_object' request.user project as can_delete_membership %}
-
-{% has_perm 'projects.is_project_owner' request.user project as is_project_owner %}
-
-
-
-
{% trans 'Members' %}
-
- {% include 'projects/old/project_detail_memberships_help.html' %}
-
-
-
- | {% trans 'User' %} |
- {% trans 'E-Mail' %} |
- {% trans 'Role' %} |
-
- {% if can_add_membership %}
-
-
-
- {% endif %}
- |
-
-
- {% for membership in memberships %}
-
- |
- {% full_name membership.user %}
- {% include 'projects/old/project_detail_memberships_socialaccounts.html' %}
- |
-
- {{ membership.user.email }}
- |
-
- {% if membership.project == project %}
- {{ membership.get_role_display }}
- {% else %}
- {{ membership.get_role_display }}
- {% trans 'of' %}
- {{ membership.project.title }}
- {% endif %}
- |
-
- {% if membership.project == project %}
-
- {% if not membership.is_last_owner and can_change_membership %}
-
-
- {% endif %}
-
- {% if membership.user == request.user and not membership.is_last_owner %}
-
-
- {% elif can_change_membership and not membership.is_last_owner %}
-
-
- {% endif %}
-
- {% endif %}
- |
-
- {% endfor %}
-
-
-
diff --git a/rdmo/projects/templates/projects/old/project_detail_memberships_help.html b/rdmo/projects/templates/projects/old/project_detail_memberships_help.html
deleted file mode 100644
index b7a2eb79e9..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_memberships_help.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{% load i18n %}
-
-
- {% blocktrans trimmed %}
- Here you can see who can access the project and invite additional members. You can use the user roles to manage which rights the users have. Unless you are the last owner, you can leave the project with the button next to your name.
- {% endblocktrans %}
-
diff --git a/rdmo/projects/templates/projects/old/project_detail_memberships_socialaccounts.html b/rdmo/projects/templates/projects/old/project_detail_memberships_socialaccounts.html
deleted file mode 100644
index 2ba72de77d..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_memberships_socialaccounts.html
+++ /dev/null
@@ -1,9 +0,0 @@
-{% load static %}
-
-{% for socialaccount in membership.user.socialaccount_set.all %}
-{% if socialaccount.provider == 'orcid' %}
-
-
-
-{% endif %}
-{% endfor %}
diff --git a/rdmo/projects/templates/projects/old/project_detail_sidebar.html b/rdmo/projects/templates/projects/old/project_detail_sidebar.html
deleted file mode 100644
index fc51cee15a..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_sidebar.html
+++ /dev/null
@@ -1,177 +0,0 @@
-{% load i18n %}
-{% load rules %}
-{% load core_tags %}
-
-{% has_perm 'projects.change_project_object' request.user project as can_change_project %}
-{% has_perm 'projects.delete_project_object' request.user project as can_delete_project %}
-{% has_perm 'projects.leave_project_object' request.user project as can_leave_project %}
-
-{% has_perm 'projects.change_value_object' request.user project as can_change_value %}
-
-{% trans 'Options' %}
-
-
-
-
-
-{% if can_leave_project and membership and not membership.is_last_owner %}
-
-{% endif %}
-
-
-
-{% has_perm 'projects.change_visibility_object' request.user project as can_change_visibility %}
-{% if settings.PROJECT_VISIBILITY and can_change_visibility %}
-
-{% endif %}
-
-{% has_perm 'projects.add_membership_object' request.user project as can_add_membership %}
-{% if can_add_membership %}
-
-{% endif %}
-
-{% has_perm 'projects.add_snapshot_object' request.user project as can_add_snapshot %}
-{% if can_add_snapshot %}
-
-{% endif %}
-
-{% has_perm 'projects.add_integration_object' request.user project as can_add_integration %}
-{% if providers and can_add_integration %}
-
-{% endif %}
-
-
-
-{% has_perm 'projects.export_project_object' request.user project as can_export_project %}
-{% if settings.PROJECT_EXPORTS and can_export_project %}
-{% trans 'Export' %}
-
-
- {% for key, label, class in settings.PROJECT_EXPORTS %}
- -
-
- {{ label }}
-
-
- {% endfor %}
-
-{% endif %}
-
-{% has_perm 'projects.import_project_object' request.user project as can_import_project %}
-{% if settings.PROJECT_IMPORTS and can_import_project %}
-{% trans 'Import values' %}
-
-
- -
-
- {% trans 'Import from file' %}
-
- {% url 'project_update_import' project.id as upload_url %}
- {% include 'core/upload_form.html' with upload_url=upload_url label=True %}
-
- {% if settings.NESTED_PROJECTS and ancestors_import %}
- -
-
- {% trans 'Import from parent project' %}
-
- {% include 'projects/project_detail_sidebar_parent_import.html' %}
-
- {% endif %}
- {% if settings.PROJECT_IMPORTS_LIST %}
- -
-
- {% trans 'Import directly' %}
-
-
- {% for key, label, class in settings.PROJECT_IMPORTS %}
- {% if key in settings.PROJECT_IMPORTS_LIST %}
- -
-
- {{ label }}
-
-
- {% endif %}
- {% endfor %}
- {% endif %}
-
-{% endif %}
diff --git a/rdmo/projects/templates/projects/old/project_detail_sidebar_parent_import.html b/rdmo/projects/templates/projects/old/project_detail_sidebar_parent_import.html
deleted file mode 100644
index d9a47c8ff5..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_sidebar_parent_import.html
+++ /dev/null
@@ -1,20 +0,0 @@
-{% load i18n %}
-
-
diff --git a/rdmo/projects/templates/projects/old/project_detail_snapshots.html b/rdmo/projects/templates/projects/old/project_detail_snapshots.html
deleted file mode 100644
index c1353c4c3c..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_snapshots.html
+++ /dev/null
@@ -1,98 +0,0 @@
-{% load i18n %}
-{% load rules %}
-
-{% has_perm 'projects.add_snapshot_object' request.user project as can_add_snapshot %}
-{% has_perm 'projects.change_snapshot_object' request.user project as can_change_snapshot %}
-{% has_perm 'projects.rollback_snapshot_object' request.user project as can_rollback_snapshot %}
-
-{% if snapshots or can_add_snapshot or can_change_snapshot or can_rollback_snapshot %}
-
-
-
-
{% trans 'Snapshots' %}
-
- {% include 'projects/old/project_detail_snapshots_help.html' %}
-
- {% if snapshots %}
-
-
-
- | {% trans 'Snapshot' %} |
- {% trans 'Description' %} |
- {% trans 'Created' %} |
-
- {% if can_add_snapshot %}
-
-
-
- {% endif %}
- |
-
-
- {% for snapshot in snapshots %}
-
- |
- {{ snapshot.title }}
- |
-
- {{ snapshot.description }}
- |
-
- {{ snapshot.created }}
- |
-
-
-
- {% if can_change_snapshot %}
-
-
- {% endif %}
- {% if can_rollback_snapshot %}
-
-
- {% endif %}
-
- {% has_perm 'projects.export_project_object' request.user project as can_export_project %}
- {% if settings.PROJECT_SNAPSHOT_EXPORTS and can_export_project %}
-
-
-
-
-
- |
-
- {% endfor %}
-
-
-
- {% else %}
-
- {% if can_add_snapshot %}
-
-
-
-
-
- {% endif %}
-
-
{% trans 'No snapshots found.' %}
-
- {% endif %}
-
-
-
-{% endif %}
diff --git a/rdmo/projects/templates/projects/old/project_detail_snapshots_help.html b/rdmo/projects/templates/projects/old/project_detail_snapshots_help.html
deleted file mode 100644
index d1578b4b1a..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_snapshots_help.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{% load i18n %}
-
-
- {% blocktrans trimmed %}
- Snapshots allow you to save all responses at a given point in time and preserve a certain stage of the project. Later the snapshot can be used to create views, and the project can also be reset to a previous snapshot if needed.
- {% endblocktrans %}
-
diff --git a/rdmo/projects/templates/projects/old/project_detail_views.html b/rdmo/projects/templates/projects/old/project_detail_views.html
deleted file mode 100644
index 71e15fc71d..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_views.html
+++ /dev/null
@@ -1,64 +0,0 @@
-{% load i18n %}
-{% load rules %}
-{% load core_tags %}
-
-{% has_perm 'projects.change_project_object' request.user project as can_change_project %}
-
-{% if settings.PROJECT_VIEWS and views_available %}
-
-
-
-
{% trans 'Views' %}
-
- {% include 'projects/old/project_detail_views_help.html' %}
-
- {% if views %}
-
-
-
- | {% trans 'View' %} |
- {% trans 'Description' %} |
-
- {% if can_change_project and not settings.PROJECT_VIEWS_SYNC %}
-
-
-
- {% endif %}
- |
-
-
- {% for view in views %}
-
- |
- {{ view.title|markdown }}
- |
- {{ view.help|markdown }} |
-
-
-
- |
-
- {% endfor %}
-
-
-
- {% else %}
-
- {% if can_change_project and not settings.PROJECT_VIEWS_SYNC %}
-
-
-
-
-
- {% endif %}
-
-
- {% trans 'No views are configured for this project.' %}
-
-
- {% endif %}
-
-
-
-{% endif %}
diff --git a/rdmo/projects/templates/projects/old/project_detail_views_help.html b/rdmo/projects/templates/projects/old/project_detail_views_help.html
deleted file mode 100644
index 264e522b01..0000000000
--- a/rdmo/projects/templates/projects/old/project_detail_views_help.html
+++ /dev/null
@@ -1,7 +0,0 @@
-{% load i18n %}
-
-
- {% blocktrans trimmed %}
- Views are created using the answers given in the project and can then be exported in various formats. Initially, all views are empty. Please answer some questions by visiting Answer Questions (at the top of the sidebar).
- {% endblocktrans %}
-
diff --git a/rdmo/projects/templates/projects/overlays/issue_send_issue_attachments_de.html b/rdmo/projects/templates/projects/overlays/issue_send_issue_attachments_de.html
deleted file mode 100644
index 33922e9490..0000000000
--- a/rdmo/projects/templates/projects/overlays/issue_send_issue_attachments_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Hier können Sie eine passende Ansicht im gewünschten Format an Ihre Nachricht anhängen.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/issue_send_issue_attachments_en.html b/rdmo/projects/templates/projects/overlays/issue_send_issue_attachments_en.html
deleted file mode 100644
index c47a3328c6..0000000000
--- a/rdmo/projects/templates/projects/overlays/issue_send_issue_attachments_en.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Here you can attach a suitable view in the desired format to your message.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/issue_send_issue_attachments_fr.html b/rdmo/projects/templates/projects/overlays/issue_send_issue_attachments_fr.html
deleted file mode 100644
index b652e5f27a..0000000000
--- a/rdmo/projects/templates/projects/overlays/issue_send_issue_attachments_fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Ici, vous pouvez joindre à votre message une vue appropriée dans le format souhaité.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/issue_send_issue_attachments_it.html b/rdmo/projects/templates/projects/overlays/issue_send_issue_attachments_it.html
deleted file mode 100644
index 2d96ec65ee..0000000000
--- a/rdmo/projects/templates/projects/overlays/issue_send_issue_attachments_it.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Qui puoi allegare al tuo messaggio una vista adatta nel formato desiderato.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/issue_send_issue_message_de.html b/rdmo/projects/templates/projects/overlays/issue_send_issue_message_de.html
deleted file mode 100644
index bb72c1292a..0000000000
--- a/rdmo/projects/templates/projects/overlays/issue_send_issue_message_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- In den Aufgaben wird oft zu einer Kontaktaufnahme mit einer anderen Abteilung aufgefordert. Hier finden Sie eine vorgefertigte Nachricht mit den betreffenden Ansprechpartnerinnen bzw. Ansprechpartnern als Adressaten, die Sie als E-Mail versenden können.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/issue_send_issue_message_en.html b/rdmo/projects/templates/projects/overlays/issue_send_issue_message_en.html
deleted file mode 100644
index 71532d6e0b..0000000000
--- a/rdmo/projects/templates/projects/overlays/issue_send_issue_message_en.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- The tasks often ask you to contact another department. Here you will find a ready-made message with the relevant contact persons as recipients, which you can send here as an e-mail.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/issue_send_issue_message_fr.html b/rdmo/projects/templates/projects/overlays/issue_send_issue_message_fr.html
deleted file mode 100644
index 8df168c0b7..0000000000
--- a/rdmo/projects/templates/projects/overlays/issue_send_issue_message_fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Les tâches vous demandent souvent de contacter un autre service. Vous trouverez ici un message prêt à l'emploi avec les personnes de contact concernées comme destinataires, que vous pouvez envoyer ici comme un e-mail.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/issue_send_issue_message_it.html b/rdmo/projects/templates/projects/overlays/issue_send_issue_message_it.html
deleted file mode 100644
index c47b46ae84..0000000000
--- a/rdmo/projects/templates/projects/overlays/issue_send_issue_message_it.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- I compiti spesso ti chiedono di contattare un altro dipartimento. Qui troverai un messaggio pronto con le persone di contatto interessate come destinatari, che puoi inviare qui come e-mail.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/issue_send_support_info_de.html b/rdmo/projects/templates/projects/overlays/issue_send_support_info_de.html
deleted file mode 100644
index d771642d29..0000000000
--- a/rdmo/projects/templates/projects/overlays/issue_send_support_info_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Falls Sie weitere Fragen haben, wenden Sie sich gern an Ihre lokale Kontaktperson zum Thema Forschungsdaten.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/issue_send_support_info_en.html b/rdmo/projects/templates/projects/overlays/issue_send_support_info_en.html
deleted file mode 100644
index 4f709a2593..0000000000
--- a/rdmo/projects/templates/projects/overlays/issue_send_support_info_en.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- If you have further questions, please do not hesitate to ask your local contact person for research data management.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/issue_send_support_info_fr.html b/rdmo/projects/templates/projects/overlays/issue_send_support_info_fr.html
deleted file mode 100644
index 0369a5fce5..0000000000
--- a/rdmo/projects/templates/projects/overlays/issue_send_support_info_fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Si vous avez d'autres questions, n'hésitez pas à vous adresser à votre personne de contact locale pour la gestion des données de recherche.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/issue_send_support_info_it.html b/rdmo/projects/templates/projects/overlays/issue_send_support_info_it.html
deleted file mode 100644
index dc6562253b..0000000000
--- a/rdmo/projects/templates/projects/overlays/issue_send_support_info_it.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Per ulteriori domande, non esitate a rivolgervi al vostro referente locale per la gestione dei dati di ricerca.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_export_project_de.html b/rdmo/projects/templates/projects/overlays/project_export_project_de.html
deleted file mode 100644
index ac7ef1272d..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_export_project_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Sie können Ihr Projekt hier exportieren, falls Sie es zu einem späteren Zeitpunkt in RDMO importieren oder zu einer anderen RDMO Instanz mitnehmen möchten.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_export_project_en.html b/rdmo/projects/templates/projects/overlays/project_export_project_en.html
deleted file mode 100644
index b7781cafca..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_export_project_en.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- You can export your project here if you want to import it into RDMO at a later date or to another RDMO instance.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_export_project_fr.html b/rdmo/projects/templates/projects/overlays/project_export_project_fr.html
deleted file mode 100644
index c8a1c58ac2..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_export_project_fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Vous pouvez exporter votre projet ici si vous souhaitez l'importer dans RDMO à une date ultérieure ou dans une autre instance de RDMO.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_export_project_it.html b/rdmo/projects/templates/projects/overlays/project_export_project_it.html
deleted file mode 100644
index 6a0a92e85b..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_export_project_it.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Puoi esportare qui il tuo progetto se vuoi importarlo in RDMO in una data successiva o in un'altra istanza di RDMO.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_import_project_de.html b/rdmo/projects/templates/projects/overlays/project_import_project_de.html
deleted file mode 100644
index 8a9d54ae5d..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_import_project_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Sollten Sie bereits ein Projekt in RDMO angelegt und exportiert haben und möchten es an dieser Stelle hinzufügen, so können Sie hier ein vorhandenes Projekt importieren.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_import_project_en.html b/rdmo/projects/templates/projects/overlays/project_import_project_en.html
deleted file mode 100644
index 5af51471bd..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_import_project_en.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- If you have already created and exported a project in RDMO and would like to add it, you can import an existing project here.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_import_project_fr.html b/rdmo/projects/templates/projects/overlays/project_import_project_fr.html
deleted file mode 100644
index 86d9aef80c..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_import_project_fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Si vous avez déjà créé et exporté un projet dans RDMO et que vous souhaitez l'ajouter, vous pouvez importer un projet existant ici.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_import_project_it.html b/rdmo/projects/templates/projects/overlays/project_import_project_it.html
deleted file mode 100644
index 4ebc1751c9..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_import_project_it.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Se hai già creato ed esportato un progetto in RDMO e vuoi aggiungerlo, puoi importare un progetto esistente qui.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_catalog_de.html b/rdmo/projects/templates/projects/overlays/project_project_catalog_de.html
deleted file mode 100644
index 633f06d28e..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_catalog_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Sofern Sie berechtigt sind, können Sie hier die Auswahl des Fragenkatalogs ändern.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_catalog_en.html b/rdmo/projects/templates/projects/overlays/project_project_catalog_en.html
deleted file mode 100644
index 0533b371d5..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_catalog_en.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- With the right permissions, you can change the selection of the question catalog here.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_catalog_fr.html b/rdmo/projects/templates/projects/overlays/project_project_catalog_fr.html
deleted file mode 100644
index 3b601861f6..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_catalog_fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Avec les bonnes permissions, vous pouvez modifier la sélection du catalogue de questions ici.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_catalog_it.html b/rdmo/projects/templates/projects/overlays/project_project_catalog_it.html
deleted file mode 100644
index 2d6468f5d1..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_catalog_it.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Con i permessi giusti, puoi cambiare la selezione del catalogo delle domande qui.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_issues_de.html b/rdmo/projects/templates/projects/overlays/project_project_issues_de.html
deleted file mode 100644
index 65f9c23a11..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_issues_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Aufgaben werden automatisch aus Ihren innerhalb der Fragenkataloge gegebenen Antworten generiert. Auf der Seite jeder Aufgabe können Sie sehen, welche Ihrer Antworten zur Aktivierung der Aufgabe führen. Außerdem können Sie den Status Ihrer zu erledigenden Aufgaben mit dem Stiftsymbol ändern, wenn Sie eine Aufgabe begonnen oder beendet haben. Mit dem Papierflieger-Symbol können Sie eine E-Mail schicken und ggf. eine Ansicht im gewünschten Format als Anhang anfügen. Zu Beginn ist die Übersicht der Aufgaben leer.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_issues_en.html b/rdmo/projects/templates/projects/overlays/project_project_issues_en.html
deleted file mode 100644
index 69a80a5f58..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_issues_en.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Tasks are automatically generated from the answers you give in the questionnaires. On the page of each task you can see which of your answers lead to the activation of the task. You can also change the status of your to-do tasks with the pencil icon when you have started or finished a task. With the paper airplane icon you can send an e-mail and attach a view in the desired format, if necessary. At the beginning, the overview of the tasks is empty.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_issues_fr.html b/rdmo/projects/templates/projects/overlays/project_project_issues_fr.html
deleted file mode 100644
index f49a51c71b..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_issues_fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Les tâches sont générées automatiquement à partir des réponses que vous donnez dans les questionnaires. Sur la page de chaque tâche, vous pouvez voir lesquelles de vos réponses conduisent à l'activation de la tâche. Vous pouvez également modifier le statut de vos tâches à l'aide de l'icône en forme de crayon lorsque vous avez commencé ou terminé une tâche. Avec l'icône de l'avion en papier, vous pouvez envoyer un e-mail et joindre une vue dans le format souhaité, si nécessaire. Au début, l'aperçu des tâches est vide.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_issues_it.html b/rdmo/projects/templates/projects/overlays/project_project_issues_it.html
deleted file mode 100644
index 9600829440..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_issues_it.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- I compiti sono generati automaticamente dalle risposte che dai nei questionari. Nella pagina di ogni compito puoi vedere quali delle tue risposte portano all'attivazione del compito. Puoi anche cambiare lo stato dei tuoi compiti con l'icona della matita quando hai iniziato o finito un compito. Con l'icona dell'aeroplano di carta puoi inviare una e-mail e allegare una vista nel formato desiderato, se necessario. All'inizio, la panoramica dei compiti è vuota.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_memberships_de.html b/rdmo/projects/templates/projects/overlays/project_project_memberships_de.html
deleted file mode 100644
index 7b04d3aa96..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_memberships_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Hier können Sie sehen, wer auf das Projekt zugreifen kann und weitere Mitglieder einladen. Über die Rollen können Sie verwalten, welche Rechte die Nutzenden haben. Mit dem Kreuzsymbol können Mitgliedschaften entfernt werden.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_memberships_en.html b/rdmo/projects/templates/projects/overlays/project_project_memberships_en.html
deleted file mode 100644
index 681b0d2e1f..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_memberships_en.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Here you can see who can access the project and invite additional members. The rights of the use can be managed by the roles. Members can be removed with the cross symbol.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_memberships_fr.html b/rdmo/projects/templates/projects/overlays/project_project_memberships_fr.html
deleted file mode 100644
index 1586272dab..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_memberships_fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Ici, vous pouvez voir qui peut accéder au projet et inviter des membres supplémentaires. Les droits d'utilisation peuvent être gérés par les rôles. Les membres peuvent être supprimés à l'aide du symbole de la croix.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_memberships_it.html b/rdmo/projects/templates/projects/overlays/project_project_memberships_it.html
deleted file mode 100644
index 950b1d04dc..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_memberships_it.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Qui puoi vedere chi può accedere al progetto e invitare altri membri. I diritti di utilizzo possono essere gestiti dai ruoli. I membri possono essere rimossi con il simbolo della croce.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_questions_de.html b/rdmo/projects/templates/projects/overlays/project_project_questions_de.html
deleted file mode 100644
index 6455b45628..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_questions_de.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- Klicken Sie an dieser Stelle "Fragen beantworten", um zum Interview des ausgewählten
- Fragenkatalogs zu gelangen. Ihre Antworten werden dazu verwendet, individuelle Aufgaben
- für Sie zu erstellen, die Sie in der Aufgabenübersicht finden, sowie um vorgefertigte
- Vorlagen auszufüllen, die Sie für die weitere Verwendung exportieren können.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_questions_en.html b/rdmo/projects/templates/projects/overlays/project_project_questions_en.html
deleted file mode 100644
index 7f4d5988f7..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_questions_en.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- Click "Answer questions" at this point to go to the interview for the selected questionnaire.
- Your answers will be used to create individual tasks for you, which you will find in
- the task overview, as well as to fill in ready-made templates that you can export for further use.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_questions_fr.html b/rdmo/projects/templates/projects/overlays/project_project_questions_fr.html
deleted file mode 100644
index 57b1190325..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_questions_fr.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- Cliquez sur "Répondre aux questions" à ce stade pour accéder à l'interview du questionnaire sélectionné.
- Vos réponses seront utilisées pour créer des tâches individuelles pour vous, que vous trouverez dans
- l'aperçu des tâches, ainsi que pour remplir des modèles prêts à l'emploi que vous pouvez exporter pour une utilisation ultérieure.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_questions_it.html b/rdmo/projects/templates/projects/overlays/project_project_questions_it.html
deleted file mode 100644
index 8b48ea1f1c..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_questions_it.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- Clicca a questo punto su "Rispondi alle domande" per andare all'intervista del questionario selezionato.
- Le tue risposte saranno utilizzate per creare compiti individuali per te, che troverai nella
- nella panoramica dei compiti, così come per compilare modelli già pronti che puoi esportare per un ulteriore utilizzo.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_snapshots_de.html b/rdmo/projects/templates/projects/overlays/project_project_snapshots_de.html
deleted file mode 100644
index 625a341b76..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_snapshots_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Mit Snapshots können Sie alle Antworten zu einem bestimmten Zeitpunkt speichern und eine bestimmte Phase des Projekts einfrieren. Später kann der Snapshot zum Erstellen von Ansichten verwendet und das Projekt bei Bedarf auch auf einen früheren Snapshot zurückgesetzt werden.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_snapshots_en.html b/rdmo/projects/templates/projects/overlays/project_project_snapshots_en.html
deleted file mode 100644
index 37673ac882..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_snapshots_en.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Snapshots allow you to save all answers at a certain point in time and freeze a certain stage of the project. Later, the snapshot can be used to create views and the project can also be reset to a previous snapshot if needed.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_snapshots_fr.html b/rdmo/projects/templates/projects/overlays/project_project_snapshots_fr.html
deleted file mode 100644
index 0eee3b60b7..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_snapshots_fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Les instantanés vous permettent de sauvegarder toutes les réponses à un moment donné et de geler une certaine étape du projet. Plus tard, l'instantané peut être utilisé pour créer des vues et le projet peut également être réinitialisé à un instantané précédent si nécessaire.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_snapshots_it.html b/rdmo/projects/templates/projects/overlays/project_project_snapshots_it.html
deleted file mode 100644
index 7b7af42ca1..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_snapshots_it.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Le istantanee permettono di salvare tutte le risposte ad un certo punto nel tempo e congelare una certa fase del progetto. Più tardi, l'istantanea può essere usata per creare delle viste e il progetto può anche essere riportato a un'istantanea precedente, se necessario.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_views_de.html b/rdmo/projects/templates/projects/overlays/project_project_views_de.html
deleted file mode 100644
index 1207d383cf..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_views_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Bei den Ansichten handelt es sich um Vorlagen für Formulare/Dokumente. Die Ansichten werden anhand der im Fragenkatalog gegebenen Antworten automatisch ausgefüllt und können anschließend in verschiedenen Formaten exportiert und versendet werden. Zu Beginn sind alle Ansichten leer. Damit die Vorlagen vollständig ausgefüllt werden, müssen alle relevanten Fragen beantwortet werden. Antworten, die in mehreren Vorlagen zur Anwendung kommen, werden automatisch in alle Fragenkataloge und Ansichten übernommen.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_views_en.html b/rdmo/projects/templates/projects/overlays/project_project_views_en.html
deleted file mode 100644
index edd63cc9f6..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_views_en.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- The views are templates for forms/documents. The views are automatically filled in based on the answers given in the questionnaire and can then be exported and sent in different formats. At the beginning, all views are empty. In order for the templates to be filled in completely, all relevant questions must be answered. Answers that are used in several templates are automatically transferred to all question catalogues and views.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_views_fr.html b/rdmo/projects/templates/projects/overlays/project_project_views_fr.html
deleted file mode 100644
index 1b287b9eb6..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_views_fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Les vues sont des modèles de formulaires/documents. Les vues sont automatiquement remplies sur la base des réponses données dans le questionnaire et peuvent ensuite être exportées et envoyées dans différents formats. Au départ, toutes les vues sont vides. Pour que les modèles soient complètement remplis, il faut répondre à toutes les questions pertinentes. Les réponses qui sont utilisées dans plusieurs modèles sont automatiquement transférées à tous les catalogues de questions et à toutes les vues.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_project_views_it.html b/rdmo/projects/templates/projects/overlays/project_project_views_it.html
deleted file mode 100644
index db979c3d53..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_project_views_it.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Le viste sono modelli di moduli/documenti. Le viste sono compilate automaticamente in base alle risposte date nel questionario e possono poi essere esportate e inviate in diversi formati. All'inizio, tutte le viste sono vuote. Affinché i modelli siano compilati completamente, è necessario rispondere a tutte le domande pertinenti. Le risposte che vengono utilizzate in diversi modelli vengono automaticamente trasferite a tutti i cataloghi di domande e alle viste.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_support_info_de.html b/rdmo/projects/templates/projects/overlays/project_support_info_de.html
deleted file mode 100644
index d771642d29..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_support_info_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Falls Sie weitere Fragen haben, wenden Sie sich gern an Ihre lokale Kontaktperson zum Thema Forschungsdaten.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_support_info_en.html b/rdmo/projects/templates/projects/overlays/project_support_info_en.html
deleted file mode 100644
index 4f709a2593..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_support_info_en.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- If you have further questions, please do not hesitate to ask your local contact person for research data management.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_support_info_fr.html b/rdmo/projects/templates/projects/overlays/project_support_info_fr.html
deleted file mode 100644
index 0369a5fce5..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_support_info_fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Si vous avez d'autres questions, n'hésitez pas à vous adresser à votre personne de contact locale pour la gestion des données de recherche.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/project_support_info_it.html b/rdmo/projects/templates/projects/overlays/project_support_info_it.html
deleted file mode 100644
index dc6562253b..0000000000
--- a/rdmo/projects/templates/projects/overlays/project_support_info_it.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Per ulteriori domande, non esitate a rivolgervi al vostro referente locale per la gestione dei dati di ricerca.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_create_project_de.html b/rdmo/projects/templates/projects/overlays/projects_create_project_de.html
deleted file mode 100644
index e01dceab88..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_create_project_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Als ersten Schritt können Sie mit diesem Link ein neues Projekt anlegen.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_create_project_en.html b/rdmo/projects/templates/projects/overlays/projects_create_project_en.html
deleted file mode 100644
index 611353a84f..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_create_project_en.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- As a first step you can create a new project using this link.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_create_project_fr.html b/rdmo/projects/templates/projects/overlays/projects_create_project_fr.html
deleted file mode 100644
index ea6bada50a..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_create_project_fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Dans un premier temps, vous pouvez créer un nouveau projet en utilisant ce lien.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_create_project_it.html b/rdmo/projects/templates/projects/overlays/projects_create_project_it.html
deleted file mode 100644
index 671269e6fb..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_create_project_it.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Come primo passo puoi creare un nuovo progetto usando questo link.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_import_project_de.html b/rdmo/projects/templates/projects/overlays/projects_import_project_de.html
deleted file mode 100644
index 2b53a274d2..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_import_project_de.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- Sollten Sie bereits ein Projekt in RDMO angelegt und exportiert haben
- und möchten es Ihrer Projektliste an dieser Stelle hinzufügen,
- so können Sie hier ein vorhandenes Projekt importieren.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_import_project_en.html b/rdmo/projects/templates/projects/overlays/projects_import_project_en.html
deleted file mode 100644
index 241f02018c..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_import_project_en.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- If you have already created and exported a project in
- RDMO and would like to add it to your project list,
- you can import an existing project here.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_import_project_fr.html b/rdmo/projects/templates/projects/overlays/projects_import_project_fr.html
deleted file mode 100644
index a4451073f9..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_import_project_fr.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- Si vous avez déjà créé et exporté un projet dans
- RDMO et que vous souhaitez l'ajouter à votre liste de projets,
- vous pouvez importer un projet existant ici.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_import_project_it.html b/rdmo/projects/templates/projects/overlays/projects_import_project_it.html
deleted file mode 100644
index 29e4155b40..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_import_project_it.html
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
- Se hai già creato ed esportato un progetto in
- RDMO e vuoi aggiungerlo alla tua lista di progetti
- puoi importare un progetto esistente qui.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_projects_table_de.html b/rdmo/projects/templates/projects/overlays/projects_projects_table_de.html
deleted file mode 100644
index 4da8e9b764..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_projects_table_de.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- Hier finden Sie alle Ihre selbst angelegten Projekte oder Projekte denen Sie hinzugefügt worden sind.
- Zu Beginn wird diese Übersicht leer sein. Die angegebene Rolle (Besitzer, Manager, Autor, Gast) definiert
- Ihre Zugriffsbeschränkung auf das Projekt. Sie können mit Hilfe der Symbole rechts in der jeweiligen Zeile
- die Projekte bearbeiten oder löschen.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_projects_table_en.html b/rdmo/projects/templates/projects/overlays/projects_projects_table_en.html
deleted file mode 100644
index 2de4c71995..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_projects_table_en.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- Here you will find all your self-created projects, as well as projects to which you have been added.
- At first, this overview will be empty. The specified role (owner, manager, author, guest) defines
- your access restriction to the project. You can edit or delete the projects with the help
- of the symbols on the right in the respective line.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_projects_table_fr.html b/rdmo/projects/templates/projects/overlays/projects_projects_table_fr.html
deleted file mode 100644
index e156efe494..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_projects_table_fr.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- Vous trouverez ici tous les projets que vous avez créés vous-même, ainsi que les projets auxquels vous avez été ajouté.
- Au début, cet aperçu sera vide. Le rôle spécifié (propriétaire, gestionnaire, auteur, invité) définit
- votre restriction d'accès au projet. Vous pouvez éditer ou supprimer les projets à l'aide de
- des symboles situés à droite dans la ligne correspondante.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_projects_table_it.html b/rdmo/projects/templates/projects/overlays/projects_projects_table_it.html
deleted file mode 100644
index c38868c41e..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_projects_table_it.html
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- Qui troverai tutti i tuoi progetti creati da te, così come i progetti a cui sei stato aggiunto.
- All'inizio questa panoramica sarà vuota. Il ruolo specificato (proprietario, manager, autore, ospite) definisce
- le tue restrizioni di accesso al progetto. Puoi modificare o cancellare i progetti con l'aiuto
- dei simboli a destra nella rispettiva riga.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_support_info_de.html b/rdmo/projects/templates/projects/overlays/projects_support_info_de.html
deleted file mode 100644
index d771642d29..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_support_info_de.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Falls Sie weitere Fragen haben, wenden Sie sich gern an Ihre lokale Kontaktperson zum Thema Forschungsdaten.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_support_info_en.html b/rdmo/projects/templates/projects/overlays/projects_support_info_en.html
deleted file mode 100644
index 4f709a2593..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_support_info_en.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- If you have further questions, please do not hesitate to ask your local contact person for research data management.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_support_info_fr.html b/rdmo/projects/templates/projects/overlays/projects_support_info_fr.html
deleted file mode 100644
index 0369a5fce5..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_support_info_fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Si vous avez d'autres questions, n'hésitez pas à vous adresser à votre personne de contact locale pour la gestion des données de recherche.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/overlays/projects_support_info_it.html b/rdmo/projects/templates/projects/overlays/projects_support_info_it.html
deleted file mode 100644
index dc6562253b..0000000000
--- a/rdmo/projects/templates/projects/overlays/projects_support_info_it.html
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- Per ulteriori domande, non esitate a rivolgervi al vostro referente locale per la gestione dei dati di ricerca.
-
- {% include 'overlays/buttons.html'%}
-
diff --git a/rdmo/projects/templates/projects/project_confirm_cancel.html b/rdmo/projects/templates/projects/project_confirm_cancel.html
deleted file mode 100644
index 6b614be98d..0000000000
--- a/rdmo/projects/templates/projects/project_confirm_cancel.html
+++ /dev/null
@@ -1,17 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block page %}
-
- {% trans 'Cancel invite' %}
-
-
- {% blocktrans trimmed with project_title=invite.project.title %}
- You are about to cancel the invite to {{ project_title }}.
- {% endblocktrans %}
-
-
- {% bootstrap_form submit=_('Cancel invite') %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/project_confirm_delete.html b/rdmo/projects/templates/projects/project_confirm_delete.html
deleted file mode 100644
index ac711d3dff..0000000000
--- a/rdmo/projects/templates/projects/project_confirm_delete.html
+++ /dev/null
@@ -1,35 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block page %}
-
- {% trans "Delete project" %}
-
-
- {% blocktrans trimmed %}
- You are about to permanently delete the project {{ object }}.
- {% endblocktrans %}
-
- {% if object.get_children %}
- {% if object.parent %}
-
- {% blocktrans with parent=object.parent trimmed %}
- Descendant projects will be moved to the project {{ parent }}.
- {% endblocktrans %}
-
- {% else %}
-
- {% trans 'Descendant projects will be preserved.' %}
-
- {% endif %}
- {% endif %}
-
-
-
- {% trans 'This action cannot be undone!' %}
-
-
- {% bootstrap_delete_form submit=_('Delete project') %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/project_confirm_leave.html b/rdmo/projects/templates/projects/project_confirm_leave.html
deleted file mode 100644
index d28e8fc02b..0000000000
--- a/rdmo/projects/templates/projects/project_confirm_leave.html
+++ /dev/null
@@ -1,21 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block page %}
-
- {% trans "Leave project" %}
-
-
- {% blocktrans trimmed %}
- You are about to leave the project {{ object }}.
- {% endblocktrans %}
-
-
-
- {% trans 'If you want to access this project again, somebody will need to invite you!' %}
-
-
- {% bootstrap_form submit=_('Leave project') %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/project_detail.html b/rdmo/projects/templates/projects/project_detail.html
index c7bbcd9894..a7b4b696e5 100644
--- a/rdmo/projects/templates/projects/project_detail.html
+++ b/rdmo/projects/templates/projects/project_detail.html
@@ -1,4 +1,4 @@
-{% extends 'core/bs53/base.html' %}
+{% extends 'core/base.html' %}
{% load static %}
{% block head %}
@@ -6,15 +6,12 @@
{% endblock %}
{% block css %}
-
-
{{ block.super }}
{% endblock %}
{% block js %}
-
-
+ {{ block.super }}
{% endblock %}
diff --git a/rdmo/projects/templates/projects/project_detail_header_visibility.html b/rdmo/projects/templates/projects/project_detail_header_visibility.html
deleted file mode 100644
index d0133973ae..0000000000
--- a/rdmo/projects/templates/projects/project_detail_header_visibility.html
+++ /dev/null
@@ -1,14 +0,0 @@
-{% load i18n %}
-{% load core_tags %}
-
-{% if can_change_visibility %}
-
-
-
-
-
-{% endif %}
-
-
-{{ project.visibility.get_help_display }}
-
diff --git a/rdmo/projects/templates/projects/project_error.html b/rdmo/projects/templates/projects/project_error.html
index 86eb8a31e9..2a5c9f47c6 100644
--- a/rdmo/projects/templates/projects/project_error.html
+++ b/rdmo/projects/templates/projects/project_error.html
@@ -11,14 +11,4 @@ {% trans 'No catalog configured' %}
{% trans "The project does appear not to have a question catalog. Please update your project." %}
-
- {% trans "You will be redirected shortly." %}
-
-
-
-
{% endblock%}
diff --git a/rdmo/projects/templates/projects/project_form.html b/rdmo/projects/templates/projects/project_form.html
deleted file mode 100644
index 9fbd90f914..0000000000
--- a/rdmo/projects/templates/projects/project_form.html
+++ /dev/null
@@ -1,49 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block head %}
-
-{% endblock %}
-
-{% block page %}
-
-{% if object %}
-
- {% if form.fields.catalogs %}
-
- {% trans 'Update project catalog' %}
-
- {% elif form.fields.tasks %}
-
- {% trans 'Update project tasks' %}
-
- {% trans 'Please note that their status is lost when you remove tasks from the project.' %}
-
- {% bootstrap_form submit=_('Save tasks') %}
-
- {% elif form.fields.views %}
-
- {% trans 'Update project views' %}
- {% bootstrap_form submit=_('Save views') %}
-
- {% else %}
-
- {% trans 'Update project information' %}
- {% bootstrap_form submit=_('Save project') %}
-
- {% endif %}
-
-{% else %}
-
- {% trans 'Create new project' %}
-
- {% bootstrap_form submit=_('Create project') %}
-
-{% endif %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/project_form_visibility.html b/rdmo/projects/templates/projects/project_form_visibility.html
deleted file mode 100644
index 92fcc079c3..0000000000
--- a/rdmo/projects/templates/projects/project_form_visibility.html
+++ /dev/null
@@ -1,48 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block page %}
-
-
- {% if object.visibility %}
- {% trans 'Update project visibility' %}
- {% else %}
- {% trans 'Make project visible' %}
- {% endif %}
-
-
-
- {% blocktrans trimmed %}
- Projects can be made visible to all users, for example to be used as a template.
- When a project is made visible, users can access it as if they were in the guest role.
- {% endblocktrans %}
-
-
- {% if settings.MULTISITE and object.visibility %}
-
- {% if object.visibility.sites.all %}
-
- {% blocktrans trimmed with object.visibility.sites.all|join:', ' as site_names %}
- Currently, the project is available to users on {{ site_names }}.
- {% endblocktrans %}
-
- {% else %}
-
- {% blocktrans trimmed %}
- Currently, the project is accessible to users on all sites.
- {% endblocktrans %}
-
- {% endif %}
-
- {% endif %}
-
- {% if submit_label and delete_label %}
- {% bootstrap_form submit=submit_label delete=delete_label %}
- {% elif submit_label %}
- {% bootstrap_form submit=submit_label %}
- {% elif delete_label %}
- {% bootstrap_form delete=delete_label %}
- {% endif %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/project_import.html b/rdmo/projects/templates/projects/project_import.html
deleted file mode 100644
index ddfe0a6819..0000000000
--- a/rdmo/projects/templates/projects/project_import.html
+++ /dev/null
@@ -1,171 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block content %}
-
-
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/project_import_form.html b/rdmo/projects/templates/projects/project_import_form.html
deleted file mode 100644
index 079e3d63a9..0000000000
--- a/rdmo/projects/templates/projects/project_import_form.html
+++ /dev/null
@@ -1,20 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block page %}
-
- {% if not current_project %}
-
- {% blocktrans %}Create project from {{ source_title }}{% endblocktrans %}
-
-
- {% else %}
-
- {% blocktrans %}Import from {{ source_title }}{% endblocktrans %}
-
- {% endif %}
-
- {% bootstrap_form submit=_('Import values') %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/project_interview.html b/rdmo/projects/templates/projects/project_interview.html
index 7e94ea0096..ebb548a062 100644
--- a/rdmo/projects/templates/projects/project_interview.html
+++ b/rdmo/projects/templates/projects/project_interview.html
@@ -1,7 +1,5 @@
-{% extends 'core/page.html' %}
+{% extends 'core/base.html' %}
{% load static %}
-{% load i18n %}
-{% load core_tags %}
{% block head %}
@@ -18,13 +16,7 @@
{% endblock %}
-{% block sidebar %}
-
-
-
-{% endblock %}
-
-{% block page %}
+{% block content %}
diff --git a/rdmo/projects/templates/projects/project_view.html b/rdmo/projects/templates/projects/project_view.html
deleted file mode 100644
index 4250b5bd53..0000000000
--- a/rdmo/projects/templates/projects/project_view.html
+++ /dev/null
@@ -1,97 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block head %}
-
-{% endblock %}
-
-{% block navbar %}
-
- {% trans 'Back to project' %}
-
-{% endblock %}
-
-{% block sidebar %}
-
- {% if snapshots %}
-
- {% trans 'Snapshots' %}
-
-
-
- {% endif %}
-
- {% trans 'Options' %}
-
-
-
- {% trans 'Export' %}
-
-
- {% for format, text in export_formats %}
- -
- {% if current_snapshot %}
-
- {{ text }}
-
- {% else %}
-
- {{ text }}
-
- {% endif %}
-
- {% endfor %}
-
-
- {% if attachments %}
-
- {% trans 'Attachments' %}
-
-
- {% endif %}
-
-{% endblock %}
-
-{% block page %}
-
-{% if rendered_view %}
- {{ rendered_view }}
-{% else %}
- {% trans 'Error' %}
-
-
- {% trans 'There has been a problem creating the view. Please contact support.' %}
-
-{% endif %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/projects.html b/rdmo/projects/templates/projects/projects.html
index b8fa1eecdb..ad58f7a37a 100644
--- a/rdmo/projects/templates/projects/projects.html
+++ b/rdmo/projects/templates/projects/projects.html
@@ -1,20 +1,17 @@
-{% extends 'core/bs53/base.html' %}
+{% extends 'core/base.html' %}
{% load static %}
{% block head %}
-
+
{% endblock %}
{% block css %}
-
-
{{ block.super }}
{% endblock %}
{% block js %}
-
-
+ {{ block.super }}
{% endblock %}
diff --git a/rdmo/projects/templates/projects/projects_pagination.html b/rdmo/projects/templates/projects/projects_pagination.html
deleted file mode 100644
index d0c6e28250..0000000000
--- a/rdmo/projects/templates/projects/projects_pagination.html
+++ /dev/null
@@ -1,23 +0,0 @@
-{% load i18n %}
-
- {% if page_obj.has_other_pages %}
-
-
-
- {% endif %}
diff --git a/rdmo/projects/templates/projects/snapshot_form.html b/rdmo/projects/templates/projects/snapshot_form.html
deleted file mode 100644
index 65fbc4157c..0000000000
--- a/rdmo/projects/templates/projects/snapshot_form.html
+++ /dev/null
@@ -1,21 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block page %}
-
-{% if object %}
-
- {% trans 'Update snapshot' %}
-
- {% bootstrap_form submit=_('Update snapshot') %}
-
-{% else %}
-
- {% trans 'Create new snapshot' %}
-
- {% bootstrap_form submit=_('Create snapshot') %}
-
-{% endif %}
-
-{% endblock %}
diff --git a/rdmo/projects/templates/projects/snapshot_rollback.html b/rdmo/projects/templates/projects/snapshot_rollback.html
deleted file mode 100644
index 2d5516f4c0..0000000000
--- a/rdmo/projects/templates/projects/snapshot_rollback.html
+++ /dev/null
@@ -1,19 +0,0 @@
-{% extends 'core/page.html' %}
-{% load i18n %}
-{% load core_tags %}
-
-{% block page %}
-
- {% trans "Rollback to snapshot" %}
-
-
- {% blocktrans with title=snapshot.title %}You are about to reset all values to the snapshot {{ title }}. All newer values will be deleted.{% endblocktrans %}
-
-
-
- {% trans 'This action cannot be undone!' %}
-
-
- {% bootstrap_delete_form submit=_('Rollback') %}
-
-{% endblock %}
diff --git a/rdmo/projects/templatetags/__init__.py b/rdmo/projects/templatetags/__init__.py
deleted file mode 100644
index e69de29bb2..0000000000
diff --git a/rdmo/projects/templatetags/projects_tags.py b/rdmo/projects/templatetags/projects_tags.py
deleted file mode 100644
index d41dae22d6..0000000000
--- a/rdmo/projects/templatetags/projects_tags.py
+++ /dev/null
@@ -1,57 +0,0 @@
-from django import template
-from django.template.defaultfilters import stringfilter
-from django.utils.safestring import mark_safe
-from django.utils.translation import gettext as _
-
-from ..models import Membership
-
-register = template.Library()
-
-
-@register.simple_tag()
-def projects_indent(level):
- string = ''
- if level > 0:
- for _ in range(level - 1):
- string += ' '
- string += '• '
-
- return mark_safe('' + string + '')
-
-
-@register.simple_tag()
-def project_progress(project):
- if project.progress_count is None or project.progress_total is None:
- return ''
-
- return _('%(count)s of %(total)s') % {
- 'count': project.progress_count,
- 'total': project.progress_total
- }
-
-@register.simple_tag()
-def project_progress_ratio(project):
- if project.progress_count is None or project.progress_total is None:
- return ''
-
- try:
- ratio = project.progress_count / project.progress_total
- except ZeroDivisionError:
- ratio = 0
-
- return f'{ratio:.0%}'
-
-
-@register.simple_tag()
-def project_progress_text(project):
- progress = project_progress(project)
- if progress:
- return _('(%(progress)s progress)') % {'progress': progress}
- else:
- return ''
-
-
-@register.filter()
-@stringfilter
-def projects_role(role):
- return dict(Membership.ROLE_CHOICES).get(role, '')
diff --git a/rdmo/projects/tests/test_export.py b/rdmo/projects/tests/test_export.py
deleted file mode 100644
index d52d0bfa37..0000000000
--- a/rdmo/projects/tests/test_export.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import os
-
-from django.conf import settings
-from django.urls import reverse
-
-# def test_project_answers_export_html(db, client):
-# client.login(username='admin', password='admin')
-
-# url = reverse('project_answers_export', args=[1, 'html'])
-# response = client.get(url)
-
-# assert response.status_code == 200
-
-# test_file = os.path.join(settings.BASE_DIR, 'export', 'project.html')
-# for a, b in zip(response.content.decode().splitlines(), open(test_file).read().splitlines(), strict=True):
-# assert a == b
-
-
-def test_project_export_csv(db, client):
- client.login(username='admin', password='admin')
-
- url = reverse('project_export', args=[1, 'csvcomma'])
- response = client.get(url)
-
- assert response.status_code == 200
-
- test_file = os.path.join(settings.BASE_DIR, 'export', 'project.csv')
- for a, b in zip(response.content.decode().splitlines(), open(test_file).read().splitlines(), strict=True):
- assert a == b
diff --git a/rdmo/projects/tests/test_view_integration.py b/rdmo/projects/tests/test_view_integration.py
deleted file mode 100644
index 711b7790ee..0000000000
--- a/rdmo/projects/tests/test_view_integration.py
+++ /dev/null
@@ -1,240 +0,0 @@
-import pytest
-
-from django.urls import reverse
-
-from ..models import Integration, Issue
-
-users = (
- ('owner', 'owner'),
- ('manager', 'manager'),
- ('author', 'author'),
- ('guest', 'guest'),
- ('user', 'user'),
- ('site', 'site'),
- ('anonymous', None),
-)
-
-add_integration_permission_map = change_integration_permission_map = delete_integration_permission_map = {
- 'owner': [1, 2, 3, 4, 5],
- 'manager': [1, 3, 5],
- 'api': [1, 2, 3, 4, 5],
- 'site': [1, 2, 3, 4, 5]
-}
-
-projects = [1, 2, 3, 4, 5]
-integrations = [1, 2]
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-def test_integration_create_get(db, client, username, password, project_id):
- client.login(username=username, password=password)
-
- url = reverse('integration_create', args=[project_id, 'simple'])
- response = client.get(url)
-
- if project_id in add_integration_permission_map.get(username, []):
- assert response.status_code == 200
- elif password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-def test_integration_create_post(db, client, username, password, project_id):
- client.login(username=username, password=password)
-
- url = reverse('integration_create', args=[project_id, 'simple'])
- data = {
- 'project_url': 'https://example.com/projects/1'
- }
- response = client.post(url, data)
-
- if project_id in add_integration_permission_map.get(username, []):
- assert response.status_code == 302
- values = Integration.objects.order_by('id').last().options.values('key', 'value', 'secret')
- assert sorted(values, key=lambda obj: obj['key']) == [
- {
- 'key': 'project_url',
- 'value': 'https://example.com/projects/1',
- 'secret': False
- },
- {
- 'key': 'secret',
- 'value': '',
- 'secret': True
- }
- ]
- elif password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('integration_id', integrations)
-def test_integration_update_get(db, client, username, password, project_id, integration_id):
- client.login(username=username, password=password)
- integration = Integration.objects.filter(project_id=project_id, id=integration_id).first()
-
- url = reverse('integration_update', args=[project_id, integration_id])
- response = client.get(url)
-
- if integration:
- if project_id in change_integration_permission_map.get(username, []):
- assert response.status_code == 200
- elif password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
- else:
- assert response.status_code == 404
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('integration_id', integrations)
-def test_integration_update_post(db, client, username, password, project_id, integration_id):
- client.login(username=username, password=password)
- integration = Integration.objects.filter(project_id=project_id, id=integration_id).first()
-
- url = reverse('integration_update', args=[project_id, integration_id])
- data = {
- 'project_url': 'https://example.com/projects/2',
- 'secret': 'super_secret'
- }
- response = client.post(url, data)
-
- if integration:
- if project_id in change_integration_permission_map.get(username, []):
- assert response.status_code == 302
- values = Integration.objects.filter(project_id=project_id, id=integration_id).first() \
- .options.values('key', 'value', 'secret')
- assert sorted(values, key=lambda obj: obj['key']) == [
- {
- 'key': 'project_url',
- 'value': 'https://example.com/projects/2',
- 'secret': False
- },
- {
- 'key': 'secret',
- 'value': 'super_secret',
- 'secret': True
- }
- ]
- elif password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
- else:
- assert response.status_code == 404
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('integration_id', integrations)
-def test_integration_delete_get(db, client, username, password, project_id, integration_id):
- client.login(username=username, password=password)
- integration = Integration.objects.filter(project_id=project_id, id=integration_id).first()
-
- url = reverse('integration_delete', args=[project_id, integration_id])
- response = client.get(url)
-
- if integration:
- if project_id in delete_integration_permission_map.get(username, []):
- assert response.status_code == 200
- elif password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
- else:
- assert response.status_code == 404
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('integration_id', integrations)
-def test_integration_delete_post(db, client, username, password, project_id, integration_id):
- client.login(username=username, password=password)
- integration = Integration.objects.filter(project_id=project_id, id=integration_id).first()
-
- url = reverse('integration_delete', args=[project_id, integration_id])
- response = client.delete(url)
-
- if integration:
- if project_id in delete_integration_permission_map.get(username, []):
- assert response.status_code == 302
- assert Integration.objects.filter(project_id=project_id, id=integration_id).first() is None
- elif password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
- else:
- assert response.status_code == 404
-
-
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('integration_id', integrations)
-def test_integration_webhook_get(db, client, project_id, integration_id):
- url = reverse('integration_webhook', args=[project_id, integration_id])
- response = client.get(url)
-
- assert response.status_code == 405
- assert Issue.objects.filter(status='closed').count() == 0
-
-
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('integration_id', integrations)
-def test_integration_webhook_post(db, client, project_id, integration_id):
- integration = Integration.objects.filter(project_id=project_id, id=integration_id).first()
-
- secret = 'super_duper_secret'
- url = reverse('integration_webhook', args=[project_id, integration_id])
- data = {
- 'action': 'closed',
- 'url': 'https://simple.example.com/issues/1'
- }
-
- response = client.post(url, data, **{'HTTP_X_SECRET': secret, 'content_type': 'application/json'})
-
- if integration:
- assert response.status_code == 200
- assert Issue.objects.filter(status='closed').count() == (1 if integration_id == 1 else 0)
- else:
- assert response.status_code == 404
- assert Issue.objects.filter(status='closed').count() == 0
-
-
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('integration_id', integrations)
-def test_integration_webhook_post_wrong_url(db, client, project_id, integration_id):
- integration = Integration.objects.filter(project_id=project_id, id=integration_id).first()
-
- secret = 'super_duper_secret'
- url = reverse('integration_webhook', args=[project_id, integration_id])
- data = {
- 'action': 'closed',
- 'url': 'https://simple.example.com/issues/2'
- }
-
- response = client.post(url, data, **{'HTTP_X_SECRET': secret, 'content_type': 'application/json'})
-
- if integration:
- assert response.status_code == 200
- assert Issue.objects.filter(status='closed').count() == 0
- else:
- assert response.status_code == 404
- assert Issue.objects.filter(status='closed').count() == 0
-
-
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('integration_id', integrations)
-def test_integration_webhook_post_no_secret(db, client, project_id, integration_id):
- url = reverse('integration_webhook', args=[project_id, integration_id])
- response = client.post(url, {})
-
- assert response.status_code == 404
- assert Issue.objects.filter(status='closed').count() == 0
diff --git a/rdmo/projects/tests/test_view_issue.py b/rdmo/projects/tests/test_view_issue.py
deleted file mode 100644
index cf4f6d745e..0000000000
--- a/rdmo/projects/tests/test_view_issue.py
+++ /dev/null
@@ -1,226 +0,0 @@
-from unittest.mock import Mock
-
-import pytest
-
-from django.core import mail
-from django.http import HttpResponseRedirect
-from django.urls import reverse
-
-from rdmo.core.constants import VALUE_TYPE_FILE
-
-from ..models import Issue, Project
-
-users = (
- ('owner', 'owner'),
- ('manager', 'manager'),
- ('author', 'author'),
- ('guest', 'guest'),
- ('user', 'user'),
- ('site', 'site'),
- ('anonymous', None),
-)
-
-view_issue_permission_map = {
- 'owner': [1, 2, 3, 4, 12],
- 'manager': [1, 3, 5, 12],
- 'author': [1, 3, 5, 12],
- 'guest': [1, 3, 5, 12],
- 'user': [12],
- 'api': [1, 2, 3, 4, 5, 12],
- 'site': [1, 2, 3, 4, 5, 12]
-}
-
-change_issue_permission_map = delete_issue_permission_map = {
- 'owner': [1, 2, 3, 4, 12],
- 'manager': [1, 3],
- 'author': [1, 3],
- 'api': [1, 2, 3, 4, 12],
- 'site': [1, 2, 3, 4, 12],
-}
-
-issues = [1, 2, 3, 4, 9]
-
-integration_pk = 1
-
-issue_status = ('open', 'in_progress', 'closed')
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('issue_id', issues)
-def test_issue(db, client, username, password, issue_id):
- client.login(username=username, password=password)
- issue = Issue.objects.get(id=issue_id)
-
- url = reverse('issue', args=[issue.project_id, issue_id])
- response = client.get(url)
-
- if issue.project_id in view_issue_permission_map.get(username, []):
- assert response.status_code == 200
- elif password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('issue_id', issues)
-def test_issue_update_get(db, client, username, password, issue_id):
- client.login(username=username, password=password)
- issue = Issue.objects.get(id=issue_id)
-
- url = reverse('issue_update', args=[issue.project_id, issue_id])
- response = client.get(url)
-
- if issue.project_id in change_issue_permission_map.get(username, []):
- assert response.status_code == 200
- elif password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('issue_id', issues)
-@pytest.mark.parametrize('status', issue_status)
-def test_issue_update_post(db, client, username, password, issue_id, status):
- client.login(username=username, password=password)
- issue = Issue.objects.get(id=issue_id)
-
- url = reverse('issue_update', args=[issue.project_id, issue_id])
- data = {
- 'status': status
- }
- response = client.post(url, data)
-
- if issue.project_id in change_issue_permission_map.get(username, []):
- assert response.status_code == 302
- assert Issue.objects.get(id=issue_id).status == status
- else:
- if password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
- assert Issue.objects.get(id=issue_id).status == issue.status
-
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('issue_id', issues)
-def test_issue_send_get(db, client, username, password, issue_id):
- client.login(username=username, password=password)
- issue = Issue.objects.get(id=issue_id)
-
- url = reverse('issue_update', args=[issue.project_id, issue_id])
- response = client.get(url)
-
- if issue.project_id in change_issue_permission_map.get(username, []):
- assert response.status_code == 200
- elif password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('issue_id', issues)
-def test_issue_send_post_email(db, client, username, password, issue_id):
- client.login(username=username, password=password)
- issue = Issue.objects.get(id=issue_id)
-
- url = reverse('issue_send', args=[issue.project_id, issue_id])
- data = {
- 'subject': 'Subject',
- 'message': 'Message',
- 'recipients': ['email@example.com']
- }
- response = client.post(url, data)
-
- if issue.project_id in change_issue_permission_map.get(username, []):
- assert response.status_code == 302
- assert len(mail.outbox) == 1
- assert mail.outbox[0].subject == '[example.com] Subject'
- assert mail.outbox[0].body == 'Message'
- else:
- if password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
- assert len(mail.outbox) == 0
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('issue_id', issues)
-def test_issue_send_post_attachments(db, client, files, username, password, issue_id):
- client.login(username=username, password=password)
- issue = Issue.objects.get(id=issue_id)
-
- view = issue.project.views.first()
- file = issue.project.values.filter(snapshot=None, value_type=VALUE_TYPE_FILE).first()
-
- if file and view:
- url = reverse('issue_send', args=[issue.project_id, issue_id])
- data = {
- 'subject': 'Subject',
- 'message': 'Message',
- 'recipients': 'email@example.com',
- 'attachments_answers': 'project_answers',
- 'attachments_views': str(view.id),
- 'attachments_files': str(file.id),
- 'attachments_snapshot': '',
- 'attachments_format': 'html'
- }
- response = client.post(url, data)
-
- if issue.project_id in change_issue_permission_map.get(username, []):
- assert response.status_code == 302
- assert len(mail.outbox) == 1
- assert mail.outbox[0].subject == '[example.com] Subject'
- assert mail.outbox[0].body == 'Message'
-
- attachments = mail.outbox[0].attachments
- assert len(attachments) == 3
- assert attachments[0][0] == 'Test.html'
- assert attachments[0][2] == 'text/html; charset=utf-8'
- assert attachments[1][0] == 'Test.html'
- assert attachments[1][2] == 'text/html; charset=utf-8'
- assert attachments[2][0] == 'test.txt'
- assert attachments[2][2] == 'text/plain'
- else:
- if password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
- assert len(mail.outbox) == 0
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('issue_id', issues)
-def test_issue_send_post_integration(db, client, mocker, username, password, issue_id):
- mocked_send_issue = Mock(return_value=HttpResponseRedirect(redirect_to='https://example.com/login/oauth/authorize'))
- mocker.patch('rdmo.projects.providers.SimpleIssueProvider.send_issue', mocked_send_issue)
-
- client.login(username=username, password=password)
- issue = Issue.objects.get(id=issue_id)
-
- url = reverse('issue_send', args=[issue.project_id, issue_id])
- data = {
- 'subject': 'Subject',
- 'message': 'Message',
- 'integration': [integration_pk]
- }
- response = client.post(url, data)
-
- if issue.project_id in change_issue_permission_map.get(username, []):
- if integration_pk in Project.objects.get(pk=issue.project_id).integrations.values_list('id', flat=True):
- assert response.status_code == 302
- assert response.url.startswith('https://example.com')
- else:
- assert response.status_code == 200
- else:
- if password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
- assert not response.url.startswith('https://example.com')
diff --git a/rdmo/projects/tests/test_view_membership.py b/rdmo/projects/tests/test_view_membership.py
deleted file mode 100644
index b8cc5e87d5..0000000000
--- a/rdmo/projects/tests/test_view_membership.py
+++ /dev/null
@@ -1,301 +0,0 @@
-import pytest
-
-from django.core import mail
-from django.urls import reverse
-
-from rdmo.projects.models import Invite, Membership
-
-users = (
- ('owner', 'owner'),
- ('manager', 'manager'),
- ('author', 'author'),
- ('guest', 'guest'),
- ('user', 'user'),
- ('site', 'site'),
- ('anonymous', None),
-)
-
-add_membership_permission_map = {
- 'api': [1, 2, 3, 4, 5],
- 'site': [1, 2, 3, 4, 5]
-}
-
-change_membership_permission_map = delete_membership_permission_map = {
- 'owner': [1, 2, 3, 4, 5],
- 'api': [1, 2, 3, 4, 5],
- 'site': [1, 2, 3, 4, 5]
-}
-
-projects = [1, 2, 3, 4, 5]
-memberships = [1, 2, 3, 4]
-
-membership_roles = ('owner', 'manager', 'author', 'guest')
-
-excluded_invite_ids = [1, 2]
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-def test_membership_create_get(db, client, username, password, project_id):
- client.login(username=username, password=password)
-
- url = reverse('membership_create', args=[project_id])
- response = client.get(url)
-
- if project_id in add_membership_permission_map.get(username, []):
- assert response.status_code == 200
- elif password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
-
-@pytest.mark.parametrize('PROJECT_SEND_INVITE', [False, True])
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('membership_role', membership_roles)
-def test_membership_create_post(db, client, settings,
- username, password, project_id, membership_role, PROJECT_SEND_INVITE):
- settings.PROJECT_SEND_INVITE = PROJECT_SEND_INVITE
- client.login(username=username, password=password)
-
- url = reverse('membership_create', args=[project_id])
- data = {
- 'username_or_email': 'user',
- 'role': membership_role
- }
- response = client.post(url, data)
-
- if project_id in add_membership_permission_map.get(username, []):
- assert response.status_code == 302
- assert Invite.objects.get(project_id=project_id, user__username='user',
- email='user@example.com', role=membership_role)
- assert not Membership.objects.filter(project_id=project_id,
- user__username='user', role=membership_role).exists()
- assert len(mail.outbox) == int(PROJECT_SEND_INVITE)
- else:
- if password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
- assert not Invite.objects.exclude(id__in=excluded_invite_ids).exists()
- assert len(mail.outbox) == 0
-
-
-@pytest.mark.parametrize('PROJECT_SEND_INVITE', [False, True])
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('membership_role', membership_roles)
-def test_membership_create_post_mail(db, client, settings,
- username, password, project_id, membership_role, PROJECT_SEND_INVITE):
- settings.PROJECT_SEND_INVITE = PROJECT_SEND_INVITE
- client.login(username=username, password=password)
-
- url = reverse('membership_create', args=[project_id])
- data = {
- 'username_or_email': 'someuser@example.com',
- 'role': membership_role
- }
- response = client.post(url, data)
-
- if project_id in add_membership_permission_map.get(username, []):
- if not PROJECT_SEND_INVITE:
- assert response.status_code == 200
- assert not Invite.objects.filter(project_id=project_id, user=None,
- email='someuser@example.com', role=membership_role)
- else:
- assert response.status_code == 302
- assert Invite.objects.get(project_id=project_id, user=None,
- email='someuser@example.com', role=membership_role)
- assert len(mail.outbox) == int(PROJECT_SEND_INVITE)
- else:
- if password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
- assert not Invite.objects.exclude(id__in=excluded_invite_ids).exists()
- assert len(mail.outbox) == 0
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('membership_role', membership_roles)
-def test_membership_create_post_error(db, client, username, password, membership_role):
- client.login(username=username, password=password)
-
- project_id = 1
- url = reverse('membership_create', args=[project_id])
- data = {
- 'username_or_email': 'guest',
- 'role': membership_role
- }
- response = client.post(url, data)
-
- assert not Invite.objects.exclude(id__in=excluded_invite_ids).exists()
- assert len(mail.outbox) == 0
-
- if project_id in add_membership_permission_map.get(username, []):
- assert response.status_code == 200
- else:
- if password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('membership_role', membership_roles)
-def test_membership_create_post_mail_error(db, client, username, password, membership_role):
- client.login(username=username, password=password)
-
- project_id = 1
- url = reverse('membership_create', args=[project_id])
- data = {
- 'username_or_email': 'guest@example.com',
- 'role': membership_role
- }
- response = client.post(url, data)
-
- assert not Invite.objects.exclude(id__in=excluded_invite_ids).exists()
- assert len(mail.outbox) == 0
-
- if project_id in add_membership_permission_map.get(username, []):
- assert response.status_code == 200
- else:
- if password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('membership_role', membership_roles)
-def test_membership_create_post_silent(db, client, username, password, membership_role):
- client.login(username=username, password=password)
-
- project_id = 1
- url = reverse('membership_create', args=[project_id])
- data = {
- 'username_or_email': 'user',
- 'role': membership_role,
- 'silent': True
- }
- response = client.post(url, data)
-
- if project_id in add_membership_permission_map.get(username, []):
- assert response.status_code == 302
-
- if username == 'site':
- assert not Invite.objects.exclude(id__in=excluded_invite_ids).exists()
- assert Membership.objects.get(project_id=project_id, user__username='user', role=membership_role)
- assert len(mail.outbox) == 0
- else:
- assert Invite.objects.get(project_id=project_id, user__username='user',
- email='user@example.com', role=membership_role)
- assert not Membership.objects.filter(project_id=project_id, user__username='user',
- role=membership_role).exists()
- assert len(mail.outbox) == 1
-
- else:
- if password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('membership_id', memberships)
-def test_membership_update_get(db, client, username, password, project_id, membership_id):
- client.login(username=username, password=password)
- membership = Membership.objects.filter(project_id=project_id, id=membership_id).first()
-
- url = reverse('membership_update', args=[project_id, membership_id])
- response = client.get(url)
-
- if membership:
- if project_id in change_membership_permission_map.get(username, []):
- assert response.status_code == 200
- elif password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
- else:
- assert response.status_code == 404
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('membership_id', memberships)
-@pytest.mark.parametrize('membership_role', membership_roles)
-def test_membership_update_post(db, client, username, password, project_id, membership_id, membership_role):
- client.login(username=username, password=password)
- membership = Membership.objects.filter(project_id=project_id, id=membership_id).first()
-
- url = reverse('membership_update', args=[project_id, membership_id])
- data = {
- 'role': membership_role
- }
- response = client.post(url, data)
-
- if membership:
- if project_id in change_membership_permission_map.get(username, []):
- assert response.status_code == 302
- assert Membership.objects.get(project_id=project_id, id=membership_id).role == membership_role
-
- else:
- if password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
- assert Membership.objects.get(project_id=project_id, id=membership_id).role == membership.role
- else:
- assert response.status_code == 404
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('membership_id', memberships)
-def test_membership_delete_get(db, client, username, password, project_id, membership_id):
- client.login(username=username, password=password)
- membership = Membership.objects.filter(project_id=project_id, id=membership_id).first()
-
- url = reverse('membership_delete', args=[project_id, membership_id])
- response = client.get(url)
-
- if membership:
- if project_id in delete_membership_permission_map.get(username, []):
- assert response.status_code == 200
- elif password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
- else:
- assert response.status_code == 404
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('membership_id', memberships)
-def test_membership_delete_post(db, client, mocker, username, password, project_id, membership_id):
- client.login(username=username, password=password)
- membership = Membership.objects.filter(project_id=project_id, id=membership_id).first()
-
- url = reverse('membership_delete', args=[project_id, membership_id])
- response = client.post(url)
-
- if membership:
- if project_id in delete_membership_permission_map.get(username, []):
- if membership.user.username == 'owner':
- assert response.status_code == 400
- else:
- assert response.status_code == 302
- assert not Membership.objects.filter(project_id=project_id, id=membership_id).first()
- elif password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
- else:
- assert response.status_code == 404
diff --git a/rdmo/projects/tests/test_view_membership_multisite.py b/rdmo/projects/tests/test_view_membership_multisite.py
deleted file mode 100644
index 603fe07afb..0000000000
--- a/rdmo/projects/tests/test_view_membership_multisite.py
+++ /dev/null
@@ -1,106 +0,0 @@
-import pytest
-
-from django.contrib.auth import get_user_model
-from django.contrib.sites.models import Site
-from django.core import mail
-from django.urls import reverse
-
-from ..models import Invite, Project
-from ..utils import get_invite_email_project_path
-
-users = (
- ('owner', 'owner'),
- ('manager', 'manager'),
- ('author', 'author'),
- ('guest', 'guest'),
- ('user', 'user'),
- ('site', 'site'),
- ('anonymous', None),
-)
-
-add_membership_permission_map = {
- 'api': [1, 2, 3, 4, 5],
- 'site': [1, 2, 3, 4, 5]
-}
-
-projects = [1, 2, 3, 4, 5]
-memberships = [1, 2, 3, 4]
-
-membership_roles = ('owner', 'manager', 'author', 'guest')
-
-sites_domains = ('example.com', 'foo.com', 'bar.com')
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('membership_role', membership_roles)
-@pytest.mark.parametrize('site_domain', sites_domains)
-def test_get_invite_email_project_path_function(db, client, settings, username, password, project_id,
- membership_role, site_domain):
- settings.MULTISITE = True
-
- client.login(username=username, password=password)
-
- current_site = Site.objects.get_current()
- foo_site, _ = Site.objects.get_or_create(domain=site_domain, name=site_domain)
- foo_username = f'{site_domain}-test-user'
- foo_email = f'{foo_username}@{site_domain}'
- foo_user, _ = get_user_model().objects.get_or_create(username=foo_username, email=foo_email,
- password=foo_username)
- foo_user.role.member.set([foo_site])
- project = Project.objects.get(pk=project_id)
-
- invite = Invite(project=project, user=foo_user, role=membership_role)
- invite.make_token()
- invite.save()
-
- invite_email_project_path = get_invite_email_project_path(invite)
- if current_site.domain == site_domain:
- assert invite_email_project_path.startswith('/projects')
- else:
- assert invite_email_project_path.startswith('http://' + site_domain + '/projects')
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-@pytest.mark.parametrize('membership_role', membership_roles)
-@pytest.mark.parametrize('site_domain', sites_domains)
-def test_invite_email_project_path_email_body(db, client, settings, username, password, project_id,
- membership_role, site_domain):
- settings.MULTISITE = True
-
- client.login(username=username, password=password)
-
- current_site = Site.objects.get_current()
- foo_site, _ = Site.objects.get_or_create(domain=site_domain, name=site_domain)
- foo_username = f'{site_domain}-user'
- foo_email = f'{foo_username}@{site_domain}'
- foo_user, _ = get_user_model().objects.get_or_create(username=f'{site_domain}-user', email=foo_email,
- password=foo_username)
- foo_user.role.member.set([foo_site])
- project = Project.objects.get(pk=project_id)
-
- url = reverse('membership_create', args=[project_id])
- data = {
- 'username_or_email': foo_email,
- 'role': membership_role
- }
- response = client.post(url, data)
-
- invite = Invite(project=project, user=foo_user, role=membership_role)
- invite.make_token()
- invite.save()
-
- if project_id in add_membership_permission_map.get(username, []):
- if current_site.domain == site_domain:
- assert 'http://testserver/' in mail.outbox[0].body
- else:
- assert f'http://{foo_site.domain}/' in mail.outbox[0].body
-
- assert response.status_code == 302
- assert len(mail.outbox) == 1
- else:
- if password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
- assert len(mail.outbox) == 0
diff --git a/rdmo/projects/tests/test_view_project.py b/rdmo/projects/tests/test_view_project.py
deleted file mode 100644
index 5cdabb181e..0000000000
--- a/rdmo/projects/tests/test_view_project.py
+++ /dev/null
@@ -1,896 +0,0 @@
-import re
-
-import pytest
-
-# from django.contrib.auth.models import Group, User
-# from django.urls import resolve
-from django.urls import reverse
-
-# from rdmo.questions.models import Catalog
-# from rdmo.tasks.models import Task
-# from rdmo.views.models import View
-
-# from ..forms import CatalogChoiceField
-# from ..models import Project
-
-users = (
- ('owner', 'owner'),
- ('manager', 'manager'),
- ('author', 'author'),
- ('guest', 'guest'),
- ('user', 'user'),
- ('editor', 'editor'),
- ('reviewer', 'reviewer'),
- ('api', 'api'),
- ('site', 'site'),
- ('anonymous', None)
-)
-
-view_project_permission_map = {
- 'owner': [1, 2, 3, 4, 5, 10, 12],
- 'manager': [1, 3, 5, 7, 12],
- 'author': [1, 3, 5, 8, 12],
- 'guest': [1, 3, 5, 9, 12],
- 'user': [12],
- 'editor': [12],
- 'reviewer': [12],
- 'api': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
- 'site': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
-}
-
-change_project_permission_map = {
- 'owner': [1, 2, 3, 4, 5, 10, 12],
- 'manager': [1, 3, 5, 7],
- 'api': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
- 'site': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
-}
-
-delete_project_permission_map = {
- 'owner': [1, 2, 3, 4, 5, 10, 12],
- 'api': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
- 'site': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
-}
-
-export_project_permission_map = {
- 'owner': [1, 2, 3, 4, 5, 10, 12],
- 'manager': [1, 3, 5, 7],
- 'api': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
- 'site': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
-}
-
-projects = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
-
-export_formats = ('html', )
-
-site_id = 1
-project_id = 1
-parent_id = 3
-parent_ancestors = [2, 3]
-catalog_id = 1
-view_id = 1
-task_id = 1
-
-@pytest.mark.parametrize('username,password', users)
-def test_list(db, client, username, password):
- client.login(username=username, password=password)
-
- url = reverse('projects')
- response = client.get(url)
-
- projects = re.findall(r'/projects/(\d+)/', response.content.decode())
-
- if password:
- assert response.status_code == 200
- # assertTemplateUsed(response, 'projects/projects.html')
-
- if username in ('site', 'api'):
- assert projects == []
- # assert response.context['number_of_projects'] == len([])
- # assertContains(response, 'View all projects on')
- else:
- # user_projects_map = view_project_permission_map.get(username, [])
- assert sorted(set(map(int, projects))) == []
- # assert response.context['number_of_projects'] == len(user_projects_map)
- # assertNotContains(response, 'View all projects on')
- else:
- assert response.status_code == 302
-
-
-@pytest.mark.parametrize('username,password', users)
-@pytest.mark.parametrize('project_id', projects)
-def test_detail(db, client, username, password, project_id):
- client.login(username=username, password=password)
-
- url = reverse('project', args=[project_id])
- response = client.get(url)
-
- if project_id in view_project_permission_map.get(username, []):
- assert response.status_code == 200
- else:
- if password:
- assert response.status_code == 403
- else:
- assert response.status_code == 302
-
-
-# @pytest.mark.parametrize('username,password', users)
-# def test_project_create_get(db, client, username, password):
-# client.login(username=username, password=password)
-
-# url = reverse('project_create')
-# response = client.get(url)
-
-# if password:
-# assert response.status_code == 200
-
-# # check the parent select dropdown
-# for project_id in re.findall(r'