Browse Source

WP - Create tpl for list of exercises - refs #2681

Alex Aragón 6 years ago
parent
commit
78cd0a2c14
3 changed files with 115 additions and 50 deletions
  1. 17 6
      assets/css/scss/_base.scss
  2. 82 37
      main/exercise/exercise.php
  3. 16 7
      main/template/default/exercise/index.html.twig

+ 17 - 6
assets/css/scss/_base.scss

@@ -1316,14 +1316,25 @@ hr {
 .list-exercise{
   .list-group{
     .list-group-item{
+      .toolbar{
+        margin-top: 10px;
+        a{
+          img{
+            border: 1px solid #cdcdcd;
+            background-color: #ffffff;
+            padding: 2px;
+            border-radius: 4px;
+          }
+        }
+      }
+      .score-list{
+        padding: 0;
+        margin: 0;
+        list-style: none;
+        font-size: 12px;
+      }
       .description{
         width:100%;
-        height:20px;
-        padding:0;
-        text-overflow:ellipsis;
-        overflow:hidden;
-        transition: all 1s;
-        box-sizing: border-box;
       }
     }
   }

+ 82 - 37
main/exercise/exercise.php

@@ -663,6 +663,7 @@ if (!empty($exerciseList)) {
         $mylpid = (empty($learnpath_id) ? '' : '&learnpath_id='.$learnpath_id);
         $mylpitemid = (empty($learnpath_item_id) ? '' : '&learnpath_item_id='.$learnpath_item_id);
         $i = 1;
+
         foreach ($exerciseList as $row) {
             $my_exercise_id = $row['id'];
 
@@ -734,6 +735,12 @@ if (!empty($exerciseList)) {
             }
 
             // Teacher only
+            // Count number exercise - teacher
+            $sql = "SELECT count(*) count FROM $TBL_EXERCISE_QUESTION
+                        WHERE c_id = $courseId AND exercice_id = $my_exercise_id";
+            $sqlresult = Database::query($sql);
+            $rowi = intval(Database :: result($sqlresult, 0, 0));
+
             if ($is_allowedToEdit) {
                 $lp_blocked = null;
                 if ($exercise->exercise_was_added_in_lp == true) {
@@ -805,19 +812,13 @@ if (!empty($exerciseList)) {
 
                 $listExercise['id'] = $row['id'];
                 $listExercise['title'] = $title;
-                $listExercise['description'] = $row['description'];
+                $listExercise['description'] = cut($row['description'],150, false);
                 $listExercise['url'] = "overview.php?".api_get_cidreq().$mylpid.$mylpitemid.'&exerciseId='.$row['id'];
                 $listExercise['lp_blocked'] = $lp_blocked;
                 $listExercise['visibility'] = $visibility;
                 $listExercise['active'] = $row['active'];
 
-                $item = Display::tag('td', $url.' '.$session_img.$lp_blocked);
-
-                // Count number exercise - teacher
-                $sql = "SELECT count(*) count FROM $TBL_EXERCISE_QUESTION
-                        WHERE c_id = $courseId AND exercice_id = $my_exercise_id";
-                $sqlresult = Database::query($sql);
-                $rowi = intval(Database :: result($sqlresult, 0, 0));
+                //$item = Display::tag('td', $url.' '.$session_img.$lp_blocked);
 
                 if ($sessionId == $row['session_id']) {
                     // Questions list
@@ -1065,6 +1066,7 @@ if (!empty($exerciseList)) {
                 $actions .= $delete;
 
                 // Number of questions
+                
                 $random_label = null;
                 if ($row['random'] > 0 || $row['random'] == -1) {
                     // if random == -1 means use random questions with all questions
@@ -1093,7 +1095,7 @@ if (!empty($exerciseList)) {
                     $number_of_questions = $rowi;
                 }
                 $listExercise['number_questions'] = $number_of_questions;
-                $item .= Display::tag('td', $number_of_questions);
+                //$item .= Display::tag('td', $number_of_questions);
             } else {
                 // Student only.
                 $visibility = api_get_item_visibility(
@@ -1114,7 +1116,7 @@ if (!empty($exerciseList)) {
                 $listExercise['url'] = 'overview.php?'.api_get_cidreq().$mylpid.$mylpitemid.'&exerciseId='.$row['id'];
 
                 // Link of the exercise.
-                $item = Display::tag('td', $url.' '.$session_img);
+                //$item = Display::tag('td', $url.' '.$session_img);
 
                 // Count number exercise questions.
                 /*$sql = "SELECT count(*) FROM $TBL_EXERCISE_QUESTION
@@ -1231,10 +1233,12 @@ if (!empty($exerciseList)) {
                         if ($num > 0) {
                             $row_track = Database :: fetch_array($qryres);
                             $attempt_text = get_lang('LatestAttempt').' : ';
-                            $attempt_text .= ExerciseLib::show_score(
+                            $score = ExerciseLib::show_score(
                                 $row_track['score'],
                                 $row_track['max_score']
                             );
+                            $attempt_text .= $score['html'];
+
                         } else {
                             $attempt_text = get_lang('NotAttempted');
                         }
@@ -1259,9 +1263,10 @@ if (!empty($exerciseList)) {
                 }
 
                 $listExercise['status'] = $attempt_text;
-                $listExercise['description'] = $row['description'];
+                $listExercise['description'] = cut($row['description'], 150, false);
                 $listExercise['score'] = $score;
-                $item .= Display::tag('td', $attempt_text);
+                $listExercise['number_questions'] = $rowi;
+                //$item .= Display::tag('td', $attempt_text);
             }
 
             if ($is_allowedToEdit) {
@@ -1270,8 +1275,8 @@ if (!empty($exerciseList)) {
                 if (!empty($additionalActions)) {
                     $actions .= $additionalActions.PHP_EOL;
                 }		
-		$listExercise['actions'] = $actions;
-                $item .= Display::tag('td', $actions, ['class' => 'td_actions']);
+		        $listExercise['actions'] = $actions;
+                //$item .= Display::tag('td', $actions, ['class' => 'td_actions']);
             } else {
                 if ($isDrhOfCourse) {
 
@@ -1279,18 +1284,18 @@ if (!empty($exerciseList)) {
                         Display::return_icon('test_results.png', get_lang('Results'), '', ICON_SIZE_SMALL).'</a>';
                     $listExercise['actions'] = $actions;
 
-                    $item .= Display::tag('td', $actions, ['class' => 'td_actions']);
+                    // .= Display::tag('td', $actions, ['class' => 'td_actions']);
 
                 }
             }
 
-            $tableRows[] = Display::tag(
+            /*$tableRows[] = Display::tag(
                 'tr',
                 $item,
                 [
                     'id' => 'exercise_list_'.$my_exercise_id,
                 ]
-            );
+            );*/
 
             $list[] = $listExercise;
         }
@@ -1332,11 +1337,16 @@ while ($row = Database :: fetch_array($result, 'ASSOC')) {
 }
 
 $nbrActiveTests = 0;
+$itemHotpotatoes = [];
+$listHotpotatoes = [];
+
 if (isset($attribute['path']) && is_array($attribute['path'])) {
     $hotpotatoes_exist = true;
     foreach ($attribute['path'] as $key => $path) {
-        $item = '';
+
+        //$item = '';
         $title = GetQuizName($path, $documentPath);
+
         if ($title == '') {
             $title = basename($path);
         }
@@ -1363,7 +1373,11 @@ if (isset($attribute['path']) && is_array($attribute['path'])) {
                 );
             }
 
-            $item = Display::tag(
+            $url = 'showinframes.php?'.api_get_cidreq().'&'.http_build_query(['file' => $path, 'uid' => $userId]);
+            $itemHotpotatoes['url'] = $url;
+            $itemHotpotatoes['visibility'] = $visibility;
+
+            /*$item = Display::tag(
                 'td',
                 implode(PHP_EOL, [
                     Display::return_icon('hotpotatoes_s.png', "HotPotatoes"),
@@ -1376,9 +1390,11 @@ if (isset($attribute['path']) && is_array($attribute['path'])) {
                         ['class' => $visibility == 0 ? 'text-muted' : null]
                     ),
                 ])
-            );
+            );*/
+
+            $itemHotpotatoes['title'] = $title;
 
-            $item .= Display::tag('td', '-');
+            //$item .= Display::tag('td', '-');
 
             $actions = Display::url(
                 Display::return_icon(
@@ -1404,8 +1420,13 @@ if (isset($attribute['path']) && is_array($attribute['path'])) {
             }
             $actions .= '<a href="'.$exercisePath.'?'.api_get_cidreq().'&hpchoice=delete&file='.$path.'" onclick="javascript:if(!confirm(\''.addslashes(api_htmlentities(get_lang('AreYouSureToDeleteJS'), ENT_QUOTES, $charset).' '.$title."?").'\')) return false;">'.
                 Display::return_icon('delete.png', get_lang('Delete'), '', ICON_SIZE_SMALL).'</a>';
-            $item .= Display::tag('td', $actions);
-            $tableRows[] = Display::tag('tr', $item);
+
+            $itemHotpotatoes['actions'] = $actions;
+
+            $listHotpotatoes[] = $itemHotpotatoes;
+            //$item .= Display::tag('td', $actions);
+            //$tableRows[] = Display::tag('tr', $item);
+
         } else {
             $visibility = api_get_item_visibility(
                 ['real_id' => $courseId],
@@ -1413,6 +1434,7 @@ if (isset($attribute['path']) && is_array($attribute['path'])) {
                 $attribute['id'][$key],
                 $sessionId
             );
+            $itemHotpotatoes['visibility'] = $visibility;
 
             if (0 == $visibility) {
                 continue;
@@ -1426,8 +1448,14 @@ if (isset($attribute['path']) && is_array($attribute['path'])) {
                 api_get_session_id()
             );
 
+
+            $url = 'showinframes.php?'.api_get_cidreq().'&'.http_build_query(['file' => $path, 'cid' => api_get_course_id(), 'uid' => $userId]);
+            $itemHotpotatoes['url'] = $url;
+            $itemHotpotatoes['title'] = $title;
+            $itemHotpotatoes['attempt'] = $attempt;
+
             $nbrActiveTests = $nbrActiveTests + 1;
-            $item .= Display::tag(
+            /*$item .= Display::tag(
                 'td',
                 Display::url(
                     $title,
@@ -1437,34 +1465,50 @@ if (isset($attribute['path']) && is_array($attribute['path'])) {
                         'uid' => $userId,
                     ])
                 )
-            );
+            );*/
 
             if (!empty($attempt)) {
-                $actions = '<a href="hotpotatoes_exercise_report.php?'.api_get_cidreq().'&path='.$path.'&filter_by_user='.$userId.'">'.Display::return_icon('test_results.png', get_lang('Results'), '', ICON_SIZE_SMALL).'</a>';
-                $attemptText = get_lang('LatestAttempt').' : ';
-                $attemptText .= ExerciseLib::show_score(
+                $urlResults = 'hotpotatoes_exercise_report.php?'.api_get_cidreq().'&path='.$path.'&filter_by_user='.$userId;
+                $itemHotpotatoes['results'] = $url;
+
+                /*$actions = '<a href="hotpotatoes_exercise_report.php?'.api_get_cidreq().'&path='.$path.'&filter_by_user='.$userId.'">'
+                    .Display::return_icon('test_results.png', get_lang('Results'), '', ICON_SIZE_SMALL).
+                    '</a>';*/
+
+                $attemptText = get_lang('LatestAttempt');
+
+                $score = ExerciseLib::show_score(
                     $attempt['score'],
                     $attempt['max_score']
-                ).' ';
-                $attemptText .= $actions;
+                );
+
+                $itemHotpotatoes['score'] = $score;
+
+
             } else {
                 // No attempts.
                 $attemptText = get_lang('NotAttempted').' ';
             }
 
-            $item .= Display::tag('td', $attemptText);
+            $itemHotpotatoes['status'] = $attemptText;
+
+            //$item .= Display::tag('td', $attemptText);
 
             if ($isDrhOfCourse) {
-                $actions = '<a href="hotpotatoes_exercise_report.php?'.api_get_cidreq().'&path='.$path.'">'.
+                $urlResults = 'hotpotatoes_exercise_report.php?'.api_get_cidreq().'&path='.$path;
+                $itemHotpotatoes['results'] = $urlResults;
+                /*$actions = '<a href="hotpotatoes_exercise_report.php?'.api_get_cidreq().'&path='.$path.'">'.
                     Display::return_icon('test_results.png', get_lang('Results'), '', ICON_SIZE_SMALL).'</a>';
 
                 $item .= Display::tag(
                     'td',
                     $actions,
                     ['class' => 'td_actions']
-                );
+                );*/
             }
-            $tableRows[] = Display::tag('tr', $item);
+
+            $listHotpotatoes[] = $itemHotpotatoes;
+            //$tableRows[] = Display::tag('tr', $item);
 
         }
     }
@@ -1485,7 +1529,7 @@ if (empty($exerciseList) && $hotpotatoes_exist == false) {
         echo '</div>';
     }
 } else {
-    if ($is_allowedToEdit) {
+    /*if ($is_allowedToEdit) {
         $headers = [
             get_lang('ExerciseName'),
             get_lang('QuantityQuestions'),
@@ -1521,10 +1565,11 @@ if (empty($exerciseList) && $hotpotatoes_exist == false) {
 
     echo '</tbody>';
     echo '</table>';
-    echo '</div>';
+    echo '</div>'*/;
 
     $tpl = new Template(null);
     $tpl->assign('data', $list);
+    $tpl->assign('hotpotatoes', $listHotpotatoes);
     $tpl->assign('is_teacher', $is_allowedToEdit);
     $layout = $tpl->get_template('exercise/index.html.twig');
     $content = $tpl->fetch($layout);

+ 16 - 7
main/template/default/exercise/index.html.twig

@@ -18,25 +18,34 @@
                                 </div>
                             {% endif %}
                         </div>
-                        <div class="col-md-5">
+                        <div class="col-md-4">
+
                             <strong>{{ 'Quantity Questions'|trans }}:</strong> {{ item.number_questions }}
-                            <p>{{ 'Percentage of completion'|trans }}</p>
+
                             {% if item.score %}
                                 <div class="progress">
                                     <div class="progress-bar" role="progressbar" style="width: {{ item.score.percentage }}%" aria-valuenow="{{ item.score.percentage }}" aria-valuemin="0" aria-valuemax="100">
                                         {{ item.score.percentage }}%
                                     </div>
                                 </div>
+                            {% else %}
+                                <div class="progress">
+                                    <div class="progress-bar" role="progressbar" style="width: 0%" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">
+                                        0%
+                                    </div>
+                                </div>
                             {% endif %}
                         </div>
-                        <div class="col-md-2">
+                        <div class="col-md-3">
                             {% if is_teacher %}
-                                {{ item.actions }}
+                                <div class="toolbar">
+                                    {{ item.actions }}
+                                </div>
                             {% else %}
-                                <p>{{ 'Latest Attempt'|trans }}</p>
+                                {{ 'Latest Attempt'|trans }}
                                 <ul class="score-list">
-                                    <li>{{ 'Score obtained'|trans }} : {{ item.score.score_obtained }}</li>
-                                    <li>{{ 'Total score'|trans }} : {{ item.score.total_score }}</li>
+                                    <li><strong>{{ 'Score obtained'|trans }} :</strong> {{ item.score.score_obtained }}</li>
+                                    <li><strong>{{ 'Total score'|trans }} :</strong> {{ item.score.total_score }}</li>
                                 </ul>
                             {% endif %}
                         </div>