コード例 #1
0
 /**
  * @param \DataObject $object
  * @param Field $field
  * @throws \ValidationException
  * @throws null
  */
 public function write(\DataObject $object, Field $field)
 {
     if ($object->has_extension('Versioned')) {
         $object->writeToStage('Stage');
         $args = $field->options;
         $publish = isset($args['publish']) ? $args['publish'] : true;
         if ($publish) {
             $object->publish('Stage', 'Live');
         }
     } else {
         $object->write();
     }
     if (!$object->isSeeded()) {
         $seed = new \SeedRecord();
         $seed->SeedClassName = $object->ClassName;
         $seed->SeedID = $object->ID;
         $seed->Key = $field->key;
         $seed->Root = $field->fieldType === Field::FT_ROOT;
         $seed->write();
         $object->setIsSeeded();
     }
 }
コード例 #2
0
 /**
  *
  */
 public function testWrite_WriteVersionedObjects_ObjectsWrittenToLive()
 {
     $this->markTestIncomplete('Need silverstripe-batchwrite compatibility.');
     $batchSizes = array(10, 30, 100, 300);
     foreach ($batchSizes as $batchSize) {
         $writer = new BatchedSeedWriter($batchSize);
         for ($i = 0; $i < 100; $i++) {
             $page = new \SiteTree();
             $page->Title = 'Magical Unicorn Journeys ' . $i;
             $field = $this->createField();
             $writer->write($page, $field);
         }
         $writer->finish();
         $currentStage = \Versioned::current_stage();
         \Versioned::reading_stage('Stage');
         $this->assertEquals(100, \SiteTree::get()->Count());
         \Versioned::reading_stage('Live');
         $this->assertEquals(100, \SiteTree::get()->Count());
         $pages = \SiteTree::get();
         $seeds = \SeedRecord::get();
         $writer->deleteFromStage($pages, 'Stage', 'Live');
         $writer->delete($seeds);
         $writer->finish();
         $this->assertEquals(0, \SiteTree::get()->Count());
         $this->assertEquals(0, \SeedRecord::get()->Count());
         \Versioned::reading_stage($currentStage);
     }
 }
コード例 #3
0
 /**
  * @param null $key
  */
 public function unseed($key = null)
 {
     $this->outputFormatter->beginUnseed();
     // TODO delete many_many tables
     $deleted = array();
     $seeds = \SeedRecord::get();
     if ($key) {
         $seeds = $seeds->filter('Key', $key);
     }
     while ($seeds->Count()) {
         // sort by id desc to delete in reverse
         $seedBatch = $seeds->limit(1000)->sort('ID DESC');
         $classes = array();
         foreach ($seedBatch as $seed) {
             $className = $seed->SeedClassName;
             $classes[$className][] = $seed->SeedID;
             $this->writer->delete($seed);
         }
         foreach ($classes as $className => $ids) {
             $versioned = \DataObject::has_extension($className, 'Versioned');
             if ($versioned) {
                 $this->writer->deleteIDsFromStage($className, $ids, 'Stage', 'Live');
             } else {
                 $this->writer->deleteIDs($className, $ids);
             }
             $deleted[$className] = count($ids);
         }
         $this->writer->finish();
     }
     $this->outputFormatter->reportDataObjectsDeleted($deleted);
 }