--- /dev/null
+<?php
+
+
+class DataTables extends Plugin
+{
+
+ /* Knowing the uuid of a query, we could get the results with Plugins */
+ /* Same for async */
+ public function render_content()
+ //$plugin_uuid, $options)
+ {
+
+ //Plugins::add_js('/DataTables/jquery.dataTables.js');
+ Plugins::add_js('//ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.3/jquery.dataTables.js');
+ Plugins::add_js('/DataTables/DataTables.js');
+ //Plugins::add_css('/DataTables/DataTables.css');
+ //Plugins::add_css('/DataTables/demo_table.css');
+ Plugins::add_css('/DataTables/demo_table_jui.css');
+
+ $uuid = $this->uuid;
+
+ $results = Array();
+ $async = 1;
+
+
+ /* XXX required field in options : query_uuid */
+
+
+ $query = Plugins::get_query_by_uuid($this->params['query_uuid']);
+ $is_unique = Plugins::get_key_filter($query);
+ $method_keys = Plugins::get_default_fields($query->method, $is_unique);
+ //$method_keys = Plugins::query_get_default_keys($options['query_uuid']);
+ //$fields = Plugins::query_get_fields($options['query_uuid']);
+ //$all_headers = $_SESSION['metadata']['nodes']['columns'];
+ //$fields = $all_headers;
+
+ $fields = Plugins::metadata_get_fields($query->method);
+
+ /*
+ * @author: lbaron
+ * date: 2012-05-29
+ * debug columns QueryEditor to DataTables
+ *
+ */
+ // Problem: field names are differents between
+ // $_SESSION['metadata']['nodes']['columns']
+ // JSON values
+ //$fields[]="arch"; // architecture in Session metadata
+ //$fields[]="astype"; // as_type in Session metadata
+ $fields['platform'] = Array('column' => 'platform');
+ $fields['platform_longname'] = Array('column' => 'platform_longname');
+
+ //----------------------------------
+
+ $out = Array();
+ $out[] = "<table class='display' id='table-$uuid'>";
+ $out[] = "<thead><tr>";
+
+ foreach ($method_keys as $f) {
+ $out[] = "<th>$f</th>";
+ }
+
+ /* We put defaults fields (should be keys) at the beginning, and don't repeat them afterwards */
+ foreach ($fields as $key=>$f) {
+ if((array_search($f['column'], $method_keys)) === false)
+ $out[] = "<th>".$f['column']."</th>";
+ }
+
+ if (array_key_exists('checkboxes', $this->params) && ($this->params['checkboxes'])) {
+ $out[] = "<th>+/-</th>";
+ }
+ $out[] = "</tr></thead>";
+ $out[] = "<tbody>";
+
+ /* This might be done asynchronously */
+ if (!$async) {
+ $query = Plugins::get_query_by_uuid($this->params['query_uuid']);
+ foreach ($results as $r) {
+ $out[] = "<tr>";
+ foreach ($fields as $f) {
+ $out[] = "<td>";
+ $out[] = Plugins::render_element($query, $r[$f], $f); // XXX was query->method
+ $out[] = "</td>";
+ }
+ if (array_key_exists('checkboxes', $this->params) && ($this->params['checkboxes'])) {
+ $out[] = "<td>[X]</td>";
+ }
+ $out[] = "</tr>";
+ }
+ }
+
+
+ if ($async) {
+ /* setup datatables */
+ /* TODO:
+ * - fixed row for key columns
+ * - uniform row height
+ * - how to make some columns disappear
+ * - how to udpate some columns based on keys
+ */
+ }
+ $out[] = "</tbody>";
+ $out[] = "</table>";
+ return implode($out);
+ }
+}
+
+Plugins::register_plugin(
+ 'DataTables', /* plugin name */
+ 'DataTables', /* class name */
+ Array(
+ 'method' => '*',
+ 'fields' => Array()
+ )
+ /* XXX dependencies */
+);