Пример #1
0
    $OnClickText = ' onClick="javascript:this.value = \'\';"';
    // Надпись на кнопке
    $SaveButtonText = 'Добавить точку сканирования';
    $pScanPointId = 0;
} else {
    $pScanPointId = mmb_validateInt($_POST, 'ScanPointId');
    if ($pScanPointId <= 0) {
        return;
    }
    // Если вернулись после ошибки переменные не нужно инициализировать
    if ($viewsubmode == "ReturnAfterError") {
        ReverseClearArrays();
        $ScanPointName = $_POST['ScanPointName'];
    } else {
        $sql = "select sp.scanpoint_id,\n\t               sp.scanpoint_name,\n\t\t       sp.scanpoint_order\n\t\tfrom ScanPoints sp\n\t\twhere sp.scanpoint_id = {$pScanPointId}";
        $ScanPointName = CSql::singleValue($sql, 'scanpoint_name');
    }
    $NextActionName = 'ScanPointChange';
    $OnClickText = '';
    $SaveButtonText = 'Сохранить изменения точки сканирования';
}
// ================ Конец инициализации переменных для добавляемой/редактируемой точки сканирования =================
// Выводим javascrpit
?>

<script language="JavaScript" type="text/javascript">
	// Функция проверки правильности заполнения формы
	function ValidateScanPointForm()
	{
		document.ScanPointForm.action.value = "<?php 
echo $NextActionName;
Пример #2
0
    if (CRights::canInviteTeam($UserId, $TeamId)) {
        print '<input type="button" onClick="javascript: if (confirm(\'Вы уверены, что хотите перевести эту команду в зачет? \')) { InviteTeam(); }" name="InviteTeamButton" value="Пригласить команду" tabindex="' . ++$TabIndex . '">' . "\r\n";
    }
}
print '</td></tr>' . "\n\n";
print '<tr><td class="input">' . "\n";
// ============ Использование GPS
print 'GPS <input type="checkbox" name="TeamUseGPS" value="on"' . ($TeamUseGPS == 1 ? ' checked="checked"' : '') . ' tabindex="' . ++$TabIndex . '"' . $DisabledText . ' title="Отметьте, если команда использует для ориентирования GPS"/> &nbsp;' . "\n";
// ============ Число карт
print '&nbsp; Комплектов карт <input type="text" name="TeamMapsCount" size="2" maxlength="2" value="' . $TeamMapsCount . '" tabindex="' . ++$TabIndex . '"' . $OnClickText . $DisabledText . ' title="Число заказанных на команду комплектов карт">&nbsp;' . "\n";
// ============ расчет стоимости
// для новых команд мы еще не знаем количество заказанных карт,
// а командам вне зачета мы ничего не обещаем и только сообщаем, почем они могут купить карты на старте при их наличии
if ($viewmode == "Add" || $TeamOutOfRange) {
    $sql = "select r.raid_mapprice from Raids r where r.raid_id = {$RaidId}";
    $MapPrice = CSql::singleValue($sql, 'raid_mapprice');
    print '(стоимость одного комплекта ' . $MapPrice . ' руб.)' . "\n";
} else {
    if ($TeamUser or $Administrator or $Moderator) {
        // показываем стоимость карт только при просмотре своей команды или админам/модераторам
        print 'К оплате на старте: <b>' . CalcualteTeamPayment($TeamId) . '</b> руб. &nbsp;' . "\n";
    }
}
print '</td></tr>' . "\n\n";
// ============ Нет сломанным унитазам!
print '<tr><td class="input">' . "\n";
print '<a href="http://community.livejournal.com/_mmb_/2010/09/24/">Нет сломанным унитазам!</a> - прочитали и поддерживаем <input type="checkbox" name="TeamGreenPeace" value="on"' . ($TeamGreenPeace >= 1 ? ' checked="checked"' : '') . ' tabindex="' . ++$TabIndex . '"' . $DisabledText . ' title="Отметьте, если команда берёт повышенные экологические обязательства"/>' . "\n";
print "</td></tr>\r\n";
// ============ Участники
// Их еще нет при создании команды
if ($viewmode != "Add") {
Пример #3
0
    }
    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);
Пример #4
0
    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";
    $ConfirmFile = trim($MyStoreHttpLink) . trim(CSql::singleValue($sql, 'raidfile_name'));
    $Fp = fopen($ConfirmFile, "r");
    while (!feof($Fp) && !strpos(trim(fgets($Fp, 4096)), 'body')) {
    }
    $NowStr = '';
    while (!feof($Fp) && !strpos(trim($NowStr), '/body')) {
        print trim($NowStr) . "\r\n";
        $NowStr = fgets($Fp, 4096);
    }
    fclose($Fp);
    print "</td></tr>\r\n";
    print '<tr><td class="input">' . "\n";
    print "<a href=\"{$RaidRulesLink}\">Полный текст положения</a><br/>\n";
    print 'Прочитал и согласен с условиями участия в ММБ <input type="checkbox" name="Confirmation" value="on" tabindex="' . ++$TabIndex . '"' . $DisabledText . ' title="Прочитал и согласен с условиями участия в ММБ"/>' . "\n";
    print "</td></tr>\r\n";
}
Пример #5
0
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);
}
Пример #6
0
function ShowDistanceHeader($RaidId, $DistanceId, $DistanceName, $DistanceData, $lottery_count, $colspan)
{
    $DistanceTeams = "t.distance_id = {$DistanceId} AND t.team_hide = 0";
    $sql = "SELECT COUNT(team_id) AS inrangecount FROM Teams t WHERE {$DistanceTeams} AND t.team_outofrange = 0";
    $teamInRangeCount = CSql::singleValue($sql, 'inrangecount');
    $sql = "SELECT COUNT(team_id) AS outofrangecount FROM Teams t WHERE {$DistanceTeams} AND t.team_outofrange = 1";
    $teamOutOfRangeCount = CSql::singleValue($sql, 'outofrangecount');
    $sql = "SELECT COALESCE(SUM(COALESCE(team_mapscount, 0)), 0) AS inrangecount FROM Teams t WHERE {$DistanceTeams} AND t.team_outofrange = 0";
    $mapsInRangeCount = CSql::singleValue($sql, 'inrangecount');
    $sql = "SELECT COALESCE(SUM(COALESCE(team_mapscount, 0)), 0) AS outofrangecount FROM Teams t WHERE {$DistanceTeams} AND t.team_outofrange = 1";
    $mapsOutOfRangeCount = CSql::singleValue($sql, 'outofrangecount');
    $sql = "SELECT COUNT(tu.teamuser_id) AS inrangecount FROM Teams t INNER JOIN TeamUsers tu ON t.team_id = tu.team_id WHERE {$DistanceTeams} AND tu.teamuser_hide = 0 AND t.team_outofrange = 0";
    $teamUserInRangeCount = CSql::singleValue($sql, 'inrangecount');
    $sql = "SELECT COUNT(tu.teamuser_id) AS outofrangecount FROM Teams t INNER JOIN TeamUsers tu ON t.team_id = tu.team_id WHERE {$DistanceTeams} AND tu.teamuser_hide = 0 AND t.team_outofrange = 1";
    $teamUserOutOfRangeCount = CSql::singleValue($sql, 'outofrangecount');
    $distanceDescription = $DistanceName;
    if ($DistanceData) {
        $distanceDescription .= ', ' . $DistanceData;
    }
    print "<tr class=yellow>\n <td colspan=2>Дистанция {$distanceDescription}</td>\n";
    // для марш-бросков без приглашений оставляем старый вариант вывода
    if ($RaidId < 28) {
        print " <td colspan={$colspan}>Команд <span title=\"в зачете\">{$teamInRangeCount}</span>/<span title=\"вне зачета\">{$teamOutOfRangeCount}</span>," . " карт <span title=\"у команд в зачете\">{$mapsInRangeCount}</span>/<span title=\"у команд вне зачета\">{$mapsOutOfRangeCount}</span>," . " участников <span title=\"в командах в зачете\">{$teamUserInRangeCount}</span>/<span title=\"в командах вне зачета\">{$teamUserOutOfRangeCount}</span></td>\n</tr>\n";
        return;
    }
    // получаем количество команд с приглашениями каждого типа
    $invited = array();
    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";
}
Пример #7
0
     $Result = MySqlQuery($Sql);
     while ($Row = mysql_fetch_assoc($Result)) {
         $data["Levels"][] = $Row;
     }
     mysql_free_result($Result);
     // TeamLevelDismiss:
     $Sql = "select teamleveldismiss_id, tld.levelpoint_id, \n\t\t\t\t\tteamleveldismiss_date, teamuser_id\n\t\t\tfrom TeamLevelDismiss tld\n\t\t\t     inner join LevelPoints lp on tld.levelpoint_id = lp.levelpoint_id\n\t\t\t     inner join Distances d on lp.distance_id = d.distance_id\n\t\t\twhere  d.distance_hide = 0 and d.raid_id = {$RaidId}";
     $Result = MySqlQuery($Sql);
     while ($Row = mysql_fetch_assoc($Result)) {
         $data["TeamLevelDismiss"][] = $Row;
     }
     mysql_free_result($Result);
 }
 // Конец проверки, что можно экспортировать данные по этапам
 $sql = "select  raid_fileprefix\n\t              from Raids\n\t              where raid_id = {$RaidId}";
 $Prefix = trim(CSql::singleValue($sql, 'raid_fileprefix'));
 $JsonFileName = 'TeamLevelPoints.json';
 $fullJSONfileName = $MyStoreFileLink . $Prefix . $JsonFileName;
 $zipfileName = $MyStoreFileLink . $Prefix . 'mmbdata.zip';
 $output = fopen($fullJSONfileName, 'w');
 fwrite($output, '{"TeamLevelPoints":[');
 // TeamLevelPoints:
 $Sql = "select teamlevelpoint_id, tlp.team_id, tlp.levelpoint_id, \n\t\t\t\t\tteamlevelpoint_datetime, teamlevelpoint_comment,\n\t\t\t\t\tteamlevelpoint_penalty,\n\t\t\t\t\terror_id, teamlevelpoint_duration,\n\t\t\t\t\tteamlevelpoint_result\n\t\t\tfrom TeamLevelPoints tlp\n\t\t    \t inner join Teams t on tlp.team_id = t.team_id\n\t\t\t     inner join Distances d on t.distance_id = d.distance_id\n\t\t\twhere t.team_hide = 0 and d.distance_hide = 0 and d.raid_id = {$RaidId}";
 $Result = MySqlQuery($Sql);
 while ($Row = mysql_fetch_assoc($Result)) {
     fwrite($output, json_encode($Row) . ",");
 }
 fwrite($output, ']}');
 mysql_free_result($Result);
 fclose($output);
 $JsonMainDataFileName = 'maindata.json';
Пример #8
0
	{
		document.TlpForm.TeamLevelPointId.value = teamlevelpointid;
		document.TlpForm.action.value = 'TlpInfo';
		document.TlpForm.submit();
	}


	// 
</script>


<?php 
print '<br/>' . "\n";
// ============ Общее время команды
$sql = "select TIME_FORMAT(t.team_result, '%H:%i') as team_result from Teams t where t.team_id = {$TeamId}";
$TeamResult = CSql::singleValue($sql, 'team_result');
$TeamPlace = GetTeamPlace($TeamId);
$TeamPlaceResult = "";
if ($TeamResult == "00:00") {
    $TeamResult = "-";
}
if ($TeamPlace > 0) {
    $TeamPlaceResult = " Место <b>{$TeamPlace}</b>";
}
print "<b>Результаты.</b> Общее время с учетом штрафов и бонусов: <b title=\"Обновляется после сохранения результатов\">{$TeamResult}</b>{$TeamPlaceResult}\n";
print "<br/>\n";
if ($AllowEditResult == 1) {
    print "<br/>\n";
    // Выводим начало формы с точкой
    print '<form name="TlpForm" action="' . $MyPHPScript . '" method="post"  onSubmit="' . $OnSubmitResultFunction . '">' . "\n";
    print '<input type="hidden" name="action" value="">' . "\n";
Пример #9
0
		       and t.team_hide = 0
		       and tu.teamuser_hide = 0
		       and t.team_outofrange = 0
		  ";
    	$teamUserInRangeCount =  CSql::singleValue($sql, 'inrangecount');

    	$sql = "  select count(tu.teamuser_id)   as outofrangecount
		 from  Teams t 
		 	inner join  TeamUsers tu
		        on t.team_id = tu.team_id
		 where t.distance_id = $whereDistanceId
		       and t.team_hide = 0
		       and tu.teamuser_hide = 0
		       and t.team_outofrange = 1
		  ";
    	$teamUserOutOfRangeCount =  CSql::singleValue($sql, 'outofrangecount');

    

       	print('<tr><td width="100">'.$Row['distance_name'].'</td>
        <td width="300">'.$Row['distance_data']."</td>\r\n");

        // Если идёт регистрацию время окончания выделяем жирным
        $bStyle = $RaidStage == 1 ? 'style="font-weight: bold;"': '';
        print("<td $bStyle>Регистрация до: $RaidRegisterEndDt</td>\r\n");
        print("<td>команд: $teamInRangeCount/$teamOutOfRangeCount, карт: $mapsInRangeCount/$mapsOutOfRangeCount, участников: $teamUserInRangeCount/$teamUserOutOfRangeCount</td>\r\n");

	if (!empty($RaidCloseDt))
	{
                print("<td>Протокол закрыт: $RaidCloseDt</td>\r\n");
	}
Пример #10
0
        $LevelPointMaxYear = $Row['levelpoint_smaxyear'];
        $LevelPointMaxDate = $Row['levelpoint_smaxdate'];
        $LevelPointMaxTime = $Row['levelpoint_smaxtime'];
        $ScanPointId = $Row['scanpoint_id'];
        //    $LevelId = $Row['level_id'];
    }
    $NextActionName = 'LevelPointChange';
    $OnClickText = '';
    $SaveButtonText = 'Сохранить изменения точки';
}
// ================ Конец инициализации переменных для добавляемой/редактируемой точки =================
// В форме правки выводится только день и время, год считаем по дате регистарции ММБ и не выводим
if (empty($LevelPointMinYear) or (int) $LevelPointMinYear == 0 or empty($LevelPointMaxYear) or (int) $LevelPointMaxYear == 0) {
    $RaidYear = 0;
    $sql = "select YEAR(r.raid_registrationenddate) as raidyear\n\t\t\tfrom Raids r\n\t\t             inner join Distances d\n\t\t\t     on d.raid_id = r.raid_id\n\t\t\twhere d.distance_id = {$DistanceId}";
    $RaidYear = CSql::singleValue($sql, 'raidyear');
    if (empty($LevelPointMinYear) or (int) $LevelPointMinYear == 0) {
        $LevelPointMinYear = $RaidYear;
    }
    if (empty($LevelPointMaxYear) or (int) $LevelPointMaxYear == 0) {
        $LevelPointMaxYear = $RaidYear;
    }
}
// Выводим javascrpit
?>

<script language="JavaScript" type="text/javascript">
	// Функция проверки правильности заполнения формы
	function ValidateLevelPointForm()
	{
		document.LevelPointForm.action.value = "<?php 
Пример #11
0
 $pTlpYear = $_POST['TlpYear'];
 $pTlpDate = $_POST['TlpDate'];
 $pTlpTime = $_POST['TlpTime'];
 $pTlpComment = $_POST['TlpComment'];
 $pErrorId = $_POST['ErrorId'];
 $TlpYDTs = CSql::timeString($pTlpYear, $pTlpDate, $pTlpTime, false);
 // Если день и время пустые, то и год пустой считаем
 if ((int) $pTlpDate == 0 and (int) $pTlpTime == 0) {
     $TlpYDTs = "'0000-00-00 00:00:00'";
 }
 if ($pTeamId <= 0 or $pLevelPointId <= 0) {
     teamEditError('Не определён ключ команды или ключ точки для результата.');
     return;
 }
 $sql = " select count(*) as countresult\n\t          from TeamLevelPoints\n\t          where team_id = {$pTeamId}\n\t\t        and levelpoint_id = {$pLevelPointId}\n\t\t\tand teamlevelpoint_id <> {$pTeamLevelPointId}";
 if (CSql::singleValue($sql, 'countresult') > 0) {
     CMmb::setErrorSm('Результаты по точке уже есть.', 'ReturnAfterErrorTlp');
     return;
 }
 $sql = "update TeamLevelPoints  set levelpoint_id = {$pLevelPointId}\n\t                                ,team_id = {$pTeamId}\n\t                                ,error_id = {$pErrorId}\n\t                                ,teamlevelpoint_comment = '{$pTlpComment}'\n\t                                ,teamlevelpoint_datetime = {$TlpYDTs}\n\t        where teamlevelpoint_id = {$pTeamLevelPointId}";
 //echo $sql;
 MySqlQuery($sql);
 RecalcTeamResultFromTeamLevelPoints(0, $pTeamId);
 //         RecalcTeamResultFromTeamLevelPoints(25, 0);
 /*   
  $statustext = CheckLevelPoints($DistanceId);
  if (!empty($error))
  {
 	$alert = 1;
  }
 */
Пример #12
0
     CMmb::setError('Марш-бросок не найден.', $view, '');
     return;
 }
 $pInvitationsCount = mmb_validateInt($_POST, 'RankInvitationsCount');
 if ($pInvitationsCount <= 0) {
     CMmb::setError('Не указано число приглашений.', $view, '');
     return;
 }
 $pInvitationsEndDate = trim($_POST['InvitationsEndDate']);
 if (empty($pInvitationsEndDate)) {
     CMmb::setError('Не указана дата окончания действия приглашений.', $view, '');
     return;
 }
 // проверки на дату
 $sql = "select count(*) enddtcheck\n    \t\t\tfrom Raids r\n\t    \t\twhere  r.raid_id = {$RaidId}\n\t    \t\t\tand r.raid_registrationenddate >=  '{$pInvitationsEndDate}'\n\t    \t\t\tand NOW() < '{$pInvitationsEndDate}'\n\t    \t";
 $endDtCheck = CSql::singleValue($sql, 'enddtcheck', false);
 if (!$endDtCheck) {
     CMmb::setErrorSm('Дата окончания действия приглашений не прошла проверку.');
     return;
 }
 // пересчитываем рейтинг на всякий случай
 RecalcUsersRank($RaidId);
 // проверяем
 if (!CRights::canDeliveryInvitation($UserId, $RaidId, 1)) {
     CMmb::setError('Невозможно провести выдачу по рейтингу.', $view, '');
     return;
 }
 if ($pInvitationsCount > CSql::availableInvitationsCount($RaidId)) {
     CMmb::setError('Заявок указано больше, чем доступно.', $view, '');
     return;
 }
Пример #13
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;
 }
Пример #14
0
        mysql_free_result($result);
    }
    function GetTeamPlace($teamId)
    {
        return isset($this->teamPlaces[$teamId]) ? $this->teamPlaces[$teamId] : 0;
    }
    function GetUserDistance($userId, $distanceId)
    {
        return isset($this->userDistance[$userId]) && isset($this->userDistance[$userId][$distanceId]) ? $this->userDistance[$userId][$distanceId] : null;
    }
}
$TabIndex = 0;
/*print('<form  name="RankUsersForm"  action="'.$MyPHPScript.'" method="post">'."\r\n");
	print('<input type="hidden" name="action" value="">'."\r\n");*/
$sql = " select MAX(r.raid_id) as maxraidid\n\t         from Raids r \n\t         ";
$maxRaidId = CSql::singleValue($sql, 'maxraidid');
$raidStage = CSql::raidStage($maxRaidId);
$ShowAllRaids = 0;
if ($raidStage > 6) {
    $ShowAllRaids = mmb_validate($_GET, 'rating', '') == 'all';
    $js = "window.location.search = '?rating' + (this.checked ? '=all' : ''); ";
    print 'Отображать все марш-броски (долгая загрузка) <input type="checkbox"  autocomplete="off" name="ShowAllRaids" ' . ($ShowAllRaids ? 'checked="checked"' : '') . ' tabindex="' . ++$TabIndex . '"
			title="Отображать все марш-броски" onchange="' . $js . '" />' . "\r\n";
}
//print('</form>'."\r\n");
print '<br/><br/>' . "\r\n";
print '<div style="margin-top: 15px; max-width: 1500px;" align="left">Рейтинг по версии slazav: по всем ММБ суммируется отношение времени лидера к времени участника.
	       <br/>Для марш-бросков с несколькими дистанциями это отношение дополнительно умножается на отношение  длины текущей дистанции к максимальной  из длин дистанций.
	        Рейтинг участника марш-броска не рассчитывается в следующих случаях: 1) команда вне зачёта; 2) команда не финишировала; 3) участник сошёл с дистанции.
	        Для марш-бросков до 2012 года сход участников не отражён в данных - можно сообщать о неточностях на общий адрес или в сообщество (ЖЖ)
	        <br/>R6 считается с уценкой каждого предыдущего ММБ на 0.9: последний марш-бросок берётся с весом 1, следующий 0.9, затем 0.9*0.9 и так далее.
Пример #15
0
 if ($RaidId <= 0) {
     CMmb::setErrorMessage('Не найден ММБ.');
     return;
 }
 if ($SessionId <= 0) {
     CMmb::setErrorMessage('Не найдена сессия.');
     return;
 }
 // Проверка возможности редактировать результаты
 if (!CanEditResults($Administrator, $Moderator, $TeamUser, $OldMmb, $RaidStage, $TeamOutOfRange)) {
     CMmb::setErrorMessage('Изменение результатов команды запрещено');
     return;
 }
 // Смотрим, есть ли точка сход в TeamLevelDismiss
 $sql = "select teamleveldismiss_id from TeamLevelDismiss where teamuser_id = {$HideTeamUserId}";
 $DismissId = CSql::singleValue($sql, 'teamleveldismiss_id');
 if ($LevelPointId) {
     if ($DismissId) {
         // Точка уже есть и пользователь сошёл - обновляем точку
         $sql = "update TeamLevelDismiss set levelpoint_id = {$LevelPointId} where teamleveldismiss_id = {$DismissId}";
         $rs = MySqlQuery($sql);
     } else {
         // Точки нет, а пользователь сошёл - создаём точку
         $sql = "insert into TeamLevelDismiss (teamuser_id, levelpoint_id, device_id) \n\t\t\t        values ({$HideTeamUserId}, {$LevelPointId}, 1) ";
         $rs = MySqlQuery($sql);
     }
 } else {
     if ($DismissId) {
         // Точка есть, а пользователь не сошёл - удаляем точку
         $sql = "delete from TeamLevelDismiss where teamleveldismiss_id = {$DismissId}";
         $rs = MySqlQuery($sql);
Пример #16
0
 if ($pUserId <= 0 or $UserId <= 0 or !CRights::canDeliveryInvitation($UserId, $RaidId, 1)) {
     CMmb::setErrorMessage('Не хватает прав или нет доступных приглашений');
     return;
 }
 // вставляем запись о розадче
 // Нахождим дату окончания регистрации
 $sql = "select ADDTIME(r.raid_registrationenddate, '23:59:59') as invenddt\n                from Raids r\n                where  r.raid_id = {$RaidId}\n                    and r.raid_registrationenddate is not null\n            ";
 $invEndDt = CSql::singleValue($sql, 'invenddt', false);
 if (empty($invEndDt)) {
     CMmb::setErrorSm('Не определена дата окончания действия приглашения.');
     return;
 }
 // смотрим максимальную дату приглашений по рейтингу
 // если нашли, то ставим её, а не дату окончания ММБ
 $sql = "select MAX(inv.invitation_enddt) as maxinvdt\n                from InvitationDeliveries invd\n                    inner join Invitations inv\n                    on invd.invitationdelivery_id = inv.invitationdelivery_id\n                where  invd.raid_id = {$RaidId}\n                    and inv.invitation_enddt > NOW()\n                    and invd.invitationdelivery_type = 1 \n            ";
 $maxinvdt = CSql::singleValue($sql, 'maxinvdt', false);
 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;
 }