Ejemplo n.º 1
0
 /**
  * @param callable $closure
  */
 public function logicalNot(\Closure $closure)
 {
     /** @var QueryProxy $newProxy */
     $newProxy = $this->newProxy();
     $closure($newProxy);
     $this->constraints[] = $this->query->logicalNot(current($newProxy->getContraints()));
 }
Ejemplo n.º 2
0
 /**
  * Returns a category constraint created by
  * a given list of categories and a junction string
  *
  * @param QueryInterface $query
  * @param  array $categories
  * @param  string $conjunction
  * @param  boolean $includeSubCategories
  * @return \TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface|null
  */
 protected function createCategoryConstraint(QueryInterface $query, $categories, $conjunction, $includeSubCategories = false)
 {
     $constraint = null;
     $categoryConstraints = [];
     // If "ignore category selection" is used, nothing needs to be done
     if (empty($conjunction)) {
         return $constraint;
     }
     if (!is_array($categories)) {
         $categories = GeneralUtility::intExplode(',', $categories, true);
     }
     foreach ($categories as $category) {
         if ($includeSubCategories) {
             $subCategories = GeneralUtility::trimExplode(',', CategoryService::getChildrenCategories($category, 0, '', true), true);
             $subCategoryConstraint = [];
             $subCategoryConstraint[] = $query->contains('categories', $category);
             if (count($subCategories) > 0) {
                 foreach ($subCategories as $subCategory) {
                     $subCategoryConstraint[] = $query->contains('categories', $subCategory);
                 }
             }
             if ($subCategoryConstraint) {
                 $categoryConstraints[] = $query->logicalOr($subCategoryConstraint);
             }
         } else {
             $categoryConstraints[] = $query->contains('categories', $category);
         }
     }
     if ($categoryConstraints) {
         switch (strtolower($conjunction)) {
             case 'or':
                 $constraint = $query->logicalOr($categoryConstraints);
                 break;
             case 'notor':
                 $constraint = $query->logicalNot($query->logicalOr($categoryConstraints));
                 break;
             case 'notand':
                 $constraint = $query->logicalNot($query->logicalAnd($categoryConstraints));
                 break;
             case 'and':
             default:
                 $constraint = $query->logicalAnd($categoryConstraints);
         }
     }
     return $constraint;
 }
Ejemplo n.º 3
0
 /**
  * Returns a category constraint created by
  * a given list of categories and a junction string
  *
  * @param \TYPO3\CMS\Extbase\Persistence\QueryInterface $query
  * @param  array $categories
  * @param  string $conjunction
  * @param  boolean $includeSubCategories
  * @return \TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface|null
  */
 protected function createCategoryConstraint(\TYPO3\CMS\Extbase\Persistence\QueryInterface $query, $categories, $conjunction, $includeSubCategories = FALSE)
 {
     $constraint = NULL;
     $categoryConstraints = array();
     // If "ignore category selection" is used, nothing needs to be done
     if (empty($conjunction)) {
         return $constraint;
     }
     if (!is_array($categories)) {
         $categories = \TYPO3\CMS\Core\Utility\GeneralUtility::intExplode(',', $categories, TRUE);
     }
     foreach ($categories as $category) {
         if ($includeSubCategories) {
             $subCategories = \TYPO3\CMS\Core\Utility\GeneralUtility::trimExplode(',', Tx_News_Service_CategoryService::getChildrenCategories($category, 0, '', TRUE), TRUE);
             $subCategoryConstraint = array();
             $subCategoryConstraint[] = $query->contains('categories', $category);
             if (count($subCategories) > 0) {
                 foreach ($subCategories as $subCategory) {
                     $subCategoryConstraint[] = $query->contains('categories', $subCategory);
                 }
             }
             if ($subCategoryConstraint) {
                 $categoryConstraints[] = $query->logicalOr($subCategoryConstraint);
             }
         } else {
             $categoryConstraints[] = $query->contains('categories', $category);
         }
     }
     if ($categoryConstraints) {
         switch (strtolower($conjunction)) {
             case 'or':
                 $constraint = $query->logicalOr($categoryConstraints);
                 break;
             case 'notor':
                 $constraint = $query->logicalNot($query->logicalOr($categoryConstraints));
                 break;
             case 'notand':
                 $constraint = $query->logicalNot($query->logicalAnd($categoryConstraints));
                 break;
             case 'and':
             default:
                 $constraint = $query->logicalAnd($categoryConstraints);
         }
     }
     return $constraint;
 }
Ejemplo n.º 4
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.º 5
0
 /**
  * Ignores given uid
  *
  * @param integer $currentPageUid Uid to ignore
  * @return void
  */
 public function setIgnoreOfUid($currentPageUid)
 {
     $this->addQueryConstraint($this->query->logicalNot($this->query->equals('uid', $currentPageUid)));
 }