Add config that limits teachers rights in exercise BT#15235

$_configuration['limit_exercise_teacher_access']
pull/2790/head
Julio Montoya 7 years ago
parent 970529f800
commit a1e9e3f287
  1. 101
      main/exercise/exercise.php
  2. 6
      main/exercise/exercise_admin.php
  3. 11
      main/exercise/question_list_admin.inc.php
  4. 3
      main/install/configuration.dist.php

@ -27,6 +27,9 @@ $htmlHeadXtra[] = api_get_css_asset('qtip2/jquery.qtip.min.css');
// Access control // Access control
api_protect_course_script(true); api_protect_course_script(true);
$limitTeacherAccess = api_get_configuration_value('limit_exercise_teacher_access');
require_once 'hotpotatoes.lib.php'; require_once 'hotpotatoes.lib.php';
/* Constants and variables */ /* Constants and variables */
@ -106,6 +109,9 @@ if (api_get_course_setting('enable_exercise_auto_launch') == 1 &&
$nameTools = get_lang('Exercises'); $nameTools = get_lang('Exercises');
$errorXmlExport = null; $errorXmlExport = null;
if ($is_allowedToEdit && !empty($choice) && $choice === 'exportqti2') { if ($is_allowedToEdit && !empty($choice) && $choice === 'exportqti2') {
if ($limitTeacherAccess && !api_is_platform_admin()) {
api_not_allowed(true);
}
require_once api_get_path(SYS_CODE_PATH).'exercise/export/qti2/qti2_export.php'; require_once api_get_path(SYS_CODE_PATH).'exercise/export/qti2/qti2_export.php';
$export = export_exercise_to_qti($exerciseId, true); $export = export_exercise_to_qti($exerciseId, true);
@ -228,6 +234,10 @@ if ($is_allowedToEdit) {
case 'delete': case 'delete':
// deletes an exercise // deletes an exercise
if ($exercise_action_locked == false) { if ($exercise_action_locked == false) {
if ($limitTeacherAccess && !api_is_platform_admin()) {
// Teacher cannot delete an exercise
break;
}
$objExerciseTmp->delete(); $objExerciseTmp->delete();
$link_info = GradebookUtils::isResourceInCourseGradebook( $link_info = GradebookUtils::isResourceInCourseGradebook(
api_get_course_id(), api_get_course_id(),
@ -239,9 +249,15 @@ if ($is_allowedToEdit) {
GradebookUtils::remove_resource_from_course_gradebook($link_info['id']); GradebookUtils::remove_resource_from_course_gradebook($link_info['id']);
} }
echo Display::return_message(get_lang('ExerciseDeleted'), 'confirmation'); echo Display::return_message(get_lang('ExerciseDeleted'), 'confirmation');
} }
break; break;
case 'enable': case 'enable':
if ($limitTeacherAccess && !api_is_platform_admin()) {
// Teacher change exercise
break;
}
// enables an exercise // enables an exercise
if (empty($sessionId)) { if (empty($sessionId)) {
$objExerciseTmp->enable(); $objExerciseTmp->enable();
@ -264,6 +280,10 @@ if ($is_allowedToEdit) {
echo Display::return_message(get_lang('VisibilityChanged'), 'confirmation'); echo Display::return_message(get_lang('VisibilityChanged'), 'confirmation');
break; break;
case 'disable': case 'disable':
if ($limitTeacherAccess && !api_is_platform_admin()) {
// Teacher change exercise
break;
}
// disables an exercise // disables an exercise
if (empty($sessionId)) { if (empty($sessionId)) {
$objExerciseTmp->disable(); $objExerciseTmp->disable();
@ -307,6 +327,11 @@ if ($is_allowedToEdit) {
); );
break; break;
case 'clean_results': case 'clean_results':
if ($limitTeacherAccess && !api_is_platform_admin()) {
// Teacher change exercise
break;
}
// Clean student results // Clean student results
if ($exercise_action_locked == false) { if ($exercise_action_locked == false) {
$quantity_results_deleted = $objExerciseTmp->cleanResults(true); $quantity_results_deleted = $objExerciseTmp->cleanResults(true);
@ -338,6 +363,10 @@ if ($is_allowedToEdit) {
if (!empty($hpchoice)) { if (!empty($hpchoice)) {
switch ($hpchoice) { switch ($hpchoice) {
case 'delete': case 'delete':
if ($limitTeacherAccess && !api_is_platform_admin()) {
// Teacher change exercise
break;
}
// deletes an exercise // deletes an exercise
$imgparams = []; $imgparams = [];
$imgcount = 0; $imgcount = 0;
@ -367,7 +396,12 @@ if ($is_allowedToEdit) {
} }
break; break;
case 'enable': // enables an exercise case 'enable': // enables an exercise
$newVisibilityStatus = "1"; //"visible" if ($limitTeacherAccess && !api_is_platform_admin()) {
// Teacher change exercise
break;
}
$newVisibilityStatus = '1'; //"visible"
$query = "SELECT id FROM $TBL_DOCUMENT $query = "SELECT id FROM $TBL_DOCUMENT
WHERE c_id = $courseId AND path='".Database::escape_string($file)."'"; WHERE c_id = $courseId AND path='".Database::escape_string($file)."'";
$res = Database::query($query); $res = Database::query($query);
@ -383,6 +417,10 @@ if ($is_allowedToEdit) {
break; break;
case 'disable': // disables an exercise case 'disable': // disables an exercise
if ($limitTeacherAccess && !api_is_platform_admin()) {
// Teacher change exercise
break;
}
$newVisibilityStatus = '0'; //"invisible" $newVisibilityStatus = '0'; //"invisible"
$query = "SELECT id FROM $TBL_DOCUMENT $query = "SELECT id FROM $TBL_DOCUMENT
WHERE c_id = $courseId AND path='".Database::escape_string($file)."'"; WHERE c_id = $courseId AND path='".Database::escape_string($file)."'";
@ -769,11 +807,16 @@ if (!empty($exerciseList)) {
); );
// Test settings // Test settings
$actions .= Display::url( $settings = Display::url(
Display::return_icon('settings.png', get_lang('Configure'), '', ICON_SIZE_SMALL), Display::return_icon('settings.png', get_lang('Configure'), '', ICON_SIZE_SMALL),
'exercise_admin.php?'.api_get_cidreq().'&exerciseId='.$row['id'] 'exercise_admin.php?'.api_get_cidreq().'&exerciseId='.$row['id']
); );
if ($limitTeacherAccess && !api_is_platform_admin()) {
$settings = '';
}
$actions .= $settings;
// Exercise results // Exercise results
$actions .= '<a href="exercise_report.php?'.api_get_cidreq().'&exerciseId='.$row['id'].'">'. $actions .= '<a href="exercise_report.php?'.api_get_cidreq().'&exerciseId='.$row['id'].'">'.
Display::return_icon('test_results.png', get_lang('Results'), '', ICON_SIZE_SMALL).'</a>'; Display::return_icon('test_results.png', get_lang('Results'), '', ICON_SIZE_SMALL).'</a>';
@ -816,7 +859,7 @@ if (!empty($exerciseList)) {
// Clean exercise // Clean exercise
if ($locked == false) { if ($locked == false) {
$actions .= Display::url( $clean = Display::url(
Display::return_icon( Display::return_icon(
'clean.png', 'clean.png',
get_lang('CleanStudentResults'), get_lang('CleanStudentResults'),
@ -830,7 +873,7 @@ if (!empty($exerciseList)) {
] ]
); );
} else { } else {
$actions .= Display::return_icon( $clean = Display::return_icon(
'clean_na.png', 'clean_na.png',
get_lang('ResourceLockedByGradebook'), get_lang('ResourceLockedByGradebook'),
'', '',
@ -838,10 +881,16 @@ if (!empty($exerciseList)) {
); );
} }
if ($limitTeacherAccess && !api_is_platform_admin()) {
$clean = '';
}
$actions .= $clean;
// Visible / invisible // Visible / invisible
// Check if this exercise was added in a LP // Check if this exercise was added in a LP
if ($exercise->exercise_was_added_in_lp == true) { if ($exercise->exercise_was_added_in_lp == true) {
$actions .= Display::return_icon( $visibility = Display::return_icon(
'invisible.png', 'invisible.png',
get_lang('AddedToLPCannotBeAccessed'), get_lang('AddedToLPCannotBeAccessed'),
'', '',
@ -849,7 +898,7 @@ if (!empty($exerciseList)) {
); );
} else { } else {
if ($row['active'] == 0 || $visibility == 0) { if ($row['active'] == 0 || $visibility == 0) {
$actions .= Display::url( $visibility = Display::url(
Display::return_icon( Display::return_icon(
'invisible.png', 'invisible.png',
get_lang('Activate'), get_lang('Activate'),
@ -860,7 +909,7 @@ if (!empty($exerciseList)) {
); );
} else { } else {
// else if not active // else if not active
$actions .= Display::url( $visibility = Display::url(
Display::return_icon( Display::return_icon(
'visible.png', 'visible.png',
get_lang('Deactivate'), get_lang('Deactivate'),
@ -871,8 +920,15 @@ if (!empty($exerciseList)) {
); );
} }
} }
if ($limitTeacherAccess && !api_is_platform_admin()) {
$visibility = '';
}
$actions .= $visibility;
// Export qti ... // Export qti ...
$actions .= Display::url( $export = Display::url(
Display::return_icon( Display::return_icon(
'export_qti2.png', 'export_qti2.png',
'IMS/QTI', 'IMS/QTI',
@ -881,6 +937,12 @@ if (!empty($exerciseList)) {
), ),
'exercise.php?choice=exportqti2&exerciseId='.$row['id'].'&'.api_get_cidreq() 'exercise.php?choice=exportqti2&exerciseId='.$row['id'].'&'.api_get_cidreq()
); );
if ($limitTeacherAccess && !api_is_platform_admin()) {
$export = '';
}
$actions .= $export;
} else { } else {
// not session // not session
$actions = Display::return_icon( $actions = Display::return_icon(
@ -890,7 +952,7 @@ if (!empty($exerciseList)) {
// Check if this exercise was added in a LP // Check if this exercise was added in a LP
if ($exercise->exercise_was_added_in_lp == true) { if ($exercise->exercise_was_added_in_lp == true) {
$actions .= Display::return_icon( $visiblity = Display::return_icon(
'invisible.png', 'invisible.png',
get_lang('AddedToLPCannotBeAccessed'), get_lang('AddedToLPCannotBeAccessed'),
'', '',
@ -898,7 +960,7 @@ if (!empty($exerciseList)) {
); );
} else { } else {
if ($row['active'] == 0 || $visibility == 0) { if ($row['active'] == 0 || $visibility == 0) {
$actions .= Display::url( $visiblity = Display::url(
Display::return_icon( Display::return_icon(
'invisible.png', 'invisible.png',
get_lang('Activate'), get_lang('Activate'),
@ -909,7 +971,7 @@ if (!empty($exerciseList)) {
); );
} else { } else {
// else if not active // else if not active
$actions .= Display::url( $visiblity = Display::url(
Display::return_icon( Display::return_icon(
'visible.png', 'visible.png',
get_lang('Deactivate'), get_lang('Deactivate'),
@ -921,6 +983,12 @@ if (!empty($exerciseList)) {
} }
} }
if ($limitTeacherAccess && !api_is_platform_admin()) {
$visiblity = '';
}
$actions .= $visiblity;
$actions .= '<a href="exercise_report.php?'.api_get_cidreq().'&exerciseId='.$row['id'].'">'. $actions .= '<a href="exercise_report.php?'.api_get_cidreq().'&exerciseId='.$row['id'].'">'.
Display::return_icon('test_results.png', get_lang('Results'), '', ICON_SIZE_SMALL).'</a>'; Display::return_icon('test_results.png', get_lang('Results'), '', ICON_SIZE_SMALL).'</a>';
$actions .= Display::url( $actions .= Display::url(
@ -934,9 +1002,10 @@ if (!empty($exerciseList)) {
} }
// Delete // Delete
$delete = '';
if ($session_id == $row['session_id']) { if ($session_id == $row['session_id']) {
if ($locked == false) { if ($locked == false) {
$actions .= Display::url( $delete = Display::url(
Display::return_icon( Display::return_icon(
'delete.png', 'delete.png',
get_lang('Delete'), get_lang('Delete'),
@ -950,7 +1019,7 @@ if (!empty($exerciseList)) {
] ]
); );
} else { } else {
$actions .= Display::return_icon( $delete = Display::return_icon(
'delete_na.png', 'delete_na.png',
get_lang('ResourceLockedByGradebook'), get_lang('ResourceLockedByGradebook'),
'', '',
@ -959,6 +1028,12 @@ if (!empty($exerciseList)) {
} }
} }
if ($limitTeacherAccess && !api_is_platform_admin()) {
$delete = '';
}
$actions .= $delete;
// Number of questions // Number of questions
$random_label = null; $random_label = null;
if ($row['random'] > 0 || $row['random'] == -1) { if ($row['random'] > 0 || $row['random'] == -1) {

@ -19,6 +19,12 @@ if (!api_is_allowed_to_edit(null, true)) {
api_not_allowed(true); api_not_allowed(true);
} }
$limitTeacherAccess = api_get_configuration_value('limit_exercise_teacher_access');
if ($limitTeacherAccess && !api_is_platform_admin()) {
api_not_allowed(true);
}
$htmlHeadXtra[] = '<script> $htmlHeadXtra[] = '<script>
function activate_start_date() { function activate_start_date() {
if(document.getElementById(\'start_date_div\').style.display == \'none\') { if(document.getElementById(\'start_date_div\').style.display == \'none\') {

@ -15,8 +15,15 @@ use ChamiloSession as Session;
* It is included from the script admin.php * It is included from the script admin.php
*/ */
$limitTeacherAccess = api_get_configuration_value('limit_exercise_teacher_access');
// deletes a question from the exercise (not from the data base) // deletes a question from the exercise (not from the data base)
if ($deleteQuestion) { if ($deleteQuestion) {
if ($limitTeacherAccess && !api_is_platform_admin()) {
exit;
}
// if the question exists // if the question exists
if ($objQuestionTmp = Question::read($deleteQuestion)) { if ($objQuestionTmp = Question::read($deleteQuestion)) {
$objQuestionTmp->delete($exerciseId); $objQuestionTmp->delete($exerciseId);
@ -279,6 +286,10 @@ if (!$inATest) {
); );
} }
if ($limitTeacherAccess && !api_is_platform_admin()) {
$delete_link = '';
}
$btnActions = implode( $btnActions = implode(
PHP_EOL, PHP_EOL,
[$edit_link, $clone_link, $delete_link] [$edit_link, $clone_link, $delete_link]

@ -1084,6 +1084,9 @@ VALUES (2, 13, 'session_courses_read_only_mode', 'Lock Course In Session', 1, 1,
// Option only when building an exercise as a teacher // Option only when building an exercise as a teacher
// $_configuration['question_pagination_lenght'] = 20; // $_configuration['question_pagination_lenght'] = 20;
// Teachers cannot delete an exercise/questions, change exercise visibility, download to qti, clean results
// $_configuration['limit_exercise_teacher_access'] = false;
// ------ Custom DB changes (keep this at the end) // ------ Custom DB changes (keep this at the end)
// Add user activation by confirmation email // Add user activation by confirmation email
// This option prevents the new user to login in the platform if your account is not confirmed via email // This option prevents the new user to login in the platform if your account is not confirmed via email

Loading…
Cancel
Save