From 9a5c4afc9a5cc1d201f9499e86be12754263cdcb Mon Sep 17 00:00:00 2001 From: Daniel Barreto Date: Tue, 24 Feb 2015 22:09:40 -0500 Subject: [PATCH 01/11] Add terms and conditions, script and ws - refs BT#9461#hook --- .../ajax/advanced_subscription.ajax.php | 10 +++ plugin/advanced_subscription/lang/english.php | 2 + plugin/advanced_subscription/lang/spanish.php | 2 + .../src/AdvancedSubscriptionPlugin.php | 52 +++++++++++- .../src/HookAdvancedSubscription.php | 80 ++++++++++++++++++- .../src/terms_and_conditions.php | 72 +++++++++++++++++ .../views/terms_and_conditions.tpl | 27 +++++++ 7 files changed, 242 insertions(+), 3 deletions(-) create mode 100644 plugin/advanced_subscription/src/terms_and_conditions.php create mode 100644 plugin/advanced_subscription/views/terms_and_conditions.tpl diff --git a/plugin/advanced_subscription/ajax/advanced_subscription.ajax.php b/plugin/advanced_subscription/ajax/advanced_subscription.ajax.php index 10e523c111..c69ad8a16b 100644 --- a/plugin/advanced_subscription/ajax/advanced_subscription.ajax.php +++ b/plugin/advanced_subscription/ajax/advanced_subscription.ajax.php @@ -25,6 +25,8 @@ $data['newStatus'] = intval($_REQUEST['e']); // $data['is_connected'] = isset($_REQUEST['is_connected']) ? boolval($_REQUEST['is_connected']) : false; $data['is_connected'] = true; $data['profile_completed'] = isset($_REQUEST['profile_completed']) ? floatval($_REQUEST['profile_completed']) : 0; +$data['accept_terms'] = isset($_REQUEST['accept_terms']) ? intval($_REQUEST['accept_terms']) : 0; +$data['courseId'] = isset($_REQUEST['c']) ? intval($_REQUEST['c']) : 0; // Init result array $result = array('error' => true, 'errorMessage' => get_lang('ThereWasAnError')); // Check if data is valid or is for start subscription @@ -274,6 +276,14 @@ if ($verified) { } } break; + case 'terms_response': + // Check if new status is set + if (isset($data['accept_terms']) && $data['accept_terms'] == 1) { + $legalPlugin = CourseLegalPlugin::create()->saveUserLegal($data['studentId'], $data['courseId'], $data['sessionId']); + } else { + $result['errorMessage'] = 'Need terms response params'; + } + break; default: $result['errorMessage'] = 'This action does not exist!'; } diff --git a/plugin/advanced_subscription/lang/english.php b/plugin/advanced_subscription/lang/english.php index adf7829226..e9925b17bc 100644 --- a/plugin/advanced_subscription/lang/english.php +++ b/plugin/advanced_subscription/lang/english.php @@ -135,3 +135,5 @@ $strings['MailContentReminderSuperiorSecond'] = 'We invite you to accept or reje $strings['MailTitleReminderMaxSuperior'] = 'Reminder: Course inscription request for your collaborators'; $strings['MailContentReminderMaxSuperior'] = 'We remind you, we have received inscription requests below to course %s for your collaborators. This course is starting at %s. Course details: %s.'; $strings['MailContentReminderMaxSuperiorSecond'] = 'This course have limited vacancies and has received a high inscription request rate, So we recommend all areas to accept at most %s candidates. We invite you to accept or reject inscription request, clicking corresponding button for each collaborator.'; + +$strings['YouMustAcceptTermsAndConditions'] = 'To subscribe to course %s, you must accept this terms and conditions.'; diff --git a/plugin/advanced_subscription/lang/spanish.php b/plugin/advanced_subscription/lang/spanish.php index 8c34867d2b..7e73b25434 100644 --- a/plugin/advanced_subscription/lang/spanish.php +++ b/plugin/advanced_subscription/lang/spanish.php @@ -135,3 +135,5 @@ $strings['MailContentReminderSuperiorSecond'] = 'Le invitamos a aprobar o desapr $strings['MailTitleReminderMaxSuperior'] = 'Recordatorio: Solicitud de consideración de curso para colaborador(es)'; $strings['MailContentReminderMaxSuperior'] = 'Le recordamos que hemos recibido las siguientes solicitudes de suscripción al curso %s de parte de sus colaboradores. El curso se iniciará el %s. Detalles del curso: %s.'; $strings['MailContentReminderMaxSuperiorSecond'] = 'Este curso tiene una cantidad de cupos limitados y ha recibido una alta tasa de solicitudes de inscripción, por lo que recomendamos que cada área apruebe un máximo de %s candidatos. Le invitamos a aprobar o desaprobar las suscripciones, dando clic en el botón correspondiente a continuación para cada colaborador.'; + +$strings['YouMustAcceptTermsAndConditions'] = 'Para inscribirse al curso %s, debe aceptar estos términos y condiciones.'; diff --git a/plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php b/plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php index aeae3ecc1a..8797fc77ec 100644 --- a/plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php +++ b/plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php @@ -25,6 +25,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface 'min_profile_percentage' => 'text', 'check_induction' => 'boolean', 'secret_key' => 'text', + 'terms_and_conditions' => 'wysiwyg' ); parent::__construct('1.0', 'Imanol Losada, Daniel Barreto', $parameters); @@ -883,7 +884,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface 'e=' . intval($params['newStatus']) . '&' . 'u=' . intval($params['studentUserId']) . '&' . 'q=' . intval($params['queueId']) . '&' . - 'is_connected=' . true . '&' . + 'is_connected=' . 1 . '&' . 'profile_completed=' . intval($params['profile_completed']) . '&' . 'v=' . $this->generateHash($params); return $url; @@ -1037,4 +1038,53 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface { return 'advanced_subscription'; } + + /** + * Return the url to show subscription terms + * @param array $params + * @param int $mode + * @return string + */ + public function getTermsUrl($params, $mode = 0) + { + $url = api_get_path(WEB_PLUGIN_PATH) . 'advanced_subscription/src/terms_and_conditions.php?' . + 'a=' . Security::remove_XSS($params['action']) . '&' . + 's=' . intval($params['sessionId']) . '&' . + 'current_user_id=' . intval($params['currentUserId']) . '&' . + 'e=' . intval($params['newStatus']) . '&' . + 'u=' . intval($params['studentUserId']) . '&' . + 'q=' . intval($params['queueId']) . '&' . + 'is_connected=' . 1 . '&' . + 'profile_completed=' . intval($params['profile_completed']) . '&' . + 'r=' . intval($mode) . '&' . + 'v=' . $this->generateHash($params); + // Launch popup + if ($mode == 0) { + $url = 'javascript:void(window.open(\'' . $url .'\',\'Terms\', \'100\', \'100\' );)'; + } + return $url; + } + + /** + * Return the url to get subscription terms + * @param array $params + * @param int $acceptTerms + * @return string + */ + public function getTermsResponseUrl($params, $acceptTerms = 0) + { + $url = api_get_path(WEB_PLUGIN_PATH) . 'advanced_subscription/ajax/advanced_subscription.ajax.php?' . + 'a=' . Security::remove_XSS($params['action']) . '&' . + 's=' . intval($params['sessionId']) . '&' . + 'current_user_id=' . 0 . '&' . + 'e=' . 0 . '&' . + 'u=' . intval($params['studentUserId']) . '&' . + 'q=' . 0 . '&' . + 'is_connected=' . 1 . '&' . + 'profile_completed=' . intval($params['profile_completed']) . '&' . + 'accept_terms=' . intval($acceptTerms) . '&' . + 'c=' . intval($params['courseId']) . '&' . + 'v=' . $this->generateHash($params); + return $url; + } } diff --git a/plugin/advanced_subscription/src/HookAdvancedSubscription.php b/plugin/advanced_subscription/src/HookAdvancedSubscription.php index 244ce8908e..7ed8dbec7a 100644 --- a/plugin/advanced_subscription/src/HookAdvancedSubscription.php +++ b/plugin/advanced_subscription/src/HookAdvancedSubscription.php @@ -509,7 +509,7 @@ class HookAdvancedSubscription extends HookObserver implements // Check conditions if ($status == ADVANCED_SUBSCRIPTION_QUEUE_STATUS_NO_QUEUE) { // No in Queue, require queue subscription url action - $data['action_url'] = self::$plugin->getQueueUrl($params); + $data['action_url'] = self::$plugin->getTermsUrl($params); } elseif ($status == ADVANCED_SUBSCRIPTION_QUEUE_STATUS_ADMIN_APPROVED) { // send url action $data['action_url'] = self::$plugin->getSessionUrl($sessionId); @@ -521,7 +521,7 @@ class HookAdvancedSubscription extends HookObserver implements $data['action_url'] = self::$plugin->getSessionUrl($sessionId); } elseif ($status == ADVANCED_SUBSCRIPTION_QUEUE_STATUS_NO_QUEUE) { // in Queue or not, cannot be subscribed to session - $data['action_url'] = self::$plugin->getQueueUrl($params); + $data['action_url'] = self::$plugin->getTermsUrl($params); } else { // In queue, output status message, no more info. } @@ -621,6 +621,82 @@ class HookAdvancedSubscription extends HookObserver implements return $sessionList; } + /** + * Get a list of sessions (id, coach_id, name, courses_num, users_num, classes_num, + * date_start, date_end, access_days_before_num, session_admin_id, visibility, + * session_category_id, promotion_id, + * validated_user_num, waiting_user_num, + * extra, course) the validated_usernum and waiting_user_num are + * used when have the plugin for advance incsription enables. + * The extra data (field_name, field_value) + * The course data (course_id, course_code, course_title, + * coach_username, coach_firstname, coach_lastname) + * @param array $params List of parameters (id, category_name, access_url_id, secret_key) + * @return array|soap_fault Sessions list (id=>[title=>'title',url='http://...',date_start=>'...',date_end=>'']) + */ + public static function WSTermsAndConditions($params) + { + global $debug; + + if ($debug) { + error_log('WSListSessionsDetailsByCategory'); + error_log('Params ' . print_r($params, 1)); + } + $secretKey = $params['secret_key']; + + // Check if secret key is valid + if (!WSHelperVerifyKey($secretKey)) { + return return_error(WS_ERROR_SECRET_KEY); + } + + // Get Data + $data = array(); + $data['sessionId'] = $params['session_id']; + $data['studentUserId'] = $params['user_id']; + $data['profile_completed'] = $params['profile_completed']; + $legalEnabled = api_get_plugin_setting('courselegal', 'tool_enable'); + $legalPlugin = CourseLegalPlugin::create(); + if ( + UserManager::is_user_id_valid($data['studentUserId']) && + SessionManager::isValidId($data['sessionId']) + ) { + $courses = SessionManager::get_course_list_by_session_id($data['sessionId']); + $course = current($courses); + $data['courseId'] = $course['id']; + $data['session'] = api_get_session_info($data['sessionId']); + $data['student'] = Usermanager::get_user_info_by_id($data['studentUserId']); + if ($legalEnabled) { + // Get Terms content + $termsContent = $legalPlugin->getData($data['courseId'], $data['sessionId']); + $termsContent = $termsContent['content']; + $termsFiles = $legalPlugin->getCurrentFile($data['courseId'], $data['sessionId']); + $twigString = new \Twig_Environment(new \Twig_Loader_String()); + $termsContent = $twigString->render( + $termsContent, + array( + 'session' => $data['session'], + 'student' => $data['student'], + ) + ); + } else { + $termsContent = ''; + $termsFiles = ''; + } + + // Set output data + $data['action'] = 'terms_response'; + $data['terms_content'] = $termsContent; + $data['terms_files'] = $termsFiles; + $data['accept_terms_url'] = self::$plugin->getTermsResponseUrl($data, 1); + $data['reject_terms_url'] = self::$plugin->getTermsResponseUrl($data, 0); + $data['reject_message'] = self::$plugin->get_lang('YouMustAcceptTermsAndConditions'); + } else { + $data = return_error(WS_ERROR_INVALID_INPUT); + } + + return $data; + } + /** * Return notification content when the hook has been triggered * @param HookNotificationContentEventInterface $hook diff --git a/plugin/advanced_subscription/src/terms_and_conditions.php b/plugin/advanced_subscription/src/terms_and_conditions.php new file mode 100644 index 0000000000..0dc6014057 --- /dev/null +++ b/plugin/advanced_subscription/src/terms_and_conditions.php @@ -0,0 +1,72 @@ +get_lang('plugin_title')); + +if ( + !empty($data['sessionId']) && + !empty($data['studentUserId']) && + api_get_plugin_setting('courselegal', 'tool_enable') +) { + $courses = SessionManager::get_course_list_by_session_id($data['sessionId']); + $course = current($courses); + $data['courseId'] = $course['id']; + $termsAndConditions = $courseLegal->getData($data['courseId'], $data['sessionId']); + $termsAndConditions = $termsAndConditions['content']; + $termFiles = $courseLegal->getCurrentFile($data['courseId'], $data['sessionId']); + $data['session'] = api_get_session_info($data['sessionId']); + $data['student'] = Usermanager::get_user_info_by_id($data['studentUserId']); + $data['acceptTermsUrl'] = $plugin->getQueueUrl($data); + $data['rejectTermsUrl'] = $plugin->getTermsUrl($data, 1); + // Use Twig with String loader + $twigString = new \Twig_Environment(new \Twig_Loader_String()); + $termsContent = $twigString->render( + $termsAndConditions, + array( + 'session' => $data['session'], + 'student' => $data['student'], + ) + ); + +} else { + $termsContent = ''; + $termFiles = ''; + $data['acceptTermsUrl'] = '#'; + $data['rejectTermsUrl'] = '#'; +} + +// Assign into content +$tpl->assign('termsRejected', $data['termsRejected']); +$tpl->assign('acceptTermsUrl', $data['acceptTermsUrl']); +$tpl->assign('rejectTermsUrl', $data['rejectTermsUrl']); +$tpl->assign('session', $data['session']); +$tpl->assign('student', $data['student']); +$tpl->assign('sessionId', $data['sessionId']); +$tpl->assign('termsContent', $termsContent); +$tpl->assign('termsFiles', $termFiles); +$content = $tpl->fetch('/advanced_subscription/views/terms_and_conditions.tpl'); +$tpl->assign('content', $content); +// Display +$tpl->display_one_col_template(); diff --git a/plugin/advanced_subscription/views/terms_and_conditions.tpl b/plugin/advanced_subscription/views/terms_and_conditions.tpl new file mode 100644 index 0000000000..89d81d7180 --- /dev/null +++ b/plugin/advanced_subscription/views/terms_and_conditions.tpl @@ -0,0 +1,27 @@ +{% if termsRejected == 1 %} +
+ {{ "YouMustAcceptTermsAndConditions" | get_plugin_lang("AdvancedSubscriptionPlugin") | format(session.name) }} +
+{% endif %} + +
+ {{ termsFiles }} +
+
+ + {{ "AcceptInfinitive" | get_plugin_lang("AdvancedSubscriptionPlugin") }} + + + {{ "RejectInfinitive" | get_plugin_lang("AdvancedSubscriptionPlugin") }} + +
+ + \ No newline at end of file From 56a9876455717d13732234d09270474fb3d36d05 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Wed, 25 Feb 2015 10:05:57 -0500 Subject: [PATCH 02/11] Add web service to get a session by its id - refs BT#9465 --- main/inc/lib/sessionmanager.lib.php | 48 ++++++++++------- main/webservices/registration.soap.php | 75 +++++++++++++++++++++++++- 2 files changed, 101 insertions(+), 22 deletions(-) diff --git a/main/inc/lib/sessionmanager.lib.php b/main/inc/lib/sessionmanager.lib.php index 0fe33695af..f4a62fa864 100755 --- a/main/inc/lib/sessionmanager.lib.php +++ b/main/inc/lib/sessionmanager.lib.php @@ -5725,7 +5725,7 @@ class SessionManager $term = Database::escape_string($term); - $resultData = Database::select('id, name, date_start, date_end, duration, description', $sTable, array( + $resultData = Database::select('*', $sTable, array( 'where' => array( "name LIKE %?% " => $term, "OR description LIKE %?% " => $term, @@ -5741,6 +5741,17 @@ class SessionManager return $resultData; } + foreach ($resultData as $id => &$session) { + $session['extra'] = self::getFilteredExtraFields($id, $extraFieldsToInclude); + } + + return $resultData; + } + + public static function getFilteredExtraFields($sessionId, $extraFieldsToInclude = array()) + { + $extraData = array(); + $variables = array(); $variablePlaceHolders = array(); @@ -5769,29 +5780,26 @@ class SessionManager ) ); - // Add session fields values to session list - foreach ($resultData as $id => &$session) { - foreach ($sessionFieldValueList as $sessionFieldValue) { - // Match session field values to session - if ($sessionFieldValue['session_id'] != $id) { - continue; - } + foreach ($sessionFieldValueList as $sessionFieldValue) { + // Match session field values to session + if ($sessionFieldValue['session_id'] != $sessionId) { + continue; + } - // Check if session field value is set in session field list - if (!isset($fields[$sessionFieldValue['field_id']])) { - continue; - } + // Check if session field value is set in session field list + if (!isset($fields[$sessionFieldValue['field_id']])) { + continue; + } - $extrafieldVariable = $fields[$sessionFieldValue['field_id']]; - $extrafieldValue = $sessionFieldValue['field_value']; + $extrafieldVariable = $fields[$sessionFieldValue['field_id']]; + $extrafieldValue = $sessionFieldValue['field_value']; - $session['extra'][] = array( - 'variable' => $extrafieldVariable, - 'value' => $extrafieldValue - ); - } + $extraData[] = array( + 'variable' => $extrafieldVariable, + 'value' => $extrafieldValue + ); } - return $resultData; + return $extraData; } } diff --git a/main/webservices/registration.soap.php b/main/webservices/registration.soap.php index efb760fe13..50c3e3428f 100755 --- a/main/webservices/registration.soap.php +++ b/main/webservices/registration.soap.php @@ -5595,11 +5595,22 @@ $server->wsdl->addComplexType( '', array( 'id' => array('name' => 'id', 'type' => 'xsd:int'), + 'id_coach' => array('name' => 'id_coach', 'type' => 'xsd:int'), 'name' => array('name' => 'name', 'type' => 'xsd:string'), + 'nbr_courses' => array('name' => 'nbr_courses', 'type' => 'xsd:int'), + 'nbr_users' => array('name' => 'nbr_users', 'type' => 'xsd:int'), + 'nbr_classes' => array('name' => 'nbr_classes', 'type' => 'xsd:int'), 'date_start' => array('name' => 'date_start', 'type' => 'xsd:string'), 'date_end' => array('name' => 'date_end', 'type' => 'xsd:string'), - 'duration' => array('name' => 'duration', 'type' => 'xsd:string'), + 'nb_days_access_before_beginning' => array('name' => 'nb_days_access_before_beginning', 'type' => 'xsd:int'), + 'nb_days_access_after_end' => array('nb_days_access_after_end' => 'duration', 'type' => 'xsd:int'), + 'session_admin_id' => array('session_admin_id' => 'duration', 'type' => 'xsd:int'), + 'visibility' => array('visibility' => 'duration', 'type' => 'xsd:int'), + 'session_category_id' => array('session_category_id' => 'duration', 'type' => 'xsd:int'), + 'promotion_id' => array('promotion_id' => 'duration', 'type' => 'xsd:int'), 'description' => array('name' => 'description', 'type' => 'xsd:string'), + 'show_description' => array('name' => 'description', 'type' => 'xsd:int'), + 'duration' => array('name' => 'duration', 'type' => 'xsd:string'), 'extra' => array('name' => 'extra', 'type' => 'tns:searchedSessionExtras'), ) ); @@ -5632,7 +5643,7 @@ $server->register( /** * Web service to get a session list filtered by name, description or short description extra field -* @param string Secret key +* @param string $term Search term * @param string $extraFields Extrafields to include in request result * @return array The list */ @@ -5653,6 +5664,66 @@ function WSSearchSession($term, $extraFields) /* Search session Web Service end */ +/* Fetch session Web Service start */ + +// Input params for WSSearchSession +$server->wsdl->addComplexType( + 'FetchSession', + 'complexType', + 'struct', + 'all', + '', + array( + 'id' => array('name' => 'term', 'type' => 'xsd:int'), + 'extrafields' => array('name' => 'extrafields', 'type' => 'xsd:string') + ) +); + +//Reister WSFetchSession +$server->register( + 'WSFetchSession', + array('SearchSession' => 'tns:FetchSession'), // input parameters + array('return' => 'tns:searchedSessionList'), // output parameters + 'urn:WSRegistration', // namespace + 'urn:WSRegistration#WSFetchSession', // soapaction + 'rpc', // style + 'encoded', // use + 'This service get a session by its id. Optionally can get its extra fields values' // documentation +); + +/** +* Web service to get a session by its id. Optionally can get its extra fields values +* @param int $id The session id +* @param string $extraFields Extrafields to include in request result +* @return array The session data +*/ +function WSFetchSession($id, $extraFields) +{ + $fieldsToInclude = explode(',', $extraFields); + + foreach ($fieldsToInclude as &$field) { + if (empty($field)) { + continue; + } + + $field = trim($field); + } + + $sessionData = SessionManager::fetch($id); + + if ($sessionData === false) { + return return_error(WS_ERROR_INVALID_INPUT); + } + + if (!empty($extraFields)) { + $sessionData['extra'] = SessionManager::getFilteredExtraFields($id, $fieldsToInclude); + } + + return array($sessionData); +} + +/* Fetch session Web Service end */ + // Add more webservices by Hooks if (!empty($hook)) { $hook->setEventData(array('server' => $server)); From f9c14b9e542d217e9fde08bbf38701f933c6ab26 Mon Sep 17 00:00:00 2001 From: Daniel Barreto Date: Wed, 25 Feb 2015 10:34:27 -0500 Subject: [PATCH 03/11] Fix test ws_session_user - refs BT#9092 #hook --- .../test/ws_session_user.php | 40 ++++++++++++++++++- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/plugin/advanced_subscription/test/ws_session_user.php b/plugin/advanced_subscription/test/ws_session_user.php index 05b7aed289..80a7ba6a46 100644 --- a/plugin/advanced_subscription/test/ws_session_user.php +++ b/plugin/advanced_subscription/test/ws_session_user.php @@ -22,10 +22,46 @@ $params = array(); $params['user_id'] = intval($_REQUEST['u']); $params['session_id'] = intval($_REQUEST['s']); $params['profile_completed'] = 100; -$params['secret_key'] = 'ed639d402804ffa347b489be3e42f28058e402bf'; + +/** + * Copied code from WSHelperVerifyKey function + */ +/** + * Start WSHelperVerifyKey + */ +//error_log(print_r($params,1)); +$check_ip = false; +$ip = trim($_SERVER['REMOTE_ADDR']); +// if we are behind a reverse proxy, assume it will send the +// HTTP_X_FORWARDED_FOR header and use this IP instead +if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { + list($ip1, $ip2) = split(',', $_SERVER['HTTP_X_FORWARDED_FOR']); + $ip = trim($ip1); +} +// Check if a file that limits access from webservices exists and contains +// the restraining check +if (is_file(api_get_path(WEB_CODE_PATH) .'webservices/webservice-auth-ip.conf.php')) { + include api_get_path(WEB_CODE_PATH).'webservices/webservice-auth-ip.conf.php'; + if (!empty($ws_auth_ip)) { + $check_ip = true; + } +} + +global $_configuration; +if ($check_ip) { + $security_key = $_configuration['security_key']; +} else { + $security_key = $ip.$_configuration['security_key']; + //error_log($secret_key.'-'.$security_key); +} +/** + * End WSHelperVerifyKey + */ + +$params['secret_key'] = sha1($security_key); // Registration soap wsdl -$wsUrl = 'http://chamilo19.net/main/webservices/registration.soap.php?wsdl'; +$wsUrl = api_get_path(WEB_CODE_PATH) . 'webservices/registration.soap.php?wsdl'; $options = array( 'location' => $wsUrl, 'uri' => $wsUrl, From ab68ea06c4e9ff47e53a5514e8c0c52ba3f2a30b Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Wed, 25 Feb 2015 11:52:57 -0500 Subject: [PATCH 04/11] Add secret key param to WSSearchSession - refs BT#9418 --- main/webservices/registration.soap.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/main/webservices/registration.soap.php b/main/webservices/registration.soap.php index efb760fe13..d8f5e87c62 100755 --- a/main/webservices/registration.soap.php +++ b/main/webservices/registration.soap.php @@ -5557,7 +5557,8 @@ $server->wsdl->addComplexType( '', array( 'term' => array('name' => 'term', 'type' => 'xsd:string'), - 'extrafields' => array('name' => 'extrafields', 'type' => 'xsd:string') + 'extrafields' => array('name' => 'extrafields', 'type' => 'xsd:string'), + 'secret_key' => array('name' => 'secret_key', 'type' => 'xsd:string') ) ); @@ -5634,10 +5635,15 @@ $server->register( * Web service to get a session list filtered by name, description or short description extra field * @param string Secret key * @param string $extraFields Extrafields to include in request result +* @param string $secretKey Secret key to check * @return array The list */ -function WSSearchSession($term, $extraFields) +function WSSearchSession($term, $extraFields, $secretKey) { + if (!WSHelperVerifyKey($secretKey)) { + return return_error(WS_ERROR_SECRET_KEY); + } + $fieldsToInclude = explode(',', $extraFields); foreach ($fieldsToInclude as &$field) { From 7987014a51957b97af1923ed2a437697986e5c0e Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Wed, 25 Feb 2015 11:59:43 -0500 Subject: [PATCH 05/11] Add secret key param to WSSearchSession - refs BT#9465 --- main/webservices/registration.soap.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/main/webservices/registration.soap.php b/main/webservices/registration.soap.php index 50c3e3428f..fe31db072b 100755 --- a/main/webservices/registration.soap.php +++ b/main/webservices/registration.soap.php @@ -5675,7 +5675,8 @@ $server->wsdl->addComplexType( '', array( 'id' => array('name' => 'term', 'type' => 'xsd:int'), - 'extrafields' => array('name' => 'extrafields', 'type' => 'xsd:string') + 'extrafields' => array('name' => 'extrafields', 'type' => 'xsd:string'), + 'secret_key' => array('name' => 'secret_key', 'type' => 'xsd:string') ) ); @@ -5695,10 +5696,15 @@ $server->register( * Web service to get a session by its id. Optionally can get its extra fields values * @param int $id The session id * @param string $extraFields Extrafields to include in request result +* @param string $secretKey Secret key to check * @return array The session data */ -function WSFetchSession($id, $extraFields) +function WSFetchSession($id, $extraFields, $secretKey) { + if (!WSHelperVerifyKey($secretKey)) { + return return_error(WS_ERROR_SECRET_KEY); + } + $fieldsToInclude = explode(',', $extraFields); foreach ($fieldsToInclude as &$field) { From d60cfb873af64318ad7d9694c4c7fcdf6fc9fb27 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Wed, 25 Feb 2015 12:27:09 -0500 Subject: [PATCH 06/11] Added sessions/courses directory to have it in the initial package - refs BT#9464 --- main/upload/courses/index.html | 7 +++++++ main/upload/sessions/index.html | 7 +++++++ 2 files changed, 14 insertions(+) create mode 100644 main/upload/courses/index.html create mode 100644 main/upload/sessions/index.html diff --git a/main/upload/courses/index.html b/main/upload/courses/index.html new file mode 100644 index 0000000000..94064544c1 --- /dev/null +++ b/main/upload/courses/index.html @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/main/upload/sessions/index.html b/main/upload/sessions/index.html new file mode 100644 index 0000000000..94064544c1 --- /dev/null +++ b/main/upload/sessions/index.html @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file From 4d295f48735b9f3be54c749075ba28b227f83181 Mon Sep 17 00:00:00 2001 From: Angel Fernando Quiroz Campos Date: Wed, 25 Feb 2015 12:46:12 -0500 Subject: [PATCH 07/11] Minor - Add session/courses upload directories on install page - refs BT#9464 --- main/install/install.lib.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/main/install/install.lib.php b/main/install/install.lib.php index a58996df27..4a8cd1f434 100755 --- a/main/install/install.lib.php +++ b/main/install/install.lib.php @@ -1315,6 +1315,14 @@ function display_requirements($installType, $badUpdatePath, $updatePath = '', $u '.api_get_path(SYS_CODE_PATH).'upload/users/ '.check_writable(api_get_path(SYS_CODE_PATH).'upload/users/').' + + '.api_get_path(SYS_CODE_PATH).'upload/sessions/ + '.check_writable(api_get_path(SYS_CODE_PATH).'upload/sessions/').' + + + '.api_get_path(SYS_CODE_PATH).'upload/courses/ + '.check_writable(api_get_path(SYS_CODE_PATH).'upload/courses/').' + '.api_get_path(SYS_CODE_PATH).'default_course_document/images/ '.check_writable(api_get_path(SYS_CODE_PATH).'default_course_document/images/').' From 28e3726acc2d39c962e355e990c37c723687bb39 Mon Sep 17 00:00:00 2001 From: Daniel Barreto Date: Wed, 25 Feb 2015 12:50:59 -0500 Subject: [PATCH 08/11] Add mail render script and complete terms and conditions - refs BT#9461 --- .../ajax/advanced_subscription.ajax.php | 44 ++++---- plugin/advanced_subscription/config.php | 5 + .../src/AdvancedSubscriptionPlugin.php | 104 +++++++++++------- .../src/HookAdvancedSubscription.php | 76 ------------- .../advanced_subscription/src/render_mail.php | 25 +++++ .../src/terms_and_conditions.php | 28 +++-- .../advanced_subscription/views/css/style.css | 19 ++++ .../views/terms_and_conditions.tpl | 30 ++++- 8 files changed, 184 insertions(+), 147 deletions(-) create mode 100644 plugin/advanced_subscription/src/render_mail.php diff --git a/plugin/advanced_subscription/ajax/advanced_subscription.ajax.php b/plugin/advanced_subscription/ajax/advanced_subscription.ajax.php index c69ad8a16b..f1e33ea8c2 100644 --- a/plugin/advanced_subscription/ajax/advanced_subscription.ajax.php +++ b/plugin/advanced_subscription/ajax/advanced_subscription.ajax.php @@ -53,6 +53,11 @@ if ($verified) { $res = AdvancedSubscriptionPlugin::create()->startSubscription($data['studentUserId'], $data['sessionId'], $data); // Check if queue subscription was successful if ($res === true) { + $legalEnabled = api_get_plugin_setting('courselegal', 'tool_enable'); + if ($legalEnabled) { + // Save terms confirmation + CourseLegalPlugin::create()->saveUserLegal($data['studentUserId'], $data['courseId'], $data['sessionId']); + } // Prepare data // Get session data // Assign variables @@ -128,9 +133,8 @@ if ($verified) { // Check if exist an email to render if (isset($result['mailIds']['render'])) { // Render mail - $message = MessageManager::get_message_by_id($result['mailIds']['render']); - $message = str_replace(array('

', '
', '
'), '', $message['content']); - echo $message; + $url = $plugin->getRenderMailUrl(array('queueId' => $result['mailIds']['render'])); + Header::location($url); exit; } } @@ -153,20 +157,27 @@ if ($verified) { // Check if exist an email to render if (isset($result['mailIds']['render'])) { // Render mail - $message = MessageManager::get_message_by_id($result['mailIds']['render']); - $message = str_replace(array('

', '
', '
'), '', $message['content']); - echo $message; + $url = $plugin->getRenderMailUrl(array('queueId' => $result['mailIds']['render'])); + Header::location($url); exit; } } } } else { - if (is_string($res)) { - $result['errorMessage'] = $res; + $lastMessageId = $plugin->getLastMessageId($data['studentUserId'], $data['sessionId']); + if ($lastMessageId !== false) { + // Render mail + $url = $plugin->getRenderMailUrl(array('queueId' => $lastMessageId)); + Header::location($url); + exit; } else { - $result['errorMessage'] = 'User can not be subscribed'; + if (is_string($res)) { + $result['errorMessage'] = $res; + } else { + $result['errorMessage'] = 'User can not be subscribed'; + } + $result['pass'] = false; } - $result['pass'] = false; } break; @@ -265,9 +276,8 @@ if ($verified) { // Check if exist mail to render if (isset($result['mailIds']['render'])) { // Render mail - $message = MessageManager::get_message_by_id($result['mailIds']['render']); - $message = str_replace(array('

', '
', '
'), '', $message['content']); - echo $message; + $url = $plugin->getRenderMailUrl(array('queueId' => $result['mailIds']['render'])); + Header::location($url); exit; } } @@ -276,14 +286,6 @@ if ($verified) { } } break; - case 'terms_response': - // Check if new status is set - if (isset($data['accept_terms']) && $data['accept_terms'] == 1) { - $legalPlugin = CourseLegalPlugin::create()->saveUserLegal($data['studentId'], $data['courseId'], $data['sessionId']); - } else { - $result['errorMessage'] = 'Need terms response params'; - } - break; default: $result['errorMessage'] = 'This action does not exist!'; } diff --git a/plugin/advanced_subscription/config.php b/plugin/advanced_subscription/config.php index 9d1df8e83b..6bd8b7eef1 100644 --- a/plugin/advanced_subscription/config.php +++ b/plugin/advanced_subscription/config.php @@ -27,4 +27,9 @@ define('ADVANCED_SUBSCRIPTION_QUEUE_STATUS_BOSS_APPROVED', 2); define('ADVANCED_SUBSCRIPTION_QUEUE_STATUS_ADMIN_DISAPPROVED', 3); define('ADVANCED_SUBSCRIPTION_QUEUE_STATUS_ADMIN_APPROVED', 10); +define('ADVANCED_SUBSCRIPTION_TERMS_MODE_POPUP', 0); +define('ADVANCED_SUBSCRIPTION_TERMS_MODE_REJECT', 1); + + + require_once __DIR__ . '/../../main/inc/global.inc.php'; diff --git a/plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php b/plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php index 8797fc77ec..b3e6515714 100644 --- a/plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php +++ b/plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php @@ -322,6 +322,17 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $studentId = intval($studentId); $this->saveLastMessage($mailId, $studentId, $sessionId); } + } elseif (!empty($mailId)) { + // Update queue row, updated_at + Database::update( + Database::get_main_table(TABLE_ADVANCED_SUBSCRIPTION_QUEUE), + array( + 'updated_at' => api_get_utc_datetime(), + ), + array( + 'user_id = ? AND session_id = ?' => array($studentId, $sessionId) + ) + ); } return $mailId; } @@ -431,7 +442,8 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $data['student']['user_id'], $this->get_lang('MailStudentRequest'), $template->fetch('/advanced_subscription/views/student_notice_student.tpl'), - $data['sessionId'] + $data['sessionId'], + true ); // Mail to superior $mailIds[] = $this->sendMailMessage( @@ -439,8 +451,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $data['superior']['user_id'], $this->get_lang('MailStudentRequest'), $template->fetch('/advanced_subscription/views/student_notice_superior.tpl'), - $data['sessionId'], - true + $data['sessionId'] ); break; case ADVANCED_SUBSCRIPTION_ACTION_SUPERIOR_APPROVE: @@ -450,7 +461,8 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $data['student']['user_id'], $this->get_lang('MailBossAccept'), $template->fetch('/advanced_subscription/views/superior_accepted_notice_student.tpl'), - $data['sessionId'] + $data['sessionId'], + true ); // Mail to superior $mailIds['render'] = $this->sendMailMessage( @@ -468,8 +480,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $adminId, $this->get_lang('MailBossAccept'), $template->fetch('/advanced_subscription/views/superior_accepted_notice_admin.tpl'), - $data['sessionId'], - true + $data['sessionId'] ); } break; @@ -499,7 +510,8 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $data['student']['user_id'], $this->get_lang('MailStudentRequestSelect'), $template->fetch('/advanced_subscription/views/student_notice_student.tpl'), - $data['sessionId'] + $data['sessionId'], + true ); // Mail to superior $mailIds['render'] = $this->sendMailMessage( @@ -507,8 +519,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $data['superior']['user_id'], $this->get_lang('MailStudentRequestSelect'), $template->fetch('/advanced_subscription/views/student_notice_superior.tpl'), - $data['sessionId'], - true + $data['sessionId'] ); break; case ADVANCED_SUBSCRIPTION_ACTION_ADMIN_APPROVE: @@ -518,7 +529,8 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $data['student']['user_id'], $this->get_lang('MailAdminAccept'), $template->fetch('/advanced_subscription/views/admin_accepted_notice_student.tpl'), - $data['sessionId'] + $data['sessionId'], + true ); // Mail to superior $mailIds[] = $this->sendMailMessage( @@ -536,8 +548,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $adminId, $this->get_lang('MailAdminAccept'), $template->fetch('/advanced_subscription/views/admin_accepted_notice_admin.tpl'), - $data['sessionId'], - true + $data['sessionId'] ); break; case ADVANCED_SUBSCRIPTION_ACTION_ADMIN_DISAPPROVE: @@ -576,7 +587,8 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $data['student']['user_id'], $this->get_lang('MailStudentRequestNoBoss'), $template->fetch('/advanced_subscription/views/student_no_superior_notice_student.tpl'), - $data['sessionId'] + $data['sessionId'], + true ); // Mail to admin foreach ($data['admins'] as $adminId => $admin) { @@ -586,8 +598,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $adminId, $this->get_lang('MailStudentRequestNoBoss'), $template->fetch('/advanced_subscription/views/student_no_superior_notice_admin.tpl'), - $data['sessionId'], - true + $data['sessionId'] ); } break; @@ -607,8 +618,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $data['superior']['user_id'], $this->get_lang('MailRemindSuperior'), $template->fetch('/advanced_subscription/views/reminder_notice_superior.tpl'), - $data['sessionId'], - true + $data['sessionId'] ); break; case ADVANCED_SUBSCRIPTION_ACTION_REMINDER_SUPERIOR_MAX: @@ -617,8 +627,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $data['superior']['user_id'], $this->get_lang('MailRemindSuperior'), $template->fetch('/advanced_subscription/views/reminder_notice_superior_max.tpl'), - $data['sessionId'], - true + $data['sessionId'] ); break; case ADVANCED_SUBSCRIPTION_ACTION_REMINDER_ADMIN: @@ -630,8 +639,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface $adminId, $this->get_lang('MailRemindAdmin'), $template->fetch('/advanced_subscription/views/reminder_notice_admin.tpl'), - $data['sessionId'], - true + $data['sessionId'] ); } break; @@ -1045,7 +1053,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface * @param int $mode * @return string */ - public function getTermsUrl($params, $mode = 0) + public function getTermsUrl($params, $mode = ADVANCED_SUBSCRIPTION_TERMS_MODE_POPUP) { $url = api_get_path(WEB_PLUGIN_PATH) . 'advanced_subscription/src/terms_and_conditions.php?' . 'a=' . Security::remove_XSS($params['action']) . '&' . @@ -1059,32 +1067,52 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface 'r=' . intval($mode) . '&' . 'v=' . $this->generateHash($params); // Launch popup - if ($mode == 0) { - $url = 'javascript:void(window.open(\'' . $url .'\',\'Terms\', \'100\', \'100\' );)'; + if ($mode == ADVANCED_SUBSCRIPTION_TERMS_MODE_POPUP) { + $url = 'javascript:void(window.open(\'' . $url .'\',\'AdvancedSubscriptionTerms\', \'toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable=yes,width=700px,height=600px\', \'100\' ))'; } return $url; } /** - * Return the url to get subscription terms + * Return the url to get mail rendered * @param array $params - * @param int $acceptTerms * @return string */ - public function getTermsResponseUrl($params, $acceptTerms = 0) + public function getRenderMailUrl($params) { - $url = api_get_path(WEB_PLUGIN_PATH) . 'advanced_subscription/ajax/advanced_subscription.ajax.php?' . - 'a=' . Security::remove_XSS($params['action']) . '&' . - 's=' . intval($params['sessionId']) . '&' . - 'current_user_id=' . 0 . '&' . - 'e=' . 0 . '&' . - 'u=' . intval($params['studentUserId']) . '&' . - 'q=' . 0 . '&' . - 'is_connected=' . 1 . '&' . - 'profile_completed=' . intval($params['profile_completed']) . '&' . - 'accept_terms=' . intval($acceptTerms) . '&' . - 'c=' . intval($params['courseId']) . '&' . + $url = api_get_path(WEB_PLUGIN_PATH) . 'advanced_subscription/src/render_mail.php?' . + 'q=' . $params['queueId'] . '&' . 'v=' . $this->generateHash($params); return $url; } + + /** + * Return the last message id from queue row + * @param int $studentUserId + * @param int $sessionId + * @return int|bool + */ + public function getLastMessageId($studentUserId, $sessionId) + { + $studentUserId = intval($studentUserId); + $sessionId = intval($sessionId); + if (!empty($sessionId) && !empty($studentUserId)) { + $row = Database::select( + 'last_message_id', + Database::get_main_table(TABLE_ADVANCED_SUBSCRIPTION_QUEUE), + array( + 'where' => array( + 'user_id = ? AND session_id = ?' => array($studentUserId, $sessionId), + ) + ) + ); + + if (count($row) > 0) { + + return $row[0]['last_message_id']; + } + } + + return false; + } } diff --git a/plugin/advanced_subscription/src/HookAdvancedSubscription.php b/plugin/advanced_subscription/src/HookAdvancedSubscription.php index 7ed8dbec7a..4435416b5e 100644 --- a/plugin/advanced_subscription/src/HookAdvancedSubscription.php +++ b/plugin/advanced_subscription/src/HookAdvancedSubscription.php @@ -621,82 +621,6 @@ class HookAdvancedSubscription extends HookObserver implements return $sessionList; } - /** - * Get a list of sessions (id, coach_id, name, courses_num, users_num, classes_num, - * date_start, date_end, access_days_before_num, session_admin_id, visibility, - * session_category_id, promotion_id, - * validated_user_num, waiting_user_num, - * extra, course) the validated_usernum and waiting_user_num are - * used when have the plugin for advance incsription enables. - * The extra data (field_name, field_value) - * The course data (course_id, course_code, course_title, - * coach_username, coach_firstname, coach_lastname) - * @param array $params List of parameters (id, category_name, access_url_id, secret_key) - * @return array|soap_fault Sessions list (id=>[title=>'title',url='http://...',date_start=>'...',date_end=>'']) - */ - public static function WSTermsAndConditions($params) - { - global $debug; - - if ($debug) { - error_log('WSListSessionsDetailsByCategory'); - error_log('Params ' . print_r($params, 1)); - } - $secretKey = $params['secret_key']; - - // Check if secret key is valid - if (!WSHelperVerifyKey($secretKey)) { - return return_error(WS_ERROR_SECRET_KEY); - } - - // Get Data - $data = array(); - $data['sessionId'] = $params['session_id']; - $data['studentUserId'] = $params['user_id']; - $data['profile_completed'] = $params['profile_completed']; - $legalEnabled = api_get_plugin_setting('courselegal', 'tool_enable'); - $legalPlugin = CourseLegalPlugin::create(); - if ( - UserManager::is_user_id_valid($data['studentUserId']) && - SessionManager::isValidId($data['sessionId']) - ) { - $courses = SessionManager::get_course_list_by_session_id($data['sessionId']); - $course = current($courses); - $data['courseId'] = $course['id']; - $data['session'] = api_get_session_info($data['sessionId']); - $data['student'] = Usermanager::get_user_info_by_id($data['studentUserId']); - if ($legalEnabled) { - // Get Terms content - $termsContent = $legalPlugin->getData($data['courseId'], $data['sessionId']); - $termsContent = $termsContent['content']; - $termsFiles = $legalPlugin->getCurrentFile($data['courseId'], $data['sessionId']); - $twigString = new \Twig_Environment(new \Twig_Loader_String()); - $termsContent = $twigString->render( - $termsContent, - array( - 'session' => $data['session'], - 'student' => $data['student'], - ) - ); - } else { - $termsContent = ''; - $termsFiles = ''; - } - - // Set output data - $data['action'] = 'terms_response'; - $data['terms_content'] = $termsContent; - $data['terms_files'] = $termsFiles; - $data['accept_terms_url'] = self::$plugin->getTermsResponseUrl($data, 1); - $data['reject_terms_url'] = self::$plugin->getTermsResponseUrl($data, 0); - $data['reject_message'] = self::$plugin->get_lang('YouMustAcceptTermsAndConditions'); - } else { - $data = return_error(WS_ERROR_INVALID_INPUT); - } - - return $data; - } - /** * Return notification content when the hook has been triggered * @param HookNotificationContentEventInterface $hook diff --git a/plugin/advanced_subscription/src/render_mail.php b/plugin/advanced_subscription/src/render_mail.php new file mode 100644 index 0000000000..c0974d1700 --- /dev/null +++ b/plugin/advanced_subscription/src/render_mail.php @@ -0,0 +1,25 @@ +checkHash($data, $hash); +if ($verified) { + // Render mail + $message = MessageManager::get_message_by_id($data['queueId']); + $message = str_replace(array('

', '
', '
'), '', $message['content']); + echo $message; +} \ No newline at end of file diff --git a/plugin/advanced_subscription/src/terms_and_conditions.php b/plugin/advanced_subscription/src/terms_and_conditions.php index 0dc6014057..78e0adf9f1 100644 --- a/plugin/advanced_subscription/src/terms_and_conditions.php +++ b/plugin/advanced_subscription/src/terms_and_conditions.php @@ -10,7 +10,6 @@ require_once __DIR__ . '/../config.php'; // start plugin $plugin = AdvancedSubscriptionPlugin::create(); -$courseLegal = CourseLegalPlugin::create(); // Session ID $data['action'] = Security::remove_XSS($_REQUEST['a']); $data['sessionId'] = isset($_REQUEST['s']) ? intval($_REQUEST['s']) : 0; @@ -30,16 +29,31 @@ if ( !empty($data['studentUserId']) && api_get_plugin_setting('courselegal', 'tool_enable') ) { + $lastMessageId = $plugin->getLastMessageId($data['studentUserId'], $data['sessionId']); + if ($lastMessageId !== false) { + // Render mail + $url = $plugin->getRenderMailUrl(array('queueId' => $lastMessageId)); + Header::location($url); + exit; + } $courses = SessionManager::get_course_list_by_session_id($data['sessionId']); $course = current($courses); $data['courseId'] = $course['id']; - $termsAndConditions = $courseLegal->getData($data['courseId'], $data['sessionId']); - $termsAndConditions = $termsAndConditions['content']; - $termFiles = $courseLegal->getCurrentFile($data['courseId'], $data['sessionId']); + $legalEnabled = api_get_plugin_setting('courselegal', 'tool_enable'); + if ($legalEnabled) { + $courseLegal = CourseLegalPlugin::create(); + $termsAndConditions = $courseLegal->getData($data['courseId'], $data['sessionId']); + $termsAndConditions = $termsAndConditions['content']; + $termFiles = $courseLegal->getCurrentFile($data['courseId'], $data['sessionId']); + } else { + $termsAndConditions = $plugin->get('terms_and_conditions'); + $termFiles = ''; + } + $data['session'] = api_get_session_info($data['sessionId']); $data['student'] = Usermanager::get_user_info_by_id($data['studentUserId']); $data['acceptTermsUrl'] = $plugin->getQueueUrl($data); - $data['rejectTermsUrl'] = $plugin->getTermsUrl($data, 1); + $data['rejectTermsUrl'] = $plugin->getTermsUrl($data, ADVANCED_SUBSCRIPTION_TERMS_MODE_REJECT); // Use Twig with String loader $twigString = new \Twig_Environment(new \Twig_Loader_String()); $termsContent = $twigString->render( @@ -67,6 +81,4 @@ $tpl->assign('sessionId', $data['sessionId']); $tpl->assign('termsContent', $termsContent); $tpl->assign('termsFiles', $termFiles); $content = $tpl->fetch('/advanced_subscription/views/terms_and_conditions.tpl'); -$tpl->assign('content', $content); -// Display -$tpl->display_one_col_template(); +echo $content; diff --git a/plugin/advanced_subscription/views/css/style.css b/plugin/advanced_subscription/views/css/style.css index 108ac52445..1582fc853d 100644 --- a/plugin/advanced_subscription/views/css/style.css +++ b/plugin/advanced_subscription/views/css/style.css @@ -60,4 +60,23 @@ #iframeAdvsub { width: 100%; height: 100%; +} + +.legal-terms-popup{ + margin-top: 5%; + margin-left: 5%; + margin-right: 5%; +} + +.legal-terms{ + width: 90%; + height: 50%; +} + +.legal-terms-buttons { + text-align: right; +} + +.legal-terms-title { + text-align: center; } \ No newline at end of file diff --git a/plugin/advanced_subscription/views/terms_and_conditions.tpl b/plugin/advanced_subscription/views/terms_and_conditions.tpl index 89d81d7180..20a4ba414c 100644 --- a/plugin/advanced_subscription/views/terms_and_conditions.tpl +++ b/plugin/advanced_subscription/views/terms_and_conditions.tpl @@ -1,15 +1,37 @@ +{# start copy from head.tpl #} + + + + +{{ prefetch }} +{{ favico }} +{{ browser_specific_head }} + + + +{# Use the latest engine in ie8/ie9 or use google chrome engine if available #} +{# Improve usability in portal devices #} + +{{ title_string }} +{{ css_file_to_string }} +{{ css_style_print }} +{{ js_file_to_string }} +{# end copy from head.tpl #} + {% if termsRejected == 1 %} -
+ {% endif %} -