0312ef1f49a2f1571f99d8bd7389038d79f7f380
[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             ]
22         }
23         return reqs
24
25     def json_settings_list (self):
26         return ['plugin_uuid', 'domid', 'query_uuid']
27
28     def export_json_settings (self):
29         return True
30
31     def template_env(self, request):
32         fields = []
33         #hidden_columns = self.hidden_columns
34         metadata = self.page.get_metadata()
35         md_fields = metadata.details_by_object('resource')
36
37         # XXX use django templating system here
38         for md_field in md_fields['column']:
39             if md_field['type'] == 'string':
40                 if 'allowed_values' in md_field:
41                     allowed_values = md_field['allowed_values'].split(',')
42
43                     options = []
44                     for v in allowed_values:
45                         v_desc = v.split('-')
46                         options.append(v_desc[0])
47
48                     env = {
49                         'domid': self.domid,
50                         'options': options
51                     }
52                     filter_input = render_to_string('filter_input_string_values.html', env)
53                 else:
54                     env = {
55                         'domid': self.domid,
56                         'field': md_field['name']
57                     }
58                     filter_input = render_to_string('filter_input_string.html', env)
59                     
60             elif md_field['type'] == 'int':
61                 allowed_values = md_field.get('allowed_values', '0,0').split(',')
62                 env = {
63                     'domid': self.domid,
64                     'field': md_field['name'],
65                     'min'  : allowed_values[0],
66                     'max'  : allowed_values[1]
67                 }
68                 filter_input = render_to_string('filter_input_integer.html', env)
69             else:
70                 env = {
71                     'domid': self.domid,
72                     'field': md_field['name']
73                 }
74                 filter_input = render_to_string('filter_input_others.html', env)
75
76             fields.append({
77                 'name':          md_field['name'],
78                 'type':          md_field['type'],
79                 'resource_type': 'N/A',
80                 'filter_input':  filter_input,
81                 'header':        None,
82                 'checked':       md_field['name'] in self.query.get_select()
83             })
84         #return { 'fields': fields, 'hidden_columns': hidden_columns }
85         return { 'fields': fields }