function UACanLinkEdit($pUserId, $raidId, $userId) { $Admin = CSql::userAdmin($userId); $RaidModerator = CSql::userModerator($userId, $raidId); return $pUserId == $userId || $Admin || $RaidModerator ? 1 : 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; }
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);
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";
$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'])) {
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; }
/* 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";
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 внёс изменения, чтобы разрешить регистрацию вне зачета