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
 $pUserId = $_POST['UserId'];
 if ($UserId == $pUserId) {
     CMmb::setErrorMessage('Нельзя сделать слияние с самим собой');
     return;
 }
 // Проверяем, что пользователя нет в слиянии
 $sql = " select userunionlog_id\n\t         from UserUnionLogs \n\t\t where union_status <> 0\n\t\t       and union_status <> 3\n\t\t       and user_id = {$UserId}";
 if (CSql::rowCount($sql) > 0) {
     CMmb::setResult('Пользователь уже есть в слиянии', 'ViewUserUnionPage', '');
     $viewsubmode = "ReturnAfterError";
     return;
 }
 // Проверяем, что пользователь не скрыт
 // здесь можно ещё проверить, что пользователь импортирован или любое другое условие
 $sql = " select user_id \n\t         from Users \n\t\t where user_hide = 0 \n\t\t       and user_id = {$pUserId}";
 if (CSql::rowCount($sql) <= 0) {
     CMmb::setResult('Пользователь скрыт', 'ViewAdminUnionPage');
     $viewsubmode = "ReturnAfterError";
     return;
 }
 $UnionRequestId = 0;
 $Sql = "insert into UserUnionLogs (user_id, userunionlog_dt, \n\t\t         user_parentid, union_status)\n\t\t\t  values ({$UserId}, now(), {$pUserId},  1)";
 $UnionRequestId = MySqlQuery($Sql);
 if ($UnionRequestId) {
     $Row = CSql::fullUser($pUserId);
     $pUserName = $Row['user_name'];
     $pUserEmail = $Row['user_email'];
     $Import = $Row['user_importattempt'];
     // Проверяем, что пользовтельский email не является автогенерированным
     if (substr(trim($pUserEmail), -7) != '@mmb.ru' && !empty($pUserName)) {
         $pRequestUserName = CSql::userName($UserId);
Ejemplo n.º 3
0
    $sql = "select COALESCE(t.team_num, 0) as team_num\n\t\t\tfrom  Teams t\n\t\t\twhere t.team_hide = 0 and t.team_id = {$teamId}";
    $teamNum = (int) CSql::singleValue($sql, 'team_num');
    if ($teamNum) {
        print "<a style=\"font-size:80%; margin-right: 15px;\" href=\"#{$teamNum}\" title=\"Переход к строке Вашей команды\">Моя команда</a>\r\n";
    }
}
$StartLink = CSql::raidFileLink($RaidId, 10, true);
if (!empty($StartLink)) {
    print '<a style="font-size:80%; margin-right: 15px;" href="' . $StartLink . '" title="Информация о месте и порядке старта ММБ" target = "_blank">Старт</a>' . "\r\n";
}
print '<a style="font-size:80%; margin-right: 15px;" href="?links&RaidId=' . $RaidId . '" title="Страница впечатлений: отчеты, фотографии, треки...">Впечатления</a>' . "\r\n";
print '<a style="font-size:80%; margin-right: 15px;" href="?files&RaidId=' . $RaidId . '" title="Все материалы ММБ: положение, карты, легенды...">Материалы</a>' . "\r\n";
print '<a style="font-size:80%; margin-right: 15px;" href="javascript: JsonExport();">Json</a> ' . "\r\n";
// можем / нужно ли показывать карты?
$mapQuery = "select raidfile_name, raidfile_comment\n\t                from RaidFiles\n\t                        where raid_id = {$RaidId} \n\t                        \tand filetype_id = 4 \n\t                        \tand substr(lower(raidfile_name), -4)  in ('.png','.gif','.jpg','jpeg')\n\t                        \tand raidfile_hide = 0\n\t     \t\t\torder by raidfile_id asc";
$canShowMaps = CRights::canShowImages($RaidId) && CSql::rowCount($mapQuery) > 0;
$showMapImages = mmb_validateInt($_GET, 'showMap', '0');
if ($canShowMaps) {
    if ($showMapImages == 1) {
        print '<a style="font-size:80%; margin-right: 15px;" href="?protocol&RaidId=' . $RaidId . '&showMap=0" title="Не отображать карты в протоколе - можно смотреть на странцие материалов">Скрыть карты</a> ' . "\r\n";
    } else {
        print '<a style="font-size:80%; margin-right: 15px;" href="?protocol&RaidId=' . $RaidId . '&showMap=1" title="Отображать карты на этой странице - время загрзуки может заметно вырасти!">Показать карты</a> ' . "\r\n";
    }
}
print '</div>' . "\r\n";
// собственно вывод карт
if ($canShowMaps and $showMapImages) {
    print '<div align="left" style="margin-top:10px; margin-bottom:10px; font-size: 100%;">' . "\r\n";
    $Result = MySqlQuery($mapQuery);
    while ($Row = mysql_fetch_assoc($Result)) {
        $ImageLink = $Row['raidfile_name'];