studium 0.10.1

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of studium might be problematic. Click here for more details.

Files changed (882) hide show
  1. checksums.yaml +7 -0
  2. data/README.md +1982 -0
  3. data/bin/ask_exam_question +7 -0
  4. data/bin/check_description_of_these_lectures +7 -0
  5. data/bin/curriculum_module_displayer +7 -0
  6. data/bin/d10 +7 -0
  7. data/bin/d100 +7 -0
  8. data/bin/d15 +7 -0
  9. data/bin/d20 +7 -0
  10. data/bin/d25 +7 -0
  11. data/bin/d3 +7 -0
  12. data/bin/d30 +7 -0
  13. data/bin/d5 +7 -0
  14. data/bin/determine_curricula +7 -0
  15. data/bin/exam_registration_at +7 -0
  16. data/bin/exam_statistics +7 -0
  17. data/bin/exams_per_month +9 -0
  18. data/bin/finished_exams_at_this_university +7 -0
  19. data/bin/flashcards +7 -0
  20. data/bin/mandatory_continuous_assessment +7 -0
  21. data/bin/mandatory_upcoming_courses +7 -0
  22. data/bin/n_exam_questions_already_answered +16 -0
  23. data/bin/nquestions +7 -0
  24. data/bin/nsolved +7 -0
  25. data/bin/open_last_exam_question_asked_file +7 -0
  26. data/bin/passed_pr/303/274fungsimmanente_courses +7 -0
  27. data/bin/return_n_ects_from_this_file +7 -0
  28. data/bin/show_lectures_on_the_commandline +7 -0
  29. data/bin/show_themes +7 -0
  30. data/bin/solved +9 -0
  31. data/bin/solved_ects +7 -0
  32. data/bin/studienkennzahl +7 -0
  33. data/bin/studium +7 -0
  34. data/bin/studium_skeleton +7 -0
  35. data/bin/ufind +7 -0
  36. data/bin/upcoming_exams +7 -0
  37. data/bin/week_parser +7 -0
  38. data/doc/ECTS_CONSIDERATIONS.md +81 -0
  39. data/doc/HOW_TO_ADAPT_THIS_PROJECT.md +43 -0
  40. data/doc/HOW_TO_DETERMINE_WHICH_PART_IS_THE_QUESTION_AND_WHICH_PART_IS_THE_ANSWER.md +47 -0
  41. data/doc/README.gen +1965 -0
  42. data/doc/TODO_FOR_STUDIUM_GEM.md +113 -0
  43. data/doc/deprecated_components.md +24 -0
  44. data/doc/documentation_for_the_file_lecture_information.md +294 -0
  45. data/doc/elegant_colours.md +20 -0
  46. data/img/STUDIES.png +0 -0
  47. data/lib/studium.rb +5 -0
  48. data/lib/studium/autoinclude.rb +7 -0
  49. data/lib/studium/base/base.rb +84 -0
  50. data/lib/studium/base/cliner.rb +58 -0
  51. data/lib/studium/base/colours.rb +307 -0
  52. data/lib/studium/base/commandline_arguments.rb +64 -0
  53. data/lib/studium/base/constants.rb +34 -0
  54. data/lib/studium/base/curriculum.rb +329 -0
  55. data/lib/studium/base/directory_to_the_exam_topics.rb +23 -0
  56. data/lib/studium/base/editor.rb +28 -0
  57. data/lib/studium/base/encoding.rb +36 -0
  58. data/lib/studium/base/esystem.rb +23 -0
  59. data/lib/studium/base/minimal_prototype.rb +66 -0
  60. data/lib/studium/base/misc.rb +854 -0
  61. data/lib/studium/base/mode.rb +92 -0
  62. data/lib/studium/base/obtain.rb +145 -0
  63. data/lib/studium/base/opnn.rb +46 -0
  64. data/lib/studium/base/prototype.rb +92 -0
  65. data/lib/studium/base/readlines.rb +55 -0
  66. data/lib/studium/base/replace.rb +110 -0
  67. data/lib/studium/base/reset.rb +77 -0
  68. data/lib/studium/base/run.rb +17 -0
  69. data/lib/studium/base/src_dir_at_home.rb +20 -0
  70. data/lib/studium/base/time.rb +634 -0
  71. data/lib/studium/base/unicode.rb +95 -0
  72. data/lib/studium/base/word_wrap.rb +58 -0
  73. data/lib/studium/boku/README.md +4 -0
  74. data/lib/studium/boku/boku_biotechnology_all_master_lectures.rb +142 -0
  75. data/lib/studium/boku/boku_/303/266ffnungszeiten.rb +29 -0
  76. data/lib/studium/boku/show_three_pillars_of_these_lectures.rb +96 -0
  77. data/lib/studium/boku/three_pillars.rb +232 -0
  78. data/lib/studium/check_and_sanitize/README.md +11 -0
  79. data/lib/studium/check_and_sanitize/check_curriculum_for_correct_separation_of_bachelor_and_master.rb +149 -0
  80. data/lib/studium/check_and_sanitize/check_for_all_exam_topics_being_registered.rb +107 -0
  81. data/lib/studium/check_and_sanitize/check_for_existing_description_of_this_lecture.rb +197 -0
  82. data/lib/studium/check_and_sanitize/check_the_lecture_information_file.rb +171 -0
  83. data/lib/studium/check_and_sanitize/missing_priority_entry.rb +44 -0
  84. data/lib/studium/check_and_sanitize/sanitize_this_string_containing_the_lva_dates.rb +79 -0
  85. data/lib/studium/colours/colours.rb +570 -0
  86. data/lib/studium/colours/sfancy.rb +40 -0
  87. data/lib/studium/colours/sfile.rb +35 -0
  88. data/lib/studium/colours/simp.rb +38 -0
  89. data/lib/studium/colours/use_this_colour_for_exam_questions_and_exam_answers.rb +76 -0
  90. data/lib/studium/commandline/commandline.rb +25 -0
  91. data/lib/studium/commandline/constants.rb +16 -0
  92. data/lib/studium/commandline/help.rb +152 -0
  93. data/lib/studium/commandline/initialize.rb +27 -0
  94. data/lib/studium/commandline/menu.rb +760 -0
  95. data/lib/studium/commandline/misc.rb +707 -0
  96. data/lib/studium/commandline/reset.rb +24 -0
  97. data/lib/studium/commandline/run.rb +20 -0
  98. data/lib/studium/constants/boku_wien.rb +52 -0
  99. data/lib/studium/constants/constants.rb +25 -0
  100. data/lib/studium/constants/delay.rb +28 -0
  101. data/lib/studium/constants/editor.rb +28 -0
  102. data/lib/studium/constants/exam_topics.rb +183 -0
  103. data/lib/studium/constants/file_constants.rb +875 -0
  104. data/lib/studium/constants/image_constants.rb +216 -0
  105. data/lib/studium/constants/last_question_asked.rb +38 -0
  106. data/lib/studium/constants/lecture_types_that_are_mandatory_continuous_assessment.rb +47 -0
  107. data/lib/studium/constants/misc.rb +163 -0
  108. data/lib/studium/constants/namespace.rb +14 -0
  109. data/lib/studium/constants/newline.rb +14 -0
  110. data/lib/studium/constants/regexes.rb +35 -0
  111. data/lib/studium/constants/return_file_for_this_curriculum.rb +411 -0
  112. data/lib/studium/constants/roebe.rb +173 -0
  113. data/lib/studium/constants/time.rb +52 -0
  114. data/lib/studium/constants/tu_wien.rb +39 -0
  115. data/lib/studium/constants/uni_wien.rb +24 -0
  116. data/lib/studium/constants/unicode.rb +27 -0
  117. data/lib/studium/constants/week.rb +138 -0
  118. data/lib/studium/constants/www_constants.rb +23 -0
  119. data/lib/studium/curricula/curriculum.rb +199 -0
  120. data/lib/studium/curricula/curriculum_as_string.rb +279 -0
  121. data/lib/studium/curricula/curriculum_module_displayer/constants.rb +38 -0
  122. data/lib/studium/curricula/curriculum_module_displayer/curriculum_module_displayer.rb +417 -0
  123. data/lib/studium/curricula/curriculum_module_displayer/initialize.rb +25 -0
  124. data/lib/studium/curricula/curriculum_module_displayer/menu.rb +45 -0
  125. data/lib/studium/curricula/curriculum_module_displayer/reset.rb +77 -0
  126. data/lib/studium/curricula/curriculum_module_displayer/run.rb +20 -0
  127. data/lib/studium/curricula/curriculum_module_displayer/set_use_this_curriculum.rb +93 -0
  128. data/lib/studium/curricula/curriculum_module_displayer/show_and_report.rb +190 -0
  129. data/lib/studium/curricula/determine_curricula/constants.rb +16 -0
  130. data/lib/studium/curricula/determine_curricula/determine_curricula.rb +36 -0
  131. data/lib/studium/curricula/determine_curricula/help.rb +39 -0
  132. data/lib/studium/curricula/determine_curricula/initialize.rb +48 -0
  133. data/lib/studium/curricula/determine_curricula/menu.rb +138 -0
  134. data/lib/studium/curricula/determine_curricula/misc.rb +402 -0
  135. data/lib/studium/curricula/determine_curricula/report.rb +131 -0
  136. data/lib/studium/curricula/determine_curricula/reset.rb +62 -0
  137. data/lib/studium/curricula/determine_curricula/run.rb +19 -0
  138. data/lib/studium/curricula/determine_elective_courses_in_this_curriculum.rb +112 -0
  139. data/lib/studium/curricula/display_bachelor_curricula.rb +89 -0
  140. data/lib/studium/curricula/mitteilungsbl/303/244tter.rb +336 -0
  141. data/lib/studium/curricula/modules/display_on_the_commandline.rb +316 -0
  142. data/lib/studium/curricula/modules/return_n_ects_in_this_module.rb +74 -0
  143. data/lib/studium/curricula/n_percent_solved_in_this_curriculum.rb +75 -0
  144. data/lib/studium/curricula/random_curriculum_creator.rb +171 -0
  145. data/lib/studium/curricula/show_lectures_of_this_curriculum.rb +114 -0
  146. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/constants.rb +16 -0
  147. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/initialize.rb +27 -0
  148. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/menu.rb +35 -0
  149. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/misc.rb +242 -0
  150. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/report.rb +140 -0
  151. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/reset.rb +67 -0
  152. data/lib/studium/curricula/show_lectures_of_this_curriculum_id/show_lectures_of_this_curriculum_id.rb +37 -0
  153. data/lib/studium/curricula/show_solved_percentage_among_the_registered_curricula.rb +87 -0
  154. data/lib/studium/ects/boku_ects_splitter.rb +127 -0
  155. data/lib/studium/ects/ects_parser.rb +179 -0
  156. data/lib/studium/ects/ects_per_university.rb +140 -0
  157. data/lib/studium/ects/ects_scanner.rb +141 -0
  158. data/lib/studium/ects/ects_to_university_parser.rb +148 -0
  159. data/lib/studium/ects/erledigt.rb +131 -0
  160. data/lib/studium/ects/last_entry_is_curriculum.rb +147 -0
  161. data/lib/studium/ects/n_ects_in_these_lectures.rb +185 -0
  162. data/lib/studium/ects/n_ects_points_in_mandatory_presence_courses.rb +50 -0
  163. data/lib/studium/ects/noch_zu_absolvieren.rb +172 -0
  164. data/lib/studium/ects/return_n_ects_from_this_file.rb +58 -0
  165. data/lib/studium/ects/return_n_ects_from_this_url.rb +202 -0
  166. data/lib/studium/ects/search_for_n_ects.rb +540 -0
  167. data/lib/studium/ects/show_completed_ects_in_all_curricula.rb +210 -0
  168. data/lib/studium/ects/show_passed_credits_per_curriculum.rb +254 -0
  169. data/lib/studium/ects/simple_total_ects_points.rb +143 -0
  170. data/lib/studium/ects/solved_ects/constants.rb +24 -0
  171. data/lib/studium/ects/solved_ects/reset.rb +54 -0
  172. data/lib/studium/ects/solved_ects/solved_ects.rb +325 -0
  173. data/lib/studium/ects/solved_ects_per_university/reset.rb +25 -0
  174. data/lib/studium/ects/solved_ects_per_university/solved_ects_per_university.rb +106 -0
  175. data/lib/studium/ects/still_missing.rb +133 -0
  176. data/lib/studium/ects/sum_of_ects.rb +150 -0
  177. data/lib/studium/encoding/encoding.rb +150 -0
  178. data/lib/studium/exam_topics/RNAi_siRNA_and_miRNA +79 -0
  179. data/lib/studium/exam_topics/abfall_als_ressource +86 -0
  180. data/lib/studium/exam_topics/advanced_biochemistry +762 -0
  181. data/lib/studium/exam_topics/advanced_biotechnology +192 -0
  182. data/lib/studium/exam_topics/advanced_cellbiology +25 -0
  183. data/lib/studium/exam_topics/advanced_chemistry +453 -0
  184. data/lib/studium/exam_topics/advanced_microbiology +44 -0
  185. data/lib/studium/exam_topics/advanced_topics_in_plant_sciences +51 -0
  186. data/lib/studium/exam_topics/advanced_virology +52 -0
  187. data/lib/studium/exam_topics/ageing +101 -0
  188. data/lib/studium/exam_topics/agrar_ecology +61 -0
  189. data/lib/studium/exam_topics/agrarmarkt +70 -0
  190. data/lib/studium/exam_topics/agrarphysik +35 -0
  191. data/lib/studium/exam_topics/alcohols +29 -0
  192. data/lib/studium/exam_topics/algorithms +49 -0
  193. data/lib/studium/exam_topics/allergie +73 -0
  194. data/lib/studium/exam_topics/allgemeine_genetik +1006 -0
  195. data/lib/studium/exam_topics/allgemeine_mikrobiologie +855 -0
  196. data/lib/studium/exam_topics/aminoacids +417 -0
  197. data/lib/studium/exam_topics/analytische_chemie_1 +131 -0
  198. data/lib/studium/exam_topics/analytische_chemie_2 +31 -0
  199. data/lib/studium/exam_topics/anatomie +248 -0
  200. data/lib/studium/exam_topics/anorganische_chemie +289 -0
  201. data/lib/studium/exam_topics/anthropologie +115 -0
  202. data/lib/studium/exam_topics/antibodies_and_antigens +747 -0
  203. data/lib/studium/exam_topics/apoptosis +35 -0
  204. data/lib/studium/exam_topics/archaea +41 -0
  205. data/lib/studium/exam_topics/architecture +8 -0
  206. data/lib/studium/exam_topics/artificial_intelligence +81 -0
  207. data/lib/studium/exam_topics/audio +10 -0
  208. data/lib/studium/exam_topics/bacteriophages +224 -0
  209. data/lib/studium/exam_topics/basic_biochemistry +1008 -0
  210. data/lib/studium/exam_topics/basic_biotechnology +1011 -0
  211. data/lib/studium/exam_topics/basic_chemistry +1007 -0
  212. data/lib/studium/exam_topics/basic_virology +955 -0
  213. data/lib/studium/exam_topics/bauwesen +6 -0
  214. data/lib/studium/exam_topics/betriebssysteme +125 -0
  215. data/lib/studium/exam_topics/betriebswirtschaftslehre +29 -0
  216. data/lib/studium/exam_topics/bioanalytik_und_biosensoren +381 -0
  217. data/lib/studium/exam_topics/biochips +78 -0
  218. data/lib/studium/exam_topics/bioelektrochemie +56 -0
  219. data/lib/studium/exam_topics/biofilms +22 -0
  220. data/lib/studium/exam_topics/bioinformatics +475 -0
  221. data/lib/studium/exam_topics/biological_therapeutics +152 -0
  222. data/lib/studium/exam_topics/biologie +134 -0
  223. data/lib/studium/exam_topics/biomarkers +106 -0
  224. data/lib/studium/exam_topics/biomaterials +46 -0
  225. data/lib/studium/exam_topics/biomembranes +6 -0
  226. data/lib/studium/exam_topics/bionik +65 -0
  227. data/lib/studium/exam_topics/biophysik +34 -0
  228. data/lib/studium/exam_topics/biopolymers +10 -0
  229. data/lib/studium/exam_topics/bioprozesstechnik +139 -0
  230. data/lib/studium/exam_topics/bioressourcenmanagement +78 -0
  231. data/lib/studium/exam_topics/bodenkunde +345 -0
  232. data/lib/studium/exam_topics/bodenmikrobiologie +40 -0
  233. data/lib/studium/exam_topics/cancerbiology +441 -0
  234. data/lib/studium/exam_topics/cell_cultures +154 -0
  235. data/lib/studium/exam_topics/cellbiology +962 -0
  236. data/lib/studium/exam_topics/cellular_transport_and_protein_secretion +27 -0
  237. data/lib/studium/exam_topics/chemische_technologie_anorganischer_stoffe +208 -0
  238. data/lib/studium/exam_topics/chemisches_labor +59 -0
  239. data/lib/studium/exam_topics/chemotaxis_and_motility_in_prokaryotes +74 -0
  240. data/lib/studium/exam_topics/citric_acid_cycle +70 -0
  241. data/lib/studium/exam_topics/clinical_microbiology +486 -0
  242. data/lib/studium/exam_topics/computer_graphics +5 -0
  243. data/lib/studium/exam_topics/computer_science +269 -0
  244. data/lib/studium/exam_topics/crispr +25 -0
  245. data/lib/studium/exam_topics/cyanobacteria +37 -0
  246. data/lib/studium/exam_topics/cytogenetics_and_chromosome_biology +506 -0
  247. data/lib/studium/exam_topics/databases_and_sql +105 -0
  248. data/lib/studium/exam_topics/dna_mutation_and_dna_repair +33 -0
  249. data/lib/studium/exam_topics/dna_replication +53 -0
  250. data/lib/studium/exam_topics/ecogenetics +27 -0
  251. data/lib/studium/exam_topics/ecological_agriculture +12 -0
  252. data/lib/studium/exam_topics/ecology +313 -0
  253. data/lib/studium/exam_topics/economy +210 -0
  254. data/lib/studium/exam_topics/elektronenmikroskopie +353 -0
  255. data/lib/studium/exam_topics/elektrophorese +88 -0
  256. data/lib/studium/exam_topics/elektrotechnik +8 -0
  257. data/lib/studium/exam_topics/elisa +54 -0
  258. data/lib/studium/exam_topics/embryologie_und_entwicklung +541 -0
  259. data/lib/studium/exam_topics/endospores_and_spores +92 -0
  260. data/lib/studium/exam_topics/enzymes_and_cofactors +327 -0
  261. data/lib/studium/exam_topics/epigenetik +177 -0
  262. data/lib/studium/exam_topics/ethik +125 -0
  263. data/lib/studium/exam_topics/evolution_and_evolutionary_genetics +323 -0
  264. data/lib/studium/exam_topics/excel +7 -0
  265. data/lib/studium/exam_topics/fish +19 -0
  266. data/lib/studium/exam_topics/fluorescence_microscopy +7 -0
  267. data/lib/studium/exam_topics/food_microbiology_and_food_biotechnology +17 -0
  268. data/lib/studium/exam_topics/forensik +11 -0
  269. data/lib/studium/exam_topics/forstwirtschaft +52 -0
  270. data/lib/studium/exam_topics/fortgeschrittene_genetik +429 -0
  271. data/lib/studium/exam_topics/fortgeschrittene_gentechnik +189 -0
  272. data/lib/studium/exam_topics/fortgeschrittene_physik +6 -0
  273. data/lib/studium/exam_topics/fungi +78 -0
  274. data/lib/studium/exam_topics/genetische_krankheiten +150 -0
  275. data/lib/studium/exam_topics/genexpression +1008 -0
  276. data/lib/studium/exam_topics/genomics_and_metagenomics +205 -0
  277. data/lib/studium/exam_topics/gentechnik_und_praktische_biochemie +863 -0
  278. data/lib/studium/exam_topics/geochemistry +66 -0
  279. data/lib/studium/exam_topics/geography +5 -0
  280. data/lib/studium/exam_topics/geologie_und_mineralogie +610 -0
  281. data/lib/studium/exam_topics/geschichte +94 -0
  282. data/lib/studium/exam_topics/gluconeogenesis +34 -0
  283. data/lib/studium/exam_topics/glycolysis +95 -0
  284. data/lib/studium/exam_topics/glykomik +42 -0
  285. data/lib/studium/exam_topics/glyoxylatzyklus +23 -0
  286. data/lib/studium/exam_topics/grassland_cultivation +32 -0
  287. data/lib/studium/exam_topics/hormone +122 -0
  288. data/lib/studium/exam_topics/html +7 -0
  289. data/lib/studium/exam_topics/human_ecology +8 -0
  290. data/lib/studium/exam_topics/hygiene +191 -0
  291. data/lib/studium/exam_topics/imaging_and_microscopy +224 -0
  292. data/lib/studium/exam_topics/immunanalytik +88 -0
  293. data/lib/studium/exam_topics/immunologie +888 -0
  294. data/lib/studium/exam_topics/informatik +95 -0
  295. data/lib/studium/exam_topics/innate_immunity +20 -0
  296. data/lib/studium/exam_topics/insekten +30 -0
  297. data/lib/studium/exam_topics/insulin_and_diabetes +55 -0
  298. data/lib/studium/exam_topics/java +440 -0
  299. data/lib/studium/exam_topics/javascript +10 -0
  300. data/lib/studium/exam_topics/klima +6 -0
  301. data/lib/studium/exam_topics/landtechnik +27 -0
  302. data/lib/studium/exam_topics/lebensmittel +206 -0
  303. data/lib/studium/exam_topics/lebensmitteltechnologie +16 -0
  304. data/lib/studium/exam_topics/linux +5 -0
  305. data/lib/studium/exam_topics/lipids +95 -0
  306. data/lib/studium/exam_topics/macroeconomics +39 -0
  307. data/lib/studium/exam_topics/mathematics +175 -0
  308. data/lib/studium/exam_topics/medizin_und_biomedizinische_technik +250 -0
  309. data/lib/studium/exam_topics/medizinische_chemie_und_pharmazie +397 -0
  310. data/lib/studium/exam_topics/messtechnik_und_regeltechnik +104 -0
  311. data/lib/studium/exam_topics/metabolismus +433 -0
  312. data/lib/studium/exam_topics/microbial_ecology +35 -0
  313. data/lib/studium/exam_topics/mikrobielle_lebensgemeinschaften +34 -0
  314. data/lib/studium/exam_topics/mikrobielle_physiologie +153 -0
  315. data/lib/studium/exam_topics/mixed +289 -0
  316. data/lib/studium/exam_topics/molecular_biology_of_plants +235 -0
  317. data/lib/studium/exam_topics/molekulare_medizin +129 -0
  318. data/lib/studium/exam_topics/nanotechnologie +303 -0
  319. data/lib/studium/exam_topics/nature_conservation_and_biodiversity +165 -0
  320. data/lib/studium/exam_topics/naturstoffe +9 -0
  321. data/lib/studium/exam_topics/netzwerke +32 -0
  322. data/lib/studium/exam_topics/neurobiology +266 -0
  323. data/lib/studium/exam_topics/nucleotide_sequencing +30 -0
  324. data/lib/studium/exam_topics/object_oriented_modeling +14 -0
  325. data/lib/studium/exam_topics/obstbau +234 -0
  326. data/lib/studium/exam_topics/organische_chemie +1007 -0
  327. data/lib/studium/exam_topics/organische_chemie_2 +72 -0
  328. data/lib/studium/exam_topics/paleobiology +33 -0
  329. data/lib/studium/exam_topics/parasitic_diseases_and_molecular_infection_biology +335 -0
  330. data/lib/studium/exam_topics/patent_law +55 -0
  331. data/lib/studium/exam_topics/pathologie +713 -0
  332. data/lib/studium/exam_topics/pcr +133 -0
  333. data/lib/studium/exam_topics/peroxisomes_glycosomes_and_lysosomes +54 -0
  334. data/lib/studium/exam_topics/pflanzenanatomie +240 -0
  335. data/lib/studium/exam_topics/pflanzenbau +24 -0
  336. data/lib/studium/exam_topics/pflanzenschutz +35 -0
  337. data/lib/studium/exam_topics/pflanzenwissenschaften +1009 -0
  338. data/lib/studium/exam_topics/pharmaceutical_biotechnology +250 -0
  339. data/lib/studium/exam_topics/physik +338 -0
  340. data/lib/studium/exam_topics/physikalische_chemie +85 -0
  341. data/lib/studium/exam_topics/physiology_and_histology +485 -0
  342. data/lib/studium/exam_topics/phytochemie +33 -0
  343. data/lib/studium/exam_topics/plant_biotechnology +127 -0
  344. data/lib/studium/exam_topics/plant_breeding +64 -0
  345. data/lib/studium/exam_topics/plant_development +50 -0
  346. data/lib/studium/exam_topics/populationsgenetik +136 -0
  347. data/lib/studium/exam_topics/posttranslationale_modifikation_von_proteinen +186 -0
  348. data/lib/studium/exam_topics/projektmanagement +218 -0
  349. data/lib/studium/exam_topics/prokaryote_genetics +470 -0
  350. data/lib/studium/exam_topics/proteomik +38 -0
  351. data/lib/studium/exam_topics/prozesstechnik +95 -0
  352. data/lib/studium/exam_topics/psychologie +9 -0
  353. data/lib/studium/exam_topics/python +350 -0
  354. data/lib/studium/exam_topics/quality_management +241 -0
  355. data/lib/studium/exam_topics/rechtsgrundlagen +115 -0
  356. data/lib/studium/exam_topics/research_topics_in_immunobiology +42 -0
  357. data/lib/studium/exam_topics/rna_and_dna +362 -0
  358. data/lib/studium/exam_topics/rna_seq +11 -0
  359. data/lib/studium/exam_topics/ruby +131 -0
  360. data/lib/studium/exam_topics/ruby_on_rails +62 -0
  361. data/lib/studium/exam_topics/scientific_writing_and_publishing +38 -0
  362. data/lib/studium/exam_topics/semisynthese_von_proteinen_und_nukleotiden +120 -0
  363. data/lib/studium/exam_topics/sexualbiologie +59 -0
  364. data/lib/studium/exam_topics/signal_transduction_and_laser_systems +136 -0
  365. data/lib/studium/exam_topics/splicing_exons_and_introns +57 -0
  366. data/lib/studium/exam_topics/statistik +202 -0
  367. data/lib/studium/exam_topics/stemcells +87 -0
  368. data/lib/studium/exam_topics/structural_bioinformatics +54 -0
  369. data/lib/studium/exam_topics/strukturbiologie +319 -0
  370. data/lib/studium/exam_topics/system_biology_and_synthetic_biology +87 -0
  371. data/lib/studium/exam_topics/systematische_zoologie +430 -0
  372. data/lib/studium/exam_topics/technical_ecology +144 -0
  373. data/lib/studium/exam_topics/technische_chemie +194 -0
  374. data/lib/studium/exam_topics/technische_grundlagen_der_informatik +22 -0
  375. data/lib/studium/exam_topics/technische_mikrobiologie +403 -0
  376. data/lib/studium/exam_topics/technisches_zeichnen +5 -0
  377. data/lib/studium/exam_topics/the_bacterial_cell_wall +86 -0
  378. data/lib/studium/exam_topics/the_c_plus_plus_programming_language +488 -0
  379. data/lib/studium/exam_topics/the_c_programming_language +128 -0
  380. data/lib/studium/exam_topics/the_cellcycle +65 -0
  381. data/lib/studium/exam_topics/the_european_union +119 -0
  382. data/lib/studium/exam_topics/the_interferon_system +32 -0
  383. data/lib/studium/exam_topics/the_microbiome +163 -0
  384. data/lib/studium/exam_topics/the_universe +6 -0
  385. data/lib/studium/exam_topics/theoretische_chemie +5 -0
  386. data/lib/studium/exam_topics/theoretische_informatik +157 -0
  387. data/lib/studium/exam_topics/tierzucht +94 -0
  388. data/lib/studium/exam_topics/toxikologie +403 -0
  389. data/lib/studium/exam_topics/transcription +26 -0
  390. data/lib/studium/exam_topics/translation_ribosomes_and_translational_control +138 -0
  391. data/lib/studium/exam_topics/umweltbiotechnologie +58 -0
  392. data/lib/studium/exam_topics/umweltchemie +233 -0
  393. data/lib/studium/exam_topics/urbanism_and_traffic +19 -0
  394. data/lib/studium/exam_topics/vaccines_and_vaccination +234 -0
  395. data/lib/studium/exam_topics/vectors_and_gene_therapy +237 -0
  396. data/lib/studium/exam_topics/verfahrenstechnik +32 -0
  397. data/lib/studium/exam_topics/veterinary_medicine +10 -0
  398. data/lib/studium/exam_topics/vitamine +19 -0
  399. data/lib/studium/exam_topics/wasserkunde +141 -0
  400. data/lib/studium/exam_topics/weinbau +59 -0
  401. data/lib/studium/exam_topics/wissenschaft +17 -0
  402. data/lib/studium/exam_topics/yeast +97 -0
  403. data/lib/studium/exam_topics/zoologie +329 -0
  404. data/lib/studium/exams/afterburn.rb +264 -0
  405. data/lib/studium/exams/ask_exam_from_the_upcoming_exams_pool.rb +158 -0
  406. data/lib/studium/exams/ask_exam_question/answer.rb +106 -0
  407. data/lib/studium/exams/ask_exam_question/ask_exam_question.rb +135 -0
  408. data/lib/studium/exams/ask_exam_question/constants.rb +74 -0
  409. data/lib/studium/exams/ask_exam_question/delay.rb +101 -0
  410. data/lib/studium/exams/ask_exam_question/help.rb +72 -0
  411. data/lib/studium/exams/ask_exam_question/initialize.rb +70 -0
  412. data/lib/studium/exams/ask_exam_question/menu.rb +382 -0
  413. data/lib/studium/exams/ask_exam_question/misc.rb +938 -0
  414. data/lib/studium/exams/ask_exam_question/question.rb +77 -0
  415. data/lib/studium/exams/ask_exam_question/reset.rb +103 -0
  416. data/lib/studium/exams/ask_exam_question/run.rb +49 -0
  417. data/lib/studium/exams/ask_exam_topic_question.rb +120 -0
  418. data/lib/studium/exams/ask_question_from_alias.rb +151 -0
  419. data/lib/studium/exams/ask_question_from_any_of_the_still_missing_lectures.rb +133 -0
  420. data/lib/studium/exams/ask_question_from_grouped_themes.rb +141 -0
  421. data/lib/studium/exams/ask_question_from_last_topic.rb +93 -0
  422. data/lib/studium/exams/ask_random_question.rb +190 -0
  423. data/lib/studium/exams/autoinclude.rb +7 -0
  424. data/lib/studium/exams/class.rb +127 -0
  425. data/lib/studium/exams/csv/create_csv_passed_exams_file.rb +225 -0
  426. data/lib/studium/exams/cycle.rb +283 -0
  427. data/lib/studium/exams/dataset.rb +90 -0
  428. data/lib/studium/exams/exam_registration_at/constants.rb +49 -0
  429. data/lib/studium/exams/exam_registration_at/exam_registration_at.rb +254 -0
  430. data/lib/studium/exams/exam_registration_at/help.rb +46 -0
  431. data/lib/studium/exams/exam_registration_at/menu.rb +81 -0
  432. data/lib/studium/exams/exam_registration_at/report.rb +108 -0
  433. data/lib/studium/exams/exam_registration_at/reset.rb +49 -0
  434. data/lib/studium/exams/exam_statistics_from_this_file/exam_statistics_from_this_file.rb +127 -0
  435. data/lib/studium/exams/exam_topics.rb +202 -0
  436. data/lib/studium/exams/exams.rb +18 -0
  437. data/lib/studium/exams/exams_per_month/colours.rb +81 -0
  438. data/lib/studium/exams/exams_per_month/constants.rb +69 -0
  439. data/lib/studium/exams/exams_per_month/dataset.rb +64 -0
  440. data/lib/studium/exams/exams_per_month/exams_per_month.rb +291 -0
  441. data/lib/studium/exams/exams_per_month/help.rb +72 -0
  442. data/lib/studium/exams/exams_per_month/initialize.rb +39 -0
  443. data/lib/studium/exams/exams_per_month/menu.rb +258 -0
  444. data/lib/studium/exams/exams_per_month/open.rb +139 -0
  445. data/lib/studium/exams/exams_per_month/requires.rb +8 -0
  446. data/lib/studium/exams/exams_per_month/reset.rb +115 -0
  447. data/lib/studium/exams/exams_per_month/run.rb +18 -0
  448. data/lib/studium/exams/exams_per_month/sanitize.rb +129 -0
  449. data/lib/studium/exams/exams_per_month/show_and_report.rb +1281 -0
  450. data/lib/studium/exams/exams_this_week.rb +179 -0
  451. data/lib/studium/exams/fix_exam_dates.rb +129 -0
  452. data/lib/studium/exams/last_exams/last_exams.rb +381 -0
  453. data/lib/studium/exams/lectures_without_exam_entry.rb +145 -0
  454. data/lib/studium/exams/mandatory_continuous_assessment/compare.rb +144 -0
  455. data/lib/studium/exams/mandatory_continuous_assessment/constants.rb +18 -0
  456. data/lib/studium/exams/mandatory_continuous_assessment/help.rb +92 -0
  457. data/lib/studium/exams/mandatory_continuous_assessment/initialize.rb +46 -0
  458. data/lib/studium/exams/mandatory_continuous_assessment/mandatory_continuous_assessment.rb +1115 -0
  459. data/lib/studium/exams/mandatory_continuous_assessment/menu.rb +114 -0
  460. data/lib/studium/exams/mandatory_continuous_assessment/misc.rb +61 -0
  461. data/lib/studium/exams/mandatory_continuous_assessment/reset.rb +85 -0
  462. data/lib/studium/exams/mandatory_continuous_assessment/run.rb +33 -0
  463. data/lib/studium/exams/mandatory_continuous_assessment/set_title_of_the_curriculum.rb +181 -0
  464. data/lib/studium/exams/mandatory_continuous_assessment/show_and_report.rb +147 -0
  465. data/lib/studium/exams/move_the_last_exam_question_to_the_top_of_the_file/move_the_last_exam_question_to_the_top_of_the_file.rb +119 -0
  466. data/lib/studium/exams/n_exams_in_these_topics.rb +408 -0
  467. data/lib/studium/exams/new_questions_per_year.rb +153 -0
  468. data/lib/studium/exams/next_exam.rb +111 -0
  469. data/lib/studium/exams/next_exams.rb +385 -0
  470. data/lib/studium/exams/open_exam_associated_url.rb +158 -0
  471. data/lib/studium/exams/open_last_exam_question_asked_file/constants.rb +20 -0
  472. data/lib/studium/exams/open_last_exam_question_asked_file/initialize.rb +29 -0
  473. data/lib/studium/exams/open_last_exam_question_asked_file/open_last_exam_question_asked_file.rb +112 -0
  474. data/lib/studium/exams/passed_exams/passed_exams.rb +46 -0
  475. data/lib/studium/exams/pruefung.rb +288 -0
  476. data/lib/studium/exams/push_solved_questions_on_top.rb +188 -0
  477. data/lib/studium/exams/question_answer/question_answer.rb +842 -0
  478. data/lib/studium/exams/questions_solved_from_day_to_day.rb +353 -0
  479. data/lib/studium/exams/repeat_last_question.rb +78 -0
  480. data/lib/studium/exams/show_all_passed_exams_of_this_university.rb +260 -0
  481. data/lib/studium/exams/show_backlog_of_exams.rb +125 -0
  482. data/lib/studium/exams/show_next_exams_for.rb +141 -0
  483. data/lib/studium/exams/show_themes/constants.rb +33 -0
  484. data/lib/studium/exams/show_themes/menu.rb +61 -0
  485. data/lib/studium/exams/show_themes/misc.rb +536 -0
  486. data/lib/studium/exams/show_themes/reset.rb +64 -0
  487. data/lib/studium/exams/show_themes/show_themes.rb +27 -0
  488. data/lib/studium/exams/show_upcoming_exams/consider_autogenerating_exam_aliases.rb +170 -0
  489. data/lib/studium/exams/show_upcoming_exams/constants.rb +82 -0
  490. data/lib/studium/exams/show_upcoming_exams/help.rb +33 -0
  491. data/lib/studium/exams/show_upcoming_exams/initialize.rb +71 -0
  492. data/lib/studium/exams/show_upcoming_exams/menu.rb +53 -0
  493. data/lib/studium/exams/show_upcoming_exams/report.rb +195 -0
  494. data/lib/studium/exams/show_upcoming_exams/reset.rb +38 -0
  495. data/lib/studium/exams/show_upcoming_exams/run.rb +20 -0
  496. data/lib/studium/exams/show_upcoming_exams/show_upcoming_exams.rb +494 -0
  497. data/lib/studium/exams/solve_all_questions_from_this_topic.rb +122 -0
  498. data/lib/studium/exams/solved/constants.rb +37 -0
  499. data/lib/studium/exams/solved/help.rb +23 -0
  500. data/lib/studium/exams/solved/menu.rb +35 -0
  501. data/lib/studium/exams/solved/reset.rb +30 -0
  502. data/lib/studium/exams/solved/solved.rb +306 -0
  503. data/lib/studium/exams/steop.rb +99 -0
  504. data/lib/studium/exams/unsolve_all_questions_from_this_topic.rb +170 -0
  505. data/lib/studium/exams/upcoming_exams/constants.rb +20 -0
  506. data/lib/studium/exams/upcoming_exams/help.rb +38 -0
  507. data/lib/studium/exams/upcoming_exams/initialize.rb +27 -0
  508. data/lib/studium/exams/upcoming_exams/menu.rb +79 -0
  509. data/lib/studium/exams/upcoming_exams/misc.rb +360 -0
  510. data/lib/studium/exams/upcoming_exams/reset.rb +37 -0
  511. data/lib/studium/exams/upcoming_exams/run.rb +25 -0
  512. data/lib/studium/exams/upcoming_exams/upcoming_exams.rb +32 -0
  513. data/lib/studium/exams/upcoming_exams_at_the_boku/constants.rb +23 -0
  514. data/lib/studium/exams/upcoming_exams_at_the_boku/html.rb +64 -0
  515. data/lib/studium/exams/upcoming_exams_at_the_boku/upcoming_exams_at_the_boku.rb +194 -0
  516. data/lib/studium/exams/upcoming_exams_dataset.rb +251 -0
  517. data/lib/studium/exams/upload_exam_topics.rb +357 -0
  518. data/lib/studium/flashcards/flashcards.rb +95 -0
  519. data/lib/studium/graphviz/README.md +4 -0
  520. data/lib/studium/graphviz/bachelor_vector_based_strategies.dot +160 -0
  521. data/lib/studium/graphviz/master_vector_based_strategies.dot +46 -0
  522. data/lib/studium/gui/gtk2/constants.rb +52 -0
  523. data/lib/studium/gui/gtk2/exam_card.rb +199 -0
  524. data/lib/studium/gui/gtk2/flip_card.rb +8 -0
  525. data/lib/studium/gui/gtk2/frame.rb +319 -0
  526. data/lib/studium/gui/gtk2/main_box.rb +188 -0
  527. data/lib/studium/gui/gtk2/misc.rb +99 -0
  528. data/lib/studium/gui/gtk2/module_methods.rb +58 -0
  529. data/lib/studium/gui/gtk2/require_gtk_files.rb +25 -0
  530. data/lib/studium/gui/gtk2/run.rb +47 -0
  531. data/lib/studium/gui/gtk2/show_curriculum_entries.rb +186 -0
  532. data/lib/studium/gui/gtk2/simple_widget_question_answer.rb +185 -0
  533. data/lib/studium/gui/gtk2/vbox.rb +748 -0
  534. data/lib/studium/gui/gtk3/README.md +1 -0
  535. data/lib/studium/gui/gtk3/studium_panel.rb +54 -0
  536. data/lib/studium/lectures/show_lectures_on_the_commandline/constants.rb +22 -0
  537. data/lib/studium/lectures/show_lectures_on_the_commandline/determine.rb +630 -0
  538. data/lib/studium/lectures/show_lectures_on_the_commandline/help.rb +44 -0
  539. data/lib/studium/lectures/show_lectures_on_the_commandline/html.rb +599 -0
  540. data/lib/studium/lectures/show_lectures_on_the_commandline/initialize.rb +53 -0
  541. data/lib/studium/lectures/show_lectures_on_the_commandline/konsole.rb +32 -0
  542. data/lib/studium/lectures/show_lectures_on_the_commandline/menu.rb +466 -0
  543. data/lib/studium/lectures/show_lectures_on_the_commandline/misc.rb +598 -0
  544. data/lib/studium/lectures/show_lectures_on_the_commandline/reset.rb +120 -0
  545. data/lib/studium/lectures/show_lectures_on_the_commandline/run.rb +44 -0
  546. data/lib/studium/lectures/show_lectures_on_the_commandline/show.rb +106 -0
  547. data/lib/studium/lectures/show_lectures_on_the_commandline/show_lectures_on_the_commandline.rb +491 -0
  548. data/lib/studium/lectures/show_lectures_on_the_commandline/sorted_individual_curricula.rb +117 -0
  549. data/lib/studium/logging/README.md +2 -0
  550. data/lib/studium/logging/ensure_that_the_log_directory_exists.rb +47 -0
  551. data/lib/studium/logging/html_log_directory.rb +35 -0
  552. data/lib/studium/logging/log_directory.rb +100 -0
  553. data/lib/studium/logging/store_last_question_asked_into_file.rb +138 -0
  554. data/lib/studium/misc/return_remote_homepage_of_this_lecture.rb +8661 -0
  555. data/lib/studium/misc/return_remote_moodle_link_of_this_lecture.rb +1343 -0
  556. data/lib/studium/parsers/README.md +2 -0
  557. data/lib/studium/parsers/custom_exam_results_parser.rb +208 -0
  558. data/lib/studium/parsers/parse_lva_dates.rb +190 -0
  559. data/lib/studium/pdf/README.md +2 -0
  560. data/lib/studium/pdf/create_pdf_file_for_this_exam_topic.rb +277 -0
  561. data/lib/studium/project/project.rb +80 -0
  562. data/lib/studium/requires/common_popular_requires.rb +37 -0
  563. data/lib/studium/requires/commonly_used_requires.rb +13 -0
  564. data/lib/studium/requires/require_class_exams_solved.rb +7 -0
  565. data/lib/studium/requires/require_ects_scripts.rb +25 -0
  566. data/lib/studium/requires/require_encoding.rb +7 -0
  567. data/lib/studium/requires/require_the_exam_scripts.rb +37 -0
  568. data/lib/studium/requires/require_the_studium_constants.rb +14 -0
  569. data/lib/studium/requires/require_the_studium_project.rb +47 -0
  570. data/lib/studium/requires/require_the_utility_scripts.rb +26 -0
  571. data/lib/studium/requires/require_toplevel_methods.rb +26 -0
  572. data/lib/studium/requires/require_upcoming_exams.rb +7 -0
  573. data/lib/studium/requires/require_yaml.rb +7 -0
  574. data/lib/studium/requires/with_GUI.rb +12 -0
  575. data/lib/studium/requires/www_mode.rb +17 -0
  576. data/lib/studium/sinatra/app.rb +225 -0
  577. data/lib/studium/sinatra/misc.rb +111 -0
  578. data/lib/studium/statistics/README.md +4 -0
  579. data/lib/studium/statistics/best_exam_months.rb +81 -0
  580. data/lib/studium/statistics/curriculum_comparer.rb +344 -0
  581. data/lib/studium/statistics/determine_exam_statistics_from_this_file.rb +140 -0
  582. data/lib/studium/statistics/max_stats.rb +171 -0
  583. data/lib/studium/statistics/report_how_many_ects_points_per_curriculum_were_completed.rb +172 -0
  584. data/lib/studium/statistics/report_how_many_exam_questions_were_answered.rb +478 -0
  585. data/lib/studium/statistics/show_exam_statistics.rb +60 -0
  586. data/lib/studium/statistics/top_stats.rb +122 -0
  587. data/lib/studium/steop/README.md +4 -0
  588. data/lib/studium/steop/show_all_steop_lectures.rb +101 -0
  589. data/lib/studium/steop/steop_lectures_in_this_curriculum.rb +291 -0
  590. data/lib/studium/steop/steop_lva_dates.rb +102 -0
  591. data/lib/studium/toplevel_methods/all_passed_exams.rb +35 -0
  592. data/lib/studium/toplevel_methods/already_solved_this_lecture.rb +98 -0
  593. data/lib/studium/toplevel_methods/available_curricula.rb +71 -0
  594. data/lib/studium/toplevel_methods/available_topics.rb +145 -0
  595. data/lib/studium/toplevel_methods/average_grade.rb +141 -0
  596. data/lib/studium/toplevel_methods/calculate_pr/303/274fungsimmanente_lectures_from_this_file.rb +55 -0
  597. data/lib/studium/toplevel_methods/cd.rb +25 -0
  598. data/lib/studium/toplevel_methods/cd_stud.rb +134 -0
  599. data/lib/studium/toplevel_methods/copy_the_last_backup_of_file_lecture_information.rb +27 -0
  600. data/lib/studium/toplevel_methods/determine_local_directory_of_this_lecture.rb +72 -0
  601. data/lib/studium/toplevel_methods/does_this_course_require_mandatory_presence.rb +44 -0
  602. data/lib/studium/toplevel_methods/download.rb +157 -0
  603. data/lib/studium/toplevel_methods/e.rb +16 -0
  604. data/lib/studium/toplevel_methods/ects_from_lectures.rb +251 -0
  605. data/lib/studium/toplevel_methods/editor.rb +64 -0
  606. data/lib/studium/toplevel_methods/esystem.rb +22 -0
  607. data/lib/studium/toplevel_methods/exams_dataset.rb +45 -0
  608. data/lib/studium/toplevel_methods/filter_away_invalid_questions.rb +77 -0
  609. data/lib/studium/toplevel_methods/find_exam_topic_and_exam_title.rb +2771 -0
  610. data/lib/studium/toplevel_methods/from_curriculum_id_to_university.rb +47 -0
  611. data/lib/studium/toplevel_methods/frozen.rb +32 -0
  612. data/lib/studium/toplevel_methods/handle_archive_of_the_exam_questions.rb +136 -0
  613. data/lib/studium/toplevel_methods/has_a_bachelor_or_master_curriculum.rb +84 -0
  614. data/lib/studium/toplevel_methods/has_this_lecture_been_already_passed_but_the_id_was_changed_lateron.rb +41 -0
  615. data/lib/studium/toplevel_methods/has_this_module_been_completed.rb +206 -0
  616. data/lib/studium/toplevel_methods/install_the_project_on_the_given_hostsystem.rb +32 -0
  617. data/lib/studium/toplevel_methods/is_on_roebe.rb +26 -0
  618. data/lib/studium/toplevel_methods/is_this_exam_topic_included.rb +46 -0
  619. data/lib/studium/toplevel_methods/is_this_homepage_registered.rb +31 -0
  620. data/lib/studium/toplevel_methods/is_this_lecture_a_practical_course.rb +100 -0
  621. data/lib/studium/toplevel_methods/is_this_lecture_part_of_the_vector_curriculum.rb +110 -0
  622. data/lib/studium/toplevel_methods/is_this_lecture_registered_in_upcoming_exams.rb +43 -0
  623. data/lib/studium/toplevel_methods/lecture_information.rb +101 -0
  624. data/lib/studium/toplevel_methods/lectures_without_attribution_to_any_curriculum.rb +42 -0
  625. data/lib/studium/toplevel_methods/lva_numbers.rb +339 -0
  626. data/lib/studium/toplevel_methods/main_dataset.rb +73 -0
  627. data/lib/studium/toplevel_methods/map_curriculum_number_to_curriculum_name.rb +97 -0
  628. data/lib/studium/toplevel_methods/methods_related_to_curricula.rb +47 -0
  629. data/lib/studium/toplevel_methods/methods_related_to_files.rb +197 -0
  630. data/lib/studium/toplevel_methods/mkdir.rb +25 -0
  631. data/lib/studium/toplevel_methods/n_questions_available.rb +128 -0
  632. data/lib/studium/toplevel_methods/n_topics_available.rb +63 -0
  633. data/lib/studium/toplevel_methods/name_of_this_curriculum.rb +38 -0
  634. data/lib/studium/toplevel_methods/names_of_all_solved_exams.rb +71 -0
  635. data/lib/studium/toplevel_methods/note_down_the_start_time_and_how_many_exams_have_been_already_solved.rb +70 -0
  636. data/lib/studium/toplevel_methods/opnn.rb +25 -0
  637. data/lib/studium/toplevel_methods/passed_this_exam_on.rb +105 -0
  638. data/lib/studium/toplevel_methods/pristine.rb +69 -0
  639. data/lib/studium/toplevel_methods/read_dataset_from_a_curriculum_file.rb +133 -0
  640. data/lib/studium/toplevel_methods/read_delay_between_questions_from_file.rb +34 -0
  641. data/lib/studium/toplevel_methods/regexes.rb +90 -0
  642. data/lib/studium/toplevel_methods/registered_for_this_exam.rb +62 -0
  643. data/lib/studium/toplevel_methods/remote_url.rb +57 -0
  644. data/lib/studium/toplevel_methods/remove_comments.rb +26 -0
  645. data/lib/studium/toplevel_methods/remove_exam_topics_that_were_already_answered.rb +27 -0
  646. data/lib/studium/toplevel_methods/remove_tags.rb +26 -0
  647. data/lib/studium/toplevel_methods/report.rb +143 -0
  648. data/lib/studium/toplevel_methods/report_all_lectures_matching_this_lecture_type.rb +45 -0
  649. data/lib/studium/toplevel_methods/report_attributed_lectures_to_universities.rb +30 -0
  650. data/lib/studium/toplevel_methods/report_n_ects_per_university.rb +63 -0
  651. data/lib/studium/toplevel_methods/report_n_entries_in_the_file_lecture_information.rb +36 -0
  652. data/lib/studium/toplevel_methods/report_nquestions_of.rb +96 -0
  653. data/lib/studium/toplevel_methods/report_solved_topics.rb +56 -0
  654. data/lib/studium/toplevel_methods/return_all_exams_on_this_day.rb +66 -0
  655. data/lib/studium/toplevel_methods/return_curriculum_of_this_lva_number.rb +82 -0
  656. data/lib/studium/toplevel_methods/return_dataset_for_this_exam_topic.rb +41 -0
  657. data/lib/studium/toplevel_methods/return_dataset_from_this_curriculum_file.rb +150 -0
  658. data/lib/studium/toplevel_methods/return_directory_for.rb +66 -0
  659. data/lib/studium/toplevel_methods/return_div_timetable_of_upcoming_exams.rb +489 -0
  660. data/lib/studium/toplevel_methods/return_ects_from_this_lecture_stored_in_the_file_lecture_information.rb +197 -0
  661. data/lib/studium/toplevel_methods/return_hash_of_already_solved_lectures.rb +41 -0
  662. data/lib/studium/toplevel_methods/return_local_path_of_this_pwdstud.rb +59 -0
  663. data/lib/studium/toplevel_methods/return_lva_number_of_this_lecture.rb +72 -0
  664. data/lib/studium/toplevel_methods/return_n_percent_solved_from_this_topic.rb +75 -0
  665. data/lib/studium/toplevel_methods/return_n_questions_were_answered_for_this_topic.rb +37 -0
  666. data/lib/studium/toplevel_methods/return_proper_university_image.rb +80 -0
  667. data/lib/studium/toplevel_methods/return_question_answer_string_from_this_topic.rb +56 -0
  668. data/lib/studium/toplevel_methods/return_sanitized_dataset_from_the_file_lecture_information.rb +126 -0
  669. data/lib/studium/toplevel_methods/return_theme_of_the_next_upcoming_exam.rb +38 -0
  670. data/lib/studium/toplevel_methods/return_this_curriculum_as_a_string.rb +26 -0
  671. data/lib/studium/toplevel_methods/return_title_from_this_curriculum_file.rb +91 -0
  672. data/lib/studium/toplevel_methods/rinstall2.rb +34 -0
  673. data/lib/studium/toplevel_methods/rti_conflict.rb +29 -0
  674. data/lib/studium/toplevel_methods/runmode.rb +86 -0
  675. data/lib/studium/toplevel_methods/sanitize_this_theme_topic.rb +128 -0
  676. data/lib/studium/toplevel_methods/sanitized_dataset_from_file_passed_exams_per_month.rb +52 -0
  677. data/lib/studium/toplevel_methods/save_all_registered_upcoming_exams.rb +62 -0
  678. data/lib/studium/toplevel_methods/save_file.rb +81 -0
  679. data/lib/studium/toplevel_methods/save_this_delay_between_questions_and_answers.rb +43 -0
  680. data/lib/studium/toplevel_methods/set_last_file_for_exam_questions.rb +64 -0
  681. data/lib/studium/toplevel_methods/set_this_cd_alias_to.rb +86 -0
  682. data/lib/studium/toplevel_methods/show_passed_ects_in_the_individual_bachelor_and_master_curricula.rb +81 -0
  683. data/lib/studium/toplevel_methods/show_passed_exams_having_this_grade.rb +27 -0
  684. data/lib/studium/toplevel_methods/spacer.rb +18 -0
  685. data/lib/studium/toplevel_methods/time.rb +220 -0
  686. data/lib/studium/toplevel_methods/total_ects_points_passed.rb +72 -0
  687. data/lib/studium/toplevel_methods/try_to_guess_the_most_likely_lva_id.rb +57 -0
  688. data/lib/studium/toplevel_methods/try_to_return_the_expanded_name_of_this_lecture.rb +63 -0
  689. data/lib/studium/toplevel_methods/unfinished.rb +51 -0
  690. data/lib/studium/toplevel_methods/url.rb +74 -0
  691. data/lib/studium/toplevel_methods/verbose_truth.rb +21 -0
  692. data/lib/studium/toplevel_methods/when_was_this_lecture_passed.rb +53 -0
  693. data/lib/studium/toplevel_methods/yes_or_no_ja_oder_nein.rb +33 -0
  694. data/lib/studium/tu_vienna/README.md +6 -0
  695. data/lib/studium/tu_vienna/tu_ferien.rb +38 -0
  696. data/lib/studium/tu_vienna/tu_/303/266ffnungszeiten.rb +29 -0
  697. data/lib/studium/utility_scripts/attribute_lecture_to_curriculum/attribute_boku_lecture_to_curriculum.rb +389 -0
  698. data/lib/studium/utility_scripts/attribute_lecture_to_curriculum/attribute_lecture_to_curriculum.rb +236 -0
  699. data/lib/studium/utility_scripts/attribute_lectures_to_university/attribute_lectures_to_university.rb +385 -0
  700. data/lib/studium/utility_scripts/audio_stats.rb +176 -0
  701. data/lib/studium/utility_scripts/auto_stud/auto_stud.rb +253 -0
  702. data/lib/studium/utility_scripts/auto_stud/constants.rb +23 -0
  703. data/lib/studium/utility_scripts/auto_stud/initialize.rb +23 -0
  704. data/lib/studium/utility_scripts/auto_stud/misc.rb +18 -0
  705. data/lib/studium/utility_scripts/autopurge_this_lecture_date.rb +101 -0
  706. data/lib/studium/utility_scripts/calendar/README.md +2 -0
  707. data/lib/studium/utility_scripts/calendar/calendar.rb +244 -0
  708. data/lib/studium/utility_scripts/calendar/misc.rb +35 -0
  709. data/lib/studium/utility_scripts/check_description_of_these_lectures.rb +224 -0
  710. data/lib/studium/utility_scripts/clean_up_lecture_date.rb +151 -0
  711. data/lib/studium/utility_scripts/current_lectures_belonging_to_both_bachelor_and_master_curriculum.rb +113 -0
  712. data/lib/studium/utility_scripts/currently_participating_in_these_lectures.rb +104 -0
  713. data/lib/studium/utility_scripts/display_lecture_url.rb +117 -0
  714. data/lib/studium/utility_scripts/expand_time_range.rb +422 -0
  715. data/lib/studium/utility_scripts/find_duplicate_lectures.rb +121 -0
  716. data/lib/studium/utility_scripts/finished_exams_at_this_university.rb +94 -0
  717. data/lib/studium/utility_scripts/foreign_language_percentage/constants.rb +28 -0
  718. data/lib/studium/utility_scripts/foreign_language_percentage/foreign_language_percentage.rb +142 -0
  719. data/lib/studium/utility_scripts/foreign_language_percentage/help.rb +29 -0
  720. data/lib/studium/utility_scripts/foreign_language_percentage/initialize.rb +25 -0
  721. data/lib/studium/utility_scripts/foreign_language_percentage/menu.rb +141 -0
  722. data/lib/studium/utility_scripts/foreign_language_percentage/report.rb +62 -0
  723. data/lib/studium/utility_scripts/foreign_language_percentage/reset.rb +57 -0
  724. data/lib/studium/utility_scripts/foreign_language_percentage/run.rb +19 -0
  725. data/lib/studium/utility_scripts/generate_spreadsheet.rb +349 -0
  726. data/lib/studium/utility_scripts/holidays.rb +143 -0
  727. data/lib/studium/utility_scripts/lecture_downloader.rb +115 -0
  728. data/lib/studium/utility_scripts/lectures_attributed_to_universities.rb +344 -0
  729. data/lib/studium/utility_scripts/lva_nummer.rb +440 -0
  730. data/lib/studium/utility_scripts/mandatory_lectures_in_this_month.rb +321 -0
  731. data/lib/studium/utility_scripts/name_of_this_lva_id.rb +110 -0
  732. data/lib/studium/utility_scripts/new_stud.rb +332 -0
  733. data/lib/studium/utility_scripts/next_week.rb +111 -0
  734. data/lib/studium/utility_scripts/passed_ects_per_year.rb +172 -0
  735. data/lib/studium/utility_scripts/passed_pr/303/274fungsimmanente_courses/passed_pr/303/274fungsimmanente_courses.rb +181 -0
  736. data/lib/studium/utility_scripts/prepare_individual_curriculum.rb +182 -0
  737. data/lib/studium/utility_scripts/priority.rb +126 -0
  738. data/lib/studium/utility_scripts/priority_points.rb +263 -0
  739. data/lib/studium/utility_scripts/publish_my_exams.rb +174 -0
  740. data/lib/studium/utility_scripts/regexes/README.md +2 -0
  741. data/lib/studium/utility_scripts/regexes/generate_regex.rb +278 -0
  742. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_available_moodle_links.rb +54 -0
  743. data/lib/studium/utility_scripts/regexes/generate_regexes_for_the_registered_lectures.rb +48 -0
  744. data/lib/studium/utility_scripts/report_outdated_timetable_entries.rb +148 -0
  745. data/lib/studium/utility_scripts/report_total_amount_of_questions_and_answers_for.rb +120 -0
  746. data/lib/studium/utility_scripts/report_whether_this_lecture_is_registered_in_the_file_lecture_information.rb +125 -0
  747. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/individual_resolve_practical_courses_date_conflicts.rb +257 -0
  748. data/lib/studium/utility_scripts/resolve_practical_courses_date_conflicts/resolve_practical_courses_date_conflicts.rb +273 -0
  749. data/lib/studium/utility_scripts/scrape_remote_university_url.rb +146 -0
  750. data/lib/studium/utility_scripts/semester_schedule_creator/semester_container.rb +142 -0
  751. data/lib/studium/utility_scripts/semester_schedule_creator/semester_schedule_creator.rb +381 -0
  752. data/lib/studium/utility_scripts/semesterplaner.rb +289 -0
  753. data/lib/studium/utility_scripts/show_all_lectures.rb +403 -0
  754. data/lib/studium/utility_scripts/show_all_passed_master_lectures.rb +127 -0
  755. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/constants.rb +56 -0
  756. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/do_report_the_upcoming_exams.rb +60 -0
  757. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/help.rb +49 -0
  758. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/initialize.rb +28 -0
  759. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/menu.rb +54 -0
  760. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/misc.rb +214 -0
  761. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/report.rb +118 -0
  762. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/reset.rb +80 -0
  763. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/run.rb +22 -0
  764. data/lib/studium/utility_scripts/show_conflicting_lva_lectures/show_conflicting_lva_lectures.rb +651 -0
  765. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/constants.rb +28 -0
  766. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/menu.rb +62 -0
  767. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/reset.rb +36 -0
  768. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/run.rb +35 -0
  769. data/lib/studium/utility_scripts/show_descriptions_of_lectures_belonging_to_this_module/show_descriptions_of_lectures_belonging_to_this_module.rb +145 -0
  770. data/lib/studium/utility_scripts/show_lecturers/show_lecturers.rb +145 -0
  771. data/lib/studium/utility_scripts/show_lectures/constants.rb +16 -0
  772. data/lib/studium/utility_scripts/show_lectures/help.rb +34 -0
  773. data/lib/studium/utility_scripts/show_lectures/initialize.rb +23 -0
  774. data/lib/studium/utility_scripts/show_lectures/menu.rb +106 -0
  775. data/lib/studium/utility_scripts/show_lectures/misc.rb +582 -0
  776. data/lib/studium/utility_scripts/show_lectures/reset.rb +92 -0
  777. data/lib/studium/utility_scripts/show_lectures/run.rb +27 -0
  778. data/lib/studium/utility_scripts/show_lectures/show_lectures.rb +48 -0
  779. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_language.rb +129 -0
  780. data/lib/studium/utility_scripts/show_lectures_fitting_to_this_theme.rb +100 -0
  781. data/lib/studium/utility_scripts/show_lectures_on_this_day.rb +154 -0
  782. data/lib/studium/utility_scripts/show_lva_dates_of_this_lecture.rb +177 -0
  783. data/lib/studium/utility_scripts/show_outdated_lva_dates.rb +218 -0
  784. data/lib/studium/utility_scripts/show_solved_english_lectures.rb +139 -0
  785. data/lib/studium/utility_scripts/show_the_associated_lectures_for_the_individual_curriculum.rb +285 -0
  786. data/lib/studium/utility_scripts/studienkennzahl.rb +109 -0
  787. data/lib/studium/utility_scripts/studium_skeleton.rb +220 -0
  788. data/lib/studium/utility_scripts/stundenplan.rb +603 -0
  789. data/lib/studium/utility_scripts/sync_studium_relevant_entries_one_level_downwards.rb +221 -0
  790. data/lib/studium/utility_scripts/ufind.rb +101 -0
  791. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/constants.rb +31 -0
  792. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/run.rb +20 -0
  793. data/lib/studium/utility_scripts/upcoming_mandatory_presence_courses/upcoming_mandatory_presence_courses.rb +179 -0
  794. data/lib/studium/utility_scripts/vorbesprechungen.rb +293 -0
  795. data/lib/studium/utility_scripts/week_parser/constants.rb +28 -0
  796. data/lib/studium/utility_scripts/week_parser/help.rb +32 -0
  797. data/lib/studium/utility_scripts/week_parser/menu.rb +56 -0
  798. data/lib/studium/utility_scripts/week_parser/misc.rb +51 -0
  799. data/lib/studium/utility_scripts/week_parser/reset.rb +55 -0
  800. data/lib/studium/utility_scripts/week_parser/run.rb +18 -0
  801. data/lib/studium/utility_scripts/week_parser/show.rb +242 -0
  802. data/lib/studium/utility_scripts/week_parser/week_parser.rb +362 -0
  803. data/lib/studium/utility_scripts/weekday_parser.rb +159 -0
  804. data/lib/studium/utility_scripts/weekly_schedule.rb +209 -0
  805. data/lib/studium/utility_scripts/wochenplanung.rb +278 -0
  806. data/lib/studium/version/version.rb +46 -0
  807. data/lib/studium/www/curricula_displayer.cgi +170 -0
  808. data/lib/studium/www/curriculum_displayer.rb +162 -0
  809. data/lib/studium/www/exams.cgi +50 -0
  810. data/lib/studium/www/statistics.cgi +55 -0
  811. data/lib/studium/yaml/allowed_themes_for_exams.yml +307 -0
  812. data/lib/studium/yaml/array_allowed_entries_for_the_file_lecture_information.yml +68 -0
  813. data/lib/studium/yaml/backlog_of_exams.yml +35 -0
  814. data/lib/studium/yaml/current_exams.yml +19 -0
  815. data/lib/studium/yaml/curricula.yml +530 -0
  816. data/lib/studium/yaml/curricula/README.md +3 -0
  817. data/lib/studium/yaml/curricula/bachelor_agrarwissenschaften_033255.yml +130 -0
  818. data/lib/studium/yaml/curricula/bachelor_biologie_basisblock_033630.yml +65 -0
  819. data/lib/studium/yaml/curricula/bachelor_biologie_botanik_033630.yml +84 -0
  820. data/lib/studium/yaml/curricula/bachelor_biologie_ecology_033630.yml +74 -0
  821. data/lib/studium/yaml/curricula/bachelor_biologie_mikrobiologie_und_genetik_033630.yml +120 -0
  822. data/lib/studium/yaml/curricula/bachelor_biologie_molekulare_biologie_033630.yml +104 -0
  823. data/lib/studium/yaml/curricula/bachelor_biologie_zoologie_033630.yml +87 -0
  824. data/lib/studium/yaml/curricula/bachelor_chemie_033662.yml +164 -0
  825. data/lib/studium/yaml/curricula/bachelor_dummy_curriculum.yml +135 -0
  826. data/lib/studium/yaml/curricula/bachelor_elektrotechnik_und_informationstechnik_033235.yml +13 -0
  827. data/lib/studium/yaml/curricula/bachelor_forstwirtschaft_033225.yml +105 -0
  828. data/lib/studium/yaml/curricula/bachelor_informatik_033521.yml +130 -0
  829. data/lib/studium/yaml/curricula/bachelor_informatik_und_molekulare_biologie.yml +1144 -0
  830. data/lib/studium/yaml/curricula/bachelor_ktww_033231.yml +84 -0
  831. data/lib/studium/yaml/curricula/bachelor_lmbt_033217.yml +108 -0
  832. data/lib/studium/yaml/curricula/bachelor_medizinische_informatik_033533.yml +200 -0
  833. data/lib/studium/yaml/curricula/bachelor_molekularbiologie_033665.yml +93 -0
  834. data/lib/studium/yaml/curricula/bachelor_nutrition_science_033638.yml +117 -0
  835. data/lib/studium/yaml/curricula/bachelor_pharmazie_033305.yml +170 -0
  836. data/lib/studium/yaml/curricula/bachelor_technische_chemie_033290.yml +129 -0
  837. data/lib/studium/yaml/curricula/bachelor_technische_informatik_033535.yml +23 -0
  838. data/lib/studium/yaml/curricula/bachelor_ubrm_033227.yml +140 -0
  839. data/lib/studium/yaml/curricula/bachelor_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +1157 -0
  840. data/lib/studium/yaml/curricula/bachelor_verfahrenstechnik_033273.yml +167 -0
  841. data/lib/studium/yaml/curricula/bachelor_wirtschaftsinformatik_033526.yml +29 -0
  842. data/lib/studium/yaml/curricula/master_bioinformatics_and_molecular_biotechnology_including_aspects_from_molecular_medicine.yml +438 -0
  843. data/lib/studium/yaml/curricula/master_bioinformatik_066875.yml +76 -0
  844. data/lib/studium/yaml/curricula/master_biologie_molekulare_mikrobiologie_mikrobielle_oekologie_und_immunbiologie_066830.yml +78 -0
  845. data/lib/studium/yaml/curricula/master_biologische_chemie_066863.yml +61 -0
  846. data/lib/studium/yaml/curricula/master_dummy_curriculum.yml +137 -0
  847. data/lib/studium/yaml/curricula/master_food_science_and_plant_biotechnology.yml +30 -0
  848. data/lib/studium/yaml/curricula/master_genetik_und_entwicklungsbiologie_066877.yml +90 -0
  849. data/lib/studium/yaml/curricula/master_lmbt_066418.yml +65 -0
  850. data/lib/studium/yaml/curricula/master_molekulare_biologie_066834.yml +142 -0
  851. data/lib/studium/yaml/curricula/master_pharmazie_066605.yml +170 -0
  852. data/lib/studium/yaml/curricula/master_technische_chemie_066490.yml +123 -0
  853. data/lib/studium/yaml/curricula/master_vector_based_strategies_in_life_sciences_molecular_medicine_and_biotechnology.yml +741 -0
  854. data/lib/studium/yaml/custom_colours.yml +21 -0
  855. data/lib/studium/yaml/daily_questions_solved.yml +789 -0
  856. data/lib/studium/yaml/default_delay.yml +4 -0
  857. data/lib/studium/yaml/default_encoding.yml +1 -0
  858. data/lib/studium/yaml/directory_to_the_exam_topics.yml +0 -0
  859. data/lib/studium/yaml/editor.yml +1 -0
  860. data/lib/studium/yaml/file_for_exam_questions.yml +1 -0
  861. data/lib/studium/yaml/german/README.md +2 -0
  862. data/lib/studium/yaml/german/german_to_english_month_names.yml +16 -0
  863. data/lib/studium/yaml/grouped_themes.yml +187 -0
  864. data/lib/studium/yaml/holidays.yml +176 -0
  865. data/lib/studium/yaml/important_exams.yml +194 -0
  866. data/lib/studium/yaml/inscription_dates_of_universities.yml +58 -0
  867. data/lib/studium/yaml/lecture_aliases.yml +108 -0
  868. data/lib/studium/yaml/lecture_information.yml +47783 -0
  869. data/lib/studium/yaml/log_dir.yml +1 -0
  870. data/lib/studium/yaml/main_topic.yml +11 -0
  871. data/lib/studium/yaml/max_stats.yml +227 -0
  872. data/lib/studium/yaml/mitteilungsbl/303/244tter.yml +315 -0
  873. data/lib/studium/yaml/n_total_questions.yml +1 -0
  874. data/lib/studium/yaml/participating_in_these_courses.yml +50 -0
  875. data/lib/studium/yaml/rename_konsole_tab.yml +1 -0
  876. data/lib/studium/yaml/show_topic.yml +1 -0
  877. data/lib/studium/yaml/statistics.yml +57 -0
  878. data/lib/studium/yaml/use_colours.yml +1 -0
  879. data/studium.gemspec +79 -0
  880. data/test/testing_studium.rb +244 -0
  881. data/test/testing_time_component.rb +29 -0
  882. metadata +1079 -0
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'studium/toplevel_methods/return_all_exams_on_this_day.rb'
6
+ # =========================================================================== #
7
+ module Studium
8
+
9
+ require 'studium/colours/colours.rb'
10
+ require 'studium/toplevel_methods/e.rb'
11
+ require 'studium/toplevel_methods/main_dataset.rb'
12
+ require 'studium/toplevel_methods/return_sanitized_dataset_from_the_file_lecture_information.rb'
13
+ require 'studium/toplevel_methods/time.rb'
14
+
15
+ # ========================================================================= #
16
+ # === Studium.return_all_exams_on_this_day
17
+ #
18
+ # This method will simply return all exams on the given input day.
19
+ # ========================================================================= #
20
+ def self.return_all_exams_on_this_day(
21
+ this_day = '02.05.2018'
22
+ )
23
+ dataset = main_dataset?
24
+ if dataset.nil?
25
+ dataset = ::Studium.return_sanitized_dataset_from_the_file_lecture_information
26
+ set_main_dataset(dataset)
27
+ end
28
+ # ======================================================================= #
29
+ # First, select only entries that have an exam-entry.
30
+ # ======================================================================= #
31
+ selection = dataset.select {|name_of_the_lecture, inner_hash|
32
+ inner_hash.has_key? 'exams'
33
+ }
34
+ selection = selection.select {|name_of_the_lecture, inner_hash|
35
+ exams = inner_hash['exams']
36
+ exams = remove_leaking_weekdays(exams)
37
+ if exams
38
+ if exams.is_a? Array
39
+ exams.map! {|inner_line|
40
+ inner_line.strip
41
+ }
42
+ end
43
+ end
44
+ if exams
45
+ exams.any? {|entry|
46
+ entry.start_with?(this_day)
47
+ }
48
+ else
49
+ e 'Something strange with the course `'+
50
+ sfancy(name_of_the_lecture)+
51
+ '` - it does not have any registered weekdays.'
52
+ nil
53
+ end
54
+ }
55
+ # ======================================================================= #
56
+ # Work on the dataset next, to return only exam-entries that match
57
+ # to the given input day at hand.
58
+ # ======================================================================= #
59
+ selection
60
+ end
61
+
62
+ end
63
+
64
+ if __FILE__ == $PROGRAM_NAME
65
+ pp Studium.return_all_exams_on_this_day
66
+ end
@@ -0,0 +1,82 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'studium/toplevel_methods/return_curriculum_of_this_lva_number.rb'
6
+ # =========================================================================== #
7
+ module Studium
8
+
9
+ require 'studium/colours/colours.rb'
10
+ require 'studium/constants/file_constants.rb'
11
+ require 'studium/toplevel_methods/e.rb'
12
+ require 'studium/requires/require_encoding.rb'
13
+
14
+ # ========================================================================= #
15
+ # === Studium.return_curriculum_of_this_lva_number
16
+ #
17
+ # This method will return the LVA number of a particular curriculum.
18
+ #
19
+ # Pass in the name of the curriculum.
20
+ #
21
+ # Invocation example:
22
+ #
23
+ # Studium.return_curriculum_of_this_lva_number '033521'
24
+ #
25
+ # ========================================================================= #
26
+ def self.return_curriculum_of_this_lva_number(i)
27
+ # ======================================================================= #
28
+ # First, sanitize strings if they include at the least two newlines:
29
+ # ======================================================================= #
30
+ if i.is_a?(String) and i.count("\n") > 1
31
+ i = i.split("\n").flatten
32
+ end
33
+ dataset = YAML.load_file(FILE_CURRICULA)
34
+ _ = {}
35
+ dataset.each_pair {|key, value|
36
+ key = Studium.ensure_main_encoding(key)
37
+ value = Studium.ensure_main_encoding(value)
38
+ # ===================================================================== #
39
+ # Get rid of two words from the key.
40
+ # ===================================================================== #
41
+ _[key.sub(/Bachelorcurriculum /,'').sub(/Mastercurriculum /,'')] = value
42
+ }
43
+ dataset = _ # Re-assign it to our dataset.
44
+ if i.is_a? Array
45
+ i.each {|entry| return_curriculum_of_this_lva_number(entry) }
46
+ else
47
+ # ===================================================================== #
48
+ # Next, we must find the corresponding entries in the curriculum.yml
49
+ # file.
50
+ #
51
+ # The dataset from the curricula.yml file is a hash having
52
+ # key-value entries, with the value being an Array:
53
+ #
54
+ # (1) first comes the number of the curriculum, as key
55
+ # (2) the full and complete name of the curriculum, at
56
+ # hand comes as the first element of the Array
57
+ # (3) the university at which the lecture is held, comes
58
+ # as last element of the Array.
59
+ #
60
+ # ===================================================================== #
61
+ if dataset.has_key? i
62
+ name_of_the_curriculum = dataset[i]
63
+ if name_of_the_curriculum.is_a? Array
64
+ name_of_the_curriculum = name_of_the_curriculum.first
65
+ end
66
+ e ::Colours.rev+
67
+ 'The name of the curriculum associated with the LVA '\
68
+ 'ID '+Studium::Colours.simp(i)+' is '\
69
+ '`'+Studium::Colours.sfancy(name_of_the_curriculum)+'`.'
70
+ else
71
+ e 'The curriculum for '+Studium::Colours.sfancy(i)+' does not '\
72
+ 'appear to be registered.'
73
+ e ' '+Studium::Colours.sfile(FILE_CURRICULA)
74
+ end
75
+ end
76
+ end
77
+
78
+ end
79
+
80
+ if __FILE__ == $PROGRAM_NAME
81
+ Studium.return_curriculum_of_this_lva_number(ARGV)
82
+ end # returncurriculumofthislvanumber 033521
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'studium/toplevel_methods/return_dataset_for_this_exam_topic.rb'
6
+ # =========================================================================== #
7
+ module Studium
8
+
9
+ require 'studium/constants/exam_topics.rb'
10
+ require 'studium/toplevel_methods/e.rb'
11
+ require 'studium/toplevel_methods/filter_away_invalid_questions.rb'
12
+ require 'studium/toplevel_methods/find_exam_topic_and_exam_title.rb'
13
+
14
+ # ========================================================================= #
15
+ # === Studium.return_dataset_for_this_exam_topic
16
+ #
17
+ # This method will first load the dataset for a given exam topic,
18
+ # such as 'geologie'; and then it will invoke
19
+ # Studium.filter_away_invalid_questions on the result.
20
+ # ========================================================================= #
21
+ def self.return_dataset_for_this_exam_topic(this_topic)
22
+ # ======================================================================= #
23
+ # We first have to sanitize the topic, as the input may be faulty or
24
+ # incomplete.
25
+ # ======================================================================= #
26
+ this_topic = Studium.find_corresponding_exam_topic(this_topic)
27
+ target_file = Studium.directory_to_the_exam_topics?+this_topic
28
+ if File.exist? target_file
29
+ dataset = File.readlines(target_file)
30
+ dataset = Studium.filter_away_invalid_questions(dataset)
31
+ dataset
32
+ else
33
+ e "No file exists at `#{target_file}`."
34
+ end
35
+ end; self.instance_eval { alias return_dataset_for_this_topic return_dataset_for_this_exam_topic } # === Studium.return_dataset_for_this_topic
36
+
37
+ end
38
+
39
+ if __FILE__ == $PROGRAM_NAME
40
+ pp Studium.return_dataset_for_this_exam_topic('geo')
41
+ end
@@ -0,0 +1,150 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'studium/toplevel_methods/return_dataset_from_this_curriculum_file.rb'
6
+ # =========================================================================== #
7
+ module Studium
8
+
9
+ require 'studium/requires/require_encoding.rb'
10
+ require 'studium/constants/return_file_for_this_curriculum.rb'
11
+ require 'studium/constants/roebe.rb'
12
+ require 'studium/toplevel_methods/e.rb'
13
+ require 'studium/toplevel_methods/return_sanitized_dataset_from_the_file_lecture_information.rb'
14
+
15
+ # ========================================================================= #
16
+ # === Studium.sanitize_dataset_derived_from_a_curriculum_file
17
+ #
18
+ # This method will sanitize the default dataset registered in a
19
+ # curriculum file. In particular, '#' comments will be removed.
20
+ #
21
+ # You should ideally use this method if you need to load up
22
+ # the dataset from a curriculum file.
23
+ # ========================================================================= #
24
+ def self.sanitize_dataset_derived_from_a_curriculum_file(dataset)
25
+ dataset.reject {|entry|
26
+ entry.strip.empty? or entry.strip.start_with?('#') # Remove comments as well.
27
+ }.map {|inner_entry|
28
+ if inner_entry.include? '#'
29
+ inner_entry = inner_entry[0 .. (inner_entry.index('#') - 1)].strip
30
+ end
31
+ inner_entry.strip.squeeze(' ')
32
+ }
33
+ end
34
+
35
+ # ========================================================================= #
36
+ # === Studium.return_dataset_from_this_curriculum_file
37
+ #
38
+ # This method will return the dataset of a curriculum file. This means
39
+ # that it will have all registered lectures already as-is, and return
40
+ # that complete dataset.
41
+ #
42
+ # The input should be the path to an existing file. Alternatively
43
+ # we will also sanitize a few special symbols given here, such
44
+ # as :default.
45
+ # ========================================================================= #
46
+ def self.return_dataset_from_this_curriculum_file(
47
+ i = :default_path
48
+ )
49
+ dataset_from_the_file_lecture_information =
50
+ return_sanitized_dataset_from_the_file_lecture_information
51
+ full_dataset = {}
52
+ if i.is_a? Array
53
+ i = i.first
54
+ end
55
+ case i
56
+ # ======================================================================= #
57
+ # === :indi3
58
+ #
59
+ # This refers to the third individual curriculum, bachelor.
60
+ # ======================================================================= #
61
+ when :indi3
62
+ i = return_file_for_this_curriculum(i)
63
+ # ======================================================================= #
64
+ # === :indi2
65
+ #
66
+ # This refers to the second individual curriculum, bachelor.
67
+ # ======================================================================= #
68
+ when :indi2
69
+ i = return_file_for_this_curriculum(i)
70
+ # ======================================================================= #
71
+ # === :master_informatik_und_molekulare_biologie
72
+ # ======================================================================= #
73
+ when :master_bioinformatics_and_molecular_biotechnology,
74
+ :indi4
75
+ i = return_file_for_this_curriculum(i)
76
+ # ======================================================================= #
77
+ # === Mastercurriculum Dummy
78
+ #
79
+ # This is just for the test-curriculum.
80
+ # ======================================================================= #
81
+ when /^Mastercurriculum(-| )?Dummy$/i
82
+ i = return_file_for_this_curriculum(:master_dummy_curriculum)
83
+ # ======================================================================= #
84
+ # === default_path
85
+ #
86
+ # This is the default entry point.
87
+ # ======================================================================= #
88
+ when :default_path,
89
+ :default,
90
+ :bachelor_vektorx,
91
+ :bvek,
92
+ :bvec,
93
+ :indi1
94
+ i = FILE_BACHELOR_VEKTORX
95
+ # ======================================================================= #
96
+ # === :master_vektorx
97
+ #
98
+ # This refers to the individual vector-curriculum, master-part.
99
+ # ======================================================================= #
100
+ when :master_vektorx
101
+ i = return_file_for_this_curriculum(i)
102
+ # ======================================================================= #
103
+ # === bachelor_master_vektorx
104
+ # ======================================================================= #
105
+ when :bachelor_master_vektorx,
106
+ :top,
107
+ :main
108
+ i = [return_file_for_this_curriculum(:bachelor_vektoren)]+
109
+ [return_file_for_this_curriculum(:master_vektoren)]
110
+ else
111
+ if i and i.is_a?(String) and File.exist?(i)
112
+ # In this case simply use that file as-is.
113
+ else
114
+ i = return_file_for_this_curriculum(i)
115
+ end
116
+ end
117
+ unless i.is_a? Array
118
+ i = [i].flatten.compact
119
+ end
120
+ i.each {|file|
121
+ if file and File.exist?(file)
122
+ dataset = File.readlines(file, encoding: MAIN_ENCODING)
123
+ dataset = sanitize_dataset_derived_from_a_curriculum_file(dataset)
124
+ # =================================================================== #
125
+ # Next we'll have to obtain the proper dataset from the main Hash.
126
+ # This may fail, though, so we need to check for that and notify
127
+ # the user as well, in the event that failure will occur.
128
+ # =================================================================== #
129
+ dataset.each {|entry|
130
+ if dataset_from_the_file_lecture_information.has_key? entry
131
+ pointer = dataset_from_the_file_lecture_information[entry]
132
+ full_dataset[entry] = pointer
133
+ else
134
+ e "No entry was found for #{steelblue(entry)}."
135
+ e 'Please correct this '+tomato('error')+'.'
136
+ exit
137
+ end
138
+ }
139
+ else
140
+ e "No file exists at `#{i}`."
141
+ end
142
+ }
143
+ return full_dataset
144
+ end
145
+
146
+ end
147
+
148
+ if __FILE__ == $PROGRAM_NAME
149
+ pp Studium.return_dataset_from_this_curriculum_file # (ARGV)
150
+ end # rb return_dataset_from_this_curriculum_file
@@ -0,0 +1,66 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'studium/toplevel_methods/return_directory_for.rb'
6
+ # =========================================================================== #
7
+ module Studium
8
+
9
+ require 'studium/constants/roebe.rb'
10
+
11
+ # ========================================================================= #
12
+ # === Studium.return_directory_for
13
+ #
14
+ # This method will return a String. This String shall represent the
15
+ # most likely local path to an existing directory belonging to a
16
+ # university lecture.
17
+ #
18
+ # Typical input to this method would be like:
19
+ #
20
+ # "875110 Werkstoff- und Materialkunde"
21
+ # "BOKU"
22
+ #
23
+ # The second argument denotes the university.
24
+ # ========================================================================= #
25
+ def self.return_directory_for(
26
+ name_of_the_lecture,
27
+ which_university = 'uniwien'
28
+ )
29
+ if name_of_the_lecture.is_a? Array
30
+ name_of_the_lecture = name_of_the_lecture.first
31
+ end
32
+ modified_name_of_the_lecture = name_of_the_lecture.tr(' ','_')
33
+ # ======================================================================= #
34
+ # The modified name of the lecture can never include '(' or ')' or
35
+ # ':' and '/' characters. The reason for this is that the name has
36
+ # to correspond to a local directory - and my directories never
37
+ # contain any of the following characters.
38
+ # ======================================================================= #
39
+ modified_name_of_the_lecture.delete!('():/,')
40
+ modified_name_of_the_lecture.chop! if modified_name_of_the_lecture.end_with? '.'
41
+ if modified_name_of_the_lecture.include? '_-_'
42
+ modified_name_of_the_lecture.gsub!(/_-_/,'_')
43
+ end
44
+ modified_name_of_the_lecture.squeeze!('_')
45
+ _ = LOCAL_STUDIUM_DIR.dup # This variable should have a trailing '/' character.
46
+ modified_university_name = which_university.tr(' ','_')
47
+ case modified_university_name # case tag
48
+ when 'TU_Vienna','TU Vienna'
49
+ modified_university_name = 'TU_WIEN'
50
+ when 'BOKU','boku'
51
+ modified_university_name = 'BOKU_WIEN'
52
+ when 'Uni_Wien'
53
+ modified_university_name.upcase!
54
+ end
55
+ _ << modified_university_name
56
+ _ << '/'
57
+ _ << modified_name_of_the_lecture
58
+ _ << '/'
59
+ return _
60
+ end
61
+
62
+ end
63
+
64
+ if __FILE__ == $PROGRAM_NAME
65
+ puts Studium.return_directory_for(ARGV[0], ARGV[1])
66
+ end # returndirectoryfor "875110 Werkstoff- und Materialkunde" "BOKU"
@@ -0,0 +1,489 @@
1
+ #!/usr/bin/ruby -w
2
+ # Encoding: UTF-8
3
+ # frozen_string_literal: true
4
+ # =========================================================================== #
5
+ # require 'studium/toplevel_methods/return_div_timetable_of_upcoming_exams.rb'
6
+ # =========================================================================== #
7
+ module Studium
8
+
9
+ require 'studium/constants/time.rb'
10
+ require 'studium/constants/www_constants.rb'
11
+ require 'studium/colours/colours.rb'
12
+ require 'studium/toplevel_methods/is_this_lecture_part_of_the_vector_curriculum.rb'
13
+ require 'studium/toplevel_methods/main_dataset.rb'
14
+ require 'studium/toplevel_methods/time.rb'
15
+ require 'studium/toplevel_methods/try_to_guess_the_most_likely_lva_id.rb'
16
+ require 'studium/misc/return_remote_homepage_of_this_lecture.rb'
17
+ require 'studium/constants/image_constants.rb'
18
+
19
+ begin
20
+ require 'cliner'
21
+ rescue LoadError; end
22
+
23
+ begin
24
+ require 'html_tags'
25
+ rescue LoadError; end
26
+
27
+ # ========================================================================= #
28
+ # === add_balloon
29
+ #
30
+ # This method can be used to add a CSS-tooltip to a text (in a html
31
+ # page).
32
+ #
33
+ # Invocation example:
34
+ #
35
+ # add_balloon(rand(5)+1.0, raw_name_of_the_lecture)
36
+ #
37
+ # ========================================================================= #
38
+ def self.add_balloon(
39
+ add_this_text = 5.0,
40
+ name_of_the_lecture = 'Vorlesungsname hier'
41
+ )
42
+ if add_this_text.is_a? Numeric
43
+ add_this_text = add_this_text.to_s
44
+ end
45
+ unless add_this_text.include? 'ECTS'
46
+ add_this_text = add_this_text.dup if add_this_text.frozen?
47
+ add_this_text << ' ECTS'
48
+ end
49
+ '<span data-balloon="'+add_this_text.to_s+'" data-balloon-pos="right" '\
50
+ 'data-balloon-length="medium">'+name_of_the_lecture+'</span>'+N
51
+ end
52
+
53
+ require 'studium/toplevel_methods/try_to_return_the_expanded_name_of_this_lecture.rb'
54
+ # ========================================================================= #
55
+ # === Studium.return_div_timetable_of_upcoming_exams
56
+ #
57
+ # This method can be used to create a timetable <div>, which can then
58
+ # be embedded/displayed into a .html or .cgi page.
59
+ #
60
+ # In order for this to work, the input-Hash for this method, which
61
+ # is the first argument to this method, must be given in the "correct
62
+ # format".
63
+ #
64
+ # In particular, we need entries within that Hash that have Symbols
65
+ # such as :next_exam and :remote_url, so make sure that these entries
66
+ # exist BEFORE you do access this method here. Some aliases are
67
+ # allowed as well, such as :exams, which may originate straight
68
+ # from the entries stored in the file "lecture_information.yml".
69
+ #
70
+ # An example entry for :next_exam would be this here:
71
+ #
72
+ # :next_exam => "01.11.2017"
73
+ #
74
+ # So in other words, the date of this upcoming exam must be passed
75
+ # in via the dd.mm.yyyy notation.
76
+ # ========================================================================= #
77
+ def self.return_div_timetable_of_upcoming_exams(
78
+ i, # <- The input is usually an Array.
79
+ optional_commands = nil
80
+ )
81
+ n_ects_points_can_be_done = 0
82
+ # ======================================================================= #
83
+ # Keep an Array that tells us which lectures have no upcoming
84
+ # exam entry. That way we can remedy this problem.
85
+ # ======================================================================= #
86
+ array_these_courses_have_no_upcoming_exam_entry = []
87
+ array_obsolete_time_entries = []
88
+ require 'html_tags' unless Object.const_defined? :HtmlTags
89
+ _ = ''.dup
90
+ # =================================================================== #
91
+ # How many exams will be actually shown.
92
+ # =================================================================== #
93
+ we_will_show_n_exams = 0
94
+ # =================================================================== #
95
+ # === Timetable tag
96
+ # =================================================================== #
97
+ _ << TIMETABLE_DIV+N # in $RUBY_STUDIUM/constants/www_constants.rb
98
+ _ << '<b style="font-size:1.5em; padding-left:1.5em">'
99
+ # =================================================================== #
100
+ # Next, build up the HTML table that will be displayed, via the
101
+ # <table> tag.
102
+ # =================================================================== #
103
+ the_html_table = '<table cellspacing="3" style="font-size:0.8em; margin-left:4em; padding:4px; border-collapse: collapse;">'+N+N
104
+ the_html_table << '<tr style="font-size:larger; font-weight:bold">'+N
105
+ the_html_table << ' <td><b>University</b></td>'+N
106
+ the_html_table << ' <td style="padding:6px">Name of the lecture<td>'+N
107
+ the_html_table << ' <td style="padding:6px">n ECTS points and date of the exam</td>'+N
108
+ # the_html_table << ' <td style="padding:6px">date of the exam</td>'+N
109
+ the_html_table << ' <td style="padding:6px">priority and remote URL</td></tr>'+N
110
+ inner_counter = 0
111
+ # =================================================================== #
112
+ # We expect the Hash to be already time-sorted, so you may have to
113
+ # make sure on your own that this is the case, before calling this
114
+ # method.
115
+ # =================================================================== #
116
+ i.each {|name_of_the_lecture, inner_hash|
117
+ # ================================================================= #
118
+ # Do note that the following variable is normally an Array, such
119
+ # as ["Freitag 13.07.2018, 15:30-18:00, Ort: Audimax ...']
120
+ # ================================================================= #
121
+ registered_for_an_upcoming_exam_at = inner_hash['registered']
122
+ n_ects_points = inner_hash[:ects].to_s.dup
123
+ lva_id = name_of_the_lecture.split(' ').first.to_s
124
+ lecture_type = inner_hash[:type]
125
+ already_solved_this_lecture = inner_hash[:already_solved]
126
+ at_this_university = inner_hash[:university].to_sym
127
+ # ================================================================= #
128
+ # Very early on, we will register entries that:
129
+ #
130
+ # (1) we have NOT yet solved
131
+ # (2) that do NOT have an entry called exams:
132
+ # (3) for entries that are not mandatory-attendance, aka
133
+ # "prüfungsimmanent"
134
+ #
135
+ # ================================================================= #
136
+ unless already_solved_this_lecture
137
+ unless inner_hash.has_key? 'exams'
138
+ unless is_prüfungsimmanent?(lecture_type, :SE) # ← Only ignore seminar-type lectures.
139
+ array_these_courses_have_no_upcoming_exam_entry <<
140
+ # "#{lva_id} #{name_of_the_lecture}"
141
+ "#{name_of_the_lecture}"
142
+ end
143
+ end
144
+ end
145
+ # ================================================================= #
146
+ # If the lva_id does not at the least have two consecutive numbers,
147
+ # we will use another method to guess a lva-id here.
148
+ # ================================================================= #
149
+ unless lva_id =~ /\d{2}/
150
+ lva_id = ::Studium.try_to_guess_the_most_likely_lva_id(
151
+ name_of_the_lecture
152
+ )
153
+ end
154
+ # ================================================================= #
155
+ # Add an "invisible" LVA ID entry next.
156
+ # ================================================================= #
157
+ colourized_lva_id =
158
+ '<span style="color:white; font-weight: bold"> '+lva_id+'</span>'
159
+ case optional_commands
160
+ when :remove_leading_lva_id_entries
161
+ if name_of_the_lecture.include? ' '
162
+ name_of_the_lecture = name_of_the_lecture.split(' ')[1..-1].join(' ').strip
163
+ end
164
+ end
165
+ lecture_has_been_solved_already = false
166
+ # ===================================================================== #
167
+ # The first entry keeps the name of the lecture. The inner hash keeps
168
+ # the associated dataset and will have entries such as remote_url.
169
+ # ===================================================================== #
170
+ if inner_hash.has_key? :next_exam
171
+ the_next_exam = inner_hash[:next_exam]
172
+ elsif inner_hash.has_key? 'exams'
173
+ the_next_exam = inner_hash['exams']
174
+ the_next_exam = the_next_exam.first if the_next_exam.is_a? Array
175
+ end
176
+ if inner_hash.has_key? :already_solved
177
+ lecture_has_been_solved_already = inner_hash[:already_solved]
178
+ end
179
+ # ===================================================================== #
180
+ # Next determine the remote URL. It will be available in the variable
181
+ # called remote_url.
182
+ # ===================================================================== #
183
+ if inner_hash.has_key? :homepage
184
+ remote_url = inner_hash[:homepage]
185
+ elsif inner_hash.has_key? :remote_url
186
+ remote_url = inner_hash[:remote_url]
187
+ elsif inner_hash.has_key? :url
188
+ remote_url = inner_hash[:url]
189
+ else # else this key does not exist, so we must query beautiful_url
190
+ end
191
+ original_priority = nil
192
+ _priority = inner_hash[:priority] # This is optional.
193
+ original_priority = _priority.to_i if _priority
194
+ # ===================================================================== #
195
+ # if the_next_exam.nil? and !lecture_has_been_solved_already
196
+ # e 'A nil value was found for '+
197
+ # Studium::Colours.sfancy(name_of_the_lecture)
198
+ # pp inner_hash
199
+ # end # ^^^ disabled as of March 2018; may re-consider re-enabling it one day.
200
+ # ===================================================================== #
201
+ if the_next_exam and (!lecture_has_been_solved_already)
202
+ # =================================================================== #
203
+ # The variable the_next_exam can also be an Array such as:
204
+ # ["01.03.2018, 10:00-13:00"]
205
+ # Hence, the following check has to be used.
206
+ # =================================================================== #
207
+ if the_next_exam.is_a? Array
208
+ the_next_exam = the_next_exam.first
209
+ end
210
+ first_part = the_next_exam
211
+ unless the_next_exam.is_a? Time
212
+ first_part = first_part.split(',').first
213
+ # =================================================================== #
214
+ # Also remove weekend days if it is a String already.
215
+ # =================================================================== #
216
+ if first_part.is_a? String
217
+ first_part.squeeze!(' ')
218
+ first_part = remove_leading_weekday_names_from(first_part)
219
+ end
220
+ # =================================================================== #
221
+ # We may only display exams that are upcoming, not exams that
222
+ # have already been happening. This explains the following code.
223
+ #
224
+ # 12 hours cool-down phase before showing an old exam.
225
+ # =================================================================== #
226
+ if first_part.nil?
227
+ e "There is a problem: #{name_of_the_lecture} has "\
228
+ "invalid time entries. Please fix this."
229
+ end
230
+ unless first_part =~ /\d+/ # Unless it does not have at the least one number
231
+ e 'Something appears to be wrong for the time-format '\
232
+ 'of the lecture `'+name_of_the_lecture+'`.'
233
+ end
234
+ end
235
+ twelve_hours_ago = (Time.now - (12 * ONE_HOUR))
236
+ if first_part.is_a? Time
237
+ time_parsed_first_part = first_part
238
+ else
239
+ time_parsed_first_part = Time.parse(first_part)
240
+ end
241
+ if time_parsed_first_part < twelve_hours_ago
242
+ # ================================================================= #
243
+ # This is valid for when the exam is already over. We will
244
+ # add it into an Array. But only with a 23 hour delay or so.
245
+ # ================================================================= #
246
+ array_obsolete_time_entries << lva_id+' '+
247
+ name_of_the_lecture+' '+
248
+ first_part.to_s.squeeze(' ')
249
+ else
250
+ n_ects_points_can_be_done += n_ects_points.to_f
251
+ we_will_show_n_exams += 1
252
+ inner_counter += 1
253
+ # ================================================================= #
254
+ # Colourize in crimson.
255
+ # ================================================================= #
256
+ if the_next_exam.frozen?
257
+ the_next_exam = the_next_exam.to_s.dup
258
+ end
259
+ unless the_next_exam.is_a? Time
260
+ the_next_exam.lstrip!
261
+ # =============================================================== #
262
+ # The next line will get rid of e. g. "Freitag" and similar strings.
263
+ # =============================================================== #
264
+ the_next_exam = remove_leading_weekday_names_from(the_next_exam)
265
+ end
266
+ if _priority
267
+ case _priority.to_s.strip
268
+ when '1'
269
+ # ============================================================= #
270
+ # High priority entries get the colour blue.
271
+ # ============================================================= #
272
+ _priority = '<b>Priorität: <span style="font-size:xx-large; color: darkblue">'+
273
+ _priority.to_s+
274
+ '</span></b>'+N
275
+ else
276
+ _priority = '<b>Priorität: <span style="font-size:large;">'+
277
+ _priority.to_s+
278
+ '</span></b>'+N
279
+ end
280
+ end
281
+ # ================================================================= #
282
+ # Colourize the next exam with a crimson colour.
283
+ # ================================================================= #
284
+ if the_next_exam.is_a? Time
285
+ the_next_exam = dd_mm_yyyy(the_next_exam)
286
+ end
287
+ crimson_coloured_the_next_exam = the_next_exam.sub(
288
+ /(\d\d.\d\d.\d\d\d\d)/, # See: http://rubular.com/r/qOQqVOjR63
289
+ '<span style="color:crimson">\1</span>'
290
+ )
291
+ # ================================================================= #
292
+ # Add the counter next. And colourize the more important lectures
293
+ # in darkblue. Lectures that are part of the vektor-curriculum
294
+ # get midnightblue in colour and will be larger.
295
+ # ================================================================= #
296
+ possibly_colourized_name_of_the_lecture = name_of_the_lecture.dup
297
+ if Studium.is_part_of_the_vektor_curriculum?(possibly_colourized_name_of_the_lecture)
298
+ possibly_colourized_name_of_the_lecture =
299
+ '<span style="color: midnightblue; text-decoration: underline">'+
300
+ possibly_colourized_name_of_the_lecture+
301
+ '</span>'
302
+ else
303
+ if original_priority == 1 # Then use a darkblue colour for the lecture in this case.
304
+ possibly_colourized_name_of_the_lecture =
305
+ '<span style="color: darkblue">'+
306
+ possibly_colourized_name_of_the_lecture+
307
+ '</span>'
308
+ if registered_for_an_upcoming_exam_at.is_a? Array
309
+ possibly_colourized_name_of_the_lecture =
310
+ '<i style="text-decoration: underline;">'+
311
+ possibly_colourized_name_of_the_lecture+
312
+ '</i>'
313
+ end
314
+ end
315
+ end
316
+ # ================================================================= #
317
+ # Add the name of the lecture next, including a little balloon
318
+ # popup.
319
+ # ================================================================= #
320
+ if original_priority < 6
321
+ add_this_text_for_the_balloon = n_ects_points.to_s.dup
322
+ if registered_for_an_upcoming_exam_at
323
+ add_this_text_for_the_balloon << ' ECTS (registered for this exam)'
324
+ end
325
+ possibly_colourized_name_of_the_lecture_with_balloon_tooltip =
326
+ # ============================================================= #
327
+ # Add the balloon next:
328
+ # ============================================================= #
329
+ add_balloon(
330
+ add_this_text_for_the_balloon,
331
+ possibly_colourized_name_of_the_lecture
332
+ )
333
+ # =============================================================== #
334
+ # Creating the <html>-table's content next. This will make use
335
+ # of a university-logo.
336
+ # =============================================================== #
337
+ the_html_table << N+N+
338
+ '<tr>'+N+
339
+ '<td>'+
340
+ '<a href ="'+remote_url+'">'+
341
+ Studium.return_logo_for_this_university(at_this_university).to_s+
342
+ '</a>'+N+
343
+ '</td>'+N+
344
+ '<td>'\
345
+ '<b>'+' ('+inner_counter.to_s+') '+
346
+ possibly_colourized_name_of_the_lecture_with_balloon_tooltip+'</b> '+
347
+ colourized_lva_id+
348
+ '</td>'+N
349
+ end
350
+ # ================================================================= #
351
+ # We will also add the weekday entry in the following code chunk.
352
+ # ================================================================= #
353
+ use_this_weekday = Studium.return_weekday_of_this_date(
354
+ the_next_exam, :german
355
+ ).strip
356
+ # ================================================================= #
357
+ # Add the amount of ECTS points next.
358
+ # ================================================================= #
359
+ if original_priority < 6
360
+ if registered_for_an_upcoming_exam_at.is_a? Array
361
+ # =============================================================== #
362
+ # This entry point is for exams the user has registered for.
363
+ # =============================================================== #
364
+ the_html_table << '<td><b style="color: navy">' << n_ects_points.to_s << ' ECTS</b></td>'+N
365
+ else
366
+ the_html_table << '<td><b>' << n_ects_points.to_s << ' ECTS</b></td>'+N
367
+ end
368
+ # ================================================================= #
369
+ # Add the next exam to the HTML table next. We will also use
370
+ # the weekday.
371
+ # ================================================================= #
372
+ the_html_table << "<td><b style=\"color: #930522\">#{use_this_weekday}</b> "\
373
+ "<b>#{crimson_coloured_the_next_exam}</b></span> "\
374
+ "<span></td>#{N}"
375
+ # ================================================================= #
376
+ # Append the priority but only if the priority is smaller than 6.
377
+ # We will also show the URL here.
378
+ # ================================================================= #
379
+ the_html_table << "<td>#{_priority}"\
380
+ "<span style=\"font-size:smaller\">"\
381
+ "#{HtmlTags.a(remote_url.to_s)}</span></td></tr>#{N}"
382
+ end
383
+ end
384
+ else
385
+ # =================================================================== #
386
+ # Ok, so the lecture may have not been solved already. We could
387
+ # report this, but I found this to be too spammy so I disabled it
388
+ # during March 2018.
389
+ # =================================================================== #
390
+ # if !lecture_has_been_solved_already
391
+ # cliner {
392
+ # e 'The lecture '+Studium::Colours.sfancy(name_of_the_lecture)+' either '\
393
+ # 'does not have a key called '+Studium::Colours.orange(':next_exam or exams')+
394
+ # ' - at the least none could be found.'
395
+ # pp inner_hash
396
+ # pp the_next_exam
397
+ # }
398
+ # end
399
+ end
400
+ }
401
+ _ << the_html_table+'</table>'+N # Add the HTML table here.
402
+ # ======================================================================= #
403
+ # Sneak in the timetable-header next.
404
+ # ======================================================================= #
405
+ _[TIMETABLE_DIV.size+1,0] =
406
+ "<div style=\"font-weight: bold; margin-bottom: 1px; padding:5px; font-family: monospace; font-size:1.2em\">#{N}#{N}"\
407
+ "Timetable for the next #{we_will_show_n_exams} upcoming exams:</b>"\
408
+ "#{N}#{N}</div>"
409
+ # ======================================================================= #
410
+ # Report how many ECTS points can be attained through the registered
411
+ # exams listed above.
412
+ # ======================================================================= #
413
+ _ << '<br><span style="margin-left: 2em; font-family: monospace; '\
414
+ 'font-size:1.1em">A total of <b style="color:darkblue">'+
415
+ n_ects_points_can_be_done.to_s+' ECTS points</b> '\
416
+ 'can be attained through the above exams.</span>'+N
417
+ _ << '</div>' # End the Timetable <div> tag here.
418
+ # ======================================================================= #
419
+ # Add obsolete time entries then.
420
+ # ======================================================================= #
421
+ unless array_obsolete_time_entries.empty?
422
+ string = 'There are some outdated entries:'.dup
423
+ string << "#{N}Consider updating these entries in the file lecture_information.yml#{N}"
424
+ e string
425
+ _ << HtmlTags.h3(string)
426
+ array_obsolete_time_entries.each {|this_lecture|
427
+ this_lecture.squeeze!(' ')
428
+ # =================================================================== #
429
+ # ["182.711", "Betriebssysteme", "04.03.2020"]
430
+ # =================================================================== #
431
+ splitted = this_lecture.split(' ')
432
+ splitted[-1] = "# #{splitted[-1]}"
433
+ this_lecture = splitted.join(' ')
434
+ leading_part = this_lecture.split(' ')[0 .. -2].join(' ')
435
+ e ::Colours.crimson(' → ')+
436
+ ::Colours.orange(this_lecture)
437
+ # =================================================================== #
438
+ # Since as of 29.01.2020 we will also display the remote URL here.
439
+ # =================================================================== #
440
+ if leading_part.end_with? ' #'
441
+ leading_part[-2,2] = '' # Ad-hoc fix.
442
+ end
443
+ remote_url = Studium.return_remote_homepage_of_this_lecture(leading_part)
444
+ _ << "<b>#{this_lecture}</b> → <b><a href=\"#{remote_url}\">"\
445
+ "#{remote_url}</a></b><br>#{N}"
446
+ }
447
+ end
448
+ # ======================================================================= #
449
+ # And report lectures without an upcoming exam entry.
450
+ # ======================================================================= #
451
+ unless array_these_courses_have_no_upcoming_exam_entry.empty?
452
+ n_courses = array_these_courses_have_no_upcoming_exam_entry.size
453
+ _ << '<h4 style="margin-left:1em">The following '+n_courses.to_s+' courses '\
454
+ 'have no upcoming exam entry:</h4>'+N
455
+ main_dataset = Studium.main_dataset?
456
+ array_these_courses_have_no_upcoming_exam_entry.each {|entry|
457
+ possible_remote_homepage = Studium.return_remote_homepage_of_this_lecture(entry)
458
+ # =================================================================== #
459
+ # Must expand the name next:
460
+ # =================================================================== #
461
+ entry = Studium.try_to_return_the_expanded_name_of_this_lecture(entry)
462
+ if possible_remote_homepage == entry
463
+ # ================================================================= #
464
+ # In this case try again, but with BeautifulUrl instead.
465
+ # ================================================================= #
466
+ possible_remote_homepage = BeautifulUrl[possible_remote_homepage]
467
+ end
468
+ if possible_remote_homepage.is_a? Array
469
+ possible_remote_homepage = possible_remote_homepage.first
470
+ end
471
+ this_university = main_dataset[entry][:university]
472
+ # =================================================================== #
473
+ # Next insert the picture of the university on the left hand side:
474
+ # =================================================================== #
475
+ case this_university.to_s
476
+ when 'Uni Wien','BOKU','TU Vienna'
477
+ _ << '<a href ="'+possible_remote_homepage+'" style="margin-left:4em">'+
478
+ Studium.return_logo_for_this_university(this_university).to_s+
479
+ '</a>'+N
480
+ end
481
+ _ << '<span style="font-weight:bold">'+entry+'</span>'
482
+ _ << ' | <a href="'+possible_remote_homepage+'">'+possible_remote_homepage+'</a>'
483
+ _ << '<br>'
484
+ }
485
+ end
486
+ _ # And return the result here.
487
+ end
488
+
489
+ end