1: <?php
2:
3: namespace webservices\listing;
4:
5: use \PDO as PDO;
6:
7: 8: 9: 10: 11:
12: class Filters extends \WebService {
13:
14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27:
28: public function execute($querydata) {
29: global $db;
30:
31:
32: if (false)
33: $db = new PDO();
34:
35:
36: $ids = array();
37: if (isset($querydata['query1']) && !empty($querydata['query1'])) {
38: $ids[] = $querydata['query1'];
39: }
40: if (isset($querydata['ids'])) {
41: $ids = array_merge($ids, $querydata['ids']);
42: }
43:
44: if (count($ids) == 0) {
45: return array();
46: }
47:
48: $place_holders = implode(',', array_fill(0, count($ids), '?'));
49:
50: $query_get_filters = <<<EOF
51: SELECT
52: feature.feature_id,
53: analysis.analysis_id, analysis.name AS analysis_name, analysis.description AS analysis_description, analysis.program AS analysis_program, analysis.programversion AS analysis_programversion, analysis.algorithm AS analysis_algorithm,
54: assay.assay_id, assay.name AS assay_name, assay.description AS assay_description,
55: biomaterial.biomaterial_id, biomaterial.name AS biomaterial_name, biomaterial.description AS biomaterial_description
56: FROM
57: feature,
58: expressionresult,
59: quantification,
60: analysis,
61: acquisition,
62: assay,
63: biomaterial
64: WHERE
65: expressionresult.feature_id = feature.feature_id AND
66: expressionresult.biomaterial_id = biomaterial.biomaterial_id AND
67: expressionresult.analysis_id = analysis.analysis_id AND
68: expressionresult.quantification_id = quantification.quantification_id AND
69: quantification.acquisition_id = acquisition.acquisition_id AND
70: acquisition.assay_id = assay.assay_id AND
71: feature.feature_id IN ({$place_holders});
72: EOF;
73:
74: $stm_get_filters = $db->prepare($query_get_filters);
75:
76: $data = array();
77:
78: $stm_get_filters->execute($ids);
79: while ($filter = $stm_get_filters->fetch(PDO::FETCH_ASSOC)) {
80:
81: $data['data']['feature'][$filter['feature_id']] = self::getItem('feature', $filter);
82: $data['data']['assay'][$filter['assay_id']] = self::getItem('assay', $filter);
83: $data['data']['analysis'][$filter['analysis_id']] = self::getItem('analysis', $filter);
84: $data['data']['sample'][$filter['biomaterial_id']] = self::getItem('biomaterial', $filter);
85:
86: $data['values'][] = array(
87: 'feature' => $filter['feature_id'],
88: 'assay' => $filter['assay_id'],
89: 'analysis' => $filter['analysis_id'],
90: 'sample' => $filter['biomaterial_id'],
91: );
92: }
93:
94: return $data;
95: }
96:
97: 98: 99: 100: 101: 102:
103: private static function getItem($item_prefix, $row) {
104: $item = array();
105: foreach ($row as $key => $val) {
106: $match = null;
107: if (preg_match("/${item_prefix}_(.*)/", $key, $match)) {
108: $item[$match[1]] = $val;
109: }
110: }
111: return $item;
112: }
113:
114: }
115:
116: ?>
117: