table = Database::get_main_table(TABLE_MAIN_SKILL_REL_SKILL); $this->tableSkill = Database::get_main_table(TABLE_MAIN_SKILL); } /** * Gets an element. * * @param int $id * * @return array */ public function getSkillInfo($id) { $id = (int) $id; if (empty($id)) { return []; } $result = Database::select( '*', $this->table, ['where' => ['skill_id = ?' => $id]], 'first' ); return $result; } /** * @param int $skillId * @param bool $add_child_info * * @return array */ public function getSkillParents($skillId, $add_child_info = true) { $skillId = (int) $skillId; $sql = 'SELECT child.* FROM '.$this->table.' child LEFT JOIN '.$this->table.' parent ON child.parent_id = parent.skill_id WHERE child.skill_id = '.$skillId.' '; $result = Database::query($sql); $skill = Database::store_result($result, 'ASSOC'); $skill = isset($skill[0]) ? $skill[0] : null; $parents = []; if (!empty($skill)) { if (null != $skill['parent_id']) { $parents = self::getSkillParents($skill['parent_id']); } if ($add_child_info) { $parents[] = $skill; } } return $parents; } /** * @param int $skillId * * @return array */ public function getDirectParents($skillId) { $skillId = (int) $skillId; $sql = 'SELECT parent_id as skill_id FROM '.$this->table.' WHERE skill_id = '.$skillId; $result = Database::query($sql); $skill = Database::store_result($result, 'ASSOC'); $skill = isset($skill[0]) ? $skill[0] : null; $parents = []; if (!empty($skill)) { $parents[] = $skill; } return $parents; } /** * @param int $skill_id * @param bool $load_user_data * @param bool $user_id * * @return array */ public function getChildren( $skill_id, $load_user_data = false, $user_id = false, $order = '' ) { $skill_id = (int) $skill_id; $sql = 'SELECT parent.* FROM '.$this->tableSkill.' skill INNER JOIN '.$this->table.' parent ON parent.id = skill.id WHERE parent_id = '.$skill_id.' ORDER BY skill.title ASC'; $result = Database::query($sql); $skills = Database::store_result($result, 'ASSOC'); $skill_obj = new SkillModel(); $skill_rel_user = new SkillRelUserModel(); if ($load_user_data) { $passed_skills = $skill_rel_user->getUserSkills($user_id); $done_skills = []; foreach ($passed_skills as $done_skill) { $done_skills[] = $done_skill['skill_id']; } } if (!empty($skills)) { foreach ($skills as &$skill) { $skill['data'] = $skill_obj->get($skill['skill_id']); if (isset($skill['data']) && !empty($skill['data'])) { if (!empty($done_skills)) { $skill['data']['passed'] = 0; if (in_array($skill['skill_id'], $done_skills)) { $skill['data']['passed'] = 1; } } } else { $skill = null; } } } return $skills; } /** * @param array $params * * @return bool */ public function updateBySkill($params) { $result = Database::update( $this->table, $params, ['skill_id = ? ' => $params['skill_id']] ); if ($result) { return true; } return false; } /** * @param int $skill_id * @param int $parent_id * * @return bool */ public function relationExists($skill_id, $parent_id) { $result = $this->find( 'all', [ 'where' => [ 'skill_id = ? AND parent_id = ?' => [ $skill_id, $parent_id, ], ], ] ); if (!empty($result)) { return true; } return false; } }