diff --git a/src/servala/core/forms.py b/src/servala/core/forms.py index d44ce35..baa85fb 100644 --- a/src/servala/core/forms.py +++ b/src/servala/core/forms.py @@ -7,7 +7,7 @@ from servala.core.models import ControlPlane, ServiceDefinition CONTROL_PLANE_USER_INFO_SCHEMA = { "type": "object", "properties": { - "cname": { + "CNAME Record": { "title": "CNAME Record", "type": "string", }, diff --git a/src/servala/core/migrations/0006_add_controlplane_user_info.py b/src/servala/core/migrations/0006_add_controlplane_user_info.py deleted file mode 100644 index 0d4936c..0000000 --- a/src/servala/core/migrations/0006_add_controlplane_user_info.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 5.2.4 on 2025-09-04 11:29 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("core", "0005_organization_sale_order_fields"), - ] - - operations = [ - migrations.AddField( - model_name="controlplane", - name="user_info", - field=models.JSONField( - blank=True, - help_text="Key-value information displayed to users when selecting this control plane", - null=True, - verbose_name="User Information", - ), - ), - ] diff --git a/src/servala/core/migrations/0007_controlplane_user_info_and_more.py b/src/servala/core/migrations/0007_controlplane_user_info_and_more.py new file mode 100644 index 0000000..5dda2ed --- /dev/null +++ b/src/servala/core/migrations/0007_controlplane_user_info_and_more.py @@ -0,0 +1,43 @@ +# Generated by Django 5.2.6 on 2025-09-08 07:14 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("core", "0006_remove_service_instance_soft_delete"), + ] + + operations = [ + migrations.AddField( + model_name="controlplane", + name="user_info", + field=models.JSONField( + blank=True, + help_text="Key-value information displayed to users when selecting this control plane", + null=True, + verbose_name="User Information", + ), + ), + migrations.AlterField( + model_name="cloudprovider", + name="external_links", + field=models.JSONField( + blank=True, + help_text='JSON array of link objects: {"url": "…", "title": "…"}. ', + null=True, + verbose_name="External links", + ), + ), + migrations.AlterField( + model_name="service", + name="external_links", + field=models.JSONField( + blank=True, + help_text='JSON array of link objects: {"url": "…", "title": "…", "featured": false}. Featured links will be shown on the service list page, all other links will only show on the service and offering detail pages.', + null=True, + verbose_name="External links", + ), + ), + ] diff --git a/src/servala/frontend/templates/frontend/organizations/service_instance_detail.html b/src/servala/frontend/templates/frontend/organizations/service_instance_detail.html index 4027ec5..337893a 100644 --- a/src/servala/frontend/templates/frontend/organizations/service_instance_detail.html +++ b/src/servala/frontend/templates/frontend/organizations/service_instance_detail.html @@ -102,27 +102,7 @@ {% endif %} - {% if instance.context.control_plane.user_info %} -
-
-

{% translate "Service Provider Information" %}

-
-
-
- - - {% for key, value in instance.context.control_plane.user_info.items %} - - - - - {% endfor %} - -
{{ key }}{{ value }}
-
-
-
- {% endif %} + {% include "includes/control_plane_user_info.html" with control_plane=instance.context.control_plane %} {% if instance.spec and spec_fieldsets %}
diff --git a/src/servala/frontend/templates/frontend/organizations/service_offering_detail.html b/src/servala/frontend/templates/frontend/organizations/service_offering_detail.html index dd35cce..7f3863e 100644 --- a/src/servala/frontend/templates/frontend/organizations/service_offering_detail.html +++ b/src/servala/frontend/templates/frontend/organizations/service_offering_detail.html @@ -8,26 +8,8 @@ {% endblock page_title %} {% endblock html_title %} {% partialdef control-plane-info %} -{% if selected_plane and selected_plane.user_info %} -
-
-

{% translate "Service Provider Information" %}

-
-
-
- - - {% for key, value in selected_plane.user_info.items %} - - - - - {% endfor %} - -
{{ key }}{{ value }}
-
-
-
+{% if selected_plane %} + {% include "includes/control_plane_user_info.html" with control_plane=selected_plane %} {% endif %} {% endpartialdef %} {% partialdef service-form %} diff --git a/src/servala/frontend/templates/includes/control_plane_user_info.html b/src/servala/frontend/templates/includes/control_plane_user_info.html new file mode 100644 index 0000000..b9ffe99 --- /dev/null +++ b/src/servala/frontend/templates/includes/control_plane_user_info.html @@ -0,0 +1,26 @@ +{% load i18n %} +{% comment %} +Reusable snippet for displaying ControlPlane user_info +Usage: {% include "includes/control_plane_user_info.html" with control_plane=control_plane_object %} +{% endcomment %} +{% if control_plane.user_info %} +
+
+

{% translate "Service Provider Zone Information" %}

+
+
+
+ + + {% for key, value in control_plane.user_info.items %} + + + + + {% endfor %} + +
{{ key }}{{ value }}
+
+
+
+{% endif %}