1a4298983d8cc74c8678c6eb0bb4211080331e10
[myslice.git] / plugins / query_editor / __init__.py
1 from unfold.plugin import Plugin
2
3 from django.template.loader import render_to_string
4
5 # XXX We need naming helpers in the python Plugin class also, used in template
6
7 class QueryEditor(Plugin):
8
9     def template_file(self):
10         return "query_editor.html"
11
12     def requirements (self):
13         reqs = {
14             'js_files' : [
15                 # XXX datatables
16                 'js/query_editor.js',
17             ] ,
18             'css_files': [
19                 'css/query_editor.css',
20                 'css/jquery-ui.css',
21                 'css/demo_page.css',
22                 'css/demo_table.css',
23             ]
24         }
25         return reqs
26
27     def json_settings_list (self):
28         return ['plugin_uuid', 'domid', 'query_uuid']
29
30     def export_json_settings (self):
31         return True
32
33     def template_env(self, request):
34         fields = []
35         metadata = self.page.get_metadata()
36         md_fields = metadata.details_by_object('resource')
37
38         # XXX use django templating system here
39         for md_field in md_fields['column']:
40
41             if md_field['type'] == 'string':
42                 if 'allowed_values' in md_field:
43                     allowed_values = md_field['allowed_values'].split(',')
44
45                     options = []
46                     for v in allowed_values:
47                         v_desc = v.split('-')
48                         options.append(v_desc[0])
49
50                     env = {
51                         'domid': self.domid,
52                         'options': options
53                     }
54                     filter_input = render_to_string('filter_input_string_values.html', env)
55                 else:
56                     env = {
57                         'domid': self.domid,
58                         'field': md_field['name']
59                     }
60                     filter_input = render_to_string('filter_input_string.html', env)
61                     
62             elif md_field['type'] == 'int':
63                 allowed_values = md_field.get('allowed_values', '0,0').split(',')
64                 env = {
65                     'domid': self.domid,
66                     'field': md_field['name'],
67                     'min'  : allowed_values[0],
68                     'max'  : allowed_values[1]
69                 }
70                 filter_input = render_to_string('filter_input_integer.html', env)
71             else:
72                 env = {
73                     'domid': self.domid,
74                     'field': md_field['name']
75                 }
76                 filter_input = render_to_string('filter_input_others.html', env)
77
78             fields.append({
79                 'name':          md_field['name'],
80                 'type':          md_field['type'],
81                 'resource_type': 'N/A',
82                 'filter_input':  filter_input,
83                 'header':        None,
84                 'checked':       md_field['name'] in self.query.get_select()
85             })
86         return { 'fields': fields }