/** * @param ContentQueryParser $contentQuery * * @return mixed */ public function __invoke(ContentQueryParser $contentQuery) { if (is_numeric($contentQuery->getIdentifier())) { $contentQuery->setParameter('id', $contentQuery->getIdentifier()); } else { $contentQuery->setParameter('slug', $contentQuery->getIdentifier()); } if (count($contentQuery->getContentTypes()) === 1) { $contentQuery->setDirective('returnsingle', true); } return call_user_func_array($contentQuery->getHandler('select'), [$contentQuery]); }
public function testQueryParse() { $app = $this->getApp(); $qb = new ContentQueryParser($app['storage']); $qb->setQuery('pages'); $qb->parse(); $this->assertEquals(['pages'], $qb->getContentTypes()); $this->assertEquals('select', $qb->getOperation()); $this->assertEmpty($qb->getIdentifier()); $qb = new ContentQueryParser($app['storage']); $qb->setQuery('page/about'); $qb->parse(); $this->assertEquals(['page'], $qb->getContentTypes()); $this->assertEquals('select', $qb->getOperation()); $this->assertEquals('about', $qb->getIdentifier()); $qb = new ContentQueryParser($app['storage']); $qb->setQuery('(pages,entries)/search'); $qb->parse(); $this->assertEquals(['pages', 'entries'], $qb->getContentTypes()); $this->assertEquals('search', $qb->getOperation()); $this->assertEmpty($qb->getIdentifier()); $qb = new ContentQueryParser($app['storage']); $qb->setQuery('(pages,entries,showcases)/latest'); $qb->parse(); $this->assertEquals(['pages', 'entries', 'showcases'], $qb->getContentTypes()); $this->assertEquals('latest', $qb->getOperation()); $this->assertEmpty($qb->getIdentifier()); $qb = new ContentQueryParser($app['storage']); $qb->setQuery('pages,entries/about'); $qb->parse(); $this->assertEquals(['pages', 'entries'], $qb->getContentTypes()); $this->assertEquals('select', $qb->getOperation()); $this->assertEquals('about', $qb->getIdentifier()); $qb = new ContentQueryParser($app['storage']); $qb->setQuery('pages/first/3'); $qb->parse(); $this->assertEquals(['pages'], $qb->getContentTypes()); $this->assertEquals('first', $qb->getOperation()); $this->assertEquals('3', $qb->getDirective('limit')); $this->assertEmpty($qb->getIdentifier()); $qb = new ContentQueryParser($app['storage']); $qb->setQuery('pages,entries/search'); $qb->parse(); $this->assertEquals('search', $qb->getOperation()); $this->assertEquals(['pages', 'entries'], $qb->getContentTypes()); $this->assertEmpty($qb->getIdentifier()); $qb = new ContentQueryParser($app['storage']); $qb->setQuery('page/5'); $qb->parse(); $this->assertEquals(['page'], $qb->getContentTypes()); $this->assertEquals('select', $qb->getOperation()); $this->assertEquals('5', $qb->getIdentifier()); $qb = new ContentQueryParser($app['storage']); $qb->setQuery('(entries,events)/random/10'); $qb->parse(); $this->assertEquals(['entries', 'events'], $qb->getContentTypes()); $this->assertEquals('random', $qb->getOperation()); $this->assertEquals('10', $qb->getDirective('limit')); $this->assertEmpty($qb->getIdentifier()); }
public function testSingleItemMode() { $app = $this->getApp(); $qb = new ContentQueryParser($app['storage'], $app['query.select']); $qb->setQuery('pages/5'); $qb->setParameter('printquery', true); $qb->parse(); $this->assertEquals(['pages'], $qb->getContentTypes()); $this->assertEquals('namedselect', $qb->getOperation()); $this->assertEquals('5', $qb->getIdentifier()); $this->expectOutputString('SELECT pages.* FROM bolt_pages pages WHERE pages.id = :id_1'); $res = $qb->fetch(); $this->assertInstanceOf('Bolt\\Storage\\Entity\\Content', $res); }