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 %} -