|
@@ -278,6 +278,7 @@ class SkillRelUser extends Model {
|
|
|
class Skill extends Model {
|
|
|
var $columns = array('id', 'name','description', 'access_url_id', 'short_code');
|
|
|
var $required = array('name');
|
|
|
+
|
|
|
/** Array of colours by depth, for the coffee wheel. Each depth has 4 col */
|
|
|
var $colours = array(
|
|
|
0 => array('#f9f0ab', '#ecc099', '#e098b0', '#ebe378'),
|
|
@@ -295,6 +296,7 @@ class Skill extends Model {
|
|
|
|
|
|
public function __construct() {
|
|
|
$this->table = Database::get_main_table(TABLE_MAIN_SKILL);
|
|
|
+ $this->table_user = Database::get_main_table(TABLE_MAIN_USER);
|
|
|
$this->table_skill_rel_gradebook = Database::get_main_table(TABLE_MAIN_SKILL_REL_GRADEBOOK);
|
|
|
$this->table_skill_rel_user = Database::get_main_table(TABLE_MAIN_SKILL_REL_USER);
|
|
|
$this->table_course = Database::get_main_table(TABLE_MAIN_COURSE);
|
|
@@ -447,6 +449,11 @@ class Skill extends Model {
|
|
|
if (!isset($params['parent_id'])) {
|
|
|
$params['parent_id'] = 1;
|
|
|
}
|
|
|
+
|
|
|
+ if (!is_array($params['parent_id'])) {
|
|
|
+ $params['parent_id'] = array($params['parent_id']);
|
|
|
+ }
|
|
|
+
|
|
|
$skill_rel_skill = new SkillRelSkill();
|
|
|
$skill_rel_gradebook = new SkillRelGradebook();
|
|
|
|
|
@@ -455,13 +462,19 @@ class Skill extends Model {
|
|
|
$skill_id = $this->save($params);
|
|
|
if ($skill_id) {
|
|
|
//Saving skill_rel_skill (parent_id, relation_type)
|
|
|
- $attributes = array(
|
|
|
- 'skill_id' => $skill_id,
|
|
|
- 'parent_id' => $params['parent_id'],
|
|
|
- 'relation_type' => $params['relation_type'],
|
|
|
- //'level' => $params['level'],
|
|
|
- );
|
|
|
- $skill_rel_skill->save($attributes);
|
|
|
+
|
|
|
+ foreach ($params['parent_id'] as $parent_id) {
|
|
|
+ $relation_exists = $skill_rel_skill->relation_exists($skill_id, $parent_id);
|
|
|
+ if (!$relation_exists) {
|
|
|
+ $attributes = array(
|
|
|
+ 'skill_id' => $skill_id,
|
|
|
+ 'parent_id' => $parent_id,
|
|
|
+ 'relation_type' => $params['relation_type'],
|
|
|
+ //'level' => $params['level'],
|
|
|
+ );
|
|
|
+ $skill_rel_skill->save($attributes);
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
if (!empty($params['gradebook_id'])) {
|
|
|
foreach ($params['gradebook_id'] as $gradebook_id) {
|
|
@@ -475,6 +488,23 @@ class Skill extends Model {
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+ public function delete($skill_id) {
|
|
|
+ /*$params = array('skill_id' => $skill_id);
|
|
|
+
|
|
|
+ $skill_rel_skill = new SkillRelSkill();
|
|
|
+ $skills = $skill_rel_skill->get_all(array('where'=>array('skill_id = ?' =>$skill_id)));
|
|
|
+
|
|
|
+ $skill_rel_profile = new SkillRelProfile();
|
|
|
+ $skill_rel_gradebook = new SkillRelGradebook();
|
|
|
+ $skill_rel_user = new SkillRelUser();
|
|
|
+
|
|
|
+ $this->delete($skill_id);
|
|
|
+
|
|
|
+ $skill_rel_gradebook->delete($params);*/
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
public function edit($params) {
|
|
|
if (!isset($params['parent_id'])) {
|
|
@@ -577,7 +607,7 @@ class Skill extends Model {
|
|
|
}
|
|
|
}
|
|
|
return $clean_skill;
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
public function get_skills_tree($user_id = null, $skill_id = null, $return_flat_array = false, $add_root = false) {
|
|
|
if (isset($user_id) && !empty($user_id)) {
|
|
@@ -614,19 +644,25 @@ class Skill extends Model {
|
|
|
if (!empty($skills)) {
|
|
|
foreach ($skills as &$skill) {
|
|
|
|
|
|
- if (!empty($skill_id)) {
|
|
|
- if ($skill['id'] == $skill_id) {
|
|
|
- $skill['parent_id'] = 'root';
|
|
|
- }
|
|
|
- } else {
|
|
|
+ if (empty($skill_id)) {
|
|
|
if ($skill['parent_id'] == 0) {
|
|
|
$skill['parent_id'] = 'root';
|
|
|
}
|
|
|
+ } else {
|
|
|
+ if ($skill['id'] == $skill_id) {
|
|
|
+ $skill['parent_id'] = 'root';
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//In order to paint all members of a family with the same color
|
|
|
- if ($skill['parent_id'] == 1) {
|
|
|
- $family[$skill['id']] = $this->get_all_children($skill['id']);
|
|
|
+ if (empty($skill_id)) {
|
|
|
+ if ($skill['parent_id'] == 1) {
|
|
|
+ $family[$skill['id']] = $this->get_all_children($skill['id']);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if ($skill['parent_id'] == $skill_id) {
|
|
|
+ $family[$skill['id']] = $this->get_all_children($skill['id']);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// because except main keys (id, name, children) others keys are not saved while in the space tree
|
|
@@ -663,13 +699,13 @@ class Skill extends Model {
|
|
|
$new_family_array[$main_family_id] = $family_id;
|
|
|
$family_id++;
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
if (empty($original_skill)) {
|
|
|
$refs['root']['children'][0] = $skills[1];
|
|
|
+ $skills[$skill_id]['data']['family_id'] = 1;
|
|
|
$refs['root']['children'][0]['children'][0] = $skills[$skill_id];
|
|
|
$flat_array[$skill_id] = $skills[$skill_id];
|
|
|
- } else {
|
|
|
-
|
|
|
+ } else {
|
|
|
|
|
|
|
|
|
// Moving node to the children index of their parents
|
|
@@ -749,4 +785,58 @@ class Skill extends Model {
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
+
|
|
|
+ function get_user_skill_ranking($user_id) {
|
|
|
+ $user_id = intval($user_id);
|
|
|
+ $sql = "SELECT count(skill_id) count FROM {$this->table} s INNER JOIN {$this->table_skill_rel_user} su ON (s.id = su.skill_id)
|
|
|
+ WHERE user_id = $user_id";
|
|
|
+ $result = Database::query($sql);
|
|
|
+ if (Database::num_rows($result)) {
|
|
|
+ $result = Database::fetch_row($result);
|
|
|
+ return $result[0];
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ function get_user_list_skill_ranking($start, $limit, $sidx, $sord, $where_condition) {
|
|
|
+ $start = intval($start);
|
|
|
+ $limit = intval($limit);
|
|
|
+
|
|
|
+ $sql = "SELECT u.user_id, firstname, lastname, count(username) skills_acquired
|
|
|
+ FROM {$this->table} s INNER JOIN {$this->table_skill_rel_user} su ON (s.id = su.skill_id)
|
|
|
+ INNER JOIN {$this->table_user} u ON u.user_id = su.user_id
|
|
|
+ WHERE 1=1 $where_condition
|
|
|
+ GROUP BY username
|
|
|
+ ORDER BY $sidx $sord
|
|
|
+ LIMIT $start , $limit ";
|
|
|
+
|
|
|
+ $result = Database::query($sql);
|
|
|
+ if (Database::num_rows($result)) {
|
|
|
+ return Database::store_result($result, 'ASSOC');
|
|
|
+ }
|
|
|
+ return array();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ function get_user_list_skill_ranking_count() {
|
|
|
+ $sql = "SELECT count(skill_id) count FROM {$this->table} s INNER JOIN {$this->table_skill_rel_user} su ON (s.id = su.skill_id)";
|
|
|
+ $result = Database::query($sql);
|
|
|
+ if (Database::num_rows($result)) {
|
|
|
+ $result = Database::fetch_row($result);
|
|
|
+ return $result[0];
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ function get_count_skills_by_course($course_code) {
|
|
|
+ $sql = "SELECT count(skill_id) as count FROM {$this->table_gradebook} g INNER JOIN {$this->table_skill_rel_gradebook} sg ON g.id = sg.gradebook_id
|
|
|
+ WHERE course_code = '$course_code'";
|
|
|
+ $result = Database::query($sql);
|
|
|
+ if (Database::num_rows($result)) {
|
|
|
+ $result = Database::fetch_row($result);
|
|
|
+ return $result[0];
|
|
|
+ }
|
|
|
+ return 0;
|
|
|
+
|
|
|
+ }
|
|
|
}
|