diff --git a/main/badge/assign.php b/main/badge/assign.php
index fad371f927..f3514bba77 100644
--- a/main/badge/assign.php
+++ b/main/badge/assign.php
@@ -23,36 +23,23 @@ if (empty($userId)) {
SkillManager::isAllow($userId);
+$user = api_get_user_entity($userId);
+
+if (!$user) {
+ api_not_allowed(true);
+}
+
$entityManager = Database::getManager();
+$skillManager = new SkillManager();
$skillRepo = $entityManager->getRepository('ChamiloCoreBundle:Skill');
$skillRelSkill = $entityManager->getRepository('ChamiloCoreBundle:SkillRelSkill');
$skillLevelRepo = $entityManager->getRepository('ChamiloSkillBundle:Level');
$skillUserRepo = $entityManager->getRepository('ChamiloCoreBundle:SkillRelUser');
-$user = api_get_user_entity($userId);
-
-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='.$userId.'&id=';
-
-$htmlHeadXtra[] = '';
-
$skillsOptions = [];
$acquiredLevel = [];
$formDefaultValues = [];
@@ -61,8 +48,16 @@ foreach ($skills as $skill) {
$skillsOptions[$skill->getId()] = $skill->getName();
}
-$skillId = isset($_REQUEST['id']) ? intval($_REQUEST['id']) : key($skillsOptions);
-$profile = $skillRepo->find($skillId)->getProfile();
+$skillIdFromGet = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : 0;
+$currentLevel = isset($_REQUEST['current']) ? (int) str_replace('assign_skill_sub_skill_id_', '', $_REQUEST['current']) : 0;
+$subSkillList = isset($_REQUEST['sub_skill_list']) ? explode(',', $_REQUEST['sub_skill_list']) : [];
+
+$skillId = isset($_REQUEST['id']) ? (int) $_REQUEST['id'] : key($skillsOptions);
+$skill = $skillRepo->find($skillId);
+$profile = false;
+if ($skill) {
+ $profile = $skill->getProfile();
+}
if (!$profile) {
$skillRelSkill = new SkillRelSkill();
@@ -102,7 +97,6 @@ if ($profile) {
$profileId = key($profileLevel);
$acquiredLevel[$profileId] = $profileLevel[$profileId];
}
-
}
$formDefaultValues = ['skill' => $skillId];
@@ -111,6 +105,55 @@ $form = new FormValidator('assign_skill');
$form->addHeader(get_lang('AssignSkill'));
$form->addText('user_name', get_lang('UserName'), false);
$form->addSelect('skill', get_lang('Skill'), $skillsOptions, ['id' => 'skill']);
+
+$newSubSkillList = [];
+if (!empty($skillIdFromGet)) {
+ if (empty($subSkillList)) {
+ $subSkillList[] = $skillIdFromGet;
+ }
+ $subSkillList = array_unique($subSkillList);
+ $oldSkill = $skillRepo->find($skillIdFromGet);
+ $counter = 0;
+ foreach ($subSkillList as $subSkillId) {
+ if ($skillIdFromGet == $subSkillId) {
+ //continue;
+ }
+
+ if (!empty($currentLevel)) {
+ if ($counter == $currentLevel) {
+ break;
+ }
+ }
+
+ $children = $skillManager->getChildren($subSkillId);
+
+ /*$oldSkill = $skillManager->getDirectParents($subSkillId);
+ $oldSkill = $oldSkill[0];*/
+
+ if (isset($subSkillList[$counter-1])) {
+ $oldSkill = $skillRepo->find($subSkillList[$counter]);
+ }
+
+ $skillsOptions = [$oldSkill->getId() => ' -- '.$oldSkill->getName()];
+ foreach ($children as $child) {
+ $skillsOptions[$child['id']] = $child['data']['name'];
+ }
+ $form->addSelect('sub_skill_id_'.$counter, get_lang('SubSkill'), $skillsOptions, ['class' => 'sub_skill']);
+
+ if (isset($subSkillList[$counter+1])) {
+ $nextSkill = $skillRepo->find($subSkillList[$counter+1]);
+ $formDefaultValues['sub_skill_id_'.$counter] = $nextSkill->getId();
+ }
+ $newSubSkillList[] = $subSkillId;
+ $counter++;
+ }
+ $subSkillList = $newSubSkillList;
+}
+var_dump($formDefaultValues);
+
+$subSkillListToString = implode(',', $subSkillList);
+$form->addHidden('sub_skill_list', $subSkillListToString);
+
$form->addHidden('user', $user->getId());
$form->addHidden('id', $skillId);
$form->addRule('skill', get_lang('ThisFieldIsRequired'), 'required');
@@ -223,6 +266,19 @@ if (api_is_drh()) {
);
}
+$url = api_get_path(WEB_CODE_PATH).'badge/assign.php?user='.$userId.'&id='.$skillIdFromGet;
+
+$htmlHeadXtra[] = '';
+
$template = new Template(get_lang('AddSkill'));
$template->assign('content', $form->returnForm());
$template->display_one_col_template();
diff --git a/main/inc/lib/skill.lib.php b/main/inc/lib/skill.lib.php
index fe092a2f17..9b9221bc14 100755
--- a/main/inc/lib/skill.lib.php
+++ b/main/inc/lib/skill.lib.php
@@ -766,12 +766,12 @@ class Skill extends Model
*/
public function getChildren($skill_id, $load_user_data = false)
{
- $skill_rel_skill = new SkillRelSkill();
+ $skillRelSkill = new SkillRelSkill();
if ($load_user_data) {
$user_id = api_get_user_id();
- $skills = $skill_rel_skill->getChildren($skill_id, true, $user_id);
+ $skills = $skillRelSkill->getChildren($skill_id, true, $user_id);
} else {
- $skills = $skill_rel_skill->getChildren($skill_id);
+ $skills = $skillRelSkill->getChildren($skill_id);
}
return $skills;
}
@@ -783,8 +783,8 @@ class Skill extends Model
*/
public function getAllChildren($skillId)
{
- $skill_rel_skill = new SkillRelSkill();
- $children = $skill_rel_skill->getChildren($skillId);
+ $skillRelSkill = new SkillRelSkill();
+ $children = $skillRelSkill->getChildren($skillId);
foreach ($children as $child) {
$subChildren = $this->getAllChildren($child['skill_id']);
}
@@ -799,10 +799,10 @@ class Skill extends Model
/**
* Gets all parents from from the wanted skill
*/
- public function get_parents($skill_id)
+ public function get_parents($skillId)
{
- $skill_rel_skill = new SkillRelSkill();
- $skills = $skill_rel_skill->getSkillParents($skill_id, true);
+ $skillRelSkill = new SkillRelSkill();
+ $skills = $skillRelSkill->getSkillParents($skillId, true);
foreach ($skills as &$skill) {
$skill['data'] = self::get($skill['skill_id']);
}
@@ -811,14 +811,16 @@ class Skill extends Model
/**
* All direct parents
+ * @param int $skillId
+ * @return int
*/
- public function getDirectParents($skill_id)
+ public function getDirectParents($skillId)
{
- $skill_rel_skill = new SkillRelSkill();
- $skills = $skill_rel_skill->getDirectParents($skill_id, true);
+ $skillRelSkill = new SkillRelSkill();
+ $skills = $skillRelSkill->getDirectParents($skillId, true);
foreach ($skills as &$skill) {
$skill['data'] = self::get($skill['skill_id']);
- $skill_info2 = $skill_rel_skill->getSkillInfo($skill['skill_id']);
+ $skill_info2 = $skillRelSkill->getSkillInfo($skill['skill_id']);
$skill['data']['parent_id'] = $skill_info2['parent_id'];
}
return $skills;
@@ -839,15 +841,15 @@ class Skill extends Model
$params['parent_id'] = array($params['parent_id']);
}
- $skill_rel_skill = new SkillRelSkill();
- $skill_rel_gradebook = new SkillRelGradebook();
+ $skillRelSkill = new SkillRelSkill();
+ $skillRelGradebook = new SkillRelGradebook();
// Saving name, description
$skill_id = $this->save($params);
if ($skill_id) {
//Saving skill_rel_skill (parent_id, relation_type)
foreach ($params['parent_id'] as $parent_id) {
- $relation_exists = $skill_rel_skill->relationExists($skill_id, $parent_id);
+ $relation_exists = $skillRelSkill->relationExists($skill_id, $parent_id);
if (!$relation_exists) {
$attributes = array(
'skill_id' => $skill_id,
@@ -855,7 +857,7 @@ class Skill extends Model
'relation_type' => (isset($params['relation_type']) ? $params['relation_type'] : 0),
//'level' => $params['level'],
);
- $skill_rel_skill->save($attributes);
+ $skillRelSkill->save($attributes);
}
}
@@ -864,7 +866,7 @@ class Skill extends Model
$attributes = array();
$attributes['gradebook_id'] = $gradebook_id;
$attributes['skill_id'] = $skill_id;
- $skill_rel_gradebook->save($attributes);
+ $skillRelGradebook->save($attributes);
}
}
return $skill_id;
@@ -918,16 +920,16 @@ class Skill extends Model
{
/*$params = array('skill_id' => $skill_id);
- $skill_rel_skill = new SkillRelSkill();
- $skills = $skill_rel_skill->get_all(array('where'=>array('skill_id = ?' =>$skill_id)));
+ $skillRelSkill = new SkillRelSkill();
+ $skills = $skillRelSkill->get_all(array('where'=>array('skill_id = ?' =>$skill_id)));
$skill_rel_profile = new SkillRelProfile();
- $skill_rel_gradebook = new SkillRelGradebook();
+ $skillRelGradebook = new SkillRelGradebook();
$skill_rel_user = new SkillRelUser();
$this->delete($skill_id);
- $skill_rel_gradebook->delete($params);*/
+ $skillRelGradebook->delete($params);*/
}
/**
@@ -939,8 +941,8 @@ class Skill extends Model
if (!isset($params['parent_id'])) {
$params['parent_id'] = 1;
}
- $skill_rel_skill = new SkillRelSkill();
- $skill_rel_gradebook = new SkillRelGradebook();
+ $skillRelSkill = new SkillRelSkill();
+ $skillRelGradebook = new SkillRelGradebook();
//Saving name, description
$this->update($params);
@@ -955,7 +957,7 @@ class Skill extends Model
}
foreach ($params['parent_id'] as $parent_id) {
- $relation_exists = $skill_rel_skill->relationExists($skill_id, $parent_id);
+ $relation_exists = $skillRelSkill->relationExists($skill_id, $parent_id);
if (!$relation_exists) {
$attributes = array(
'skill_id' => $skill_id,
@@ -963,11 +965,11 @@ class Skill extends Model
'relation_type' => $params['relation_type'],
//'level' => $params['level'],
);
- $skill_rel_skill->updateBySkill($attributes);
+ $skillRelSkill->updateBySkill($attributes);
}
}
- $skill_rel_gradebook->updateGradeBookListBySkill(
+ $skillRelGradebook->updateGradeBookListBySkill(
$skill_id,
$params['gradebook_id']
);
@@ -1369,19 +1371,19 @@ class Skill extends Model
}
/**
- * @param int $skill_id
+ * @param int $skillId
* @return array
*/
- public function getCoursesBySkill($skill_id)
+ public function getCoursesBySkill($skillId)
{
- $skill_id = intval($skill_id);
+ $skillId = intval($skillId);
$sql = "SELECT c.title, c.code
FROM {$this->table_gradebook} g
INNER JOIN {$this->table_skill_rel_gradebook} sg
ON g.id = sg.gradebook_id
INNER JOIN {$this->table_course} c
ON c.code = g.course_code
- WHERE sg.skill_id = $skill_id
+ WHERE sg.skill_id = $skillId
AND (g.session_id IS NULL OR g.session_id = 0)";
$result = Database::query($sql);