Browse Source

Display detailed of an object

prieto 7 years ago
parent
commit
7c096073c0

+ 40
- 1
plugins/webui/interface/controllers/listing.py View File

@@ -71,5 +71,44 @@ def show_object(request):
71 71
         obj = target_leo.get(query_filters)
72 72
         if len(obj) == 0:
73 73
             raise HttpException(404)
74
-
75 74
     return get_response('listing/show_object.html', lodel_id=lodel_id, classname=classname)
75
+
76
+##@brief Controller's function to display an instance or a certain type
77
+# @param request : the request (get or post)
78
+# @note the response is given in a html page called in get_response_function
79
+def show_object_detailled(request):
80
+    if 'classname' in request.GET:
81
+        classname = request.GET['classname']
82
+        if len(classname) > 1:
83
+            raise HttpException(400)
84
+        classname = classname[0]
85
+        try:
86
+            target_leo = dyncode.Object.name2class(classname)
87
+        except LeApiError:
88
+            classname = None
89
+    else:
90
+        raise HttpException(400)
91
+    
92
+    logger.warning('Composed uids broken here')
93
+    uid_field = target_leo.uid_fieldname()[0]
94
+
95
+    test_valid = 'lodel_id' in request.GET \
96
+        and len(request.GET['lodel_id']) == 1
97
+
98
+    if test_valid:
99
+        try:
100
+            dh = target_leo.field(uid_field)
101
+            lodel_id = dh.cast_type(request.GET['lodel_id'][0])
102
+        except (ValueError, TypeError):
103
+            test_valid = False
104
+
105
+    if not test_valid:
106
+        raise HttpException(400)
107
+    else:
108
+        query_filters = list()
109
+        query_filters.append((uid_field,'=',lodel_id))
110
+        obj = target_leo.get(query_filters)
111
+        if len(obj) == 0:
112
+            raise HttpException(404)
113
+
114
+    return get_response('listing/show_object_detailled.html', lodel_id=lodel_id, classname=classname)

+ 1
- 0
plugins/webui/interface/urls.py View File

@@ -18,6 +18,7 @@ urls = (
18 18
     (r'^/list_classes', list_classes),
19 19
     (r'^/list_classes?$', list_classes),
20 20
     (r'^/show_object?$', show_object),
21
+    (r'^/show_object_detailled?$', show_object_detailled),
21 22
     (r'^/show_class?$', show_class),
22 23
     (r'^/signin', signin),
23 24
     (r'^/signout', signout)

+ 24
- 0
plugins/webui/templates/listing/display_obj.html View File

@@ -0,0 +1,24 @@
1
+{% macro display(obj) -%}
2
+    <!-- To get a component HTML code, it is necessary to call : components.<macro_name>(args) -->
3
+    {% for fieldn, fieldv in obj.fields(include_ro = True).items() %}
4
+        {% if fieldv is not none %}
5
+           {% if fieldv.base_type == 'ref' %}
6
+                {% if obj.data(fieldn) is iterable %}
7
+                    <li>{{ fieldn }}
8
+                    {% set l_classe = fieldv.allowed_classes[0] %}
9
+                        <ul>
10
+                    {% for rel in obj.data(fieldn) %}
11
+                            {% set casttype = l_classe.data_handler(l_classe.uid_fieldname()[0]).cast_type %}
12
+                            {% set linked_object = l_classe.get(('%s = %s') % (l_classe.uid_fieldname()[0], rel)) %}
13
+                            {% set rel2 = casttype(rel) %}
14
+                            <li><a href="show_object_detailled?classname={{ l_classe.__name__ }}&lodel_id={{ rel2 }}" >{{ rel2 }}</a></li>
15
+                    {% endfor %}
16
+                        </ul></li>
17
+                {% endif %}
18
+            {% else %}
19
+                <li> {{ fieldn }} : {{ obj.data(fieldn) }} </li>
20
+            {% endif %}
21
+        {% endif %}
22
+    {% endfor %}
23
+{%- endmacro %}
24
+ 

+ 43
- 0
plugins/webui/templates/listing/show_object_detailled.html View File

@@ -0,0 +1,43 @@
1
+{% extends "base.html" %}
2
+{% import 'components/components.html' as components %}
3
+{% import "listing/display_obj.html" as edit %}
4
+{% set my_class = leapi.name2class(classname) %}
5
+{% set uidfield = my_class.uid_fieldname()[0] %}
6
+{% set objects = my_class.get(('%s = %s') % (uidfield, lodel_id)) %}
7
+{% set obj = objects.pop() %}
8
+{% if my_class.is_abstract() %}
9
+{% set classname = obj.data('classname') %}
10
+{% set my_class = my_class.name2class(classname) %}
11
+{% endif %}
12
+{% block title %}Object {{ lodel_id }} {% endblock %}
13
+{% import "components/components.html" as components %}
14
+{% block content %}
15
+<ol class="breadcrumb">
16
+  <li><a href="/{{ root_url }}/">Home</a></li>
17
+  <li><a href="/{{ root_url }}/list_classes">Types</a></li>
18
+  <li><a href="/{{ root_url }}/show_class?classname={{ classname }}">{{ classname }}</a></li>
19
+  <li class="active">{{ lodel_id }}</li>
20
+</ol>
21
+<h1 class="h1_lodel">Lodel 2 - {{ classname }} with uid {{ lodel_id }}</h1>
22
+<ul>
23
+    <!-- To get a component HTML code, it is necessary to call : components.<macro_name>(args) -->
24
+    {% for fieldname, fieldvalue in obj.fields(include_ro = True).items() %}
25
+        {% if fieldvalue is not none %}
26
+           {% if fieldvalue.base_type == 'ref' %}
27
+                {% if obj.data(fieldname) is iterable %}
28
+                    <li>{{ fieldname }}
29
+                    {% set l_classe = fieldvalue.allowed_classes[0] %}
30
+                        <ul>
31
+                    {% set linked_objs=l_classe.get(("%s in (%s)") % (l_classe.uid_fieldname()[0], obj.data(fieldname)|join(','))) %}
32
+                    {% for linked_obj in linked_objs %}
33
+                            <li>{{ edit.display(linked_obj) }}</li>
34
+                    {% endfor %}
35
+                        </ul></li>
36
+                {% endif %}
37
+            {% else %}
38
+                <li> {{ fieldname }} : {{ obj.data(fieldname) }} </li>
39
+            {% endif %}
40
+        {% endif %}
41
+    {% endfor %}
42
+</ul>
43
+{% endblock %}

Loading…
Cancel
Save