plugins: added query_editor
[unfold.git] / plugins / query_editor / __init__.py
diff --git a/plugins/query_editor/__init__.py b/plugins/query_editor/__init__.py
new file mode 100644 (file)
index 0000000..f5a334e
--- /dev/null
@@ -0,0 +1,68 @@
+from unfold.plugin import Plugin
+
+from django.template.loader import render_to_string
+
+class QueryEditor(Plugin):
+
+    def template_file(self):
+        return "query_editor.html"
+
+    def requirements (self):
+        reqs = {
+            'js_files' : [
+                'js/query_editor.js',
+            ] ,
+            'css_files': [
+                'css/query_editor.css',
+                'css/demo_page.css',
+                'css/demo_table.css',
+            ]
+        }
+        return reqs
+
+    def json_settings_list (self):
+        return ['plugin_uuid', 'domid', 'query_uuid']
+
+    def export_json_settings (self):
+        return True
+
+    def template_env(self, request):
+        fields = []
+        metadata = self.page.get_metadata()
+        md_fields = metadata.details_by_object('resource')
+        print "METADATA FIELDS", md_fields
+
+        # XXX use django templating system here
+        for md_field in md_fields['column']:
+
+            if md_field['type'] == 'string':
+                if 'allowed_values' in md_field:
+                    allowed_values = md_field['allowed_values'].split(',')
+
+                    options = []
+                    for v in allowed_values:
+                        v_desc = v.split('-')
+                        options.append(v_desc[0])
+
+                    env = {'options': options}
+                    filter_input = render_to_string('filter_input_string_values.html', env)
+                else:
+                    env = {'filter_id': "%s-filter-%s" % (self.domid, md_field['name'])}
+                    filter_input = render_to_string('filter_input_string.html', env)
+                    
+            elif md_field['type'] == 'int':
+                allowed_values = md_field.get('allowed_values', '0,0').split(',')
+                env = {'min': allowed_values[0], 'max': allowed_values[1]}
+                filter_input = render_to_string('filter_input_integer.html', env)
+            else:
+                env = {'filter_id': "%s-filter-%s" % (self.domid, md_field['name'])}
+                filter_input = render_to_string('filter_input_others.html', env)
+
+            fields.append({
+                'name':          md_field['name'],
+                'type':          md_field['type'],
+                'resource_type': 'N/A',
+                'filter_input':  filter_input,
+                'header':        None,
+            })
+        return { 'fields': fields }