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);
 }