Skills: rework skills form #13334

pull/4056/head
Julio 4 years ago
parent 9090375f46
commit ee7f7240bf
  1. 4
      main/admin/course_edit.php
  2. 2
      main/attendance/attendance_add.php
  3. 2
      main/attendance/attendance_edit.php
  4. 2
      main/exercise/exercise.class.php
  5. 2
      main/forum/editthread.php
  6. 2
      main/forum/forumfunction.inc.php
  7. 2
      main/inc/lib/link.lib.php
  8. 192
      main/inc/lib/skill.lib.php
  9. 2
      main/lp/lp_add.php
  10. 2
      main/lp/lp_edit.php
  11. 2
      main/survey/create_new_survey.php
  12. 2
      main/work/work.lib.php

@ -353,9 +353,9 @@ if ($form->validate()) {
$course = $form->getSubmitValues(); $course = $form->getSubmitValues();
$visibility = $course['visibility']; $visibility = $course['visibility'];
if ($allowSkillRelItem) { /*if ($allowSkillRelItem) {
$result = Skill::saveSkillsToCourseFromForm($form); $result = Skill::saveSkillsToCourseFromForm($form);
} }*/
global $_configuration; global $_configuration;

@ -67,7 +67,7 @@ if ((api_get_session_id() != 0 && Gradebook::is_active()) || api_get_session_id(
); );
$form->applyFilter('attendance_weight', 'html_filter'); $form->applyFilter('attendance_weight', 'html_filter');
$form->addElement('html', '</div>'); $form->addElement('html', '</div>');
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', '</div>'); $form->addElement('html', '</div>');
} }
$form->addButtonCreate(get_lang('Save')); $form->addButtonCreate(get_lang('Save'));

@ -82,7 +82,7 @@ if (Gradebook::is_active()) {
); );
$form->applyFilter('attendance_weight', 'html_filter'); $form->applyFilter('attendance_weight', 'html_filter');
$form->addElement('html', '</div>'); $form->addElement('html', '</div>');
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', '</div>'); $form->addElement('html', '</div>');
} }
$form->addButtonUpdate(get_lang('Save')); $form->addButtonUpdate(get_lang('Save'));

@ -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 = new ExtraField('exercise');
$extraField->addElements( $extraField->addElements(

@ -215,7 +215,7 @@ if (api_is_allowed_to_edit(null, true)) {
$form->addElement('html', '</div>'); $form->addElement('html', '</div>');
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)) { if (!empty($threadData)) {
$defaults['thread_qualify_gradebook'] = $gradeThisThread; $defaults['thread_qualify_gradebook'] = $gradeThisThread;

@ -3276,7 +3276,7 @@ function show_add_post_form($current_forum, $action, $form_values = [], $showPre
} }
if ($action === 'newthread') { 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') { if (api_is_allowed_to_edit(null, true) && $action == 'newthread') {

@ -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->addHidden('lp_id', $lpId);
$form->addButtonSave(get_lang('SaveLink'), 'submitLink'); $form->addButtonSave(get_lang('SaveLink'), 'submitLink');
$form->setDefaults($defaults); $form->setDefaults($defaults);

@ -2585,6 +2585,8 @@ class Skill extends Model
/** /**
* Add skills select ajax for an item (exercise, lp). * Add skills select ajax for an item (exercise, lp).
* *
* @param int $courseId
* @param int $sessionId
* @param int $typeId see ITEM_TYPE_* constants * @param int $typeId see ITEM_TYPE_* constants
* @param int $itemId * @param int $itemId
* *
@ -2592,28 +2594,38 @@ class Skill extends Model
* *
* @return array * @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'); $allowSkillInTools = api_get_configuration_value('allow_skill_rel_items');
if (!$allowSkillInTools) { if (!$allowSkillInTools) {
return []; return [];
} }
$skillList = [];
if (!empty($itemId)) {
$em = Database::getManager(); $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)) {
$items = $em->getRepository('ChamiloSkillBundle:SkillRelItem')->findBy( $items = $em->getRepository('ChamiloSkillBundle:SkillRelItem')->findBy(
['itemId' => $itemId, 'itemType' => $typeId] ['itemId' => $itemId, 'itemType' => $typeId]
); );
/** @var SkillRelItem $skillRelItem */ /** @var SkillRelItem $skillRelItem */
foreach ($items as $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) public static function setSkillsToCourse(FormValidator $form, $courseId, $sessionId = 0)
{ {
$courseId = (int) $courseId; $courseId = (int) $courseId;
@ -2865,27 +2809,26 @@ class Skill extends Model
$skillRelCourseRepo = $em->getRepository('ChamiloSkillBundle:SkillRelCourse'); $skillRelCourseRepo = $em->getRepository('ChamiloSkillBundle:SkillRelCourse');
$items = $skillRelCourseRepo->findBy(['course' => $courseId, 'session' => $sessionId]); $items = $skillRelCourseRepo->findBy(['course' => $courseId, 'session' => $sessionId]);
$selectedSkills = []; $skills = [];
/** @var \Chamilo\SkillBundle\Entity\SkillRelCourse $skillRelCourse */ /** @var \Chamilo\SkillBundle\Entity\SkillRelCourse $skillRelCourse */
foreach ($items as $skillRelCourse) { foreach ($items as $skillRelCourse) {
$skillId = $skillRelCourse->getSkill()->getId(); $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(); $em = Database::getManager();
$skillRelCourseRepo = $em->getRepository('ChamiloSkillBundle:SkillRelCourse'); $skillRelCourseRepo = $em->getRepository('ChamiloSkillBundle:SkillRelCourse');
$skills = $em->getRepository('ChamiloCoreBundle:Skill')->findAll(); $skillRelItemRepo = $em->getRepository('ChamiloSkillBundle:SkillRelItem');
/*foreach ($selectedSkills as $skillId) { //$skills = $em->getRepository('ChamiloCoreBundle:Skill')->findAll();
$skillCountList[$skillId] = $skillRelCourseRepo->count(['skill' => $skillId]);
}*/
$skillList = []; $skillList = [];
/** @var \Chamilo\CoreBundle\Entity\Skill $skill */ /** @var \Chamilo\CoreBundle\Entity\Skill $skill */
@ -2900,10 +2843,13 @@ class Skill extends Model
$elements = []; $elements = [];
foreach ($skillList as $skillId => $skill) { foreach ($skillList as $skillId => $skill) {
$countLabel = ''; $countLabel = '';
$count = $skillRelCourseRepo->count(['skill' => $skillId]); $skillRelItemCount = $skillRelItemRepo->count(
if (!empty($count)) { ['skill' => $skillId, 'courseId' => $courseId, 'sessionId' => $sessionId]
$countLabel = '&nbsp;'.Display::badge($count, 'info'); );
if (!empty($skillRelItemCount)) {
$countLabel = '&nbsp;'.Display::badge($skillRelItemCount, 'info');
} }
$element = $form->createElement( $element = $form->createElement(
'checkbox', 'checkbox',
"skills[$skillId]", "skills[$skillId]",
@ -2917,7 +2863,8 @@ class Skill extends Model
$elements[] = $element; $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)) { if (!empty($items)) {
$skillRelItemRepo = $em->getRepository('ChamiloSkillBundle:SkillRelItem');
/** @var SkillRelCourse $item */ /** @var SkillRelCourse $item */
foreach ($items as $item) { foreach ($items as $item) {
if (!in_array($item->getSkill()->getId(), $skills)) { if (!in_array($item->getSkill()->getId(), $skills)) {
$em->remove($item); $em->remove($item);
} }
$items = $skillRelItemRepo->findBy(
['itemId' => $itemId, 'itemType' => $typeId]
);
} }
$em->flush(); $em->flush();
} }
@ -3007,6 +2959,72 @@ class Skill extends Model
return true; 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. * Get the icon (badge image) URL.
* *

@ -171,7 +171,7 @@ if ($subscriptionSettings['allow_add_users_to_lp']) {
$extraField = new ExtraField('lp'); $extraField = new ExtraField('lp');
$extra = $extraField->addElements($form, 0, ['lp_icon']); $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', '</div>'); $form->addElement('html', '</div>');

@ -285,7 +285,7 @@ if ($form->hasElement('extra_authors')) {
$author->setOptions($options); $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 // Submit button
$form->addButtonSave(get_lang('SaveLPSettings')); $form->addButtonSave(get_lang('SaveLPSettings'));

@ -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', '</div><br />'); $form->addElement('html', '</div><br />');

@ -5626,7 +5626,7 @@ function getFormWork($form, $defaults = [], $workId = 0)
$form->addHtml('</div>'); $form->addHtml('</div>');
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)) { if (!empty($defaults)) {
$form->setDefaults($defaults); $form->setDefaults($defaults);

Loading…
Cancel
Save