/**
  * 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]);
 }