Exemple #1
0
 /**
  * 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;
 }
Exemple #2
0
 /**
  * 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);
 }