Ejemplo n.º 1
0
 /**
  * Finds all records that are related to $model via the field $key.
  *
  * @param Tx_Oelib_Model $model
  *        the model to which the matches should be related
  * @param string $relationKey
  *        the key of the field in the matches that should contain the UID
  *        of $model
  * @param Tx_Oelib_List<Tx_Oelib_Model> $ignoreList
  *        related records that should _not_ be returned
  *
  * @return Tx_Oelib_List<Tx_Oelib_Model> the related models, will be empty if there are no matches
  */
 public function findAllByRelation(Tx_Oelib_Model $model, $relationKey, Tx_Oelib_List $ignoreList = NULL)
 {
     if (!$model->hasUid()) {
         throw new InvalidArgumentException('$model must have a UID.', 1331319915);
     }
     if ($relationKey === '') {
         throw new InvalidArgumentException('$key must not be empty.', 1331319921);
     }
     $ignoreClause = '';
     if ($ignoreList !== NULL && !$ignoreList->isEmpty()) {
         $ignoreUids = $ignoreList->getUids();
         // deals with the case of $ignoreList having only models without UIDs
         if ((string) $ignoreUids !== '') {
             $ignoreClause = ' AND uid NOT IN(' . $ignoreUids . ')';
         }
     }
     return $this->findByWhereClause($relationKey . ' = ' . $model->getUid() . $ignoreClause);
 }
Ejemplo n.º 2
0
 /**
  * @test
  */
 public function findAllByRelationIgnoresIgnoreList()
 {
     $model = $this->subject->find($this->testingFramework->createRecord('tx_oelib_test'));
     $mapper = Tx_Oelib_MapperRegistry::get('tx_oelib_Tests_Unit_Fixtures_TestingChildMapper');
     $relatedModel = $mapper->find($this->testingFramework->createRecord('tx_oelib_testchild', array('parent' => $model->getUid())));
     $ignoredRelatedModel = $mapper->find($this->testingFramework->createRecord('tx_oelib_testchild', array('parent' => $model->getUid())));
     $ignoreList = new Tx_Oelib_List();
     $ignoreList->add($ignoredRelatedModel);
     $result = Tx_Oelib_MapperRegistry::get('tx_oelib_Tests_Unit_Fixtures_TestingChildMapper')->findAllByRelation($model, 'parent', $ignoreList);
     self::assertSame(1, $result->count());
     self::assertSame($relatedModel, $result->first());
 }
Ejemplo n.º 3
0
 /**
  * @test
  */
 public function getAllGroupsForGroupWithSubgroupCycleReturnsBothGroups()
 {
     $group1 = Tx_Oelib_MapperRegistry::get('tx_oelib_Mapper_BackEndUserGroup')->getNewGhost();
     $group2 = Tx_Oelib_MapperRegistry::get('tx_oelib_Mapper_BackEndUserGroup')->getNewGhost();
     $subgroups1 = new Tx_Oelib_List();
     $subgroups1->add($group2);
     $group1->setData(array('subgroup' => $subgroups1));
     $subgroups2 = new Tx_Oelib_List();
     $subgroups2->add($group1);
     $group2->setData(array('subgroup' => $subgroups2));
     $groups = new Tx_Oelib_List();
     $groups->add($group1);
     $this->subject->setData(array('usergroup' => $groups));
     self::assertSame(2, $this->subject->getAllGroups()->count());
 }
Ejemplo n.º 4
0
 /**
  * @test
  */
 public function isRelationiOwnedByParentCanBeSetToTrue()
 {
     $this->subject->markAsOwnedByParent();
     self::assertTrue($this->subject->isRelationOwnedByParent());
 }
Ejemplo n.º 5
0
 /**
  * @test
  */
 public function filterByDistanceCanReturnTwoElements()
 {
     $bonn = new Tx_Oelib_Tests_Unit_Fixtures_TestingGeo();
     $bonn->setGeoCoordinates(array('latitude' => 50.72254683, 'longitude' => 7.07519531));
     $cologne = new Tx_Oelib_Tests_Unit_Fixtures_TestingGeo();
     $cologne->setGeoCoordinates(array('latitude' => 50.94458443, 'longitude' => 6.9543457));
     $list = new Tx_Oelib_List();
     $list->add($bonn);
     $list->add($cologne);
     $filteredList = $this->subject->filterByDistance($list, $cologne, 27.0);
     self::assertSame(2, $filteredList->count());
 }
Ejemplo n.º 6
0
 /**
  * Clone.
  *
  * @throws \BadMethodCallException
  */
 public function __clone()
 {
     if ($this->isReadOnly()) {
         throw new \BadMethodCallException('Read-only models cannot be cloned.', 1436453245);
     }
     if ($this->isDead()) {
         throw new \BadMethodCallException('Deleted models cannot be cloned.', 1436453107);
     }
     if ($this->isLoading()) {
         throw new \BadMethodCallException('Models cannot be cloned while they are loading.', 1436453245);
     }
     if ($this->isGhost()) {
         $this->load();
     }
     $this->resetUid();
     /** @var int|string|bool|float|null|Tx_Oelib_List|Tx_Oelib_Model $dataItem */
     foreach ($this->data as $key => $dataItem) {
         if ($dataItem instanceof Tx_Oelib_List) {
             /** Tx_Oelib_List $dataItem */
             if ($dataItem->isRelationOwnedByParent()) {
                 $newDataItem = new Tx_Oelib_List();
                 $newDataItem->markAsOwnedByParent();
                 /** @var Tx_Oelib_Model $childModel */
                 foreach ($dataItem as $childModel) {
                     $newDataItem->add(clone $childModel);
                 }
             } else {
                 $newDataItem = clone $dataItem;
             }
             $newDataItem->setParentModel($this);
             $this->set($key, $newDataItem);
         }
     }
     $this->markAsDirty();
 }
Ejemplo n.º 7
0
 /**
  * @test
  */
 public function copyRemovesRegistrationsFromEvent()
 {
     /** @var tx_seminars_Mapper_Event|PHPUnit_Framework_MockObject_MockObject $mapper */
     $mapper = $this->getMock('tx_seminars_Mapper_Event', array('save'));
     Tx_Oelib_MapperRegistry::set('tx_seminars_Mapper_Event', $mapper);
     /** @var tx_seminars_Model_Event $event */
     $event = $mapper->getLoadedTestingModel(array('title' => 'TDD for starters'));
     $registrations = new Tx_Oelib_List();
     $registrations->add(new tx_seminars_Model_Registration());
     $event->setRegistrations($registrations);
     $hiddenClone = clone $event;
     $hiddenClone->markAsHidden();
     $hiddenClone->setRegistrations(new Tx_Oelib_List());
     $mapper->expects(self::once())->method('save')->with($hiddenClone);
     $className = $this->createAccessibleProxyClass();
     /** @var tx_seminars_FrontEnd_DefaultController $fixture */
     $fixture = new $className();
     $fixture->copyEvent($event);
 }
Ejemplo n.º 8
0
 /**
  * @test
  */
 public function hasGroupMembershipForUserNoneOfTheProvidedGroupsReturnsFalse()
 {
     $groupMapper = Tx_Oelib_MapperRegistry::get('tx_oelib_Mapper_FrontEndUserGroup');
     $list = new Tx_Oelib_List();
     $list->add($groupMapper->getNewGhost());
     $list->add($groupMapper->getNewGhost());
     $this->subject->setData(array('usergroup' => $list));
     self::assertFalse($this->subject->hasGroupMembership($groupMapper->getNewGhost()->getUid() . ',' . $groupMapper->getNewGhost()->getUid()));
 }