/** * Register Form */ public function actionRegister() { $register = new RegisterForm(ControllerCore::REQUIRE_CAPTCHA_SCENARIO); if (isset($_POST[CHtml::modelName($register)])) { $register->attributes = $_POST[CHtml::modelName($register)]; if ($register->save()) { $form = new LoginUser(); $form->username = $register->email; $form->password = $_POST[CHtml::modelName($register)]['password']; $form->rememberMe = 0; /** * Generate random Assignment for newly registered user */ $user = $register->user; $criteria = new CDbCriteria(); $criteria->with = ['corpusParseTreeConsensus']; $criteria->order = 'rand()'; $ratio = ['definitive' => 5, 'challenge' => ['limit' => 15, 'range' => [1000, 2000]], 'corpus' => ['Tutorial' => 5]]; $criteriaGolden = new CDbCriteria(); $criteriaGolden->mergeWith($criteria); $criteriaGolden->addCondition('corpusParseTreeConsensus.corpusParseTreeStringID is not null'); $criteriaGolden->limit = $ratio['definitive']; $stringsGolden = CorpusParseTreeString::model()->findAll($criteriaGolden); $criteriaChallenge = new CDbCriteria(); $criteriaChallenge->mergeWith($criteria); $criteriaChallenge->addCondition('corpusParseTreeConsensus.corpusParseTreeStringID is null'); $criteriaChallenge->addCondition('ID >= :min and ID <= :max'); $criteriaChallenge->params = [':min' => $ratio['challenge']['range'][0], ':max' => $ratio['challenge']['range'][1]]; $criteriaChallenge->limit = $ratio['challenge']['limit']; $stringsChallenge = CorpusParseTreeString::model()->findAll($criteriaChallenge); $stringsTutorial = []; foreach ($ratio['corpus'] as $corpusName => $limit) { $criteriaTutorial = new CDbCriteria(); $criteriaTutorial->mergeWith($criteria); $criteriaTutorial->with[] = 'corpusParseTree'; $criteriaTutorial->limit = $limit; $criteriaTutorial->compare('corpusParseTree.name', $corpusName); $stringsTutorial = array_merge($stringsTutorial, CorpusParseTreeString::model()->findAll($criteriaTutorial)); } foreach ([$stringsTutorial, $stringsGolden, $stringsChallenge] as $parts) { foreach ($parts as $string) { /* @var $string CorpusParseTreeString */ $assigned = new StringAssigned(); $assigned->userID = $user->ID; $assigned->corpusParseTreeStringID = $string->ID; $assigned->save(); } } /** * End Generate random Assignment */ if ($form->validate() && $form->login()) { $this->emailVerify($register->user); $this->redirect(['/parser']); } } } $this->render('register', ['register' => $register]); }