|
|
|
|
@ -2585,6 +2585,8 @@ class Skill extends Model |
|
|
|
|
/** |
|
|
|
|
* Add skills select ajax for an item (exercise, lp). |
|
|
|
|
* |
|
|
|
|
* @param int $courseId |
|
|
|
|
* @param int $sessionId |
|
|
|
|
* @param int $typeId see ITEM_TYPE_* constants |
|
|
|
|
* @param int $itemId |
|
|
|
|
* |
|
|
|
|
@ -2592,28 +2594,38 @@ class Skill extends Model |
|
|
|
|
* |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
public static function addSkillsToForm(FormValidator $form, $typeId, $itemId = 0) |
|
|
|
|
public static function addSkillsToForm(FormValidator $form, $courseId, $sessionId, $typeId, $itemId = 0) |
|
|
|
|
{ |
|
|
|
|
$allowSkillInTools = api_get_configuration_value('allow_skill_rel_items'); |
|
|
|
|
if (!$allowSkillInTools) { |
|
|
|
|
return []; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$skillList = []; |
|
|
|
|
$em = Database::getManager(); |
|
|
|
|
$skillRelCourseRepo = $em->getRepository('ChamiloSkillBundle:SkillRelCourse'); |
|
|
|
|
$items = $skillRelCourseRepo->findBy(['course' => $courseId, 'session' => $sessionId]); |
|
|
|
|
|
|
|
|
|
$skills = []; |
|
|
|
|
/** @var \Chamilo\SkillBundle\Entity\SkillRelCourse $skillRelCourse */ |
|
|
|
|
foreach ($items as $skillRelCourse) { |
|
|
|
|
$skillId = $skillRelCourse->getSkill()->getId(); |
|
|
|
|
$skills[] = $skillId; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$selectedSkills = []; |
|
|
|
|
if (!empty($itemId)) { |
|
|
|
|
$em = Database::getManager(); |
|
|
|
|
$items = $em->getRepository('ChamiloSkillBundle:SkillRelItem')->findBy( |
|
|
|
|
['itemId' => $itemId, 'itemType' => $typeId] |
|
|
|
|
); |
|
|
|
|
/** @var SkillRelItem $skillRelItem */ |
|
|
|
|
foreach ($items as $skillRelItem) { |
|
|
|
|
$skillList[] = $skillRelItem->getSkill()->getId(); |
|
|
|
|
$selectedSkills[] = $skillRelItem->getSkill()->getId(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
self::skillsToCheckbox($form, $skillList); |
|
|
|
|
self::skillsToCheckbox($form, $skills, $courseId, $sessionId, $selectedSkills); |
|
|
|
|
|
|
|
|
|
return $skillList; |
|
|
|
|
return $skills; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -2781,74 +2793,6 @@ class Skill extends Model |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Relate skill with an item (exercise, gradebook, lp, etc). |
|
|
|
|
* |
|
|
|
|
* @param FormValidator $form |
|
|
|
|
* @param int $typeId |
|
|
|
|
* @param int $itemId |
|
|
|
|
* |
|
|
|
|
* @throws \Doctrine\ORM\OptimisticLockException |
|
|
|
|
*/ |
|
|
|
|
public static function saveSkills($form, $typeId, $itemId) |
|
|
|
|
{ |
|
|
|
|
$allowSkillInTools = api_get_configuration_value('allow_skill_rel_items'); |
|
|
|
|
if ($allowSkillInTools) { |
|
|
|
|
$userId = api_get_user_id(); |
|
|
|
|
$courseId = api_get_course_int_id(); |
|
|
|
|
if (empty($courseId)) { |
|
|
|
|
$courseId = null; |
|
|
|
|
} |
|
|
|
|
$sessionId = api_get_session_id(); |
|
|
|
|
if (empty($sessionId)) { |
|
|
|
|
$sessionId = null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$em = Database::getManager(); |
|
|
|
|
$skills = (array) $form->getSubmitValue('skills'); |
|
|
|
|
|
|
|
|
|
// Delete old ones |
|
|
|
|
$items = $em->getRepository('ChamiloSkillBundle:SkillRelItem')->findBy( |
|
|
|
|
['itemId' => $itemId, 'itemType' => $typeId] |
|
|
|
|
); |
|
|
|
|
if (!empty($items)) { |
|
|
|
|
/** @var SkillRelItem $skillRelItem */ |
|
|
|
|
foreach ($items as $skillRelItem) { |
|
|
|
|
if (!in_array($skillRelItem->getSkill()->getId(), $skills)) { |
|
|
|
|
$em->remove($skillRelItem); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
$em->flush(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Add new one |
|
|
|
|
if (!empty($skills)) { |
|
|
|
|
$skills = array_keys($skills); |
|
|
|
|
$skillRepo = $em->getRepository('ChamiloCoreBundle:Skill'); |
|
|
|
|
|
|
|
|
|
foreach ($skills as $skillId) { |
|
|
|
|
/** @var SkillEntity $skill */ |
|
|
|
|
$skill = $skillRepo->find($skillId); |
|
|
|
|
if (null !== $skill) { |
|
|
|
|
if (!$skill->hasItem($typeId, $itemId)) { |
|
|
|
|
$skillRelItem = (new SkillRelItem()) |
|
|
|
|
->setItemType($typeId) |
|
|
|
|
->setItemId($itemId) |
|
|
|
|
->setCourseId($courseId) |
|
|
|
|
->setSessionId($sessionId) |
|
|
|
|
->setCreatedBy($userId) |
|
|
|
|
->setUpdatedBy($userId) |
|
|
|
|
; |
|
|
|
|
$skill->addItem($skillRelItem); |
|
|
|
|
$em->persist($skill); |
|
|
|
|
$em->flush(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static function setSkillsToCourse(FormValidator $form, $courseId, $sessionId = 0) |
|
|
|
|
{ |
|
|
|
|
$courseId = (int) $courseId; |
|
|
|
|
@ -2865,27 +2809,26 @@ class Skill extends Model |
|
|
|
|
$skillRelCourseRepo = $em->getRepository('ChamiloSkillBundle:SkillRelCourse'); |
|
|
|
|
$items = $skillRelCourseRepo->findBy(['course' => $courseId, 'session' => $sessionId]); |
|
|
|
|
|
|
|
|
|
$selectedSkills = []; |
|
|
|
|
$skills = []; |
|
|
|
|
/** @var \Chamilo\SkillBundle\Entity\SkillRelCourse $skillRelCourse */ |
|
|
|
|
foreach ($items as $skillRelCourse) { |
|
|
|
|
$skillId = $skillRelCourse->getSkill()->getId(); |
|
|
|
|
$selectedSkills[] = $skillId; |
|
|
|
|
$skills[] = $skillId; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
self::skillsToCheckbox($form, $selectedSkills); |
|
|
|
|
$group = self::skillsToCheckbox($form, $skills, $courseId, $sessionId, $skills); |
|
|
|
|
$group->freeze(); |
|
|
|
|
|
|
|
|
|
return $selectedSkills; |
|
|
|
|
return []; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static function skillsToCheckbox(FormValidator $form, $selectedSkills = []) |
|
|
|
|
public static function skillsToCheckbox(FormValidator $form, $skills, $courseId, $sessionId, $selectedSkills = []) |
|
|
|
|
{ |
|
|
|
|
$em = Database::getManager(); |
|
|
|
|
$skillRelCourseRepo = $em->getRepository('ChamiloSkillBundle:SkillRelCourse'); |
|
|
|
|
$skills = $em->getRepository('ChamiloCoreBundle:Skill')->findAll(); |
|
|
|
|
$skillRelItemRepo = $em->getRepository('ChamiloSkillBundle:SkillRelItem'); |
|
|
|
|
|
|
|
|
|
/*foreach ($selectedSkills as $skillId) { |
|
|
|
|
$skillCountList[$skillId] = $skillRelCourseRepo->count(['skill' => $skillId]); |
|
|
|
|
}*/ |
|
|
|
|
//$skills = $em->getRepository('ChamiloCoreBundle:Skill')->findAll(); |
|
|
|
|
|
|
|
|
|
$skillList = []; |
|
|
|
|
/** @var \Chamilo\CoreBundle\Entity\Skill $skill */ |
|
|
|
|
@ -2900,10 +2843,13 @@ class Skill extends Model |
|
|
|
|
$elements = []; |
|
|
|
|
foreach ($skillList as $skillId => $skill) { |
|
|
|
|
$countLabel = ''; |
|
|
|
|
$count = $skillRelCourseRepo->count(['skill' => $skillId]); |
|
|
|
|
if (!empty($count)) { |
|
|
|
|
$countLabel = ' '.Display::badge($count, 'info'); |
|
|
|
|
$skillRelItemCount = $skillRelItemRepo->count( |
|
|
|
|
['skill' => $skillId, 'courseId' => $courseId, 'sessionId' => $sessionId] |
|
|
|
|
); |
|
|
|
|
if (!empty($skillRelItemCount)) { |
|
|
|
|
$countLabel = ' '.Display::badge($skillRelItemCount, 'info'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$element = $form->createElement( |
|
|
|
|
'checkbox', |
|
|
|
|
"skills[$skillId]", |
|
|
|
|
@ -2917,7 +2863,8 @@ class Skill extends Model |
|
|
|
|
|
|
|
|
|
$elements[] = $element; |
|
|
|
|
} |
|
|
|
|
$form->addGroup($elements, '', get_lang('Skills')); |
|
|
|
|
|
|
|
|
|
return $form->addGroup($elements, '', get_lang('Skills')); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -2975,11 +2922,16 @@ class Skill extends Model |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if (!empty($items)) { |
|
|
|
|
$skillRelItemRepo = $em->getRepository('ChamiloSkillBundle:SkillRelItem'); |
|
|
|
|
|
|
|
|
|
/** @var SkillRelCourse $item */ |
|
|
|
|
foreach ($items as $item) { |
|
|
|
|
if (!in_array($item->getSkill()->getId(), $skills)) { |
|
|
|
|
$em->remove($item); |
|
|
|
|
} |
|
|
|
|
$items = $skillRelItemRepo->findBy( |
|
|
|
|
['itemId' => $itemId, 'itemType' => $typeId] |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
$em->flush(); |
|
|
|
|
} |
|
|
|
|
@ -3007,6 +2959,72 @@ class Skill extends Model |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Relate skill with an item (exercise, gradebook, lp, etc). |
|
|
|
|
* |
|
|
|
|
* @param FormValidator $form |
|
|
|
|
* @param int $typeId |
|
|
|
|
* @param int $itemId |
|
|
|
|
*/ |
|
|
|
|
public static function saveSkills($form, $typeId, $itemId) |
|
|
|
|
{ |
|
|
|
|
$allowSkillInTools = api_get_configuration_value('allow_skill_rel_items'); |
|
|
|
|
if ($allowSkillInTools) { |
|
|
|
|
$userId = api_get_user_id(); |
|
|
|
|
$courseId = api_get_course_int_id(); |
|
|
|
|
if (empty($courseId)) { |
|
|
|
|
$courseId = null; |
|
|
|
|
} |
|
|
|
|
$sessionId = api_get_session_id(); |
|
|
|
|
if (empty($sessionId)) { |
|
|
|
|
$sessionId = null; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$em = Database::getManager(); |
|
|
|
|
$skills = (array) $form->getSubmitValue('skills'); |
|
|
|
|
|
|
|
|
|
// Delete old ones |
|
|
|
|
$items = $em->getRepository('ChamiloSkillBundle:SkillRelItem')->findBy( |
|
|
|
|
['itemId' => $itemId, 'itemType' => $typeId] |
|
|
|
|
); |
|
|
|
|
if (!empty($items)) { |
|
|
|
|
/** @var SkillRelItem $skillRelItem */ |
|
|
|
|
foreach ($items as $skillRelItem) { |
|
|
|
|
if (!in_array($skillRelItem->getSkill()->getId(), $skills)) { |
|
|
|
|
$em->remove($skillRelItem); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
$em->flush(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Add new one |
|
|
|
|
if (!empty($skills)) { |
|
|
|
|
$skills = array_keys($skills); |
|
|
|
|
$skillRepo = $em->getRepository('ChamiloCoreBundle:Skill'); |
|
|
|
|
|
|
|
|
|
foreach ($skills as $skillId) { |
|
|
|
|
/** @var SkillEntity $skill */ |
|
|
|
|
$skill = $skillRepo->find($skillId); |
|
|
|
|
if (null !== $skill) { |
|
|
|
|
if (!$skill->hasItem($typeId, $itemId)) { |
|
|
|
|
$skillRelItem = (new SkillRelItem()) |
|
|
|
|
->setItemType($typeId) |
|
|
|
|
->setItemId($itemId) |
|
|
|
|
->setCourseId($courseId) |
|
|
|
|
->setSessionId($sessionId) |
|
|
|
|
->setCreatedBy($userId) |
|
|
|
|
->setUpdatedBy($userId) |
|
|
|
|
; |
|
|
|
|
$skill->addItem($skillRelItem); |
|
|
|
|
$em->persist($skill); |
|
|
|
|
$em->flush(); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Get the icon (badge image) URL. |
|
|
|
|
* |
|
|
|
|
|