/**
  * Updates an existing Match model.
  * If update is successful, the browser will be redirected to the 'view' page.
  * @param integer $id
  * @return mixed
  */
 public function actionUpdate($id)
 {
     $model = $this->findModel($id);
     $model->date = date('d.m.Y H:i', strtotime($model->date));
     // compositionForm
     $compositionForm = new CompositionForm();
     $compositionForm->match_id = $model->id;
     $compositionForm->initPlayers($model->command_home_id, $model->command_guest_id);
     $searchModel = new CompositionSearch();
     // homeCompositionDataProvider
     $params = ['CompositionSearch' => ['match_id' => $model->id, 'command_id' => $model->command_home_id]];
     $homeCompositionDataProvider = $searchModel->search($params);
     $homeCompositionDataProvider->setSort(['defaultOrder' => ['is_basis' => SORT_DESC, 'number' => SORT_ASC]]);
     // guestCompositionDataProvider
     $params = ['CompositionSearch' => ['match_id' => $model->id, 'command_id' => $model->command_guest_id]];
     $guestCompositionDataProvider = $searchModel->search($params);
     $guestCompositionDataProvider->setSort(['defaultOrder' => ['is_basis' => SORT_DESC, 'number' => SORT_ASC]]);
     $contractTeams = Team::getContractTeams();
     // homeComposition
     if (in_array($model->command_home_id, $contractTeams)) {
         $homeContractType = CompositionForm::CONTRACT_TYPE;
         $homeCompositionData = Contract::find()->where(['command_id' => $model->command_home_id, 'season_id' => $model->season_id, 'is_active' => 1])->orderBy(['number' => SORT_ASC])->all();
     } else {
         $homeContractType = CompositionForm::MEMBERSHIP_TYPE;
         $homeCompositionData = Membership::find()->where(['command_id' => $model->command_home_id])->orderBy(['number' => SORT_ASC])->all();
     }
     $homeComposition = [];
     foreach ($homeCompositionData as $key => $data) {
         $homeComposition[$key]['id'] = $data->id;
         $homeComposition[$key]['name'] = "#" . $data->number . " " . $data->player->lastname . " " . $data->player->firstname;
     }
     // guestComposition
     if (in_array($model->command_guest_id, $contractTeams)) {
         $guestContractType = CompositionForm::CONTRACT_TYPE;
         $guestCompositionData = Contract::find()->where(['command_id' => $model->command_guest_id, 'season_id' => $model->season_id, 'is_active' => 1])->orderBy(['number' => SORT_ASC])->all();
     } else {
         $guestContractType = CompositionForm::MEMBERSHIP_TYPE;
         $guestCompositionData = Membership::find()->where(['command_id' => $model->command_guest_id])->orderBy(['number' => SORT_ASC])->all();
     }
     $guestComposition = [];
     foreach ($guestCompositionData as $key => $data) {
         $guestComposition[$key]['id'] = $data->id;
         $guestComposition[$key]['name'] = "#" . $data->number . " " . $data->player->lastname . " " . $data->player->firstname;
     }
     if ($model->load(Yii::$app->request->post()) && $model->validate()) {
         $model->date = date('Y-m-d H:i', strtotime($model->date));
         $model->save(false);
         return $this->redirect(['view', 'id' => $model->id]);
     } else {
         return $this->render('update', compact('model', 'compositionForm', 'homeComposition', 'guestComposition', 'homeContractType', 'guestContractType', 'homeCompositionDataProvider', 'guestCompositionDataProvider'));
     }
 }
 /**
  * Updates list of players.
  * @return mixed
  */
 public function actionUpdateList()
 {
     $list = Yii::$app->request->post('list');
     $teamId = Yii::$app->request->post('teamId');
     $matchId = Yii::$app->request->post('matchId');
     if (isset($list) && $teamId && $matchId) {
         $list = explode(';', $list);
         $composition = (new \yii\db\Query())->select(['contract_id'])->from(Composition::tableName())->where(['match_id' => $matchId, 'command_id' => $teamId])->all();
         $contractIds = [];
         foreach ($composition as $data) {
             $contractIds[] = $data['contract_id'];
         }
         // Remove
         $removeList = [];
         foreach ($contractIds as $id) {
             if (is_numeric($id) && !in_array($id, $list)) {
                 $removeList[] = $id;
             }
         }
         if (count($removeList) > 0) {
             Composition::deleteAll(['match_id' => $matchId, 'command_id' => $teamId, 'contract_id' => $removeList]);
         }
         // Add
         $contractTeams = Team::getContractTeams();
         if (in_array($teamId, $contractTeams)) {
             $contractType = Composition::CONTRACT_TYPE;
             $contractModel = new Contract();
         } else {
             $contractType = Composition::MEMBERSHIP_TYPE;
             $contractModel = new Membership();
         }
         $addList = [];
         foreach ($list as $id) {
             if (is_numeric($id) && !in_array($id, $contractIds)) {
                 // Add
                 $addList[] = $id;
                 $contract = $contractModel::findOne($id);
                 $model = new Composition();
                 $model->contract_type = $contractType;
                 $model->contract_id = $id;
                 $model->command_id = $teamId;
                 $model->match_id = $matchId;
                 $model->is_basis = 1;
                 $model->is_substitution = 0;
                 $model->is_captain = 0;
                 if (isset($contract)) {
                     $model->number = $contract->number;
                     $model->amplua_id = $contract->amplua_id;
                 }
                 $model->save();
             }
         }
         $out = ['success' => 'true', 'removeList' => $removeList, 'addList' => $addList];
     } else {
         $out = ['success' => 'false', 'list' => $list, 'teamId' => $teamId, 'match' => $matchId];
     }
     return Json::encode($out);
 }