diff --git a/app/main/check_packs/__init__.py b/app/main/check_packs/__init__.py index d299bdb1..aa36041f 100644 --- a/app/main/check_packs/__init__.py +++ b/app/main/check_packs/__init__.py @@ -1,4 +1,4 @@ from .base_criterion_pack import BaseCriterionPack from .pack_config import BASE_PACKS, DEFAULT_TYPE, DEFAULT_TYPE_INFO, DEFAULT_PRES_TYPE_INFO, DEFAULT_REPORT_TYPE_INFO, \ - REPORT_TYPES + REPORT_TYPES, BASE_PRES_CRITERION, BASE_REPORT_CRITERION from .utils import init_criterions diff --git a/app/server.py b/app/server.py index 7fc4bd58..da6b280b 100644 --- a/app/server.py +++ b/app/server.py @@ -24,7 +24,7 @@ from lti_session_passback.lti import utils from lti_session_passback.lti.check_request import check_request from main.check_packs import BASE_PACKS, BaseCriterionPack, DEFAULT_REPORT_TYPE_INFO, DEFAULT_TYPE, REPORT_TYPES, \ - init_criterions + init_criterions, BASE_PRES_CRITERION, BASE_REPORT_CRITERION from root_logger import get_logging_stdout_handler, get_root_logger from servants import pre_luncher from tasks import create_task @@ -157,10 +157,13 @@ def upload(): else: abort(401) elif request.method == "GET": + pack = db_methods.get_criteria_pack(current_user.criteria) + list_of_check = pack['raw_criterions'] + check_labels_and_discrpt = {CRITERIA_LABELS[check[0]]: CRITERIA_DESCRIPTION[check[0]] for check in list_of_check} formats = set(current_user.formats) file_type = current_user.file_type['type'] formats = formats & ALLOWED_EXTENSIONS[file_type] if formats else ALLOWED_EXTENSIONS[file_type] - return render_template("./upload.html", navi_upload=False, formats=sorted(formats)) + return render_template("./upload.html", navi_upload=False, formats=sorted(formats), list_of_check=check_labels_and_discrpt) @app.route("/tasks", methods=["POST"]) @@ -270,7 +273,9 @@ def get_status(task_id): 'slides_headers': 'Заголовки слайдов присутствуют и занимают не более двух строк', 'goals_slide': 'Слайд "Цель и задачи"', 'probe_slide': 'Слайд "Апробация работы"', 'actual_slide': 'Слайд с описанием актуальности работы', 'conclusion_slide': 'Слайд с заключением', + 'find_slides': 'Поиск ключевого слова в заголовках', 'slide_every_task': 'Наличие слайдов, посвященных задачам', + 'find_on_slide': 'Поиск ключевого слова в тексте слайда', 'pres_right_words': 'Проверка наличия определенных (правильных) слов в презентации', 'pres_image_share': 'Проверка доли объема презентации, приходящейся на изображения', 'pres_banned_words_check': 'Проверка наличия запретных слов в презентации', @@ -291,9 +296,52 @@ def get_status(task_id): 'image_references': 'Проверка наличия ссылок на все рисунки', 'table_references': 'Проверка наличия ссылок на все таблицы', 'report_section_component': 'Проверка наличия необходимых компонент указанного раздела', - 'main_text_check': 'Проверка оформления основного текста отчета' + 'main_text_check': 'Проверка оформления основного текста отчета', + 'headers_at_page_top_check': 'Проверка расположения разделов первого уровня с новой страницы', + 'lr_sections_check': 'Проверка соответствия заголовков разделов требуемым стилям', + 'style_check': 'Проверка корректности форматирования текста', + 'short_sections_check': "Поиск коротких разделов в отчёте", + 'spelling_check': "Проверка наличия орфографических ошибок в тексте", + 'future_dev': 'Наличие направлений дальнейшего развития', } +CRITERIA_DESCRIPTION = {'template_name': 'Шаблон названия: "Презентация_ВКР_Иванов", "ПРЕЗЕНТАЦИЯ_НИР_ИВАНОВ"', + 'slides_number': 'Подсчет основных и запасных слайдов', + 'slides_enum': 'Проверка наличия и корректности номеров слайдов', + 'slides_headers': 'Проверка наличия и корректности заголовков', + 'goals_slide': 'Проверка наличия слайда', + 'probe_slide': 'Проверка наличия слайда', + 'conclusion_slide': 'Проверка наличия слайда', + 'find_slides': 'Ключевые слова: "Апробация", "Цели и задачи", "Заключение"', + 'find_on_slide': 'Ключевое слово: "Актуальность"', + 'slide_every_task': 'Проверка на наличие слайдов', + 'pres_right_words': '', + 'pres_image_share': 'Доля изображений не должна превышать 0,9', + 'pres_banned_words_check': '', + 'conclusion_actual': 'Проверка соответствия заключения поставленным задачам (в процентах)', + 'conclusion_along': 'Проверка слайда "Заключение"', + 'simple_check': 'Проверка отчёта на пустоту страниц', + 'banned_words_in_literature': 'Запрещено упоминание слова "wikipedia"', + 'banned_words_check': 'Запрещено упоминание слова "мы"', + 'page_counter': 'Количество страниц должно быть больше 50ти, не считая "Приложения"', + 'image_share_check': 'Доля изображений (не включая "Приложение") не должна превышать 0,9', + 'right_words_check': 'Определенное слово: "цель"', + 'first_pages_check': 'Обязательные страницы: Титульный лист, Задание на выпускную квалификационную работу, Календарный план, Реферат, Abstract, Cодержание', + 'main_character_check': 'И.о. зав. кафедрой: А.А. Лисс', + 'needed_headers_check': '', + 'header_check': '(Шрифты, отступы и т.д.)', + 'literature_references': '', + 'image_references': '', + 'table_references': '', + 'report_section_component': 'Раздел "Введение", компоненты: "цель", "задачи", "объект", "предмет"', + 'main_text_check': 'Перечень доспустимых стилей: "Основной текст; ВКР_Основной текст", "ВКР_Подпись таблицы", "ВКР_Подпись для рисунков, схем", "ВКР_Содержимое таблицы"', + 'headers_at_page_top_check': '', + 'lr_sections_check': '', + 'style_check': 'Соответствие допустимым стилям', + 'short_sections_check': "Минимальное количество абзацев в разделе: 5, минимальное количество слов в абзаце: 20", + 'spelling_check': "", + 'future_dev': 'Поиск направления развития в разделе "Заключение"', + } @app.route("/results/", methods=["GET"]) def results(_id): diff --git a/app/templates/upload.html b/app/templates/upload.html index 587c56c3..895b2489 100644 --- a/app/templates/upload.html +++ b/app/templates/upload.html @@ -1,3 +1,4 @@ + {% extends "root.html" %} {% set title = {'report': "Загрузка отчётов", 'pres': "Загрузка презентаций"}[current_user.file_type['type']] %} @@ -58,6 +59,34 @@
{{ uploading_label }}
+
+
+
+ +
+
+ + + + + + + + {% for criterion_name, criterion_descrpt in list_of_check.items() %} + + + {% endfor %} + +
Максимальный балл для каждого критерия: 1 +
Итоговый балл считается как сумма полученных баллов / общее количество баллов.
+

+

Критерии:
  • {{ criterion_name }} +

    {% if criterion_descrpt %} + {{ criterion_descrpt }} + {% endif %} +

  • +
    +
    diff --git a/assets/scripts/main.js b/assets/scripts/main.js index e3d9e070..7fc87133 100644 --- a/assets/scripts/main.js +++ b/assets/scripts/main.js @@ -51,3 +51,4 @@ export function collect_values_if_possible(...ids) { return result; } } + diff --git a/assets/scripts/upload.js b/assets/scripts/upload.js index cf152e27..97605252 100644 --- a/assets/scripts/upload.js +++ b/assets/scripts/upload.js @@ -21,6 +21,10 @@ file_formats = file_formats[file_formats.length - 1]; file_formats = file_formats.replaceAll(" ", ""); file_formats = file_formats.split(","); +$("#btn_table_info").click(function(){ + toggleTable('table_info'); +}); + const showSizeExceedMessage = () => { alert( "Объем загружаемых вами файлов превышает максимально разрешенный объем " + (file_upload_limit / 1024 / 1024) + " МБ." + @@ -189,4 +193,13 @@ upload_button.click(async () => { upload_button.prop("disabled", true); await upload(); } -}); \ No newline at end of file +}); + +function toggleTable(tableId) { + var table = document.getElementById(tableId); + if (table.classList.contains("hidden-table")) { + table.classList.remove("hidden-table"); + } else { + table.classList.add("hidden-table"); + } +} diff --git a/assets/styles/upload.css b/assets/styles/upload.css index aa6724b8..630c3f8a 100644 --- a/assets/styles/upload.css +++ b/assets/styles/upload.css @@ -10,3 +10,19 @@ h5 { #upload_title { margin-bottom: 1rem !important; } + +.hidden-table { + display: none; + } + +#table_info { + width: 300%; +} + +.btn-text { + background: none; + border: none; + padding: 0; + font: inherit; + color: blue; + }