Browse Source

Update aned Create from interface

prieto 8 years ago
parent
commit
c41a22c807

+ 4
- 3
plugins/mongodb_datasource/datasource.py View File

@@ -75,7 +75,7 @@ class MongoDbDatasource(object):
75 75
     #@warning multiple UID broken by this method
76 76
     #@return an integer
77 77
     def new_numeric_id(self, emcomp):
78
-        target = emcomp.uid_source()
78
+        target = emcomp #.uid_source()
79 79
         tuid = target._uid[0] # Multiple UID broken here
80 80
         results = self.select(
81 81
             target, field_list = [tuid], filters = [], 
@@ -181,7 +181,7 @@ class MongoDbDatasource(object):
181 181
     #@param relational_filters list : List of relational filters
182 182
     #@return int : number of deleted records
183 183
     def delete(self, target, filters, relational_filters):
184
-        if target.is_asbtract():
184
+        if target.is_abstract():
185 185
             #Deletion with abstract LeObject as target (reccursiv calls)
186 186
             return self.__act_on_abstract(target, filters,
187 187
                 relational_filters, self.delete)
@@ -198,7 +198,7 @@ class MongoDbDatasource(object):
198 198
     #@param upd_datas dict : datas to update (new values)
199 199
     #@return int : Number of updated records
200 200
     def update(self, target, filters, relational_filters, upd_datas):
201
-        if target.is_asbtract():
201
+        if target.is_abstract():
202 202
             #Update using abstract LeObject as target (reccursiv calls)
203 203
             return self.__act_on_abstract(target, filters,
204 204
                 relational_filters, self.update, upd_datas = upd_datas)
@@ -213,6 +213,7 @@ class MongoDbDatasource(object):
213 213
     # @param new_datas dict : datas to insert
214 214
     # @return the inserted uid
215 215
     def insert(self, target, new_datas):
216
+        new_datas['lodel_id'] = self.new_numeric_id(target)
216 217
         res = self.__collection(target).insert(new_datas)
217 218
         return str(res)
218 219
 

+ 65
- 3
plugins/webui/interface/controllers/admin.py View File

@@ -10,6 +10,32 @@ def index_admin(request):
10 10
     return get_response('admin/admin.html')
11 11
 
12 12
 def admin_update(request):
13
+    if request.method == 'POST':
14
+        error = None
15
+        datas = list()
16
+        classname = request.form['classname']
17
+        uid = request.form['uid']
18
+        try:
19
+            target_leo = dyncode.Object.name2class(classname)
20
+        except LeApiError:
21
+            classname = None
22
+        if classname is None or target_leo.is_abstract():
23
+            raise HttpException(400)
24
+        fieldnames = target_leo.fieldnames()
25
+        fields = dict()
26
+
27
+        for in_put, in_value in request.form.items():
28
+            if in_put != 'classname' and  in_put != 'uid':
29
+                fields[in_put[12:]] = in_value
30
+        obj = (target_leo.get(('lodel_id = %s' % (uid))))[0]
31
+        inserted = obj.update(fields)
32
+        
33
+        if new_uid==1:
34
+            msg = 'Successfull creation';
35
+        else:
36
+            msg = 'Oops something wrong happened...object not saved'
37
+        return get_response('admin/admin_edit.html', target=target_leo, lodel_id = uid, msg = msg)
38
+
13 39
     test_valid = 'lodel_id' in request.GET \
14 40
         and len(request.GET['lodel_id']) == 1
15 41
 
@@ -25,10 +51,38 @@ def admin_update(request):
25 51
         obj = dyncode.Object.get(['lodel_id = %d' % lodel_id])
26 52
         if len(obj) == 0:
27 53
             raise HttpException(404)
28
-    return get_response('admin/admin_edit.html', obj = obj)
54
+    template_vars = {
55
+        'params': request.GET
56
+    }
57
+    return get_response('admin/admin_edit.html', tpl_vars=template_vars)
29 58
 
30 59
 def admin_create(request):
31 60
     classname = None
61
+
62
+    if request.method == 'POST':
63
+        error = None
64
+        datas = list()
65
+        classname = request.form['classname']
66
+        try:
67
+            target_leo = dyncode.Object.name2class(classname)
68
+        except LeApiError:
69
+            classname = None
70
+        if classname is None or target_leo.is_abstract():
71
+            raise HttpException(400)
72
+        fieldnames = target_leo.fieldnames()
73
+        fields = dict()
74
+
75
+        for in_put, in_value in request.form.items():
76
+            if in_put != 'classname':
77
+                fields[in_put[12:]] = in_value
78
+        new_uid = target_leo.insert(fields)
79
+        
80
+        if not new_uid is None:
81
+            msg = 'Successfull creation';
82
+        else:
83
+            msg = 'Oops something wrong happened...object not saved'
84
+        return get_response('admin/admin_create.html', target=target_leo, msg = msg)
85
+    
32 86
     if 'classname' in request.GET:
33 87
         classname = request.GET['classname']
34 88
         if len(classname) > 1:
@@ -38,12 +92,20 @@ def admin_create(request):
38 92
             target_leo = dyncode.Object.name2class(classname)
39 93
         except LeApiError:
40 94
             classname = None
95
+    msg = None
96
+    if 'msg' in request.GET:
97
+        msg = request.GET['msg']
41 98
     if classname is None or target_leo.is_abstract():
42 99
         raise HttpException(400)
43
-    
44
-    return get_response('admin/admin_create.html', target=target_leo)
100
+    template_vars = {
101
+        'params': request.GET,
102
+        'msg' : msg
103
+    }
104
+    return get_response('admin/admin_create.html', tpl_vars=template_vars, target=target_leo)
45 105
 
46 106
 def admin(request):
47 107
     return get_response('admin/admin.html')
48 108
 
109
+        
110
+            
49 111
 

+ 13
- 1
plugins/webui/templates/admin/admin_create.html View File

@@ -1,8 +1,20 @@
1 1
 {% extends "base_backend.html" %}
2 2
 {% import "admin/editable_component.html" as edit %}
3
+
3 4
 {% block title %}- Creating a new {{target.__name__}}{% endblock %}
4 5
 {% block body %}
6
+{% if msg is not none %}
7
+{% block msg %} <p style="color:red; font-size:20pt; font-weight:bold">{{ msg }}</p> {% endblock %}
8
+{% endif %}
9
+<h1>Creating a new {{target.__name__}}</h1>
10
+ <form action="" method ="post">
11
+     <input type="hidden" name="classname" id="classname" value="{{target.__name__}}" />
5 12
 	{% for fieldname, field in target.fields().items() %}
6
-		{{edit.input(fieldname, field) }}
13
+     <div> {{edit.input(fieldname, field) }}</div>
7 14
 	{% endfor %}
15
+     <p>&nbsp;</p>
16
+ <input type="submit" value="Save">
17
+ </form>
8 18
 {% endblock %}
19
+
20
+

+ 18
- 0
plugins/webui/templates/admin/admin_edit.html View File

@@ -1 +1,19 @@
1 1
 {% extends "base_backend.html" %}
2
+{% import "admin/editable_component.html" as edit %}
3
+{% set my_id = params['lodel_id'].pop() %}
4
+{% set classname = params['classname'].pop() %}}
5
+{% set my_class = leapi.Object.name2class(classname) %}
6
+{% set objects = my_class.get(('lodel_id = %s') % (my_id)) %}
7
+{% set obj = objects.pop() %}
8
+{% block title %}- Edit Object{% endblock %}
9
+{% block body %}
10
+<h1>Lodel 2 - Edit Object {{ my_id }} of {{ classname }}</h1>
11
+    <form action="" method ="post">
12
+    <input type="hidden" name="uid" value="{{ my_id}}" >
13
+    <input type="hidden" name="classname" value={{ classname }} />
14
+    {% for fieldname, fieldvalue in obj.fields().items() %}
15
+       <p> {{edit.input(fieldname, fieldvalue, obj.data(fieldname)) }} </p>
16
+    {% endfor %}
17
+     <input type="submit" value="Save">
18
+    </form>
19
+{% endblock %}

+ 2
- 2
plugins/webui/templates/admin/editable_component.html View File

@@ -1,9 +1,9 @@
1 1
 {% macro input(fieldname, field, value='') -%}
2 2
 	<label for="field_input_{{fieldname}}">{{fieldname}}</label>
3 3
 	{% if field.base_type == 'bool' %}
4
-		<input id="field_input_{{fieldname}}" type="checkbox" checked="{% if value %}checked{% endif %}" />
4
+		<input id="field_input_{{fieldname}}" name="field_input_{{fieldname}}" type="checkbox" checked="{% if value %}checked{% endif %}" />
5 5
 	{% elif field.base_type == 'char' or field.base_type == 'int' %}
6
-		<input id="field_input_{{fieldname}}" type="text" value="{{value}}" />
6
+		<input id="{{fieldname}}" name="field_input_{{fieldname}}" type="text" value="{{value}}" />
7 7
 	{% else %}
8 8
 		<p>Unsupported base type "{{field.base_type}}" </p>
9 9
 	{% endif %}

+ 1
- 1
plugins/webui/templates/components/components.html View File

@@ -1,5 +1,5 @@
1 1
 {% macro input(name, value='', type='text') -%}
2
-    <input type="{{ type }}" value="{{ value }}" name="{{ name }}" />
2
+    <input type="{{ type }}" value="{{ value }}" name="{{ name }}" id= "{{ name }}"/>
3 3
 {%- endmacro %}
4 4
 
5 5
 {% macro textarea(name, value='', rows=10, cols=40) -%}

+ 1
- 1
plugins/webui/templates/index/index.html View File

@@ -4,6 +4,6 @@
4 4
     DASHBOARD <br />
5 5
     {{ lodel.Test().ok() }}
6 6
 <ul>
7
-    <li><a href="list_classes.html">Tous les types</a></li>
7
+    <li><a href="list_classes">Tous les types</a></li>
8 8
 </ul>
9 9
 {% endblock %}

Loading…
Cancel
Save