1: <?php
2:
3: namespace webservices\graphs\barplot;
4:
5: use \PDO as PDO;
6: 7: 8:
9: class Quantifications extends \WebService {
10:
11: 12: 13:
14: public function execute($querydata) {
15: global $db;
16:
17:
18: if (false)
19: $db = new PDO();
20:
21:
22: $parents = $querydata['parents'];
23: $analysises = $querydata['analysis'];
24: $assays = $querydata['assay'];
25: $biomaterials = $querydata['biomaterial'];
26:
27:
28: $query_values = array();
29: $query_subqueries = array();
30: foreach (
31: array('parent' => $parents, 'analysis' => $analysises, 'assay' => $assays, 'biomaterial' => $biomaterials)
32: AS $prefix => $values) {
33: for ($i = 0; $i < count($values); $i++) {
34: $query_values[$prefix][':' . $prefix . $i] = $values[$i];
35: }
36: $query_subqueries[$prefix] = implode(',', array_keys($query_values[$prefix]));
37: }
38:
39:
40: $query = <<<EOF
41: SELECT
42: feature.name AS feature_name,
43: biomaterial.name AS biomaterial_name,
44: expressionresult.value,
45: parent_biomaterial.name AS parent_biomaterial_name,
46: assay.name AS assay_name,
47: analysis.analysis_id,
48: analysis.name AS analysis_name
49: FROM
50: expressionresult,
51: biomaterial,
52: analysis,
53: feature,
54: quantification,
55: acquisition,
56: assay,
57: biomaterial_relationship,
58: biomaterial AS parent_biomaterial
59: WHERE
60: expressionresult.biomaterial_id IN ({$query_subqueries['biomaterial']}) AND
61: expressionresult.biomaterial_id = biomaterial.biomaterial_id AND
62:
63: expressionresult.feature_id IN ({$query_subqueries['parent']}) AND
64: expressionresult.feature_id = feature.feature_id AND
65:
66:
67: expressionresult.analysis_id IN ({$query_subqueries['analysis']}) AND
68: expressionresult.analysis_id = analysis.analysis_id AND
69:
70: expressionresult.quantification_id = quantification.quantification_id AND
71: quantification.acquisition_id = acquisition.acquisition_id AND
72: acquisition.assay_id IN ({$query_subqueries['assay']}) AND
73: acquisition.assay_id = assay.assay_id AND
74:
75: biomaterial.biomaterial_id = biomaterial_relationship.subject_id AND
76: biomaterial_relationship.object_id = parent_biomaterial.biomaterial_id
77: ORDER BY feature_name, biomaterial_name;
78:
79: EOF;
80:
81: $data_array = array_merge(
82: $query_values['biomaterial'], $query_values['parent'], $query_values['analysis'], $query_values['assay']
83: );
84:
85: $stm = $db->prepare($query);
86: foreach ($data_array as $key => $val)
87: $stm->bindValue ($key, $val, \PDO::PARAM_STR);
88:
89: $stm->execute();
90:
91:
92: $lastcell_name = '';
93: $data = array();
94: $vars = array();
95: $smps = array();
96: $x = array();
97: $row = null;
98:
99: while (($cell = $stm->fetch(PDO::FETCH_ASSOC)) !== false) {
100: if ($cell['feature_name'] != $lastcell_name) {
101:
102: $lastcell_name = $cell['feature_name'];
103: $data[] = array();
104: $row = &$data[count($data) - 1];
105: $vars[] = $cell['feature_name'];
106: }
107:
108: if (count($data) == 1) {
109:
110: $smps[] = $cell['biomaterial_name'];
111: $x['Tissue_Group'][] = $cell['parent_biomaterial_name'];
112: $x['Assay'][] = $cell['assay_name'];
113: $x['Analysis'][] = "${cell['analysis_name']} (${cell['analysis_id']})";
114: }
115:
116: $row[] = floatval($cell['value']);
117: }
118:
119: return array(
120: 'x' => $x,
121: 'y' => array(
122: 'vars' => $vars,
123: 'smps' => $smps,
124: 'data' => $data
125: )
126: );
127: }
128:
129: }
130:
131: ?>
132: