public function testFactory() { $query = 'name = test'; $filter = FilterFactory::createFromQuery($query); $this->assertInstanceOf('AnyContent\\Repository\\Modules\\Core\\ContentRecords\\Filter', $filter); $array = $filter->getConditionsArray(); $this->assertCount(1, $array[1]); $this->assertEquals('name', $array[1][0][0]); $this->assertEquals('=', $array[1][0][1]); $this->assertEquals('test', $array[1][0][2]); $query = 'name = test, name=test2'; $filter = FilterFactory::createFromQuery($query); $this->assertInstanceOf('AnyContent\\Repository\\Modules\\Core\\ContentRecords\\Filter', $filter); $array = $filter->getConditionsArray(); $this->assertCount(2, $array[1]); $query = 'name = "Hans\\,Dieter"'; $filter = FilterFactory::createFromQuery($query); $this->assertInstanceOf('AnyContent\\Repository\\Modules\\Core\\ContentRecords\\Filter', $filter); $array = $filter->getConditionsArray(); $this->assertCount(1, $array[1]); $this->assertEquals('name', $array[1][0][0]); $this->assertEquals('=', $array[1][0][1]); $this->assertEquals('Hans,Dieter', $array[1][0][2]); $query = 'name = test + status = 1'; $filter = FilterFactory::createFromQuery($query); $this->assertInstanceOf('AnyContent\\Repository\\Modules\\Core\\ContentRecords\\Filter', $filter); $array = $filter->getConditionsArray(); $this->assertCount(2, $array); }
public static function getMany(Application $app, Request $request, $repositoryName, $contentTypeName, $workspace = 'default', $clippingName = 'default', $language = 'default') { $timeshift = 0; $orderBy = 'id ASC'; $limit = null; $page = 1; $subset = null; $filter = null; /** @var $repository Repository */ $repository = $app['repos']->get($repositoryName); if ($repository) { $manager = $repository->getContentManager($contentTypeName); if ($manager) { if ($request->query->has('timeshift')) { $timeshift = (int) $request->get('timeshift'); } if ($request->query->has('language')) { $language = $request->get('language'); } if ($request->query->has('order')) { if ($request->get('order') == 'property') { $properties = explode(',', $request->get('properties')); $orderBy = ''; foreach ($properties as $property) { if ($manager->hasProperty(Util::generateValidIdentifier($property), $clippingName)) { if (substr(trim($property), -1) == '-') { $orderBy .= 'property_' . Util::generateValidIdentifier($property) . ' DESC, '; } else { $orderBy .= 'property_' . Util::generateValidIdentifier($property) . ' ASC, '; } } else { return self::badRequest($app, self::UNKNOWN_PROPERTY, $repositoryName, $contentTypeName, $clippingName, $property); } } $orderBy .= ' id ASC'; } else { switch ($request->get('order')) { case 'id': $orderBy = 'id ASC'; break; case 'id-': $orderBy = 'id DESC'; break; case 'name': $orderBy = 'property_name ASC, id ASC'; break; case 'name-': $orderBy = 'property_name DESC, id ASC'; break; case 'pos': $orderBy = 'position ASC, id ASC'; break; case 'pos-': $orderBy = 'position DESC, id ASC'; break; case 'change': // reversed order for token "change", since usually you want to see the latest changes first $orderBy = 'lastchange_timestamp DESC, id ASC'; break; case 'change-': $orderBy = 'lastchange_timestamp ASC, id DESC'; break; case 'creation': $orderBy = 'creation_timestamp ASC, id ASC'; break; case 'creation-': $orderBy = 'creation_timestamp DESC, id DESC'; break; case 'status': $orderBy = 'property_status ASC, id ASC'; break; case 'status-': $orderBy = 'property_status DESC, id ASC'; break; case 'subtype': $orderBy = 'property_subtype ASC, id ASC'; break; case 'subtype-': $orderBy = 'property_subtype DESC, id ASC'; break; } } } if ($request->query->has('limit')) { $limit = (int) $request->get('limit'); if ($request->query->has('page')) { $page = (int) $request->get('page'); } } if ($request->query->has('subset')) { $subset = $request->get('subset'); } if ($request->query->has('filter')) { if (is_array($request->query->get('filter'))) { $filter = FilterFactory::createFromArray($request->query->get('filter')); } else { $filter = FilterFactory::createFromQuery($request->query->get('filter')); } } $records = $manager->getRecords($clippingName, $workspace, $orderBy, $limit, $page, $subset, $filter, $language, $timeshift); return $app->json($records); } else { return self::notFoundError($app, self::UNKNOWN_CONTENTTYPE, $repositoryName, $contentTypeName); } } return self::notFoundError($app, self::UNKNOWN_REPOSITORY, $repositoryName); }