Browse Source

Merge branch '1.10.x' of github.com:chamilo/chamilo-lms into 1.10.x

Yannick Warnier 10 years ago
parent
commit
d7d26a897f

+ 10 - 4
main/admin/course_edit.php

@@ -218,10 +218,16 @@ if (!empty($specialCourseFieldInfo)) {
         $specialCourseAttributes['checked'] = '';
     }
 
-    $form->addElement('hidden', '_extra_special_course', 0);
-    $form->addElement('checkbox', 'extra_special_course', array(
-        null, get_lang('AllUsersAreAutomaticallyRegistered')
-    ), get_lang('SpecialCourse'), $specialCourseAttributes);
+    $form->addElement(
+        'checkbox',
+        'extra_special_course',
+        array(
+            null,
+            get_lang('AllUsersAreAutomaticallyRegistered')
+        ),
+        get_lang('SpecialCourse'),
+        $specialCourseAttributes
+    );
 }
 
 //Extra fields

+ 2 - 2
main/admin/user_add.php

@@ -233,7 +233,7 @@ $form->addElement('radio', 'radio_expiration_date', get_lang('ExpirationDate'),
 $group = array ();
 $group[] = $form->createElement('radio', 'radio_expiration_date', null, get_lang('On'), 1);
 $group[] = $form->createElement(
-    'DatePicker',
+    'DateTimePicker',
     'expiration_date',
     null,
     array(
@@ -263,7 +263,7 @@ $defaults['mail']['send_mail'] = 1;
 $defaults['password']['password_auto'] = 1;
 $defaults['active'] = 1;
 $days = api_get_setting('account_valid_duration');
-$defaults['expiration_date'] = date('Y-m-d', api_strtotime('+'.$days.' day'));
+$defaults['expiration_date'] = api_get_local_time('+'.$days.' day');
 
 $defaults['radio_expiration_date'] = 0;
 $defaults['status'] = STUDENT;

+ 3 - 3
main/admin/user_edit.php

@@ -269,7 +269,7 @@ if (!$user_data['platform_admin']) {
 	$form->addElement('radio', 'radio_expiration_date', get_lang('ExpirationDate'), get_lang('NeverExpires'), 0);
 	$group = array ();
 	$group[] = $form->createElement('radio', 'radio_expiration_date', null, get_lang('On'), 1);
-	$group[] = $form->createElement('DatePicker', 'expiration_date', null, array('onchange' => 'javascript: enable_expiration_date();'));
+	$group[] = $form->createElement('DateTimePicker', 'expiration_date', null, array('onchange' => 'javascript: enable_expiration_date();'));
 	$form->addGroup($group, 'max_member_group', null, '', false);
 
 	// Active account or inactive account
@@ -298,10 +298,10 @@ $expiration_date = $user_data['expiration_date'];
 
 if (empty($expiration_date)) {
 	$user_data['radio_expiration_date'] = 0;
-	$user_data['expiration_date'] = date('Y-m-d');
+	$user_data['expiration_date'] = api_get_local_time();
 } else {
 	$user_data['radio_expiration_date'] = 1;
-	$user_data['expiration_date'] = $expiration_date;
+	$user_data['expiration_date'] = api_get_local_time($expiration_date);
 }
 $form->setDefaults($user_data);
 

+ 0 - 8
main/auth/inscription.php

@@ -482,14 +482,6 @@ if ($form->validate()) {
                 Database::query($sql);
             }
 
-            // if there is a default duration of a valid account then we have to change the expiration_date accordingly
-            if (api_get_setting('account_valid_duration') != '') {
-                $sql = "UPDATE ".Database::get_main_table(TABLE_MAIN_USER)."
-                        SET expiration_date='registration_date+1'
-                        WHERE user_id='".$user_id."'";
-                Database::query($sql);
-            }
-
             $course_code_redirect = Session::read('course_redirect');
 
             // Saving user to course if it was set.

+ 3 - 3
main/inc/email_editor.php

@@ -29,16 +29,16 @@ $action = isset($_GET['action']) ? $_GET['action'] : null;
 $form = new FormValidator('email_editor', 'post');
 $form->addElement('hidden', 'dest');
 $form->addElement('text', 'email_address', get_lang('EmailDestination'));
-$form->addElement('text', 'email_title', get_lang('EmailTitle'), array('class' => 'span5'));
+$form->addElement('text', 'email_title', get_lang('EmailTitle'));
 $form->freeze('email_address');
-$form->addElement('textarea', 'email_text', get_lang('EmailText'), array('class' => 'span5', 'rows' => '6'));
+$form->addElement('textarea', 'email_text', get_lang('EmailText'), array('rows' => '6'));
 
 $form->addRule('email_address', get_lang('ThisFieldIsRequired'), 'required');
 $form->addRule('email_title', get_lang('ThisFieldIsRequired'), 'required');
 $form->addRule('email_text', get_lang('ThisFieldIsRequired'), 'required');
 $form->addRule('email_address', get_lang('EmailWrong'), 'email');
 
-$form->addElement('button', 'submit', get_lang('SendMail'));
+$form->addButtonSend(get_lang('SendMail'));
 
 switch ($action) {
     case 'subscribe_me_to_session':

+ 52 - 22
main/inc/lib/course.lib.php

@@ -1131,7 +1131,7 @@ class CourseManager
      *
      * @param int the id of the user
      * @param array info about the course (comes from course table, see database lib)
-     *
+     * @deprecated linked_courses definition doesn't exists
      * @return true if the user is registered in the real course or linked courses, false otherwise
      */
     public static function is_user_subscribed_in_real_or_linked_course($user_id, $course_code, $session_id = '')
@@ -2481,19 +2481,24 @@ class CourseManager
         }
 
         // get course list auto-register
-        $sql = "SELECT DISTINCT(tcfv.course_code) FROM $tbl_course_field_value tcfv INNER JOIN $tbl_course_field tcf
+        $sql = "SELECT DISTINCT(tcfv.course_code)
+                FROM $tbl_course_field_value tcfv
+                INNER JOIN $tbl_course_field tcf
                 ON tcfv.field_id =  tcf.id $join_access_url
-                WHERE tcf.field_variable = 'special_course' AND tcfv.field_value = 1  $where_access_url";
-        $special_course_result = Database::query($sql);
-        $special_course_list = array();
-
-        if (Database::num_rows($special_course_result) > 0) {
-            $special_course_list = array();
-            while ($result_row = Database::fetch_array($special_course_result)) {
-                $special_course_list[] = $result_row['course_code'];
+                WHERE
+                    tcf.field_variable = 'special_course' AND
+                    tcfv.field_value = 1  $where_access_url";
+
+        $result = Database::query($sql);
+        $courseList = array();
+
+        if (Database::num_rows($result) > 0) {
+            while ($result_row = Database::fetch_array($result)) {
+                $courseList[] = $result_row['course_code'];
             }
         }
-        return $special_course_list;
+
+        return $courseList;
     }
 
     /**
@@ -3515,10 +3520,17 @@ class CourseManager
             $with_special_courses = ' course.code IN ("' . implode('","', $special_course_list) . '")';
         }
         $html = null;
-
+        $courseCount = 0;
         if (!empty($with_special_courses)) {
-            $sql = "SELECT course.id, course.code, course.subscribe subscr, course.unsubscribe unsubscr, course_rel_user.status status,
-                           course_rel_user.sort sort, course_rel_user.user_course_cat user_course_cat, course_rel_user.user_id
+            $sql = "SELECT
+                        course.id,
+                        course.code,
+                        course.subscribe subscr,
+                        course.unsubscribe unsubscr,
+                        course_rel_user.status status,
+                        course_rel_user.sort sort,
+                        course_rel_user.user_course_cat user_course_cat,
+                        course_rel_user.user_id
                     FROM $tbl_course course
                     LEFT JOIN $tbl_course_user course_rel_user
                     ON course.code = course_rel_user.course_code AND course_rel_user.user_id = '$user_id'
@@ -3526,6 +3538,7 @@ class CourseManager
 
             $rs_special_course = Database::query($sql);
             $number_of_courses = Database::num_rows($rs_special_course);
+
             $key = 0;
 
             if ($number_of_courses > 0) {
@@ -3534,9 +3547,9 @@ class CourseManager
                     if ($course_info['visibility'] == COURSE_VISIBILITY_HIDDEN) {
                         continue;
                     }
+                    $courseCount++;
                     $params = array();
                     // Get notifications.
-
                     $course_info['id_session'] = null;
                     $course_info['status'] = $course['status'];
                     $show_notification = Display::show_notification($course_info);
@@ -3609,7 +3622,10 @@ class CourseManager
             }
         }
 
-        return $html;
+        return [
+            'html' => $html,
+            'course_count' => $courseCount
+        ];
     }
 
     /**
@@ -3632,6 +3648,7 @@ class CourseManager
         $sql = "SELECT id, title FROM $tucc WHERE user_id='" . $user_id . "' ORDER BY sort ASC";
         $result = Database::query($sql);
         $html = null;
+        $courseCount = 0;
         while ($row = Database::fetch_array($result)) {
             // We simply display the title of the category.
             $params = array(
@@ -3640,16 +3657,24 @@ class CourseManager
                 'title' => $row['title'],
                 'class' => 'table_user_course_category'
             );
+
+            $courseInCategory = self:: display_courses_in_category($row['id'], $load_dirs);
             $html .= self::course_item_parent(
                 self::course_item_html($params, true),
-                self:: display_courses_in_category($row['id'], $load_dirs)
+                $courseInCategory['html']
             );
+            $courseCount += $courseInCategory['course_count'];
         }
 
         // Step 2: We display the course without a user category.
-        $html .= self:: display_courses_in_category(0, $load_dirs);
-
-        return $html;
+        $courseInCategory = self:: display_courses_in_category(0, $load_dirs);
+        $html .= $courseInCategory['html'];
+        $courseCount += $courseInCategory['course_count'];
+
+        return [
+            'html' => $html,
+            'course_count' => $courseCount
+        ];
     }
 
     /**
@@ -3710,7 +3735,7 @@ class CourseManager
 
         $course_list = array();
         $showCustomIcon = api_get_configuration_value('course_images_in_courses_list');
-
+        $courseCount = 0;
         // Browse through all courses.
         while ($course = Database::fetch_array($result)) {
             $course_info = api_get_course_info($course['code']);
@@ -3729,6 +3754,8 @@ class CourseManager
                 $course_list[] = $course_info['real_id'];
             }
 
+            $courseCount++;
+
             // For each course, get if there is any notification icon to show
             // (something that would have changed since the user's last visit).
             $show_notification = Display::show_notification($course_info);
@@ -3828,7 +3855,10 @@ class CourseManager
             $html .= self::course_item_html($params, $isSubcontent);
         }
 
-        return $html;
+        return [
+            'html' => $html,
+            'course_count' => $courseCount
+        ];
     }
 
     /**

+ 48 - 47
main/inc/lib/course_category.lib.php

@@ -958,56 +958,57 @@ function getCataloguePagination($pageCurrent, $pageLength, $pageTotal)
     return $pageDiv;
 }
 
-
-    /**
-     * Return URL to course catalog
-     * @param int $pageCurrent
-     * @param int $pageLength
-     * @param string $categoryCode
-     * @param int $hiddenLinks
-     * @param string $action
-     * @return string
-     */
-    function getCourseCategoryUrl(
-        $pageCurrent,
-        $pageLength,
-        $categoryCode = null,
-        $hiddenLinks = null,
-        $action = null
-    ) {
-        $action = isset($action) ? Security::remove_XSS($action) : Security::remove_XSS($_REQUEST['action']);
-        $searchTerm = isset($_REQUEST['search_term']) ? Security::remove_XSS($_REQUEST['search_term']) : null;
+/**
+ * Return URL to course catalog
+ * @param int $pageCurrent
+ * @param int $pageLength
+ * @param string $categoryCode
+ * @param int $hiddenLinks
+ * @param string $action
+ * @return string
+ */
+function getCourseCategoryUrl(
+    $pageCurrent,
+    $pageLength,
+    $categoryCode = null,
+    $hiddenLinks = null,
+    $action = null
+) {
+    $requestAction = isset($_REQUEST['action']) ? Security::remove_XSS($_REQUEST['action']) : null;
+    $action = isset($action) ? Security::remove_XSS($action) : $requestAction;
+    $searchTerm = isset($_REQUEST['search_term']) ? Security::remove_XSS($_REQUEST['search_term']) : null;
+
+    $categoryCodeRequest = isset($_REQUEST['category_code']) ? Security::remove_XSS($_REQUEST['category_code']) : null;
+    $categoryCode = isset($categoryCode) ? Security::remove_XSS($categoryCode) : $categoryCodeRequest;
+
+    $hiddenLinksRequest = isset($_REQUEST['hidden_links']) ? Security::remove_XSS($_REQUEST['hidden_links']) : null;
+    $hiddenLinks = isset($hiddenLinks) ? Security::remove_XSS($hiddenLinksRequest) : $categoryCodeRequest;
 
         // Start URL with params
-        $pageUrl = api_get_self() .
-            '?action=' . $action .
-            '&category_code=' . (
-            isset($categoryCode) ? $categoryCode :
-                Security::remove_XSS($_REQUEST['category_code'])
-            ) .
-            '&hidden_links=' . (
-            isset($hiddenLinks) ? $hiddenLinks :
-                Security::remove_XSS($_REQUEST['hidden_links'])
-            ).
-            '&pageCurrent=' . $pageCurrent .
-            '&pageLength=' . $pageLength
-        ;
-        switch ($action) {
-            case 'subscribe' :
-                // for search
-                $pageUrl .=
-                    '&search_term=' . $searchTerm .
-                    '&search_course=1' .
-                    '&sec_token=' . $_SESSION['sec_token'];
-                break;
-            case 'display_courses' :
-                // No break
-            default :
-                break;
+    $pageUrl = api_get_self() .
+        '?action=' . $action .
+        '&category_code=' .$categoryCode.
+        '&hidden_links=' .$hiddenLinks.
+        '&pageCurrent=' . $pageCurrent .
+        '&pageLength=' . $pageLength
+    ;
 
-        }
+    switch ($action) {
+        case 'subscribe' :
+            // for search
+            $pageUrl .=
+                '&search_term=' . $searchTerm .
+                '&search_course=1' .
+                '&sec_token=' . $_SESSION['sec_token'];
+            break;
+        case 'display_courses' :
+            // No break
+        default :
+            break;
+
+    }
 
-        return $pageUrl;
+    return $pageUrl;
 }
 
 /**
@@ -1027,7 +1028,7 @@ function getPageNumberItem($pageNumber, $pageLength, $liAttributes = array(), $c
     );
 
     // If is current page ('active' class) clear URL
-    if (isset($liAttributes) && is_array($liAttributes)) {
+    if (isset($liAttributes) && is_array($liAttributes) && isset($liAttributes['class'])) {
         if (strpos('active', $liAttributes['class']) !== false) {
             $url = '';
         }

+ 10 - 6
main/inc/lib/extra_field_value.lib.php

@@ -115,8 +115,10 @@ class ExtraFieldValue extends Model
         // Parse params.
         foreach ($params as $key => $value) {
             if (substr($key, 0, 6) == 'extra_' || substr($key, 0, 7) == '_extra_') {
+
                 // An extra field.
                 $field_variable = substr($key, 6);
+
                 $extra_field_info = $extra_field->get_handler_field_info_by_field_variable($field_variable);
 
                 if ($extra_field_info) {
@@ -124,8 +126,7 @@ class ExtraFieldValue extends Model
                     $comment = isset($params[$commentVariable]) ? $params[$commentVariable] : null;
 
                     switch ($extra_field_info['field_type']) {
-                        case ExtraField::FIELD_TYPE_TAG :
-
+                        case ExtraField::FIELD_TYPE_TAG:
                             $old = self::getAllValuesByItemAndField(
                                 $params[$this->handler_id],
                                 $extra_field_info['id']
@@ -242,12 +243,14 @@ class ExtraFieldValue extends Model
                             break;
                         default;
                             $new_params = array(
-                                $this->handler_id   => $params[$this->handler_id],
-                                'field_id'          => $extra_field_info['id'],
-                                'field_value'       => $value
+                                $this->handler_id => $params[$this->handler_id],
+                                'field_id' => $extra_field_info['id'],
+                                'field_value' => $value
                             );
 
-                            if ($this->handler_id !== 'session_id' && $this->handler_id !== 'course_code') {
+                            if ($this->handler_id !== 'session_id' &&
+                                $this->handler_id !== 'course_code'
+                            ) {
                                 $new_params['comment'] = $comment;
                             }
 
@@ -460,6 +463,7 @@ class ExtraFieldValue extends Model
                     }
                 } else {
                     $params['id'] = $field_values['id'];
+
                     return parent::update($params, $show_query);
                 }
             }

+ 19 - 28
main/inc/lib/usermanager.lib.php

@@ -55,7 +55,7 @@ class UserManager
      * @param    string Phone number    (optional)
      * @param    string Picture URI        (optional)
      * @param    string Authentication source    (optional, defaults to 'platform', dependind on constant)
-     * @param    string Account expiration date (optional, defaults to '0000-00-00 00:00:00')
+     * @param    string Account expiration date (optional, defaults to null)
      * @param    int     Whether the account is enabled or disabled by default
      * @param    int     The department of HR in which the user is registered (optional, defaults to 0)
      * @param     array Extra fields
@@ -79,7 +79,7 @@ class UserManager
         $phone = '',
         $picture_uri = '',
         $auth_source = PLATFORM_AUTH_SOURCE,
-        $expiration_date = null,
+        $expirationDate = null,
         $active = 1,
         $hr_dept_id = 0,
         $extra = null,
@@ -163,10 +163,19 @@ class UserManager
 
         $currentDate = api_get_utc_datetime();
         $now = new DateTime($currentDate);
-        $manager = Database::getManager();
 
-        if (!empty($expiration_date)) {
-            $expiration_date = new \DateTime($expiration_date);
+        if (empty($expirationDate)) {
+            // Default expiration date
+            // if there is a default duration of a valid account then
+            // we have to change the expiration_date accordingly
+            $expirationDate = new DateTime($currentDate);
+            if (api_get_setting('account_valid_duration') != '') {
+                $days = intval(api_get_setting('account_valid_duration'));
+                $expirationDate->modify('+'.$days.' day');
+            }
+        } else {
+            $expirationDate = api_get_utc_datetime($expirationDate);
+            $expirationDate = new \DateTime($expirationDate);
         }
 
         $user = new User();
@@ -183,32 +192,13 @@ class UserManager
             ->setPhone($phone)
             ->setLanguage($language)
             ->setRegistrationDate($now)
-            ->setExpirationDate($expiration_date)
+            ->setExpirationDate($expirationDate)
             ->setHrDeptId($hr_dept_id)
             ->setActive($active);
 
+        $manager = Database::getManager();
         $manager->persist($user);
         $manager->flush();
-
-        /*$sql = "INSERT INTO $table_user
-                SET lastname =         '".Database::escape_string(trim($lastName))."',
-                firstname =         '".Database::escape_string(trim($firstName))."',
-                username =            '".Database::escape_string(trim($loginName))."',
-                status =             '".Database::escape_string($status)."',
-                password =             '".Database::escape_string($password)."',
-                email =             '".Database::escape_string($email)."',
-                official_code    =     '".Database::escape_string($official_code)."',
-                picture_uri     =     '".Database::escape_string($picture_uri)."',
-                creator_id      =     '".Database::escape_string($creator_id)."',
-                auth_source =         '".Database::escape_string($auth_source)."',
-                phone =             '".Database::escape_string($phone)."',
-                language =             '".Database::escape_string($language)."',
-                registration_date = '".$current_date."',
-                expiration_date =     '".Database::escape_string($expiration_date)."',
-                hr_dept_id =         '".Database::escape_string($hr_dept_id)."',
-                active =             '".Database::escape_string($active)."'";
-
-        $result = Database::query($sql);*/
         $userId = $user->getId();
 
         if (!empty($userId)) {
@@ -251,7 +241,7 @@ class UserManager
                     $plugin = new AppPlugin();
 
                     $additionalParameters = array(
-                        'smsType' => constant($plugin->getSMSPluginName().'::WELCOME_LOGIN_PASSWORD'),
+                        'smsType' => constant($plugin->getSMSPluginName().'::   WELCOME_LOGIN_PASSWORD'),
                         'userId' => $return,
                         'mobilePhoneNumber' => $phoneNumber,
                         'password' => $original_password
@@ -677,6 +667,7 @@ class UserManager
         }
 
         if (!empty($expiration_date)) {
+            $expiration_date = api_get_utc_datetime($expiration_date);
             $expiration_date = new \DateTime($expiration_date);
         }
 
@@ -2743,7 +2734,6 @@ class UserManager
         }
 
         if (api_is_allowed_to_create_course()) {
-
             foreach ($sessions as $enreg) {
                 $session_id = $enreg['id'];
                 $session_visibility = api_get_session_visibility($session_id);
@@ -2751,6 +2741,7 @@ class UserManager
                 if ($session_visibility == SESSION_INVISIBLE) {
                     continue;
                 }
+
                 // This query is horribly slow when more than a few thousand
                 // users and just a few sessions to which they are subscribed
                 $id_session = $enreg['id'];

+ 18 - 6
main/inc/lib/userportal.lib.php

@@ -1040,17 +1040,23 @@ class IndexManager
 
         $courses_html = '';
         $special_courses = '';
+        $sessionCount = 0;
+        $courseCount = 0;
 
         // If we're not in the history view...
         if (!isset($_GET['history'])) {
             // Display special courses.
-            $special_courses = CourseManager::display_special_courses($user_id, $this->load_directories_preview);
+            $specialCourses = CourseManager::display_special_courses($user_id, $this->load_directories_preview);
+            $special_courses = $specialCourses['html'];
             // Display courses.
-            $courses_html .= CourseManager::display_courses($user_id, $this->load_directories_preview);
+            $courses = CourseManager::display_courses($user_id, $this->load_directories_preview);
+            $courses_html .= $courses['html'];
+            $courseCount = $specialCourses['course_count'] + $courses['course_count'];
         }
 
         $sessions_with_category = '';
         $sessions_with_no_category = '';
+
         if (is_array($session_categories)) {
             foreach ($session_categories as $session_category) {
                 $session_category_id = $session_category['session_category']['id'];
@@ -1185,10 +1191,11 @@ class IndexManager
                                 $parentInfo = CourseManager::course_item_html_no_icon($params);
                             }
 
-
                             $sessions_with_no_category .= CourseManager::course_item_parent(
                                 $parentInfo,null
                             );
+
+                            $sessionCount++;
                         }
                     }
                 } else {
@@ -1203,6 +1210,7 @@ class IndexManager
                             if (count($session['courses']) < 1) {
                                 continue;
                             }
+
                             $date_session_start = $session['date_start'];
                             $date_session_end = $session['date_end'];
                             $days_access_before_beginning = $session['nb_days_access_before_beginning'];
@@ -1313,6 +1321,8 @@ class IndexManager
                                 }
 
                                 $html_sessions .= $parentInfo . $html_courses_session;
+
+                                $sessionCount++;
                             }
                         }
                     }
@@ -1354,9 +1364,11 @@ class IndexManager
             }
         }
 
-        return $sessions_with_category.
-               $sessions_with_no_category.
-               $courses_html.$special_courses;
+        return [
+            'html' => $sessions_with_category.$sessions_with_no_category.$courses_html.$special_courses,
+            'session_count' => $sessionCount,
+            'course_count' => $courseCount
+        ];
     }
 
     /**

+ 2 - 4
main/install/database.sql

@@ -2724,9 +2724,7 @@ CREATE TABLE IF NOT EXISTS message_attachment (
     PRIMARY KEY  (id)
 );
 
-
-
-INSERT INTO course_field (field_type, field_variable, field_display_text, field_default_value, field_visible, field_changeable) values (10, 'special_course','Special course', '', 1 , 1);
+INSERT INTO course_field (field_type, field_variable, field_display_text, field_default_value, field_visible, field_changeable) values (1, 'special_course', 'Special course', '', 1 , 1);
 
 --
 -- Table structure for table block
@@ -4729,5 +4727,5 @@ CREATE TABLE c_attendance_calendar_rel_group (
 
 -- Version
 LOCK TABLES settings_current WRITE;
-UPDATE settings_current SET selected_value = '1.10.0.30' WHERE variable = 'chamilo_database_version';
+UPDATE settings_current SET selected_value = '1.10.0.31' WHERE variable = 'chamilo_database_version';
 UNLOCK TABLES;

+ 3 - 1
main/install/migrate-db-1.9.0-1.10.0-pre.sql

@@ -124,5 +124,7 @@ CREATE TABLE IF NOT EXISTS c_student_publication_rel_user (id  INT PRIMARY KEY N
 CREATE TABLE IF NOT EXISTS c_student_publication_comment (id INT PRIMARY KEY NOT NULL AUTO_INCREMENT, work_id INT NOT NULL, c_id INT NOT NULL, comment text, file VARCHAR(255), user_id int NOT NULL, sent_at datetime NOT NULL);
 CREATE TABLE IF NOT EXISTS c_attendance_calendar_rel_group (id int NOT NULL auto_increment PRIMARY KEY, c_id INT NOT NULL, group_id INT NOT NULL, calendar_id INT NOT NULL);
 
+UPDATE course_field SET field_type = 1 WHERE field_variable = 'special_course';
+
 -- Do not move this query
-UPDATE settings_current SET selected_value = '1.10.0.30' WHERE variable = 'chamilo_database_version';
+UPDATE settings_current SET selected_value = '1.10.0.31' WHERE variable = 'chamilo_database_version';

+ 20 - 9
main/session/index.php

@@ -5,16 +5,12 @@
 *   @package chamilo.session
 *   @author Julio Montoya <gugli100@gmail.com>  Beeznest
 */
-/**
- * Code
- */
 
 use \ChamiloSession as Session;
 
 $cidReset = true;
 
 require_once '../inc/global.inc.php';
-
 $session_id = isset($_GET['session_id']) ? intval($_GET['session_id']): null;
 
 $sessionField = new ExtraFieldValue('session');
@@ -43,23 +39,37 @@ if (isset($_SESSION['objExercise'])) {
     Session::erase('objExercise');
 }
 
+$userId = api_get_user_id();
 $session_info = SessionManager::fetch($session_id);
 $session_list = SessionManager::get_sessions_by_coach(api_get_user_id());
 $course_list = SessionManager::get_course_list_by_session_id($session_id);
 
 // Getting all sessions where I'm subscribed
-$new_session_list = array();
+/*$new_session_list = array();
 if (!api_is_anonymous()) {
     $new_session_list = UserManager::get_personal_session_course_list(api_get_user_id());
 }
 $user_course_list = array();
 foreach ($new_session_list as $session_item) {
     $user_course_list[] = $session_item['code'];
+}*/
+
+
+$user_course_list = array();
+foreach ($course_list as $course) {
+    $status = SessionManager::get_user_status_in_course_session($userId, $course['code'], $session_id);
+    if ($status || api_is_platform_admin()) {
+        $user_course_list[] = $course['code'];
+    }
+}
+
+if (empty($user_course_list)) {
+    api_not_allowed(true);
 }
 
 $my_session_list = array();
 $final_array     = array();
-
+/*
 if (!empty($new_session_list)) {
     foreach ($new_session_list as $item) {
         $my_session_id = isset($item['id_session']) ? $item['id_session'] : null;
@@ -110,7 +120,8 @@ if (!empty($new_session_list)) {
         }
         $my_session_list[] =  $my_session_id;
     }
-}
+}*/
+
 $new_course_list = array();
 
 if (!empty($course_list)) {
@@ -202,11 +213,11 @@ if (!empty($course_list)) {
 }
 
 // If the requested session does not exist in my list we stop the script
-if (!api_is_platform_admin()) {
+/*if (!api_is_platform_admin()) {
     if (!api_is_anonymous() && !in_array($session_id, $my_session_list)) {
         api_not_allowed(true);
     }
-}
+}*/
 
 //If session is not active we stop de script
 if (!api_is_allowed_to_session_edit()) {

+ 30 - 58
user_portal.php

@@ -30,52 +30,48 @@ require_once api_get_path(LIBRARY_PATH).'userportal.lib.php';
 
 api_block_anonymous_users(); // Only users who are logged in can proceed.
 
-$user_id = api_get_user_id();
+$userId = api_get_user_id();
 
 /* Constants and CONFIGURATION parameters */
 $load_dirs = api_get_setting('show_documents_preview');
 
+$controller = new IndexManager(get_lang('MyCourses'));
+
+// Main courses and session list
+$courseAndSessions = $controller->return_courses_and_sessions($userId);
+
 // Check if a user is enrolled only in one course for going directly to the course after the login.
 if (api_get_setting('go_to_course_after_login') == 'true') {
 
-	// Get the courses list
-	$personal_course_list = UserManager::get_personal_session_course_list($user_id);
-
-	$my_session_list = array();
-	$count_of_courses_no_sessions = 0;
-	$count_of_courses_with_sessions = 0;
-
-	foreach ($personal_course_list as $course) {
-		if (!empty($course['id_session'])) {
-			$my_session_list[$course['id_session']] = true;
-			$count_of_courses_with_sessions++;
-		} else {
-			$count_of_courses_no_sessions++;
-		}
-	}
-	$count_of_sessions = count($my_session_list);
+	$count_of_sessions = $courseAndSessions['session_count'];
+	$count_of_courses_no_sessions = $courseAndSessions['course_count'];
 
 	if ($count_of_sessions == 1 && $count_of_courses_no_sessions == 0) {
-		$key = array_keys($personal_course_list);
-		$course_info = $personal_course_list[$key[0]];
-		$course_directory = $course_info['course_info']['path'];
-		$id_session = isset($course_info['id_session']) ? $course_info['id_session'] : 0;
-		$url = api_get_path(WEB_CODE_PATH).'session/?session_id='.$id_session;
-
-		header('location:'.$url);
-		exit;
+		$sessions = SessionManager::get_sessions_by_user($userId);
+		if (isset($sessions[0])) {
+			$sessionInfo = $sessions[0];
+			if (isset($sessionInfo['session_id'])) {
+				$url = api_get_path(WEB_CODE_PATH).'session/?session_id='.$sessionInfo['session_id'];
+
+				header('Location:'.$url);
+				exit;
+			}
+		}
 	}
 
 	if (!isset($_SESSION['coursesAlreadyVisited']) &&
 		$count_of_sessions == 0 && $count_of_courses_no_sessions == 1
 	) {
-		$key = array_keys($personal_course_list);
-		$course_info = $personal_course_list[$key[0]];
-		$course_directory = $course_info['course_info']['path'];
-		$id_session = isset($course_info['id_session']) ? $course_info['id_session'] : 0;
-		$url = api_get_path(WEB_COURSE_PATH).$course_directory.'/?id_session='.$id_session;
-		header('location:'.$url);
-		exit;
+		$courses = CourseManager::get_courses_list_by_user_id($userId);
+
+		if (!empty($courses) && isset($courses[0]) && isset($courses[0]['code'])) {
+			$courseInfo = api_get_course_info($courses[0]['code']);
+			if (!empty($courseInfo)) {
+				$courseUrl = $courseInfo['course_public_url'];
+				header('Location:'.$courseUrl);
+				exit;
+			}
+		}
 	}
 }
 
@@ -123,38 +119,14 @@ if ($load_dirs) {
 	</script>';
 }
 
-/* Sniffing system */
-
-//store posts to sessions
-/*
-if (isset($_SESSION['sniff_navigator']) && $_SESSION['sniff_navigator']!="checked") {
-	$_SESSION['sniff_navigator']=Security::remove_XSS($_POST['sniff_navigator']);
-	$_SESSION['sniff_screen_size_w']=Security::remove_XSS($_POST['sniff_navigator_screen_size_w']);
-	$_SESSION['sniff__screen_size_h']=Security::remove_XSS($_POST['sniff_navigator_screen_size_h']);
-	$_SESSION['sniff_type_mimetypes']=Security::remove_XSS($_POST['sniff_navigator_type_mimetypes']);
-	$_SESSION['sniff_suffixes_mimetypes']=Security::remove_XSS($_POST['sniff_navigator_suffixes_mimetypes']);
-	$_SESSION['sniff_list_plugins']=Security::remove_XSS($_POST['sniff_navigator_list_plugins']);
-	$_SESSION['sniff_check_some_activex']=Security::remove_XSS($_POST['sniff_navigator_check_some_activex']);
-	$_SESSION['sniff_check_some_plugins']=Security::remove_XSS($_POST['sniff_navigator_check_some_plugins']);
-	$_SESSION['sniff_java']=Security::remove_XSS($_POST['sniff_navigator_java']);
-	$_SESSION['sniff_java_sun_ver']=Security::remove_XSS($_POST['sniff_navigator_java_sun_ver']);
-}
-*/
-/* MAIN CODE */
-
-$controller = new IndexManager(get_lang('MyCourses'));
-
 
 
-// Main courses and session list
-$courses_and_sessions = $controller->return_courses_and_sessions($user_id);
-
 //Show the chamilo mascot
-if (empty($courses_and_sessions) && !isset($_GET['history'])) {
+if (empty($courseAndSessions['html']) && !isset($_GET['history'])) {
 	$controller->tpl->assign('welcome_to_course_block', $controller->return_welcome_to_course_block());
 }
 
-$controller->tpl->assign('content', $courses_and_sessions);
+$controller->tpl->assign('content', $courseAndSessions['html']);
 
 if (api_get_setting('allow_browser_sniffer') == 'true') {
 	if ($_SESSION['sniff_navigator']!="checked") {