Ejemplo n.º 1
0
    print "<td align=\"center\">{$Row['userrank']}</td>\r\n";
    if ($ShowAllRaids) {
        // Показываем  список ММБ
        foreach ($distances as $distanceId) {
            $RowRaids = $teamPlaces->GetUserDistance($Row['user_id'], $distanceId);
            if ($RowRaids !== null && !empty($RowRaids['team_name'])) {
                $TeamPlace = $teamPlaces->GetTeamPlace($RowRaids['team_id']);
                $LevelPointId = $RowRaids['levelpoint_id'];
                // Есть место команды и нет схода участника
                $TeamPlaceResult = ($TeamPlace > 0 and $LevelPointId == 0) ? ", место {$TeamPlace}" : '';
                $TeamUserOff = "";
                // Есть место команды, но сход участника
                //	if ($TeamPlace > 0 and $LevelId > 0) $TeamUserOff = ", сход на этапе <b>".$RowRaids['level_name']."</b>";
                //	if ($TeamPlace > 0 and $LevelPointId > 0) $TeamUserOff = ", не явка в точку <b>".$RowRaids['levelpoint_name']."</b>";
                $TeamString = '<a href="?TeamId=' . $RowRaids['team_id'] . '">' . CMmbUI::toHtml($RowRaids['team_name']) . '</a></br>' . $RowRaids['teamuser_rank'] . $TeamPlaceResult . $TeamUserOff;
            } else {
                $TeamString = '&nbsp;';
            }
            print "<td>{$TeamString}</td>\r\n";
        }
    }
    print "</tr>\r\n";
}
// Конец цикла по журналу объединений
mysql_free_result($Result);
print "</table>\r\n";
CMmbLogger::addInterval('выборка-отрисовка', $t5);
?>
		
		<br/>
Ejemplo n.º 2
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);
}
Ejemplo n.º 3
0
Archivo: index.php Proyecto: se-ti/mmb
                    <div style = "padding-left: 20px; padding-right: 10px;">

			<!-- сообщение  -->
			<?php 
if (!empty($statustext)) {
    print '<div class = "ErrorText">' . $statustext . '</div>' . "\n";
    //print('<table width = "100%"><tr><td>'.$statustext.'</td><td style = "border-top-style: dotted; border-top-width: 2px; border-top-color: #CC0000;">&nbsp;</td></tr></table>'."\n");
}
$tmRn = microtime(true);
// вставляем основную часть
include "mainpart.php";
$tmRne = CMmbLogger::addInterval('---- render', $tmRn);
// сбрасываем действие
$action = "";
// м.б. нужно и view сбрасывать
$viewsubmode = "";
// закрываем соединение с базой
CSql::closeConnection();
$tmEnd = CMmbLogger::addInterval('Total: ', $tmSt);
print "<div><small>" . CMmbLogger::getText() . "</small></div>";
?>
		   </div>
		<!--Конец правой колонки -->
		</td>
	</tr>
	</table>

 </body>
</html>