/** * Displays and/or update Score models for a competition. * @return mixed */ public function actionCompetition($id) { $competition = $this->findCompetition($id); if (isset($_POST['ScorecardForCompetition'])) { $models = ScorecardForCompetition::find()->andWhere(['id' => array_keys($_POST['ScorecardForCompetition'])])->indexBy('id')->all(); if (!ScorecardForCompetition::loadMultiple($models, Yii::$app->request->post()) || !ScorecardForCompetition::validateMultiple($models)) { $errors = []; foreach ($models as $model) { $errors += $model->errors; } if (count($errors) > 0) { Yii::$app->session->setFlash('danger', Yii::t('igolf', 'Error(s): {0}', [VarDumper::dumpAsString($errors, 4, true)])); } } else { foreach ($models as $model) { $model->save(); } Yii::$app->session->setFlash('success', Yii::t('igolf', 'Scores updated.')); } } else { //@todo do not loop on getScorecards twice... $scorecards = []; foreach ($competition->getRegistrations()->andWhere(['registration.status' => array_merge([Registration::STATUS_CONFIRMED], Registration::getPostCompetitionStatuses())])->each() as $registration) { $scorecards[] = $registration->getScorecard(); // this will create a scorecard if none exists } } return $this->render('competition', ['competition' => $competition, 'dataProvider' => new ActiveDataProvider(['query' => $competition->getScorecards()])]); }