/**
  * Update the main event constraints
  *
  * @param Demand $demand
  * @param bool $respectEnableFields
  * @param \TYPO3\CMS\Extbase\Persistence\QueryInterface $query
  * @param array $constraints
  * @return void
  */
 protected function updateEventConstraints(Demand $demand, $respectEnableFields, \TYPO3\CMS\Extbase\Persistence\QueryInterface $query, array &$constraints)
 {
     // reset datetime constraint
     unset($constraints['datetime']);
     $eventRestriction = $demand->getEventRestriction();
     if ($eventRestriction === Demand::EVENT_RESTRICTION_NO_EVENTS) {
         $constraints[] = $query->equals('isEvent', 0);
     } elseif ($eventRestriction === Demand::EVENT_RESTRICTION_ONLY_EVENTS) {
         $dateField = $demand->getDateField();
         $begin = mktime(0, 0, 0, $demand->getMonth(), 1, $demand->getYear());
         $end = mktime(23, 59, 59, $demand->getMonth() + 1, 0, $demand->getYear());
         $eventsWithNoEndDate = array($query->logicalAnd($query->greaterThanOrEqual($demand->getDateField(), $begin), $query->lessThanOrEqual($demand->getDateField(), $end)));
         $eventsWithEndDate = array($query->logicalAnd($query->greaterThanOrEqual('datetime', $begin), $query->lessThanOrEqual('datetime', $end), $query->lessThanOrEqual('eventEnd', $end)), $query->logicalAnd($query->lessThanOrEqual($dateField, $begin), $query->greaterThanOrEqual('eventEnd', $end)), $query->logicalAnd($query->lessThanOrEqual($dateField, $begin), $query->greaterThanOrEqual('eventEnd', $begin)), $query->logicalAnd($query->lessThanOrEqual($dateField, $end), $query->greaterThanOrEqual('eventEnd', $end)));
         $dateConstraints1 = array($query->logicalAnd($eventsWithNoEndDate), $query->logicalOr($eventsWithEndDate));
         $constraints['datetime'] = $query->logicalOr($dateConstraints1);
         $organizers = $demand->getOrganizers();
         if (!empty($organizers)) {
             $constraints[] = $query->in('organizer', $organizers);
         }
         $locations = $demand->getLocations();
         if (!empty($locations)) {
             $constraints[] = $query->in('location', $locations);
         }
     }
 }
Ejemplo n.º 2
0
 /**
  * Update the main event constraints
  *
  * @param Demand $demand
  * @param bool $respectEnableFields
  * @param \TYPO3\CMS\Extbase\Persistence\QueryInterface $query
  * @param array $constraints
  * @return void
  */
 protected function updateEventConstraints(Demand $demand, $respectEnableFields, \TYPO3\CMS\Extbase\Persistence\QueryInterface $query, array &$constraints)
 {
     $eventRestriction = $demand->getEventRestriction();
     if ($eventRestriction === Demand::EVENT_RESTRICTION_NO_EVENTS) {
         $constraints[] = $query->equals('isEvent', 0);
     } elseif ($eventRestriction === Demand::EVENT_RESTRICTION_ONLY_EVENTS) {
         $constraints[] = $query->equals('isEvent', 1);
         $monthFromDemand = $demand->getMonth();
         $yearFromDemand = $demand->getYear();
         if (!empty($monthFromDemand) && !empty($yearFromDemand)) {
             // reset datetime constraint
             unset($constraints['datetime']);
             $dateField = $demand->getDateField();
             $begin = mktime(0, 0, 0, $demand->getMonth(), 1, $demand->getYear());
             $end = mktime(23, 59, 59, $demand->getMonth() + 1, 0, $demand->getYear());
             $eventsWithNoEndDate = array($query->logicalAnd($query->greaterThanOrEqual($demand->getDateField(), $begin), $query->lessThanOrEqual($demand->getDateField(), $end)));
             $eventsWithEndDate = array($query->logicalAnd($query->greaterThanOrEqual('datetime', $begin), $query->lessThanOrEqual('datetime', $end), $query->lessThanOrEqual('eventEnd', $end)), $query->logicalAnd($query->lessThanOrEqual($dateField, $begin), $query->greaterThanOrEqual('eventEnd', $end)), $query->logicalAnd($query->lessThanOrEqual($dateField, $begin), $query->greaterThanOrEqual('eventEnd', $begin)), $query->logicalAnd($query->lessThanOrEqual($dateField, $end), $query->greaterThanOrEqual('eventEnd', $end)));
             $dateConstraints1 = array($query->logicalAnd($eventsWithNoEndDate), $query->logicalOr($eventsWithEndDate));
             $constraints['datetime'] = $query->logicalOr($dateConstraints1);
         }
         $archiveRestriction = $demand->getArchiveRestriction();
         if (!empty($archiveRestriction)) {
             $timestamp = time();
             $beginningOfDay = strtotime("midnight", $timestamp);
             $endOfDay = strtotime("tomorrow", $beginningOfDay) - 1;
             $activeConstraint = $query->logicalOr($query->greaterThan('datetime', $timestamp), $query->logicalAnd($query->equals('full_day', 0), $query->lessThan('datetime', $timestamp), $query->greaterThan('event_end', $timestamp)), $query->logicalAnd($query->equals('full_day', 1), $query->lessThan('datetime', $beginningOfDay), $query->greaterThan('event_end', $beginningOfDay), $query->lessThan('event_end', $endOfDay)), $query->logicalAnd($query->equals('full_day', 1), $query->lessThan('datetime', $timestamp), $query->greaterThan('event_end', $endOfDay)), $query->logicalAnd($query->equals('full_day', 1), $query->greaterThanOrEqual('datetime', $beginningOfDay), $query->equals('event_end', 0)));
             // reset existing archived constraint
             unset($constraints['archived']);
             if ($demand->getArchiveRestriction() == 'archived') {
                 $constraints['archived'] = $query->logicalNot($activeConstraint);
             } elseif ($demand->getArchiveRestriction() == 'active') {
                 $constraints['archived'] = $activeConstraint;
             }
         }
         $organizers = $demand->getOrganizers();
         if (!empty($organizers)) {
             $constraints[] = $query->in('organizer', $organizers);
         }
         $locations = $demand->getLocations();
         if (!empty($locations)) {
             $constraints[] = $query->in('location', $locations);
         }
     }
 }
Ejemplo n.º 3
0
 /**
  * Returns an array of constraints created from a given demand object.
  *
  * @param QueryInterface $query
  * @param DemandInterface $demand
  * @return array<\TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface>
  */
 protected function createConstraintsFromDemand(QueryInterface $query, DemandInterface $demand)
 {
     $constraints = [];
     // Storage page
     if ($demand->getStoragePage() != 0) {
         $pidList = GeneralUtility::intExplode(',', $demand->getStoragePage(), true);
         $constraints[] = $query->in('pid', $pidList);
     }
     // Tags
     if ($demand->getTags()) {
         $tagList = GeneralUtility::intExplode(',', $demand->getTags(), true);
         $constraints[] = $query->in('uid', $tagList);
     }
     // Clean not used constraints
     foreach ($constraints as $key => $value) {
         if (is_null($value)) {
             unset($constraints[$key]);
         }
     }
     return $constraints;
 }
Ejemplo n.º 4
0
 /**
  * Returns an array of constraints created from a given demand object.
  *
  * @param \TYPO3\CMS\Extbase\Persistence\QueryInterface $query
  * @param Tx_MooxNews_Domain_Model_DemandInterface $demand
  * @return array<\TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface>
  */
 protected function createConstraintsFromDemand(\TYPO3\CMS\Extbase\Persistence\QueryInterface $query, Tx_MooxNews_Domain_Model_DemandInterface $demand)
 {
     $constraints = array();
     // Storage page
     if ($demand->getStoragePage() != 0) {
         $pidList = \TYPO3\CMS\Core\Utility\GeneralUtility::intExplode(',', $demand->getStoragePage(), TRUE);
         $constraints[] = $query->in('pid', $pidList);
     }
     // Clean not used constraints
     foreach ($constraints as $key => $value) {
         if (is_null($value)) {
             unset($constraints[$key]);
         }
     }
     return $constraints;
 }
 /**
  * Builds and returns the constraint for multi value properties.
  *
  * @param Persistence\QueryInterface $query
  * @param DomainObjectInterface      $parentObject
  * @param string                     $propertyName
  * @param string                     $fieldValue
  * @param array                      $relationTableMatchFields
  *
  * @return \TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface $constraint
  */
 protected function getConstraint(Persistence\QueryInterface $query, DomainObjectInterface $parentObject, $propertyName, $fieldValue = '', $relationTableMatchFields = array())
 {
     $columnMap = $this->getDataMap(get_class($parentObject))->getColumnMap($propertyName);
     if ($columnMap->getParentKeyFieldName() !== null) {
         if ($columnMap->isRelationsOverriddenByTranslation()) {
             $constraint = $query->equals($columnMap->getParentKeyFieldName(), $parentObject->_getProperty('_localizedUid'));
         } else {
             $constraint = $query->equals($columnMap->getParentKeyFieldName(), $parentObject);
         }
         if ($columnMap->getParentTableFieldName() !== null) {
             $constraint = $query->logicalAnd($constraint, $query->equals($columnMap->getParentTableFieldName(), $this->getDataMap(get_class($parentObject))->getTableName()));
         }
     } else {
         $constraint = $query->in('uid', GeneralUtility::intExplode(',', $fieldValue));
     }
     if (!empty($relationTableMatchFields)) {
         foreach ($relationTableMatchFields as $relationTableMatchFieldName => $relationTableMatchFieldValue) {
             $constraint = $query->logicalAnd($constraint, $query->equals($relationTableMatchFieldName, $relationTableMatchFieldValue));
         }
     }
     return $constraint;
 }
Ejemplo n.º 6
0
 /**
  * Adds users and groups to the query constraints.
  *
  * @param \TYPO3\CMS\Belog\Domain\Model\Constraint $constraint
  * @param \TYPO3\CMS\Extbase\Persistence\QueryInterface $query
  * @param array &$queryConstraints the query constraints to add to, will be modified
  * @return void
  */
 protected function addUsersAndGroupsToQueryConstraints(\TYPO3\CMS\Belog\Domain\Model\Constraint $constraint, \TYPO3\CMS\Extbase\Persistence\QueryInterface $query, array &$queryConstraints)
 {
     $userOrGroup = $constraint->getUserOrGroup();
     if ($userOrGroup === '') {
         return;
     }
     // Constraint for a group
     if (substr($userOrGroup, 0, 3) === 'gr-') {
         $groupId = (int) substr($userOrGroup, 3);
         $userIds = array();
         foreach ($this->beUserList as $userId => $userData) {
             if (\TYPO3\CMS\Core\Utility\GeneralUtility::inList($userData['usergroup_cached_list'], $groupId)) {
                 $userIds[] = $userId;
             }
         }
         if (!empty($userIds)) {
             $queryConstraints[] = $query->in('userid', $userIds);
         } else {
             // If there are no group members -> use -1 as constraint to not find anything
             $queryConstraints[] = $query->in('userid', array(-1));
         }
     } elseif (substr($userOrGroup, 0, 3) === 'us-') {
         $queryConstraints[] = $query->equals('userid', (int) substr($userOrGroup, 3));
     } elseif ($userOrGroup === '-1') {
         $queryConstraints[] = $query->equals('userid', (int) $GLOBALS['BE_USER']->user['uid']);
     }
 }
Ejemplo n.º 7
0
 /**
  * Get the default constraint for the queries
  *
  * @param QueryInterface $query
  *
  * @return array
  */
 protected function getDefaultConstraints(QueryInterface $query)
 {
     $constraints = [];
     $constraints[] = $query->in('uniqueRegisterKey', $this->indexTypes);
     $storagePages = $this->getStoragePageIds();
     if (!empty($storagePages)) {
         $constraints[] = $query->in('pid', $storagePages);
     }
     $arguments = ['indexIds' => [], 'indexTypes' => $this->indexTypes, 'contentRecord' => $this->contentRecord];
     $signalSlotDispatcher = HelperUtility::getSignalSlotDispatcher();
     $arguments = $signalSlotDispatcher->dispatch(__CLASS__, __FUNCTION__, $arguments);
     if ($arguments['indexIds']) {
         $constraints[] = $query->in('foreign_uid', $arguments['indexIds']);
     }
     return $constraints;
 }
Ejemplo n.º 8
0
 /**
  * Sets doktypes to filter for
  *
  * @param array $dokTypesToFilterFor doktypes as array, may be empty
  * @return void
  */
 public function setFilteredDokType(array $dokTypesToFilterFor)
 {
     if (count($dokTypesToFilterFor) > 0) {
         $this->addQueryConstraint($this->query->in('doktype', $dokTypesToFilterFor));
     }
 }
Ejemplo n.º 9
0
 /**
  * Builds and returns the constraint for multi value properties.
  *
  * @param Persistence\QueryInterface $query
  * @param DomainObjectInterface $parentObject
  * @param string $propertyName
  * @param string $fieldValue
  * @param array $relationTableMatchFields
  * @return \TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface $constraint
  */
 protected function getConstraint(Persistence\QueryInterface $query, DomainObjectInterface $parentObject, $propertyName, $fieldValue = '', $relationTableMatchFields = array())
 {
     $columnMap = $this->getDataMap(get_class($parentObject))->getColumnMap($propertyName);
     if ($columnMap->getParentKeyFieldName() !== NULL) {
         $constraint = $query->equals($columnMap->getParentKeyFieldName(), $parentObject);
         if ($columnMap->getParentTableFieldName() !== NULL) {
             $constraint = $query->logicalAnd($constraint, $query->equals($columnMap->getParentTableFieldName(), $this->getDataMap(get_class($parentObject))->getTableName()));
         }
     } else {
         $constraint = $query->in('uid', \TYPO3\CMS\Core\Utility\GeneralUtility::intExplode(',', $fieldValue));
     }
     if (count($relationTableMatchFields) > 0) {
         foreach ($relationTableMatchFields as $relationTableMatchFieldName => $relationTableMatchFieldValue) {
             $constraint = $query->logicalAnd($constraint, $query->equals($relationTableMatchFieldName, $relationTableMatchFieldValue));
         }
     }
     return $constraint;
 }
Ejemplo n.º 10
0
 /**
  * Sets the storagePage constraint to the given constraints array
  *
  * @param \TYPO3\CMS\Extbase\Persistence\QueryInterface $query Query
  * @param \DERHANSEN\SfEventMgt\Domain\Model\Dto\EventDemand $eventDemand EventDemand
  * @param array $constraints Constraints
  *
  * @return void
  */
 protected function setStoragePageConstraint($query, $eventDemand, &$constraints)
 {
     if ($eventDemand->getStoragePage() != '') {
         $pidList = GeneralUtility::intExplode(',', $eventDemand->getStoragePage(), TRUE);
         $constraints[] = $query->in('pid', $pidList);
     }
 }
Ejemplo n.º 11
0
 /**
  * Get the default constraint for the queries
  *
  * @param QueryInterface $query
  *
  * @return array
  */
 protected function getDefaultConstraints(QueryInterface $query)
 {
     $constraints = array();
     $constraints[] = $query->in('uniqueRegisterKey', $this->indexTypes);
     // storage page selection
     // @todo please check core API functions again
     /** @var ConfigurationManagerInterface $configuratioManager */
     $configurationManager = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Configuration\\ConfigurationManagerInterface');
     $frameworkConfiguration = $configurationManager->getConfiguration(ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
     $storagePages = isset($frameworkConfiguration['persistence']['storagePid']) ? GeneralUtility::intExplode(',', $frameworkConfiguration['persistence']['storagePid']) : array();
     if (!empty($storagePages)) {
         $constraints[] = $query->in('pid', $storagePages);
     }
     $arguments = array('indexIds' => array(), 'indexTypes' => $this->indexTypes, 'contentRecord' => $this->contentRecord);
     $signalSlotDispatcher = HelperUtility::getSignalSlotDispatcher();
     $arguments = $signalSlotDispatcher->dispatch(__CLASS__, __FUNCTION__, $arguments);
     if ($arguments['indexIds']) {
         $constraints[] = $query->in('foreign_uid', $arguments['indexIds']);
     }
     return $constraints;
 }
Ejemplo n.º 12
0
 /**
  * Returns an array of constraints created from a given demand object.
  *
  * @param \TYPO3\CMS\Extbase\Persistence\QueryInterface $query
  * @param Tx_MooxNews_Domain_Model_DemandInterface $demand
  * @throws UnexpectedValueException
  * @throws InvalidArgumentException
  * @throws Exception
  * @return array<\TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface>
  */
 protected function createConstraintsFromDemand(\TYPO3\CMS\Extbase\Persistence\QueryInterface $query, Tx_MooxNews_Domain_Model_DemandInterface $demand)
 {
     $constraints = array();
     if (is_array($demand->getTypes()) && count($demand->getTypes())) {
         $constraints[] = $query->in('type', $demand->getTypes());
     } elseif ($demand->getType() != "") {
         $constraints[] = $query->equals('type', (string) $demand->getType());
     }
     if ($demand->getIncludeOnlySelectedNewsInRss()) {
         $constraints[] = $query->equals('shareRss', 1);
     }
     if ($demand->getCategories() && $demand->getCategories() !== '0') {
         $constraints[] = $this->createCategoryConstraint($query, $demand->getCategories(), $demand->getCategoryConjunction(), $demand->getIncludeSubCategories());
     }
     if ($demand->getAuthor()) {
         $constraints[] = $query->equals('author', $demand->getAuthor());
     }
     $listViewSearchFields = $GLOBALS['TCA']['tx_mooxnews_domain_model_news']['listViewSearchFields']['moox_news']['default'];
     if ($demand->getQuery()) {
         $listViewSearchFields = $GLOBALS['TCA']['tx_mooxnews_domain_model_news']['listViewSearchFields']['moox_news']['default'];
         if (is_array($demand->getTypes())) {
             $type = reset($demand->getTypes());
         }
         if ($type != "" && isset($GLOBALS['TCA']['tx_mooxnews_domain_model_news']['listViewSearchFields'][$type]['default']) && $GLOBALS['TCA']['tx_mooxnews_domain_model_news']['listViewSearchFields'][$type]['default'] != "") {
             $listViewSearchFields = $GLOBALS['TCA']['tx_mooxnews_domain_model_news']['listViewSearchFields'][$type]['default'];
         } else {
             $listViewSearchFields = $GLOBALS['TCA']['tx_mooxnews_domain_model_news']['listViewSearchFields']['moox_news']['default'];
         }
         if ($listViewSearchFields != "") {
             $listViewSearchFields = explode(",", $listViewSearchFields);
         } else {
             $listViewSearchFields = array("title");
         }
         $queryConstraints = array();
         foreach ($listViewSearchFields as $listViewSearchField) {
             $queryConstraints[] = $query->like($listViewSearchField, "%" . $demand->getQuery() . "%");
         }
         $constraints[] = $query->logicalOr($queryConstraints);
     }
     if ($demand->getChar()) {
         if ($demand->getChar() != "other") {
             $char = substr($demand->getChar(), 0, 1);
             if (in_array($char, $demand->getCharList())) {
                 $constraints[] = $query->like("title", $char . "%");
             }
         } else {
             $charConstraints = array();
             foreach ($demand->getCharList() as $char) {
                 if ($char != "all" && $char != "other") {
                     $charConstraints[] = $query->logicalNot($query->like("title", $char . "%"));
                 }
             }
             if (count($charConstraints)) {
                 $constraints[] = $query->logicalAnd($charConstraints);
             }
         }
     }
     // archived
     if ($demand->getArchiveRestriction() == 'archived') {
         $constraints[] = $query->logicalAnd($query->lessThan('archive', $GLOBALS['EXEC_TIME']), $query->greaterThan('archive', 0));
     } elseif ($demand->getArchiveRestriction() == 'active') {
         $constraints[] = $query->logicalOr($query->greaterThanOrEqual('archive', $GLOBALS['EXEC_TIME']), $query->equals('archive', 0));
     }
     if ($demand->getDateField() == "type" && is_array($demand->getTypes()) && count($demand->getTypes()) == 1) {
         $type = reset($demand->getTypes());
         if (isset($GLOBALS['TCA']['tx_mooxnews_domain_model_news']['dateTimeDefaultField'][$type]) && $GLOBALS['TCA']['tx_mooxnews_domain_model_news']['dateTimeDefaultField'][$type] != "") {
             $dateTimeDefaultField = $GLOBALS['TCA']['tx_mooxnews_domain_model_news']['dateTimeDefaultField'][$type];
         } else {
             $dateTimeDefaultField = $GLOBALS['TCA']['tx_mooxnews_domain_model_news']['dateTimeDefaultField']['moox_news'];
         }
         $demand->setDateField($dateTimeDefaultField);
     } elseif ($demand->getDateField() == "type") {
         $dateTimeDefaultField = $GLOBALS['TCA']['tx_mooxnews_domain_model_news']['dateTimeDefaultField']['moox_news'];
         $demand->setDateField($dateTimeDefaultField);
     }
     // Time restriction greater than or equal
     $timeRestrictionField = $demand->getDateField();
     $timeRestrictionField = empty($timeRestrictionField) ? 'datetime' : $timeRestrictionField;
     if ($demand->getTimeRestriction()) {
         $timeLimit = 0;
         // integer = timestamp
         if (\TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($demand->getTimeRestriction())) {
             $timeLimit = $GLOBALS['EXEC_TIME'] - $demand->getTimeRestriction();
         } else {
             // try to check strtotime
             $timeFromString = strtotime($demand->getTimeRestriction());
             if ($timeFromString) {
                 $timeLimit = $timeFromString;
             } else {
                 throw new Exception('Time limit Low could not be resolved to an integer. Given was: ' . htmlspecialchars($timeLimit));
             }
         }
         $constraints[] = $query->greaterThanOrEqual($timeRestrictionField, $timeLimit);
     }
     // Time restriction less than or equal
     if ($demand->getTimeRestrictionHigh()) {
         $timeLimit = 0;
         // integer = timestamp
         if (\TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($demand->getTimeRestrictionHigh())) {
             $timeLimit = $GLOBALS['EXEC_TIME'] + $demand->getTimeRestrictionHigh();
         } else {
             // try to check strtotime
             $timeFromString = strtotime($demand->getTimeRestrictionHigh());
             if ($timeFromString) {
                 $timeLimit = $timeFromString;
             } else {
                 throw new Exception('Time limit High could not be resolved to an integer. Given was: ' . htmlspecialchars($timeLimit));
             }
         }
         $constraints[] = $query->lessThanOrEqual($timeRestrictionField, $timeLimit);
     }
     // top news
     if ($demand->getTopNewsRestriction() == 1) {
         $constraints[] = $query->equals('istopnews', 1);
     } elseif ($demand->getTopNewsRestriction() == 2) {
         $constraints[] = $query->equals('istopnews', 0);
     }
     // top news
     if ($demand->getExcludeFromRss() == 1) {
         $constraints[] = $query->equals('excludeFromRss', 0);
     }
     // storage page
     if ($demand->getStoragePage() != 0) {
         $pidList = \TYPO3\CMS\Core\Utility\GeneralUtility::intExplode(',', $demand->getStoragePage(), TRUE);
         $constraints[] = $query->in('pid', $pidList);
     }
     // datepicker filter
     $datepickerConstraints = array();
     if ($demand->getDateFrom() != "") {
         $dateFrom = strtotime($demand->getDateFrom());
         if ($dateFrom > 0) {
             $dateFrom = mktime(0, 0, 0, date("n", $dateFrom), date("j", $dateFrom), date("Y", $dateFrom));
             $datepickerConstraints[] = $query->greaterThanOrEqual($timeRestrictionField, $dateFrom);
         }
     }
     if ($demand->getDateTo() != "") {
         $dateTo = strtotime($demand->getDateTo());
         if ($dateTo > 0) {
             $dateTo = mktime(23, 59, 59, date("n", $dateTo), date("j", $dateTo), date("Y", $dateTo));
             $datepickerConstraints[] = $query->lessThanOrEqual($timeRestrictionField, $dateTo);
         }
     }
     if (count($datepickerConstraints) > 1) {
         $constraints[] = $query->logicalAnd($datepickerConstraints);
     } elseif (count($datepickerConstraints) > 0) {
         $constraints[] = $datepickerConstraints[0];
     }
     // month & year OR year only
     if (is_numeric($demand->getYear())) {
         if ($demand->getYear() > 0) {
             if ($demand->getMonth() > 0) {
                 if ($demand->getDay() > 0) {
                     $begin = mktime(0, 0, 0, $demand->getMonth(), $demand->getDay(), $demand->getYear());
                     $end = mktime(23, 59, 59, $demand->getMonth(), $demand->getDay(), $demand->getYear());
                 } else {
                     $begin = mktime(0, 0, 0, $demand->getMonth(), 1, $demand->getYear());
                     $end = mktime(23, 59, 59, $demand->getMonth() + 1, 0, $demand->getYear());
                 }
             } else {
                 $begin = mktime(0, 0, 0, 1, 1, $demand->getYear());
                 $end = mktime(23, 59, 59, 12, 31, $demand->getYear());
             }
             $constraints[] = $query->logicalAnd($query->greaterThanOrEqual($timeRestrictionField, $begin), $query->lessThanOrEqual($timeRestrictionField, $end));
         } else {
             $constraints[] = $query->equals($timeRestrictionField, 0);
         }
     }
     if (is_array($GLOBALS['TCA']['tx_mooxnews_domain_model_news']['listViewSearchFields'])) {
         foreach ($GLOBALS['TCA']['tx_mooxnews_domain_model_news']['listViewSearchFields'] as $extkey => $queryFields) {
             if ($extkey != "moox_news") {
                 foreach ($queryFields as $fieldname => $queryField) {
                     if ($fieldname != "default" && $queryField != "") {
                         $fieldname = \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToLowerCamelCase($fieldname);
                         $getCall = "get" . ucfirst($fieldname);
                         if (method_exists($demand, $getCall)) {
                             $fieldvalue = $demand->{$getCall}();
                             if ($fieldvalue != "") {
                                 $listViewSearchFields = explode(",", $queryField);
                                 $queryConstraints = array();
                                 foreach ($listViewSearchFields as $listViewSearchField) {
                                     $queryConstraints[] = $query->like($listViewSearchField, "%" . $fieldvalue . "%");
                                 }
                                 $constraints[] = $query->logicalOr($queryConstraints);
                             }
                         }
                     }
                 }
             }
         }
     }
     // set constraints based on extended filter fields from external extensions
     foreach ($GLOBALS['TCA']['tx_mooxnews_domain_model_news']['columns'] as $fieldname => $field) {
         if ($field['addToMooxNewsFrontendDemand']) {
             $fieldname = \TYPO3\CMS\Core\Utility\GeneralUtility::underscoredToLowerCamelCase($fieldname);
             $getCall = "get" . ucfirst($fieldname);
             if (method_exists($demand, $getCall)) {
                 $fieldvalue = $demand->{$getCall}();
                 if (trim($fieldvalue) != "" && trim($fieldvalue) != "all") {
                     if (in_array($field['config']['type'], array("input", "text")) && !in_array($field['addToMooxNewsFrontendFilter']['type'], array("select"))) {
                         $constraints[] = $query->like($fieldname, '%' . $fieldvalue . '%');
                     } else {
                         if (in_array($field['addToMooxNewsFrontendFilter']['type'], array("select")) && $fieldvalue == "empty") {
                             $constraints[] = $query->logicalOr($query->equals($fieldname, ""), $query->equals($fieldname, NULL));
                         } else {
                             $constraints[] = $query->equals($fieldname, $fieldvalue);
                         }
                     }
                 }
             }
         }
     }
     // sys language
     if (TYPO3_MODE == 'BE') {
         $query->getQuerySettings()->setRespectSysLanguage(false);
         $constraints[] = $query->equals('t3_origuid', 0);
         if (is_numeric($demand->getSysLanguageUid())) {
             $constraints[] = $query->equals('sys_language_uid', $demand->getSysLanguageUid());
         }
     }
     // Tags
     if (is_array($demand->getTags()) && count($demand->getTags())) {
         $tags = $demand->getTags();
         if (count($tags) > 1) {
             $tagConstraints = array();
             foreach ($tags as $tag) {
                 $tagConstraints[] = $query->contains('tags', $tag);
             }
             $constraints[] = $query->logicalOr($tagConstraints);
         } else {
             $constraints[] = $query->contains('tags', $tags[0]);
         }
     } elseif ($demand->getTag() != "") {
         $constraints[] = $query->contains('tags', $demand->getTag());
     }
     // Targets
     if (is_array($demand->getTargets()) && count($demand->getTargets())) {
         $targets = $demand->getTargets();
         if (count($targets) > 1) {
             $targetConstraints = array();
             foreach ($targets as $target) {
                 $targetConstraints[] = $query->contains('targets', $target);
             }
             $constraints[] = $query->logicalOr($targetConstraints);
         } else {
             $constraints[] = $query->contains('targets', $targets[0]);
         }
     } elseif ($demand->getTarget() != "") {
         $constraints[] = $query->contains('targets', $demand->getTarget());
     }
     // mailer frequency
     if (TYPO3_MODE == 'BE') {
         if (is_numeric($demand->getMailerFrequency())) {
             $constraints[] = $query->equals('mailerFrequency', $demand->getMailerFrequency());
         }
     }
     // Search
     $searchConstraints = $this->getSearchConstraints($query, $demand);
     if (!empty($searchConstraints)) {
         $constraints[] = $query->logicalAnd($searchConstraints);
     }
     // Exclude already displayed
     if ($demand->getExcludeAlreadyDisplayedNews() && isset($GLOBALS['EXT']['moox_news']['alreadyDisplayed']) && !empty($GLOBALS['EXT']['moox_news']['alreadyDisplayed'])) {
         $constraints[] = $query->logicalNot($query->in('uid', $GLOBALS['EXT']['moox_news']['alreadyDisplayed']));
     }
     // Clean not used constraints
     foreach ($constraints as $key => $value) {
         if (is_null($value)) {
             unset($constraints[$key]);
         }
     }
     /*
     $parser = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\\CMS\\Extbase\\Persistence\\Generic\\Storage\\Typo3DbQueryParser');  
     $queryParts = $parser->parseQuery($query); 
     \TYPO3\CMS\Core\Utility\DebugUtility::debug($queryParts, 'Query');
     exit();
     */
     return $constraints;
 }