skill.ajax.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. /**
  4. * Responses to AJAX calls
  5. */
  6. require_once '../global.inc.php';
  7. require_once api_get_path(LIBRARY_PATH).'skill.lib.php';
  8. require_once api_get_path(LIBRARY_PATH).'gradebook.lib.php';
  9. $action = isset($_REQUEST['a']) ? $_REQUEST['a'] : null;
  10. if (api_get_setting('allow_skills_tool') != 'true') {
  11. exit;
  12. }
  13. api_block_anonymous_users();
  14. $skill = new Skill();
  15. $gradebook = new Gradebook();
  16. $skill_gradebook = new SkillRelGradebook();
  17. switch ($action) {
  18. case 'add':
  19. if (api_is_platform_admin() || api_is_drh()) {
  20. if (isset($_REQUEST['id']) && !empty($_REQUEST['id'])) {
  21. $skill_id = $skill->edit($_REQUEST);
  22. } else {
  23. $skill_id = $skill->add($_REQUEST);
  24. }
  25. }
  26. echo $skill_id;
  27. case 'delete_skill':
  28. if (api_is_platform_admin() || api_is_drh()) {
  29. echo $skill->delete($_REQUEST['skill_id']);
  30. }
  31. break;
  32. case 'find_skills':
  33. $skills = $skill->find('all', array('where' => array('name LIKE %?% '=>$_REQUEST['tag'])));
  34. $return_skills = array();
  35. foreach ($skills as $skill) {
  36. $skill['caption'] = $skill['name'];
  37. $skill['value'] = $skill['id'];
  38. $return_skills[] = $skill;
  39. }
  40. echo json_encode($return_skills);
  41. break;
  42. case 'get_gradebooks':
  43. $gradebooks = $gradebook_list = $gradebook->get_all();
  44. $gradebook_list = array();
  45. //Only course gradebook with certificate
  46. if (!empty($gradebooks)) {
  47. foreach ($gradebooks as $gradebook) {
  48. if ($gradebook['parent_id'] == 0 && !empty($gradebook['certif_min_score']) && !empty($gradebook['document_id'])) {
  49. $gradebook_list[] = $gradebook;
  50. //$gradebook['name'] = $gradebook['name'];
  51. //$gradebook_list[] = $gradebook;
  52. } else {
  53. // $gradebook['name'] = $gradebook_list[$gradebook['parent_id']]['name'].' > '.$gradebook['name'];
  54. //$gradebook_list[] = $gradebook;
  55. }
  56. }
  57. }
  58. echo json_encode($gradebook_list);
  59. break;
  60. case 'find_gradebooks':
  61. $gradebooks = $gradebook->find('all', array('where' => array('name LIKE %?% ' => $_REQUEST['tag'])));
  62. $return = array();
  63. foreach ($gradebooks as $item) {
  64. $item['caption'] = $item['name'];
  65. $item['value'] = $item['id'];
  66. $return[] = $item;
  67. }
  68. echo json_encode($return);
  69. break;
  70. case 'get_course_info_popup':
  71. $course_info = api_get_course_info($_REQUEST['code']);
  72. $course_info['course_code'] = $course_info['code'];
  73. $courses = CourseManager::process_hot_course_item(array($course_info));
  74. Display::display_no_header();
  75. Display::$global_template->assign('hot_courses', $courses);
  76. echo Display::$global_template->fetch('default/layout/hot_course_item_popup.tpl');
  77. break;
  78. case 'gradebook_exists':
  79. $data = $gradebook->get($_REQUEST['gradebook_id']);
  80. if (!empty($data)) {
  81. echo 1;
  82. } else {
  83. echo 0;
  84. }
  85. break;
  86. case 'get_skills_by_profile':
  87. $skill_rel_profile = new SkillRelProfile();
  88. $profile_id = isset($_REQUEST['profile_id']) ? $_REQUEST['profile_id'] : null;
  89. $skills = $skill_rel_profile->get_skills_by_profile($profile_id);
  90. echo json_encode($skills);
  91. break;
  92. case 'get_saved_profiles':
  93. $skill_profile = new SkillProfile();
  94. $profiles = $skill_profile->get_all();
  95. Display::display_no_header();
  96. Display::$global_template->assign('profiles', $profiles);
  97. echo Display::$global_template->fetch('default/skill/profile_item.tpl');
  98. break;
  99. case 'get_skills':
  100. $load_user_data = isset($_REQUEST['load_user_data']) ? $_REQUEST['load_user_data'] : null;
  101. $id = intval($_REQUEST['id']);
  102. $skills = $skill->get_all($load_user_data, false, $id);
  103. echo json_encode($skills);
  104. break;
  105. case 'get_skill_info':
  106. $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
  107. $skill_info = $skill->get_skill_info($id);
  108. echo json_encode($skill_info);
  109. break;
  110. case 'get_skill_course_info':
  111. $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
  112. $skill_info = $skill->get_skill_info($id);
  113. $courses = $skill->get_courses_by_skill($id);
  114. $html = '';
  115. if (!empty($courses)) {
  116. $html = sprintf(get_lang('ToGetToLearnXYouWillNeedToTakeOneOfTheFollowingCourses'), '<i>'.$skill_info['name'].'</i>').'<br />';
  117. foreach ($courses as $course) {
  118. $url = '#';
  119. $attributes = array('class' => 'course_description_popup', 'rel' => $course['code']);
  120. $html .= Display::url(sprintf(get_lang('SkillXWithCourseX'), $skill_info['name'], $course['title']), $url, $attributes).'<br />';
  121. }
  122. }
  123. echo $html;
  124. break;
  125. case 'get_skills_tree_json':
  126. $user_id = isset($_REQUEST['load_user']) && $_REQUEST['load_user'] == 1 ? api_get_user_id() : 0;
  127. $skill_id = isset($_REQUEST['skill_id']) ? $_REQUEST['skill_id'] : 0;
  128. $depth = isset($_REQUEST['main_depth']) ? $_REQUEST['main_depth'] : 2;
  129. $all = $skill->get_skills_tree_json($user_id, $skill_id, false, $depth);
  130. echo $all;
  131. break;
  132. case 'get_user_skills':
  133. $skills = $skill->get_user_skills($user_id, true);
  134. Display::display_no_header();
  135. Display::$global_template->assign('skills', $skills);
  136. echo Display::$global_template->fetch('default/skill/user_skills.tpl');
  137. break;
  138. case 'get_gradebook_info':
  139. $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
  140. $info = $gradebook->get($id);
  141. echo json_encode($info);
  142. break;
  143. case 'load_children':
  144. $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
  145. $load_user_data = isset($_REQUEST['load_user_data']) ? $_REQUEST['load_user_data'] : null;
  146. $skills = $skill->get_children($id, $load_user_data);
  147. $return = array();
  148. foreach ($skills as $skill) {
  149. if (isset($skill['data']) && !empty($skill['data'])) {
  150. $return[$skill['data']['id']] = array(
  151. 'id' => $skill['data']['id'],
  152. 'name' => $skill['data']['name'],
  153. 'passed'=> $skill['data']['passed']);
  154. }
  155. }
  156. $success = true;
  157. if (empty($return)) {
  158. $success = false;
  159. }
  160. $result = array (
  161. 'success' => $success,
  162. 'data' => $return
  163. );
  164. echo json_encode($result);
  165. break;
  166. case 'load_direct_parents':
  167. $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : null;
  168. $skills = $skill->get_direct_parents($id);
  169. $return = array();
  170. foreach($skills as $skill) {
  171. $return [$skill['data']['id']] = array (
  172. 'id' => $skill['data']['id'],
  173. 'parent_id' => $skill['data']['parent_id'],
  174. 'name' => $skill['data']['name']
  175. );
  176. }
  177. echo json_encode($return);
  178. break;
  179. case 'profile_matches':
  180. $skill_rel_user = new SkillRelUser();
  181. $skills = $_REQUEST['skill_id'];
  182. $total_skills_to_search = $skills;
  183. $users = $skill_rel_user->get_user_by_skills($skills);
  184. $user_list = array();
  185. $count_skills = count($skills);
  186. if (!empty($users)) {
  187. foreach ($users as $user) {
  188. $user_info = api_get_user_info($user['user_id']);
  189. $user_list[$user['user_id']]['user'] = $user_info;
  190. $my_user_skills = $skill_rel_user->get_user_skills($user['user_id']);
  191. $user_skill_list = array();
  192. foreach ($my_user_skills as $skill_item) {
  193. $user_skill_list[] = $skill_item['skill_id'];
  194. }
  195. $user_skills = array();
  196. $found_counts = 0;
  197. foreach ($skills as $skill_id) {
  198. $found = false;
  199. if (in_array($skill_id, $user_skill_list)) {
  200. $found = true;
  201. $found_counts++;
  202. $user_skills[$skill_id] = array('skill_id' => $skill_id, 'found' => $found);
  203. }
  204. }
  205. foreach ($my_user_skills as $my_skill) {
  206. if (!isset($user_skills[$my_skill['skill_id']])) {
  207. $user_skills[$my_skill['skill_id']] = array('skill_id' => $my_skill['skill_id'], 'found' => false);
  208. }
  209. $total_skills_to_search[$my_skill['skill_id']] = $my_skill['skill_id'];
  210. }
  211. $user_list[$user['user_id']]['skills'] = $user_skills;
  212. $user_list[$user['user_id']]['total_found_skills'] = $found_counts;
  213. }
  214. $ordered_user_list = array();
  215. foreach ($user_list as $user_id => $user_data) {
  216. $ordered_user_list[$user_data['total_found_skills']][] = $user_data;
  217. }
  218. if (!empty($ordered_user_list)) {
  219. arsort($ordered_user_list);
  220. }
  221. }
  222. Display::display_no_header();
  223. Display::$global_template->assign('order_user_list', $ordered_user_list);
  224. Display::$global_template->assign('total_search_skills', $count_skills);
  225. $skill_list = array();
  226. if (!empty($total_skills_to_search)) {
  227. $total_skills_to_search = $skill->get_skills_info($total_skills_to_search);
  228. foreach ($total_skills_to_search as $skill_info) {
  229. $skill_list[$skill_info['id']] = $skill_info;
  230. }
  231. }
  232. Display::$global_template->assign('skill_list', $skill_list);
  233. echo Display::$global_template->fetch('default/skill/profile.tpl');
  234. break;
  235. case 'delete_gradebook_from_skill':
  236. case 'remove_skill':
  237. if (api_is_platform_admin() || api_is_drh()) {
  238. if (!empty($_REQUEST['skill_id']) && !empty($_REQUEST['gradebook_id'])) {
  239. $skill_item = $skill_gradebook->get_skill_info($_REQUEST['skill_id'], $_REQUEST['gradebook_id']);
  240. if (!empty($skill_item)) {
  241. $skill_gradebook->delete($skill_item['id']);
  242. echo 1;
  243. } else {
  244. echo 0;
  245. }
  246. } else {
  247. echo 0;
  248. }
  249. }
  250. break;
  251. case 'save_profile':
  252. if (api_is_platform_admin() || api_is_drh()) {
  253. $skill_profile = new SkillProfile();
  254. $params = $_REQUEST;
  255. //$params['skills'] = isset($_SESSION['skills']) ? $_SESSION['skills'] : null;
  256. $params['skills'] = $params['skill_id'];
  257. $skill_data = $skill_profile->save($params);
  258. if (!empty($skill_data)) {
  259. echo 1;
  260. } else {
  261. echo 0;
  262. }
  263. }
  264. break;
  265. case 'skill_exists':
  266. $skill_data = $skill->get($_REQUEST['skill_id']);
  267. if (!empty($skill_data)) {
  268. echo 1;
  269. } else {
  270. echo 0;
  271. }
  272. break;
  273. default:
  274. echo '';
  275. }
  276. exit;