Passed
Push — 1.11.x ( bce6cd...c146d9 )
by Angel Fernando Quiroz
12:25
created

main/exercise/exercise_admin.php (1 issue)

1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
use ChamiloSession as Session;
6
7
/**
8
 * Exercise administration
9
 * This script allows to manage an exercise. It is included from
10
 * the script admin.php.
11
 *
12
 * @author Olivier Brouckaert, Julio Montoya
13
 */
14
require_once __DIR__.'/../inc/global.inc.php';
15
$this_section = SECTION_COURSES;
16
17
api_protect_course_script(true);
18
19
if (!api_is_allowed_to_edit(null, true)) {
20
    api_not_allowed(true);
21
}
22
23
$htmlHeadXtra[] = '<script>
24
    function activate_start_date() {
25
        if(document.getElementById(\'start_date_div\').style.display == \'none\') {
26
            document.getElementById(\'start_date_div\').style.display = \'block\';
27
        } else {
28
            document.getElementById(\'start_date_div\').style.display = \'none\';
29
        }
30
    }
31
32
    function activate_end_date() {
33
        if(document.getElementById(\'end_date_div\').style.display == \'none\') {
34
            document.getElementById(\'end_date_div\').style.display = \'block\';
35
        } else {
36
            document.getElementById(\'end_date_div\').style.display = \'none\';
37
        }
38
    }
39
40
    function feedbackselection() {
41
        var index = document.exercise_admin.exerciseFeedbackType.selectedIndex;
42
43
        if (index == \'1\') {
44
            document.exercise_admin.exerciseType[1].checked=true;
45
            document.exercise_admin.exerciseType[0].disabled=true;
46
        } else {
47
            document.exercise_admin.exerciseType[0].disabled=false;
48
        }
49
    }
50
51
    function option_time_expired() {
52
        if(document.getElementById(\'timercontrol\').style.display == \'none\') {
53
          document.getElementById(\'timercontrol\').style.display = \'block\';
54
        } else {
55
          document.getElementById(\'timercontrol\').style.display = \'none\';
56
        }
57
    }
58
59
    function check_per_page_one() {
60
         //document.getElementById(\'exerciseType_0\').checked=true;
61
    }
62
63
    function check_per_page_all() {
64
        if (document.getElementById(\'exerciseType_1\') && document.getElementById(\'exerciseType_1\').checked) {
65
            document.getElementById(\'exerciseType_0\').checked = true;
66
        }
67
    }
68
69
    function check_feedback() {
70
        if (document.getElementById(\'result_disabled_1\').checked == true) {
71
            document.getElementById(\'result_disabled_0\').checked = true;
72
        }
73
74
        if (document.getElementById(\'exerciseType_0\').checked == true) {
75
            document.getElementById(\'result_disabled_0\').checked = true;
76
        }
77
    }
78
79
    function check_direct_feedback() {
80
        document.getElementById(\'option_page_one\').checked = true;
81
        document.getElementById(\'result_disabled_0\').checked = true;
82
    }
83
84
    function check_results_disabled() {
85
        document.getElementById(\'exerciseType_2\').checked = true;
86
    }
87
88
    function disabledHideRandom() {
89
        $("#hidden_random option:eq(0)").prop("selected", true);
90
        $("#hidden_random").hide();
91
    }
92
93
    function checkQuestionSelection() {
94
        var selection = $("#questionSelection option:selected").val();
95
        switch (selection) {
96
            case "'.EX_Q_SELECTION_ORDERED.'":
97
                disabledHideRandom();
98
                $("#hidden_matrix").hide();
99
                break;
100
            case "'.EX_Q_SELECTION_RANDOM.'":
101
                $("#hidden_random").show();
102
                $("#hidden_matrix").hide();
103
                break;
104
            case "'.EX_Q_SELECTION_CATEGORIES_ORDERED_QUESTIONS_ORDERED.'":
105
                disabledHideRandom();
106
                $("#hidden_matrix").show();
107
                break;
108
            case "per_categories":
109
                $("#questionSelection option:eq('.EX_Q_SELECTION_CATEGORIES_ORDERED_QUESTIONS_ORDERED.')").prop("selected", true);
110
                disabledHideRandom();
111
                $("#hidden_matrix").show();
112
                break;
113
            default:
114
                disabledHideRandom();
115
                $("#hidden_matrix").show();
116
                break;
117
        }
118
    }
119
120
    function setFocus(){
121
        $("#exercise_title").focus();
122
    }
123
124
    // to correct #4029 Random and number of attempt menu empty added window.onload=advanced_parameters;
125
    $(function() {
126
        setFocus();
127
    });
128
</script>';
129
130
$objExercise = new Exercise();
131
$course_id = api_get_course_int_id();
132
133
if (isset($_GET['exerciseId'])) {
134
    $form = new FormValidator(
135
        'exercise_admin',
136
        'post',
137
        api_get_self().'?'.api_get_cidreq().'&exerciseId='.intval($_GET['exerciseId'])
138
    );
139
    $objExercise->read($_GET['exerciseId'], false);
140
    $form->addElement('hidden', 'edit', 'true');
141
} else {
142
    $form = new FormValidator(
143
        'exercise_admin',
144
        'post',
145
        api_get_self().'?'.api_get_cidreq()
146
    );
147
    $form->addElement('hidden', 'edit', 'false');
148
}
149
150
$objExercise->createForm($form);
151
152
if ($form->validate()) {
153
    $objExercise->processCreation($form);
154
    if ($form->getSubmitValue('edit') === 'true') {
155
        Display::addFlash(
156
            Display::return_message(get_lang('ExerciseEdited'), 'success')
157
        );
158
    } else {
159
        Display::addFlash(
160
            Display::return_message(get_lang('ExerciseAdded'), 'success')
161
        );
162
    }
163
    $exercise_id = $objExercise->iid;
164
    Session::erase('objExercise');
165
    header('Location:admin.php?exerciseId='.$exercise_id.'&'.api_get_cidreq());
0 ignored issues
show
Are you sure $exercise_id of type false|integer can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

165
    header('Location:admin.php?exerciseId='./** @scrutinizer ignore-type */ $exercise_id.'&'.api_get_cidreq());
Loading history...
166
    exit;
167
} else {
168
    if (api_is_in_gradebook()) {
169
        $interbreadcrumb[] = [
170
            'url' => Category::getUrl(),
171
            'name' => get_lang('ToolGradebook'),
172
        ];
173
    }
174
    $nameTools = get_lang('ExerciseManagement');
175
    $interbreadcrumb[] = [
176
        'url' => 'exercise.php?'.api_get_cidreq(),
177
        'name' => get_lang('Exercises'),
178
    ];
179
    $interbreadcrumb[] = [
180
        'url' => 'admin.php?exerciseId='.$objExercise->iid.'&'.api_get_cidreq(),
181
        'name' => $objExercise->selectTitle(true),
182
    ];
183
184
    Display::display_header($nameTools, get_lang('Exercise'));
185
186
    echo '<div class="actions">';
187
    if ($objExercise->iid != 0) {
188
        echo '<a href="admin.php?'.api_get_cidreq().'&exerciseId='.$objExercise->iid.'">'.
189
            Display::return_icon('back.png', get_lang('GoBackToQuestionList'), '', ICON_SIZE_MEDIUM).'</a>';
190
    } else {
191
        if (!empty($_GET['lp_id']) || !empty($_POST['lp_id'])) {
192
            if (!empty($_POST['lp_id'])) {
193
                $lp_id = $_POST['lp_id'];
194
            //TODO:this remains to be implemented after press the first post
195
            } else {
196
                $lp_id = $_GET['lp_id'];
197
            }
198
            $lp_id = (int) $lp_id;
199
            echo "<a
200
                href=\"../lp/lp_controller.php?".api_get_cidreq()."&gradebook=&action=add_item&type=step&lp_id=".$lp_id."#resource_tab-2\">".
201
                Display::return_icon('back.png', get_lang("BackTo").' '.get_lang('LearningPaths'), '', ICON_SIZE_MEDIUM)."</a>";
202
        } else {
203
            echo '<a href="exercise.php?'.api_get_cidreq().'">'.
204
                Display::return_icon('back.png', get_lang('BackToExercisesList'), '', ICON_SIZE_MEDIUM).
205
                '</a>';
206
        }
207
    }
208
    echo '</div>';
209
210
    if (in_array($objExercise->getFeedbackType(), [EXERCISE_FEEDBACK_TYPE_DIRECT, EXERCISE_FEEDBACK_TYPE_POPUP])) {
211
        echo Display::return_message(get_lang('DirectFeedbackCantModifyTypeQuestion'));
212
    }
213
214
    if (api_get_setting('search_enabled') === 'true' &&
215
        !extension_loaded('xapian')
216
    ) {
217
        echo Display::return_message(get_lang('SearchXapianModuleNotInstalled'), 'error');
218
    }
219
220
    // to hide the exercise description
221
    echo '<style> .media { display:none;}</style>';
222
    $form->display();
223
}
224
Display::display_footer();
225