function setUnionError($message) { global $viewmode; // пока так $viewmode = ""; CMmb::setError($message, 'ViewAdminUnionPage', 'ReturnAfterError'); }
$Sql = "select user_id, user_admin from Users where user_hide = 0 and trim(user_email) = trim('{$_GET['Login']}') and user_password = '******'Password'])) . "'"; $Result = MySqlQuery($Sql); $Row = mysql_fetch_assoc($Result); if ($Row['user_id'] <= 0) { print "Autenthication failed"; return; } if ($Row['user_admin'] == 0) { print "Authorization failed"; return; } } // Конец проверки, как именно используем скрипт: из интерфейса или отдельно // Проверяем, что передали идентификатор ММБ if (empty($RaidId)) { CMmb::setShortResult('Не указан ММБ', ''); return; /* $sql = "select raid_id from Raids order by raid_registrationenddate desc LIMIT 0,1 "; $Result = MySqlQuery($sql); $Row = mysql_fetch_assoc($Result); $RaidId = $Row['raid_id']; mysql_free_result($Result); */ } // Сбор данных для дампа $data = array();
} if ($SessionId <= 0) { CMmb::setErrorMessage('Сессия не найдена'); return; } $pUserLinkId = trim($_POST['UserLinkId']); if (!isset($pUserLinkId)) { $pUserLinkId = 0; } if ($pUserLinkId <= 0) { CMmb::setErrorMessage('Ссылка не найдена'); return; } $sql = "select raid_id \n\t from UserLinks \n\t where userlink_id = {$pUserLinkId}\n\t\t "; // echo $sql; $raidId = CSql::singleValue($sql, 'raid_id'); $userId = CSql::userId($SessionId); // Права на редактирование if (!UACanLinkEdit($pUserId, $raidId, $userId)) { return; } // выходим $Sql = "update UserLinks set userlink_hide = 1 where userlink_id = {$pUserLinkId}"; // echo $sql; MySqlQuery($Sql); CMmb::setResult('Впечатление удалено', "ViewUserData", ""); } else { // если никаких действий не требуется // $statustext = "<br/>"; } // print('view = '.$view.' action = '.$action);
// +++++++++++ Показ/редактирование данных команды ++++++++++++++++++++++++++++ // Выходим, если файл был запрошен напрямую, а не через include if (!isset($MyPHPScript)) { return; } if (!isset($viewmode)) { $viewmode = ""; } if (!isset($viewsubmode)) { $viewsubmode = ""; } // ================ Добавляем новую команду =================================== if ($viewmode == 'Add') { if ($RaidId <= 0 || $UserId <= 0) { CMmb::setErrorMessage('Для регистрации новой команды обязателен идентификатор пользователя и ММБ'); return; } // Если запрещено создавать команду - молча выходим, сообщение уже выведено в teamaction.php //if (!CanCreateTeam($Administrator, $Moderator, $OldMmb, $RaidStage, $TeamOutOfRange)) return; if (!CRights::canCreateTeam($UserId, $RaidId)) { return; } $Sql = "select user_email from Users where user_id = {$UserId}"; $UserEmail = CSql::singleValue($Sql, 'user_email'); // Если вернулись после ошибки переменные не нужно инициализировать if ($viewsubmode == "ReturnAfterError") { ReverseClearArrays(); $TeamNum = (int) $_POST['TeamNum']; $TeamName = CMmbUi::toHtml($_POST['TeamName']); $DistanceId = mmb_validateInt($_POST, 'DistanceId');
function RecalcTeamResultFromTeamLevelPoints($raidid, $teamid) { if (empty($teamid) and empty($raidid)) { return; } $teamRaidCondition = !empty($teamid) ? " t.team_id = {$teamid}" : "d.raid_id = {$raidid}"; if (empty($teamid)) { CMmbLogger::enable(0); //CMmbLogger::enable(1); } $tm0 = microtime(true); // Обнуляем данные расчета $sql = " update TeamLevelPoints tlp\n\t\t join Teams t\n\t\t\t on tlp.team_id = t.team_id\n \t\t inner join Distances d\n\t\t\t on t.distance_id = d.distance_id\n\t\t set tlp.teamlevelpoint_penalty = NULL,\n\t\t tlp.teamlevelpoint_duration = NULL,\n\t\t t.team_maxlevelpointorderdone = NULL,\n\t\t t.team_minlevelpointorderwitherror = NULL,\n\t\t t.team_donelevelpoint = NULL,\n\t\t t.team_comment = NULL\n \t\t where {$teamRaidCondition}"; $rs = MySqlQuery($sql); $tm1 = CMmbLogger::addInterval(' 1 ', $tm0); RecalcTeamLevelPointsDuration($raidid, $teamid); $tm2 = CMmbLogger::addInterval(' 2', $tm1); RecalcTeamLevelPointsPenaltyWithDiscount($raidid, $teamid); $tm3 = CMmbLogger::addInterval(' 3', $tm2); RecalcTeamLevelPointsPenaltyWithoutDiscount($raidid, $teamid); $tm4 = CMmbLogger::addInterval(' 4', $tm3); // echo 'RecalcTeamLevelPointsResult '.$raidid.','.$teamid; RecalcTeamLevelPointsResult($raidid, $teamid); $tm5 = CMmbLogger::addInterval(' 5', $tm4); // return; // Находим ключ ММБ, если указана только команда if (empty($raidid)) { $sql = "select d.raid_id\n\t\t\t\tfrom Teams t\n\t\t\t\t\tinner join Distances d\n\t\t\t\t\ton t.distance_id = d.distance_id\n\t\t\t\twhere t.team_id = {$teamid}\n\t\t\t\tLIMIT 0,1"; $raidid = CSql::singleValue($sql, 'raid_id'); } //Ставим ошибки //FindErrors($raidid, $teamid); $tm6 = CMmbLogger::addInterval(' 6', $tm5); // $raidid мог измениться $teamRaidCondition = !empty($teamid) ? "t.team_id = {$teamid}" : "d.raid_id = {$raidid}"; // Результат команды - это результат в максимальной точке // Перевод в секунды нужен для корректной работы MAX $sql = " update Teams t\n\t\t\t\tinner join\n\t\t \t(select tlp.team_id,\n\t\t\t\t\t MAX(COALESCE(lp.levelpoint_order, 0)) as progress,\n\t\t\t\t\t\t\tMAX(t.distance_id) as distance_id,\n\t\t\t\t\t MAX(TIME_TO_SEC(COALESCE(tlp.teamlevelpoint_result, 0))) as secresult\n\t\t\t\t\t from TeamLevelPoints tlp\n\t\t\t\t\t inner join Teams t\n\t\t\t\t\t on tlp.team_id = t.team_id\n\t\t\t\t\t inner join Distances d\n\t\t\t\t\t on t.distance_id = d.distance_id\n\t\t\t\t\t inner join LevelPoints lp\n\t\t\t\t\t on tlp.levelpoint_id = lp.levelpoint_id\n\t\t\t\t\t where {$teamRaidCondition}\n\t\t\t\t\t group by tlp.team_id\n\t\t\t\t\t) a\n\t\t \t\ton t.team_id = a.team_id\n\t\t \t\tinner join\n\t\t\t\t\t(select lp.distance_id,\n\t\t\t\t\t MAX(lp.levelpoint_order) as maxlporder\n\t\t\t\t\tfrom LevelPoints lp\n\t\t\t\t\tgroup by lp.distance_id\n\t\t\t\t\t) b\n\t\t\t \ton a.distance_id = b.distance_id\n \t set team_result = CASE WHEN b.maxlporder = COALESCE(a.progress, 0) THEN SEC_TO_TIME(COALESCE(a.secresult, 0)) ELSE NULL END\n\t\t\t\t, team_maxlevelpointorderdone = COALESCE(a.progress, 0) "; // echo $sql; $rs = MySqlQuery($sql); $tm7 = CMmbLogger::addInterval(' 7', $tm6); // теперь можно посчитать рейтинг RecalcTeamUsersRank($raidid); $tm8 = CMmbLogger::addInterval(' 8', $tm7); // // Находим минимальную точку с ошибкой (COALESCE(tlp.error_id, 0) > 0) // < 0 - это не ошибка - предупреждение $sql = " update Teams t\n\t\t\t\t inner join\n\t \t\t \t(select tlp.team_id,\n\t\t\t\t\t MIN(COALESCE(lp.levelpoint_order, 0)) as error\n\t\t\t\t\t\tfrom TeamLevelPoints tlp\n\t\t\t\t\t\t\t\tinner join Teams t\n\t\t\t\t\t\t\t on tlp.team_id = t.team_id\n\t\t\t \t\t\t\tinner join Distances d\n\t\t\t \t\t\t\ton t.distance_id = d.distance_id\n\t\t\t \t\t\t\tinner join LevelPoints lp\n\t\t\t \t\t\t\ton tlp.levelpoint_id = lp.levelpoint_id\n\t\t\t\t\t\twhere COALESCE(tlp.error_id, 0) > 0\n\t\t \t\t\tand {$teamRaidCondition}\n\t\t\t\t\t\tgroup by tlp.team_id\n\t\t\t\t\t\t) a\n\t\t \t\t\ton t.team_id = a.team_id\n \tset team_minlevelpointorderwitherror = COALESCE(a.error, 0)"; // echo $sql; $rs = MySqlQuery($sql); $tm9 = CMmbLogger::addInterval(' 9', $tm8); // Находим невзятые КП // расчет закомментирован, так ка Сергей строит список другим способом /* $sql = " update Teams t inner join (select t.team_id, GROUP_CONCAT(lp.levelpoint_name ORDER BY lp.levelpoint_order, ' ') as skippedlevelpoint from Teams t inner join Distances d on t.distance_id = d.distance_id join LevelPoints lp on t.distance_id = lp.distance_id and COALESCE(t.team_maxlevelpointorderdone, 0) >= lp.levelpoint_order left outer join TeamLevelPoints tlp on lp.levelpoint_id = tlp.levelpoint_id and t.team_id = tlp.team_id where tlp.levelpoint_id is NULL and d.distance_hide = 0 and t.team_hide = 0 and $teamRaidCondition group by t.team_id ) a on t.team_id = a.team_id set team_skippedlevelpoint = COALESCE(a.skippedlevelpoint, '')"; // echo $sql; $rs = MySqlQuery($sql);*/ // Обновляем комментарий у команды $sql = " update Teams t\n inner join\n (select tlp.team_id \n\t\t\t\t\t\t,group_concat(COALESCE(teamlevelpoint_comment, '')) as team_comment\n\t\t\t\t from TeamLevelPoints tlp\n\t\t\t\t\t\t\tleft outer join Errors err\n\t\t\t\t\t\t\ton tlp.error_id = err.error_id\n\t\t\t\t\t\t inner join Teams t\n\t\t\t\t\t\t on t.team_id = tlp.team_id\n\t\t\t\t\t\t inner join Distances d\n\t\t\t \t\t\ton t.distance_id = d.distance_id\n where COALESCE(tlp.teamlevelpoint_comment, '') <> ''\n and {$teamRaidCondition}\n group by tlp.team_id\n ) a\n\t\t \t\ton t.team_id = a.team_id\n\t\t set t.team_comment = a.team_comment"; // echo $sql; $rs = MySqlQuery($sql); $tm10 = CMmbLogger::addInterval(' 10', $tm9); //Теперь в это поле добавляем ошибки tlp.error_id > 0 $sql = " update Teams t\n inner join\n (select tlp.team_id \n\t\t\t\t\t\t,group_concat(COALESCE(error_name, '')) as team_error\n\t\t\t\t\t\tfrom TeamLevelPoints tlp\n\t\t\t\t\t\t\t\tleft outer join Errors err\n\t\t\t\t\t\t\t\ton tlp.error_id = err.error_id\n\t\t\t\t\t\t\t inner join Teams t\n\t\t\t\t\t\t\t on t.team_id = tlp.team_id\n\t\t\t\t\t\t\t inner join Distances d\n\t\t\t\t\t\t\t on t.distance_id = d.distance_id\n\t\t\t\t\t\twhere COALESCE(tlp.error_id, 0) > 0\n\t\t and {$teamRaidCondition}\n\t\t\t\t\t\tgroup by tlp.team_id\n ) a\n\t\t \t\ton t.team_id = a.team_id\n\t\t set t.team_comment = CASE WHEN a.team_error <> '' THEN CONCAT('Ошибки: ', a.team_error, '; ', COALESCE(t.team_comment, '')) ELSE t.team_comment END"; // echo $sql; $rs = MySqlQuery($sql); $tm11 = CMmbLogger::addInterval(' 11', $tm10); //Теперь в это поле добавляем предупреждения tlp.error_id < 0 $sql = " update Teams t\n inner join\n (select tlp.team_id \n\t\t\t\t\t\t,group_concat(COALESCE(error_name, '')) as team_error\n\t\t\t\t\t\tfrom TeamLevelPoints tlp\n\t\t\t\t\t\t\t\tleft outer join Errors err\n\t\t\t\t\t\t\t\ton tlp.error_id = err.error_id\n\t\t\t\t\t\t\t inner join Teams t\n\t\t\t\t\t\t\t on t.team_id = tlp.team_id\n\t\t\t\t\t\t\t inner join Distances d\n\t\t\t\t\t\t\t on t.distance_id = d.distance_id\n\t\t\t\t\t\twhere COALESCE(tlp.error_id, 0) < 0\n\t\t and {$teamRaidCondition}\n\t\t\t\t\t\tgroup by tlp.team_id\n ) a\n\t\t \t\ton t.team_id = a.team_id\n\t\t set t.team_comment = CASE WHEN a.team_error <> '' THEN CONCAT('Предупреждения: ', a.team_error, '; ', COALESCE(t.team_comment, '')) ELSE t.team_comment END"; // echo $sql; $rs = MySqlQuery($sql); $tm12 = CMmbLogger::addInterval(' 12', $tm11); //Теперь в это поле добавляем предупреждения tlp.error_id < 0 $sql = " update Teams t\n inner join\n (select tlp.team_id \n\t\t\t\t\t\t,group_concat(COALESCE(error_name, '')) as team_error\n\t\t\t\t\t\tfrom TeamLevelPoints tlp\n\t\t\t\t\t\t\t\tleft outer join Errors err\n\t\t\t\t\t\t\t\ton tlp.error_id = err.error_id\n\t\t\t\t\t\t\t inner join Teams t\n\t\t\t\t\t\t\t on t.team_id = tlp.team_id\n\t\t\t\t\t\t\t inner join Distances d\n\t\t\t\t\t\t\t on t.distance_id = d.distance_id\n\t\t\t\t\t\twhere COALESCE(tlp.error_id, 0) < 0\n\t\t and {$teamRaidCondition}\n\t\t\t\t\t\tgroup by tlp.team_id\n ) a\n\t\t \t\ton t.team_id = a.team_id\n\t\t set t.team_comment = CASE WHEN a.team_error <> '' THEN CONCAT('Предупреждения: ', a.team_error, '; ', COALESCE(t.team_comment, '')) ELSE t.team_comment END"; // echo $sql; $rs = MySqlQuery($sql); $tm13 = CMmbLogger::addInterval(' 13', $tm12); //считаем (только для интерфейса список вщзятых КП $sql = " update Teams t\n inner join\n (select tlp.team_id \n\t\t\t,group_concat(DATE_FORMAT(COALESCE(tlp.teamlevelpoint_datetime, ''),'%H:%i') order by teamlevelpoint_datetime separator ', ') as team_donelevelpoint\n\t\t\t\t\t\tfrom TeamLevelPoints tlp\n\t\t\t\t\t\t\t inner join Teams t\n\t\t\t\t\t\t\t on t.team_id = tlp.team_id\n\t\t\t\t\t\t\t inner join Distances d\n\t\t\t\t\t\t\t on t.distance_id = d.distance_id\n\t\t\t\t\t\twhere COALESCE(tlp.teamlevelpoint_datetime, 0) > 0\n\t\t and {$teamRaidCondition}\n\t\t\t\t\t\tgroup by tlp.team_id\n ) a\n\t\t \t\ton t.team_id = a.team_id\n\t\t set t.team_donelevelpoint = a.team_donelevelpoint "; // echo $sql; $rs = MySqlQuery($sql); $tm14 = CMmbLogger::addInterval(' 14', $tm13); // теперь можно посчитать рейтинг RecalcUsersRank($raidid); $tm14 = CMmbLogger::addInterval(' 15', $tm13); $msg = CMmbLogger::getText(); //CMmb::setShortResult($msg, ''); CMmb::setMessage($msg); }
<?php // +++++++++++ Показ/редактирование данных пользователя +++++++++++++++++++++++ // Выходим, если файл был запрошен напрямую, а не через include if (!isset($MyPHPScript)) { return; } // Выходим, если не администратор и не модератор if (!$Administrator and !$Moderator) { CMmb::setShortResult('Нет прав на экспорт', ''); return; } // Выводим javascrpit ?> <!-- Выводим javascrpit --> <script language = "JavaScript"> function RecalcRaidResults() { document.AdminForm.action.value = "RecalcRaidResults"; document.AdminForm.RaidId.value = document.FindTeamForm.RaidId.value; document.AdminForm.submit(); return true; } function FindRaidErrors() { document.AdminForm.action.value = "FindRaidErrors"; document.AdminForm.RaidId.value = document.FindTeamForm.RaidId.value;
for ($inv_type = 1; $inv_type <= 3; $inv_type++) { $sql = "SELECT COUNT(*) AS invited_count FROM\n\t\t\t(SELECT DISTINCT t.team_id FROM Teams t\n\t\t\t\tINNER JOIN Invitations inv ON inv.invitation_id = t.invitation_id\n\t\t\t\tINNER JOIN TeamUsers tu ON tu.team_id = t.team_id AND tu.teamuser_hide = 0\n\t\t\t\tINNER JOIN InvitationDeliveries invd ON invd.invitationdelivery_id = inv.invitationdelivery_id\n\t\t\t\tWHERE {$DistanceTeams} AND invd.invitationdelivery_type = {$inv_type}) AS TeamsInvited"; $invited[$inv_type] = CSql::singleValue($sql, 'invited_count'); } // отдельно считаем количество команд, приглашенных по рейтингу своими участниками $sql = "SELECT COUNT(*) AS invited_count FROM\n\t\t(SELECT DISTINCT t.team_id FROM Teams t\n\t\t\tINNER JOIN Invitations inv ON inv.invitation_id = t.invitation_id\n\t\t\tINNER JOIN TeamUsers tu ON tu.team_id = t.team_id AND tu.teamuser_hide = 0\n\t\t\tINNER JOIN InvitationDeliveries invd ON invd.invitationdelivery_id = inv.invitationdelivery_id\n\t\t\tWHERE {$DistanceTeams} AND invd.invitationdelivery_type = 1 AND tu.user_id = inv.user_id) AS TeamsInvited"; $invited_self = CSql::singleValue($sql, 'invited_count'); // выводим статистику print " <td colspan={$colspan}>Участвует команд <span title=\"всего команд с приглашениями\">{$teamInRangeCount}</span> " . "(<span title=\"пригласившие сами себя\">{$invited_self}</span>" . "/<span title=\"приглашенные другими участниками\">" . ($invited[1] - $invited_self) . "</span>" . "/<span title=\"выгравшие в лотерею\">" . $invited[2] . "</span>" . "/<span title=\"с приглашениями, выданными вручную\">" . $invited[3] . "</span>), "; print "ожидают приглашения <span title=\"всего команд без приглашений\">{$teamOutOfRangeCount}</span>, "; print "участников <span title=\"в приглашенных командах\">{$teamUserInRangeCount}</span>/<span title=\"в командах, ожидающих приглашение\">{$teamUserOutOfRangeCount}</span>, "; print "карт <span title=\"в приглашенных командах\">{$mapsInRangeCount}</span>/<span title=\"в командах, ожидающих приглашение\">{$mapsOutOfRangeCount}</span></td>\n</tr>\n"; } // Проверяем, что передали идентификатор ММБ if ($RaidId <= 0) { CMmb::setMessage('Не указан ММБ'); return; } ?> <form name = "RaidTeamsForm" action = "<?php echo $MyPHPScript; ?> " method = "post"> <input type = "hidden" name = "action" value = "ViewRaidTeams"> <input type = "hidden" name = "TeamId" value = "0"> <input type = "hidden" name = "UserId" value = "0"> <input type = "hidden" name = "RaidId" value = "<?php echo $RaidId; ?> ">
function teamEditError($error) { global $view, $viewmode; CMmb::setError($error, $view, 'ReturnAfterErrorTlp'); $viewmode = "EditTlp"; }
function raidError($message) { global $viewmode; $viewmode = "Edit"; CMmb::setErrorSm($message); }
CMmb::setShortResult('Рейтинг пересчитан', 'ViewAdminDataPage'); } elseif ($action == 'DeleteOutOfRangeTeams') { CMmb::setViews('ViewAdminDataPage', ''); if ($RaidId <= 0) { CMmb::setError('Марш-бросок не найден.', $view, ''); return; } // проверяем if (!CRights::canDeleteOutOfRangeTeams($UserId, $RaidId)) { CMmb::setError('Невозможно удалить команды вне зачета.', $view, ''); return; } $sql = "UPDATE Teams t INNER JOIN Distances d on t.distance_id = d.distance_id \n\t\tSET t.team_hide = 1 \n\t\tWHERE d.raid_id = {$RaidId} and t.team_outofrange = 1\n\t\t"; //echo $sql; MySqlQuery($sql); CMmb::setShortResult('Команды вне зачета удалены', ''); //CMmb::setResult('', "ViewAdminDataPage", ""); return; } else { } } // Сохранение флага ошибки в базе // функция больше не используется function LogError($teamlevel_id, $error) { $sql = "update TeamLevels set error_id = {$error} where teamlevel_id = {$teamlevel_id}"; $Result = MySqlQuery($sql); return $error; } // Проверка конкретной команды // функция больше не используется
if ($Result == 1) { CMmb::setShortResult('Рассылка запущена', 'ViewAdminDataPage'); } else { CMmb::setError('Ошибка при отправке рассылки.', $view, ''); return; } } elseif ($action == 'RaidTeamUsersExport') { if ($RaidId <= 0) { CMmb::setShortResult('Марш-бросок не найден', ''); return; } // рассылать всем может только администратор if (!$Administrator) { return; } CMmb::setViews('ViewAdminDataPage', ''); $Sql = "select u.user_name, user_birthyear, \n\t\t\tCOALESCE(u.user_city, '') as user_city,\n\t\t\tCOALESCE(u.user_phone, '') as user_phone,\n\t\t t.team_num, t.team_name, t.team_outofrange \n\t\tfrom Teams t \n\t\t\tinner join Distances d on t.distance_id = d.distance_id\n\t\t\tinner join TeamUsers tu on tu.team_id = t.team_id\n\t\t\tinner join Users u on tu.user_id = u.user_id\n\t\twhere t.team_hide = 0 \n\t\t\tand tu.teamuser_hide = 0\n\t\t\tand d.raid_id = {$RaidId}\n\t\torder by user_name\n\t\t"; $Result = MySqlQuery($Sql); // Заголовки, чтобы скачивать можно было и на мобильных устройствах просто браузером (который не умеет делать Save as...) header('Content-Type: text/csv; charset=utf-8'); header('Content-Disposition: attachment; filename=raidteamusers.csv'); // create a file pointer connected to the output stream $output = fopen('php://output', 'w'); while ($Row = mysql_fetch_assoc($Result)) { fputcsv($output, $Row); } mysql_free_result($Result); fclose($output); die; return; } else {
if (!empty($maxinvdt)) { $invEndDt = $maxinvdt; } $sql = "insert into InvitationDeliveries (raid_id, invitationdelivery_type, invitationdelivery_dt, user_id, invitationdelivery_amount)\n VALUES ({$RaidId}, 3, NOW(), {$UserId}, 1)"; //echo $sql; $newInvDeliveryId = MySqlQuery($sql); //echo "newInvDeliveryId= $newInvDeliveryId "; if ($newInvDeliveryId <= 0) { CMmb::setErrorSm('Ошибка записи раздачи приглашения.'); return; } if ($pUserId <= 0 or $UserId <= 0 or !CRights::canDeliveryInvitation($UserId, $RaidId, 1)) { CMmb::setErrorMessage('Не хватает прав или нет доступных приглашений'); return; } $sql = "insert into Invitations (user_id, invitation_begindt, invitation_enddt, invitationdelivery_id)\n VALUES ({$pUserId}, NOW(), '{$invEndDt}', {$newInvDeliveryId})"; //echo $sql; $newInvId = MySqlQuery($sql); if ($newInvId <= 0) { CMmb::setErrorSm('Ошибка записи приглашения.'); return; } CMmb::setResult('Приглашение выдано', "ViewUserData", ""); } else { // если никаких действий не требуется // $statustext = "<br/>"; } // print('view = '.$view.' action = '.$action); ?>