/**
  * 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;
 }
Example #3
0
 /**
  * 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));
 }
Example #4
0
 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));
 }