/** * Recupere les dernieres statistiques de chaque buiobanque, et calcule les statisqtiues globales * @return type */ public function getAverageRate() { $result = array(); $listAttributes = StatTools::getAttributesForRating(); $bbStatsCriteria = new EMongoCriteria(); $bbStatsCriteria->addCond('biobank_id', '!=', '0'); // $biobanksStats = BiobankStats::model()->findAll($bbStatsCriteria); $biobanksStats = array(); $collAggregate = BiobankStats::model()->getCollection()->aggregate(array('$sort' => array('date' => -1)), array('$group' => array('_id' => '$biobank_id', 'biobank' => array('$first' => array('values' => '$values', 'date' => '$date'))))); foreach ($collAggregate['result'] as $firstResult) { $stats = new BiobankStats(); $stats->setAttributes($firstResult['biobank'], false); $biobanksStats[] = $stats; } $rateCount = 0; foreach ($listAttributes as $attributeName => $attributeConstraint) { $partialResult = 0; foreach ($biobanksStats as $BiobankStats) { if (isset($BiobankStats->values[$attributeName])) { $partialResult += $BiobankStats->values[$attributeName]; } } $result['values'][$attributeName] = $partialResult / count($biobanksStats); $rateCount += $result['values'][$attributeName]; } $result['globalRate'] = $rateCount / count($listAttributes); return $result; }