Add announcement when importing static calendar csv files

See BT#12156
pull/2487/head
jmontoyaa 9 years ago
parent 518476605d
commit 18b8f9a178
  1. 10
      main/announcements/announcements.php
  2. 86
      main/cron/import_csv.php
  3. 82
      main/inc/lib/AnnouncementEmail.php
  4. 57
      main/inc/lib/AnnouncementManager.php
  5. 14
      main/inc/lib/add_course.lib.inc.php
  6. 1015
      main/inc/lib/agenda.lib.php
  7. 2
      main/inc/lib/course.lib.php

@ -505,7 +505,9 @@ switch ($action) {
/* MAIL FUNCTION */ /* MAIL FUNCTION */
if (isset($_POST['email_ann']) && empty($_POST['onlyThoseMails'])) { if (isset($_POST['email_ann']) && empty($_POST['onlyThoseMails'])) {
AnnouncementManager::send_email( AnnouncementManager::sendEmail(
api_get_course_info(),
api_get_session_id(),
$id, $id,
$sendToUsersInSession, $sendToUsersInSession,
isset($data['send_to_hrm_users']) isset($data['send_to_hrm_users'])
@ -529,6 +531,8 @@ switch ($action) {
if (empty($group_id)) { if (empty($group_id)) {
$insert_id = AnnouncementManager::add_announcement( $insert_id = AnnouncementManager::add_announcement(
api_get_course_info(),
api_get_session_id(),
$data['title'], $data['title'],
$data['content'], $data['content'],
$data['users'], $data['users'],
@ -558,7 +562,9 @@ switch ($action) {
/* MAIL FUNCTION */ /* MAIL FUNCTION */
if (isset($data['email_ann']) && $data['email_ann']) { if (isset($data['email_ann']) && $data['email_ann']) {
AnnouncementManager::send_email( AnnouncementManager::sendEmail(
api_get_course_info(),
api_get_session_id(),
$insert_id, $insert_id,
$sendToUsersInSession $sendToUsersInSession
); );

@ -911,6 +911,7 @@ class ImportCsv
$counter = 1; $counter = 1;
$em = Database::getManager(); $em = Database::getManager();
$eventSentMailList = [];
foreach ($eventsToCreate as $event) { foreach ($eventsToCreate as $event) {
$update = false; $update = false;
$item = null; $item = null;
@ -976,6 +977,86 @@ class ImportCsv
continue; continue;
} }
$start = $event['start'];
// Tolerance days see BT#12156#note-16
$days = 5;
// Send
if (api_strtotime($start) + $days * 24*60*60 > time() &&
api_strtotime($start) < time()
) {
$sendMail = true;
} else {
$sendMail = false;
}
$notificationSent = false;
if (isset($eventSentMailList[$courseInfo['real_id']]) && isset($eventSentMailList[$courseInfo['real_id']][$sessionId])) {
$notificationSent = true;
}
// Send announcement to users
if ($sendMail == false && $notificationSent) {
$start = api_get_local_time(
$event['start_date'],
null,
null,
true
);
$end = api_get_local_time(
$event['end_date'],
null,
null,
true
);
if (!empty($end) &&
api_format_date($start, DATE_FORMAT_LONG) ==
api_format_date($end, DATE_FORMAT_LONG)
) {
$date = api_format_date($start, DATE_FORMAT_LONG).' ('.
api_format_date($start, TIME_NO_SEC_FORMAT).' '.
api_format_date($end, TIME_NO_SEC_FORMAT).')';
} else {
$date = api_format_date($start,DATE_TIME_FORMAT_LONG_24H).' - '.
api_format_date($end, DATE_TIME_FORMAT_LONG_24H);
}
$sessionName = '';
if (!empty($event['session_id'])) {
$sessionName = ' ('.api_get_session_name($event['session_id']).')';
}
$courseTitle = $courseInfo['title'].$sessionName;
$emailBody = sprintf(
get_lang('YouHaveBeenSubscribedToCourseXTheStartDateXAndCommentX'),
$courseTitle,
$date,
$event['comment']
);
$subject = get_lang('Reminder');
$announcementId = AnnouncementManager::add_announcement(
$courseInfo,
$event['session_id'],
$subject,
$emailBody,
['everybody']
);
if ($announcementId) {
/*AnnouncementManager::sendEmail(
$courseInfo,
$event['session_id'],
$announcementId,
false
);*/
$eventSentMailList[$courseInfo['real_id']][$event['session_id']] = true;
}
}
$content = ''; $content = '';
if ($update && isset($item['item_id'])) { if ($update && isset($item['item_id'])) {
//the event already exists, just update //the event already exists, just update
@ -1250,7 +1331,6 @@ class ImportCsv
break; break;
case 'drh': case 'drh':
$removeAllSessionsFromUser = true; $removeAllSessionsFromUser = true;
if (in_array($userId, $userIdList)) { if (in_array($userId, $userIdList)) {
$removeAllSessionsFromUser = false; $removeAllSessionsFromUser = false;
} else { } else {
@ -1872,9 +1952,7 @@ class ImportCsv
$userCourseData = Database::fetch_array($result, 'ASSOC'); $userCourseData = Database::fetch_array($result, 'ASSOC');
$teacherBackup[$userId][$courseInfo['code']] = $userCourseData; $teacherBackup[$userId][$courseInfo['code']] = $userCourseData;
$sql = "SELECT * FROM ".Database::get_course_table( $sql = "SELECT * FROM ".Database::get_course_table(TABLE_GROUP_USER)."
TABLE_GROUP_USER
)."
WHERE WHERE
user_id = ".$userId." AND user_id = ".$userId." AND
c_id = '".$courseInfo['real_id']."' c_id = '".$courseInfo['real_id']."'

@ -15,34 +15,35 @@ class AnnouncementEmail
/** /**
* *
* @param int|array $course * @param array $courseInfo
* @param integer $announcement * @param int $sessionId
* @param int $announcementId
* *
* @return AnnouncementEmail * @return AnnouncementEmail
*/ */
public static function create($course, $announcement) public static function create($courseInfo, $sessionId, $announcementId)
{ {
return new self($course, $announcement); return new self($courseInfo, $sessionId, $announcementId);
} }
/** /**
* @param int $courseId * @param array $courseInfo
* @param int $announcement * @param int $sessionId
* @param int $announcementId
*/ */
public function __construct($courseId, $announcement) public function __construct($courseInfo, $sessionId, $announcementId)
{ {
if (!empty($courseId)) { if (empty($courseInfo)) {
$course = api_get_course_info_by_id($courseId); $courseInfo = api_get_course_info();
} else {
$course = api_get_course_info();
} }
$this->course = $course;
$this->session_id = api_get_session_id();
if (is_numeric($announcement)) { $this->course = $courseInfo;
$announcement = AnnouncementManager::get_by_id($course['real_id'], $announcement); $this->session_id = !empty($sessionId) ? (int) $sessionId : api_get_session_id();
if (is_numeric($announcementId)) {
$announcementId = AnnouncementManager::get_by_id($courseInfo['real_id'], $announcementId);
} }
$this->announcement = $announcement; $this->announcement = $announcementId;
} }
/** /**
@ -82,24 +83,27 @@ class AnnouncementEmail
*/ */
public function all_users() public function all_users()
{ {
$course_code = $this->course('code'); $courseCode = $this->course('code');
if (empty($this->session_id)) { if (empty($this->session_id)) {
$group_id = api_get_group_id(); $group_id = api_get_group_id();
if (empty($group_id)) { if (empty($group_id)) {
$user_list = CourseManager::get_user_list_from_course_code($course_code); $userList = CourseManager::get_user_list_from_course_code($courseCode);
} else { } else {
$user_list = GroupManager::get_users($group_id); $userList = GroupManager::get_users($group_id);
$new_user_list = array(); $new_user_list = array();
foreach ($user_list as $user) { foreach ($userList as $user) {
$new_user_list[] = array('user_id' => $user); $new_user_list[] = array('user_id' => $user);
} }
$user_list = $new_user_list; $userList = $new_user_list;
} }
} else { } else {
$user_list = CourseManager::get_user_list_from_course_code($course_code, $this->session_id); $userList = CourseManager::get_user_list_from_course_code(
$courseCode,
$this->session_id
);
} }
return $user_list; return $userList;
} }
/** /**
@ -146,6 +150,7 @@ class AnnouncementEmail
$result['groups'][] = (int) $group_id; $result['groups'][] = (int) $group_id;
} }
} }
return $result; return $result;
} }
@ -180,16 +185,15 @@ class AnnouncementEmail
$users = self::all_users(); $users = self::all_users();
} }
//Clean users just in case // Clean users just in case
$new_list_users = array(); $newListUsers = array();
if (!empty($users)) { if (!empty($users)) {
foreach ($users as $user) { foreach ($users as $user) {
$new_list_users[$user['user_id']] = array('user_id' => $user['user_id']); $newListUsers[$user['user_id']] = ['user_id' => $user['user_id']];
} }
} }
return $new_list_users; return $newListUsers;
} }
/** /**
@ -229,17 +233,18 @@ class AnnouncementEmail
{ {
$content = $this->announcement('content'); $content = $this->announcement('content');
$session_id = $this->session_id; $session_id = $this->session_id;
$courseCode = $this->course('code');
$content = AnnouncementManager::parse_content( $content = AnnouncementManager::parse_content(
$receiverUserId, $receiverUserId,
$content, $content,
$this->course('code'), $courseCode,
$session_id $session_id
); );
$user_email = $this->sender('mail'); $user_email = $this->sender('mail');
// Build the link by hand because api_get_cidreq() doesn't accept course params // Build the link by hand because api_get_cidreq() doesn't accept course params
$course_param = 'cidReq='.api_get_course_id().'&id_session='.$session_id.'&gidReq='.api_get_group_id(); $course_param = 'cidReq='.$courseCode.'&id_session='.$session_id.'&gidReq='.api_get_group_id();
$course_name = $this->course('title'); $course_name = $this->course('title');
$result = "<div>$content</div>"; $result = "<div>$content</div>";
@ -275,10 +280,10 @@ class AnnouncementEmail
public function attachment() public function attachment()
{ {
$result = array(); $result = array();
$tbl_announcement_attachment = Database::get_course_table(TABLE_ANNOUNCEMENT_ATTACHMENT); $table = Database::get_course_table(TABLE_ANNOUNCEMENT_ATTACHMENT);
$id = $this->announcement('id'); $id = $this->announcement('id');
$course_id = $this->course('id'); $course_id = $this->course('id');
$sql = "SELECT * FROM $tbl_announcement_attachment $sql = "SELECT * FROM $table
WHERE c_id = $course_id AND announcement_id = $id "; WHERE c_id = $course_id AND announcement_id = $id ";
$rs = Database::query($sql); $rs = Database::query($sql);
$course_path = $this->course('directory'); $course_path = $this->course('directory');
@ -334,7 +339,7 @@ class AnnouncementEmail
if (!empty($sessionList)) { if (!empty($sessionList)) {
foreach ($sessionList as $sessionInfo) { foreach ($sessionList as $sessionInfo) {
$sessionId = $sessionInfo['id']; $sessionId = $sessionInfo['id'];
$message = $this->message(null, $sessionId); $message = $this->message(null);
$userList = CourseManager::get_user_list_from_course_code( $userList = CourseManager::get_user_list_from_course_code(
$this->course['code'], $this->course['code'],
$sessionId $sessionId
@ -366,9 +371,14 @@ class AnnouncementEmail
$id = $this->announcement('id'); $id = $this->announcement('id');
$course_id = $this->course('id'); $course_id = $this->course('id');
$tbl_announcement = Database::get_course_table(TABLE_ANNOUNCEMENT); $table = Database::get_course_table(TABLE_ANNOUNCEMENT);
$sql = "UPDATE $tbl_announcement SET email_sent=1 $sql = "UPDATE $table SET
WHERE c_id = $course_id AND id=$id AND session_id = {$this->session_id} "; email_sent = 1
WHERE
c_id = $course_id AND
id = $id AND
session_id = {$this->session_id}
";
Database::query($sql); Database::query($sql);
} }
} }

@ -376,12 +376,18 @@ class AnnouncementManager
} }
/** /**
* @param array $courseInfo
*
* @return int * @return int
*/ */
public static function get_last_announcement_order() public static function get_last_announcement_order($courseInfo)
{ {
if (empty($courseInfo)) {
return 0;
}
$tbl_announcement = Database::get_course_table(TABLE_ANNOUNCEMENT); $tbl_announcement = Database::get_course_table(TABLE_ANNOUNCEMENT);
$course_id = api_get_course_int_id();
$course_id = $courseInfo['real_id'];
$sql = "SELECT MAX(display_order) $sql = "SELECT MAX(display_order)
FROM $tbl_announcement FROM $tbl_announcement
WHERE c_id = $course_id "; WHERE c_id = $course_id ";
@ -398,6 +404,8 @@ class AnnouncementManager
/** /**
* Store an announcement in the database (including its attached file if any) * Store an announcement in the database (including its attached file if any)
* @param array $courseInfo
* @param int $sessionId
* @param string $emailTitle Announcement title (pure text) * @param string $emailTitle Announcement title (pure text)
* @param string $newContent Content of the announcement (can be HTML) * @param string $newContent Content of the announcement (can be HTML)
* @param array $sentTo Array of users and groups to send the announcement to * @param array $sentTo Array of users and groups to send the announcement to
@ -408,6 +416,8 @@ class AnnouncementManager
* @return int false on failure, ID of the announcement on success * @return int false on failure, ID of the announcement on success
*/ */
public static function add_announcement( public static function add_announcement(
$courseInfo,
$sessionId,
$emailTitle, $emailTitle,
$newContent, $newContent,
$sentTo, $sentTo,
@ -416,16 +426,20 @@ class AnnouncementManager
$end_date = null, $end_date = null,
$sendToUsersInSession = false $sendToUsersInSession = false
) { ) {
$_course = api_get_course_info(); if (empty($courseInfo)) {
$course_id = api_get_course_int_id(); return false;
}
$course_id = $courseInfo['real_id'];
$tbl_announcement = Database::get_course_table(TABLE_ANNOUNCEMENT); $tbl_announcement = Database::get_course_table(TABLE_ANNOUNCEMENT);
$authorId = api_get_user_id();
if (empty($end_date)) { if (empty($end_date)) {
$end_date = api_get_utc_datetime(); $end_date = api_get_utc_datetime();
} }
$order = self::get_last_announcement_order(); $order = self::get_last_announcement_order($courseInfo);
// store in the table announcement // store in the table announcement
$params = array( $params = array(
@ -434,7 +448,7 @@ class AnnouncementManager
'title' => $emailTitle, 'title' => $emailTitle,
'end_date' => $end_date, 'end_date' => $end_date,
'display_order' => $order, 'display_order' => $order,
'session_id' => api_get_session_id() 'session_id' => (int) $sessionId
); );
$last_id = Database::insert($tbl_announcement, $params); $last_id = Database::insert($tbl_announcement, $params);
@ -454,21 +468,18 @@ class AnnouncementManager
} }
// store in item_property (first the groups, then the users // store in item_property (first the groups, then the users
if (empty($sentTo) || !empty($sentTo) && if (empty($sentTo) || (!empty($sentTo) && isset($sentTo[0]) && $sentTo[0] == 'everyone')) {
isset($sentTo[0]) && $sentTo[0] == 'everyone'
) {
// The message is sent to EVERYONE, so we set the group to 0 // The message is sent to EVERYONE, so we set the group to 0
api_item_property_update( api_item_property_update(
$_course, $courseInfo,
TOOL_ANNOUNCEMENT, TOOL_ANNOUNCEMENT,
$last_id, $last_id,
'AnnouncementAdded', 'AnnouncementAdded',
api_get_user_id(), $authorId,
'0' '0'
); );
} else { } else {
$send_to = CourseManager::separateUsersGroups($sentTo); $send_to = CourseManager::separateUsersGroups($sentTo);
$batchSize = 20; $batchSize = 20;
$em = Database::getManager(); $em = Database::getManager();
// Storing the selected groups // Storing the selected groups
@ -476,11 +487,11 @@ class AnnouncementManager
$counter = 1; $counter = 1;
foreach ($send_to['groups'] as $group) { foreach ($send_to['groups'] as $group) {
api_item_property_update( api_item_property_update(
$_course, $courseInfo,
TOOL_ANNOUNCEMENT, TOOL_ANNOUNCEMENT,
$last_id, $last_id,
"AnnouncementAdded", 'AnnouncementAdded',
api_get_user_id(), $authorId,
$group $group
); );
@ -497,11 +508,11 @@ class AnnouncementManager
$counter = 1; $counter = 1;
foreach ($send_to['users'] as $user) { foreach ($send_to['users'] as $user) {
api_item_property_update( api_item_property_update(
$_course, $courseInfo,
TOOL_ANNOUNCEMENT, TOOL_ANNOUNCEMENT,
$last_id, $last_id,
"AnnouncementAdded", 'AnnouncementAdded',
api_get_user_id(), $authorId,
'', '',
$user $user
); );
@ -547,7 +558,7 @@ class AnnouncementManager
// Database definitions // Database definitions
$tbl_announcement = Database::get_course_table(TABLE_ANNOUNCEMENT); $tbl_announcement = Database::get_course_table(TABLE_ANNOUNCEMENT);
$order = self::get_last_announcement_order(); $order = self::get_last_announcement_order($_course);
$now = api_get_utc_datetime(); $now = api_get_utc_datetime();
$course_id = api_get_course_int_id(); $course_id = api_get_course_int_id();
@ -1243,16 +1254,20 @@ class AnnouncementManager
} }
/** /**
* @param array $courseInfo
* @param int $sessionId
* @param int $id * @param int $id
* @param bool $sendToUsersInSession * @param bool $sendToUsersInSession
* @param bool $sendToDrhUsers * @param bool $sendToDrhUsers
*/ */
public static function send_email( public static function sendEmail(
$courseInfo,
$sessionId,
$id, $id,
$sendToUsersInSession = false, $sendToUsersInSession = false,
$sendToDrhUsers = false $sendToDrhUsers = false
) { ) {
$email = AnnouncementEmail::create(null, $id); $email = AnnouncementEmail::create($courseInfo, $sessionId, $id);
$email->send($sendToUsersInSession, $sendToDrhUsers); $email->send($sendToUsersInSession, $sendToDrhUsers);
} }

@ -426,18 +426,12 @@ class AddCourse
$authorId = empty($authorId) ? api_get_user_id() : (int) $authorId; $authorId = empty($authorId) ? api_get_user_id() : (int) $authorId;
$tbl_course_homepage = Database::get_course_table(TABLE_TOOL_LIST); $tbl_course_homepage = Database::get_course_table(TABLE_TOOL_LIST);
$TABLEGROUPCATEGORIES = Database::get_course_table( $TABLEGROUPCATEGORIES = Database::get_course_table(TABLE_GROUP_CATEGORY);
TABLE_GROUP_CATEGORY
);
$TABLEITEMPROPERTY = Database::get_course_table(TABLE_ITEM_PROPERTY); $TABLEITEMPROPERTY = Database::get_course_table(TABLE_ITEM_PROPERTY);
$TABLETOOLDOCUMENT = Database::get_course_table(TABLE_DOCUMENT); $TABLETOOLDOCUMENT = Database::get_course_table(TABLE_DOCUMENT);
$TABLESETTING = Database::get_course_table(TABLE_COURSE_SETTING); $TABLESETTING = Database::get_course_table(TABLE_COURSE_SETTING);
$TABLEGRADEBOOK = Database::get_main_table( $TABLEGRADEBOOK = Database::get_main_table(TABLE_MAIN_GRADEBOOK_CATEGORY);
TABLE_MAIN_GRADEBOOK_CATEGORY $TABLEGRADEBOOKLINK = Database::get_main_table(TABLE_MAIN_GRADEBOOK_LINK);
);
$TABLEGRADEBOOKLINK = Database::get_main_table(
TABLE_MAIN_GRADEBOOK_LINK
);
$visible_for_all = 1; $visible_for_all = 1;
$visible_for_course_admin = 0; $visible_for_course_admin = 0;
@ -955,6 +949,8 @@ class AddCourse
/* Announcement tool */ /* Announcement tool */
AnnouncementManager::add_announcement( AnnouncementManager::add_announcement(
$courseInfo,
0,
get_lang('AnnouncementExampleTitle'), get_lang('AnnouncementExampleTitle'),
get_lang('AnnouncementEx'), get_lang('AnnouncementEx'),
['everyone' => 'everyone'], ['everyone' => 'everyone'],

File diff suppressed because it is too large Load Diff

@ -5045,6 +5045,8 @@ class CourseManager
* @param bool $deleteTeachersNotInList * @param bool $deleteTeachersNotInList
* @param bool $editTeacherInSessions * @param bool $editTeacherInSessions
* @param bool $deleteSessionTeacherNotInList * @param bool $deleteSessionTeacherNotInList
* @param array $teacherBackup
*
* @return false|null * @return false|null
*/ */
public static function updateTeachers( public static function updateTeachers(

Loading…
Cancel
Save