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 | define('KW_PSU', 67); |
||
94 | define('KW_SU', 68); |
||
95 | define('KW_SINAI_U', 69); |
||
96 | define('KW_AFRICA', 70); |
||
97 | define('KW_EGYPT', 71); |
||
98 | |||
99 | $job_keywords = array(); |
||
100 | |||
101 | function keyword($symbol, $category, $level, $parent, $name) { |
||
102 | global $job_keywords; |
||
103 | $x = (object)array( |
||
104 | 'category'=>$category, |
||
105 | 'level'=>$level, |
||
106 | 'parent'=>$parent, |
||
107 | 'name'=>$name, |
||
108 | 'symbol'=>$symbol |
||
109 | ); |
||
110 | $job_keywords[constant($symbol)] = $x; |
||
111 | } |
||
112 | |||
113 | keyword('KW_ASTRONOMY', KW_CATEGORY_SCIENCE, 0, 0, |
||
114 | 'Astronomy' |
||
115 | ); |
||
116 | keyword('KW_SETI', KW_CATEGORY_SCIENCE, 1, KW_ASTRONOMY, |
||
117 | 'Search for Extraterrestrial Intelligence' |
||
118 | ); |
||
119 | keyword('KW_PULSARS', KW_CATEGORY_SCIENCE, 1, KW_ASTRONOMY, |
||
120 | 'Detection and study of pulsars' |
||
121 | ); |
||
122 | keyword('KW_GW', KW_CATEGORY_SCIENCE, 1, KW_ASTRONOMY, |
||
123 | 'Detection and study of gravitational waves' |
||
124 | ); |
||
125 | keyword('KW_COSMOLOGY', KW_CATEGORY_SCIENCE, 1, KW_ASTRONOMY, |
||
126 | 'Cosmology' |
||
127 | ); |
||
128 | keyword('KW_CHEMISTRY', KW_CATEGORY_SCIENCE, 0, 0, |
||
129 | 'Chemistry' |
||
130 | ); |
||
131 | keyword('KW_PHYSICS', KW_CATEGORY_SCIENCE, 0, 0, |
||
132 | 'Physics' |
||
133 | ); |
||
134 | keyword('KW_PARTICLE_PHYSICS', KW_CATEGORY_SCIENCE, 1, KW_PHYSICS, |
||
135 | 'Particle physics' |
||
136 | ); |
||
137 | keyword('KW_NANOSCIENCE', KW_CATEGORY_SCIENCE, 1, KW_PHYSICS, |
||
138 | 'Nanoscience' |
||
139 | ); |
||
140 | keyword('KW_BIOMED', KW_CATEGORY_SCIENCE, 0, 0, |
||
141 | 'Biology and Medicine' |
||
142 | ); |
||
143 | keyword('KW_DRUG_DISCOVERY', KW_CATEGORY_SCIENCE, 1, KW_BIOMED, |
||
144 | 'Drug discovery' |
||
145 | ); |
||
146 | keyword('KW_PROTEINS', KW_CATEGORY_SCIENCE, 1, KW_BIOMED, |
||
147 | 'Protein research' |
||
148 | ); |
||
149 | keyword('KW_GENETICS', KW_CATEGORY_SCIENCE, 1, KW_BIOMED, |
||
150 | 'Genetics and Phylogeny' |
||
151 | ); |
||
152 | keyword('KW_DISEASE', KW_CATEGORY_SCIENCE, 1, KW_BIOMED, |
||
153 | 'Disease research' |
||
154 | ); |
||
155 | keyword('KW_CANCER', KW_CATEGORY_SCIENCE, 2, KW_DISEASE, |
||
156 | 'Cancer research' |
||
157 | ); |
||
158 | keyword('KW_VIRUS', KW_CATEGORY_SCIENCE, 2, KW_DISEASE, |
||
159 | 'COVID-19 and virology' |
||
160 | ); |
||
161 | keyword('KW_MATH_CS', KW_CATEGORY_SCIENCE, 0, 0, |
||
162 | 'Mathematics and Computer Science' |
||
163 | ); |
||
164 | keyword('KW_NUMBER_THEORY', KW_CATEGORY_SCIENCE, 1, KW_MATH_CS, |
||
165 | 'Number Theory' |
||
166 | ); |
||
167 | keyword('KW_CRYPTO', KW_CATEGORY_SCIENCE, 1, KW_MATH_CS, |
||
168 | 'Cryptography' |
||
169 | ); |
||
170 | keyword('KW_GAMES', KW_CATEGORY_SCIENCE, 1, KW_MATH_CS, |
||
171 | 'Games' |
||
172 | ); |
||
173 | keyword('KW_AI', KW_CATEGORY_SCIENCE, 0, 0, |
||
174 | 'Artificial Intelligence and Cognitive Science' |
||
175 | ); |
||
176 | keyword('KW_EARTH_SCI', KW_CATEGORY_SCIENCE, 0, 0, |
||
177 | 'Earth sciences' |
||
178 | ); |
||
179 | keyword('KW_ENV_RESEARCH', KW_CATEGORY_SCIENCE, 1, KW_EARTH_SCI, |
||
180 | 'Environmental research' |
||
181 | ); |
||
182 | keyword('KW_CLIMATE', KW_CATEGORY_SCIENCE, 1, KW_EARTH_SCI, |
||
183 | 'Climate research' |
||
184 | ); |
||
185 | |||
186 | // Locations |
||
187 | |||
188 | keyword('KW_INTERNATIONAL', KW_CATEGORY_LOC, 0, 0, |
||
189 | 'International' |
||
190 | ); |
||
191 | keyword('KW_EUROPE', KW_CATEGORY_LOC, 0, 0, |
||
192 | 'Europe' |
||
193 | ); |
||
194 | keyword('KW_CERN', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
195 | 'CERN' |
||
196 | ); |
||
197 | keyword('KW_CZECH', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
198 | 'Czech Republic' |
||
199 | ); |
||
200 | keyword('KW_CHARLES_PRAGUE', KW_CATEGORY_LOC, 2, KW_CZECH, |
||
201 | 'Charles University in Prague' |
||
202 | ); |
||
203 | keyword('KW_FRANCE', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
204 | 'France' |
||
205 | ); |
||
206 | keyword('KW_GERMANY', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
207 | 'Germany' |
||
208 | ); |
||
209 | keyword('KW_AEI', KW_CATEGORY_LOC, 2, KW_GERMANY, |
||
210 | 'Albert Einstein Institute for Gravitational Physics' |
||
211 | ); |
||
212 | keyword('KW_RECHENKRAFT', KW_CATEGORY_LOC, 2, KW_GERMANY, |
||
213 | 'Rechenkraft.net e.V' |
||
214 | ); |
||
215 | keyword('KW_RHEINMAIN', KW_CATEGORY_LOC, 2, KW_GERMANY, |
||
216 | 'Hochschule RheinMain University of Applied Sciences' |
||
217 | ); |
||
218 | keyword('KW_HOLLAND', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
219 | 'Holland' |
||
220 | ); |
||
221 | keyword('KW_HUNGARY', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
222 | 'Hungary' |
||
223 | ); |
||
224 | keyword('KW_IRELAND', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
225 | 'Ireland' |
||
226 | ); |
||
227 | keyword('KW_UC_DUBLIN', KW_CATEGORY_LOC, 2, KW_IRELAND, |
||
228 | 'University College Dublin' |
||
229 | ); |
||
230 | keyword('KW_POLAND', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
231 | 'Poland' |
||
232 | ); |
||
233 | keyword('KW_U_WARSAW', KW_CATEGORY_LOC, 2, KW_POLAND, |
||
234 | 'University of Warsaw' |
||
235 | ); |
||
236 | keyword('KW_RUSSIA', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
237 | 'Russia' |
||
238 | ); |
||
239 | keyword('KW_SW_STATE_RUSSIA', KW_CATEGORY_LOC, 2, KW_RUSSIA, |
||
240 | 'Southwest State University, Russia' |
||
241 | ); |
||
242 | keyword('KW_RAS', KW_CATEGORY_LOC, 2, KW_RUSSIA, |
||
243 | 'Russian Academy of Science' |
||
244 | ); |
||
245 | keyword('KW_SPAIN', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
246 | 'Spain' |
||
247 | ); |
||
248 | keyword('KW_SAN_JORGE', KW_CATEGORY_LOC, 2, KW_SPAIN, |
||
249 | 'San Jorge University, Zaragoza, Spain' |
||
250 | ); |
||
251 | keyword('KW_PRBB', KW_CATEGORY_LOC, 2, KW_SPAIN, |
||
252 | 'Barcelona Biomedical Research Park' |
||
253 | ); |
||
254 | keyword('KW_UK', KW_CATEGORY_LOC, 1, KW_EUROPE, |
||
255 | 'United Kingdom' |
||
256 | ); |
||
257 | keyword('KW_OXFORD', KW_CATEGORY_LOC, 2, KW_UK, |
||
258 | 'Oxford University' |
||
259 | ); |
||
260 | keyword('KW_ASIA', KW_CATEGORY_LOC, 0, 0, |
||
261 | 'Asia' |
||
262 | ); |
||
263 | keyword('KW_CHINA', KW_CATEGORY_LOC, 1, KW_ASIA, |
||
264 | 'China' |
||
265 | ); |
||
266 | keyword('KW_OCEANIA', KW_CATEGORY_LOC, 0, 0, |
||
267 | 'Oceania' |
||
268 | ); |
||
269 | keyword('KW_AUSTRALIA', KW_CATEGORY_LOC, 1, KW_OCEANIA, |
||
270 | 'Australia' |
||
271 | ); |
||
272 | |||
273 | keyword('KW_AFRICA', KW_CATEGORY_LOC, 0, 0, |
||
274 | 'Africa' |
||
275 | ); |
||
276 | keyword('KW_EGYPT', KW_CATEGORY_LOC, 1, KW_AFRICA, |
||
277 | 'Egypt' |
||
278 | ); |
||
279 | keyword('KW_SINAI_U', KW_CATEGORY_LOC, 2, KW_EGYPT, |
||
280 | 'Sinai University' |
||
281 | ); |
||
282 | |||
283 | keyword('KW_AMERICAS', KW_CATEGORY_LOC, 0, 0, |
||
284 | 'Americas' |
||
285 | ); |
||
286 | keyword('KW_CANADA', KW_CATEGORY_LOC, 1, KW_AMERICAS, |
||
287 | 'Canada' |
||
288 | ); |
||
289 | keyword('KW_US', KW_CATEGORY_LOC, 1, KW_AMERICAS, |
||
290 | 'United States' |
||
291 | ); |
||
292 | keyword('KW_UCB', KW_CATEGORY_LOC, 2, KW_US, |
||
293 | 'University of California, Berkeley' |
||
294 | ); |
||
295 | keyword('KW_UW', KW_CATEGORY_LOC, 2, KW_US, |
||
296 | 'University of Washington' |
||
297 | ); |
||
298 | keyword('KW_U_DAYTON', KW_CATEGORY_LOC, 2, KW_US, |
||
299 | 'University of Dayton' |
||
300 | ); |
||
301 | keyword('KW_WRIGHT_STATE', KW_CATEGORY_LOC, 2, KW_US, |
||
302 | 'Wright State University' |
||
303 | ); |
||
304 | keyword('KW_USC', KW_CATEGORY_LOC, 2, KW_US, |
||
305 | 'University of Southern California' |
||
306 | ); |
||
307 | keyword('KW_FULLERTON', KW_CATEGORY_LOC, 2, KW_US, |
||
308 | 'California State University Fullerton' |
||
309 | ); |
||
310 | keyword('KW_ARIZONA_STATE', KW_CATEGORY_LOC, 2, KW_US, |
||
311 | 'Arizona State University' |
||
312 | ); |
||
313 | keyword('KW_U_ILLINOIS', KW_CATEGORY_LOC, 2, KW_US, |
||
314 | 'University of Illinois' |
||
315 | ); |
||
316 | keyword('KW_RPI', KW_CATEGORY_LOC, 2, KW_US, |
||
317 | 'Rensselaer Polytechnic Institute' |
||
318 | ); |
||
319 | keyword('KW_UND', KW_CATEGORY_LOC, 2, KW_US, |
||
320 | 'University of North Dakota' |
||
321 | ); |
||
322 | keyword('KW_PSU', KW_CATEGORY_LOC, 2, KW_US, |
||
323 | 'Penn State University' |
||
324 | ); |
||
325 | keyword('KW_SU', KW_CATEGORY_LOC, 2, KW_US, |
||
326 | 'Shenandoah University' |
||
327 | ); |
||
328 | |||
329 | // return a list of [value, name] pairs for the given category |
||
330 | // |
||
331 | function keyword_select_options($category) { |
||
332 | global $job_keywords; |
||
333 | $opts = []; |
||
334 | kw_children(); |
||
335 | foreach ($job_keywords as $id=>$k) { |
||
0 ignored issues
–
show
Coding Style
introduced
by
![]() |
|||
336 | if ($k->category != $category) continue; |
||
337 | if ($k->parent) continue; |
||
338 | $opts = array_merge($opts, kw_options($id)); |
||
339 | } |
||
340 | return $opts; |
||
341 | } |
||
342 | |||
343 | function kw_children() { |
||
344 | global $job_keywords; |
||
345 | foreach ($job_keywords as $id=>$k) { |
||
0 ignored issues
–
show
|
|||
346 | $job_keywords[$id]->children = array(); |
||
347 | $job_keywords[$id]->expand = 0; |
||
348 | } |
||
349 | foreach ($job_keywords as $id=>$k) { |
||
0 ignored issues
–
show
|
|||
350 | if (!$k->parent) continue; |
||
351 | $job_keywords[$k->parent]->children[] = $id; |
||
352 | } |
||
353 | } |
||
354 | |||
355 | function kw_options($id, $indent='') { |
||
356 | global $job_keywords; |
||
357 | $kw = $job_keywords[$id]; |
||
358 | $opts = [[$id, "$indent$kw->name"]]; |
||
359 | $indent .= ' '; |
||
360 | foreach ($kw->children as $k) { |
||
361 | $opts = array_merge($opts, kw_options($k, $indent)); |
||
362 | } |
||
363 | return $opts; |
||
364 | } |
||
365 | |||
366 | function kw_id_to_name($id) { |
||
367 | global $job_keywords; |
||
368 | $kw = $job_keywords[$id]; |
||
369 | return $kw->name; |
||
370 | } |
||
371 | |||
372 | function kw_array_to_str($kws, $sep='<br>') { |
||
373 | $x = array_map('strval', $kws); |
||
374 | $x = array_map('kw_id_to_name', $x); |
||
375 | return implode($sep, $x); |
||
376 | } |
||
377 | |||
378 | ?> |
||
379 |