partkeepr

fork of partkeepr
git clone https://git.e1e0.net/partkeepr.git
Log | Files | Refs | Submodules | README | LICENSE

commit a7ace8f4631e287b4d7553b57ef8e7eb944d5e6a
parent a5d0163b706ee93bf19cb0dd09647d9af046e78a
Author: Felicitus <felicitus@felicitus.org>
Date:   Fri, 17 Jul 2015 00:26:14 +0200

Support filtering by IRI for the root associations

Diffstat:
Msrc/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php | 28++++++++++++++++++++++++++--
1 file changed, 26 insertions(+), 2 deletions(-)

diff --git a/src/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php b/src/PartKeepr/DoctrineReflectionBundle/Filter/AdvancedSearchFilter.php @@ -103,8 +103,12 @@ class AdvancedSearchFilter extends AbstractFilter ); } else { - // Pull in associations - $this->addJoins($queryBuilder, $filter); + if ($filter["association"] !== null) { + // Pull in associations + $this->addJoins($queryBuilder, $filter); + } else { + $filter["value"] = $this->getFilterValueFromUrl($filter["value"]); + } $queryBuilder->andWhere( $this->getFilterExpression($queryBuilder, $filter) @@ -114,6 +118,26 @@ class AdvancedSearchFilter extends AbstractFilter } /** + * Gets the ID from an URI or a raw ID. + * + * @param string $value + * + * @return string + */ + private function getFilterValueFromUrl($value) + { + try { + if ($item = $this->iriConverter->getItemFromIri($value)) { + return $this->propertyAccessor->getValue($item, 'id'); + } + } catch (\InvalidArgumentException $e) { + // Do nothing, return the raw value + } + + return $value; + } + + /** * Adds all required joins to the queryBuilder. * * @param QueryBuilder $queryBuilder