Example #1
0
 /**
  * Get top contributors.
  *
  * @param [[@doctodo param_type:parentObject]] $parentObject [[@doctodo param_description:parentObject]]
  * @param array                                $options      [[@doctodo param_description:options]] [optional]
  *
  * @return [[@doctodo return_type:getTopContributors]] [[@doctodo return_description:getTopContributors]]
  */
 public function getTopContributors($parentObject, $options = [])
 {
     $individualType = Yii::$app->collectors['types']->getOne('Individual')->object;
     $individualModelClass = $individualType->primaryModel;
     $individualModelAlias = $individualModelClass::modelAlias();
     $taxonomyType = Yii::$app->collectors['taxonomies']->getOne('ic_time_individual_role');
     $taxonomy = $taxonomyType->getTaxonomy('contributor');
     $limit = isset($options['limit_contributors']) ? $options['limit_contributors'] : 5;
     $query = $this->getBaseStatsQuery($parentObject);
     $query->join('LEFT JOIN', Relation::tableName() . ' r2', 'r2.child_object_id=innerQuery.id');
     $query->join('LEFT JOIN', Registry::tableName() . ' reg', 'r2.parent_object_id=reg.id');
     $query->join('LEFT JOIN', RelationTaxonomy::tableName() . ' tax', 'r2.id=tax.relation_id');
     $query->select(['r2.parent_object_id', 'SUM(`hours`) as sum']);
     $query->groupBy(['r2.parent_object_id']);
     $query->andWhere(['reg.object_model' => $individualModelAlias]);
     $query->andWhere(['tax.taxonomy_id' => $taxonomy->primaryKey]);
     $query->addOrderBy(['SUM(`hours`)' => SORT_DESC]);
     $query->limit($limit);
     $c = [];
     foreach ($query->each() as $row) {
         $individual = Registry::getObject($row['parent_object_id']);
         if (!$individual) {
             continue;
         }
         $c[$row['parent_object_id']] = ['label' => $individual->descriptor, 'sum' => $row['sum']];
     }
     return $c;
 }