/** * 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; }
/** * 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; }
/** * 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; }
/** * 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; } }
/** * 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; }
/** * 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); }
/** * Get content by URI * * @param string $uri * @return void */ public function getByUri($uri) { $content = Table\Content::findBy(['uri' => $uri]); if (isset($content->id)) { if (class_exists('Phire\\Fields\\Model\\FieldValue')) { $c = \Phire\Fields\Model\FieldValue::getModelObject('Phire\\Content\\Model\\Content', [$content->id]); $data = $c->toArray(); } else { $data = $content->getColumns(); } $this->setContent($data); } }