diff --git a/main/admin/course_edit.php b/main/admin/course_edit.php index 00a7f13326..3a39fe4855 100755 --- a/main/admin/course_edit.php +++ b/main/admin/course_edit.php @@ -353,9 +353,9 @@ if ($form->validate()) { $course = $form->getSubmitValues(); $visibility = $course['visibility']; - if ($allowSkillRelItem) { + /*if ($allowSkillRelItem) { $result = Skill::saveSkillsToCourseFromForm($form); - } + }*/ global $_configuration; diff --git a/main/attendance/attendance_add.php b/main/attendance/attendance_add.php index 6c74c68b21..c99c7af1b0 100755 --- a/main/attendance/attendance_add.php +++ b/main/attendance/attendance_add.php @@ -67,7 +67,7 @@ if ((api_get_session_id() != 0 && Gradebook::is_active()) || api_get_session_id( ); $form->applyFilter('attendance_weight', 'html_filter'); $form->addElement('html', ''); - Skill::addSkillsToForm($form, ITEM_TYPE_ATTENDANCE, 0); + Skill::addSkillsToForm($form, api_get_course_int_id(), api_get_session_id(),ITEM_TYPE_ATTENDANCE, 0); $form->addElement('html', ''); } $form->addButtonCreate(get_lang('Save')); diff --git a/main/attendance/attendance_edit.php b/main/attendance/attendance_edit.php index 7102c50f98..f58884a224 100755 --- a/main/attendance/attendance_edit.php +++ b/main/attendance/attendance_edit.php @@ -82,7 +82,7 @@ if (Gradebook::is_active()) { ); $form->applyFilter('attendance_weight', 'html_filter'); $form->addElement('html', ''); - Skill::addSkillsToForm($form, ITEM_TYPE_ATTENDANCE, $attendance_id); + Skill::addSkillsToForm($form, api_get_course_int_id(), api_get_session_id(), ITEM_TYPE_ATTENDANCE, $attendance_id); $form->addElement('html', ''); } $form->addButtonUpdate(get_lang('Save')); diff --git a/main/exercise/exercise.class.php b/main/exercise/exercise.class.php index 2f8d121a44..5d5289b583 100755 --- a/main/exercise/exercise.class.php +++ b/main/exercise/exercise.class.php @@ -2492,7 +2492,7 @@ class Exercise } } - Skill::addSkillsToForm($form, ITEM_TYPE_EXERCISE, $this->iid); + Skill::addSkillsToForm($form, api_get_course_int_id(), api_get_session_id(), ITEM_TYPE_EXERCISE, $this->iid); $extraField = new ExtraField('exercise'); $extraField->addElements( diff --git a/main/forum/editthread.php b/main/forum/editthread.php index 6d5e460874..9aee29dde1 100644 --- a/main/forum/editthread.php +++ b/main/forum/editthread.php @@ -215,7 +215,7 @@ if (api_is_allowed_to_edit(null, true)) { $form->addElement('html', ''); -Skill::addSkillsToForm($form, ITEM_TYPE_FORUM_THREAD, $threadId); +Skill::addSkillsToForm($form, api_get_course_int_id(), api_get_session_id(), ITEM_TYPE_FORUM_THREAD, $threadId); if (!empty($threadData)) { $defaults['thread_qualify_gradebook'] = $gradeThisThread; diff --git a/main/forum/forumfunction.inc.php b/main/forum/forumfunction.inc.php index c0b9a4f7d3..d5dacfcc48 100755 --- a/main/forum/forumfunction.inc.php +++ b/main/forum/forumfunction.inc.php @@ -3276,7 +3276,7 @@ function show_add_post_form($current_forum, $action, $form_values = [], $showPre } if ($action === 'newthread') { - Skill::addSkillsToForm($form, ITEM_TYPE_FORUM_THREAD, 0); + Skill::addSkillsToForm($form, api_get_course_int_id(), api_get_session_id(), ITEM_TYPE_FORUM_THREAD, 0); } if (api_is_allowed_to_edit(null, true) && $action == 'newthread') { diff --git a/main/inc/lib/link.lib.php b/main/inc/lib/link.lib.php index 84ce400da6..0d3ea8798d 100755 --- a/main/inc/lib/link.lib.php +++ b/main/inc/lib/link.lib.php @@ -1681,7 +1681,7 @@ class Link extends Model } } - Skill::addSkillsToForm($form, ITEM_TYPE_LINK, $linkId); + Skill::addSkillsToForm($form, api_get_course_int_id(), api_get_session_id(), ITEM_TYPE_LINK, $linkId); $form->addHidden('lp_id', $lpId); $form->addButtonSave(get_lang('SaveLink'), 'submitLink'); $form->setDefaults($defaults); diff --git a/main/inc/lib/skill.lib.php b/main/inc/lib/skill.lib.php index 1e85d82eb1..5b61f8bb0d 100755 --- a/main/inc/lib/skill.lib.php +++ b/main/inc/lib/skill.lib.php @@ -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. * diff --git a/main/lp/lp_add.php b/main/lp/lp_add.php index e20a51b9dd..7d70aa89ba 100755 --- a/main/lp/lp_add.php +++ b/main/lp/lp_add.php @@ -171,7 +171,7 @@ if ($subscriptionSettings['allow_add_users_to_lp']) { $extraField = new ExtraField('lp'); $extra = $extraField->addElements($form, 0, ['lp_icon']); -Skill::addSkillsToForm($form, ITEM_TYPE_LEARNPATH, 0); +Skill::addSkillsToForm($form, api_get_course_int_id(), api_get_session_id(), ITEM_TYPE_LEARNPATH, 0); $form->addElement('html', ''); diff --git a/main/lp/lp_edit.php b/main/lp/lp_edit.php index 63a60b466c..635a4b4dfe 100755 --- a/main/lp/lp_edit.php +++ b/main/lp/lp_edit.php @@ -285,7 +285,7 @@ if ($form->hasElement('extra_authors')) { $author->setOptions($options); } -Skill::addSkillsToForm($form, ITEM_TYPE_LEARNPATH, $lpId); +Skill::addSkillsToForm($form, api_get_course_int_id(), api_get_session_id(), ITEM_TYPE_LEARNPATH, $lpId); // Submit button $form->addButtonSave(get_lang('SaveLPSettings')); diff --git a/main/survey/create_new_survey.php b/main/survey/create_new_survey.php index 1056363f77..6555a93835 100755 --- a/main/survey/create_new_survey.php +++ b/main/survey/create_new_survey.php @@ -326,7 +326,7 @@ if ($action === 'edit' && !empty($survey_id)) { } } -Skill::addSkillsToForm($form, ITEM_TYPE_SURVEY, $survey_id); +Skill::addSkillsToForm($form, api_get_course_int_id(), api_get_session_id(), ITEM_TYPE_SURVEY, $survey_id); $form->addElement('html', '
'); diff --git a/main/work/work.lib.php b/main/work/work.lib.php index 6e609904a1..8f476c20ec 100755 --- a/main/work/work.lib.php +++ b/main/work/work.lib.php @@ -5626,7 +5626,7 @@ function getFormWork($form, $defaults = [], $workId = 0) $form->addHtml(''); - Skill::addSkillsToForm($form, ITEM_TYPE_STUDENT_PUBLICATION, $workId); + Skill::addSkillsToForm($form, api_get_course_int_id(), api_get_session_id(), ITEM_TYPE_STUDENT_PUBLICATION, $workId); if (!empty($defaults)) { $form->setDefaults($defaults);