/** * 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; }