public static function canDeliveryInvitation($userId, $raidId, $deliveryTypeId) { $Super = CSql::userAdmin($userId) || CSql::userModerator($userId, $raidId); if (!$Super) { return false; } $raidStage = CSql::raidStage($raidId); // по идее можно показывать и с 5, но обычно карты загружают позже // до открытия регистрации (до задания даты окончания регистрации) нельяз выдавать if ($raidStage > 2 or $raidStage < 1) { return false; } if (CSql::availableInvitationsCount($raidId) <= 0) { return false; } // здесь можно делеть ещё проверки на то, что приглашения уже раздавали и что лотерею уже проводили if ($deliveryTypeId == 3) { return true; } elseif ($deliveryTypeId == 1 or $deliveryTypeId == 2) { return $raidStage == 1; } else { return false; } return false; }
onclick = "javascript: RaidUserRankRecalc();" tabindex = "' . ++$TabIndex . '"></td></tr>' . "\r\n"; if (CRights::canDeliveryInvitation($UserId, $RaidId, 1)) { print '<tr><td style = "padding-top: 5px; padding-bottom: 5px;"><input type="button" style = "width:185px;" name="RankInvitations" value="Пригласить по рейтингу" onclick = "javascript: RaidRankInvitations();" tabindex = "' . ++$TabIndex . '">' . "\r\n"; print ' приглашений <input type="text" name="RankInvitationsCount" size="4" maxlength="3" value="0" tabindex="' . ++$TabIndex . '"' . ' title=" приглашений"> не больше: ' . CSql::availableInvitationsCount($RaidId) . "\r\n"; // ============ Дата окончания print ' действуют до (гггг-мм-дд): <input type="text" name="InvitationsEndDate" size="10" value="" tabindex="' . ++$TabIndex . ' title="Дата окончания действия приглашений по рейтингу">' . "\r\n"; print '</td></tr>' . "\r\n"; } if (CRights::canDeliveryInvitation($UserId, $RaidId, 2)) { print '<tr><td style = "padding-top: 5px; padding-bottom: 5px;"><input type="button" style = "width:185px;" name="LottoInvitations" value="Пригласить по лотерее" onclick = "javascript: RaidLottoInvitations();" tabindex = "' . ++$TabIndex . '">' . "\r\n"; print ' приглашений <input type="text" name="LottoInvitationsCount" size="4" maxlength="3" value="0" tabindex="' . ++$TabIndex . '"' . ' title="Число приглашений"> не больше: ' . CSql::availableInvitationsCount($RaidId) . '</td></tr>' . "\r\n"; } if (CRights::canDeleteOutOfRangeTeams($UserId, $RaidId)) { print '<tr><td style = "padding-top: 5px; padding-bottom: 5px;"><input type="button" style = "width:185px;" name="OutOfRangeTeamsDelete" value="Удалить вне зачета" onclick = "javascript: RaidDeleteOutOfRangeTeams();" tabindex = "' . ++$TabIndex . '">' . "\r\n"; } print '<tr><td style = "padding-top: 25px; padding-bottom: 5px;"><input type="button" style = "width:185px;" name="Cardsdump" value="Получить карточки" onclick = "javascript: RaidCardsExport();" tabindex = "' . ++$TabIndex . '"></td></tr>' . "\r\n"; print '<tr><td style = "padding-top: 5px; padding-bottom: 5px;"><input type="button" style = "width:185px;" name="JSONdump" value="Список участников" onclick = "javascript: RaidTeamUsersExport();" tabindex = "' . ++$TabIndex . '"></td></tr>' . "\r\n"; print '<tr><td style = "padding-top: 5px; padding-bottom: 5px;"><input type="button" style = "width:185px;" name="RTUdump" value="Получить дамп" onclick = "javascript: JSON();" tabindex = "' . ++$TabIndex . '"></td></tr>' . "\r\n";
// echo $sql; MySqlQuery($sql); // на всякий случай ещё раз проверяем if (!CRights::canDeliveryInvitation($UserId, $RaidId, 1) or $pInvitationsCount > CSql::availableInvitationsCount($RaidId)) { CMmb::setErrorMessage('Не хватает прав или нет доступных приглашений'); return; } // А вот дальше собственно вставка приглашений на основании лотереи // и их привязка к команде $sql = " CREATE TEMPORARY TABLE\n\t\t\t\ttmp_lottoteams (\n\t\t\t\t num INT NOT NULL AUTO_INCREMENT PRIMARY KEY, \n team_id INT, \n user_id INT\n\t\t\t\t ) \n\t\t\t\tENGINE=MEMORY, AUTO_INCREMENT = 0"; $rs = MySqlQuery($sql); // отбираем в таблицу команды вне зачета с автонумерованной первой колонкой $sql = " INSERT INTO tmp_lottoteams (team_id, user_id)\n\t\t\t select t.team_id, MIN(tu.user_id) as user_id \n \t\t\tfrom Teams t\n \t\t\t\tinner join TeamUsers tu\n\t\t\t\t on t.team_id = tu.team_id\n\t\t\t\t\tinner join Distances d\n\t\t\t\t\ton t.distance_id = d.distance_id\n \t\t\twhere tu.invitationdelivery_id = {$newInvDeliveryId}\n\t\t\t\tgroup by t.team_id\n\t\t\t"; $rs = MySqlQuery($sql); // на всякий случай ещё раз проверяем if (!CRights::canDeliveryInvitation($UserId, $RaidId, 1) or $pInvitationsCount > CSql::availableInvitationsCount($RaidId)) { CMmb::setErrorMessage('Не хватает прав или нет доступных приглашений'); return; } // Если нужны разыне вероятности, то можно добавить стоьлко раз строчку команды, сколько "веса" она должна получить // находим случайно нужное число команд // вставляем приглешния $sql = " insert into Invitations (user_id, invitation_begindt, invitation_enddt, invitationdelivery_id)\n\t\t select user_id, NOW(), NOW(), {$newInvDeliveryId}\n\t\t from tmp_lottoteams\n \t\t ORDER BY RAND()\n\t\t LIMIT {$pInvitationsCount}\n\t\t \t "; // echo $sql; $rs = MySqlQuery($sql); // активируем команды , которые связаны с одной стороны с временой таблицы а через неё с приглашениями $sql = " update Teams t\n\t\t \t inner join tmp_lottoteams tmp\n\t\t\t on t.team_id = tmp.team_id\n\t\t\t inner join Invitations inv\n\t\t\t on inv.user_id = tmp.user_id\n\t\t set t.team_outofrange = 0, t.invitation_id = inv.invitation_id\n\t\t where inv.invitationdelivery_id = {$newInvDeliveryId}\n\t\t"; // echo $sql $rs = MySqlQuery($sql); // $sql = " DELETE FROM tmp_lottoteams "; // $rs = MySqlQuery($sql);