/** * Returns the constraint to determine if a news event is active or not (archived) * * @param \TYPO3\CMS\Extbase\Persistence\QueryInterface $query * @return \TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface $constraint */ protected function createIsActiveConstraint(\TYPO3\CMS\Extbase\Persistence\QueryInterface $query) { /** @var $constraint \TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface */ $constraint = null; $timestamp = time(); // + date('Z'); $constraint = $query->logicalOr($query->greaterThan('tx_roqnewsevent_startdate + tx_roqnewsevent_starttime', $timestamp), $query->logicalAnd($query->lessThan('tx_roqnewsevent_startdate + tx_roqnewsevent_starttime', $timestamp), $query->greaterThan('tx_roqnewsevent_enddate + tx_roqnewsevent_endtime', $timestamp)), $query->logicalAnd($query->lessThan('tx_roqnewsevent_startdate + tx_roqnewsevent_starttime', $timestamp), $query->greaterThan('tx_roqnewsevent_startdate + tx_roqnewsevent_endtime', $timestamp), $query->equals('tx_roqnewsevent_enddate', 0)), $query->logicalAnd($query->greaterThan('tx_roqnewsevent_startdate + 86399', $timestamp), $query->equals('tx_roqnewsevent_starttime', 0), $query->equals('tx_roqnewsevent_enddate', 0), $query->equals('tx_roqnewsevent_endtime', 0))); return $constraint; }
/** * Returns a constraint array created by a given filter array * * @param \TYPO3\CMS\Extbase\Persistence\QueryInterface $query * @param array $filter * @param array $constraints * @return \TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface|null */ protected function createFilterConstraints(\TYPO3\CMS\Extbase\Persistence\QueryInterface $query, $filter = NULL, $constraints = NULL) { if (is_null($constraints)) { $constraints = []; } if (isset($filter['uid_foreign']) && is_numeric($filter['uid_foreign']) && $filter['uid_foreign'] > 0 && isset($filter['tablenames']) && $filter['tablenames'] != "") { $constraints[] = $query->equals('uidForeign', $filter['uid_foreign']); $constraints[] = $query->equals('tablenames', $filter['tablenames']); } else { $constraints[] = $query->equals('uidForeign', 0); $constraints[] = $query->equals('tablenames', "dfgdfgjrezu67q348673463"); } if (isset($filter['feUser']) && is_numeric($filter['feUser']) && $filter['feUser'] > 0) { $constraints[] = $query->equals('feUser', $filter['feUser']); } if (!(isset($filter['isModerator']) && is_bool($filter['isModerator']) && $filter['isModerator'] == true)) { if (isset($filter['confirmed']) && is_bool($filter['confirmed']) && $filter['confirmed'] == true) { $constraints[] = $query->greaterThan('confirmed', 0); } else { $constraints[] = $query->logicalOr($query->equals('confirmed', 0), $query->equals('confirmed', ''), $query->equals('confirmed', NULL)); } } if (count($constraints) < 1) { $constraints = NULL; } return $constraints; }
/** * 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); } } }
/** * Returns a constraint array created by a given filter array * * @param \TYPO3\CMS\Extbase\Persistence\QueryInterface $query * @param array $filter * @param array $constraints * @return \TYPO3\CMS\Extbase\Persistence\Generic\Qom\ConstraintInterface|null */ protected function createFilterConstraints(QueryInterface $query, $filter = NULL, $constraints = NULL) { if (is_null($constraints)) { $constraints = []; } if (isset($filter['uid_foreign']) && is_numeric($filter['uid_foreign']) && $filter['uid_foreign'] > 0 && isset($filter['tablenames']) && $filter['tablenames'] != "") { $constraints[] = $query->equals('uidForeign', $filter['uid_foreign']); $constraints[] = $query->equals('tablenames', $filter['tablenames']); } else { $constraints[] = $query->equals('uidForeign', 0); $constraints[] = $query->equals('tablenames', "dfgdfgjrezu67q348673463"); } if (isset($filter['feUser']) && is_numeric($filter['feUser']) && $filter['feUser'] > 0) { $constraints[] = $query->equals('feUser', $filter['feUser']); } $constraints[] = $query->greaterThan('confirmed', 0); if (count($constraints) < 1) { $constraints = NULL; } return $constraints; }
/** * Add time frame related queries * * @param array $constraints * @param QueryInterface $query * @param int $startTime * @param int|null $endTime * * @see IndexUtility::isIndexInRange */ protected function addTimeFrameConstraints(&$constraints, QueryInterface $query, $startTime, $endTime = null) { // Simulate end time if ($endTime === null) { $endTime = $startTime + DateTimeUtility::SECONDS_DECADE; } $orConstraint = []; // before - in $beforeIn = [$query->lessThan('start_date', $startTime), $query->greaterThanOrEqual('end_date', $startTime), $query->lessThan('end_date', $endTime)]; $orConstraint[] = $query->logicalAnd($beforeIn); // in - in $inIn = [$query->greaterThanOrEqual('start_date', $startTime), $query->lessThan('end_date', $endTime)]; $orConstraint[] = $query->logicalAnd($inIn); // in - after $inAfter = [$query->greaterThanOrEqual('start_date', $startTime), $query->lessThan('start_date', $endTime), $query->greaterThanOrEqual('end_date', $endTime)]; $orConstraint[] = $query->logicalAnd($inAfter); // before - after $beforeAfter = [$query->lessThan('start_date', $startTime), $query->greaterThan('end_date', $endTime)]; $orConstraint[] = $query->logicalAnd($beforeAfter); // finish $constraints[] = $query->logicalOr($orConstraint); }
/** * Get a QueryInterface constraint from an array definition * * @param QueryInterface $query * @param array $demands * @param string $conjunction * * @return ConstraintInterface|null */ public static function getConstraintsForDemand($query, $demands, $conjunction = 'AND') { $constraints = array(); if (!is_array($demands) || empty($demands)) { return null; } foreach ($demands as $key => $demand) { if (!isset($demand['demand'])) { continue; } $constraint = $demand['demand']; switch ($constraint['operation']) { case 'EQUALS': $constraints[] = $query->equals($constraint['property'], $constraint['value']); break; case 'LIKE': $constraints[] = $query->like($constraint['property'], $constraint['value']); break; case 'CONTAINS': $constraints[] = $query->contains($constraint['property'], $constraint['value']); break; case 'LESSTHAN': $constraints[] = $query->lessThan($constraint['property'], $constraint['value']); break; case 'LESSTHANOREQUAL': $constraints[] = $query->lessThanOrEqual($constraint['property'], $constraint['value']); break; case 'GREATERTHAN': $constraints[] = $query->greaterThan($constraint['property'], $constraint['value']); break; case 'GREATERTHANOREQUAL': $constraints[] = $query->greaterThanOrEqual($constraint['property'], $constraint['value']); break; case 'AND': $tmp = self::getConstraintsForDemand($query, $constraint['operands'], 'AND'); if ($tmp !== null) { $constraints[] = $tmp; } break; case 'OR': $tmp = self::getConstraintsForDemand($query, $constraint['operands'], 'OR'); if ($tmp !== null) { $constraints[] = $tmp; } break; default: return null; } } if (count($constraints) == 0) { return null; } $result = null; switch ($conjunction) { case 'AND': $result = $query->logicalAnd($constraints); break; case 'OR': $result = $query->logicalOr($constraints); break; } return $result; }
/** * Sets the displayMode 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 setDisplayModeConstraint($query, $eventDemand, &$constraints) { switch ($eventDemand->getDisplayMode()) { case 'future': $constraints[] = $query->greaterThan('startdate', $eventDemand->getCurrentDateTime()); break; case 'past': $constraints[] = $query->lessThanOrEqual('enddate', $eventDemand->getCurrentDateTime()); break; default: } }
/** * Add time frame related queries * * @param array $constraints * @param QueryInterface $query * @param int $startTime * @param int $endTime */ protected function addTimeFrameConstraints(&$constraints, QueryInterface $query, $startTime, $endTime) { $orConstraint = array(); // before - in $beforeIn = array($query->lessThan('start_date', $startTime), $query->greaterThanOrEqual('end_date', $startTime), $query->lessThan('end_date', $endTime)); $orConstraint[] = $query->logicalAnd($beforeIn); // in - in $inIn = array($query->greaterThanOrEqual('start_date', $startTime), $query->lessThan('end_date', $endTime)); $orConstraint[] = $query->logicalAnd($inIn); // in - after $inAfter = array($query->greaterThanOrEqual('start_date', $startTime), $query->lessThan('start_date', $endTime), $query->greaterThanOrEqual('end_date', $endTime)); $orConstraint[] = $query->logicalAnd($inAfter); // before - after $beforeAfter = array($query->lessThan('start_date', $startTime), $query->greaterThan('end_date', $endTime)); $orConstraint[] = $query->logicalAnd($beforeAfter); // finish $constraints[] = $query->logicalOr($orConstraint); }