Merge branch 'BT9461' of https://github.com/danbarretodev/chamilo-lms into danbarretodev-BT9461

1.10.x
Yannick Warnier 11 years ago
commit 2df08d064e
  1. 30
      plugin/advanced_subscription/ajax/advanced_subscription.ajax.php
  2. 5
      plugin/advanced_subscription/config.php
  3. 2
      plugin/advanced_subscription/lang/english.php
  4. 2
      plugin/advanced_subscription/lang/spanish.php
  5. 122
      plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php
  6. 4
      plugin/advanced_subscription/src/HookAdvancedSubscription.php
  7. 25
      plugin/advanced_subscription/src/render_mail.php
  8. 84
      plugin/advanced_subscription/src/terms_and_conditions.php
  9. 40
      plugin/advanced_subscription/test/ws_session_user.php
  10. 19
      plugin/advanced_subscription/views/css/style.css
  11. 49
      plugin/advanced_subscription/views/terms_and_conditions.tpl

@ -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
@ -51,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
@ -126,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('<br /><hr>', '<br />', '<br/>'), '', $message['content']);
echo $message;
$url = $plugin->getRenderMailUrl(array('queueId' => $result['mailIds']['render']));
Header::location($url);
exit;
}
}
@ -151,13 +157,19 @@ 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('<br /><hr>', '<br />', '<br/>'), '', $message['content']);
echo $message;
$url = $plugin->getRenderMailUrl(array('queueId' => $result['mailIds']['render']));
Header::location($url);
exit;
}
}
}
} else {
$lastMessageId = $plugin->getLastMessageId($data['studentUserId'], $data['sessionId']);
if ($lastMessageId !== false) {
// Render mail
$url = $plugin->getRenderMailUrl(array('queueId' => $lastMessageId));
Header::location($url);
exit;
} else {
if (is_string($res)) {
$result['errorMessage'] = $res;
@ -166,6 +178,7 @@ if ($verified) {
}
$result['pass'] = false;
}
}
break;
case 'confirm':
@ -263,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('<br /><hr>', '<br />', '<br/>'), '', $message['content']);
echo $message;
$url = $plugin->getRenderMailUrl(array('queueId' => $result['mailIds']['render']));
Header::location($url);
exit;
}
}

@ -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';

@ -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 <strong>%s</strong> for your collaborators. This course is starting at <strong>%s</strong>. Course details: <strong>%s</strong>.';
$strings['MailContentReminderMaxSuperiorSecond'] = 'This course have limited vacancies and has received a high inscription request rate, So we recommend all areas to accept at most <strong>%s</strong> candidates. We invite you to accept or reject inscription request, clicking corresponding button for each collaborator.';
$strings['YouMustAcceptTermsAndConditions'] = 'To subscribe to course <strong>%s</strong>, you must accept this terms and conditions.';

@ -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 <strong>%s</strong> de parte de sus colaboradores. El curso se iniciará el <strong>%s</strong>. Detalles del curso: <strong>%s</strong>.';
$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 <strong>%s</strong> 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 <strong>%s</strong>, debe aceptar estos términos y condiciones.';

@ -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);
@ -321,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;
}
@ -430,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(
@ -438,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:
@ -449,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(
@ -467,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;
@ -498,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(
@ -506,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:
@ -517,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(
@ -535,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:
@ -575,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) {
@ -585,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;
@ -606,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:
@ -616,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:
@ -629,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;
@ -883,7 +892,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 +1046,73 @@ 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 = 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']) . '&' .
'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 == 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 mail rendered
* @param array $params
* @return string
*/
public function getRenderMailUrl($params)
{
$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;
}
}

@ -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.
}

@ -0,0 +1,25 @@
<?php
/* For license terms, see /license.txt */
/**
* Render an email from data
* @package chamilo.plugin.advanced_subscription
*/
/**
* Init
*/
require_once __DIR__ . '/../config.php';
$plugin = AdvancedSubscriptionPlugin::create();
// Get validation hash
$hash = Security::remove_XSS($_REQUEST['v']);
// Get data from request (GET or POST)
$data['queueId'] = intval($_REQUEST['q']);
// Check if data is valid or is for start subscription
$verified = $plugin->checkHash($data, $hash);
if ($verified) {
// Render mail
$message = MessageManager::get_message_by_id($data['queueId']);
$message = str_replace(array('<br /><hr>', '<br />', '<br/>'), '', $message['content']);
echo $message;
}

@ -0,0 +1,84 @@
<?php
/* For license terms, see /license.txt */
/**
* Script to show sessions terms and conditions
* @package chamilo.plugin.advanced_subscription
*/
/**
* Init
*/
require_once __DIR__ . '/../config.php';
// start plugin
$plugin = AdvancedSubscriptionPlugin::create();
// Session ID
$data['action'] = Security::remove_XSS($_REQUEST['a']);
$data['sessionId'] = isset($_REQUEST['s']) ? intval($_REQUEST['s']) : 0;
$data['currentUserId'] = isset($_REQUEST['current_user_id']) ? intval($_REQUEST['current_user_id']) : 0;
$data['studentUserId'] = isset($_REQUEST['u']) ? intval($_REQUEST['u']) : 0;
$data['queueId'] = isset($_REQUEST['q']) ? intval($_REQUEST['q']) : 0;
$data['newStatus'] = isset($_REQUEST['e']) ? intval($_REQUEST['e']) : 0;
$data['is_connected'] = true;
$data['profile_completed'] = isset($_REQUEST['profile_completed']) ? floatval($_REQUEST['profile_completed']) : 0;
$data['termsRejected'] = isset($_REQUEST['r']) ? intval($_REQUEST['r']) : 0;
// Init template
$tpl = new Template($plugin->get_lang('plugin_title'));
if (
!empty($data['sessionId']) &&
!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'];
$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, ADVANCED_SUBSCRIPTION_TERMS_MODE_REJECT);
// 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');
echo $content;

@ -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,

@ -61,3 +61,22 @@
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;
}

@ -0,0 +1,49 @@
{# start copy from head.tpl #}
<meta charset="{{ system_charset }}" />
<link href="http://www.chamilo.org/documentation.php" rel="help" />
<link href="http://www.chamilo.org/team.php" rel="author" />
<link href="http://www.chamilo.org" rel="copyright" />
{{ prefetch }}
{{ favico }}
{{ browser_specific_head }}
<link rel="apple-touch-icon" href="{{ _p.web }}apple-touch-icon.png" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="Generator" content="{{ _s.software_name }} {{ _s.system_version|slice(0,1) }}" />
{# Use the latest engine in ie8/ie9 or use google chrome engine if available #}
{# Improve usability in portal devices #}
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>{{ title_string }}</title>
{{ css_file_to_string }}
{{ css_style_print }}
{{ js_file_to_string }}
{# end copy from head.tpl #}
<h2 class="legal-terms-title legal-terms-popup">
{{ "TermsAndConditions" | get_lang }}
</h2>
{% if termsRejected == 1 %}
<div class="error-message legal-terms-popup">
{{ "YouMustAcceptTermsAndConditions" | get_plugin_lang("AdvancedSubscriptionPlugin") | format(session.name) }}
</div>
{% endif %}
<div class="legal-terms legal-terms-popup">
{{ termsContent }}
</div>
<div class="legal-terms-files legal-terms-popup">
{{ termsFiles }}
</div>
<div class="legal-terms-buttons legal-terms-popup">
<a
class="btn btn-success btn-advanced-subscription btn-accept"
href="{{ acceptTermsUrl }}"
>
{{ "AcceptInfinitive" | get_plugin_lang("AdvancedSubscriptionPlugin") }}
</a>
<a
class="btn btn-danger btn-advanced-subscription btn-reject"
href="{{ rejectTermsUrl }}"
>
{{ "RejectInfinitive" | get_plugin_lang("AdvancedSubscriptionPlugin") }}
</a>
</div>
<link href="{{ _p.web_plugin }}advanced_subscription/views/css/style.css" rel="stylesheet" type="text/css">
Loading…
Cancel
Save