function GetPrivileges($SessionId, &$RaidId, &$TeamId, &$UserId, &$Administrator, &$TeamUser, &$Moderator, &$OldMmb, &$RaidStage, &$TeamOutOfRange) { // Инициализируем переменные самым низким уровнем доступа $UserId = 0; $Administrator = 0; $TeamUser = 0; $Moderator = 0; $OldMmb = 0; $RaidStage = 0; $TeamOutOfRange = 0; $UserId = GetSession($SessionId); // Проверяем, не является ли пользователь администратором if ($UserId > 0) { $sql = "select user_admin from Users where user_hide = 0 and user_id = {$UserId}"; $Result = MySqlQuery($sql); if (!$Result) { return; } $Row = mysql_fetch_assoc($Result); $Administrator = $Row['user_admin']; mysql_free_result($Result); } // Контролируем, что команда есть в базе if ($TeamId > 0) { $sql = "select team_id, COALESCE(team_outofrange, 0) as team_outofrange from Teams where team_id = {$TeamId}"; $Result = MySqlQuery($sql); $Row = mysql_fetch_assoc($Result); if (mysql_num_rows($Result) == 0) { $TeamId = 0; } $TeamOutOfRange = $Row['team_outofrange']; mysql_free_result($Result); } // Если ($TeamId == 0) && ($RaidId != 0), то сделать $TeamId равным команде пользователя, если он участвует в RaidId // !! реализовать алгоритм !! // Проверяем, является ли пользователь членом команды if ($UserId > 0 && $TeamId > 0) { $sql = "select CASE WHEN count(*) > 0 THEN 1 ELSE 0 END as userinteam\n\t\t\t\tfrom TeamUsers tu\n\t\t\twhere teamuser_hide = 0 and team_id = {$TeamId} and user_id = {$UserId}"; $TeamUser = CSql::singleValue($sql, 'userinteam'); } // Если известна команда, то все дальнейшие действия проводим с тем ММБ, // в который записана команда if ($TeamId > 0) { $sql = "select raid_id from Distances d\n\t\t\t\tinner join Teams t on t.distance_id = d.distance_id\n\t\t\twhere t.team_id = {$TeamId}"; $RaidId = (int) CSql::singleValue($sql, 'raid_id'); } // Контролируем, что маршбросок существует в базе if ($RaidId > 0) { $sql = "select raid_id from Raids where raid_id = {$RaidId}"; if (CSql::rowCount($sql) == 0) { $RaidId = 0; } } // Если неизвестен маршбросок // то модератор и период маршброска считаются по умолчанию if ($RaidId <= 0) { return; } // Проверяем, является ли пользователь модератором марш-броска if ($UserId > 0) { $sql = "select CASE WHEN count(*) > 0 THEN 1 ELSE 0 END as user_moderator\n\t\t\tfrom RaidModerators\n\t\t\twhere raidmoderator_hide = 0 and raid_id = {$RaidId} and user_id = {$UserId}"; $Moderator = CSql::singleValue($sql, 'user_moderator'); } // 2015-10-24 Отключаем проверку на старые ммб - всё уже в базе // Определяем, проводился ли марш-бросок до 2012 года //$sql = "select CASE WHEN raid_registrationenddate is not null and YEAR(raid_registrationenddate) <= 2011 // THEN 1 // ELSE 0 // END as oldmmb // from Raids where raid_id = $RaidId"; // //$OldMmb = CSql::singleValue($sql, 'oldmmb'); // 20/03/2016 ДОбавил фильтрацию точек с нулеым или NULL мимнимальным и максимальным временем точки, так как для обычных // КП это время решили не вносить // 21/11/2013 Добавил RaidStage (финиш закрыт, но нельзя показывать результаты и сместил 6 на 7) // 30.10.2013 Для трёхдневного ММБ изменил INTERVAL 12 на INTERVAL 24 // RaidStage указывает на то, на какой временной стадии находится ммб // 0 - raid_registrationenddate IS NULL, марш-бросок не показывать // 1 - raid_registrationenddate еще не наступил // 2 - raid_registrationenddate наступил, но удалять участников еще можно // 3 - удалять участников уже нельзя, но первый этап не стартовал // 4 - первый этап стартовал, финиш еще не закрылся // 5 - финиш закрылся, но результаты нельзя показывать // 6 - результаты можно показывать, но raid_closedate не наступил или Is NULL // 7 - raid_closedate наступил $sql = "select\n\t\tCASE\n\t\t\tWHEN r.raid_registrationenddate IS NULL THEN 0\n\t\t\tWHEN r.raid_registrationenddate >= DATE(NOW()) THEN 1\n\t\t\tELSE 2\n\t\tEND as registration,\n\t\t(select count(*) from LevelPoints lp\n\t\t\tinner join Distances d on lp.distance_id = d.distance_id\n\t\t\twhere (d.raid_id = r.raid_id) and (NOW() >= DATE_SUB(lp.levelpoint_mindatetime, INTERVAL COALESCE(r.raid_readonlyhoursbeforestart, 8) HOUR))\n\t\t\t\tand COALESCE(lp.levelpoint_mindatetime, 0) > 0\t\t\t\n\t\t)\n\t\tas cantdelete,\n\t\t(select count(*) from LevelPoints lp\n\t\t\tinner join Distances d on lp.distance_id = d.distance_id\n\t\t\twhere (d.raid_id = r.raid_id) and (NOW() >= lp.levelpoint_mindatetime)\n\t\t\t\tand COALESCE(lp.levelpoint_mindatetime, 0) > 0\t\t\t\n\n\t\t)\n\t\tas started,\n\t\t(select count(*) from LevelPoints lp\n\t\t\tinner join Distances d on lp.distance_id = d.distance_id\n\t\t\twhere (d.raid_id = r.raid_id) and (NOW() < lp.levelpoint_maxdatetime)\n\t\t\t\tand COALESCE(lp.levelpoint_maxdatetime, 0) > 0\t\t\t\n\t\t)\n\t\tas notfinished,\n\t\tCASE\n\t\t\tWHEN (r.raid_closedate IS NULL) OR (r.raid_closedate >= DATE(NOW())) THEN 0\n\t\t\tELSE 1\n\t\tEND as closed,\n\t\tCOALESCE(r.raid_noshowresult, 0) as noshowresult\n\t\tfrom Raids r where r.raid_id={$RaidId}"; $Row = CSql::singleRow($sql); if ($Row['registration'] == 0) { $RaidStage = 0; } elseif ($Row['registration'] == 1) { $RaidStage = 1; } else { if ($Row['cantdelete'] == 0) { $RaidStage = 2; } elseif ($Row['started'] == 0) { $RaidStage = 3; } elseif ($Row['notfinished'] > 0) { $RaidStage = 4; } else { if ($Row['closed'] == 0) { if ($Row['noshowresult'] == 1) { $RaidStage = 5; } else { $RaidStage = 6; } } else { $RaidStage = 7; } } } // Если команда не определена, а регистрация закончена, то команда вне зачета if ($RaidStage >= 2 && empty($TeamId) && $TeamOutOfRange == 0) { $TeamOutOfRange = 1; } // Если команда не определена, и регистрация не закончена, то нужно проверить лимит if ($RaidStage < 2 && empty($TeamId) && $TeamOutOfRange == 0) { // Если достигнут лимит или есть команды в списке ожидания, то "вне зачета" if (IsOutOfRaidLimit($RaidId) == 1 or FindFirstTeamInWaitList($RaidId) > 0) { $TeamOutOfRange = 1; } } // Конец проверки на лимиты }
while ($Row = mysql_fetch_assoc($Result)) { // Формируем сообщение $Msg = "Уважаемый участник " . $Row['user_name'] . "!\n\nВаша команда (N " . $Row['team_num'] . ", Дистанция: " . trim($Row['distance_name']) . ", ММБ: " . trim($Row['raid_name']) . ") была удалена.\nАвтор изменений: " . $ChangeDataUserName . ".\n\n\nP.S. Изменения может вносить любой из участников команды, а также модератор ММБ."; // Отправляем письмо SendMail($Row['user_email'], $Msg, $Row['user_name']); } mysql_free_result($Result); // 04.2016 вернул обновление // 21/03/2016 заменил на удаление //$sql = "delete from TeamUsers where team_id = $TeamId"; $sql = "update TeamUsers set teamuser_hide = 1, teamuser_changedt = NOW() where team_id = {$TeamId}"; $rs = MySqlQuery($sql); $sql = "update Teams set team_hide = 1 where team_id = {$TeamId}"; $rs = MySqlQuery($sql); // Ищем первую команду в листе ожидания $WaitTeamId = FindFirstTeamInWaitList($RaidId); $RaidOutOffLimit = IsOutOfRaidLimit($RaidId); if ($RaidOutOffLimit == 0 and $WaitTeamId > 0 and $RaidStage == 1) { $sql = "update Teams set team_outofrange = 0, team_waitdt = NULL where team_id = {$WaitTeamId}"; $rs = MySqlQuery($sql); } $view = "ViewRaidTeams"; } elseif ($action == "CancelChangeTeamData") { $view = "ViewTeamData"; } elseif ($action == "ViewRaidTeams") { $view = "ViewRaidTeams"; } elseif ($action == 'JsonExport') { if (!isset($_REQUEST['RaidId'])) { $_REQUEST['RaidId'] = ""; } $RaidId = $_REQUEST['RaidId'];