/** * testing method to check if search */ public function testSearch() { $keywords = "male"; $model = SmartResearcherTool::search($keywords); $this->assertNotNull($model); $this->assertEquals("M", $model->gender); }
/** * search samples with the keywords given<br> * keywords are separated by space. * @param unknown $keywords * @return $model sample model with search parameters setted */ public function search($keywords, $biobank_id = null) { //pour chaque mot clé, on cherche une correspondance avec des valeurs possibels d echamps $model = new Sample('search'); if ($biobank_id != null) { $model->biobank_id = $biobank_id; } //split des mots cles $tabKeywords = explode(" ", $keywords); //la correspondance de valeur n est utile que pour un champ, sinon ç ava pas souvent marcher foreach ($tabKeywords as $keyword) { $gender = SmartResearcherTool::isGenderKeyword($keyword); if ($gender != null) { $model->gender = $gender; } else { $ageCriteria = SmartResearcherTool::isAgeKeyword($keyword); if ($ageCriteria != null) { if ($ageCriteria[0] == ">=") { $model->field_age_min = $ageCriteria[1]; } if ($ageCriteria[0] == ">") { $model->field_age_min = $ageCriteria[1] + 1; } if ($ageCriteria[0] == "<=") { $model->field_age_max = $ageCriteria[1]; } if ($ageCriteria[0] == "<") { $model->field_age_max = $ageCriteria[1] - 1; } if ($ageCriteria[0] == "==") { $model->field_age_min = $ageCriteria[1]; $model->field_age_max = $ageCriteria[1]; } } else { //par defaut si le champ ne correspond a rien on l ajoute comme note $model->field_notes = $keyword; } } } return $model; }
/** * affichage de la page de recherche des echantillons */ public function actionSearch() { $model = new Sample('search'); $model->unsetAttributes(); $biobankId = null; if (isset($_GET['id']) && isset($_GET['layout']) && $_GET['layout'] == 'vitrine_layout') { $biobankId = $_GET['id']; } $model->biobank_id = $biobankId; $user = CommonTools::getConnectedUser(); if (isset($_GET['Preferences'])) { $user->preferences->attributes = $_GET['Preferences']; $user->disableBehavior('LoggableBehavior'); if ($user->validate(array('preferences'))) { $user->save(false); } else { var_dump($user->preferences->errors); } } if (isset($_GET['Sample'])) { $model->attributes = $_GET['Sample']; //Used to search terms in model->biobank->collection_id and model->biobank->collection_name $arrayOfBiobanks = array(); if (!empty($_GET['collection_id'])) { $criteria = new EMongoCriteria(); $listWords = explode(",", $_GET['collection_id']); $regexId = ""; foreach ($listWords as $word) { $regexId .= "{$word}|"; } $regexId = substr($regexId, 0, -1); $criteria->addCond('collection_id', '==', new MongoRegex("/({$regexId})/i")); $criteria->select(array('_id')); $biobanks = Biobank::model()->findAll($criteria); foreach ($biobanks as $biobank) { $arrayOfBiobanks[(string) $biobank->_id] = (string) $biobank->_id; } } if (!empty($_GET['collection_name'])) { $criteria = new EMongoCriteria(); $listWords = explode(",", $_GET['collection_name']); $regexId = ""; foreach ($listWords as $word) { $regexId .= "{$word}|"; } $regexId = substr($regexId, 0, -1); $criteria->addCond('collection_name', '==', new MongoRegex("/({$regexId})/i")); $criteria->select(array('_id')); $biobanks = Biobank::model()->findAll($criteria); foreach ($biobanks as $biobank) { $arrayOfBiobanks[$biobank->_id] = (string) $biobank->_id; } } if (!empty($arrayOfBiobanks)) { // $model->arrayOfBiobanks; $model->setArrayOfBiobanks(array_values($arrayOfBiobanks)); } $content = ''; foreach ($_GET['Sample'] as $key => $value) { if (is_array($value)) { foreach ($value as $vkey => $vval) { $content = $content . (string) $vkey . '=' . str_replace(';', ',', (string) $vval) . ';'; } } else { if ($value != null && !empty($value) && (string) $value != '0') { $content = $content . (string) $key . '=' . str_replace(';', ',', (string) $value) . ';'; } } } if (Yii::app()->session['SampleForm'] != $_GET['Sample']) { $_GET['Echantillon_page'] = null; $this->logAdvancedSearch($content); } Yii::app()->session['SampleForm'] = $_GET['Sample']; } //form de la recherche intelligente $smartForm = new SampleSmartForm(); if (isset($_POST['SampleSmartForm'])) { $model->unsetAttributes(); $smartForm->attributes = $_POST['SampleSmartForm']; if (Yii::app()->session['keywords'] != $smartForm->keywords) { $_GET['Echantillon_page'] = null; $this->logSmartSearch($smartForm->keywords); } Yii::app()->session['keywords'] = $smartForm->keywords; $model = SmartResearcherTool::search($smartForm->keywords, $biobankId); } $this->render('search_samples', array('model' => $model, 'smartForm' => $smartForm)); }
public function actionSearchSample() { $id = CommonTools::getBiobankInfo(); if (Yii::app()->user->isGuest) { $this->redirect(array('login', 'id' => $id)); } $model = new Sample('search'); $model->unsetAttributes(); $model->biobank_id = $id; $prefs = Preferences::model()->findByAttributes(array('id_user' => Yii::app()->user->id)); if ($prefs == null) { $prefs = new Preferences(); $prefs->id_user = Yii::app()->user->id; $prefs->save(); } if (isset($_GET['Preferences'])) { $prefs->attributes = $_GET['Preferences']; $prefs->save(); } if (isset($_GET['Sample'])) { $model->attributes = $_GET['Sample']; $content = ''; foreach ($_GET['Sample'] as $key => $value) { if ($value != null && !empty($value) && (string) $value != '0') { $content = $content . (string) $key . '=' . str_replace(';', ',', (string) $value) . ';'; } } if (Yii::app()->session['SampleForm'] != $_GET['Sample']) { $_GET['Echantillon_page'] = null; } Yii::app()->session['SampleForm'] = $_GET['Sample']; } //form de la recherche intelligente $smartForm = new SampleSmartForm(); if (isset($_POST['SampleSmartForm'])) { $model->unsetAttributes(); $model->biobank_id = $id; $smartForm->attributes = $_POST['SampleSmartForm']; if (Yii::app()->session['keywords'] != $smartForm->keywords) { $_GET['Echantillon_page'] = null; } Yii::app()->session['keywords'] = $smartForm->keywords; $model = SmartResearcherTool::search($smartForm->keywords, $id); } $this->render('search_samples', array('model' => $model, 'smartForm' => $smartForm)); }