Explorar o código

Improving jury grid adding 2 cols my status / global status. see BT#6312

Julio Montoya %!s(int64=11) %!d(string=hai) anos
pai
achega
7f584c4f70

+ 2 - 2
main/inc/Entity/Repository/JuryMembersRepository.php

@@ -14,7 +14,7 @@ class JuryMembersRepository extends EntityRepository
 {
     /**
      * @param int $userId
-     * @param int $juryMemberId
+     * @param int $juryMemberId "id" field of the jury_members table
      * @return string
      */
     public function assignUserToJuryMember($userId, $juryMemberId)
@@ -40,7 +40,7 @@ class JuryMembersRepository extends EntityRepository
 
     /**
      * @param int $userId
-     * @param int $juryMemberId
+     * @param int $juryMemberId "id" field of the jury_members table
      * @return string
      */
     public function removeUserToJuryMember($userId, $juryMemberId)

+ 7 - 7
main/inc/Entity/TrackExerciseAttemptJury.php

@@ -45,9 +45,9 @@ class TrackExerciseAttemptJury
     /**
      * @var integer
      *
-     * @ORM\Column(name="jury_member_id", type="integer", precision=0, scale=0, nullable=true, unique=false)
+     * @ORM\Column(name="jury_user_id", type="integer", precision=0, scale=0, nullable=true, unique=false)
      */
-    private $juryMemberId;
+    private $juryUserId;
 
     /**
      * @var integer
@@ -160,12 +160,12 @@ class TrackExerciseAttemptJury
     /**
      * Set juryMemberId
      *
-     * @param integer $juryMemberId
+     * @param integer $juryUserId
      * @return TrackExerciseAttemptJury
      */
-    public function setJuryMemberId($juryMemberId)
+    public function setJuryUserId($juryUserId)
     {
-        $this->juryMemberId = $juryMemberId;
+        $this->juryUserId = $juryUserId;
 
         return $this;
     }
@@ -175,9 +175,9 @@ class TrackExerciseAttemptJury
      *
      * @return integer
      */
-    public function getJuryMemberId()
+    public function getJuryUserId()
     {
-        return $this->juryMemberId;
+        return $this->juryUserId;
     }
 
     /**

+ 1 - 1
main/install/1.10.0/update.sql

@@ -33,7 +33,7 @@ CREATE TABLE track_attempt_jury(
     exe_id INT,
     question_id INT,
     score float(6,2),
-    jury_member_id INT,
+    jury_user_id INT,
     question_score_name_id INT,
     PRIMARY KEY (id)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;

+ 7 - 16
main/template/minedu/admin/jury_member/assign_members.tpl

@@ -1,11 +1,5 @@
 {% extends app.template_style ~ "/layout/layout_1_col.tpl" %}
 {% block content %}
-    {%  if member.role.role == 'ROLE_JURY_PRESIDENT' %}
-    <a class="btn" href="">Asignar al azar</a>
-    <hr>
-    {% endif %}
-    <form>
-
     <table class="table table-bordered">
         <tbody>
         <tr>
@@ -27,7 +21,7 @@
                     {% endif %}
                 </td>
             {% endfor %}
-            <td>Estado</td>
+            <td>Mi estado</td>
         </tr>
         {% for attempt in attempts %}
             <tr>
@@ -42,8 +36,7 @@
                         {% set memberHover = '' %}
                     {% endif %}
 
-
-                    {% if relations[attempt.user.getUserId][member.user.userId] == 3 %}
+                    {% if relations[attempt.user.getUserId][member.user.userId] %}
                         {% set checkedSuccess = 'class="success"' %}
                     {% else %}
                         {% set checkedSuccess = '' %}
@@ -58,15 +51,17 @@
 
                     <td class="{{ memberHover }}">
                         <div {{ checkedSuccess }}>
-                        <input disabled {{ checked }} id="check_{{ attempt.user.getUserId }}_{{ member.user.userId }}" type="checkbox">
+                        <input disabled {{ checked }} type="checkbox">
                         </div>
                     </td>
                 {% endfor %}
                 <td>
-                    {% if my_status_for_student[attempt.user.getUserId] %}
+                    {% if my_student_status[attempt.user.getUserId] %}
                         <a href="#" class="btn btn-success disabled">Evaluado</a>
                     {% else %}
-                        <a href="{{ url('jury_member.controller:scoreAttemptAction', { 'exeId': attempt.getExeId, 'juryId' : jury.id }) }}" class="btn btn-warning">Evaluar</a>
+                        <a href="{{ url('jury_member.controller:scoreAttemptAction', { 'exeId': attempt.getExeId, 'juryId' : jury.id }) }}" class="btn btn-warning">
+                            Evaluar
+                        </a>
                     {% endif %}
                 </td>
             </tr>
@@ -74,8 +69,4 @@
         </tbody>
     </table>
     </form>
-    <hr>
-    {%  if member.role.role == 'ROLE_JURY_PRESIDENT' %}
-        <a class="btn" href="">Cierre de proceso</a>
-    {% endif %}
 {% endblock %}

+ 1 - 2
main/template/minedu/admin/jury_member/score_user.tpl

@@ -2,8 +2,7 @@
 {% block content %}
 
     <h3>{{ 'Calificar usuario' |trans }}</h3>
-    <form action="{{ url('jury_member.controller:saveScoreAction') }}" method="post">
-        <input name="exe_id" type="hidden" value="{{ exe_id }}"/>
+    <form action="{{ url('jury_member.controller:saveScoreAction', {'juryId': jury_id, 'exeId' : exe_id }) }}" method="post">
         {{ exercise }}
         <button class="btn" type="submit">{{ 'Save' | trans}}</button>
     </form>

+ 13 - 3
main/template/minedu/admin/jury_president/assign_members.tpl

@@ -43,7 +43,8 @@
                 {% endif %}
                 </td>
             {% endfor %}
-            <td>Estado</td>
+            <td>Mi estado</td>
+            <td>Estado global (Min {{ considered_evaluated }} evaluados)</td>
         </tr>
         {% for attempt in attempts %}
             <tr>
@@ -79,10 +80,19 @@
                     </td>
                 {% endfor %}
                 <td>
-                    {% if my_status_for_student[attempt.user.getUserId] %}
+                    {% if my_student_status[attempt.user.getUserId] %}
                         <a href="#" class="btn btn-success disabled">Evaluado</a>
                     {% else %}
-                        <a href="{{ url('jury_member.controller:scoreAttemptAction', { 'exeId': attempt.getExeId, 'juryId': jury.id }) }}" class="btn btn-warning">Evaluar</a>
+                        <a href="{{ url('jury_member.controller:scoreAttemptAction', { 'exeId': attempt.getExeId, 'juryId' : jury.id }) }}" class="btn btn-warning">
+                            Evaluar
+                        </a>
+                    {% endif %}
+                </td>
+                <td>
+                    {% if global_student_status[attempt.user.getUserId] %}
+                        <a href="#" class="btn btn-success disabled">Completo</a>
+                    {% else %}
+                        <a href="#" class="btn btn-danger disabled">Incompleto</a>
                     {% endif %}
                 </td>
             </tr>

+ 51 - 23
src/ChamiloLMS/Controller/Admin/JuryMember/JuryMemberController.php

@@ -20,6 +20,8 @@ use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
  */
 class JuryMemberController extends CommonController
 {
+    public $maxCountOfMemberToVoteToConsiderEvaluated = 3;
+
     /**
     * @Route("/")
     * @Method({"GET"})
@@ -53,7 +55,8 @@ class JuryMemberController extends CommonController
         // @todo move logic in a repository
         /** @var Entity\TrackExercise $attempt */
         $relations = array();
-        $myStatusForStudent = array();
+        $globalStudentStatus = array();
+        $myStudentStatus = array();
         foreach ($attempts as $attempt) {
 
             $user = $attempt->getUser();
@@ -62,22 +65,29 @@ class JuryMemberController extends CommonController
             /** @var Entity\TrackExerciseAttemptJury $juryAttempt */
             $tempAttempt = array();
             foreach ($juryAttempts as $juryAttempt) {
-                if (!isset($tempAttempt[$juryAttempt->getJuryMemberId()])) {
-                    $tempAttempt[$juryAttempt->getJuryMemberId()] = 1;
+                if (!isset($tempAttempt[$juryAttempt->getJuryUserId()])) {
+                    $tempAttempt[$juryAttempt->getJuryUserId()] = 1;
                 } else {
-                    $tempAttempt[$juryAttempt->getJuryMemberId()]++;
+                    $tempAttempt[$juryAttempt->getJuryUserId()]++;
                 }
             }
 
+            $juryCorrections = 1;
             foreach ($tempAttempt as $memberId => $answerCount) {
                 $relations[$user->getUserId()][$memberId] = $answerCount;
+
+                // the jury_member correct the attempt
+                $myStudentStatus[$user->getUserId()] = false;
                 if ($userId == $memberId) {
-                    if ($answerCount == 3) {
-                        $myStatusForStudent[$user->getUserId()] = true;
-                    } else {
-                        $myStatusForStudent[$user->getUserId()] = false;
-                    }
+                    $myStudentStatus[$user->getUserId()] = true;
                 }
+
+                if ($juryCorrections == $this->maxCountOfMemberToVoteToConsiderEvaluated) {
+                    $globalStudentStatus[$user->getUserId()] = true;
+                } else {
+                    $globalStudentStatus[$user->getUserId()] = false;
+                }
+                $juryCorrections++;
             }
         }
 
@@ -92,12 +102,13 @@ class JuryMemberController extends CommonController
         }
         $template = $this->get('template');
 
-        $template->assign('my_status_for_student', $myStatusForStudent);
+        $template->assign('global_student_status', $globalStudentStatus);
+        $template->assign('my_student_status', $myStudentStatus);
         $template->assign('relations', $relations);
         $template->assign('attempts', $attempts);
         $template->assign('members', $members);
         $template->assign('students_by_member', $studentsByMember);
-
+        $template->assign('considered_evaluated', $this->maxCountOfMemberToVoteToConsiderEvaluated);
         $template->assign('jury', $jury);
         $response = $template->render_template($this->getTemplatePath().'assign_members.tpl');
 
@@ -105,10 +116,10 @@ class JuryMemberController extends CommonController
     }
 
     /**
-    * @Route("/score-user/{exeId}")
+    * @Route("/score-attempt/{exeId}/jury/{juryId}")
     * @Method({"GET"})
     */
-    public function scoreUserAction($exeId)
+    public function scoreAttemptAction($exeId, $juryId)
     {
         $trackExercise = \ExerciseLib::get_exercise_track_exercise_info($exeId);
 
@@ -116,16 +127,34 @@ class JuryMemberController extends CommonController
             $this->createNotFoundException();
         }
 
+        $security = $this->get('security');
         $userId = $this->getUser()->getUserId();
 
+        // Getting member
+        $criteria = array('juryId' => $juryId, 'userId' => $userId);
+        $member = $this->getManager()->getRepository('Entity\JuryMembers')->findOneBy($criteria);
+
+        if ($security->isGranted('ROLE_JURY_PRESIDENT')) {
+            // Relating user with president
+            if ($member) {
+                $this->getManager()->getRepository('Entity\JuryMembers')->assignUserToJuryMember(
+                    $trackExercise['exe_user_id'],
+                    $member->getId()
+                );
+            }
+        }
+
+        $questionScoreTypeModel = array();
+
         $criteria = array(
             'exeId' => $exeId,
-            'juryMemberId' => $userId
+            'juryUserId' => $userId
         );
-
         $trackJury = $this->getManager()->getRepository('Entity\TrackExerciseAttemptJury')->findAll($criteria);
-        $questionScoreTypeModel = array();
         if ($trackJury) {
+
+            $this->get('session')->getFlashBag()->add('info', "You already correct this exercise.");
+
             /** @var Entity\TrackExerciseAttemptJury $track */
             foreach ($trackJury as $track) {
                 $questionScoreTypeModel[$track->getQuestionId()] = $track->getQuestionScoreNameId();
@@ -155,7 +184,6 @@ class JuryMemberController extends CommonController
             if ($questionScore) {
                 $items = $questionScore->getItems();
                 /** @var \Entity\QuestionScoreName  $score */
-
                 foreach ($items as $score) {
                     $options[$score->getId().':'.$score->getScore()] = $score->getName();
                 }
@@ -238,18 +266,18 @@ class JuryMemberController extends CommonController
         $template = $this->get('template');
         $template->assign('exercise', $exerciseContent);
         $template->assign('exe_id', $exeId);
+        $template->assign('jury_id', $juryId);
         $response = $this->get('template')->render_template($this->getTemplatePath().'score_user.tpl');
         return new Response($response, 200, array());
     }
 
     /**
-    * @Route("/save-score")
+    * @Route("/save-score/{exeId}/jury/{juryId}")
     * @Method({"POST"})
     */
-    public function saveScoreAction()
+    public function saveScoreAction($exeId, $juryId)
     {
         $questionsAndScore = $this->getRequest()->get('options');
-        $exeId = $this->getRequest()->get('exe_id');
         $attempt = $this->getManager()->getRepository('Entity\TrackExercise')->find($exeId);
 
         if ($attempt) {
@@ -265,7 +293,7 @@ class JuryMemberController extends CommonController
                     $criteria = array(
                         'exeId' => $exeId,
                         'questionId' => $questionId,
-                        'juryMemberId' => $userId
+                        'juryUserId' => $userId
                     );
 
                     $obj = $this->getManager()->getRepository('Entity\TrackExerciseAttemptJury')->findOneBy($criteria);
@@ -274,7 +302,7 @@ class JuryMemberController extends CommonController
                         $obj->setScore($score);
                     } else {
                         $obj = new Entity\TrackExerciseAttemptJury();
-                        $obj->setJuryMemberId($userId);
+                        $obj->setJuryUserId($userId);
                         $obj->setAttempt($attempt);
                         $obj->setQuestionScoreNameId($questionScoreNameId);
                         $obj->setScore($score);
@@ -285,7 +313,7 @@ class JuryMemberController extends CommonController
                 }
             }
             $this->get('session')->getFlashBag()->add('success', "Saved");
-            $url = $this->generateUrl('jury_member.controller:scoreUserAction', array('exeId' => $exeId));
+            $url = $this->generateUrl('jury_member.controller:scoreAttemptAction', array('exeId' => $exeId, 'juryId' => $juryId));
             return $this->redirect($url);
         } else {
             return $this->createNotFoundException('Attempt not found');

+ 22 - 17
src/ChamiloLMS/Controller/Admin/JuryPresident/JuryPresidentController.php

@@ -23,6 +23,7 @@ use Whoops\Example\Exception;
  */
 class JuryPresidentController extends CommonController
 {
+    public $maxCountOfMemberToVoteToConsiderEvaluated = 3;
     /**
     * @Route("/")
     * @Method({"GET"})
@@ -142,36 +143,40 @@ class JuryPresidentController extends CommonController
 
         // @todo move logic in a repository
         /** @var Entity\TrackExercise $attempt */
-        $students = array();
         $relations = array();
-        $myStatusForStudent = array();
-        $maxCountOfMemberToVoteToConsiderEvaluated = 3;
-
+        $globalStudentStatus = array();
+        $myStudentStatus = array();
         foreach ($attempts as $attempt) {
 
             $user = $attempt->getUser();
-            $students[] = $user;
             $juryAttempts = $attempt->getJuryAttempts();
 
             /** @var Entity\TrackExerciseAttemptJury $juryAttempt */
             $tempAttempt = array();
             foreach ($juryAttempts as $juryAttempt) {
-                if (!isset($tempAttempt[$juryAttempt->getJuryMemberId()])) {
-                    $tempAttempt[$juryAttempt->getJuryMemberId()] = 1;
+                if (!isset($tempAttempt[$juryAttempt->getJuryUserId()])) {
+                    $tempAttempt[$juryAttempt->getJuryUserId()] = 1;
                 } else {
-                    $tempAttempt[$juryAttempt->getJuryMemberId()]++;
+                    $tempAttempt[$juryAttempt->getJuryUserId()]++;
                 }
             }
 
+            $juryCorrections = 1;
             foreach ($tempAttempt as $memberId => $answerCount) {
                 $relations[$user->getUserId()][$memberId] = $answerCount;
+
+                // the jury_member correct the attempt
+                $myStudentStatus[$user->getUserId()] = false;
                 if ($userId == $memberId) {
-                    if ($answerCount == $maxCountOfMemberToVoteToConsiderEvaluated) {
-                        $myStatusForStudent[$user->getUserId()] = true;
-                    } else {
-                        $myStatusForStudent[$user->getUserId()] = false;
-                    }
+                    $myStudentStatus[$user->getUserId()] = true;
+                }
+
+                if ($juryCorrections == $this->maxCountOfMemberToVoteToConsiderEvaluated) {
+                    $globalStudentStatus[$user->getUserId()] = true;
+                } else {
+                    $globalStudentStatus[$user->getUserId()] = false;
                 }
+                $juryCorrections++;
             }
         }
 
@@ -184,16 +189,16 @@ class JuryPresidentController extends CommonController
                 $studentsByMember[$member->getId()][] = $student->getUserId();
             }
         }
-
         $template = $this->get('template');
 
-        $template->assign('my_status_for_student', $myStatusForStudent);
+        $template->assign('global_student_status', $globalStudentStatus);
+        $template->assign('my_student_status', $myStudentStatus);
         $template->assign('relations', $relations);
         $template->assign('attempts', $attempts);
         $template->assign('members', $members);
-        $template->assign('jury', $jury);
         $template->assign('students_by_member', $studentsByMember);
-
+        $template->assign('considered_evaluated', $this->maxCountOfMemberToVoteToConsiderEvaluated);
+        $template->assign('jury', $jury);
         $response = $template->render_template($this->getTemplatePath().'assign_members.tpl');
 
         return new Response($response, 200, array());