|
|
|
|
@ -3,6 +3,8 @@ |
|
|
|
|
|
|
|
|
|
use Chamilo\UserBundle\Entity\User; |
|
|
|
|
use Chamilo\UserBundle\Entity\Repository\UserRepository; |
|
|
|
|
use Fhaculty\Graph\Vertex; |
|
|
|
|
use Fhaculty\Graph\Graph; |
|
|
|
|
use Chamilo\CoreBundle\Component\Utils\ChamiloApi; |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -98,7 +100,7 @@ class SkillProfile extends Model |
|
|
|
|
Database::delete( |
|
|
|
|
$this->table_rel_profile, |
|
|
|
|
array( |
|
|
|
|
'profile_id' => $id |
|
|
|
|
'profile_id' => $id, |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
@ -201,7 +203,7 @@ class SkillRelSkill extends Model |
|
|
|
|
*/ |
|
|
|
|
public function getSkillParents($skill_id, $add_child_info = true) |
|
|
|
|
{ |
|
|
|
|
$skill_id = (int) $skill_id; |
|
|
|
|
$skill_id = intval($skill_id); |
|
|
|
|
$sql = 'SELECT child.* FROM '.$this->table.' child |
|
|
|
|
LEFT JOIN '.$this->table.' parent |
|
|
|
|
ON child.parent_id = parent.skill_id |
|
|
|
|
@ -223,15 +225,15 @@ class SkillRelSkill extends Model |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param int $skill_id |
|
|
|
|
* @param int $skillId |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
public function getDirectParents($skill_id) |
|
|
|
|
public function getDirectParents($skillId) |
|
|
|
|
{ |
|
|
|
|
$skill_id = intval($skill_id); |
|
|
|
|
$skillId = (int) $skillId; |
|
|
|
|
$sql = 'SELECT parent_id as skill_id |
|
|
|
|
FROM '.$this->table.' |
|
|
|
|
WHERE skill_id = '.$skill_id.' '; |
|
|
|
|
WHERE skill_id = '.$skillId.' '; |
|
|
|
|
$result = Database::query($sql); |
|
|
|
|
$skill = Database::store_result($result, 'ASSOC'); |
|
|
|
|
$skill = isset($skill[0]) ? $skill[0] : null; |
|
|
|
|
@ -256,7 +258,7 @@ class SkillRelSkill extends Model |
|
|
|
|
$order = '' |
|
|
|
|
) { |
|
|
|
|
$skill_id = (int) $skill_id; |
|
|
|
|
$sql = 'SELECT skill.* FROM '.$this->tableSkill.' skill |
|
|
|
|
$sql = 'SELECT parent.* FROM '.$this->tableSkill.' skill |
|
|
|
|
INNER JOIN '.$this->table.' parent |
|
|
|
|
ON parent.id = skill.id |
|
|
|
|
WHERE parent_id = '.$skill_id.' |
|
|
|
|
@ -277,11 +279,11 @@ class SkillRelSkill extends Model |
|
|
|
|
|
|
|
|
|
if (!empty($skills)) { |
|
|
|
|
foreach ($skills as &$skill) { |
|
|
|
|
$skill['data'] = $skill_obj->get($skill['id']); |
|
|
|
|
$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['id'], $done_skills)) { |
|
|
|
|
if (in_array($skill['skill_id'], $done_skills)) { |
|
|
|
|
$skill['data']['passed'] = 1; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -325,9 +327,9 @@ class SkillRelSkill extends Model |
|
|
|
|
'where' => array( |
|
|
|
|
'skill_id = ? AND parent_id = ?' => array( |
|
|
|
|
$skill_id, |
|
|
|
|
$parent_id |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
$parent_id, |
|
|
|
|
), |
|
|
|
|
), |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
@ -366,9 +368,9 @@ class SkillRelGradebook extends Model |
|
|
|
|
'where' => array( |
|
|
|
|
'gradebook_id = ? AND skill_id = ?' => array( |
|
|
|
|
$gradebookId, |
|
|
|
|
$skillId |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
$skillId, |
|
|
|
|
), |
|
|
|
|
), |
|
|
|
|
) |
|
|
|
|
); |
|
|
|
|
if (!empty($result)) { |
|
|
|
|
@ -392,9 +394,9 @@ class SkillRelGradebook extends Model |
|
|
|
|
'where' => array( |
|
|
|
|
'skill_id = ? AND gradebook_id = ? ' => array( |
|
|
|
|
$skill_id, |
|
|
|
|
$gradebookId |
|
|
|
|
) |
|
|
|
|
) |
|
|
|
|
$gradebookId, |
|
|
|
|
), |
|
|
|
|
), |
|
|
|
|
), |
|
|
|
|
'first' |
|
|
|
|
); |
|
|
|
|
@ -444,7 +446,7 @@ class SkillRelGradebook extends Model |
|
|
|
|
foreach ($gradebooks_to_add as $gradebook_id) { |
|
|
|
|
$attributes = array( |
|
|
|
|
'skill_id' => $skill_id, |
|
|
|
|
'gradebook_id' => $gradebook_id |
|
|
|
|
'gradebook_id' => $gradebook_id, |
|
|
|
|
); |
|
|
|
|
$this->save($attributes); |
|
|
|
|
} |
|
|
|
|
@ -533,7 +535,7 @@ class SkillRelUser extends Model |
|
|
|
|
$courseId = intval($courseId); |
|
|
|
|
$sessionId = $sessionId ? intval($sessionId) : null; |
|
|
|
|
$whereConditions = array( |
|
|
|
|
'user_id = ? ' => intval($userId) |
|
|
|
|
'user_id = ? ' => intval($userId), |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if ($courseId > 0) { |
|
|
|
|
@ -545,7 +547,7 @@ class SkillRelUser extends Model |
|
|
|
|
'skill_id', |
|
|
|
|
$this->table, |
|
|
|
|
array( |
|
|
|
|
'where' => $whereConditions |
|
|
|
|
'where' => $whereConditions, |
|
|
|
|
), |
|
|
|
|
'all' |
|
|
|
|
); |
|
|
|
|
@ -567,12 +569,12 @@ class SkillRelUser extends Model |
|
|
|
|
intval($userId), |
|
|
|
|
intval($skillId), |
|
|
|
|
intval($courseId), |
|
|
|
|
$sessionId ? intval($sessionId) : null |
|
|
|
|
) |
|
|
|
|
$sessionId ? intval($sessionId) : null, |
|
|
|
|
), |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
return Database::select('*', $this->table, array( |
|
|
|
|
'where' => $where |
|
|
|
|
'where' => $where, |
|
|
|
|
), 'first'); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -590,7 +592,7 @@ class Skill extends Model |
|
|
|
|
'access_url_id', |
|
|
|
|
'short_code', |
|
|
|
|
'icon', |
|
|
|
|
'criteria' |
|
|
|
|
'criteria', |
|
|
|
|
); |
|
|
|
|
public $required = array('name'); |
|
|
|
|
|
|
|
|
|
@ -629,6 +631,10 @@ class Skill extends Model |
|
|
|
|
public function get($id) |
|
|
|
|
{ |
|
|
|
|
$result = parent::get($id); |
|
|
|
|
if (empty($result)) { |
|
|
|
|
return []; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$path = api_get_path(WEB_UPLOAD_PATH).'badges/'; |
|
|
|
|
|
|
|
|
|
if (!empty($result['icon'])) { |
|
|
|
|
@ -654,7 +660,6 @@ class Skill extends Model |
|
|
|
|
$result['icon_big'] = $iconSmall; |
|
|
|
|
$result['icon_small'] = $iconBig; |
|
|
|
|
$result['icon_mini'] = $iconMini; |
|
|
|
|
|
|
|
|
|
$result['img_mini'] = Display::img($iconBig, $result['name'], ['width' => ICON_SIZE_MEDIUM]); |
|
|
|
|
$result['img_big'] = Display::img($iconBig, $result['name']); |
|
|
|
|
$result['img_small'] = Display::img($iconSmall, $result['name']); |
|
|
|
|
@ -688,6 +693,9 @@ class Skill extends Model |
|
|
|
|
} |
|
|
|
|
$html .= '<ul class="list-unstyled list-badges">'; |
|
|
|
|
foreach ($skills as $skill) { |
|
|
|
|
if (isset($skill['data'])) { |
|
|
|
|
$skill = $skill['data']; |
|
|
|
|
} |
|
|
|
|
$html .= '<li class="thumbnail">'; |
|
|
|
|
$item = $skill[$imageSize]; |
|
|
|
|
$item .= '<div class="caption"> |
|
|
|
|
@ -709,6 +717,41 @@ class Skill extends Model |
|
|
|
|
return $html; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param $skills |
|
|
|
|
* @param string $imageSize |
|
|
|
|
* @param string $style |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public function processSkillListSimple($skills, $imageSize = '', $style = '') |
|
|
|
|
{ |
|
|
|
|
if (empty($skills)) { |
|
|
|
|
return ''; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (empty($imageSize)) { |
|
|
|
|
$imageSize = 'img_small'; |
|
|
|
|
} else { |
|
|
|
|
$imageSize = "img_$imageSize"; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$html = ''; |
|
|
|
|
foreach ($skills as $skill) { |
|
|
|
|
if (isset($skill['data'])) { |
|
|
|
|
$skill = $skill['data']; |
|
|
|
|
} |
|
|
|
|
$item = $skill[$imageSize]; |
|
|
|
|
$item .= $skill['name']; |
|
|
|
|
if (isset($skill['url'])) { |
|
|
|
|
$html .= Display::url($item, $skill['url'], ['target' => '_blank', 'style' => $style]); |
|
|
|
|
} else { |
|
|
|
|
$html .= Display::url($item, '#', ['target' => '_blank', 'style' => $style]); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $html; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param int $id |
|
|
|
|
* @return array |
|
|
|
|
@ -888,7 +931,7 @@ class Skill extends Model |
|
|
|
|
$skillRelSkill = new SkillRelSkill(); |
|
|
|
|
$skills = $skillRelSkill->getSkillParents($skillId, true); |
|
|
|
|
foreach ($skills as &$skill) { |
|
|
|
|
$skill['data'] = self::get($skill['skill_id']); |
|
|
|
|
$skill['data'] = $this->get($skill['skill_id']); |
|
|
|
|
} |
|
|
|
|
return $skills; |
|
|
|
|
} |
|
|
|
|
@ -902,12 +945,22 @@ class Skill extends Model |
|
|
|
|
{ |
|
|
|
|
$skillRelSkill = new SkillRelSkill(); |
|
|
|
|
$skills = $skillRelSkill->getDirectParents($skillId, true); |
|
|
|
|
foreach ($skills as &$skill) { |
|
|
|
|
$skill['data'] = self::get($skill['skill_id']); |
|
|
|
|
$skill_info2 = $skillRelSkill->getSkillInfo($skill['skill_id']); |
|
|
|
|
$skill['data']['parent_id'] = $skill_info2['parent_id']; |
|
|
|
|
if (!empty($skills)) { |
|
|
|
|
foreach ($skills as &$skill) { |
|
|
|
|
$skillData = $this->get($skill['skill_id']); |
|
|
|
|
if (empty($skillData)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
$skill['data'] = $skillData; |
|
|
|
|
$skill_info2 = $skillRelSkill->getSkillInfo($skill['skill_id']); |
|
|
|
|
$parentId = isset($skill_info2['parent_id']) ? isset($skill_info2['parent_id']) : 0; |
|
|
|
|
$skill['data']['parent_id'] = $parentId; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $skills; |
|
|
|
|
} |
|
|
|
|
return $skills; |
|
|
|
|
|
|
|
|
|
return []; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
@ -990,7 +1043,7 @@ class Skill extends Model |
|
|
|
|
'skill_id' => $skill_gradebook['skill_id'], |
|
|
|
|
'acquired_skill_at' => api_get_utc_datetime(), |
|
|
|
|
'course_id' => intval($courseId), |
|
|
|
|
'session_id' => $sessionId ? intval($sessionId) : null |
|
|
|
|
'session_id' => $sessionId ? intval($sessionId) : null, |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
$skill_rel_user->save($params); |
|
|
|
|
@ -1069,7 +1122,9 @@ class Skill extends Model |
|
|
|
|
* Get user's skills |
|
|
|
|
* |
|
|
|
|
* @param int $userId User's id |
|
|
|
|
* @param bool $get_skill_data |
|
|
|
|
* @param bool $getSkillData |
|
|
|
|
* @param int $courseId |
|
|
|
|
* @param int $sessionId |
|
|
|
|
* |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
@ -1104,7 +1159,6 @@ class Skill extends Model |
|
|
|
|
|
|
|
|
|
$result = Database::query($sql); |
|
|
|
|
$skills = Database::store_result($result, 'ASSOC'); |
|
|
|
|
$uploadPath = api_get_path(WEB_UPLOAD_PATH); |
|
|
|
|
$skillList = array(); |
|
|
|
|
if (!empty($skills)) { |
|
|
|
|
foreach ($skills as $skill) { |
|
|
|
|
@ -1121,30 +1175,67 @@ class Skill extends Model |
|
|
|
|
return $skillList; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param Vertex $vertex |
|
|
|
|
* @return string |
|
|
|
|
*/ |
|
|
|
|
public function processVertex(Vertex $vertex, $skills = []) |
|
|
|
|
{ |
|
|
|
|
$subTable = ''; |
|
|
|
|
if ($vertex->getVerticesEdgeTo()->count() > 0) { |
|
|
|
|
$subTable .= '<ul>'; |
|
|
|
|
foreach ($vertex->getVerticesEdgeTo() as $subVertex) { |
|
|
|
|
$data = $subVertex->getAttribute('graphviz.data'); |
|
|
|
|
|
|
|
|
|
$passed = in_array($data['id'], array_keys($skills)); |
|
|
|
|
$transparency = ''; |
|
|
|
|
if ($passed === false) { |
|
|
|
|
// @todo use css class |
|
|
|
|
$transparency = 'opacity: 0.4; filter: alpha(opacity=40);'; |
|
|
|
|
} |
|
|
|
|
$label = $this->processSkillListSimple([$data], 'mini', $transparency); |
|
|
|
|
|
|
|
|
|
/*$subTable .= '<div style="float:left; margin-right:5px; ">'; |
|
|
|
|
$subTable .= '<div style="'.$transparency.'">'; |
|
|
|
|
$subTable .= $label; |
|
|
|
|
$subTable .= '</div>';*/ |
|
|
|
|
|
|
|
|
|
$subTable .= '<li>'.$label; |
|
|
|
|
|
|
|
|
|
$subTable .= $this->processVertex($subVertex, $skills); |
|
|
|
|
|
|
|
|
|
$subTable .= '</li>'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$subTable .= '</ul>'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $subTable; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param int $userId |
|
|
|
|
* @param int $courseId |
|
|
|
|
* @param int $sessionId |
|
|
|
|
* |
|
|
|
|
* @return string |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
public function getUserSkillsTable($userId, $courseId = 0, $sessionId = 0) |
|
|
|
|
{ |
|
|
|
|
$skills = $this->getUserSkills($userId, true, $courseId, $sessionId); |
|
|
|
|
|
|
|
|
|
$courseTempList = []; |
|
|
|
|
$skillParents = []; |
|
|
|
|
$tableRows = []; |
|
|
|
|
$skillParents = []; |
|
|
|
|
foreach ($skills as $resultData) { |
|
|
|
|
$parents = $this->get_parents($resultData['id']); |
|
|
|
|
foreach ($parents as $parentData) { |
|
|
|
|
if ($parentData['id'] == 1 || $parentData['parent_id'] == 1) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
$skillParents[$parentData['id']]['passed'] = in_array($parentData['id'], array_keys($skills)); |
|
|
|
|
$skillParents[$parentData['id']][] = $resultData; |
|
|
|
|
$parentData['passed'] = in_array($parentData['id'], array_keys($skills)); |
|
|
|
|
$skillParents[$resultData['id']][$parentData['id']] = $parentData; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach ($skills as $resultData) { |
|
|
|
|
$courseId = $resultData['course_id']; |
|
|
|
|
if (!empty($courseId)) { |
|
|
|
|
if (isset($courseTempList[$courseId])) { |
|
|
|
|
@ -1157,10 +1248,10 @@ class Skill extends Model |
|
|
|
|
|
|
|
|
|
$tableRow = array( |
|
|
|
|
'skill_badge' => $resultData['img_mini'], |
|
|
|
|
'skill_name' => Skill::translateName($resultData['name']), |
|
|
|
|
'skill_name' => self::translateName($resultData['name']), |
|
|
|
|
'achieved_at' => api_get_local_time($resultData['acquired_skill_at']), |
|
|
|
|
'course_image' => '', |
|
|
|
|
'course_name' => '' |
|
|
|
|
'course_name' => '', |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if (!empty($courseInfo)) { |
|
|
|
|
@ -1169,11 +1260,10 @@ class Skill extends Model |
|
|
|
|
} |
|
|
|
|
$tableRows[] = $tableRow; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$allowLevels = api_get_configuration_value('skill_levels_names'); |
|
|
|
|
|
|
|
|
|
$tableResult = '<div class="table-responsive"> |
|
|
|
|
<table class="table" id="skillList"> |
|
|
|
|
$tableResult = '<div class="table-responsive" > |
|
|
|
|
<table class="table" > |
|
|
|
|
<thead> |
|
|
|
|
<tr> |
|
|
|
|
<th>'.get_lang('AchievedSkills').'</th> |
|
|
|
|
@ -1181,47 +1271,66 @@ class Skill extends Model |
|
|
|
|
</thead> |
|
|
|
|
<tbody> |
|
|
|
|
<tr><td>'; |
|
|
|
|
//$allowLevels = []; |
|
|
|
|
|
|
|
|
|
if (!empty($skillParents)) { |
|
|
|
|
if (empty($allowLevels)) { |
|
|
|
|
$tableResult .= $this->processSkillList($skills); |
|
|
|
|
$tableResult .= $this->processSkillListSimple($skills); |
|
|
|
|
} else { |
|
|
|
|
$table = new HTML_Table(['class' => 'table table-bordered']); |
|
|
|
|
if (!empty($skillParents)) { |
|
|
|
|
$column = 0; |
|
|
|
|
$skillAdded = []; |
|
|
|
|
foreach ($skillParents as $parentId => $data) { |
|
|
|
|
if (in_array($parentId, $skillAdded)) { |
|
|
|
|
continue; |
|
|
|
|
} |
|
|
|
|
$parentName = ''; |
|
|
|
|
if ($data['passed']) { |
|
|
|
|
$parentInfo = $skills[$parentId]; |
|
|
|
|
$parentName = $this->processSkillList([$parentInfo], 'mini', false); |
|
|
|
|
$graph = new Graph(); |
|
|
|
|
$graph->setAttribute('graphviz.graph.rankdir', 'LR'); |
|
|
|
|
foreach ($skillParents as $skillId => $parentList) { |
|
|
|
|
$old = null; |
|
|
|
|
foreach ($parentList as $parent) { |
|
|
|
|
if ($graph->hasVertex($parent['id'])) { |
|
|
|
|
$current = $graph->getVertex($parent['id']); |
|
|
|
|
} else { |
|
|
|
|
$current = $graph->createVertex($parent['id']); |
|
|
|
|
$current->setAttribute('graphviz.data', $parent['data']); |
|
|
|
|
} |
|
|
|
|
$table->setHeaderContents(0, $column, $parentName); |
|
|
|
|
$row = 1; |
|
|
|
|
$skillsToShow = []; |
|
|
|
|
foreach ($data as $skillData) { |
|
|
|
|
if ($skillData['id'] == $parentId) { |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
if (!empty($old)) { |
|
|
|
|
if ($graph->hasVertex($old['id'])) { |
|
|
|
|
$nextVertex = $graph->getVertex($old['id']); |
|
|
|
|
} else { |
|
|
|
|
$nextVertex = $graph->createVertex($old['id']); |
|
|
|
|
$nextVertex->setAttribute('graphviz.data', $old['data']); |
|
|
|
|
} |
|
|
|
|
if (empty($skillData['id'])) { |
|
|
|
|
continue; |
|
|
|
|
|
|
|
|
|
if (!$nextVertex->hasEdgeTo($current)) { |
|
|
|
|
$nextVertex->createEdgeTo($current); |
|
|
|
|
} |
|
|
|
|
$skillAdded[] = $skillData['id']; |
|
|
|
|
$skillsToShow[] = $skillData; |
|
|
|
|
} |
|
|
|
|
$table->setCellContents( |
|
|
|
|
$row, |
|
|
|
|
$column, |
|
|
|
|
$this->processSkillList($skillsToShow, 'mini', false) |
|
|
|
|
); |
|
|
|
|
$row++; |
|
|
|
|
$column++; |
|
|
|
|
$old = $parent; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
$tableResult .= $table->toHtml(); |
|
|
|
|
|
|
|
|
|
$table = '<table class ="table table-bordered">'; |
|
|
|
|
// Getting "root" vertex |
|
|
|
|
$root = $graph->getVertex(1); |
|
|
|
|
$table .= '<tr>'; |
|
|
|
|
/** @var Vertex $vertex */ |
|
|
|
|
foreach ($root->getVerticesEdgeTo() as $vertex) { |
|
|
|
|
$data = $vertex->getAttribute('graphviz.data'); |
|
|
|
|
|
|
|
|
|
$passed = in_array($data['id'], array_keys($skills)); |
|
|
|
|
$transparency = ''; |
|
|
|
|
if ($passed === false) { |
|
|
|
|
// @todo use a css class |
|
|
|
|
$transparency = 'opacity: 0.4; filter: alpha(opacity=40);'; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$label = $this->processSkillListSimple([$data], 'mini', $transparency); |
|
|
|
|
|
|
|
|
|
$table .= '<td >'; |
|
|
|
|
|
|
|
|
|
//$table .= '<div style="'.$transparency.'">'; |
|
|
|
|
$table .= '<div class="organigrama"> <ul><li>'.$label; |
|
|
|
|
$table .= $this->processVertex($vertex, $skills); |
|
|
|
|
$table .= '</ul></li></div>'; |
|
|
|
|
$table .= '</td>'; |
|
|
|
|
} |
|
|
|
|
$table .= '</tr></table>'; |
|
|
|
|
$tableResult .= $table; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
$tableResult .= get_lang('WithoutAchievedSkills'); |
|
|
|
|
@ -1236,7 +1345,7 @@ class Skill extends Model |
|
|
|
|
|
|
|
|
|
return [ |
|
|
|
|
'skills' => $tableRows, |
|
|
|
|
'table' => $tableResult |
|
|
|
|
'table' => $tableResult, |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1272,7 +1381,7 @@ class Skill extends Model |
|
|
|
|
$skills[1] = array( |
|
|
|
|
'id' => '1', |
|
|
|
|
'name' => get_lang('Root'), |
|
|
|
|
'parent_id' => '0' |
|
|
|
|
'parent_id' => '0', |
|
|
|
|
); |
|
|
|
|
$skillInfo = $this->getSkillInfo($skill_id); |
|
|
|
|
|
|
|
|
|
@ -1369,7 +1478,6 @@ class Skill extends Model |
|
|
|
|
$flat_array[$skill_id] = $skills[$skill_id]; |
|
|
|
|
} else { |
|
|
|
|
// Moving node to the children index of their parents |
|
|
|
|
|
|
|
|
|
foreach ($skills as $my_skill_id => &$skill) { |
|
|
|
|
if (isset($new_family_array[$skill['id']])) { |
|
|
|
|
$skill['data']['family_id'] = $new_family_array[$skill['id']]; |
|
|
|
|
@ -1383,7 +1491,7 @@ class Skill extends Model |
|
|
|
|
'name' => get_lang('SkillRootName'), |
|
|
|
|
'id' => 'root', |
|
|
|
|
'children' => $refs['root']['children'], |
|
|
|
|
'data' => array() |
|
|
|
|
'data' => array(), |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1424,7 +1532,7 @@ class Skill extends Model |
|
|
|
|
} |
|
|
|
|
$simple_tree[] = array( |
|
|
|
|
'name' => $element['name'], |
|
|
|
|
'children' => $children |
|
|
|
|
'children' => $children, |
|
|
|
|
); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -1613,7 +1721,7 @@ class Skill extends Model |
|
|
|
|
|
|
|
|
|
$whereConditions = array( |
|
|
|
|
'user_id = ? ' => intval($userId), |
|
|
|
|
'AND skill_id = ? ' => intval($skillId) |
|
|
|
|
'AND skill_id = ? ' => intval($skillId), |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
if ($courseId > 0) { |
|
|
|
|
@ -1625,7 +1733,7 @@ class Skill extends Model |
|
|
|
|
'COUNT(1) AS qty', |
|
|
|
|
$this->table_skill_rel_user, |
|
|
|
|
array( |
|
|
|
|
'where' => $whereConditions |
|
|
|
|
'where' => $whereConditions, |
|
|
|
|
), |
|
|
|
|
'first' |
|
|
|
|
); |
|
|
|
|
@ -1659,8 +1767,8 @@ class Skill extends Model |
|
|
|
|
$skillRelProfileTable, |
|
|
|
|
array( |
|
|
|
|
'where' => array( |
|
|
|
|
'skill_id = ?' => $id |
|
|
|
|
) |
|
|
|
|
'skill_id = ?' => $id, |
|
|
|
|
), |
|
|
|
|
), |
|
|
|
|
'first' |
|
|
|
|
); |
|
|
|
|
@ -1851,7 +1959,7 @@ class Skill extends Model |
|
|
|
|
* |
|
|
|
|
* @return bool |
|
|
|
|
*/ |
|
|
|
|
public static function isAllow($studentId = 0, $blockPage = true) |
|
|
|
|
public static function isAllowed($studentId = 0, $blockPage = true) |
|
|
|
|
{ |
|
|
|
|
if (self::isToolAvailable()) { |
|
|
|
|
if (api_is_platform_admin()) { |
|
|
|
|
@ -1889,7 +1997,7 @@ class Skill extends Model |
|
|
|
|
{ |
|
|
|
|
$allowTool = api_get_setting('allow_skills_tool'); |
|
|
|
|
|
|
|
|
|
if ($allowTool == 'true') { |
|
|
|
|
if ($allowTool === 'true') { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1907,13 +2015,14 @@ class Skill extends Model |
|
|
|
|
if (api_is_platform_admin()) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
// ofaj |
|
|
|
|
|
|
|
|
|
if (api_is_student_boss()) { |
|
|
|
|
$isBoss = UserManager::userIsBossOfStudent($currentUserId, $studentId); |
|
|
|
|
if ($isBoss) { |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
$allow = api_get_configuration_value('allow_private_skills'); |
|
|
|
|
if ($allow === true) { |
|
|
|
|
if (api_is_teacher()) { |
|
|
|
|
@ -1955,7 +2064,7 @@ class Skill extends Model |
|
|
|
|
foreach ($result as $item) { |
|
|
|
|
$skills[] = [ |
|
|
|
|
'name' => self::translateName($item['name']), |
|
|
|
|
'acquired_skill_at' => $item['acquired_skill_at'] |
|
|
|
|
'acquired_skill_at' => $item['acquired_skill_at'], |
|
|
|
|
]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1973,6 +2082,10 @@ class Skill extends Model |
|
|
|
|
return isset($GLOBALS[$variable]) ? $GLOBALS[$variable] : $name; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* @param string $code |
|
|
|
|
* @return mixed|string |
|
|
|
|
*/ |
|
|
|
|
public static function translateCode($code) |
|
|
|
|
{ |
|
|
|
|
if (empty($code)) { |
|
|
|
|
|