Adding course legal agreement see BT#3105

skala
Julio Montoya 14 years ago
parent d08c14510d
commit 32a0b98ead
  1. 21
      main/course_info/infocours.php
  2. 72
      main/course_info/legal.php
  3. 49
      main/inc/lib/course.lib.php
  4. 85
      main/inc/local.inc.php
  5. 4
      main/install/db_main.sql
  6. 4
      main/install/migrate-db-1.8.8-1.9.0-pre.sql

@ -181,6 +181,7 @@ $form->addElement('style_submit_button', null, get_lang('SaveSettings'), 'class=
$form->addElement('html', '</div></div>');
// COURSE ACCESS
$form->addElement('html', '<div> <h3>'.Display::return_icon('course.png', addslashes(get_lang('CourseAccess')),'','22').' '.addslashes(get_lang('CourseAccess')).'</h3><div>');
$form->addElement('radio', 'visibility', get_lang("CourseAccess"), get_lang('OpenToTheWorld'), COURSE_VISIBILITY_OPEN_WORLD);
@ -200,9 +201,14 @@ $form->addElement('html', $linebreak);
$form->add_textfield('course_registration_password', get_lang('CourseRegistrationPassword'), false, array('size' => '60'));
$form->addElement('checkbox', 'activate_legal', get_lang('ActivateLegal'));
$form->addElement('textarea', 'legal', get_lang('CourseLegal'), false, array('size' => '60'));
$form->addElement('style_submit_button', null, get_lang('SaveSettings'), 'class="save"');
$form->addElement('html', '</div></div>');
// EMAIL NOTIFICATIONS
$form->addElement('html', '<div><h3>'.Display::return_icon('mail.png', addslashes(get_lang('EmailNotifications')),'','22').' '.addslashes(get_lang('EmailNotifications')).'</h3><div>');
@ -231,8 +237,6 @@ $form->addElement('style_submit_button', null, get_lang('SaveSettings'), 'class=
$form->addElement('html', '</div></div>');
// Gradebook SETTINGS
$form->addElement('html', '<div><h3>'.Display::return_icon('gradebook.png', addslashes(get_lang('Gradebook')),'','22').' '.addslashes(get_lang('Gradebook')).'</h3><div>');
$group = array();
@ -345,6 +349,9 @@ $values['subscribe'] = $course_access_settings['subscribe'];
$values['unsubscribe'] = $course_access_settings['unsubscribe'];
$values['course_registration_password'] = $all_course_information['registration_code'];
$values['legal'] = $all_course_information['legal'];
$values['activate_legal'] = $all_course_information['activate_legal'];
// Get send_mail_setting (auth)from table
@ -402,7 +409,7 @@ if ($form->validate() && is_settings_editable()) {
//Variables that will be saved in the TABLE_MAIN_COURSE table
$update_in_course_table = array('title', 'course_language','category_code','department_name', 'department_url','visibility',
'subscribe', 'unsubscribe','tutor_name','course_registration_password');
'subscribe', 'unsubscribe','tutor_name','course_registration_password', 'legal', 'activate_legal');
foreach ($update_values as $index =>$value) {
$update_values[$index] = Database::escape_string($value);
@ -411,15 +418,17 @@ if ($form->validate() && is_settings_editable()) {
//visual_code = '".$update_values['visual_code']."',
$table_course = Database :: get_main_table(TABLE_MAIN_COURSE);
$sql = "UPDATE $table_course SET
title = '".Security::remove_XSS($update_values['title'])."',
title = '".$update_values['title']."',
course_language = '".$update_values['course_language']."',
category_code = '".$update_values['category_code']."',
department_name = '".Security::remove_XSS($update_values['department_name'])."',
department_url = '".Security::remove_XSS($update_values['department_url'])."',
department_name = '".$update_values['department_name']."',
department_url = '".$update_values['department_url']."',
visibility = '".$update_values['visibility']."',
subscribe = '".$update_values['subscribe']."',
unsubscribe = '".$update_values['unsubscribe']."',
tutor_name = '".$update_values['tutor_name']."',
legal = '".$update_values['legal']."',
activate_legal = '".$update_values['activate_legal']."',
registration_code = '".$update_values['course_registration_password']."'
WHERE code = '".$course_code."'";
Database::query($sql);

@ -0,0 +1,72 @@
<?php
// Language files that need to be included
$language_file = array('create_course', 'course_info', 'admin');
require_once '../inc/global.inc.php';
$this_section = SECTION_COURSES;
$course_code = isset($_REQUEST['course_code']) ? $_REQUEST['course_code'] : null;
$session_id = isset($_REQUEST['session_id']) ? intval($_REQUEST['session_id']) : null;
$user_id = api_get_user_id();
if (empty($course_code)) {
api_not_allowed();
}
$course_info = CourseManager::get_course_information($course_code);
$course_legal = $course_info['legal'];
// Build the form
$form = new FormValidator('legal', 'GET', api_get_self().'?course_code='.$course_code.'&session_id='.$session_id);
$form->addElement('hidden', 'course_code', $course_code);
$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"');
if ($form->validate()) {
$accept_legal = $form->exportValue('accept_legal');
if ($accept_legal == 1 ) {
CourseManager::save_user_legal($user_id, $course_code, $session_id);
}
}
$url = api_get_course_url($course_code, $session_id);
if (empty($session_id)) {
if (CourseManager::is_user_subscribed_in_course($user_id, $course_code)) {
$user_accepted_legal = CourseManager::is_user_accepted_legal($user_id, $course_code);
if ($user_accepted_legal) {
//Redirect to course home
header('Location: '.$url);
exit;
}
} else {
api_not_allowed();
}
} else {
$user_session_status = SessionManager::get_user_status_in_session($user_id, $course_code, $session_id);
if (isset($user_session_status)) {
$user_accepted_legal = CourseManager::is_user_accepted_legal($user_id, $course_code, $session_id);
if ($user_accepted_legal) {
//Redirect to course session home
header('Location: '.$url);
exit;
}
} else {
api_not_allowed();
}
}
Display :: display_header($nameTools);
echo '<h2>'.get_lang('CourseLegalAgreement').'</h2>';
echo $course_legal;
$form->display();

@ -3370,5 +3370,54 @@ class CourseManager {
return false;
}
function is_user_accepted_legal($user_id, $course_code, $session_id = null) {
$user_id = intval($user_id);
$course_code = Database::escape_string($course_code);
$session_id = intval($session_id);
if (empty($session_id)) {
$table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$sql = "SELECT legal_agreement FROM $table
WHERE user_id = $user_id AND course_code ='$course_code' ";
$result = Database::query($sql);
if (Database::num_rows($result) > 0 ) {
$result = Database::fetch_array($result);
if ($result['legal_agreement'] == 1 ) {
return true;
}
}
return false;
} else {
$table = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$sql = "SELECT legal_agreement FROM $table
WHERE id_user = $user_id AND course_code ='$course_code' AND id_session = $session_id";
$result = Database::query($sql);
if (Database::num_rows($result) > 0 ) {
$result = Database::fetch_array($result);
if ($result['legal_agreement'] == 1 ) {
return true;
}
}
return false;
}
return false;
}
function save_user_legal($user_id, $course_code, $session_id = null) {
$user_id = intval($user_id);
$course_code = Database::escape_string($course_code);
$session_id = intval($session_id);
if (empty($session_id)) {
$table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$sql = "UPDATE $table SET legal_agreement = '1'
WHERE user_id = $user_id AND course_code ='$course_code' ";
$result = Database::query($sql);
} else {
$table = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
$sql = "UPDATE $table SET legal_agreement = '1'
WHERE id_user = $user_id AND course_code = '$course_code' AND id_session = $session_id";
$result = Database::query($sql);
}
}
} //end class CourseManager

@ -249,9 +249,8 @@ if (!empty($_SESSION['_user']['user_id']) && ! ($login || $logout)) {
//lookup the user in the main database
$user_table = Database::get_main_table(TABLE_MAIN_USER);
$sql = "SELECT user_id, username, password, auth_source, active, expiration_date
FROM $user_table
WHERE username = '".Database::escape_string($login)."'";
$sql = "SELECT user_id, username, password, auth_source, active, expiration_date FROM $user_table
WHERE username = '".Database::escape_string($login)."'";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) {
@ -288,12 +287,12 @@ if (!empty($_SESSION['_user']['user_id']) && ! ($login || $logout)) {
// Check the user's password
if ( ($password == $uData['password'] OR $cas_login) AND (trim($login) == $uData['username'])) {
require_once(api_get_path(LIBRARY_PATH).'usermanager.lib.php');
$update_type = UserManager::get_extra_user_data_by_field($uData['user_id'], 'update_type');
$update_type= $update_type['update_type'];
if (!empty($extAuthSource[$update_type]['updateUser']) && file_exists($extAuthSource[$update_type]['updateUser'])) {
include_once($extAuthSource[$update_type]['updateUser']);
}
require_once(api_get_path(LIBRARY_PATH).'usermanager.lib.php');
$update_type = UserManager::get_extra_user_data_by_field($uData['user_id'], 'update_type');
$update_type= $update_type['update_type'];
if (!empty($extAuthSource[$update_type]['updateUser']) && file_exists($extAuthSource[$update_type]['updateUser'])) {
include_once($extAuthSource[$update_type]['updateUser']);
}
// Check if the account is active (not locked)
if ($uData['active']=='1') {
@ -323,10 +322,11 @@ if (!empty($_SESSION['_user']['user_id']) && ! ($login || $logout)) {
if ($my_user_is_admin === false) {
if (is_array($my_url_list) && count($my_url_list)>0 ){
if (is_array($my_url_list) && count($my_url_list)>0 ) {
// the user have the permissions to enter at this site
if (in_array($current_access_url_id, $my_url_list)) {
ConditionalLogin::check_conditions($uData);
$_user['user_id'] = $uData['user_id'];
$_user['status'] = $uData['status'];
session_regenerate_id();
@ -718,6 +718,7 @@ if (isset($cidReset) && $cidReset) { // course session data refresh requested or
$_course['visibility'] = $course_data['visibility'];
$_course['subscribe_allowed'] = $course_data['subscribe'];
$_course['unubscribe_allowed'] = $course_data['unsubscribe'];
$_course['activate_legal'] = $course_data['activate_legal'];
api_session_register('_cid');
api_session_register('_course');
@ -728,8 +729,8 @@ if (isset($cidReset) && $cidReset) { // course session data refresh requested or
if (api_get_setting('use_session_mode')=='true') {
// Database Table Definitions
$tbl_session = Database::get_main_table(TABLE_MAIN_SESSION);
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
$tbl_session_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$tbl_user = Database::get_main_table(TABLE_MAIN_USER);
$tbl_session_course = Database::get_main_table(TABLE_MAIN_SESSION_COURSE);
$tbl_session_course_user = Database::get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
if (!empty($_GET['id_session'])) {
@ -838,13 +839,15 @@ if (isset($cidReset) && $cidReset) { // course session data refresh requested or
/* COURSE / USER REL. INIT */
$session_id = api_get_session_id();
if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { // session data refresh requested
if (isset($_user['user_id']) && $_user['user_id'] && isset($_cid) && $_cid) { // have keys to search data
if (api_get_setting('use_session_mode') != 'true') {
$course_user_table = Database::get_main_table(TABLE_MAIN_COURSE_USER);
$sql = "SELECT * FROM $course_user_table
WHERE user_id = '".$_user['user_id']."' AND relation_type<>".COURSE_RELATION_TYPE_RRHH."
WHERE user_id = '".$_user['user_id']."' AND relation_type <> ".COURSE_RELATION_TYPE_RRHH."
AND course_code = '$cidReq'";
$result = Database::query($sql);
@ -852,6 +855,7 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { // ses
if (Database::num_rows($result) > 0) { // this user have a recorded state for this course
$cuData = Database::fetch_array($result);
$is_courseMember = true;
$is_courseTutor = (bool) ($cuData['tutor_id' ] == 1 );
$is_courseAdmin = (bool) ($cuData['status'] == 1 );
@ -869,33 +873,46 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { // ses
$tbl_course_user = Database :: get_main_table(TABLE_MAIN_COURSE_USER);
$sql = "SELECT * FROM ".$tbl_course_user."
WHERE user_id = '".$_user['user_id']."' AND relation_type<>".COURSE_RELATION_TYPE_RRHH."
AND course_code = '$cidReq'";
$sql = "SELECT * FROM ".$tbl_course_user."
WHERE user_id = '".$_user['user_id']."' AND
relation_type<>".COURSE_RELATION_TYPE_RRHH." AND
course_code = '$cidReq'";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) { // this user have a recorded state for this course
$cuData = Database::fetch_array($result);
$_courseUser['role'] = $cuData['role' ];
if ($_course['activate_legal'] == 1) {
$user_is_subscribed = CourseManager::is_user_subscribed_in_course($_user['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'];
$is_courseMember = true;
$is_courseTutor = (bool) ($cuData['tutor_id' ] == 1 );
$is_courseAdmin = (bool) ($cuData['status'] == 1 );
api_session_register('_courseUser');
}
if (!isset($is_courseAdmin)) { // this user has no status related to this course
// is it the session coach or the session admin ?
$tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
$tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
$tbl_session = Database :: get_main_table(TABLE_MAIN_SESSION);
$tbl_session_course = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE);
$tbl_session_course_user = Database :: get_main_table(TABLE_MAIN_SESSION_COURSE_USER);
//Session coach, session admin, course coach admin
$sql = " SELECT session.id_coach, session_admin_id, session_rcru.id_user
$sql = "SELECT session.id_coach, session_admin_id, session_rcru.id_user
FROM $tbl_session session,$tbl_session_course_user session_rcru
WHERE session_rcru.id_session = session.id AND session_rcru.course_code = '$_cid' AND session_rcru.id_user='{$_user['user_id']}' AND session_rcru.status = 2";
WHERE session_rcru.id_session = session.id AND
session_rcru.course_code = '$_cid' AND
session_rcru.id_user = '{$_user['user_id']}' AND
session_rcru.status = 2";
$result = Database::query($sql);
$row = Database::store_result($result);
@ -921,15 +938,12 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { // ses
$is_courseCoach = false;
$is_sessionAdmin = true;
} else {
// Check if the current user is the course coach
$sql = "SELECT 1
FROM ".$tbl_session_course_user."
WHERE course_code='$_cid'
AND id_user = '".$_user['user_id']."'
AND id_session = '".api_get_session_id()."'
AND status = 2";
$sql = "SELECT 1 FROM ".$tbl_session_course_user."
WHERE course_code='$_cid' AND
id_user = '".$_user['user_id']."' AND
id_session = '".$session_id."' AND
status = 2";
$result = Database::query($sql);
if ($row = Database::fetch_array($result)) {
$_courseUser['role'] = 'Professor';
@ -945,15 +959,16 @@ if ((isset($uidReset) && $uidReset) || (isset($cidReset) && $cidReset)) { // ses
}
api_session_register('_courseUser');
} else {
if (api_get_session_id() != 0) {
if ($session_id != 0) {
// Check if the user is a student is this session
$sql = "SELECT * FROM ".$tbl_session_course_user."
WHERE id_user = '".$_user['user_id']."'
AND id_session = '".api_get_session_id()."'
AND course_code = '$cidReq' AND status NOT IN(2)";
WHERE id_user = '".$_user['user_id']."' AND
id_session = '".$session_id."' AND
course_code = '$cidReq' AND status NOT IN(2)";
$result = Database::query($sql);
if (Database::num_rows($result) > 0) { // this user have a recorded state for this course
while($row = Database::fetch_array($result)){
while($row = Database::fetch_array($result)) {
$is_courseMember = true;
$is_courseTutor = false;
$is_courseAdmin = false;

@ -157,6 +157,8 @@ CREATE TABLE course (
subscribe tinyint NOT NULL default '1',
unsubscribe tinyint NOT NULL default '1',
registration_code varchar(255) NOT NULL default '',
legal TEXT NOT NULL,
activate_legal INT NOT NULL DEFAULT 0,
PRIMARY KEY (id),
UNIQUE KEY code (code)
);
@ -330,6 +332,7 @@ CREATE TABLE course_rel_user (
sort int default NULL,
user_course_cat int default '0',
relation_type int default 0,
legal_agreement INTEGER DEFAULT 0,
PRIMARY KEY (course_code,user_id,relation_type)
);
ALTER TABLE course_rel_user ADD INDEX (user_id);
@ -494,6 +497,7 @@ CREATE TABLE session_rel_course_rel_user (
id_user int unsigned NOT NULL default '0',
visibility int NOT NULL default 1,
status int NOT NULL default 0,
legal_agreement INTEGER DEFAULT 0,
PRIMARY KEY (id_session,course_code,id_user),
KEY id_user (id_user),
KEY course_code (course_code)

@ -105,6 +105,10 @@ INSERT INTO settings_options (variable, value, display_text) VALUES ('grading_mo
INSERT INTO settings_options (variable, value, display_text) VALUES ('grading_model', '1*X+1*X+1*X+1*X/4', 'Model 3');
ALTER TABLE course_rel_user ADD COLUMN legal_agreement INTEGER DEFAULT 0;
ALTER TABLE session_rel_course_rel_user ADD COLUMN legal_agreement INTEGER DEFAULT 0;
ALTER TABLE course ADD COLUMN legal TEXT NOT NULL;
ALTER TABLE course ADD COLUMN activate_legal INT NOT NULL DEFAULT 0;
-- xxSTATSxx
ALTER TABLE track_e_exercices ADD COLUMN questions_to_check TEXT NOT NULL DEFAULT '';

Loading…
Cancel
Save