Browse Source

Add session/base exercise visibility see BT#10601

Julio Montoya 9 years ago
parent
commit
6db9a615ab
1 changed files with 87 additions and 11 deletions
  1. 87 11
      main/exercice/exercise.php

+ 87 - 11
main/exercice/exercise.php

@@ -38,6 +38,7 @@ $courseInfo = api_get_course_info();
 $courseId = $courseInfo['real_id'];
 $userInfo = api_get_user_info();
 $userId = $userInfo['id'];
+$sessionId = api_get_session_id();
 $isDrhOfCourse = CourseManager::isUserSubscribedInCourseAsDrh(
     $userId,
     $courseInfo
@@ -164,7 +165,7 @@ if ($is_allowedToEdit) {
                 // we got variable $courseId $courseInfo session api_get_session_id()
                 $exerciseList = ExerciseLib::get_all_exercises_for_course_id(
                     $courseInfo,
-                    api_get_session_id(),
+                    $sessionId,
                     $courseId,
                     false
                 );
@@ -213,17 +214,33 @@ if ($is_allowedToEdit) {
                         break;
                     case 'enable':
                         // enables an exercise
-                        $objExerciseTmp->enable();
-                        $objExerciseTmp->save();
-                        api_item_property_update($courseInfo, TOOL_QUIZ, $objExerciseTmp->id, 'visible', $userId);
+                        if (empty($sessionId)) {
+                            $objExerciseTmp->enable();
+                            $objExerciseTmp->save();
+                        }
+                        api_item_property_update(
+                            $courseInfo,
+                            TOOL_QUIZ,
+                            $objExerciseTmp->id,
+                            'visible',
+                            $userId
+                        );
                         // "WHAT'S NEW" notification: update table item_property (previously last_tooledit)
                         Display :: display_confirmation_message(get_lang('VisibilityChanged'));
                         break;
                     case 'disable':
                         // disables an exercise
-                        $objExerciseTmp->disable();
-                        $objExerciseTmp->save();
-                        api_item_property_update($courseInfo, TOOL_QUIZ, $objExerciseTmp->id, 'invisible', $userId);
+                        if (empty($sessionId)) {
+                            $objExerciseTmp->disable();
+                            $objExerciseTmp->save();
+                        }
+                        api_item_property_update(
+                            $courseInfo,
+                            TOOL_QUIZ,
+                            $objExerciseTmp->id,
+                            'invisible',
+                            $userId
+                        );
                         Display :: display_confirmation_message(get_lang('VisibilityChanged'));
                         break;
                     case 'disable_results':
@@ -568,7 +585,24 @@ if (!empty($exercise_list)) {
                     );
                 }
 
-                $visibility = api_get_item_visibility($courseInfo, TOOL_QUIZ, $my_exercise_id);
+                $visibility = api_get_item_visibility(
+                    $courseInfo,
+                    TOOL_QUIZ,
+                    $my_exercise_id,
+                    0
+                );
+
+                if (!empty($sessionId)) {
+                    if ($visibility == 0) {
+                        continue;
+                    }
+                    $visibility = api_get_item_visibility(
+                        $courseInfo,
+                        TOOL_QUIZ,
+                        $my_exercise_id,
+                        $sessionId
+                    );
+                }
 
                 if ($row['active'] == 0 || $visibility == 0) {
                     $title = Display::tag('font', $cut_title, array('style' => 'color:grey'));
@@ -672,6 +706,43 @@ if (!empty($exercise_list)) {
                 } else {
                     // not session
                     $actions = Display::return_icon('edit_na.png', get_lang('ExerciseEditionNotAvailableInSession'));
+
+                    // Check if this exercise was added in a LP
+                    if ($exercise_obj->exercise_was_added_in_lp == true) {
+                        $actions .= Display::return_icon(
+                            'invisible.png',
+                            get_lang('AddedToLPCannotBeAccessed'),
+                            '',
+                            ICON_SIZE_SMALL
+                        );
+                    } else {
+
+                        if ($row['active'] == 0 || $visibility == 0) {
+                            $actions .= Display::url(
+                                Display::return_icon(
+                                    'invisible.png',
+                                    get_lang('Activate'),
+                                    '',
+                                    ICON_SIZE_SMALL
+                                ),
+                                'exercise.php?'.api_get_cidreq(
+                                ).'&choice=enable&sec_token='.$token.'&page='.$page.'&exerciseId='.$row['id']
+                            );
+                        } else {
+                            // else if not active
+                            $actions .= Display::url(
+                                Display::return_icon(
+                                    'visible.png',
+                                    get_lang('Deactivate'),
+                                    '',
+                                    ICON_SIZE_SMALL
+                                ),
+                                'exercise.php?'.api_get_cidreq(
+                                ).'&choice=disable&sec_token='.$token.'&page='.$page.'&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>';
                     $actions .= Display::url(Display::return_icon('cd.gif', get_lang('CopyExercise')), '', array('onclick' => "javascript:if(!confirm('".addslashes(api_htmlentities(get_lang('AreYouSureToCopy'), ENT_QUOTES, $charset))." ".addslashes($row['title'])."?"."')) return false;", 'href' => 'exercise.php?'.api_get_cidreq().'&choice=copy_exercise&sec_token='.$token.'&exerciseId='.$row['id']));
@@ -730,14 +801,19 @@ if (!empty($exercise_list)) {
                 $item .= Display::tag('td', $number_of_questions);
             } else {
                 // Student only.
-                $visibility = api_get_item_visibility($courseInfo, TOOL_QUIZ, $my_exercise_id);
+                $visibility = api_get_item_visibility(
+                    $courseInfo,
+                    TOOL_QUIZ,
+                    $my_exercise_id,
+                    $sessionId
+                );
 
                 if ($visibility == 0) {
                     continue;
                 }
 
                 $url = '<a '.$alt_title.'  href="overview.php?'.api_get_cidreq().$myorigin.$mylpid.$mylpitemid.'&exerciseId='.$row['id'].'">'.
-                        $cut_title.'</a>';
+                    $cut_title.'</a>';
 
                 // Link of the exercise.
                 $item = Display::tag('td', $url.' '.$session_img);
@@ -961,7 +1037,7 @@ if (isset($attribute['path']) && is_array($attribute['path'])) {
                     $path,
                     $userId,
                     api_get_course_int_id(),
-                    api_get_session_id()
+                    $sessionId
                 );
 
                 $nbrActiveTests = $nbrActiveTests + 1;