Skip to content
This repository was archived by the owner on Dec 19, 2025. It is now read-only.

Commit 571d9b4

Browse files
authored
Merge pull request #82 from Raistlfiren/hotfix-search
Search Fix
2 parents 924a89f + 6a6636c commit 571d9b4

6 files changed

Lines changed: 50 additions & 23 deletions

File tree

src/Action/SearchAction.php

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
namespace Bolt\Extension\Bolt\JsonApi\Action;
44

55
use Bolt\Extension\Bolt\JsonApi\Converter\Parameter\ParameterCollection;
6+
use Bolt\Extension\Bolt\JsonApi\Converter\Parameter\Type\Page;
67
use Bolt\Extension\Bolt\JsonApi\Exception\ApiInvalidRequestException;
78
use Bolt\Extension\Bolt\JsonApi\Response\ApiResponse;
89
use Bolt\Extension\Bolt\JsonApi\Storage\Query\PagingResultSet;
@@ -52,22 +53,24 @@ public function handle($contentType = null, Request $request, ParameterCollectio
5253

5354
$results = $set->get($contentType);
5455

55-
$page = $parameters->getParametersByType('page');
56+
/** @var Page $page */
57+
$page = $parameters->get('page');
5658

5759
$this->throwErrorOnNoResults($results, "No search results found for query [$search]");
5860

5961
foreach ($results as $key => $item) {
62+
$contentType = (string) $item->getContenttype();
6063
// optimize this part...
61-
$fields = $parameters->get('fields')->getFields();
64+
$fields = $parameters->get('fields')->getFields($contentType);
6265
$items[$key] = $this->parser->parseItem($item, $fields);
6366
}
6467

6568
return new ApiResponse([
6669
'links' => $this->dataLinks->makeLinks(
6770
$searchContentType,
68-
$page['number'],
71+
$page->getNumber(),
6972
$set->getTotalPages(),
70-
$page['limit'],
73+
$page->getSize(),
7174
$request
7275
),
7376
'meta' => [

src/Converter/JSONAPIConverter.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public function grabParameters($converter, Request $request)
4747
$parameters = [];
4848

4949
$parameters['search'] = $request->query->get('q', false);
50+
$contentType = $request->get('contentType', false);
5051

5152
if (! $this->isSearch($parameters)) {
5253
//Get content type if it isn't a search...
@@ -55,6 +56,8 @@ public function grabParameters($converter, Request $request)
5556
if (! $parameters['contentType']) {
5657
$parameters['contentType'] = $request->attributes->get('contentType');
5758
}
59+
} else if ($contentType) {
60+
$parameters['contentType'] = $contentType;
5861
}
5962

6063
$parameters['page']['size'] = $request->query->get('page[size]', false, true);

src/Converter/Parameter/ParameterFactory.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class ParameterFactory
2626
*/
2727
public static function build($parameters, Config $config, MetadataDriver $metadata)
2828
{
29-
$contentType = $parameters['contentType'];
29+
$contentType = (empty($parameters['contentType']) ? null : $parameters['contentType']);
3030

3131
foreach ($parameters as $key => $value) {
3232
//Get FQDN

src/Converter/Parameter/Type/AbstractParameter.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,13 @@ abstract public function getParameter();
6565
/**
6666
* Returns all field names for the given contenttype.
6767
*/
68-
protected function getAllFieldNames()
68+
protected function getAllFieldNames($contentType = null)
6969
{
70-
return $this->metadata->getClassMetadata($this->contentType)['fields'];
70+
if (!$contentType) {
71+
return $this->metadata->getClassMetadata($this->contentType)['fields'];
72+
}
73+
74+
return $this->metadata->getClassMetadata($contentType)['fields'];
7175
}
7276

7377
/**

src/Converter/Parameter/Type/Fields.php

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -21,33 +21,46 @@ public function convertRequest()
2121
{
2222
$this->fields = [];
2323

24-
if ($this->config->getAllowedFields($this->contentType)) {
25-
$allowedFields = $this->config->getAllowedFields($this->contentType);
24+
if (! isset($this->contentType)) {
25+
$allContentTypes = array_keys($this->config->getContentTypes());
26+
foreach ($allContentTypes as $contentType) {
27+
$this->getFieldsForContentType($contentType);
28+
}
2629
} else {
27-
$allowedFields = array_keys($this->getAllFieldNames());
30+
$this->getFieldsForContentType($this->contentType);
2831
}
2932

30-
if (isset($this->values[$this->contentType])) {
31-
$values = explode(',', $this->values[$this->contentType]);
33+
return $this;
34+
}
35+
36+
protected function getFieldsForContentType($contentType)
37+
{
38+
if ($this->config->getAllowedFields($contentType)) {
39+
$allowedFields = $this->config->getAllowedFields($contentType);
40+
} else {
41+
$allowedFields = array_keys($this->getAllFieldNames($contentType));
42+
}
43+
44+
if (isset($this->values[$contentType])) {
45+
$values = explode(',', $this->values[$contentType]);
3246
foreach ($values as $v) {
3347
if (in_array($v, $allowedFields)) {
34-
$this->fields[] = $v;
48+
$this->fields[$contentType] = $v;
3549
}
3650
}
3751
}
3852

3953
// Default on the default/fallback fields defined in the config.
40-
if (empty($this->fields)) {
41-
$this->fields = $allowedFields;
42-
if ($this->config->getListFields($this->contentType)) {
43-
$this->fields = $this->config->getListFields(($this->contentType));
54+
if (empty($this->fields[$contentType])) {
55+
$this->fields[$contentType] = $allowedFields;
56+
if ($this->config->getListFields($contentType)) {
57+
$this->fields[$contentType] = $this->config->getListFields($contentType);
4458
// todo: do we need to filter these through 'allowed-fields'?
4559
}
4660
}
47-
48-
return $this;
4961
}
5062

63+
5164
public function findConfigValues()
5265
{
5366
}
@@ -63,9 +76,13 @@ public function getParameter()
6376
/**
6477
* @return array
6578
*/
66-
public function getFields()
79+
public function getFields($contentType = null)
6780
{
68-
return $this->fields;
81+
if (! $contentType) {
82+
return $this->fields[$this->contentType];
83+
}
84+
85+
return $this->fields[$contentType];
6986
}
7087

7188
/**

src/Converter/Parameter/Type/Page.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ class Page extends AbstractParameter
2626
public function convertRequest()
2727
{
2828
//False will return 0, which will be less than 1, so it should default correctly.
29-
$size = intval($this->values['size']);
30-
$number = intval($this->values['number']);
29+
$size = (int) $this->values['size'];
30+
$number = (int) $this->values['number'];
3131

3232
// Get limit for query
3333
$this->size = $size >= 1 ? $size : self::DEFAULT_PAGE_SIZE;

0 commit comments

Comments
 (0)