From 484a6fed2351e12ae252005b81fc12151699d331 Mon Sep 17 00:00:00 2001 From: Daniel Barreto Date: Wed, 14 Jan 2015 17:12:01 -0500 Subject: [PATCH] Update templates, update send mail method - refs BT#9092 --- plugin/advancedsubscription/config.php | 10 +- .../src/AdvancedSubscriptionPlugin.class.php | 246 +++++++++--------- plugin/advancedsubscription/src/index.php | 22 +- plugin/advancedsubscription/test.php | 10 +- ...b_approval_admin_accepted_notice_admin.tpl | 85 ++++++ ...approval_admin_accepted_notice_student.tpl | 85 ++++++ ...pproval_admin_accepted_notice_superior.tpl | 85 ++++++ ...b_approval_admin_rejected_notice_admin.tpl | 85 ++++++ ...approval_admin_rejected_notice_student.tpl | 85 ++++++ ...pproval_admin_rejected_notice_superior.tpl | 85 ++++++ .../advsub_request_approve_confirmed.tpl | 85 ++++++ .../advsub_request_approved_info_admin.tpl | 85 ++++++ .../advsub_request_approved_reminder.tpl | 85 ++++++ .../advsub_request_disapprove_confirmed.tpl | 85 ++++++ .../views/advsub_request_received.tpl | 86 ++++++ .../advsub_request_received_reminder.tpl | 86 ++++++ .../views/advsub_request_superior.tpl | 94 +++++++ .../advsub_request_superior_approved.tpl | 85 ++++++ .../advsub_request_superior_disapproved.tpl | 85 ++++++ .../advsub_request_superior_reminder.tpl | 100 +++++++ .../advsub_request_superior_reminder_max.tpl | 101 +++++++ .../views/img/aprobar.png | Bin 0 -> 1482 bytes .../advancedsubscription/views/img/avatar.png | Bin 0 -> 4710 bytes .../views/img/desaprobar.png | Bin 0 -> 1901 bytes .../advancedsubscription/views/img/footer.png | Bin 0 -> 270 bytes .../advancedsubscription/views/img/header.png | Bin 0 -> 267 bytes .../advancedsubscription/views/img/line.png | Bin 0 -> 283 bytes .../views/img/logo-minedu.png | Bin 0 -> 8409 bytes 28 files changed, 1634 insertions(+), 141 deletions(-) create mode 100644 plugin/advancedsubscription/views/advsub_request_superior_reminder_max.tpl create mode 100644 plugin/advancedsubscription/views/img/aprobar.png create mode 100644 plugin/advancedsubscription/views/img/avatar.png create mode 100644 plugin/advancedsubscription/views/img/desaprobar.png create mode 100644 plugin/advancedsubscription/views/img/footer.png create mode 100644 plugin/advancedsubscription/views/img/header.png create mode 100644 plugin/advancedsubscription/views/img/line.png create mode 100644 plugin/advancedsubscription/views/img/logo-minedu.png diff --git a/plugin/advancedsubscription/config.php b/plugin/advancedsubscription/config.php index 924b1b1208..a9a298ec41 100644 --- a/plugin/advancedsubscription/config.php +++ b/plugin/advancedsubscription/config.php @@ -18,14 +18,22 @@ define('ADV_SUB_ACTION_SUPERIOR_SELECT', 3); define('ADV_SUB_ACTION_ADMIN_APPROVE', 4); define('ADV_SUB_ACTION_ADMIN_DISAPPROVE', 5); - define('ADV_SUB_QUEUE_STATUS_START', 0); define('ADV_SUB_QUEUE_STATUS_BOSS_DISAPPROVED', 1); define('ADV_SUB_QUEUE_STATUS_BOSS_APPROVED', 2); define('ADV_SUB_QUEUE_STATUS_ADMIN_DISAPPROVED', 3); define('ADV_SUB_QUEUE_STATUS_ADMIN_APPROVED', 10); +define('ADV_SUB_MAIL_TYPE_A', 1); +define('ADV_SUB_MAIL_TYPE_B', 2); +define('ADV_SUB_MAIL_TYPE_C', 3); + +define('ADV_SUB_MAIL_STATUS_MAIL_SENT', 1); +define('ADV_SUB_MAIL_STATUS_MAIL_ANSWERED', 2); +define('ADV_SUB_MAIL_STATUS_MAIL_EXPIRED', 3); + require_once __DIR__ . '/../../main/inc/global.inc.php'; +require_once api_get_path(LIBRARY_PATH) . 'plugin.class.php'; require_once __DIR__ . '/resources/phpcrypt/phpCrypt.php'; require_once api_get_path(LIBRARY_PATH) . 'plugin.class.php'; require_once api_get_path(PLUGIN_PATH) . 'advancedsubscription/src/AdvancedSubscriptionPlugin.class.php'; diff --git a/plugin/advancedsubscription/src/AdvancedSubscriptionPlugin.class.php b/plugin/advancedsubscription/src/AdvancedSubscriptionPlugin.class.php index 78d5ac5e2c..e247bf7ba8 100644 --- a/plugin/advancedsubscription/src/AdvancedSubscriptionPlugin.class.php +++ b/plugin/advancedsubscription/src/AdvancedSubscriptionPlugin.class.php @@ -81,6 +81,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface "session_id int UNSIGNED NOT NULL, " . "user_id int UNSIGNED NOT NULL, " . "status int UNSIGNED NOT NULL, " . + "last_message_id UNSIGNED NOT NULL, " . "created_at datetime NOT NULL, " . "updated_at datetime NULL, " . "PRIMARY KEY PK_tour_log (id)); "; @@ -223,8 +224,65 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface } /** + * Register a message type + * @param $description + * @return bool|int + */ + public function addMessageType($description) + { + $pAdvSubMessageTable = Database::get_main_table(TABLE_ADV_SUB_MAIL_TYPE); + $attributes = array( + 'description' => $description, + ); + + $id = Database::insert($pAdvSubMessageTable, $attributes); + + return $id; + } + + /** + * Register a message status + * @param $description + * @return bool|int + */ + public function addMessageStatus($description) + { + $pAdvSubMessageTable = Database::get_main_table(TABLE_ADV_SUB_MAIL_STATUS); + $attributes = array( + 'description' => $description, + ); + + $id = Database::insert($pAdvSubMessageTable, $attributes); + + return $id; + } + + /** + * Register message with type and status + * @param $mailId + * @param $mailTypeId + * @param $mailStatusId + * @return bool|int + */ + public function addMessage($mailId, $mailTypeId, $mailStatusId) + { + $pAdvSubMessageTable = Database::get_main_table(TABLE_ADV_SUB_MAIL); + $attributes = array( + 'message_id' => $mailId, + 'mail_type_id' => $mailTypeId, + 'mail_status_id' => $mailStatusId, + ); + + $id = Database::insert($pAdvSubMessageTable, $attributes); + + return $id; + } + + /** + * Check for requirements and register user into queue * @param $userId * @param $sessionId + * @param $params * @return bool|string */ public function startSubscription($userId, $sessionId, $params) @@ -248,6 +306,31 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface return $result; } + public function sendMailMessage($studentId, $subject, $content, $type = '') + { + global $_configuration; // @TODO: Add $_configuration['no_reply_user_id'] to configuration file + + $mailId = MessageManager::send_message( + $studentId, + $subject, + $content, + null, + null, + null, + null, + null, + null, + $_configuration['no_reply_user_id'] + ); + + if (!empty($mailId)) { + // Save as sent message + $mailId = $this->addMessage($mailId, $type, ADV_SUB_MAIL_STATUS_MAIL_SENT); + } + + return $mailId; + } + /** * Check if session is open for subscription * @param $sessionId @@ -294,7 +377,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface ); } if (isset($where)) { - $res = Database::update( + $res = (bool) Database::update( Database::get_main_table(TABLE_ADV_SUB_QUEUE), array( 'unsigned' => $newStatus, @@ -309,13 +392,14 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface } /** - * @param $userId - * @param $relationType + * Render and send mail by defined advanced subscription action + * @param $data + * @param $actionType + * @return array */ public function sendMail($data, $actionType) { - global $_configuration; // @TODO: Add $_configuration['no_reply_user_id'] to configuration file - $tpl= new Template($this->get_lang('plugin_title')); + $tpl = new Template($this->get_lang('plugin_title')); $tpl->assign('data', $data); $tplParams = array('user', 'student', 'students','superior', 'admin', 'session', 'signature', '_p', ); foreach ($tplParams as $tplParam) { @@ -326,214 +410,126 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface switch ($actionType) { case ADV_SUB_ACTION_STUDENT_REQUEST: // Mail to student - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['student']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_request_received.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_A ); // Mail to superior - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['superior']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_request_superior.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_B ); break; case ADV_SUB_ACTION_SUPERIOR_APPROVE: // Mail to student - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['student']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_request_superior_approved.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_A ); // Mail to superior - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['superior']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_approve_confirmed.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_B ); // Mail to admin - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['admin']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_request_approved_info_admin.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_C ); break; case ADV_SUB_ACTION_SUPERIOR_DISAPPROVE: // Mail to student - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['student']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_request_superior_disapproved.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_A ); // Mail to superior - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['superior']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_disapprove_confirmed.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_B ); break; case ADV_SUB_ACTION_SUPERIOR_SELECT: // Mail to student - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['student']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_request_received.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_A ); // Mail to superior - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['superior']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_request_superior.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_B ); break; case ADV_SUB_ACTION_ADMIN_APPROVE: // Mail to student - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['student']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_approval_admin_accepted_notice_student.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_A ); // Mail to superior - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['superior']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_approval_admin_accepted_notice_superior.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_B ); // Mail to admin - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['admin']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_approval_admin_accepted_notice_admin.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_C ); break; case ADV_SUB_ACTION_ADMIN_DISAPPROVE: // Mail to student - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['student']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_approval_admin_rejected_notice_student.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_A ); // Mail to superior - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['superior']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_approval_admin_rejected_notice_superior.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_B ); // Mail to admin - MessageManager::send_message( + $mailIds[] = $this->sendMailMessage( $data['admin']['id'], $this->get_lang('MailStudentRequest'), $tpl->fetch('/advancedsubscription/views/advsub_approval_admin_rejected_notice_admin.tpl'), - null, - null, - null, - null, - null, - null, - $_configuration['no_reply_user_id'] + ADV_SUB_MAIL_TYPE_C ); break; default: break; } + + return $mailIds; } /** diff --git a/plugin/advancedsubscription/src/index.php b/plugin/advancedsubscription/src/index.php index 6180e3be48..69bd7b366b 100644 --- a/plugin/advancedsubscription/src/index.php +++ b/plugin/advancedsubscription/src/index.php @@ -36,30 +36,28 @@ if (isset($data)) { } elseif ($data['action']) { switch($data['action']) { case ADV_SUB_ACTION_STUDENT_REQUEST: - $plugin->startSubscription($data['user']['id'], $data['session']['id'], $data); - $plugin->sendMail($data, $data['action']); + $res = $plugin->startSubscription($data['user']['id'], $data['session']['id'], $data); break; case ADV_SUB_ACTION_SUPERIOR_APPROVE: - $plugin->updateQueueStatus($data, ADV_SUB_QUEUE_STATUS_BOSS_APPROVED); - $plugin->sendMail($data, $data['action']); + $res = $plugin->updateQueueStatus($data, ADV_SUB_QUEUE_STATUS_BOSS_APPROVED); break; case ADV_SUB_ACTION_SUPERIOR_DISAPPROVE: - $plugin->updateQueueStatus($data, ADV_SUB_QUEUE_STATUS_BOSS_DISAPPROVED); - $plugin->sendMail($data, $data['action']); + $res = $plugin->updateQueueStatus($data, ADV_SUB_QUEUE_STATUS_BOSS_DISAPPROVED); break; case ADV_SUB_ACTION_SUPERIOR_SELECT: - $plugin->updateQueueStatus($data, ADV_SUB_QUEUE_STATUS_BOSS_APPROVED); - $plugin->sendMail($data, $data['action']); + $res = $plugin->updateQueueStatus($data, ADV_SUB_QUEUE_STATUS_BOSS_APPROVED); break; case ADV_SUB_ACTION_ADMIN_APPROVE: - $plugin->updateQueueStatus($data, ADV_SUB_QUEUE_STATUS_ADMIN_APPROVED); - $plugin->sendMail($data, $data['action']); + $res = $plugin->updateQueueStatus($data, ADV_SUB_QUEUE_STATUS_ADMIN_APPROVED); break; case ADV_SUB_ACTION_ADMIN_DISAPPROVE: - $plugin->updateQueueStatus($data, ADV_SUB_QUEUE_STATUS_BOSS_DISAPPROVED); - $plugin->sendMail($data, $data['action']); + $res = $plugin->updateQueueStatus($data, ADV_SUB_QUEUE_STATUS_BOSS_DISAPPROVED); break; } + + if ($res === true) { + $plugin->sendMail($data, $data['action']); + } } } } diff --git a/plugin/advancedsubscription/test.php b/plugin/advancedsubscription/test.php index 087ffeb0c7..b5a8b6ab44 100644 --- a/plugin/advancedsubscription/test.php +++ b/plugin/advancedsubscription/test.php @@ -3,6 +3,7 @@ require_once '/var/www/chamilo-lms/main/inc/global.inc.php'; require_once __DIR__ . '/config.php'; +/* MessageManager::send_message( 18, get_lang('MailStudentRequest'), @@ -15,9 +16,12 @@ MessageManager::send_message( null, 17 ); +*/ + //api_mail_html('RECIPIENT', '9leinad0@gmail.com', 'TEST!', 'ESTOY TESTEANDO D:!', 'Dan', 'dbarreto@kabuto.com'); -/* + $advSub = AdvancedSubscriptionPlugin::create(); -$advSub->install(); -*/ \ No newline at end of file +$tpl = new Template('Hi'); +$body = $tpl->fetch('/advancedsubscription/views/advsub_request_received.tpl'); +$advSub->sendMailMessage(18, 'TEST', $body); diff --git a/plugin/advancedsubscription/views/advsub_approval_admin_accepted_notice_admin.tpl b/plugin/advancedsubscription/views/advsub_approval_admin_accepted_notice_admin.tpl index 8b13789179..adfd3e03a5 100644 --- a/plugin/advancedsubscription/views/advsub_approval_admin_accepted_notice_admin.tpl +++ b/plugin/advancedsubscription/views/advsub_approval_admin_accepted_notice_admin.tpl @@ -1 +1,86 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Información: Validación de inscripción recibida  
   
   
 

Estimado:

+

{{ admin.name }}

+

Hemos recibido y registrado su validación de la inscripción de {{ student.name }} ({{ student.official_code }}) al curso {{ session.title }}

+

Gracias.

+

{{ signature }}

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_approval_admin_accepted_notice_student.tpl b/plugin/advancedsubscription/views/advsub_approval_admin_accepted_notice_student.tpl index 8b13789179..7524b181ef 100644 --- a/plugin/advancedsubscription/views/advsub_approval_admin_accepted_notice_student.tpl +++ b/plugin/advancedsubscription/views/advsub_approval_admin_accepted_notice_student.tpl @@ -1 +1,86 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Aprobada: su inscripción al curso {{ session.title }} fue confirmada!  
   
   
 

Estimado:

+

{{ student.name }}

+

Nos complace informarle que su inscripción al curso {{ session.title }} iniciando el {{ session.start_date }} fue validada por los administradores rechazada por falta de cupos. Esperamos mantenga todo su ánimo y participe en otro curso o, en otra oportunidad, a este mismo curso.

+

Gracias.

+

{{ signature }}

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_approval_admin_accepted_notice_superior.tpl b/plugin/advancedsubscription/views/advsub_approval_admin_accepted_notice_superior.tpl index 8b13789179..a41f120275 100644 --- a/plugin/advancedsubscription/views/advsub_approval_admin_accepted_notice_superior.tpl +++ b/plugin/advancedsubscription/views/advsub_approval_admin_accepted_notice_superior.tpl @@ -1 +1,86 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Información: Validación de inscripción de {{ student.name }} al curso {{ session.title }}  
   
   
 

Estimado:

+

{{ superior.name }}

+

La inscripción de {{ student.name }} al curso {{ session.title }} iniciando el {{ session.start_date }}, que estaba pendiente de validación por los organizadores del curso, fue validada hacen unos minutos. Esperamos nos ayude en asegurar la completa disponibilidad de su colaborador(a) para la duración completa del curso.

+

Gracias.

+

{{ signature }}

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_approval_admin_rejected_notice_admin.tpl b/plugin/advancedsubscription/views/advsub_approval_admin_rejected_notice_admin.tpl index 8b13789179..5ac7ca7362 100644 --- a/plugin/advancedsubscription/views/advsub_approval_admin_rejected_notice_admin.tpl +++ b/plugin/advancedsubscription/views/advsub_approval_admin_rejected_notice_admin.tpl @@ -1 +1,86 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Información: rechazo de inscripción recibido  
   
   
 

Estimado:

+

{{ admin.name }}

+

Hemos recibido y registrado su rechazo de la inscripción de {{ student.name }} ({{ student.official_code }}) al curso {{ session.title }}

+

Gracias.

+

{{ signature }}

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_approval_admin_rejected_notice_student.tpl b/plugin/advancedsubscription/views/advsub_approval_admin_rejected_notice_student.tpl index 8b13789179..49ea885fa0 100644 --- a/plugin/advancedsubscription/views/advsub_approval_admin_rejected_notice_student.tpl +++ b/plugin/advancedsubscription/views/advsub_approval_admin_rejected_notice_student.tpl @@ -1 +1,86 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Rechazamos su inscripción al curso {{ session.title }}  
   
   
 

Estimado:

+

{{ student.name }}

+

Lamentamos informarle que su inscripción al curso {{ session.title }} iniciando el {{ session.start_date }} fue rechazada por falta de cupos. Esperamos mantenga todo su ánimo y participe en otro curso o, en otra oportunidad, a este mismo curso.

+

Gracias.

+

{{ signature }}

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_approval_admin_rejected_notice_superior.tpl b/plugin/advancedsubscription/views/advsub_approval_admin_rejected_notice_superior.tpl index 8b13789179..eba308cff8 100644 --- a/plugin/advancedsubscription/views/advsub_approval_admin_rejected_notice_superior.tpl +++ b/plugin/advancedsubscription/views/advsub_approval_admin_rejected_notice_superior.tpl @@ -1 +1,86 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Información: Rechazo de inscripción de {{ student.name }} al curso {{ session.title }}  
   
   
 

Estimado:

+

{{ admin.name }}

+

La inscripción de {{ student.name }} al curso {{ session.title }}, que había aprobado anteriormente, fue rechazada por falta de cupos. Les presentamos nuestras disculpas sinceras.

+

Gracias.

+

{{ signature }}

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_request_approve_confirmed.tpl b/plugin/advancedsubscription/views/advsub_request_approve_confirmed.tpl index 8b13789179..896a67741c 100644 --- a/plugin/advancedsubscription/views/advsub_request_approve_confirmed.tpl +++ b/plugin/advancedsubscription/views/advsub_request_approve_confirmed.tpl @@ -1 +1,86 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Confirmación: Aprobación recibida para {{ student.name }}  
   
   
 

Estimado:

+

{{ student.name }}

+

Lamentamos informarle que, en esta oportunidad, su inscripción al curso {{ session.title }} NO ha sido aprobada. Esperamos mantenga todo su ánimo y participe en otro curso o, en otra oportunidad, a este mismo curso.

+

Gracias.

+

{{ signature }}

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_request_approved_info_admin.tpl b/plugin/advancedsubscription/views/advsub_request_approved_info_admin.tpl index 8b13789179..8f4388c495 100644 --- a/plugin/advancedsubscription/views/advsub_request_approved_info_admin.tpl +++ b/plugin/advancedsubscription/views/advsub_request_approved_info_admin.tpl @@ -1 +1,86 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Aprobación de {{ student.name }} al curso {{ session.title }}  
   
   
 

Estimado:

+

{{ admin.name }}

+

La inscripción del alumno {{ student.name }} ({{ student.offical_code }}) al curso {{ session.title }} ha sido aprobada por su superior. Puede gestionar las inscripciones al curso aquí

+

Gracias.

+

{{ signature }}

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_request_approved_reminder.tpl b/plugin/advancedsubscription/views/advsub_request_approved_reminder.tpl index 8b13789179..736de423ea 100644 --- a/plugin/advancedsubscription/views/advsub_request_approved_reminder.tpl +++ b/plugin/advancedsubscription/views/advsub_request_approved_reminder.tpl @@ -1 +1,86 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Inscripciones a {{ session.title }} pendiente de confirmación 
   
   
 

Estimado:

+

{{ admin.name }}

+

Las inscripciones siguientes al curso {{ session.title }} están pendientes de validación para ser efectivas. Por favor, dirigese al la página de administración para validarlos.

+

Gracias.

+

{{ signature }}

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_request_disapprove_confirmed.tpl b/plugin/advancedsubscription/views/advsub_request_disapprove_confirmed.tpl index 8b13789179..f6a63ff2cd 100644 --- a/plugin/advancedsubscription/views/advsub_request_disapprove_confirmed.tpl +++ b/plugin/advancedsubscription/views/advsub_request_disapprove_confirmed.tpl @@ -1 +1,86 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Confirmación: Desaprobación recibida para {{ student.name }}  
   
   
 

Estimado:

+

{{ superior.name }}

+

Hemos recibido y registrado su decisión de desaprobar el curso {{ session.title }} para su colaborador {{ student.name }}

+

Gracias por su colaboración

+

{{ signature }}

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_request_received.tpl b/plugin/advancedsubscription/views/advsub_request_received.tpl index 8b13789179..816c871eba 100644 --- a/plugin/advancedsubscription/views/advsub_request_received.tpl +++ b/plugin/advancedsubscription/views/advsub_request_received.tpl @@ -1 +1,87 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Solicitud recibida para el curso {{ sesion.title }} 
   
   
 

Estimado:

+

{{ user.name }}

+

Hemos recibido y registrado su solicitud de inscripción al curso {{ sesion.title }} para iniciarse el {{ session.start_date }}.

+

Su inscripción es pendiente primero de la aprobación de su superior, y luego de la disponibilidad de cupos. Un correo ha sido enviado a su superior para revisión y aprobación de su solicitud.

+

Gracias.

+

Equipo Forge

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_request_received_reminder.tpl b/plugin/advancedsubscription/views/advsub_request_received_reminder.tpl index 8b13789179..76048ffe49 100644 --- a/plugin/advancedsubscription/views/advsub_request_received_reminder.tpl +++ b/plugin/advancedsubscription/views/advsub_request_received_reminder.tpl @@ -1 +1,87 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Información: Solicitud pendiente de aprobación para el curso {{ session.title }} 
   
   
 

Estimado:

+

{{ user.name }}

+

Este correo es para confirmar que hemos recibido y registrado su solicitud de inscripción al curso {{ session.title }}, por iniciarse el {{ session.start_date }}.

+

Su inscripción todavía no ha sido aprobada por su superior, por lo que hemos vuelto a enviarle un correo electrónico de recordatorio.

+

Gracias por su paciencia.

+

Equipo Forge

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_request_superior.tpl b/plugin/advancedsubscription/views/advsub_request_superior.tpl index 8b13789179..4f12fe78a3 100644 --- a/plugin/advancedsubscription/views/advsub_request_superior.tpl +++ b/plugin/advancedsubscription/views/advsub_request_superior.tpl @@ -1 +1,95 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Solicitud de consideración de curso para un colaborador 
   
   
 

Estimado:

+

{{ superior.name }}

+

Hemos recibido una solicitud de inscripción de {{ student.name }} al curso {{ session.title }}, por iniciarse el {{ session.start_date }}. Detalles del curso: {{ sesion.description }}.

+

Le invitamos a aprobar o desarprobar esta inscripción, dando clic en el botón correspondiente a continuación.

+ + + + + + + +

{{ student.name }}

+

Gracias.

+

Equipo Forge

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_request_superior_approved.tpl b/plugin/advancedsubscription/views/advsub_request_superior_approved.tpl index 8b13789179..1a43cbe411 100644 --- a/plugin/advancedsubscription/views/advsub_request_superior_approved.tpl +++ b/plugin/advancedsubscription/views/advsub_request_superior_approved.tpl @@ -1 +1,86 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Aprobado: Su inscripción al curso {{ session.title }} ha sido aprobada por su superior  
   
   
 

Estimado:

+

{{ student.name }}

+

Nos complace informarle que su inscripción al curso {{ session.title }} ha sido aprobada por su superior. Su inscripción ahora solo se encuentra pendiente de disponibilidad de cupos. Le avisaremos tan pronto como se confirme este último paso.

+

Gracias.

+

{{ signature }}

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_request_superior_disapproved.tpl b/plugin/advancedsubscription/views/advsub_request_superior_disapproved.tpl index 8b13789179..352a2750d7 100644 --- a/plugin/advancedsubscription/views/advsub_request_superior_disapproved.tpl +++ b/plugin/advancedsubscription/views/advsub_request_superior_disapproved.tpl @@ -1 +1,86 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Información: Su inscripción al curso {{ session.title }} ha sido rechazada  
   
   
 

Estimado:

+

{{ student.name }}

+

Lamentamos informarle que, en esta oportunidad, su inscripción al curso {{ session.title }} NO ha sido aprobada. Esperamos mantenga todo su ánimo y participe en otro curso o, en otra oportunidad, a este mismo curso.

+

Gracias.

+

{{ signature }}

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_request_superior_reminder.tpl b/plugin/advancedsubscription/views/advsub_request_superior_reminder.tpl index 8b13789179..0fc3388adb 100644 --- a/plugin/advancedsubscription/views/advsub_request_superior_reminder.tpl +++ b/plugin/advancedsubscription/views/advsub_request_superior_reminder.tpl @@ -1 +1,101 @@ + + + + + Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Solicitud de consideración de curso para un colaborador 
   
   
 

Estimado:

+

{{ superior.name }}

+

Le recordamos que hemos recibido las siguientes solicitudes de suscripción al curso {{ session.title }} de parte de sus colaboradores. El curso se iniciará el {{ session.start_date }}. Detalles del curso: {{ sesion.description }}.

+

Le invitamos a aprobar o desarprobar las suscripciones, dando clic en el botón correspondiente a continuación para cada colaborador.

+ + + + + + + + + + + + + +

{{ student.name }}

{{ student.name }}

+

Gracias.

+

Equipo Forge

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/advsub_request_superior_reminder_max.tpl b/plugin/advancedsubscription/views/advsub_request_superior_reminder_max.tpl new file mode 100644 index 0000000000..871b093b46 --- /dev/null +++ b/plugin/advancedsubscription/views/advsub_request_superior_reminder_max.tpl @@ -0,0 +1,101 @@ + + + + +Solicitud recibida para el curso {{ session.title }} + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
 Ministerio de Educación 
   
   
 Recordatorio: Solicitud de consideración de curso para colaborador(es) 
   
   
 

Estimado:

+

{{ superior.name }}

+

Le recordamos que hemos recibido las siguientes solicitudes de suscripción al curso {{ session.title }} de parte de sus colaboradores. El curso se iniciará el {{ session.start_date }}. Detalles del curso: {{ sesion.description }}.

+

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 {{ session.recommended_subscription_limit }} candidatos. Le invitamos a aprobar o desaprobar las suscripciones, dando clic en el botón correspondiente a continuación para cada colaborador.

+ + + + + + + + + + + + + +

{{ student.name }}

{{ student.name }}

+

Gracias.

+

{{ signature }}

 
   
 
+ + diff --git a/plugin/advancedsubscription/views/img/aprobar.png b/plugin/advancedsubscription/views/img/aprobar.png new file mode 100644 index 0000000000000000000000000000000000000000..90250ca75277a5c1d5db591d3a1325e88f262d3b GIT binary patch literal 1482 zcmV;*1vUDKP)X1^@s6v1B>G00004b3#c}2nYxW zd>|G0X8>q!`G~g8Jvi+1S#bZSBoa~1G`~kh*&Fl(4${`KoAQ#) z6!~97mK?;D5MAB-X*$0HWqdT5-ynN<_`%QdxR;?QVNNx^NpIi~PWu8D%-e;@ma{rhiGWrMqC-8ymSkG-+KBkA0ZO$!|&U`$5ec2*Y@dt|eG4rNraI=yew6RJ@DDT#QaMU^eArwUn@E{$3ne4mXZ{^ z;ozUt*01I8PfLg^AwVD}``Wvcs*ZEA;T4Y5E~CBk3rhT(065#coyNaDk1b)25Q0|3a9BRQ8x!p#7Lue49*5vM!@#v(n$<3S`T3!}k{ZAJwP=k1>S!Bxh` zqsf}DCp_BDz|aW|)JR3sj?Q*1MV9OU6y`t2y!&<}1-jblQ(-X|0}zc~o^m~|giuul zm=GO6(p@_cW3ho7e2fMUl9V+OHx^*_taq?lO1N<8YrZ>NNz?fqx4XUngr*&x=bd=k z7#OOjZE`-FOg`pTypPRV&J0Ug(pHik6X-vN!H|7JTvb)*AFLzW zwUn}=SBWbjN()~CAQ);Q5)CA6O~wMeo+l_S*a$!@KFr|o@06Erz8VdqF&DS9TFb59 z6wQPdMTy*;Cjq$F{S7^VgOe))vr1mWAiMG9t|1m10>Es{XHnJONgI`OEjtN~woWND zKtt2pR9EfA>sf)KKJy$Zi?1AgBI z!lUh4ZT*%IzCDnyY7t1MGvmmb2TUAv*FSREW>g|ec4F}%+>UDIR(`;6uz}M}Z(%hT z5e%IpJlYCO99~(r*{JF`14H#GIYiNb$F&r*serLaH~oXZOdg~YQ965uKn2qBPCf(3*D zD=?8EvIek3QN*~j2q8vid>z~1nP;v}0=d7n!P{@Wfr%m@ewdUJYc0kYthE!L4Id(e zKq-aex@aeXRvPU%D5bc+waNB_EgpL0QIcMoR4PTM(?SYCv)Le<$s?qo*=V30hoqN6 zN{O){#+VV9aS%fVDCr=CI0*!6kwOrS32uy;cs~SSjES`gg9k~hu?V2mtP@3sgM%{F zN(DzL{{8zu;NakZuYc{U6iWq^b~rq&;%G(v@Q}5eHz`b)SXq6TLZLL$`fz`p_ANGV5PwByG2MiDpPf0qlF9->h_i(V|#0Z$b_t{UP6c??T^REP_g4yI|k(BF$6O_gpfx*sx_{g zz*?}zQf=(>+AFUjEL5sB`t3GB5K`VRQ_AO=$!FQ#-6xZDP(qMSdsHeF`n?{m)a;h4 ztpE5G9)J1?jJ2$+u1eLTlOs}6@POSjuY^!psvTl9j6*+Q0F%EgZi&0Yvm#LUbrOH0cL z1eVDZcbX+m0EwwpPJkHxI7TjzGNxIj6prIyt>vfx`4irG`yHalAWVP|inC|t@e(ez zW{srlF+Vp;y}FN^PEoBl@r~fznK`r)L?&Xt-lEy)?CzDRG}l*Ch(a;3uFL4{H_&HY-1jvufzKTX0>G@Ahj z^%hcTB0t2{n#jWX<_1@J5hY!W>;nUOAM=#)*Ao_rO)>-`C(J1a8QYpTiz}s&%E5J$ z+`W63opKo|1-{=$3d_0K0@KAD`?V(ZcAwA+ly)elJkqWr3POS~KuaiQlH@!GrN9qE z)^6QqYjYE&6k5fJbtw2ysiz%dt|gI5!oVs@X&mh$g+hopF0`Y^zEfZg?|t|&&2}HG zA*&T%e)tT}t2u80PIawesSy`H7HJj68l+Ssi#dbRBlc5C7)7)@JyNd5h9Td0 z_A&nQ+usB~px^KF$@&JLKG^5ML5+iEhjP8aVJG0D^*y@2PiPIsf-*gf4as;Zq9|f_ zcL%K$5Ly8u0tZJ`Sv%y z%+lHONNe%C9ab-_((Co8R;%3G*x=sw9`E11&sL?uP6HY}A0ai}Fr?KBaGZ#g@{2L9Jbi4x7ew-*s3(yJnRsfkU~C-wHD>* zICLXJ7>0vNW0I{-b*-Vm<7OKIvDS`~pw(%$4#~J3Y3mO|Cp7`QDG;CgG*I_N8lRrQ>uc71r1Z*|1{d zMJIqrB}e`@tTe5)IF2)TFGc|;rQ%?JhbZt#IFhMi0TK2Pn0TFpgOn~-N(A7@UhLln z(zzVnZj&?#T4VRLf1Xv=pQha*n&Pc&hD}+4C8$;Gor^Sd660IGuU^!}L;_Eog#1@HZ zcx`Qsa^;XhHpNb*$#OBx%*-?(&}ghq#)J`A5Sscyg>Ju(lP!@$;3Mb+7U4%A6`8^` z22DaaET22ilTZB);h?!1#i`b#Yilj`vseqnM5!`lEGYyQ141B`qS>rda3xPJ&GY`| z19I6EFJJp2sZ5cB@*#KLd7olwhO=jvajk`3hjz0`uh(IEp@>4#tT)iAi|Z+jlRzbs zw7YFe#XJDYafp0>JMoI5j%2}An*9_?CJW@aEbEYug7jJ6+Q0Bv&p! zLJ$SGu4Za>W@L#8MJtJkKoDUDUFxYZa#Uj}5Edy_oG9bW2t%M!P`r4FQnO4+Se|?K zDU9nN3}k1fdFIjQcw_5(w0G{YWICLG>|s_fuCl-VfFHg2OFr4HvtDTsTFFC;b6mN6 z36(37%X~->L|nUeZ7^|}%olbD2!%X0$U355Ay87q&5Qs!##rObHKgBmZk8n(@|CZ= z$l3WBR3uPRbNSh;bjt^P=ZlxP_i=y-Bd-1aw^(}o8QQP?2e01TAel^&F3#{^dmFDb zgOHX&#v_->@Y2gKQ!Gvqh9M!rMA^BBc22U>|mZrwKm(YK%c@hrMQ(M^;y9)hiGggmf^G zAe}1m$fHjqv_=%?z#2r*r`M|U{F9GTl#<8<_)Z96o2BVR_Ummj=?s}{7Gn+892JJc zL_O?}#^d+|5UhY9Bgn}lczn(zL=5KUb_IWXhv`z5sOKYG1%8AH`iLk*ragoVu>AYg{1-mxnhxgsfZ&b`;8h9(X3W! z9h3=sU7mdQg}C4FG6by-UNViXHTcy>Yb+M?l!_%(p}>siarNn|gO)ZNwALb?33HSN zkg>Z-F&RS>Ku+r*M*%iAB#W!hcu?aeJf45yB|1SHr6i#VNSCtAojpsh?cY5NGuNY4>BYAF-3xIKkti z?~WMl%<>BL^>-=cawNSB39WhO{SU|%W|%&InMBEQ{mq|q{ni>=hjj`IP0n0cWpm>m zPOncQ3Q6V*_>sXxgAve};t)12pM=1gfiguLr{c8PFT@nAkf*xVxJHKTA%q~A%3!DF zXtnF)lT)60@uF&yGl28APqX?ag%x#RR*R z13ay%ZC7b*-p8?$Rc{JsDaoz%Psn7Fq;pxO7B5hkTO#!RIDJV;7={yqj!)soK^#9O zCyhfe#)4#mJ&v0-zRmK?l}8D0zk}-}P{y*myT{7X3fsFoBpu1^UYQT>Y|#lqax*jR z)vA=HOQbSc_BJ;N{NN}ij>$JZKZs8-6Lr?-lqf@g6oVf`L+u!g9k|fYQWq~?Le_S< zfA<4sX6HG(aE6c8ZnLwy!^+}$riwE>n=Wx-b(`Dk>oh_G35C#_f|ulj_dcZCZsK^U zxOp248HT0OaVs2Gd zve`VBAG*Z#4?d*TXz{61)N3`AcIbp5jc$h^G>Be@8#fL(JZ#WzHA!n1N6Uf6hjU$t z5atAc)8@XXyVjsbAK!u-z78403dQr!K8I;n`1LP;%H?wl1VKPDkzl28o|&0>UVr0t ze)3;$Q*ZlZGa0NGDsb!FUvcXQ0Db+m&U z1F=}VRE8^8zQDN)s{~;{dG`Tfr^QD%*SNAg#j4*U3a-=7hdA}uioU$$_29d0s!f3j(WXHK9|FWA?;?1q?ejV z)}IT+nh3DWFD`QV@)IPzBuYqvemo7dShnuo=H4g2A(_t5sMpCA`~2B=|AAls>p#+H zG*D8bv`b_x`{i9)jT#bgJQt0Hb|;<=hL%72tH0r$8`pW|hd;m~$d{&h>gsb`y8Jk) zRF+nwNg|mf=_yPYAhkxwNlKpRPwe38#`SlYnVBb@&SIhnrQ+r(ioy}M`@T=BUS)f0 zgI=$TwU8_1kWrtz|MpMh^I3!y^m+mPFrw3G)9?0>68g<1Hi$^1Gswa;FaP!5@%P{T zTlRLhiIl?keZnvzmCo?k6HhWXH^=ns{Lx&?TD)``l*ae_BQp4tKmOB6i#+_u723@f zQ5c{dg&_VX#IUUuKqBGd&Mx3(vUJ;B0>6h oGL@$9_fEIS|M%m!=Kos%4Y4D~QNi~*`Tzg`07*qoM6N<$g6CZI$N&HU literal 0 HcmV?d00001 diff --git a/plugin/advancedsubscription/views/img/desaprobar.png b/plugin/advancedsubscription/views/img/desaprobar.png new file mode 100644 index 0000000000000000000000000000000000000000..1d73cd739ee151bbb18b6d7628674accc8e163b8 GIT binary patch literal 1901 zcmV-z2a@=SP)X1^@s6v1B>G00004b3#c}2nYxW zd{Q3{hh;`vWJ;$@87nvrw$d_CI|5q75$KFn>j-p2+Xib8fyl1_ z0g?+jlHBgy?Y{kE(}NU`hCvbs^ZDmy_kG^?`M%$M?%BPY6&LDe3_+@;O0WP3Gr$)~ zyHKph5i9g=lOOGGMK>s6C3sXwh3u~60j?uTus|}~95M6$Xs%BlIf`3SR(` z|26kODKNWG7tW)SW?yK#Zs-%IppTn`bK)?`zisWCoL3su%E#kh^mNaYj!k<1hgh$@ zh|_%RdTP6FXeA>tYVIT*7zBM}bgx@SYWEIOAH0p~>OiloA@HMLA_ot-EKYd+AVijI z612~`wn88Rq3rW6i9=ppw-Y}9{}0NxrqmGrUg+utSFGquv9_&4bzMLVE+F{$ZxDkE z@XlRC;>G141fJVx}R_v4v17cnRoWhO}1zlZhbwWzL+%$`JW5dMWr(Z|=K(kZMh z&y(8wS7cEc{zXqCBT?66J59P_FXqduQSlg_sdF%<&c;6U5l&Mh#y9W7eEC`IL;JG& zchxsT)pm~L-~R%DHhe4q#*}a4om+?MIFGq`4fe^;Fsi5Fo%J9hCqm%izClJ9QAX*-8jJ|5q^C9V-(A2Jd}yJ-ws*=STpJHq3|bI&}q zVHKbo$Ve0!iQ-?p0&PSk!XLsjbq?NH4}zwVeCrid>isuyP8=q!d(g^8qmQd4wPz<7UI3hvjif)`OLFHQ5uq@u zqn*xW3lX{bXeA>Nx`CWL6Ro7YM?RXAOA3umn zS_B?{1_0~zKakq>2B|$e2|l?FeZpi!ZhmG?x?wMg7oI}+{Df9+1;c|jY9i@>zDw7y z79$Iakws;QoWbbhYA@Gywh43dbExwzs0(dhywM`B&^0_BLsApz2cd;a2|Hk zXV@nWqm_)rJEsosoI32I2QW9T1i-&=DOyF9yI#_ACuZxJO5vP5f{a8F;k+J0srucJ zvOr2?ZUF$!>7(xFxs#bVSx|iWvStD&){M+ALgwZn3ySbR^c1pqc=zJny0o6UoY)!c zgY{Wl>d93bEka?8+PeU-8$X6r5@nePpP$6K<=Bl4JtsIeUBCV@#-thOqb8zN)}WP* z#&gH_QRiFGDyp!LeM;hmpCKbd2rOBB#r$%}PykdsO9eR&D$$7ugb=|TSF<;e8CD(V zFW-~Lm$|X4cpIL3=Oc@Uldj)|`O+%%${Kw0pXil8+32;=o_l|Y&<*slw;*!!QSGf* zul)`H`;!mQtG7Or4F>+MFp2r?na9Ow+}6 zbMw(FYcOi>c5l*2i}b;L=--%jQCCg`t>Wh1+LV>v8-3fXOmh3ve__7zJWlHw0L)Em z@Q1=^@2RC{aI#;=u(L>88UH-Kt8i{1Ed zl$k&lmZA+E0lok#c9!(PdPt|-9Dxw}_*+r&HtZw&kwZrUU?19tQ9TXc{3mc)PLcTS zGGt*XPV;e`Q%Bsn9v^a8g&TkPBlp*9MvRVLQH3lh#%XWGKC}FSZ*LsrY;X`@aTNXhUviRva@1lAzFDg{p4~iSX$&;j;mX!(pyD+u6^slX!a(ON z;f!NoxWuB*z>wJ_&d^|Tkek6_)&o`s1>X-$3=`A{DtlXZFaJBxLlMUg!*sr7f4P{= V_r;&f&w(~Ec)I$ztaD0e0st0QQ1$=- literal 0 HcmV?d00001 diff --git a/plugin/advancedsubscription/views/img/header.png b/plugin/advancedsubscription/views/img/header.png new file mode 100644 index 0000000000000000000000000000000000000000..45580646798ece8b4c4ef716cf5bb427bf16ba2c GIT binary patch literal 267 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 literal 0 HcmV?d00001