Add "result_id" in SkillRelItemRelUser see BT#13334

pull/2458/head
jmontoyaa 8 years ago
parent 7bd5704b0b
commit 2f3689c4c9
  1. 10
      main/exercise/exercise_show.php
  2. 24
      main/gradebook/skill_rel_user.php
  3. 104
      main/inc/ajax/skill.ajax.php
  4. 11
      main/inc/lib/skill.lib.php
  5. 2
      main/install/configuration.dist.php
  6. 47
      main/template/default/gradebook/skill_rel_user.tpl
  7. 2
      main/work/work.lib.php
  8. 18
      src/Chamilo/SkillBundle/Entity/SkillRelItem.php
  9. 36
      src/Chamilo/SkillBundle/Entity/SkillRelItemRelUser.php

@ -1062,6 +1062,15 @@ if ($isFeedbackAllowed && $origin != 'learnpath' && $origin != 'student_progress
.'&id_session='.api_get_session_id();
}
Skill::addSkillsToUserForm(
$emailForm,
ITEM_TYPE_EXERCISE,
$exercise_id,
$student_id,
$track_exercise_info['exe_id'],
true
);
$content = ExerciseLib::getEmailNotification(
$currentUserId,
api_get_course_info(),
@ -1069,6 +1078,7 @@ if ($isFeedbackAllowed && $origin != 'learnpath' && $origin != 'student_progress
$url
);
$emailForm->setDefaults(['notification_content' => $content]);
$emailForm->addButtonSend(
get_lang('CorrectTest'),
'submit',

@ -26,7 +26,6 @@ $skills = Skill::getSkillRelItemsPerCourse($courseId, $sessionId);
$uniqueSkills = [];
$itemsPerSkill = [];
$uniqueSkillsConclusion = [];
$skillRelUser = new SkillRelUser();
$userSkills = $skillRelUser->getUserSkills($userId, api_get_course_int_id(), api_get_session_id());
$userSkillsList = [];
@ -37,7 +36,7 @@ if (!empty($userSkills)) {
}
$em = Database::getManager();
$codePath = api_get_path(WEB_CODE_PATH);
/** @var SkillRelItem $skill */
foreach ($skills as $skill) {
$skillId = $skill->getSkill()->getId();
@ -48,21 +47,19 @@ foreach ($skills as $skill) {
'user' => $userId,
'skillRelItem' => $skill
];
/** @var \Chamilo\SkillBundle\Entity\SkillRelItemRelUser $skillRelItemRelUser */
$skillRelItemRelUser = $em->getRepository('ChamiloSkillBundle:SkillRelItemRelUser')->findOneBy($criteria);
$itemInfo['status'] = $skillRelItemRelUser ? true : false;
$itemInfo['url_activity'] = '';
if ($skillRelItemRelUser) {
$itemInfo['url_activity'] = $codePath.$skillRelItemRelUser->getUserItemResultUrl(api_get_cidreq());
}
$itemsPerSkill[$skillId][]['info'] = $itemInfo;
}
foreach ($itemsPerSkill as $skillId => $skillList) {
$allSkillsCompleted = true;
foreach ($skillList as $itemInfo) {
if ($itemInfo['info']['status'] === false) {
$allSkillsCompleted = false;
break;
}
}
$uniqueSkillsConclusion[$skillId] = $allSkillsCompleted;
$uniqueSkillsConclusion[$skillId] = in_array($skillId, $userSkillsList);
}
$interbreadcrumb[] = [
@ -74,11 +71,16 @@ $interbreadcrumb[] = [
'name' => get_lang('GradebookListOfStudentsReports')
];
$url = api_get_path(WEB_AJAX_PATH).'skill.ajax.php?a=assign_user_to_skill';
$template = new Template(get_lang('SkillUserList'));
$template->assign('conclusion_list', $uniqueSkillsConclusion);
$template->assign('skills', $uniqueSkills);
$template->assign('items', $itemsPerSkill);
$template->assign('user', $userInfo);
$template->assign('course_id', api_get_course_int_id());
$template->assign('session_id', api_get_session_id());
$template->assign('assign_user_url', $url);
$templateName = $template->get_template('gradebook/skill_rel_user.tpl');
$content = $template->fetch($templateName);

@ -1,9 +1,9 @@
<?php
/* For licensing terms, see /license.txt */
/**
* Responses to AJAX calls
*/
require_once __DIR__.'/../global.inc.php';
$action = isset($_REQUEST['a']) ? $_REQUEST['a'] : null;
@ -21,12 +21,12 @@ switch ($action) {
case 'add':
if (api_is_platform_admin() || api_is_drh()) {
if (isset($_REQUEST['id']) && !empty($_REQUEST['id'])) {
$skill_id = $skill->edit($_REQUEST);
$skillId = $skill->edit($_REQUEST);
} else {
$skill_id = $skill->add($_REQUEST);
$skillId = $skill->add($_REQUEST);
}
}
echo $skill_id;
echo $skillId;
break;
case 'delete_skill':
if (api_is_platform_admin() || api_is_drh()) {
@ -74,10 +74,10 @@ switch ($action) {
echo json_encode($return);
break;
case 'get_course_info_popup':
$course_info = api_get_course_info($_REQUEST['code']);
$courseInfo = api_get_course_info($_REQUEST['code']);
$courses = CourseManager::processHotCourseItem(
[
['c_id' => $course_info['real_id']]
['c_id' => $courseInfo['real_id']]
]
);
Display::display_no_header();
@ -94,39 +94,39 @@ switch ($action) {
}
break;
case 'get_skills_by_profile':
$skill_rel_profile = new SkillRelProfile();
$skillRelProfile = new SkillRelProfile();
$profile_id = isset($_REQUEST['profile_id']) ? $_REQUEST['profile_id'] : null;
$skills = $skill_rel_profile->getSkillsByProfile($profile_id);
$skills = $skillRelProfile->getSkillsByProfile($profile_id);
echo json_encode($skills);
break;
case 'get_saved_profiles':
$skill_profile = new SkillProfile();
$profiles = $skill_profile->get_all();
$skillProfile = new SkillProfile();
$profiles = $skillProfile->get_all();
Display::display_no_header();
Display::$global_template->assign('profiles', $profiles);
$template = Display::$global_template->get_template('skill/profile_item.tpl');
echo Display::$global_template->fetch($template);
break;
case 'get_skills':
$load_user_data = isset($_REQUEST['load_user_data']) ? $_REQUEST['load_user_data'] : null;
$loadUserData = isset($_REQUEST['load_user_data']) ? $_REQUEST['load_user_data'] : null;
$id = intval($_REQUEST['id']);
$skills = $skill->get_all($load_user_data, false, $id);
$skills = $skill->get_all($loadUserData, false, $id);
echo json_encode($skills);
break;
case 'get_skill_info':
$id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
$skill_info = $skill->getSkillInfo($id);
echo json_encode($skill_info);
$skillInfo = $skill->getSkillInfo($id);
echo json_encode($skillInfo);
break;
case 'get_skill_course_info':
$id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
$skill_info = $skill->getSkillInfo($id);
$skillInfo = $skill->getSkillInfo($id);
$courses = $skill->getCoursesBySkill($id);
$sessions = $skill->getSessionsBySkill($id);
$html = '';
if (!empty($courses) || !empty($sessions)) {
Display::display_no_header();
Display::$global_template->assign('skill', $skill_info);
Display::$global_template->assign('skill', $skillInfo);
Display::$global_template->assign('courses', $courses);
Display::$global_template->assign('sessions', $sessions);
$template = Display::$global_template->get_template('skill/skill_info.tpl');
@ -219,7 +219,6 @@ switch ($action) {
$user_info = api_get_user_info($user['user_id']);
$user_list[$user['user_id']]['user'] = $user_info;
$my_user_skills = $skill_rel_user->getUserSkills($user['user_id']);
$user_skill_list = [];
foreach ($my_user_skills as $skill_item) {
$user_skill_list[] = $skill_item['skill_id'];
@ -350,14 +349,12 @@ switch ($action) {
]
);
$returnSkills = [];
foreach ($skills as $skill) {
$returnSkills[] = [
'id' => $skill['id'],
'text' => $skill['name']
];
}
echo json_encode([
'items' => $returnSkills
]);
@ -379,6 +376,7 @@ switch ($action) {
$userId = isset($_REQUEST['user_id']) ? (int) $_REQUEST['user_id'] : 0;
$courseId = isset($_REQUEST['course_id']) ? (int) $_REQUEST['course_id'] : 0;
$sessionId = isset($_REQUEST['session_id']) ? (int) $_REQUEST['session_id'] : 0;
$resultId = isset($_REQUEST['result_id']) ? (int) $_REQUEST['result_id'] : 0;
if (!empty($typeId) && !empty($itemId) && !empty($skillId) && !empty($userId) && !empty($courseId)) {
$em = Database::getManager();
@ -393,7 +391,6 @@ switch ($action) {
}
$session = $em->getRepository('ChamiloCoreBundle:Session')->find($sessionId);
/** @var \Chamilo\SkillBundle\Entity\SkillRelItem $skillRelItem */
$skillRelItem = $em->getRepository('ChamiloSkillBundle:SkillRelItem')->findOneBy(
['itemId' => $itemId, 'itemType' => $typeId, 'skill' => $skillId]
@ -414,6 +411,7 @@ switch ($action) {
$skillRelItemRelUser
->setUser($user)
->setSkillRelItem($skillRelItem)
->setResultId($resultId)
->setCreatedBy($creatorId)
->setUpdatedBy($creatorId)
;
@ -424,6 +422,72 @@ switch ($action) {
echo Skill::getUserSkillStatusLabel($skillRelItem, $skillRelItemRelUser, false);
}
break;
case 'assign_user_to_skill':
$allowSkillInTools = api_get_configuration_value('allow_skill_rel_items');
if (empty($allowSkillInTools)) {
exit;
}
if (!api_is_allowed_to_edit()) {
exit;
}
$skillId = isset($_REQUEST['skill_id']) ? (int) $_REQUEST['skill_id'] : 0;
$userId = isset($_REQUEST['user_id']) ? (int) $_REQUEST['user_id'] : 0;
$courseId = isset($_REQUEST['course_id']) ? (int) $_REQUEST['course_id'] : 0;
$sessionId = isset($_REQUEST['session_id']) ? (int) $_REQUEST['session_id'] : null;
if (empty($skillId) || empty($userId)) {
exit;
}
$em = Database::getManager();
$skillRepo = $em->getRepository('ChamiloCoreBundle:Skill');
$skill = $skillRepo->find($skillId);
$user = api_get_user_entity($userId);
if (empty($skill) || empty($user)) {
exit;
}
$skillUserRepo = $em->getRepository('ChamiloCoreBundle:SkillRelUser');
$criteria = [
'user' => $user,
'skill' => $skill,
];
$skillRelUsers = $skillUserRepo->findBy($criteria);
if (empty($skillRelUsers)) {
$skillUser = new \Chamilo\CoreBundle\Entity\SkillRelUser();
$skillUser->setUser($user);
$skillUser->setSkill($skill);
/*if ($showLevels) {
$level = $skillLevelRepo->find(intval($values['acquired_level']));
$skillUser->setAcquiredLevel($level);
}*/
$course = api_get_course_entity($courseId);
$skillUser->setCourse($course);
if (!empty($sessionId)) {
$session = $em->getRepository('ChamiloCoreBundle:Session')->find($sessionId);
$skillUser->setSession($session);
}
$skillUser->setArgumentation('');
$skillUser->setArgumentationAuthorId(api_get_user_id());
$skillUser->setAcquiredSkillAt(new DateTime());
$skillUser->setAssignedBy(0);
$em->persist($skillUser);
$em->flush();
$result = 'success';
} else {
foreach ($skillRelUsers as $skillRelUser) {
$em->remove($skillRelUser);
}
$em->flush();
$result = 'danger';
}
echo $result;
break;
default:
echo '';
}

@ -2359,7 +2359,7 @@ class Skill extends Model
* @param int $itemId
* @param int $userId
*/
public static function addSkillsToUserForm(FormValidator $form, $typeId, $itemId, $userId)
public static function addSkillsToUserForm(FormValidator $form, $typeId, $itemId, $userId, $resultId = 0, $addHeader = false)
{
$allowSkillInTools = api_get_configuration_value('allow_skill_rel_items');
if ($allowSkillInTools && !empty($typeId) && !empty($itemId) && !empty($userId)) {
@ -2392,9 +2392,13 @@ class Skill extends Model
'type_id' => $typeId,
'user_id' => $userId,
'course_id' => api_get_course_int_id(),
'session_id' => api_get_session_id()
'session_id' => api_get_session_id(),
'result_id' => $resultId
];
$params = json_encode($params);
if ($addHeader) {
$form->addHtml(Display::page_subheader2(get_lang('Skills')));
}
$html = '
<script>
$(function() {
@ -2416,6 +2420,9 @@ class Skill extends Model
';
$form->addHtml($html);
$form->addLabel(get_lang('Skills'), $skills);
if ($addHeader) {
$form->addHtml('<br />');
}
}
}
}

@ -742,6 +742,8 @@ CREATE TABLE skill_rel_item (id INT AUTO_INCREMENT NOT NULL, skill_id INT DEFAUL
ALTER TABLE skill_rel_item_rel_user ADD CONSTRAINT FK_D1133E0DFD4B12DC FOREIGN KEY (skill_rel_item_id) REFERENCES skill_rel_item (id);
ALTER TABLE skill_rel_item_rel_user ADD CONSTRAINT FK_D1133E0DA76ED395 FOREIGN KEY (user_id) REFERENCES user (id);
ALTER TABLE skill_rel_item ADD CONSTRAINT FK_EB5B2A0D5585C142 FOREIGN KEY (skill_id) REFERENCES skill (id);
ALTER TABLE skill_rel_item_rel_user ADD result_id INT DEFAULT NULL;
*/
//$_configuration['allow_skill_rel_items'] = false;

@ -1,6 +1,30 @@
<h3>{{ user.complete_name_with_username }}</h3>
<br />
<script>
$(function() {
$(".assign_user_to_skill").on("click", function() {
var skillId = $(this).attr('data-skill-id');
var link = $(this);
$.ajax({
type: "GET",
async: false,
url: "{{ assign_user_url }}&skill_id="+skillId+"&user_id={{ user.id }}&course_id={{ course_id }}&session_id={{ session_id }}",
success: function(result) {
link.removeClass('btn-danger');
link.removeClass('btn-success');
if (result == 'danger') {
link.addClass('btn-danger');
link.html('{{ 'NotYetAchieved' | get_lang }}');
} else {
link.addClass('btn-success');
link.html('{{ 'Achieved' | get_lang }}');
}
}
});
});
});
</script>
<table class="table table-striped">
<tr>
<th>{{ 'Skill' | get_lang }}</th>
@ -18,20 +42,25 @@
{% set status = 'success' %}
{% endif %}
<span class="label label-{{ status }}">
{{ item.info.name }}
<a href="{{ item.info.url_activity }}" target="_blank">
{{ item.info.name }}
</a>
</span> &nbsp;
{% endfor %}
</td>
<td>
{% set class = 'danger' %}
{% set text = 'NotYetAchieved' %}
{% if conclusion_list[skill.id] %}
<span class="label label-success">
{{ 'Achieved' }}
</span>
{% else %}
<span class="label label-danger">
{{ 'NotYetAchieved' }}
</span>
{% set class = 'success' %}
{% set text = 'Achieved' %}
{% endif %}
<a data-skill-id="{{ skill.id }}" href="javascript:void(0);" class="assign_user_to_skill btn btn-{{ class }}">
{{ text | get_lang }}
</a>
</td>
</tr>
{% endfor %}

@ -3597,7 +3597,7 @@ function getWorkCommentForm($work, $workParent)
}
}
Skill::addSkillsToUserForm($form, ITEM_TYPE_STUDENT_PUBLICATION, $workParent['id'], $work['user_id']);
Skill::addSkillsToUserForm($form, ITEM_TYPE_STUDENT_PUBLICATION, $workParent['id'], $work['user_id'], $work['id']);
$form->addHtmlEditor('comment', get_lang('Comment'), false);
$form->addFile('attachment', get_lang('Attachment'));
$form->addElement('hidden', 'id', $work['id']);

@ -360,4 +360,22 @@ class SkillRelItem
$this->sessionId = $sessionId;
return $this;
}
/**
* @param string $cidReq
* @return string
*/
public function getItemResultUrl($cidReq)
{
$url = '';
switch ($this->getItemType()) {
case ITEM_TYPE_EXERCISE:
$url = 'exercise/exercise_show.php?action=qualify&'.$cidReq;
break;
case ITEM_TYPE_STUDENT_PUBLICATION:
$url = 'work/view.php?'.$cidReq;
break;
}
return $url;
}
}

@ -38,6 +38,13 @@ class SkillRelItemRelUser
*/
protected $user;
/**
* @var integer
*
* @ORM\Column(name="result_id", type="integer", nullable=true)
*/
protected $resultId;
/**
* @var \DateTime $created
*
@ -166,4 +173,33 @@ class SkillRelItemRelUser
$this->updatedBy = $updatedBy;
return $this;
}
/**
* @return int
*/
public function getResultId()
{
return $this->resultId;
}
/**
* @param int $resultId
* @return SkillRelItemRelUser
*/
public function setResultId($resultId)
{
$this->resultId = $resultId;
return $this;
}
/**
* @param string $cidReq
* @return string
*/
public function getUserItemResultUrl($cidReq)
{
$resultId = $this->getResultId();
$url = $this->getSkillRelItem()->getItemResultUrl($cidReq).'&id='.$resultId;
return $url;
}
}

Loading…
Cancel
Save