Ejemplo n.º 1
0
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;
        }
    }
    // Конец проверки на лимиты
}
Ejemplo n.º 2
0
    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'];