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. 1125
      main/inc/lib/agenda.lib.php
  7. 2
      main/inc/lib/course.lib.php

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

@ -911,6 +911,7 @@ class ImportCsv
$counter = 1;
$em = Database::getManager();
$eventSentMailList = [];
foreach ($eventsToCreate as $event) {
$update = false;
$item = null;
@ -976,6 +977,86 @@ class ImportCsv
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 = '';
if ($update && isset($item['item_id'])) {
//the event already exists, just update
@ -1250,7 +1331,6 @@ class ImportCsv
break;
case 'drh':
$removeAllSessionsFromUser = true;
if (in_array($userId, $userIdList)) {
$removeAllSessionsFromUser = false;
} else {
@ -1872,9 +1952,7 @@ class ImportCsv
$userCourseData = Database::fetch_array($result, 'ASSOC');
$teacherBackup[$userId][$courseInfo['code']] = $userCourseData;
$sql = "SELECT * FROM ".Database::get_course_table(
TABLE_GROUP_USER
)."
$sql = "SELECT * FROM ".Database::get_course_table(TABLE_GROUP_USER)."
WHERE
user_id = ".$userId." AND
c_id = '".$courseInfo['real_id']."'

@ -15,34 +15,35 @@ class AnnouncementEmail
/**
*
* @param int|array $course
* @param integer $announcement
* @param array $courseInfo
* @param int $sessionId
* @param int $announcementId
*
* @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 int $announcement
* @param array $courseInfo
* @param int $sessionId
* @param int $announcementId
*/
public function __construct($courseId, $announcement)
public function __construct($courseInfo, $sessionId, $announcementId)
{
if (!empty($courseId)) {
$course = api_get_course_info_by_id($courseId);
} else {
$course = api_get_course_info();
if (empty($courseInfo)) {
$courseInfo = api_get_course_info();
}
$this->course = $course;
$this->session_id = api_get_session_id();
if (is_numeric($announcement)) {
$announcement = AnnouncementManager::get_by_id($course['real_id'], $announcement);
$this->course = $courseInfo;
$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()
{
$course_code = $this->course('code');
$courseCode = $this->course('code');
if (empty($this->session_id)) {
$group_id = api_get_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 {
$user_list = GroupManager::get_users($group_id);
$userList = GroupManager::get_users($group_id);
$new_user_list = array();
foreach ($user_list as $user) {
foreach ($userList as $user) {
$new_user_list[] = array('user_id' => $user);
}
$user_list = $new_user_list;
$userList = $new_user_list;
}
} 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;
}
}
return $result;
}
@ -180,16 +185,15 @@ class AnnouncementEmail
$users = self::all_users();
}
//Clean users just in case
$new_list_users = array();
// Clean users just in case
$newListUsers = array();
if (!empty($users)) {
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');
$session_id = $this->session_id;
$courseCode = $this->course('code');
$content = AnnouncementManager::parse_content(
$receiverUserId,
$content,
$this->course('code'),
$courseCode,
$session_id
);
$user_email = $this->sender('mail');
// 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');
$result = "<div>$content</div>";
@ -275,10 +280,10 @@ class AnnouncementEmail
public function attachment()
{
$result = array();
$tbl_announcement_attachment = Database::get_course_table(TABLE_ANNOUNCEMENT_ATTACHMENT);
$table = Database::get_course_table(TABLE_ANNOUNCEMENT_ATTACHMENT);
$id = $this->announcement('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 ";
$rs = Database::query($sql);
$course_path = $this->course('directory');
@ -334,7 +339,7 @@ class AnnouncementEmail
if (!empty($sessionList)) {
foreach ($sessionList as $sessionInfo) {
$sessionId = $sessionInfo['id'];
$message = $this->message(null, $sessionId);
$message = $this->message(null);
$userList = CourseManager::get_user_list_from_course_code(
$this->course['code'],
$sessionId
@ -366,9 +371,14 @@ class AnnouncementEmail
$id = $this->announcement('id');
$course_id = $this->course('id');
$tbl_announcement = Database::get_course_table(TABLE_ANNOUNCEMENT);
$sql = "UPDATE $tbl_announcement SET email_sent=1
WHERE c_id = $course_id AND id=$id AND session_id = {$this->session_id} ";
$table = Database::get_course_table(TABLE_ANNOUNCEMENT);
$sql = "UPDATE $table SET
email_sent = 1
WHERE
c_id = $course_id AND
id = $id AND
session_id = {$this->session_id}
";
Database::query($sql);
}
}

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

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

File diff suppressed because it is too large Load Diff

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

Loading…
Cancel
Save