diff --git a/orchestra/contrib/musician/forms.py b/orchestra/contrib/musician/forms.py
index 2769367f..fca6d1ff 100644
--- a/orchestra/contrib/musician/forms.py
+++ b/orchestra/contrib/musician/forms.py
@@ -209,79 +209,3 @@ class SystemUsersChangePasswordForm(ChangePasswordForm):
fields = ("password",)
model = SystemUser
-
-class SaasUpdateForm(forms.ModelForm):
- site_url = forms.CharField(label=_("Site URL"), widget=SpanWidget(), required=False)
-
- # dos campos para wordpress
- blog_id = forms.IntegerField(label=("Blog ID"), widget=SpanWidget(), required=False,
- help_text=_("ID of this blog used by WordPress, the only attribute that doesn't change."))
- email = forms.EmailField(label=_("Email"),
- help_text=_("A new user will be created if the above email address is not in the database.
"
- "The username and password will be mailed to this email address."))
-
- class Meta:
- model = SaaS
- fields = ("is_active", "service", "name", "data", "custom_url")
-
- def __init__(self, *args, **kwargs):
- self.user = kwargs.pop('user')
- super().__init__(*args, **kwargs)
- self.fields['name'].widget.attrs['readonly'] = True
- self.fields['site_url'].widget.attrs['readonly'] = True
- self.fields['email'].widget.attrs['readonly'] = True
- self.fields['blog_id'].widget.attrs['readonly'] = True
- self.fields['service'].widget = HiddenInput()
- self.fields['data'].widget = HiddenInput()
-
- # asignar valor al field site_url
- site_domain = self.instance.get_site_domain()
- context = {
- 'site_name': '<site_name>',
- 'name': '<site_name>',
- }
- site_domain = site_domain % context
- if '<site_name>' in site_domain:
- site_link = site_domain
- else:
- site_link = '%s' % (site_domain, site_domain)
- self.fields['site_url'].widget.display = site_link
-
- if self.instance:
- if self.instance.pk:
- self.fields['data'].required = False
-
- if self.instance.service == 'nextcloud':
- self.fields["blog_id"].widget = HiddenInput()
- self.fields["custom_url"].widget = HiddenInput()
- self.fields["email"].widget = HiddenInput()
- self.fields["email"].required = False
-
-
- if self.instance.service == 'wordpress':
- self.fields["is_active"].widget = HiddenInput()
- self.fields["custom_url"].widget.attrs['readonly'] = True
-
- admin_url = 'http://%s/wp-admin/' % self.instance.get_site_domain()
- help_text = 'Admin URL: {0}'.format(admin_url)
- self.fields['site_url'].help_text = mark_safe(help_text)
-
- if self.instance:
- for field in self.declared_fields:
- initial = self.fields[field].initial
- self.fields[field].initial = self.instance.data.get(field, initial)
-
-
-class NextcloudChangePasswordForm(ChangePasswordForm):
- class Meta:
- fields = ("password",)
- model = SaaS
-
- def __init__(self, *args, **kwargs):
- super(NextcloudChangePasswordForm, self).__init__(*args, **kwargs)
- self.fields['password'].help_text = _("Suggestion: %s") % random_ascii(20)
-
- def clean_password(self):
- password = self.cleaned_data.get("password")
- self.fields['password'] = password
- self.instance.set_password(password)
diff --git a/orchestra/contrib/musician/saas/__init__.py b/orchestra/contrib/musician/saas/__init__.py
new file mode 100644
index 00000000..e69de29b
diff --git a/orchestra/contrib/musician/saas/forms.py b/orchestra/contrib/musician/saas/forms.py
new file mode 100644
index 00000000..cb014ca6
--- /dev/null
+++ b/orchestra/contrib/musician/saas/forms.py
@@ -0,0 +1,90 @@
+from django import forms
+
+from orchestra.forms.widgets import SpanWidget
+from orchestra.forms import widgets
+from django.utils.safestring import mark_safe
+from django.utils.translation import gettext_lazy as _
+from orchestra.utils.python import random_ascii
+
+from django.forms.widgets import HiddenInput
+
+from orchestra.contrib.saas.models import SaaS
+from orchestra.contrib.musician.forms import ChangePasswordForm
+
+
+
+class SaasUpdateForm(forms.ModelForm):
+ site_url = forms.CharField(label=_("Site URL"), widget=SpanWidget(), required=False)
+
+ # dos campos para wordpress
+ blog_id = forms.IntegerField(label=("Blog ID"), widget=SpanWidget(), required=False,
+ help_text=_("ID of this blog used by WordPress, the only attribute that doesn't change."))
+ email = forms.EmailField(label=_("Email"),
+ help_text=_("A new user will be created if the above email address is not in the database.
"
+ "The username and password will be mailed to this email address."))
+
+ class Meta:
+ model = SaaS
+ fields = ("is_active", "service", "name", "data", "custom_url")
+
+ def __init__(self, *args, **kwargs):
+ self.user = kwargs.pop('user')
+ super().__init__(*args, **kwargs)
+ self.fields['name'].widget.attrs['readonly'] = True
+ self.fields['site_url'].widget.attrs['readonly'] = True
+ self.fields['email'].widget.attrs['readonly'] = True
+ self.fields['blog_id'].widget.attrs['readonly'] = True
+ self.fields['service'].widget = HiddenInput()
+ self.fields['data'].widget = HiddenInput()
+
+ # asignar valor al field site_url
+ site_domain = self.instance.get_site_domain()
+ context = {
+ 'site_name': '<site_name>',
+ 'name': '<site_name>',
+ }
+ site_domain = site_domain % context
+ if '<site_name>' in site_domain:
+ site_link = site_domain
+ else:
+ site_link = '%s' % (site_domain, site_domain)
+ self.fields['site_url'].widget.display = site_link
+
+ if self.instance:
+ if self.instance.pk:
+ self.fields['data'].required = False
+
+ if self.instance.service == 'nextcloud':
+ self.fields["blog_id"].widget = HiddenInput()
+ self.fields["custom_url"].widget = HiddenInput()
+ self.fields["email"].widget = HiddenInput()
+ self.fields["email"].required = False
+
+
+ if self.instance.service == 'wordpress':
+ self.fields["is_active"].widget = HiddenInput()
+ self.fields["custom_url"].widget.attrs['readonly'] = True
+
+ admin_url = 'http://%s/wp-admin/' % self.instance.get_site_domain()
+ help_text = 'Admin URL: {0}'.format(admin_url)
+ self.fields['site_url'].help_text = mark_safe(help_text)
+
+ if self.instance:
+ for field in self.declared_fields:
+ initial = self.fields[field].initial
+ self.fields[field].initial = self.instance.data.get(field, initial)
+
+
+class NextcloudChangePasswordForm(ChangePasswordForm):
+ class Meta:
+ fields = ("password",)
+ model = SaaS
+
+ def __init__(self, *args, **kwargs):
+ super(NextcloudChangePasswordForm, self).__init__(*args, **kwargs)
+ self.fields['password'].help_text = _("Suggestion: %s") % random_ascii(20)
+
+ def clean_password(self):
+ password = self.cleaned_data.get("password")
+ self.fields['password'] = password
+ self.instance.set_password(password)
diff --git a/orchestra/contrib/musician/saas/views.py b/orchestra/contrib/musician/saas/views.py
new file mode 100644
index 00000000..da89bdf0
--- /dev/null
+++ b/orchestra/contrib/musician/saas/views.py
@@ -0,0 +1,82 @@
+from django.utils.translation import gettext_lazy as _
+from django.shortcuts import get_object_or_404
+from django.urls import reverse_lazy
+
+from django.views.generic.base import RedirectView, TemplateView
+from django.views.generic.detail import DetailView
+from django.views.generic.edit import (CreateView, DeleteView, FormView,
+ UpdateView)
+from django.views.generic.list import ListView
+
+from orchestra.contrib.musician.mixins import (CustomContextMixin, ExtendedPaginationMixin,
+ UserTokenRequiredMixin)
+
+from .forms import ( SaasUpdateForm, NextcloudChangePasswordForm )
+from orchestra.contrib.saas.models import SaaS
+
+
+# class SaasListView(ServiceListView):
+# service_class = SaasService
+# model = SaaS
+# template_name = "musician/saas_list.html"
+# extra_context = {
+# # Translators: This message appears on the page title
+# 'title': _('Software as a Service'),
+# }
+
+class SaasNextcloudListView(CustomContextMixin, UserTokenRequiredMixin, ListView):
+ model = SaaS
+ template_name = "musician/saas_nextcloud_list.html"
+ extra_context = {
+ # Translators: This message appears on the page title
+ 'title': _('Software as a Service'),
+ }
+
+ def get_queryset(self):
+ return self.model.objects.filter(account=self.request.user, service='nextcloud')
+
+
+class SaasWordpressListView(CustomContextMixin, UserTokenRequiredMixin, ListView):
+ model = SaaS
+ template_name = "musician/saas_wordpress_list.html"
+ extra_context = {
+ # Translators: This message appears on the page title
+ 'title': _('Software as a Service'),
+ }
+
+ def get_queryset(self):
+ return self.model.objects.filter(account=self.request.user, service='wordpress')
+
+class SaasUpdateView(CustomContextMixin, UserTokenRequiredMixin, UpdateView):
+ model = SaaS
+ form_class = SaasUpdateForm
+ template_name = "musician/saas_form.html"
+
+ def get_queryset(self):
+ qs = SaaS.objects.filter(account=self.request.user)
+ return qs
+
+ def get_success_url(self):
+ return reverse_lazy("musician:saas-nextcloud-list")
+
+ def get_form_kwargs(self):
+ kwargs = super().get_form_kwargs()
+ kwargs["user"] = self.request.user
+ return kwargs
+
+class NextcloudChangePasswordView(CustomContextMixin, UserTokenRequiredMixin, UpdateView):
+ template_name = "musician/nextcloud_change_password.html"
+ model = SaaS
+ form_class = NextcloudChangePasswordForm
+ success_url = reverse_lazy("musician:saas-nextcloud-list")
+
+ def get_queryset(self):
+ return self.model.objects.filter(account=self.request.user)
+
+class SaasDeleteView(CustomContextMixin, UserTokenRequiredMixin, DeleteView):
+ template_name = "musician/saas_check_delete.html"
+ model = SaaS
+ success_url = reverse_lazy("musician:saas-nextcloud-list")
+
+ def get_queryset(self):
+ return self.model.objects.filter(account=self.request.user)
\ No newline at end of file
diff --git a/orchestra/contrib/musician/templates/musician/saas_check_delete.html b/orchestra/contrib/musician/templates/musician/saas_check_delete.html
index 07e4f292..8cb33dd6 100644
--- a/orchestra/contrib/musician/templates/musician/saas_check_delete.html
+++ b/orchestra/contrib/musician/templates/musician/saas_check_delete.html
@@ -6,7 +6,7 @@
{% csrf_token %}
{% blocktrans %}Are you sure that you want remove the SaaS:{% endblocktrans %} {{ saas }} ?
{% trans 'WARNING: This action cannot be undone.' %}
- {% trans 'Cancel' %} + {% trans 'Cancel' %} {% endblock %} diff --git a/orchestra/contrib/musician/views.py b/orchestra/contrib/musician/views.py index cc9d6055..a2c48d7e 100644 --- a/orchestra/contrib/musician/views.py +++ b/orchestra/contrib/musician/views.py @@ -34,7 +34,6 @@ from orchestra.contrib.domains.models import Domain, Record from orchestra.contrib.lists.models import List from orchestra.contrib.mailboxes.models import Address, Mailbox from orchestra.contrib.resources.models import Resource, ResourceData -from orchestra.contrib.saas.models import SaaS from orchestra.contrib.systemusers.models import WebappUsers, SystemUser from orchestra.utils.html import html_to_pdf @@ -42,7 +41,7 @@ from .auth import logout as auth_logout from .forms import (LoginForm, MailboxChangePasswordForm, MailboxCreateForm, MailboxSearchForm, MailboxUpdateForm, MailForm, RecordCreateForm, RecordUpdateForm, WebappUsersChangePasswordForm, - SystemUsersChangePasswordForm, SaasUpdateForm, NextcloudChangePasswordForm) + SystemUsersChangePasswordForm) from .mixins import (CustomContextMixin, ExtendedPaginationMixin, UserTokenRequiredMixin) from .models import Address as AddressService @@ -56,6 +55,7 @@ from .utils import get_bootstraped_percent, get_bootstraped_percent_exact from .webapps.views import * from .websites.views import * from .lists.views import * +from .saas.views import * logger = logging.getLogger(__name__) @@ -614,73 +614,6 @@ class DatabaseListView(ServiceListView): return qs -# class SaasListView(ServiceListView): -# service_class = SaasService -# model = SaaS -# template_name = "musician/saas_list.html" -# extra_context = { -# # Translators: This message appears on the page title -# 'title': _('Software as a Service'), -# } - -class SaasNextcloudListView(CustomContextMixin, UserTokenRequiredMixin, ListView): - model = SaaS - template_name = "musician/saas_nextcloud_list.html" - extra_context = { - # Translators: This message appears on the page title - 'title': _('Software as a Service'), - } - - def get_queryset(self): - return self.model.objects.filter(account=self.request.user, service='nextcloud') - - -class SaasWordpressListView(CustomContextMixin, UserTokenRequiredMixin, ListView): - model = SaaS - template_name = "musician/saas_wordpress_list.html" - extra_context = { - # Translators: This message appears on the page title - 'title': _('Software as a Service'), - } - - def get_queryset(self): - return self.model.objects.filter(account=self.request.user, service='wordpress') - -class SaasUpdateView(CustomContextMixin, UserTokenRequiredMixin, UpdateView): - model = SaaS - form_class = SaasUpdateForm - template_name = "musician/saas_form.html" - - def get_queryset(self): - qs = SaaS.objects.filter(account=self.request.user) - return qs - - def get_success_url(self): - return reverse_lazy("musician:saas-nextcloud-list") - - def get_form_kwargs(self): - kwargs = super().get_form_kwargs() - kwargs["user"] = self.request.user - return kwargs - -class NextcloudChangePasswordView(CustomContextMixin, UserTokenRequiredMixin, UpdateView): - template_name = "musician/nextcloud_change_password.html" - model = SaaS - form_class = NextcloudChangePasswordForm - success_url = reverse_lazy("musician:saas-nextcloud-list") - - def get_queryset(self): - return self.model.objects.filter(account=self.request.user) - -class SaasDeleteView(CustomContextMixin, UserTokenRequiredMixin, DeleteView): - template_name = "musician/saas_check_delete.html" - model = SaaS - success_url = reverse_lazy("musician:saas-nextcloud-list") - - def get_queryset(self): - return self.model.objects.filter(account=self.request.user) - - class DomainDetailView(CustomContextMixin, UserTokenRequiredMixin, DetailView): template_name = "musician/domain_detail.html" extra_context = {