/** * @test */ public function isPropertySettableWorksOnStdClass() { $stdClassObject = new \stdClass(); $stdClassObject->property = 'foo'; $this->assertTrue(\TYPO3\CMS\Extbase\Reflection\ObjectAccess::isPropertySettable($stdClassObject, 'property')); $this->assertFalse(\TYPO3\CMS\Extbase\Reflection\ObjectAccess::isPropertySettable($stdClassObject, 'undefinedProperty')); }
/** * Creates a demand from given settings * * @param $settings * @return ReservationDemand */ protected function createDemandFromSettings($settings) { /** @var ReservationDemand $demand */ $demand = $this->objectManager->get(ReservationDemand::class); foreach ($settings as $propertyName => $propertyValue) { if (empty($propertyValue)) { continue; } switch ($propertyName) { case 'maxItems': $demand->setLimit($propertyValue); break; // all following fall through (see below) // all following fall through (see below) case 'periodType': case 'periodStart': case 'periodEndDate': case 'periodDuration': case 'search': break; default: if (ObjectAccess::isPropertySettable($demand, $propertyName)) { ObjectAccess::setProperty($demand, $propertyName, $propertyValue); } } } if (isset($settings['period'])) { $demand->setPeriod($settings['period']); if ($demand->getPeriod() === 'futureOnly' or $demand->getPeriod() == 'pastOnly') { $timeZone = new \DateTimeZone(date_default_timezone_get()); $demand->setStartDate(new \DateTime('midnight', $timeZone)); } } if (isset($settings['order']) and is_string($settings['order'])) { $demand->setOrder($settings['order']); } if (isset($settings['maxItems'])) { $demand->setLimit($settings['maxItems']); } return $demand; }
/** * Create Demand from Settings * * @param array $settings * @return \DWenzel\T3events\Domain\Model\Dto\EventDemand */ protected function createDemandFromSettings($settings) { $demand = $this->objectManager->get(CourseDemand::class); $demand->setSortBy('headline'); foreach ($settings as $propertyName => $propertyValue) { if (empty($propertyValue)) { continue; } switch ($propertyName) { case 'eventTypes': $demand->setEventType($propertyValue); break; case 'venues': $demand->setVenue($propertyValue); break; case 'maxItems': $demand->setLimit($propertyValue); break; case 'genres': $demand->setGenre($propertyValue); break; // all following fall through (see below) // all following fall through (see below) case 'periodType': case 'periodStart': case 'periodEndDate': case 'periodDuration': case 'search': break; default: if (ObjectAccess::isPropertySettable($demand, $propertyName)) { ObjectAccess::setProperty($demand, $propertyName, $propertyValue); } } } if (isset($settings['sortBy']) && isset($settings['sortDirection'])) { $demand->setOrder($settings['sortBy'] . '|' . $settings['sortDirection']); } else { $demand->setOrder('headline'); } if ($settings['period'] == 'specific') { $demand->setPeriodType($settings['periodType']); } if (isset($settings['periodType']) and $settings['periodType'] != 'byDate') { $demand->setPeriodStart($settings['periodStart']); $demand->setPeriodDuration($settings['periodDuration']); } if ($settings['periodType'] == 'byDate') { if ($settings['periodStartDate']) { $demand->setStartDate($settings['periodStartDate']); } if ($settings['periodEndDate']) { $demand->setEndDate($settings['periodEndDate']); } } return $demand; }
/** * action clone news * * @param \int $uid * @return void */ public function cloneNewsAction($uid = 0) { if ($uid > 0) { $defaultStorageFields = array("categories", "contentElements", "relatedFiles", "relatedLinks", "media", "falMedia", "falRelatedFiles"); $testedStorageFields = array("categories"); $storageClasses = array("TYPO3\\CMS\\Extbase\\Persistence\\Generic\\LazyObjectStorage"); $original = $this->newsRepository->findByUid($uid, FALSE); $clone = $this->objectManager->create('Tx_MooxNews_Domain_Model_News'); // $product = source object $properties = \TYPO3\CMS\Extbase\Reflection\ObjectAccess::getSettablePropertyNames($original); foreach ($properties as $name) { $value = \TYPO3\CMS\Extbase\Reflection\ObjectAccess::getProperty($original, $name); if (!in_array($name, $defaultStorageFields) && (!is_object($value) || is_object($value) && !in_array(get_class($value), $storageClasses))) { \TYPO3\CMS\Extbase\Reflection\ObjectAccess::setProperty($clone, $name, $value); } } foreach ($properties as $name) { $value = \TYPO3\CMS\Extbase\Reflection\ObjectAccess::getProperty($original, $name); if (in_array($name, $defaultStorageFields) && in_array($name, $testedStorageFields) || !in_array($name, $defaultStorageFields) && is_object($value) && in_array(get_class($value), $storageClasses)) { $getCall = "get" . ucfirst($name); $setCall = "get" . ucfirst($name); if (method_exists($original, $getCall)) { $objects = $original->{$getCall}(); if (method_exists($clone->{$getCall}(), "attach")) { if (count($objects)) { foreach ($objects as $object) { if (\TYPO3\CMS\Extbase\Reflection\ObjectAccess::isPropertySettable($object, "uid")) { //$object->setUid(NULL); } $clone->{$getCall}()->attach($object); } } } elseif (method_exists($clone, $setCall)) { $clone->{$setCall}($objects); } } } } $clone->setTitle($original->getTitle() . " [Kopie]"); $clone->setHidden(1); $this->newsRepository->add($clone); $this->objectManager->get('TYPO3\\CMS\\Extbase\\Persistence\\PersistenceManagerInterface')->persistAll(); $this->flashMessageContainer->add('', 'Eintrag wurde dupliziert', \TYPO3\CMS\Core\Messaging\FlashMessage::OK); } $this->redirect("index"); }
/** * action create * * @param Reservation $newReservation * @return void */ public function createAction(Reservation $newReservation) { if (!is_null($newReservation->getUid()) || $this->session instanceof SessionInterface && $this->session->has(self::SESSION_IDENTIFIER_RESERVATION)) { $this->denyAccess(); return; } if ($contact = $newReservation->getContact()) { $contact->setReservation($newReservation); } $newReservation->setStatus(Reservation::STATUS_DRAFT); if ($newReservation->getContactIsParticipant() && is_object($contact)) { $participant = new Person(); foreach (ObjectAccess::getGettableProperties($contact) as $propertyName => $propertyValue) { if (ObjectAccess::isPropertySettable($participant, $propertyName)) { ObjectAccess::setProperty($participant, $propertyName, $propertyValue); } } $participant->setType(Person::PERSON_TYPE_PARTICIPANT); $newReservation->addParticipant($participant); $newReservation->getLesson()->addParticipant($participant); } $this->addFlashMessage($this->translate('message.reservation.create.success')); $this->reservationRepository->add($newReservation); $this->persistenceManager->persistAll(); $this->session->set(self::SESSION_IDENTIFIER_RESERVATION, $newReservation->getUid()); $this->redirect('edit', null, null, ['reservation' => $newReservation]); }
/** * Create demand from settings * * @param array $settings * @return \CPSIT\T3eventsReservation\Domain\Model\Dto\PersonDemand */ protected function createDemandFromSettings($settings) { /**@var \CPSIT\T3eventsReservation\Domain\Model\Dto\PersonDemand $demand */ $demand = $this->objectManager->get(PersonDemand::class); $demand->setTypes((string) Person::PERSON_TYPE_PARTICIPANT); foreach ($settings as $propertyName => $propertyValue) { if (empty($propertyValue)) { continue; } switch ($propertyName) { case 'maxItems': $demand->setLimit($propertyValue); break; case 'category': $demand->setCategories($propertyValue); break; // all following fall through (see below) // all following fall through (see below) case 'periodType': case 'periodStart': case 'periodEndDate': case 'periodDuration': case 'search': break; default: if (ObjectAccess::isPropertySettable($demand, $propertyName)) { ObjectAccess::setProperty($demand, $propertyName, $propertyValue); } } } if ($demand->getLessonPeriod() === 'futureOnly' or $demand->getLessonPeriod() === 'pastOnly') { $timeZone = new \DateTimeZone(date_default_timezone_get()); $demand->setLessonDate(new \DateTime('midnight', $timeZone)); } return $demand; }