/** * Eager loads the provided relations and assigns their data to a data collection * * @param DataCollection $dataCollection The data collection on which the eager loaded relations will be applied * @param array|null $relations The relations to eager load. Leave empty to use the already defined relations * * @return $this for chaining */ public function eagerLoad(DataCollection &$dataCollection, array $relations = null) { if (empty($relations)) { $relations = $this->eagerRelations; } // Apply eager loaded relations if ($dataCollection->count() && !empty($relations)) { $relationManager = $this->getRelations(); foreach ($relations as $relation => $callback) { // Did they give us a relation name without a callback? if (!is_callable($callback) && is_string($callback) && !empty($callback)) { $relation = $callback; $callback = null; } $relationData = $relationManager->getData($relation, $callback, $dataCollection); $foreignKeyMap = $relationManager->getForeignKeyMap($relation); /** @var DataModel $item */ foreach ($dataCollection as $item) { $item->getRelations()->setDataFromCollection($relation, $relationData, $foreignKeyMap); } } } return $this; }
/** * Figures out how many items exist per visual group and category type * * @param Collection $categories * * @return array */ public static function getCategoriesPerVisualGroup(Collection $categories) { $container = Container::getInstance('com_ars'); // Load visual group definitions /** @var VisualGroups $vGroupModel */ $vGroupModel = $container->factory->model('VisualGroups')->tmpInstance(); $allVisualGroups = $vGroupModel->published(1)->get(true); $visualGroups = array(); $defaultVisualGroup = (object) ['id' => 0, 'title' => '', 'description' => '', 'numitems' => ['all' => 0, 'bleedingedge' => 0, 'normal' => 0]]; if ($allVisualGroups->count()) { /** @var VisualGroups $vGroup */ foreach ($allVisualGroups as $vGroup) { // Get the number of items per visual group and render section $noOfItems = ['all' => 0, 'bleedingedge' => 0, 'normal' => 0]; if ($categories->count()) { /** @var Categories $item */ foreach ($categories as $item) { $renderSection = $item->type; if (empty($item->vgroup_id)) { $defaultVisualGroup->numitems['all']++; $defaultVisualGroup->numitems[$renderSection]++; continue; } if ($item->vgroup_id != $vGroup->id) { continue; } $noOfItems['all']++; $noOfItems[$renderSection]++; } } $visualGroups[$vGroup->id] = (object) ['id' => $vGroup->id, 'title' => $vGroup->title, 'description' => $vGroup->description, 'numitems' => $noOfItems]; } } else { /** @var Categories $item */ foreach ($categories as $item) { $renderSection = $item->type; $defaultVisualGroup->numitems['all']++; $defaultVisualGroup->numitems[$renderSection]++; } } return array_merge(array($defaultVisualGroup), $visualGroups); }