From c213a51f83f5f7f970ca93fc42edb70148ea9195 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Loguercio?= Date: Wed, 18 May 2016 20:03:03 -0500 Subject: [PATCH] Added Badge Assignment to Users - Refs BT#10651 --- main/badge/assign.php | 183 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 183 insertions(+) create mode 100644 main/badge/assign.php diff --git a/main/badge/assign.php b/main/badge/assign.php new file mode 100644 index 0000000000..078d8bea27 --- /dev/null +++ b/main/badge/assign.php @@ -0,0 +1,183 @@ + + * @package chamilo.badge + */ + +use \Chamilo\CoreBundle\Entity\Skill; +use \Chamilo\CoreBundle\Entity\SkillRelUser; + +require_once '../inc/global.inc.php'; + +if (!api_is_platform_admin(false, true)) { + api_not_allowed(true); +} + +if (!isset($_REQUEST['user'])) { + api_not_allowed(true); +} + +$entityManager = Database::getManager(); +$skillRepo = $entityManager->getRepository('ChamiloCoreBundle:Skill'); +$skillRelSkill = $entityManager->getRepository('ChamiloCoreBundle:SkillRelSkill'); +$skillLevelRepo = $entityManager->getRepository('ChamiloSkillBundle:Level'); +$skillUserRepo = $entityManager->getRepository('ChamiloCoreBundle:SkillRelUser'); +$user = $entityManager->find('ChamiloUserBundle:User', $_REQUEST['user']); + +if (!$user) { + Display::addFlash( + Display::return_message(get_lang('NoUser'), 'error') + ); + + header('Location: ' . api_get_path(WEB_PATH)); + exit; +} + +$skills = $skillRepo->findBy([ + 'status' => Skill::STATUS_ENABLED +]); + +$url = api_get_path(WEB_CODE_PATH)."badge/assign.php?user=".$_REQUEST['user']."&id="; + +$htmlHeadXtra[] = '' + . ''; + +$skillsOptions = []; +$acquiredLevel = []; +$formDefaultValues = []; + +foreach ($skills as $skill) { + $skillsOptions[$skill->getId()] = $skill->getName(); +} + +$skillId = isset($_REQUEST['id']) ? intval($_REQUEST['id']) : key($skillsOptions); + +$profile = $skillRepo->find($skillId)->getProfile(); + +if (!$profile) { + + $skillRelSkill = new SkillRelSkill(); + $parents = $skillRelSkill->get_skill_parents($skillId); + + krsort($parents); + + foreach ($parents as $parent) { + $skillParentId = $parent['skill_id']; + $profile = $skillRepo->find($skillParentId)->getProfile(); + + if ($profile) { + break; + } + + if (!$profile && $parent['parent_id'] == 0) { + $profile = $skillLevelRepo->findAll(); + $profile = isset($profile[0]) ? $profile[0] : false; + } + } +} + +if ($profile) { + + $profileId = $profile->getId(); + + $levels = $skillLevelRepo->findBy([ + 'profile' => $profileId + ]); + + foreach ($levels as $level) { + $profileLevels[$level->getPosition()][$level->getId()] = $level->getName(); + } + + ksort($profileLevels); // Sort the array by Position. + + foreach ($profileLevels as $profileLevel) { + $profileId = key($profileLevel); + $acquiredLevel[$profileId] = $profileLevel[$profileId]; + } + +} + +$formDefaultValues = ['skill' => $skillId]; + +$form = new FormValidator('assign_skill'); +$form->addText('user_name', get_lang('UserName'), false); +$form->addSelect('skill', get_lang('Skill'), $skillsOptions, ['id' => 'skill']); +$form->addHidden('user', $user->getId()); +$form->addHidden('id', $skillId); +$form->addRule('skill', get_lang('ThisFieldIsRequired'), 'required'); +$form->addSelect('acquired_level', get_lang('AcquiredLevel'), $acquiredLevel); +$form->addRule('acquired_level', get_lang('ThisFieldIsRequired'), 'required'); +$form->addTextarea('argumentation', get_lang('Argumentation'), ['rows' => 6]); +$form->applyFilter('argumentation', 'trim'); +$form->addButtonSave(get_lang('Save')); +$form->setDefaults($formDefaultValues); + +if ($form->validate()) { + $values = $form->exportValues(); + + $skill = $skillRepo->find($values['skill']); + + if (!$skill) { + Display::addFlash( + Display::return_message(get_lang('SkillNotFound'), 'error') + ); + + header('Location: ' . api_get_self() . '?' . http_build_query(['user' => $user->getId()])); + exit; + } + + if ($user->hasSkill($skill)) { + Display::addFlash( + Display::return_message( + sprintf(get_lang('TheUserXHasAlreadyAchievedTheSkillY'), $user->getCompleteName(), $skill->getName()), + 'warning' + ) + ); + + header('Location: ' . api_get_self() . '?' . http_build_query(['user' => $user->getId()])); + exit; + } + + $skillUser = new SkillRelUser(); + $skillUser->setUser($user); + $skillUser->setSkill($skill); + $level = $skillLevelRepo->find(intval($values['acquired_level'])); + $skillUser->setAcquiredLevel($level); + $skillUser->setArgumentation($values['argumentation']); + $skillUser->setArgumentationAuthorId(api_get_user_id()); + $skillUser->setAcquiredSkillAt(new DateTime()); + $skillUser->setAssignedBy(0); + + $entityManager->persist($skillUser); + $entityManager->flush(); + + Display::addFlash( + Display::return_message( + sprintf(get_lang('SkillXAssignedToUserY'), $skill->getName(), $user->getCompleteName()), + 'success' + ) + ); + + header('Location: ' . api_get_path(WEB_PATH) . "badge/{$skillUser->getId()}"); + exit; +} + +$form->setDefaults(['user_name' => $user->getCompleteName()]); +$form->freeze(['user_name']); + +//View +$template = new Template(''); +$template->assign('header', get_lang('AssignSkill')); +$template->assign('content', $form->returnForm()); +$template->display_one_col_template(); \ No newline at end of file