CMmb::setViews('ViewUserData', ''); $pUserId = $_POST['UserId']; $pText = $_POST['MessageText']; if (empty($pText) or trim($pText) == 'Текст сообщения') { CMmb::setError('Укажите текст сообщения.', $view, ''); return; } // echo 'pUserId '.$pUserId.'now '.$NowUserId; // Если вызвали с таким действием, должны быть определны оба пользователя if ($pUserId <= 0 or $UserId <= 0) { return; } $row = CSql::fullUser($pUserId); $UserEmail = $row['user_email']; $UserName = $row['user_name']; CMmb::setShortResult('Сообщение выслано.', ''); $SendMessageUserName = CSql::userName($UserId); $pTextArr = explode('\\r\\n', $pText); $Msg = "Уважаемый пользователь {$UserName}!\r\n" . "Через сайт ММБ пользователь {$SendMessageUserName} отправил Вам следующее сообщение:\r\n\r\n"; foreach ($pTextArr as $NowString) { $Msg .= $NowString . "\r\n"; } // $Msg .= $pText; $Msg .= "\r\nДля ответа необходимо авторизоваться и открыть карточку пользователя {$SendMessageUserName}\r\n" . $MyHttpLink . $MyLocation . "?UserId={$UserId}\r\n"; // Отправляем письмо SendMail(trim($UserEmail), $Msg, $UserName); } elseif ($action == "AddUserInUnion") { // Действие вызывается нажатием кнопки "Запросить слияние" if ($UserId <= 0) { CMmb::setErrorMessage('Пользователь не найден'); return;
$Sql = "select user_id, user_admin from Users where user_hide = 0 and trim(user_email) = trim('{$_GET['Login']}') and user_password = '******'Password'])) . "'"; $Result = MySqlQuery($Sql); $Row = mysql_fetch_assoc($Result); if ($Row['user_id'] <= 0) { print "Autenthication failed"; return; } if ($Row['user_admin'] == 0) { print "Authorization failed"; return; } } // Конец проверки, как именно используем скрипт: из интерфейса или отдельно // Проверяем, что передали идентификатор ММБ if (empty($RaidId)) { CMmb::setShortResult('Не указан ММБ', ''); return; /* $sql = "select raid_id from Raids order by raid_registrationenddate desc LIMIT 0,1 "; $Result = MySqlQuery($sql); $Row = mysql_fetch_assoc($Result); $RaidId = $Row['raid_id']; mysql_free_result($Result); */ } // Сбор данных для дампа $data = array();
function SendMailForAll($raidId, $msgSubject, $msgText, $sendingType) { global $DebugMode; // $debagCond; $SessionId = mmb_validate($_COOKIE, CMmb::CookieName, ''); $UserId = (int) CSql::userId($SessionId); $Admin = (int) CSql::userAdmin($UserId); // тут нужны проверки if ($raidId <= 0) { CMmb::setShortResult('Марш-бросок не найден', ''); return -1; } if (empty($msgSubject) or trim($msgSubject) == 'Тема рассылки') { CMmb::setShortResult('Укажите тему сообщения', ''); return -1; } if (empty($msgText) or trim($msgText) == 'Текст сообщения') { CMmb::setShortResult('Укажите текст сообщения', ''); return -1; } if (empty($sendingType) or $sendingType == 0) { CMmb::setShortResult('Укажите тип рассылки', ''); return -1; } // echo $raidId, $msgSubject, $msgText, $sendingType, $Admin; // рассылать всем может только администратор if (!$Admin) { return -1; } if (isset($DebugMode) and $DebugMode == 1) { $debugCond = " and u.user_admin = 1 "; } else { $debugCond = ""; } if ($sendingType == 1) { // информационное сообщение $sql = " select tu.user_id, u.user_name, u.user_email \n \t\tfrom TeamUsers tu\n \t\t\tinner join Teams t\n \t\t\ton tu.team_id = t.team_id\n \t\t\tinner join Users u\n \t\t\ton tu.user_id = u.user_id\n \t\t\tinner join Distances d\n \t\t\ton t.distance_id = d.distance_id\n \t\twhere d.raid_id = {$raidId}\n \t\t\tand t.team_hide = 0\n \t\t\tand tu.teamuser_hide = 0\n \t\t\t{$debugCond}\n \t\t\tand u.user_allowsendorgmessages = 1\n \t\torder by tu.user_id "; } elseif ($sendingType == 2) { // экстренная рассылка $sql = " select tu.user_id, u.user_name, u.user_email \n \t\tfrom TeamUsers tu\n \t\t\tinner join Teams t\n \t\t\ton tu.team_id = t.team_id\n \t\t\tinner join Users u\n \t\t\ton tu.user_id = u.user_id\n \t\t\tinner join Distances d\n \t\t\ton t.distance_id = d.distance_id\n \t\twhere d.raid_id = {$raidId}\n \t\t\tand t.team_hide = 0\n \t\t\tand tu.teamuser_hide = 0\n \t\t\t{$debugCond}\n \t\torder by tu.user_id "; } elseif ($sendingType == 3) { // информаия об открытии регистрации или общая рассылка по всем пользователям вне ММБ $sql = " select u.user_id, u.user_name, u.user_email \n \t\tfrom Users u\n \t\twhere u.user_hide = 0\n \t\t {$debugCond}\n \t\t and u.user_allowsendorgmessages = 1\n \t\torder by u.user_id "; } elseif ($sendingType == 4) { // рассылка тем, у кого есть приглашения, но чья команда не переведена в зачет $sql = " select tu.user_id, u.user_name, u.user_email \n \t\tfrom TeamUsers tu\n \t\t\tinner join Teams t\n \t\t\ton tu.team_id = t.team_id\n \t\t\tinner join Users u\n \t\t\ton tu.user_id = u.user_id\n \t\t\tinner join Distances d\n \t\t\ton t.distance_id = d.distance_id\n\t\t\t\tinner join Invitations inv\n\t\t\t\ton inv.user_id = inv.user_id\n\t\t\t\tinner join InvitationDeliveries invd\n\t\t\t\ton inv.invitationdelivery_id = invd.invitationdelivery_id\n\t\t\t\t and invd.raid_id = d.raid_id\n\t\t\t\tleft outer join Teams t2\n\t\t\t\ton inv.invitation_id = t2.invitation_id\n\t\t\twhere d.raid_id = {$raidId}\n \t\t\tand t.team_hide = 0\n \t\t\tand tu.teamuser_hide = 0\n \t\t\tand t.team_outofrange = 1\n\t\t\t\tand t.invitation_id is null\t\n\t\t\t\tand t2.team_id is null\n \t\t\t{$debugCond}\n \t\torder by tu.user_id "; // по идее условие на t.invitation_id is null лишнее } elseif ($sendingType == 5) { // рассылка тем, чья команда ожидает приглашения (перед удалением) $sql = " select tu.user_id, u.user_name, u.user_email \n \t\tfrom TeamUsers tu\n \t\t\tinner join Teams t\n \t\t\ton tu.team_id = t.team_id\n \t\t\tinner join Users u\n \t\t\ton tu.user_id = u.user_id\n \t\t\tinner join Distances d\n \t\t\ton t.distance_id = d.distance_id\n \t\twhere d.raid_id = {$raidId}\n \t\t\tand t.team_hide = 0\n \t\t\tand tu.teamuser_hide = 0\n \t\t\tand t.team_outofrange = 1\n\t\t\t\tand t.invitation_id is null \n \t\t\t{$debugCond}\n \t\torder by tu.user_id "; // по идее условие на t.invitation_id is null лишнее } else { $sql = ""; } //echo $sql; $UserResult = MySqlQuery($sql); while ($UserRow = mysql_fetch_assoc($UserResult)) { $UserEmail = $UserRow['user_email']; $UserName = $UserRow['user_name']; $Msg = ''; $pTextArr = explode('\\r\\n', $msgText); foreach ($pTextArr as $NowString) { $Msg .= $NowString . "\r\n"; } $Msg .= " \r\n"; // добавляем комментарий if ($sendingType == 1 or $sendingType == 3) { $Msg .= "\r\n Если Вы не хотите получать информационные письма, то снимите соответствующую отметку в карточке пользователя на сайте ММБ \r\n \r\n"; } //echo $sendingType." ". // Отправляем письмо SendMail(trim($UserEmail), $Msg, $UserName, $msgSubject); } mysql_free_result($UserResult); return 1; }
<?php // +++++++++++ Показ/редактирование данных пользователя +++++++++++++++++++++++ // Выходим, если файл был запрошен напрямую, а не через include if (!isset($MyPHPScript)) { return; } // Выходим, если не администратор и не модератор if (!$Administrator and !$Moderator) { CMmb::setShortResult('Нет прав на экспорт', ''); return; } // Выводим javascrpit ?> <!-- Выводим javascrpit --> <script language = "JavaScript"> function RecalcRaidResults() { document.AdminForm.action.value = "RecalcRaidResults"; document.AdminForm.RaidId.value = document.FindTeamForm.RaidId.value; document.AdminForm.submit(); return true; } function FindRaidErrors() { document.AdminForm.action.value = "FindRaidErrors"; document.AdminForm.RaidId.value = document.FindTeamForm.RaidId.value;
$Msg .= "Вы можете увидеть результат на сайте и при необходимости внести свои изменения.\n\n"; $Msg .= "P.S. Изменения может вносить любой из участников команды, а также модератор ММБ."; // Отправляем письмо SendMail($Row['user_email'], $Msg, $Row['user_name']); } mysql_free_result($Result); } // Конец отправки писем // Если передали альтернативную страницу, на которую переходить (пока только одна возможность - на список команд) if (empty($view)) { $view = "ViewTeamData"; } } elseif ($action == 'FindTeam') { $TeamNum = mmb_validateInt($_REQUEST, 'TeamNum', ''); if ($TeamNum === false) { CMmb::setShortResult('Не указан номер команды', ''); return; } $sql = "select team_id from Teams t\n\t\t\tinner join Distances d on t.distance_id = d.distance_id\n\t\twhere d.raid_id = {$RaidId} and t.team_hide = 0 and t.team_num = " . (int) $TeamNum; $TeamId = CSql::singleValue($sql, 'team_id', false); // Поменялся TeamId, заново определяем права доступа GetPrivileges($SessionId, $RaidId, $TeamId, $UserId, $Administrator, $TeamUser, $Moderator, $OldMmb, $RaidStage, $TeamOutOfRange); if ($TeamId <= 0) { CMmb::setResult('Команда с номером ' . (int) $TeamNum . ' не найдена', ''); return; } $view = "ViewTeamData"; } elseif ($action == 'TeamInfo' or $action == 'TlpInfo' or $action == 'AddTlp' or $action == 'ChangeTlp' or $action == 'HideTlp') { if ($TeamId <= 0) { CMmb::setErrorMessage('Id команды не указан'); return;
CMmb::setShortResult('Рейтинг пересчитан', 'ViewAdminDataPage'); } elseif ($action == 'DeleteOutOfRangeTeams') { CMmb::setViews('ViewAdminDataPage', ''); if ($RaidId <= 0) { CMmb::setError('Марш-бросок не найден.', $view, ''); return; } // проверяем if (!CRights::canDeleteOutOfRangeTeams($UserId, $RaidId)) { CMmb::setError('Невозможно удалить команды вне зачета.', $view, ''); return; } $sql = "UPDATE Teams t INNER JOIN Distances d on t.distance_id = d.distance_id \n\t\tSET t.team_hide = 1 \n\t\tWHERE d.raid_id = {$RaidId} and t.team_outofrange = 1\n\t\t"; //echo $sql; MySqlQuery($sql); CMmb::setShortResult('Команды вне зачета удалены', ''); //CMmb::setResult('', "ViewAdminDataPage", ""); return; } else { } } // Сохранение флага ошибки в базе // функция больше не используется function LogError($teamlevel_id, $error) { $sql = "update TeamLevels set error_id = {$error} where teamlevel_id = {$teamlevel_id}"; $Result = MySqlQuery($sql); return $error; } // Проверка конкретной команды // функция больше не используется
} if (empty($pSendType) or $pSendType == 0) { CMmb::setError('Укажите тип рассылки.', $view, ''); return; } $Result = 0; $Result = SendMailForAll($RaidId, $pSubject, $pText, $pSendType); if ($Result == 1) { CMmb::setShortResult('Рассылка запущена', 'ViewAdminDataPage'); } else { CMmb::setError('Ошибка при отправке рассылки.', $view, ''); return; } } elseif ($action == 'RaidTeamUsersExport') { if ($RaidId <= 0) { CMmb::setShortResult('Марш-бросок не найден', ''); return; } // рассылать всем может только администратор if (!$Administrator) { return; } CMmb::setViews('ViewAdminDataPage', ''); $Sql = "select u.user_name, user_birthyear, \n\t\t\tCOALESCE(u.user_city, '') as user_city,\n\t\t\tCOALESCE(u.user_phone, '') as user_phone,\n\t\t t.team_num, t.team_name, t.team_outofrange \n\t\tfrom Teams t \n\t\t\tinner join Distances d on t.distance_id = d.distance_id\n\t\t\tinner join TeamUsers tu on tu.team_id = t.team_id\n\t\t\tinner join Users u on tu.user_id = u.user_id\n\t\twhere t.team_hide = 0 \n\t\t\tand tu.teamuser_hide = 0\n\t\t\tand d.raid_id = {$RaidId}\n\t\torder by user_name\n\t\t"; $Result = MySqlQuery($Sql); // Заголовки, чтобы скачивать можно было и на мобильных устройствах просто браузером (который не умеет делать Save as...) header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=raidteamusers.csv'); // create a file pointer connected to the output stream $output = fopen('php://output', 'w'); while ($Row = mysql_fetch_assoc($Result)) {