zhongrj
2025-11-24 276323dce9613867abb3f58a4cc2abbfb2fd0dea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import requests
 
from django import forms
from django.contrib import messages
from django.http import HttpResponse
from django.shortcuts import render
from django.contrib.auth.decorators import login_required
 
from app.plugins import logger
 
from .platform_helper import get_all_extended_platforms
 
class DynamicForm(forms.Form):
    """This dynamic form will go through all the extended platforms, and retrieve their fields"""
    def __init__(self, *args, **kwargs):
        ds = kwargs.pop('data_store')
        super(DynamicForm, self).__init__(*args, **kwargs)
        extended_platforms = get_all_extended_platforms()
        
        for platform in extended_platforms:
            for form_field in platform.get_form_fields():
                django_field = form_field.get_django_field(ds)
                django_field.group = platform.name
                self.fields[form_field.field_id] = django_field
                
def HomeView(plugin):
    @login_required
    def view(request):
        ds = plugin.get_user_data_store(request.user)
 
        # if this is a POST request we need to process the form data
        if request.method == "POST":
            form = DynamicForm(request.POST, data_store = ds)
            if form.is_valid():
                extended_platforms = get_all_extended_platforms()
                for platform in extended_platforms:
                    for form_field in platform.get_form_fields():
                        form_field.save_value(ds, form)
                    
                messages.success(request, "Configuration updated successfuly!")
        else:
            form = DynamicForm(data_store = ds)
 
        return render(
            request,
            plugin.template_path("app.html"),
            {"title": "Cloud Import", "form": form},
        )
 
    return view
 
 
def LoadButtonsView(plugin):
    def view(request):
 
        return render(
            request,
            plugin.template_path("load_buttons.js"),
            {
                "api_url": "/api" + plugin.public_url("").rstrip("/"),
            },
            content_type="text/javascript",
        )
 
    return view