Esempio n. 1
0
 /**
  * Get category items
  *
  * @param  int    $limit
  * @param  int    $page
  * @return array
  */
 public function getItems($limit = null, $page = null)
 {
     $rows = [];
     $dateFields = ['publish', 'expire', 'created', 'updated', 'uploaded'];
     if (isset($this->data['id'])) {
         $sql = Table\CategoryItems::sql();
         $sql->select([0 => '*', 'content_title' => DB_PREFIX . 'content.title', 'media_title' => DB_PREFIX . 'media.title'])->join(DB_PREFIX . 'content', [DB_PREFIX . 'category_items.content_id' => DB_PREFIX . 'content.id'])->join(DB_PREFIX . 'content_types', [DB_PREFIX . 'content_types.id' => DB_PREFIX . 'content.type_id'])->join(DB_PREFIX . 'media', [DB_PREFIX . 'category_items.media_id' => DB_PREFIX . 'media.id'])->join(DB_PREFIX . 'media_libraries', [DB_PREFIX . 'media_libraries.id' => DB_PREFIX . 'media.library_id'])->where('category_id = :category_id');
         $s = ' AND ((' . $sql->quoteId('media_id') . ' IS NOT NULL) OR ((' . $sql->quoteId('media_id') . ' IS NULL) AND (((' . $sql->quoteId('strict_publishing') . ' = 1) AND (' . $sql->quoteId('publish') . ' <= NOW())) OR (' . $sql->quoteId('strict_publishing') . ' = 0)) AND ((' . $sql->quoteId('expire') . ' IS NULL) OR (' . $sql->quoteId('expire') . ' > NOW())) AND (' . $sql->quoteId('status') . ' = 1)))';
         if (null !== $limit) {
             $page = null !== $page && (int) $page > 1 ? $page * $limit - $limit : null;
             $sql->select()->limit($limit)->offset($page);
         }
         if (isset($this->data['order_by_field']) && isset($this->data['order_by_field'])) {
             $by = $this->data['order_by_field'];
             $order = $this->data['order_by_order'];
         } else {
             $by = DB_PREFIX . 'category_items.order';
             $order = 'ASC';
         }
         $sql->select()->orderBy($by, $order);
         $s = str_replace('ORDER BY', $s . ' ORDER BY', (string) $sql);
         $rows = Table\CategoryItems::execute($s, ['category_id' => $this->id])->rows(false);
     }
     if (count($rows)) {
         foreach ($rows as $key => $value) {
             if (class_exists('Phire\\Fields\\Model\\FieldValue')) {
                 if (!empty($value['media_id'])) {
                     $item = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Media\\Model\\Media', [$value['media_id']], 'getById', $this->data['filters']);
                 } else {
                     $item = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Content\\Model\\Content', [$value['content_id']], 'getById', $this->data['filters']);
                 }
                 $value = array_merge((array) $value, $item->toArray());
             } else {
                 if (!empty($value['media_id'])) {
                     $media = new \Phire\Media\Model\Media();
                     $media->getById($value['media_id']);
                     $value = array_merge((array) $value, $media->toArray());
                 }
             }
             foreach ($value as $ky => $vl) {
                 if (in_array($ky, $dateFields)) {
                     $dateValues = $this->formatDateAndTime($vl);
                     foreach ($dateValues as $k => $v) {
                         $value[$ky . '_' . $k] = $v;
                     }
                 }
             }
             $rows[$key] = new \ArrayObject($value, \ArrayObject::ARRAY_AS_PROPS);
         }
     }
     return $rows;
 }