notify_by_mail.php 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. <?php
  2. /* For license terms, see /license.txt */
  3. /**
  4. * This script generates four session categories.
  5. * @package chamilo.plugin.advanced_subscription
  6. */
  7. /**
  8. * Init
  9. */
  10. require_once __DIR__ . '/../config.php';
  11. $plugin = AdvancedSubscriptionPlugin::create();
  12. $now = api_get_utc_datetime();
  13. $weekAgo = api_get_utc_datetime('-1 week');
  14. $sessionExtraField = new ExtraField('session');
  15. $sessionExtraFieldValue = new ExtraFieldValue('session');
  16. /**
  17. * Get session list
  18. */
  19. $joinTables = Database::get_main_table(TABLE_MAIN_SESSION) . ' s INNER JOIN ' .
  20. Database::get_main_table(TABLE_MAIN_SESSION_USER) . ' su ON s.id = su.id_session INNER JOIN ' .
  21. Database::get_main_table(TABLE_MAIN_USER_REL_USER) . ' uu ON su.id_user = uu.user_id INNER JOIN ' .
  22. Database::get_main_table(TABLE_ADVANCED_SUBSCRIPTION_QUEUE) . ' asq ON su.id_session = asq.session_id AND su.id_user = asq.user_id';
  23. $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';
  24. $conditions = array(
  25. 'where' => array(
  26. //'s.date_start >= ?
  27. 'uu.relation_type = ? AND asq.updated_at <= ?' => array(
  28. //api_get_utc_datetime(),
  29. USER_RELATION_TYPE_BOSS,
  30. $weekAgo
  31. )
  32. ),
  33. 'order' => 's.id',
  34. );
  35. $queueList = Database::select($columns, $joinTables, $conditions);
  36. /**
  37. * Remind students
  38. */
  39. $sessionInfoList = array();
  40. foreach ($queueList as $queueItem) {
  41. if (!isset($sessionInfoList[$queueItem['session_id']])) {
  42. $sessionInfoList[$queueItem['session_id']] = api_get_session_info($queueItem['session_id']);
  43. }
  44. }
  45. foreach ($queueList as $queueItem) {
  46. switch ($queueItem['status']) {
  47. case ADVANCED_SUBSCRIPTION_QUEUE_STATUS_START:
  48. // No break
  49. case ADVANCED_SUBSCRIPTION_QUEUE_STATUS_BOSS_APPROVED:
  50. $data = array('sessionId' => $queueItem['session_id']);
  51. $data['session'] = api_get_session_info($queueItem['session_id']);
  52. $data['student'] = api_get_user_info($queueItem['student_id']);
  53. $plugin->sendMail($data, ADVANCED_SUBSCRIPTION_ACTION_REMINDER_STUDENT);
  54. break;
  55. default:
  56. break;
  57. }
  58. }
  59. /**
  60. * Remind superiors
  61. */
  62. // Get recommended number of participants
  63. $sessionRecommendedNumber = array();
  64. foreach ($queueList as $queueItem) {
  65. $row =
  66. $sessionExtraFieldValue->get_values_by_handler_and_field_variable(
  67. $queueItem['session_id'],
  68. 'recommended_number_of_participants'
  69. );
  70. $sessionRecommendedNumber[$queueItem['session_id']] = $row['field_value'];
  71. }
  72. // Group student by superior and session
  73. $queueBySuperior = array();
  74. foreach ($queueList as $queueItem) {
  75. $queueBySuperior[$queueItem['session_id']][$queueItem['superior_id']][$queueItem['student_id']]['status'] = $queueItem['status'];
  76. }
  77. foreach ($queueBySuperior as $sessionId => $superiorStudents) {
  78. $data = array(
  79. 'sessionId' => $sessionId,
  80. 'session' => $sessionInfoList[$sessionId],
  81. 'students' => array(),
  82. );
  83. $dataUrl = array(
  84. 'action' => 'confirm',
  85. 'sessionId' => $sessionId,
  86. 'currentUserId' => 0,
  87. 'newStatus' => ADVANCED_SUBSCRIPTION_QUEUE_STATUS_BOSS_APPROVED,
  88. 'studentUserId' => 0,
  89. 'is_connected' => 0,
  90. 'profile_completed' => 0,
  91. );
  92. foreach ($superiorStudents as $superiorId => $students) {
  93. $data['superior'] = api_get_user_info($superiorId);
  94. // Check if superior has at least one student
  95. if (count($students) > 0) {
  96. foreach ($students as $studentId => $studentInfo) {
  97. if ($studentInfo['status'] != ADVANCED_SUBSCRIPTION_QUEUE_STATUS_START) {
  98. $data['students'][$studentId] = api_get_user_info($studentId);
  99. $dataUrl['studentUserId'] = $studentId;
  100. $dataUrl['newStatus'] = ADVANCED_SUBSCRIPTION_QUEUE_STATUS_BOSS_APPROVED;
  101. $data['students'][$studentId]['acceptUrl'] = $plugin->getQueueUrl($dataUrl);
  102. $dataUrl['newStatus'] = ADVANCED_SUBSCRIPTION_QUEUE_STATUS_BOSS_DISAPPROVED;
  103. $data['students'][$studentId]['rejectUrl'] = $plugin->getQueueUrl($dataUrl);
  104. }
  105. }
  106. if (is_array($data['students']) && count($data['students']) > 0) {
  107. // Check if superior have more than recommended
  108. if ($sessionRecommendedNumber[$sessionId] >= count($students)) {
  109. // Is greater or equal than recommended
  110. $plugin->sendMail($data, ADVANCED_SUBSCRIPTION_ACTION_REMINDER_SUPERIOR);
  111. } else {
  112. // Is less than recommended
  113. $plugin->sendMail($data, ADVANCED_SUBSCRIPTION_ACTION_REMINDER_SUPERIOR_MAX);
  114. }
  115. }
  116. }
  117. }
  118. }
  119. /**
  120. * Remind admins
  121. */
  122. $admins = UserManager::get_all_administrators();
  123. $isWesternNameOrder = api_is_western_name_order();
  124. foreach ($admins as &$admin) {
  125. $admin['complete_name'] = $isWesternNameOrder ?
  126. $admin['firstname'] . ', ' . $admin['lastname'] :
  127. $admin['lastname'] . ', ' . $admin['firstname']
  128. ;
  129. }
  130. unset($admin);
  131. $queueByAdmin = array();
  132. foreach ($queueList as $queueItem) {
  133. if ($queueItem['status'] != ADVANCED_SUBSCRIPTION_QUEUE_STATUS_BOSS_APPROVED) {
  134. $queueByAdmin[$queueItem['session_id']]['students'][$queueItem['student_id']]['user_id'] = $queueItem['student_id'];
  135. }
  136. }
  137. $data = array(
  138. 'admins' => $admins,
  139. );
  140. foreach ($queueByAdmin as $sessionId => $studentInfo) {
  141. $data['sessionId'] = $sessionId;
  142. $data['admin_view_url'] = api_get_path(WEB_PLUGIN_PATH) .
  143. 'advanced_subscription/src/admin_view.php?s=' . $data['sessionId'];
  144. $data['session'] = $sessionInfoList[$sessionId];
  145. $data['students'] = $studentInfo['students'];
  146. $plugin->sendMail($data, ADVANCED_SUBSCRIPTION_ACTION_REMINDER_ADMIN);
  147. }