urlmanager.lib.php 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. /**
  4. * This library provides functions for the access_url management.
  5. * Include/require it in your code to use its functionality.
  6. *
  7. * @package chamilo.library
  8. */
  9. /**
  10. * @package chamilo.library
  11. */
  12. class UrlManager
  13. {
  14. /**
  15. * Creates a new url access to Dokeos
  16. *
  17. * @author Julio Montoya <gugli100@gmail.com>,
  18. *
  19. * @param string The URL of the site
  20. * @param string The description of the site
  21. * @param int is active or not
  22. * @param int the user_id of the owner
  23. * @param int The type of URL (1=multiple-access-url, 2=sincro-server, 3=sincro-client)
  24. * @param array If the type is different than 1, then there might be extra URL parameters to take into account
  25. * @return boolean if success
  26. */
  27. public static function add($url, $description, $active, $type=1, $extra_params) {
  28. $tms = time();
  29. $type = intval($type);
  30. $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
  31. $u = api_get_user_id();
  32. if ($u == 0) {
  33. $u = api_get_anonymous_id();
  34. }
  35. if ($type > 1) {
  36. $active = 0;
  37. }
  38. $sql = "INSERT INTO $table_access_url ".
  39. " SET url = '".Database::escape_string($url)."', ".
  40. " description = '".Database::escape_string($description)."', ".
  41. " active = $active, ".
  42. " created_by = $u, ".
  43. " url_type = $type, ".
  44. " tms = FROM_UNIXTIME(".$tms.")";
  45. $result = Database::query($sql);
  46. $id = Database::insert_id();
  47. if ($result !== false && $type == 3 && count($extra_params)>0) {
  48. // Register extra parameters in the branch_sync table
  49. $t = Database::get_main_table(TABLE_BRANCH_SYNC);
  50. $sql = "INSERT INTO $t SET ".
  51. " access_url_id = $id ".
  52. (!empty($extra_params['ip'])?", branch_ip = '".Database::escape_string($extra_params['ip'])."'":"") .
  53. (!empty($extra_params['name'])?", branch_name = '".Database::escape_string($extra_params['name'])."'":"") .
  54. (!empty($extra_params['last_sync'])?", last_sync_trans_id = '".Database::escape_string($extra_params['last_sync'])."'":"") .
  55. (!empty($extra_params['dwn_speed'])?", dwn_speed = '".Database::escape_string($extra_params['dwn_speed'])."'":"") .
  56. (!empty($extra_params['up_speed'])?", up_speed = '".Database::escape_string($extra_params['up_speed'])."'":"") .
  57. (!empty($extra_params['delay'])?", delay = '".Database::escape_string($extra_params['delay'])."'":"") .
  58. (!empty($extra_params['admin_mail'])?", admin_mail = '".Database::escape_string($extra_params['admin_mail'])."'":"") .
  59. (!empty($extra_params['admin_name'])?", admin_name = '".Database::escape_string($extra_params['admin_name'])."'":"") .
  60. (!empty($extra_params['admin_phone'])?", admin_phone = '".Database::escape_string($extra_params['admin_phone'])."'":"") .
  61. (!empty($extra_params['latitude'])?", latitude = '".Database::escape_string($extra_params['latitude'])."'":"") .
  62. (!empty($extra_params['longitude'])?", longitude = '".Database::escape_string($extra_params['longitude'])."'":"") .
  63. ", last_sync_trans_date = '".api_get_utc_datetime()."'";
  64. $result = $result && Database::query($sql);
  65. }
  66. return $result;
  67. }
  68. /**
  69. * Updates an URL access to Dokeos
  70. * @author Julio Montoya <gugli100@gmail.com>,
  71. *
  72. * @param int The url id
  73. * @param string The description of the site
  74. * @param int is active or not
  75. * @param int the user_id of the owner
  76. * @param int The URL type
  77. * @param array Extra parameters for type > 1
  78. * @return boolean if success
  79. */
  80. public static function udpate($url_id, $url, $description, $active, $type, $extra_params) {
  81. $url_id = intval($url_id);
  82. $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
  83. $tms = time();
  84. $sql = "UPDATE $table_access_url
  85. SET url = '".Database::escape_string($url)."',
  86. description = '".Database::escape_string($description)."',
  87. active = '".Database::escape_string($active)."',
  88. created_by = '".api_get_user_id()."',
  89. tms = FROM_UNIXTIME(".$tms.")
  90. WHERE id = '$url_id'";
  91. $result = Database::query($sql);
  92. return $result;
  93. }
  94. /**
  95. * Deletes an url
  96. * @author Julio Montoya
  97. * @param int url id
  98. * @return boolean true if success
  99. * */
  100. public static function delete($id)
  101. {
  102. $id = intval($id);
  103. $table_bs = Database :: get_main_table(TABLE_BRANCH_SYNC);
  104. $table_bsl = Database :: get_main_table(TABLE_BRANCH_SYNC_LOG);
  105. $table_bt = Database :: get_main_table(TABLE_BRANCH_TRANSACTION);
  106. $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
  107. $sql = "DELETE FROM $table_bt WHERE branch_id = ".$id;
  108. $result = Database::query($sql);
  109. $sql = "DELETE FROM $table_bsl WHERE branch_sync_id = ".$id;
  110. $result = Database::query($sql);
  111. $sql = "DELETE FROM $table_bs WHERE access_url_id = ".$id;
  112. $result = Database::query($sql);
  113. $sql = "DELETE FROM $table_access_url WHERE id = ".$id;
  114. $result = Database::query($sql);
  115. return $result;
  116. }
  117. /**
  118. *
  119. * */
  120. public static function url_exist($url)
  121. {
  122. $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
  123. $sql = "SELECT id FROM $table_access_url WHERE url = '".Database::escape_string($url)."' ";
  124. $res = Database::query($sql);
  125. $num = Database::num_rows($res);
  126. return $num;
  127. }
  128. /**
  129. *
  130. * */
  131. public static function url_id_exist($url)
  132. {
  133. $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
  134. $sql = "SELECT id FROM $table_access_url WHERE id = '".Database::escape_string($url)."' ";
  135. $res = Database::query($sql);
  136. $num = Database::num_rows($res);
  137. return $num;
  138. }
  139. /**
  140. * This function get the quantity of URLs
  141. * @author Julio Montoya
  142. * @return int count of urls
  143. * */
  144. public static function url_count()
  145. {
  146. $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
  147. $sql = "SELECT count(id) as count_result FROM $table_access_url";
  148. $res = Database::query($sql);
  149. $url = Database::fetch_array($res,'ASSOC');
  150. $result = $url['count_result'];
  151. return $result;
  152. }
  153. /**
  154. * Gets the id, url, description, and active status of ALL URLs
  155. * @author Julio Montoya
  156. * @return array
  157. * */
  158. public static function get_url_data()
  159. {
  160. $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
  161. $table_branch_sync = Database :: get_main_table(TABLE_BRANCH_SYNC);
  162. $sql = "SELECT id, url, description, active, url_type FROM $table_access_url ORDER BY id";
  163. $res = Database::query($sql);
  164. $urls = array ();
  165. while ($url = Database::fetch_assoc($res)) {
  166. if ($url['url_type'] > 1) {
  167. $sql2 = "SELECT branch_name, branch_ip, latitude, longitude, dwn_speed, up_speed, delay, admin_mail, admin_name, admin_phone, last_sync_trans_id, last_sync_trans_date, last_sync_type FROM $table_branch_sync WHERE access_url_id = ".$url['id'];
  168. $res2 = Database::query($sql2);
  169. $url2 = Database::fetch_assoc($res2);
  170. $url = array_merge($url, $url2);
  171. }
  172. $urls[] = $url;
  173. }
  174. return $urls;
  175. }
  176. /**
  177. * Gets the id, url, description, and active status of ALL URLs
  178. * @author Julio Montoya
  179. * @return array
  180. * */
  181. public static function get_url_data_from_id($url_id)
  182. {
  183. $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
  184. $sql = "SELECT id, url, description, active, url_type FROM $table_access_url WHERE id = ".Database::escape_string($url_id);
  185. $res = Database::query($sql);
  186. $row = Database::fetch_array($res);
  187. if ($row['url_type'] > 1) {
  188. $sql2 = "SELECT * FROM $table_branch_sync WHERE access_url_id = ".$url['id'];
  189. $res2 = Database::query($sql);
  190. $row2 = Database::fetch_array($res2);
  191. $row = array_merge($row,$row2);
  192. }
  193. return $row;
  194. }
  195. /** Gets the inner join of users and urls table
  196. * @author Julio Montoya
  197. * @param int access url id
  198. * @return array Database::store_result of the result
  199. * */
  200. public static function get_url_rel_user_data($access_url_id = null, $order_by = null)
  201. {
  202. $where = '';
  203. $table_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
  204. $tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
  205. if (!empty($access_url_id)) {
  206. $where ="WHERE $table_url_rel_user.access_url_id = ".Database::escape_string($access_url_id);
  207. }
  208. if (empty($order_by)) {
  209. $order_clause = api_sort_by_first_name() ? ' ORDER BY firstname, lastname, username' : ' ORDER BY lastname, firstname, username';
  210. } else {
  211. $order_clause = $order_by;
  212. }
  213. $sql="SELECT u.user_id, lastname, firstname, username, official_code, access_url_id
  214. FROM $tbl_user u
  215. INNER JOIN $table_url_rel_user
  216. ON $table_url_rel_user.user_id = u.user_id
  217. $where $order_clause";
  218. $result=Database::query($sql);
  219. $users=Database::store_result($result);
  220. return $users;
  221. }
  222. /** Gets the inner join of access_url and the course table
  223. * @author Julio Montoya
  224. * @param int access url id
  225. * @return array Database::store_result of the result
  226. * */
  227. public static function get_url_rel_course_data($access_url_id='')
  228. {
  229. $where ='';
  230. $table_url_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
  231. $tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE);
  232. if (!empty($access_url_id))
  233. $where ="WHERE $table_url_rel_course.access_url_id = ".Database::escape_string($access_url_id);
  234. $sql="SELECT course_code, title, access_url_id
  235. FROM $tbl_course u
  236. INNER JOIN $table_url_rel_course
  237. ON $table_url_rel_course.course_code = code
  238. $where
  239. ORDER BY title, code";
  240. $result=Database::query($sql);
  241. $courses=Database::store_result($result);
  242. return $courses;
  243. }
  244. /** Gets the inner join of access_url and the session table
  245. * @author Julio Montoya
  246. * @param int access url id
  247. * @return array Database::store_result of the result
  248. * */
  249. public static function get_url_rel_session_data($access_url_id='')
  250. {
  251. $where ='';
  252. $table_url_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
  253. $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
  254. if (!empty($access_url_id))
  255. $where ="WHERE $table_url_rel_session.access_url_id = ".Database::escape_string($access_url_id);
  256. $sql="SELECT id, name, access_url_id
  257. FROM $tbl_session u
  258. INNER JOIN $table_url_rel_session
  259. ON $table_url_rel_session.session_id = id
  260. $where
  261. ORDER BY name, id";
  262. $result=Database::query($sql);
  263. $sessions=Database::store_result($result);
  264. return $sessions;
  265. }
  266. /**
  267. * Sets the status of an URL 1 or 0
  268. * @author Julio Montoya
  269. * @param string lock || unlock
  270. * @param int url id
  271. * */
  272. public static function set_url_status($status, $url_id)
  273. {
  274. $url_table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
  275. if ($status=='lock') {
  276. $status_db='0';
  277. }
  278. if ($status=='unlock') {
  279. $status_db='1';
  280. }
  281. if(($status_db=='1' OR $status_db=='0') AND is_numeric($url_id)) {
  282. $sql="UPDATE $url_table SET active='".Database::escape_string($status_db)."' WHERE id='".Database::escape_string($url_id)."'";
  283. $result = Database::query($sql);
  284. }
  285. }
  286. /**
  287. * Checks the relationship between an URL and a User (return the num_rows)
  288. * @author Julio Montoya
  289. * @param int user id
  290. * @param int url id
  291. * @return boolean true if success
  292. * */
  293. public static function relation_url_user_exist($user_id, $url_id) {
  294. $table_url_rel_user= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
  295. $sql= "SELECT user_id FROM $table_url_rel_user WHERE access_url_id = ".Database::escape_string($url_id)." AND user_id = ".Database::escape_string($user_id)." ";
  296. $result = Database::query($sql);
  297. $num = Database::num_rows($result);
  298. return $num;
  299. }
  300. /**
  301. * Checks the relationship between an URL and a Course (return the num_rows)
  302. * @author Julio Montoya
  303. * @param int user id
  304. * @param int url id
  305. * @return boolean true if success
  306. * */
  307. public static function relation_url_course_exist($course_id, $url_id)
  308. {
  309. $table_url_rel_course= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
  310. $sql= "SELECT course_code FROM $table_url_rel_course WHERE access_url_id = ".Database::escape_string($url_id)." AND course_code = '".Database::escape_string($course_id)."'";
  311. $result = Database::query($sql);
  312. $num = Database::num_rows($result);
  313. return $num;
  314. }
  315. /**
  316. * Checks the relationship between an URL and a Session (return the num_rows)
  317. * @author Julio Montoya
  318. * @param int user id
  319. * @param int url id
  320. * @return boolean true if success
  321. * */
  322. public static function relation_url_session_exist($session_id, $url_id) {
  323. $table_url_rel_session= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
  324. $session_id = intval($session_id);
  325. $url_id = intval($url_id);
  326. $sql= "SELECT session_id FROM $table_url_rel_session WHERE access_url_id = ".Database::escape_string($url_id)." AND session_id = ".Database::escape_string($session_id);
  327. $result = Database::query($sql);
  328. $num = Database::num_rows($result);
  329. return $num;
  330. }
  331. /**
  332. * Add a group of users into a group of URLs
  333. * @author Julio Montoya
  334. * @param array of user_ids
  335. * @param array of url_ids
  336. * */
  337. public static function add_users_to_urls($user_list, $url_list) {
  338. $table_url_rel_user= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
  339. $result_array=array();
  340. if (is_array($user_list) && is_array($url_list)){
  341. foreach ($url_list as $url_id) {
  342. foreach ($user_list as $user_id) {
  343. $count = UrlManager::relation_url_user_exist($user_id,$url_id);
  344. if ($count==0) {
  345. $sql = "INSERT INTO $table_url_rel_user
  346. SET user_id = ".Database::escape_string($user_id).", access_url_id = ".Database::escape_string($url_id);
  347. $result = Database::query($sql);
  348. if($result)
  349. $result_array[$url_id][$user_id]=1;
  350. else
  351. $result_array[$url_id][$user_id]=0;
  352. }
  353. }
  354. }
  355. }
  356. return $result_array;
  357. }
  358. /**
  359. * Add a group of courses into a group of URLs
  360. * @author Julio Montoya
  361. * @param array of course ids
  362. * @param array of url_ids
  363. * */
  364. public static function add_courses_to_urls($course_list,$url_list)
  365. {
  366. $table_url_rel_course= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
  367. $result_array=array();
  368. if (is_array($course_list) && is_array($url_list)){
  369. foreach ($url_list as $url_id) {
  370. foreach ($course_list as $course_code) {
  371. $count = UrlManager::relation_url_course_exist($course_code,$url_id);
  372. if ($count==0) {
  373. $sql = "INSERT INTO $table_url_rel_course
  374. SET course_code = '".Database::escape_string($course_code)."', access_url_id = ".Database::escape_string($url_id);
  375. $result = Database::query($sql);
  376. if($result)
  377. $result_array[$url_id][$course_code]=1;
  378. else
  379. $result_array[$url_id][$course_code]=0;
  380. }
  381. }
  382. }
  383. }
  384. return $result_array;
  385. }
  386. /**
  387. * Add a group of sessions into a group of URLs
  388. * @author Julio Montoya
  389. * @param array of session ids
  390. * @param array of url_ids
  391. * */
  392. public static function add_sessions_to_urls($session_list,$url_list)
  393. {
  394. $table_url_rel_session= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
  395. $result_array=array();
  396. if (is_array($session_list) && is_array($url_list)){
  397. foreach ($url_list as $url_id) {
  398. foreach ($session_list as $session_id) {
  399. $count = UrlManager::relation_url_session_exist($session_id,$url_id);
  400. if ($count==0) {
  401. $sql = "INSERT INTO $table_url_rel_session
  402. SET session_id = ".Database::escape_string($session_id).", access_url_id = ".Database::escape_string($url_id);
  403. $result = Database::query($sql);
  404. if($result)
  405. $result_array[$url_id][$session_id]=1;
  406. else
  407. $result_array[$url_id][$session_id]=0;
  408. }
  409. }
  410. }
  411. }
  412. return $result_array;
  413. }
  414. /**
  415. * Add a user into a url
  416. * @author Julio Montoya
  417. * @param user_id
  418. * @param url_id
  419. * @return boolean true if success
  420. * */
  421. public static function add_user_to_url($user_id, $url_id = 1) {
  422. $table_url_rel_user= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
  423. if (empty($url_id)) $url_id = 1;
  424. $count = UrlManager::relation_url_user_exist($user_id,$url_id);
  425. $result = true;
  426. if (empty($count)) {
  427. $sql = "INSERT INTO $table_url_rel_user (user_id, access_url_id) VALUES ('".Database::escape_string($user_id)."', '".Database::escape_string($url_id)."') ";
  428. $result = Database::query($sql);
  429. }
  430. return $result;
  431. }
  432. public static function add_course_to_url($course_code, $url_id = 1)
  433. {
  434. $table_url_rel_course= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
  435. if (empty($url_id)) $url_id=1;
  436. $count = UrlManager::relation_url_course_exist($course_code, $url_id);
  437. $result = false;
  438. if (empty($count)) {
  439. $sql = "INSERT INTO $table_url_rel_course
  440. SET course_code = '".Database::escape_string($course_code)."', access_url_id = ".Database::escape_string($url_id);
  441. $result = Database::query($sql);
  442. }
  443. return $result;
  444. }
  445. /**
  446. * Inserts a session to a URL (access_url_rel_session table)
  447. * @param int Session ID
  448. * @param int URL ID
  449. * @return bool True on success, false session already exists or insert failed
  450. */
  451. public static function add_session_to_url($session_id, $url_id = 1) {
  452. $table_url_rel_session= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
  453. if (empty($url_id)) $url_id=1;
  454. $result = false;
  455. $count = UrlManager::relation_url_session_exist($session_id,$url_id);
  456. $session_id = intval($session_id);
  457. if (empty($count) && !empty($session_id)) {
  458. $url_id = intval($url_id);
  459. $sql = "INSERT INTO $table_url_rel_session
  460. SET session_id = ".Database::escape_string($session_id).", access_url_id = ".Database::escape_string($url_id);
  461. $result = Database::query($sql);
  462. }
  463. return $result;
  464. }
  465. /**
  466. * Deletes an url and user relationship
  467. * @author Julio Montoya
  468. * @param int user id
  469. * @param int url id
  470. * @return boolean true if success
  471. * */
  472. public static function delete_url_rel_user($user_id, $url_id) {
  473. $table_url_rel_user= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
  474. $result = true;
  475. if (!empty($user_id) && !empty($url_id)) {
  476. $sql= "DELETE FROM $table_url_rel_user WHERE user_id = ".Database::escape_string($user_id)." AND access_url_id = ".Database::escape_string($url_id);
  477. $result = Database::query($sql);
  478. }
  479. return $result;
  480. }
  481. /**
  482. * Deletes an url and course relationship
  483. * @author Julio Montoya
  484. * @param char course code
  485. * @param int url id
  486. * @return boolean true if success
  487. * */
  488. public static function delete_url_rel_course($course_code, $url_id)
  489. {
  490. $table_url_rel_course= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
  491. $sql= "DELETE FROM $table_url_rel_course WHERE course_code = '".Database::escape_string($course_code)."' AND access_url_id=".Database::escape_string($url_id)." ";
  492. $result = Database::query($sql);
  493. return $result;
  494. }
  495. /**
  496. * Deletes an url and session relationship
  497. * @author Julio Montoya
  498. * @param char course code
  499. * @param int url id
  500. * @return boolean true if success
  501. * */
  502. public static function delete_url_rel_session($session_id, $url_id) {
  503. $table_url_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
  504. $sql= "DELETE FROM $table_url_rel_session WHERE session_id = ".Database::escape_string($session_id)." AND access_url_id=".Database::escape_string($url_id)." ";
  505. $result = Database::query($sql,'ASSOC');
  506. return $result;
  507. }
  508. /**
  509. * Updates the access_url_rel_user table with a given user list
  510. * @author Julio Montoya
  511. * @param array user list
  512. * @param int access_url_id
  513. * */
  514. public static function update_urls_rel_user($user_list, $access_url_id) {
  515. $table_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
  516. $sql = "SELECT user_id FROM $table_url_rel_user WHERE access_url_id = ".intval($access_url_id);
  517. $result = Database::query($sql);
  518. $existing_users = array();
  519. //Getting all users
  520. while($row = Database::fetch_array($result)){
  521. $existing_users[] = $row['user_id'];
  522. }
  523. //Adding users
  524. $users_added = array();
  525. foreach($user_list as $user_id_to_add) {
  526. if (!in_array($user_id_to_add, $existing_users)) {
  527. $result = UrlManager::add_user_to_url($user_id_to_add, $access_url_id);
  528. if ($result) {
  529. $users_added[] = $user_id_to_add;
  530. }
  531. }
  532. }
  533. $users_deleted = array();
  534. //deleting old users
  535. foreach($existing_users as $user_id_to_delete) {
  536. if (!in_array($user_id_to_delete, $user_list)) {
  537. $result = UrlManager::delete_url_rel_user($user_id_to_delete, $access_url_id);
  538. if ($result) {
  539. $users_deleted[] = $user_id_to_delete;
  540. }
  541. }
  542. }
  543. if (empty($users_added) && empty($users_deleted)) {
  544. return false;
  545. }
  546. return array('users_added' => $users_added, 'users_deleted' => $users_deleted);
  547. }
  548. /**
  549. * Updates the access_url_rel_course table with a given user list
  550. * @author Julio Montoya
  551. * @param array user list
  552. * @param int access_url_id
  553. * */
  554. public static function update_urls_rel_course($course_list,$access_url_id) {
  555. $table_course = Database :: get_main_table(TABLE_MAIN_COURSE);
  556. $table_url_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
  557. $sql = "SELECT course_code FROM $table_url_rel_course WHERE access_url_id=".intval($access_url_id);
  558. $result = Database::query($sql);
  559. $existing_courses = array();
  560. while($row = Database::fetch_array($result)){
  561. $existing_courses[] = $row['course_code'];
  562. }
  563. //adding courses
  564. foreach($course_list as $course_code) {
  565. if(!in_array($course_code, $existing_courses)) {
  566. UrlManager::add_course_to_url($course_code, $access_url_id);
  567. $course_info = api_get_course_info($course_code);
  568. CourseManager::update_course_ranking($course_info['real_id'], 0, $access_url_id);
  569. }
  570. }
  571. //deleting old courses
  572. foreach($existing_courses as $existing_course) {
  573. if(!in_array($existing_course, $course_list)) {
  574. UrlManager::delete_url_rel_course($existing_course,$access_url_id);
  575. $course_info = api_get_course_info($existing_course);
  576. CourseManager::update_course_ranking($course_info['real_id'], 0, $access_url_id);
  577. }
  578. }
  579. }
  580. /**
  581. * Updates the access_url_rel_session table with a given user list
  582. * @author Julio Montoya
  583. * @param array user list
  584. * @param int access_url_id
  585. * */
  586. public static function update_urls_rel_session($session_list,$access_url_id) {
  587. $table_session = Database :: get_main_table(TABLE_MAIN_SESSION);
  588. $table_url_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
  589. $sql = "SELECT session_id FROM $table_url_rel_session WHERE access_url_id=".Database::escape_string($access_url_id);
  590. $result = Database::query($sql);
  591. $existing_sessions = array();
  592. while($row = Database::fetch_array($result)){
  593. $existing_sessions[] = $row['session_id'];
  594. }
  595. //adding users
  596. foreach($session_list as $session) {
  597. if(!in_array($session, $existing_sessions)) {
  598. if (!empty($session) && !empty($access_url_id)) {
  599. UrlManager::add_session_to_url($session, $access_url_id);
  600. }
  601. }
  602. }
  603. //deleting old users
  604. foreach($existing_sessions as $existing_session) {
  605. if(!in_array($existing_session, $session_list)) {
  606. if (!empty($existing_session) && !empty($access_url_id)) {
  607. UrlManager::delete_url_rel_session($existing_session,$access_url_id);
  608. }
  609. }
  610. }
  611. }
  612. public static function get_access_url_from_user($user_id) {
  613. $table_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
  614. $table_url = Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
  615. $sql = "SELECT url, access_url_id FROM $table_url_rel_user url_rel_user INNER JOIN $table_url u
  616. ON (url_rel_user.access_url_id = u.id)
  617. WHERE user_id = ".Database::escape_string($user_id);
  618. $result = Database::query($sql);
  619. $url_list = Database::store_result($result,'ASSOC');
  620. return $url_list;
  621. }
  622. public static function get_access_url_from_session($session_id) {
  623. $table_url_rel_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
  624. $table_url = Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
  625. $sql = "SELECT url, access_url_id FROM $table_url_rel_session url_rel_session INNER JOIN $table_url u
  626. ON (url_rel_session.access_url_id = u.id)
  627. WHERE session_id = ".Database::escape_string($session_id);
  628. $result = Database::query($sql);
  629. $url_list = Database::store_result($result);
  630. return $url_list;
  631. }
  632. /**
  633. *
  634. * */
  635. public static function get_url_id($url) {
  636. $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
  637. $sql = "SELECT id FROM $table_access_url WHERE url = '".Database::escape_string($url)."'";
  638. $result = Database::query($sql);
  639. $access_url_id = Database::result($result, 0, 0);
  640. return $access_url_id;
  641. }
  642. }