updated plugins
[unfold.git] / plugins / form / __init__.py
1 from unfold.composite import Composite
2 from unfold.plugin    import Plugin
3
4 class CreateForm (Plugin):
5
6     def __init__ (self, **settings):
7         Plugin.__init__(self, **settings)
8         print "SETTINGS", settings
9         assert 'page'   in settings, "You should specify page"
10         assert 'object' in settings or 'fields' in settings, "You should specify object or field list"
11
12         if 'object' in settings:
13             # Retrieve object fields from metadata
14             metadata = settings['page'].get_metadata()
15             md_o = metadata.details_by_object(settings['object'])
16             self.columns = md_o['column']
17
18         elif 'fields' in settings:
19             self.columns = []
20             for field in settings['fields']:
21                 c = {
22                     'name'          : field.get('name', ''),
23                     'field'         : field.get('field', ''),
24                     'type'          : field.get('type', 'input'),
25                     'description'   : field.get('description', ''),
26                     'validate_rx'   : field.get('validate_rx', ''),
27                     'validate_err'  : field.get('validate_err', ''),
28                     'old_value'     : 'POST',
29                 }
30                 self.columns.append(c)
31     
32     def requirements (self):
33         # Some should be included by default by manifold
34         return { 'js_files'     : ['js/manifold.js', 'js/spin.presets.js', 'js/spin.min.js', 'js/jquery.spin.js',
35                                    'js/form.js', 'js/jquery.validate.js', ],
36                  'css_files'    : ['css/form.css'] 
37                  }
38     def export_json_settings(self):
39         # We need initialization, even though we are not associated with a query
40         return True
41
42     def template_env (self, request):
43         env={}
44         env.update(self.__dict__)
45         #env['columns']=self.columns
46         return env
47
48     def template_file (self):
49         return "form.html"
50
51     def json_settings_list (self): return ['plugin_uuid', 'columns']
52
53     def get_validation_js(self):
54         # XXX We need to avoid sending the same query twice !"
55         # somehow store something into the dom, to perform an update afterwards
56         # XXX This should be moved to a template
57         # XXX We also need some storage into the wizard to be displayed later
58         return """
59             // Useless since this is now a parameter
60             //frm = document.forms['form_%(domid)s'];
61
62             // Loop on the fields and test regexp if present
63             err = false;
64             $.each(options.columns, function(column) {
65                 if (!frm.elements[column['field']].match(column['validate_rx'])) {
66                     $('err_%(domid)s_' + column['field']).html(column['validation_err']);
67                     err = true;
68                 }
69             });
70             if (!err) {
71                 // Issue json query
72             }
73         """ % self.__dict__