diff --git a/main/course_home/activity.php b/main/course_home/activity.php index 3f92d829ad..8b3119640e 100755 --- a/main/course_home/activity.php +++ b/main/course_home/activity.php @@ -53,6 +53,15 @@ if (api_is_platform_admin()) { } } +// Course legal +$enabled = api_get_plugin_setting('courselegal', 'tool_enable'); +$pluginExtra = null; +if ($enabled == 'true') { + require_once api_get_path(SYS_PLUGIN_PATH).'courselegal/config.php'; + $plugin = CourseLegalPlugin::create(); + $pluginExtra = $plugin->getTeacherLink(); +} + // COURSE ADMIN ONLY VIEW // Start of tools for CourseAdmins (teachers/tutors) @@ -66,6 +75,7 @@ if ($session_id == 0 && api_is_course_admin() && api_is_allowed_to_edit(null, tr <div class="confirmation-message" id="id_confirmation_message" style="display:none"></div> </div>'; + $content .= $pluginExtra; if (api_get_setting('show_session_data') == 'true' && $session_id > 0) { $content .= '<div class="courseadminview"> @@ -90,6 +100,7 @@ if ($session_id == 0 && api_is_course_admin() && api_is_allowed_to_edit(null, tr $content .= return_block(get_lang('Administration'), $items , 'course-tools-administration'); } elseif (api_is_coach()) { + $content .= $pluginExtra; if (api_get_setting('show_session_data') == 'true' && $session_id > 0) { $content .= '<div class="row"> <span class="viewcaption">'.get_lang('SessionData').'</span> @@ -102,6 +113,7 @@ if ($session_id == 0 && api_is_course_admin() && api_is_allowed_to_edit(null, tr $my_list = CourseHome::get_tools_category(TOOL_STUDENT_VIEW); $content .= CourseHome::show_tools_category($my_list); $content .= '</div>'; + } else { $my_list = CourseHome::get_tools_category(TOOL_STUDENT_VIEW); if (count($my_list) > 0) { diff --git a/main/course_info/legal.php b/main/course_info/legal.php index c3abe38eff..e3bc6a5a28 100755 --- a/main/course_info/legal.php +++ b/main/course_info/legal.php @@ -22,10 +22,48 @@ if (empty($course_code)) { $course_info = CourseManager::get_course_information($course_code); $course_legal = $course_info['legal']; +$enabled = api_get_plugin_setting('courselegal', 'tool_enable'); +$pluginExtra = null; +$pluginLegal = false; +if ($enabled == 'true') { + $pluginLegal = true; + require_once api_get_path(SYS_PLUGIN_PATH).'courselegal/config.php'; + $plugin = CourseLegalPlugin::create(); + $data = $plugin->getData($course_info['real_id'], $session_id); + + $userData = $plugin->getUserAcceptedLegal( + $user_id, + $course_info['real_id'], + $session_id + ); + + if (!empty($data)) { + $course_legal = $data['content']; + } + + if (isset($_GET['web_agreement_link'])) { + $plugin->saveUserMailLegal( + $_GET['web_agreement_link'], + $user_id, + $course_info['real_id'], + $session_id + ); + } +} + // Build the form $form = new FormValidator('legal', 'GET', api_get_self().'?course_code='.$course_code.'&session_id='.$session_id); +$pluginMessage = null; +if ($pluginLegal && isset($userData)) { + if ($userData['web_agreement'] == 1 && empty($userData['mail_agreement'])) { + $pluginMessage = Display::return_message(get_lang('YouNeedToConfirmYourAgreementCheckYourEmail')); + } +} $form->addElement('header', get_lang('CourseLegalAgreement')); $form->addElement('label', null, $course_legal); +if ($pluginLegal && !empty($plugin)) { + $form->addElement('label', null, $plugin->getCurrentFile($course_info['real_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')); @@ -52,8 +90,13 @@ if (api_check_user_access_to_legal($course_info['visibility']) && Session::read( $url = api_get_course_url($course_code, $session_id); if (empty($session_id)) { - if (CourseManager::is_user_subscribed_in_course($user_id, $course_code) || api_check_user_access_to_legal($course_info['visibility'])) { - $user_accepted_legal = CourseManager::is_user_accepted_legal($user_id, $course_code); + if (CourseManager::is_user_subscribed_in_course($user_id, $course_code) || + api_check_user_access_to_legal($course_info['visibility']) + ) { + $user_accepted_legal = CourseManager::is_user_accepted_legal( + $user_id, + $course_code + ); if ($user_accepted_legal || $user_pass_open_course) { //Redirect to course home header('Location: '.$url); @@ -73,7 +116,7 @@ if (empty($session_id)) { if (isset($user_session_status) || api_check_user_access_to_legal($course_info['visibility'])) { $user_accepted_legal = CourseManager::is_user_accepted_legal($user_id, $course_code, $session_id); if ($user_accepted_legal || $user_pass_open_course) { - //Redirect to course session home + // Redirect to course session home. header('Location: '.$url); exit; } @@ -82,6 +125,7 @@ if (empty($session_id)) { } } -Display :: display_header($nameTools); +Display :: display_header(); +echo $pluginMessage; $form->display(); Display :: display_footer(); diff --git a/main/coursecopy/classes/CourseRestorer.class.php b/main/coursecopy/classes/CourseRestorer.class.php index 37e03edea8..a50adea6c8 100755 --- a/main/coursecopy/classes/CourseRestorer.class.php +++ b/main/coursecopy/classes/CourseRestorer.class.php @@ -1263,11 +1263,15 @@ class CourseRestorer } } - /** - * Restore Quiz - */ - public function restore_quizzes($session_id = 0, $respect_base_content = false) - { + /** + * Restore Quiz + * @param int $session_id + * @param bool $respect_base_content + */ + public function restore_quizzes( + $session_id = 0, + $respect_base_content = false + ) { if ($this->course->has_resources(RESOURCE_QUIZ)) { $table_qui = Database :: get_course_table(TABLE_QUIZ_TEST); $table_rel = Database :: get_course_table(TABLE_QUIZ_TEST_QUESTION); @@ -1309,7 +1313,9 @@ class CourseRestorer ); global $_custom; - if (isset($_custom['exercises_clean_dates_when_restoring']) && $_custom['exercises_clean_dates_when_restoring']) { + if (isset($_custom['exercises_clean_dates_when_restoring']) && + $_custom['exercises_clean_dates_when_restoring'] + ) { $quiz->start_time = null; $quiz->end_time = null; } @@ -1418,7 +1424,10 @@ class CourseRestorer if ($new_id) { if (!empty($question->picture)) { - $question_temp = Question::read($new_id, $this->destination_course_info['real_id']); + $question_temp = Question::read( + $new_id, + $this->destination_course_info['real_id'] + ); $documentPath = api_get_path(SYS_COURSE_PATH).$this->destination_course_info['path'].'/document'; // picture path @@ -1452,7 +1461,7 @@ class CourseRestorer c_id = ".$this->destination_course_id." , id = '".$index."', question_id = '".$new_id."', - answer = '".self::DBUTF8escapestring($answer['answer'])."', + answer = '".api_htmlentities(self::DBUTF8escapestring($answer['answer']))."', correct = '".$answer['correct']."', comment = '".self::DBUTF8escapestring($answer['comment'])."', ponderation = '".$answer['ponderation']."', @@ -1550,8 +1559,7 @@ class CourseRestorer } else { $new_options = array(); if (isset($question->question_options)) { - foreach($question->question_options as $obj) { - + foreach ($question->question_options as $obj) { $item = array(); $item['question_id'] = $new_id; $item['c_id'] = $this->destination_course_id; @@ -1561,6 +1569,7 @@ class CourseRestorer $question_option_id = Database::insert($table_options, $item); $new_options[$obj->obj->id] = $question_option_id; } + foreach($correct_answers as $answer_id => $correct_answer) { $params = array(); $params['correct'] = $new_options[$correct_answer]; diff --git a/main/inc/lib/course.lib.php b/main/inc/lib/course.lib.php index 5fa8755c26..90c996a5b8 100755 --- a/main/inc/lib/course.lib.php +++ b/main/inc/lib/course.lib.php @@ -3993,17 +3993,27 @@ class CourseManager */ public static function is_user_accepted_legal($user_id, $course_code, $session_id = null) { - $user_id = intval($user_id); + $user_id = intval($user_id); $course_code = Database::escape_string($course_code); $session_id = intval($session_id); + + // Course legal + $enabled = api_get_plugin_setting('courselegal', 'tool_enable'); + + if ($enabled == 'true') { + require_once api_get_path(SYS_PLUGIN_PATH).'courselegal/config.php'; + $plugin = CourseLegalPlugin::create(); + return $plugin->isUserAcceptedLegal($user_id, $course_code, $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' "; + 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 ) { + if ($result['legal_agreement'] == 1) { return true; } } @@ -4011,11 +4021,11 @@ class CourseManager } 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"; + 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 ) { + if ($result['legal_agreement'] == 1) { return true; } } @@ -4030,11 +4040,21 @@ class CourseManager * @param string course code * @param int session id */ - function save_user_legal($user_id, $course_code, $session_id = null) { + public static function save_user_legal($user_id, $course_code, $session_id = null) + { + // Course plugin legal + $enabled = api_get_plugin_setting('courselegal', 'tool_enable'); + + if ($enabled == 'true') { + require_once api_get_path(SYS_PLUGIN_PATH).'courselegal/config.php'; + $plugin = CourseLegalPlugin::create(); + return $plugin->saveUserLegal($user_id, $course_code, $session_id); + } - $user_id = intval($user_id); + $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' diff --git a/main/inc/lib/database.lib.php b/main/inc/lib/database.lib.php index 9758e8b334..51dd536e32 100755 --- a/main/inc/lib/database.lib.php +++ b/main/inc/lib/database.lib.php @@ -1150,7 +1150,7 @@ class Database { var_dump($sql); } return self::insert_id(); - } + } return false; } diff --git a/main/inc/lib/fileUpload.lib.php b/main/inc/lib/fileUpload.lib.php index e9659f103b..feb8c59e42 100755 --- a/main/inc/lib/fileUpload.lib.php +++ b/main/inc/lib/fileUpload.lib.php @@ -185,7 +185,8 @@ function handle_uploaded_document( $to_user_id = null, $unzip = 0, $what_if_file_exists = '', - $output = true + $output = true, + $onlyUploadFile = false ) { if (!$user_id) { die('Not a valid user.'); @@ -263,9 +264,17 @@ function handle_uploaded_document( $document_name = get_document_title($uploaded_file['name']); // Size of the uploaded file (in bytes) $file_size = $uploaded_file['size']; - $files_perm = api_get_permissions_for_new_files(); - //$doc_path = '/'.$clean_name; + + if ($onlyUploadFile) { + $errorResult = moveUploadedFile($uploaded_file, $store_path); + if ($errorResult) { + return $store_path; + } else { + return $errorResult; + } + } + $docId = DocumentManager::get_document_id($_course, $file_path, $current_session_id); // What to do if the target file exists diff --git a/main/inc/lib/legal.lib.php b/main/inc/lib/legal.lib.php index 124389fdcc..ce6e44c3e9 100755 --- a/main/inc/lib/legal.lib.php +++ b/main/inc/lib/legal.lib.php @@ -34,24 +34,26 @@ class LegalManager if ($last['content'] != $content) { $version = intval(LegalManager::get_last_condition_version($language)); $version++; - $sql = "INSERT INTO $legal_table - SET language_id = '".Database::escape_string($language)."', - content = '".$content."', - changes= '".$changes."', - type = '".$type."', - version = '".Database::escape_string($version)."', - date = '".$time."'"; - $result = Database::query($sql); + $sql = "INSERT INTO $legal_table SET + language_id = '".Database::escape_string($language)."', + content = '".$content."', + changes= '".$changes."', + type = '".$type."', + version = '".Database::escape_string($version)."', + date = '".$time."'"; + Database::query($sql); + return true; } elseif($last['type'] != $type && $language==$last['language_id']) { //update $id = $last['legal_id']; - $sql = "UPDATE $legal_table - SET changes= '".$changes."', - type = '".$type."', - date = '".$time."' + $sql = "UPDATE $legal_table SET + changes= '".$changes."', + type = '".$type."', + date = '".$time."' WHERE legal_id= $id "; - $result = Database::query($sql); + Database::query($sql); + return true; } else { return false; @@ -72,8 +74,7 @@ class LegalManager * @param int $language language id * @return array all the info of a Term and condition */ - - public static function get_last_condition_version ($language) + public static function get_last_condition_version($language) { $legal_conditions_table = Database::get_main_table(TABLE_MAIN_LEGAL); $language= Database::escape_string($language); @@ -113,17 +114,21 @@ class LegalManager * @param int $language language id * @return boolean | int the version or false if does not exist */ - public static function get_last_version ($language) + public static function get_last_version($language) { $legal_conditions_table = Database::get_main_table(TABLE_MAIN_LEGAL); $language= Database::escape_string($language); - $sql = "SELECT version FROM $legal_conditions_table WHERE language_id = '".$language."' ORDER BY version DESC LIMIT 1 "; + $sql = "SELECT version FROM $legal_conditions_table + WHERE language_id = '".$language."' + ORDER BY version DESC LIMIT 1 "; $result = Database::query($sql); if (Database::num_rows($result)>0){ $version = Database::fetch_array($result); $version = explode(':',$version[0]); + return $version[0]; } else { + return false; } } @@ -131,6 +136,7 @@ class LegalManager /** * Show the last condition * @param array with type and content i.e array('type'=>'1', 'content'=>'hola'); + * * @return string html preview */ public static function show_last_condition($term_preview) @@ -247,7 +253,7 @@ class LegalManager * @param int The language id * @return int The current type of terms and conditions */ - public static function get_type_of_terms_and_conditions ($legal_id,$language_id) + public static function get_type_of_terms_and_conditions($legal_id,$language_id) { $legal_conditions_table = Database::get_main_table(TABLE_MAIN_LEGAL); $legal_id=Database::escape_string($legal_id); diff --git a/plugin/courselegal/CourseLegalPlugin.php b/plugin/courselegal/CourseLegalPlugin.php new file mode 100755 index 0000000000..5b53698cc6 --- /dev/null +++ b/plugin/courselegal/CourseLegalPlugin.php @@ -0,0 +1,408 @@ +<?php +/* For licensing terms, see /license.txt */ + +/** + * Class CourseLegalPlugin + */ +class CourseLegalPlugin extends Plugin +{ + public $isCoursePlugin = true; + + // When creating a new course this settings are added to the course + public $course_settings = array( + array( + 'name' => 'courselegal', + 'type' => 'text' + ) + ); + + /** + * @return CourseLegalPlugin + */ + static function create() + { + static $result = null; + return $result ? $result : $result = new self(); + } + + /** + * + */ + protected function __construct() + { + parent::__construct( + '0.1', + 'Julio Montoya', + array( + 'tool_enable' => 'boolean' + ) + ); + } + + /** + * @return string + */ + public function getTeacherLink() + { + $link = null; + if (api_is_allowed_to_edit()) { + $url = api_get_path(WEB_PLUGIN_PATH).'courselegal/start.php?'.api_get_cidreq(); + $link = Display::url( + get_lang('Legal'), + $url, + array('class' => 'btn') + ); + } + + return $link; + } + + /** + * @param int $userId + * @param int $courseId + * @param int $sessionId + * + * @return array + */ + public function getUserAcceptedLegal($userId, $courseId, $sessionId) + { + $userId = intval($userId); + $courseId = intval($courseId); + $sessionId = intval($sessionId); + + $table = Database::get_main_table('session_rel_course_rel_user_legal'); + $sql = "SELECT * + FROM $table + WHERE user_id = $userId AND c_id = $courseId AND session_id = $sessionId"; + $result = Database::query($sql); + $data = array(); + if (Database::num_rows($result) > 0 ) { + $data = Database::fetch_array($result, 'ASSOC'); + } + + return $data; + } + + /** + * @param int $userId + * @param string $courseCode + * @param int $sessionId + * + * @return bool + */ + public function isUserAcceptedLegal($userId, $courseCode, $sessionId) + { + $courseInfo = api_get_course_info($courseCode); + $courseId = $courseInfo['real_id']; + $result = $this->getUserAcceptedLegal($userId, $courseId, $sessionId); + + if (!empty($result)) { + if ($result['mail_agreement'] == 1 && + $result['web_agreement'] == 1 + ) { + return true; + } + } + + return false; + } + + /** + * @param int $userId + * @param int $courseCode + * @param int $sessionId + * + * @return bool + */ + public function saveUserLegal($userId, $courseCode, $sessionId) + { + $courseInfo = api_get_course_info($courseCode); + $courseId = $courseInfo['real_id']; + $data = $this->getUserAcceptedLegal($userId, $courseId, $sessionId); + + $id = false; + if (empty($data)) { + $table = Database::get_main_table( + 'session_rel_course_rel_user_legal' + ); + $uniqueId = api_get_unique_id(); + $values = array( + 'user_id' => $userId, + 'c_id' => $courseId, + 'session_id' => $sessionId, + 'web_agreement' => 1, + 'web_agreement_date' => api_get_utc_datetime(), + 'mail_agreement_link' => $uniqueId + ); + $id = Database::insert($table, $values); + + $url = api_get_path(WEB_CODE_PATH).'course_info/legal.php?web_agreement_link='.$uniqueId.'&course_code='.Security::remove_XSS($courseCode).'&session_id='.$sessionId; + $courseUrl = Display::url($url, $url); + + $subject = get_lang("MailAgreement"); + $message = sprintf(get_lang("MailAgreementWasSentWithClickX"), $courseUrl); + MessageManager::send_message_simple($userId, $subject, $message); + } + + return $id; + } + + /** + * @param string $link + * @param int $userId + * @param int $courseId + * @param int $sessionId + * + * @return bool + */ + public function saveUserMailLegal($link, $userId, $courseId, $sessionId) + { + $data = $this->getUserAcceptedLegal($userId, $courseId, $sessionId); + + if (empty($data)) { + return null; + } + + if ($data['mail_agreement_link'] == $link) { + $table = Database::get_main_table('session_rel_course_rel_user_legal'); + $id = $data['id']; + $values = array( + 'mail_agreement' => 1, + 'mail_agreement_date' => api_get_utc_datetime() + ); + Database::update($table, $values, array('id = ?' => array($id))); + } + } + + /** + * @param int $courseId + * @param int $sessionId + */ + public function warnUsersByEmail($courseId, $sessionId) + { + $courseInfo = api_get_course_info_by_id($courseId); + $courseCode = $courseInfo['code']; + + if (empty($sessionId)) { + $students = CourseManager::get_student_list_from_course_code($courseCode, false); + } else { + $students = CourseManager::get_student_list_from_course_code($courseCode, true, $sessionId); + } + + $url = api_get_course_url($courseCode, $sessionId); + $url = Display::url($url, $url); + + $subject = get_lang("AgreementUpdated"); + $message = sprintf(get_lang("AgreementWasUpdatedClickHere"), $url); + + if (!empty($students)) { + foreach ($students as $student) { + $userId = $student['user_id']; + MessageManager::send_message_simple($userId, $subject, $message); + } + } + } + + /** + * @param int $courseId + * @param int $sessionId + */ + public function removePreviousAgreements($courseId, $sessionId) + { + $table = Database::get_main_table('session_rel_course_rel_user_legal'); + $sessionId = intval($sessionId); + $courseId = intval($courseId); + $sql = "DELETE FROM $table + WHERE c_id = '$courseId' AND session_id = $sessionId "; + Database::query($sql); + } + + /** + * @param array $values + * @param array $file $_FILES['uploaded_file'] + */ + public function save($values, $file = array(), $deleteFile = false) + { + $table = Database::get_main_table('session_rel_course_legal'); + + $courseId = $values['c_id']; + $sessionId = $values['session_id']; + + $conditions = array( + 'c_id' => $courseId, + 'session_id' => $sessionId, + ); + + $legalData = $this->getData($courseId, $sessionId); + + $conditions['content'] = $values['content']; + + $course = api_get_course_info(); + $coursePath = api_get_path(SYS_COURSE_PATH).$course['directory'].'/courselegal'; + + if (!is_dir($coursePath)) { + mkdir($coursePath, api_get_permissions_for_new_directories()); + } + + require_once api_get_path(LIBRARY_PATH) . 'fileUpload.lib.php'; + $uploadOk = process_uploaded_file($file, false); + + $fileName = null; + if ($uploadOk) { + $uploadResult = handle_uploaded_document( + $course, + $file, + $coursePath, + '/', + api_get_user_id(), + api_get_group_id(), + null, + false, + false, + false, + true + ); + + if ($uploadResult) { + $fileName = basename($uploadResult); + // Delete old one if exists. + if ($legalData) { + if (!empty($legalData['filename'])) { + $fileToDelete = $coursePath.'/'.$legalData['filename']; + if (file_exists($fileToDelete)) { + unlink($fileToDelete); + } + } + } + } + } + $conditions['filename'] = $fileName; + + if (empty($legalData)) { + $id = Database::insert($table, $conditions); + } else { + $id = $legalData['id']; + Database::update( + $table, + array( + 'content' => $values['content'], + 'filename' => $fileName + ), + array('id = ? ' => $id) + ); + } + + if ($deleteFile) { + Database::update( + $table, + array('filename' => ''), + array('id = ? ' => $id) + ); + if (!empty($legalData['filename'])) { + $fileToDelete = $coursePath . '/' . $legalData['filename']; + if (file_exists($fileToDelete)) { + unlink($fileToDelete); + } + } + } + + if (isset($values['remove_previous_agreements']) && !empty($values['remove_previous_agreements'])) { + $this->removePreviousAgreements($courseId, $sessionId); + } + + if (isset($values['warn_users_by_email']) && !empty($values['warn_users_by_email'])) { + $this->warnUsersByEmail($courseId, $sessionId); + } + } + + /** + * @param int $courseId + * @param int $sessionId + * @return array|mixed + */ + public function getData($courseId, $sessionId) + { + $table = Database::get_main_table('session_rel_course_legal'); + $conditions = array( + 'c_id = ? AND session_id = ? ' => array( + $courseId, + $sessionId + ) + ); + + $result = Database::select('*', $table, array('where' => $conditions)); + $legalData = isset($result) && !empty($result) ? current($result) : array(); + + return $legalData; + } + + /** + * @param int $courseId + * @param int $sessionId + * + * @return string + */ + public function getCurrentFile($courseId, $sessionId) + { + $data = $this->getData($courseId, $sessionId); + + if (isset($data['filename']) && !empty($data['filename'])) { + $course = api_get_course_info_by_id($courseId); + + $coursePath = api_get_path(SYS_COURSE_PATH).$course['directory'].'/courselegal'; + $file = $coursePath.'/'.$data['filename']; + + if (file_exists($file)) { + return Display::url( + $data['filename'], + api_get_path(WEB_COURSE_PATH).$course['directory'].'/courselegal/'.$data['filename'] + ); + } + } + } + + public function install() + { + $table = Database::get_main_table('session_rel_course_legal'); + $sql = "CREATE TABLE IF NOT EXISTS $table ( + id int PRIMARY KEY AUTO_INCREMENT, + c_id int, + session_id int, + content text, + filename varchar(255) + )"; + Database::query($sql); + + $table = Database::get_main_table('session_rel_course_rel_user_legal'); + + $sql = "CREATE TABLE IF NOT EXISTS $table ( + id int PRIMARY KEY AUTO_INCREMENT, + user_id int, + c_id int, + session_id int, + web_agreement varchar(255), + web_agreement_date datetime, + mail_agreement varchar(255), + mail_agreement_date datetime, + mail_agreement_link varchar(255) + )"; + Database::query($sql); + + // Installing course settings + $this->install_course_fields_in_all_courses(false); + } + + public function uninstall() + { + $table = Database::get_main_table('session_rel_course_legal'); + $sql = "DROP TABLE $table "; + Database::query($sql); + + $table = Database::get_main_table('session_rel_course_rel_user_legal'); + $sql = "DROP TABLE $table "; + Database::query($sql); + + // Deleting course settings + $this->uninstall_course_fields_in_all_courses($this->course_settings); + } +} diff --git a/plugin/courselegal/config.php b/plugin/courselegal/config.php new file mode 100644 index 0000000000..eb585b25d4 --- /dev/null +++ b/plugin/courselegal/config.php @@ -0,0 +1,6 @@ +<?php +/* For licensing terms, see /license.txt */ + +require_once __DIR__ . '/../../main/inc/global.inc.php'; +require_once api_get_path(LIBRARY_PATH).'plugin.class.php'; +require_once __DIR__.'/CourseLegalPlugin.php'; diff --git a/plugin/courselegal/install.php b/plugin/courselegal/install.php new file mode 100644 index 0000000000..d8a4aaefca --- /dev/null +++ b/plugin/courselegal/install.php @@ -0,0 +1,9 @@ +<?php +/* For license terms, see /license.txt */ + +require_once dirname(__FILE__) . '/config.php'; + +if (!api_is_platform_admin()) { + die ('You must have admin permissions to install plugins'); +} +CourseLegalPlugin::create()->install(); diff --git a/plugin/courselegal/lang/english.php b/plugin/courselegal/lang/english.php new file mode 100755 index 0000000000..0951993162 --- /dev/null +++ b/plugin/courselegal/lang/english.php @@ -0,0 +1,4 @@ +<?php + +$strings['plugin_title'] = "Course agreements"; +$strings['plugin_comment'] = "Course agreements"; diff --git a/plugin/courselegal/lang/spanish.php b/plugin/courselegal/lang/spanish.php new file mode 100755 index 0000000000..0951993162 --- /dev/null +++ b/plugin/courselegal/lang/spanish.php @@ -0,0 +1,4 @@ +<?php + +$strings['plugin_title'] = "Course agreements"; +$strings['plugin_comment'] = "Course agreements"; diff --git a/plugin/courselegal/plugin.php b/plugin/courselegal/plugin.php new file mode 100755 index 0000000000..1d5db350a2 --- /dev/null +++ b/plugin/courselegal/plugin.php @@ -0,0 +1,5 @@ +<?php + +require_once dirname(__FILE__) . '/config.php'; + +$plugin_info = CourseLegalPlugin::create()->get_info(); diff --git a/plugin/courselegal/start.php b/plugin/courselegal/start.php new file mode 100755 index 0000000000..77f3985308 --- /dev/null +++ b/plugin/courselegal/start.php @@ -0,0 +1,51 @@ +<?php +/* For license terms, see /license.txt */ +$language_file = array('document','gradebook'); + +require_once dirname(__FILE__) . '/config.php'; + +// Course legal +$enabled = api_get_plugin_setting('courselegal', 'tool_enable'); + +if ($enabled != 'true') { + api_not_allowed(true); +} + +if (!api_is_allowed_to_edit()) { + api_not_allowed(true); +} + +$legal = CourseLegalPlugin::create(); +$url = api_get_self().'?'.api_get_cidreq(); +$courseId = api_get_course_int_id(); +$sessionId = api_get_session_id(); + +$form = new FormValidator('plugin', 'post', $url ); +$form->addElement('header', get_lang('CourseLegal')); +$form->addElement('hidden', 'session_id', $sessionId); +$form->addElement('hidden', 'c_id', $courseId); +$form->addElement('textarea', 'content', get_lang('Text')); +$form->addElement('file', 'uploaded_file', get_lang('File')); +$file = $legal->getCurrentFile($courseId, $sessionId); + +if (!empty($file)) { + $form->addElement('label', get_lang('File'), $file); +} + +$form->addElement('checkbox', 'delete_file', null, get_lang('DeleteFile')); +$form->addElement('checkbox', 'remove_previous_agreements', null, get_lang('RemoveAllUserAgreements')); +$form->addElement('checkbox', 'warn_users_by_email', null, get_lang('WarnAllUsersByEmail')); +$form->addElement('button', 'submit', get_lang('Send')); + +$form->setDefaults($legal->getData($courseId, $sessionId)); + +if ($form->validate()) { + $values = $form->getSubmitValues(); + $file = isset($_FILES['uploaded_file']) ? $_FILES['uploaded_file'] : array(); + $deleteFile = isset($values['delete_file']) ? $values['delete_file'] : false; + $legal->save($values, $file, $deleteFile); + header('Location: '.$url); + exit; +} +Display::display_header(get_lang('CourseLegal')); +$form->display();