From 53a7d3d460494faa82893d02ecc880b9443caa14 Mon Sep 17 00:00:00 2001 From: Julio Montoya Date: Tue, 8 Nov 2011 15:31:50 +0100 Subject: [PATCH] Skills: Profile search is ugly but is working see #1791 --- main/admin/skills_profile.php | 57 ++++---- main/inc/ajax/skill.ajax.php | 36 +++-- main/inc/lib/skill.lib.php | 55 +++++++- main/template/default/skill/profile.tpl | 166 ++++++++++++++++-------- 4 files changed, 216 insertions(+), 98 deletions(-) diff --git a/main/admin/skills_profile.php b/main/admin/skills_profile.php index a6d30a1610..3a1f5e1486 100644 --- a/main/admin/skills_profile.php +++ b/main/admin/skills_profile.php @@ -17,6 +17,7 @@ $this_section = SECTION_PLATFORM_ADMIN; $htmlHeadXtra[] = ''; $htmlHeadXtra[] = ''; + $htmlHeadXtra[] = api_get_jquery_ui_js(); $skill = new Skill(); @@ -33,6 +34,10 @@ $form->addElement('select', 'skills', null, null, array('id'=>'skills')); $form->addElement('style_submit_button', 'submit', get_lang('Search'), 'class="a_button blue "'); +$profiles = $skill_profile->get_all(); + +$tpl->assign('profiles', $profiles); + $total_skills_to_search = array(); @@ -85,36 +90,17 @@ if (!empty($users)) { foreach($user_list as $user_id => $user_data) { $ordered_user_list[$user_data['total_found_skills']][] = $user_data; } - //sort($ordered_user_list); - var_dump($ordered_user_list); - + if (!empty($ordered_user_list)) { + asort($ordered_user_list); + } } //var_dump($user_list); -$tpl->assign('user_list', $user_list); +//$tpl->assign('user_list', $user_list); +$tpl->assign('order_user_list', $ordered_user_list); $tpl->assign('total_search_skills', $count_skills); - -$action = isset($_REQUEST['a']) ? $_REQUEST['a'] : null; -$id = isset($_REQUEST['id']) ? intval($_REQUEST['id']) : null; - -switch ($action) { - case 'remove_skill': - $new_skill = array(); - foreach($skills as $skill_id) { - if ($id != $skill_id) { - $new_skill[] = $skill_id; - } - } - $skills = $_SESSION['skills'] = $new_skill; - break; - - case 'save_profile': - - break; -} - if (!empty($skills)) { $counter = 0; foreach($skills as $hidden_skill_id) { @@ -136,6 +122,29 @@ foreach($total_skills_to_search as &$skill_info) { } + +$action = isset($_REQUEST['a']) ? $_REQUEST['a'] : null; +$id = isset($_REQUEST['id']) ? intval($_REQUEST['id']) : null; + +switch ($action) { + case 'remove_skill': + $new_skill = array(); + foreach($skills as $skill_id) { + if ($id != $skill_id) { + $new_skill[] = $skill_id; + } + } + $skills = $_SESSION['skills'] = $new_skill; + break; + + case 'load_profile': + $skill_profile = new SkillRelProfile(); + $skills = $skill_profile->get_skills_by_profile($id); + + break; +} + + $tpl->assign('skill_list', $skill_list); $tpl->assign('search_skill_list', $skills); diff --git a/main/inc/ajax/skill.ajax.php b/main/inc/ajax/skill.ajax.php index 39d8fa2e30..105f7bb018 100644 --- a/main/inc/ajax/skill.ajax.php +++ b/main/inc/ajax/skill.ajax.php @@ -77,20 +77,13 @@ switch ($action) { $return = array(); foreach($skills as $skill) { - $return [$skill['data']['id']] = array( + $return [$skill['data']['id']] = array ( + 'id' => $skill['data']['id'], 'parent_id' => $skill['data']['parent_id'], - 'name' => $skill['data']['name'], - 'id' => $skill['data']['id']); + 'name' => $skill['data']['name'] + ); } echo json_encode($return); - break; - case 'skill_exists': - $skill_data = $skill->get($_REQUEST['skill_id']); - if (!empty($skill_data)) { - echo 1; - } else { - echo 0; - } break; case 'remove_skill': if (!empty($_REQUEST['skill_id']) && !empty($_REQUEST['gradebook_id'])) { @@ -102,7 +95,26 @@ switch ($action) { } else { echo 0; } - break; + break; + case 'save_profile': + $skill_profile = new SkillProfile(); + $params = $_REQUEST; + $params['skills'] = isset($_SESSION['skills']) ? $_SESSION['skills'] : null; + $skill_data = $skill_profile->save($params); + if (!empty($skill_data)) { + echo 1; + } else { + echo 0; + } + break; + case 'skill_exists': + $skill_data = $skill->get($_REQUEST['skill_id']); + if (!empty($skill_data)) { + echo 1; + } else { + echo 0; + } + break; default: echo ''; } diff --git a/main/inc/lib/skill.lib.php b/main/inc/lib/skill.lib.php index 54f7f7cd4c..54afc250b2 100644 --- a/main/inc/lib/skill.lib.php +++ b/main/inc/lib/skill.lib.php @@ -21,7 +21,34 @@ class SkillProfile extends Model { var $columns = array('id', 'name','description'); public function __construct() { $this->table = Database::get_main_table(TABLE_MAIN_SKILL_PROFILE); + $this->table_rel_profile = Database::get_main_table(TABLE_MAIN_SKILL_REL_PROFILE); } + + public function get_profiles() { + $sql = "SELECT * FROM $this->table p INNER JOIN $this->table_rel_profile sp ON(p.id = sp.profile_id) "; + + $result = Database::query($sql); + $profiles = Database::store_result($result,'ASSOC'); + return $profiles; + } + + public function save($params) { + if (!empty($params)) { + $profile_id = parent::save($params); + if ($profile_id) { + $skill_rel_profile = new SkillRelProfile(); + if (isset($params['skills'])) { + foreach($params['skills'] as $skill_id) { + $attributes = array('skill_id' => $skill_id, 'profile_id'=>$profile_id); + $skill_rel_profile->save($attributes); + } + } + return $profile_id; + } + } + return false; + + } } class SkillRelProfile extends Model { @@ -29,6 +56,17 @@ class SkillRelProfile extends Model { public function __construct() { $this->table = Database::get_main_table(TABLE_MAIN_SKILL_REL_PROFILE); } + + public function get_skills_by_profile($profile_id) { + $skills = $this->get_all(array('where'=>array('profile_id = ? ' => $profile_id))); + $return_array = array(); + if (!empty($skills)) { + foreach($skills as $skill_data) { + $return_array[] = $skill_data['skill_id']; + } + } + return $return_array; + } } class SkillRelSkill extends Model { @@ -201,13 +239,16 @@ class SkillRelUser extends Model { } public function get_user_by_skills($skill_list) { - $skill_list = array_map('intval', $skill_list); - $skill_list = implode("', '", $skill_list); - - $sql = "SELECT user_id FROM {$this->table} WHERE skill_id IN ('$skill_list') "; - - $result = Database::query($sql); - $users = Database::store_result($result, 'ASSOC'); + $users = array(); + if (!empty($skill_list)) { + $skill_list = array_map('intval', $skill_list); + $skill_list = implode("', '", $skill_list); + + $sql = "SELECT user_id FROM {$this->table} WHERE skill_id IN ('$skill_list') "; + + $result = Database::query($sql); + $users = Database::store_result($result, 'ASSOC'); + } return $users; } diff --git a/main/template/default/skill/profile.tpl b/main/template/default/skill/profile.tpl index 0348e5c67f..70e2202d11 100644 --- a/main/template/default/skill/profile.tpl +++ b/main/template/default/skill/profile.tpl @@ -13,6 +13,70 @@ $(document).ready( function() { filter_selected: true, newel: true }); + + + //Open dialog + $("#dialog-form").dialog({ + autoOpen: false, + modal : true, + width : 550, + height : 350, + }); + + var name = $( "#name" ), + description = $( "#description" ), + allFields = $( [] ).add( name ).add( description ), tips = $(".validateTips"); + + + $("#dialog-form").dialog({ + buttons: { + "Add" : function() { + var bValid = true; + bValid = bValid && checkLength( name, "name", 1, 255 ); + var params = $("#save_profile_form").serialize(); + + $.ajax({ + url: '{$url}?a=save_profile&'+params, + success:function(data) { + + /*jsPlumb.connect({ + source : "block_2", + target : "block_1", + overlays : overlays + });*/ + + /* + calEvent.title = $("#name").val(); + calEvent.start = calEvent.start; + calEvent.end = calEvent.end; + calEvent.allDay = calEvent.allDay; + calEvent.description = $("#content").val(); + calendar.fullCalendar('updateEvent', + calEvent, + true // make the event "stick" + );*/ + + $("#dialog-form").dialog("close"); + } + }); + }, + }, + close: function() { + $("#name").attr('value', ''); + $("#description").attr('value', ''); + } + }); + + $("#add_profile").click(function() { + + $("#name").attr('value', ''); + $("#description").attr('value', ''); + + $("#dialog-form").dialog("open"); + + }); + + }); function check_skills() { @@ -51,11 +115,15 @@ function checkLength( o, n, min, max ) { } else { return true; } -} +} + +

{"SearchSkills"|get_lang}

+ {$form} {if !empty($search_skill_list) } +

{"Skills"|get_lang}

- {"SaveThisSearch"|get_lang} + {"SaveThisSearch"|get_lang} {/if} -{if !empty($user_list) } - {foreach $user_list as $user} -
-
- {$user['user'].username} -
-
- - - {$user['user'].complete_name} - -

Skills

-
    - {$user.total_found_skills} / {$total_search_skills} - {foreach $user['skills'] as $skill_data} -
  • - {$skill_list[$skill_data.skill_id].name} - {if $skill_data.found} - * I have this skill * - {/if} - -
  • - {/foreach} -
-
-
- {/foreach} -{else} - {"No results"|get_lang} +{if !empty($profiles) } +

{"SkillProfiles"|get_lang}

+ {/if} - +{if !empty($order_user_list) } + {foreach $order_user_list as $count => $user_list} +

{"Matches"|get_lang} {$count}/{$total_search_skills}

+ {foreach $user_list as $user} +
+
+

+ {$user['user'].complete_name} ({$user['user'].username}) +

+
+
+

Skills

+
    + {$user.total_found_skills} / {$total_search_skills} + {foreach $user['skills'] as $skill_data} +
  • + {$skill_list[$skill_data.skill_id].name} + {if $skill_data.found} + * I have this skill * + {/if} + +
  • + {/foreach} +
+
+
+ {/foreach} + {/foreach} +{else} + {"No results"|get_lang} +{/if}