/** * This function saves all the invitations of course users and additional users in the database * and sends the invitations by email * * @param array Users array can be both a list of course uids AND a list of additional emailaddresses * @param string Title of the invitation, used as the title of the mail * @param string Text of the invitation, used as the text of the mail. * The text has to contain a **link** string or this will automatically be added to the end * * @author Patrick Cool <*****@*****.**>, Ghent University * @author Julio Montoya - Adding auto-generated link support * @version January 2007 * */ public static function saveInvitations($users_array, $invitation_title, $invitation_text, $reminder = 0, $sendmail = 0, $remindUnAnswered = 0) { if (!is_array($users_array)) { // Should not happen return 0; } // Getting the survey information $survey_data = SurveyManager::get_survey($_GET['survey_id']); $survey_invitations = SurveyUtil::get_invitations($survey_data['survey_code']); $already_invited = SurveyUtil::get_invited_users($survey_data['code']); // Remind unanswered is a special version of remind all reminder $exclude_users = array(); if ($remindUnAnswered == 1) { // Remind only unanswered users $reminder = 1; $exclude_users = SurveyManager::get_people_who_filled_survey($_GET['survey_id']); } $counter = 0; // Nr of invitations "sent" (if sendmail option) $course_id = api_get_course_int_id(); $session_id = api_get_session_id(); $result = CourseManager::separateUsersGroups($users_array); $groupList = $result['groups']; $users_array = $result['users']; foreach ($groupList as $groupId) { $userGroupList = GroupManager::getStudents($groupId); $userGroupIdList = array_column($userGroupList, 'user_id'); $users_array = array_merge($users_array, $userGroupIdList); $params = array('c_id' => $course_id, 'session_id' => $session_id, 'group_id' => $groupId, 'survey_code' => $survey_data['code']); $invitationExists = self::invitationExists($course_id, $session_id, $groupId, $survey_data['code']); if (empty($invitationExists)) { self::save_invitation($params); } } $users_array = array_unique($users_array); foreach ($users_array as $key => $value) { if (!isset($value) || $value == '') { continue; } // Skip user if reminding only unanswered people if (in_array($value, $exclude_users)) { continue; } // Get the unique invitation code if we already have it if ($reminder == 1 && array_key_exists($value, $survey_invitations)) { $invitation_code = $survey_invitations[$value]['invitation_code']; } else { $invitation_code = md5($value . microtime()); } $new_user = false; // User not already invited // Store the invitation if user_id not in $already_invited['course_users'] OR email is not in $already_invited['additional_users'] $addit_users_array = isset($already_invited['additional_users']) && !empty($already_invited['additional_users']) ? explode(';', $already_invited['additional_users']) : array(); $my_alredy_invited = $already_invited['course_users'] == null ? array() : $already_invited['course_users']; if (is_numeric($value) && !in_array($value, $my_alredy_invited) || !is_numeric($value) && !in_array($value, $addit_users_array)) { $new_user = true; if (!array_key_exists($value, $survey_invitations)) { $params = array('c_id' => $course_id, 'session_id' => $session_id, 'user' => $value, 'survey_code' => $survey_data['code'], 'invitation_code' => $invitation_code, 'invitation_date' => api_get_utc_datetime()); self::save_invitation($params); } } // Send the email if checkboxed if (($new_user || $reminder == 1) && $sendmail != 0) { // Make a change for absolute url if (isset($invitation_text)) { $invitation_text = api_html_entity_decode($invitation_text, ENT_QUOTES); $invitation_text = str_replace('src="../../', 'src="' . api_get_path(WEB_PATH), $invitation_text); $invitation_text = trim(stripslashes($invitation_text)); } SurveyUtil::send_invitation_mail($value, $invitation_code, $invitation_title, $invitation_text); $counter++; } } return $counter; // Number of invitations sent }
/** * This function stores the announcement item in the announcement table * and updates the item_property table * * @param int id of the announcement * @param string email * @param string content * @param array users that will receive the announcement * @param mixed attachment * @param string file comment */ public static function edit_announcement($id, $emailTitle, $newContent, $to, $file = array(), $file_comment = '', $sendToUsersInSession = false) { $_course = api_get_course_info(); $course_id = api_get_course_int_id(); $tbl_item_property = Database::get_course_table(TABLE_ITEM_PROPERTY); $tbl_announcement = Database::get_course_table(TABLE_ANNOUNCEMENT); $id = intval($id); $params = ['title' => $emailTitle, 'content' => $newContent]; Database::update($tbl_announcement, $params, ['c_id = ? AND id = ?' => [$course_id, $id]]); // save attachment file $row_attach = self::get_attachment($id); $id_attach = 0; if ($row_attach) { $id_attach = intval($row_attach['id']); } if (!empty($file)) { if (empty($id_attach)) { self::add_announcement_attachment_file($id, $file_comment, $file); } else { self::edit_announcement_attachment_file($id_attach, $file, $file_comment); } } // we remove everything from item_property for this $sql = "DELETE FROM {$tbl_item_property}\n WHERE c_id = {$course_id} AND ref='{$id}' AND tool='announcement'"; Database::query($sql); if ($sendToUsersInSession) { self::addAnnouncementToAllUsersInSessions($id); } // store in item_property (first the groups, then the users if (!is_null($to)) { // !is_null($to): when no user is selected we send it to everyone $send_to = CourseManager::separateUsersGroups($to); // storing the selected groups if (is_array($send_to['groups'])) { foreach ($send_to['groups'] as $group) { api_item_property_update($_course, TOOL_ANNOUNCEMENT, $id, "AnnouncementUpdated", api_get_user_id(), $group); } } // storing the selected users if (is_array($send_to['users'])) { foreach ($send_to['users'] as $user) { api_item_property_update($_course, TOOL_ANNOUNCEMENT, $id, "AnnouncementUpdated", api_get_user_id(), 0, $user); } } } else { // the message is sent to everyone, so we set the group to 0 api_item_property_update($_course, TOOL_ANNOUNCEMENT, $id, "AnnouncementUpdated", api_get_user_id(), '0'); } }