/** * 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]); }
/** * Retrieve documents based on given string ID * @param string $stringsID list of ID of range of ID unified by a string. * eg. 1,2,4-5,22 * @return \CorpusParseTreeString[] */ protected function retrieveDocumentsByStringID($stringsID) { $userWeb = UserWeb::instance(); $user = $userWeb->user(); /* @var $user User */ $documents = []; foreach ($stringsID as $stringID) { $condition = explode('-', $stringID); $case = count($condition); switch ($case) { case 1: $document = $user->moderator ? CorpusParseTreeString::model()->findByPk($condition[0]) : CorpusParseTreeString::model()->with('stringAssigneds')->findByPk($condition[0], 'stringAssigneds.userID=:currentUserID', [':currentUserID' => $user->ID]); if ($document) { $documents[] = $document; } break; case 2: $retrieved = $user->moderator ? CorpusParseTreeString::model()->findAll('ID>=:min and ID<=:max', [':min' => $condition[0], ':max' => $condition[1]]) : CorpusParseTreeString::model()->with('stringAssigneds')->findAll('ID>=:min and ID<=:max and stringAssigneds.userID=:currentUserID', [':min' => $condition[0], ':max' => $condition[1], ':currentUserID' => $user->ID]); $documents = array_merge($documents, $retrieved); break; } } return $documents; }