Gradebook: Add possibility to assign skill-item inside an evaluation. Can be improved by declaring the JS function only once - refs BT#13334

pull/4370/head
Yannick Warnier 3 years ago
parent 4b5b01e1e8
commit 1284429650
  1. 17
      main/gradebook/lib/fe/evalform.class.php
  2. 2
      main/inc/ajax/skill.ajax.php
  3. 107
      main/inc/lib/skill.lib.php

@ -169,6 +169,12 @@ class EvalForm extends FormValidator
</form>'; </form>';
$renderer->setFormTemplate($form_template); $renderer->setFormTemplate($form_template);
$skillRelItemsEnabled = api_get_configuration_value('allow_skill_rel_items');
$columnSkill = '';
if ($skillRelItemsEnabled) {
$columnSkill = '<th>'.get_lang('Skills').'</th>';
}
if (api_is_western_name_order()) { if (api_is_western_name_order()) {
$renderer->setHeaderTemplate( $renderer->setHeaderTemplate(
'<tr> '<tr>
@ -177,6 +183,7 @@ class EvalForm extends FormValidator
<th>'.get_lang('FirstName').'</th> <th>'.get_lang('FirstName').'</th>
<th>'.get_lang('LastName').'</th> <th>'.get_lang('LastName').'</th>
<th>'.get_lang('Qualify').'</th> <th>'.get_lang('Qualify').'</th>
'.$columnSkill.'
</tr>' </tr>'
); );
} else { } else {
@ -187,6 +194,7 @@ class EvalForm extends FormValidator
<th>'.get_lang('LastName').'</th> <th>'.get_lang('LastName').'</th>
<th>'.get_lang('FirstName').'</th> <th>'.get_lang('FirstName').'</th>
<th>'.get_lang('Qualify').'</th> <th>'.get_lang('Qualify').'</th>
'.$columnSkill.'
</tr>' </tr>'
); );
} }
@ -196,6 +204,7 @@ class EvalForm extends FormValidator
{element} {element}
<!-- BEGIN error --><br /><span style="color: #ff0000;font-size:10px">{error}</span><!-- END error --> <!-- BEGIN error --><br /><span style="color: #ff0000;font-size:10px">{error}</span><!-- END error -->
</td> </td>
'.($skillRelItemsEnabled ? '<td></td>' : '').'
</tr>'; </tr>';
$results_and_users = []; $results_and_users = [];
@ -210,9 +219,15 @@ class EvalForm extends FormValidator
foreach ($results_and_users as $result_and_user) { foreach ($results_and_users as $result_and_user) {
$user = $result_and_user['user']; $user = $result_and_user['user'];
/** @var \Result $result */
$result = $result_and_user['result']; $result = $result_and_user['result'];
$renderer = &$this->defaultRenderer(); $renderer = &$this->defaultRenderer();
$columnSkillResult = '';
if ($skillRelItemsEnabled) {
$columnSkillResult = '<td>'.Skill::getAddSkillsToUserBlock(ITEM_TYPE_GRADEBOOK_EVALUATION, $result->get_evaluation_id(), $result->get_user_id(), $result->get_id()).'</td>';
}
if (api_is_western_name_order()) { if (api_is_western_name_order()) {
$user_info = '<td align="left" >'.$user['firstname'].'</td>'; $user_info = '<td align="left" >'.$user['firstname'].'</td>';
$user_info .= '<td align="left" >'.$user['lastname'].'</td>'; $user_info .= '<td align="left" >'.$user['lastname'].'</td>';
@ -228,6 +243,7 @@ class EvalForm extends FormValidator
<td align="left">{element} / '.$this->evaluation_object->get_max().' <td align="left">{element} / '.$this->evaluation_object->get_max().'
<!-- BEGIN error --><br /><span style="color: #ff0000;font-size:10px">{error}</span><!-- END error --> <!-- BEGIN error --><br /><span style="color: #ff0000;font-size:10px">{error}</span><!-- END error -->
</td> </td>
'.$columnSkillResult.'
</tr>'; </tr>';
if (empty($model)) { if (empty($model)) {
@ -269,6 +285,7 @@ class EvalForm extends FormValidator
'.$user_info.' '.$user_info.'
<td align="left">{element} <!-- BEGIN error --><br /><span style="color: #ff0000;font-size:10px">{error}</span><!-- END error --> <td align="left">{element} <!-- BEGIN error --><br /><span style="color: #ff0000;font-size:10px">{error}</span><!-- END error -->
</td> </td>
'.$columnSkillResult.'
</tr>'; </tr>';
} }
$renderer->setElementTemplate($template, 'score['.$result->get_id().']'); $renderer->setElementTemplate($template, 'score['.$result->get_id().']');

@ -452,7 +452,7 @@ switch ($action) {
$em->flush(); $em->flush();
} }
} }
echo Skill::getUserSkillStatusLabel($skillRelItem, $skillRelItemRelUser, false); echo Skill::getUserSkillStatusLabel($skillRelItem, $skillRelItemRelUser, false, $userId);
} }
break; break;
case 'assign_user_to_skill': case 'assign_user_to_skill':

@ -6,6 +6,7 @@ use Chamilo\CoreBundle\Entity\Skill as SkillEntity;
use Chamilo\CoreBundle\Entity\SkillRelUser as SkillRelUserEntity; use Chamilo\CoreBundle\Entity\SkillRelUser as SkillRelUserEntity;
use Chamilo\SkillBundle\Entity\SkillRelCourse; use Chamilo\SkillBundle\Entity\SkillRelCourse;
use Chamilo\SkillBundle\Entity\SkillRelItem; use Chamilo\SkillBundle\Entity\SkillRelItem;
use Chamilo\SkillBundle\Entity\SkillRelItemRelUser;
use Chamilo\UserBundle\Entity\User; use Chamilo\UserBundle\Entity\User;
use Fhaculty\Graph\Graph; use Fhaculty\Graph\Graph;
use Fhaculty\Graph\Vertex; use Fhaculty\Graph\Vertex;
@ -2589,7 +2590,7 @@ class Skill extends Model
* *
* @return string * @return string
*/ */
public static function getUserSkillStatusLabel($skillRelItem, $skillRelItemRelUser, $addHeader = true) public static function getUserSkillStatusLabel(SkillRelItem $skillRelItem, SkillRelItemRelUser $skillRelItemRelUser = null, bool $addHeader = true, int $userId = 0): string
{ {
if (empty($skillRelItem)) { if (empty($skillRelItem)) {
return ''; return '';
@ -2601,7 +2602,7 @@ class Skill extends Model
$label = ''; $label = '';
$skill = $skillRelItem->getSkill(); $skill = $skillRelItem->getSkill();
if ($addHeader) { if ($addHeader) {
$label .= '<span id="'.$skill->getId().'" class="user_skill" style="cursor:pointer">'; $label .= '<span id="skill-'.$skill->getId().'-'.$userId.'" class="user_skill" style="cursor:pointer">';
} }
$label .= Display::label($skill->getName(), $type); $label .= Display::label($skill->getName(), $type);
if ($addHeader) { if ($addHeader) {
@ -2612,13 +2613,18 @@ class Skill extends Model
} }
/** /**
* Assign a user with a SkilRelItem object. * Attach a list of skills (skill_rel_item) potentially assigned to a user to the given form.
* *
* @param FormValidator $form
* @param int $typeId see ITEM_TYPE_* constants * @param int $typeId see ITEM_TYPE_* constants
* @param int $itemId * @param int $itemId
* @param int $userId * @param int $userId
* @param int $resultId
* @param bool $addHeader Whether to show the 'Skills' title for this block
*
* @return void
*/ */
public static function addSkillsToUserForm(FormValidator $form, $typeId, $itemId, $userId, $resultId = 0, $addHeader = false) public static function addSkillsToUserForm(FormValidator $form, int $typeId, int $itemId, int $userId, int $resultId = 0, bool $addHeader = false): void
{ {
$allowSkillInTools = api_get_configuration_value('allow_skill_rel_items'); $allowSkillInTools = api_get_configuration_value('allow_skill_rel_items');
if ($allowSkillInTools && !empty($typeId) && !empty($itemId) && !empty($userId)) { if ($allowSkillInTools && !empty($typeId) && !empty($itemId) && !empty($userId)) {
@ -2641,7 +2647,7 @@ class Skill extends Model
'skillRelItem' => $skillRelItem, 'skillRelItem' => $skillRelItem,
]; ];
$skillRelItemRelUser = $em->getRepository('ChamiloSkillBundle:SkillRelItemRelUser')->findOneBy($criteria); $skillRelItemRelUser = $em->getRepository('ChamiloSkillBundle:SkillRelItemRelUser')->findOneBy($criteria);
$skills .= self::getUserSkillStatusLabel($skillRelItem, $skillRelItemRelUser); $skills .= self::getUserSkillStatusLabel($skillRelItem, $skillRelItemRelUser, true, $userId);
} }
if (!empty($skills)) { if (!empty($skills)) {
@ -2658,19 +2664,21 @@ class Skill extends Model
if ($addHeader) { if ($addHeader) {
$form->addHtml(Display::page_subheader2(get_lang('Skills'))); $form->addHtml(Display::page_subheader2(get_lang('Skills')));
} }
$skillId = $skillRelItem->getSkill()->getId();
$elementId = 'skill-'.$skillId.'-'.$userId;
$html = ' $html = '
<script> <script>
$(function() { $(function() {
$(".user_skill").on("click", function() { $("#'.$elementId.'").on("click", function() {
var skillId = this.id;
var params = '.$params.'; var params = '.$params.';
$.ajax({ $.ajax({
type: "GET", type: "GET",
async: false, async: false,
data: params, data: params,
url: "'.$url.'&skill_id="+skillId, url: "'.$url.'&skill_id="+'.$skillId.',
success: function(result) { success: function(result) {
$("#" +skillId+ ".user_skill").html(result); $("#'.$elementId.'.user_skill").html(result);
} }
}); });
}); });
@ -2686,6 +2694,87 @@ class Skill extends Model
} }
} }
/**
* Shows a list of skills (skill_rel_item) potentially assigned to a user
* to the given form, with AJAX action on click to save the assignment.
* Assigned skills appear in a different colour.
*
* @param int $typeId see ITEM_TYPE_* constants
* @param int $itemId
* @param int $userId
* @param int $resultId
* @param bool $addHeader Whether to show the 'Skills' title for this block
*
* @return string
*/
public static function getAddSkillsToUserBlock(int $typeId, int $itemId, int $userId, int $resultId = 0, bool $addHeader = false): string
{
$block = '';
$allowSkillInTools = api_get_configuration_value('allow_skill_rel_items');
if ($allowSkillInTools && !empty($typeId) && !empty($itemId) && !empty($userId)) {
$em = Database::getManager();
$items = $em->getRepository('ChamiloSkillBundle:SkillRelItem')->findBy(
['itemId' => $itemId, 'itemType' => $typeId]
);
$skills = '';
/** @var SkillRelItem $skillRelItem */
foreach ($items as $skillRelItem) {
$criteria = [
'user' => $userId,
'skillRelItem' => $skillRelItem,
];
$skillRelItemRelUser = $em->getRepository('ChamiloSkillBundle:SkillRelItemRelUser')->findOneBy($criteria);
$skills .= self::getUserSkillStatusLabel($skillRelItem, $skillRelItemRelUser, true, $userId);
}
$block .= $skills;
if (!empty($skills)) {
$url = api_get_path(WEB_AJAX_PATH).'skill.ajax.php?a=update_skill_rel_user&'.api_get_cidreq();
$params = [
'item_id' => $itemId,
'type_id' => $typeId,
'user_id' => $userId,
'course_id' => api_get_course_int_id(),
'session_id' => api_get_session_id(),
'result_id' => $resultId,
];
$params = json_encode($params);
if ($addHeader) {
$block .= Display::page_subheader2(get_lang('Skills'));
}
$skillId = $skillRelItem->getSkill()->getId();
$elementId = 'skill-'.$skillId.'-'.$userId;
$html = '
<script>
$(function() {
$("#'.$elementId.'").on("click", function() {
var params = '.$params.';
$.ajax({
type: "GET",
async: false,
data: params,
url: "'.$url.'&skill_id="+'.$skillId.',
success: function(result) {
$("#'.$elementId.'.user_skill").html(result);
}
});
});
});
</script>
';
$block .= $html;
//$block .= $form->addLabel(get_lang('Skills'), $skills);
if ($addHeader) {
$block .= '<br />';
}
}
}
return $block;
}
/** /**
* Add skills select ajax for an item (exercise, lp). * Add skills select ajax for an item (exercise, lp).
* *

Loading…
Cancel
Save