1: <?php
2:
3: namespace webservices\listing;
4:
5: use \PDO as PDO;
6:
7: class Filters_diffexp extends \WebService {
8:
9: 10: 11: 12:
13: public function forCart($querydata) {
14: global $db;
15:
16: if (false)
17: $db = new PDO();
18:
19:
20:
21: $ids = array();
22: if (isset($querydata['ids'])) {
23: $ids = array_merge($ids, $querydata['ids']);
24: }
25:
26:
27: $place_holders = implode(',', array_fill(0, count($ids), '?'));
28:
29: $query_get_filters = <<<EOF
30: SELECT
31: d.feature_id AS feature_id,
32: 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,
33: ba.biomaterial_id AS ba_id, ba.name AS ba_name, ba.description AS ba_description,
34: bb.biomaterial_id AS bb_id, bb.name AS bb_name, bb.description AS bb_description
35: FROM
36: diffexpresult d
37: JOIN analysis ON (d.analysis_id = analysis.analysis_id)
38: JOIN biomaterial ba ON (d.biomateriala_id = ba.biomaterial_id)
39: JOIN biomaterial bb ON (d.biomaterialb_id = bb.biomaterial_id)
40: WHERE
41: d.feature_id IN ({$place_holders});
42: EOF;
43:
44: $stm_get_filters = $db->prepare($query_get_filters);
45:
46: $data = array();
47:
48: $stm_get_filters->execute($ids);
49: while ($filter = $stm_get_filters->fetch(PDO::FETCH_ASSOC)) {
50:
51: $data['data']['feature'][$filter['feature_id']] = self::getItem('feature', $filter);
52: $data['data']['analysis'][$filter['analysis_id']] = self::getItem('analysis', $filter);
53: $data['data']['ba'][$filter['ba_id']] = self::getItem('ba', $filter);
54: $data['data']['bb'][$filter['bb_id']] = self::getItem('bb', $filter);
55:
56: $data['values'][] = array(
57: 'feature' => $filter['feature_id'],
58: 'analysis' => $filter['analysis_id'],
59: 'ba' => $filter['ba_id'],
60: 'bb' => $filter['bb_id'],
61: );
62: }
63:
64: return $data;
65: }
66:
67: 68: 69: 70:
71: public function fullRelease($querydata) {
72: global $db;
73:
74: if (false)
75: $db = new PDO();
76:
77: $organism = $querydata['organism'];
78: $release = $querydata['release'];
79: $constant = 'constant';
80:
81:
82:
83: $query_get_filters = <<<EOF
84: SELECT
85: ba.name AS ba_name, ba_id, bb.name AS bb_name, bb_id, analysis.name AS analysis_name, ids.analysis_id FROM
86: (SELECT
87: d.biomateriala_id ba_id, d.biomaterialb_id bb_id, d.analysis_id
88: FROM
89: diffexpresult d
90: join feature f on d.feature_id=f.feature_id
91: WHERE f.organism_id=? AND f.dbxref_id=(SELECT dbxref_id FROM dbxref WHERE db_id = {$constant('DB_ID_IMPORTS')} AND accession = ?)
92: GROUP BY d.biomateriala_id, d.biomaterialb_id, d.analysis_id, f.organism_id, f.dbxref_id
93: ) AS ids
94: JOIN biomaterial ba ON (ids.ba_id=ba.biomaterial_id)
95: JOIN biomaterial bb ON (ids.bb_id=bb.biomaterial_id)
96: JOIN analysis ON (ids.analysis_id=analysis.analysis_id)
97: EOF;
98:
99: $stm_get_filters = $db->prepare($query_get_filters);
100:
101: $data = array();
102:
103: $stm_get_filters->execute(array($organism, $release));
104: while ($filter = $stm_get_filters->fetch(PDO::FETCH_ASSOC)) {
105:
106: $data['data']['analysis'][$filter['analysis_id']] = self::getItem('analysis', $filter);
107: $data['data']['ba'][$filter['ba_id']] = self::getItem('ba', $filter);
108: $data['data']['ba'][$filter['bb_id']] = self::getItem('bb', $filter);
109:
110: $data['values'][] = array(
111: 'analysis' => $filter['analysis_id'],
112: 'ba' => $filter['ba_id'],
113: 'bb' => $filter['bb_id'],
114: 'dir' => 'ltr'
115: );
116:
117: $data['values'][] = array(
118: 'analysis' => $filter['analysis_id'],
119: 'bb' => $filter['ba_id'],
120: 'ba' => $filter['bb_id'],
121: 'dir' => 'rtl'
122: );
123: }
124: $data['data']['bb'] = &$data['data']['ba'];
125: return $data;
126: }
127:
128: 129: 130: 131:
132: public function execute($querydata) {
133: if ($querydata['query1'] == "forCart") {
134: return $this->forCart($querydata);
135: } else if ($querydata['query1'] == "fullRelease") {
136: return $this->fullRelease($querydata);
137: }
138: }
139:
140: 141: 142: 143: 144: 145:
146: private static function getItem($item_prefix, $row) {
147: $item = array();
148: foreach ($row as $key => $val) {
149: $match = null;
150: if (preg_match("/${item_prefix}_(.*)/", $key, $match)) {
151: $item[$match[1]] = $val;
152: }
153: }
154: return $item;
155: }
156:
157: }
158:
159: ?>
160: