コード例 #1
0
 public function testFixture()
 {
     $this->tags = Helper::reindex($this->getRepository('Psc\\Doctrine\\TestEntities\\Tag')->findAll(), 'label');
     $this->assertEquals(5, $this->tags['Wahl']->getIdentifier());
     $this->assertEquals(2, $this->tags['Demonstration']->getIdentifier());
     $this->assertEquals(1, $this->tags['Russland']->getIdentifier());
 }
コード例 #2
0
ファイル: Hydrator.php プロジェクト: pscheit/psc-cms
 /**
  * @return Doctrine\Common\Collections\Collection
  */
 public function collection(array $identifiers, $reindex = NULL, $checkCardinality = TRUE, &$found = NULL)
 {
     $idname = $reindex ?: 'id';
     $entities = $this->byList($identifiers, $idname, $checkCardinality, $found);
     if ($reindex !== NULL) {
         $entities = Helper::reindex($entities, $reindex);
     }
     return $entities;
 }
コード例 #3
0
 protected function expectRepositoryPersists($entity, $times = NULL)
 {
     if (is_array($entity)) {
         $entities = \Psc\Doctrine\Helper::reindex($entity);
         $this->repository->expects($times ?: $this->exactly(count($entities)))->method('persist')->will($this->returnCallback(function (\Psc\CMS\Entity $entity) use($entities) {
             return $entities[$entity->getIdentifier()];
         }));
     } else {
         $this->repository->expects($times ?: $this->once())->method('persist')->with($this->equalTo($entity))->will($this->returnSelf());
     }
 }
コード例 #4
0
ファイル: HelperTest.php プロジェクト: pscheit/psc-cms
 /**
  * expectedException \Psc\System\Exception
  */
 public function testReindex()
 {
     $expected = array();
     foreach ($this->collection as $o) {
         $expected[$o->getId()] = $o;
     }
     $reindexed = DoctrineHelper::reindex($this->collection, 'getId');
     $this->assertEquals($expected, $reindexed);
     /* Referenzen */
     unset($this->collection[0]);
     $this->collection[1]->setId(9999999);
     $this->assertNotEquals($expected, $this->collection);
     $this->assertEquals($expected, $reindexed);
 }
コード例 #5
0
 public function findAllIndexByEmail()
 {
     return DoctrineHelper::reindex($this->findAll(), 'getEmail');
 }
コード例 #6
0
ファイル: DatabaseTest.php プロジェクト: pscheit/psc-cms
 /**
  * Gibt alle persisten Instanzen eines Entities zurück und reindeziert wenn gewünscht
  *
  * @param string $entity der Name des Entities
  * @param string $reindex der Name des Getters oder der Getter nachdem die Liste indiziert werden soll (keys)
  * @return array
  */
 public function hydrateAll($entity, $reindex = NULL)
 {
     $entities = $this->getRepository($entity)->findAll();
     if ($reindex !== NULL) {
         $entities = DoctrineHelper::reindex($entities, $reindex);
     }
     return $entities;
 }
コード例 #7
0
ファイル: ComponentsForm.php プロジェクト: pscheit/psc-cms
 /**
  * Verändert die aktuelle Reihenfolge der Componenten
  *
  * $sorting kann entweder ein Closure sein welches als Parameter 2 Komponenten bekommt und dann entscheidet welche weiter vorne stehen soll.
  * oder ein array von property Names. Diese werden dann in der Reihenfolge wie im Array gesetzt, alle restlichen (nicht im array angegebenen) Componenten werden ans Ende gehängt
  * @param Closure|array $sorting kann ein Array von property-Names sein oder eine Closure die 2 Parameter erhält und eine Sortierfunktion ist returns: -1|0|1
  */
 public function sortComponents($sorting)
 {
     if (is_array($sorting)) {
         $order = array_flip($sorting);
         // $name => $position
         // wir erstellen unseren name => componenten index
         $components = \Psc\Doctrine\Helper::reindex($this->components->toArray(), 'getFormName');
         // wir fügen alle Komponenten hinzu, die nicht in dem Index drin sind (hängen sie nach hinten an)
         foreach ($components as $name => $component) {
             if (!array_key_exists($name, $order)) {
                 $order[$name] = count($order);
             }
         }
         $sorting = function ($c1, $c2) use($order) {
             // @TODO formName kann auch ein array sein?
             if (($n1 = $c1->getFormName()) === ($n2 = $c2->getFormName())) {
                 return 0;
             }
             return $order[$n1] > $order[$n2] ? 1 : -1;
         };
     }
     if (!$sorting instanceof \Closure) {
         throw new \InvalidArgumentException('sortComponents muss eine Closure als Parameter haben (oder ein Array)');
     }
     $this->components->sortBy($sorting);
     return $this;
 }
コード例 #8
0
ファイル: PageEntity.php プロジェクト: pscheit/psc-cms
 /**
  * @return CoMun\Entities\ContentStream[]
  */
 public function getContentStreamsByLocale($revision = 'default')
 {
     return \Psc\Doctrine\Helper::reindex($this->getContentStreamsByRevision($revision), 'locale');
 }
コード例 #9
0
ファイル: ArticleTest.php プロジェクト: pscheit/psc-cms
 /**
  * Dynamic Index
  *
  * Laufzeit O(2*n) und Queries O(1) (nur benötigte im Datenspeicher, dafür komplexeres query (allerdings nach unique-index))
  *
  * Vorteile:
  *    speicher-effizient wenn nicht alle Objekte aus der Tabelle geladen werden müssen
  *    soft-fail für ids möglich wenn man mit OR und DQL selected, auswertung jedoch komplizierter ( und Laufzeit O((2+uniques)*n)
  *
  * Nachteile:
  *    geht nicht für unique-kriterien die aus mehreren Spalten bestehen (denn das geht nicht mit findby), höchstens mit DQL und string verkettung - das würde aber ein where auf einem nicht-index bedeuten, etc
  *    
  */
 protected function hydrateTagsDynamicSelect(array $tagNames)
 {
     $toCollection = array();
     $avaibleTags = \Psc\Doctrine\Helper::reindex($this->tagRepository->findBy(array('name' => $tagNames)), 'label');
     foreach ($tagNames as $tagName) {
         if (array_key_exists($name, $indexTags)) {
             $toCollection[] = $indexTags[$name];
         } else {
             $toCollection[] = new Tag($name);
         }
     }
 }
コード例 #10
0
 public function getLinksByHoster()
 {
     return DoctrineHelper::reindex($this->getLinks()->toArray(), 'hoster');
 }