Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
/**
2
 * JavaScript for form editing completion conditions.
3
 *
4
 * @module moodle-availability_completion-form
5
 */
6
M.availability_completion = M.availability_completion || {};
7
 
8
/**
9
 * @class M.availability_completion.form
10
 * @extends M.core_availability.plugin
11
 */
12
M.availability_completion.form = Y.Object(M.core_availability.plugin);
13
 
14
/**
15
 * Initialises this plugin.
16
 *
17
 * @method initInner
18
 * @param {Array} cms Array of objects containing cmid => name
19
 */
20
M.availability_completion.form.initInner = function(cms) {
21
    this.cms = cms;
22
};
23
 
24
M.availability_completion.form.getNode = function(json) {
25
    // Create HTML structure.
26
    var html = '<span class="col-form-label pr-3"> ' + M.util.get_string('title', 'availability_completion') + '</span>' +
27
               ' <span class="availability-group mb-3"><label>' +
28
            '<span class="accesshide">' + M.util.get_string('label_cm', 'availability_completion') + ' </span>' +
29
            '<select class="custom-select" name="cm" title="' + M.util.get_string('label_cm', 'availability_completion') + '">' +
30
            '<option value="0">' + M.util.get_string('choosedots', 'moodle') + '</option>';
31
    for (var i = 0; i < this.cms.length; i++) {
32
        var cm = this.cms[i];
33
        // String has already been escaped using format_string.
34
        html += '<option value="' + cm.id + '">' + cm.name + '</option>';
35
    }
36
    html += '</select></label> <label><span class="accesshide">' +
37
                M.util.get_string('label_completion', 'availability_completion') +
38
            ' </span><select class="custom-select" ' +
39
                            'name="e" title="' + M.util.get_string('label_completion', 'availability_completion') + '">' +
40
            '<option value="1">' + M.util.get_string('option_complete', 'availability_completion') + '</option>' +
41
            '<option value="0">' + M.util.get_string('option_incomplete', 'availability_completion') + '</option>' +
42
            '<option value="2">' + M.util.get_string('option_pass', 'availability_completion') + '</option>' +
43
            '<option value="3">' + M.util.get_string('option_fail', 'availability_completion') + '</option>' +
44
            '</select></label></span>';
45
    var node = Y.Node.create('<span class="d-flex flex-wrap align-items-center">' + html + '</span>');
46
 
47
    // Set initial values.
48
    if (json.cm !== undefined &&
49
            node.one('select[name=cm] > option[value=' + json.cm + ']')) {
50
        node.one('select[name=cm]').set('value', '' + json.cm);
51
    }
52
    if (json.e !== undefined) {
53
        node.one('select[name=e]').set('value', '' + json.e);
54
    }
55
 
56
    // Add event handlers (first time only).
57
    if (!M.availability_completion.form.addedEvents) {
58
        M.availability_completion.form.addedEvents = true;
59
        var root = Y.one('.availability-field');
60
        root.delegate('change', function() {
61
            // Whichever dropdown changed, just update the form.
62
            M.core_availability.form.update();
63
        }, '.availability_completion select');
64
    }
65
 
66
    return node;
67
};
68
 
69
M.availability_completion.form.fillValue = function(value, node) {
70
    value.cm = parseInt(node.one('select[name=cm]').get('value'), 10);
71
    value.e = parseInt(node.one('select[name=e]').get('value'), 10);
72
};
73
 
74
M.availability_completion.form.fillErrors = function(errors, node) {
75
    var cmid = parseInt(node.one('select[name=cm]').get('value'), 10);
76
    if (cmid === 0) {
77
        errors.push('availability_completion:error_selectcmid');
78
    }
79
    var e = parseInt(node.one('select[name=e]').get('value'), 10);
80
    if (((e === 2) || (e === 3))) {
81
        this.cms.forEach(function(cm) {
82
            if (cm.id === cmid) {
83
                if (cm.completiongradeitemnumber === null) {
84
                    errors.push('availability_completion:error_selectcmidpassfail');
85
                }
86
            }
87
        });
88
    }
89
};