we embed the (currently raw) results from manifold API in a ManifoldResult dict
[myslice.git] / plugins / hazelnut / DataTables.php
1 <?php
2
3
4 class DataTables extends Plugin
5 {
6
7         /* Knowing the uuid of a query, we could get the results with Plugins */
8         /* Same for async */
9     public function render_content()
10     //$plugin_uuid, $options)
11     {
12
13         //Plugins::add_js('/DataTables/jquery.dataTables.js');
14         Plugins::add_js('//ajax.aspnetcdn.com/ajax/jquery.dataTables/1.9.3/jquery.dataTables.js');
15         Plugins::add_js('/DataTables/DataTables.js');
16         //Plugins::add_css('/DataTables/DataTables.css');
17         //Plugins::add_css('/DataTables/demo_table.css');
18         Plugins::add_css('/DataTables/demo_table_jui.css');
19
20         $uuid = $this->uuid;
21
22                 $results = Array();
23                 $async = 1;
24
25
26         /* XXX required field in options : query_uuid */
27          
28         
29         $query = Plugins::get_query_by_uuid($this->params['query_uuid']);
30         $is_unique = Plugins::get_key_filter($query);
31             $method_keys = Plugins::get_default_fields($query->method, $is_unique);
32            //$method_keys = Plugins::query_get_default_keys($options['query_uuid']);
33            //$fields = Plugins::query_get_fields($options['query_uuid']);
34         //$all_headers = $_SESSION['metadata']['nodes']['columns'];        
35         //$fields = $all_headers;
36
37         $fields = Plugins::metadata_get_fields($query->method);
38
39        /*
40         * @author: lbaron
41         * date: 2012-05-29
42         * debug columns QueryEditor to DataTables
43         *
44         */
45         // Problem: field names are differents between 
46         // $_SESSION['metadata']['nodes']['columns'] 
47         // JSON values
48         //$fields[]="arch"; // architecture in Session metadata
49         //$fields[]="astype"; // as_type in Session metadata
50         $fields['platform'] = Array('column' => 'platform');
51         $fields['platform_longname'] = Array('column' => 'platform_longname');
52
53         //----------------------------------
54         
55         $out = Array();
56         $out[] = "<table class='display' id='table-$uuid'>";
57         $out[] = "<thead><tr>";
58
59         foreach ($method_keys as $f) {
60             $out[] = "<th>$f</th>";
61         }
62
63         /* We put defaults fields (should be keys) at the beginning, and don't repeat them afterwards */
64         foreach ($fields as $key=>$f) {
65             if((array_search($f['column'], $method_keys)) === false)
66                 $out[] = "<th>".$f['column']."</th>";
67         }
68
69         if (array_key_exists('checkboxes', $this->params) && ($this->params['checkboxes'])) {
70             $out[] = "<th>+/-</th>";            
71         }
72         $out[] = "</tr></thead>";
73         $out[] = "<tbody>";        
74         
75         /* This might be done asynchronously */
76         if (!$async) {
77             $query = Plugins::get_query_by_uuid($this->params['query_uuid']);
78             foreach ($results as $r) {
79                 $out[] = "<tr>";
80                 foreach ($fields as $f) {
81                     $out[] = "<td>";
82                     $out[] = Plugins::render_element($query, $r[$f], $f); // XXX was query->method
83                     $out[] = "</td>";
84                 }
85                 if (array_key_exists('checkboxes', $this->params) && ($this->params['checkboxes'])) {
86                     $out[] = "<td>[X]</td>";
87                 }
88                 $out[] = "</tr>";
89             }
90         }
91
92
93         if ($async) {
94             /* setup datatables */
95             /* TODO:
96              * - fixed row for key columns
97              * - uniform row height
98              * - how to make some columns disappear
99              * - how to udpate some columns based on keys
100              */
101         }
102         $out[] = "</tbody>";
103         $out[] = "</table>";
104         return implode($out);
105     }
106 }
107
108 Plugins::register_plugin(
109     'DataTables',   /* plugin name */
110     'DataTables',   /* class name */
111     Array(
112         'method' => '*',
113         'fields' => Array()
114     )
115     /* XXX dependencies */
116 );