From 8034435745a9262d9f56822087f00652c0784409 Mon Sep 17 00:00:00 2001
From: Julio Montoya <gugli100@gmail.com>
Date: Tue, 17 Jul 2012 14:17:23 +0200
Subject: [PATCH] Allowing legal notice in courses with visibility OPEN_WORLD,
 OPEN_PLATFORM see #4619

---
 main/course_info/legal.php | 31 +++++++++++++++++++++--------
 main/inc/local.inc.php     | 40 ++++++++++++++++++++++++--------------
 2 files changed, 48 insertions(+), 23 deletions(-)

diff --git a/main/course_info/legal.php b/main/course_info/legal.php
index fd731af11e..cd63af0707 100644
--- a/main/course_info/legal.php
+++ b/main/course_info/legal.php
@@ -1,5 +1,7 @@
 <?php
 
+use \ChamiloSession as Session;
+
 // Language files that need to be included
 $language_file = array('create_course', 'course_info', 'admin');
 
@@ -28,36 +30,49 @@ $form->addElement('hidden', 'session_id', $session_id);
 $form->addElement('checkbox', 'accept_legal', null, get_lang('AcceptLegal'));
 $form->addElement('style_submit_button', null, get_lang('Accept'), 'class="save"');
 
+$variable = 'accept_legal_'.$user_id.'_'.$course_info['real_id'].'_'.$session_id;
+
+$course_visibility_list = array(COURSE_VISIBILITY_OPEN_WORLD, COURSE_VISIBILITY_OPEN_PLATFORM);
+
 if ($form->validate()) {
     $accept_legal = $form->exportValue('accept_legal');
         
-    if ($accept_legal == 1 ) {
-        $result = CourseManager::save_user_legal($user_id, $course_code, $session_id);        
+    if ($accept_legal == 1) {
+        CourseManager::save_user_legal($user_id, $course_code, $session_id);        
+        if (in_array($course_info['visibility'], $course_visibility_list)) {
+            Session::write($variable, true);
+        }
     }
 }
 
+$user_pass_open_course = false;
+if (in_array($course_info['visibility'], $course_visibility_list) && Session::read($variable)) {
+    $user_pass_open_course = true;
+}
+
 $url = api_get_course_url($course_code, $session_id);
 
 if (empty($session_id)) {
-    if (CourseManager::is_user_subscribed_in_course($user_id, $course_code)) {
+    if (CourseManager::is_user_subscribed_in_course($user_id, $course_code) || in_array($course_info['visibility'], $course_visibility_list)) {
         $user_accepted_legal = CourseManager::is_user_accepted_legal($user_id, $course_code);
-        if ($user_accepted_legal) {
+        if ($user_accepted_legal || $user_pass_open_course) {
             //Redirect to course home
             header('Location: '.$url);
             exit;
         }           
-    } else {
-        api_not_allowed();
+    } else {   
+        api_not_allowed();        
     }    
 } else {
     if (api_is_platform_admin()) {
         header('Location: '.$url);
     }
+    
     $user_session_status = SessionManager::get_user_status_in_session($user_id, $course_code, $session_id);
     
-    if (isset($user_session_status)) {        
+    if (isset($user_session_status) || in_array($course_info['visibility'], $course_visibility_list)) {        
         $user_accepted_legal = CourseManager::is_user_accepted_legal($user_id, $course_code, $session_id);        
-        if ($user_accepted_legal) {
+        if ($user_accepted_legal || $user_pass_open_course) {
             //Redirect to course session home
             header('Location: '.$url);
             exit;
diff --git a/main/inc/local.inc.php b/main/inc/local.inc.php
index ba53706e66..75cd3c4cb7 100644
--- a/main/inc/local.inc.php
+++ b/main/inc/local.inc.php
@@ -170,10 +170,10 @@ if (!empty($_SESSION['_user']['user_id']) && ! ($login || $logout)) {
 		unset($_user['user_id']);
 	}
 
-	if (api_get_setting('allow_terms_conditions')=='true') {
+	if (api_get_setting('allow_terms_conditions') == 'true') {
 		if (isset($_POST['login']) && isset($_POST['password']) && isset($_SESSION['term_and_condition']['user_id'])) {
 			$user_id = $_SESSION['term_and_condition']['user_id'];    // user id
-			// update the terms & conditions
+			// Update the terms & conditions
             $legal_type = null;
 			//verify type of terms and conditions
             if (isset($_POST['legal_info'])) {
@@ -184,10 +184,9 @@ if (!empty($_SESSION['_user']['user_id']) && ! ($login || $logout)) {
 			//is necessary verify check
 			if ($legal_type == 1) {
 				if ((isset($_POST['legal_accept']) && $_POST['legal_accept']=='1')) {
-					$legal_option=true;
+					$legal_option = true;
 				} else {
-					$legal_option=false;
-
+					$legal_option = false;
 				}
 			}
 
@@ -850,7 +849,26 @@ $is_sessionAdmin    = false;
 
 if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) {
 
-    if (isset($user_id) && $user_id && isset($_cid) && $_cid) {
+    if (isset($user_id) && $user_id && isset($_cid) && $_cid) {        
+        
+        $variable = 'accept_legal_'.$user_id.'_'.$_course['real_id'].'_'.$session_id;
+        
+        $course_visibility_list = array(COURSE_VISIBILITY_OPEN_WORLD, COURSE_VISIBILITY_OPEN_PLATFORM);
+        
+        $user_pass_open_course = false;
+        if (in_array($_course['visibility'], $course_visibility_list) && Session::read($variable)) {
+            $user_pass_open_course = true;
+        }
+        
+        //Checking if the user filled the course legal agreement
+        if ($_course['activate_legal'] == 1 && !api_is_platform_admin()) {
+            $user_is_subscribed = CourseManager::is_user_accepted_legal($user_id, $_course['id'], $session_id) || $user_pass_open_course;
+            if (!$user_is_subscribed) {
+                $url = api_get_path(WEB_CODE_PATH).'course_info/legal.php?course_code='.$_course['code'].'&session_id='.$session_id;                
+                header('Location: '.$url);
+                exit;
+            }
+        }
 
         //Check if user is subscribed in a course
         $course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
@@ -866,15 +884,7 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) {
             $is_courseTutor      = (bool) ($cuData['tutor_id' ] == 1 );
             $is_courseMember     = true;
 
-            //Checking if the user filled the course legal agreement
-            if ($_course['activate_legal'] == 1 && !api_is_platform_admin()) {
-                $user_is_subscribed = CourseManager::is_user_accepted_legal($user_id, $_course['id'], $session_id);
-                if (!$user_is_subscribed) {
-                    $url = api_get_path(WEB_CODE_PATH).'course_info/legal.php?course_code='.$_course['code'].'&session_id='.$session_id;
-                    header('Location: '.$url);
-                    exit;
-                }
-            }
+          
             $_courseUser['role'] = $cuData['role'];
             Session::write('_courseUser',$_courseUser);
         }