Explorar o código

Adding the possibility to relate jury_members with students in order to filled the grid, jury_members can vote for the exercise question results.

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

+ 42 - 56
main/template/minedu/admin/administrator/role_index.tpl

@@ -1,64 +1,50 @@
-<script>
-$(function() {
-    //$("#settings").tabs();
-    $.ajax({
-        url:'{{ web_admin_ajax_url }}?a=version',
-        success:function(version){
-            $(".admin-block-version").html(version);
-        }
-    });
-});
-</script>
-
-<div id="settings">
-    <div class="row">
-    {% for block_item in blocks %}
-        <div id="tabs-{{ loop.index }}" class="span6">
-            <div class="well_border {{ block_item.class }}">
-                <h4>{{ block_item.icon }} {{ block_item.label }}</h4>
-                <div style="list-style-type:none">
-                    {{ block_item.search_form }}
-                </div>
-                {% if block_item.items is not null %}
-                    <ul>
-                    {% for url in block_item.items %}
-                        <li>
-                            <a href="{{ url.url }}">
-                                {{ url.label }}
-                            </a>
-                        </li>
-                    {% endfor %}
-                    </ul>
-                {% endif %}
-
-                {% if block_item.extra is not null %}
-                    <div>
-                        {{ block_item.extra }}
-                    </div>
-                {% endif %}
+{% for block_item in blocks %}
+    <div id="tabs-{{ loop.index }}" class="span6">
+        <div class="well_border {{ block_item.class }}">
+            <h4>{{ block_item.icon }} {{ block_item.label }}</h4>
+            <div style="list-style-type:none">
+                {{ block_item.search_form }}
             </div>
-        </div>
-    {% endfor %}
-    </div>
-
-    <div class="row">
-        <div class="span6">
-            <div class="well_border">
+            {% if block_item.items is not null %}
                 <ul>
+                {% for url in block_item.items %}
                     <li>
-                        <a href="{{ url('question_score.controller:indexAction') }}">{{ 'Question score name' |trans }}</a>
-                    </li>
-                    <li>
-                        <a href="{{ url('question_score_name.controller:indexAction') }}">{{ 'Question names' |trans }}</a>
-                    </li>
-                    <li>
-                        <a href="{{ url('role.controller:indexAction') }}">{{ 'Roles' |trans }}</a>
-                    </li>
-                    <li>
-                        <a href="{{ url('branch.controller:indexAction') }}">{{ 'Branches' |trans }}</a>
+                        <a href="{{ url.url }}">
+                            {{ url.label }}
+                        </a>
                     </li>
+                {% endfor %}
                 </ul>
-            </div>
+            {% endif %}
+
+            {% if block_item.extra is not null %}
+                <div>
+                    {{ block_item.extra }}
+                </div>
+            {% endif %}
         </div>
     </div>
+{% endfor %}
+
+<div class="span6">
+    <div class="well_border">
+        <ul>
+            <li>
+                <a href="{{ url('question_score.controller:indexAction') }}">{{ 'Question score name' |trans }}</a>
+            </li>
+            <li>
+                <a href="{{ url('question_score_name.controller:indexAction') }}">{{ 'Question names' |trans }}</a>
+            </li>
+            <li>
+                <a href="{{ url('role.controller:indexAction') }}">{{ 'Roles' |trans }}</a>
+            </li>
+            <li>
+                <a href="{{ url('branch.controller:indexAction') }}">{{ 'Branches' |trans }}</a>
+            </li>
+            <li>
+                <a href="{{ url('jury.controller:indexAction') }}">{{ 'Jury management as admin' |trans }}</a>
+            </li>
+        </ul>
+    </div>
 </div>
+

+ 6 - 2
main/template/minedu/admin/director/role_index.tpl

@@ -1,3 +1,7 @@
-<div class="well">
-    Director
+<div class="span6">
+    <div class="well_border">
+        <h4>{{ 'Director'  | get_lang }}</h4>
+        <ul>
+        </ul>
+    </div>
 </div>

+ 29 - 5
main/template/minedu/admin/index.tpl

@@ -1,9 +1,33 @@
 {% extends app.template_style ~ "/layout/layout_1_col.tpl" %}
 {% block content %}
+    <div id="settings">
+        <div class="row">
+            {% for role in app.admin_toolbar_roles %}
+                {% include app.template_style ~ "/admin/" ~ role ~ "/role_index.tpl" %}
+            {% endfor %}
+        </div>
+    </div>
 
-    {% for role in app.admin_toolbar_roles %}
-        {% include app.template_style ~ "/admin/" ~ role ~ "/role_index.tpl" %}
-    {% endfor %}
-{% endblock %}
-
+    {% if is_granted('ROLE_ADMIN')%}
+        <script>
+        $(function() {
+            //$("#settings").tabs();
+            $.ajax({
+                url:'{{ web_admin_ajax_url }}?a=version',
+                success:function(version){
+                    $(".admin-block-version").html(version);
+                }
+            });
+        });
+        </script>
+        <div class="row">
+            <div class="span12">
+                <div class="well_border">
+                <h3>{{ 'VersionCheck' | trans }} </h3>
+                <div class="admin-block-version"></div>
+                </div>
+            </div>
+        </div>
+    {% endif %}
 
+{% endblock %}

+ 11 - 5
main/template/minedu/admin/jury_member/assign_members.tpl

@@ -42,17 +42,23 @@
                         {% set memberHover = '' %}
                     {% endif %}
 
+
                     {% if relations[attempt.user.getUserId][member.user.userId] == 3 %}
+                        {% set checkedSuccess = 'class="success"' %}
+                    {% else %}
+                        {% set checkedSuccess = '' %}
+                    {% endif %}
+
+                    {% set studentList = students_by_member[member.id]  %}
+                    {% if attempt.user.getUserId in studentList %}
                         {% set checked = 'checked="checked"' %}
-                        <td class="{{ memberHover }}">
-                            <div class="success">
                     {% else %}
                         {% set checked = '' %}
-                        <td class="{{ memberHover }}">
-                            <div>
                     {% endif %}
 
-                        <input {{ checked }} id="check_{{ attempt.user.getUserId }}_{{ member.user.userId }}" type="checkbox">
+                    <td class="{{ memberHover }}">
+                        <div {{ checkedSuccess }}>
+                        <input disabled {{ checked }} id="check_{{ attempt.user.getUserId }}_{{ member.user.userId }}" type="checkbox">
                         </div>
                     </td>
                 {% endfor %}

+ 9 - 2
main/template/minedu/admin/jury_member/role_index.tpl

@@ -1,3 +1,10 @@
-<div class="well">
-    Jury Member
+<div class="span6">
+    <div class="well_border">
+        <h4>{{ 'Jury member'  | get_lang }}</h4>
+        <ul>
+            <li>
+                <a href="{{ url('jury_member.controller:indexAction') }}">{{ 'Check users' |trans }}</a>
+            </li>
+        </ul>
+    </div>
 </div>

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

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

+ 39 - 18
main/template/minedu/admin/jury_president/assign_members.tpl

@@ -1,9 +1,27 @@
 {% extends app.template_style ~ "/layout/layout_1_col.tpl" %}
 {% block content %}
+    <script>
+        $(document).ready(function() {
+            $('.inputAction').on('click', function() {
+                $isChecked = $(this).is(":checked");
+                var idParts = $(this).attr('id').split('_');
+
+                var userId =  idParts[1];
+                var juryMemberId = idParts[2];
+
+                if ($isChecked) {
+                    url = '{{ _p.public_web }}admin/jury_president/assign-user/'+ userId +'/'+juryMemberId;
+                } else {
+                    url = '{{ _p.public_web }}admin/jury_president/remove-user/'+ userId +'/'+juryMemberId;
+                }
+                $.ajax(url);
+            });
+        });
+
+    </script>
     <a class="btn" href="">Asignar al azar</a>
     <hr>
     <form>
-
     <table class="table table-bordered">
         <tbody>
         <tr>
@@ -15,14 +33,14 @@
                     <td>
                 {% endif %}
 
-                    {# member.user.userId #}
-                    {%  if member.role.role == 'ROLE_JURY_PRESIDENT' %}
-                        P{{ loop.index }}
-                    {% elseif member.role.role == 'ROLE_JURY_MEMBER' %}
-                        M{{ loop.index -1}}
-                    {% else %}
-                        S{{ loop.index -1}}
-                    {% endif %}
+                {# member.user.userId #}
+                {%  if member.role.role == 'ROLE_JURY_PRESIDENT' %}
+                    P{{ loop.index }}
+                {% elseif member.role.role == 'ROLE_JURY_MEMBER' %}
+                    M{{ loop.index -1}}
+                {% else %}
+                    S{{ loop.index -1}}
+                {% endif %}
                 </td>
             {% endfor %}
             <td>Estado</td>
@@ -30,7 +48,7 @@
         {% for attempt in attempts %}
             <tr>
                 <td>
-                    Estudiante #{{ attempt.user.getUserId }}
+                    Estudiante #{{ attempt.user.getUserId }} ({{ attempt.exeId }})
                 </td>
                 {% for member in members %}
 
@@ -41,16 +59,19 @@
                     {% endif %}
 
                     {% if relations[attempt.user.getUserId][member.user.userId] == 3 %}
-                        {% set checked = 'checked="checked"' %}
-                        <td class="{{ memberHover }}">
-                            <div class="success">
+                        {% set checkedSuccess = 'class="success"' %}
                     {% else %}
-                        {% set checked = '' %}
-                        <td class="{{ memberHover }}">
-                            <div>
+                        {% set checkedSuccess = '' %}
                     {% endif %}
-
-                        <input {{ checked }} id="check_{{ attempt.user.getUserId }}_{{ member.user.userId }}" type="checkbox">
+                    <td class="{{ memberHover }}">
+                        {% set studentList = students_by_member[member.id]  %}
+                        {% if attempt.user.getUserId in studentList %}
+                            {% set checked = 'checked="checked"' %}
+                        {% else %}
+                            {% set checked = '' %}
+                        {% endif %}
+                        <div {{ checkedSuccess }}>
+                            <input class="inputAction" {{ checked }} id="check_{{ attempt.user.getUserId }}_{{ member.id }}" type="checkbox">
                         </div>
                     </td>
                 {% endfor %}

+ 1 - 1
main/template/minedu/admin/jury_president/index.tpl

@@ -13,7 +13,7 @@
 
     <h3>{{ 'Asignación de responsabilidades' |trans }}</h3>
 
-    <a class="btn" href="">
+    <a class="btn" href="{{ url('jury_president.controller:assignMembersAction') }}">
         Asignar usuarios.
     </a>
 

+ 9 - 8
main/template/minedu/admin/jury_president/role_index.tpl

@@ -1,9 +1,10 @@
-<div class="well">
-    Jury president
-    <ul>
-        <li>
-            <a href="{{ url('jury.controller:indexAction') }}">{{ 'Jury' |trans }}</a>
-        </li>
-    </ul>
-
+<div class="span6">
+    <div class="well_border">
+        <h4>{{ 'Jury president'  | get_lang }}</h4>
+        <ul>
+            <li>
+                <a href="{{ url('jury_president.controller:indexAction') }}">{{ 'Jury management' |trans }}</a>
+            </li>
+        </ul>
+    </div>
 </div>

+ 0 - 3
main/template/minedu/admin/jury_substitute/role_index.tpl

@@ -1,4 +1 @@
-<div class="well">
-    Jury substitute
 
-</div>

+ 11 - 19
main/template/minedu/admin/questionmanager/role_index.tpl

@@ -1,21 +1,13 @@
-<div class="row">
-    <div class="span12">
-        <h3>{{ 'Question manager role' | trans }} </h3>
-    </div>
-</div>
-
-<div class="row">
-    <div class="span6">
-        <div class="well_border">
-            <h4>{{ 'Questions'  | get_lang }}</h4>
-            <ul>
-                <li>
-                    <a href="{{ url('admin_questions') }}">
-                    {{ 'Questions' | get_lang }}</a>
-                </li>
-                <li><a href="{{ url('admin_category_new')}}">{{ 'AddACategory' | get_lang }}</a></li>
-                <li><a href="{{ _p.web }}main/exercice/tests_category.php?type=global">{{ 'ManageQuestionCategories' | get_lang }}</a></li>
-            </ul>
-        </div>
+<div class="span6">
+    <div class="well_border">
+        <h4>{{ 'Questions'  | get_lang }}</h4>
+        <ul>
+            <li>
+                <a href="{{ url('admin_questions') }}">
+                {{ 'Questions' | get_lang }}</a>
+            </li>
+            <li><a href="{{ url('admin_category_new')}}">{{ 'AddACategory' | get_lang }}</a></li>
+            <li><a href="{{ _p.web }}main/exercice/tests_category.php?type=global">{{ 'ManageQuestionCategories' | get_lang }}</a></li>
+        </ul>
     </div>
 </div>

+ 72 - 20
src/ChamiloLMS/Controller/Admin/JuryMember/JuryMemberController.php

@@ -48,20 +48,15 @@ class JuryMemberController extends CommonController
             return $this->redirect($url);
         }
 
-        // @todo add to a repository
-        // $students = $this->getRepository()->getStudentsByJury($jury->getId());
-
         $attempts = $jury->getExerciseAttempts();
 
         // @todo move logic in a repository
         /** @var Entity\TrackExercise $attempt */
-        $students = array();
         $relations = array();
         $myStatusForStudent = array();
         foreach ($attempts as $attempt) {
 
             $user = $attempt->getUser();
-            $students[] = $user;
             $juryAttempts = $attempt->getJuryAttempts();
 
             /** @var Entity\TrackExerciseAttemptJury $juryAttempt */
@@ -87,12 +82,22 @@ class JuryMemberController extends CommonController
         }
 
         $members = $jury->getMembers();
+        /** @var Entity\JuryMembers $member */
+        $studentsByMember = array();
+        foreach ($members as $member) {
+            $students = $member->getStudents();
+            foreach ($students as $student) {
+                $studentsByMember[$member->getId()][] = $student->getUserId();
+            }
+        }
         $template = $this->get('template');
 
         $template->assign('my_status_for_student', $myStatusForStudent);
         $template->assign('relations', $relations);
         $template->assign('attempts', $attempts);
         $template->assign('members', $members);
+        $template->assign('students_by_member', $studentsByMember);
+
         $template->assign('jury', $jury);
         $response = $template->render_template($this->getTemplatePath().'assign_members.tpl');
 
@@ -107,16 +112,26 @@ class JuryMemberController extends CommonController
     {
         $trackExercise = \ExerciseLib::get_exercise_track_exercise_info($exeId);
 
-        $user = $this->getUser();
-        $userId = $user->getUserId();
-
-        //$jury = $this->getRepository()->getJuryByPresidentId($userId);
-
-
         if (empty($trackExercise)) {
             $this->createNotFoundException();
         }
 
+        $userId = $this->getUser()->getUserId();
+
+        $criteria = array(
+            'exeId' => $exeId,
+            'juryMemberId' => $userId
+        );
+
+        $trackJury = $this->getManager()->getRepository('Entity\TrackExerciseAttemptJury')->findAll($criteria);
+        $questionScoreTypeModel = array();
+        if ($trackJury) {
+            /** @var Entity\TrackExerciseAttemptJury $track */
+            foreach ($trackJury as $track) {
+                $questionScoreTypeModel[$track->getQuestionId()] = $track->getQuestionScoreNameId();
+            }
+        }
+
         $questionList = explode(',', $trackExercise['data_tracking']);
         $exerciseResult = \ExerciseLib::getExerciseResult($trackExercise);
         $counter = 1;
@@ -142,7 +157,7 @@ class JuryMemberController extends CommonController
                 /** @var \Entity\QuestionScoreName  $score */
 
                 foreach ($items as $score) {
-                    $options[$score->getId()] = $score->getName();
+                    $options[$score->getId().':'.$score->getScore()] = $score->getName();
                 }
             }
         }
@@ -203,31 +218,26 @@ class JuryMemberController extends CommonController
             $score['comments'] = isset($comnt) ? $comnt : null;
 
             $contents = ob_get_clean();
-
             $question_content = '<div class="question_row">';
-
             $question_content .= $objQuestionTmp->return_header($objExercise->feedback_type, $counter, $score, $show_media, $mediaCounter);
             $question_content .= '</table>';
 
-
             // display question category, if any
             $question_content .= \Testcategory::getCategoryNamesForQuestion($questionId);
-
             $question_content .= $contents;
-            $question_content .= \Display::select('aa', $options);
 
+            $defaultValue = isset($questionScoreTypeModel[$questionId]) ? $questionScoreTypeModel[$questionId] : null;
 
+            $question_content .= \Display::select('options['.$questionId.']', $options, $defaultValue);
             $question_content .= '</div>';
-
             $exerciseContent .= $question_content;
 
             $counter++;
         }
 
         $template = $this->get('template');
-
         $template->assign('exercise', $exerciseContent);
-
+        $template->assign('exe_id', $exeId);
         $response = $this->get('template')->render_template($this->getTemplatePath().'score_user.tpl');
         return new Response($response, 200, array());
     }
@@ -238,6 +248,48 @@ class JuryMemberController extends CommonController
     */
     public function saveScoreAction()
     {
+        $questionsAndScore = $this->getRequest()->get('options');
+        $exeId = $this->getRequest()->get('exe_id');
+        $attempt = $this->getManager()->getRepository('Entity\TrackExercise')->find($exeId);
+
+        if ($attempt) {
+            $userId = $this->getUser()->getUserId();
+            $em = $this->getManager();
+
+            if (!empty($questionsAndScore)) {
+                foreach ($questionsAndScore as $questionId => $scoreInfo) {
+                    $scoreInfo = explode(':', $scoreInfo);
+                    $questionScoreNameId = $scoreInfo[0];
+                    $score = $scoreInfo[1];
+
+                    $criteria = array(
+                        'exeId' => $exeId,
+                        'questionId' => $questionId,
+                        'juryMemberId' => $userId
+                    );
+
+                    $obj = $this->getManager()->getRepository('Entity\TrackExerciseAttemptJury')->findOneBy($criteria);
+                    if ($obj) {
+                        $obj->setQuestionScoreNameId($questionScoreNameId);
+                        $obj->setScore($score);
+                    } else {
+                        $obj = new Entity\TrackExerciseAttemptJury();
+                        $obj->setJuryMemberId($userId);
+                        $obj->setAttempt($attempt);
+                        $obj->setQuestionScoreNameId($questionScoreNameId);
+                        $obj->setScore($score);
+                        $obj->setQuestionId($questionId);
+                    }
+                    $em->persist($obj);
+                    $em->flush();
+                }
+            }
+            $this->get('session')->getFlashBag()->add('success', "Saved");
+            $url = $this->generateUrl('jury_member.controller:scoreUserAction', array('exeId' => $exeId));
+            return $this->redirect($url);
+        } else {
+            return $this->createNotFoundException('Attempt not found');
+        }
 
     }
 

+ 61 - 3
src/ChamiloLMS/Controller/Admin/JuryPresident/JuryPresidentController.php

@@ -102,21 +102,68 @@ class JuryPresidentController extends CommonController
         return $this->redirect($url);
     }
 
+    /**
+    * @Route("/assign-user/{userId}/{juryMemberId}")
+    * @Method({"GET"})
+    */
+    public function assignUserToJuryMemberAction($userId, $juryMemberId)
+    {
+        /** @var Entity\Jury $jury */
+        $em = $this->getManager();
+
+        $member = $em->getRepository('Entity\JuryMembers')->find($juryMemberId);
+        if ($member) {
+            $criteria = array('userId' => $userId, 'juryMemberId'=> $juryMemberId);
+            $result = $em->getRepository('Entity\JuryMemberRelUser')->findOneBy($criteria);
+            if (empty($result)) {
+
+                $object = new Entity\JuryMemberRelUser();
+                $object->setMember($member);
+                $object->setUserId($userId);
+
+                $em = $this->getManager();
+                $em->persist($object);
+                $em->flush();
+                return '1';
+            }
+        }
+        return '0';
+    }
+
+    /**
+    * @Route("/remove-user/{userId}/{juryMemberId}")
+    * @Method({"GET"})
+    */
+    public function removeUserToJuryMemberAction($userId, $juryMemberId)
+    {
+        $em = $this->getManager();
+        $member = $em->getRepository('Entity\JuryMembers')->find($juryMemberId);
+        if ($member) {
+
+            $criteria = array('userId' => $userId, 'juryMemberId'=> $juryMemberId);
+            $result = $em->getRepository('Entity\JuryMemberRelUser')->findOneBy($criteria);
+            if (!empty($result)) {
+                $em = $this->getManager();
+                $em->remove($result);
+                $em->flush();
+                return '1';
+            }
+        }
+        return '0';
+    }
+
     /**
     * @Route("/assign-members")
     * @Method({"GET"})
     */
     public function assignMembersAction()
     {
-        return null;
-
         $user = $this->getUser();
         $userId = $user->getUserId();
 
         /** @var Entity\Jury $jury */
 
         $jury = $this->getRepository()->getJuryByUserId($userId);
-
         if (!$jury) {
             $this->get('session')->getFlashBag()->add('warning', "No tiene un comité asignado.");
             $url = $this->get('url_generator')->generate('jury_president.controller:indexAction');
@@ -162,6 +209,15 @@ class JuryPresidentController extends CommonController
         }
 
         $members = $jury->getMembers();
+        /** @var Entity\JuryMembers $member */
+        $studentsByMember = array();
+        foreach ($members as $member) {
+            $students = $member->getStudents();
+            foreach ($students as $student) {
+                $studentsByMember[$member->getId()][] = $student->getUserId();
+            }
+        }
+
         $template = $this->get('template');
 
         $template->assign('my_status_for_student', $myStatusForStudent);
@@ -169,6 +225,8 @@ class JuryPresidentController extends CommonController
         $template->assign('attempts', $attempts);
         $template->assign('members', $members);
         $template->assign('jury', $jury);
+        $template->assign('students_by_member', $studentsByMember);
+
         $response = $template->render_template($this->getTemplatePath().'assign_members.tpl');
 
         return new Response($response, 200, array());