1 | <?php |
||
2 | |||
3 | // This file is part of BOINC. |
||
4 | // https://boinc.berkeley.edu |
||
5 | // Copyright (C) 2020 University of California |
||
6 | // |
||
7 | // BOINC is free software; you can redistribute it and/or modify it |
||
8 | // under the terms of the GNU Lesser General Public License |
||
9 | // as published by the Free Software Foundation, |
||
10 | // either version 3 of the License, or (at your option) any later version. |
||
11 | // |
||
12 | // BOINC is distributed in the hope that it will be useful, |
||
13 | // but WITHOUT ANY WARRANTY; without even the implied warranty of |
||
14 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. |
||
15 | // See the GNU Lesser General Public License for more details. |
||
16 | // |
||
17 | // You should have received a copy of the GNU Lesser General Public License |
||
18 | // along with BOINC. If not, see <http://www.gnu.org/licenses/>. |
||
19 | |||
20 | // job/project/preference keywords, master list |
||
21 | |||
22 | // NEVER REUSE IDS |
||
23 | |||
24 | define('KW_CATEGORY_SCIENCE', 0); |
||
25 | define('KW_CATEGORY_LOC', 1); |
||
26 | |||
27 | define('KW_ASTRONOMY', 1); |
||
28 | define('KW_SETI', 2); |
||
29 | define('KW_PULSARS', 3); |
||
30 | define('KW_GW', 4); |
||
31 | define('KW_COSMOLOGY', 5); |
||
32 | define('KW_PHYSICS', 6); |
||
33 | define('KW_PARTICLE_PHYSICS', 7); |
||
34 | define('KW_NANOSCIENCE', 8); |
||
35 | define('KW_BIOMED', 9); |
||
36 | define('KW_DRUG_DISCOVERY', 10); |
||
37 | define('KW_PROTEINS', 11); |
||
38 | define('KW_GENETICS', 12); |
||
39 | define('KW_DISEASE', 13); |
||
40 | define('KW_CANCER', 14); |
||
41 | define('KW_MATH_CS', 15); |
||
42 | define('KW_AI', 16); |
||
43 | define('KW_OCEANIA', 17); |
||
44 | define('KW_AUSTRALIA', 18); |
||
45 | |||
46 | define('KW_EUROPE', 20); |
||
47 | define('KW_GERMANY', 21); |
||
48 | define('KW_ASIA', 22); |
||
49 | define('KW_AMERICAS', 23); |
||
50 | define('KW_US', 24); |
||
51 | define('KW_UCB', 25); |
||
52 | define('KW_AEI', 26); |
||
53 | define('KW_CERN', 27); |
||
54 | define('KW_UW', 28); |
||
55 | define('KW_EARTH_SCI', 29); |
||
56 | define('KW_SPAIN', 30); |
||
57 | define('KW_SAN_JORGE', 31); |
||
58 | define('KW_NUMBER_THEORY', 32); |
||
59 | define('KW_CRYPTO', 33); |
||
60 | define('KW_ENV_RESEARCH', 34); |
||
61 | define('KW_CLIMATE', 35); |
||
62 | define('KW_CZECH', 36); |
||
63 | define('KW_CHARLES_PRAGUE', 37); |
||
64 | define('KW_RECHENKRAFT', 38); |
||
65 | define('KW_RHEINMAIN', 39); |
||
66 | define('KW_HUNGARY', 40); |
||
67 | define('KW_IRELAND', 41); |
||
68 | define('KW_UC_DUBLIN', 42); |
||
69 | define('KW_POLAND', 43); |
||
70 | define('KW_RUSSIA', 44); |
||
71 | define('KW_SW_STATE_RUSSIA', 45); |
||
72 | define('KW_RAS', 46); |
||
73 | define('KW_PRBB', 47); |
||
74 | define('KW_UK', 48); |
||
75 | define('KW_OXFORD', 49); |
||
76 | define('KW_CHINA', 50); |
||
77 | define('KW_U_DAYTON', 51); |
||
78 | define('KW_WRIGHT_STATE', 52); |
||
79 | define('KW_USC', 53); |
||
80 | define('KW_FULLERTON', 54); |
||
81 | define('KW_ARIZONA_STATE', 55); |
||
82 | define('KW_U_ILLINOIS', 56); |
||
83 | define('KW_U_WARSAW', 57); |
||
84 | define('KW_RPI', 58); |
||
85 | define('KW_INTERNATIONAL', 59); |
||
86 | define('KW_UND', 60); |
||
87 | define('KW_HOLLAND', 61); |
||
88 | define('KW_CHEMISTRY', 62); |
||
89 | define('KW_GAMES', 63); |
||
90 | define('KW_VIRUS', 64); |
||
91 | define('KW_FRANCE', 65); |
||
92 | define('KW_CANADA', 66); |
||
93 | |||
94 | $job_keywords = array(); |
||
95 | |||
96 | function keyword($symbol, $category, $level, $parent, $name) { |
||
97 | global $job_keywords; |
||
98 | $x = (object)array( |
||
99 | 'category'=>$category, |
||
100 | 'level'=>$level, |
||
101 | 'parent'=>$parent, |
||
102 | 'name'=>$name, |
||
103 | 'symbol'=>$symbol |
||
104 | ); |
||
105 | $job_keywords[constant($symbol)] = $x; |
||
106 | } |
||
107 | |||
108 | keyword('KW_ASTRONOMY', KW_CATEGORY_SCIENCE, 0, 0, |
||
109 | 'Astronomy' |
||
110 | ); |
||
111 | keyword('KW_SETI', KW_CATEGORY_SCIENCE, 1, KW_ASTRONOMY, |
||
112 | 'Search for Extraterrestrial Intelligence' |
||
113 | ); |
||
114 | keyword('KW_PULSARS', KW_CATEGORY_SCIENCE, 1, KW_ASTRONOMY, |
||
115 | 'Detection and study of pulsars' |
||
116 | ); |
||
117 | keyword('KW_GW', KW_CATEGORY_SCIENCE, 1, KW_ASTRONOMY, |
||
118 | 'Detection and study of gravitational waves' |
||
119 | ); |
||
120 | keyword('KW_COSMOLOGY', KW_CATEGORY_SCIENCE, 1, KW_ASTRONOMY, |
||
121 | 'Cosmology' |
||
122 | ); |
||
123 | keyword('KW_CHEMISTRY', KW_CATEGORY_SCIENCE, 0, 0, |
||
124 | 'Chemistry' |
||
125 | ); |
||
126 | keyword('KW_PHYSICS', KW_CATEGORY_SCIENCE, 0, 0, |
||
127 | 'Physics' |
||
128 | ); |
||
129 | keyword('KW_PARTICLE_PHYSICS', KW_CATEGORY_SCIENCE, 1, KW_PHYSICS, |
||
130 | 'Particle physics' |
||
131 | ); |
||
132 | keyword('KW_NANOSCIENCE', KW_CATEGORY_SCIENCE, 1, KW_PHYSICS, |
||
133 | 'Nanoscience' |
||
134 | ); |
||
135 | keyword('KW_BIOMED', KW_CATEGORY_SCIENCE, 0, 0, |
||
136 | 'Biology and Medicine' |
||
137 | ); |
||
138 | keyword('KW_DRUG_DISCOVERY', KW_CATEGORY_SCIENCE, 1, KW_BIOMED, |
||
139 | 'Drug discovery' |
||
140 | ); |
||
141 | keyword('KW_PROTEINS', KW_CATEGORY_SCIENCE, 1, KW_BIOMED, |
||
142 | 'Protein research' |
||
143 | ); |
||
144 | keyword('KW_GENETICS', KW_CATEGORY_SCIENCE, 1, KW_BIOMED, |
||
145 | 'Genetics and Phylogeny' |
||
146 | ); |
||
147 | keyword('KW_DISEASE', KW_CATEGORY_SCIENCE, 1, KW_BIOMED, |
||
148 | 'Disease research' |
||
149 | ); |
||
150 | keyword('KW_CANCER', KW_CATEGORY_SCIENCE, 2, KW_DISEASE, |
||
151 | 'Cancer research' |
||
152 | ); |
||
153 | keyword('KW_VIRUS', KW_CATEGORY_SCIENCE, 2, KW_DISEASE, |
||
154 | 'COVID-19 and virology' |
||
155 | ); |
||
156 | keyword('KW_MATH_CS', KW_CATEGORY_SCIENCE, 0, 0, |
||
157 | 'Mathematics and Computer Science' |
||
158 | ); |
||
159 | keyword('KW_NUMBER_THEORY', KW_CATEGORY_SCIENCE, 1, KW_MATH_CS, |
||
160 | 'Number Theory' |
||
161 | ); |
||
162 | keyword('KW_CRYPTO', KW_CATEGORY_SCIENCE, 1, KW_MATH_CS, |
||
163 | 'Cryptography' |
||
164 | ); |
||
165 | keyword('KW_GAMES', KW_CATEGORY_SCIENCE, 1, KW_MATH_CS, |
||
166 | 'Games' |
||
167 | ); |
||
168 | keyword('KW_AI', KW_CATEGORY_SCIENCE, 0, 0, |
||
169 | 'Artificial Intelligence and Cognitive Science' |
||
170 | ); |
||
171 | keyword('KW_EARTH_SCI', KW_CATEGORY_SCIENCE, 0, 0, |
||
172 | 'Earth sciences' |
||
173 | ); |
||
174 | keyword('KW_ENV_RESEARCH', KW_CATEGORY_SCIENCE, 1, KW_EARTH_SCI, |
||
175 | 'Environmental research' |
||
176 | ); |
||
177 | keyword('KW_CLIMATE', KW_CATEGORY_SCIENCE, 1, KW_EARTH_SCI, |
||
178 | 'Climate research' |
||
179 | ); |
||
180 | |||
181 | // Locations |
||
182 | |||
183 | keyword('KW_INTERNATIONAL', KW_CATEGORY_LOC, 0, 0, |
||
184 | 'International' |
||
185 | ); |
||
186 | keyword('KW_EUROPE', KW_CATEGORY_LOC, 0, 0, |
||
187 | 'Europe' |
||
188 | ); |
||
189 | keyword('KW_CERN', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
190 | 'CERN' |
||
191 | ); |
||
192 | keyword('KW_CZECH', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
193 | 'Czech Republic' |
||
194 | ); |
||
195 | keyword('KW_CHARLES_PRAGUE', KW_CATEGORY_LOC, 2, KW_CZECH, |
||
196 | 'Charles University in Prague' |
||
197 | ); |
||
198 | keyword('KW_FRANCE', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
199 | 'France' |
||
200 | ); |
||
201 | keyword('KW_GERMANY', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
202 | 'Germany' |
||
203 | ); |
||
204 | keyword('KW_AEI', KW_CATEGORY_LOC, 2, KW_GERMANY, |
||
205 | 'Albert Einstein Institute for Gravitational Physics' |
||
206 | ); |
||
207 | keyword('KW_RECHENKRAFT', KW_CATEGORY_LOC, 2, KW_GERMANY, |
||
208 | 'Rechenkraft.net e.V' |
||
209 | ); |
||
210 | keyword('KW_RHEINMAIN', KW_CATEGORY_LOC, 2, KW_GERMANY, |
||
211 | 'Hochschule RheinMain University of Applied Sciences' |
||
212 | ); |
||
213 | keyword('KW_HOLLAND', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
214 | 'Holland' |
||
215 | ); |
||
216 | keyword('KW_HUNGARY', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
217 | 'Hungary' |
||
218 | ); |
||
219 | keyword('KW_IRELAND', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
220 | 'Ireland' |
||
221 | ); |
||
222 | keyword('KW_UC_DUBLIN', KW_CATEGORY_LOC, 2, KW_IRELAND, |
||
223 | 'University College Dublin' |
||
224 | ); |
||
225 | keyword('KW_POLAND', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
226 | 'Poland' |
||
227 | ); |
||
228 | keyword('KW_U_WARSAW', KW_CATEGORY_LOC, 2, KW_POLAND, |
||
229 | 'University of Warsaw' |
||
230 | ); |
||
231 | keyword('KW_RUSSIA', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
232 | 'Russia' |
||
233 | ); |
||
234 | keyword('KW_SW_STATE_RUSSIA', KW_CATEGORY_LOC, 2, KW_RUSSIA, |
||
235 | 'Southwest State University, Russia' |
||
236 | ); |
||
237 | keyword('KW_RAS', KW_CATEGORY_LOC, 2, KW_RUSSIA, |
||
238 | 'Russian Academy of Science' |
||
239 | ); |
||
240 | keyword('KW_SPAIN', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
241 | 'Spain' |
||
242 | ); |
||
243 | keyword('KW_SAN_JORGE', KW_CATEGORY_LOC, 2, KW_SPAIN, |
||
244 | 'San Jorge University, Zaragoza, Spain' |
||
245 | ); |
||
246 | keyword('KW_PRBB', KW_CATEGORY_LOC, 2, KW_SPAIN, |
||
247 | 'Barcelona Biomedical Research Park' |
||
248 | ); |
||
249 | keyword('KW_UK', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
250 | 'United Kingdom' |
||
251 | ); |
||
252 | keyword('KW_OXFORD', KW_CATEGORY_LOC, 2, KW_UK, |
||
253 | 'Oxford University' |
||
254 | ); |
||
255 | keyword('KW_ASIA', KW_CATEGORY_LOC, 0, 0, |
||
256 | 'Asia' |
||
257 | ); |
||
258 | keyword('KW_CHINA', KW_CATEGORY_LOC, 1, KW_ASIA, |
||
259 | 'China' |
||
260 | ); |
||
261 | keyword('KW_OCEANIA', KW_CATEGORY_LOC, 0, 0, |
||
262 | 'Oceania' |
||
263 | ); |
||
264 | keyword('KW_AUSTRALIA', KW_CATEGORY_LOC, 1, KW_OCEANIA, |
||
265 | 'Australia' |
||
266 | ); |
||
267 | keyword('KW_AMERICAS', KW_CATEGORY_LOC, 0, 0, |
||
268 | 'Americas' |
||
269 | ); |
||
270 | keyword('KW_CANADA', KW_CATEGORY_LOC, 1, KW_AMERICAS, |
||
271 | 'Canada' |
||
272 | ); |
||
273 | keyword('KW_US', KW_CATEGORY_LOC, 1, KW_AMERICAS, |
||
274 | 'United States' |
||
275 | ); |
||
276 | keyword('KW_UCB', KW_CATEGORY_LOC, 2, KW_US, |
||
277 | 'University of California, Berkeley' |
||
278 | ); |
||
279 | keyword('KW_UW', KW_CATEGORY_LOC, 2, KW_US, |
||
280 | 'University of Washington' |
||
281 | ); |
||
282 | keyword('KW_U_DAYTON', KW_CATEGORY_LOC, 2, KW_US, |
||
283 | 'University of Dayton' |
||
284 | ); |
||
285 | keyword('KW_WRIGHT_STATE', KW_CATEGORY_LOC, 2, KW_US, |
||
286 | 'Wright State University' |
||
287 | ); |
||
288 | keyword('KW_USC', KW_CATEGORY_LOC, 2, KW_US, |
||
289 | 'University of Southern California' |
||
290 | ); |
||
291 | keyword('KW_FULLERTON', KW_CATEGORY_LOC, 2, KW_US, |
||
292 | 'California State University Fullerton' |
||
293 | ); |
||
294 | keyword('KW_ARIZONA_STATE', KW_CATEGORY_LOC, 2, KW_US, |
||
295 | 'Arizona State University' |
||
296 | ); |
||
297 | keyword('KW_U_ILLINOIS', KW_CATEGORY_LOC, 2, KW_US, |
||
298 | 'University of Illinois' |
||
299 | ); |
||
300 | keyword('KW_RPI', KW_CATEGORY_LOC, 2, KW_US, |
||
301 | 'Rensselaer Polytechnic Institute' |
||
302 | ); |
||
303 | keyword('KW_UND', KW_CATEGORY_LOC, 2, KW_US, |
||
304 | 'University of North Dakota' |
||
305 | ); |
||
306 | |||
307 | // return a list of [value, name] pairs for the given category |
||
308 | // |
||
309 | function keyword_select_options($category) { |
||
310 | global $job_keywords; |
||
311 | $opts = []; |
||
312 | kw_children(); |
||
313 | foreach ($job_keywords as $id=>$k) { |
||
0 ignored issues
–
show
Coding Style
introduced
by
![]() |
|||
314 | if ($k->category != $category) continue; |
||
315 | if ($k->parent) continue; |
||
316 | $opts = array_merge($opts, kw_options($id)); |
||
317 | } |
||
318 | return $opts; |
||
319 | } |
||
320 | |||
321 | function kw_children() { |
||
322 | global $job_keywords; |
||
323 | foreach ($job_keywords as $id=>$k) { |
||
0 ignored issues
–
show
|
|||
324 | $job_keywords[$id]->children = array(); |
||
325 | $job_keywords[$id]->expand = 0; |
||
326 | } |
||
327 | foreach ($job_keywords as $id=>$k) { |
||
0 ignored issues
–
show
|
|||
328 | if (!$k->parent) continue; |
||
329 | $job_keywords[$k->parent]->children[] = $id; |
||
330 | } |
||
331 | } |
||
332 | |||
333 | function kw_options($id, $indent='') { |
||
334 | global $job_keywords; |
||
335 | $kw = $job_keywords[$id]; |
||
336 | $opts = [[$id, "$indent$kw->name"]]; |
||
337 | $indent .= ' '; |
||
338 | foreach ($kw->children as $k) { |
||
339 | $opts = array_merge($opts, kw_options($k, $indent)); |
||
340 | } |
||
341 | return $opts; |
||
342 | } |
||
343 | |||
344 | function kw_id_to_name($id) { |
||
345 | global $job_keywords; |
||
346 | $kw = $job_keywords[$id]; |
||
347 | return $kw->name; |
||
348 | } |
||
349 | |||
350 | function kw_array_to_str($kws, $sep='<br>') { |
||
351 | $x = array_map('strval', $kws); |
||
352 | $x = array_map('kw_id_to_name', $x); |
||
353 | return implode($sep, $x); |
||
354 | } |
||
355 | |||
356 | ?> |
||
357 |