Add cron notify by mail and scripts to plugin - refs BT#9094

1.10.x
Daniel Barreto 11 years ago
parent daca8f0f4a
commit 5455a67fef
  1. 4
      plugin/advanced_subscription/config.php
  2. 158
      plugin/advanced_subscription/cron/notify_by_mail.php
  3. 3
      plugin/advanced_subscription/lang/english.php
  4. 3
      plugin/advanced_subscription/lang/spanish.php
  5. 55
      plugin/advanced_subscription/src/AdvancedSubscriptionPlugin.php
  6. 203
      plugin/advanced_subscription/src/scripts/insert_session_fields.php
  7. 20
      plugin/advanced_subscription/src/scripts/insert_sessions_categories.php
  8. 2
      plugin/advanced_subscription/views/reminder_notice_superior.tpl
  9. 2
      plugin/advanced_subscription/views/reminder_notice_superior_max.tpl

@ -15,6 +15,10 @@ define('ADVANCED_SUBSCRIPTION_ACTION_SUPERIOR_SELECT', 3);
define('ADVANCED_SUBSCRIPTION_ACTION_ADMIN_APPROVE', 4);
define('ADVANCED_SUBSCRIPTION_ACTION_ADMIN_DISAPPROVE', 5);
define('ADVANCED_SUBSCRIPTION_ACTION_STUDENT_REQUEST_NO_BOSS', 6);
define('ADVANCED_SUBSCRIPTION_ACTION_REMINDER_STUDENT', 7);
define('ADVANCED_SUBSCRIPTION_ACTION_REMINDER_SUPERIOR', 8);
define('ADVANCED_SUBSCRIPTION_ACTION_REMINDER_SUPERIOR_MAX', 9);
define('ADVANCED_SUBSCRIPTION_ACTION_REMINDER_ADMIN', 10);
define('ADVANCED_SUBSCRIPTION_QUEUE_STATUS_NO_QUEUE', -1);
define('ADVANCED_SUBSCRIPTION_QUEUE_STATUS_START', 0);

@ -0,0 +1,158 @@
<?php
/* For license terms, see /license.txt */
/**
* This script generates four session categories.
* @package chamilo.plugin.advanced_subscription
*/
/**
* Init
*/
require_once __DIR__ . '/../config.php';
$plugin = AdvancedSubscriptionPlugin::create();
$now = api_get_utc_datetime();
$weekAgo = api_get_utc_datetime('-1 week');
$sessionExtraField = new ExtraField('session');
$sessionExtraFieldValue = new ExtraFieldValue('session');
/**
* Get session list
*/
$joinTables = Database::get_main_table(TABLE_MAIN_SESSION) . ' s INNER JOIN ' .
Database::get_main_table(TABLE_MAIN_SESSION_USER) . ' su ON s.id = su.id_session INNER JOIN ' .
Database::get_main_table(TABLE_MAIN_USER_REL_USER) . ' uu ON su.id_user = uu.user_id INNER JOIN ' .
Database::get_main_table(TABLE_ADVANCED_SUBSCRIPTION_QUEUE) . ' asq ON su.id_session = asq.session_id AND su.id_user = asq.user_id';
$columns = 's.id AS session_id, uu.friend_user_id AS superior_id, uu.user_id AS student_id, asq.id AS queue_id, asq.status AS status';
$conditions = array(
'where' => array(
//'s.date_start >= ?
'uu.relation_type = ? AND asq.updated_at <= ?' => array(
//api_get_utc_datetime(),
USER_RELATION_TYPE_BOSS,
$weekAgo
)
),
'order' => 's.id',
);
$queueList = Database::select($columns, $joinTables, $conditions);
/**
* Remind students
*/
$sessionInfoList = array();
foreach ($queueList as $queueItem) {
if (!isset($sessionInfoList[$queueItem['session_id']])) {
$sessionInfoList[$queueItem['session_id']] = api_get_session_info($queueItem['session_id']);
}
}
foreach ($queueList as $queueItem) {
switch ($queueItem['status']) {
case ADVANCED_SUBSCRIPTION_QUEUE_STATUS_START:
// No break
case ADVANCED_SUBSCRIPTION_QUEUE_STATUS_BOSS_APPROVED:
$data = array('sessionId' => $queueItem['session_id']);
$data['session'] = api_get_session_info($queueItem['session_id']);
$data['student'] = api_get_user_info($queueItem['student_id']);
$plugin->sendMail($data, ADVANCED_SUBSCRIPTION_ACTION_REMINDER_STUDENT);
break;
default:
break;
}
}
/**
* Remind superiors
*/
// Get recommended number of participants
$sessionRecommendedNumber = array();
foreach ($queueList as $queueItem) {
$row =
$sessionExtraFieldValue->get_values_by_handler_and_field_variable(
$queueItem['session_id'],
'recommended_number_of_participants'
);
$sessionRecommendedNumber[$queueItem['session_id']] = $row['field_value'];
}
// Group student by superior and session
$queueBySuperior = array();
foreach ($queueList as $queueItem) {
$queueBySuperior[$queueItem['session_id']][$queueItem['superior_id']][$queueItem['student_id']]['status'] = $queueItem['status'];
}
foreach ($queueBySuperior as $sessionId => $superiorStudents) {
$data = array(
'sessionId' => $sessionId,
'session' => $sessionInfoList[$sessionId],
'students' => array(),
);
$dataUrl = array(
'action' => 'confirm',
'sessionId' => $sessionId,
'currentUserId' => 0,
'newStatus' => ADVANCED_SUBSCRIPTION_QUEUE_STATUS_BOSS_APPROVED,
'studentUserId' => 0,
'is_connected' => 0,
'profile_completed' => 0,
);
foreach ($superiorStudents as $superiorId => $students) {
$data['superior'] = api_get_user_info($superiorId);
// Check if superior has at least one student
if (count($students) > 0) {
foreach ($students as $studentId => $studentInfo) {
if ($studentInfo['status'] != ADVANCED_SUBSCRIPTION_QUEUE_STATUS_START) {
$data['students'][$studentId] = api_get_user_info($studentId);
$dataUrl['studentUserId'] = $studentId;
$dataUrl['newStatus'] = ADVANCED_SUBSCRIPTION_QUEUE_STATUS_BOSS_APPROVED;
$data['students'][$studentId]['acceptUrl'] = $plugin->getQueueUrl($dataUrl);
$dataUrl['newStatus'] = ADVANCED_SUBSCRIPTION_QUEUE_STATUS_BOSS_DISAPPROVED;
$data['students'][$studentId]['rejectUrl'] = $plugin->getQueueUrl($dataUrl);
}
}
if (is_array($data['students']) && count($data['students']) > 0) {
// Check if superior have more than recommended
if ($sessionRecommendedNumber[$sessionId] >= count($students)) {
// Is greater or equal than recommended
$plugin->sendMail($data, ADVANCED_SUBSCRIPTION_ACTION_REMINDER_SUPERIOR);
} else {
// Is less than recommended
$plugin->sendMail($data, ADVANCED_SUBSCRIPTION_ACTION_REMINDER_SUPERIOR_MAX);
}
}
}
}
}
/**
* Remind admins
*/
$admins = UserManager::get_all_administrators();
$isWesternNameOrder = api_is_western_name_order();
foreach ($admins as &$admin) {
$admin['complete_name'] = $isWesternNameOrder ?
$admin['firstname'] . ', ' . $admin['lastname'] :
$admin['lastname'] . ', ' . $admin['firstname']
;
}
unset($admin);
$queueByAdmin = array();
foreach ($queueList as $queueItem) {
if ($queueItem['status'] != ADVANCED_SUBSCRIPTION_QUEUE_STATUS_BOSS_APPROVED) {
$queueByAdmin[$queueItem['session_id']]['students'][$queueItem['student_id']]['user_id'] = $queueItem['student_id'];
}
}
$data = array(
'admins' => $admins,
);
foreach ($queueByAdmin as $sessionId => $studentInfo) {
$data['sessionId'] = $sessionId;
$data['admin_view_url'] = api_get_path(WEB_PLUGIN_PATH) .
'advanced_subscription/src/admin_view.php?s=' . $data['sessionId'];
$data['session'] = $sessionInfoList[$sessionId];
$data['students'] = $studentInfo['students'];
$plugin->sendMail($data, ADVANCED_SUBSCRIPTION_ACTION_REMINDER_ADMIN);
}

@ -48,6 +48,9 @@ $strings['MailStudentRequestSelect'] = 'Student registration requests selection'
$strings['MailAdminAccept'] = 'Registration request accepted by administrator';
$strings['MailAdminReject'] = 'Registration request rejected by administrator';
$strings['MailStudentRequestNoBoss'] = 'Student registration request without boss';
$strings['MailRemindStudent'] = 'Subscription request reminder';
$strings['MailRemindSuperior'] = 'Subscription request are pending your approval';
$strings['MailRemindAdmin'] = 'Course subscription are pending your approval';
// TPL langs
// Admin view

@ -48,6 +48,9 @@ $strings['MailStudentRequestSelect'] = 'Selección de solicitudes de registro de
$strings['MailAdminAccept'] = 'Solicitud de registro aceptada por administrador';
$strings['MailAdminReject'] = 'Solicitud de registro rechazada por administrador';
$strings['MailStudentRequestNoBoss'] = 'Solicitud de registro de estudiante sin superior';
$strings['MailRemindStudent'] = 'Recordatorio de la solicitud de inscripción';
$strings['MailRemindSuperior'] = 'Solicitudes de inscripción estan pendientes de tu aprobación';
$strings['MailRemindAdmin'] = 'Inscripciones de cursos estan pendientes de tu aprobación';
// TPL translations
// Admin view

@ -285,7 +285,7 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface
/**
* Send message for the student subscription approval to a specific session
* @param int $studentId
* @param int|array $studentId
* @param int $receiverId
* @param string $subject
* @param string $content
@ -303,7 +303,14 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface
if ($save && !empty($mailId)) {
// Save as sent message
$this->saveLastMessage($mailId, $studentId, $sessionId);
if (is_array($studentId) && !empty($studentId)) {
foreach ($studentId as $student) {
$this->saveLastMessage($mailId, $student['user_id'], $sessionId);
}
} else {
$studentId = intval($studentId);
$this->saveLastMessage($mailId, $studentId, $sessionId);
}
}
return $mailId;
}
@ -573,6 +580,50 @@ class AdvancedSubscriptionPlugin extends Plugin implements HookPluginInterface
);
}
break;
case ADVANCED_SUBSCRIPTION_ACTION_REMINDER_STUDENT:
$mailIds['render'] = $this->sendMailMessage(
$data['student']['user_id'],
$data['student']['user_id'],
$this->get_lang('MailRemindStudent'),
$template->fetch('/advanced_subscription/views/reminder_notice_student.tpl'),
$data['sessionId'],
true
);
break;
case ADVANCED_SUBSCRIPTION_ACTION_REMINDER_SUPERIOR:
$mailIds['render'] = $this->sendMailMessage(
$data['students'],
$data['superior']['user_id'],
$this->get_lang('MailRemindSuperior'),
$template->fetch('/advanced_subscription/views/reminder_notice_superior.tpl'),
$data['sessionId'],
true
);
break;
case ADVANCED_SUBSCRIPTION_ACTION_REMINDER_SUPERIOR_MAX:
$mailIds['render'] = $this->sendMailMessage(
$data['students'],
$data['superior']['user_id'],
$this->get_lang('MailRemindSuperior'),
$template->fetch('/advanced_subscription/views/reminder_notice_superior_max.tpl'),
$data['sessionId'],
true
);
break;
case ADVANCED_SUBSCRIPTION_ACTION_REMINDER_ADMIN:
// Mail to admin
foreach ($data['admins'] as $adminId => $admin) {
$template->assign('admin', $admin);
$mailIds[] = $this->sendMailMessage(
$data['students'],
$adminId,
$this->get_lang('MailRemindAdmin'),
$template->fetch('/advanced_subscription/views/student_no_superior_notice_admin.tpl'),
$data['sessionId'],
true
);
}
break;
default:
break;
}

@ -0,0 +1,203 @@
<?php
/* For license terms, see /license.txt */
/**
* This script generates session fields needed for this plugin
* @package chamilo.plugin.advanced_subscription
*/
//exit;
require_once __DIR__ . '/../../config.php';
api_protect_admin_script();
$teachingHours = new ExtraField('session');
$teachingHours->save(array(
'field_type' => ExtraField::FIELD_TYPE_INTEGER,
'field_variable' => 'teaching_hours',
'field_display_text' => get_lang('TeachingHours'),
'field_visible' => 1,
'field_changeable' => 1
));
$cost = new ExtraField('session');
$cost->save(array(
'field_type' => ExtraField::FIELD_TYPE_FLOAT,
'field_variable' => 'cost',
'field_display_text' => get_lang('Cost'),
'field_visible' => 1,
'field_changeable' => 1
));
$vacancies = new ExtraField('session');
$vacancies->save(array(
'field_type' => ExtraField::FIELD_TYPE_INTEGER,
'field_variable' => 'vacancies',
'field_display_text' => get_lang('Vacancies'),
'field_visible' => 1,
'field_changeable' => 1
));
$recommendedNumberOfParticipants = new ExtraField('session');
$recommendedNumberOfParticipants->save(array(
'field_type' => ExtraField::FIELD_TYPE_INTEGER,
'field_variable' => 'recommended_number_of_participants',
'field_display_text' => get_lang('RecommendedNumberOfParticipants'),
'field_visible' => 1,
'field_changeable' => 1
));
$place = new ExtraField('session');
$place->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'place',
'field_display_text' => get_lang('Place'),
'field_visible' => 1,
'field_changeable' => 1
));
$schedule = new ExtraField('session');
$schedule->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'schedule',
'field_display_text' => get_lang('Schedule'),
'field_visible' => 1,
'field_changeable' => 1
));
$allowVisitors = new ExtraField('session');
$allowVisitors->save(array(
'field_type' => ExtraField::FIELD_TYPE_CHECKBOX,
'field_variable' => 'allow_visitors',
'field_display_text' => get_lang('AllowVisitors'),
'field_visible' => 1,
'field_changeable' => 1
));
$modeOptions = array(
get_lang('Online'),
get_lang('Presencial'),
get_lang('B-Learning')
);
$mode = new ExtraField('session');
$mode->save(array(
'field_type' => ExtraField::FIELD_TYPE_SELECT,
'field_variable' => 'mode',
'field_display_text' => get_lang('Mode'),
'field_visible' => 1,
'field_changeable' => 1,
'field_options' => implode('; ', $modeOptions)
));
$isInductionSession = new ExtraField('session');
$isInductionSession->save(array(
'field_type' => ExtraField::FIELD_TYPE_CHECKBOX,
'field_variable' => 'is_induccion_session',
'field_display_text' => get_lang('IsInductionSession'),
'field_visible' => 1,
'field_changeable' => 1
));
$isOpenSession = new ExtraField('session');
$isOpenSession->save(array(
'field_type' => ExtraField::FIELD_TYPE_CHECKBOX,
'field_variable' => 'is_open_session',
'field_display_text' => get_lang('IsOpenSession'),
'field_visible' => 1,
'field_changeable' => 1
));
$duration = new ExtraField('session');
$duration->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'human_text_duration',
'field_display_text' => get_lang('DurationInWords'),
'field_visible' => 1,
'field_changeable' => 1
));
$showStatusOptions = array(
get_lang('Open'),
get_lang('InProcess'),
get_lang('Closed')
);
$showStatus = new ExtraField('session');
$showStatus->save(array(
'field_type' => ExtraField::FIELD_TYPE_SELECT,
'field_variable' => 'show_status',
'field_display_text' => get_lang('ShowStatus'),
'field_visible' => 1,
'field_changeable' => 1,
'field_options' => implode('; ', $showStatusOptions)
));
$publicationStartDate = new ExtraField('session');
$publicationStartDate->save(array(
'field_type' => ExtraField::FIELD_TYPE_DATE,
'field_variable' => 'publication_start_date',
'field_display_text' => get_lang('PublicationStartDate'),
'field_visible' => 1,
'field_changeable' => 1
));
$publicationEndDate = new ExtraField('session');
$publicationEndDate->save(array(
'field_type' => ExtraField::FIELD_TYPE_DATE,
'field_variable' => 'publication_end_date',
'field_display_text' => get_lang('PublicationEndDate'),
'field_visible' => 1,
'field_changeable' => 1
));
$banner = new ExtraField('session');
$banner->save(array(
'field_type' => ExtraField::FIELD_TYPE_FILE_IMAGE,
'field_variable' => 'banner',
'field_display_text' => get_lang('SessionBanner'),
'field_visible' => 1,
'field_changeable' => 1
));
$brochure = new ExtraField('session');
$brochure->save(array(
'field_type' => ExtraField::FIELD_TYPE_FILE,
'field_variable' => 'brochure',
'field_display_text' => get_lang('Brochure'),
'field_visible' => 1,
'field_changeable' => 1
));
$targetOptions = array(
get_lang('Minedu'),
get_lang('Regiones')
);
$target = new ExtraField('session');
$target->save(array(
'field_type' => ExtraField::FIELD_TYPE_SELECT,
'field_variable' => 'target',
'field_display_text' => get_lang('Target'),
'field_visible' => 1,
'field_changeable' => 1,
'field_options' => implode('; ', $targetOptions)
));
$shortDescription = new ExtraField('session');
$shortDescription->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'short_description',
'field_display_text' => get_lang('ShortSescription'),
'field_visible' => 1,
'field_changeable' => 1
));
$id = new ExtraField('session');
$id->save(array(
'field_type' => ExtraField::FIELD_TYPE_TEXT,
'field_variable' => 'id',
'field_display_text' => get_lang('Id'),
'field_visible' => 1,
'field_changeable' => 1
));

@ -0,0 +1,20 @@
<?php
/* For license terms, see /license.txt */
/**
* This script generates four session categories.
* @package chamilo.plugin.advanced_subscription
*/
require_once __DIR__ . '/../../config.php';
api_protect_admin_script();
$categories = array(
'capacitaciones',
'programas',
'especializaciones',
'cursos prácticos'
);
$tableSessionCategory = Database::get_main_table(TABLE_MAIN_SESSION_CATEGORY);
foreach ($categories as $category) {
Database::query("INSERT INTO $tableSessionCategory (name) VALUES ('$category')");
}

@ -54,7 +54,7 @@
<table width="100%" border="0" cellspacing="3" cellpadding="4" style="background:#EDE9EA">
{% for student in students %}
<tr>
<td valign="middle"><img src="{{ student.picture.file }}" width="50" height="50" alt=""></td>
<td valign="middle"><img src="{{ student.avatar }}" width="50" height="50" alt=""></td>
<td valign="middle"><h4>{{ student.complete_name }}</h4></td>
<td valign="middle"><a href="{{ student.acceptUrl }}"><img src="{{ _p.web_plugin }}advanced_subscription/views/img/aprobar.png" width="90" height="25" alt=""></a></td>
<td valign="middle"><a href="{{ student.rejectUrl }}"><img src="{{ _p.web_plugin }}advanced_subscription/views/img/desaprobar.png" width="90" height="25" alt=""></a></td>

@ -57,7 +57,7 @@
<tr>
<td valign="middle"><img src="{{ student.picture.file }}" width="50" height="50" alt=""></td>
<td valign="middle"><h4>{{ student.complete_name }}</h4></td>
<td valign="middle"><a href="{{ student.approveUrl }}"><img src="{{ _p.web_plugin }}advanced_subscription/views/img/aprobar.png" width="90" height="25" alt=""></a></td>
<td valign="middle"><a href="{{ student.acceptUrl }}"><img src="{{ _p.web_plugin }}advanced_subscription/views/img/aprobar.png" width="90" height="25" alt=""></a></td>
<td valign="middle"><a href="{{ student.rejectUrl }}"><img src="{{ _p.web_plugin }}advanced_subscription/views/img/desaprobar.png" width="90" height="25" alt=""></a></td>
</tr>
{% endfor %}

Loading…
Cancel
Save