Advertisement
Guest User

Untitled

a guest
Jul 25th, 2014
202
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 65.12 KB | None | 0 0
  1. <?
  2.     set_time_limit(0);
  3.  
  4.     class Parser
  5.     {
  6.    
  7.         public static function closeLeague($lid)
  8.         {
  9.             $leagueRow = ORM::for_table('leagues')->where('id',$lid)->find_one();
  10.             $leagueRow->open = 0;
  11.             $leagueRow->save;
  12.             return true;
  13.         }
  14.  
  15.         // отменяет результаты последнего тура, подчищает все очки, стоимость и прочую херню, херни много, может где забыли
  16.         public static function cancelLastTour($lid)
  17.         {
  18.             $leagueRow = ORM::for_table('leagues')->where('id',$lid)->find_one();
  19. //          $leagueRow->open = 0;
  20.  
  21.             $cost = ORM::for_table('cost')->where('lid',$lid)->where('tour',$leagueRow->active_tour-1)->delete_many();
  22.             $matches = ORM::for_table('match')->where('lid',$lid)->where('tour',$leagueRow->active_tour-1)->find_many();
  23.             foreach ($matches as $valueMatch)
  24.             {
  25.                 $valueMatch->score1 = -1;
  26.                 $valueMatch->score2 = -1;
  27.                 $valueMatch->stat = '';
  28.                 $valueMatch->calculations = '';
  29.                 $valueMatch->series = '';
  30.                 $valueMatch->calculated = 0;
  31.                 $valueMatch->save();
  32.             }
  33.            
  34.             $points = ORM::for_table('points')->where('lid',$lid)->where('tour',$leagueRow->active_tour-1)->delete_many();
  35.             $users_players = ORM::for_table('users_players')->where('lid',$lid)->where('tour',$leagueRow->active_tour)->delete_many();
  36.             $users_players_for_erase = ORM::for_table('users_players')->where('lid',$lid)->where('tour',$leagueRow->active_tour-1)->find_many();
  37.            
  38.             foreach ($users_players_for_erase as $valuePlayer)
  39.             {
  40.                 $valuePlayer->points = 0;
  41.                 $valuePlayer->played = 0;
  42.                 $valuePlayer->save();
  43.             }
  44.            
  45.             $user_players_actions = ORM::for_table('user_players_actions')->where('lid',$lid)->where('tour',$leagueRow->active_tour-1)->delete_many();
  46.            
  47.             $users_teams = ORM::for_table('users_teams')->where('lid',$lid)->where('active',1)->find_many();
  48.             foreach ($users_teams as $user_team)
  49.             {
  50.                 $users_teams_result = ORM::for_table('users_teams_result')->where('tid',$user_team->id)->where('tour',$leagueRow->active_tour-1)->find_one();
  51.                 if ($users_teams_result->id)
  52.                     $users_teams_result->delete();
  53.             }
  54.  
  55.             $leagueRow->active_tour = $leagueRow->active_tour - 1;
  56.             $leagueRow->save();
  57.            
  58.             return true;
  59.         }
  60.        
  61.        
  62.         // прогнать тур - получить результаты, посчитать очки, записать очки, по пользовательским базам пройтись и сделать там всё для нового тура
  63.         public static function doLeagueTour($lid)
  64.         {
  65.             $leagueRow = ORM::for_table('leagues')->where('id',$lid)->find_one();
  66. //          if ($leagueRow->open == 1) self::closeLeague($lid);
  67.            
  68.             $matches = ORM::for_table('match')->where('lid',$leagueRow->id)->where('tour',$leagueRow->active_tour)->find_array();
  69.             foreach ($matches as $keyMatch=>$valueMatch)
  70.             {
  71.                 $mr = Parser::getMatchResult($valueMatch['id']);
  72.                 $matchRow = ORM::for_table('match')->where('id',$valueMatch['id'])->find_one();
  73.                 if ($mr['status'] == 'Матч окончен')
  74.                 {
  75.                     $calculations = Parser::calculatePoints($matchRow->id,$mr);
  76.                     $matchRow->stat = serialize($mr);
  77.                     $matchRow->calculations = serialize($calculations);
  78.                     if (isset($mr['score1']))   $matchRow->score1 = $mr['score1'];
  79.                     if (isset($mr['score2']))   $matchRow->score2 = $mr['score2'];
  80.                     $matchRow->save();
  81.                     Parser::doCalculate($matchRow->id);
  82.                 }
  83.             }
  84.            
  85.             $leagueRow->open = 0;
  86.             $leagueRow->save();
  87.             self::doLeagueTourTeams($lid);
  88.             $leagueRow->active_tour = $leagueRow->active_tour + 1;
  89.             $leagueRow->save();
  90.         }
  91.  
  92.         // прогоняет всё командное - делает таблицу users_teams_result (очки и место команды в зависимости от тура)
  93.         // копирует игроков с прошлого тура в этот
  94.         public static function doLeagueTourTeams($lid)
  95.         {
  96.             $leagueRow = ORM::for_table('leagues')->where('id',$lid)->find_one();
  97. //          $leagueRow->active_tour = 1;
  98.             if ($leagueRow->open == 0)
  99.             {
  100.                 $teamsRow = ORM::for_table('users_teams')->where('lid',$lid)->where('active',1)->find_many();
  101.                 foreach ($teamsRow as $teamRow)
  102.                 {
  103.                     $sumPoints  = 0;
  104.                     $playersInTeam = ORM::for_table('users_players')->where('tid',$teamRow->id)->where('tour',$leagueRow->active_tour)->where('active',1)->order_by_desc('position')->order_by_desc('sort')->find_many();
  105.  
  106.                     // узнать кто играет, а кто из запаса играет
  107.                     foreach ($playersInTeam as $playerRow)
  108.                     {
  109.                        
  110.                        
  111.                     }
  112.                    
  113.                     // раскопировать всё на следующий тур
  114.                     foreach ($playersInTeam as $playerRow)
  115.                     {
  116.                        
  117.                         $newPlayerRow = ORM::for_table('users_players')->create();
  118.                         $newPlayerRow->tid = $playerRow->tid;
  119.                         $newPlayerRow->lid = $playerRow->lid;
  120.                         $newPlayerRow->pid = $playerRow->pid;
  121.                         $newPlayerRow->start_tour = $playerRow->start_tour;
  122.                         $newPlayerRow->end_tour = $playerRow->end_tour;
  123.                         $newPlayerRow->start_price = $playerRow->start_price;
  124.                         $newPlayerRow->active = $playerRow->active;
  125.                         $newPlayerRow->tour = $playerRow->tour+1;
  126.                         $newPlayerRow->position = $playerRow->position;
  127.                         $newPlayerRow->sort = $playerRow->sort;
  128.                         $newPlayerRow->captain = $playerRow->captain;
  129.                        
  130.                         $newPlayerRow->save();
  131.                        
  132.                         if ($playerRow->position == 2)
  133.                         {
  134.                             $sumPoints = $sumPoints + $playerRow->points;
  135.                         }
  136.                         // ТУТ СДЕЛАТЬ АЛГОРИТМ С ЗАМЕНАМИ
  137.                     }
  138.                    
  139.                     $checkTeamResult = ORM::for_table('users_teams_result')->where('tid',$teamRow->id)->where('tour',$leagueRow->active_tour)->find_one();
  140.                     if ($checkTeamResult->id)
  141.                     {
  142.                         $oldPoints = $checkTeamResult->points;
  143.                         $checkTeamResult->points = $sumPoints;
  144.                         $checkTeamResult->sum = $checkTeamResult->sum - $oldPoints + $sumPoints;
  145.                         $checkTeamResult->save();
  146.                     } else
  147.                     {
  148.                         $newTeamResult = ORM::for_table('users_teams_result')->create();
  149.                         $newTeamResult->tid = $teamRow->id;
  150.                         $newTeamResult->tour = $leagueRow->active_tour;
  151.                         $newTeamResult->points = $sumPoints;
  152.                         $lastTourTeamResult = ORM::for_table('users_teams_result')->where('tid',$teamRow->id)->where_not_equal('tour',$leagueRow->active_tour)->order_by_desc('tour')->find_one();
  153.  
  154.                         if ($lastTourTeamResult->sum)
  155.                             $newTeamResult->sum = $lastTourTeamResult->sum + $sumPoints;
  156.                         else
  157.                             $newTeamResult->sum = $sumPoints;
  158.                            
  159.                         $newTeamResult->save();
  160.                     }
  161.                 }
  162.             }
  163.         }
  164.        
  165.         public static function defaultFirstTour($lid)
  166.         {
  167.             $teams = ORM::for_table('teams_in_leagues')->select('id_team')->where('id_league',$lid)->find_array();
  168.             if ($teams['0']['id_team'])
  169.             {
  170.                 foreach ($teams as $keyTeam=>$valueTeam)
  171.                 {
  172.                     $arrTeams[] = $valueTeam['id_team'];
  173.                 }
  174.             }
  175.             if (!$arrTeams) return false;
  176.             $players = ORM::for_table('players')->select('id')->where_in('team_id',$arrTeams)->find_array();
  177.             if ($players['0']['id'])
  178.             {
  179.                 foreach ($players as $keyPlayer=>$valuePlayer)
  180.                 {
  181.                     $check = ORM::for_table('points')->where('lid',$lid)->where('pid',$valuePlayer['id'])->where('mid',-1)->where('tour',0)->find_one();
  182.                     if (!$check->id)
  183.                     {
  184.                         $newRowPoints = ORM::for_table('points')->create();
  185.                         $newRowPoints->lid = $lid;
  186.                         $newRowPoints->pid = $valuePlayer['id'];
  187.                         $newRowPoints->p = 0;
  188.                         $newRowPoints->sum = 0;
  189.                         $newRowPoints->tour = 0;
  190.                         $newRowPoints->mid = -1;
  191.                         $newRowPoints->save();
  192.                         self::calculateCost($newRowPoints->id);
  193.                     }
  194.                 }
  195.             }
  196.         }
  197.        
  198.        
  199.         private static function getEn($n,$pid,$lid,$nt = 0,$s0 = 0)
  200.         {
  201.             if ($n<1) return ($s0 / $nt);
  202.             $row = ORM::for_table('points')->where('lid',$lid)->where('pid',$pid)->where('tour',$n)->find_one();
  203.             if ($row->sum) return $row->sum; else return 0;
  204.         }
  205.  
  206.         private static function getPn($n,$pid,$lid, $nt = 0, $s0 = 0)
  207.         {
  208.             $row = ORM::for_table('points')->where('lid',$lid)->where('pid',$pid)->where('tour',$n)->find_one();
  209.             if ($row->p) return $row->p; else return 0;
  210.         }
  211.        
  212.         public static function calculateCost($pointsId)
  213.         {
  214.             $row = ORM::for_table('points')->where('id',$pointsId)->find_one();
  215.             if ($row->id)
  216.             {
  217.                 $s0Row = ORM::for_table('points')->where('lid',$row->lid)->where('pid',$row->pid)->where('tour',0)->find_one();
  218.                 if ($s0Row->p) $s0 = $s0Row->p; else $s0 = 0; // начальный рейтинг
  219.                 $ntRow = ORM::for_table('match')->where('lid',$row->lid)->order_by_desc('tour')->find_one();
  220.                 if ($ntRow->tour) $nt = $ntRow->tour; else $nt = 30; // количество туров в текущем сезоне
  221.                 $n = $row->tour;
  222.                
  223.                
  224.                 $s = 333 +
  225.                 ( (($nt - $n) * $s0) / $nt ) +
  226.                 self::getEn($n,$row->pid,$row->lid,$nt,$s0);
  227.                 $s1 = 2 * (self::getPn($n,$row->pid,$row->lid,$nt,$s0) - ( ( (($s0 * ($nt - $n) / ($nt)) + self::getEn($n,$row->pid,$row->lid,$nt,$s0)) / ($nt)   ) ));
  228.                 $s2 = 1 * (self::getPn($n-1,$row->pid,$row->lid,$nt,$s0) - ( ( (($s0 * ($nt - $n + 2) / ($nt)) + self::getEn($n-1,$row->pid,$row->lid,$nt,$s0)) / ($nt)   ) ));
  229.                 $s3 = 0.5 * (self::getPn($n-2,$row->pid,$row->lid,$nt,$s0) - ( ( (($s0 * ($nt - $n + 2) / ($nt)) + self::getEn($n-2,$row->pid,$row->lid,$nt,$s0)) / ($nt)   ) ));
  230.  
  231.                 echo $s."<br /> ".$s1."<br /> ".$s2."<br /> ".$s3."<br /> ";
  232.                 $t = $s + $s1 + $s2 + $s3;
  233.                
  234.                 //              echo $n; echo $nt;
  235.                 $checkRow = ORM::for_table('cost')->where('lid',$row->lid)->where('pid',$row->pid)->where('tour',$n)->find_one();
  236.                 if ($checkRow->id) // апдейтим цену
  237.                 {
  238.                         $checkRow->s = round($t,2);
  239.                         $checkRow->save();
  240.                 } else
  241.                 {
  242.                     $rowCost = ORM::for_table('cost')->create();
  243.                     $rowCost->lid = $row->lid;
  244.                     $rowCost->pid = $row->pid;
  245.                     $rowCost->s = round($t,2);
  246.                     $rowCost->tour = $n;
  247.                     $rowCost->save();
  248.                 }
  249.                 //556
  250.             } else return false;
  251.         }
  252.        
  253.         // по записанному в поле calculations (таблица match) посчитать очки и сохранить в базе
  254.         // серии тоже сохранить (поле series)
  255.         public static function doCalculate($mid)
  256.         {
  257.             $row = ORM::for_table('match')->where('id',$mid)->find_one();
  258.             if ($row->calculations and $row->calculated == 0 and ($row->score1!=-1 and $row->score2!=-1) )
  259.             {
  260.                 $data = unserialize($row->calculations);
  261.                 $series = unserialize($row->series);
  262.                 if ($data)
  263.                 {
  264.                     foreach ($data as $keyD=>$valueD)
  265.                     {
  266.                         unset($atypes);
  267.                         if ($valueD['id'])
  268.                         {
  269.                             foreach ($valueD['p'] as $keyP=>$valueP)
  270.                             {
  271.                                 if (isset($valueP['atype']))
  272.                                 {
  273.                                     if (!isset($valueP['acount'])) $valueP['acount'] = 1;
  274.                                     $atypes[$valueP['atype']] = $atypes[$valueP['atype']] + $valueP['acount'];
  275.                                 }
  276.                             }
  277.  
  278.                             foreach ($atypes as $keyP=>$valueP)
  279.                             {
  280.                                 $checkUserPlayersActions = ORM::for_table('user_players_actions')->where('mid',$row->id)->where('pid',$valueD['id'])->where('lid',$row->lid)->where('type',$keyP)->where('cnt',$valueP)->where('tour',$row->tour)->find_one();
  281.                                 if (!$checkUserPlayersActions->id)
  282.                                 {
  283.                                     $rowUserPlayersActions = ORM::for_table('user_players_actions')->create();
  284.                                     $rowUserPlayersActions->mid = $row->id;
  285.                                     $rowUserPlayersActions->pid = $valueD['id'];
  286.                                     $rowUserPlayersActions->lid = $row->lid;
  287.                                     $rowUserPlayersActions->type = $keyP;
  288.                                     $rowUserPlayersActions->cnt = $valueP;
  289.                                     $rowUserPlayersActions->tour = $row->tour;
  290.                                     $rowUserPlayersActions->save();
  291.                                 }
  292.                             }
  293.                            
  294.                             $checkRow = ORM::for_table('points')->where('tour',$row->tour)->where('lid',$row->lid)->where('pid',$valueD['id'])->where('mid',$row->id)->find_one();
  295.                             if (!$checkRow->id)
  296.                             {
  297.                                 $lastTourRow = ORM::for_table('points')->where_lte('tour',$row->tour)->where('lid',$row->lid)->where('pid',$valueD['id'])->order_by_desc('tour')->order_by_desc('id')->find_one();
  298.                                 $newRow = ORM::for_table('points')->create();
  299.                                 $newRow->lid = $row->lid;
  300.                                 $newRow->pid = $valueD['id'];
  301.                                 $newRow->p = $valueD['sum'];
  302.                                 if ($lastTourRow->sum) $sum = $lastTourRow->sum; else $sum = 0;
  303.                                 $newRow->sum = $sum + $valueD['sum'];
  304.                                 $newRow->tour = $row->tour;
  305.                                 $newRow->mid = $row->id;
  306.                                 $newRow->save();
  307.                                 self::calculateCost($newRow->id);
  308.                             }
  309.                            
  310.                             // обновление данных в таблице users_players
  311.                            
  312.                             $rowsUsersPlayers = ORM::for_table('users_players')->where('tour',$row->tour)->where('lid',$row->lid)->where('pid',$valueD['id'])->where('active',1)->find_many();
  313.                             foreach ($rowsUsersPlayers as $rowUserPlayer)
  314.                             {
  315.                                 if ($rowUserPlayer->captain == 1)
  316.                                     $rowUserPlayer->points = $valueD['sum'] * 2;
  317.                                 else
  318.                                     $rowUserPlayer->points = $valueD['sum'];
  319.  
  320.                                 if ($atypes[42]>0) // не играл
  321.                                     $rowUserPlayer->played = 0;
  322.                                 else
  323.                                     $rowUserPlayer->played = 1;
  324.                                
  325.                                 $rowUserPlayer->save();
  326.                             }
  327.                         }
  328.                     }
  329.                 }
  330.                 if ($series)
  331.                 {
  332.                     foreach ($series as $keySerie=>$valueSerie)
  333.                     {
  334.                         if ($valueSerie['id'])
  335.                         {
  336.                             if ($valueSerie['id'] == 'new') // новая серия
  337.                             {
  338.                                 $newRow = ORM::for_table('serie')->create();
  339.                                 $newRow->pid = $valueSerie['pid'];
  340.                                 $newRow->lid = $valueSerie['lid'];
  341.                                 $newRow->last_mid = $valueSerie['last_mid'];
  342.                                 $newRow->type = $valueSerie['type'];
  343.                                 $newRow->match = $valueSerie['match'];
  344.                                 $newRow->active = $valueSerie['active'];
  345.                                 $newRow->save();
  346.                             } else
  347.                             {
  348.                                 $checkRow = ORM::for_table('serie')->where('id',$valueSerie['id'])->find_one();
  349.                                 if ($checkRow->id)
  350.                                 {
  351.                                     $checkRow->last_mid = $valueSerie['last_mid'];
  352.                                     $checkRow->match = $valueSerie['match'];
  353.                                     $checkRow->active = $valueSerie['active'];
  354.                                     $checkRow->save();
  355.                                 }
  356.                             }
  357.                         }
  358.                     }
  359.                 }
  360.             } else return false;
  361.             $row->calculated = 1;
  362.             $row->save();
  363.             return true;
  364.            
  365.         }
  366.        
  367.         // подсчет очков без записи в базу (возвращает массив с очками по каждому игроку)
  368.         public static function calculatePoints($mid,$matchResultData = null)
  369.         {
  370.             if ($matchResultData == null)
  371.                 $res = self::getMatchResult($mid);
  372.             else
  373.                 $res = $matchResultData;
  374.            
  375.            
  376.             $match = ORM::for_table('match')->where('id',$mid)->find_one();
  377.            
  378.             if ($res['status'] == 'Матч окончен')
  379.             {
  380.                 $team1AllPlayers = ORM::for_table('players')->where('team_id',$match->team1)->find_array();
  381.                 $team2AllPlayers = ORM::for_table('players')->where('team_id',$match->team2)->find_array();
  382.                
  383.                 foreach ($res['lineup'] as $kP=>$player)
  384.                 {
  385.                     $p = 0;
  386.                     $jocker = false;
  387.                     if ($player['id'])
  388.                     {
  389.                         if ($player['tid'] == $match->team1)
  390.                         {
  391.                             foreach ($team1AllPlayers as $keyTeam1=>$valueTeam1)
  392.                             {
  393.                                 if ($valueTeam1['id'] == $player['id']) $team1AllPlayers[$keyTeam1]['in_match'] = true;
  394.                             }
  395.                         }
  396.                        
  397.                         if ($player['tid'] == $match->team2)
  398.                         {
  399.                             foreach ($team2AllPlayers as $keyTeam2=>$valueTeam2)
  400.                             {
  401.                                 if ($valueTeam2['id'] == $player['id']) $team2AllPlayers[$keyTeam2]['in_match'] = true;
  402.                             }
  403.                         }
  404.                        
  405.                         $data[$player['id']]['id'] = $player['id'];
  406.                         $playerRow = ORM::for_table('players')->where('id',$player['id'])->find_one();
  407.                         $line = $playerRow->line;
  408.                         if ($player['tid'] == $match->team1) { $status = 1; } // дома
  409.                         if ($player['tid'] == $match->team2) { $status = 2; } // в гостях
  410.  
  411.                         if ($status == 1)
  412.                         {
  413.                             if ($res['score1'] > $res['score2'])    $scores[] = array('type'=>1,'caption'=>'Победа дома','p'=>1);
  414.                             if ($res['score1'] == $res['score2'])   $scores[] = array('type'=>1,'caption'=>'Ничья дома','p'=>-0.5); // ничья дома
  415.                             if ($res['score1'] < $res['score2'])    $scores[] = array('type'=>1,'caption'=>'Поражение дома','p'=>-2); // поражение дома
  416.                         }
  417.  
  418.  
  419.                         if ($status == 2)
  420.                         {
  421.                             if ($res['score2'] > $res['score1'])    $scores[] = array('type'=>1,'caption'=>'Победа в гостях','p'=>2); // победа в гостях
  422.                             if ($res['score2'] == $res['score1'])   $scores[] = array('type'=>1,'caption'=>'Ничья в гостях','p'=>0.5); // ничья в гостях
  423.                             if ($res['score2'] < $res['score1'])    $scores[] = array('type'=>1,'caption'=>'Поражение в гостях','p'=>-1); // поражение в гостях
  424.                         }
  425.  
  426.                         $win_goal = 0;
  427.                         $activeGoal = 0;
  428.                         if ( ($res['score1'] > $res['score2']) and ($status == 1) ) $win_goal = $res['score2']+1;
  429.                         if ( ($res['score2'] > $res['score1']) and ($status == 2) ) $win_goal = $res['score1']+1;
  430.                         if ($status == 1)
  431.                         {
  432.                             if ($res['score1'] >= 3) // много забитых голов
  433.                             {
  434.                                 $scores[] = array('type'=>1,'caption'=>'Много забитых голов','p'=>1);
  435.                                 if ($line == 0) $p = $p + 1;
  436.                                 if ($line == 1) $p = $p + 1;
  437.                                 if ($line == 2) $p = $p + 1;
  438.                                 if ($line == 3) $p = $p + 1;
  439.                             }
  440.                         }
  441.  
  442.                         if ($status == 2)
  443.                         {
  444.                             if ($res['score2'] >= 3) // много забитых голов
  445.                             {
  446.                                 $scores[] = array('type'=>1,'caption'=>'Много забитых голов','p'=>1);
  447.                                 if ($line == 0) $p = $p + 1;
  448.                                 if ($line == 1) $p = $p + 1;
  449.                                 if ($line == 2) $p = $p + 1;
  450.                                 if ($line == 3) $p = $p + 1;
  451.                             }
  452.                         }
  453.  
  454.                         if ($status == 1)
  455.                         {
  456.                             if ( ($res['score1'] - $res['score2']) >= 3) // крупный счет
  457.                             {
  458.                                 $scores[] = array('type'=>1,'caption'=>'Крупный счет','p'=>1);                          
  459.                                 if ($line == 0) $p = $p + 1;
  460.                                 if ($line == 1) $p = $p + 1;
  461.                                 if ($line == 2) $p = $p + 1;
  462.                                 if ($line == 3) $p = $p + 1;
  463.                             }
  464.                         }
  465.  
  466.                         if ($status == 2)
  467.                         {
  468.                             if ( ($res['score2'] - $res['score1']) >= 3) // крупный счет
  469.                             {
  470.                                 $scores[] = array('type'=>1,'caption'=>'Крупный счет','p'=>1);
  471.                                 if ($line == 0) $p = $p + 1;
  472.                                 if ($line == 1) $p = $p + 1;
  473.                                 if ($line == 2) $p = $p + 1;
  474.                                 if ($line == 3) $p = $p + 1;
  475.                             }
  476.                         }
  477.                        
  478.                         $komanda_zabila = false;
  479.                         $komanda_propustila = false;
  480.                         $goals = 0; // для хеттрика
  481.                         $asist = 0;
  482.                         $red = false;
  483.                         $yellow = false;
  484.                         if ($res['actions'][0]['type'])
  485.                         {
  486.                             foreach ($res['actions'] as $kA=>$vA)
  487.                             {
  488.                                 // jocker
  489.                                 if ($player['id'] == $vA['id'] and $player['in']>0 and (($vA['min']-20)<=$player['in']))
  490.                                 {
  491.                                     $jocker = true;
  492.                                 }
  493.                                
  494.                                 // каждый забитый гол / каждый пропущенный гол
  495.                                 if ($vA['type'] == 1 or $vA['type'] == 2 or $vA['type'] == 3)
  496.                                 {
  497.                                     if ( ($vA['tid'] == $player['tid']) and $vA['type'] != 3 and ($vA['min']>=$player['in'] and $vA['min']<=$player['out'])) // забили и не автогол
  498.                                     {
  499.                                         $komanda_zabila = true;
  500.                                         if ($line == 0) $p = $p + 0;
  501.                                         if ($line == 1) $scores[] = array('type'=>1,'caption'=>'Каждый забитый гол','p'=>0.5);
  502.                                         if ($line == 2) $scores[] = array('type'=>1,'caption'=>'Каждый забитый гол','p'=>1);
  503.                                         if ($line == 3) $scores[] = array('type'=>1,'caption'=>'Каждый забитый гол','p'=>1);
  504.                                     }
  505.  
  506.                                     if ( (($vA['tid'] != $player['tid']) or $vA['type'] == 3) and ($vA['min']>=$player['in'] and $vA['min']<=$player['out'])) // пропустили или автогол
  507.                                     {
  508.                                         $komanda_propustila = true;
  509.                                         if ($vA['type'] == 2) // с пенальти
  510.                                         {
  511.                                             if ($line == 0) $scores[] = array('type'=>1,'caption'=>'Каждый пропущенный гол (с пенальти)','p'=>-0.5);
  512.                                             if ($line == 1) $scores[] = array('type'=>1,'caption'=>'Каждый пропущенный гол (с пенальти)','p'=>-0.5);
  513.                                             if ($line == 2) $scores[] = array('type'=>1,'caption'=>'Каждый пропущенный гол (с пенальти)','p'=>-0.5);
  514.                                             if ($line == 3) $p = $p + 0;
  515.                                         } else
  516.                                         {
  517.                                             if ($line == 0) $scores[] = array('type'=>1,'caption'=>'Каждый пропущенный гол','p'=>-1);
  518.                                             if ($line == 1) $scores[] = array('type'=>1,'caption'=>'Каждый пропущенный гол','p'=>-0.5);
  519.                                             if ($line == 2) $scores[] = array('type'=>1,'caption'=>'Каждый пропущенный гол','p'=>-0.5);
  520.                                             if ($line == 3) $p = $p + 0;
  521.                                         }
  522.                                     }
  523.                                 }
  524.                                
  525.                                 // победный гол
  526.                                 $m = 0;
  527.                                
  528.                                 if ($win_goal and ($vA['type'] == 1 or $vA['type'] == 2))
  529.                                 {
  530.                                     if ($vA['tid'] == $player['tid'])
  531.                                     {
  532.                                         $activeGoal=$activeGoal+1;
  533.                                         if ($player['id'] == $vA['id'])
  534.                                         {
  535.                                             if ($activeGoal == $win_goal)
  536.                                             {
  537.                                                 if ($line == 0) $scores[] = array('atype'=>6,'type'=>1,'caption'=>'Победный гол','p'=>3);
  538.                                                 if ($line == 1) $scores[] = array('atype'=>6,'type'=>1,'caption'=>'Победный гол','p'=>1);
  539.                                                 if ($line == 2) $scores[] = array('atype'=>6,'type'=>1,'caption'=>'Победный гол','p'=>1);
  540.                                                 if ($line == 3) $scores[] = array('atype'=>6,'type'=>1,'caption'=>'Победный гол','p'=>1);
  541.                                                 $p = $p + $m;
  542.                                             }
  543.                                         }
  544.                                     }
  545.                                 }
  546.                                 // гол с игры
  547.                                 $m = 0;
  548.                                 if ($vA['type'] == 1 and $player['id'] == $vA['id'])
  549.                                 {
  550.                                     $goals = $goals + 1;
  551.                                     if ($line == 0) $scores[] = array('atype'=>4,'type'=>1,'caption'=>'Гол с игры','p'=>10);
  552.                                     if ($line == 1) $scores[] = array('atype'=>4,'type'=>1,'caption'=>'Гол с игры','p'=>5);
  553.                                     if ($line == 2) $scores[] = array('atype'=>4,'type'=>1,'caption'=>'Гол с игры','p'=>4);
  554.                                     if ($line == 3) $scores[] = array('atype'=>4,'type'=>1,'caption'=>'Гол с игры','p'=>3);
  555.                                 }
  556.                                
  557.                                 $p = $p + $m;
  558.  
  559.                                 // пенальти
  560.                                 $m = 0;
  561.                                 if ($vA['type'] == 2 and $player['id'] == $vA['id'])
  562.                                 {
  563.                                     $goals = $goals + 1;
  564.                                     if ($line == 0) $scores[] = array('atype'=>5,'type'=>1,'caption'=>'Пенальти','p'=>3);
  565.                                     if ($line == 1) $scores[] = array('atype'=>5,'type'=>1,'caption'=>'Пенальти','p'=>2);
  566.                                     if ($line == 2) $scores[] = array('atype'=>5,'type'=>1,'caption'=>'Пенальти','p'=>2);
  567.                                     if ($line == 3) $scores[] = array('atype'=>5,'type'=>1,'caption'=>'Пенальти','p'=>2);
  568.                                 }
  569.                                
  570.                                 $p = $p + $m;
  571.  
  572.                                 // автогол
  573.                                 $m = 0;
  574.                                 if ($vA['type'] == 3 and $player['id'] == $vA['id'])
  575.                                 {
  576.                                     if ($line == 0) $scores[] = array('atype'=>9,'type'=>1,'caption'=>'Автогол','p'=>-3);
  577.                                     if ($line == 1) $scores[] = array('atype'=>9,'type'=>1,'caption'=>'Автогол','p'=>-3);
  578.                                     if ($line == 2) $scores[] = array('atype'=>9,'type'=>1,'caption'=>'Автогол','p'=>-3);
  579.                                     if ($line == 3) $scores[] = array('atype'=>9,'type'=>1,'caption'=>'Автогол','p'=>-5);
  580.                                 }
  581.                                
  582.                                 $p = $p + $m;
  583.  
  584.                                 // асист
  585.                                 $m = 0;
  586.                                 if ($vA['type'] == 4 and $player['id'] == $vA['id'])
  587.                                 {
  588.                                     if ($line == 0) $scores[] = array('atype'=>2,'type'=>1,'caption'=>'Голевой пас','p'=>3);
  589.                                     if ($line == 1) $scores[] = array('atype'=>2,'type'=>1,'caption'=>'Голевой пас','p'=>2.5);
  590.                                     if ($line == 2) $scores[] = array('atype'=>2,'type'=>1,'caption'=>'Голевой пас','p'=>1.5);
  591.                                     if ($line == 3) $scores[] = array('atype'=>2,'type'=>1,'caption'=>'Голевой пас','p'=>1.5);
  592.                                     $asist = $asist + 1;
  593.                                 }
  594.                                
  595.                                 $p = $p + $m;
  596.  
  597.                                 // красная
  598.                                 if ($vA['type'] == 5 and $player['id'] == $vA['id'])
  599.                                 {
  600.                                     $scores[] = array('atype'=>8,'type'=>1,'caption'=>'Красная','p'=>-3);
  601.                                     $scores[] = array('type'=>1,'caption'=>'Возврат за желтую','p'=>1);
  602.                                     $red = true;
  603.                                 }
  604.  
  605.                                 // желтая
  606.                                 if ($vA['type'] == 6 and ($player['id'] == $vA['id']))
  607.                                 {
  608.                                     $scores[] = array('atype'=>7,'type'=>1,'caption'=>'Желтая','p'=>-1);
  609.                                     $yellow = true;
  610.                                 }
  611.                                
  612.                                 // пенальти не забитый
  613.                                 $m = 0;
  614.                                 if ($vA['type'] == 7 and $player['id'] == $vA['id'])
  615.                                 {
  616.                                     if ($line == 0) $scores[] = array('atype'=>10,'type'=>1,'caption'=>'Пенальти не забитый','p'=>-2);$m = -2;
  617.                                     if ($line == 1) $scores[] = array('atype'=>10,'type'=>1,'caption'=>'Пенальти не забитый','p'=>-3);$m = -3;
  618.                                     if ($line == 2) $scores[] = array('atype'=>10,'type'=>1,'caption'=>'Пенальти не забитый','p'=>-3);$m = -3;
  619.                                     if ($line == 3) $scores[] = array('atype'=>10,'type'=>1,'caption'=>'Пенальти не забитый','p'=>-3);$m = -3;
  620.                                 }
  621.  
  622.                                 $m = 0;
  623.                                 // пенальти отраженный (если пенальти не забитый, а я вратарь, команда не забившая пенальти не моя и я в это время был на воротах, то видимо я и отбил
  624.                                 if ($vA['type'] == 7 and $line==0 and $player['tid'] != $vA['tid'] and ($vA['min']>=$player['in'] and $vA['min']<=$player['out']))
  625.                                 {
  626.                                     if ($line == 0) $scores[] = array('atype'=>12,'type'=>1,'caption'=>'Пенальти отраженный','p'=>2);
  627.                                 }
  628.                                
  629.                                 $p = $p + $m;                              
  630.                             }
  631.                         }
  632.  
  633.                         if (!$komanda_zabila) // команда не забила
  634.                         {
  635.                             if ($line == 0) $scores[] = array('type'=>1,'caption'=>'Команда не забила','p'=>0);
  636.                             if ($line == 1) $scores[] = array('type'=>1,'caption'=>'Команда не забила','p'=>0);
  637.                             if ($line == 2) $scores[] = array('type'=>1,'caption'=>'Команда не забила','p'=>-1);
  638.                             if ($line == 3) $scores[] = array('type'=>1,'caption'=>'Команда не забила','p'=>-2);
  639.                         }
  640.  
  641.                         if (!$komanda_propustila) // команда не пропустила
  642.                         {
  643.                             if ($line == 0) $scores[] = array('type'=>1,'caption'=>'Команда не пропустила','p'=>3);
  644.                             if ($line == 1) $scores[] = array('type'=>1,'caption'=>'Команда не пропустила','p'=>3);
  645.                             if ($line == 2) $scores[] = array('type'=>1,'caption'=>'Команда не пропустила','p'=>1.5);
  646.                         }
  647.                        
  648.                         if ($goals>=3) // хеттрик
  649.                         {
  650. //                          if ($line == 0) $scores[] = array('type'=>1,'caption'=>'Пенальти','p'=>2);$p = $p + 0;
  651.                             if ($line == 1) $scores[] = array('type'=>1,'caption'=>'Хеттрик','p'=>5);
  652.                             if ($line == 2) $scores[] = array('type'=>1,'caption'=>'Хеттрик','p'=>4);
  653.                             if ($line == 3) $scores[] = array('type'=>1,'caption'=>'Хеттрик','p'=>3);
  654.                         }
  655.                        
  656.                         if ($jocker) $data[$player['id']]["jocker"] = 1;
  657.                        
  658.                         if ($line == 0)
  659.                         {
  660.                             $out = $player['out'];
  661.                             $in = $player['in'];
  662.                             if ($out>90) $out = 90;
  663.                             if ($in>90) $in = 90;
  664.                             if ($status == 1)
  665.                             {
  666.                                 $saves = self::gauss( ( ($res['shots2']-$res['score2']) * ($out - $in) ) / (90) );
  667.                                 $scores[] = array('atype'=>11,'acount'=>$saves,'type'=>2,'caption'=>'Удары в створ(отраженные) - '.$saves,'p'=>(0.4*($saves)));
  668.                             }
  669.  
  670.                             if ($status == 2)
  671.                             {
  672.                                 $saves = self::gauss( ( ($res['shots1']-$res['score1']) * ($out - $in) ) / (90) );
  673.                                 $scores[] = array('atype'=>11,'acount'=>$saves,'type'=>2,'caption'=>'Удары в створ(отраженные) - '.($saves),'p'=>(0.4*($saves)));
  674.                             }
  675.                         }
  676.  
  677.                         $out = $player['out'];
  678.                         $in = $player['in'];
  679.                         if ($out>90) $out = 90;
  680.                         if ($in>90) $in = 90;
  681.  
  682.                         $scores[] = array('atype'=>3,'type'=>2,'caption'=>'Выход на поле','p'=>0);                      
  683.                        
  684.                         if ( ($out - $in) <20 ) $scores[] = array('type'=>2,'caption'=>'Количество минут на поле меньше 20','p'=>-1); // количество минут на поле меньше 20
  685.                         $data[$player['id']]['line'] = $line;
  686.                         $data[$player['id']]['p'] = $scores;
  687.                        
  688.                         $points1 = 0;
  689.                         $points2 = 0;
  690.                         if ($scores[0]['type'])
  691.                         {
  692.                             foreach ($scores as $kss=>$vss)
  693.                             {
  694.                                 if ($vss['type'] == 1)  $points1 = $points1 + $vss['p'];
  695.                                 if ($vss['type'] == 2)  $points2 = $points2 + $vss['p'];
  696.                             }
  697.                         }
  698.  
  699.                         $data[$player['id']]['points1'] = $points1; // очки до подсчета серийности, умножения на коэфициенты и джокера
  700.                         if ($jocker) $points1 = 1.5 * $points1;
  701.                         $data[$player['id']]['points2'] = $points1; // очки до подсчета серийности, умножения на коэфициенты но с подсчетом джокера
  702.                         $data[$player['id']]['points3'] = $points2; // очки за мало времени на поле и отбитые мячи
  703.  
  704.                         // серийность, добавление в базу серий и обновление количества матчей в уже активных сериях
  705.                        
  706.                         // серии вратарей
  707.                         if ($line == 0)
  708.                         {
  709.                             // серийный суперкипер
  710.                             if ($saves>5)
  711.                             {
  712.                                 $series[] = self::serieDo($player['id'],$match->lid,2,$match->id);
  713.                             }
  714.                             else
  715.                             {
  716.                                 $series[] = self::serieUnDo($player['id'],$match->lid,2,$match->id);
  717.                             }
  718.                         }
  719.  
  720.                         // серия сухий матчей (не для напов)
  721.                         if (!$komanda_propustila and $line!=3)
  722.                         {
  723.                             if ($line == 0) $serie = 1;
  724.                             if ($line == 1) $serie = 3;
  725.                             if ($line == 2) $serie = 6;
  726.                             $series[] = self::serieDo($player['id'],$match->lid,$serie,$match->id);
  727.                         }
  728.                         else
  729.                         {
  730.                             if ($line!=3)
  731.                             {
  732.                                 if ($line == 0) $serie = 1;
  733.                                 if ($line == 1) $serie = 3;
  734.                                 if ($line == 2) $serie = 6;
  735.                                 $series[] = self::serieUnDo($player['id'],$match->lid,$serie,$match->id);
  736.                             }
  737.                         }
  738.  
  739.                         // серия голов
  740.                         if ($goals>0)
  741.                         {
  742.                             if ($line == 1) $serie = 4;
  743.                             if ($line == 2) $serie = 7;
  744.                             if ($line == 3) $serie = 9;
  745.                             if ($line!=0)
  746.                             $series[] = self::serieDo($player['id'],$match->lid,$serie,$match->id);
  747.                         } else
  748.                         {
  749.                             if ($line == 1) $serie = 4;
  750.                             if ($line == 2) $serie = 7;
  751.                             if ($line == 3) $serie = 9;
  752.                             if ($line!=0)
  753.                             $series[] = self::serieUnDo($player['id'],$match->lid,$serie,$match->id);
  754.                         }
  755.  
  756.                         // серия передач
  757.                         if ($asist>0)
  758.                         {
  759.                             if ($line == 1) $serie = 5;
  760.                             if ($line == 2) $serie = 8;
  761.                             if ($line == 3) $serie = 10;
  762.                             if ($line!=0)
  763.                             $series[] = self::serieDo($player['id'],$match->lid,$serie,$match->id);
  764.                         } else
  765.                         {
  766.                             if ($line == 1) $serie = 5;
  767.                             if ($line == 2) $serie = 8;
  768.                             if ($line == 3) $serie = 10;
  769.                             if ($line!=0)
  770.                             $series[] = self::serieUnDo($player['id'],$match->lid,$serie,$match->id);
  771.                         }
  772.  
  773.                         // серии на желтые и красные карточки
  774.                         if ($yellow and !$red)
  775.                         {
  776.                             $series[] = self::serieDo($player['id'],$match->lid,11,$match->id);
  777.                         } else
  778.                         {
  779.                             $series[] = self::serieUnDo($player['id'],$match->lid,11,$match->id);
  780.                         }
  781.  
  782.                         if ($red)
  783.                         {
  784.                             $series[] = self::serieDo($player['id'],$match->lid,12,$match->id);
  785.                         }
  786.                         else
  787.                         {
  788.                             $series[] = self::serieUnDo($player['id'],$match->lid,12,$match->id);
  789.                         }
  790.                         $activeSeries = self::getSeries($series,$player['id'],$match->lid);
  791.  
  792.                         $data[$player['id']]['series'] = $activeSeries;
  793.                         $points4 = 0;
  794.                         if ($activeSeries)
  795.                         {
  796.                             foreach ($activeSeries as $keySerie=>$valueSerie)
  797.                             {
  798.                                 if ($valueSerie['id'])
  799.                                 {
  800.                                     $mcount = $valueSerie['match'];
  801.                                     switch ($valueSerie['type'])
  802.                                     {
  803.                                         case '1':
  804.                                         {
  805.                                             if ($mcount == 2) $points4 = $points4 + 1;
  806.                                             if ($mcount == 3) $points4 = $points4 + 2;
  807.                                             if ($mcount == 4) $points4 = $points4 + 3;
  808.                                             if ($mcount >= 5) $points4 = $points4 + 4;
  809.                                             break;
  810.                                         }
  811.                                         case '2':
  812.                                         {
  813.                                             if ($mcount == 2) $points4 = $points4 + (0.2*$saves);
  814.                                             if ($mcount == 3) $points4 = $points4 + (0.3*$saves);
  815.                                             if ($mcount >= 4) $points4 = $points4 + (0.4*$saves);
  816.                                             break;
  817.                                         }
  818.                                         case '3':
  819.                                         {
  820.                                             if ($mcount == 2) $points4 = $points4 + 1;
  821.                                             if ($mcount == 3) $points4 = $points4 + 2;
  822.                                             if ($mcount == 4) $points4 = $points4 + 3;
  823.                                             if ($mcount >= 5) $points4 = $points4 + 4;
  824.                                             break;
  825.                                         }
  826.                                         case '4':
  827.                                         {
  828.                                             if ($mcount == 2) $points4 = $points4 + 2;
  829.                                             if ($mcount == 3) $points4 = $points4 + 3;
  830.                                             if ($mcount == 4) $points4 = $points4 + 4;
  831.                                             if ($mcount >= 5) $points4 = $points4 + 5;
  832.                                             break;
  833.                                         }
  834.                                         case '5':
  835.                                         {
  836.                                             if ($mcount == 2) $points4 = $points4 + 1.5;
  837.                                             if ($mcount == 3) $points4 = $points4 + 2;
  838.                                             if ($mcount == 4) $points4 = $points4 + 2.5;
  839.                                             if ($mcount >= 5) $points4 = $points4 + 3;
  840.                                             break;
  841.                                         }
  842.                                         case '6':
  843.                                         {
  844.                                             if ($mcount == 2) $points4 = $points4 + 0.5;
  845.                                             if ($mcount == 3) $points4 = $points4 + 1;
  846.                                             if ($mcount == 4) $points4 = $points4 + 1.5;
  847.                                             if ($mcount >= 5) $points4 = $points4 + 2;
  848.                                             break;
  849.                                         }
  850.                                         case '7':
  851.                                         {
  852.                                             if ($mcount == 2) $points4 = $points4 + 1;
  853.                                             if ($mcount == 3) $points4 = $points4 + 2;
  854.                                             if ($mcount == 4) $points4 = $points4 + 3;
  855.                                             if ($mcount >= 5) $points4 = $points4 + 4;
  856.                                             break;
  857.                                         }
  858.                                         case '8':
  859.                                         {
  860.                                             if ($mcount == 2) $points4 = $points4 + 1;
  861.                                             if ($mcount == 3) $points4 = $points4 + 2.5;
  862.                                             if ($mcount == 4) $points4 = $points4 + 4;
  863.                                             if ($mcount >= 5) $points4 = $points4 + 5;
  864.                                             break;
  865.                                         }
  866.                                         case '9':
  867.                                         {
  868.                                             if ($mcount == 2) $points4 = $points4 + 1;
  869.                                             if ($mcount == 3) $points4 = $points4 + 2.5;
  870.                                             if ($mcount == 4) $points4 = $points4 + 4;
  871.                                             if ($mcount >= 5) $points4 = $points4 + 5;
  872.                                             break;
  873.                                         }
  874.                                         case '10':
  875.                                         {
  876.                                             if ($mcount == 2) $points4 = $points4 + 1;
  877.                                             if ($mcount == 3) $points4 = $points4 + 1.5;
  878.                                             if ($mcount == 4) $points4 = $points4 + 2;
  879.                                             if ($mcount >= 5) $points4 = $points4 + 2.5;
  880.                                             break;
  881.                                         }
  882.                                         case '11':
  883.                                         {
  884.                                             if ($mcount == 2) $points4 = $points4 - 1;
  885.                                             if ($mcount == 3) $points4 = $points4 - 2;
  886.                                             if ($mcount == 4) $points4 = $points4 - 3;
  887.                                             if ($mcount >= 5) $points4 = $points4 - 4;
  888.                                             break;
  889.                                         }
  890.                                         case '12':
  891.                                         {
  892.                                             if ($mcount == 2) $points4 = $points4 - 5;
  893.                                             if ($mcount >= 3) $points4 = $points4 - 7;
  894.                                             break;
  895.                                         }
  896.                                     }
  897.                                 }
  898.                             }
  899.                         }
  900.                        
  901.                         $data[$player['id']]['points4'] = $points4; // очки за серийность
  902.                         $data[$player['id']]['sum'] = $points1+$points2+$points4; // очки суммарно
  903.                         unset($scores);
  904.                     }
  905.                 }
  906.                 $match->series = serialize($series);
  907.                 $match->save();
  908.                
  909.                
  910.                 // проставить -1 очко тем кто не играл
  911.                 foreach ($team1AllPlayers as $keyPlayer=>$valuePlayer)
  912.                 {
  913.                     if (!$valuePlayer['in_match'])
  914.                     {
  915.                         $clearPointsArray['id'] = $valuePlayer['id'];
  916.                         $clearPointsArray['line'] = $valuePlayer['line'];
  917.                         $clearPointsArray['points1'] = -1;
  918.                         $clearPointsArray['points2'] = 0;
  919.                         $clearPointsArray['points3'] = 0;
  920.                         $clearPointsArray['points4'] = 0;
  921.                         $clearPointsArray['sum'] = -1;
  922.                        
  923.                         $clearPointsArray['p'] = array(0=>array('atype'=>42,'type'=>1,'caption'=>'Не играл','p'=>-1));
  924.                        
  925.                         $data[$valuePlayer['id']] = $clearPointsArray;
  926.                     }
  927.                 }
  928.  
  929.                 foreach ($team2AllPlayers as $keyPlayer=>$valuePlayer)
  930.                 {
  931.                     if (!$valuePlayer['in_match'])
  932.                     {
  933.                         $clearPointsArray['id'] = $valuePlayer['id'];
  934.                         $clearPointsArray['line'] = $valuePlayer['line'];
  935.                         $clearPointsArray['points1'] = -1;
  936.                         $clearPointsArray['points2'] = 0;
  937.                         $clearPointsArray['points3'] = 0;
  938.                         $clearPointsArray['points4'] = 0;
  939.                         $clearPointsArray['sum'] = -1;
  940.                        
  941.                         $clearPointsArray['p'] = array(0=>array('atype'=>42,'type'=>1,'caption'=>'Не играл','p'=>-1));
  942.                        
  943.                         $data[$valuePlayer['id']] = $clearPointsArray;
  944.                     }
  945.                 }
  946.  
  947.                 return $data;
  948.             } else return false;
  949.         }
  950.        
  951.         private static function getSeries($seriesArray,$pid,$lid)
  952.         {
  953.             if ($seriesArray)
  954.             {
  955.                 foreach ($seriesArray as $keySeries=>$valueSeries)
  956.                 {
  957.                     if ($valueSeries['pid'] == $pid and $valueSeries['id'] != 'new' and $valueSeries['active'] and $valueSeries['match']>1)
  958.                     {
  959.                         $returnArray[] = $valueSeries;
  960.                     }
  961.                 }
  962.                
  963.                 return $returnArray;
  964.             } else return false;
  965.         }
  966.        
  967.         // округление по гауcсу (к ближайшему, кроме случая когда после точки 5; тогда округление идет к ближайшему четному (4.4 => 4, 4.6 => 5, 4.5 => 4, 5.5 => 6)
  968.         private static function gauss($r)
  969.         {
  970.             if ( ($r - floor($r)) > 0.5 ) return ceil($r);
  971.             if ( ($r - floor($r)) < 0.5 ) return floor($r);
  972.             if ( ($r - floor($r)) == 0.5 )
  973.             {
  974.                 if (floor($r) % 2 == 0) return floor($r);
  975.                 if (ceil($r) % 2 == 0) return ceil($r);
  976.             }
  977.         }
  978.  
  979.        
  980.         // прервать серию
  981.         private static function serieUnDo($pid,$lid,$type,$matchId)
  982.         {
  983.             $checkRow = ORM::for_table('serie')->where('pid',$pid)->where('lid',$lid)->where('type',$type)->where('active',1)->find_one();
  984.             if ($checkRow->id)
  985.             {
  986.                 $tempSerie['id'] = $checkRow->id;
  987.                 $tempSerie['active'] = 0;
  988.                 $tempSerie['last_mid'] = $matchId;
  989.                 $tempSerie['match'] = $checkRow->match;
  990.                 $tempSerie['type'] = $checkRow->type;
  991.                 $tempSerie['pid'] = $pid;
  992.                 return $tempSerie;
  993.                
  994. /*              $checkRow->active = 0;
  995.                 $checkRow->last_mid = $matchId;
  996.                 $checkRow->save(); */
  997.                 return true;
  998.             }
  999.            
  1000.             return false;
  1001.         }
  1002.  
  1003.         // продолжить серию на один матч или создать новую серию если нету
  1004.         private static function serieDo($pid,$lid,$type,$matchId)
  1005.         {
  1006.             $checkRow = ORM::for_table('serie')->where('pid',$pid)->where('lid',$lid)->where('type',$type)->where('active',1)->find_one();
  1007.             if ($checkRow->id)
  1008.             {
  1009.                 if ($checkRow->last_mid != $matchId) // проверка чтобы серия за один матч два раза случайно не засчиталась
  1010.                 {
  1011.                     $tempSerie['id'] = $checkRow->id;
  1012.                     $tempSerie['last_mid'] = $matchId;
  1013.                     $tempSerie['pid'] = $pid;
  1014.                     $tempSerie['active'] = 1;
  1015.                     $tempSerie['match'] = $checkRow->match + 1;
  1016.                     $tempSerie['type'] = $checkRow->type;
  1017.                     return $tempSerie;
  1018.  
  1019. /*                  $checkRow->match = $checkRow->match + 1;
  1020.                     $checkRow->last_mid = $matchId;
  1021.                     $checkRow->save(); */
  1022.                 }
  1023.             } else
  1024.             {
  1025.                 $tempSerie['id'] = 'new';
  1026.                 $tempSerie['pid'] = $pid;
  1027.                 $tempSerie['lid'] = $lid;
  1028.                 $tempSerie['type'] = $type;
  1029.                 $tempSerie['last_mid'] = $matchId;
  1030.                 $tempSerie['active'] = 1;
  1031.                 $tempSerie['match'] = 1;
  1032.                 return $tempSerie;
  1033.  
  1034. /*              $newRow = ORM::for_table('serie')->create();
  1035.                 $newRow->pid = $pid;
  1036.                 $newRow->lid = $lid;
  1037.                 $newRow->type = $type;
  1038.                 $newRow->last_mid = $matchId;
  1039.                 $newRow->active = 1;
  1040.                 $newRow->match = 1;
  1041.                 $newRow->save(); */
  1042.             }
  1043.            
  1044.             return true;
  1045.         }
  1046.        
  1047.         private static function minp($min)
  1048.         {
  1049.             if (strpos($min,'+'))
  1050.             {
  1051.                 return (substr($min,0,strpos($min,'+')) + substr($min,strpos($min,'+')+1));
  1052.             } else return $min;
  1053.         }
  1054.        
  1055.         public static function getMatchResult($id)
  1056.         {
  1057.             $match = ORM::for_table('match')->where('id',$id)->find_one();
  1058.             if ($match->championat_url)
  1059.             {
  1060.                 set_time_limit(120);
  1061.                 $content = file_get_contents($match->championat_url);
  1062. // result
  1063.                 preg_match_all('|<div class="match__count__main">(.*?) : (.*?)<\/div>|sei',$content,$t1);
  1064.                 preg_match('|<div class="match__count__status">(.*?)<br><\/div>|',$content,$t2);
  1065.                 $data['status'] = $t2[1];
  1066.                 $data['score1'] = $t1[1][0];
  1067.                 $data['score2'] = $t1[2][0];
  1068.                 preg_match('|tab-stats(.*?)tab-text-all|sei',$content,$stat);
  1069.                 preg_match('|Голы<\/div>(.*)<div class="match__tab__head">|seiU',$stat[1],$arr['score']);
  1070.                 preg_match('|Ассистенты<\/div>(.*)<div class="match__tab__head">|seiU',$stat[1],$arr['asist']);
  1071.                 preg_match('|Наказания<\/div>(.*)<div class="match__tab__head">|seiU',$stat[1],$arr['cards']);
  1072.                 preg_match('|Незабитые пенальти<\/div>(.*)<div class="match__tab__head">|seiU',$stat[1],$arr['no_penalty']);
  1073.                 preg_match('|id="tab-combination">(.*)<div class="match__table__head">Запасные|seiU',$content,$arr['line']);
  1074.                 $stat[1] .= '<div class="match-section__sec">овечка</div>';
  1075.                 preg_match('|Статистика<\/div>(.*)<div class="match-section__sec">|seiU',$stat[1],$arr['stat']);
  1076.  
  1077. //              $arr['line'][1] .= '<div class="in-out">';
  1078.                 preg_match_all('|<tr>(.*)<\/tr>|seiU',$arr['line'][0],$t3); // состав
  1079.                 if ($t3[1][0])
  1080.                 {
  1081.                     $team_id = $match->team1;
  1082.                     $next_change = false;
  1083.                     foreach ($t3[1] as $kP=>$vP)
  1084.                     {
  1085.                         if ($next_change) $team_id = $match->team2; // первая табличка с составом прошла, теперь вторая команда
  1086.                         if (strpos($vP,'"Голоса"') and $kP!=0) { $next_change = true;}
  1087.                        
  1088.                         preg_match('|player/(.*).html|seiU',$vP,$t4);
  1089.                         preg_match('|_in.*/>(.*)</div>|seiU',$vP,$t5);
  1090.                         preg_match('|_out.*/>(.*)</div>|seiU',$vP,$t6);
  1091.                         unset($elLine);
  1092.                         if ($t4[1])
  1093.                         {
  1094.                             $elLine['championat_id'] = $t4[1];
  1095.                             $player = ORM::for_table('players')->where('championat_id',$t4[1])->find_one();
  1096.                             if ($player->id)
  1097.                             {
  1098.                                 $elLine['fio'] = $player->fio_full;
  1099.                                 $elLine['id'] = $player->id;
  1100.                                 $teams[$player->id] = $team_id;
  1101.                                 $elLine['tid'] = $team_id;
  1102.                             }
  1103.                             if ($t5[1]) $elLine['in'] = self::minp(trim(substr($t5[1],2))); else $elLine['in'] = 0;
  1104.                             if ($t6[1]) $elLine['out'] = self::minp(trim(substr($t6[1],2))); else $elLine['out'] = 300;
  1105.                         }
  1106.  
  1107.                         if ($elLine)
  1108.                         $line[] = $elLine;
  1109.                     }
  1110.  
  1111.                     $data['lineup'] = $line;
  1112.                 }
  1113.  
  1114. //              print_r($arr['stat']); die();
  1115. //              $arr['stat'][1] = str_replace('<div class="row">','<азаза><озозо>',$arr['stat'][1]);
  1116. //              $arr['stat'][1] .= '<озозо>';
  1117.                
  1118. //              preg_match_all('|<озозо>(.*)<азаза>|seiU',$arr['stat'][1],$t3);
  1119.                 if ($arr['stat'][0])
  1120.                 {
  1121.                     $actualSection = substr($arr['stat'][0],strpos($arr['stat'][0],'Удары в створ')-300,350);
  1122.                     preg_match('|left">(.*)</div>.*right">&nbsp;&nbsp;(.*)</div>|seiU',$actualSection,$t4);
  1123.                     if (isset($t4[1])) $data['shots1'] = $t4[1];
  1124.                     if (isset($t4[2])) $data['shots2'] = $t4[2];
  1125.                 }
  1126.  
  1127.                 if ($arr['cards'][1]) // наказания!!111
  1128.                 {
  1129.                     $arr['cards'][1] .= 'match__stat__row';
  1130.                     preg_match_all('|<div class="match__stat__row(.*)<\/a>|seiU',$arr['cards'][1],$t3);
  1131.                     if ($t3[1][0])
  1132.                     {
  1133.                         foreach ($t3[1] as $kAction=>$vAction)
  1134.                         {
  1135.                             $k = "'";
  1136.                             preg_match_all('|minute">(.*)<\/div>.*match_icon_(.*).png".*player/(.*)\.html">(.*),.*|seiU',$vAction,$t4);
  1137.                             if ($t4[1][0])
  1138.                             {
  1139.                                 if (strpos($t4[1][0],"'")) $t4[1][0] = substr($t4[1][0],0,strpos($t4[1][0],"'"));
  1140.                                 $nArray['min'] = self::minp($t4[1][0]);
  1141.                                 $nArray['championat_id'] = $t4[3][0];
  1142.                                 $player = ORM::for_table('players')->where('championat_id',$t4[3][0])->find_one();
  1143.                                 if ($player->id)
  1144.                                 {
  1145.                                     $nArray['id'] = $player->id;
  1146.                                     $nArray['tid'] = $teams[$player->id];
  1147.                                     $player->fio = trim($t4[4][0]);
  1148.                                     $player->save();
  1149.                                 }
  1150.  
  1151.                                 $nArray['fio'] = $t4[4][0];
  1152.                                 if ($t4[2][0] == 'red') { foreach ($data['lineup'] as $kl=>$vl) { if ($vl['id'] == $player->id) {$data['lineup'][$kl]['out'] = trim($t4[1][0]);}} $nArray['type'] = 5; $nArray['captiontype'] = "Красная"; } // Красная
  1153.                                 if ($t4[2][0] == 'yellow') { $nArray['type'] = 6; $nArray['captiontype'] = "Желтая"; } // Желтая
  1154.                                 if ($t4[2][0] == 'yellow2') { foreach ($data['lineup'] as $kl=>$vl) { if ($vl['id'] == $player->id) {$data['lineup'][$kl]['out'] = trim($t4[1][0]);}} $nArray['type'] = 5; $nArray['captiontype'] = "Красная (вторая желтая)"; } // Красная вторая
  1155.                                 $data['actions'][] = $nArray;
  1156.                                 unset($nArray);
  1157.                             }
  1158.                         }
  1159.                     }
  1160.                 }
  1161.  
  1162.                 if ($arr['no_penalty'][1]) // незабитый!!111
  1163.                 {
  1164.                     $arr['no_penalty'][1] .= 'match__stat__row';
  1165.                     preg_match_all('|<div class="match__stat__row(.*)<\/a>|seiU',$arr['no_penalty'][1],$t3);
  1166.  
  1167.                     if ($t3[1][0])
  1168.                     {
  1169.                         foreach ($t3[1] as $kAction=>$vAction)
  1170.                         {
  1171.                             $k = "'";
  1172.                             preg_match_all('|minute">(.*)'.$k.'<\/div>.*player/(.*)\.html">(.*),.*|seiU',$vAction,$t4);
  1173.                             if ($t4[1][0])
  1174.                             {
  1175.                                 $nArray['min'] = self::minp($t4[1][0]);
  1176.                                 $nArray['championat_id'] = $t4[2][0];
  1177.                                 $player = ORM::for_table('players')->where('championat_id',$t4[2][0])->find_one();
  1178.                                 if ($player->id)
  1179.                                 {
  1180.                                     $nArray['id'] = $player->id;
  1181.                                     $nArray['tid'] = $teams[$player->id];
  1182.                                     $player->fio = trim($t4[3][0]);
  1183.                                     $player->save();
  1184.                                 }
  1185.  
  1186.                                 $nArray['fio'] = $t4[3][0];
  1187.                                 $nArray['type'] = 7; // незабитый
  1188.                                 $nArray['captiontype'] = "Незабитый пенальти";
  1189.                                 $data['actions'][] = $nArray;
  1190.                                 unset($nArray);
  1191.                             }
  1192.                         }
  1193.                     }
  1194.                 }
  1195.                
  1196.                 if ($arr['asist'][1]) // асисты!!111
  1197.                 {
  1198.                     $arr['asist'][1] .= 'match__stat__row';
  1199.                     preg_match_all('|<div class="match__stat__row(.*)<\/a>|seiU',$arr['asist'][1],$t3);
  1200.  
  1201.                     if ($t3[1][0])
  1202.                     {
  1203.                         foreach ($t3[1] as $kAction=>$vAction)
  1204.                         {
  1205.                             $k = "'";
  1206.                             preg_match_all('|minute">(.*)'.$k.'<\/div>.*player/(.*)\.html">(.*),.*|seiU',$vAction,$t4);
  1207.                             if ($t4[1][0])
  1208.                             {
  1209.                                 $nArray['min'] = self::minp($t4[1][0]);
  1210.                                 $nArray['championat_id'] = $t4[2][0];
  1211.                                 $player = ORM::for_table('players')->where('championat_id',$t4[2][0])->find_one();
  1212.                                 if ($player->id)
  1213.                                 {
  1214.                                     $nArray['id'] = $player->id;
  1215.                                     $nArray['tid'] = $teams[$player->id];
  1216.                                     $player->fio = trim($t4[3][0]);
  1217.                                     $player->save();
  1218.                                 }
  1219.  
  1220.                                 $nArray['fio'] = $t4[3][0];
  1221.                                 $nArray['type'] = 4; // асист
  1222.                                 $nArray['captiontype'] = "Асист";
  1223.                                 $data['actions'][] = $nArray;
  1224.                                 unset($nArray);
  1225.                             }
  1226.                         }
  1227.                     }
  1228.                 }
  1229.  
  1230.                 if ($arr['score'][1]) // ГОЛЫ!!111
  1231.                 {
  1232.                     $arr['score'][1] .= 'match__stat__row';
  1233.                     preg_match_all('|<div class="match__stat__row(.*)<\/a>|seiU',$arr['score'][1],$t3);
  1234.  
  1235.                     if ($t3[1][0])
  1236.                     {
  1237.                         foreach ($t3[1] as $kAction=>$vAction)
  1238.                         {
  1239.                             $k = "'";
  1240.                             preg_match_all('|minute">(.*)'.$k.'<\/div>.*match__score (.*)">.*player/(.*)\.html">(.*),.*|seiU',$vAction,$t4);
  1241.  
  1242.                             if ($t4[1][0])
  1243.                             {
  1244.                                 $nArray['min'] = self::minp($t4[1][0]);
  1245.                                 $nArray['championat_id'] = $t4[3][0];
  1246.                                 $player = ORM::for_table('players')->where('championat_id',$t4[3][0])->find_one();
  1247.                                 if ($player->id)
  1248.                                 {
  1249.                                     $nArray['id'] = $player->id;
  1250.                                     $nArray['tid'] = $teams[$player->id];
  1251.                                     $player->fio = trim($t4[4][0]);
  1252.                                     $player->save();
  1253.                                 }
  1254.  
  1255.                                 $nArray['fio'] = $t4[4][0];
  1256.                                 if ($t4[2][0] == '_goal') { $nArray['type'] = 1; $nArray['captiontype'] = "Гол"; } // гол
  1257.                                 if ($t4[2][0] == '_pen') { $nArray['type'] = 2; $nArray['captiontype'] = "Гол с пенальти"; } // гол с пенальти
  1258.                                 if ($t4[2][0] == '_own') { $nArray['type'] = 3; $nArray['captiontype'] = "Автогол"; } // автогол
  1259.                                 $data['actions'][] = $nArray;
  1260.                                 unset($nArray);
  1261.                             }
  1262.                         }
  1263.                     }
  1264.                    
  1265.                 }
  1266.  
  1267.                 return $data;
  1268.             } else return false;
  1269.         }
  1270.        
  1271.         private static function getLeagueMainData($mainUrl)
  1272.         {
  1273. // <a class="sport__menu__i button" href="/football/_russiapl/748/teams.html">Команды</a>
  1274. // <a class="sport__menu__i button" href="/football/_russiapl/748/calendar/tour.html">Календарь игр</a>
  1275. //<h1 class="sport__head__title">РФПЛ</h1>
  1276.             set_time_limit(120);
  1277.             $content = file_get_contents($mainUrl);
  1278.             preg_match('|<a.*?href="(.*?)">Команды<\\/a>|',$content,$t1);
  1279.             preg_match('|<a.*?href="(.*?)">Календарь игр<\/a>|',$content,$t2);
  1280.             preg_match('/[\d]+/sei',$t1[1],$t3);
  1281.             preg_match('|<h1.*?>(.*?)<\/h1>|sei',$content,$t4);
  1282.             if (!$t4[1]) $t4[1] = 'Чемпионат';
  1283.             if ($t1[1] and $t2[1])
  1284.             {          
  1285.                 return array(
  1286.                     "url_teams"=>"http://www.championat.com".$t1[1],
  1287.                     "url_calendar"=>"http://www.championat.com".$t2[1],
  1288.                     "id"=>$t3[0],
  1289.                     "caption"=>$t4[1]
  1290.                 );
  1291.             } else return false;
  1292.         }
  1293.        
  1294.         public static function getMatches($type,$trunc = true)
  1295.         {
  1296.             $league = ORM::for_table('leagues')->where('type',$type)->where('active',1)->find_one();
  1297.             $parsing = json_decode($league->parsing,true);
  1298.             if ($parsing['calendar'])
  1299.             {
  1300.                 set_time_limit(120);
  1301.                 $content = file_get_contents($parsing['calendar']);
  1302.                 $modifiedContent = str_replace('<div class="sport__date">','razdvatri42o<div class="sport__date">',$content);
  1303. //              echo $modifiedContent; die();
  1304.                 preg_match_all('|<div class="sport__date">(.*)razdvatri42o|seiU', $modifiedContent, $tours);
  1305.                 $lastTour = substr($modifiedContent,strripos($modifiedContent,'<div class="sport__date"')); //последний тур регулярка не охватывает, это костыли
  1306.                 $lastTour = substr($lastTour,strpos($lastTour,'>')+1); // костыли на последний тур, продолжение
  1307.                 $tours[1][] = $lastTour;
  1308.                 //  print_r($tours);
  1309.                 //  die();
  1310.                 $lastWeek = -99;
  1311.                 $tour = 0;
  1312.                 if ($tours[1][0])
  1313.                 {
  1314.                     foreach ($tours[1] as $keySection=>$valueSection)
  1315.                     {
  1316.                         preg_match_all('|(.*)<\/div>|seiU',$valueSection,$t1); // чисто даты игр
  1317.                         preg_match_all("|result\.html'>(.*)<\/a>.*result\.html'>(.*)<\/a>.*match/(.*).html'|seiU",$valueSection,$t2); // данные по матчам
  1318. //                      print_r($t2);
  1319.  
  1320.                         $calendarItem['date'] = trim($t1[1][0]);
  1321.                         // тур со вторник по понедельник
  1322.                         $time = substr($calendarItem['date'],0,strpos($calendarItem['date'],',')-1);
  1323.                         $arr = explode(' ',$time);
  1324.                         if ($arr[0] and $arr[1] and $arr[2])
  1325.                         {
  1326.                             switch ($arr[1])
  1327.                             {
  1328.                                 case 'января': { $arr[1]='01'; break;}
  1329.                                 case 'февраля': { $arr[1]='02'; break;}
  1330.                                 case 'марта': { $arr[1]='03'; break;}
  1331.                                 case 'апреля': { $arr[1]='04'; break;}
  1332.                                 case 'мая': { $arr[1]='05'; break;}
  1333.                                 case 'июня': { $arr[1]='06'; break;}
  1334.                                 case 'июля': { $arr[1]='07'; break;}
  1335.                                 case 'августа': { $arr[1]='08'; break;}
  1336.                                 case 'сентября': { $arr[1]='09'; break;}
  1337.                                 case 'октября': { $arr[1]='10'; break;}
  1338.                                 case 'ноября': { $arr[1]='11'; break;}
  1339.                                 case 'декабря': { $arr[1]='12'; break;}
  1340.                             }
  1341.  
  1342.                             $dtf = $arr[0].".".$arr[1].".".$arr[2];
  1343.                         }
  1344.                         $time = strtotime($dtf);
  1345.                         $calendarItem['mysql_date'] = date('Y-m-d',$time);
  1346.                         $time = $time - 60*60*24;
  1347.                         if (date('W',$time)!=$lastWeek)
  1348.                         {
  1349.                             $tour++;
  1350.                             $lastWeek = date('W',$time);
  1351.                         }
  1352.                        
  1353.                         $calendarItem['tour'] = $tour;
  1354.  
  1355.                         if ($t2[1][0] and $t2[2][0] and $t2[3][0])
  1356.                         {
  1357.                             foreach ($t2[1] as $keyMatch=>$valueMatch)
  1358.                             {
  1359.                                 $calendarItem['team1'] = $t2[1][$keyMatch];
  1360.                                 $calendarItem['team2'] = $t2[2][$keyMatch];
  1361.                                 $calendarItem['championat_id'] = $t2[3][$keyMatch];
  1362.                                 $calendar[] = $calendarItem;
  1363.                             }
  1364.                         }
  1365.  
  1366.                     }
  1367.                    
  1368.                     if ($calendar[0]['team1'])
  1369.                     {
  1370.                         foreach ($calendar as $keyCal=>$valueCal)
  1371.                         {
  1372.                             $check = ORM::for_table('match')->where('championat_id',$valueCal['championat_id'])->find_one();
  1373.                             if (!$check->id)
  1374.                             {
  1375.                                 $team1 = ORM::for_table('teams')->where_like('caption','%'.$valueCal['team1'].'%')->find_one();
  1376.                                 if (!$team1->id) $team1 = ORM::for_table('teams')->where_like('captions','%'.$valueCal['team1'].'|%')->find_one();
  1377.  
  1378.                                 $team2 = ORM::for_table('teams')->where_like('caption','%'.$valueCal['team2'].'%')->find_one();
  1379.                                 if (!$team2->id) $team2 = ORM::for_table('teams')->where_like('captions','%'.$valueCal['team2'].'|%')->find_one();
  1380.                                
  1381.                                 if (!$team1->id or !$team2->id)
  1382.                                 {
  1383.                                     Log::msg('При добавлении матчей мы не смогли найти команду, может они как по другому называются в турнире, обновите синонимы. '.$valueCal['team1'].' или '.$valueCal['team2'],true);
  1384.                                 } else
  1385.                                 {
  1386.                                     $newRow = ORM::for_table('match')->create();
  1387.                                     $newRow->team1 = $team1->id;
  1388.                                     $newRow->team2 = $team2->id;
  1389.                                     $newRow->lid = $league->id;
  1390.                                     $newRow->date = $valueCal['mysql_date'];
  1391.                                     $newRow->championat_id = $valueCal['championat_id'];
  1392.                                     $newRow->championat_url = "http://www.championat.com/".Cnst::get($type.'Prefix')."/".$league->championat_id."/match/".$valueCal['championat_id'].".html";
  1393.                                     $newRow->tour = $valueCal['tour'];
  1394.                                     $newRow->save();
  1395.                                 }
  1396.                             } else { Log::msg('Матч уже есть в базе '.$valueCal['team1'].' '.$valueCal['team2']);}
  1397.                         }
  1398.                     }
  1399. //                  print_r($calendar);
  1400. //                  die();
  1401.                     return true;
  1402.                 }
  1403.             }
  1404.  
  1405.            
  1406.         }
  1407.        
  1408.         public static function getParseLineUp($team_id)
  1409.         {
  1410.             $teamRow = ORM::for_table('teams')->where('id',$team_id)->find_one();
  1411.             if ($teamRow->id)
  1412.             {
  1413.                 $parsing = json_decode($teamRow->parsing,true);
  1414.                 if ($parsing['lineup'])
  1415.                 {
  1416.                     $content = file_get_contents($parsing['lineup']);
  1417.                     preg_match("|<table class='table b-table-sortlist'>(.*?)Отзаявлены|sei", $content, $t0);
  1418.                     if (!$t0[0]) $t0[0] = $content;
  1419.                     preg_match_all("|<tr class=.*?<a href='.*?\/player/(.*?)\.html'>(.*?)</a>.*?</tr>|sei",$t0[0],$t1);
  1420.                     if ($t1[1][0])
  1421.                     {
  1422.                         foreach ($t1[1] as $keyPlayer=>$valuePlayer)
  1423.                         {
  1424.                         $line = -1; // хуй знает кто
  1425.                         if (strpos($t1[0][$keyPlayer],'нападающий')) $line = 3;
  1426.                         if (strpos($t1[0][$keyPlayer],'защитник')) $line = 1; //
  1427.                         if (strpos($t1[0][$keyPlayer],'полузащитник')) $line = 2; // местами не менять, а то все защитниками станут
  1428.                         if (strpos($t1[0][$keyPlayer],'вратарь')) $line = 0;
  1429.                        
  1430.                         $checkDb = ORM::for_table('players')->where('championat_id',$valuePlayer)->find_one();
  1431.                         if ($checkDb->id)
  1432.                             {
  1433.                                 if ($checkDb->team_id != $team_id) // у игрока поменялась команда
  1434.                                 {
  1435.                                     $checkDb->team_id = $team_id;
  1436.                                     $checkDb->save();
  1437.                                     Log::msg("У игрока ".$t1[2][$keyPlayer]." (id:".$checkDb->id.") меняем команду");
  1438.                                 }
  1439.                                 if ($checkDb->line != $line) // игрок сменил амплуа, лол
  1440.                                 {
  1441.                                     $checkDb->line = $line;
  1442.                                     $checkDb->save();
  1443.                                     Log::msg("У игрока ".$t1[2][$keyPlayer]." (id:".$checkDb->id.") меняем амплуа");
  1444.                                 }
  1445.                             } else
  1446.                             {
  1447.                                 $newPlayerRow = ORM::for_table('players')->create();
  1448.                                 $newPlayerRow->fio_full = $t1[2][$keyPlayer];
  1449.                                 $newPlayerRow->team_id = $team_id;
  1450.                                 $newPlayerRow->line = $line;
  1451.                                 $newPlayerRow->championat_id = $valuePlayer;
  1452.                                 $newPlayerRow->save();
  1453.                                 Log::msg("Добавляем игрока ".$t1[2][$keyPlayer]." в базу");
  1454.                             }
  1455.                         }
  1456.  
  1457.                         $notInTeamNow = ORM::for_table('players')->where_not_in('championat_id', $t1[1])->where('team_id',$team_id)->find_result_set()->set('team_id',0)->save(); // покинули команду
  1458.                     }
  1459.                 }
  1460.             } else return 0;
  1461.         }
  1462.        
  1463.         public static function getTeamsByLeague($type,$players=true)
  1464.         {
  1465.             $league = ORM::for_table('leagues')->where('type',$type)->where('active',1)->find_one();
  1466.             $parsing = json_decode($league->parsing,true);
  1467.             if ($parsing['teams'])
  1468.             {
  1469.                 $content = file_get_contents($parsing['teams']);
  1470.                 preg_match('|<table class.*?table sport__tiles.*?>(.*?)<\/table>|sei', $content, $t1);
  1471.                 preg_match_all("|<a href='(.*?)\/result\.html'.*?class.*?sport__tiles__i.*?>.*?<strong>(.*?)<\/strong>.*?<\/a>|sei", $t1[1], $t2);
  1472.  
  1473.                 if ($t2[1][0])
  1474.                 {
  1475.                     foreach ($t2[1] as $keyTeam=>$valueTeam)
  1476.                     {
  1477.                         $championat_id = substr($valueTeam,strripos($valueTeam,'/')+1);
  1478.                         $checkDb = ORM::for_table('teams')->where_like('caption','%'.$t2[2][$keyTeam].'%')->find_one();
  1479.                         if ($checkDb->id)
  1480.                         {
  1481.                             if ($type!='le' and $type!='lc') // для лиги европы и лч не меняем урл парсинга состава - в этих турнирах составы не полные, оставляем урлы от лиг стран
  1482.                             {
  1483.                                 $checkDb->parsing = '{"lineup":"http://www.championat.com'.$t2[1][$keyTeam].'/players.html"}';
  1484.                                 $checkDb->save();
  1485.                             }
  1486.                             Log::msg('Попытка добавить команду в базу: команда уже есть, хотели добавить : '.$t2[2][$keyTeam].', в базе '.$checkDb->caption.'(id:'.$checkDb->id.')');
  1487.                             $checkConnection = ORM::for_table('teams_in_leagues')->where('id_team',$checkDb->id)->where('id_league',$league->id)->find_one();
  1488.                             if (!$checkConnection->id)
  1489.                             {
  1490.                                 $newConnectionRow = ORM::for_table('teams_in_leagues')->create();
  1491.                                 $newConnectionRow->id_team = $checkDb->id;
  1492.                                 $newConnectionRow->id_league = $league->id;
  1493.                                 $newConnectionRow->championat_id = $championat_id;
  1494.                                 $newConnectionRow->save();
  1495.                                
  1496.                                 Log::msg('Добавили связь команды '.$checkDb->caption.'(id:'.$checkDb->id.') и лиги '.$league->caption.'(id:'.$league->id.',championat_id:'.$league->championat_id.')');
  1497.                             } else
  1498.                             {
  1499.                                 Log::msg('Команда '.$checkDb->caption.' (id:'.$checkDb->id.') уже играет в лиге '.$league->caption.' (id:'.$league->id.')');
  1500.                             }
  1501.                            
  1502.                             $team_id = $checkDb->id;
  1503.                         }
  1504.                         else
  1505.                         {
  1506.                             Log::msg('Пытаемся добавить команду в базу: '.$t2[2][$keyTeam].'. Прямого вхождения названия не нашли, попробуем поискать в синонимах команд');
  1507.                             $checkSynDb = ORM::for_table('teams')->where_like('captions','%'.$t2[2][$keyTeam].'|%')->find_one();
  1508.                             if ($checkSynDb->id)
  1509.                             {
  1510.                                 if ($type!='le' and $type!='lc') // для лиги европы и лч не меняем урл парсинга состава - в этих турнирах составы не полные, оставляем урлы от лиг стран
  1511.                                 {
  1512.                                     $checkSynDb->parsing = '{"lineup":"http://www.championat.com'.$t2[1][$keyTeam].'/players.html"}';
  1513.                                     $checkSynDb->save();
  1514.                                 }
  1515.                                 Log::msg('Команда найдена в синонимах, искали '.$t2[2][$keyTeam].', нашли '.$checkSynDb->caption);
  1516.                                 $checkConnection = ORM::for_table('teams_in_leagues')->where('id_team',$checkSynDb->id)->where('id_league',$league->id)->find_one();
  1517.                                 if (!$checkConnection->id)
  1518.                                 {
  1519.                                     $newConnectionRow = ORM::for_table('teams_in_leagues')->create();
  1520.                                     $newConnectionRow->id_team = $checkSynDb->id;
  1521.                                     $newConnectionRow->id_league = $league->id;
  1522.                                     $newConnectionRow->championat_id = $championat_id;
  1523.                                     $newConnectionRow->save();
  1524.                                     Log::msg('Добавили связь команды '.$checkSynDb->caption.'(id:'.$checkSynDb->id.') и лиги '.$league->caption.'(id:'.$league->id.',championat_id:'.$league->championat_id.')');
  1525.                                 }
  1526.                                 $team_id = $checkSynDb->id;
  1527.                             } else
  1528.                             {
  1529.                                 Log::msg('В синонимах тоже команды нет, сейчас будем первый раз добавлять команду в базу');
  1530.                                 $newTeam = ORM::for_table('teams')->create();
  1531.                                 $newTeam->caption = $t2[2][$keyTeam];
  1532.                                 $newTeam->captions = $t2[2][$keyTeam]."|";
  1533.                                 $newTeam->parsing = '{"lineup":"http://www.championat.com'.$t2[1][$keyTeam].'/players.html"}';
  1534.                                 $newTeam->championat_id = 0;
  1535.                                 $newTeam->save();
  1536.                                 Log::msg('Добавили команду в базу, id : '.$newTeam->id);
  1537.  
  1538.                                 $team_id = $newTeam->id;
  1539.  
  1540.                                 $newConnectionRow = ORM::for_table('teams_in_leagues')->create();
  1541.                                 $newConnectionRow->id_team = $newTeam->id;
  1542.                                 $newConnectionRow->id_league = $league->id;
  1543.                                 $newConnectionRow->championat_id = $championat_id;
  1544.                                 $newConnectionRow->save();
  1545.                                 Log::msg('Добавили связь команды '.$newTeam->caption.'(id:'.$newTeam->id.') и лиги '.$league->caption.'(id:'.$league->id.',championat_id:'.$league->championat_id.')');
  1546.                             }
  1547.                         }
  1548.                        
  1549.                         self::getParseLineUp($team_id);
  1550.                     }
  1551.                 } else Log::msg('При парсинге данных (команды лиги) регулярка не вернула список команд. Возможно чемпионат.ком поменялся',true);
  1552.             } else Log::msg('Нет адреса для парсинга команд лиги. Возможно чемпионат.ком поменялся',true);
  1553.         }
  1554.        
  1555.         public static function getPlayerFullName($id,$leagueChampionatId)
  1556.         {
  1557.             $playerRow = ORM::for_table('players')->where('id',$id)->find_one();
  1558.             if (!$playerRow->championat_id) return true;
  1559.            
  1560.             $url = "http://www.championat.com/".Cnst::get('ruPrefix')."/".$leagueChampionatId."/player/".$playerRow->championat_id.".html";
  1561.             $content = file_get_contents($url);
  1562.             $kv = "'";
  1563.             preg_match_all('|<div class="sport__info__image">.*alt='.$kv.'(.*)'.$kv.'|seiU', $content, $r1);
  1564.             if ($r1[1][0])
  1565.                 $playerRow->fio = $r1[1][0];
  1566.            
  1567.             $playerRow->save();
  1568.             return true;
  1569.         }
  1570.  
  1571.         public static function getLeaguePlayersFullNames($id_league)
  1572.         {
  1573.             $leagueRow = ORM::for_table('leagues')->where('id',$id_league)->find_one();
  1574.             if (!$leagueRow->id) return true;
  1575.  
  1576.             $teamsInLeague = ORM::for_table('teams_in_leagues')->select('id_team')->where('id_league',$id_league)->find_array();
  1577.             if ($teamsInLeague['0']['id_team'])
  1578.             {
  1579.                 foreach ($teamsInLeague as $keyTeam=>$valueTeam)
  1580.                 {
  1581.                     $teamsIdArray[] = $valueTeam['id_team'];
  1582.                 }
  1583.             }
  1584.            
  1585.             $players = ORM::for_table('players')->where_in('team_id',$teamsIdArray)->where('fio','')->find_many();
  1586.             foreach ($players as $playerRow)
  1587.             {
  1588.                 self::getPlayerFullName($playerRow->id,$leagueRow->championat_id);
  1589.                 sleep(2);
  1590.             }
  1591.         }
  1592.        
  1593.         public static function initTournament($mainUrl,$type)
  1594.         {
  1595.             $main = self::getLeagueMainData($mainUrl);
  1596.             Log::msg('Инициализация новой лиги '.$type);
  1597.             if ($main['id'])
  1598.             {
  1599.                 $check = ORM::for_table('leagues')->where('championat_id',$main['id'])->find_array();
  1600.                 if (!$check[0]['id']) // лиги с этой айди еще нет в базе
  1601.                 {
  1602.                     $newLeague = ORM::for_table('leagues')->create();
  1603.                     $newLeague->caption = $main["caption"];
  1604.                     $newLeague->championat_id = $main["id"];
  1605.                     $newLeague->type = $type;
  1606.                     $newLeague->parsing = '{"teams":"'.$main['url_teams'].'","calendar":"'.$main['url_calendar'].'"}';
  1607.                     $newLeague->active = 1;
  1608.                     $newLeague->default_money = 5500;
  1609.                     $newLeague->max_players_from_one_team = 3;
  1610.                     $newLeague->save();
  1611.                     Log::msg('Получаем список команд от парсера');
  1612.                     self::getTeamsByLeague($type);
  1613.                     Log::msg('Получаем список матчей и формируем туры');
  1614.                     self::getMatches($type);
  1615.                     return true;
  1616.                 } else {Log::msg('Лига #'.$main['id'].' уже есть в базе, инициализировать не удалось');}
  1617.             } else return false;
  1618.         }
  1619.     }
  1620.  
  1621.  
  1622. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement