1: <?php
2:
3: session_start();
4:
5: require_once __DIR__ . DIRECTORY_SEPARATOR . 'config.php';
6:
7: require_once 'TranscriptDB/WebService.php';
8: require_once 'TranscriptDB/WebService.php';
9: require_once 'smarty/Smarty.class.php';
10: require_once 'lightopenid/openid.php';
11: require_once 'TranscriptDB/db.php';
12:
13: $dbpath = stream_resolve_include_path('TranscriptDB/db.php');
14: define('CFG_SMARTY_DIR', substr($dbpath, 0, strlen($dbpath) - 7));
15:
16: $smarty = new Smarty();
17: $smarty->setTemplateDir(CFG_SMARTY_DIR . DIRECTORY_SEPARATOR . 'smarty' . DIRECTORY_SEPARATOR . 'templates');
18: $smarty->setCompileDir(VAR_DIR . DIRECTORY_SEPARATOR . 'smarty' . DIRECTORY_SEPARATOR . 'templates_c');
19: $smarty->setCacheDir(VAR_DIR . DIRECTORY_SEPARATOR . 'cache');
20: $smarty->setConfigDir(CFG_SMARTY_DIR . DIRECTORY_SEPARATOR . 'configs');
21: $smarty->addPluginsDir(CFG_SMARTY_DIR . DIRECTORY_SEPARATOR . 'smarty' . DIRECTORY_SEPARATOR . 'plugins');
22:
23: $smarty->assign('AppPath', APPPATH);
24: $smarty->assign('ServicePath', SERVICEPATH);
25: $smarty->left_delimiter = '{#';
26: $smarty->right_delimiter = '#}';
27:
28: require_once('TranscriptDB/webservices/cart/Sync.php');
29: $smarty->assign('regexCartName', \webservices\cart\Sync::$regexCartName);
30:
31: $smarty->assign('default_release', DEFAULT_RELEASE);
32: $smarty->assign('default_organism', DEFAULT_ORGANISM);
33:
34: function requestVal($key, $regexp = "/^.*$/", $defaultvalue = "") {
35: if (!isset($_REQUEST[$key]) || !preg_match($regexp, $_REQUEST[$key]))
36: return $defaultvalue;
37: else
38: return $_REQUEST[$key];
39: }
40:
41:
42:
43: $redir_url = isset($_SERVER['REDIRECT_URL']) ? $_SERVER['REDIRECT_URL'] : $_SERVER['REQUEST_URI'];
44:
45: if (isset($_GET['logout'])) {
46: session_destroy();
47: header('Location: ' . preg_replace('/([?&])logout(=[^&]+)?(&|$)/', '$1', $redir_url));
48: die();
49: }
50: try {
51: $openid = new LightOpenID($_SERVER['HTTP_HOST']);
52: if (!$openid->mode) {
53: if (isset($_GET['login'])) {
54: $openid->identity = 'https://www.google.com/accounts/o8/id';
55: header('Location: ' . $openid->authUrl());
56: die();
57: }
58: } else {
59: if ($openid->validate()) {
60: $_SESSION['OpenID'] = $openid->identity;
61: header('Location: ' . $redir_url);
62: die();
63: }
64: }
65: } catch (ErrorException $e) {
66:
67: }
68:
69:
70: $page = requestVal('page', '/^[a-z-_\.]*$/', '');
71: switch ($page) {
72: case 'js':
73: $js = requestVal('js', '/^[a-zA-Z-\.]*$/', '');
74: header('Content-type: application/javascript');
75: $smarty->display(sprintf('js/%s.js', $js));
76: die();
77: case 'multisearch':
78: $smarty->display('multisearch.tpl');
79: die();
80: case 'combisearch':
81: $smarty->display('combisearch.tpl');
82: die();
83: case 'advancedsearch':
84: $smarty->display('advanced_search.tpl');
85: die();
86: case 'details-byid':
87: if (display_feature_by_id(requestVal('feature_id', '/^[0-9]+$/', '')))
88: die();
89: break;
90: case 'details':
91: if (display_feature(requestVal('organism', '/^[0-9]+$/i', ''), requestVal('release', '/^[a-z0-9-_.]+$/', ''), requestVal('name', '/^[a-z0-9-_.]+$/', '')))
92: die();
93: break;
94: case 'diffexpr':
95: $smarty->display('diffexpr.tpl');
96: die();
97: break;
98: case 'graphs':
99: $cartname = requestVal('query', sprintf('/%s/i', \webservices\cart\Sync::$regexCartName), '');
100: $smarty->assign('cartname', $cartname);
101: $smarty->display('mav.tpl');
102: die();
103: case 'blast':
104: $smarty->display('extends:blast-layout.tpl|blast.tpl');
105: die();
106: case 'blast_results':
107: $smarty->display('extends:blast-layout.tpl|blast_results.tpl');
108: die();
109: }
110: $smarty->display('welcome.tpl');
111:
112: function display_feature($organism, $release, $name) {
113:
114: global $db;
115: $stm = $db->prepare(<<<EOF
116: SELECT feature_id
117: FROM feature JOIN dbxref ON (feature.dbxref_id = dbxref.dbxref_id)
118: WHERE organism_id = ? AND accession=? AND name=?
119: EOF
120: );
121:
122: $stm->execute(array($organism, $release, $name));
123:
124: if ($stm->rowCount() == 0)
125: return false;
126:
127: return display_feature_by_id($stm->fetchColumn());
128: }
129:
130: function display_feature_by_id($feature_id) {
131: global $db;
132: global $smarty;
133: $stm = $db->prepare(<<<EOF
134: SELECT type_id, dbxref.accession, organism_id FROM feature JOIN dbxref ON (feature.dbxref_id = dbxref.dbxref_id) WHERE feature_id=?;
135: EOF
136: );
137: $stm->execute(array($feature_id));
138: if ($stm->rowCount() == 0)
139: return false;
140: $row = $stm->fetch(PDO::FETCH_ASSOC);
141: $smarty->assign('release', $row['accession']);
142: $smarty->assign('organism', $row['organism_id']);
143: switch ($row['type_id']) {
144: case CV_ISOFORM:
145: return display_isoform_by_id($feature_id);
146: break;
147: case CV_UNIGENE:
148: return display_unigene_by_id($feature_id);
149: break;
150: case CV_PREDPEP:
151: $stm_parent_isoform = $db->prepare('SELECT srcfeature_id FROM featureloc WHERE feature_id=? ');
152: $stm_parent_isoform->execute(array($feature_id));
153: return display_feature_by_id($stm_parent_isoform->fetchColumn());
154: die();
155: }
156: return false;
157: }
158:
159: function display_unigene_by_id($unigene_feature_id) {
160: global $smarty;
161: $smarty->assign('unigene_feature_id', $unigene_feature_id);
162: $smarty->display('display-unigene.tpl');
163: return true;
164: }
165:
166: function display_isoform_by_id($isoform_feature_id) {
167: global $smarty;
168: $smarty->assign('isoform_feature_id', $isoform_feature_id);
169: $smarty->display('display-isoform.tpl');
170: return true;
171: }
172:
173: ?>
174: