public static function getLocaleFromHost($host = null)
 {
     if (!$host) {
         $host = $_SERVER["HTTP_HOST"];
     }
     $keys = array_keys(self::$locale_domains, $host);
     if ($keys && isset($keys[0])) {
         $locale = $keys[0];
     } elseif (DataObject::has_extension('SiteTree', 'Translatable')) {
         $locale = Translatable::get_current_locale();
     } else {
         $locale = i18n::get_locale();
     }
     return $locale;
 }
 /**
  * @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();
     }
 }
 /**
  * @param \DataObject $object
  * @param Field $field
  */
 public function write(\DataObject $object, Field $field)
 {
     $className = $object->class;
     // cache has_extension call
     if (!isset($this->isVersioned[$className])) {
         $this->isVersioned[$className] = $object->has_extension('Versioned');
     }
     if ($this->isVersioned[$className]) {
         $args = $field->options;
         if (!isset($args['publish']) || $args['publish']) {
             $this->batchWriter->writeToStage($object, 'Stage', 'Live');
         } else {
             $this->batchWriter->writeToStage($object, 'Stage');
         }
     } else {
         $this->batchWriter->write($object);
     }
     $isSeeded = $object->isSeeded();
     if (!$isSeeded) {
         $isRoot = $field->fieldType === Field::FT_ROOT;
         $dataObjectProperty = $this->dataObjectRecordProperty;
         $batchWriter = $this->batchWriter;
         $object->onAfterExistsCallback(function ($object) use($field, $isRoot, $dataObjectProperty, $batchWriter) {
             $seed = \QuickDataObject::create('SeedRecord');
             $objectFields = $dataObjectProperty->getValue($object);
             $fields = $dataObjectProperty->getValue($seed);
             $fields['SeedClassName'] = $object->class;
             $fields['SeedID'] = $objectFields['ID'];
             $fields['Key'] = $field->key;
             $fields['Root'] = $isRoot;
             $dataObjectProperty->setValue($seed, $fields);
             $batchWriter->write($seed);
         });
         $object->setIsSeeded();
     }
 }
 public function Sortable()
 {
     return DataObject::has_extension($this->sourceClass(), 'SortableDataObject');
 }
 /**
  * @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);
 }