Advertisement
semivori

Untitled

Jul 10th, 2020
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 7.80 KB | None | 0 0
  1.  
  2.     /**
  3.      * @param int $player_id
  4.      * @param int $club_id
  5.      * @param int $zone_id
  6.      * @param Matches $match
  7.      * @return bool
  8.      */
  9.     private function checkPresenceInSquadOnMatch($player_id, $club_id, $zone_id, Matches $match)
  10.     {
  11.         $playerToClub = GamePlayerToClub::find()
  12.             ->where([
  13.                 'player_id' => $player_id,
  14.                 'club_id' => $club_id,
  15.                 'zone_id' => $zone_id,
  16.             ])
  17.             ->one();
  18.  
  19.         // Первый входящий трансфер перед матчем
  20.         $lastIncomeTransferBeforeMatch = $this->getLastTransfer(['AND',
  21.             ['player_id' => $player_id],
  22.             ['zone_id' => $zone_id],
  23.             ['to_game_club_id' => $club_id],
  24.             ['<', 'date', $match->play_date]
  25.         ]);
  26.  
  27.         // Первый входящий трансфер после матча
  28.         $firstIncomeTransferAfterMatch = $this->getFirstTransfer(['AND',
  29.             ['player_id' => $player_id],
  30.             ['zone_id' => $zone_id],
  31.             ['to_game_club_id' => $club_id],
  32.             ['>=', 'date', $match->play_date],
  33.         ]);
  34.  
  35.         // Находится ли сейчас игрок в составе
  36.         if ($playerToClub) {
  37.             // Есть ли входящий трансфер перед матчем
  38.             if ($lastIncomeTransferBeforeMatch) {
  39.                 // Исходящий трансфер перед матчем после $lastIncomeTransferBeforeMatch
  40.                 $outcomeTransfer = $this->getLastTransfer(['AND',
  41.                     ['player_id' => $player_id],
  42.                     ['zone_id' => $zone_id],
  43.                     ['from_game_club_id' => $club_id],
  44.                     ['<', 'date', $match->play_date],
  45.                     ['>', 'date', $lastIncomeTransferBeforeMatch->date],
  46.                 ]);
  47.  
  48.                 // Если последняя продажа перед матчем состоялась после последней покупки перед матчем, значит игрок
  49.                 // не был в составе на момент старта матча
  50.                 //
  51.                 // игрок сейчас в команде
  52.                 // игрок был куплен перед матчем
  53.                 // игрок был продан после последней покупки перед матчем ? игрок не был в команде до старта матча : игрок в команде до старта матча
  54.                 return $outcomeTransfer ? false : true;
  55.             }
  56.  
  57.             if ($firstIncomeTransferAfterMatch) {
  58.                 // Исходящий трансфер после матча перед $firstIncomeTransferAfterMatch
  59.                 $outcomeTransfer = $this->getFirstTransfer(['AND',
  60.                     ['player_id' => $player_id],
  61.                     ['zone_id' => $zone_id],
  62.                     ['from_game_club_id' => $club_id],
  63.                     ['>=', 'date', $match->play_date],
  64.                     ['<', 'date', $firstIncomeTransferAfterMatch->date],
  65.                 ]);
  66.  
  67.                 if ($outcomeTransfer) {
  68.                     // игрок сейчас в команде
  69.                     // игрок не был куплен перед матчем
  70.                     // игрок был продан после матча
  71.                     // игрок был снова куплен после матча
  72.                     // >>> игрок был в команде до старта матча, потому что он был в команде с самого начала
  73.                     return true;
  74.                 }
  75.  
  76.                 // игрок сейчас в команде
  77.                 // игрок не был куплен перед матчем
  78.                 // игрок не был продан после матча
  79.                 // >>> игрок не был в команде до старта матча
  80.                 return false;
  81.  
  82.             }
  83.  
  84.             // игрок сейчас в команде
  85.             // игрок не был куплен перед матчем
  86.             // игрок не был куплен после матча
  87.             // >>> игрок был в команде до старта матча, потому что он был в команде с самого начала
  88.             return true;
  89.         } else {
  90.             // Последний исходящий трансфер перед матчем
  91.             $lastOutcomeTransferBeforeMatch = $this->getLastTransfer(['AND',
  92.                 ['player_id' => $player_id],
  93.                 ['zone_id' => $zone_id],
  94.                 ['from_game_club_id' => $club_id],
  95.                 ['<', 'date', $match->play_date]
  96.             ]);
  97.  
  98.             // Есть ли исходящий трансфер перед матчем
  99.             if ($lastOutcomeTransferBeforeMatch) {
  100.                 // Входящий трансфер перед матчем после $lastOutcomeTransferBeforeMatch
  101.                 $incomeTransfer = $this->getLastTransfer(['AND',
  102.                     ['player_id' => $player_id],
  103.                     ['zone_id' => $zone_id],
  104.                     ['to_game_club_id' => $club_id],
  105.                     ['<', 'date', $match->play_date],
  106.                     ['>', 'date', $lastOutcomeTransferBeforeMatch->date],
  107.                 ]);
  108.  
  109.                 // Если последняя покупка перед матчем состоялась после последней продажи перед матчем, значит игрок
  110.                 // был в составе на момент старта матча
  111.                 //
  112.                 // игрок сейчас нет в команде
  113.                 // игрок был продан перед матчем
  114.                 // игрок был куплен после последней продажи перед матчем ? игрок был в команде до старта матча : игрок не был в команде до старта матча
  115.                 return $incomeTransfer ? true : false;
  116.             } else {
  117.                 // Есть ли исходящий трансфер после матча
  118.                 if ($firstIncomeTransferAfterMatch) {
  119.                     // игрока сейчас нет в команде
  120.                     // игрок был куплен после матчем
  121.                     // игрок был продан после матча
  122.                     // >>> игрок не был в команде до старта матча
  123.                     return false;
  124.                 }
  125.  
  126.                 // Какой либо исходящий трансфер
  127.                 $outcomeTransferExist = $this->getLastTransfer(['AND',
  128.                     ['player_id' => $player_id],
  129.                     ['zone_id' => $zone_id],
  130.                     ['from_game_club_id' => $club_id],
  131.                     ['>=', 'date', $match->play_date],
  132.                 ]);
  133.  
  134.                 // Если игрок сейчас не составе и никогда не продавался, значит игрока вообще не было в составе
  135.                 //
  136.                 // игрок сейчас нет в команде
  137.                 // игрок не был продан перед матчем
  138.                 // игрок когда либо продавался ? игрок был в команде до старта матча : игрок не был в команде до старта матча
  139.                 return $outcomeTransferExist ? true : false;
  140.             }
  141.         }
  142.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement