Esempio n. 1
0
 /**
  * Execute search
  *
  * @param  array               $fields
  * @params \Pop\Module\Manager $modules
  * @return array
  */
 public function search($fields, \Pop\Module\Manager $modules)
 {
     $title = strip_tags($fields['title']);
     $selectFields = ['id' => DB_PREFIX . 'content.id', 'type_id' => DB_PREFIX . 'content.type_id', 'parent_id' => DB_PREFIX . 'content.parent_id', 'title' => DB_PREFIX . 'content.title', 'uri' => DB_PREFIX . 'content.uri', 'slug' => DB_PREFIX . 'content.slug', 'status' => DB_PREFIX . 'content.status', 'roles' => DB_PREFIX . 'content.roles', 'order' => DB_PREFIX . 'content.order', 'publish' => DB_PREFIX . 'content.publish', 'expire' => DB_PREFIX . 'content.expire'];
     $sql = Table\Content::sql();
     $sql->select($selectFields);
     $sql->select()->where('status = :status');
     $params = ['status' => 1];
     if (isset($fields['type_id'])) {
         $sql->select()->where('type_id = :type_id');
         $params['type_id'] = $fields['type_id'];
     }
     $sql->select()->where('title LIKE :title');
     $params['title'] = '%' . $title . '%';
     $sql->select()->orderBy('title', 'ASC');
     $results = Table\Content::execute((string) $sql, $params)->rows();
     foreach ($results as $i => $row) {
         $roles = unserialize($row->roles);
         if (count($roles) > 0 && !in_array($this->user_role_id, $roles)) {
             unset($results[$i]);
         } else {
             if ($modules->isRegistered('phire-fields')) {
                 $item = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Content\\Model\\Content', ['id' => $row->id], 'getById', $this->filters);
                 $results[$i] = new \ArrayObject($item->toArray(), \ArrayObject::ARRAY_AS_PROPS);
             }
         }
     }
     $log = new Searches(['keywords' => $title, 'results' => count($results), 'method' => $_POST ? 'post' : 'get', 'timestamp' => time()]);
     $log->save();
     return $results;
 }
Esempio n. 2
0
 /**
  * Get the feed
  *
  * @param  array               $feedHeaders
  * @param  string              $feedType
  * @param  int                 $feedLimit
  * @param  \Pop\Module\Manager $modules
  * @return Writer
  */
 public function getFeed($feedHeaders, $feedType, $feedLimit, \Pop\Module\Manager $modules)
 {
     $items = [];
     $feed = Table\Feed::findAll();
     foreach ($feed->rows() as $f) {
         if ($f->type == 'content') {
             if ($modules->isRegistered('phire-fields')) {
                 $item = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Content\\Model\\Content', ['id' => $f->id]);
             } else {
                 $item = new \Phire\Content\Model\Content();
                 $item->getById($f->id);
             }
             if ($item->status == 1 && count($item->roles) == 0) {
                 $items[] = $this->formatItem($item, 'content', $feedType);
             }
         } else {
             if ($f->type == 'media') {
                 if ($modules->isRegistered('phire-fields')) {
                     $item = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Media\\Model\\Media', ['id' => $f->id]);
                 } else {
                     $item = new \Phire\Media\Model\Media();
                     $item->getById($f->id);
                 }
                 $item->publish = $item->uploaded;
                 $items[] = $this->formatItem($item, 'media', $feedType);
             }
         }
     }
     usort($items, function ($a, $b) {
         $t1 = strtotime($a['publish']);
         $t2 = strtotime($b['publish']);
         return $t2 - $t1;
     });
     if ((int) $feedLimit > 0) {
         if (count($items) > (int) $feedLimit) {
             $items = array_slice($items, 0, (int) $feedLimit);
         }
     }
     $writer = new Writer($feedHeaders, $items);
     if ($feedType == 'atom') {
         $writer->setAtom();
     }
     return $writer;
 }
Esempio n. 3
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;
 }
Esempio n. 4
0
 /**
  * Render single view
  *
  * @param  string $name
  * @param  int    $id
  * @param  string $dateFormat
  * @param  array  $filters
  * @return mixed
  */
 public function renderSingle($name, $id, $dateFormat = null, array $filters = [])
 {
     if (is_numeric($name)) {
         $this->getById($name);
     } else {
         $this->getByName($name);
     }
     if (isset($this->data['models'][0]) && isset($this->data['models'][0]['model'])) {
         $model = $this->data['models'][0]['model'];
         if (null !== $this->data['models'][0]['type_field'] && null !== $this->data['models'][0]['type_value']) {
             $object = \Phire\Fields\Model\FieldValue::getModelObject($model, ['id' => $id], 'getById', $filters);
             return $this->buildSingle($object, $dateFormat);
         } else {
             return null;
         }
     } else {
         return null;
     }
 }
Esempio n. 5
0
 /**
  * Get entity by title
  *
  * @param  string $title
  * @param  array  $filters
  * @return \ArrayObject
  */
 public function getByTitle($title, array $filters = [])
 {
     $entity = Table\Entities::findBy(['title' => $title]);
     if (isset($entity->id)) {
         $this->getById($entity->id);
         if (class_exists('Phire\\Fields\\Model\\FieldValue')) {
             $entity = \Phire\Fields\Model\FieldValue::getModelObjectValues($this, null, $filters);
             $data = $entity->toArray();
             $this->data = array_merge($this->data, $data);
         }
     }
     return new \ArrayObject($this->data, \ArrayObject::ARRAY_AS_PROPS);
 }
Esempio n. 6
0
 /**
  * Get all media by library ID
  *
  * @param  int $libraryId
  * @return array
  */
 public function getAllByLibraryId($libraryId)
 {
     $library = new MediaLibrary();
     $library->getById($libraryId);
     $mediaAry = Table\Media::findBy(['library_id' => $libraryId], ['order' => 'order, id ASC'])->rows();
     $ary = [];
     foreach ($mediaAry as $media) {
         if (class_exists('Phire\\Fields\\Model\\FieldValue')) {
             $med = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Media\\Model\\Media', [$media->id]);
             $m = $med->toArray();
         } else {
             $m = (array) $media;
         }
         $icon = $this->getFileIcon($m['file'], $library);
         $m['filesize'] = $this->formatFileSize($m['size']);
         $m['library_folder'] = $library->folder;
         $m['icon'] = $icon['image'];
         $m['icon_width'] = $icon['width'];
         $m['icon_height'] = $icon['height'];
         $ary[] = $m;
     }
     return $ary;
 }
Esempio n. 7
0
 /**
  * Get tag content
  *
  * @param  Table\Tags          $tag
  * @param  \Pop\Module\Manager $modules
  * @return void
  */
 protected function getTag(Table\Tags $tag, \Pop\Module\Manager $modules)
 {
     if ($modules->isRegistered('phire-fields')) {
         $t = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Tags\\Model\\Tag', [$tag->id]);
         $data = $t->toArray();
     } else {
         $data = $tag->getColumns();
     }
     $items = [];
     $c2t = Table\TagItems::findBy(['tag_id' => $tag->id], ['order' => 'content_id DESC']);
     if ($c2t->hasRows()) {
         foreach ($c2t->rows() as $c) {
             if ($modules->isRegistered('phire-fields')) {
                 $item = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Content\\Model\\Content', [$c->content_id], 'getById', $modules['phire-tags']['filters']);
             } else {
                 $class = 'Phire\\Content\\Model\\Content';
                 $model = new $class();
                 call_user_func_array([$model, 'getById'], [$c->content_id]);
                 $item = $model;
             }
             if ($item->status == 1 && count($item->roles) == 0) {
                 $items[$item->id] = new \ArrayObject($item->toArray(), \ArrayObject::ARRAY_AS_PROPS);
             }
         }
     }
     $data['items'] = $items;
     $this->data = array_merge($this->data, $data);
 }
Esempio n. 8
0
 /**
  * Get content by date
  *
  * @param  string $date
  * @param  string $dateTimeFormat
  * @param  array  $filters
  * @param  string $limit
  * @param  string $page
  * @return array
  */
 public function getByDate($date, $dateTimeFormat, $filters, $limit = null, $page = null)
 {
     $sql1 = Table\Content::sql();
     $sql2 = clone $sql1;
     $sql2->select(['count' => 'COUNT(*)', 'in_date' => DB_PREFIX . 'content_types.in_date']);
     $sql1->select(['id' => DB_PREFIX . 'content.id', 'type_id' => DB_PREFIX . 'content.type_id', 'parent_id' => DB_PREFIX . 'content.parent_id', 'title' => DB_PREFIX . 'content.title', 'uri' => DB_PREFIX . 'content.uri', 'slug' => DB_PREFIX . 'content.slug', 'status' => DB_PREFIX . 'content.status', 'publish' => DB_PREFIX . 'content.publish', 'expire' => DB_PREFIX . 'content.expire', 'in_date' => DB_PREFIX . 'content_types.in_date']);
     $sql1->select()->join(DB_PREFIX . 'content_types', [DB_PREFIX . 'content_types.id' => DB_PREFIX . 'content.type_id']);
     $sql2->select()->join(DB_PREFIX . 'content_types', [DB_PREFIX . 'content_types.id' => DB_PREFIX . 'content.type_id']);
     $dateAry = explode('/', $date);
     if (count($dateAry) == 3) {
         $start = $dateAry[0] . '-' . $dateAry[1] . '-' . $dateAry[2] . ' 00:00:00';
         $end = $dateAry[0] . '-' . $dateAry[1] . '-' . $dateAry[2] . ' 23:59:59';
     } else {
         if (count($dateAry) == 2) {
             $start = $dateAry[0] . '-' . $dateAry[1] . '-01 00:00:00';
             $end = $dateAry[0] . '-' . $dateAry[1] . '-' . date('t', strtotime($dateAry[0] . '-' . $dateAry[1] . '-01')) . ' 23:59:59';
         } else {
             $start = $dateAry[0] . '-01-01 00:00:00';
             $end = $dateAry[0] . '-12-31 23:59:59';
         }
     }
     $sql1->select()->where('status = :status')->where('publish >= :publish1')->where('publish <= :publish2')->where('in_date = :in_date');
     $sql2->select()->where('status = :status')->where('publish >= :publish1')->where('publish <= :publish2')->where('in_date = :in_date');
     $params = ['status' => 1, 'publish' => [$start, $end], 'in_date' => 1];
     $count = Table\Content::execute((string) $sql2, $params)->count;
     if ($count > $limit) {
         $page = null !== $page && (int) $page > 1 ? $page * $limit - $limit : null;
         $sql1->select()->offset($page)->limit($limit);
     }
     $sql1->select()->orderBy('publish', 'DESC');
     $rows = Table\Content::execute((string) $sql1, $params)->rows();
     if (class_exists('Phire\\Fields\\Model\\FieldValue')) {
         foreach ($rows as $i => $row) {
             $fieldValues = \Phire\Fields\Model\FieldValue::getModelObjectValues('Phire\\Content\\Model\\Content', $row->id, $filters);
             $rows[$i] = new \ArrayObject(array_merge((array) $row->getColumns(), $fieldValues), \ArrayObject::ARRAY_AS_PROPS);
             $rows[$i]->publish = date($dateTimeFormat, strtotime($rows[$i]->publish));
         }
     }
     return $rows;
 }