Пример #1
0
function UACanLinkEdit($pUserId, $raidId, $userId)
{
    $Admin = CSql::userAdmin($userId);
    $RaidModerator = CSql::userModerator($userId, $raidId);
    return $pUserId == $userId || $Admin || $RaidModerator ? 1 : 0;
}
Пример #2
0
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;
}
Пример #3
0
        print "</div>\n";
    }
    mysql_free_result($Result);
    print "</td></tr>\n";
}
// Закончили вывод списка участников
// ============ Новый участник
// Возможность добавлять участников заканчивается вместе с возможностью создавать команды
// Обычный пользователь может добавлять новых участников при редактировании своей команды
// Модератор/Администратор могут создавать новые команды с другим участником вместо себя
//if (($AllowEdit == 1) && CanCreateTeam($Administrator, $Moderator, $OldMmb, $RaidStage, $TeamOutOfRange) &&
//	(($viewmode <> "Add") || $Moderator || $Administrator))
// 21.03.2016 Определяем, когда можно добавлять нового пользователя
// при добавлении команды можно только модераторам или администраторам
// при правке - в зависимости от типа команды
if ($viewmode != 'Add' and CRights::canEditTeam($UserId, $RaidId, $TeamId) or $viewmode == 'Add' and (CSql::userAdmin($UserId) or CSql::userModerator($UserId, $RaidId)) and CSql::raidStage($RaidId) < 7) {
    print '<tr><td class="input" style="padding-top: 10px;">' . "\n";
    // Предупредим команды в зачете о том, что они могут добавлять участников только до закрытия регистрации
    if ($TeamUser and !$TeamOutOfRange) {
        print 'Добавление новых участников в команду разрешено до ' . $RegistrationEnd . ".<br/>\n";
        //print('После этой даты они могут участвовать в ММБ только в виде самостоятельной команды вне зачета.<br/>'."\n");
    }
    print '<input type="text" name="NewTeamUserEmail" size="50" value="Email нового участника" tabindex="' . ++$TabIndex . '"' . CMmbUI::placeholder('Email нового участника') . 'title="Укажите e-mail пользователя, которого Вы хотите добавить в команду. Пользователь может запретить добавлять себя в команду в настройках своей учетной записи.">' . "\n";
    print "</td></tr>\n";
}
// 20/02/2014 Пользовательское соглашение
if ($viewmode == "Add" && $AllowEdit == 1) {
    print '<tr><td class="input" style="padding-top: 10px; font-size: 80%;">' . "\n";
    print '<b>Условия участия (выдержка из <a href="' . $RaidRulesLink . '">положения</a>):</b><br/>' . "\n";
    // Ищем последнее пользовательское соглашение
    $ConfirmFile = trim($MyStoreHttpLink) . CSql::raidFileName(null, 8, true);
Пример #4
0
        print "</div>\n";
    }
    mysql_free_result($Result);
    print "</td></tr>\n";
}
// Закончили вывод списка участников
// ============ Новый участник
// Возможность добавлять участников заканчивается вместе с возможностью создавать команды
// Обычный пользователь может добавлять новых участников при редактировании своей команды
// Модератор/Администратор могут создавать новые команды с другим участником вместо себя
//if (($AllowEdit == 1) && CanCreateTeam($Administrator, $Moderator, $OldMmb, $RaidStage, $TeamOutOfRange) &&
//	(($viewmode <> "Add") || $Moderator || $Administrator))
// 21.03.2016 Определяем, когда можно добавлять нового пользователя
// при добавлении команды можно только можераторам или администраторам
// при правке - в зависимости от типа команды
if ($viewmode != 'Add' and ($TeamId == CSql::userTeamId($UserId, $RaidId) or CSql::userAdmin($UserId) or CSql::userModerator($UserId, $RaidId)) and !CSql::teamOutOfRange($TeamId) and CSql::raidStage($RaidId) < 2 or $viewmode != 'Add' and ($TeamId == CSql::userTeamId($UserId, $RaidId) or CSql::userAdmin($UserId) or CSql::userModerator($UserId, $RaidId)) and CSql::teamOutOfRange($TeamId) and CSql::raidStage($RaidId) < 7 or $viewmode == 'Add' and (CSql::userAdmin($UserId) or CSql::userModerator($UserId, $RaidId)) and CSql::raidStage($RaidId) < 7) {
    print '<tr><td class="input" style="padding-top: 10px;">' . "\n";
    // Предупредим команды в зачете о том, что они могут добавлять участников только до закрытия регистрации
    if ($TeamUser and !$TeamOutOfRange) {
        print 'Добавление новых участников в команду разрешено до ' . $RegistrationEnd . ".<br/>\n";
        print 'После этой даты они могут участвовать в ММБ только в виде самостоятельной команды вне зачета.<br/>' . "\n";
    }
    print '<input type="text" name="NewTeamUserEmail" size="50" value="Email нового участника" tabindex="' . ++$TabIndex . '"' . CMmbUI::placeholder('Email нового участника') . 'title="Укажите e-mail пользователя, которого Вы хотите добавить в команду. Пользователь может запретить добавлять себя в команду в настройках своей учетной записи.">' . "\n";
    print "</td></tr>\n";
}
// 20/02/2014 Пользовательское соглашение
if ($viewmode == "Add" && $AllowEdit == 1) {
    print '<tr><td class="input" style="padding-top: 10px; font-size: 80%;">' . "\n";
    print '<b>Условия участия (выдержка из <a href="' . $RaidRulesLink . '">положения</a>):</b><br/>' . "\n";
    // Ищем последнее пользовательское соглашение
    $sql = "select rf.raidfile_id, rf.raidfile_name\n\t\tfrom RaidFiles rf\n\t\twhere rf.raidfile_hide = 0 and rf.filetype_id = 8\n\t\torder by rf.raid_id DESC, rf.raidfile_id DESC\n\t\tLIMIT 0,1";
Пример #5
0
$SessionId = mmb_validate($_COOKIE, CMmb::CookieName, '');
$OldSessionId = $SessionId;
$RaidId = (int) mmb_validateInt($_REQUEST, 'RaidId', 0);
$TeamId = (int) mmb_validateInt($_REQUEST, 'TeamId', 0);
$DistanceId = (int) mmb_validateInt($_REQUEST, 'DistanceId', 0);
// 21/03/2016  получаем $UserId из сессии.
// эта инициализация сейчас перекрываетвя в GetPrivileges, но есдли в будующем захочется отказаться от GetPrivileges
// то полезно пользователя определять здесь и остальные необходимые операции тоже здесь делать
$UserId = (int) CSql::userId($SessionId);
// обновляем данные сессии (удаляем закрытые, пишем в cookies
UpdateSession($SessionId);
// 27/12/2013 Заменил на сортировку по ключу
// Находим последний ММБ, если ММБ не указан, чтобы определить привелегии
if (empty($RaidId)) {
    //GetPrivileges($SessionId, $RaidId, $TeamId, $UserId, $Administrator, $TeamUser, $Moderator, $OldMmb, $RaidStage, $TeamOutOfRange);
    $orderBy = CSql::userAdmin($UserId) ? 'raid_id' : 'raid_registrationenddate';
    $sql = "select raid_id\n\t\t       from Raids\n\t\t       order by {$orderBy} desc\n\t\t       LIMIT 0,1 ";
    $RaidId = CSql::singleValue($sql, 'raid_id');
}
// Конец определения ММБ
// 21/03/2016 хочется потихоньку перетащить всю существенную часть из GetPrivileges  и убрать этот вызов
GetPrivileges($SessionId, $RaidId, $TeamId, $UserId, $Administrator, $TeamUser, $Moderator, $OldMmb, $RaidStage, $TeamOutOfRange);
// Инициализуем переменные сессии, если они отсутствуют
if (!isset($view)) {
    $view = "";
}
if (!isset($viewsubmode)) {
    $viewsubmode = "";
}
// если action не задан -- угадываем его по параметрам $_GET
if (isset($_REQUEST['action'])) {
Пример #6
0
 public static function canAddToDevelopers($userId, $raidId, $puserId)
 {
     $Super = CSql::userAdmin($userId) || CSql::userModerator($userId, $raidId);
     if (!$Super) {
         return false;
     }
     // проверяем, что не участник
     $sql = "select count(*) as teamuser\n    \t\t\tfrom  TeamUsers tu \n    \t\t\t        inner join Teams t\n    \t\t\t        on t.team_id = tu.team_id\n    \t\t\t        inner join Distances d\n    \t\t\t        on t.distance_id = d.distance_id\n\t    \t\twhere  tu.user_id = {$puserId}\n\t    \t\t       and t.team_hide = 0\n\t    \t\t       and d.raid_id = {$raidId}\n\t    \t\t       and tu.teamuser_hide = 0\n\t    \t\t    \n\t    \t\t";
     $teamuser = CSql::singleValue($sql, 'teamuser', false);
     if ($teamuser) {
         return false;
     }
     // проверяем, что не волонтёр уже
     $sql = "select count(*) as raiddeveloper\n    \t\t\tfrom  RaidDevelopers rd \n\t    \t\twhere  rd.user_id = {$puserId}\n\t    \t\t       and rd.raiddeveloper_hide = 0\n\t    \t\t       and rd.raid_id = {$raidId}\n\t    \t\t";
     $raiddeveloper = CSql::singleValue($sql, 'raiddeveloper', false);
     if ($raiddeveloper) {
         return false;
     }
     return true;
 }
Пример #7
0
Файл: menu.php Проект: se-ti/mmb
/*
echo '-1 ';
echo $UserId;
echo '-2 ';
echo $RaidId;
echo '0 ';
echo !CSql::userTeamId($UserId, $RaidId);
echo '1 ';
echo CSql::userAdmin($UserId);
echo '2 ';
echo CSql::userModerator($UserId, $RaidId);
echo '3 ';
echo CSql::raidStage($RaidId);
echo '4 ';
*/
if ($UserId and $RaidId and (!CSql::userTeamId($UserId, $RaidId) or CSql::userAdmin($UserId) or CSql::userModerator($UserId, $RaidId)) and CSql::raidStage($RaidId) >= 1 and CSql::raidStage($RaidId) < 7) {
    print '<tr><td><a href="javascript:NewTeam();" title="Регистрация новой команды на выбранный выше ММБ">Новая команда</a></td></tr>' . "\r\n";
}
// !! реализовать показ ссылки на свою команду, если она существует !!
if (CSql::userTeamId($UserId, $RaidId)) {
    print '<tr><td><a href="' . $MyPHPScript . '?TeamId=' . CSql::userTeamId($UserId, $RaidId) . '" title="Просмотр карточки Вашей команды">Моя команда</a></td></tr>' . "\r\n";
}
// Команды
print '<tr><td><a href="?RaidId=' . $RaidId . '" title="Список зарегистрированных команд для выбранного выше ММБ">Команды</a></td></tr>' . "\r\n";
// Файлы
print '<tr><td><a href="?files&RaidId=' . $RaidId . '" title="Ссылки на карты, легенды и т.п. для выбранного выше ММБ">Файлы</a></td></tr>' . "\r\n";
// Впечатления
print '<tr><td><a href="?links&RaidId=' . $RaidId . '" title="Список впечатлений для выбранного выше ММБ">Впечатления</a></td></tr>' . "\r\n";
// Ввод/Правка марш-броска
if ($Administrator) {
    print '<tr><td><a href="javascript:NewRaid();" title="Создание марш-броска">Новый марш-бросок</a></td></tr>' . "\r\n";
Пример #8
0
         setViewError('Пользователь запретил добавлять себя в команду другим пользователям.');
         return;
     }
     // Проверка на наличие пользователя в другой команде
     $sql = "select count(*) as result\n\t\t\tfrom TeamUsers tu\n\t\t\t\tinner join Teams t on tu.team_id = t.team_id\n\t\t\t\tinner join Distances d on t.distance_id = d.distance_id\n\t\t\twhere teamuser_hide = 0 and d.raid_id = {$RaidId} and user_id = {$NewUserId}";
     if (CSql::singleValue($sql, 'result') > 0) {
         $NewUserId = 0;
         setViewError('Пользователь с таким email уже включен в другую команду');
         return;
     }
     // 19.05.2013 внёс изменения, чтобы разрешить регистрацию вне зачета
     //
     //if (!CanCreateTeam($Administrator, $Moderator, $OldMmb, $RaidStage, $TeamOutOfRange))
     // Проверка на право добавить нового пользователя пользователя
     // флаг вне зачета не проверяется для добавления команды, так как он устанавливается позже при записи
     if (!($action == 'TeamChangeData' and ($TeamId == CSql::userTeamId($UserId, $RaidId) or CSql::userAdmin($UserId) or CSql::userModerator($UserId, $RaidId)) and !CSql::teamOutOfRange($TeamId) and CSql::raidStage($RaidId) < 2 or $action == 'TeamChangeData' and ($TeamId == CSql::userTeamId($UserId, $RaidId) or CSql::userAdmin($UserId) or CSql::userModerator($UserId, $RaidId)) and CSql::teamOutOfRange($TeamId) and CSql::raidStage($RaidId) < 7 or $action == 'AddTeam' and ($NewUserId == $UserId or CSql::userAdmin($UserId) or CSql::userModerator($UserId, $RaidId)) and CSql::raidStage($RaidId) < 7)) {
         $NewUserId = 0;
         setViewError('Добавление новых участников закрыто');
         return;
     }
 } else {
     // Проверяем, что для новой команды передали email участника
     if ($action == "AddTeam") {
         $NewUserId = 0;
         setViewError('Для новой команды должен быть указан email участника.');
         return;
     }
     $NewUserId = 0;
 }
 // Конец проверки на корректную передачу email
 // 19.05.2013 внёс изменения, чтобы разрешить регистрацию вне зачета