Passed
Push — 1.10.x ( 44706e...767d99 )
by
unknown
56:54
created

UrlManager::add()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 11

Duplication

Lines 14
Ratio 100 %
Metric Value
dl 14
loc 14
rs 9.4285
cc 1
eloc 11
nc 1
nop 3
1
<?php
2
/* For licensing terms, see /license.txt */
3
4
/**
5
 * Class UrlManager
6
 * This library provides functions for the access_url management.
7
 * Include/require it in your code to use its functionality.
8
 *
9
 *	@package chamilo.library
10
 */
11
class UrlManager
12
{
13
    /**
14
    * Creates a new url access
15
    *
16
    * @author Julio Montoya <[email protected]>,
17
    *
18
    * @param	string	$url The URL of the site
19
    * @param	string  $description The description of the site
20
    * @param	int		$active is active or not
21
    * @return boolean if success
22
    */
23 View Code Duplication
    public static function add($url, $description, $active)
24
    {
25
        $tms = time();
26
        $table= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
27
        $sql = "INSERT INTO $table
28
                SET url 	= '".Database::escape_string($url)."',
29
                description = '".Database::escape_string($description)."',
30
                active 		= '".intval($active)."',
31
                created_by 	= '".api_get_user_id()."',
32
                tms = FROM_UNIXTIME(".$tms.")";
33
        $result = Database::query($sql);
34
35
        return $result;
36
    }
37
38
    /**
39
    * Updates an URL access
40
    * @author Julio Montoya <[email protected]>,
41
    *
42
    * @param	int 	$url_id The url id
43
    * @param	string 	$url
44
    * @param	string  $description The description of the site
45
    * @param	int		$active is active or not
46
    * @return 	boolean if success
47
    */
48 View Code Duplication
    public static function update($url_id, $url, $description, $active)
49
    {
50
        $url_id = intval($url_id);
51
        $table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
52
        $sql = "UPDATE $table
53
                SET url 	= '".Database::escape_string($url)."',
54
                description = '".Database::escape_string($description)."',
55
                active 		= '".intval($active)."',
56
                created_by 	= '".api_get_user_id()."',
57
                tms 		= '".api_get_utc_datetime()."'
58
                WHERE id = '$url_id'";
59
60
        $result = Database::query($sql);
61
62
        return $result;
63
    }
64
65
    /**
66
    * Deletes an url
67
    * @author Julio Montoya
68
    * @param int $id url id
69
     *
70
    * @return boolean true if success
71
    * */
72 View Code Duplication
    public static function delete($id)
73
    {
74
        $id = intval($id);
75
        $table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
76
        $sql= "DELETE FROM $table WHERE id = ".$id;
77
        $result = Database::query($sql);
78
79
        return $result;
80
    }
81
82
    /**
83
     * @param string $url
84
     *
85
     * @return int
86
     */
87
    public static function url_exist($url)
88
    {
89
        $table= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
90
        $sql = "SELECT id FROM $table
91
                WHERE url = '".Database::escape_string($url)."' ";
92
        $res = Database::query($sql);
93
        $num = Database::num_rows($res);
94
95
        return $num;
96
    }
97
98
    /**
99
     * @param string $url
100
     *
101
     * @return int
102
     */
103 View Code Duplication
    public static function url_id_exist($url)
104
    {
105
        if (empty($url)) {
106
            return false;
107
        }
108
        $table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
109
        $sql = "SELECT id FROM $table WHERE id = ".intval($url)."";
110
        $res = Database::query($sql);
111
        $num = Database::num_rows($res);
112
113
        return $num;
114
    }
115
116
    /**
117
     * This function get the quantity of URLs
118
     * @author Julio Montoya
119
     * @return int count of urls
120
     * */
121 View Code Duplication
    public static function url_count()
122
    {
123
        $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
124
        $sql = "SELECT count(id) as count_result FROM $table_access_url";
125
        $res = Database::query($sql);
126
        $url = Database::fetch_array($res,'ASSOC');
127
        $result = $url['count_result'];
128
129
        return $result;
130
    }
131
132
    /**
133
     * Gets the id, url, description, and active status of ALL URLs
134
     * @author Julio Montoya
135
     * @return array
136
     * */
137
    public static function get_url_data()
138
    {
139
        $table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
140
        $sql = "SELECT id, url, description, active
141
                FROM $table
142
                ORDER BY id";
143
        $res = Database::query($sql);
144
        $urls = array ();
145
        while ($url = Database::fetch_array($res)) {
146
            $urls[] = $url;
147
        }
148
149
        return $urls;
150
    }
151
152
    /**
153
     * Gets the id, url, description, and active status of ALL URLs
154
     * @author Julio Montoya
155
     * @param int $url_id
156
     * @return array
157
     * */
158 View Code Duplication
    public static function get_url_data_from_id($url_id)
159
    {
160
        $table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
161
        $sql = "SELECT id, url, description, active
162
                FROM $table
163
                WHERE id = ".intval($url_id);
164
        $res = Database::query($sql);
165
        $row = Database::fetch_array($res);
166
167
        return $row;
168
    }
169
170
    /**
171
     * Gets the inner join of users and urls table
172
     * @author Julio Montoya
173
     * @param int  access url id
174
     * @param string $order_by
175
     * @return array   Database::store_result of the result
176
     **/
177
    public static function get_url_rel_user_data($access_url_id = null, $order_by = null)
178
    {
179
        $where = '';
180
        $table_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
181
        $tbl_user = Database :: get_main_table(TABLE_MAIN_USER);
182
        if (!empty($access_url_id)) {
183
            $where = "WHERE $table_url_rel_user.access_url_id = ".intval($access_url_id);
184
        }
185
        if (empty($order_by)) {
186
            $order_clause = api_sort_by_first_name(
187
            ) ? ' ORDER BY firstname, lastname, username' : ' ORDER BY lastname, firstname, username';
188
        } else {
189
            $order_clause = $order_by;
190
        }
191
        $sql = "SELECT u.user_id, lastname, firstname, username, official_code, access_url_id
192
                FROM $tbl_user u
193
                INNER JOIN $table_url_rel_user
194
                ON $table_url_rel_user.user_id = u.user_id
195
                $where  $order_clause";
196
        $result = Database::query($sql);
197
        $users = Database::store_result($result);
198
199
        return $users;
200
    }
201
202
    /**
203
    * Gets the inner join of access_url and the course table
204
    *
205
    * @author Julio Montoya
206
    * @param int  access url id
207
    * @return array   Database::store_result of the result
208
    **/
209
    public static function get_url_rel_course_data($access_url_id = null)
210
    {
211
        $where = '';
212
        $table_url_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
213
        $tbl_course = Database :: get_main_table(TABLE_MAIN_COURSE);
214
215
        if (!empty($access_url_id)) {
216
            $where = " WHERE uc.access_url_id = ".intval($access_url_id);
217
        }
218
219
        $sql = "SELECT u.id, c_id, title, uc.access_url_id
220
                FROM $tbl_course u
221
                INNER JOIN $table_url_rel_course uc
222
                ON uc.c_id = u.id
223
                $where
224
                ORDER BY title, code";
225
226
        $result = Database::query($sql);
227
        $courses = Database::store_result($result);
228
229
        return $courses;
230
    }
231
232
    /**
233
     * Gets the number of rows with a specific course_code in access_url_rel_course table
234
     * @author Yoselyn Castillo
235
     * @param int $courseId
236
     *
237
     * @return int Database::num_rows($res);
238
     **/
239 View Code Duplication
    public static function getCountUrlRelCourse($courseId)
240
    {
241
        $courseId = intval($courseId);
242
        $tableUrlRelCourse = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
243
        $sql = "SELECT *
244
                FROM $tableUrlRelCourse
245
                WHERE c_id = '$courseId'";
246
        $res = Database::query($sql);
247
248
        return Database::num_rows($res);
249
    }
250
251
    /**
252
     * Gets the inner join of access_url and the session table
253
     * @author Julio Montoya
254
     * @param int  $access_url_id access url id
255
     *
256
     * @return array   Database::store_result of the result
257
     *
258
     **/
259
    public static function get_url_rel_session_data($access_url_id = null)
260
    {
261
        $where ='';
262
        $table_url_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
263
        $tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
264
265
        if (!empty($access_url_id))
266
            $where ="WHERE $table_url_rel_session.access_url_id = ".intval($access_url_id);
267
268
        $sql = "SELECT id, name, access_url_id
269
                FROM $tbl_session u
270
                INNER JOIN $table_url_rel_session
271
                ON $table_url_rel_session.session_id = id
272
                $where
273
                ORDER BY name, id";
274
275
        $result = Database::query($sql);
276
        $sessions = Database::store_result($result);
277
278
        return $sessions;
279
    }
280
281
    /**
282
     * Gets the inner join of access_url and the usergroup table
283
     *
284
     * @author Julio Montoya
285
     * @param int  $access_url_id
286
     *
287
     * @return array   Database::store_result of the result
288
     **/
289
    public static function get_url_rel_usergroup_data($access_url_id = null)
290
    {
291
        $where = '';
292
        $table_url_rel_usergroup = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USERGROUP);
293
        $table_user_group = Database::get_main_table(TABLE_USERGROUP);
294
295
        if (!empty($access_url_id)) {
296
            $where ="WHERE $table_url_rel_usergroup.access_url_id = ".intval($access_url_id);
297
        }
298
299
        $sql = "SELECT id, name, access_url_id
300
				FROM $table_user_group u
301
				INNER JOIN $table_url_rel_usergroup
302
				ON $table_url_rel_usergroup.usergroup_id = u.id
303
				$where
304
				ORDER BY name";
305
306
        $result = Database::query($sql);
307
        $courses = Database::store_result($result);
308
309
        return $courses;
310
    }
311
312
    /**
313
     * Gets the inner join of access_url and the usergroup table
314
     *
315
     * @author Julio Montoya
316
     * @param int  $access_url_id
317
     * @return array   Database::store_result of the result
318
     **/
319
    public static function getUrlRelCourseCategory($access_url_id = null)
320
    {
321
        $table_url_rel = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE_CATEGORY);
322
        $table = Database::get_main_table(TABLE_MAIN_CATEGORY);
323
        $where = " WHERE 1=1 ";
324
        if (!empty($access_url_id)) {
325
            $where .= " AND $table_url_rel.access_url_id = ".intval($access_url_id);
326
        }
327
        $where .= " AND (parent_id IS NULL) ";
328
329
        $sql = "SELECT id, name, access_url_id
330
                FROM $table u
331
                INNER JOIN $table_url_rel
332
                ON $table_url_rel.course_category_id = u.id
333
                $where
334
                ORDER BY name";
335
336
        $result = Database::query($sql);
337
        $courses = Database::store_result($result, 'ASSOC');
338
339
        return $courses;
340
    }
341
342
    /**
343
     * Sets the status of an URL 1 or 0
344
     * @author Julio Montoya
345
     * @param string lock || unlock
346
     * @param int url id
347
     * */
348
    public static function set_url_status($status, $url_id)
349
    {
350
        $url_table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
351
        if ($status == 'lock') {
352
            $status_db = '0';
353
        }
354
        if ($status == 'unlock') {
355
            $status_db = '1';
356
        }
357 View Code Duplication
        if (($status_db == '1' || $status_db == '0') && is_numeric($url_id)) {
358
            $sql = "UPDATE $url_table SET active='".intval($status_db)."'
359
                    WHERE id='".intval($url_id)."'";
360
            Database::query($sql);
361
        }
362
    }
363
364
    /**
365
    * Checks the relationship between an URL and a User (return the num_rows)
366
    * @author Julio Montoya
367
    * @param int user id
368
    * @param int url id
369
    * @return boolean true if success
370
    * */
371
    public static function relation_url_user_exist($user_id, $url_id)
372
    {
373
        $table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
374
        $sql= "SELECT user_id FROM $table
375
               WHERE access_url_id = ".intval($url_id)." AND user_id = ".intval($user_id)." ";
376
        $result = Database::query($sql);
377
        $num = Database::num_rows($result);
378
379
        return $num;
380
	}
381
382
    /**
383
    * Checks the relationship between an URL and a Course (return the num_rows)
384
    * @author Julio Montoya
385
    * @param int $courseId
386
    * @param int $urlId
387
    * @return boolean true if success
388
    * */
389
    public static function relation_url_course_exist($courseId, $urlId)
390
    {
391
        $table_url_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
392
        $sql= "SELECT c_id FROM $table_url_rel_course
393
               WHERE
394
                    access_url_id = ".intval($urlId)." AND
395
                    c_id = '".intval($courseId)."'";
396
        $result = Database::query($sql);
397
        $num = Database::num_rows($result);
398
399
        return $num;
400
    }
401
402
    /**
403
     * Checks the relationship between an URL and a UserGr
404
     * oup (return the num_rows)
405
     * @author Julio Montoya
406
     * @param int $userGroupId
407
     * @param int $urlId
408
     * @return boolean true if success
409
     * */
410 View Code Duplication
    public static function relationUrlUsergroupExist($userGroupId, $urlId)
411
    {
412
        $table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USERGROUP);
413
        $sql= "SELECT usergroup_id FROM $table
414
               WHERE access_url_id = ".intval($urlId)." AND
415
                     usergroup_id = ".intval($userGroupId);
416
        $result = Database::query($sql);
417
        $num = Database::num_rows($result);
418
419
        return $num;
420
    }
421
422
    /**
423
    * Checks the relationship between an URL and a Session (return the num_rows)
424
    * @author Julio Montoya
425
    * @param int user id
426
    * @param int url id
427
    * @return boolean true if success
428
    * */
429 View Code Duplication
    public static function relation_url_session_exist($session_id, $url_id)
430
    {
431
        $table_url_rel_session= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
432
        $session_id = intval($session_id);
433
        $url_id		= intval($url_id);
434
        $sql = "SELECT session_id FROM $table_url_rel_session
435
                WHERE
436
                    access_url_id = ".intval($url_id)." AND
437
                    session_id = ".Database::escape_string($session_id);
438
        $result = Database::query($sql);
439
        $num = Database::num_rows($result);
440
441
        return $num;
442
    }
443
444
    /**
445
     * Add a group of users into a group of URLs
446
     * @author Julio Montoya
447
     * @param  array of user_ids
448
     * @param  array of url_ids
449
     * @return array
450
     * */
451 View Code Duplication
    public static function add_users_to_urls($user_list, $url_list)
452
    {
453
        $table_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
454
        $result_array = array();
455
456
        if (is_array($user_list) && is_array($url_list)){
457
            foreach ($url_list as $url_id) {
458
                foreach ($user_list as $user_id) {
459
                    $count = UrlManager::relation_url_user_exist($user_id,$url_id);
460
                    if ($count==0) {
461
                        $sql = "INSERT INTO $table_url_rel_user
462
                                SET user_id = ".intval($user_id).", access_url_id = ".intval($url_id);
463
                        $result = Database::query($sql);
464
                        if ($result) {
465
                            $result_array[$url_id][$user_id] = 1;
466
                        } else {
467
                            $result_array[$url_id][$user_id] = 0;
468
                        }
469
                    }
470
                }
471
            }
472
        }
473
474
        return 	$result_array;
475
    }
476
477
478
    /**
479
     * Add a group of courses into a group of URLs
480
     * @author Julio Montoya
481
     * @param  array of course ids
482
     * @param  array of url_ids
483
     * @return array
484
     **/
485
    public static function add_courses_to_urls($course_list,$url_list)
486
    {
487
        $table_url_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
488
        $result_array = array();
489
490
        if (is_array($course_list) && is_array($url_list)){
491
            foreach ($url_list as $url_id) {
492
                foreach ($course_list as $course_code) {
493
                    $courseInfo = api_get_course_info($course_code);
494
                    $courseId = $courseInfo['real_id'];
495
496
                    $count = self::relation_url_course_exist($courseId, $url_id);
497
                    if ($count==0) {
498
                        $sql = "INSERT INTO $table_url_rel_course
499
                                SET c_id = '".$courseId."', access_url_id = ".intval($url_id);
500
                        $result = Database::query($sql);
501
                        if ($result) {
502
                            $result_array[$url_id][$course_code] = 1;
503
                        } else {
504
                            $result_array[$url_id][$course_code] = 0;
505
                        }
506
                    }
507
                }
508
            }
509
        }
510
511
        return 	$result_array;
512
    }
513
514
    /**
515
     * Add a group of user group into a group of URLs
516
     * @author Julio Montoya
517
     * @param  array $userGroupList of course ids
518
     * @param  array $urlList of url_ids
519
     * @return array
520
     **/
521 View Code Duplication
    public static function addUserGroupListToUrl($userGroupList, $urlList)
522
    {
523
        $resultArray = array();
524
        if (is_array($userGroupList) && is_array($urlList)) {
525
            foreach ($urlList as $urlId) {
526
                foreach ($userGroupList as $userGroupId) {
527
                    $count = self::relationUrlUsergroupExist($userGroupId, $urlId);
528
                    if ($count == 0) {
529
                        $result = self::addUserGroupToUrl($userGroupId, $urlId);
530
                        if ($result) {
531
                            $resultArray[$urlId][$userGroupId] = 1;
532
                        } else {
533
                            $resultArray[$urlId][$userGroupId] = 0;
534
                        }
535
                    }
536
                }
537
            }
538
        }
539
540
        return 	$resultArray;
541
    }
542
543
    /**
544
     * Add a group of user group into a group of URLs
545
     * @author Julio Montoya
546
     * @param  array of course ids
547
     * @param  array of url_ids
548
     * @return array
549
     **/
550 View Code Duplication
    public static function addCourseCategoryListToUrl($courseCategoryList, $urlList)
551
    {
552
        $resultArray = array();
553
        if (is_array($courseCategoryList) && is_array($urlList)) {
554
            foreach ($urlList as $urlId) {
555
                foreach ($courseCategoryList as $categoryCourseId) {
556
                    $count = self::relationUrlCourseCategoryExist($categoryCourseId, $urlId);
557
                    if ($count == 0) {
558
                        $result = self::addCourseCategoryToUrl($categoryCourseId, $urlId);
559
                        if ($result) {
560
                            $resultArray[$urlId][$categoryCourseId] = 1;
561
                        } else {
562
                            $resultArray[$urlId][$categoryCourseId] = 0;
563
                        }
564
                    }
565
                }
566
            }
567
        }
568
569
        return 	$resultArray;
570
    }
571
572
    /**
573
     * Checks the relationship between an URL and a UserGr
574
     * oup (return the num_rows)
575
     * @author Julio Montoya
576
     * @param int $categoryCourseId
577
     * @param int $urlId
578
     * @return boolean true if success
579
     * */
580 View Code Duplication
    public static function relationUrlCourseCategoryExist($categoryCourseId, $urlId)
581
    {
582
        $table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE_CATEGORY);
583
        $sql= "SELECT course_category_id FROM $table
584
               WHERE access_url_id = ".intval($urlId)." AND
585
                     course_category_id = ".intval($categoryCourseId);
586
        $result = Database::query($sql);
587
        $num = Database::num_rows($result);
588
589
        return $num;
590
    }
591
592
    /**
593
     * @param int $userGroupId
594
     * @param int $urlId
595
     * @return int
596
     */
597
    public static function addUserGroupToUrl($userGroupId, $urlId)
598
    {
599
        $urlRelUserGroupTable = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USERGROUP);
600
        $sql = "INSERT INTO $urlRelUserGroupTable
601
                SET
602
                usergroup_id = '".intval($userGroupId)."',
603
                access_url_id = ".intval($urlId);
604
        Database::query($sql);
605
        return Database::insert_id();
606
    }
607
608
    /**
609
     * @param int $categoryId
610
     * @param int $urlId
611
     * @return int
612
     */
613
    public static function addCourseCategoryToUrl($categoryId, $urlId)
614
    {
615
        $exists = self::relationUrlCourseCategoryExist($categoryId, $urlId);
616
        if (empty($exists)) {
617
            $table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE_CATEGORY);
618
619
            $sql = "INSERT INTO $table
620
                    SET
621
                    course_category_id = '".intval($categoryId)."',
622
                    access_url_id = ".intval($urlId);
623
            Database::query($sql);
624
625
            return Database::insert_id();
626
        }
627
        return 0;
628
    }
629
630
    /**
631
     * Add a group of sessions into a group of URLs
632
     * @author Julio Montoya
633
     * @param  array of session ids
634
     * @param  array of url_ids
635
     * @return array
636
     * */
637 View Code Duplication
    public static function add_sessions_to_urls($session_list, $url_list)
638
    {
639
        $table_url_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
640
        $result_array = array();
641
642
        if (is_array($session_list) && is_array($url_list)) {
643
            foreach ($url_list as $url_id) {
644
                foreach ($session_list as $session_id) {
645
                    $count = UrlManager::relation_url_session_exist($session_id, $url_id);
646
647
                    if ($count == 0) {
648
                        $sql = "INSERT INTO $table_url_rel_session
649
		               			SET
650
		               			session_id = ".intval($session_id).",
651
		               			access_url_id = ".intval($url_id);
652
                        $result = Database::query($sql);
653
                        if ($result) {
654
                            $result_array[$url_id][$session_id] = 1;
655
                        } else {
656
                            $result_array[$url_id][$session_id] = 0;
657
                        }
658
                    }
659
                }
660
            }
661
        }
662
663
        return $result_array;
664
    }
665
666
    /**
667
     * Add a user into a url
668
     * @author Julio Montoya
669
     * @param  $user_id
670
     * @param  $url_id
671
     *
672
     * @return boolean true if success
673
     * */
674
    public static function add_user_to_url($user_id, $url_id = 1)
675
    {
676
        $table_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
677
        if (empty($url_id)) {
678
            $url_id = 1;
679
        }
680
        $count  = UrlManager::relation_url_user_exist($user_id, $url_id);
681
        $result = true;
682
        if (empty($count)) {
683
            $sql = "INSERT INTO $table_url_rel_user (user_id, access_url_id)
684
                    VALUES ('".intval($user_id)."', '".intval($url_id)."') ";
685
            $result = Database::query($sql);
686
        }
687
688
        return $result;
689
    }
690
691
    /**
692
     * @param int $courseId
693
     * @param int $url_id
694
     *
695
     * @return resource
696
     */
697
    public static function add_course_to_url($courseId, $url_id = 1)
698
    {
699
        $table_url_rel_course = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
700
        if (empty($url_id)) {
701
            $url_id = 1;
702
        }
703
        $count = UrlManager::relation_url_course_exist($courseId, $url_id);
704
        if (empty($count)) {
705
            $sql = "INSERT INTO $table_url_rel_course
706
                    SET c_id = '".intval($courseId)."', access_url_id = ".intval($url_id);
707
            Database::query($sql);
708
        }
709
710
        return true;
711
    }
712
713
    /**
714
     * Inserts a session to a URL (access_url_rel_session table)
715
     * @param   int     Session ID
716
     * @param   int     URL ID
717
     *
718
     * @return  bool    True on success, false session already exists or insert failed
719
     */
720
    public static function add_session_to_url($session_id, $url_id = 1)
721
    {
722
        $table_url_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
723
        if (empty($url_id)) {
724
            $url_id = 1;
725
        }
726
        $result = false;
727
        $count = UrlManager::relation_url_session_exist($session_id, $url_id);
728
        $session_id	= intval($session_id);
729 View Code Duplication
        if (empty($count) && !empty($session_id)) {
730
            $url_id = intval($url_id);
731
            $sql = "INSERT INTO $table_url_rel_session
732
                    SET session_id = ".intval($session_id).", access_url_id = ".intval($url_id);
733
            $result = Database::query($sql);
734
        }
735
736
        return $result;
737
    }
738
739
    /**
740
    * Deletes an url and user relationship
741
    * @author Julio Montoya
742
    * @param int user id
743
    * @param int url id
744
     *
745
    * @return boolean true if success
746
    * */
747
    public static function delete_url_rel_user($user_id, $url_id)
748
    {
749
        $table_url_rel_user = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
750
        $result = true;
751 View Code Duplication
        if (!empty($user_id) && !empty($url_id)) {
752
            $sql= "DELETE FROM $table_url_rel_user
753
                   WHERE user_id = ".intval($user_id)." AND access_url_id = ".intval($url_id);
754
            $result = Database::query($sql);
755
        }
756
757
        return $result;
758
    }
759
760
    /**
761
     * Deletes user from all portals
762
     * @author Julio Montoya
763
     * @param int user id
764
     *
765
     * @return boolean true if success
766
     * */
767 View Code Duplication
    public static function deleteUserFromAllUrls($userId)
768
    {
769
        $table_url_rel_user = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
770
        $result = true;
771
        if (!empty($userId)) {
772
            $sql= "DELETE FROM $table_url_rel_user
773
                   WHERE user_id = ".intval($userId);
774
            Database::query($sql);
775
        }
776
777
        return $result;
778
    }
779
780
    /**
781
    * Deletes an url and course relationship
782
    * @author Julio Montoya
783
    * @param  int  $courseId
784
    * @param  int  $urlId
785
     *
786
    * @return boolean true if success
787
    * */
788
    public static function delete_url_rel_course($courseId, $urlId)
789
    {
790
        $table_url_rel_course= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
791
        $sql= "DELETE FROM $table_url_rel_course
792
               WHERE c_id = '".intval($courseId)."' AND access_url_id=".intval($urlId)."  ";
793
        $result = Database::query($sql);
794
795
        return $result;
796
    }
797
798
    /**
799
     * Deletes an url and $userGroup relationship
800
     * @author Julio Montoya
801
     * @param  int $userGroupId
802
     * @param  int $urlId
803
     *
804
     * @return boolean true if success
805
     * */
806
    public static function delete_url_rel_usergroup($userGroupId, $urlId)
807
    {
808
        $table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USERGROUP);
809
        $sql= "DELETE FROM $table
810
               WHERE usergroup_id = '".intval($userGroupId)."' AND
811
                     access_url_id=".intval($urlId)."  ";
812
        $result = Database::query($sql);
813
814
        return $result;
815
    }
816
817
    /**
818
     * Deletes an url and $userGroup relationship
819
     * @author Julio Montoya
820
     * @param  int $userGroupId
821
     * @param  int $urlId
822
     *
823
     * @return boolean true if success
824
     * */
825
    public static function deleteUrlRelCourseCategory($userGroupId, $urlId)
826
    {
827
        $table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE_CATEGORY);
828
        $sql= "DELETE FROM $table
829
               WHERE course_category_id = '".intval($userGroupId)."' AND
830
                     access_url_id=".intval($urlId)."  ";
831
        $result = Database::query($sql);
832
833
        return $result;
834
    }
835
836
    /**
837
    * Deletes an url and session relationship
838
    * @author Julio Montoya
839
    * @param  char  course code
840
    * @param  int url id
841
     *
842
    * @return boolean true if success
843
    * */
844
    public static function delete_url_rel_session($session_id, $url_id)
845
    {
846
        $table_url_rel_session = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
847
        $sql= "DELETE FROM $table_url_rel_session
848
               WHERE session_id = ".intval($session_id)." AND access_url_id=".intval($url_id)."  ";
849
        $result = Database::query($sql,'ASSOC');
850
851
        return $result;
852
    }
853
854
    /**
855
     * Updates the access_url_rel_user table  with a given user list
856
     * @author Julio Montoya
857
     * @param array user list
858
     * @param int access_url_id
859
     * */
860
    public static function update_urls_rel_user($user_list, $access_url_id)
861
    {
862
        $table_url_rel_user	= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
863
        $sql = "SELECT user_id FROM $table_url_rel_user WHERE access_url_id = ".intval($access_url_id);
864
        $result = Database::query($sql);
865
        $existing_users = array();
866
867
        //Getting all users
868
        while ($row = Database::fetch_array($result)) {
869
            $existing_users[] = $row['user_id'];
870
        }
871
872
        // Adding users
873
        $users_added = array();
874 View Code Duplication
        foreach ($user_list as $user_id_to_add) {
875
            if (!in_array($user_id_to_add, $existing_users)) {
876
                $result = UrlManager::add_user_to_url($user_id_to_add, $access_url_id);
877
                if ($result) {
878
                    $users_added[] = $user_id_to_add;
879
                }
880
            }
881
        }
882
883
        $users_deleted = array();
884
        // Deleting old users
885 View Code Duplication
        foreach ($existing_users as $user_id_to_delete) {
886
            if (!in_array($user_id_to_delete, $user_list)) {
887
                $result = UrlManager::delete_url_rel_user($user_id_to_delete, $access_url_id);
888
                if ($result) {
889
                    $users_deleted[] = $user_id_to_delete;
890
                }
891
            }
892
        }
893
894
        if (empty($users_added) && empty($users_deleted)) {
895
            return false;
896
        }
897
898
        return array('users_added' => $users_added, 'users_deleted' => $users_deleted);
899
    }
900
901
    /**
902
     * Updates the access_url_rel_course table  with a given user list
903
     * @author Julio Montoya
904
     * @param array $course_list
905
     * @param int access_url_id
906
     * */
907
    public static function update_urls_rel_course($course_list, $access_url_id)
908
    {
909
        $table_url_rel_course = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
910
911
        $sql = "SELECT c_id FROM $table_url_rel_course
912
                WHERE access_url_id = ".intval($access_url_id);
913
        $result = Database::query($sql);
914
915
        $existing_courses = array();
916
        while ($row = Database::fetch_array($result)){
917
            $existing_courses[] = $row['c_id'];
918
        }
919
920
        // Adding courses
921
        foreach ($course_list as $courseId) {
922
            UrlManager::add_course_to_url($courseId, $access_url_id);
923
            CourseManager::update_course_ranking($courseId, 0, $access_url_id);
924
        }
925
926
        // Deleting old courses
927
        foreach ($existing_courses as $courseId) {
928
            if (!in_array($courseId, $course_list)) {
929
                UrlManager::delete_url_rel_course($courseId, $access_url_id);
930
                CourseManager::update_course_ranking($courseId, 0, $access_url_id);
931
            }
932
        }
933
    }
934
935
    /**
936
     * Updates the access_url_rel_course table  with a given user list
937
     * @author Julio Montoya
938
     * @param array user list
939
     * @param int access_url_id
940
     * */
941
    public static function update_urls_rel_usergroup($userGroupList, $urlId)
942
    {
943
        $table = Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USERGROUP);
944
945
        $sql = "SELECT usergroup_id FROM $table WHERE access_url_id = ".intval($urlId);
946
        $result = Database::query($sql);
947
        $existingItems = array();
948
949
        while ($row = Database::fetch_array($result)){
950
            $existingItems[] = $row['usergroup_id'];
951
        }
952
953
        // Adding
954
        foreach ($userGroupList as $userGroupId) {
955
            if (!in_array($userGroupId, $existingItems)) {
956
                UrlManager::addUserGroupToUrl($userGroupId, $urlId);
957
            }
958
        }
959
960
        // Deleting old items
961
        foreach ($existingItems as $userGroupId) {
962
            if (!in_array($userGroupId, $userGroupList)) {
963
                UrlManager::delete_url_rel_usergroup($userGroupId, $urlId);
964
            }
965
        }
966
    }
967
968
    /**
969
     * Updates the access_url_rel_course_category table with a given list
970
     * @author Julio Montoya
971
     * @param array course category list
972
     * @param int access_url_id
973
     **/
974
    public static function updateUrlRelCourseCategory($list, $urlId)
975
    {
976
        $table = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE_CATEGORY);
977
978
        $sql = "SELECT course_category_id FROM $table WHERE access_url_id = ".intval($urlId);
979
        $result = Database::query($sql);
980
        $existingItems = array();
981
982
        while ($row = Database::fetch_array($result)){
983
            $existingItems[] = $row['course_category_id'];
984
        }
985
986
        // Adding
987
988 View Code Duplication
        foreach ($list as $id) {
989
            UrlManager::addCourseCategoryToUrl($id, $urlId);
990
            $categoryInfo = getCategoryById($id);
991
            $children = getChildren($categoryInfo['code']);
992
            if (!empty($children)) {
993
                foreach ($children as $category) {
994
                    UrlManager::addCourseCategoryToUrl($category['id'], $urlId);
995
                }
996
            }
997
        }
998
999
        // Deleting old items
1000 View Code Duplication
        foreach ($existingItems as $id) {
1001
            if (!in_array($id, $list)) {
1002
                UrlManager::deleteUrlRelCourseCategory($id, $urlId);
1003
                $categoryInfo = getCategoryById($id);
1004
1005
                $children = getChildren($categoryInfo['code']);
1006
                if (!empty($children)) {
1007
                    foreach ($children as $category) {
1008
                        UrlManager::deleteUrlRelCourseCategory($category['id'], $urlId);
1009
                    }
1010
                }
1011
            }
1012
        }
1013
    }
1014
1015
1016
1017
    /**
1018
     * Updates the access_url_rel_session table with a given user list
1019
     * @author Julio Montoya
1020
     * @param array user list
1021
     * @param int access_url_id
1022
     * */
1023
    public static function update_urls_rel_session($session_list,$access_url_id)
1024
    {
1025
        $table_url_rel_session	= Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
1026
1027
        $sql = "SELECT session_id FROM $table_url_rel_session WHERE access_url_id=".intval($access_url_id);
1028
        $result = Database::query($sql);
1029
        $existing_sessions = array();
1030
1031
        while ($row = Database::fetch_array($result)){
1032
            $existing_sessions[] = $row['session_id'];
1033
        }
1034
1035
        // Adding users
1036 View Code Duplication
        foreach ($session_list as $session) {
1037
            if (!in_array($session, $existing_sessions)) {
1038
                if (!empty($session) && !empty($access_url_id)) {
1039
                    UrlManager::add_session_to_url($session, $access_url_id);
1040
                }
1041
            }
1042
        }
1043
1044
        // Deleting old users
1045 View Code Duplication
        foreach ($existing_sessions as $existing_session) {
1046
            if (!in_array($existing_session, $session_list)) {
1047
                if (!empty($existing_session) && !empty($access_url_id)) {
1048
                    UrlManager::delete_url_rel_session($existing_session, $access_url_id);
1049
                }
1050
            }
1051
        }
1052
    }
1053
1054
    /**
1055
     * @param int $user_id
1056
     * @return array
1057
     */
1058
    public static function get_access_url_from_user($user_id)
1059
    {
1060
        $table_url_rel_user	= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_USER);
1061
        $table_url	= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
1062
        $sql = "SELECT url, access_url_id FROM $table_url_rel_user url_rel_user INNER JOIN $table_url u
1063
                ON (url_rel_user.access_url_id = u.id)
1064
                WHERE user_id = ".intval($user_id);
1065
        $result = Database::query($sql);
1066
        $url_list = Database::store_result($result,'ASSOC');
1067
        return $url_list;
1068
    }
1069
1070
    /**
1071
     * @param int $courseId
1072
     * @return array
1073
     */
1074
    public static function get_access_url_from_course($courseId)
1075
    {
1076
        $table	= Database :: get_main_table(TABLE_MAIN_ACCESS_URL_REL_COURSE);
1077
        $table_url	= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
1078
        $sql = "SELECT url, access_url_id FROM $table c INNER JOIN $table_url u
1079
                ON (c.access_url_id = u.id)
1080
                WHERE c_id = ".intval($courseId);
1081
1082
        $result = Database::query($sql);
1083
        $url_list = Database::store_result($result,'ASSOC');
1084
        return $url_list;
1085
    }
1086
1087
    /**
1088
     * @param $session_id
1089
     * @return array
1090
     */
1091
    public static function get_access_url_from_session($session_id)
1092
    {
1093
        $table_url_rel_session = Database::get_main_table(TABLE_MAIN_ACCESS_URL_REL_SESSION);
1094
        $table_url  = Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
1095
        $sql = "SELECT url, access_url_id FROM $table_url_rel_session url_rel_session INNER JOIN $table_url u
1096
                ON (url_rel_session.access_url_id = u.id)
1097
                WHERE session_id = ".intval($session_id);
1098
        $result = Database::query($sql);
1099
        $url_list = Database::store_result($result);
1100
1101
        return $url_list;
1102
    }
1103
1104
    /**
1105
     * @param string $url
1106
     * @return bool|mixed|null
1107
     */
1108
    public static function get_url_id($url)
1109
    {
1110
        $table_access_url= Database :: get_main_table(TABLE_MAIN_ACCESS_URL);
1111
        $sql = "SELECT id FROM $table_access_url WHERE url = '".Database::escape_string($url)."'";
1112
        $result = Database::query($sql);
1113
        $access_url_id = Database::result($result, 0, 0);
1114
        return $access_url_id;
1115
    }
1116
1117
    /**
1118
     *
1119
     * @param string $needle
1120
     * @return XajaxResponse
1121
     */
1122 View Code Duplication
    public static function searchCourseCategoryAjax($needle)
1123
    {
1124
        $response = new xajaxResponse();
1125
        $return = '';
1126
1127
        if (!empty($needle)) {
1128
            // xajax send utf8 datas... datas in db can be non-utf8 datas
1129
            $charset = api_get_system_encoding();
1130
            $needle = api_convert_encoding($needle, $charset, 'utf-8');
1131
            $needle = Database::escape_string($needle);
1132
            // search courses where username or firstname or lastname begins likes $needle
1133
            $sql = 'SELECT id, name FROM '.Database::get_main_table(TABLE_MAIN_CATEGORY).' u
1134
                    WHERE name LIKE "'.$needle.'%" AND (parent_id IS NULL or parent_id = 0)
1135
                    ORDER BY name
1136
                    LIMIT 11';
1137
            $result = Database::query($sql);
1138
            $i = 0;
1139
            while ($data = Database::fetch_array($result)) {
1140
                $i++;
1141
                if ($i <= 10) {
1142
                    $return .= '<a
1143
                    href="javascript: void(0);"
1144
                    onclick="javascript: add_user_to_url(\''.addslashes($data['id']).'\',\''.addslashes($data['name']).' \')">'.$data['name'].' </a><br />';
1145
                } else {
1146
                    $return .= '...<br />';
1147
                }
1148
            }
1149
        }
1150
        $response->addAssign('ajax_list_courses', 'innerHTML', api_utf8_encode($return));
1151
        return $response;
1152
    }
1153
}
1154