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();
$visibility = $course['visibility'];
if ($allowSkillRelItem) {
/*if ($allowSkillRelItem) {
$result = Skill::saveSkillsToCourseFromForm($form);
}
}*/
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->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->addButtonCreate(get_lang('Save'));

@ -82,7 +82,7 @@ if (Gradebook::is_active()) {
);
$form->applyFilter('attendance_weight', 'html_filter');
$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->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->addElements(

@ -215,7 +215,7 @@ if (api_is_allowed_to_edit(null, true)) {
$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)) {
$defaults['thread_qualify_gradebook'] = $gradeThisThread;

@ -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') {

@ -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);

@ -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 = '&nbsp;'.Display::badge($count, 'info');
$skillRelItemCount = $skillRelItemRepo->count(
['skill' => $skillId, 'courseId' => $courseId, 'sessionId' => $sessionId]
);
if (!empty($skillRelItemCount)) {
$countLabel = '&nbsp;'.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.
*

@ -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', '</div>');

@ -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'));

@ -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 />');

@ -5626,7 +5626,7 @@ function getFormWork($form, $defaults = [], $workId = 0)
$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)) {
$form->setDefaults($defaults);

Loading…
Cancel
Save