コード例 #1
0
 /**
  * Build item resource from a changeset
  *
  * @param ChangeSet $changeSet
  * @return array
  */
 protected function getChangeSetResource(ChangeSet $changeSet)
 {
     $hal = ['_links' => ['self' => ['href' => $this->SetLink($changeSet->ID)]], 'ID' => $changeSet->ID, 'Name' => $changeSet->Name, 'Created' => $changeSet->Created, 'LastEdited' => $changeSet->LastEdited, 'State' => $changeSet->State, 'IsInferred' => $changeSet->IsInferred, 'canEdit' => $changeSet->canEdit(), 'canPublish' => false, '_embedded' => ['items' => []]];
     // Before presenting the changeset to the client,
     // synchronise it with new changes.
     try {
         $changeSet->sync();
         $hal['Description'] = $changeSet->getDescription();
         $hal['canPublish'] = $changeSet->canPublish();
         foreach ($changeSet->Changes() as $changeSetItem) {
             if (!$changeSetItem) {
                 continue;
             }
             /** @var ChangesetItem $changeSetItem */
             $resource = $this->getChangeSetItemResource($changeSetItem);
             $hal['_embedded']['items'][] = $resource;
         }
         $hal['ChangesCount'] = count($hal['_embedded']['items']);
         // An unexpected data exception means that the database is corrupt
     } catch (UnexpectedDataException $e) {
         $hal['Description'] = 'Corrupt database! ' . $e->getMessage();
         $hal['ChangesCount'] = '-';
     }
     return $hal;
 }
コード例 #2
0
 public function testPublish()
 {
     $this->publishAllFixtures();
     $base = $this->objFromFixture(ChangeSetTest_Base::class, 'base');
     $baseID = $base->ID;
     $baseBefore = $base->Version;
     $end1 = $this->objFromFixture(ChangeSetTest_End::class, 'end1');
     $end1ID = $end1->ID;
     $end1Before = $end1->Version;
     // Create a new changest
     $changeset = new ChangeSet();
     $changeset->write();
     $changeset->addObject($base);
     $changeset->addObject($end1);
     // Make a lot of changes
     // - ChangeSetTest_Base.base modified
     // - ChangeSetTest_End.end1 deleted
     // - new ChangeSetTest_Mid added
     $base->Foo = 343;
     $base->write();
     $baseAfter = $base->Version;
     $midNew = new ChangeSetTest_Mid();
     $midNew->Bar = 39;
     $midNew->write();
     $midNewID = $midNew->ID;
     $midNewAfter = $midNew->Version;
     $end1->delete();
     $changeset->addObject($midNew);
     // Publish
     $this->logInWithPermission('ADMIN');
     $this->assertTrue($changeset->canPublish());
     $this->assertTrue($changeset->isSynced());
     $changeset->publish();
     $this->assertEquals(ChangeSet::STATE_PUBLISHED, $changeset->State);
     // Check each item has the correct before/after version applied
     $baseChange = $changeset->Changes()->filter(['ObjectClass' => ChangeSetTest_Base::class, 'ObjectID' => $baseID])->first();
     $this->assertEquals((int) $baseBefore, (int) $baseChange->VersionBefore);
     $this->assertEquals((int) $baseAfter, (int) $baseChange->VersionAfter);
     $this->assertEquals((int) $baseChange->VersionBefore + 1, (int) $baseChange->VersionAfter);
     $this->assertEquals((int) $baseChange->VersionAfter, (int) Versioned::get_versionnumber_by_stage(ChangeSetTest_Base::class, Versioned::LIVE, $baseID));
     $end1Change = $changeset->Changes()->filter(['ObjectClass' => ChangeSetTest_End::class, 'ObjectID' => $end1ID])->first();
     $this->assertEquals((int) $end1Before, (int) $end1Change->VersionBefore);
     $this->assertEquals(0, (int) $end1Change->VersionAfter);
     $this->assertEquals(0, (int) Versioned::get_versionnumber_by_stage(ChangeSetTest_End::class, Versioned::LIVE, $end1ID));
     $midNewChange = $changeset->Changes()->filter(['ObjectClass' => ChangeSetTest_Mid::class, 'ObjectID' => $midNewID])->first();
     $this->assertEquals(0, (int) $midNewChange->VersionBefore);
     $this->assertEquals((int) $midNewAfter, (int) $midNewChange->VersionAfter);
     $this->assertEquals((int) $midNewAfter, (int) Versioned::get_versionnumber_by_stage(ChangeSetTest_Mid::class, Versioned::LIVE, $midNewID));
     // Test trying to re-publish is blocked
     $this->setExpectedException('BadMethodCallException', "ChangeSet can't be published if it has been already published or reverted.");
     $changeset->publish();
 }
コード例 #3
0
 /**
  * Build item resource from a changeset
  *
  * @param ChangeSet $changeSet
  * @return array
  */
 protected function getChangeSetResource(ChangeSet $changeSet)
 {
     // Before presenting the changeset to the client,
     // synchronise it with new changes.
     $changeSet->sync();
     $hal = ['_links' => ['self' => ['href' => $this->SetLink($changeSet->ID)]], 'ID' => $changeSet->ID, 'Name' => $changeSet->Name, 'Description' => $changeSet->getDescription(), 'Created' => $changeSet->Created, 'LastEdited' => $changeSet->LastEdited, 'State' => $changeSet->State, 'canEdit' => $changeSet->canEdit(), 'canPublish' => $changeSet->canPublish(), '_embedded' => ['items' => []]];
     foreach ($changeSet->Changes() as $changeSetItem) {
         if (!$changeSetItem) {
             continue;
         }
         /** @var ChangesetItem $changeSetItem */
         $resource = $this->getChangeSetItemResource($changeSetItem);
         $hal['_embedded']['items'][] = $resource;
     }
     $hal['ChangesCount'] = count($hal['_embedded']['items']);
     return $hal;
 }